{"version":3,"sources":["../src/dropzone.tsx"],"sourcesContent":["import type {\n  ColorModeToken,\n  CSS,\n  CSSUIObject,\n  FC,\n  HTMLUIProps,\n  ThemeProps,\n} from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport type { LoadingProps } from \"@yamada-ui/loading\"\nimport type { FadeProps } from \"@yamada-ui/transitions\"\nimport type { Merge } from \"@yamada-ui/utils\"\nimport type { ForwardedRef, PropsWithChildren } from \"react\"\nimport type {\n  Accept,\n  DropzoneOptions as ReactDropzoneOptions,\n} from \"react-dropzone-esm\"\nimport {\n  forwardRef,\n  omitThemeProps,\n  ui,\n  useComponentMultiStyle,\n} from \"@yamada-ui/core\"\nimport {\n  formControlProperties,\n  useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport { Loading } from \"@yamada-ui/loading\"\nimport { Fade } from \"@yamada-ui/transitions\"\nimport {\n  assignRef,\n  createContext,\n  cx,\n  dataAttr,\n  isArray,\n  splitObject,\n} from \"@yamada-ui/utils\"\nimport { useId } from \"react\"\nimport { useDropzone } from \"react-dropzone-esm\"\n\ninterface DropzoneContext {\n  dragAccept: boolean\n  dragIdle: boolean\n  dragReject: boolean\n  styles: { [key: string]: CSSUIObject | undefined }\n  loading?: boolean\n}\n\nconst [DropzoneProvider, useDropzoneContext] = createContext<DropzoneContext>({\n  name: \"DropzoneContext\",\n  errorMessage: `useDropzoneContext returned is 'undefined'. Seems you forgot to wrap the components in \"<Dropzone />\"`,\n})\n\ninterface DropzoneOptions {\n  /**\n   * File types to accept.\n   */\n  accept?: Accept | string[]\n  /**\n   * The border color when the input is invalid.\n   */\n  errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n  /**\n   * The border color when the input is focused.\n   */\n  focusBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n  /**\n   * If `true`, display the dropzone loading icon.\n   *\n   * @default false\n   *\n   * @deprecated Use `loading` instead.\n   */\n  isLoading?: boolean\n  /**\n   * If `true`, display the dropzone loading icon.\n   *\n   * @default false\n   */\n  loading?: boolean\n  /**\n   * Ref to a open function.\n   */\n  openRef?: ForwardedRef<() => undefined | void>\n  /**\n   * Props for dropzone loading icon element.\n   */\n  loadingProps?: LoadingProps\n  /**\n   * Props for dropzone overlay element.\n   */\n  overlayProps?: FadeProps\n}\n\nexport interface DropzoneProps\n  extends Merge<HTMLUIProps, Omit<ReactDropzoneOptions, \"accept\">>,\n    ThemeProps<\"Dropzone\">,\n    DropzoneOptions,\n    FormControlOptions {}\n\n/**\n * `Dropzone` is a component used for uploading files via drag and drop.\n *\n * @see Docs https://yamada-ui.com/components/forms/dropzone\n */\nexport const Dropzone = forwardRef<DropzoneProps, \"input\">((props, ref) => {\n  const [styles, mergedProps] = useComponentMultiStyle(\"Dropzone\", props)\n  const {\n    id,\n    name,\n    className,\n    accept,\n    autoFocus,\n    children,\n    isLoading,\n    loading = isLoading,\n    maxFiles,\n    maxSize,\n    multiple,\n    noClick,\n    noDrag,\n    noDragEventsBubbling,\n    noKeyboard,\n    openRef,\n    preventDropOnDocument,\n    useFsAccessApi,\n    loadingProps,\n    overlayProps,\n    onDragEnter,\n    onDragLeave,\n    onDragOver,\n    onDrop,\n    onDropAccepted,\n    onDropRejected,\n    onFileDialogCancel,\n    onFileDialogOpen,\n    ...rest\n  } = useFormControlProps(omitThemeProps(mergedProps))\n  const labelledbyId = useId()\n  const disabled = loading || rest.disabled || rest.readOnly\n  const [\n    { \"aria-readonly\": ariaReadOnly, ...formControlProps },\n    containerProps,\n  ] = splitObject(rest, formControlProperties)\n  const {\n    isDragAccept: dragAccept,\n    isDragReject: dragReject,\n    open,\n    getInputProps,\n    getRootProps,\n  } = useDropzone({\n    accept: isArray(accept)\n      ? accept.reduce((prev, current) => ({ ...prev, [current]: [] }), {})\n      : accept,\n    autoFocus,\n    disabled,\n    maxFiles,\n    maxSize,\n    multiple,\n    noClick,\n    noDrag,\n    noDragEventsBubbling,\n    noKeyboard,\n    preventDropOnDocument,\n    useFsAccessApi,\n    onDragEnter,\n    onDragLeave,\n    onDragOver,\n    onDrop,\n    onDropAccepted,\n    onDropRejected,\n    onFileDialogCancel,\n    onFileDialogOpen,\n  })\n  const dragIdle = !dragAccept && !dragReject\n  const css: CSSUIObject = {\n    alignItems: \"center\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    position: \"relative\",\n    ...styles.container,\n  }\n\n  assignRef(openRef, open)\n\n  return (\n    <DropzoneProvider\n      value={{\n        dragAccept,\n        dragIdle,\n        dragReject,\n        loading,\n        styles,\n      }}\n    >\n      <ui.div\n        id={labelledbyId}\n        className={cx(\"ui-dropzone\", className)}\n        __css={css}\n        {...formControlProps}\n        {...containerProps}\n        {...getRootProps({})}\n        data-accept={dataAttr(dragAccept)}\n        data-idle={dataAttr(dragIdle)}\n        data-loading={dataAttr(loading)}\n        data-reject={dataAttr(dragReject)}\n      >\n        <DropzoneLoadingOverlay loadingProps={loadingProps} {...overlayProps} />\n\n        <ui.input\n          id={id}\n          ref={ref}\n          name={name}\n          aria-labelledby={labelledbyId}\n          aria-readonly={ariaReadOnly}\n          {...formControlProps}\n          {...getInputProps()}\n        />\n        {children}\n      </ui.div>\n    </DropzoneProvider>\n  )\n})\n\nDropzone.displayName = \"Dropzone\"\nDropzone.__ui__ = \"Dropzone\"\n\ninterface DropzoneLoadingOverlayProps extends FadeProps {\n  loadingProps?: LoadingProps\n}\n\nconst DropzoneLoadingOverlay: FC<DropzoneLoadingOverlayProps> = ({\n  loadingProps,\n  ...rest\n}) => {\n  const { loading, styles } = useDropzoneContext()\n\n  const css: CSSUIObject = {\n    alignItems: \"center\",\n    display: \"flex\",\n    h: \"100%\",\n    justifyContent: \"center\",\n    left: 0,\n    position: \"absolute\",\n    top: 0,\n    w: \"100%\",\n    ...styles.overlay,\n  }\n\n  return (\n    <Fade\n      className=\"ui-dropzone__overlay\"\n      open={loading}\n      unmountOnExit\n      __css={css}\n      {...rest}\n    >\n      <Loading\n        className=\"ui-dropzone__overlay__loading\"\n        fontSize=\"4xl\"\n        {...loadingProps}\n      />\n    </Fade>\n  )\n}\n\nDropzoneLoadingOverlay.displayName = \"DropzoneLoadingOverlay\"\nDropzoneLoadingOverlay.__ui__ = \"DropzoneLoadingOverlay\"\n\nexport const DropzoneAccept: FC<PropsWithChildren> = ({ children }) => {\n  const { dragAccept } = useDropzoneContext()\n\n  return dragAccept ? children : null\n}\n\nDropzoneAccept.displayName = \"DropzoneAccept\"\nDropzoneAccept.__ui__ = \"DropzoneAccept\"\n\nexport const DropzoneReject: FC<PropsWithChildren> = ({ children }) => {\n  const { dragReject } = useDropzoneContext()\n\n  return dragReject ? children : null\n}\n\nDropzoneReject.displayName = \"DropzoneReject\"\nDropzoneReject.__ui__ = \"DropzoneReject\"\n\nexport const DropzoneIdle: FC<PropsWithChildren> = ({ children }) => {\n  const { dragIdle } = useDropzoneContext()\n\n  return dragIdle ? children : null\n}\n\nDropzoneIdle.displayName = \"DropzoneIdle\"\nDropzoneIdle.__ui__ = \"DropzoneIdle\"\n"],"mappings":"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","names":[]}