@yamada-ui/file-button 1.0.40 → 1.1.0-dev-20240724054944

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,121 @@
1
+ "use client"
2
+
3
+ // src/file-button.tsx
4
+ import { Button } from "@yamada-ui/button";
5
+ import {
6
+ ui,
7
+ forwardRef,
8
+ useComponentStyle,
9
+ omitThemeProps
10
+ } from "@yamada-ui/core";
11
+ import {
12
+ formControlProperties,
13
+ useFormControlProps
14
+ } from "@yamada-ui/form-control";
15
+ import {
16
+ assignRef,
17
+ cx,
18
+ handlerAll,
19
+ isFunction,
20
+ isNull,
21
+ mergeRefs,
22
+ pickObject
23
+ } from "@yamada-ui/utils";
24
+ import { useCallback, useRef } from "react";
25
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
26
+ var FileButton = forwardRef((props, ref) => {
27
+ const [styles, mergedProps] = useComponentStyle("FileButton", props);
28
+ const computedProps = omitThemeProps(mergedProps);
29
+ let {
30
+ className,
31
+ resetRef,
32
+ as: As,
33
+ children,
34
+ id,
35
+ name,
36
+ accept,
37
+ multiple,
38
+ form,
39
+ "aria-readonly": ariaReadonly,
40
+ onClick: onClickProp,
41
+ onChange: onChangeProp,
42
+ ...rest
43
+ } = useFormControlProps(computedProps);
44
+ const { disabled, readOnly, required, "aria-invalid": isInvalid } = rest;
45
+ const inputRef = useRef(null);
46
+ const onClick = useCallback(() => {
47
+ var _a;
48
+ if (disabled || readOnly) return;
49
+ (_a = inputRef.current) == null ? void 0 : _a.click();
50
+ }, [disabled, readOnly]);
51
+ const onChange = useCallback(
52
+ (ev) => {
53
+ const files = !isNull(ev.currentTarget.files) ? Array.from(ev.currentTarget.files) : void 0;
54
+ onChangeProp == null ? void 0 : onChangeProp(files);
55
+ },
56
+ [onChangeProp]
57
+ );
58
+ const onReset = useCallback(() => {
59
+ if (inputRef.current) inputRef.current.value = "";
60
+ }, []);
61
+ if (!isFunction(children)) {
62
+ const Component = As || Button;
63
+ children = /* @__PURE__ */ jsx(
64
+ Component,
65
+ {
66
+ className: cx("ui-file-button", className),
67
+ __css: styles,
68
+ __overrideTheme: !As,
69
+ ...rest,
70
+ onClick: handlerAll(onClickProp, onClick),
71
+ children
72
+ }
73
+ );
74
+ }
75
+ assignRef(resetRef, onReset);
76
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
77
+ /* @__PURE__ */ jsx(
78
+ ui.input,
79
+ {
80
+ ref: mergeRefs(inputRef, ref),
81
+ type: "file",
82
+ "aria-hidden": true,
83
+ tabIndex: -1,
84
+ id,
85
+ name,
86
+ form,
87
+ accept,
88
+ multiple,
89
+ style: {
90
+ border: "0px",
91
+ clip: "rect(0px, 0px, 0px, 0px)",
92
+ height: "1px",
93
+ width: "1px",
94
+ margin: "-1px",
95
+ padding: "0px",
96
+ overflow: "hidden",
97
+ whiteSpace: "nowrap",
98
+ position: "absolute"
99
+ },
100
+ onChange,
101
+ "aria-readonly": ariaReadonly,
102
+ ...pickObject(rest, formControlProperties)
103
+ }
104
+ ),
105
+ isFunction(children) ? children({
106
+ onClick,
107
+ disabled,
108
+ readOnly,
109
+ required,
110
+ isDisabled: disabled,
111
+ isReadOnly: readOnly,
112
+ isRequired: required,
113
+ isInvalid
114
+ }) : children
115
+ ] });
116
+ });
117
+
118
+ export {
119
+ FileButton
120
+ };
121
+ //# sourceMappingURL=chunk-MPIK26NG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/file-button.tsx"],"sourcesContent":["import type { ButtonProps } from \"@yamada-ui/button\"\nimport { Button } from \"@yamada-ui/button\"\nimport type { ColorModeToken, CSS, ThemeProps } from \"@yamada-ui/core\"\nimport {\n ui,\n forwardRef,\n useComponentStyle,\n omitThemeProps,\n} from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport {\n assignRef,\n cx,\n handlerAll,\n isFunction,\n isNull,\n mergeRefs,\n pickObject,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, ReactNode } from \"react\"\nimport { useCallback, useRef } from \"react\"\n\ntype Props = {\n onClick: () => void\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n} & FormControlOptions\n\ntype FileButtonOptions = {\n /**\n * The border color when the button is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * Function to be called when a file change event occurs.\n */\n onChange?: (files: File[] | undefined) => void\n children?: ReactNode | ((props: Props) => ReactNode)\n /**\n * Ref to a reset function.\n */\n resetRef?: ForwardedRef<() => void>\n}\n\ntype InputProps = Partial<Pick<HTMLInputElement, \"accept\" | \"multiple\">>\n\nexport type FileButtonProps = Omit<ButtonProps, \"onChange\" | \"children\"> &\n ThemeProps<\"FileButton\"> &\n InputProps &\n FileButtonOptions &\n FormControlOptions\n\n/**\n * `FileButton` is a button component used for users to select files.\n *\n * @see Docs https://yamada-ui.com/components/forms/file-button\n */\nexport const FileButton = forwardRef<FileButtonProps, \"input\">((props, ref) => {\n const [styles, mergedProps] = useComponentStyle(\"FileButton\", props)\n const computedProps = omitThemeProps(mergedProps)\n let {\n className,\n resetRef,\n as: As,\n children,\n id,\n name,\n accept,\n multiple,\n form,\n \"aria-readonly\": ariaReadonly,\n onClick: onClickProp,\n onChange: onChangeProp,\n ...rest\n } = useFormControlProps(computedProps)\n const { disabled, readOnly, required, \"aria-invalid\": isInvalid } = rest\n const inputRef = useRef<HTMLInputElement>(null)\n\n const onClick = useCallback(() => {\n if (disabled || readOnly) return\n\n inputRef.current?.click()\n }, [disabled, readOnly])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n const files = !isNull(ev.currentTarget.files)\n ? Array.from(ev.currentTarget.files)\n : undefined\n\n onChangeProp?.(files)\n },\n [onChangeProp],\n )\n\n const onReset = useCallback(() => {\n if (inputRef.current) inputRef.current.value = \"\"\n }, [])\n\n if (!isFunction(children)) {\n const Component = As || Button\n\n children = (\n <Component\n className={cx(\"ui-file-button\", className)}\n __css={styles}\n __overrideTheme={!As}\n {...rest}\n onClick={handlerAll(onClickProp, onClick)}\n >\n {children}\n </Component>\n )\n }\n\n assignRef(resetRef, onReset)\n\n return (\n <>\n <ui.input\n ref={mergeRefs(inputRef, ref)}\n type=\"file\"\n aria-hidden\n tabIndex={-1}\n id={id}\n name={name}\n form={form}\n accept={accept}\n multiple={multiple}\n style={{\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }}\n onChange={onChange}\n aria-readonly={ariaReadonly}\n {...pickObject(rest, formControlProperties)}\n />\n\n {isFunction(children)\n ? children({\n onClick,\n disabled,\n readOnly,\n required,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid,\n })\n : children}\n </>\n )\n})\n"],"mappings":";;;AACA,SAAS,cAAc;AAEvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,aAAa,cAAc;AAoF9B,SAeF,UAfE,KAeF,YAfE;AA9CC,IAAM,aAAa,WAAqC,CAAC,OAAO,QAAQ;AAC7E,QAAM,CAAC,QAAQ,WAAW,IAAI,kBAAkB,cAAc,KAAK;AACnE,QAAM,gBAAgB,eAAe,WAAW;AAChD,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,GAAG;AAAA,EACL,IAAI,oBAAoB,aAAa;AACrC,QAAM,EAAE,UAAU,UAAU,UAAU,gBAAgB,UAAU,IAAI;AACpE,QAAM,WAAW,OAAyB,IAAI;AAE9C,QAAM,UAAU,YAAY,MAAM;AAnFpC;AAoFI,QAAI,YAAY,SAAU;AAE1B,mBAAS,YAAT,mBAAkB;AAAA,EACpB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,QAAM,WAAW;AAAA,IACf,CAAC,OAAsC;AACrC,YAAM,QAAQ,CAAC,OAAO,GAAG,cAAc,KAAK,IACxC,MAAM,KAAK,GAAG,cAAc,KAAK,IACjC;AAEJ,mDAAe;AAAA,IACjB;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,UAAU,YAAY,MAAM;AAChC,QAAI,SAAS,QAAS,UAAS,QAAQ,QAAQ;AAAA,EACjD,GAAG,CAAC,CAAC;AAEL,MAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,UAAM,YAAY,MAAM;AAExB,eACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,kBAAkB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP,iBAAiB,CAAC;AAAA,QACjB,GAAG;AAAA,QACJ,SAAS,WAAW,aAAa,OAAO;AAAA,QAEvC;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,YAAU,UAAU,OAAO;AAE3B,SACE,iCACE;AAAA;AAAA,MAAC,GAAG;AAAA,MAAH;AAAA,QACC,KAAK,UAAU,UAAU,GAAG;AAAA,QAC5B,MAAK;AAAA,QACL,eAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,QACA,iBAAe;AAAA,QACd,GAAG,WAAW,MAAM,qBAAqB;AAAA;AAAA,IAC5C;AAAA,IAEC,WAAW,QAAQ,IAChB,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,IACF,CAAC,IACD;AAAA,KACN;AAEJ,CAAC;","names":[]}
@@ -1,5 +1,5 @@
1
1
  import * as _yamada_ui_core from '@yamada-ui/core';
