{"version":3,"file":"FileUploadInput.cjs","sources":["../src/utils/no-op.ts","../src/FileUploadInput/FileUploadInput.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-empty-function\nexport const NO_OP = () => {};\n","import { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\n\nimport { Button } from '../Button/Button.tsx';\nimport type {\n  ComponentProps,\n  SlotComponentPropsWithoutOverride,\n} from '../components.ts';\nimport { useFieldContext } from '../Form/useFieldContext.ts';\nimport { UploadIcon } from '../icons/solid.tsx';\nimport { assocDefaultStyle } from '../utils/assign-default-style.ts';\nimport { mergeRootSlotPropsToComponentProps } from '../utils/merge-root-slot-props-to-component-prop.ts';\nimport { NO_OP } from '../utils/no-op.ts';\n\nexport type UploadedFileLikeObject = {\n  name: string;\n  type: string;\n  url: string;\n};\ninterface SlotProps {\n  root?: SlotComponentPropsWithoutOverride<'button', object>;\n}\n\ntype FileUploadProps = ComponentProps<\n  SlotProps,\n  {\n    name?: string;\n    onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n  }\n>;\n\nexport const FileUploadInput = forwardRef<HTMLInputElement, FileUploadProps>(\n  function FileUploadInput(\n    {\n      children,\n      'data-testid': testId,\n      disableDefaultClasses,\n      slotProps: givenSlotProps,\n      ...rest\n    },\n    ref,\n  ) {\n    const { formControlContext, id, name } = useFieldContext({\n      onChange: rest.onChange || NO_OP,\n    });\n    const { disabled, onChange, required, value } = formControlContext || {};\n    const inputRef = useRef<HTMLInputElement>(null);\n    const onUploadButtonClick = useCallback(() => {\n      inputRef.current!.showPicker();\n    }, [inputRef]);\n\n    let slotProps = givenSlotProps;\n\n    if (!disableDefaultClasses) {\n      slotProps = assocDefaultStyle<SlotProps>({\n        slotWithDefaultClasses: {\n          root: 'tw-flex tw-flex-row tw-gap-0.5',\n        },\n      })(givenSlotProps);\n    }\n    const rootProps = mergeRootSlotPropsToComponentProps()(slotProps, rest);\n    useImperativeHandle(ref, () => inputRef.current!);\n    return (\n      <div className={'tw-grid tw-grid-rows-[1fr_0px]'}>\n        <Button\n          data-testid={testId}\n          disableDefaultClasses={disableDefaultClasses}\n          disabled={disabled}\n          slotProps={{\n            root: { ...slotProps?.root, onClick: onUploadButtonClick },\n          }}\n          {...rootProps}\n        >\n          <UploadIcon />\n          {children}\n        </Button>\n        <input\n          className={\n            'tw-form-input tw-h-px tw-w-px tw-justify-self-center tw-border-none tw-p-0 focus:tw-border-none focus:tw-shadow-none focus:tw-ring-0'\n          }\n          data-testid={testId && `${testId}-raw-upload-input`}\n          id={id}\n          name={name || rootProps.name}\n          onChange={onChange}\n          ref={inputRef}\n          required={value ? false : required}\n          type=\"file\"\n        />\n      </div>\n    );\n  },\n);\n"],"names":["NO_OP","FileUploadInput","forwardRef","children","testId","disableDefaultClasses","givenSlotProps","rest","ref","formControlContext","id","name","useFieldContext","disabled","onChange","required","value","inputRef","useRef","onUploadButtonClick","useCallback","slotProps","assocDefaultStyle","rootProps","mergeRootSlotPropsToComponentProps","useImperativeHandle","jsxs","Button","jsx","UploadIcon"],"mappings":"0wBACO,MAAMA,EAAQ,IAAM,CAAC,EC6BfC,EAAkBC,EAAA,WAC7B,SACE,CACE,SAAAC,EACA,cAAeC,EACf,sBAAAC,EACA,UAAWC,EACX,GAAGC,GAELC,EACA,CACA,KAAM,CAAE,mBAAAC,EAAoB,GAAAC,EAAI,KAAAC,CAAA,EAASC,EAAAA,gBAAgB,CACvD,SAAUL,EAAK,UAAYP,CAAA,CAC5B,EACK,CAAE,SAAAa,EAAU,SAAAC,EAAU,SAAAC,EAAU,MAAAC,CAAM,EAAIP,GAAsB,GAChEQ,EAAWC,SAAyB,IAAI,EACxCC,EAAsBC,EAAAA,YAAY,IAAM,CAC5CH,EAAS,QAAS,YAAW,EAC5B,CAACA,CAAQ,CAAC,EAEb,IAAII,EAAYf,EAEXD,IACHgB,EAAYC,EAAAA,kBAA6B,CACvC,uBAAwB,CACtB,KAAM,gCACR,CAAA,CACD,EAAEhB,CAAc,GAEnB,MAAMiB,EAAYC,EAAA,mCAAA,EAAqCH,EAAWd,CAAI,EAClDkB,OAAAA,EAAAA,oBAAAjB,EAAK,IAAMS,EAAS,OAAQ,EAE9CS,EAAA,kBAAA,KAAC,MAAI,CAAA,UAAW,iCACd,SAAA,CAAAA,EAAA,kBAAA,KAACC,EAAA,OAAA,CACC,cAAavB,EACb,sBAAAC,EACA,SAAAQ,EACA,UAAW,CACT,KAAM,CAAE,GAAGQ,GAAA,YAAAA,EAAW,KAAM,QAASF,CAAoB,CAC3D,EACC,GAAGI,EAEJ,SAAA,CAAAK,EAAA,kBAAA,IAACC,EAAW,WAAA,EAAA,EACX1B,CAAA,CAAA,CACH,EACAyB,EAAA,kBAAA,IAAC,QAAA,CACC,UACE,uIAEF,cAAaxB,GAAU,GAAGA,CAAM,oBAChC,GAAAM,EACA,KAAMC,GAAQY,EAAU,KACxB,SAAAT,EACA,IAAKG,EACL,SAAUD,EAAQ,GAAQD,EAC1B,KAAK,MAAA,CACP,CACF,CAAA,CAAA,CAEJ,CACF"}