@mage-ui/components 1.0.129 → 1.0.131
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.
- package/dist/components/controls/dropzone/Dropzone.d.mts +24 -93
- package/dist/components/controls/dropzone/Dropzone.d.mts.map +1 -1
- package/dist/components/controls/dropzone/Dropzone.mjs +1 -1
- package/dist/components/controls/dropzone/Dropzone.mjs.map +1 -1
- package/dist/components/controls/dropzone/DropzoneBase.d.mts +87 -0
- package/dist/components/controls/dropzone/DropzoneBase.d.mts.map +1 -0
- package/dist/components/controls/dropzone/DropzoneBase.mjs +2 -0
- package/dist/components/controls/dropzone/DropzoneBase.mjs.map +1 -0
- package/dist/components/controls/{dropzone-s3 → dropzone}/DropzoneS3.d.mts +3 -10
- package/dist/components/controls/dropzone/DropzoneS3.d.mts.map +1 -0
- package/dist/components/controls/dropzone/DropzoneS3.mjs +2 -0
- package/dist/components/controls/dropzone/DropzoneS3.mjs.map +1 -0
- package/dist/components/controls/dropzone/use-dropzone-state.mjs.map +1 -1
- package/dist/components/controls/index.d.mts +3 -4
- package/dist/components/data-display/index.d.mts +1 -0
- package/dist/components/data-display/uploaded-file/UploadedFile.mjs +1 -1
- package/dist/components/data-display/uploaded-file/UploadedFile.mjs.map +1 -1
- package/dist/components/data-display/uploaded-files/UploadedFiles.d.mts +42 -0
- package/dist/components/data-display/uploaded-files/UploadedFiles.d.mts.map +1 -0
- package/dist/components/data-display/uploaded-files/UploadedFiles.mjs +2 -0
- package/dist/components/data-display/uploaded-files/UploadedFiles.mjs.map +1 -0
- package/dist/components/forms/Form.d.mts +5 -4
- package/dist/components/forms/Form.d.mts.map +1 -1
- package/dist/components/forms/Form.mjs +1 -1
- package/dist/components/forms/Form.mjs.map +1 -1
- package/dist/components/forms/controls/FormDropzoneS3.d.mts +11 -0
- package/dist/components/forms/controls/FormDropzoneS3.d.mts.map +1 -0
- package/dist/components/forms/controls/FormDropzoneS3.mjs +2 -0
- package/dist/components/forms/controls/FormDropzoneS3.mjs.map +1 -0
- package/dist/components/forms/controls/index.mjs +1 -1
- package/dist/components/forms/controls/index.mjs.map +1 -1
- package/dist/components/forms/controls/register-components.mjs +1 -1
- package/dist/components/forms/controls/register-components.mjs.map +1 -1
- package/dist/components/forms/rules/extract-form-rules.mjs +1 -1
- package/dist/components/forms/rules/extract-form-rules.mjs.map +1 -1
- package/dist/components/index.d.mts +4 -4
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
- package/dist/components/controls/dropzone-files/DropzoneFiles.d.mts +0 -62
- package/dist/components/controls/dropzone-files/DropzoneFiles.d.mts.map +0 -1
- package/dist/components/controls/dropzone-files/DropzoneFiles.mjs +0 -2
- package/dist/components/controls/dropzone-files/DropzoneFiles.mjs.map +0 -1
- package/dist/components/controls/dropzone-s3/DropzoneS3.d.mts.map +0 -1
- package/dist/components/controls/dropzone-s3/DropzoneS3.mjs +0 -2
- package/dist/components/controls/dropzone-s3/DropzoneS3.mjs.map +0 -1
- package/dist/components/forms/controls/FormDropzoneFiles.d.mts +0 -12
- package/dist/components/forms/controls/FormDropzoneFiles.d.mts.map +0 -1
- package/dist/components/forms/controls/FormDropzoneFiles.mjs +0 -2
- package/dist/components/forms/controls/FormDropzoneFiles.mjs.map +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TextInputProps } from "../controls/text-input/TextInput.mjs";
|
|
2
|
+
import { S3InitBody } from "../controls/dropzone/DropzoneS3.mjs";
|
|
2
3
|
import { TextareaProps } from "../controls/textarea/Textarea.mjs";
|
|
3
4
|
import { FormSubmitProps } from "./controls/FormSubmit.mjs";
|
|
4
5
|
import { FormCheckboxProps } from "./controls/FormCheckbox.mjs";
|
|
@@ -9,7 +10,7 @@ import { FormAutocompleteProps } from "./controls/FormAutocomplete.mjs";
|
|
|
9
10
|
import { FormFileInputProps } from "./controls/FormFileInput.mjs";
|
|
10
11
|
import { FormFileInputMultipleProps } from "./controls/FormFileInputMultiple.mjs";
|
|
11
12
|
import { FormDropzoneProps } from "./controls/FormDropzone.mjs";
|
|
12
|
-
import {
|
|
13
|
+
import { FormDropzoneS3Props } from "./controls/FormDropzoneS3.mjs";
|
|
13
14
|
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
14
15
|
import React, { ReactNode } from "react";
|
|
15
16
|
import { FieldValues, UseFormSetError } from "react-hook-form";
|
|
@@ -182,14 +183,14 @@ declare const Form: {
|
|
|
182
183
|
}: FormDropzoneProps): react_jsx_runtime0.JSX.Element;
|
|
183
184
|
displayName: string;
|
|
184
185
|
};
|
|
185
|
-
|
|
186
|
-
({
|
|
186
|
+
DropzoneS3: {
|
|
187
|
+
<TInitBody extends S3InitBody = S3InitBody>({
|
|
187
188
|
$rule: _$rule,
|
|
188
189
|
isSubmitting: _isSubmitting,
|
|
189
190
|
name,
|
|
190
191
|
onChange,
|
|
191
192
|
...props
|
|
192
|
-
}:
|
|
193
|
+
}: FormDropzoneS3Props<TInitBody>): react_jsx_runtime0.JSX.Element;
|
|
193
194
|
displayName: string;
|
|
194
195
|
};
|
|
195
196
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.mts","names":[],"sources":["../../../src/components/forms/Form.tsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Form.d.mts","names":[],"sources":["../../../src/components/forms/Form.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;KAuBK,YAAA;EACH,IAAA;EACA,OAAA;EACA,MAAA;EACA,GAAA;AAAA;AAAA,KAGU,SAAA,WAAoB,WAAA;EAC9B,QAAA,GAAW,MAAA;IAAU,IAAA,EAAM,CAAA;EAAA,MAAQ,OAAA;EACnC,aAAA,IAAiB,QAAA,EAAU,YAAA;EAC3B,eAAA,IAAmB,MAAA;IACjB,OAAA;IACA,QAAA,EAAU,eAAA,CAAgB,CAAA;IAC1B,MAAA;EAAA;EAEF,aAAA;EACA,QAAA,EAAU,SAAA;EACV,MAAA,GAAS,SAAA,CAAU,MAAA,SAAe,UAAA;EAClC,CAAA,IACE,GAAA,UACA,QAAA,GAAW,MAAA,kBACX,QAAA,uBACY,KAAA,CAAM,SAAA;EACpB,UAAA;IACE,IAAA;IACA,IAAA;EAAA;AAAA;AAAA,cAYS,IAAA;EAAA,WAAkB,WAAA;IAAW,QAAA;IAAA,aAAA;IAAA,eAAA;IAAA,aAAA;IAAA,QAAA;IAAA,MAAA;IAAA,CAAA;IAAA;EAAA,GASvC,SAAA,CAAU,CAAA,IAAE,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{FormAutocomplete as e}from"./controls/FormAutocomplete.mjs";import{FormCheckbox as t}from"./controls/FormCheckbox.mjs";import{FormCombobox as n}from"./controls/FormCombobox.mjs";import{FormDropzone as r}from"./controls/FormDropzone.mjs";import{
|
|
1
|
+
import{FormAutocomplete as e}from"./controls/FormAutocomplete.mjs";import{FormCheckbox as t}from"./controls/FormCheckbox.mjs";import{FormCombobox as n}from"./controls/FormCombobox.mjs";import{FormDropzone as r}from"./controls/FormDropzone.mjs";import{FormDropzoneS3 as i}from"./controls/FormDropzoneS3.mjs";import{FormFileInput as a}from"./controls/FormFileInput.mjs";import{FormFileInputMultiple as o}from"./controls/FormFileInputMultiple.mjs";import{FormHidden as s}from"./controls/FormHidden.mjs";import{FormPassword as c}from"./controls/FormPassword.mjs";import{FormSelect as l}from"./controls/FormSelect.mjs";import{FormSubmit as u}from"./controls/FormSubmit.mjs";import{FormTextarea as d}from"./controls/FormTextarea.mjs";import{FormTextInput as f}from"./controls/FormTextInput.mjs";import{FormBase as p}from"./FormBase.mjs";import{FormErrorBox as m}from"./FormErrorBox.mjs";import{form as h,formRoot as g}from"@mage-ui/styled-system/recipes";import{jsx as _}from"react/jsx-runtime";const v=({$fetcher:e,onValidSubmit:t,onInvalidSubmit:n,invalidStatus:r=[],children:i,schema:a,t:o,classNames:s})=>_(p,{onSubmit:async({data:i,setError:a})=>{await e({data:i}).then(e=>{let n=e;if(n?.statusCode&&n.statusCode>=400)throw n;t?.(e||{})}).catch(e=>{switch(e.statusCode){case 400:case 422:e.cause?.issues&&Object.keys(e.cause.issues).forEach(t=>{a(t,{type:`server`,message:e.cause?.issues?.[t]})}),a(`root.serverError`,{type:`server`,message:e?.message??`Something went wrong`});break;default:if(r.includes(e.statusCode)){n?.({message:e.message,setError:a,status:e.statusCode});break}throw e}})},schema:a,errorBox:m,t:o,classNames:{form:s?.form??h(),root:s?.root??g()},children:i});v.displayName=`Form`,v.TextInput=f,v.Textarea=d,v.Submit=u,v.Hidden=s,v.Checkbox=t,v.Password=c,v.Select=l,v.Combobox=n,v.Autocomplete=e,v.FileInput=a,v.FileInputMultiple=o,v.Dropzone=r,v.DropzoneS3=i;export{v as Form};
|
|
2
2
|
//# sourceMappingURL=Form.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.mjs","names":[],"sources":["../../../src/components/forms/Form.tsx"],"sourcesContent":["import type React from 'react';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, UseFormSetError } from 'react-hook-form';\nimport type { ZodObject, ZodTypeAny } from 'zod';\n\nimport { form, formRoot } from '@mage-ui/styled-system/recipes';\n\nimport { FormAutocomplete } from './controls/FormAutocomplete';\nimport { FormCheckbox } from './controls/FormCheckbox';\nimport { FormCombobox } from './controls/FormCombobox';\nimport { FormDropzone } from './controls/FormDropzone';\nimport {
|
|
1
|
+
{"version":3,"file":"Form.mjs","names":[],"sources":["../../../src/components/forms/Form.tsx"],"sourcesContent":["import type React from 'react';\nimport type { ReactNode } from 'react';\nimport type { FieldValues, UseFormSetError } from 'react-hook-form';\nimport type { ZodObject, ZodTypeAny } from 'zod';\n\nimport { form, formRoot } from '@mage-ui/styled-system/recipes';\n\nimport { FormAutocomplete } from './controls/FormAutocomplete';\nimport { FormCheckbox } from './controls/FormCheckbox';\nimport { FormCombobox } from './controls/FormCombobox';\nimport { FormDropzone } from './controls/FormDropzone';\nimport { FormDropzoneS3 } from './controls/FormDropzoneS3';\nimport { FormFileInput } from './controls/FormFileInput';\nimport { FormFileInputMultiple } from './controls/FormFileInputMultiple';\nimport { FormHidden } from './controls/FormHidden';\nimport { FormPassword } from './controls/FormPassword';\nimport { FormSelect } from './controls/FormSelect';\nimport { FormSubmit } from './controls/FormSubmit';\nimport { FormTextarea } from './controls/FormTextarea';\nimport { FormTextInput } from './controls/FormTextInput';\nimport { FormBase } from './FormBase';\nimport { FormErrorBox } from './FormErrorBox';\n\ntype FormResponse = {\n body?: object;\n details?: string;\n status?: number;\n url?: string;\n};\n\nexport type FormProps<T extends FieldValues> = {\n $fetcher: (params: { data: T }) => Promise<unknown>;\n onValidSubmit?: (response: FormResponse) => void;\n onInvalidSubmit?: (params: {\n message: string;\n setError: UseFormSetError<T>;\n status: number;\n }) => void;\n invalidStatus?: number[];\n children: ReactNode;\n schema?: ZodObject<Record<string, ZodTypeAny>>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n classNames?: {\n form?: string;\n root?: string;\n };\n};\n\ntype FormError = {\n statusCode: number;\n message: string;\n cause?: {\n issues: Record<string, string>;\n };\n};\n\nexport const Form = <T extends FieldValues>({\n $fetcher,\n onValidSubmit,\n onInvalidSubmit,\n invalidStatus = [],\n children,\n schema,\n t,\n classNames,\n}: FormProps<T>) => {\n const onSubmit = async ({\n data,\n setError,\n }: {\n data: FieldValues;\n setError: UseFormSetError<FieldValues>;\n }) => {\n await $fetcher({ data: data as T })\n .then((response) => {\n const res = response as FormError & FormResponse;\n if (res?.statusCode && res.statusCode >= 400) {\n throw res;\n }\n\n onValidSubmit?.((response || {}) as FormResponse);\n })\n .catch((error: FormError) => {\n switch (error.statusCode) {\n case 400:\n case 422: {\n if (error.cause?.issues) {\n Object.keys(error.cause.issues).forEach((key) => {\n setError(key, {\n type: 'server',\n message: error.cause?.issues?.[key],\n });\n });\n }\n setError('root.serverError', {\n type: 'server',\n message: error?.message ?? 'Something went wrong',\n });\n break;\n }\n default:\n if (invalidStatus.includes(error.statusCode)) {\n onInvalidSubmit?.({\n message: error.message,\n setError: setError as UseFormSetError<T>,\n status: error.statusCode,\n });\n break;\n }\n throw error;\n }\n });\n };\n\n return (\n <FormBase\n onSubmit={onSubmit}\n schema={schema}\n errorBox={FormErrorBox}\n t={t}\n classNames={{\n form: classNames?.form ?? form(),\n root: classNames?.root ?? formRoot(),\n }}\n >\n {children}\n </FormBase>\n );\n};\n\nForm.displayName = 'Form';\nForm.TextInput = FormTextInput;\nForm.Textarea = FormTextarea;\nForm.Submit = FormSubmit;\nForm.Hidden = FormHidden;\nForm.Checkbox = FormCheckbox;\nForm.Password = FormPassword;\nForm.Select = FormSelect;\nForm.Combobox = FormCombobox;\nForm.Autocomplete = FormAutocomplete;\nForm.FileInput = FormFileInput;\nForm.FileInputMultiple = FormFileInputMultiple;\nForm.Dropzone = FormDropzone;\nForm.DropzoneS3 = FormDropzoneS3;\n"],"mappings":"69BA4DA,MAAa,GAA+B,CAC1C,WACA,gBACA,kBACA,gBAAgB,EAAE,CAClB,WACA,SACA,IACA,gBAmDE,EAAC,EAAD,CACY,SAlDG,MAAO,CACtB,OACA,cAII,CACJ,MAAM,EAAS,CAAQ,OAAW,CAAC,CAChC,KAAM,GAAa,CAClB,IAAM,EAAM,EACZ,GAAI,GAAK,YAAc,EAAI,YAAc,IACvC,MAAM,EAGR,IAAiB,GAAY,EAAE,CAAkB,EACjD,CACD,MAAO,GAAqB,CAC3B,OAAQ,EAAM,WAAd,CACE,IAAK,KACL,IAAK,KACC,EAAM,OAAO,QACf,OAAO,KAAK,EAAM,MAAM,OAAO,CAAC,QAAS,GAAQ,CAC/C,EAAS,EAAK,CACZ,KAAM,SACN,QAAS,EAAM,OAAO,SAAS,GAChC,CAAC,EACF,CAEJ,EAAS,mBAAoB,CAC3B,KAAM,SACN,QAAS,GAAO,SAAW,uBAC5B,CAAC,CACF,MAEF,QACE,GAAI,EAAc,SAAS,EAAM,WAAW,CAAE,CAC5C,IAAkB,CAChB,QAAS,EAAM,QACL,WACV,OAAQ,EAAM,WACf,CAAC,CACF,MAEF,MAAM,IAEV,EAMM,SACR,SAAU,EACP,IACH,WAAY,CACV,KAAM,GAAY,MAAQ,GAAM,CAChC,KAAM,GAAY,MAAQ,GAAU,CACrC,CAEA,WACQ,CAAA,CAIf,EAAK,YAAc,OACnB,EAAK,UAAY,EACjB,EAAK,SAAW,EAChB,EAAK,OAAS,EACd,EAAK,OAAS,EACd,EAAK,SAAW,EAChB,EAAK,SAAW,EAChB,EAAK,OAAS,EACd,EAAK,SAAW,EAChB,EAAK,aAAe,EACpB,EAAK,UAAY,EACjB,EAAK,kBAAoB,EACzB,EAAK,SAAW,EAChB,EAAK,WAAa"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DropzoneS3Props, S3InitBody } from "../../controls/dropzone/DropzoneS3.mjs";
|
|
2
|
+
//#region src/components/forms/controls/FormDropzoneS3.d.ts
|
|
3
|
+
type FormDropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> = Omit<DropzoneS3Props<TInitBody>, 'autoSend' | 'onChange'> & {
|
|
4
|
+
name: string;
|
|
5
|
+
$rule?: string;
|
|
6
|
+
isSubmitting?: boolean;
|
|
7
|
+
onChange?: (files: File[]) => void;
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
export { FormDropzoneS3Props };
|
|
11
|
+
//# sourceMappingURL=FormDropzoneS3.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormDropzoneS3.d.mts","names":[],"sources":["../../../../src/components/forms/controls/FormDropzoneS3.tsx"],"mappings":";;KAQY,mBAAA,mBAAsC,UAAA,GAAa,UAAA,IAC7D,IAAA,CAAK,eAAA,CAAgB,SAAA;EACnB,IAAA;EACA,KAAA;EACA,YAAA;EACA,QAAA,IAAY,KAAA,EAAO,IAAA;AAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{DropzoneS3 as e}from"../../controls/dropzone/DropzoneS3.mjs";import{jsx as t}from"react/jsx-runtime";import{Controller as n}from"react-hook-form";const r=({$rule:r,isSubmitting:i,name:a,onChange:o,...s})=>t(n,{name:a,render:({field:{onChange:n}})=>t(e,{...s,autoSend:!1,onChange:e=>{n(e),o?.(e)}})});r.displayName=`Form.DropzoneS3`;export{r as FormDropzoneS3};
|
|
2
|
+
//# sourceMappingURL=FormDropzoneS3.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormDropzoneS3.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormDropzoneS3.tsx"],"sourcesContent":["import { Controller } from 'react-hook-form';\n\nimport {\n DropzoneS3,\n type DropzoneS3Props,\n type S3InitBody,\n} from '@/components/controls/dropzone/DropzoneS3';\n\nexport type FormDropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> =\n Omit<DropzoneS3Props<TInitBody>, 'autoSend' | 'onChange'> & {\n name: string;\n $rule?: string;\n isSubmitting?: boolean;\n onChange?: (files: File[]) => void;\n };\n\nexport const FormDropzoneS3 = <TInitBody extends S3InitBody = S3InitBody>({\n $rule: _$rule,\n isSubmitting: _isSubmitting,\n name,\n onChange,\n ...props\n}: FormDropzoneS3Props<TInitBody>) => {\n return (\n <Controller\n name={name}\n render={({ field: { onChange: fieldOnChange } }) => (\n <DropzoneS3<TInitBody>\n {...props}\n autoSend={false}\n onChange={(files) => {\n fieldOnChange(files);\n onChange?.(files);\n }}\n />\n )}\n />\n );\n};\n\nFormDropzoneS3.displayName = 'Form.DropzoneS3';\n"],"mappings":"yJAgBA,MAAa,GAA6D,CACxE,MAAO,EACP,aAAc,EACd,OACA,WACA,GAAG,KAGD,EAAC,EAAD,CACQ,OACN,QAAS,CAAE,MAAO,CAAE,SAAU,MAC5B,EAAC,EAAD,CACE,GAAI,EACJ,SAAU,GACV,SAAW,GAAU,CACnB,EAAc,EAAM,CACpB,IAAW,EAAM,EAEnB,CAAA,CAEJ,CAAA,CAIN,EAAe,YAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{FormAutocomplete as e}from"./FormAutocomplete.mjs";import{FormCheckbox as t}from"./FormCheckbox.mjs";import{FormCombobox as n}from"./FormCombobox.mjs";import{FormDropzone as r}from"./FormDropzone.mjs";import{
|
|
1
|
+
import{FormAutocomplete as e}from"./FormAutocomplete.mjs";import{FormCheckbox as t}from"./FormCheckbox.mjs";import{FormCombobox as n}from"./FormCombobox.mjs";import{FormDropzone as r}from"./FormDropzone.mjs";import{FormDropzoneS3 as i}from"./FormDropzoneS3.mjs";import{FormFileInput as a}from"./FormFileInput.mjs";import{FormFileInputMultiple as o}from"./FormFileInputMultiple.mjs";import{FormHidden as s}from"./FormHidden.mjs";import{FormPassword as c}from"./FormPassword.mjs";import{FormSelect as l}from"./FormSelect.mjs";import{FormSubmit as u}from"./FormSubmit.mjs";import{FormTextarea as d}from"./FormTextarea.mjs";import{FormTextInput as f}from"./FormTextInput.mjs";const p=[u,f,d,c,s,t,l,n,e,a,o,r,i];export{p as controls};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/forms/controls/index.ts"],"sourcesContent":["import { FormAutocomplete } from './FormAutocomplete';\nimport { FormCheckbox } from './FormCheckbox';\nimport { FormCombobox } from './FormCombobox';\nimport { FormDropzone } from './FormDropzone';\nimport {
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/forms/controls/index.ts"],"sourcesContent":["import { FormAutocomplete } from './FormAutocomplete';\nimport { FormCheckbox } from './FormCheckbox';\nimport { FormCombobox } from './FormCombobox';\nimport { FormDropzone } from './FormDropzone';\nimport { FormDropzoneS3 } from './FormDropzoneS3';\nimport { FormFileInput } from './FormFileInput';\nimport { FormFileInputMultiple } from './FormFileInputMultiple';\nimport { FormHidden } from './FormHidden';\nimport { FormPassword } from './FormPassword';\nimport { FormSelect } from './FormSelect';\nimport { FormSubmit } from './FormSubmit';\nimport { FormTextarea } from './FormTextarea';\nimport { FormTextInput } from './FormTextInput';\n\nexport const controls = [\n FormSubmit,\n FormTextInput,\n FormTextarea,\n FormPassword,\n FormHidden,\n FormCheckbox,\n FormSelect,\n FormCombobox,\n FormAutocomplete,\n FormFileInput,\n FormFileInputMultiple,\n FormDropzone,\n FormDropzoneS3,\n] as React.ComponentType[];\n"],"mappings":"gqBAcA,MAAa,EAAW,CACtB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{Fragment as e,jsx as t}from"react/jsx-runtime";import{Children as n,cloneElement as r,isValidElement as i}from"react";const a=new Set([`Form.Password`,`Form.Checkbox`,`Form.Select`,`Form.Combobox`,`Form.Autocomplete`,`Form.Hidden`,`Form.FileInput`,`Form.FileInputMultiple`,`Form.Dropzone
|
|
1
|
+
"use client";import{Fragment as e,jsx as t}from"react/jsx-runtime";import{Children as n,cloneElement as r,isValidElement as i}from"react";const a=new Set([`Form.Password`,`Form.Checkbox`,`Form.Select`,`Form.Combobox`,`Form.Autocomplete`,`Form.Hidden`,`Form.FileInput`,`Form.FileInputMultiple`,`Form.Dropzone`]),o=(e,t,n)=>{if(e)try{let r=JSON.parse(e),i={...r.bindings,attribute:t},a=n?n(r.key,i,r.fallback):r.fallback;return String(a).replace(/{attribute}/g,t)}catch{return e.replace(/{attribute}/g,t)}},s=({children:s,register:c,componentTypes:l,errors:u={},t:d})=>{let f=e=>n.map(e,e=>{if(!i(e))return e;let t=e.props;if(l.some(t=>e.type===t)){let n=t.name,i=u[n??``]?.message?.toString(),s=n?o(i,n,d):void 0,l=e.type.displayName;return r(e,{...n!==void 0&&!a.has(l??``)&&n?c(n):{},error:s})}return t.children?r(e,{children:f(t.children)}):e});return t(e,{children:f(s)})};export{s as RegisteredFormChildren};
|
|
2
2
|
//# sourceMappingURL=register-components.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-components.mjs","names":[],"sources":["../../../../src/components/forms/controls/register-components.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { Children, cloneElement, isValidElement } from 'react';\nimport type { FieldErrors, UseFormRegister } from 'react-hook-form';\n\ninterface TranslationMessage {\n key: string;\n bindings: Record<string, string>;\n fallback: string;\n}\n\nconst controllerDisplayNames = new Set([\n 'Form.Password',\n 'Form.Checkbox',\n 'Form.Select',\n 'Form.Combobox',\n 'Form.Autocomplete',\n 'Form.Hidden',\n 'Form.FileInput',\n 'Form.FileInputMultiple',\n 'Form.Dropzone',\n
|
|
1
|
+
{"version":3,"file":"register-components.mjs","names":[],"sources":["../../../../src/components/forms/controls/register-components.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { Children, cloneElement, isValidElement } from 'react';\nimport type { FieldErrors, UseFormRegister } from 'react-hook-form';\n\ninterface TranslationMessage {\n key: string;\n bindings: Record<string, string>;\n fallback: string;\n}\n\nconst controllerDisplayNames = new Set([\n 'Form.Password',\n 'Form.Checkbox',\n 'Form.Select',\n 'Form.Combobox',\n 'Form.Autocomplete',\n 'Form.Hidden',\n 'Form.FileInput',\n 'Form.FileInputMultiple',\n 'Form.Dropzone',\n]);\n\nconst parseAndTranslate = (\n message: string | undefined,\n fieldName: string,\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode,\n): string | undefined => {\n if (!message) return undefined;\n\n try {\n const parsed: TranslationMessage = JSON.parse(message);\n const bindings = { ...parsed.bindings, attribute: fieldName };\n const result = t\n ? t(parsed.key, bindings, parsed.fallback)\n : parsed.fallback;\n return String(result).replace(/{attribute}/g, fieldName);\n } catch {\n return message.replace(/{attribute}/g, fieldName);\n }\n};\n\ninterface RegisteredFormChildrenProps {\n children: React.ReactNode;\n register: UseFormRegister<Record<string, unknown>>;\n componentTypes: React.ComponentType[];\n errors?: FieldErrors<Record<string, unknown>>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n}\n\nexport const RegisteredFormChildren = ({\n children,\n register,\n componentTypes,\n errors = {},\n t,\n}: RegisteredFormChildrenProps): React.ReactNode => {\n const processChildren = (nodes: React.ReactNode): React.ReactNode => {\n return Children.map(nodes, (child) => {\n if (!isValidElement(child)) {\n return child;\n }\n\n const childProps = child.props as {\n name?: string;\n children?: React.ReactNode;\n };\n\n if (\n componentTypes.some((type: React.ComponentType) => child.type === type)\n ) {\n const fieldName = childProps.name;\n const errorMessage = errors[fieldName ?? '']?.message?.toString();\n const translatedError = fieldName\n ? parseAndTranslate(errorMessage, fieldName, t)\n : undefined;\n const displayName = (\n child.type as React.ComponentType & { displayName?: string }\n ).displayName;\n const shouldRegister =\n fieldName !== undefined &&\n !controllerDisplayNames.has(displayName ?? '');\n const registrationProps =\n shouldRegister && fieldName ? register(fieldName) : {};\n\n return cloneElement(child, {\n ...registrationProps,\n error: translatedError,\n } as Partial<typeof child.props>);\n }\n\n if (childProps.children) {\n return cloneElement(child, {\n children: processChildren(childProps.children),\n } as Partial<typeof child.props>);\n }\n\n return child;\n });\n };\n\n return <>{processChildren(children)}</>;\n};\n"],"mappings":"0IAYA,MAAM,EAAyB,IAAI,IAAI,CACrC,gBACA,gBACA,cACA,gBACA,oBACA,cACA,iBACA,yBACA,gBACD,CAAC,CAEI,GACJ,EACA,EACA,IAKuB,CAClB,KAEL,GAAI,CACF,IAAM,EAA6B,KAAK,MAAM,EAAQ,CAChD,EAAW,CAAE,GAAG,EAAO,SAAU,UAAW,EAAW,CACvD,EAAS,EACX,EAAE,EAAO,IAAK,EAAU,EAAO,SAAS,CACxC,EAAO,SACX,OAAO,OAAO,EAAO,CAAC,QAAQ,eAAgB,EAAU,MAClD,CACN,OAAO,EAAQ,QAAQ,eAAgB,EAAU,GAgBxC,GAA0B,CACrC,WACA,WACA,iBACA,SAAS,EAAE,CACX,OACkD,CAClD,IAAM,EAAmB,GAChB,EAAS,IAAI,EAAQ,GAAU,CACpC,GAAI,CAAC,EAAe,EAAM,CACxB,OAAO,EAGT,IAAM,EAAa,EAAM,MAKzB,GACE,EAAe,KAAM,GAA8B,EAAM,OAAS,EAAK,CACvE,CACA,IAAM,EAAY,EAAW,KACvB,EAAe,EAAO,GAAa,KAAK,SAAS,UAAU,CAC3D,EAAkB,EACpB,EAAkB,EAAc,EAAW,EAAE,CAC7C,IAAA,GACE,EACJ,EAAM,KACN,YAOF,OAAO,EAAa,EAAO,CACzB,GANA,IAAc,IAAA,IACd,CAAC,EAAuB,IAAI,GAAe,GAAG,EAE5B,EAAY,EAAS,EAAU,CAAG,EAAE,CAItD,MAAO,EACR,CAAgC,CASnC,OANI,EAAW,SACN,EAAa,EAAO,CACzB,SAAU,EAAgB,EAAW,SAAS,CAC/C,CAAgC,CAG5B,GACP,CAGJ,OAAO,EAAA,EAAA,CAAA,SAAG,EAAgB,EAAS,CAAI,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{findFormComponents as e}from"../controls/find-form-components.mjs";import{PASSWORD_RULES as t}from"./password-rules.mjs";import n from"./password.mjs";import{parseRules as r}from"./zod.mjs";import{z as i}from"zod";const a=(e,t)=>{if(!e.name||!e.$rule?.includes(`confirmed`))return;let n=e.$rule.split(`|`).find(e=>e.startsWith(`confirmed`)),r=n?.includes(`:`)?n.split(`:`)[1]:`${e.name}_confirmation`;t.confirmedFields.push({field:e.name,target:r})},o=(e,t)=>{e.name&&(e.$rule?.includes(`required`)?(t.rules[e.name]=i.boolean().optional().or(i.literal(!1)),t.requiredBooleanFields.push(e.name)):t.rules[e.name]=i.boolean().optional())},s=(e,a)=>{if(!e.name)return;let o=i.string(),s=e.$rule?e.$rule.split(`|`).filter(e=>e.trim()!==`password`).join(`|`):``;s&&(o=r(s));let c=e.rules||(e.$rule?.includes(`password`)?t:[]);c.length>0&&(o=n(o,c));let l=!e.$rule||e.$rule.includes(`optional`)||s.includes(`optional`);a.rules[e.name]=l?o.optional():o},c=(e,t)=>{e.name&&(t.rules[e.name]=e.$rule?r(e.$rule):i.string().optional())},l=(e,t)=>{e.name&&(t.rules[e.name]=i.any().optional())},u=JSON.stringify({key:`required`,fallback:`El campo {attribute} es obligatorio.`,bindings:{}}),d=(e,t,n)=>{e.name&&(e.$rule?.includes(`required`)?t.rules[e.name]=n?i.any().refine(e=>Array.isArray(e)&&e.length>0,{message:u}):i.any().refine(e=>e instanceof File,{message:u}):t.rules[e.name]=i.any().optional())},f=(e,t)=>t.confirmedFields.length===0&&t.requiredBooleanFields.length===0?e:e.superRefine((e,n)=>{t.confirmedFields.forEach(({field:t,target:r})=>{e[t]!==e[r]&&n.addIssue({code:i.ZodIssueCode.custom,message:JSON.stringify({key:`confirmed`,fallback:`La confirmación no coincide.`,bindings:{}}),path:[r]})}),t.requiredBooleanFields.forEach(t=>{e[t]!==!0&&n.addIssue({code:i.ZodIssueCode.custom,message:JSON.stringify({key:`required`,fallback:`El campo {attribute} es obligatorio.`,bindings:{}}),path:[t]})})}),p=(t,n)=>{let r={rules:{},confirmedFields:[],requiredBooleanFields:[]};return e(t,n).forEach(e=>{let t=e.props,n=e.type.displayName;t.name&&(a(t,r),n===`Form.Checkbox`?o(t,r):n===`Form.Password`?s(t,r):n===`Form.Select`||n===`Form.Combobox`||n===`Form.Autocomplete`?l(t,r):n===`Form.FileInput`?d(t,r,!1):n===`Form.FileInputMultiple`||n===`Form.Dropzone`||n===`Form.
|
|
1
|
+
import{findFormComponents as e}from"../controls/find-form-components.mjs";import{PASSWORD_RULES as t}from"./password-rules.mjs";import n from"./password.mjs";import{parseRules as r}from"./zod.mjs";import{z as i}from"zod";const a=(e,t)=>{if(!e.name||!e.$rule?.includes(`confirmed`))return;let n=e.$rule.split(`|`).find(e=>e.startsWith(`confirmed`)),r=n?.includes(`:`)?n.split(`:`)[1]:`${e.name}_confirmation`;t.confirmedFields.push({field:e.name,target:r})},o=(e,t)=>{e.name&&(e.$rule?.includes(`required`)?(t.rules[e.name]=i.boolean().optional().or(i.literal(!1)),t.requiredBooleanFields.push(e.name)):t.rules[e.name]=i.boolean().optional())},s=(e,a)=>{if(!e.name)return;let o=i.string(),s=e.$rule?e.$rule.split(`|`).filter(e=>e.trim()!==`password`).join(`|`):``;s&&(o=r(s));let c=e.rules||(e.$rule?.includes(`password`)?t:[]);c.length>0&&(o=n(o,c));let l=!e.$rule||e.$rule.includes(`optional`)||s.includes(`optional`);a.rules[e.name]=l?o.optional():o},c=(e,t)=>{e.name&&(t.rules[e.name]=e.$rule?r(e.$rule):i.string().optional())},l=(e,t)=>{e.name&&(t.rules[e.name]=i.any().optional())},u=JSON.stringify({key:`required`,fallback:`El campo {attribute} es obligatorio.`,bindings:{}}),d=(e,t,n)=>{e.name&&(e.$rule?.includes(`required`)?t.rules[e.name]=n?i.any().refine(e=>Array.isArray(e)&&e.length>0,{message:u}):i.any().refine(e=>e instanceof File,{message:u}):t.rules[e.name]=i.any().optional())},f=(e,t)=>t.confirmedFields.length===0&&t.requiredBooleanFields.length===0?e:e.superRefine((e,n)=>{t.confirmedFields.forEach(({field:t,target:r})=>{e[t]!==e[r]&&n.addIssue({code:i.ZodIssueCode.custom,message:JSON.stringify({key:`confirmed`,fallback:`La confirmación no coincide.`,bindings:{}}),path:[r]})}),t.requiredBooleanFields.forEach(t=>{e[t]!==!0&&n.addIssue({code:i.ZodIssueCode.custom,message:JSON.stringify({key:`required`,fallback:`El campo {attribute} es obligatorio.`,bindings:{}}),path:[t]})})}),p=(t,n)=>{let r={rules:{},confirmedFields:[],requiredBooleanFields:[]};return e(t,n).forEach(e=>{let t=e.props,n=e.type.displayName;t.name&&(a(t,r),n===`Form.Checkbox`?o(t,r):n===`Form.Password`?s(t,r):n===`Form.Select`||n===`Form.Combobox`||n===`Form.Autocomplete`?l(t,r):n===`Form.FileInput`?d(t,r,!1):n===`Form.FileInputMultiple`||n===`Form.Dropzone`||n===`Form.DropzoneS3`?d(t,r,!0):c(t,r))}),f(i.object(r.rules).loose(),r)};export{p as extractFormRules};
|
|
2
2
|
//# sourceMappingURL=extract-form-rules.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract-form-rules.mjs","names":["passwordRule"],"sources":["../../../../src/components/forms/rules/extract-form-rules.ts"],"sourcesContent":["import type React from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { type ZodTypeAny, z } from 'zod';\n\nimport type { PasswordRuleDefinition } from '@/components/controls/password-input/usePasswordRules';\n\nimport { findFormComponents } from '../controls/find-form-components';\nimport passwordRule from './password';\nimport { PASSWORD_RULES } from './password-rules';\nimport { parseRules } from './zod';\n\ntype FormRuleContext = {\n rules: Record<string, ZodTypeAny>;\n confirmedFields: { field: string; target: string }[];\n requiredBooleanFields: string[];\n};\n\ntype ComponentProps = {\n name?: string;\n $rule?: string;\n rules?: PasswordRuleDefinition[];\n};\n\nconst processConfirmedRule = (\n props: ComponentProps,\n context: FormRuleContext,\n) => {\n if (!props.name || !props.$rule?.includes('confirmed')) return;\n\n const rulesList = props.$rule.split('|');\n const confirmedRule = rulesList.find((r) => r.startsWith('confirmed'));\n const target = confirmedRule?.includes(':')\n ? confirmedRule.split(':')[1]\n : `${props.name}_confirmation`;\n\n context.confirmedFields.push({ field: props.name, target });\n};\n\nconst processCheckbox = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n\n if (props.$rule?.includes('required')) {\n context.rules[props.name] = z.boolean().optional().or(z.literal(false));\n context.requiredBooleanFields.push(props.name);\n } else {\n context.rules[props.name] = z.boolean().optional();\n }\n};\n\nconst processPassword = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n\n let baseSchema: ZodTypeAny = z.string();\n const otherRules = props.$rule\n ? props.$rule\n .split('|')\n .filter((r) => r.trim() !== 'password')\n .join('|')\n : '';\n\n if (otherRules) {\n baseSchema = parseRules(otherRules);\n }\n\n const passwordRules =\n props.rules || (props.$rule?.includes('password') ? PASSWORD_RULES : []);\n\n if (passwordRules.length > 0) {\n baseSchema = passwordRule(baseSchema, passwordRules);\n }\n\n const isOptional =\n !props.$rule ||\n props.$rule.includes('optional') ||\n otherRules.includes('optional');\n\n context.rules[props.name] = isOptional ? baseSchema.optional() : baseSchema;\n};\n\nconst processDefault = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n context.rules[props.name] = props.$rule\n ? parseRules(props.$rule)\n : z.string().optional();\n};\n\nconst processDropdown = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n context.rules[props.name] = z.any().optional();\n};\n\nconst requiredMessage = JSON.stringify({\n key: 'required',\n fallback: 'El campo {attribute} es obligatorio.',\n bindings: {},\n});\n\nconst processFileInput = (\n props: ComponentProps,\n context: FormRuleContext,\n multiple: boolean,\n) => {\n if (!props.name) return;\n\n if (props.$rule?.includes('required')) {\n context.rules[props.name] = multiple\n ? z.any().refine((val) => Array.isArray(val) && val.length > 0, {\n message: requiredMessage,\n })\n : z\n .any()\n .refine((val) => val instanceof File, { message: requiredMessage });\n } else {\n context.rules[props.name] = z.any().optional();\n }\n};\n\nconst applyRefinements = (\n schema: z.ZodObject<FieldValues>,\n context: FormRuleContext,\n) => {\n if (\n context.confirmedFields.length === 0 &&\n context.requiredBooleanFields.length === 0\n ) {\n return schema;\n }\n\n return schema.superRefine((data, ctx) => {\n context.confirmedFields.forEach(({ field, target }) => {\n if (data[field] !== data[target]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: 'confirmed',\n fallback: 'La confirmación no coincide.',\n bindings: {},\n }),\n path: [target],\n });\n }\n });\n\n context.requiredBooleanFields.forEach((field) => {\n if (data[field] !== true) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: 'required',\n fallback: 'El campo {attribute} es obligatorio.',\n bindings: {},\n }),\n path: [field],\n });\n }\n });\n });\n};\n\nexport const extractFormRules = (\n children: React.ReactNode,\n componentTypes: React.ComponentType[],\n): ZodTypeAny => {\n const context: FormRuleContext = {\n rules: {},\n confirmedFields: [],\n requiredBooleanFields: [],\n };\n\n const components = findFormComponents(children, componentTypes);\n\n components.forEach((component) => {\n const props = component.props as ComponentProps;\n const displayName = (component.type as { displayName?: string })\n .displayName;\n\n if (props.name) {\n processConfirmedRule(props, context);\n\n if (displayName === 'Form.Checkbox') {\n processCheckbox(props, context);\n } else if (displayName === 'Form.Password') {\n processPassword(props, context);\n } else if (\n displayName === 'Form.Select' ||\n displayName === 'Form.Combobox' ||\n displayName === 'Form.Autocomplete'\n ) {\n processDropdown(props, context);\n } else if (displayName === 'Form.FileInput') {\n processFileInput(props, context, false);\n } else if (\n displayName === 'Form.FileInputMultiple' ||\n displayName === 'Form.Dropzone' ||\n displayName === 'Form.
|
|
1
|
+
{"version":3,"file":"extract-form-rules.mjs","names":["passwordRule"],"sources":["../../../../src/components/forms/rules/extract-form-rules.ts"],"sourcesContent":["import type React from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { type ZodTypeAny, z } from 'zod';\n\nimport type { PasswordRuleDefinition } from '@/components/controls/password-input/usePasswordRules';\n\nimport { findFormComponents } from '../controls/find-form-components';\nimport passwordRule from './password';\nimport { PASSWORD_RULES } from './password-rules';\nimport { parseRules } from './zod';\n\ntype FormRuleContext = {\n rules: Record<string, ZodTypeAny>;\n confirmedFields: { field: string; target: string }[];\n requiredBooleanFields: string[];\n};\n\ntype ComponentProps = {\n name?: string;\n $rule?: string;\n rules?: PasswordRuleDefinition[];\n};\n\nconst processConfirmedRule = (\n props: ComponentProps,\n context: FormRuleContext,\n) => {\n if (!props.name || !props.$rule?.includes('confirmed')) return;\n\n const rulesList = props.$rule.split('|');\n const confirmedRule = rulesList.find((r) => r.startsWith('confirmed'));\n const target = confirmedRule?.includes(':')\n ? confirmedRule.split(':')[1]\n : `${props.name}_confirmation`;\n\n context.confirmedFields.push({ field: props.name, target });\n};\n\nconst processCheckbox = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n\n if (props.$rule?.includes('required')) {\n context.rules[props.name] = z.boolean().optional().or(z.literal(false));\n context.requiredBooleanFields.push(props.name);\n } else {\n context.rules[props.name] = z.boolean().optional();\n }\n};\n\nconst processPassword = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n\n let baseSchema: ZodTypeAny = z.string();\n const otherRules = props.$rule\n ? props.$rule\n .split('|')\n .filter((r) => r.trim() !== 'password')\n .join('|')\n : '';\n\n if (otherRules) {\n baseSchema = parseRules(otherRules);\n }\n\n const passwordRules =\n props.rules || (props.$rule?.includes('password') ? PASSWORD_RULES : []);\n\n if (passwordRules.length > 0) {\n baseSchema = passwordRule(baseSchema, passwordRules);\n }\n\n const isOptional =\n !props.$rule ||\n props.$rule.includes('optional') ||\n otherRules.includes('optional');\n\n context.rules[props.name] = isOptional ? baseSchema.optional() : baseSchema;\n};\n\nconst processDefault = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n context.rules[props.name] = props.$rule\n ? parseRules(props.$rule)\n : z.string().optional();\n};\n\nconst processDropdown = (props: ComponentProps, context: FormRuleContext) => {\n if (!props.name) return;\n context.rules[props.name] = z.any().optional();\n};\n\nconst requiredMessage = JSON.stringify({\n key: 'required',\n fallback: 'El campo {attribute} es obligatorio.',\n bindings: {},\n});\n\nconst processFileInput = (\n props: ComponentProps,\n context: FormRuleContext,\n multiple: boolean,\n) => {\n if (!props.name) return;\n\n if (props.$rule?.includes('required')) {\n context.rules[props.name] = multiple\n ? z.any().refine((val) => Array.isArray(val) && val.length > 0, {\n message: requiredMessage,\n })\n : z\n .any()\n .refine((val) => val instanceof File, { message: requiredMessage });\n } else {\n context.rules[props.name] = z.any().optional();\n }\n};\n\nconst applyRefinements = (\n schema: z.ZodObject<FieldValues>,\n context: FormRuleContext,\n) => {\n if (\n context.confirmedFields.length === 0 &&\n context.requiredBooleanFields.length === 0\n ) {\n return schema;\n }\n\n return schema.superRefine((data, ctx) => {\n context.confirmedFields.forEach(({ field, target }) => {\n if (data[field] !== data[target]) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: 'confirmed',\n fallback: 'La confirmación no coincide.',\n bindings: {},\n }),\n path: [target],\n });\n }\n });\n\n context.requiredBooleanFields.forEach((field) => {\n if (data[field] !== true) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: JSON.stringify({\n key: 'required',\n fallback: 'El campo {attribute} es obligatorio.',\n bindings: {},\n }),\n path: [field],\n });\n }\n });\n });\n};\n\nexport const extractFormRules = (\n children: React.ReactNode,\n componentTypes: React.ComponentType[],\n): ZodTypeAny => {\n const context: FormRuleContext = {\n rules: {},\n confirmedFields: [],\n requiredBooleanFields: [],\n };\n\n const components = findFormComponents(children, componentTypes);\n\n components.forEach((component) => {\n const props = component.props as ComponentProps;\n const displayName = (component.type as { displayName?: string })\n .displayName;\n\n if (props.name) {\n processConfirmedRule(props, context);\n\n if (displayName === 'Form.Checkbox') {\n processCheckbox(props, context);\n } else if (displayName === 'Form.Password') {\n processPassword(props, context);\n } else if (\n displayName === 'Form.Select' ||\n displayName === 'Form.Combobox' ||\n displayName === 'Form.Autocomplete'\n ) {\n processDropdown(props, context);\n } else if (displayName === 'Form.FileInput') {\n processFileInput(props, context, false);\n } else if (\n displayName === 'Form.FileInputMultiple' ||\n displayName === 'Form.Dropzone' ||\n displayName === 'Form.DropzoneS3'\n ) {\n processFileInput(props, context, true);\n } else {\n processDefault(props, context);\n }\n }\n });\n\n return applyRefinements(z.object(context.rules).loose(), context);\n};\n"],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ import { Tag, TagProps } from "./data-display/tag/Tag.mjs";
|
|
|
46
46
|
import { TagGroup, TagGroupProps } from "./data-display/tag-group/TagGroup.mjs";
|
|
47
47
|
import { UploadedFile, UploadedFileProps } from "./data-display/uploaded-file/UploadedFile.mjs";
|
|
48
48
|
import { UploadedFileDetails, UploadedFileDetailsProps } from "./data-display/uploaded-file/UploadedFileDetails.mjs";
|
|
49
|
+
import { UploadedFiles, UploadedFilesClassNames, UploadedFilesItemClassNames, UploadedFilesItemProps, UploadedFilesProps } from "./data-display/uploaded-files/UploadedFiles.mjs";
|
|
49
50
|
import { UploadingFiles, UploadingFilesClassNames, UploadingFilesItemClassNames, UploadingFilesItemErrorClassNames, UploadingFilesItemErrorProps, UploadingFilesItemProps, UploadingFilesProps } from "./data-display/uploading-files/UploadingFiles.mjs";
|
|
50
51
|
import { AvatarDropzone, AvatarDropzoneProps } from "./controls/avatar-dropzone/AvatarDropzone.mjs";
|
|
51
52
|
import { AvatarUpload, AvatarUploadProps } from "./controls/avatar-upload/AvatarUpload.mjs";
|
|
@@ -59,10 +60,9 @@ import { TextInput, TextInputProps } from "./controls/text-input/TextInput.mjs";
|
|
|
59
60
|
import { Combobox, ComboboxProps } from "./controls/dropdown/combobox/Combobox.mjs";
|
|
60
61
|
import { Autocomplete, AutocompleteProps } from "./controls/dropdown/autocomplete/Autocomplete.mjs";
|
|
61
62
|
import { Select, SelectProps } from "./controls/dropdown/select/Select.mjs";
|
|
62
|
-
import {
|
|
63
|
-
import { Dropzone, DropzoneProps
|
|
64
|
-
import { DropzoneS3, DropzoneS3Props, DropzoneS3Texts, S3FileMeta, S3InitBody, S3InitResponse, getFileExtension } from "./controls/dropzone
|
|
65
|
-
import { DropzoneFiles, DropzoneFilesProps } from "./controls/dropzone-files/DropzoneFiles.mjs";
|
|
63
|
+
import { FileData } from "./controls/dropzone/DropzoneBase.mjs";
|
|
64
|
+
import { Dropzone, DropzoneProps } from "./controls/dropzone/Dropzone.mjs";
|
|
65
|
+
import { DropzoneS3, DropzoneS3Props, DropzoneS3Texts, S3FileMeta, S3InitBody, S3InitResponse, getFileExtension } from "./controls/dropzone/DropzoneS3.mjs";
|
|
66
66
|
import { FileInput, FileInputProps } from "./controls/file-input/FileInput.mjs";
|
|
67
67
|
import { FileInputMultiple, FileInputMultipleProps } from "./controls/file-input/FileInputMultiple.mjs";
|
|
68
68
|
import { PasswordInput, PasswordInputProps } from "./controls/password-input/PasswordInput.mjs";
|
package/dist/index.d.mts
CHANGED
|
@@ -46,6 +46,7 @@ import { Tag, TagProps } from "./components/data-display/tag/Tag.mjs";
|
|
|
46
46
|
import { TagGroup, TagGroupProps } from "./components/data-display/tag-group/TagGroup.mjs";
|
|
47
47
|
import { UploadedFile, UploadedFileProps } from "./components/data-display/uploaded-file/UploadedFile.mjs";
|
|
48
48
|
import { UploadedFileDetails, UploadedFileDetailsProps } from "./components/data-display/uploaded-file/UploadedFileDetails.mjs";
|
|
49
|
+
import { UploadedFiles, UploadedFilesClassNames, UploadedFilesItemClassNames, UploadedFilesItemProps, UploadedFilesProps } from "./components/data-display/uploaded-files/UploadedFiles.mjs";
|
|
49
50
|
import { UploadingFiles, UploadingFilesClassNames, UploadingFilesItemClassNames, UploadingFilesItemErrorClassNames, UploadingFilesItemErrorProps, UploadingFilesItemProps, UploadingFilesProps } from "./components/data-display/uploading-files/UploadingFiles.mjs";
|
|
50
51
|
import { AvatarDropzone, AvatarDropzoneProps } from "./components/controls/avatar-dropzone/AvatarDropzone.mjs";
|
|
51
52
|
import { AvatarUpload, AvatarUploadProps } from "./components/controls/avatar-upload/AvatarUpload.mjs";
|
|
@@ -59,10 +60,9 @@ import { TextInput, TextInputProps } from "./components/controls/text-input/Text
|
|
|
59
60
|
import { Combobox, ComboboxProps } from "./components/controls/dropdown/combobox/Combobox.mjs";
|
|
60
61
|
import { Autocomplete, AutocompleteProps } from "./components/controls/dropdown/autocomplete/Autocomplete.mjs";
|
|
61
62
|
import { Select, SelectProps } from "./components/controls/dropdown/select/Select.mjs";
|
|
62
|
-
import {
|
|
63
|
-
import { Dropzone, DropzoneProps
|
|
64
|
-
import { DropzoneS3, DropzoneS3Props, DropzoneS3Texts, S3FileMeta, S3InitBody, S3InitResponse, getFileExtension } from "./components/controls/dropzone
|
|
65
|
-
import { DropzoneFiles, DropzoneFilesProps } from "./components/controls/dropzone-files/DropzoneFiles.mjs";
|
|
63
|
+
import { FileData } from "./components/controls/dropzone/DropzoneBase.mjs";
|
|
64
|
+
import { Dropzone, DropzoneProps } from "./components/controls/dropzone/Dropzone.mjs";
|
|
65
|
+
import { DropzoneS3, DropzoneS3Props, DropzoneS3Texts, S3FileMeta, S3InitBody, S3InitResponse, getFileExtension } from "./components/controls/dropzone/DropzoneS3.mjs";
|
|
66
66
|
import { FileInput, FileInputProps } from "./components/controls/file-input/FileInput.mjs";
|
|
67
67
|
import { FileInputMultiple, FileInputMultipleProps } from "./components/controls/file-input/FileInputMultiple.mjs";
|
|
68
68
|
import { PasswordInput, PasswordInputProps } from "./components/controls/password-input/PasswordInput.mjs";
|
|
@@ -90,4 +90,4 @@ import { Modals } from "./components/overlays/modal/index.mjs";
|
|
|
90
90
|
import { Toast, ToastIntent, ToastOptions, ToastProviderProps } from "./components/overlays/toast/Toast.mjs";
|
|
91
91
|
import { Tooltip, TooltipProps } from "./components/overlays/tooltip/Tooltip.mjs";
|
|
92
92
|
import { MageUiProvider, MageUiProviderProps } from "./providers/MageUiProvider.mjs";
|
|
93
|
-
export { AssignedUser, AssignedUserProps, Autocomplete, AutocompleteProps, Avatar, AvatarDropzone, AvatarDropzoneProps, AvatarProps, AvatarUpload, AvatarUploadProps, Badge, BadgeProps, Breadcrumbs, BreadcrumbsBarProps, BreadcrumbsProps, Button, ButtonAction, ButtonActionProps, ButtonIcon, ButtonIconProps, ButtonIconVisual, ButtonIconVisualProps, ButtonLoader, ButtonProps, ButtonVisual, ButtonVisualProps, Calendar, CalendarEvent, CalendarProps, CalendarView, Card, CardBase, CardBody, CardClassNames, CardFooter, CardHeader, CardProps, CardRoot, Checkbox, CheckboxProps, ColumnDef, Combobox, ComboboxProps, DEFAULT_DATA_TABLE_LABELS, DataTable, DataTableBottomSlot, DataTableBottomSlotProps, DataTableClassNames, DataTableColumnMeta, DataTableContextProvider, DataTableContextValue, DataTableExpansionConfig, DataTableExtraColumnConfig, DataTableFeedback, DataTableFiltersConfig, DataTableLabels, DataTablePageSize, DataTablePageSizeProps, DataTablePagination, DataTablePaginationConfig, DataTablePaginationProps, DataTableProps, DataTableRecord, DataTableSearchConfig, DataTableSelectionConfig, DataTableSortingConfig, DataTableTableConfig, DataTableTopSlot, DataTableTopSlotProps, DateLocalizer, DatePicker, DatePickerProps, DescriptionList, DescriptionListClassNames, DescriptionListItemProps, DescriptionListProps, DocumentItem, DocumentItemProps, Dropzone,
|
|
93
|
+
export { AssignedUser, AssignedUserProps, Autocomplete, AutocompleteProps, Avatar, AvatarDropzone, AvatarDropzoneProps, AvatarProps, AvatarUpload, AvatarUploadProps, Badge, BadgeProps, Breadcrumbs, BreadcrumbsBarProps, BreadcrumbsProps, Button, ButtonAction, ButtonActionProps, ButtonIcon, ButtonIconProps, ButtonIconVisual, ButtonIconVisualProps, ButtonLoader, ButtonProps, ButtonVisual, ButtonVisualProps, Calendar, CalendarEvent, CalendarProps, CalendarView, Card, CardBase, CardBody, CardClassNames, CardFooter, CardHeader, CardProps, CardRoot, Checkbox, CheckboxProps, ColumnDef, Combobox, ComboboxProps, DEFAULT_DATA_TABLE_LABELS, DataTable, DataTableBottomSlot, DataTableBottomSlotProps, DataTableClassNames, DataTableColumnMeta, DataTableContextProvider, DataTableContextValue, DataTableExpansionConfig, DataTableExtraColumnConfig, DataTableFeedback, DataTableFiltersConfig, DataTableLabels, DataTablePageSize, DataTablePageSizeProps, DataTablePagination, DataTablePaginationConfig, DataTablePaginationProps, DataTableProps, DataTableRecord, DataTableSearchConfig, DataTableSelectionConfig, DataTableSortingConfig, DataTableTableConfig, DataTableTopSlot, DataTableTopSlotProps, DateLocalizer, DatePicker, DatePickerProps, DescriptionList, DescriptionListClassNames, DescriptionListItemProps, DescriptionListProps, DocumentItem, DocumentItemProps, Dropzone, DropzoneProps, DropzoneS3, DropzoneS3Props, DropzoneS3Texts, ExpandedState, FileData, FileIcon, FileIconProps, FileInput, FileInputMultiple, FileInputMultipleProps, FileInputProps, FluidGrid, FluidGridProps, Form, FormProps, Grid, GridClassNames, HorizontalDivider, HorizontalDividerProps, Icon, IconProps, IconRaw, IconRawProps, IconSvg, IconSvgProps, IconWrapped, IconWrappedProps, Indicator, IndicatorProps, LoaderDot, LoaderDotProps, LoaderOval, LoaderOvalProps, LogoImage, LogoImageProps, LogoSvg, LogoSvgProps, MageUiProvider, MageUiProviderProps, Menu, MenuProps, Modal, ModalClassNames, ModalIntent, ModalProps, ModalRegistry, ModalRegistryEntry, ModalRootProps, Modals, NavigationMenu, NavigationMenuProps, NotificationBanner, NotificationBannerIntent, NotificationBannerProps, PASSWORD_RULES, Pagination, PaginationClassNames, PaginationRootProps, PaginationState, PasswordInput, PasswordInputProps, PasswordRule, PasswordRuleDefinition, PasswordSegment, PasswordStrengthInput, PasswordStrengthInputProps, Radio, RadioProps, RemovableItem, RemovableItemProps, ResourceItem, ResourceItemProps, RowSelectionState, S3FileMeta, S3InitBody, S3InitResponse, ScrollArea, ScrollAreaAutosize, ScrollAreaAutosizeProps, ScrollAreaClassNames, ScrollAreaProps, Select, SelectProps, Sidebar, SidebarClassNames, SidebarProps, SortingState, Switch, SwitchGroup, SwitchGroupProps, SwitchProps, Table, TableBodyProps, TableCaptionProps, TableCellProps, TableClassNames, TableFootProps, TableHeadProps, TableHeaderCellProps, TableProps, TableRowProps, Tag, TagGroup, TagGroupProps, TagProps, TextInput, TextInputProps, Textarea, TextareaProps, Toast, ToastIntent, ToastOptions, ToastProviderProps, Tooltip, TooltipProps, UploadedFile, UploadedFileDetails, UploadedFileDetailsProps, UploadedFileProps, UploadedFiles, UploadedFilesClassNames, UploadedFilesItemClassNames, UploadedFilesItemProps, UploadedFilesProps, UploadingFiles, UploadingFilesClassNames, UploadingFilesItemClassNames, UploadingFilesItemErrorClassNames, UploadingFilesItemErrorProps, UploadingFilesItemProps, UploadingFilesProps, Virtual, VirtualItem, VirtualPadding, VirtualProps, VisuallyHidden, VisuallyHiddenProps, getFileExtension, useDataTableContext, usePasswordRules, z };
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Button as e}from"./components/buttons/button/Button.mjs";import{VisuallyHidden as t}from"./components/misc/visually-hidden/VisuallyHidden.mjs";import{ButtonAction as n}from"./components/buttons/button-action/ButtonAction.mjs";import{ButtonLoader as r}from"./components/buttons/button-action/ButtonLoader.mjs";import{AssignedUser as i}from"./components/data-display/assigned-user/AssignedUser.mjs";import{Avatar as a}from"./components/data-display/avatar/Avatar.mjs";import{Badge as o}from"./components/data-display/badge/Badge.mjs";import{Tooltip as s}from"./components/overlays/tooltip/Tooltip.mjs";import{Calendar as c}from"./components/data-display/calendar/Calendar.mjs";import{Virtual as l}from"./components/misc/virtual/Virtual.mjs";import{ScrollArea as u}from"./components/misc/scroll-area/ScrollArea.mjs";import{Table as d}from"./components/data-display/table/Table.mjs";import{IconRaw as f}from"./components/data-display/icons/icon-raw/IconRaw.mjs";import{Icon as p}from"./components/data-display/icons/icon/Icon.mjs";import{DEFAULT_DATA_TABLE_LABELS as m,DataTableContextProvider as h,useDataTableContext as g}from"./components/data-display/datatables/useDataTableContext.mjs";import{Checkbox as _}from"./components/controls/checkbox/Checkbox.mjs";import{DataTable as v}from"./components/data-display/datatables/DataTable.mjs";import{HorizontalDivider as y}from"./components/misc/horizontal-divider/HorizontalDivider.mjs";import{ScrollAreaAutosize as b}from"./components/misc/scroll-area-autosize/ScrollAreaAutosize.mjs";import{TextInput as x}from"./components/controls/text-input/TextInput.mjs";import{IconWrapped as S}from"./components/data-display/icons/icon-wrapped/IconWrapped.mjs";import{Select as C}from"./components/controls/dropdown/select/Select.mjs";import{DataTablePageSize as w}from"./components/data-display/datatables/DataTablePageSize.mjs";import{Pagination as T}from"./components/navigations/pagination/Pagination.mjs";import{DataTablePagination as E}from"./components/data-display/datatables/DataTablePagination.mjs";import{DataTableBottomSlot as D}from"./components/data-display/datatables/DataTableBottomSlot.mjs";import{DataTableFeedback as O}from"./components/data-display/datatables/DataTableFeedback.mjs";import{DataTableTopSlot as k}from"./components/data-display/datatables/DataTableTopSlot.mjs";import{DescriptionList as A}from"./components/data-display/description-list/DescriptionList.mjs";import{FileIcon as j}from"./components/data-display/file-icon/FileIcon.mjs";import{ResourceItem as M}from"./components/data-display/resource-item/ResourceItem.mjs";import{DocumentItem as N}from"./components/data-display/document-item/DocumentItem.mjs";import{IconSvg as P}from"./components/data-display/icons/icon-svg/IconSvg.mjs";import{Indicator as F}from"./components/data-display/indicator/Indicator.mjs";import{LoaderDot as I}from"./components/data-display/loader-dot/LoaderDot.mjs";import{LoaderOval as L}from"./components/data-display/loader-oval/LoaderOval.mjs";import{LogoImage as R}from"./components/data-display/logos/logo-image/LogoImage.mjs";import{LogoSvg as z}from"./components/data-display/logos/logo-svg/LogoSvg.mjs";import{NotificationBanner as B}from"./components/data-display/notification-banner/NotificationBanner.mjs";import{RemovableItem as V}from"./components/data-display/removable-item/RemovableItem.mjs";import{TagGroup as H}from"./components/data-display/tag-group/TagGroup.mjs";import{Tag as U}from"./components/data-display/tag/Tag.mjs";import{UploadedFile as W}from"./components/data-display/uploaded-file/UploadedFile.mjs";import{UploadedFileDetails as G}from"./components/data-display/uploaded-file/UploadedFileDetails.mjs";import{
|
|
1
|
+
import{Button as e}from"./components/buttons/button/Button.mjs";import{VisuallyHidden as t}from"./components/misc/visually-hidden/VisuallyHidden.mjs";import{ButtonAction as n}from"./components/buttons/button-action/ButtonAction.mjs";import{ButtonLoader as r}from"./components/buttons/button-action/ButtonLoader.mjs";import{AssignedUser as i}from"./components/data-display/assigned-user/AssignedUser.mjs";import{Avatar as a}from"./components/data-display/avatar/Avatar.mjs";import{Badge as o}from"./components/data-display/badge/Badge.mjs";import{Tooltip as s}from"./components/overlays/tooltip/Tooltip.mjs";import{Calendar as c}from"./components/data-display/calendar/Calendar.mjs";import{Virtual as l}from"./components/misc/virtual/Virtual.mjs";import{ScrollArea as u}from"./components/misc/scroll-area/ScrollArea.mjs";import{Table as d}from"./components/data-display/table/Table.mjs";import{IconRaw as f}from"./components/data-display/icons/icon-raw/IconRaw.mjs";import{Icon as p}from"./components/data-display/icons/icon/Icon.mjs";import{DEFAULT_DATA_TABLE_LABELS as m,DataTableContextProvider as h,useDataTableContext as g}from"./components/data-display/datatables/useDataTableContext.mjs";import{Checkbox as _}from"./components/controls/checkbox/Checkbox.mjs";import{DataTable as v}from"./components/data-display/datatables/DataTable.mjs";import{HorizontalDivider as y}from"./components/misc/horizontal-divider/HorizontalDivider.mjs";import{ScrollAreaAutosize as b}from"./components/misc/scroll-area-autosize/ScrollAreaAutosize.mjs";import{TextInput as x}from"./components/controls/text-input/TextInput.mjs";import{IconWrapped as S}from"./components/data-display/icons/icon-wrapped/IconWrapped.mjs";import{Select as C}from"./components/controls/dropdown/select/Select.mjs";import{DataTablePageSize as w}from"./components/data-display/datatables/DataTablePageSize.mjs";import{Pagination as T}from"./components/navigations/pagination/Pagination.mjs";import{DataTablePagination as E}from"./components/data-display/datatables/DataTablePagination.mjs";import{DataTableBottomSlot as D}from"./components/data-display/datatables/DataTableBottomSlot.mjs";import{DataTableFeedback as O}from"./components/data-display/datatables/DataTableFeedback.mjs";import{DataTableTopSlot as k}from"./components/data-display/datatables/DataTableTopSlot.mjs";import{DescriptionList as A}from"./components/data-display/description-list/DescriptionList.mjs";import{FileIcon as j}from"./components/data-display/file-icon/FileIcon.mjs";import{ResourceItem as M}from"./components/data-display/resource-item/ResourceItem.mjs";import{DocumentItem as N}from"./components/data-display/document-item/DocumentItem.mjs";import{IconSvg as P}from"./components/data-display/icons/icon-svg/IconSvg.mjs";import{Indicator as F}from"./components/data-display/indicator/Indicator.mjs";import{LoaderDot as I}from"./components/data-display/loader-dot/LoaderDot.mjs";import{LoaderOval as L}from"./components/data-display/loader-oval/LoaderOval.mjs";import{LogoImage as R}from"./components/data-display/logos/logo-image/LogoImage.mjs";import{LogoSvg as z}from"./components/data-display/logos/logo-svg/LogoSvg.mjs";import{NotificationBanner as B}from"./components/data-display/notification-banner/NotificationBanner.mjs";import{RemovableItem as V}from"./components/data-display/removable-item/RemovableItem.mjs";import{TagGroup as H}from"./components/data-display/tag-group/TagGroup.mjs";import{Tag as U}from"./components/data-display/tag/Tag.mjs";import{UploadedFile as W}from"./components/data-display/uploaded-file/UploadedFile.mjs";import{UploadedFileDetails as G}from"./components/data-display/uploaded-file/UploadedFileDetails.mjs";import{UploadedFiles as K}from"./components/data-display/uploaded-files/UploadedFiles.mjs";import{UploadingFiles as q}from"./components/data-display/uploading-files/UploadingFiles.mjs";import{ButtonIcon as J}from"./components/buttons/button-icon/ButtonIcon.mjs";import{ButtonIconVisual as Y}from"./components/buttons/button-icon-visual/ButtonIconVisual.mjs";import{ButtonVisual as X}from"./components/buttons/button-visual/ButtonVisual.mjs";import{AvatarDropzone as Z}from"./components/controls/avatar-dropzone/AvatarDropzone.mjs";import{Modal as Q}from"./components/overlays/modal/Modal.mjs";import{Modals as $}from"./components/overlays/modal/index.mjs";import{Toast as ee}from"./components/overlays/toast/Toast.mjs";import{AvatarUpload as te}from"./components/controls/avatar-upload/AvatarUpload.mjs";import{DatePicker as ne}from"./components/controls/date-picker/DatePicker.mjs";import{Autocomplete as re}from"./components/controls/dropdown/autocomplete/Autocomplete.mjs";import{Combobox as ie}from"./components/controls/dropdown/combobox/Combobox.mjs";import{Dropzone as ae}from"./components/controls/dropzone/Dropzone.mjs";import{DropzoneS3 as oe,getFileExtension as se}from"./components/controls/dropzone/DropzoneS3.mjs";import{FileInput as ce}from"./components/controls/file-input/FileInput.mjs";import{FileInputMultiple as le}from"./components/controls/file-input/FileInputMultiple.mjs";import{PasswordInput as ue}from"./components/controls/password-input/PasswordInput.mjs";import{PasswordStrengthInput as de}from"./components/controls/password-input/PasswordStrengthInput.mjs";import{usePasswordRules as fe}from"./components/controls/password-input/usePasswordRules.mjs";import{Radio as pe}from"./components/controls/radio/Radio.mjs";import{SwitchGroup as me}from"./components/controls/switch-group/SwitchGroup.mjs";import{Switch as he}from"./components/controls/switch/Switch.mjs";import{Textarea as ge}from"./components/controls/textarea/Textarea.mjs";import{PASSWORD_RULES as _e}from"./components/forms/rules/password-rules.mjs";import{z as ve}from"./components/forms/rules/zod.mjs";import{Form as ye}from"./components/forms/Form.mjs";import{Card as be,CardBase as xe,CardBody as Se,CardFooter as Ce,CardHeader as we,CardRoot as Te}from"./components/layouts/card/Card.mjs";import{FluidGrid as Ee}from"./components/layouts/fluid-grid/FluidGrid.mjs";import{Grid as De}from"./components/layouts/grid/Grid.mjs";import{Breadcrumbs as Oe}from"./components/navigations/breadcrumbs/Breadcrumbs.mjs";import{Menu as ke}from"./components/navigations/menu/Menu.mjs";import{NavigationMenu as Ae}from"./components/navigations/navigation-menu/NavigationMenu.mjs";import{Sidebar as je}from"./components/navigations/sidebars/sidebar/Sidebar.mjs";import{MageUiProvider as Me}from"./providers/MageUiProvider.mjs";export{i as AssignedUser,re as Autocomplete,a as Avatar,Z as AvatarDropzone,te as AvatarUpload,o as Badge,Oe as Breadcrumbs,e as Button,n as ButtonAction,J as ButtonIcon,Y as ButtonIconVisual,r as ButtonLoader,X as ButtonVisual,c as Calendar,be as Card,xe as CardBase,Se as CardBody,Ce as CardFooter,we as CardHeader,Te as CardRoot,_ as Checkbox,ie as Combobox,m as DEFAULT_DATA_TABLE_LABELS,v as DataTable,D as DataTableBottomSlot,h as DataTableContextProvider,O as DataTableFeedback,w as DataTablePageSize,E as DataTablePagination,k as DataTableTopSlot,ne as DatePicker,A as DescriptionList,N as DocumentItem,ae as Dropzone,oe as DropzoneS3,j as FileIcon,ce as FileInput,le as FileInputMultiple,Ee as FluidGrid,ye as Form,De as Grid,y as HorizontalDivider,p as Icon,f as IconRaw,P as IconSvg,S as IconWrapped,F as Indicator,I as LoaderDot,L as LoaderOval,R as LogoImage,z as LogoSvg,Me as MageUiProvider,ke as Menu,Q as Modal,$ as Modals,Ae as NavigationMenu,B as NotificationBanner,_e as PASSWORD_RULES,T as Pagination,ue as PasswordInput,de as PasswordStrengthInput,pe as Radio,V as RemovableItem,M as ResourceItem,u as ScrollArea,b as ScrollAreaAutosize,C as Select,je as Sidebar,he as Switch,me as SwitchGroup,d as Table,U as Tag,H as TagGroup,x as TextInput,ge as Textarea,ee as Toast,s as Tooltip,W as UploadedFile,G as UploadedFileDetails,K as UploadedFiles,q as UploadingFiles,l as Virtual,t as VisuallyHidden,se as getFileExtension,g as useDataTableContext,fe as usePasswordRules,ve as z};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mage-ui/components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.131",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "",
|
|
6
6
|
"keywords": [],
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"rimraf": "^6.1.3",
|
|
26
26
|
"tsdown": "^0.21.4",
|
|
27
27
|
"typescript": "^5.9.3",
|
|
28
|
-
"@mage-ui/
|
|
29
|
-
"@mage-ui/
|
|
28
|
+
"@mage-ui/preset": "1.0.131",
|
|
29
|
+
"@mage-ui/styled-system": "1.0.8"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@dnd-kit/core": "^6.3.1",
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { UploadedFileProps } from "../../data-display/uploaded-file/UploadedFile.mjs";
|
|
2
|
-
import { DropzoneProps, FileData } from "../dropzone/Dropzone.mjs";
|
|
3
|
-
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
4
|
-
import { ReactNode } from "react";
|
|
5
|
-
|
|
6
|
-
//#region src/components/controls/dropzone-files/DropzoneFiles.d.ts
|
|
7
|
-
type DropzoneFilesProps = {
|
|
8
|
-
label?: ReactNode;
|
|
9
|
-
description?: ReactNode;
|
|
10
|
-
error?: ReactNode;
|
|
11
|
-
title?: ReactNode;
|
|
12
|
-
subtitle?: ReactNode;
|
|
13
|
-
hint?: ReactNode;
|
|
14
|
-
initialFiles?: Record<string, FileData>;
|
|
15
|
-
maxFiles?: number; /** Maximum file size in bytes. Files exceeding this will be rejected. */
|
|
16
|
-
maxSize?: number;
|
|
17
|
-
accept?: string[]; /** Required when autoSend=true (default). Optional when autoSend=false. */
|
|
18
|
-
url?: string; /** When false, files are added to state but not uploaded automatically. Default: true. */
|
|
19
|
-
autoSend?: boolean; /** Called when the file list changes (added or removed). Useful when autoSend=false. */
|
|
20
|
-
onChange?: (files: File[]) => void;
|
|
21
|
-
inputId?: string;
|
|
22
|
-
hideWhenFull?: boolean;
|
|
23
|
-
fileListHeight?: number | string;
|
|
24
|
-
classNames?: {
|
|
25
|
-
dropzoneFiles?: string;
|
|
26
|
-
root?: string;
|
|
27
|
-
labelWrapper?: string;
|
|
28
|
-
label?: string;
|
|
29
|
-
description?: string;
|
|
30
|
-
error?: string;
|
|
31
|
-
fileList?: string;
|
|
32
|
-
fileItem?: string;
|
|
33
|
-
uploadedFile?: UploadedFileProps['classNames'];
|
|
34
|
-
dropzoneDropzone?: DropzoneProps['classNames'];
|
|
35
|
-
scrollArea?: {
|
|
36
|
-
scrollArea?: string;
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
direction?: 'default' | 'reverse';
|
|
40
|
-
};
|
|
41
|
-
declare const DropzoneFiles: ({
|
|
42
|
-
label,
|
|
43
|
-
description,
|
|
44
|
-
error,
|
|
45
|
-
title,
|
|
46
|
-
subtitle,
|
|
47
|
-
hint,
|
|
48
|
-
initialFiles,
|
|
49
|
-
maxFiles,
|
|
50
|
-
maxSize,
|
|
51
|
-
accept,
|
|
52
|
-
url,
|
|
53
|
-
autoSend,
|
|
54
|
-
onChange,
|
|
55
|
-
inputId,
|
|
56
|
-
hideWhenFull,
|
|
57
|
-
classNames,
|
|
58
|
-
direction
|
|
59
|
-
}: DropzoneFilesProps) => react_jsx_runtime0.JSX.Element;
|
|
60
|
-
//#endregion
|
|
61
|
-
export { DropzoneFiles, DropzoneFilesProps };
|
|
62
|
-
//# sourceMappingURL=DropzoneFiles.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropzoneFiles.d.mts","names":[],"sources":["../../../../src/components/controls/dropzone-files/DropzoneFiles.tsx"],"mappings":";;;;;;KAoCY,kBAAA;EACV,KAAA,GAAQ,SAAA;EACR,WAAA,GAAc,SAAA;EACd,KAAA,GAAQ,SAAA;EACR,KAAA,GAAQ,SAAA;EACR,QAAA,GAAW,SAAA;EACX,IAAA,GAAO,SAAA;EACP,YAAA,GAAe,MAAA,SAAe,QAAA;EAC9B,QAAA,WANc;EAQd,OAAA;EACA,MAAA,aANW;EAQX,GAAA,WAN8B;EAQ9B,QAAA,YAEmB;EAAnB,QAAA,IAAY,KAAA,EAAO,IAAA;EACnB,OAAA;EACA,YAAA;EACA,cAAA;EACA,UAAA;IACE,aAAA;IACA,IAAA;IACA,YAAA;IACA,KAAA;IACA,WAAA;IACA,KAAA;IACA,QAAA;IACA,QAAA;IACA,YAAA,GAAe,iBAAA;IACf,gBAAA,GAAmB,aAAA;IACnB,UAAA;MAAe,UAAA;IAAA;EAAA;EAIjB,SAAA;AAAA;AAAA,cAGW,aAAA;EAAiB,KAAA;EAAA,WAAA;EAAA,KAAA;EAAA,KAAA;EAAA,QAAA;EAAA,IAAA;EAAA,YAAA;EAAA,QAAA;EAAA,OAAA;EAAA,MAAA;EAAA,GAAA;EAAA,QAAA;EAAA,QAAA;EAAA,OAAA;EAAA,YAAA;EAAA,UAAA;EAAA;AAAA,GAkB3B,kBAAA,KAAkB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{UploadedFile as e}from"../../data-display/uploaded-file/UploadedFile.mjs";import{UploadedFileDetails as t}from"../../data-display/uploaded-file/UploadedFileDetails.mjs";import{Dropzone as n}from"../dropzone/Dropzone.mjs";import{cx as r}from"@mage-ui/styled-system/css";import{dropzoneFiles as i,dropzoneFilesDescription as a,dropzoneFilesDropzone as o,dropzoneFilesError as s,dropzoneFilesFileItem as c,dropzoneFilesFileList as l,dropzoneFilesLabel as u,dropzoneFilesLabelWrapper as d,dropzoneFilesRoot as f,dropzoneFilesUploadedFile as p}from"@mage-ui/styled-system/recipes";import{jsx as m,jsxs as h}from"react/jsx-runtime";import{useId as g}from"react";const _=({label:_,description:v,error:y,title:b,subtitle:x,hint:S,initialFiles:C,maxFiles:w,maxSize:T,accept:E,url:D,autoSend:O,onChange:k,inputId:A,hideWhenFull:j,classNames:M,direction:N=`default`})=>{let P=g(),F=A??P;return h(`div`,{className:r(M?.dropzoneFiles??i(),M?.root??f()),children:[h(`div`,{className:M?.labelWrapper??d(),children:[_&&m(`label`,{htmlFor:F,className:M?.label??u(),children:_}),v&&m(`p`,{className:M?.description??a(),children:v})]}),m(n,{maxFiles:w,maxSize:T,accept:E,url:D,autoSend:O,onChange:k,initialFiles:C,inputId:F,title:b,subtitle:x,hint:S,direction:N,hideWhenFull:j,classNames:{dropzone:M?.dropzoneDropzone?.dropzone??o()},children:({files:n,removeFile:r})=>Object.keys(n).length>0?m(`ul`,{className:M?.fileList??l(),children:Object.values(n).map(n=>m(`li`,{className:M?.fileItem??c(),children:m(e,{fileName:n.name,fileType:n.type,url:n.url,onRemove:()=>r(n.name),classNames:{uploadedFile:M?.uploadedFile?.uploadedFile??p()},children:m(t,{fileSize:`${(n.size/1024).toFixed(1)} KB`,fileDate:n.date,fileType:n.type})},n.name)},n.name))}):null}),y&&m(`p`,{className:M?.error??s(),children:y})]})};export{_ as DropzoneFiles};
|
|
2
|
-
//# sourceMappingURL=DropzoneFiles.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropzoneFiles.mjs","names":[],"sources":["../../../../src/components/controls/dropzone-files/DropzoneFiles.tsx"],"sourcesContent":["import { type ReactNode, useId } from 'react';\n\nimport { cx } from '@mage-ui/styled-system/css';\nimport {\n dropzoneFiles,\n dropzoneFilesDescription,\n dropzoneFilesDropzone,\n dropzoneFilesError,\n dropzoneFilesFileItem,\n dropzoneFilesFileList,\n dropzoneFilesLabel,\n dropzoneFilesLabelWrapper,\n dropzoneFilesRoot,\n dropzoneFilesUploadedFile,\n // dropzoneFilesUploadedFileStartIconWrapped,\n // dropzoneFilesUploadedFileStartIconWrappedRoot,\n // dropzoneFilesUploadedFileStartIcon,\n // dropzoneFilesUploadedFileStartIconRoot,\n // dropzoneFilesUploadedFileStartIconIconRaw,\n // dropzoneFilesUploadedFileStartIconIconRawRoot,\n} from '@mage-ui/styled-system/recipes';\nimport {\n Dropzone,\n type DropzoneProps,\n type FileData,\n} from '@/components/controls';\nimport {\n // Icon,\n // type IconProps,\n // IconWrapped,\n // type IconWrappedProps,\n UploadedFile,\n UploadedFileDetails,\n type UploadedFileProps,\n} from '@/components/data-display';\n\nexport type DropzoneFilesProps = {\n label?: ReactNode;\n description?: ReactNode;\n error?: ReactNode;\n title?: ReactNode;\n subtitle?: ReactNode;\n hint?: ReactNode;\n initialFiles?: Record<string, FileData>;\n maxFiles?: number;\n /** Maximum file size in bytes. Files exceeding this will be rejected. */\n maxSize?: number;\n accept?: string[];\n /** Required when autoSend=true (default). Optional when autoSend=false. */\n url?: string;\n /** When false, files are added to state but not uploaded automatically. Default: true. */\n autoSend?: boolean;\n /** Called when the file list changes (added or removed). Useful when autoSend=false. */\n onChange?: (files: File[]) => void;\n inputId?: string;\n hideWhenFull?: boolean;\n fileListHeight?: number | string;\n classNames?: {\n dropzoneFiles?: string;\n root?: string;\n labelWrapper?: string;\n label?: string;\n description?: string;\n error?: string;\n fileList?: string;\n fileItem?: string;\n uploadedFile?: UploadedFileProps['classNames'];\n dropzoneDropzone?: DropzoneProps['classNames'];\n scrollArea?: { scrollArea?: string };\n // startIconWrapped?: IconWrappedProps['classNames'];\n // startIcon?: IconProps['classNames'];\n };\n direction?: 'default' | 'reverse';\n};\n\nexport const DropzoneFiles = ({\n label,\n description,\n error,\n title,\n subtitle,\n hint,\n initialFiles,\n maxFiles,\n maxSize,\n accept,\n url,\n autoSend,\n onChange,\n inputId,\n hideWhenFull,\n classNames,\n direction = 'default',\n}: DropzoneFilesProps) => {\n const generatedId = useId();\n const groupId = inputId ?? generatedId;\n\n // TODO: gestionar error\n // TOOD: gestionar required\n return (\n <div\n className={cx(\n classNames?.dropzoneFiles ?? dropzoneFiles(),\n classNames?.root ?? dropzoneFilesRoot(),\n )}\n >\n <div className={classNames?.labelWrapper ?? dropzoneFilesLabelWrapper()}>\n {/* TODO: label obligatori / hidden */}\n {label && (\n <label\n htmlFor={groupId}\n className={classNames?.label ?? dropzoneFilesLabel()}\n >\n {label}\n </label>\n )}\n {description && (\n <p className={classNames?.description ?? dropzoneFilesDescription()}>\n {description}\n </p>\n )}\n </div>\n <Dropzone\n maxFiles={maxFiles}\n maxSize={maxSize}\n accept={accept}\n url={url}\n autoSend={autoSend}\n onChange={onChange}\n initialFiles={initialFiles}\n inputId={groupId}\n title={title}\n subtitle={subtitle}\n hint={hint}\n direction={direction}\n hideWhenFull={hideWhenFull}\n classNames={{\n dropzone:\n classNames?.dropzoneDropzone?.dropzone ?? dropzoneFilesDropzone(),\n }}\n >\n {({ files, removeFile }) =>\n Object.keys(files).length > 0 ? (\n <ul className={classNames?.fileList ?? dropzoneFilesFileList()}>\n {Object.values(files).map((file) => (\n <li\n key={file.name}\n className={classNames?.fileItem ?? dropzoneFilesFileItem()}\n >\n <UploadedFile\n key={file.name}\n fileName={file.name}\n fileType={file.type}\n url={file.url}\n onRemove={() => removeFile(file.name)}\n classNames={{\n uploadedFile:\n classNames?.uploadedFile?.uploadedFile ??\n dropzoneFilesUploadedFile(),\n }}\n >\n {/* TODO: comentar */}\n <UploadedFileDetails\n fileSize={`${(file.size / 1024).toFixed(1)} KB`}\n fileDate={file.date}\n fileType={file.type}\n />\n </UploadedFile>\n </li>\n ))}\n </ul>\n ) : null\n }\n </Dropzone>\n {error && (\n <p className={classNames?.error ?? dropzoneFilesError()}>{error}</p>\n )}\n </div>\n );\n};\n"],"mappings":"upBA2EA,MAAa,GAAiB,CAC5B,QACA,cACA,QACA,QACA,WACA,OACA,eACA,WACA,UACA,SACA,MACA,WACA,WACA,UACA,eACA,aACA,YAAY,aACY,CACxB,IAAM,EAAc,GAAO,CACrB,EAAU,GAAW,EAI3B,OACE,EAAC,MAAD,CACE,UAAW,EACT,GAAY,eAAiB,GAAe,CAC5C,GAAY,MAAQ,GAAmB,CACxC,UAJH,CAME,EAAC,MAAD,CAAK,UAAW,GAAY,cAAgB,GAA2B,UAAvE,CAEG,GACC,EAAC,QAAD,CACE,QAAS,EACT,UAAW,GAAY,OAAS,GAAoB,UAEnD,EACK,CAAA,CAET,GACC,EAAC,IAAD,CAAG,UAAW,GAAY,aAAe,GAA0B,UAChE,EACC,CAAA,CAEF,GACN,EAAC,EAAD,CACY,WACD,UACD,SACH,MACK,WACA,WACI,eACd,QAAS,EACF,QACG,WACJ,OACK,YACG,eACd,WAAY,CACV,SACE,GAAY,kBAAkB,UAAY,GAAuB,CACpE,WAEC,CAAE,QAAO,gBACT,OAAO,KAAK,EAAM,CAAC,OAAS,EAC1B,EAAC,KAAD,CAAI,UAAW,GAAY,UAAY,GAAuB,UAC3D,OAAO,OAAO,EAAM,CAAC,IAAK,GACzB,EAAC,KAAD,CAEE,UAAW,GAAY,UAAY,GAAuB,UAE1D,EAAC,EAAD,CAEE,SAAU,EAAK,KACf,SAAU,EAAK,KACf,IAAK,EAAK,IACV,aAAgB,EAAW,EAAK,KAAK,CACrC,WAAY,CACV,aACE,GAAY,cAAc,cAC1B,GAA2B,CAC9B,UAGD,EAAC,EAAD,CACE,SAAU,IAAI,EAAK,KAAO,MAAM,QAAQ,EAAE,CAAC,KAC3C,SAAU,EAAK,KACf,SAAU,EAAK,KACf,CAAA,CACW,CAjBR,EAAK,KAiBG,CACZ,CAtBE,EAAK,KAsBP,CACL,CACC,CAAA,CACH,KAEG,CAAA,CACV,GACC,EAAC,IAAD,CAAG,UAAW,GAAY,OAAS,GAAoB,UAAG,EAAU,CAAA,CAElE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropzoneS3.d.mts","names":[],"sources":["../../../../src/components/controls/dropzone-s3/DropzoneS3.tsx"],"mappings":";;;;;;;;AAgBA;;;KAAY,UAAA;EACV,GAAA;EACA,OAAA,GAAU,MAAA;AAAA,IACR,MAAA;AAAA,KAEQ,cAAA,eAA6B,UAAA,GAAa,UAAA;EACpD,IAAA,EAAM,KAAA;AAAA;AADR;AAAA,KAKY,UAAA;EALc;;;;;EAWxB,QAAA,UAXyB;EAazB,SAAA;AAAA;;KAIU,eAAA;EAhBC,6BAkBX,KAAA,GAAQ,SAAA,EAdE;EAgBV,QAAA,GAAW,SAAA;EAEX,IAAA,GAAO,SAAA,EAVE;EAYT,UAAA,IAAc,MAAA,qBARW;EAUzB,cAAA,IAAkB,MAAA,qBARV;EAUR,YAAA,IAAgB,MAAA,UAAgB,UAAA,qBANzB;EAQP,YAAA,WARgB;EAUhB,aAAA,WAdQ;EAgBR,cAAA;AAAA;AAAA,KAeU,eAAA,mBAAkC,UAAA,GAAa,UAAA,IAAc,IAAA,CACvE,aAAA;EA5BO;;EAiCP,KAAA,GAAQ,eAAA;EA7BR;;;;;;;;;EAuCA,aAAA,GAAgB,MAAA;EAhBN;;;;;;;EAwBV,MAAA,cAAoB,MAAA,oBARJ;EAUhB,OAAA,UAEsB;EAAtB,aAAA,GAAgB,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,UAAA,KAAe,MAAA;EAAA;;;;EAKjD,QAAA;IACE,GAAA;IACA,SAAA,GACE,IAAA,EAAM,IAAA,EACN,IAAA,EAAM,SAAA,EACN,IAAA,EAAM,UAAA,KACH,MAAA;EAAA;EAkBqB;;;;EAZ5B,UAAA,SAAmB,MAAA;EA7CO;;;;;EAmD1B,eAAA,IAAmB,GAAA,EAAK,QAAA,EAAU,QAAA,aAAqB,OAAA;EA7C/C;;;;;EAmDR,kBAAA,IAAsB,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,IAAA;EA7B7C;;;;;EAmCA,QAAA,GAAW,aAAA;AAAA;;cA+EA,gBAAA,GAAoB,QAAA;AAAA,cAyEpB,UAAA,qBAAgC,UAAA,GAAa,UAAA;EAAY,KAAA;EAAA,aAAA;EAAA,MAAA;EAAA,OAAA;EAAA,aAAA;EAAA,QAAA;EAAA,UAAA;EAAA,eAAA;EAAA,kBAAA;EAAA,QAAA;EAAA,GAAA;AAAA,GAYnE,eAAA,CAAgB,SAAA,MAAU,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{UploadingFiles as e}from"../../data-display/uploading-files/UploadingFiles.mjs";import{Dropzone as t}from"../dropzone/Dropzone.mjs";import{jsx as n}from"react/jsx-runtime";const r={initFailed:e=>`Failed to request upload URL (${e})`,registerFailed:e=>`Failed to register file (${e})`,uploadFailed:(e,t)=>`Upload failed (${e} ${t})`,networkError:`Network error during direct upload`,uploadAborted:`Upload aborted`,uploadTimedOut:`Upload timed out`},i=async(e,t)=>{try{let n=await e.clone().json();if(n.errors){let e=Object.values(n.errors)[0];if(e&&e.length>0)return e[0]}return n.body?.message??n.body?.text??n.message??t}catch{return t}},a=(e,t,n,r,i)=>new Promise((a,o)=>{let s=new XMLHttpRequest;s.upload.addEventListener(`progress`,e=>{e.lengthComputable&&r(Math.round(e.loaded/e.total*100))}),s.addEventListener(`load`,()=>{s.status>=200&&s.status<300?a():o(Error(i.uploadFailed(s.status,s.statusText)))}),s.addEventListener(`error`,()=>o(Error(i.networkError))),s.addEventListener(`abort`,()=>o(Error(i.uploadAborted))),s.addEventListener(`timeout`,()=>o(Error(i.uploadTimedOut))),s.open(`PUT`,e);for(let[e,n]of Object.entries(t)){let t=e.toLowerCase();if(!(t===`host`||t===`content-length`))try{s.setRequestHeader(e,n)}catch{}}s.send(n)}),o=e=>{let t={};if(!e)return t;for(let[n,r]of Object.entries(e))t[n]=Array.isArray(r)?r.join(`,`):String(r);return t},s=e=>{let t=e.lastIndexOf(`.`);return t>=0?e.slice(t+1).toLowerCase():``},c=e=>{if(!e)return;let t={};for(let[n,r]of Object.entries(e)){let e=`.${n}`,i=t[r];i?i.includes(e)||i.push(e):t[r]=[e]}return t},l=(e,t)=>{let n=s(e.name);if(!t)return{mimeType:e.type,extension:n};let r=Object.values(t);return e.type&&r.includes(e.type)?{mimeType:e.type,extension:n}:{mimeType:t[n]??e.type,extension:n}},u=({files:t})=>{let r=Object.values(t).filter(e=>e.loading||!!e.error);return r.length===0?null:n(e,{children:r.map(t=>t.error?n(e.ItemError,{name:t.name,message:t.error},t.name):n(e.Item,{name:t.name,progress:t.progress??0},t.name))})},d=({texts:e,acceptedTypes:s,accept:d,initUrl:f,buildInitBody:p,register:m,getHeaders:h,getErrorMessage:g=i,resolveUploadedUrl:_,children:v,...y})=>{let b=d??c(s),x={...r,...e},S=async(e,{onProgress:t})=>{let n=()=>({"Content-Type":`application/json`,Accept:`application/json`,...h?.()??{}}),r=l(e,s),i=await fetch(f,{method:`POST`,headers:n(),body:JSON.stringify(p(e,r))});if(!i.ok)throw Error(await g(i,x.initFailed(i.status)));let c=await i.json(),{url:u,headers:d}=c.body;if(await a(u,o(d),e,n=>t?.({loaded:0,total:e.size,percentage:n}),x),m){let t=await fetch(m.url,{method:`POST`,headers:n(),body:JSON.stringify(m.buildBody(e,c.body,r))});if(!t.ok)throw Error(await g(t,x.registerFailed(t.status)))}return{body:{url:_?.(c.body,e)??(typeof c.body.key==`string`?c.body.key:u.split(`?`)[0])}}};return n(t,{...y,title:e?.title,subtitle:e?.subtitle,hint:e?.hint,accept:b,uploader:S,children:v??u})};export{d as DropzoneS3,s as getFileExtension};
|
|
2
|
-
//# sourceMappingURL=DropzoneS3.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DropzoneS3.mjs","names":[],"sources":["../../../../src/components/controls/dropzone-s3/DropzoneS3.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { UploadingFiles } from '@/components/data-display';\n\nimport {\n Dropzone,\n type DropzoneProps,\n type Uploader,\n} from '../dropzone/Dropzone';\n\n/**\n * Body of the response returned by the init endpoint. Must at least\n * expose a `url` to PUT the file to; may carry any number of extra\n * fields that the consumer forwards to the register step (e.g.\n * `document_id`, `key`).\n */\nexport type S3InitBody = {\n url: string;\n headers?: Record<string, string | string[]>;\n} & Record<string, unknown>;\n\nexport type S3InitResponse<TBody extends S3InitBody = S3InitBody> = {\n body: TBody;\n};\n\n/** Metadata derived from the file that body builders frequently need. */\nexport type S3FileMeta = {\n /**\n * Best-effort MIME type. When `acceptedTypes` is provided and the\n * browser-reported `file.type` is empty or unknown, this falls back to\n * the MIME mapped from the file extension.\n */\n mimeType: string;\n /** Lowercase file extension without the leading dot. */\n extension: string;\n};\n\n/** All replaceable UI and error strings surfaced by DropzoneS3. */\nexport type DropzoneS3Texts = {\n /** Main dropzone heading. */\n title?: ReactNode;\n /** Secondary dropzone text. */\n subtitle?: ReactNode;\n /** Small helper text below the subtitle. */\n hint?: ReactNode;\n /** Fallback shown when the init request fails without a parseable body. */\n initFailed?: (status: number) => string;\n /** Fallback shown when the register request fails without a parseable body. */\n registerFailed?: (status: number) => string;\n /** Error when the S3 PUT returns a non-2xx status. */\n uploadFailed?: (status: number, statusText: string) => string;\n /** Error when the network fails during the PUT. */\n networkError?: string;\n /** Error when the PUT is aborted. */\n uploadAborted?: string;\n /** Error when the PUT times out. */\n uploadTimedOut?: string;\n};\n\nconst DEFAULT_TEXTS = {\n initFailed: (status: number): string =>\n `Failed to request upload URL (${status})`,\n registerFailed: (status: number): string =>\n `Failed to register file (${status})`,\n uploadFailed: (status: number, statusText: string): string =>\n `Upload failed (${status} ${statusText})`,\n networkError: 'Network error during direct upload',\n uploadAborted: 'Upload aborted',\n uploadTimedOut: 'Upload timed out',\n} as const;\n\nexport type DropzoneS3Props<TInitBody extends S3InitBody = S3InitBody> = Omit<\n DropzoneProps,\n 'uploader' | 'url' | 'children' | 'accept' | 'title' | 'subtitle' | 'hint'\n> & {\n /** All replaceable UI and error strings. Any field left unset falls back\n * to the English default. */\n texts?: DropzoneS3Texts;\n /**\n * Map of file extension → MIME type. When provided, DropzoneS3\n * automatically computes the `accept` map (MIME → ['.ext']) used by\n * the underlying Mantine / react-dropzone, and uses it to resolve\n * `meta.mimeType` per file (covering browsers that report an empty\n * `file.type` for some Office formats).\n *\n * Ignored when `accept` is passed explicitly.\n */\n acceptedTypes?: Record<string, string>;\n /**\n * Explicit accept list forwarded to the underlying Mantine dropzone.\n * Takes precedence over `acceptedTypes`. Prefer the map shape\n * `{ [mimeType]: ['.ext', ...] }` — passing a `.ext` entry inside a\n * plain `string[]` triggers a \"Skipped … not a valid MIME type\"\n * warning in react-dropzone v15+.\n */\n accept?: string[] | Record<string, string[]>;\n /** POST endpoint that returns `{ body: { url, headers?, ...extras } }`. */\n initUrl: string;\n /** Build the init request JSON body from the file and resolved meta. */\n buildInitBody: (file: File, meta: S3FileMeta) => Record<string, unknown>;\n /**\n * Optional post-upload registration step. When set, a POST is sent to\n * `register.url` with the body produced by `register.buildBody`.\n */\n register?: {\n url: string;\n buildBody: (\n file: File,\n init: TInitBody,\n meta: S3FileMeta,\n ) => Record<string, unknown>;\n };\n /**\n * Called on every outbound request (init, register). Use it to supply\n * auth/CSRF headers that may rotate during the session.\n */\n getHeaders?: () => Record<string, string>;\n /**\n * Customize how an error response is turned into a human-readable\n * message. Defaults to common Laravel-style error shapes\n * (`errors`, `body.message`, `message`).\n */\n getErrorMessage?: (res: Response, fallback: string) => Promise<string>;\n /**\n * URL stored in `FileData.url` after a successful upload. Defaults to\n * `init.body.key` when present, falling back to the presigned URL\n * stripped of its query string.\n */\n resolveUploadedUrl?: (init: TInitBody, file: File) => string;\n /**\n * Override the default children (a list of in-flight / errored files).\n * Use it when you need to render the progress list elsewhere in the\n * layout or when you want a completely custom UI.\n */\n children?: DropzoneProps['children'];\n};\n\nconst defaultGetErrorMessage = async (\n res: Response,\n fallback: string,\n): Promise<string> => {\n try {\n const data = (await res.clone().json()) as {\n message?: string;\n body?: { message?: string; text?: string };\n errors?: Record<string, string[]>;\n };\n if (data.errors) {\n const first = Object.values(data.errors)[0];\n if (first && first.length > 0) return first[0];\n }\n return data.body?.message ?? data.body?.text ?? data.message ?? fallback;\n } catch {\n return fallback;\n }\n};\n\ntype PutTexts = {\n uploadFailed: (status: number, statusText: string) => string;\n networkError: string;\n uploadAborted: string;\n uploadTimedOut: string;\n};\n\nconst putWithProgress = (\n url: string,\n headers: Record<string, string>,\n file: File,\n onProgress: (percentage: number) => void,\n texts: PutTexts,\n): Promise<void> => {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n xhr.upload.addEventListener('progress', (e) => {\n if (e.lengthComputable) {\n onProgress(Math.round((e.loaded / e.total) * 100));\n }\n });\n xhr.addEventListener('load', () => {\n if (xhr.status >= 200 && xhr.status < 300) resolve();\n else reject(new Error(texts.uploadFailed(xhr.status, xhr.statusText)));\n });\n xhr.addEventListener('error', () => reject(new Error(texts.networkError)));\n xhr.addEventListener('abort', () => reject(new Error(texts.uploadAborted)));\n xhr.addEventListener('timeout', () =>\n reject(new Error(texts.uploadTimedOut)),\n );\n xhr.open('PUT', url);\n for (const [k, v] of Object.entries(headers)) {\n const lk = k.toLowerCase();\n if (lk === 'host' || lk === 'content-length') continue;\n try {\n xhr.setRequestHeader(k, v);\n } catch {\n // Some headers are blocked by the browser — skip silently.\n }\n }\n xhr.send(file);\n });\n};\n\nconst flattenHeaders = (\n headers: Record<string, string | string[]> | undefined,\n): Record<string, string> => {\n const out: Record<string, string> = {};\n if (!headers) return out;\n for (const [k, v] of Object.entries(headers)) {\n out[k] = Array.isArray(v) ? v.join(',') : String(v);\n }\n return out;\n};\n\n/** Lowercase extension without leading dot, or empty string. */\nexport const getFileExtension = (filename: string): string => {\n const dot = filename.lastIndexOf('.');\n return dot >= 0 ? filename.slice(dot + 1).toLowerCase() : '';\n};\n\n/**\n * Build the `accept` map in the shape react-dropzone v15+ expects:\n * `{ [mimeType]: ['.ext', ...] }`. Multiple extensions that share a\n * MIME type (e.g. xls + xlsx in some legacy mappings) are grouped\n * under the same key.\n *\n * The previous flat-array shape (`[...mimes, ...'.exts']`) caused\n * react-dropzone to log `Skipped \".xlsx\" because it is not a valid\n * MIME type` and dropped the extension from the `<input accept>`\n * attribute, breaking selection on browsers that report an empty\n * `file.type` for Office formats.\n */\nconst buildAcceptMap = (\n acceptedTypes: Record<string, string> | undefined,\n): Record<string, string[]> | undefined => {\n if (!acceptedTypes) return undefined;\n const map: Record<string, string[]> = {};\n for (const [ext, mime] of Object.entries(acceptedTypes)) {\n const dotted = `.${ext}`;\n const list = map[mime];\n if (list) {\n if (!list.includes(dotted)) list.push(dotted);\n } else {\n map[mime] = [dotted];\n }\n }\n return map;\n};\n\nconst resolveMeta = (\n file: File,\n acceptedTypes: Record<string, string> | undefined,\n): S3FileMeta => {\n const extension = getFileExtension(file.name);\n if (!acceptedTypes) {\n return { mimeType: file.type, extension };\n }\n const mimeList = Object.values(acceptedTypes);\n if (file.type && mimeList.includes(file.type)) {\n return { mimeType: file.type, extension };\n }\n return { mimeType: acceptedTypes[extension] ?? file.type, extension };\n};\n\nconst defaultChildren: DropzoneProps['children'] = ({ files }) => {\n const uploading = Object.values(files).filter((f) => f.loading || !!f.error);\n if (uploading.length === 0) return null;\n return (\n <UploadingFiles>\n {uploading.map((file) =>\n file.error ? (\n <UploadingFiles.ItemError\n key={file.name}\n name={file.name}\n message={file.error}\n />\n ) : (\n <UploadingFiles.Item\n key={file.name}\n name={file.name}\n progress={file.progress ?? 0}\n />\n ),\n )}\n </UploadingFiles>\n );\n};\n\nexport const DropzoneS3 = <TInitBody extends S3InitBody = S3InitBody>({\n texts,\n acceptedTypes,\n accept,\n initUrl,\n buildInitBody,\n register,\n getHeaders,\n getErrorMessage = defaultGetErrorMessage,\n resolveUploadedUrl,\n children,\n ...dropzoneProps\n}: DropzoneS3Props<TInitBody>) => {\n const acceptList = accept ?? buildAcceptMap(acceptedTypes);\n const t = { ...DEFAULT_TEXTS, ...texts };\n\n const uploader: Uploader = async (file, { onProgress }) => {\n const jsonHeaders = (): Record<string, string> => ({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n ...(getHeaders?.() ?? {}),\n });\n const meta = resolveMeta(file, acceptedTypes);\n\n // 1. init — request a presigned URL.\n const initRes = await fetch(initUrl, {\n method: 'POST',\n headers: jsonHeaders(),\n body: JSON.stringify(buildInitBody(file, meta)),\n });\n if (!initRes.ok) {\n throw new Error(\n await getErrorMessage(initRes, t.initFailed(initRes.status)),\n );\n }\n const init = (await initRes.json()) as S3InitResponse<TInitBody>;\n const { url, headers: s3Headers } = init.body;\n\n // 2. direct upload to S3.\n await putWithProgress(\n url,\n flattenHeaders(s3Headers),\n file,\n (p) => onProgress?.({ loaded: 0, total: file.size, percentage: p }),\n t,\n );\n\n // 3. register (optional) — persist metadata on the app backend.\n if (register) {\n const regRes = await fetch(register.url, {\n method: 'POST',\n headers: jsonHeaders(),\n body: JSON.stringify(register.buildBody(file, init.body, meta)),\n });\n if (!regRes.ok) {\n throw new Error(\n await getErrorMessage(regRes, t.registerFailed(regRes.status)),\n );\n }\n }\n\n const storedUrl =\n resolveUploadedUrl?.(init.body, file) ??\n (typeof init.body.key === 'string' ? init.body.key : url.split('?')[0]);\n return { body: { url: storedUrl } };\n };\n\n return (\n <Dropzone\n {...dropzoneProps}\n title={texts?.title}\n subtitle={texts?.subtitle}\n hint={texts?.hint}\n accept={acceptList}\n uploader={uploader}\n >\n {children ?? defaultChildren}\n </Dropzone>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { DropzoneFilesProps } from "../../controls/dropzone-files/DropzoneFiles.mjs";
|
|
2
|
-
//#region src/components/forms/controls/FormDropzoneFiles.d.ts
|
|
3
|
-
type FormDropzoneFilesProps = Omit<DropzoneFilesProps, 'url' | 'autoSend' | 'onChange'> & {
|
|
4
|
-
name: string;
|
|
5
|
-
$rule?: string;
|
|
6
|
-
isSubmitting?: boolean;
|
|
7
|
-
url?: string;
|
|
8
|
-
onChange?: (files: File[]) => void;
|
|
9
|
-
};
|
|
10
|
-
//#endregion
|
|
11
|
-
export { FormDropzoneFilesProps };
|
|
12
|
-
//# sourceMappingURL=FormDropzoneFiles.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormDropzoneFiles.d.mts","names":[],"sources":["../../../../src/components/forms/controls/FormDropzoneFiles.tsx"],"mappings":";;KAOY,sBAAA,GAAyB,IAAA,CACnC,kBAAA;EAGA,IAAA;EACA,KAAA;EACA,YAAA;EACA,GAAA;EACA,QAAA,IAAY,KAAA,EAAO,IAAA;AAAA"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{DropzoneFiles as e}from"../../controls/dropzone-files/DropzoneFiles.mjs";import{jsx as t}from"react/jsx-runtime";import{Controller as n}from"react-hook-form";const r=({$rule:r,isSubmitting:i,name:a,onChange:o,...s})=>t(n,{name:a,render:({field:{onChange:n}})=>t(e,{...s,autoSend:!1,onChange:e=>{n(e),o?.(e)}})});r.displayName=`Form.DropzoneFiles`;export{r as FormDropzoneFiles};
|
|
2
|
-
//# sourceMappingURL=FormDropzoneFiles.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FormDropzoneFiles.mjs","names":[],"sources":["../../../../src/components/forms/controls/FormDropzoneFiles.tsx"],"sourcesContent":["import { Controller } from 'react-hook-form';\n\nimport {\n DropzoneFiles,\n type DropzoneFilesProps,\n} from '@/components/controls/dropzone-files/DropzoneFiles';\n\nexport type FormDropzoneFilesProps = Omit<\n DropzoneFilesProps,\n 'url' | 'autoSend' | 'onChange'\n> & {\n name: string;\n $rule?: string;\n isSubmitting?: boolean;\n url?: string;\n onChange?: (files: File[]) => void;\n};\n\nexport const FormDropzoneFiles = ({\n $rule: _$rule,\n isSubmitting: _isSubmitting,\n name,\n onChange,\n ...props\n}: FormDropzoneFilesProps) => {\n return (\n <Controller\n name={name}\n render={({ field: { onChange: fieldOnChange } }) => (\n <DropzoneFiles\n {...props}\n autoSend={false}\n onChange={(files) => {\n fieldOnChange(files);\n onChange?.(files);\n }}\n />\n )}\n />\n );\n};\n\nFormDropzoneFiles.displayName = 'Form.DropzoneFiles';\n"],"mappings":"qKAkBA,MAAa,GAAqB,CAChC,MAAO,EACP,aAAc,EACd,OACA,WACA,GAAG,KAGD,EAAC,EAAD,CACQ,OACN,QAAS,CAAE,MAAO,CAAE,SAAU,MAC5B,EAAC,EAAD,CACE,GAAI,EACJ,SAAU,GACV,SAAW,GAAU,CACnB,EAAc,EAAM,CACpB,IAAW,EAAM,EAEnB,CAAA,CAEJ,CAAA,CAIN,EAAkB,YAAc"}
|