2
- import { ColorModeToken, CSS } from '@yamada-ui/core';
2
+ import { ThemeProps, ColorModeToken, CSS } from '@yamada-ui/core';
3
3
  import { ButtonProps } from '@yamada-ui/button';
4
4
  import { FormControlOptions } from '@yamada-ui/form-control';
5
5
  import { ReactNode, ForwardedRef } from 'react';
@@ -26,7 +26,7 @@ type FileButtonOptions = {
26
26
  resetRef?: ForwardedRef<() => void>;
27
27
  };
28
28
  type InputProps = Partial<Pick<HTMLInputElement, "accept" | "multiple">>;
29
- type FileButtonProps = Omit<ButtonProps, "onChange" | "children"> & InputProps & FileButtonOptions & FormControlOptions;
29
+ type FileButtonProps = Omit<ButtonProps, "onChange" | "children"> & ThemeProps<"FileButton"> & InputProps & FileButtonOptions & FormControlOptions;
30
30
  /**
31
31
  * `FileButton` is a button component used for users to select files.
32
32
  *
@@ -1,5 +1,5 @@
1
1
  import * as _yamada_ui_core from '@yamada-ui/core';
2
- import { ColorModeToken, CSS } from '@yamada-ui/core';
2
+ import { ThemeProps, ColorModeToken, CSS } from '@yamada-ui/core';
3
3
  import { ButtonProps } from '@yamada-ui/button';
4
4
  import { FormControlOptions } from '@yamada-ui/form-control';
5
5
  import { ReactNode, ForwardedRef } from 'react';
@@ -26,7 +26,7 @@ type FileButtonOptions = {
26
26
  resetRef?: ForwardedRef<() => void>;
27
27
  };
28
28
  type InputProps = Partial<Pick<HTMLInputElement, "accept" | "multiple">>;
29
- type FileButtonProps = Omit<ButtonProps, "onChange" | "children"> & InputProps & FileButtonOptions & FormControlOptions;
29
+ type FileButtonProps = Omit<ButtonProps, "onChange" | "children"> & ThemeProps<"FileButton"> & InputProps & FileButtonOptions & FormControlOptions;
30
30
  /**
31
31
  * `FileButton` is a button component used for users to select files.
32
32
  *
@@ -30,91 +30,97 @@ var import_form_control = require("@yamada-ui/form-control");
30
30
  var import_utils = require("@yamada-ui/utils");
31
31
  var import_react = require("react");
32
32
  var import_jsx_runtime = require("react/jsx-runtime");
33
- var FileButton = (0, import_core.forwardRef)(
34
- ({ className, resetRef, as: As, children, ...props }, ref) => {
35
- const {
36
- id,
37
- name,
38
- accept,
39
- multiple,
40
- form,
41
- "aria-readonly": ariaReadonly,
42
- onClick: onClickProp,
43
- onChange: onChangeProp,
44
- ...rest
45
- } = (0, import_form_control.useFormControlProps)(props);
46
- const { disabled, readOnly, required, "aria-invalid": isInvalid } = rest;
47
- const inputRef = (0, import_react.useRef)(null);
48
- const onClick = (0, import_react.useCallback)(() => {
49
- var _a;
50
- if (disabled || readOnly) return;
51
- (_a = inputRef.current) == null ? void 0 : _a.click();
52
- }, [disabled, readOnly]);
53
- const onChange = (0, import_react.useCallback)(
54
- (ev) => {
55
- const files = !(0, import_utils.isNull)(ev.currentTarget.files) ? Array.from(ev.currentTarget.files) : void 0;
56
- onChangeProp == null ? void 0 : onChangeProp(files);
57
- },
58
- [onChangeProp]
33
+ var FileButton = (0, import_core.forwardRef)((props, ref) => {
34
+ const [styles, mergedProps] = (0, import_core.useComponentStyle)("FileButton", props);
35
+ const computedProps = (0, import_core.omitThemeProps)(mergedProps);
36
+ let {
37
+ className,
38
+ resetRef,
39
+ as: As,
40
+ children,
41
+ id,
42
+ name,
43
+ accept,
44
+ multiple,
45
+ form,
46
+ "aria-readonly": ariaReadonly,
47
+ onClick: onClickProp,
48
+ onChange: onChangeProp,
49
+ ...rest
50
+ } = (0, import_form_control.useFormControlProps)(computedProps);
51
+ const { disabled, readOnly, required, "aria-invalid": isInvalid } = rest;
52
+ const inputRef = (0, import_react.useRef)(null);
53
+ const onClick = (0, import_react.useCallback)(() => {
54
+ var _a;
55
+ if (disabled || readOnly) return;
56
+ (_a = inputRef.current) == null ? void 0 : _a.click();
57
+ }, [disabled, readOnly]);
58
+ const onChange = (0, import_react.useCallback)(
59
+ (ev) => {
60
+ const files = !(0, import_utils.isNull)(ev.currentTarget.files) ? Array.from(ev.currentTarget.files) : void 0;
61
+ onChangeProp == null ? void 0 : onChangeProp(files);
62
+ },
63
+ [onChangeProp]
64
+ );
65
+ const onReset = (0, import_react.useCallback)(() => {
66
+ if (inputRef.current) inputRef.current.value = "";
67
+ }, []);
68
+ if (!(0, import_utils.isFunction)(children)) {
69
+ const Component = As || import_button.Button;
70
+ children = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
71
+ Component,
72
+ {
73
+ className: (0, import_utils.cx)("ui-file-button", className),
74
+ __css: styles,
75
+ __overrideTheme: !As,
76
+ ...rest,
77
+ onClick: (0, import_utils.handlerAll)(onClickProp, onClick),
78
+ children
79
+ }
59
80
  );
60
- const onReset = (0, import_react.useCallback)(() => {
61
- if (inputRef.current) inputRef.current.value = "";
62
- }, []);
63
- if (!(0, import_utils.isFunction)(children)) {
64
- const Component = As || import_button.Button;
65
- children = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
66
- Component,
67
- {
68
- className: (0, import_utils.cx)("ui-file-button", className),
69
- ...rest,
70
- onClick: (0, import_utils.handlerAll)(onClickProp, onClick),
71
- children
72
- }
73
- );
74
- }
75
- (0, import_utils.assignRef)(resetRef, onReset);
76
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
77
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
78
- import_core.ui.input,
79
- {
80
- ref: (0, import_utils.mergeRefs)(inputRef, ref),
81
- type: "file",
82
- "aria-hidden": true,
83
- tabIndex: -1,
84
- id,
85
- name,
86
- form,
87
- accept,
88
- multiple,
89
- style: {
90
- border: "0px",
91
- clip: "rect(0px, 0px, 0px, 0px)",
92
- height: "1px",
93
- width: "1px",
94
- margin: "-1px",
95
- padding: "0px",
96
- overflow: "hidden",
97
- whiteSpace: "nowrap",
98
- position: "absolute"
99
- },
100
- onChange,
101
- "aria-readonly": ariaReadonly,
102
- ...(0, import_utils.pickObject)(rest, import_form_control.formControlProperties)
103
- }
104
- ),
105
- (0, import_utils.isFunction)(children) ? children({
106
- onClick,
107
- disabled,
108
- readOnly,
109
- required,
110
- isDisabled: disabled,
111
- isReadOnly: readOnly,
112
- isRequired: required,
113
- isInvalid
114
- }) : children
115
- ] });
116
81
  }
117
- );
82
+ (0, import_utils.assignRef)(resetRef, onReset);
83
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
84
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
85
+ import_core.ui.input,
86
+ {
87
+ ref: (0, import_utils.mergeRefs)(inputRef, ref),
88
+ type: "file",
89
+ "aria-hidden": true,
90
+ tabIndex: -1,
91
+ id,
92
+ name,
93
+ form,
94
+ accept,
95
+ multiple,
96
+ style: {
97
+ border: "0px",
98
+ clip: "rect(0px, 0px, 0px, 0px)",
99
+ height: "1px",
100
+ width: "1px",
101
+ margin: "-1px",
102
+ padding: "0px",
103
+ overflow: "hidden",
104
+ whiteSpace: "nowrap",
105
+ position: "absolute"
106
+ },
107
+ onChange,
108
+ "aria-readonly": ariaReadonly,
109
+ ...(0, import_utils.pickObject)(rest, import_form_control.formControlProperties)
110
+ }
111
+ ),
112
+ (0, import_utils.isFunction)(children) ? children({
113
+ onClick,
114
+ disabled,
115
+ readOnly,
116
+ required,
117
+ isDisabled: disabled,
118
+ isReadOnly: readOnly,
119
+ isRequired: required,
120
+ isInvalid
121
+ }) : children
122
+ ] });
123
+ });
118
124
  // Annotate the CommonJS export names for ESM import in node:
119
125
  0 && (module.exports = {
120
126
  FileButton
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/file-button.tsx"],"sourcesContent":["import type { ButtonProps } from \"@yamada-ui/button\"\nimport { Button } from \"@yamada-ui/button\"\nimport type { ColorModeToken, CSS } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport {\n assignRef,\n cx,\n handlerAll,\n isFunction,\n isNull,\n mergeRefs,\n pickObject,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, ReactNode } from \"react\"\nimport { useCallback, useRef } from \"react\"\n\ntype Props = {\n onClick: () => void\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n} & FormControlOptions\n\ntype FileButtonOptions = {\n /**\n * The border color when the button is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * Function to be called when a file change event occurs.\n */\n onChange?: (files: File[] | undefined) => void\n children?: ReactNode | ((props: Props) => ReactNode)\n /**\n * Ref to a reset function.\n */\n resetRef?: ForwardedRef<() => void>\n}\n\ntype InputProps = Partial<Pick<HTMLInputElement, \"accept\" | \"multiple\">>\n\nexport type FileButtonProps = Omit<ButtonProps, \"onChange\" | \"children\"> &\n InputProps &\n FileButtonOptions &\n FormControlOptions\n\n/**\n * `FileButton` is a button component used for users to select files.\n *\n * @see Docs https://yamada-ui.com/components/forms/file-button\n */\nexport const FileButton = forwardRef<FileButtonProps, \"input\">(\n ({ className, resetRef, as: As, children, ...props }, ref) => {\n const {\n id,\n name,\n accept,\n multiple,\n form,\n \"aria-readonly\": ariaReadonly,\n onClick: onClickProp,\n onChange: onChangeProp,\n ...rest\n } = useFormControlProps(props)\n\n const { disabled, readOnly, required, \"aria-invalid\": isInvalid } = rest\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const onClick = useCallback(() => {\n if (disabled || readOnly) return\n\n inputRef.current?.click()\n }, [disabled, readOnly])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n const files = !isNull(ev.currentTarget.files)\n ? Array.from(ev.currentTarget.files)\n : undefined\n\n onChangeProp?.(files)\n },\n [onChangeProp],\n )\n\n const onReset = useCallback(() => {\n if (inputRef.current) inputRef.current.value = \"\"\n }, [])\n\n if (!isFunction(children)) {\n const Component = As || Button\n\n children = (\n <Component\n className={cx(\"ui-file-button\", className)}\n {...rest}\n onClick={handlerAll(onClickProp, onClick)}\n >\n {children}\n </Component>\n ) as ReactNode\n }\n\n assignRef(resetRef, onReset)\n\n return (\n <>\n <ui.input\n ref={mergeRefs(inputRef, ref)}\n type=\"file\"\n aria-hidden\n tabIndex={-1}\n id={id}\n name={name}\n form={form}\n accept={accept}\n multiple={multiple}\n style={{\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }}\n onChange={onChange}\n aria-readonly={ariaReadonly}\n {...pickObject(rest, formControlProperties)}\n />\n\n {isFunction(children)\n ? children({\n onClick,\n disabled,\n readOnly,\n required,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid,\n })\n : children}\n </>\n )\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAuB;AAEvB,kBAA+B;AAE/B,0BAGO;AACP,mBAQO;AAEP,mBAAoC;AAgF5B;AA3CD,IAAM,iBAAa;AAAA,EACxB,CAAC,EAAE,WAAW,UAAU,IAAI,IAAI,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC5D,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,GAAG;AAAA,IACL,QAAI,yCAAoB,KAAK;AAE7B,UAAM,EAAE,UAAU,UAAU,UAAU,gBAAgB,UAAU,IAAI;AAEpE,UAAM,eAAW,qBAAyB,IAAI;AAE9C,UAAM,cAAU,0BAAY,MAAM;AA1EtC;AA2EM,UAAI,YAAY,SAAU;AAE1B,qBAAS,YAAT,mBAAkB;AAAA,IACpB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,UAAM,eAAW;AAAA,MACf,CAAC,OAAsC;AACrC,cAAM,QAAQ,KAAC,qBAAO,GAAG,cAAc,KAAK,IACxC,MAAM,KAAK,GAAG,cAAc,KAAK,IACjC;AAEJ,qDAAe;AAAA,MACjB;AAAA,MACA,CAAC,YAAY;AAAA,IACf;AAEA,UAAM,cAAU,0BAAY,MAAM;AAChC,UAAI,SAAS,QAAS,UAAS,QAAQ,QAAQ;AAAA,IACjD,GAAG,CAAC,CAAC;AAEL,QAAI,KAAC,yBAAW,QAAQ,GAAG;AACzB,YAAM,YAAY,MAAM;AAExB,iBACE;AAAA,QAAC;AAAA;AAAA,UACC,eAAW,iBAAG,kBAAkB,SAAS;AAAA,UACxC,GAAG;AAAA,UACJ,aAAS,yBAAW,aAAa,OAAO;AAAA,UAEvC;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,gCAAU,UAAU,OAAO;AAE3B,WACE,4EACE;AAAA;AAAA,QAAC,eAAG;AAAA,QAAH;AAAA,UACC,SAAK,wBAAU,UAAU,GAAG;AAAA,UAC5B,MAAK;AAAA,UACL,eAAW;AAAA,UACX,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,UACA,iBAAe;AAAA,UACd,OAAG,yBAAW,MAAM,yCAAqB;AAAA;AAAA,MAC5C;AAAA,UAEC,yBAAW,QAAQ,IAChB,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA,MACF,CAAC,IACD;AAAA,OACN;AAAA,EAEJ;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/file-button.tsx"],"sourcesContent":["import type { ButtonProps } from \"@yamada-ui/button\"\nimport { Button } from \"@yamada-ui/button\"\nimport type { ColorModeToken, CSS, ThemeProps } from \"@yamada-ui/core\"\nimport {\n ui,\n forwardRef,\n useComponentStyle,\n omitThemeProps,\n} from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport {\n assignRef,\n cx,\n handlerAll,\n isFunction,\n isNull,\n mergeRefs,\n pickObject,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, ReactNode } from \"react\"\nimport { useCallback, useRef } from \"react\"\n\ntype Props = {\n onClick: () => void\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n} & FormControlOptions\n\ntype FileButtonOptions = {\n /**\n * The border color when the button is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * Function to be called when a file change event occurs.\n */\n onChange?: (files: File[] | undefined) => void\n children?: ReactNode | ((props: Props) => ReactNode)\n /**\n * Ref to a reset function.\n */\n resetRef?: ForwardedRef<() => void>\n}\n\ntype InputProps = Partial<Pick<HTMLInputElement, \"accept\" | \"multiple\">>\n\nexport type FileButtonProps = Omit<ButtonProps, \"onChange\" | \"children\"> &\n ThemeProps<\"FileButton\"> &\n InputProps &\n FileButtonOptions &\n FormControlOptions\n\n/**\n * `FileButton` is a button component used for users to select files.\n *\n * @see Docs https://yamada-ui.com/components/forms/file-button\n */\nexport const FileButton = forwardRef<FileButtonProps, \"input\">((props, ref) => {\n const [styles, mergedProps] = useComponentStyle(\"FileButton\", props)\n const computedProps = omitThemeProps(mergedProps)\n let {\n className,\n resetRef,\n as: As,\n children,\n id,\n name,\n accept,\n multiple,\n form,\n \"aria-readonly\": ariaReadonly,\n onClick: onClickProp,\n onChange: onChangeProp,\n ...rest\n } = useFormControlProps(computedProps)\n const { disabled, readOnly, required, \"aria-invalid\": isInvalid } = rest\n const inputRef = useRef<HTMLInputElement>(null)\n\n const onClick = useCallback(() => {\n if (disabled || readOnly) return\n\n inputRef.current?.click()\n }, [disabled, readOnly])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n const files = !isNull(ev.currentTarget.files)\n ? Array.from(ev.currentTarget.files)\n : undefined\n\n onChangeProp?.(files)\n },\n [onChangeProp],\n )\n\n const onReset = useCallback(() => {\n if (inputRef.current) inputRef.current.value = \"\"\n }, [])\n\n if (!isFunction(children)) {\n const Component = As || Button\n\n children = (\n <Component\n className={cx(\"ui-file-button\", className)}\n __css={styles}\n __overrideTheme={!As}\n {...rest}\n onClick={handlerAll(onClickProp, onClick)}\n >\n {children}\n </Component>\n )\n }\n\n assignRef(resetRef, onReset)\n\n return (\n <>\n <ui.input\n ref={mergeRefs(inputRef, ref)}\n type=\"file\"\n aria-hidden\n tabIndex={-1}\n id={id}\n name={name}\n form={form}\n accept={accept}\n multiple={multiple}\n style={{\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }}\n onChange={onChange}\n aria-readonly={ariaReadonly}\n {...pickObject(rest, formControlProperties)}\n />\n\n {isFunction(children)\n ? children({\n onClick,\n disabled,\n readOnly,\n required,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid,\n })\n : children}\n </>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAuB;AAEvB,kBAKO;AAEP,0BAGO;AACP,mBAQO;AAEP,mBAAoC;AAoF9B;AA9CC,IAAM,iBAAa,wBAAqC,CAAC,OAAO,QAAQ;AAC7E,QAAM,CAAC,QAAQ,WAAW,QAAI,+BAAkB,cAAc,KAAK;AACnE,QAAM,oBAAgB,4BAAe,WAAW;AAChD,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,GAAG;AAAA,EACL,QAAI,yCAAoB,aAAa;AACrC,QAAM,EAAE,UAAU,UAAU,UAAU,gBAAgB,UAAU,IAAI;AACpE,QAAM,eAAW,qBAAyB,IAAI;AAE9C,QAAM,cAAU,0BAAY,MAAM;AAnFpC;AAoFI,QAAI,YAAY,SAAU;AAE1B,mBAAS,YAAT,mBAAkB;AAAA,EACpB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,QAAM,eAAW;AAAA,IACf,CAAC,OAAsC;AACrC,YAAM,QAAQ,KAAC,qBAAO,GAAG,cAAc,KAAK,IACxC,MAAM,KAAK,GAAG,cAAc,KAAK,IACjC;AAEJ,mDAAe;AAAA,IACjB;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,cAAU,0BAAY,MAAM;AAChC,QAAI,SAAS,QAAS,UAAS,QAAQ,QAAQ;AAAA,EACjD,GAAG,CAAC,CAAC;AAEL,MAAI,KAAC,yBAAW,QAAQ,GAAG;AACzB,UAAM,YAAY,MAAM;AAExB,eACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,iBAAG,kBAAkB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP,iBAAiB,CAAC;AAAA,QACjB,GAAG;AAAA,QACJ,aAAS,yBAAW,aAAa,OAAO;AAAA,QAEvC;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,8BAAU,UAAU,OAAO;AAE3B,SACE,4EACE;AAAA;AAAA,MAAC,eAAG;AAAA,MAAH;AAAA,QACC,SAAK,wBAAU,UAAU,GAAG;AAAA,QAC5B,MAAK;AAAA,QACL,eAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,QACA,iBAAe;AAAA,QACd,OAAG,yBAAW,MAAM,yCAAqB;AAAA;AAAA,IAC5C;AAAA,QAEC,yBAAW,QAAQ,IAChB,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,IACF,CAAC,IACD;AAAA,KACN;AAEJ,CAAC;","names":[]}
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
  import {
3
3
  FileButton
4
- } from "./chunk-GP22NWGH.mjs";
4
+ } from "./chunk-MPIK26NG.mjs";
5
5
  export {
6
6
  FileButton
7
7
  };
