@mage-ui/components 1.0.194 → 1.0.196
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/forms/Form.d.mts +3 -0
- 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/FormBase.mjs +1 -1
- package/dist/components/forms/FormBase.mjs.map +1 -1
- package/dist/components/forms/FormErrorBox.mjs +1 -1
- package/dist/components/forms/FormErrorBox.mjs.map +1 -1
- package/dist/components/forms/index.d.mts +1 -0
- package/dist/components/forms/multi-step/MultiForm.d.mts.map +1 -1
- package/dist/components/forms/multi-step/MultiForm.mjs +1 -1
- package/dist/components/forms/multi-step/MultiForm.mjs.map +1 -1
- package/dist/components/forms/multi-step/PendingErrorsContext.d.mts +24 -0
- package/dist/components/forms/multi-step/PendingErrorsContext.d.mts.map +1 -0
- package/dist/components/forms/multi-step/PendingErrorsContext.mjs +2 -0
- package/dist/components/forms/multi-step/PendingErrorsContext.mjs.map +1 -0
- package/dist/components/forms/multi-step/Step.mjs +1 -1
- package/dist/components/forms/multi-step/parser/Schemas.mjs +1 -1
- package/dist/components/forms/multi-step/parser/Schemas.mjs.map +1 -1
- package/dist/components/index.d.mts +1 -0
- package/dist/index.d.mts +2 -1
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.d.mts","names":[],"sources":["../../../src/components/forms/Form.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;KAiCK,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;
|
|
1
|
+
{"version":3,"file":"Form.d.mts","names":[],"sources":["../../../src/components/forms/Form.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;KAiCK,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;IACA,KAAA;MAAU,MAAA,EAAQ,MAAA;IAAA;EAAA;EAEpB,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;EAEpB,oBAAA;EACA,UAAA;EACA,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,oBAAA;IAAA,UAAA;IAAA;EAAA,GAWvC,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{FormCheckboxGroup as n}from"./controls/FormCheckboxGroup.mjs";import{FormCheckboxTree as r}from"./controls/FormCheckboxTree.mjs";import{FormCombobox as i}from"./controls/FormCombobox.mjs";import{FormDatePicker as a}from"./controls/FormDatePicker.mjs";import{FormDateTimePicker as o}from"./controls/FormDateTimePicker.mjs";import{FormDropzone as s}from"./controls/FormDropzone.mjs";import{FormS3Context as c}from"./FormS3Context.mjs";import{FormDropzoneS3 as l}from"./controls/FormDropzoneS3.mjs";import{FormFileInput as u}from"./controls/FormFileInput.mjs";import{FormFileInputMultiple as d}from"./controls/FormFileInputMultiple.mjs";import{FormFileInputMultipleS3 as f}from"./controls/FormFileInputMultipleS3.mjs";import{FormFileInputS3 as p}from"./controls/FormFileInputS3.mjs";import{FormHidden as m}from"./controls/FormHidden.mjs";import{FormPassword as h}from"./controls/FormPassword.mjs";import{FormRadioGroup as g}from"./controls/FormRadioGroup.mjs";import{FormSelect as _}from"./controls/FormSelect.mjs";import{FormSubmit as v}from"./controls/FormSubmit.mjs";import{FormTextarea as y}from"./controls/FormTextarea.mjs";import{FormTextInput as b}from"./controls/FormTextInput.mjs";import{FormYearPicker as x}from"./controls/FormYearPicker.mjs";import{FormBase as S}from"./FormBase.mjs";import{FormErrorBox as C}from"./FormErrorBox.mjs";import{form as w,formRoot as T}from"@mage-ui/styled-system/recipes";import{jsx as E}from"react/jsx-runtime";import{useRef as D}from"react";const O=({$fetcher:e,onValidSubmit:t,onInvalidSubmit:n,invalidStatus:r=[],children:i,schema:a,t:o,s3UploadErrorMessage:s,noValidate:l,classNames:u})=>{let d=D(new Map),f={registerS3Upload:(e,t)=>{d.current.set(e,t)},unregisterS3Upload:e=>{d.current.delete(e)}},p=async e=>{let t=Array.from(d.current.values());await Promise.all(t.map(t=>t(e)))};return E(c.Provider,{value:f,children:E(S,{onSubmit:async({data:i,setError:a})=>{await e({data:i}).then(async e=>{let n=e;if(n?.statusCode&&n.statusCode>=400)throw n;try{await p(e)}catch(e){console.error(`S3 upload error:`,e),a(`root.serverError`,{type:`s3`,message:s??`Failed to upload files`});return}t?.(e||{})}).catch(e=>{if((e.statusCode===400||e.statusCode===422)&&e.cause?.issues&&Object.keys(e.cause.issues).forEach(t=>{a(t,{type:`server`,message:e.cause?.issues?.[t]})}),r.includes(e.statusCode)&&n)n({message:e?.message??`Something went wrong`,setError:a,status:e.statusCode});else if(e.statusCode===400||e.statusCode===422)a(`root.serverError`,{type:`server`,message:e?.message??`Something went wrong`});else throw e})},schema:a,noValidate:l,errorBox:C,t:o,classNames:{form:u?.form??w(),root:u?.root??T()},children:i})})};O.displayName=`Form`,O.TextInput=b,O.Textarea=y,O.Submit=v,O.Hidden=m,O.Checkbox=t,O.CheckboxGroup=n,O.CheckboxTree=r,O.RadioGroup=g,O.Password=h,O.Select=_,O.Combobox=i,O.Autocomplete=e,O.DatePicker=a,O.YearPicker=x,O.DateTimePicker=o,O.FileInput=u,O.FileInputMultiple=d,O.FileInputS3=p,O.FileInputMultipleS3=f,O.Dropzone=s,O.DropzoneS3=l;export{O as Form};
|
|
1
|
+
import{FormAutocomplete as e}from"./controls/FormAutocomplete.mjs";import{FormCheckbox as t}from"./controls/FormCheckbox.mjs";import{FormCheckboxGroup as n}from"./controls/FormCheckboxGroup.mjs";import{FormCheckboxTree as r}from"./controls/FormCheckboxTree.mjs";import{FormCombobox as i}from"./controls/FormCombobox.mjs";import{FormDatePicker as a}from"./controls/FormDatePicker.mjs";import{FormDateTimePicker as o}from"./controls/FormDateTimePicker.mjs";import{FormDropzone as s}from"./controls/FormDropzone.mjs";import{FormS3Context as c}from"./FormS3Context.mjs";import{FormDropzoneS3 as l}from"./controls/FormDropzoneS3.mjs";import{FormFileInput as u}from"./controls/FormFileInput.mjs";import{FormFileInputMultiple as d}from"./controls/FormFileInputMultiple.mjs";import{FormFileInputMultipleS3 as f}from"./controls/FormFileInputMultipleS3.mjs";import{FormFileInputS3 as p}from"./controls/FormFileInputS3.mjs";import{FormHidden as m}from"./controls/FormHidden.mjs";import{FormPassword as h}from"./controls/FormPassword.mjs";import{FormRadioGroup as g}from"./controls/FormRadioGroup.mjs";import{FormSelect as _}from"./controls/FormSelect.mjs";import{FormSubmit as v}from"./controls/FormSubmit.mjs";import{FormTextarea as y}from"./controls/FormTextarea.mjs";import{FormTextInput as b}from"./controls/FormTextInput.mjs";import{FormYearPicker as x}from"./controls/FormYearPicker.mjs";import{FormBase as S}from"./FormBase.mjs";import{FormErrorBox as C}from"./FormErrorBox.mjs";import{form as w,formRoot as T}from"@mage-ui/styled-system/recipes";import{jsx as E}from"react/jsx-runtime";import{useRef as D}from"react";const O=({$fetcher:e,onValidSubmit:t,onInvalidSubmit:n,invalidStatus:r=[],children:i,schema:a,t:o,s3UploadErrorMessage:s,noValidate:l,classNames:u})=>{let d=D(new Map),f={registerS3Upload:(e,t)=>{d.current.set(e,t)},unregisterS3Upload:e=>{d.current.delete(e)}},p=async e=>{let t=Array.from(d.current.values());await Promise.all(t.map(t=>t(e)))};return E(c.Provider,{value:f,children:E(S,{onSubmit:async({data:i,setError:a})=>{await e({data:i}).then(async e=>{let n=e;if(n?.statusCode&&n.statusCode>=400)throw n;try{await p(e)}catch(e){console.error(`S3 upload error:`,e),a(`root.serverError`,{type:`s3`,message:s??`Failed to upload files`});return}t?.(e||{})}).catch(e=>{if((e.statusCode===400||e.statusCode===422)&&e.cause?.issues&&Object.keys(e.cause.issues).forEach(t=>{a(t,{type:`server`,message:e.cause?.issues?.[t]})}),r.includes(e.statusCode)&&n)n({message:e?.message??`Something went wrong`,setError:a,status:e.statusCode,cause:e.cause});else if(e.statusCode===400||e.statusCode===422)a(`root.serverError`,{type:`server`,message:e?.message??`Something went wrong`});else throw e})},schema:a,noValidate:l,errorBox:C,t:o,classNames:{form:u?.form??w(),root:u?.root??T()},children:i})})};O.displayName=`Form`,O.TextInput=b,O.Textarea=y,O.Submit=v,O.Hidden=m,O.Checkbox=t,O.CheckboxGroup=n,O.CheckboxTree=r,O.RadioGroup=g,O.Password=h,O.Select=_,O.Combobox=i,O.Autocomplete=e,O.DatePicker=a,O.YearPicker=x,O.DateTimePicker=o,O.FileInput=u,O.FileInputMultiple=d,O.FileInputS3=p,O.FileInputMultipleS3=f,O.Dropzone=s,O.DropzoneS3=l;export{O 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 { useRef } 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 { FormCheckboxGroup } from './controls/FormCheckboxGroup';\nimport { FormCheckboxTree } from './controls/FormCheckboxTree';\nimport { FormCombobox } from './controls/FormCombobox';\nimport { FormDatePicker } from './controls/FormDatePicker';\nimport { FormDateTimePicker } from './controls/FormDateTimePicker';\nimport { FormDropzone } from './controls/FormDropzone';\nimport { FormDropzoneS3 } from './controls/FormDropzoneS3';\nimport { FormFileInput } from './controls/FormFileInput';\nimport { FormFileInputMultiple } from './controls/FormFileInputMultiple';\nimport { FormFileInputMultipleS3 } from './controls/FormFileInputMultipleS3';\nimport { FormFileInputS3 } from './controls/FormFileInputS3';\nimport { FormHidden } from './controls/FormHidden';\nimport { FormPassword } from './controls/FormPassword';\nimport { FormRadioGroup } from './controls/FormRadioGroup';\nimport { FormSelect } from './controls/FormSelect';\nimport { FormSubmit } from './controls/FormSubmit';\nimport { FormTextarea } from './controls/FormTextarea';\nimport { FormTextInput } from './controls/FormTextInput';\nimport { FormYearPicker } from './controls/FormYearPicker';\nimport { FormBase } from './FormBase';\nimport { FormErrorBox } from './FormErrorBox';\nimport { FormS3Context, type S3UploadCallback } from './FormS3Context';\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 /** Mensaje mostrado al usuario si falla la subida de archivos a S3 tras el submit. */\n s3UploadErrorMessage?: string;\n noValidate?: boolean;\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 s3UploadErrorMessage,\n noValidate,\n classNames,\n}: FormProps<T>) => {\n const s3CallbacksRef = useRef<Map<string, S3UploadCallback>>(new Map());\n\n const s3ContextValue = {\n registerS3Upload: (name: string, cb: S3UploadCallback) => {\n s3CallbacksRef.current.set(name, cb);\n },\n unregisterS3Upload: (name: string) => {\n s3CallbacksRef.current.delete(name);\n },\n };\n\n const runS3Uploads = async (response: unknown): Promise<void> => {\n const callbacks = Array.from(s3CallbacksRef.current.values());\n await Promise.all(callbacks.map((cb) => cb(response)));\n };\n\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(async (response) => {\n const res = response as FormError & FormResponse;\n if (res?.statusCode && res.statusCode >= 400) {\n throw res;\n }\n\n try {\n await runS3Uploads(response);\n } catch (e) {\n console.error('S3 upload error:', e);\n setError('root.serverError', {\n type: 's3',\n message: s3UploadErrorMessage ?? 'Failed to upload files',\n });\n return;\n }\n onValidSubmit?.((response || {}) as FormResponse);\n })\n .catch((error: FormError) => {\n if (\n (error.statusCode === 400 || error.statusCode === 422) &&\n error.cause?.issues\n ) {\n Object.keys(error.cause.issues).forEach((key) => {\n setError(key, {\n type: 'server',\n message: error.cause?.issues?.[key],\n });\n });\n }\n\n if (invalidStatus.includes(error.statusCode) && onInvalidSubmit) {\n onInvalidSubmit({\n message: error?.message ?? 'Something went wrong',\n setError: setError as UseFormSetError<T>,\n status: error.statusCode,\n });\n } else if (error.statusCode === 400 || error.statusCode === 422) {\n setError('root.serverError', {\n type: 'server',\n message: error?.message ?? 'Something went wrong',\n });\n } else {\n throw error;\n }\n });\n };\n\n return (\n <FormS3Context.Provider value={s3ContextValue}>\n <FormBase\n onSubmit={onSubmit}\n schema={schema}\n noValidate={noValidate}\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 </FormS3Context.Provider>\n );\n};\n\nForm.displayName = 'Form';\nForm.TextInput = FormTextInput;\nForm.Textarea = FormTextarea;\nForm.Submit = FormSubmit;\nForm.Hidden = FormHidden;\nForm.Checkbox = FormCheckbox;\nForm.CheckboxGroup = FormCheckboxGroup;\nForm.CheckboxTree = FormCheckboxTree;\nForm.RadioGroup = FormRadioGroup;\nForm.Password = FormPassword;\nForm.Select = FormSelect;\nForm.Combobox = FormCombobox;\nForm.Autocomplete = FormAutocomplete;\nForm.DatePicker = FormDatePicker;\nForm.YearPicker = FormYearPicker;\nForm.DateTimePicker = FormDateTimePicker;\nForm.FileInput = FormFileInput;\nForm.FileInputMultiple = FormFileInputMultiple;\nForm.FileInputS3 = FormFileInputS3;\nForm.FileInputMultipleS3 = FormFileInputMultipleS3;\nForm.Dropzone = FormDropzone;\nForm.DropzoneS3 = FormDropzoneS3;\n"],"mappings":"
|
|
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 { useRef } 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 { FormCheckboxGroup } from './controls/FormCheckboxGroup';\nimport { FormCheckboxTree } from './controls/FormCheckboxTree';\nimport { FormCombobox } from './controls/FormCombobox';\nimport { FormDatePicker } from './controls/FormDatePicker';\nimport { FormDateTimePicker } from './controls/FormDateTimePicker';\nimport { FormDropzone } from './controls/FormDropzone';\nimport { FormDropzoneS3 } from './controls/FormDropzoneS3';\nimport { FormFileInput } from './controls/FormFileInput';\nimport { FormFileInputMultiple } from './controls/FormFileInputMultiple';\nimport { FormFileInputMultipleS3 } from './controls/FormFileInputMultipleS3';\nimport { FormFileInputS3 } from './controls/FormFileInputS3';\nimport { FormHidden } from './controls/FormHidden';\nimport { FormPassword } from './controls/FormPassword';\nimport { FormRadioGroup } from './controls/FormRadioGroup';\nimport { FormSelect } from './controls/FormSelect';\nimport { FormSubmit } from './controls/FormSubmit';\nimport { FormTextarea } from './controls/FormTextarea';\nimport { FormTextInput } from './controls/FormTextInput';\nimport { FormYearPicker } from './controls/FormYearPicker';\nimport { FormBase } from './FormBase';\nimport { FormErrorBox } from './FormErrorBox';\nimport { FormS3Context, type S3UploadCallback } from './FormS3Context';\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 cause?: { issues: Record<string, string> };\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 /** Mensaje mostrado al usuario si falla la subida de archivos a S3 tras el submit. */\n s3UploadErrorMessage?: string;\n noValidate?: boolean;\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 s3UploadErrorMessage,\n noValidate,\n classNames,\n}: FormProps<T>) => {\n const s3CallbacksRef = useRef<Map<string, S3UploadCallback>>(new Map());\n\n const s3ContextValue = {\n registerS3Upload: (name: string, cb: S3UploadCallback) => {\n s3CallbacksRef.current.set(name, cb);\n },\n unregisterS3Upload: (name: string) => {\n s3CallbacksRef.current.delete(name);\n },\n };\n\n const runS3Uploads = async (response: unknown): Promise<void> => {\n const callbacks = Array.from(s3CallbacksRef.current.values());\n await Promise.all(callbacks.map((cb) => cb(response)));\n };\n\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(async (response) => {\n const res = response as FormError & FormResponse;\n if (res?.statusCode && res.statusCode >= 400) {\n throw res;\n }\n\n try {\n await runS3Uploads(response);\n } catch (e) {\n console.error('S3 upload error:', e);\n setError('root.serverError', {\n type: 's3',\n message: s3UploadErrorMessage ?? 'Failed to upload files',\n });\n return;\n }\n onValidSubmit?.((response || {}) as FormResponse);\n })\n .catch((error: FormError) => {\n if (\n (error.statusCode === 400 || error.statusCode === 422) &&\n error.cause?.issues\n ) {\n Object.keys(error.cause.issues).forEach((key) => {\n setError(key, {\n type: 'server',\n message: error.cause?.issues?.[key],\n });\n });\n }\n\n if (invalidStatus.includes(error.statusCode) && onInvalidSubmit) {\n onInvalidSubmit({\n message: error?.message ?? 'Something went wrong',\n setError: setError as UseFormSetError<T>,\n status: error.statusCode,\n cause: error.cause,\n });\n } else if (error.statusCode === 400 || error.statusCode === 422) {\n setError('root.serverError', {\n type: 'server',\n message: error?.message ?? 'Something went wrong',\n });\n } else {\n throw error;\n }\n });\n };\n\n return (\n <FormS3Context.Provider value={s3ContextValue}>\n <FormBase\n onSubmit={onSubmit}\n schema={schema}\n noValidate={noValidate}\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 </FormS3Context.Provider>\n );\n};\n\nForm.displayName = 'Form';\nForm.TextInput = FormTextInput;\nForm.Textarea = FormTextarea;\nForm.Submit = FormSubmit;\nForm.Hidden = FormHidden;\nForm.Checkbox = FormCheckbox;\nForm.CheckboxGroup = FormCheckboxGroup;\nForm.CheckboxTree = FormCheckboxTree;\nForm.RadioGroup = FormRadioGroup;\nForm.Password = FormPassword;\nForm.Select = FormSelect;\nForm.Combobox = FormCombobox;\nForm.Autocomplete = FormAutocomplete;\nForm.DatePicker = FormDatePicker;\nForm.YearPicker = FormYearPicker;\nForm.DateTimePicker = FormDateTimePicker;\nForm.FileInput = FormFileInput;\nForm.FileInputMultiple = FormFileInputMultiple;\nForm.FileInputS3 = FormFileInputS3;\nForm.FileInputMultipleS3 = FormFileInputMultipleS3;\nForm.Dropzone = FormDropzone;\nForm.DropzoneS3 = FormDropzoneS3;\n"],"mappings":"8kDA0EA,MAAa,GAA+B,CAC1C,WACA,gBACA,kBACA,gBAAgB,EAAE,CAClB,WACA,SACA,IACA,uBACA,aACA,gBACkB,CAClB,IAAM,EAAiB,EAAsC,IAAI,IAAM,CAEjE,EAAiB,CACrB,kBAAmB,EAAc,IAAyB,CACxD,EAAe,QAAQ,IAAI,EAAM,EAAG,EAEtC,mBAAqB,GAAiB,CACpC,EAAe,QAAQ,OAAO,EAAK,EAEtC,CAEK,EAAe,KAAO,IAAqC,CAC/D,IAAM,EAAY,MAAM,KAAK,EAAe,QAAQ,QAAQ,CAAC,CAC7D,MAAM,QAAQ,IAAI,EAAU,IAAK,GAAO,EAAG,EAAS,CAAC,CAAC,EA4DxD,OACE,EAAC,EAAc,SAAf,CAAwB,MAAO,WAC7B,EAAC,EAAD,CACY,SA5DC,MAAO,CACtB,OACA,cAII,CACJ,MAAM,EAAS,CAAQ,OAAW,CAAC,CAChC,KAAK,KAAO,IAAa,CACxB,IAAM,EAAM,EACZ,GAAI,GAAK,YAAc,EAAI,YAAc,IACvC,MAAM,EAGR,GAAI,CACF,MAAM,EAAa,EAAS,OACrB,EAAG,CACV,QAAQ,MAAM,mBAAoB,EAAE,CACpC,EAAS,mBAAoB,CAC3B,KAAM,KACN,QAAS,GAAwB,yBAClC,CAAC,CACF,OAEF,IAAiB,GAAY,EAAE,CAAkB,EACjD,CACD,MAAO,GAAqB,CAa3B,IAXG,EAAM,aAAe,KAAO,EAAM,aAAe,MAClD,EAAM,OAAO,QAEb,OAAO,KAAK,EAAM,MAAM,OAAO,CAAC,QAAS,GAAQ,CAC/C,EAAS,EAAK,CACZ,KAAM,SACN,QAAS,EAAM,OAAO,SAAS,GAChC,CAAC,EACF,CAGA,EAAc,SAAS,EAAM,WAAW,EAAI,EAC9C,EAAgB,CACd,QAAS,GAAO,SAAW,uBACjB,WACV,OAAQ,EAAM,WACd,MAAO,EAAM,MACd,CAAC,SACO,EAAM,aAAe,KAAO,EAAM,aAAe,IAC1D,EAAS,mBAAoB,CAC3B,KAAM,SACN,QAAS,GAAO,SAAW,uBAC5B,CAAC,MAEF,MAAM,GAER,EAOQ,SACI,aACZ,SAAU,EACP,IACH,WAAY,CACV,KAAM,GAAY,MAAQ,GAAM,CAChC,KAAM,GAAY,MAAQ,GAAU,CACrC,CAEA,WACQ,CAAA,CACY,CAAA,EAI7B,EAAK,YAAc,OACnB,EAAK,UAAY,EACjB,EAAK,SAAW,EAChB,EAAK,OAAS,EACd,EAAK,OAAS,EACd,EAAK,SAAW,EAChB,EAAK,cAAgB,EACrB,EAAK,aAAe,EACpB,EAAK,WAAa,EAClB,EAAK,SAAW,EAChB,EAAK,OAAS,EACd,EAAK,SAAW,EAChB,EAAK,aAAe,EACpB,EAAK,WAAa,EAClB,EAAK,WAAa,EAClB,EAAK,eAAiB,EACtB,EAAK,UAAY,EACjB,EAAK,kBAAoB,EACzB,EAAK,YAAc,EACnB,EAAK,oBAAsB,EAC3B,EAAK,SAAW,EAChB,EAAK,WAAa"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use client";import{controls as e}from"./controls/index.mjs";import{RegisteredFormChildren as t}from"./controls/register-components.mjs";import{
|
|
1
|
+
"use client";import{controls as e}from"./controls/index.mjs";import{RegisteredFormChildren as t}from"./controls/register-components.mjs";import{MultiFormContext as n}from"./multi-step/MultiFormContext.mjs";import{PendingErrorsContext as r}from"./multi-step/PendingErrorsContext.mjs";import{extractFormRules as i}from"./rules/extract-form-rules.mjs";import{cx as a}from"@mage-ui/styled-system/css";import{jsx as o,jsxs as s}from"react/jsx-runtime";import{useContext as c,useEffect as l}from"react";import{FormProvider as u,useForm as d,useFormContext as f}from"react-hook-form";import*as p from"zod";import{zodResolver as m}from"@hookform/resolvers/zod";function h(){let e=c(r),t=c(n),{setError:i}=f();return l(()=>{if(!e||!t)return;let n=e.consumeErrorsForStep(t.step.current);for(let[e,t]of Object.entries(n))i(e,{type:`server`,message:Array.isArray(t)?t.join(`, `):t})},[e,t,i,e?.version]),null}const g=({errorBox:n,onWatch:r,onSubmit:c,children:f,schema:g=p.object({}),t:_,mode:v=`onSubmit`,reValidateMode:y=`onChange`,noValidate:b,classNames:x})=>{let S=d({shouldFocusError:!0,resolver:m(g?g.and(i(f,e)):i(f,e)),mode:v,reValidateMode:y}),{register:C,handleSubmit:w,setError:T,formState:{errors:E},watch:D}=S;return l(()=>{let{unsubscribe:e}=D(e=>{r?.(e)});return()=>e()},[D,r]),s(u,{...S,t:_,children:[o(h,{}),o(n,{errors:E}),o(`form`,{noValidate:b,onSubmit:w(e=>c({data:e,setError:T})),className:a(x?.form,x?.root),children:o(t,{register:C,componentTypes:e,errors:E,t:_,children:f})})]})};export{g as FormBase};
|
|
2
2
|
//# sourceMappingURL=FormBase.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormBase.mjs","names":["z"],"sources":["../../../src/components/forms/FormBase.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { useEffect } from 'react';\nimport type {\n DeepPartialSkipArrayKey,\n FieldErrors,\n FieldValues,\n UseFormSetError,\n} from 'react-hook-form';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport * as z from 'zod';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { cx } from '@mage-ui/styled-system/css';\n\nimport { controls } from './controls';\nimport { RegisteredFormChildren } from './controls/register-components';\nimport { extractFormRules } from './rules/extract-form-rules';\n\ntype FormProps = {\n children: React.ReactNode;\n schema?: z.ZodObject<Record<string, z.ZodTypeAny>>;\n errorBox: React.ComponentType<{ errors: FieldErrors }>;\n onWatch?: (values: DeepPartialSkipArrayKey<FieldValues>) => void;\n onSubmit: (args: {\n data: FieldValues;\n setError: UseFormSetError<FieldValues>;\n }) => void | Promise<void>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n mode?: 'onBlur' | 'onChange' | 'onSubmit' | 'onTouched' | 'all';\n reValidateMode?: 'onBlur' | 'onChange' | 'onSubmit';\n noValidate?: boolean;\n classNames?: {\n form?: string;\n root?: string;\n };\n};\n\nexport const FormBase = ({\n errorBox: ErrorBox,\n onWatch,\n onSubmit,\n children,\n schema = z.object({}),\n t,\n mode = 'onSubmit',\n reValidateMode = 'onChange',\n noValidate,\n classNames,\n}: FormProps) => {\n const rules = (\n schema\n ? schema.and(extractFormRules(children, controls) as z.ZodTypeAny)\n : (extractFormRules(children, controls) as z.ZodTypeAny)\n ) as z.ZodType<FieldValues, FieldValues>;\n\n const form = useForm({\n shouldFocusError: true,\n resolver: zodResolver(rules),\n mode,\n reValidateMode,\n });\n\n const {\n register,\n handleSubmit,\n setError,\n formState: { errors },\n watch,\n } = form;\n\n useEffect(() => {\n const { unsubscribe } = watch((values) => {\n onWatch?.(values);\n });\n return () => unsubscribe();\n }, [watch, onWatch]);\n\n return (\n <FormProvider {...form} {...({ t } as Record<string, unknown>)}>\n <ErrorBox errors={errors} />\n <form\n noValidate={noValidate}\n onSubmit={handleSubmit((data) => onSubmit({ data, setError }))}\n className={cx(classNames?.form, classNames?.root)}\n >\n <RegisteredFormChildren\n register={register}\n componentTypes={controls}\n errors={errors}\n t={t}\n >\n {children}\n </RegisteredFormChildren>\n </form>\n </FormProvider>\n );\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FormBase.mjs","names":["z"],"sources":["../../../src/components/forms/FormBase.tsx"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { useContext, useEffect } from 'react';\nimport type {\n DeepPartialSkipArrayKey,\n FieldErrors,\n FieldValues,\n UseFormSetError,\n} from 'react-hook-form';\nimport { FormProvider, useForm, useFormContext } from 'react-hook-form';\nimport * as z from 'zod';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { cx } from '@mage-ui/styled-system/css';\n\nimport { controls } from './controls';\nimport { RegisteredFormChildren } from './controls/register-components';\nimport { MultiFormContext } from './multi-step/MultiFormContext';\nimport { PendingErrorsContext } from './multi-step/PendingErrorsContext';\nimport { extractFormRules } from './rules/extract-form-rules';\n\nfunction ServerErrorApplier() {\n const pendingErrors = useContext(PendingErrorsContext);\n const multiForm = useContext(MultiFormContext);\n const { setError } = useFormContext();\n\n useEffect(() => {\n if (!pendingErrors || !multiForm) return;\n const errors = pendingErrors.consumeErrorsForStep(multiForm.step.current);\n for (const [field, message] of Object.entries(errors)) {\n const msg = Array.isArray(message) ? message.join(', ') : message;\n setError(field, { type: 'server', message: msg });\n }\n }, [pendingErrors, multiForm, setError, pendingErrors?.version]);\n\n return null;\n}\n\ntype FormProps = {\n children: React.ReactNode;\n schema?: z.ZodObject<Record<string, z.ZodTypeAny>>;\n errorBox: React.ComponentType<{ errors: FieldErrors }>;\n onWatch?: (values: DeepPartialSkipArrayKey<FieldValues>) => void;\n onSubmit: (args: {\n data: FieldValues;\n setError: UseFormSetError<FieldValues>;\n }) => void | Promise<void>;\n t?: (\n key: string,\n bindings?: Record<string, string>,\n fallback?: string,\n ) => string | React.ReactNode;\n mode?: 'onBlur' | 'onChange' | 'onSubmit' | 'onTouched' | 'all';\n reValidateMode?: 'onBlur' | 'onChange' | 'onSubmit';\n noValidate?: boolean;\n classNames?: {\n form?: string;\n root?: string;\n };\n};\n\nexport const FormBase = ({\n errorBox: ErrorBox,\n onWatch,\n onSubmit,\n children,\n schema = z.object({}),\n t,\n mode = 'onSubmit',\n reValidateMode = 'onChange',\n noValidate,\n classNames,\n}: FormProps) => {\n const rules = (\n schema\n ? schema.and(extractFormRules(children, controls) as z.ZodTypeAny)\n : (extractFormRules(children, controls) as z.ZodTypeAny)\n ) as z.ZodType<FieldValues, FieldValues>;\n\n const form = useForm({\n shouldFocusError: true,\n resolver: zodResolver(rules),\n mode,\n reValidateMode,\n });\n\n const {\n register,\n handleSubmit,\n setError,\n formState: { errors },\n watch,\n } = form;\n\n useEffect(() => {\n const { unsubscribe } = watch((values) => {\n onWatch?.(values);\n });\n return () => unsubscribe();\n }, [watch, onWatch]);\n\n return (\n <FormProvider {...form} {...({ t } as Record<string, unknown>)}>\n <ServerErrorApplier />\n <ErrorBox errors={errors} />\n <form\n noValidate={noValidate}\n onSubmit={handleSubmit((data) => onSubmit({ data, setError }))}\n className={cx(classNames?.form, classNames?.root)}\n >\n <RegisteredFormChildren\n register={register}\n componentTypes={controls}\n errors={errors}\n t={t}\n >\n {children}\n </RegisteredFormChildren>\n </form>\n </FormProvider>\n );\n};\n"],"mappings":"6oBAsBA,SAAS,GAAqB,CAC5B,IAAM,EAAgB,EAAW,EAAqB,CAChD,EAAY,EAAW,EAAiB,CACxC,CAAE,YAAa,GAAgB,CAWrC,OATA,MAAgB,CACd,GAAI,CAAC,GAAiB,CAAC,EAAW,OAClC,IAAM,EAAS,EAAc,qBAAqB,EAAU,KAAK,QAAQ,CACzE,IAAK,GAAM,CAAC,EAAO,KAAY,OAAO,QAAQ,EAAO,CAEnD,EAAS,EAAO,CAAE,KAAM,SAAU,QADtB,MAAM,QAAQ,EAAQ,CAAG,EAAQ,KAAK,KAAK,CAAG,EACV,CAAC,EAElD,CAAC,EAAe,EAAW,EAAU,GAAe,QAAQ,CAAC,CAEzD,KA0BT,MAAa,GAAY,CACvB,SAAU,EACV,UACA,WACA,WACA,SAASA,EAAE,OAAO,EAAE,CAAC,CACrB,IACA,OAAO,WACP,iBAAiB,WACjB,aACA,gBACe,CAOf,IAAM,EAAO,EAAQ,CACnB,iBAAkB,GAClB,SAAU,EAPV,EACI,EAAO,IAAI,EAAiB,EAAU,EAAS,CAAiB,CAC/D,EAAiB,EAAU,EAAS,CAKb,CAC5B,OACA,iBACD,CAAC,CAEI,CACJ,WACA,eACA,WACA,UAAW,CAAE,UACb,SACE,EASJ,OAPA,MAAgB,CACd,GAAM,CAAE,eAAgB,EAAO,GAAW,CACxC,IAAU,EAAO,EACjB,CACF,UAAa,GAAa,EACzB,CAAC,EAAO,EAAQ,CAAC,CAGlB,EAAC,EAAD,CAAc,GAAI,EAAa,aAA/B,CACE,EAAC,EAAD,EAAsB,CAAA,CACtB,EAAC,EAAD,CAAkB,SAAU,CAAA,CAC5B,EAAC,OAAD,CACc,aACZ,SAAU,EAAc,GAAS,EAAS,CAAE,OAAM,WAAU,CAAC,CAAC,CAC9D,UAAW,EAAG,GAAY,KAAM,GAAY,KAAK,UAEjD,EAAC,EAAD,CACY,WACV,eAAgB,EACR,SACL,IAEF,WACsB,CAAA,CACpB,CAAA,CACM"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{NotificationBanner as e}from"../data-display/notification-banner/NotificationBanner.mjs";import{jsx as t}from"react/jsx-runtime";const
|
|
1
|
+
import{NotificationBanner as e}from"../data-display/notification-banner/NotificationBanner.mjs";import{jsx as t,jsxs as n}from"react/jsx-runtime";import{useFormContext as r}from"react-hook-form";const i=({errors:i})=>{let{control:a}=r(),o=i.root?.serverError?.message,s=new Set(Object.keys(a._fields)),c=Object.entries(i).filter(([e,t])=>e!==`root`&&t?.type===`server`&&!s.has(e)).flatMap(([,e])=>{let t=e?.message;return Array.isArray(t)?t:typeof t==`string`?[t]:[]}),l=!!o,u=c.length>0;return!l&&!u?null:n(e,{intent:`danger`,role:`alert`,"aria-live":`assertive`,children:[l&&!u&&o,u&&t(`ul`,{children:c.map((e,n)=>t(`li`,{children:e},n))})]})};export{i as FormErrorBox};
|
|
2
2
|
//# sourceMappingURL=FormErrorBox.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormErrorBox.mjs","names":[],"sources":["../../../src/components/forms/FormErrorBox.tsx"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\n\nimport { NotificationBanner } from '../data-display';\n\nexport const FormErrorBox = ({ errors }: { errors: FieldErrors })
|
|
1
|
+
{"version":3,"file":"FormErrorBox.mjs","names":[],"sources":["../../../src/components/forms/FormErrorBox.tsx"],"sourcesContent":["import type { FieldErrors } from 'react-hook-form';\nimport { useFormContext } from 'react-hook-form';\n\nimport { NotificationBanner } from '../data-display';\n\nexport const FormErrorBox = ({ errors }: { errors: FieldErrors }) => {\n const { control } = useFormContext();\n\n const rootMessage = errors.root?.serverError?.message as string | undefined;\n\n const registeredNames = new Set(Object.keys(control._fields));\n const orphanedMessages = Object.entries(errors)\n .filter(\n ([key, err]) =>\n key !== 'root' && err?.type === 'server' && !registeredNames.has(key),\n )\n .flatMap(([, err]) => {\n const msg = err?.message;\n if (Array.isArray(msg)) return msg as string[];\n return typeof msg === 'string' ? [msg] : [];\n });\n\n const hasRoot = !!rootMessage;\n const hasOrphaned = orphanedMessages.length > 0;\n\n if (!hasRoot && !hasOrphaned) return null;\n\n return (\n <NotificationBanner intent='danger' role='alert' aria-live='assertive'>\n {hasRoot && !hasOrphaned && rootMessage}\n {hasOrphaned && (\n <ul>\n {orphanedMessages.map((msg, i) => (\n <li key={i}>{msg}</li>\n ))}\n </ul>\n )}\n </NotificationBanner>\n );\n};\n"],"mappings":"mMAKA,MAAa,GAAgB,CAAE,YAAsC,CACnE,GAAM,CAAE,WAAY,GAAgB,CAE9B,EAAc,EAAO,MAAM,aAAa,QAExC,EAAkB,IAAI,IAAI,OAAO,KAAK,EAAQ,QAAQ,CAAC,CACvD,EAAmB,OAAO,QAAQ,EAAO,CAC5C,QACE,CAAC,EAAK,KACL,IAAQ,QAAU,GAAK,OAAS,UAAY,CAAC,EAAgB,IAAI,EAAI,CACxE,CACA,SAAS,EAAG,KAAS,CACpB,IAAM,EAAM,GAAK,QAEjB,OADI,MAAM,QAAQ,EAAI,CAAS,EACxB,OAAO,GAAQ,SAAW,CAAC,EAAI,CAAG,EAAE,EAC3C,CAEE,EAAU,CAAC,CAAC,EACZ,EAAc,EAAiB,OAAS,EAI9C,MAFI,CAAC,GAAW,CAAC,EAAoB,KAGnC,EAAC,EAAD,CAAoB,OAAO,SAAS,KAAK,QAAQ,YAAU,qBAA3D,CACG,GAAW,CAAC,GAAe,EAC3B,GACC,EAAC,KAAD,CAAA,SACG,EAAiB,KAAK,EAAK,IAC1B,EAAC,KAAD,CAAA,SAAa,EAAS,CAAb,EAAa,CACtB,CACC,CAAA,CAEY"}
|
|
@@ -5,5 +5,6 @@ import { Fieldset, FieldsetProps } from "./layout/Fieldset.mjs";
|
|
|
5
5
|
import { MultiStepFormProps, RequestResponse, Schema, SchemaProps } from "./multi-step/parser/Schema.mjs";
|
|
6
6
|
import { MultiForm, MultiFormProps, MultiFormStep, MultiFormStepProps } from "./multi-step/MultiForm.mjs";
|
|
7
7
|
import { MultiFormContext, MultiFormContextValue, useMultiFormContext } from "./multi-step/MultiFormContext.mjs";
|
|
8
|
+
import { PendingErrorsContext, PendingErrorsProvider, usePendingErrors } from "./multi-step/PendingErrorsContext.mjs";
|
|
8
9
|
import { PASSWORD_RULES } from "./rules/password-rules.mjs";
|
|
9
10
|
import { z } from "./rules/zod.mjs";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiForm.d.mts","names":[],"sources":["../../../../src/components/forms/multi-step/MultiForm.tsx"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"MultiForm.d.mts","names":[],"sources":["../../../../src/components/forms/multi-step/MultiForm.tsx"],"mappings":";;;;;;KAkBY,kBAAA;EACV,IAAA;EACA,KAAA,EAAO,WAAA;EACP,KAAA;EACA,WAAA;EACA,QAAA,EAAU,WAAA;AAAA;AAAA,cAGC,aAAA;EAAA,SAAyB,kBAAA;;;KAG1B,cAAA;EACV,IAAA;EACA,QAAA,EAAU,SAAA;EACV,OAAA,EAAS,aAAA;IAAgB,MAAA,EAAQ,OAAA;EAAA;EACjC,OAAA,EAAS,aAAA;EACT,UAAA;IAAe,IAAA;IAAe,SAAA;EAAA;EAC9B,YAAA,GAAe,IAAA,CAAK,YAAA;AAAA;AAAA,cAsET,SAAA;EAAS,IAAA;EAAA,QAAA;EAAA,OAAA;EAAA,OAAA;EAAA,UAAA;EAAA;AAAA,GA5DnB,cAAA,KAAc,kBAAA,CAAA,GAAA,CAAA,OAAA;;aAnBqB,kBAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{NoSsr as e}from"../../misc/no-ssr/NoSsr.mjs";import{
|
|
1
|
+
import{NoSsr as e}from"../../misc/no-ssr/NoSsr.mjs";import{PendingErrorsProvider as t}from"./PendingErrorsContext.mjs";import{storage as n}from"./parser/utils/use-local-storage.mjs";import{Schemas as r}from"./parser/Schemas.mjs";import{jsx as i}from"react/jsx-runtime";import{Children as a,isValidElement as o,useCallback as s,useState as c}from"react";import{Formity as l}from"@formity/react";const u=e=>null;u.displayName=`MultiForm.Step`;const d=Object.assign(({name:d,children:f,Success:p,Loading:m,classNames:h,stepperProps:g})=>{let[_,v]=c(!1),[y,b]=c({}),x=s(e=>{b({...y,...e})},[y]),S=s(()=>{v(!0)},[]);if(_)return n.set(d,{}),i(p,{values:y});let C=new r(d,a.toArray(f).filter(o).map(e=>{if(e.type!==u)throw Error(`MultiForm children must be MultiForm.Step elements`);let t=e.props;return{name:t.name,rules:t.rules,label:t.label,description:t.description,form:t.children}}),n.get(d,{}),h,g),w=C.getFieldToStepMapping();return i(e,{fallback:i(m,{}),children:i(t,{fieldToStepMap:w,children:i(l,{schema:C.toRender(),params:{fields:y,onChange:x,onSubmit:S},initialState:C.currentState(),onReturn:S})})})},{Step:u});export{d as MultiForm,u as MultiFormStep};
|
|
2
2
|
//# sourceMappingURL=MultiForm.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiForm.mjs","names":[],"sources":["../../../../src/components/forms/multi-step/MultiForm.tsx"],"sourcesContent":["import {\n Children,\n type ComponentType,\n isValidElement,\n type ReactNode,\n useCallback,\n useState,\n} from 'react';\n\nimport { Formity } from '@formity/react';\n\nimport { NoSsr } from '../../misc/no-ssr/NoSsr';\nimport type { StepperProps } from '../../navigations/stepper/Stepper';\nimport type { SchemaProps } from './parser/Schema';\nimport { Schemas } from './parser/Schemas';\nimport { storage } from './parser/utils/use-local-storage';\n\nexport type MultiFormStepProps = {\n name: string;\n rules: SchemaProps['rules'];\n label?: string;\n description?: string;\n children: SchemaProps['form'];\n};\n\nexport const MultiFormStep = (_props: MultiFormStepProps) => null;\nMultiFormStep.displayName = 'MultiForm.Step';\n\nexport type MultiFormProps = {\n name: string;\n children: ReactNode;\n Success: ComponentType<{ values: Partial<unknown> }>;\n Loading: ComponentType;\n classNames?: { root?: string; multiForm?: string };\n stepperProps?: Omit<StepperProps, 'children' | 'active'>;\n};\n\nconst MultiFormBase = ({\n name,\n children,\n Success,\n Loading,\n classNames,\n stepperProps,\n}: MultiFormProps) => {\n const [submitted, setSubmitted] = useState(false);\n const [fields, setFields] = useState({});\n\n const onChange = useCallback(\n (values: Partial<unknown>) => {\n setFields({ ...fields, ...values });\n },\n [fields],\n );\n\n const onSubmit = useCallback(() => {\n setSubmitted(true);\n }, []);\n\n if (submitted) {\n storage.set(name, {});\n return <Success values={fields} />;\n }\n\n const schema: SchemaProps[] = Children.toArray(children)\n .filter(isValidElement)\n .map((element) => {\n if (element.type !== MultiFormStep) {\n throw new Error('MultiForm children must be MultiForm.Step elements');\n }\n const props = element.props as MultiFormStepProps;\n return {\n name: props.name,\n rules: props.rules,\n label: props.label,\n description: props.description,\n form: props.children,\n };\n });\n\n const schemaObj = new Schemas(\n name,\n schema,\n storage.get(name, {}),\n classNames,\n stepperProps,\n );\n\n return (\n <NoSsr fallback={<Loading />}>\n <Formity\n
|
|
1
|
+
{"version":3,"file":"MultiForm.mjs","names":[],"sources":["../../../../src/components/forms/multi-step/MultiForm.tsx"],"sourcesContent":["import {\n Children,\n type ComponentType,\n isValidElement,\n type ReactNode,\n useCallback,\n useState,\n} from 'react';\n\nimport { Formity } from '@formity/react';\n\nimport { NoSsr } from '../../misc/no-ssr/NoSsr';\nimport type { StepperProps } from '../../navigations/stepper/Stepper';\nimport { PendingErrorsProvider } from './PendingErrorsContext';\nimport type { SchemaProps } from './parser/Schema';\nimport { Schemas } from './parser/Schemas';\nimport { storage } from './parser/utils/use-local-storage';\n\nexport type MultiFormStepProps = {\n name: string;\n rules: SchemaProps['rules'];\n label?: string;\n description?: string;\n children: SchemaProps['form'];\n};\n\nexport const MultiFormStep = (_props: MultiFormStepProps) => null;\nMultiFormStep.displayName = 'MultiForm.Step';\n\nexport type MultiFormProps = {\n name: string;\n children: ReactNode;\n Success: ComponentType<{ values: Partial<unknown> }>;\n Loading: ComponentType;\n classNames?: { root?: string; multiForm?: string };\n stepperProps?: Omit<StepperProps, 'children' | 'active'>;\n};\n\nconst MultiFormBase = ({\n name,\n children,\n Success,\n Loading,\n classNames,\n stepperProps,\n}: MultiFormProps) => {\n const [submitted, setSubmitted] = useState(false);\n const [fields, setFields] = useState({});\n\n const onChange = useCallback(\n (values: Partial<unknown>) => {\n setFields({ ...fields, ...values });\n },\n [fields],\n );\n\n const onSubmit = useCallback(() => {\n setSubmitted(true);\n }, []);\n\n if (submitted) {\n storage.set(name, {});\n return <Success values={fields} />;\n }\n\n const schema: SchemaProps[] = Children.toArray(children)\n .filter(isValidElement)\n .map((element) => {\n if (element.type !== MultiFormStep) {\n throw new Error('MultiForm children must be MultiForm.Step elements');\n }\n const props = element.props as MultiFormStepProps;\n return {\n name: props.name,\n rules: props.rules,\n label: props.label,\n description: props.description,\n form: props.children,\n };\n });\n\n const schemaObj = new Schemas(\n name,\n schema,\n storage.get(name, {}),\n classNames,\n stepperProps,\n );\n\n const fieldToStepMap = schemaObj.getFieldToStepMapping();\n\n return (\n <NoSsr fallback={<Loading />}>\n <PendingErrorsProvider fieldToStepMap={fieldToStepMap}>\n <Formity\n schema={schemaObj.toRender()}\n params={{ fields, onChange, onSubmit }}\n initialState={schemaObj.currentState()}\n onReturn={onSubmit}\n />\n </PendingErrorsProvider>\n </NoSsr>\n );\n};\n\nexport const MultiForm = Object.assign(MultiFormBase, { Step: MultiFormStep });\n"],"mappings":"0YA0BA,MAAa,EAAiB,GAA+B,KAC7D,EAAc,YAAc,iBA8E5B,MAAa,EAAY,OAAO,QAnET,CACrB,OACA,WACA,UACA,UACA,aACA,kBACoB,CACpB,GAAM,CAAC,EAAW,GAAgB,EAAS,GAAM,CAC3C,CAAC,EAAQ,GAAa,EAAS,EAAE,CAAC,CAElC,EAAW,EACd,GAA6B,CAC5B,EAAU,CAAE,GAAG,EAAQ,GAAG,EAAQ,CAAC,EAErC,CAAC,EAAO,CACT,CAEK,EAAW,MAAkB,CACjC,EAAa,GAAK,EACjB,EAAE,CAAC,CAEN,GAAI,EAEF,OADA,EAAQ,IAAI,EAAM,EAAE,CAAC,CACd,EAAC,EAAD,CAAS,OAAQ,EAAU,CAAA,CAmBpC,IAAM,EAAY,IAAI,EACpB,EAjB4B,EAAS,QAAQ,EAAS,CACrD,OAAO,EAAe,CACtB,IAAK,GAAY,CAChB,GAAI,EAAQ,OAAS,EACnB,MAAU,MAAM,qDAAqD,CAEvE,IAAM,EAAQ,EAAQ,MACtB,MAAO,CACL,KAAM,EAAM,KACZ,MAAO,EAAM,MACb,MAAO,EAAM,MACb,YAAa,EAAM,YACnB,KAAM,EAAM,SACb,EACD,CAKF,EAAQ,IAAI,EAAM,EAAE,CAAC,CACrB,EACA,EACD,CAEK,EAAiB,EAAU,uBAAuB,CAExD,OACE,EAAC,EAAD,CAAO,SAAU,EAAC,EAAD,EAAW,CAAA,UAC1B,EAAC,EAAD,CAAuC,0BACrC,EAAC,EAAD,CACE,OAAQ,EAAU,UAAU,CAC5B,OAAQ,CAAE,SAAQ,WAAU,WAAU,CACtC,aAAc,EAAU,cAAc,CACtC,SAAU,EACV,CAAA,CACoB,CAAA,CAClB,CAAA,EAI0C,CAAE,KAAM,EAAe,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
2
|
+
import * as react from "react";
|
|
3
|
+
import { ReactNode } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/forms/multi-step/PendingErrorsContext.d.ts
|
|
6
|
+
type FieldErrors = Record<string, string | string[]>;
|
|
7
|
+
type PendingErrorsContextValue = {
|
|
8
|
+
routeServerErrors: (issues: FieldErrors, goTo?: (step: number) => void) => number | null;
|
|
9
|
+
consumeErrorsForStep: (step: number) => FieldErrors;
|
|
10
|
+
version: number;
|
|
11
|
+
};
|
|
12
|
+
declare const PendingErrorsContext: react.Context<PendingErrorsContextValue | null>;
|
|
13
|
+
declare const usePendingErrors: () => PendingErrorsContextValue | null;
|
|
14
|
+
type PendingErrorsProviderProps = {
|
|
15
|
+
fieldToStepMap: Record<string, number>;
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
};
|
|
18
|
+
declare const PendingErrorsProvider: ({
|
|
19
|
+
fieldToStepMap,
|
|
20
|
+
children
|
|
21
|
+
}: PendingErrorsProviderProps) => react_jsx_runtime0.JSX.Element;
|
|
22
|
+
//#endregion
|
|
23
|
+
export { PendingErrorsContext, PendingErrorsProvider, usePendingErrors };
|
|
24
|
+
//# sourceMappingURL=PendingErrorsContext.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingErrorsContext.d.mts","names":[],"sources":["../../../../src/components/forms/multi-step/PendingErrorsContext.tsx"],"mappings":";;;;;KAWK,WAAA,GAAc,MAAA;AAAA,KAEd,yBAAA;EACH,iBAAA,GACE,MAAA,EAAQ,WAAA,EACR,IAAA,IAAQ,IAAA;EAEV,oBAAA,GAAuB,IAAA,aAAiB,WAAA;EACxC,OAAA;AAAA;AAAA,cAGW,oBAAA,EAAoB,KAAA,CAAA,OAAA,CAAA,yBAAA;AAAA,cAGpB,gBAAA,QAAuB,yBAAA;AAAA,KAG/B,0BAAA;EACH,cAAA,EAAgB,MAAA;EAChB,QAAA,EAAU,SAAA;AAAA;AAAA,cAGC,qBAAA;EAAyB,cAAA;EAAA;AAAA,GAGnC,0BAAA,KAA0B,kBAAA,CAAA,GAAA,CAAA,OAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{jsx as e}from"react/jsx-runtime";import{createContext as t,useCallback as n,useContext as r,useRef as i,useState as a}from"react";const o=t(null),s=()=>r(o),c=({fieldToStepMap:t,children:r})=>{let s=i({}),c=i(t);c.current=t;let[l,u]=a(0),d=n((e,t)=>{s.current={...e},u(e=>e+1);let n=c.current,r=new Set;for(let t of Object.keys(e)){let e=n[t];e!=null&&r.add(e)}if(r.size===0)return null;let i=Math.min(...r);return t?.(i),i},[]),f=n(e=>{let t=c.current,n={},r={};for(let[i,a]of Object.entries(s.current))t[i]===e?n[i]=a:r[i]=a;return s.current=r,n},[]);return e(o.Provider,{value:{routeServerErrors:d,consumeErrorsForStep:f,version:l},children:r})};export{o as PendingErrorsContext,c as PendingErrorsProvider,s as usePendingErrors};
|
|
2
|
+
//# sourceMappingURL=PendingErrorsContext.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PendingErrorsContext.mjs","names":[],"sources":["../../../../src/components/forms/multi-step/PendingErrorsContext.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useRef,\n useState,\n} from 'react';\n\ntype FieldErrors = Record<string, string | string[]>;\n\ntype PendingErrorsContextValue = {\n routeServerErrors: (\n issues: FieldErrors,\n goTo?: (step: number) => void,\n ) => number | null;\n consumeErrorsForStep: (step: number) => FieldErrors;\n version: number;\n};\n\nexport const PendingErrorsContext =\n createContext<PendingErrorsContextValue | null>(null);\n\nexport const usePendingErrors = (): PendingErrorsContextValue | null =>\n useContext(PendingErrorsContext);\n\ntype PendingErrorsProviderProps = {\n fieldToStepMap: Record<string, number>;\n children: ReactNode;\n};\n\nexport const PendingErrorsProvider = ({\n fieldToStepMap,\n children,\n}: PendingErrorsProviderProps) => {\n const errorsRef = useRef<FieldErrors>({});\n const mapRef = useRef(fieldToStepMap);\n mapRef.current = fieldToStepMap;\n const [version, setVersion] = useState(0);\n\n const routeServerErrors = useCallback(\n (issues: FieldErrors, goTo?: (step: number) => void): number | null => {\n errorsRef.current = { ...issues };\n setVersion((v) => v + 1);\n\n const map = mapRef.current;\n const stepsWithErrors = new Set<number>();\n for (const field of Object.keys(issues)) {\n const step = map[field];\n if (step != null) stepsWithErrors.add(step);\n }\n\n if (stepsWithErrors.size === 0) return null;\n\n const firstStep = Math.min(...stepsWithErrors);\n goTo?.(firstStep);\n return firstStep;\n },\n [],\n );\n\n const consumeErrorsForStep = useCallback((step: number): FieldErrors => {\n const map = mapRef.current;\n const result: FieldErrors = {};\n const remaining: FieldErrors = {};\n\n for (const [field, message] of Object.entries(errorsRef.current)) {\n if (map[field] === step) {\n result[field] = message;\n } else {\n remaining[field] = message;\n }\n }\n\n errorsRef.current = remaining;\n return result;\n }, []);\n\n return (\n <PendingErrorsContext.Provider\n value={{ routeServerErrors, consumeErrorsForStep, version }}\n >\n {children}\n </PendingErrorsContext.Provider>\n );\n};\n"],"mappings":"sJAsBA,MAAa,EACX,EAAgD,KAAK,CAE1C,MACX,EAAW,EAAqB,CAOrB,GAAyB,CACpC,iBACA,cACgC,CAChC,IAAM,EAAY,EAAoB,EAAE,CAAC,CACnC,EAAS,EAAO,EAAe,CACrC,EAAO,QAAU,EACjB,GAAM,CAAC,EAAS,GAAc,EAAS,EAAE,CAEnC,EAAoB,GACvB,EAAqB,IAAiD,CACrE,EAAU,QAAU,CAAE,GAAG,EAAQ,CACjC,EAAY,GAAM,EAAI,EAAE,CAExB,IAAM,EAAM,EAAO,QACb,EAAkB,IAAI,IAC5B,IAAK,IAAM,KAAS,OAAO,KAAK,EAAO,CAAE,CACvC,IAAM,EAAO,EAAI,GACb,GAAQ,MAAM,EAAgB,IAAI,EAAK,CAG7C,GAAI,EAAgB,OAAS,EAAG,OAAO,KAEvC,IAAM,EAAY,KAAK,IAAI,GAAG,EAAgB,CAE9C,OADA,IAAO,EAAU,CACV,GAET,EAAE,CACH,CAEK,EAAuB,EAAa,GAA8B,CACtE,IAAM,EAAM,EAAO,QACb,EAAsB,EAAE,CACxB,EAAyB,EAAE,CAEjC,IAAK,GAAM,CAAC,EAAO,KAAY,OAAO,QAAQ,EAAU,QAAQ,CAC1D,EAAI,KAAW,EACjB,EAAO,GAAS,EAEhB,EAAU,GAAS,EAKvB,MADA,GAAU,QAAU,EACb,GACN,EAAE,CAAC,CAEN,OACE,EAAC,EAAqB,SAAtB,CACE,MAAO,CAAE,oBAAmB,uBAAsB,UAAS,CAE1D,WAC6B,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{MultiFormContext as e}from"./MultiFormContext.mjs";import{Stepper as t}from"../../navigations/stepper/Stepper.mjs";import{cx as n}from"@mage-ui/styled-system/css";import{multiForm as r,multiFormRoot as i}from"@mage-ui/styled-system/recipes";import{jsx as a,jsxs as o}from"react/jsx-runtime";import{useMemo as s}from"react";const c=({values:c,rules:l,step:u,steps:d,onBack:f,onNext:p,getState:m,setState:h,onWatch:g,goTo:_,onEnter:v,classNames:y,stepperProps:b,Component:x,...S})=>{let C=s(()=>({onNext:p,onBack:f,getState:m,setState:h,onWatch:g,onEnter:v,goTo:_,step:u}),[p,f,m,h,g,v,_,u]);return v(),a(e.Provider,{value:C,children:o(`div`,{className:n(y?.multiForm??r(),y?.root??i()),children:[a(t,{allowNextStepsSelect:!1,...b,onStepClick:b?.onStepClick??(e=>_(e+1)),active:u.current-1,children:d.map(e=>a(t.Step,{label:e.label,description:e.description},e.label))}),a(x,{defaultValues:c,rules:l,...C,...S})]})})};export{c as Step};
|
|
2
2
|
//# sourceMappingURL=Step.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Result as e}from"./Result.mjs";import{Schema as t}from"./Schema.mjs";import{z as n}from"zod";function r(e){if(e instanceof n.ZodObject)return e.shape;if(e instanceof n.ZodPipe)return r(e.in);let t=e.unwrap;return typeof t==`function`?r(t.call(e)):{}}var i=class i{schemas;states;constructor(e,t,n,r,a){i.validateSchema(t),this.states=i.getState(t,n);let o=t.map(e=>({label:e.label??e.name,description:e.description}));this.schemas=i.createSchemas(e,t,this.states,o,r,a)}static validateSchema(e){if(e.length===0)throw Error(`Schema must have at least one step`)}static getState(e,t){let n=[];if(Object.keys(t).length===0){let t=0;for(let r of e)n.push({state:{points:Array.from({length:++t},(e,t)=>({path:[{type:`list`,slot:t}],values:{}})),inputs:{type:`list`,list:[]}},check:r.rules});return{step:1,states:n}}return t}static createSchemas(e,n,r,a,o,s){let c,l=n.reduce((i,l,u)=>l.name===`summary`?(c=l,i):(i.push(new t(e,l,{current:u+1,total:n.length},r,a,o,s)),i),[]);return c!==void 0&&l.push(i.getSummary(e,l,c.form,{current:n.length,total:n.length},r,a,o,s)),l}static getSummary(e,i,a,o,s,c,l,u){return new t(e,{name:`summary`,rules:i.reduce((e,t)=>{let i=r(t.getRules());return n.object({...e.shape,...i})},n.object({})),form:a},o,s,c,l,u)}currentState(){return this.states.states[this.states.step-1].state}toRender(){let t=this.schemas.flatMap(e=>e.toRender());return t.push(new e().toRender()),t}};export{i as Schemas};
|
|
1
|
+
import{Result as e}from"./Result.mjs";import{Schema as t}from"./Schema.mjs";import{z as n}from"zod";function r(e){if(e instanceof n.ZodObject)return e.shape;if(e instanceof n.ZodPipe)return r(e.in);let t=e.unwrap;return typeof t==`function`?r(t.call(e)):{}}var i=class i{schemas;states;fieldToStepMap;constructor(e,t,n,r,a){i.validateSchema(t),this.fieldToStepMap=i.buildFieldToStepMapping(t),this.states=i.getState(t,n);let o=t.map(e=>({label:e.label??e.name,description:e.description}));this.schemas=i.createSchemas(e,t,this.states,o,r,a)}static validateSchema(e){if(e.length===0)throw Error(`Schema must have at least one step`)}static getState(e,t){let n=[];if(Object.keys(t).length===0){let t=0;for(let r of e)n.push({state:{points:Array.from({length:++t},(e,t)=>({path:[{type:`list`,slot:t}],values:{}})),inputs:{type:`list`,list:[]}},check:r.rules});return{step:1,states:n}}return t}static createSchemas(e,n,r,a,o,s){let c,l=n.reduce((i,l,u)=>l.name===`summary`?(c=l,i):(i.push(new t(e,l,{current:u+1,total:n.length},r,a,o,s)),i),[]);return c!==void 0&&l.push(i.getSummary(e,l,c.form,{current:n.length,total:n.length},r,a,o,s)),l}static getSummary(e,i,a,o,s,c,l,u){return new t(e,{name:`summary`,rules:i.reduce((e,t)=>{let i=r(t.getRules());return n.object({...e.shape,...i})},n.object({})),form:a},o,s,c,l,u)}static buildFieldToStepMapping(e){let t={};return e.forEach((e,n)=>{if(e.name===`summary`)return;let i=r(e.rules);for(let e of Object.keys(i))e in t||(t[e]=n+1)}),t}getFieldToStepMapping(){return this.fieldToStepMap}currentState(){return this.states.states[this.states.step-1].state}toRender(){let t=this.schemas.flatMap(e=>e.toRender());return t.push(new e().toRender()),t}};export{i as Schemas};
|
|
2
2
|
//# sourceMappingURL=Schemas.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Schemas.mjs","names":[],"sources":["../../../../../src/components/forms/multi-step/parser/Schemas.ts"],"sourcesContent":["import type { ComponentType } from 'react';\nimport { z } from 'zod';\n\nimport type { Schema as FormitySchema, Values } from '@formity/react';\n\nimport type { Props as StepProps } from '../Step';\nimport type { States, StatesProps } from './Form';\nimport { Result } from './Result';\nimport { type MultiStepFormProps, Schema, type SchemaProps } from './Schema';\n\ntype ZodSchema = z.ZodType;\n\nfunction getSchemaShape(schema: ZodSchema): Record<string, z.ZodTypeAny> {\n if (schema instanceof z.ZodObject) {\n return schema.shape;\n }\n if (schema instanceof z.ZodPipe) {\n return getSchemaShape(schema.in as ZodSchema);\n }\n const unwrap = (schema as { unwrap?: () => ZodSchema }).unwrap;\n if (typeof unwrap === 'function') {\n return getSchemaShape(unwrap.call(schema));\n }\n return {};\n}\n\nexport class Schemas {\n private schemas: Schema[];\n private states: States;\n\n constructor(\n name: string,\n schemas: SchemaProps[],\n initialState: States,\n classNames?: StepProps['classNames'],\n stepperProps?: StepProps['stepperProps'],\n ) {\n Schemas.validateSchema(schemas);\n this.states = Schemas.getState(schemas, initialState);\n const steps = schemas.map((schema) => ({\n label: schema.label ?? schema.name,\n description: schema.description,\n }));\n this.schemas = Schemas.createSchemas(\n name,\n schemas,\n this.states,\n steps,\n classNames,\n stepperProps,\n );\n }\n\n private static validateSchema(schemas: SchemaProps[]): void {\n if (schemas.length === 0) {\n throw new Error('Schema must have at least one step');\n }\n }\n\n private static getState(\n schemas: SchemaProps[],\n initialState: States,\n ): States {\n const arrStates: StatesProps[] = [];\n if (Object.keys(initialState).length === 0) {\n let i = 0;\n for (const schema of schemas) {\n arrStates.push({\n state: {\n points: Array.from({ length: ++i }, (_, index) => ({\n path: [{ type: 'list', slot: index }],\n values: {},\n })),\n inputs: { type: 'list', list: [] },\n },\n check: schema.rules,\n });\n }\n return {\n step: 1,\n states: arrStates,\n };\n }\n return initialState;\n }\n\n private static createSchemas(\n name: string,\n schemas: SchemaProps[],\n states: States,\n steps: { label: string; description?: string }[],\n classNames?: StepProps['classNames'],\n stepperProps?: StepProps['stepperProps'],\n ): Schema[] {\n let summary: SchemaProps | undefined;\n const formitySchemas = schemas.reduce<Schema[]>((acc, schema, index) => {\n if (schema.name === 'summary') {\n summary = schema;\n return acc;\n }\n acc.push(\n new Schema(\n name,\n schema,\n { current: index + 1, total: schemas.length },\n states,\n steps,\n classNames,\n stepperProps,\n ),\n );\n return acc;\n }, []);\n if (summary !== undefined) {\n formitySchemas.push(\n Schemas.getSummary(\n name,\n formitySchemas,\n summary.form,\n {\n current: schemas.length,\n total: schemas.length,\n },\n states,\n steps,\n classNames,\n stepperProps,\n ),\n );\n }\n\n return formitySchemas;\n }\n\n private static getSummary(\n name: string,\n schemas: Schema[],\n form: ComponentType<MultiStepFormProps>,\n step: { current: number; total: number },\n states: States,\n steps: { label: string; description?: string }[],\n classNames?: StepProps['classNames'],\n stepperProps?: StepProps['stepperProps'],\n ): Schema {\n const rules = schemas.reduce(\n (acc: z.ZodObject<{ [key: string]: z.ZodTypeAny }>, schema: Schema) => {\n const schemaShape = getSchemaShape(schema.getRules());\n return z.object({\n ...acc.shape,\n ...schemaShape,\n });\n },\n z.object({}),\n );\n\n return new Schema(\n name,\n {\n name: 'summary',\n rules,\n form,\n },\n step,\n states,\n steps,\n classNames,\n stepperProps,\n );\n }\n\n currentState() {\n const state = this.states.states[this.states.step - 1].state;\n return state;\n }\n\n toRender() {\n const render: object[] = this.schemas.flatMap((schema) => {\n return schema.toRender();\n });\n render.push(new Result().toRender());\n return render as FormitySchema<\n Values,\n Record<string, unknown>,\n Record<string, unknown>\n >;\n }\n}\n"],"mappings":"oGAYA,SAAS,EAAe,EAAiD,CACvE,GAAI,aAAkB,EAAE,UACtB,OAAO,EAAO,MAEhB,GAAI,aAAkB,EAAE,QACtB,OAAO,EAAe,EAAO,GAAgB,CAE/C,IAAM,EAAU,EAAwC,OAIxD,OAHI,OAAO,GAAW,WACb,EAAe,EAAO,KAAK,EAAO,CAAC,CAErC,EAAE,CAGX,IAAa,EAAb,MAAa,CAAQ,CACnB,QACA,
|
|
1
|
+
{"version":3,"file":"Schemas.mjs","names":[],"sources":["../../../../../src/components/forms/multi-step/parser/Schemas.ts"],"sourcesContent":["import type { ComponentType } from 'react';\nimport { z } from 'zod';\n\nimport type { Schema as FormitySchema, Values } from '@formity/react';\n\nimport type { Props as StepProps } from '../Step';\nimport type { States, StatesProps } from './Form';\nimport { Result } from './Result';\nimport { type MultiStepFormProps, Schema, type SchemaProps } from './Schema';\n\ntype ZodSchema = z.ZodType;\n\nfunction getSchemaShape(schema: ZodSchema): Record<string, z.ZodTypeAny> {\n if (schema instanceof z.ZodObject) {\n return schema.shape;\n }\n if (schema instanceof z.ZodPipe) {\n return getSchemaShape(schema.in as ZodSchema);\n }\n const unwrap = (schema as { unwrap?: () => ZodSchema }).unwrap;\n if (typeof unwrap === 'function') {\n return getSchemaShape(unwrap.call(schema));\n }\n return {};\n}\n\nexport class Schemas {\n private schemas: Schema[];\n private states: States;\n private fieldToStepMap: Record<string, number>;\n\n constructor(\n name: string,\n schemas: SchemaProps[],\n initialState: States,\n classNames?: StepProps['classNames'],\n stepperProps?: StepProps['stepperProps'],\n ) {\n Schemas.validateSchema(schemas);\n this.fieldToStepMap = Schemas.buildFieldToStepMapping(schemas);\n this.states = Schemas.getState(schemas, initialState);\n const steps = schemas.map((schema) => ({\n label: schema.label ?? schema.name,\n description: schema.description,\n }));\n this.schemas = Schemas.createSchemas(\n name,\n schemas,\n this.states,\n steps,\n classNames,\n stepperProps,\n );\n }\n\n private static validateSchema(schemas: SchemaProps[]): void {\n if (schemas.length === 0) {\n throw new Error('Schema must have at least one step');\n }\n }\n\n private static getState(\n schemas: SchemaProps[],\n initialState: States,\n ): States {\n const arrStates: StatesProps[] = [];\n if (Object.keys(initialState).length === 0) {\n let i = 0;\n for (const schema of schemas) {\n arrStates.push({\n state: {\n points: Array.from({ length: ++i }, (_, index) => ({\n path: [{ type: 'list', slot: index }],\n values: {},\n })),\n inputs: { type: 'list', list: [] },\n },\n check: schema.rules,\n });\n }\n return {\n step: 1,\n states: arrStates,\n };\n }\n return initialState;\n }\n\n private static createSchemas(\n name: string,\n schemas: SchemaProps[],\n states: States,\n steps: { label: string; description?: string }[],\n classNames?: StepProps['classNames'],\n stepperProps?: StepProps['stepperProps'],\n ): Schema[] {\n let summary: SchemaProps | undefined;\n const formitySchemas = schemas.reduce<Schema[]>((acc, schema, index) => {\n if (schema.name === 'summary') {\n summary = schema;\n return acc;\n }\n acc.push(\n new Schema(\n name,\n schema,\n { current: index + 1, total: schemas.length },\n states,\n steps,\n classNames,\n stepperProps,\n ),\n );\n return acc;\n }, []);\n if (summary !== undefined) {\n formitySchemas.push(\n Schemas.getSummary(\n name,\n formitySchemas,\n summary.form,\n {\n current: schemas.length,\n total: schemas.length,\n },\n states,\n steps,\n classNames,\n stepperProps,\n ),\n );\n }\n\n return formitySchemas;\n }\n\n private static getSummary(\n name: string,\n schemas: Schema[],\n form: ComponentType<MultiStepFormProps>,\n step: { current: number; total: number },\n states: States,\n steps: { label: string; description?: string }[],\n classNames?: StepProps['classNames'],\n stepperProps?: StepProps['stepperProps'],\n ): Schema {\n const rules = schemas.reduce(\n (acc: z.ZodObject<{ [key: string]: z.ZodTypeAny }>, schema: Schema) => {\n const schemaShape = getSchemaShape(schema.getRules());\n return z.object({\n ...acc.shape,\n ...schemaShape,\n });\n },\n z.object({}),\n );\n\n return new Schema(\n name,\n {\n name: 'summary',\n rules,\n form,\n },\n step,\n states,\n steps,\n classNames,\n stepperProps,\n );\n }\n\n private static buildFieldToStepMapping(\n schemas: SchemaProps[],\n ): Record<string, number> {\n const mapping: Record<string, number> = {};\n schemas.forEach((schema, index) => {\n if (schema.name === 'summary') return;\n const shape = getSchemaShape(schema.rules);\n for (const key of Object.keys(shape)) {\n if (!(key in mapping)) mapping[key] = index + 1;\n }\n });\n return mapping;\n }\n\n getFieldToStepMapping(): Record<string, number> {\n return this.fieldToStepMap;\n }\n\n currentState() {\n const state = this.states.states[this.states.step - 1].state;\n return state;\n }\n\n toRender() {\n const render: object[] = this.schemas.flatMap((schema) => {\n return schema.toRender();\n });\n render.push(new Result().toRender());\n return render as FormitySchema<\n Values,\n Record<string, unknown>,\n Record<string, unknown>\n >;\n }\n}\n"],"mappings":"oGAYA,SAAS,EAAe,EAAiD,CACvE,GAAI,aAAkB,EAAE,UACtB,OAAO,EAAO,MAEhB,GAAI,aAAkB,EAAE,QACtB,OAAO,EAAe,EAAO,GAAgB,CAE/C,IAAM,EAAU,EAAwC,OAIxD,OAHI,OAAO,GAAW,WACb,EAAe,EAAO,KAAK,EAAO,CAAC,CAErC,EAAE,CAGX,IAAa,EAAb,MAAa,CAAQ,CACnB,QACA,OACA,eAEA,YACE,EACA,EACA,EACA,EACA,EACA,CACA,EAAQ,eAAe,EAAQ,CAC/B,KAAK,eAAiB,EAAQ,wBAAwB,EAAQ,CAC9D,KAAK,OAAS,EAAQ,SAAS,EAAS,EAAa,CACrD,IAAM,EAAQ,EAAQ,IAAK,IAAY,CACrC,MAAO,EAAO,OAAS,EAAO,KAC9B,YAAa,EAAO,YACrB,EAAE,CACH,KAAK,QAAU,EAAQ,cACrB,EACA,EACA,KAAK,OACL,EACA,EACA,EACD,CAGH,OAAe,eAAe,EAA8B,CAC1D,GAAI,EAAQ,SAAW,EACrB,MAAU,MAAM,qCAAqC,CAIzD,OAAe,SACb,EACA,EACQ,CACR,IAAM,EAA2B,EAAE,CACnC,GAAI,OAAO,KAAK,EAAa,CAAC,SAAW,EAAG,CAC1C,IAAI,EAAI,EACR,IAAK,IAAM,KAAU,EACnB,EAAU,KAAK,CACb,MAAO,CACL,OAAQ,MAAM,KAAK,CAAE,OAAQ,EAAE,EAAG,EAAG,EAAG,KAAW,CACjD,KAAM,CAAC,CAAE,KAAM,OAAQ,KAAM,EAAO,CAAC,CACrC,OAAQ,EAAE,CACX,EAAE,CACH,OAAQ,CAAE,KAAM,OAAQ,KAAM,EAAE,CAAE,CACnC,CACD,MAAO,EAAO,MACf,CAAC,CAEJ,MAAO,CACL,KAAM,EACN,OAAQ,EACT,CAEH,OAAO,EAGT,OAAe,cACb,EACA,EACA,EACA,EACA,EACA,EACU,CACV,IAAI,EACE,EAAiB,EAAQ,QAAkB,EAAK,EAAQ,IACxD,EAAO,OAAS,WAClB,EAAU,EACH,IAET,EAAI,KACF,IAAI,EACF,EACA,EACA,CAAE,QAAS,EAAQ,EAAG,MAAO,EAAQ,OAAQ,CAC7C,EACA,EACA,EACA,EACD,CACF,CACM,GACN,EAAE,CAAC,CAmBN,OAlBI,IAAY,IAAA,IACd,EAAe,KACb,EAAQ,WACN,EACA,EACA,EAAQ,KACR,CACE,QAAS,EAAQ,OACjB,MAAO,EAAQ,OAChB,CACD,EACA,EACA,EACA,EACD,CACF,CAGI,EAGT,OAAe,WACb,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACQ,CAYR,OAAO,IAAI,EACT,EACA,CACE,KAAM,UACN,MAfU,EAAQ,QACnB,EAAmD,IAAmB,CACrE,IAAM,EAAc,EAAe,EAAO,UAAU,CAAC,CACrD,OAAO,EAAE,OAAO,CACd,GAAG,EAAI,MACP,GAAG,EACJ,CAAC,EAEJ,EAAE,OAAO,EAAE,CAAC,CACb,CAOG,OACD,CACD,EACA,EACA,EACA,EACA,EACD,CAGH,OAAe,wBACb,EACwB,CACxB,IAAM,EAAkC,EAAE,CAQ1C,OAPA,EAAQ,SAAS,EAAQ,IAAU,CACjC,GAAI,EAAO,OAAS,UAAW,OAC/B,IAAM,EAAQ,EAAe,EAAO,MAAM,CAC1C,IAAK,IAAM,KAAO,OAAO,KAAK,EAAM,CAC5B,KAAO,IAAU,EAAQ,GAAO,EAAQ,IAEhD,CACK,EAGT,uBAAgD,CAC9C,OAAO,KAAK,eAGd,cAAe,CAEb,OADc,KAAK,OAAO,OAAO,KAAK,OAAO,KAAO,GAAG,MAIzD,UAAW,CACT,IAAM,EAAmB,KAAK,QAAQ,QAAS,GACtC,EAAO,UAAU,CACxB,CAEF,OADA,EAAO,KAAK,IAAI,GAAQ,CAAC,UAAU,CAAC,CAC7B"}
|
|
@@ -90,6 +90,7 @@ import { Stepper, StepperClassNames, StepperProps, StepperStepProps } from "./na
|
|
|
90
90
|
import { MultiStepFormProps, RequestResponse, Schema, SchemaProps } from "./forms/multi-step/parser/Schema.mjs";
|
|
91
91
|
import { MultiForm, MultiFormProps, MultiFormStep, MultiFormStepProps } from "./forms/multi-step/MultiForm.mjs";
|
|
92
92
|
import { MultiFormContext, MultiFormContextValue, useMultiFormContext } from "./forms/multi-step/MultiFormContext.mjs";
|
|
93
|
+
import { PendingErrorsContext, PendingErrorsProvider, usePendingErrors } from "./forms/multi-step/PendingErrorsContext.mjs";
|
|
93
94
|
import { PASSWORD_RULES } from "./forms/rules/password-rules.mjs";
|
|
94
95
|
import { z } from "./forms/rules/zod.mjs";
|
|
95
96
|
import { Card, CardBase, CardBody, CardClassNames, CardFooter, CardHeader, CardProps, CardRoot } from "./layouts/card/Card.mjs";
|
package/dist/index.d.mts
CHANGED
|
@@ -90,6 +90,7 @@ import { Stepper, StepperClassNames, StepperProps, StepperStepProps } from "./co
|
|
|
90
90
|
import { MultiStepFormProps, RequestResponse, Schema, SchemaProps } from "./components/forms/multi-step/parser/Schema.mjs";
|
|
91
91
|
import { MultiForm, MultiFormProps, MultiFormStep, MultiFormStepProps } from "./components/forms/multi-step/MultiForm.mjs";
|
|
92
92
|
import { MultiFormContext, MultiFormContextValue, useMultiFormContext } from "./components/forms/multi-step/MultiFormContext.mjs";
|
|
93
|
+
import { PendingErrorsContext, PendingErrorsProvider, usePendingErrors } from "./components/forms/multi-step/PendingErrorsContext.mjs";
|
|
93
94
|
import { PASSWORD_RULES } from "./components/forms/rules/password-rules.mjs";
|
|
94
95
|
import { z } from "./components/forms/rules/zod.mjs";
|
|
95
96
|
import { Card, CardBase, CardBody, CardClassNames, CardFooter, CardHeader, CardProps, CardRoot } from "./components/layouts/card/Card.mjs";
|
|
@@ -107,4 +108,4 @@ import { Modals } from "./components/overlays/modal/index.mjs";
|
|
|
107
108
|
import { Toast, ToastIntent, ToastOptions, ToastProviderProps } from "./components/overlays/toast/Toast.mjs";
|
|
108
109
|
import { Tooltip, TooltipProps } from "./components/overlays/tooltip/Tooltip.mjs";
|
|
109
110
|
import { MageUiProvider, MageUiProviderProps } from "./providers/MageUiProvider.mjs";
|
|
110
|
-
export { Autocomplete, AutocompleteProps, Avatar, AvatarDropzone, AvatarDropzoneProps, AvatarDropzoneS3, AvatarDropzoneS3Props, 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, CheckboxTree, CheckboxTreeItem, CheckboxTreeProps, 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, DatePickerClassNames, DatePickerDate, DatePickerProps, DatePickerValue, DateTimePicker, DateTimePickerClassNames, DateTimePickerDate, DateTimePickerProps, DateTimePickerValue, DescriptionList, DescriptionListClassNames, DescriptionListItemProps, DescriptionListProps, Details, DetailsProps, DocumentItem, DocumentItemProps, Dropzone, DropzoneProps, DropzoneS3, DropzoneS3Props, DropzoneS3Texts, ExpandedState, Fieldset, FieldsetProps, FileData, FileIcon, FileIconProps, FileInput, FileInputMultiple, FileInputMultipleHandle, FileInputMultipleProps, FileInputMultipleS3, FileInputMultipleS3Handle, FileInputMultipleS3Props, FileInputProps, FileInputS3, FileInputS3Handle, FileInputS3Props, FileMetadata, FluidGrid, FluidGridProps, Form, FormDropzoneS3Props, FormProps, FormS3Context, FormS3ContextValue, 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, MultiForm, MultiFormContext, MultiFormContextValue, MultiFormProps, MultiFormStep, MultiFormStepProps, MultiStepFormProps, NavigationMenu, NavigationMenuProps, NoSsr, NotificationBanner, NotificationBannerIntent, NotificationBannerProps, OrderedList, OrderedListClassNames, OrderedListItemProps, OrderedListProps, PASSWORD_RULES, Pagination, PaginationClassNames, PaginationRootProps, PaginationState, PasswordInput, PasswordInputProps, PasswordRule, PasswordRuleDefinition, PasswordSegment, PasswordStrengthInput, PasswordStrengthInputProps, Progress, ProgressClassNames, ProgressProps, Radio, RadioProps, RemovableItem, RemovableItemProps, RequestResponse, ResourceItem, ResourceItemProps, RowSelectionState, S3FileMeta, S3InitBody, S3InitResponse, S3UploadCallback, Schema, SchemaProps, ScrollArea, ScrollAreaAutosize, ScrollAreaAutosizeProps, ScrollAreaClassNames, ScrollAreaProps, Select, SelectProps, Sidebar, SidebarClassNames, SidebarProps, SortingState, Stepper, StepperClassNames, StepperProps, StepperStepProps, 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, UploadTarget, UploadedFile, UploadedFileDetails, UploadedFileDetailsProps, UploadedFileProps, UploadedFiles, UploadedFilesClassNames, UploadedFilesItemClassNames, UploadedFilesItemProps, UploadedFilesProps, UploadedS3File, UploadingFiles, UploadingFilesClassNames, UploadingFilesItemClassNames, UploadingFilesItemErrorClassNames, UploadingFilesItemErrorProps, UploadingFilesItemProps, UploadingFilesProps, Virtual, VirtualItem, VirtualPadding, VirtualProps, VisuallyHidden, VisuallyHiddenProps, YearPicker, YearPickerClassNames, YearPickerDate, YearPickerProps, YearPickerValue, getFileExtension, useDataTableContext, useFormS3Context, useMultiFormContext, usePasswordRules, z };
|
|
111
|
+
export { Autocomplete, AutocompleteProps, Avatar, AvatarDropzone, AvatarDropzoneProps, AvatarDropzoneS3, AvatarDropzoneS3Props, 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, CheckboxTree, CheckboxTreeItem, CheckboxTreeProps, 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, DatePickerClassNames, DatePickerDate, DatePickerProps, DatePickerValue, DateTimePicker, DateTimePickerClassNames, DateTimePickerDate, DateTimePickerProps, DateTimePickerValue, DescriptionList, DescriptionListClassNames, DescriptionListItemProps, DescriptionListProps, Details, DetailsProps, DocumentItem, DocumentItemProps, Dropzone, DropzoneProps, DropzoneS3, DropzoneS3Props, DropzoneS3Texts, ExpandedState, Fieldset, FieldsetProps, FileData, FileIcon, FileIconProps, FileInput, FileInputMultiple, FileInputMultipleHandle, FileInputMultipleProps, FileInputMultipleS3, FileInputMultipleS3Handle, FileInputMultipleS3Props, FileInputProps, FileInputS3, FileInputS3Handle, FileInputS3Props, FileMetadata, FluidGrid, FluidGridProps, Form, FormDropzoneS3Props, FormProps, FormS3Context, FormS3ContextValue, 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, MultiForm, MultiFormContext, MultiFormContextValue, MultiFormProps, MultiFormStep, MultiFormStepProps, MultiStepFormProps, NavigationMenu, NavigationMenuProps, NoSsr, NotificationBanner, NotificationBannerIntent, NotificationBannerProps, OrderedList, OrderedListClassNames, OrderedListItemProps, OrderedListProps, PASSWORD_RULES, Pagination, PaginationClassNames, PaginationRootProps, PaginationState, PasswordInput, PasswordInputProps, PasswordRule, PasswordRuleDefinition, PasswordSegment, PasswordStrengthInput, PasswordStrengthInputProps, PendingErrorsContext, PendingErrorsProvider, Progress, ProgressClassNames, ProgressProps, Radio, RadioProps, RemovableItem, RemovableItemProps, RequestResponse, ResourceItem, ResourceItemProps, RowSelectionState, S3FileMeta, S3InitBody, S3InitResponse, S3UploadCallback, Schema, SchemaProps, ScrollArea, ScrollAreaAutosize, ScrollAreaAutosizeProps, ScrollAreaClassNames, ScrollAreaProps, Select, SelectProps, Sidebar, SidebarClassNames, SidebarProps, SortingState, Stepper, StepperClassNames, StepperProps, StepperStepProps, 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, UploadTarget, UploadedFile, UploadedFileDetails, UploadedFileDetailsProps, UploadedFileProps, UploadedFiles, UploadedFilesClassNames, UploadedFilesItemClassNames, UploadedFilesItemProps, UploadedFilesProps, UploadedS3File, UploadingFiles, UploadingFilesClassNames, UploadingFilesItemClassNames, UploadingFilesItemErrorClassNames, UploadingFilesItemErrorProps, UploadingFilesItemProps, UploadingFilesProps, Virtual, VirtualItem, VirtualPadding, VirtualProps, VisuallyHidden, VisuallyHiddenProps, YearPicker, YearPickerClassNames, YearPickerDate, YearPickerProps, YearPickerValue, getFileExtension, useDataTableContext, useFormS3Context, useMultiFormContext, usePasswordRules, usePendingErrors, 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{Avatar as i}from"./components/data-display/avatar/Avatar.mjs";import{Badge as a}from"./components/data-display/badge/Badge.mjs";import{Tooltip as o}from"./components/overlays/tooltip/Tooltip.mjs";import{Calendar as s}from"./components/data-display/calendar/Calendar.mjs";import{Virtual as c}from"./components/misc/virtual/Virtual.mjs";import{ScrollArea as l}from"./components/misc/scroll-area/ScrollArea.mjs";import{Table as u}from"./components/data-display/table/Table.mjs";import{IconRaw as d}from"./components/data-display/icons/icon-raw/IconRaw.mjs";import{Icon as f}from"./components/data-display/icons/icon/Icon.mjs";import{DEFAULT_DATA_TABLE_LABELS as p,DataTableContextProvider as m,useDataTableContext as h}from"./components/data-display/datatables/useDataTableContext.mjs";import{Checkbox as g}from"./components/controls/checkbox/Checkbox.mjs";import{DataTable as _}from"./components/data-display/datatables/DataTable.mjs";import{HorizontalDivider as v}from"./components/misc/horizontal-divider/HorizontalDivider.mjs";import{NoSsr as y}from"./components/misc/no-ssr/NoSsr.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{Details as j}from"./components/data-display/details/Details.mjs";import{FileIcon as M}from"./components/data-display/file-icon/FileIcon.mjs";import{ResourceItem as N}from"./components/data-display/resource-item/ResourceItem.mjs";import{DocumentItem as P}from"./components/data-display/document-item/DocumentItem.mjs";import{IconSvg as F}from"./components/data-display/icons/icon-svg/IconSvg.mjs";import{Indicator as I}from"./components/data-display/indicator/Indicator.mjs";import{LoaderDot as L}from"./components/data-display/loader-dot/LoaderDot.mjs";import{LoaderOval as R}from"./components/data-display/loader-oval/LoaderOval.mjs";import{LogoImage as z}from"./components/data-display/logos/logo-image/LogoImage.mjs";import{LogoSvg as B}from"./components/data-display/logos/logo-svg/LogoSvg.mjs";import{NotificationBanner as V}from"./components/data-display/notification-banner/NotificationBanner.mjs";import{OrderedList as H}from"./components/data-display/ordered-list/OrderedList.mjs";import{Progress as U}from"./components/data-display/progress/Progress.mjs";import{RemovableItem as W}from"./components/data-display/removable-item/RemovableItem.mjs";import{TagGroup as G}from"./components/data-display/tag-group/TagGroup.mjs";import{Tag as K}from"./components/data-display/tag/Tag.mjs";import{UploadedFile as q}from"./components/data-display/uploaded-file/UploadedFile.mjs";import{UploadedFileDetails as J}from"./components/data-display/uploaded-file/UploadedFileDetails.mjs";import{UploadedFiles as Y}from"./components/data-display/uploaded-files/UploadedFiles.mjs";import{UploadingFiles as X}from"./components/data-display/uploading-files/UploadingFiles.mjs";import{ButtonIcon as Z}from"./components/buttons/button-icon/ButtonIcon.mjs";import{ButtonIconVisual as Q}from"./components/buttons/button-icon-visual/ButtonIconVisual.mjs";import{ButtonVisual as $}from"./components/buttons/button-visual/ButtonVisual.mjs";import{Modal as ee}from"./components/overlays/modal/Modal.mjs";import{Modals as te}from"./components/overlays/modal/index.mjs";import{Toast as ne}from"./components/overlays/toast/Toast.mjs";import{AvatarUpload as re}from"./components/controls/avatar-upload/AvatarUpload.mjs";import{CheckboxTree as ie}from"./components/controls/checkbox-tree/CheckboxTree.mjs";import{DatePicker as ae}from"./components/controls/date-picker/DatePicker.mjs";import{YearPicker as oe}from"./components/controls/date-picker/YearPicker.mjs";import{DateTimePicker as se}from"./components/controls/date-time-picker/DateTimePicker.mjs";import{Autocomplete as ce}from"./components/controls/dropdown/autocomplete/Autocomplete.mjs";import{Combobox as le}from"./components/controls/dropdown/combobox/Combobox.mjs";import{AvatarDropzone as ue}from"./components/controls/dropzone/avatar/AvatarDropzone.mjs";import{getFileExtension as de}from"./components/controls/dropzone/use-s3-upload.mjs";import{AvatarDropzoneS3 as fe}from"./components/controls/dropzone/avatar/AvatarDropzoneS3.mjs";import{Dropzone as pe}from"./components/controls/dropzone/Dropzone.mjs";import{DropzoneS3 as me}from"./components/controls/dropzone/DropzoneS3.mjs";import{FileInput as he}from"./components/controls/file-input/FileInput.mjs";import{FileInputMultiple as ge}from"./components/controls/file-input/FileInputMultiple.mjs";import{FileInputMultipleS3 as _e}from"./components/controls/file-input/FileInputMultipleS3.mjs";import{FileInputS3 as ve}from"./components/controls/file-input/FileInputS3.mjs";import{PasswordInput as ye}from"./components/controls/password-input/PasswordInput.mjs";import{PasswordStrengthInput as be}from"./components/controls/password-input/PasswordStrengthInput.mjs";import{usePasswordRules as xe}from"./components/controls/password-input/usePasswordRules.mjs";import{Radio as Se}from"./components/controls/radio/Radio.mjs";import{SwitchGroup as Ce}from"./components/controls/switch-group/SwitchGroup.mjs";import{Switch as we}from"./components/controls/switch/Switch.mjs";import{Textarea as Te}from"./components/controls/textarea/Textarea.mjs";import{FormS3Context as Ee,useFormS3Context as De}from"./components/forms/FormS3Context.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{Avatar as i}from"./components/data-display/avatar/Avatar.mjs";import{Badge as a}from"./components/data-display/badge/Badge.mjs";import{Tooltip as o}from"./components/overlays/tooltip/Tooltip.mjs";import{Calendar as s}from"./components/data-display/calendar/Calendar.mjs";import{Virtual as c}from"./components/misc/virtual/Virtual.mjs";import{ScrollArea as l}from"./components/misc/scroll-area/ScrollArea.mjs";import{Table as u}from"./components/data-display/table/Table.mjs";import{IconRaw as d}from"./components/data-display/icons/icon-raw/IconRaw.mjs";import{Icon as f}from"./components/data-display/icons/icon/Icon.mjs";import{DEFAULT_DATA_TABLE_LABELS as p,DataTableContextProvider as m,useDataTableContext as h}from"./components/data-display/datatables/useDataTableContext.mjs";import{Checkbox as g}from"./components/controls/checkbox/Checkbox.mjs";import{DataTable as _}from"./components/data-display/datatables/DataTable.mjs";import{HorizontalDivider as v}from"./components/misc/horizontal-divider/HorizontalDivider.mjs";import{NoSsr as y}from"./components/misc/no-ssr/NoSsr.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{Details as j}from"./components/data-display/details/Details.mjs";import{FileIcon as M}from"./components/data-display/file-icon/FileIcon.mjs";import{ResourceItem as N}from"./components/data-display/resource-item/ResourceItem.mjs";import{DocumentItem as P}from"./components/data-display/document-item/DocumentItem.mjs";import{IconSvg as F}from"./components/data-display/icons/icon-svg/IconSvg.mjs";import{Indicator as I}from"./components/data-display/indicator/Indicator.mjs";import{LoaderDot as L}from"./components/data-display/loader-dot/LoaderDot.mjs";import{LoaderOval as R}from"./components/data-display/loader-oval/LoaderOval.mjs";import{LogoImage as z}from"./components/data-display/logos/logo-image/LogoImage.mjs";import{LogoSvg as B}from"./components/data-display/logos/logo-svg/LogoSvg.mjs";import{NotificationBanner as V}from"./components/data-display/notification-banner/NotificationBanner.mjs";import{OrderedList as H}from"./components/data-display/ordered-list/OrderedList.mjs";import{Progress as U}from"./components/data-display/progress/Progress.mjs";import{RemovableItem as W}from"./components/data-display/removable-item/RemovableItem.mjs";import{TagGroup as G}from"./components/data-display/tag-group/TagGroup.mjs";import{Tag as K}from"./components/data-display/tag/Tag.mjs";import{UploadedFile as q}from"./components/data-display/uploaded-file/UploadedFile.mjs";import{UploadedFileDetails as J}from"./components/data-display/uploaded-file/UploadedFileDetails.mjs";import{UploadedFiles as Y}from"./components/data-display/uploaded-files/UploadedFiles.mjs";import{UploadingFiles as X}from"./components/data-display/uploading-files/UploadingFiles.mjs";import{ButtonIcon as Z}from"./components/buttons/button-icon/ButtonIcon.mjs";import{ButtonIconVisual as Q}from"./components/buttons/button-icon-visual/ButtonIconVisual.mjs";import{ButtonVisual as $}from"./components/buttons/button-visual/ButtonVisual.mjs";import{Modal as ee}from"./components/overlays/modal/Modal.mjs";import{Modals as te}from"./components/overlays/modal/index.mjs";import{Toast as ne}from"./components/overlays/toast/Toast.mjs";import{AvatarUpload as re}from"./components/controls/avatar-upload/AvatarUpload.mjs";import{CheckboxTree as ie}from"./components/controls/checkbox-tree/CheckboxTree.mjs";import{DatePicker as ae}from"./components/controls/date-picker/DatePicker.mjs";import{YearPicker as oe}from"./components/controls/date-picker/YearPicker.mjs";import{DateTimePicker as se}from"./components/controls/date-time-picker/DateTimePicker.mjs";import{Autocomplete as ce}from"./components/controls/dropdown/autocomplete/Autocomplete.mjs";import{Combobox as le}from"./components/controls/dropdown/combobox/Combobox.mjs";import{AvatarDropzone as ue}from"./components/controls/dropzone/avatar/AvatarDropzone.mjs";import{getFileExtension as de}from"./components/controls/dropzone/use-s3-upload.mjs";import{AvatarDropzoneS3 as fe}from"./components/controls/dropzone/avatar/AvatarDropzoneS3.mjs";import{Dropzone as pe}from"./components/controls/dropzone/Dropzone.mjs";import{DropzoneS3 as me}from"./components/controls/dropzone/DropzoneS3.mjs";import{FileInput as he}from"./components/controls/file-input/FileInput.mjs";import{FileInputMultiple as ge}from"./components/controls/file-input/FileInputMultiple.mjs";import{FileInputMultipleS3 as _e}from"./components/controls/file-input/FileInputMultipleS3.mjs";import{FileInputS3 as ve}from"./components/controls/file-input/FileInputS3.mjs";import{PasswordInput as ye}from"./components/controls/password-input/PasswordInput.mjs";import{PasswordStrengthInput as be}from"./components/controls/password-input/PasswordStrengthInput.mjs";import{usePasswordRules as xe}from"./components/controls/password-input/usePasswordRules.mjs";import{Radio as Se}from"./components/controls/radio/Radio.mjs";import{SwitchGroup as Ce}from"./components/controls/switch-group/SwitchGroup.mjs";import{Switch as we}from"./components/controls/switch/Switch.mjs";import{Textarea as Te}from"./components/controls/textarea/Textarea.mjs";import{FormS3Context as Ee,useFormS3Context as De}from"./components/forms/FormS3Context.mjs";import{MultiFormContext as Oe,useMultiFormContext as ke}from"./components/forms/multi-step/MultiFormContext.mjs";import{PendingErrorsContext as Ae,PendingErrorsProvider as je,usePendingErrors as Me}from"./components/forms/multi-step/PendingErrorsContext.mjs";import{PASSWORD_RULES as Ne}from"./components/forms/rules/password-rules.mjs";import{z as Pe}from"./components/forms/rules/zod.mjs";import{Form as Fe}from"./components/forms/Form.mjs";import{Fieldset as Ie}from"./components/forms/layout/Fieldset.mjs";import{Stepper as Le}from"./components/navigations/stepper/Stepper.mjs";import{Schema as Re}from"./components/forms/multi-step/parser/Schema.mjs";import{MultiForm as ze,MultiFormStep as Be}from"./components/forms/multi-step/MultiForm.mjs";import{Card as Ve,CardBase as He,CardBody as Ue,CardFooter as We,CardHeader as Ge,CardRoot as Ke}from"./components/layouts/card/Card.mjs";import{FluidGrid as qe}from"./components/layouts/fluid-grid/FluidGrid.mjs";import{Grid as Je}from"./components/layouts/grid/Grid.mjs";import{Breadcrumbs as Ye}from"./components/navigations/breadcrumbs/Breadcrumbs.mjs";import{Menu as Xe}from"./components/navigations/menu/Menu.mjs";import{NavigationMenu as Ze}from"./components/navigations/navigation-menu/NavigationMenu.mjs";import{Sidebar as Qe}from"./components/navigations/sidebars/sidebar/Sidebar.mjs";import{MageUiProvider as $e}from"./providers/MageUiProvider.mjs";export{ce as Autocomplete,i as Avatar,ue as AvatarDropzone,fe as AvatarDropzoneS3,re as AvatarUpload,a as Badge,Ye as Breadcrumbs,e as Button,n as ButtonAction,Z as ButtonIcon,Q as ButtonIconVisual,r as ButtonLoader,$ as ButtonVisual,s as Calendar,Ve as Card,He as CardBase,Ue as CardBody,We as CardFooter,Ge as CardHeader,Ke as CardRoot,g as Checkbox,ie as CheckboxTree,le as Combobox,p as DEFAULT_DATA_TABLE_LABELS,_ as DataTable,D as DataTableBottomSlot,m as DataTableContextProvider,O as DataTableFeedback,w as DataTablePageSize,E as DataTablePagination,k as DataTableTopSlot,ae as DatePicker,se as DateTimePicker,A as DescriptionList,j as Details,P as DocumentItem,pe as Dropzone,me as DropzoneS3,Ie as Fieldset,M as FileIcon,he as FileInput,ge as FileInputMultiple,_e as FileInputMultipleS3,ve as FileInputS3,qe as FluidGrid,Fe as Form,Ee as FormS3Context,Je as Grid,v as HorizontalDivider,f as Icon,d as IconRaw,F as IconSvg,S as IconWrapped,I as Indicator,L as LoaderDot,R as LoaderOval,z as LogoImage,B as LogoSvg,$e as MageUiProvider,Xe as Menu,ee as Modal,te as Modals,ze as MultiForm,Oe as MultiFormContext,Be as MultiFormStep,Ze as NavigationMenu,y as NoSsr,V as NotificationBanner,H as OrderedList,Ne as PASSWORD_RULES,T as Pagination,ye as PasswordInput,be as PasswordStrengthInput,Ae as PendingErrorsContext,je as PendingErrorsProvider,U as Progress,Se as Radio,W as RemovableItem,N as ResourceItem,Re as Schema,l as ScrollArea,b as ScrollAreaAutosize,C as Select,Qe as Sidebar,Le as Stepper,we as Switch,Ce as SwitchGroup,u as Table,K as Tag,G as TagGroup,x as TextInput,Te as Textarea,ne as Toast,o as Tooltip,q as UploadedFile,J as UploadedFileDetails,Y as UploadedFiles,X as UploadingFiles,c as Virtual,t as VisuallyHidden,oe as YearPicker,de as getFileExtension,h as useDataTableContext,De as useFormS3Context,ke as useMultiFormContext,xe as usePasswordRules,Me as usePendingErrors,Pe 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.196",
|
|
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.196",
|
|
29
|
+
"@mage-ui/styled-system": "1.0.8"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@dnd-kit/core": "^6.3.1",
|