{"version":3,"sources":["../src/components/form/inputs.tsx"],"names":["React","Input","type","name","value","defaultValue","placeholder","id","styles","classes","isDisabled","disabled","readOnly","required","validationState","errorMessage","hintText","onChange","onBlur","onFocus","onKeyDown","onEnter","maxLength","minLength","pattern","autoComplete","autoFocus","inputMode","props","ref","isInputDisabled","resolveDisabledState","disabledProps","handlers","useDisabledState","e","isInvalid","describedByIds","ariaDescribedBy","accessiblePlaceholder","fp_default","inputs_default"],"mappings":"2HAAA,OAAOA,MAAW,QAoDX,IAAMC,EAAQD,EAAM,WACzB,CACE,CACE,KAAAE,EAAO,OACP,KAAAC,EACA,MAAAC,EACA,aAAAC,EACA,YAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EAAW,GACX,gBAAAC,EAAkB,OAClB,aAAAC,EACA,SAAAC,EACA,SAAAC,EACA,OAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,UAAAC,EACA,QAAAC,EACA,aAAAC,EACA,UAAAC,EAAY,GACZ,UAAAC,EACA,GAAGC,CACL,EACAC,IACG,CAEH,IAAMC,EAAkBC,EAAqBpB,EAAUD,CAAU,EAG3D,CAAE,cAAAsB,EAAe,SAAAC,CAAS,EAAIC,EAClCJ,EACA,CACE,SAAU,CACR,SAAAb,EACA,OAAAC,EACA,UAAYiB,GAA6C,CAEnDA,EAAE,MAAQ,SAAWd,GACvBA,EAAQc,CAAC,EAGPf,GACFA,EAAUe,CAAC,CAEf,CAGF,EAEA,UAAW1B,CACb,CACF,EAGM2B,EAAYtB,IAAoB,UAGhCuB,EAA2B,CAAC,EAC9BtB,GAAgBR,GAClB8B,EAAe,KAAK,GAAG9B,CAAE,QAAQ,EAE/BS,GAAYT,GACd8B,EAAe,KAAK,GAAG9B,CAAE,OAAO,EAElC,IAAM+B,EACJD,EAAe,OAAS,EAAIA,EAAe,KAAK,GAAG,EAAI,OAGnDE,EACJjC,IAAgBO,EAAW,KAAKX,CAAI,SAAW,GAAGA,CAAI,UAExD,OACEF,EAAA,cAACwC,EAAA,CACC,GAAG,QACH,IAAKX,EACL,GAAItB,EACJ,KAAML,EACN,KAAMC,EACN,MAAOC,EACP,aAAcC,EACd,YAAakC,EACb,UAAWP,EAAc,UACzB,OAAQxB,EACR,SAAUI,EACV,SAAUC,EACV,UAAWS,EACX,UAAWC,EACX,QAASC,EACT,aAAcC,EACd,UAAWC,EACX,UAAWC,EAEV,GAAGM,EACJ,QAASd,EAET,gBAAea,EAAc,eAAe,EAC5C,gBAAepB,EACf,gBAAeC,EACf,eAAcuB,EACd,mBAAkBE,EAElB,kBAAiBxB,EAChB,GAAGc,EACN,CAEJ,CACF,EAEA3B,EAAM,YAAc,QACpB,IAAOwC,EAAQxC","sourcesContent":["import React from \"react\";\nimport FP from \"../fp\";\nimport type { InputProps } from \"./form.types\";\nimport { useDisabledState } from \"../../hooks/use-disabled-state\";\nimport { resolveDisabledState } from \"../../utils/accessibility\";\n\nexport type { InputProps } from \"./form.types\";\n\n/**\n * Input component - Accessible text input with validation support\n *\n * A flexible input component that supports various input types, validation states,\n * and proper ARIA attributes for accessibility. Integrates seamlessly with the\n * Field component for complete form control composition.\n *\n * @component\n * @example\n * // Basic text input\n * <Input\n *   id=\"username\"\n *   name=\"username\"\n *   placeholder=\"Enter username\"\n *   required\n * />\n *\n * @example\n * // Input with error state\n * <Input\n *   id=\"email\"\n *   type=\"email\"\n *   validationState=\"invalid\"\n *   errorMessage=\"Please enter a valid email\"\n *   aria-describedby=\"email-error\"\n * />\n *\n * @example\n * // Controlled input with validation\n * <Input\n *   id=\"password\"\n *   type=\"password\"\n *   value={password}\n *   onChange={(e) => setPassword(e.target.value)}\n *   minLength={8}\n *   required\n * />\n *\n * @param {InputProps} props - Component props\n * @returns {JSX.Element} Input element with proper accessibility attributes\n *\n * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/error-identification.html|WCAG 3.3.1 Error Identification}\n * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value.html|WCAG 4.1.2 Name, Role, Value}\n */\nexport const Input = React.forwardRef<HTMLInputElement, InputProps>(\n  (\n    {\n      type = \"text\",\n      name,\n      value,\n      defaultValue,\n      placeholder,\n      id,\n      styles,\n      classes,\n      isDisabled, // Legacy support\n      disabled,\n      readOnly,\n      required = false,\n      validationState = \"none\",\n      errorMessage,\n      hintText,\n      onChange,\n      onBlur,\n      onFocus,\n      onKeyDown,\n      onEnter,\n      maxLength,\n      minLength,\n      pattern,\n      autoComplete,\n      autoFocus = false,\n      inputMode,\n      ...props\n    },\n    ref\n  ) => {\n    // Support both `disabled` and `isDisabled` props (legacy compatibility)\n    const isInputDisabled = resolveDisabledState(disabled, isDisabled);\n\n    // Use the disabled state hook with enhanced API for automatic className merging\n    const { disabledProps, handlers } = useDisabledState<HTMLInputElement>(\n      isInputDisabled,\n      {\n        handlers: {\n          onChange,\n          onBlur,\n          onKeyDown: (e: React.KeyboardEvent<HTMLInputElement>) => {\n            // Handle Enter key press for accessibility\n            if (e.key === \"Enter\" && onEnter) {\n              onEnter(e);\n            }\n            // Always call consumer's onKeyDown if provided\n            if (onKeyDown) {\n              onKeyDown(e);\n            }\n          },\n          // Note: onFocus is NOT wrapped to allow focus on disabled inputs\n          // This is handled automatically by useDisabledState\n        },\n        // Automatic className merging - hook combines disabled class with user classes\n        className: classes,\n      }\n    );\n\n    // Determine aria-invalid based on validation state\n    const isInvalid = validationState === \"invalid\";\n\n    // Generate describedby IDs for error and hint text\n    const describedByIds: string[] = [];\n    if (errorMessage && id) {\n      describedByIds.push(`${id}-error`);\n    }\n    if (hintText && id) {\n      describedByIds.push(`${id}-hint`);\n    }\n    const ariaDescribedBy =\n      describedByIds.length > 0 ? describedByIds.join(\" \") : undefined;\n\n    // Generate accessible placeholder if not provided\n    const accessiblePlaceholder =\n      placeholder || (required ? `* ${type} input` : `${type} input`);\n\n    return (\n      <FP\n        as=\"input\"\n        ref={ref}\n        id={id}\n        type={type}\n        name={name}\n        value={value}\n        defaultValue={defaultValue}\n        placeholder={accessiblePlaceholder}\n        className={disabledProps.className}\n        styles={styles}\n        readOnly={readOnly}\n        required={required}\n        maxLength={maxLength}\n        minLength={minLength}\n        pattern={pattern}\n        autoComplete={autoComplete}\n        autoFocus={autoFocus}\n        inputMode={inputMode}\n        // Event handlers (wrapped by useDisabledState)\n        {...handlers}\n        onFocus={onFocus}\n        // ARIA attributes\n        aria-disabled={disabledProps[\"aria-disabled\"]}\n        aria-readonly={readOnly}\n        aria-required={required}\n        aria-invalid={isInvalid}\n        aria-describedby={ariaDescribedBy}\n        // Data attributes for styling\n        data-validation={validationState}\n        {...props}\n      />\n    );\n  }\n);\n\nInput.displayName = \"Input\";\nexport default Input;\n"]}