package/dist/index.js CHANGED
@@ -32,91 +32,97 @@ var import_form_control = require("@yamada-ui/form-control");
32
32
  var import_utils = require("@yamada-ui/utils");
33
33
  var import_react = require("react");
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
- var FileButton = (0, import_core.forwardRef)(
36
- ({ className, resetRef, as: As, children, ...props }, ref) => {
37
- const {
38
- id,
39
- name,
40
- accept,
41
- multiple,
42
- form,
43
- "aria-readonly": ariaReadonly,
44
- onClick: onClickProp,
45
- onChange: onChangeProp,
46
- ...rest
47
- } = (0, import_form_control.useFormControlProps)(props);
48
- const { disabled, readOnly, required, "aria-invalid": isInvalid } = rest;
49
- const inputRef = (0, import_react.useRef)(null);
50
- const onClick = (0, import_react.useCallback)(() => {
51
- var _a;
52
- if (disabled || readOnly) return;
53
- (_a = inputRef.current) == null ? void 0 : _a.click();
54
- }, [disabled, readOnly]);
55
- const onChange = (0, import_react.useCallback)(
56
- (ev) => {
57
- const files = !(0, import_utils.isNull)(ev.currentTarget.files) ? Array.from(ev.currentTarget.files) : void 0;
58
- onChangeProp == null ? void 0 : onChangeProp(files);
59
- },
60
- [onChangeProp]
35
+ var FileButton = (0, import_core.forwardRef)((props, ref) => {
36
+ const [styles, mergedProps] = (0, import_core.useComponentStyle)("FileButton", props);
37
+ const computedProps = (0, import_core.omitThemeProps)(mergedProps);
38
+ let {
39
+ className,
40
+ resetRef,
41
+ as: As,
42
+ children,
43
+ id,
44
+ name,
45
+ accept,
46
+ multiple,
47
+ form,
48
+ "aria-readonly": ariaReadonly,
49
+ onClick: onClickProp,
50
+ onChange: onChangeProp,
51
+ ...rest
52
+ } = (0, import_form_control.useFormControlProps)(computedProps);
53
+ const { disabled, readOnly, required, "aria-invalid": isInvalid } = rest;
54
+ const inputRef = (0, import_react.useRef)(null);
55
+ const onClick = (0, import_react.useCallback)(() => {
56
+ var _a;
57
+ if (disabled || readOnly) return;
58
+ (_a = inputRef.current) == null ? void 0 : _a.click();
59
+ }, [disabled, readOnly]);
60
+ const onChange = (0, import_react.useCallback)(
61
+ (ev) => {
62
+ const files = !(0, import_utils.isNull)(ev.currentTarget.files) ? Array.from(ev.currentTarget.files) : void 0;
63
+ onChangeProp == null ? void 0 : onChangeProp(files);
64
+ },
65
+ [onChangeProp]
66
+ );
67
+ const onReset = (0, import_react.useCallback)(() => {
68
+ if (inputRef.current) inputRef.current.value = "";
69
+ }, []);
70
+ if (!(0, import_utils.isFunction)(children)) {
71
+ const Component = As || import_button.Button;
72
+ children = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
73
+ Component,
74
+ {
75
+ className: (0, import_utils.cx)("ui-file-button", className),
76
+ __css: styles,
77
+ __overrideTheme: !As,
78
+ ...rest,
79
+ onClick: (0, import_utils.handlerAll)(onClickProp, onClick),
80
+ children
81
+ }
61
82
  );
62
- const onReset = (0, import_react.useCallback)(() => {
63
- if (inputRef.current) inputRef.current.value = "";
64
- }, []);
65
- if (!(0, import_utils.isFunction)(children)) {
66
- const Component = As || import_button.Button;
67
- children = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
68
- Component,
69
- {
70
- className: (0, import_utils.cx)("ui-file-button", className),
71
- ...rest,
72
- onClick: (0, import_utils.handlerAll)(onClickProp, onClick),
73
- children
74
- }
75
- );
76
- }
77
- (0, import_utils.assignRef)(resetRef, onReset);
78
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
79
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
80
- import_core.ui.input,
81
- {
82
- ref: (0, import_utils.mergeRefs)(inputRef, ref),
83
- type: "file",
84
- "aria-hidden": true,
85
- tabIndex: -1,
86
- id,
87
- name,
88
- form,
89
- accept,
90
- multiple,
91
- style: {
92
- border: "0px",
93
- clip: "rect(0px, 0px, 0px, 0px)",
94
- height: "1px",
95
- width: "1px",
96
- margin: "-1px",
97
- padding: "0px",
98
- overflow: "hidden",
99
- whiteSpace: "nowrap",
100
- position: "absolute"
101
- },
102
- onChange,
103
- "aria-readonly": ariaReadonly,
104
- ...(0, import_utils.pickObject)(rest, import_form_control.formControlProperties)
105
- }
106
- ),
107
- (0, import_utils.isFunction)(children) ? children({
108
- onClick,
109
- disabled,
110
- readOnly,
111
- required,
112
- isDisabled: disabled,
113
- isReadOnly: readOnly,
114
- isRequired: required,
115
- isInvalid
116
- }) : children
117
- ] });
118
83
  }
119
- );
84
+ (0, import_utils.assignRef)(resetRef, onReset);
85
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
86
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
+ import_core.ui.input,
88
+ {
89
+ ref: (0, import_utils.mergeRefs)(inputRef, ref),
90
+ type: "file",
91
+ "aria-hidden": true,
92
+ tabIndex: -1,
93
+ id,
94
+ name,
95
+ form,
96
+ accept,
97
+ multiple,
98
+ style: {
99
+ border: "0px",
100
+ clip: "rect(0px, 0px, 0px, 0px)",
101
+ height: "1px",
102
+ width: "1px",
103
+ margin: "-1px",
104
+ padding: "0px",
105
+ overflow: "hidden",
106
+ whiteSpace: "nowrap",
107
+ position: "absolute"
108
+ },
109
+ onChange,
110
+ "aria-readonly": ariaReadonly,
111
+ ...(0, import_utils.pickObject)(rest, import_form_control.formControlProperties)
112
+ }
113
+ ),
114
+ (0, import_utils.isFunction)(children) ? children({
115
+ onClick,
116
+ disabled,
117
+ readOnly,
118
+ required,
119
+ isDisabled: disabled,
120
+ isReadOnly: readOnly,
121
+ isRequired: required,
122
+ isInvalid
123
+ }) : children
124
+ ] });
125
+ });
120
126
  // Annotate the CommonJS export names for ESM import in node:
121
127
  0 && (module.exports = {
122
128
  FileButton
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/file-button.tsx"],"sourcesContent":["export { FileButton } from \"./file-button\"\nexport type { FileButtonProps } from \"./file-button\"\n","import type { ButtonProps } from \"@yamada-ui/button\"\nimport { Button } from \"@yamada-ui/button\"\nimport type { ColorModeToken, CSS } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport {\n assignRef,\n cx,\n handlerAll,\n isFunction,\n isNull,\n mergeRefs,\n pickObject,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, ReactNode } from \"react\"\nimport { useCallback, useRef } from \"react\"\n\ntype Props = {\n onClick: () => void\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n} & FormControlOptions\n\ntype FileButtonOptions = {\n /**\n * The border color when the button is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * Function to be called when a file change event occurs.\n */\n onChange?: (files: File[] | undefined) => void\n children?: ReactNode | ((props: Props) => ReactNode)\n /**\n * Ref to a reset function.\n */\n resetRef?: ForwardedRef<() => void>\n}\n\ntype InputProps = Partial<Pick<HTMLInputElement, \"accept\" | \"multiple\">>\n\nexport type FileButtonProps = Omit<ButtonProps, \"onChange\" | \"children\"> &\n InputProps &\n FileButtonOptions &\n FormControlOptions\n\n/**\n * `FileButton` is a button component used for users to select files.\n *\n * @see Docs https://yamada-ui.com/components/forms/file-button\n */\nexport const FileButton = forwardRef<FileButtonProps, \"input\">(\n ({ className, resetRef, as: As, children, ...props }, ref) => {\n const {\n id,\n name,\n accept,\n multiple,\n form,\n \"aria-readonly\": ariaReadonly,\n onClick: onClickProp,\n onChange: onChangeProp,\n ...rest\n } = useFormControlProps(props)\n\n const { disabled, readOnly, required, \"aria-invalid\": isInvalid } = rest\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const onClick = useCallback(() => {\n if (disabled || readOnly) return\n\n inputRef.current?.click()\n }, [disabled, readOnly])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n const files = !isNull(ev.currentTarget.files)\n ? Array.from(ev.currentTarget.files)\n : undefined\n\n onChangeProp?.(files)\n },\n [onChangeProp],\n )\n\n const onReset = useCallback(() => {\n if (inputRef.current) inputRef.current.value = \"\"\n }, [])\n\n if (!isFunction(children)) {\n const Component = As || Button\n\n children = (\n <Component\n className={cx(\"ui-file-button\", className)}\n {...rest}\n onClick={handlerAll(onClickProp, onClick)}\n >\n {children}\n </Component>\n ) as ReactNode\n }\n\n assignRef(resetRef, onReset)\n\n return (\n <>\n <ui.input\n ref={mergeRefs(inputRef, ref)}\n type=\"file\"\n aria-hidden\n tabIndex={-1}\n id={id}\n name={name}\n form={form}\n accept={accept}\n multiple={multiple}\n style={{\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }}\n onChange={onChange}\n aria-readonly={ariaReadonly}\n {...pickObject(rest, formControlProperties)}\n />\n\n {isFunction(children)\n ? children({\n onClick,\n disabled,\n readOnly,\n required,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid,\n })\n : children}\n </>\n )\n },\n)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAAuB;AAEvB,kBAA+B;AAE/B,0BAGO;AACP,mBAQO;AAEP,mBAAoC;AAgF5B;AA3CD,IAAM,iBAAa;AAAA,EACxB,CAAC,EAAE,WAAW,UAAU,IAAI,IAAI,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC5D,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,GAAG;AAAA,IACL,QAAI,yCAAoB,KAAK;AAE7B,UAAM,EAAE,UAAU,UAAU,UAAU,gBAAgB,UAAU,IAAI;AAEpE,UAAM,eAAW,qBAAyB,IAAI;AAE9C,UAAM,cAAU,0BAAY,MAAM;AA1EtC;AA2EM,UAAI,YAAY,SAAU;AAE1B,qBAAS,YAAT,mBAAkB;AAAA,IACpB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,UAAM,eAAW;AAAA,MACf,CAAC,OAAsC;AACrC,cAAM,QAAQ,KAAC,qBAAO,GAAG,cAAc,KAAK,IACxC,MAAM,KAAK,GAAG,cAAc,KAAK,IACjC;AAEJ,qDAAe;AAAA,MACjB;AAAA,MACA,CAAC,YAAY;AAAA,IACf;AAEA,UAAM,cAAU,0BAAY,MAAM;AAChC,UAAI,SAAS,QAAS,UAAS,QAAQ,QAAQ;AAAA,IACjD,GAAG,CAAC,CAAC;AAEL,QAAI,KAAC,yBAAW,QAAQ,GAAG;AACzB,YAAM,YAAY,MAAM;AAExB,iBACE;AAAA,QAAC;AAAA;AAAA,UACC,eAAW,iBAAG,kBAAkB,SAAS;AAAA,UACxC,GAAG;AAAA,UACJ,aAAS,yBAAW,aAAa,OAAO;AAAA,UAEvC;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,gCAAU,UAAU,OAAO;AAE3B,WACE,4EACE;AAAA;AAAA,QAAC,eAAG;AAAA,QAAH;AAAA,UACC,SAAK,wBAAU,UAAU,GAAG;AAAA,UAC5B,MAAK;AAAA,UACL,eAAW;AAAA,UACX,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,UACA,iBAAe;AAAA,UACd,OAAG,yBAAW,MAAM,yCAAqB;AAAA;AAAA,MAC5C;AAAA,UAEC,yBAAW,QAAQ,IAChB,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA,MACF,CAAC,IACD;AAAA,OACN;AAAA,EAEJ;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/file-button.tsx"],"sourcesContent":["export { FileButton } from \"./file-button\"\nexport type { FileButtonProps } from \"./file-button\"\n","import type { ButtonProps } from \"@yamada-ui/button\"\nimport { Button } from \"@yamada-ui/button\"\nimport type { ColorModeToken, CSS, ThemeProps } from \"@yamada-ui/core\"\nimport {\n ui,\n forwardRef,\n useComponentStyle,\n omitThemeProps,\n} from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport {\n assignRef,\n cx,\n handlerAll,\n isFunction,\n isNull,\n mergeRefs,\n pickObject,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, ReactNode } from \"react\"\nimport { useCallback, useRef } from \"react\"\n\ntype Props = {\n onClick: () => void\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n} & FormControlOptions\n\ntype FileButtonOptions = {\n /**\n * The border color when the button is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * Function to be called when a file change event occurs.\n */\n onChange?: (files: File[] | undefined) => void\n children?: ReactNode | ((props: Props) => ReactNode)\n /**\n * Ref to a reset function.\n */\n resetRef?: ForwardedRef<() => void>\n}\n\ntype InputProps = Partial<Pick<HTMLInputElement, \"accept\" | \"multiple\">>\n\nexport type FileButtonProps = Omit<ButtonProps, \"onChange\" | \"children\"> &\n ThemeProps<\"FileButton\"> &\n InputProps &\n FileButtonOptions &\n FormControlOptions\n\n/**\n * `FileButton` is a button component used for users to select files.\n *\n * @see Docs https://yamada-ui.com/components/forms/file-button\n */\nexport const FileButton = forwardRef<FileButtonProps, \"input\">((props, ref) => {\n const [styles, mergedProps] = useComponentStyle(\"FileButton\", props)\n const computedProps = omitThemeProps(mergedProps)\n let {\n className,\n resetRef,\n as: As,\n children,\n id,\n name,\n accept,\n multiple,\n form,\n \"aria-readonly\": ariaReadonly,\n onClick: onClickProp,\n onChange: onChangeProp,\n ...rest\n } = useFormControlProps(computedProps)\n const { disabled, readOnly, required, \"aria-invalid\": isInvalid } = rest\n const inputRef = useRef<HTMLInputElement>(null)\n\n const onClick = useCallback(() => {\n if (disabled || readOnly) return\n\n inputRef.current?.click()\n }, [disabled, readOnly])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n const files = !isNull(ev.currentTarget.files)\n ? Array.from(ev.currentTarget.files)\n : undefined\n\n onChangeProp?.(files)\n },\n [onChangeProp],\n )\n\n const onReset = useCallback(() => {\n if (inputRef.current) inputRef.current.value = \"\"\n }, [])\n\n if (!isFunction(children)) {\n const Component = As || Button\n\n children = (\n <Component\n className={cx(\"ui-file-button\", className)}\n __css={styles}\n __overrideTheme={!As}\n {...rest}\n onClick={handlerAll(onClickProp, onClick)}\n >\n {children}\n </Component>\n )\n }\n\n assignRef(resetRef, onReset)\n\n return (\n <>\n <ui.input\n ref={mergeRefs(inputRef, ref)}\n type=\"file\"\n aria-hidden\n tabIndex={-1}\n id={id}\n name={name}\n form={form}\n accept={accept}\n multiple={multiple}\n style={{\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }}\n onChange={onChange}\n aria-readonly={ariaReadonly}\n {...pickObject(rest, formControlProperties)}\n />\n\n {isFunction(children)\n ? children({\n onClick,\n disabled,\n readOnly,\n required,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid,\n })\n : children}\n </>\n )\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAAuB;AAEvB,kBAKO;AAEP,0BAGO;AACP,mBAQO;AAEP,mBAAoC;AAoF9B;AA9CC,IAAM,iBAAa,wBAAqC,CAAC,OAAO,QAAQ;AAC7E,QAAM,CAAC,QAAQ,WAAW,QAAI,+BAAkB,cAAc,KAAK;AACnE,QAAM,oBAAgB,4BAAe,WAAW;AAChD,MAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,IAAI;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,GAAG;AAAA,EACL,QAAI,yCAAoB,aAAa;AACrC,QAAM,EAAE,UAAU,UAAU,UAAU,gBAAgB,UAAU,IAAI;AACpE,QAAM,eAAW,qBAAyB,IAAI;AAE9C,QAAM,cAAU,0BAAY,MAAM;AAnFpC;AAoFI,QAAI,YAAY,SAAU;AAE1B,mBAAS,YAAT,mBAAkB;AAAA,EACpB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,QAAM,eAAW;AAAA,IACf,CAAC,OAAsC;AACrC,YAAM,QAAQ,KAAC,qBAAO,GAAG,cAAc,KAAK,IACxC,MAAM,KAAK,GAAG,cAAc,KAAK,IACjC;AAEJ,mDAAe;AAAA,IACjB;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAEA,QAAM,cAAU,0BAAY,MAAM;AAChC,QAAI,SAAS,QAAS,UAAS,QAAQ,QAAQ;AAAA,EACjD,GAAG,CAAC,CAAC;AAEL,MAAI,KAAC,yBAAW,QAAQ,GAAG;AACzB,UAAM,YAAY,MAAM;AAExB,eACE;AAAA,MAAC;AAAA;AAAA,QACC,eAAW,iBAAG,kBAAkB,SAAS;AAAA,QACzC,OAAO;AAAA,QACP,iBAAiB,CAAC;AAAA,QACjB,GAAG;AAAA,QACJ,aAAS,yBAAW,aAAa,OAAO;AAAA,QAEvC;AAAA;AAAA,IACH;AAAA,EAEJ;AAEA,8BAAU,UAAU,OAAO;AAE3B,SACE,4EACE;AAAA;AAAA,MAAC,eAAG;AAAA,MAAH;AAAA,QACC,SAAK,wBAAU,UAAU,GAAG;AAAA,QAC5B,MAAK;AAAA,QACL,eAAW;AAAA,QACX,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,UAAU;AAAA,UACV,YAAY;AAAA,UACZ,UAAU;AAAA,QACZ;AAAA,QACA;AAAA,QACA,iBAAe;AAAA,QACd,OAAG,yBAAW,MAAM,yCAAqB;AAAA;AAAA,IAC5C;AAAA,QAEC,yBAAW,QAAQ,IAChB,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ;AAAA,IACF,CAAC,IACD;AAAA,KACN;AAEJ,CAAC;","names":[]}
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  "use client"
2
2
  import {
3
3
  FileButton
4
- } from "./chunk-GP22NWGH.mjs";
4
+ } from "./chunk-MPIK26NG.mjs";
5
5
  export {
6
6
  FileButton
7
7
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yamada-ui/file-button",
3
- "version": "1.0.40",
3
+ "version": "1.1.0-dev-20240724054944",
4
4
  "description": "Yamada UI file button component",
5
5
  "keywords": [
6
6
  "yamada",
@@ -36,10 +36,10 @@
36
36
  "url": "https://github.com/yamada-ui/yamada-ui/issues"
37
37
  },
38
38
  "dependencies": {
39
- "@yamada-ui/core": "1.10.0",
39
+ "@yamada-ui/core": "1.10.1-dev-20240724054944",
40
40
  "@yamada-ui/utils": "1.3.1",
41
- "@yamada-ui/form-control": "2.0.2",
42
- "@yamada-ui/button": "1.0.36"
41
+ "@yamada-ui/form-control": "2.0.3-dev-20240724054944",
42
+ "@yamada-ui/button": "1.0.37-dev-20240724054944"
43
43
  },
44
44
  "devDependencies": {
45
45
  "react": "^18.0.0",
@@ -1,110 +0,0 @@
1
- "use client"
2
-
3
- // src/file-button.tsx
4
- import { Button } from "@yamada-ui/button";
5
- import { ui, forwardRef } from "@yamada-ui/core";
6
- import {
7
- formControlProperties,
8
- useFormControlProps
9
- } from "@yamada-ui/form-control";
10
- import {
11
- assignRef,
12
- cx,
13
- handlerAll,
14
- isFunction,
15
- isNull,
16
- mergeRefs,
17
- pickObject
18
- } from "@yamada-ui/utils";
19
- import { useCallback, useRef } from "react";
20
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
21
- var FileButton = forwardRef(
22
- ({ className, resetRef, as: As, children, ...props }, ref) => {
23
- const {
24
- id,
25
- name,
26
- accept,
27
- multiple,
28
- form,
29
- "aria-readonly": ariaReadonly,
30
- onClick: onClickProp,
31
- onChange: onChangeProp,
32
- ...rest
33
- } = useFormControlProps(props);
34
- const { disabled, readOnly, required, "aria-invalid": isInvalid } = rest;
35
- const inputRef = useRef(null);
36
- const onClick = useCallback(() => {
37
- var _a;
38
- if (disabled || readOnly) return;
39
- (_a = inputRef.current) == null ? void 0 : _a.click();
40
- }, [disabled, readOnly]);
41
- const onChange = useCallback(
42
- (ev) => {
43
- const files = !isNull(ev.currentTarget.files) ? Array.from(ev.currentTarget.files) : void 0;
44
- onChangeProp == null ? void 0 : onChangeProp(files);
45
- },
46
- [onChangeProp]
47
- );
48
- const onReset = useCallback(() => {
49
- if (inputRef.current) inputRef.current.value = "";
50
- }, []);
51
- if (!isFunction(children)) {
52
- const Component = As || Button;
53
- children = /* @__PURE__ */ jsx(
54
- Component,
55
- {
56
- className: cx("ui-file-button", className),
57
- ...rest,
58
- onClick: handlerAll(onClickProp, onClick),
59
- children
60
- }
61
- );
62
- }
63
- assignRef(resetRef, onReset);
64
- return /* @__PURE__ */ jsxs(Fragment, { children: [
65
- /* @__PURE__ */ jsx(
66
- ui.input,
67
- {
68
- ref: mergeRefs(inputRef, ref),
69
- type: "file",
70
- "aria-hidden": true,
71
- tabIndex: -1,
72
- id,
73
- name,
74
- form,
75
- accept,
76
- multiple,
77
- style: {
78
- border: "0px",
79
- clip: "rect(0px, 0px, 0px, 0px)",
80
- height: "1px",
81
- width: "1px",
82
- margin: "-1px",
83
- padding: "0px",
84
- overflow: "hidden",
85
- whiteSpace: "nowrap",
86
- position: "absolute"
87
- },
88
- onChange,
89
- "aria-readonly": ariaReadonly,
90
- ...pickObject(rest, formControlProperties)
91
- }
92
- ),
93
- isFunction(children) ? children({
94
- onClick,
95
- disabled,
96
- readOnly,
97
- required,
98
- isDisabled: disabled,
99
- isReadOnly: readOnly,
100
- isRequired: required,
101
- isInvalid
102
- }) : children
103
- ] });
104
- }
105
- );
106
-
107
- export {
108
- FileButton
109
- };
110
- //# sourceMappingURL=chunk-GP22NWGH.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/file-button.tsx"],"sourcesContent":["import type { ButtonProps } from \"@yamada-ui/button\"\nimport { Button } from \"@yamada-ui/button\"\nimport type { ColorModeToken, CSS } from \"@yamada-ui/core\"\nimport { ui, forwardRef } from \"@yamada-ui/core\"\nimport type { FormControlOptions } from \"@yamada-ui/form-control\"\nimport {\n formControlProperties,\n useFormControlProps,\n} from \"@yamada-ui/form-control\"\nimport {\n assignRef,\n cx,\n handlerAll,\n isFunction,\n isNull,\n mergeRefs,\n pickObject,\n} from \"@yamada-ui/utils\"\nimport type { ChangeEvent, ForwardedRef, ReactNode } from \"react\"\nimport { useCallback, useRef } from \"react\"\n\ntype Props = {\n onClick: () => void\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n} & FormControlOptions\n\ntype FileButtonOptions = {\n /**\n * The border color when the button is invalid.\n */\n errorBorderColor?: ColorModeToken<CSS.Property.BorderColor, \"colors\">\n /**\n * Function to be called when a file change event occurs.\n */\n onChange?: (files: File[] | undefined) => void\n children?: ReactNode | ((props: Props) => ReactNode)\n /**\n * Ref to a reset function.\n */\n resetRef?: ForwardedRef<() => void>\n}\n\ntype InputProps = Partial<Pick<HTMLInputElement, \"accept\" | \"multiple\">>\n\nexport type FileButtonProps = Omit<ButtonProps, \"onChange\" | \"children\"> &\n InputProps &\n FileButtonOptions &\n FormControlOptions\n\n/**\n * `FileButton` is a button component used for users to select files.\n *\n * @see Docs https://yamada-ui.com/components/forms/file-button\n */\nexport const FileButton = forwardRef<FileButtonProps, \"input\">(\n ({ className, resetRef, as: As, children, ...props }, ref) => {\n const {\n id,\n name,\n accept,\n multiple,\n form,\n \"aria-readonly\": ariaReadonly,\n onClick: onClickProp,\n onChange: onChangeProp,\n ...rest\n } = useFormControlProps(props)\n\n const { disabled, readOnly, required, \"aria-invalid\": isInvalid } = rest\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const onClick = useCallback(() => {\n if (disabled || readOnly) return\n\n inputRef.current?.click()\n }, [disabled, readOnly])\n\n const onChange = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n const files = !isNull(ev.currentTarget.files)\n ? Array.from(ev.currentTarget.files)\n : undefined\n\n onChangeProp?.(files)\n },\n [onChangeProp],\n )\n\n const onReset = useCallback(() => {\n if (inputRef.current) inputRef.current.value = \"\"\n }, [])\n\n if (!isFunction(children)) {\n const Component = As || Button\n\n children = (\n <Component\n className={cx(\"ui-file-button\", className)}\n {...rest}\n onClick={handlerAll(onClickProp, onClick)}\n >\n {children}\n </Component>\n ) as ReactNode\n }\n\n assignRef(resetRef, onReset)\n\n return (\n <>\n <ui.input\n ref={mergeRefs(inputRef, ref)}\n type=\"file\"\n aria-hidden\n tabIndex={-1}\n id={id}\n name={name}\n form={form}\n accept={accept}\n multiple={multiple}\n style={{\n border: \"0px\",\n clip: \"rect(0px, 0px, 0px, 0px)\",\n height: \"1px\",\n width: \"1px\",\n margin: \"-1px\",\n padding: \"0px\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n position: \"absolute\",\n }}\n onChange={onChange}\n aria-readonly={ariaReadonly}\n {...pickObject(rest, formControlProperties)}\n />\n\n {isFunction(children)\n ? children({\n onClick,\n disabled,\n readOnly,\n required,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid,\n })\n : children}\n </>\n )\n },\n)\n"],"mappings":";;;AACA,SAAS,cAAc;AAEvB,SAAS,IAAI,kBAAkB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,aAAa,cAAc;AAgF5B,SAaF,UAbE,KAaF,YAbE;AA3CD,IAAM,aAAa;AAAA,EACxB,CAAC,EAAE,WAAW,UAAU,IAAI,IAAI,UAAU,GAAG,MAAM,GAAG,QAAQ;AAC5D,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,GAAG;AAAA,IACL,IAAI,oBAAoB,KAAK;AAE7B,UAAM,EAAE,UAAU,UAAU,UAAU,gBAAgB,UAAU,IAAI;AAEpE,UAAM,WAAW,OAAyB,IAAI;AAE9C,UAAM,UAAU,YAAY,MAAM;AA1EtC;AA2EM,UAAI,YAAY,SAAU;AAE1B,qBAAS,YAAT,mBAAkB;AAAA,IACpB,GAAG,CAAC,UAAU,QAAQ,CAAC;AAEvB,UAAM,WAAW;AAAA,MACf,CAAC,OAAsC;AACrC,cAAM,QAAQ,CAAC,OAAO,GAAG,cAAc,KAAK,IACxC,MAAM,KAAK,GAAG,cAAc,KAAK,IACjC;AAEJ,qDAAe;AAAA,MACjB;AAAA,MACA,CAAC,YAAY;AAAA,IACf;AAEA,UAAM,UAAU,YAAY,MAAM;AAChC,UAAI,SAAS,QAAS,UAAS,QAAQ,QAAQ;AAAA,IACjD,GAAG,CAAC,CAAC;AAEL,QAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,YAAM,YAAY,MAAM;AAExB,iBACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW,GAAG,kBAAkB,SAAS;AAAA,UACxC,GAAG;AAAA,UACJ,SAAS,WAAW,aAAa,OAAO;AAAA,UAEvC;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,cAAU,UAAU,OAAO;AAE3B,WACE,iCACE;AAAA;AAAA,QAAC,GAAG;AAAA,QAAH;AAAA,UACC,KAAK,UAAU,UAAU,GAAG;AAAA,UAC5B,MAAK;AAAA,UACL,eAAW;AAAA,UACX,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,YACL,QAAQ;AAAA,YACR,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,UAAU;AAAA,YACV,YAAY;AAAA,YACZ,UAAU;AAAA,UACZ;AAAA,UACA;AAAA,UACA,iBAAe;AAAA,UACd,GAAG,WAAW,MAAM,qBAAqB;AAAA;AAAA,MAC5C;AAAA,MAEC,WAAW,QAAQ,IAChB,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA,MACF,CAAC,IACD;AAAA,OACN;AAAA,EAEJ;AACF;","names":[]}