@iziui/react 0.0.74-rc → 0.0.76-rc

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.
@@ -1,2 +1,7 @@
1
- export { default, type ModalProps } from './Modal';
1
+ export { default as Modal } from './Modal';
2
+ export { default as ModalFooter } from './ModalFooter';
3
+ export { default as useModal } from './useModal';
4
+ export * from './Modal';
5
+ export * from './ModalFooter';
6
+ export * from './useModal';
2
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/feedback/Modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/feedback/Modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEjD,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { default as FormControl } from './FormControl';
2
- export type AbstractControl<T extends Record<string, unknown>, K extends keyof T = keyof T> = {
2
+ export type AbstractControl<T extends Record<string, any>, K extends keyof T = keyof T> = {
3
3
  [x in K]: FormControl<T[K]>;
4
4
  };
5
5
  //# sourceMappingURL=AbstractControl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractControl.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/AbstractControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IACzB;KAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA"}
1
+ {"version":3,"file":"AbstractControl.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/AbstractControl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,eAAe,CACzB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IACzB;KAAG,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA"}
@@ -1,14 +1,14 @@
1
1
  import { AbstractControl } from './AbstractControl';
2
2
  import { default as FormControl } from './FormControl';
3
3
  type SetValues<F> = Partial<F> | ((values: F) => Partial<F>);
4
- export type Validator<T extends Record<string, unknown>> = Partial<{
4
+ export type Validator<T extends Record<string, any>> = Partial<{
5
5
  [K in keyof T]: (data: FormGroup<T>) => string | void;
6
6
  }>;
7
- export interface Handle<T extends Record<string, unknown>> {
7
+ export interface Handle<T extends Record<string, any>> {
8
8
  change?: (form: FormGroup<T>) => void;
9
9
  submit?: (form: FormGroup<T>) => void;
10
10
  }
11
- export default class FormGroup<T extends Record<string, unknown>> {
11
+ export default class FormGroup<T extends Record<string, any>> {
12
12
  controls: AbstractControl<T>;
13
13
  handle: Handle<T>;
14
14
  validator?: Validator<T> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"FormGroup.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/FormGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAG7C,KAAK,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7D,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC;KAChE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,IAAI;CACtD,CAAC,CAAA;AAEF,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAKrD,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IANjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAc;gBAGrB,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,YAAA;IAGjC;;;;;IAKA;IACA,IAAI,OAAO,IACK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CADN;IACvC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAyB;IAEtE,IAAI,OAAO,IAAI,OAAO,CAAwB;IAC9C,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAA6B;IAE1D,IAAI,MAAM,8BAGT;IAED,IAAI,MAAM,IAAI,CAAC,CAOd;IAEM,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IACjC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAoB/C,OAAO,CAAC,WAAW;IAIZ,MAAM;IAWN,KAAK;IAKL,QAAQ;CAchB"}
1
+ {"version":3,"file":"FormGroup.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/FormGroup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAG7C,KAAK,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7D,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC;KAC5D,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,IAAI;CACtD,CAAC,CAAA;AAEF,MAAM,WAAW,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnD,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACtC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACvC;AAED,MAAM,CAAC,OAAO,OAAO,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAKjD,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IANjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAc;gBAGrB,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,YAAA;IAGjC;;;;;IAKA;IACA,IAAI,OAAO,IACK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CADN;IACvC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,EAAyB;IAEtE,IAAI,OAAO,IAAI,OAAO,CAAwB;IAC9C,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAA6B;IAE1D,IAAI,MAAM,8BAGT;IAED,IAAI,MAAM,IAAI,CAAC,CAOd;IAEM,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;IACjC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAoB/C,OAAO,CAAC,WAAW;IAIZ,MAAM;IAWN,KAAK;IAKL,QAAQ;CAchB"}
@@ -1,4 +1,4 @@
1
- export default function useControl<T extends Record<string, unknown>, K extends keyof T = keyof T>(controlName: K): {
1
+ export default function useControl<T extends Record<string, any>, K extends keyof T = keyof T>(controlName: K): {
2
2
  control: import('./AbstractControl').AbstractControl<T>[K];
3
3
  update: (value: T[K]) => void;
4
4
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useControl.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/useControl.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,EAC3B,WAAW,EAAE,CAAC;;oBAIS,CAAC,CAAC,CAAC,CAAC;EAS5B"}
1
+ {"version":3,"file":"useControl.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/useControl.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,UAAU,CAChC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,EAC3B,WAAW,EAAE,CAAC;;oBAIS,CAAC,CAAC,CAAC,CAAC;EAS5B"}
@@ -1,12 +1,12 @@
1
1
  import { default as FormGroup, Handle, Validator } from './FormGroup';
2
2
  import { Constructor } from './FormControl';
3
- type UseForm<T extends Record<string, unknown>> = {
3
+ type UseForm<T extends Record<string, any>> = {
4
4
  form: {
5
5
  [K in keyof T]: Constructor<T[K]>;
6
6
  };
7
7
  handle: Handle<T>;
8
8
  validator?: Validator<T>;
9
9
  };
10
- export default function useForm<T extends Record<any, unknown>>({ form, handle, validator }: UseForm<T>): FormGroup<T>;
10
+ export default function useForm<T extends Record<any, any>>({ form, handle, validator }: UseForm<T>): FormGroup<T>;
11
11
  export {};
12
12
  //# sourceMappingURL=useForm.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/useForm.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrD,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;IAChD,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CAC1B,CAAA;AAcD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAC9D,IAAI,EACJ,MAAM,EACN,SAAS,EACV,EAAE,OAAO,CAAC,CAAC,CAAC,gBAuBZ"}
1
+ {"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/useForm.ts"],"names":[],"mappings":"AAEA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGrD,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;IAC5C,IAAI,EAAE;SAAG,CAAC,IAAI,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAAE,CAAC;IAC5C,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClB,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;CAC1B,CAAA;AAcD,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAC1D,IAAI,EACJ,MAAM,EACN,SAAS,EACV,EAAE,OAAO,CAAC,CAAC,CAAC,gBAuBZ"}
@@ -1,3 +1,3 @@
1
1
  import { default as FormGroup } from './FormGroup';
2
- export default function useFormGroup<T extends Record<string, unknown>>(): FormGroup<T>;
2
+ export default function useFormGroup<T extends Record<string, any>>(): FormGroup<T>;
3
3
  //# sourceMappingURL=useFormGroup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormGroup.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/useFormGroup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAKlD,SAAS,CAAC,CAAC,CAAC,CAC/B"}
1
+ {"version":3,"file":"useFormGroup.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/useFormGroup.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAGzC,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAK9C,SAAS,CAAC,CAAC,CAAC,CAC/B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useForm-3oClzOJC.js","sources":["../../src/lab/Form/Form.tsx","../../src/lab/Form/useFormGroup.ts","../../src/lab/Form/useControl.ts","../../src/lab/Form/Control.tsx","../../src/lab/Form/FormGroup.ts","../../src/lab/Form/FormControl.ts","../../src/lab/Form/useForm.ts"],"sourcesContent":["import { createContext, SubmitEvent, HTMLAttributes } from 'react';\n\nimport type FormGroup from './FormGroup';\n\nexport const FormContext = createContext<FormGroup<any> | null>(null);\n\ninterface FormProps<T extends Record<string, any>> extends HTMLAttributes<HTMLFormElement> {\n formGroup: FormGroup<T>;\n debug?: boolean;\n}\n\nexport default function Form<T extends Record<string, any>>({\n formGroup,\n debug = false,\n children,\n ...props\n}: FormProps<T>) {\n const submit = (event: SubmitEvent<HTMLFormElement>) => {\n event.preventDefault();\n formGroup.submit();\n };\n\n return (\n <FormContext value={formGroup}>\n <form\n {...props}\n style={{ width: '100%', ...props.style }}\n onSubmit={submit}\n noValidate\n >\n {children}\n </form>\n {\n debug && (\n <pre style={{\n width: '100%',\n maxHeight: 350,\n padding: 15,\n borderRadius: 4,\n overflow: 'auto',\n color: '#333',\n background: '#e5e5e5',\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n }}>\n {JSON.stringify(formGroup, null, 2)}\n </pre>\n )\n }\n </FormContext>\n );\n}","import { useContext } from 'react';\n\nimport type FormGroup from './FormGroup';\nimport { FormContext } from './Form';\n\nexport default function useFormGroup<T extends Record<string, unknown>>() {\n const context = useContext(FormContext);\n\n if (!context) throw new Error('useFormGroup must be used inside <FormProvider> (or <Form />).');\n\n return context as FormGroup<T>;\n}","import useFormGroup from './useFormGroup';\n\nexport default function useControl<\n T extends Record<string, unknown>,\n K extends keyof T = keyof T,\n>(controlName: K) {\n const formGroup = useFormGroup<T>();\n const control = formGroup.controls[controlName];\n\n const update = (value: T[K]) => {\n formGroup.setValues((data) => {\n data[controlName] = value;\n\n return data;\n });\n };\n\n return { control, update };\n}","import { ChangeEvent, cloneElement, InputEvent, InputHTMLAttributes, ReactElement } from 'react';\n\nimport useControl from './useControl';\nimport type { AbstractControl } from './AbstractControl';\n\ninterface ControlProps<\n T extends Record<string, any>,\n K extends keyof T,\n> {\n controlName: K;\n action?: 'change' | 'input' | 'blur';\n field: (control: AbstractControl<T>[K]) => React.JSX.Element;\n}\n\nexport default function Control<\n T extends Record<string, any>,\n K extends keyof T\n>({\n controlName,\n field,\n action = 'input'\n}: ControlProps<T, K>) {\n const { control, update } = useControl<T, K>(controlName);\n\n const renderChildren = (child: ReactElement<InputHTMLAttributes<HTMLInputElement>>) => {\n const getValue = (e: ChangeEvent<HTMLInputElement> | InputEvent<HTMLInputElement>) => {\n if (['radio', 'checkbox'].includes(e.type)) { return e.target['checked']; }\n\n return e.target['value'];\n };\n\n return cloneElement(child, {\n onBlur: (e) => {\n if (action === 'blur') { update(getValue(e)); };\n\n if (child.props.onBlur) { child.props.onBlur(e); }\n },\n onInput: (e) => {\n if (action === 'input') { update(getValue(e)); };\n\n if (child.props.onInput) { child.props.onInput(e); }\n },\n onChange: (e) => {\n if (action === 'change') { update(getValue(e)); };\n\n if (child.props.onChange) { child.props.onChange(e); }\n },\n });\n };\n\n return (\n renderChildren(field(control))\n );\n}","import type { AbstractControl } from './AbstractControl';\nimport type FormControl from './FormControl';\n\ntype Hydrate<T extends Record<string, unknown>> = (data: FormGroup<T>) => void;\ntype SetValues<F> = Partial<F> | ((values: F) => Partial<F>);\n\nexport type Validator<T extends Record<string, unknown>> = Partial<{\n [K in keyof T]: (data: FormGroup<T>) => string | void;\n}>\n\nexport interface Handle<T extends Record<string, unknown>> {\n change?: (form: FormGroup<T>) => void;\n submit?: (form: FormGroup<T>) => void;\n}\n\nexport default class FormGroup<T extends Record<string, unknown>> {\n private _valid = false;\n private _hydrate!: Hydrate<T>;\n\n constructor(\n public controls: AbstractControl<T>,\n public handle: Handle<T>,\n public validator?: Validator<T>,\n ) { }\n\n /**\n * Atualiza o estado interno do componente.\n * @private\n * @description Este método é usado internamente pela biblioteca.\n * Para atualizar valores externamente, use {@link setValues}.\n*/\n get hydrate() { return this._hydrate; }\n set hydrate(fn: (values: FormGroup<T>) => any) { this._hydrate = fn; }\n\n get isValid(): boolean { return this._valid; }\n set isValid(validity: boolean) { this._valid = validity; }\n\n get errors() {\n return Object.values<FormControl<T[keyof T]>>(this.controls)\n .filter(c => c.error);\n }\n\n get values(): T {\n const values: Record<string, any> = {};\n\n this.eachControl((control, key) => ({ [key as string]: control.value }))\n .forEach(control => { for (const prop in control) { values[prop] = control[prop]; } });\n\n return values as T;\n }\n\n public setValues(fn: SetValues<T>): void;\n public setValues(partialForm: Partial<T>): void;\n public setValues(arg: Partial<T> | SetValues<T>) {\n const partial =\n typeof arg === 'function'\n ? arg(this.values)\n : arg;\n\n for (const key of Object.keys(partial)) {\n this.controls[key].value = partial[key] as T[keyof T];\n }\n\n this.validate();\n\n this.hydrate(this);\n\n if (!this.handle.change) { return; }\n\n this.handle.change(this);\n }\n\n private eachControl(fn: <K extends keyof T>(control: FormControl<T[K]>, key?: K) => any) {\n return Object.keys(this.controls).map(k => fn(this.controls[k], k));\n }\n\n public submit() {\n if (!this.handle.submit) { return; }\n\n this.eachControl((control) => { control.dirty = true; });\n\n this.validate();\n\n this.hydrate(this);\n this.handle.submit(this);\n }\n\n public reset() {\n this.eachControl((control) => control.reset());\n this.hydrate(this);\n }\n\n public validate() {\n Object.entries(this.controls).map(([key, control]) => {\n let error = control.validate();\n\n if (this.validator && this.validator[key]) {\n error = this.validator[key](this) || '';\n }\n\n control.error = error;\n });\n\n this.isValid = !this.errors.length;\n this.hydrate(this);\n }\n}","type Type = 'text' | 'email';\ntype Validator<C> = (control: FormControl<C>) => string | false | void;\n\ntype Data<T> = {\n defaultValue: T;\n type?: Type;\n validators?: Validator<T>[];\n}\n\nexport type Constructor<V> = ConstructorParameters<typeof FormControl<V>>[number];\n\nexport default class FormControl<V> implements Pick<Data<V>, 'type'> {\n private _value!: V;\n private defaultValue: V;\n private validators: Validator<V>[] = [];\n\n public type: Type;\n public error = '';\n public dirty = false;\n\n constructor({\n defaultValue,\n type = 'text',\n validators,\n }: Data<V>) {\n this.type = type;\n this._value = defaultValue;\n this.defaultValue = defaultValue;\n\n if (validators) { this.validators = validators; }\n }\n\n get value(): V { return this._value; }\n set value(value: V) {\n this.dirty = true;\n this._value = value;\n this.validate();\n }\n\n get isInvalid() { return Boolean(this.dirty && this.error); }\n\n public reset() {\n this.value = this.defaultValue;\n this.dirty = false;\n }\n\n public validate() {\n const errors = this.validators\n .map(v => v(this))\n .filter(Boolean);\n\n this.error = errors[0] || '';\n\n return this.error;\n }\n}\n","import { useState } from 'react';\n\nimport FormGroup from './FormGroup';\nimport FormControl from './FormControl';\nimport type { Constructor } from './FormControl';\nimport type { Handle, Validator } from './FormGroup';\nimport type { AbstractControl } from './AbstractControl';\n\ntype UseForm<T extends Record<string, unknown>> = {\n form: { [K in keyof T]: Constructor<T[K]> };\n handle: Handle<T>;\n validator?: Validator<T>;\n}\n\nfunction makingControls<T extends Record<string, unknown>>(form: { [K in keyof T]: Constructor<T[K]> }) {\n return Object.entries(form)\n .reduce((acc, data) => {\n const key = data[0] as keyof T;\n const value = data[1] as Constructor<T[keyof T]>;\n\n acc[key] = new FormControl(value);\n\n return acc;\n }, {} as AbstractControl<T>);\n}\n\nexport default function useForm<T extends Record<any, unknown>>({\n form,\n handle,\n validator\n}: UseForm<T>) {\n const [formGroup, setFormGroup] = useState<FormGroup<T>>(\n new FormGroup(\n makingControls(form),\n handle,\n validator\n )\n );\n\n const hydrate = (form: FormGroup<T>) => {\n setFormGroup(prev => {\n const controls = form.controls;\n\n const newFormGroup = new FormGroup(controls, handle, validator);\n newFormGroup.hydrate = prev.hydrate;\n\n return newFormGroup;\n });\n };\n\n formGroup.hydrate = hydrate;\n\n return formGroup;\n}"],"names":["FormContext","createContext","Form","formGroup","debug","children","props","submit","event","jsxs","jsx","useFormGroup","context","useContext","useControl","controlName","value","data","Control","field","action","control","update","child","getValue","e","cloneElement","FormGroup","controls","handle","validator","fn","validity","c","values","key","prop","arg","partial","k","error","FormControl","defaultValue","type","validators","errors","v","makingControls","form","acc","useForm","setFormGroup","useState","hydrate","prev","newFormGroup"],"mappings":"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"}
1
+ {"version":3,"file":"useForm-3oClzOJC.js","sources":["../../src/lab/Form/Form.tsx","../../src/lab/Form/useFormGroup.ts","../../src/lab/Form/useControl.ts","../../src/lab/Form/Control.tsx","../../src/lab/Form/FormGroup.ts","../../src/lab/Form/FormControl.ts","../../src/lab/Form/useForm.ts"],"sourcesContent":["import { createContext, SubmitEvent, HTMLAttributes } from 'react';\n\nimport type FormGroup from './FormGroup';\n\nexport const FormContext = createContext<FormGroup<any> | null>(null);\n\ninterface FormProps<T extends Record<string, any>> extends HTMLAttributes<HTMLFormElement> {\n formGroup: FormGroup<T>;\n debug?: boolean;\n}\n\nexport default function Form<T extends Record<string, any>>({\n formGroup,\n debug = false,\n children,\n ...props\n}: FormProps<T>) {\n const submit = (event: SubmitEvent<HTMLFormElement>) => {\n event.preventDefault();\n formGroup.submit();\n };\n\n return (\n <FormContext value={formGroup}>\n <form\n {...props}\n style={{ width: '100%', ...props.style }}\n onSubmit={submit}\n noValidate\n >\n {children}\n </form>\n {\n debug && (\n <pre style={{\n width: '100%',\n maxHeight: 350,\n padding: 15,\n borderRadius: 4,\n overflow: 'auto',\n color: '#333',\n background: '#e5e5e5',\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n }}>\n {JSON.stringify(formGroup, null, 2)}\n </pre>\n )\n }\n </FormContext>\n );\n}","import { useContext } from 'react';\n\nimport type FormGroup from './FormGroup';\nimport { FormContext } from './Form';\n\nexport default function useFormGroup<T extends Record<string, any>>() {\n const context = useContext(FormContext);\n\n if (!context) throw new Error('useFormGroup must be used inside <FormProvider> (or <Form />).');\n\n return context as FormGroup<T>;\n}","import useFormGroup from './useFormGroup';\n\nexport default function useControl<\n T extends Record<string, any>,\n K extends keyof T = keyof T,\n>(controlName: K) {\n const formGroup = useFormGroup<T>();\n const control = formGroup.controls[controlName];\n\n const update = (value: T[K]) => {\n formGroup.setValues((data) => {\n data[controlName] = value;\n\n return data;\n });\n };\n\n return { control, update };\n}","import { ChangeEvent, cloneElement, InputEvent, InputHTMLAttributes, ReactElement } from 'react';\n\nimport useControl from './useControl';\nimport type { AbstractControl } from './AbstractControl';\n\ninterface ControlProps<\n T extends Record<string, any>,\n K extends keyof T,\n> {\n controlName: K;\n action?: 'change' | 'input' | 'blur';\n field: (control: AbstractControl<T>[K]) => React.JSX.Element;\n}\n\nexport default function Control<\n T extends Record<string, any>,\n K extends keyof T\n>({\n controlName,\n field,\n action = 'input'\n}: ControlProps<T, K>) {\n const { control, update } = useControl<T, K>(controlName);\n\n const renderChildren = (child: ReactElement<InputHTMLAttributes<HTMLInputElement>>) => {\n const getValue = (e: ChangeEvent<HTMLInputElement> | InputEvent<HTMLInputElement>) => {\n if (['radio', 'checkbox'].includes(e.type)) { return e.target['checked']; }\n\n return e.target['value'];\n };\n\n return cloneElement(child, {\n onBlur: (e) => {\n if (action === 'blur') { update(getValue(e)); };\n\n if (child.props.onBlur) { child.props.onBlur(e); }\n },\n onInput: (e) => {\n if (action === 'input') { update(getValue(e)); };\n\n if (child.props.onInput) { child.props.onInput(e); }\n },\n onChange: (e) => {\n if (action === 'change') { update(getValue(e)); };\n\n if (child.props.onChange) { child.props.onChange(e); }\n },\n });\n };\n\n return (\n renderChildren(field(control))\n );\n}","import type { AbstractControl } from './AbstractControl';\nimport type FormControl from './FormControl';\n\ntype Hydrate<T extends Record<string, any>> = (data: FormGroup<T>) => void;\ntype SetValues<F> = Partial<F> | ((values: F) => Partial<F>);\n\nexport type Validator<T extends Record<string, any>> = Partial<{\n [K in keyof T]: (data: FormGroup<T>) => string | void;\n}>\n\nexport interface Handle<T extends Record<string, any>> {\n change?: (form: FormGroup<T>) => void;\n submit?: (form: FormGroup<T>) => void;\n}\n\nexport default class FormGroup<T extends Record<string, any>> {\n private _valid = false;\n private _hydrate!: Hydrate<T>;\n\n constructor(\n public controls: AbstractControl<T>,\n public handle: Handle<T>,\n public validator?: Validator<T>,\n ) { }\n\n /**\n * Atualiza o estado interno do componente.\n * @private\n * @description Este método é usado internamente pela biblioteca.\n * Para atualizar valores externamente, use {@link setValues}.\n*/\n get hydrate() { return this._hydrate; }\n set hydrate(fn: (values: FormGroup<T>) => any) { this._hydrate = fn; }\n\n get isValid(): boolean { return this._valid; }\n set isValid(validity: boolean) { this._valid = validity; }\n\n get errors() {\n return Object.values<FormControl<T[keyof T]>>(this.controls)\n .filter(c => c.error);\n }\n\n get values(): T {\n const values: Record<string, any> = {};\n\n this.eachControl((control, key) => ({ [key as string]: control.value }))\n .forEach(control => { for (const prop in control) { values[prop] = control[prop]; } });\n\n return values as T;\n }\n\n public setValues(fn: SetValues<T>): void;\n public setValues(partialForm: Partial<T>): void;\n public setValues(arg: Partial<T> | SetValues<T>) {\n const partial =\n typeof arg === 'function'\n ? arg(this.values)\n : arg;\n\n for (const key of Object.keys(partial)) {\n this.controls[key].value = partial[key] as T[keyof T];\n }\n\n this.validate();\n\n this.hydrate(this);\n\n if (!this.handle.change) { return; }\n\n this.handle.change(this);\n }\n\n private eachControl(fn: <K extends keyof T>(control: FormControl<T[K]>, key?: K) => any) {\n return Object.keys(this.controls).map(k => fn(this.controls[k], k));\n }\n\n public submit() {\n if (!this.handle.submit) { return; }\n\n this.eachControl((control) => { control.dirty = true; });\n\n this.validate();\n\n this.hydrate(this);\n this.handle.submit(this);\n }\n\n public reset() {\n this.eachControl((control) => control.reset());\n this.hydrate(this);\n }\n\n public validate() {\n Object.entries(this.controls).map(([key, control]) => {\n let error = control.validate();\n\n if (this.validator && this.validator[key]) {\n error = this.validator[key](this) || '';\n }\n\n control.error = error;\n });\n\n this.isValid = !this.errors.length;\n this.hydrate(this);\n }\n}","type Type = 'text' | 'email';\ntype Validator<C> = (control: FormControl<C>) => string | false | void;\n\ntype Data<T> = {\n defaultValue: T;\n type?: Type;\n validators?: Validator<T>[];\n}\n\nexport type Constructor<V> = ConstructorParameters<typeof FormControl<V>>[number];\n\nexport default class FormControl<V> implements Pick<Data<V>, 'type'> {\n private _value!: V;\n private defaultValue: V;\n private validators: Validator<V>[] = [];\n\n public type: Type;\n public error = '';\n public dirty = false;\n\n constructor({\n defaultValue,\n type = 'text',\n validators,\n }: Data<V>) {\n this.type = type;\n this._value = defaultValue;\n this.defaultValue = defaultValue;\n\n if (validators) { this.validators = validators; }\n }\n\n get value(): V { return this._value; }\n set value(value: V) {\n this.dirty = true;\n this._value = value;\n this.validate();\n }\n\n get isInvalid() { return Boolean(this.dirty && this.error); }\n\n public reset() {\n this.value = this.defaultValue;\n this.dirty = false;\n }\n\n public validate() {\n const errors = this.validators\n .map(v => v(this))\n .filter(Boolean);\n\n this.error = errors[0] || '';\n\n return this.error;\n }\n}\n","import { useState } from 'react';\n\nimport FormGroup from './FormGroup';\nimport FormControl from './FormControl';\nimport type { Constructor } from './FormControl';\nimport type { Handle, Validator } from './FormGroup';\nimport type { AbstractControl } from './AbstractControl';\n\ntype UseForm<T extends Record<string, any>> = {\n form: { [K in keyof T]: Constructor<T[K]> };\n handle: Handle<T>;\n validator?: Validator<T>;\n}\n\nfunction makingControls<T extends Record<string, any>>(form: { [K in keyof T]: Constructor<T[K]> }) {\n return Object.entries(form)\n .reduce((acc, data) => {\n const key = data[0] as keyof T;\n const value = data[1] as Constructor<T[keyof T]>;\n\n acc[key] = new FormControl(value);\n\n return acc;\n }, {} as AbstractControl<T>);\n}\n\nexport default function useForm<T extends Record<any, any>>({\n form,\n handle,\n validator\n}: UseForm<T>) {\n const [formGroup, setFormGroup] = useState<FormGroup<T>>(\n new FormGroup(\n makingControls(form),\n handle,\n validator\n )\n );\n\n const hydrate = (form: FormGroup<T>) => {\n setFormGroup(prev => {\n const controls = form.controls;\n\n const newFormGroup = new FormGroup(controls, handle, validator);\n newFormGroup.hydrate = prev.hydrate;\n\n return newFormGroup;\n });\n };\n\n formGroup.hydrate = hydrate;\n\n return formGroup;\n}"],"names":["FormContext","createContext","Form","formGroup","debug","children","props","submit","event","jsxs","jsx","useFormGroup","context","useContext","useControl","controlName","value","data","Control","field","action","control","update","child","getValue","e","cloneElement","FormGroup","controls","handle","validator","fn","validity","c","values","key","prop","arg","partial","k","error","FormControl","defaultValue","type","validators","errors","v","makingControls","form","acc","useForm","setFormGroup","useState","hydrate","prev","newFormGroup"],"mappings":"wIAIO,MAAMA,EAAcC,EAAqC,IAAI,EAOpE,SAAwBC,EAAoC,CAC1D,UAAAC,EACA,MAAAC,EAAQ,GACR,SAAAC,EACA,GAAGC,CACL,EAAiB,CACf,MAAMC,EAAUC,GAAwC,CACtDA,EAAM,eAAA,EACNL,EAAU,OAAA,CACZ,EAEA,OACEM,EAACT,EAAA,CAAY,MAAOG,EAClB,SAAA,CAAAO,EAAC,OAAA,CACE,GAAGJ,EACJ,MAAO,CAAE,MAAO,OAAQ,GAAGA,EAAM,KAAA,EACjC,SAAUC,EACV,WAAU,GAET,SAAAF,CAAA,CAAA,EAGDD,GACEM,EAAC,MAAA,CAAI,MAAO,CACV,MAAO,OACP,UAAW,IACX,QAAS,GACT,aAAc,EACd,SAAU,OACV,MAAO,OACP,WAAY,UACZ,UAAW,wDAAA,EAEV,SAAA,KAAK,UAAUP,EAAW,KAAM,CAAC,CAAA,CACpC,CAAA,EAGN,CAEJ,CC7CA,SAAwBQ,GAA8C,CACpE,MAAMC,EAAUC,EAAWb,CAAW,EAEtC,GAAI,CAACY,EAAS,MAAM,IAAI,MAAM,gEAAgE,EAE9F,OAAOA,CACT,CCTA,SAAwBE,EAGtBC,EAAgB,CAChB,MAAMZ,EAAYQ,EAAA,EAWlB,MAAO,CAAE,QAVOR,EAAU,SAASY,CAAW,EAU5B,OARFC,GAAgB,CAC9Bb,EAAU,UAAWc,IACnBA,EAAKF,CAAW,EAAIC,EAEbC,EACR,CACH,CAEkB,CACpB,CCJA,SAAwBC,EAGtB,CACA,YAAAH,EACA,MAAAI,EACA,OAAAC,EAAS,OACX,EAAuB,CACrB,KAAM,CAAE,QAAAC,EAAS,OAAAC,GAAWR,EAAiBC,CAAW,EA4BxD,OA1BwBQ,GAA+D,CACrF,MAAMC,EAAYC,GACZ,CAAC,QAAS,UAAU,EAAE,SAASA,EAAE,IAAI,EAAYA,EAAE,OAAO,QAEvDA,EAAE,OAAO,MAGlB,OAAOC,EAAaH,EAAO,CACzB,OAASE,GAAM,CACTL,IAAW,QAAUE,EAAOE,EAASC,CAAC,CAAC,EAEvCF,EAAM,MAAM,QAAUA,EAAM,MAAM,OAAOE,CAAC,CAChD,EACA,QAAUA,GAAM,CACVL,IAAW,SAAWE,EAAOE,EAASC,CAAC,CAAC,EAExCF,EAAM,MAAM,SAAWA,EAAM,MAAM,QAAQE,CAAC,CAClD,EACA,SAAWA,GAAM,CACXL,IAAW,UAAYE,EAAOE,EAASC,CAAC,CAAC,EAEzCF,EAAM,MAAM,UAAYA,EAAM,MAAM,SAASE,CAAC,CACpD,CAAA,CACD,CACH,GAGiBN,EAAME,CAAO,CAAC,CAEjC,CCtCA,MAAqBM,CAAyC,CAI5D,YACSC,EACAC,EACAC,EACP,CAHO,KAAA,SAAAF,EACA,KAAA,OAAAC,EACA,KAAA,UAAAC,CACL,CAHK,SACA,OACA,UAND,OAAS,GACT,SAcR,IAAI,SAAU,CAAE,OAAO,KAAK,QAAU,CACtC,IAAI,QAAQC,EAAmC,CAAE,KAAK,SAAWA,CAAI,CAErE,IAAI,SAAmB,CAAE,OAAO,KAAK,MAAQ,CAC7C,IAAI,QAAQC,EAAmB,CAAE,KAAK,OAASA,CAAU,CAEzD,IAAI,QAAS,CACX,OAAO,OAAO,OAAgC,KAAK,QAAQ,EACxD,OAAOC,GAAKA,EAAE,KAAK,CACxB,CAEA,IAAI,QAAY,CACd,MAAMC,EAA8B,CAAA,EAEpC,YAAK,YAAY,CAACb,EAASc,KAAS,CAAE,CAACA,CAAa,EAAGd,EAAQ,KAAA,EAAQ,EACpE,QAAQA,GAAW,CAAE,UAAWe,KAAQf,EAAWa,EAAOE,CAAI,EAAIf,EAAQe,CAAI,CAAK,CAAC,EAEhFF,CACT,CAIO,UAAUG,EAAgC,CAC/C,MAAMC,EACJ,OAAOD,GAAQ,WACXA,EAAI,KAAK,MAAM,EACfA,EAEN,UAAWF,KAAO,OAAO,KAAKG,CAAO,EACnC,KAAK,SAASH,CAAG,EAAE,MAAQG,EAAQH,CAAG,EAGxC,KAAK,SAAA,EAEL,KAAK,QAAQ,IAAI,EAEZ,KAAK,OAAO,QAEjB,KAAK,OAAO,OAAO,IAAI,CACzB,CAEQ,YAAYJ,EAAqE,CACvF,OAAO,OAAO,KAAK,KAAK,QAAQ,EAAE,IAAIQ,GAAKR,EAAG,KAAK,SAASQ,CAAC,EAAGA,CAAC,CAAC,CACpE,CAEO,QAAS,CACT,KAAK,OAAO,SAEjB,KAAK,YAAalB,GAAY,CAAEA,EAAQ,MAAQ,EAAM,CAAC,EAEvD,KAAK,SAAA,EAEL,KAAK,QAAQ,IAAI,EACjB,KAAK,OAAO,OAAO,IAAI,EACzB,CAEO,OAAQ,CACb,KAAK,YAAaA,GAAYA,EAAQ,OAAO,EAC7C,KAAK,QAAQ,IAAI,CACnB,CAEO,UAAW,CAChB,OAAO,QAAQ,KAAK,QAAQ,EAAE,IAAI,CAAC,CAACc,EAAKd,CAAO,IAAM,CACpD,IAAImB,EAAQnB,EAAQ,SAAA,EAEhB,KAAK,WAAa,KAAK,UAAUc,CAAG,IACtCK,EAAQ,KAAK,UAAUL,CAAG,EAAE,IAAI,GAAK,IAGvCd,EAAQ,MAAQmB,CAClB,CAAC,EAED,KAAK,QAAU,CAAC,KAAK,OAAO,OAC5B,KAAK,QAAQ,IAAI,CACnB,CACF,CC/FA,MAAqBC,CAAgD,CAC3D,OACA,aACA,WAA6B,CAAA,EAE9B,KACA,MAAQ,GACR,MAAQ,GAEf,YAAY,CACV,aAAAC,EACA,KAAAC,EAAO,OACP,WAAAC,CAAA,EACU,CACV,KAAK,KAAOD,EACZ,KAAK,OAASD,EACd,KAAK,aAAeA,EAEhBE,IAAc,KAAK,WAAaA,EACtC,CAEA,IAAI,OAAW,CAAE,OAAO,KAAK,MAAQ,CACrC,IAAI,MAAM5B,EAAU,CAClB,KAAK,MAAQ,GACb,KAAK,OAASA,EACd,KAAK,SAAA,CACP,CAEA,IAAI,WAAY,CAAE,MAAO,GAAQ,KAAK,OAAS,KAAK,MAAQ,CAErD,OAAQ,CACb,KAAK,MAAQ,KAAK,aAClB,KAAK,MAAQ,EACf,CAEO,UAAW,CAChB,MAAM6B,EAAS,KAAK,WACjB,IAAIC,GAAKA,EAAE,IAAI,CAAC,EAChB,OAAO,OAAO,EAEjB,YAAK,MAAQD,EAAO,CAAC,GAAK,GAEnB,KAAK,KACd,CACF,CCzCA,SAASE,EAA8CC,EAA6C,CAClG,OAAO,OAAO,QAAQA,CAAI,EACvB,OAAO,CAACC,EAAKhC,IAAS,CACrB,MAAMkB,EAAMlB,EAAK,CAAC,EACZD,EAAQC,EAAK,CAAC,EAEpB,OAAAgC,EAAId,CAAG,EAAI,IAAIM,EAAYzB,CAAK,EAEzBiC,CACT,EAAG,CAAA,CAAwB,CAC/B,CAEA,SAAwBC,EAAoC,CAC1D,KAAAF,EACA,OAAAnB,EACA,UAAAC,CACF,EAAe,CACb,KAAM,CAAC3B,EAAWgD,CAAY,EAAIC,EAChC,IAAIzB,EACFoB,EAAeC,CAAI,EACnBnB,EACAC,CAAA,CACF,EAGIuB,EAAWL,GAAuB,CACtCG,EAAaG,GAAQ,CACnB,MAAM1B,EAAWoB,EAAK,SAEhBO,EAAe,IAAI5B,EAAUC,EAAUC,EAAQC,CAAS,EAC9D,OAAAyB,EAAa,QAAUD,EAAK,QAErBC,CACT,CAAC,CACH,EAEA,OAAApD,EAAU,QAAUkD,EAEblD,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useForm-TyKbw7O8.cjs","sources":["../../src/lab/Form/Form.tsx","../../src/lab/Form/useFormGroup.ts","../../src/lab/Form/useControl.ts","../../src/lab/Form/Control.tsx","../../src/lab/Form/FormGroup.ts","../../src/lab/Form/FormControl.ts","../../src/lab/Form/useForm.ts"],"sourcesContent":["import { createContext, SubmitEvent, HTMLAttributes } from 'react';\n\nimport type FormGroup from './FormGroup';\n\nexport const FormContext = createContext<FormGroup<any> | null>(null);\n\ninterface FormProps<T extends Record<string, any>> extends HTMLAttributes<HTMLFormElement> {\n formGroup: FormGroup<T>;\n debug?: boolean;\n}\n\nexport default function Form<T extends Record<string, any>>({\n formGroup,\n debug = false,\n children,\n ...props\n}: FormProps<T>) {\n const submit = (event: SubmitEvent<HTMLFormElement>) => {\n event.preventDefault();\n formGroup.submit();\n };\n\n return (\n <FormContext value={formGroup}>\n <form\n {...props}\n style={{ width: '100%', ...props.style }}\n onSubmit={submit}\n noValidate\n >\n {children}\n </form>\n {\n debug && (\n <pre style={{\n width: '100%',\n maxHeight: 350,\n padding: 15,\n borderRadius: 4,\n overflow: 'auto',\n color: '#333',\n background: '#e5e5e5',\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n }}>\n {JSON.stringify(formGroup, null, 2)}\n </pre>\n )\n }\n </FormContext>\n );\n}","import { useContext } from 'react';\n\nimport type FormGroup from './FormGroup';\nimport { FormContext } from './Form';\n\nexport default function useFormGroup<T extends Record<string, unknown>>() {\n const context = useContext(FormContext);\n\n if (!context) throw new Error('useFormGroup must be used inside <FormProvider> (or <Form />).');\n\n return context as FormGroup<T>;\n}","import useFormGroup from './useFormGroup';\n\nexport default function useControl<\n T extends Record<string, unknown>,\n K extends keyof T = keyof T,\n>(controlName: K) {\n const formGroup = useFormGroup<T>();\n const control = formGroup.controls[controlName];\n\n const update = (value: T[K]) => {\n formGroup.setValues((data) => {\n data[controlName] = value;\n\n return data;\n });\n };\n\n return { control, update };\n}","import { ChangeEvent, cloneElement, InputEvent, InputHTMLAttributes, ReactElement } from 'react';\n\nimport useControl from './useControl';\nimport type { AbstractControl } from './AbstractControl';\n\ninterface ControlProps<\n T extends Record<string, any>,\n K extends keyof T,\n> {\n controlName: K;\n action?: 'change' | 'input' | 'blur';\n field: (control: AbstractControl<T>[K]) => React.JSX.Element;\n}\n\nexport default function Control<\n T extends Record<string, any>,\n K extends keyof T\n>({\n controlName,\n field,\n action = 'input'\n}: ControlProps<T, K>) {\n const { control, update } = useControl<T, K>(controlName);\n\n const renderChildren = (child: ReactElement<InputHTMLAttributes<HTMLInputElement>>) => {\n const getValue = (e: ChangeEvent<HTMLInputElement> | InputEvent<HTMLInputElement>) => {\n if (['radio', 'checkbox'].includes(e.type)) { return e.target['checked']; }\n\n return e.target['value'];\n };\n\n return cloneElement(child, {\n onBlur: (e) => {\n if (action === 'blur') { update(getValue(e)); };\n\n if (child.props.onBlur) { child.props.onBlur(e); }\n },\n onInput: (e) => {\n if (action === 'input') { update(getValue(e)); };\n\n if (child.props.onInput) { child.props.onInput(e); }\n },\n onChange: (e) => {\n if (action === 'change') { update(getValue(e)); };\n\n if (child.props.onChange) { child.props.onChange(e); }\n },\n });\n };\n\n return (\n renderChildren(field(control))\n );\n}","import type { AbstractControl } from './AbstractControl';\nimport type FormControl from './FormControl';\n\ntype Hydrate<T extends Record<string, unknown>> = (data: FormGroup<T>) => void;\ntype SetValues<F> = Partial<F> | ((values: F) => Partial<F>);\n\nexport type Validator<T extends Record<string, unknown>> = Partial<{\n [K in keyof T]: (data: FormGroup<T>) => string | void;\n}>\n\nexport interface Handle<T extends Record<string, unknown>> {\n change?: (form: FormGroup<T>) => void;\n submit?: (form: FormGroup<T>) => void;\n}\n\nexport default class FormGroup<T extends Record<string, unknown>> {\n private _valid = false;\n private _hydrate!: Hydrate<T>;\n\n constructor(\n public controls: AbstractControl<T>,\n public handle: Handle<T>,\n public validator?: Validator<T>,\n ) { }\n\n /**\n * Atualiza o estado interno do componente.\n * @private\n * @description Este método é usado internamente pela biblioteca.\n * Para atualizar valores externamente, use {@link setValues}.\n*/\n get hydrate() { return this._hydrate; }\n set hydrate(fn: (values: FormGroup<T>) => any) { this._hydrate = fn; }\n\n get isValid(): boolean { return this._valid; }\n set isValid(validity: boolean) { this._valid = validity; }\n\n get errors() {\n return Object.values<FormControl<T[keyof T]>>(this.controls)\n .filter(c => c.error);\n }\n\n get values(): T {\n const values: Record<string, any> = {};\n\n this.eachControl((control, key) => ({ [key as string]: control.value }))\n .forEach(control => { for (const prop in control) { values[prop] = control[prop]; } });\n\n return values as T;\n }\n\n public setValues(fn: SetValues<T>): void;\n public setValues(partialForm: Partial<T>): void;\n public setValues(arg: Partial<T> | SetValues<T>) {\n const partial =\n typeof arg === 'function'\n ? arg(this.values)\n : arg;\n\n for (const key of Object.keys(partial)) {\n this.controls[key].value = partial[key] as T[keyof T];\n }\n\n this.validate();\n\n this.hydrate(this);\n\n if (!this.handle.change) { return; }\n\n this.handle.change(this);\n }\n\n private eachControl(fn: <K extends keyof T>(control: FormControl<T[K]>, key?: K) => any) {\n return Object.keys(this.controls).map(k => fn(this.controls[k], k));\n }\n\n public submit() {\n if (!this.handle.submit) { return; }\n\n this.eachControl((control) => { control.dirty = true; });\n\n this.validate();\n\n this.hydrate(this);\n this.handle.submit(this);\n }\n\n public reset() {\n this.eachControl((control) => control.reset());\n this.hydrate(this);\n }\n\n public validate() {\n Object.entries(this.controls).map(([key, control]) => {\n let error = control.validate();\n\n if (this.validator && this.validator[key]) {\n error = this.validator[key](this) || '';\n }\n\n control.error = error;\n });\n\n this.isValid = !this.errors.length;\n this.hydrate(this);\n }\n}","type Type = 'text' | 'email';\ntype Validator<C> = (control: FormControl<C>) => string | false | void;\n\ntype Data<T> = {\n defaultValue: T;\n type?: Type;\n validators?: Validator<T>[];\n}\n\nexport type Constructor<V> = ConstructorParameters<typeof FormControl<V>>[number];\n\nexport default class FormControl<V> implements Pick<Data<V>, 'type'> {\n private _value!: V;\n private defaultValue: V;\n private validators: Validator<V>[] = [];\n\n public type: Type;\n public error = '';\n public dirty = false;\n\n constructor({\n defaultValue,\n type = 'text',\n validators,\n }: Data<V>) {\n this.type = type;\n this._value = defaultValue;\n this.defaultValue = defaultValue;\n\n if (validators) { this.validators = validators; }\n }\n\n get value(): V { return this._value; }\n set value(value: V) {\n this.dirty = true;\n this._value = value;\n this.validate();\n }\n\n get isInvalid() { return Boolean(this.dirty && this.error); }\n\n public reset() {\n this.value = this.defaultValue;\n this.dirty = false;\n }\n\n public validate() {\n const errors = this.validators\n .map(v => v(this))\n .filter(Boolean);\n\n this.error = errors[0] || '';\n\n return this.error;\n }\n}\n","import { useState } from 'react';\n\nimport FormGroup from './FormGroup';\nimport FormControl from './FormControl';\nimport type { Constructor } from './FormControl';\nimport type { Handle, Validator } from './FormGroup';\nimport type { AbstractControl } from './AbstractControl';\n\ntype UseForm<T extends Record<string, unknown>> = {\n form: { [K in keyof T]: Constructor<T[K]> };\n handle: Handle<T>;\n validator?: Validator<T>;\n}\n\nfunction makingControls<T extends Record<string, unknown>>(form: { [K in keyof T]: Constructor<T[K]> }) {\n return Object.entries(form)\n .reduce((acc, data) => {\n const key = data[0] as keyof T;\n const value = data[1] as Constructor<T[keyof T]>;\n\n acc[key] = new FormControl(value);\n\n return acc;\n }, {} as AbstractControl<T>);\n}\n\nexport default function useForm<T extends Record<any, unknown>>({\n form,\n handle,\n validator\n}: UseForm<T>) {\n const [formGroup, setFormGroup] = useState<FormGroup<T>>(\n new FormGroup(\n makingControls(form),\n handle,\n validator\n )\n );\n\n const hydrate = (form: FormGroup<T>) => {\n setFormGroup(prev => {\n const controls = form.controls;\n\n const newFormGroup = new FormGroup(controls, handle, validator);\n newFormGroup.hydrate = prev.hydrate;\n\n return newFormGroup;\n });\n };\n\n formGroup.hydrate = hydrate;\n\n return formGroup;\n}"],"names":["FormContext","createContext","Form","formGroup","debug","children","props","submit","event","jsxs","jsx","useFormGroup","context","useContext","useControl","controlName","value","data","Control","field","action","control","update","child","getValue","e","cloneElement","FormGroup","controls","handle","validator","fn","validity","c","values","key","prop","arg","partial","k","error","FormControl","defaultValue","type","validators","errors","v","makingControls","form","acc","useForm","setFormGroup","useState","hydrate","prev","newFormGroup"],"mappings":"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"}
1
+ {"version":3,"file":"useForm-TyKbw7O8.cjs","sources":["../../src/lab/Form/Form.tsx","../../src/lab/Form/useFormGroup.ts","../../src/lab/Form/useControl.ts","../../src/lab/Form/Control.tsx","../../src/lab/Form/FormGroup.ts","../../src/lab/Form/FormControl.ts","../../src/lab/Form/useForm.ts"],"sourcesContent":["import { createContext, SubmitEvent, HTMLAttributes } from 'react';\n\nimport type FormGroup from './FormGroup';\n\nexport const FormContext = createContext<FormGroup<any> | null>(null);\n\ninterface FormProps<T extends Record<string, any>> extends HTMLAttributes<HTMLFormElement> {\n formGroup: FormGroup<T>;\n debug?: boolean;\n}\n\nexport default function Form<T extends Record<string, any>>({\n formGroup,\n debug = false,\n children,\n ...props\n}: FormProps<T>) {\n const submit = (event: SubmitEvent<HTMLFormElement>) => {\n event.preventDefault();\n formGroup.submit();\n };\n\n return (\n <FormContext value={formGroup}>\n <form\n {...props}\n style={{ width: '100%', ...props.style }}\n onSubmit={submit}\n noValidate\n >\n {children}\n </form>\n {\n debug && (\n <pre style={{\n width: '100%',\n maxHeight: 350,\n padding: 15,\n borderRadius: 4,\n overflow: 'auto',\n color: '#333',\n background: '#e5e5e5',\n boxShadow: '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)',\n }}>\n {JSON.stringify(formGroup, null, 2)}\n </pre>\n )\n }\n </FormContext>\n );\n}","import { useContext } from 'react';\n\nimport type FormGroup from './FormGroup';\nimport { FormContext } from './Form';\n\nexport default function useFormGroup<T extends Record<string, any>>() {\n const context = useContext(FormContext);\n\n if (!context) throw new Error('useFormGroup must be used inside <FormProvider> (or <Form />).');\n\n return context as FormGroup<T>;\n}","import useFormGroup from './useFormGroup';\n\nexport default function useControl<\n T extends Record<string, any>,\n K extends keyof T = keyof T,\n>(controlName: K) {\n const formGroup = useFormGroup<T>();\n const control = formGroup.controls[controlName];\n\n const update = (value: T[K]) => {\n formGroup.setValues((data) => {\n data[controlName] = value;\n\n return data;\n });\n };\n\n return { control, update };\n}","import { ChangeEvent, cloneElement, InputEvent, InputHTMLAttributes, ReactElement } from 'react';\n\nimport useControl from './useControl';\nimport type { AbstractControl } from './AbstractControl';\n\ninterface ControlProps<\n T extends Record<string, any>,\n K extends keyof T,\n> {\n controlName: K;\n action?: 'change' | 'input' | 'blur';\n field: (control: AbstractControl<T>[K]) => React.JSX.Element;\n}\n\nexport default function Control<\n T extends Record<string, any>,\n K extends keyof T\n>({\n controlName,\n field,\n action = 'input'\n}: ControlProps<T, K>) {\n const { control, update } = useControl<T, K>(controlName);\n\n const renderChildren = (child: ReactElement<InputHTMLAttributes<HTMLInputElement>>) => {\n const getValue = (e: ChangeEvent<HTMLInputElement> | InputEvent<HTMLInputElement>) => {\n if (['radio', 'checkbox'].includes(e.type)) { return e.target['checked']; }\n\n return e.target['value'];\n };\n\n return cloneElement(child, {\n onBlur: (e) => {\n if (action === 'blur') { update(getValue(e)); };\n\n if (child.props.onBlur) { child.props.onBlur(e); }\n },\n onInput: (e) => {\n if (action === 'input') { update(getValue(e)); };\n\n if (child.props.onInput) { child.props.onInput(e); }\n },\n onChange: (e) => {\n if (action === 'change') { update(getValue(e)); };\n\n if (child.props.onChange) { child.props.onChange(e); }\n },\n });\n };\n\n return (\n renderChildren(field(control))\n );\n}","import type { AbstractControl } from './AbstractControl';\nimport type FormControl from './FormControl';\n\ntype Hydrate<T extends Record<string, any>> = (data: FormGroup<T>) => void;\ntype SetValues<F> = Partial<F> | ((values: F) => Partial<F>);\n\nexport type Validator<T extends Record<string, any>> = Partial<{\n [K in keyof T]: (data: FormGroup<T>) => string | void;\n}>\n\nexport interface Handle<T extends Record<string, any>> {\n change?: (form: FormGroup<T>) => void;\n submit?: (form: FormGroup<T>) => void;\n}\n\nexport default class FormGroup<T extends Record<string, any>> {\n private _valid = false;\n private _hydrate!: Hydrate<T>;\n\n constructor(\n public controls: AbstractControl<T>,\n public handle: Handle<T>,\n public validator?: Validator<T>,\n ) { }\n\n /**\n * Atualiza o estado interno do componente.\n * @private\n * @description Este método é usado internamente pela biblioteca.\n * Para atualizar valores externamente, use {@link setValues}.\n*/\n get hydrate() { return this._hydrate; }\n set hydrate(fn: (values: FormGroup<T>) => any) { this._hydrate = fn; }\n\n get isValid(): boolean { return this._valid; }\n set isValid(validity: boolean) { this._valid = validity; }\n\n get errors() {\n return Object.values<FormControl<T[keyof T]>>(this.controls)\n .filter(c => c.error);\n }\n\n get values(): T {\n const values: Record<string, any> = {};\n\n this.eachControl((control, key) => ({ [key as string]: control.value }))\n .forEach(control => { for (const prop in control) { values[prop] = control[prop]; } });\n\n return values as T;\n }\n\n public setValues(fn: SetValues<T>): void;\n public setValues(partialForm: Partial<T>): void;\n public setValues(arg: Partial<T> | SetValues<T>) {\n const partial =\n typeof arg === 'function'\n ? arg(this.values)\n : arg;\n\n for (const key of Object.keys(partial)) {\n this.controls[key].value = partial[key] as T[keyof T];\n }\n\n this.validate();\n\n this.hydrate(this);\n\n if (!this.handle.change) { return; }\n\n this.handle.change(this);\n }\n\n private eachControl(fn: <K extends keyof T>(control: FormControl<T[K]>, key?: K) => any) {\n return Object.keys(this.controls).map(k => fn(this.controls[k], k));\n }\n\n public submit() {\n if (!this.handle.submit) { return; }\n\n this.eachControl((control) => { control.dirty = true; });\n\n this.validate();\n\n this.hydrate(this);\n this.handle.submit(this);\n }\n\n public reset() {\n this.eachControl((control) => control.reset());\n this.hydrate(this);\n }\n\n public validate() {\n Object.entries(this.controls).map(([key, control]) => {\n let error = control.validate();\n\n if (this.validator && this.validator[key]) {\n error = this.validator[key](this) || '';\n }\n\n control.error = error;\n });\n\n this.isValid = !this.errors.length;\n this.hydrate(this);\n }\n}","type Type = 'text' | 'email';\ntype Validator<C> = (control: FormControl<C>) => string | false | void;\n\ntype Data<T> = {\n defaultValue: T;\n type?: Type;\n validators?: Validator<T>[];\n}\n\nexport type Constructor<V> = ConstructorParameters<typeof FormControl<V>>[number];\n\nexport default class FormControl<V> implements Pick<Data<V>, 'type'> {\n private _value!: V;\n private defaultValue: V;\n private validators: Validator<V>[] = [];\n\n public type: Type;\n public error = '';\n public dirty = false;\n\n constructor({\n defaultValue,\n type = 'text',\n validators,\n }: Data<V>) {\n this.type = type;\n this._value = defaultValue;\n this.defaultValue = defaultValue;\n\n if (validators) { this.validators = validators; }\n }\n\n get value(): V { return this._value; }\n set value(value: V) {\n this.dirty = true;\n this._value = value;\n this.validate();\n }\n\n get isInvalid() { return Boolean(this.dirty && this.error); }\n\n public reset() {\n this.value = this.defaultValue;\n this.dirty = false;\n }\n\n public validate() {\n const errors = this.validators\n .map(v => v(this))\n .filter(Boolean);\n\n this.error = errors[0] || '';\n\n return this.error;\n }\n}\n","import { useState } from 'react';\n\nimport FormGroup from './FormGroup';\nimport FormControl from './FormControl';\nimport type { Constructor } from './FormControl';\nimport type { Handle, Validator } from './FormGroup';\nimport type { AbstractControl } from './AbstractControl';\n\ntype UseForm<T extends Record<string, any>> = {\n form: { [K in keyof T]: Constructor<T[K]> };\n handle: Handle<T>;\n validator?: Validator<T>;\n}\n\nfunction makingControls<T extends Record<string, any>>(form: { [K in keyof T]: Constructor<T[K]> }) {\n return Object.entries(form)\n .reduce((acc, data) => {\n const key = data[0] as keyof T;\n const value = data[1] as Constructor<T[keyof T]>;\n\n acc[key] = new FormControl(value);\n\n return acc;\n }, {} as AbstractControl<T>);\n}\n\nexport default function useForm<T extends Record<any, any>>({\n form,\n handle,\n validator\n}: UseForm<T>) {\n const [formGroup, setFormGroup] = useState<FormGroup<T>>(\n new FormGroup(\n makingControls(form),\n handle,\n validator\n )\n );\n\n const hydrate = (form: FormGroup<T>) => {\n setFormGroup(prev => {\n const controls = form.controls;\n\n const newFormGroup = new FormGroup(controls, handle, validator);\n newFormGroup.hydrate = prev.hydrate;\n\n return newFormGroup;\n });\n };\n\n formGroup.hydrate = hydrate;\n\n return formGroup;\n}"],"names":["FormContext","createContext","Form","formGroup","debug","children","props","submit","event","jsxs","jsx","useFormGroup","context","useContext","useControl","controlName","value","data","Control","field","action","control","update","child","getValue","e","cloneElement","FormGroup","controls","handle","validator","fn","validity","c","values","key","prop","arg","partial","k","error","FormControl","defaultValue","type","validators","errors","v","makingControls","form","acc","useForm","setFormGroup","useState","hydrate","prev","newFormGroup"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("react/jsx-runtime"),s=require("react"),n=require("../../chunks/index-DYxwT4uW.cjs"),a=require("../../chunks/joinClass-Jk3EszKD.cjs"),q=require("../../chunks/createComponent-CTufIEiN.cjs"),v=require("../../chunks/Card-B8XSgLaD.cjs"),y=require("../../chunks/CardContent-BivcVoIc.cjs"),_=require("../../chunks/Stack-beBM7a60.cjs"),N=require("../../chunks/ButtonIcon-Cz8zJH-E.cjs"),k=require("../../chunks/Icon-COl2Nhp9.cjs");require("../../chunks/useTheme-DoESyi5h.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/convertPathToColor-BlQMLS4V.cjs");function w({children:d,title:m,subtitle:f,isOpen:c,onClose:l,...u}){const[i,r]=s.useState({visible:!1,animation:"hide"}),o=s.useRef(null),x=300,C=a.joinClass(`${n.prefix}-modal`,`${n.prefix}-modal--${i.animation}`),j=a.joinClass(`${n.prefix}-modal__content`,u.className),p=a.joinClass(`${n.prefix}-modal__backdrop`,`${n.prefix}-modal__backdrop--${i.animation}`);s.useEffect(()=>(document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}),[]),s.useEffect(()=>(c?b():h(),()=>{o.current&&(clearTimeout(o.current),o.current=null)}),[c]);const b=()=>{r(e=>({...e,visible:!0})),o.current=setTimeout(()=>{r(e=>({...e,animation:"show"})),document.body.style.overflow="hidden"},100)},h=()=>{r(e=>({...e,animation:"hide"})),o.current=setTimeout(()=>{r(e=>({...e,visible:!1})),document.body.style.overflow=""},x)};return i.visible&&t.jsx("div",{className:p,onClick:l,children:t.jsx("div",{className:`${n.prefix}-modal__container`,children:t.jsx(v.Card,{className:C,children:t.jsxs(y.CardContent,{onClick:e=>e.stopPropagation(),children:[t.jsxs(_.Stack,{flexDirection:"row",alignItems:"flex-start",justifyContent:"space-between",style:{flexWrap:"nowrap"},children:[t.jsxs("div",{children:[m,f]}),t.jsx(N.ButtonIcon,{color:"primary",onClick:l,children:t.jsx(k.Icon,{name:"times",color:"text.secondary"})})]}),t.jsx("div",{...u,className:j,children:d})]})})})})}const I=q.createComponent(w);exports.default=I;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("react"),o=require("../../chunks/index-DYxwT4uW.cjs"),f=require("../../chunks/joinClass-Jk3EszKD.cjs"),x=require("../../chunks/createComponent-CTufIEiN.cjs"),v=require("../../chunks/Card-B8XSgLaD.cjs"),_=require("../../chunks/CardContent-BivcVoIc.cjs"),C=require("../../chunks/Stack-beBM7a60.cjs"),g=require("../../chunks/ButtonIcon-Cz8zJH-E.cjs"),M=require("../../chunks/Icon-COl2Nhp9.cjs");require("../../chunks/useTheme-DoESyi5h.cjs");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");require("../../chunks/convertPathToColor-BlQMLS4V.cjs");function N({children:n,title:c,subtitle:l,isOpen:u,onClose:i,...m}){const[d,a]=s.useState({visible:!1,animation:"hide"}),r=s.useRef(null),p=300,j=f.joinClass(`${o.prefix}-modal`,`${o.prefix}-modal--${d.animation}`),y=f.joinClass(`${o.prefix}-modal__content`,m.className),b=f.joinClass(`${o.prefix}-modal__backdrop`,`${o.prefix}-modal__backdrop--${d.animation}`);s.useEffect(()=>(document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}),[]),s.useEffect(()=>(u?h():q(),()=>{r.current&&(clearTimeout(r.current),r.current=null)}),[u]);const h=()=>{a(t=>({...t,visible:!0})),r.current=setTimeout(()=>{a(t=>({...t,animation:"show"})),document.body.style.overflow="hidden"},100)},q=()=>{a(t=>({...t,animation:"hide"})),r.current=setTimeout(()=>{a(t=>({...t,visible:!1})),document.body.style.overflow=""},p)};return d.visible&&e.jsx("div",{className:b,onClick:i,children:e.jsx("div",{className:`${o.prefix}-modal__container`,children:e.jsx(v.Card,{className:j,children:e.jsxs(_.CardContent,{onClick:t=>t.stopPropagation(),children:[e.jsxs(C.Stack,{flexDirection:"row",alignItems:"flex-start",justifyContent:"space-between",style:{flexWrap:"nowrap"},children:[e.jsxs("div",{children:[c,l]}),e.jsx(g.ButtonIcon,{color:"primary",onClick:i,children:e.jsx(M.Icon,{name:"times",color:"text.secondary"})})]}),e.jsx("div",{...m,className:y,children:n})]})})})})}const k=x.createComponent(N);function w({children:n}){return e.jsx(C.Stack,{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",children:n})}const I=x.createComponent(w);function $({open:n=!1}={}){const[c,l]=s.useState(n);return[c,()=>l(i=>!i)]}exports.Modal=k;exports.ModalFooter=I;exports.useModal=$;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/feedback/Modal/Modal.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\nimport { Card, CardContent } from '@/display/Card';\nimport Stack from '@/layout/Stack';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Icon from '@/display/Icon';\n\nimport '@iziui/styles/components/Modal.scss';\n\ntype AnimationClass = 'show' | 'hide';\ntype Config = { animation: AnimationClass, visible: boolean };\n\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: React.JSX.Element;\n subtitle?: React.JSX.Element;\n}\n\nfunction Modal({ children, title, subtitle, isOpen, onClose, ...props }: ModalProps) {\n const [config, setConfig] = useState<Config>({ visible: false, animation: 'hide' });\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const ANIMATION_DURATION = 300;\n\n const className = joinClass(\n `${prefix}-modal`,\n `${prefix}-modal--${config.animation}`\n );\n const classNameContent = joinClass(\n `${prefix}-modal__content`,\n props.className\n );\n const backdropClassName = joinClass(\n `${prefix}-modal__backdrop`,\n `${prefix}-modal__backdrop--${config.animation}`\n );\n\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = 'auto';\n };\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n handleOpen();\n } else {\n handleClose();\n }\n\n return () => {\n if (!timeoutRef.current) { return; }\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n };\n }, [isOpen]);\n\n const handleOpen = () => {\n setConfig(prev => ({ ...prev, visible: true }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, animation: 'show' }));\n document.body.style.overflow = 'hidden';\n }, 100);\n };\n\n const handleClose = () => {\n setConfig(prev => ({ ...prev, animation: 'hide' }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, visible: false }));\n document.body.style.overflow = '';\n }, ANIMATION_DURATION);\n };\n\n return (\n config.visible && (\n <div className={backdropClassName} onClick={onClose}>\n <div className={`${prefix}-modal__container`}>\n <Card className={className}>\n <CardContent onClick={(e) => e.stopPropagation()}>\n <Stack\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n style={{ flexWrap: 'nowrap' }}\n >\n <div>\n {title}\n {subtitle}\n </div>\n <ButtonIcon color=\"primary\" onClick={onClose}>\n <Icon name=\"times\" color=\"text.secondary\" />\n </ButtonIcon>\n </Stack>\n <div\n {...props}\n className={classNameContent}\n >\n {children}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n );\n}\n\nexport default createComponent(Modal);\n"],"names":["Modal","children","title","subtitle","isOpen","onClose","props","config","setConfig","useState","timeoutRef","useRef","ANIMATION_DURATION","className","joinClass","prefix","classNameContent","backdropClassName","useEffect","handleOpen","handleClose","prev","jsx","Card","jsxs","CardContent","Stack","ButtonIcon","Icon","Modal_default","createComponent"],"mappings":"gvBAyBA,SAASA,EAAM,CAAE,SAAAC,EAAU,MAAAC,EAAO,SAAAC,EAAU,OAAAC,EAAQ,QAAAC,EAAS,GAAGC,GAAqB,CACnF,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAiB,CAAE,QAAS,GAAO,UAAW,OAAQ,EAC5EC,EAAaC,EAAAA,OAA6C,IAAI,EAE9DC,EAAqB,IAErBC,EAAYC,EAAAA,UAChB,GAAGC,EAAAA,MAAM,SACT,GAAGA,EAAAA,MAAM,WAAWR,EAAO,SAAS,EAAA,EAEhCS,EAAmBF,EAAAA,UACvB,GAAGC,EAAAA,MAAM,kBACTT,EAAM,SAAA,EAEFW,EAAoBH,EAAAA,UACxB,GAAGC,EAAAA,MAAM,mBACT,GAAGA,EAAAA,MAAM,qBAAqBR,EAAO,SAAS,EAAA,EAGhDW,EAAAA,UAAU,KACR,SAAS,KAAK,MAAM,SAAW,SAExB,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,MACjC,GACC,CAAA,CAAE,EAELA,EAAAA,UAAU,KACJd,EACFe,EAAA,EAEAC,EAAA,EAGK,IAAM,CACNV,EAAW,UAChB,aAAaA,EAAW,OAAO,EAC/BA,EAAW,QAAU,KACvB,GACC,CAACN,CAAM,CAAC,EAEX,MAAMe,EAAa,IAAM,CACvBX,MAAmB,CAAE,GAAGa,EAAM,QAAS,IAAO,EAC9CX,EAAW,QAAU,WAAW,IAAM,CACpCF,MAAmB,CAAE,GAAGa,EAAM,UAAW,QAAS,EAClD,SAAS,KAAK,MAAM,SAAW,QACjC,EAAG,GAAG,CACR,EAEMD,EAAc,IAAM,CACxBZ,MAAmB,CAAE,GAAGa,EAAM,UAAW,QAAS,EAClDX,EAAW,QAAU,WAAW,IAAM,CACpCF,MAAmB,CAAE,GAAGa,EAAM,QAAS,IAAQ,EAC/C,SAAS,KAAK,MAAM,SAAW,EACjC,EAAGT,CAAkB,CACvB,EAEA,OACEL,EAAO,SACLe,EAAAA,IAAC,MAAA,CAAI,UAAWL,EAAmB,QAASZ,EAC1C,SAAAiB,EAAAA,IAAC,MAAA,CAAI,UAAW,GAAGP,EAAAA,MAAM,oBACvB,SAAAO,EAAAA,IAACC,EAAAA,KAAA,CAAK,UAAAV,EACJ,SAAAW,EAAAA,KAACC,EAAAA,YAAA,CAAY,QAAU,GAAM,EAAE,gBAAA,EAC7B,SAAA,CAAAD,EAAAA,KAACE,EAAAA,MAAA,CACC,cAAc,MACd,WAAW,aACX,eAAe,gBACf,MAAO,CAAE,SAAU,QAAA,EAEnB,SAAA,CAAAF,OAAC,MAAA,CACE,SAAA,CAAAtB,EACAC,CAAA,EACH,EACAmB,EAAAA,IAACK,EAAAA,WAAA,CAAW,MAAM,UAAU,QAAStB,EACnC,SAAAiB,EAAAA,IAACM,EAAAA,KAAA,CAAK,KAAK,QAAQ,MAAM,gBAAA,CAAiB,CAAA,CAC5C,CAAA,CAAA,CAAA,EAEFN,EAAAA,IAAC,MAAA,CACE,GAAGhB,EACJ,UAAWU,EAEV,SAAAf,CAAA,CAAA,CACH,EACF,CAAA,CACF,EACF,EACF,CAGN,CAEA,MAAA4B,EAAeC,EAAAA,gBAAgB9B,CAAK"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/feedback/Modal/Modal.tsx","../../../src/feedback/Modal/ModalFooter.tsx","../../../src/feedback/Modal/useModal.ts"],"sourcesContent":["import { useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\nimport { Card, CardContent } from '@/display/Card';\nimport Stack from '@/layout/Stack';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Icon from '@/display/Icon';\n\nimport '@iziui/styles/components/Modal.scss';\n\ntype AnimationClass = 'show' | 'hide';\ntype Config = { animation: AnimationClass, visible: boolean };\n\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: React.JSX.Element;\n subtitle?: React.JSX.Element;\n}\n\nfunction Modal({ children, title, subtitle, isOpen, onClose, ...props }: ModalProps) {\n const [config, setConfig] = useState<Config>({ visible: false, animation: 'hide' });\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const ANIMATION_DURATION = 300;\n\n const className = joinClass(\n `${prefix}-modal`,\n `${prefix}-modal--${config.animation}`\n );\n const classNameContent = joinClass(\n `${prefix}-modal__content`,\n props.className\n );\n const backdropClassName = joinClass(\n `${prefix}-modal__backdrop`,\n `${prefix}-modal__backdrop--${config.animation}`\n );\n\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = 'auto';\n };\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n handleOpen();\n } else {\n handleClose();\n }\n\n return () => {\n if (!timeoutRef.current) { return; }\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n };\n }, [isOpen]);\n\n const handleOpen = () => {\n setConfig(prev => ({ ...prev, visible: true }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, animation: 'show' }));\n document.body.style.overflow = 'hidden';\n }, 100);\n };\n\n const handleClose = () => {\n setConfig(prev => ({ ...prev, animation: 'hide' }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, visible: false }));\n document.body.style.overflow = '';\n }, ANIMATION_DURATION);\n };\n\n return (\n config.visible && (\n <div className={backdropClassName} onClick={onClose}>\n <div className={`${prefix}-modal__container`}>\n <Card className={className}>\n <CardContent onClick={(e) => e.stopPropagation()}>\n <Stack\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n style={{ flexWrap: 'nowrap' }}\n >\n <div>\n {title}\n {subtitle}\n </div>\n <ButtonIcon color=\"primary\" onClick={onClose}>\n <Icon name=\"times\" color=\"text.secondary\" />\n </ButtonIcon>\n </Stack>\n <div\n {...props}\n className={classNameContent}\n >\n {children}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n );\n}\n\nexport default createComponent(Modal);\n","\nimport Stack from '@/layout/Stack';\n\nimport createComponent from '../../core/createComponent';\n\ninterface ModalFooterProps { children: React.ReactNode; }\n\nfunction ModalFooter({ children }: ModalFooterProps) {\n return (\n <Stack flexDirection=\"row\" justifyContent=\"flex-end\" alignItems=\"center\">\n {children}\n </Stack>\n );\n}\n\nexport default createComponent(ModalFooter);","import { useState } from 'react';\n\ninterface UseModalProps { open?: boolean; }\n\nexport default function useModal({ open = false }: UseModalProps = {}): [boolean, () => void] {\n const [_open, setOpen] = useState(open);\n\n const toggle = () => setOpen((prev) => !prev);\n\n return [_open, toggle];\n};"],"names":["Modal","children","title","subtitle","isOpen","onClose","props","config","setConfig","useState","timeoutRef","useRef","ANIMATION_DURATION","className","joinClass","prefix","classNameContent","backdropClassName","useEffect","handleOpen","handleClose","prev","jsx","Card","jsxs","CardContent","e","Stack","ButtonIcon","Icon","Modal_default","createComponent","ModalFooter","ModalFooter_default","useModal","open","_open","setOpen"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as i}from"react/jsx-runtime";import{useState as _,useRef as w,useEffect as d}from"react";import{p as t}from"../../chunks/index-CZ41y9Hn.js";import{j as s}from"../../chunks/joinClass-anSpaauN.js";import{c as x}from"../../chunks/createComponent-WNQRXK89.js";import{C as $}from"../../chunks/Card-DOsl4_nu.js";import{C as k}from"../../chunks/CardContent-C8ypE7yH.js";import{S as I}from"../../chunks/Stack-DK5pfu2w.js";import{B as j}from"../../chunks/ButtonIcon-CsX4oYeI.js";import{I as T}from"../../chunks/Icon-CCIgEwA9.js";import"../../chunks/useTheme-njpgklWP.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/convertPathToColor-D2SdAqGh.js";function g({children:f,title:u,subtitle:p,isOpen:l,onClose:m,...c}){const[a,r]=_({visible:!1,animation:"hide"}),n=w(null),h=300,C=s(`${t}-modal`,`${t}-modal--${a.animation}`),b=s(`${t}-modal__content`,c.className),v=s(`${t}-modal__backdrop`,`${t}-modal__backdrop--${a.animation}`);d(()=>(document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}),[]),d(()=>(l?y():N(),()=>{n.current&&(clearTimeout(n.current),n.current=null)}),[l]);const y=()=>{r(o=>({...o,visible:!0})),n.current=setTimeout(()=>{r(o=>({...o,animation:"show"})),document.body.style.overflow="hidden"},100)},N=()=>{r(o=>({...o,animation:"hide"})),n.current=setTimeout(()=>{r(o=>({...o,visible:!1})),document.body.style.overflow=""},h)};return a.visible&&e("div",{className:v,onClick:m,children:e("div",{className:`${t}-modal__container`,children:e($,{className:C,children:i(k,{onClick:o=>o.stopPropagation(),children:[i(I,{flexDirection:"row",alignItems:"flex-start",justifyContent:"space-between",style:{flexWrap:"nowrap"},children:[i("div",{children:[u,p]}),e(j,{color:"primary",onClick:m,children:e(T,{name:"times",color:"text.secondary"})})]}),e("div",{...c,className:b,children:f})]})})})})}const G=x(g);export{G as default};
1
+ import{jsx as e,jsxs as d}from"react/jsx-runtime";import{useState as C,useRef as w,useEffect as p}from"react";import{p as t}from"../../chunks/index-CZ41y9Hn.js";import{j as f}from"../../chunks/joinClass-anSpaauN.js";import{c as h}from"../../chunks/createComponent-WNQRXK89.js";import{C as I}from"../../chunks/Card-DOsl4_nu.js";import{C as M}from"../../chunks/CardContent-C8ypE7yH.js";import{S as y}from"../../chunks/Stack-DK5pfu2w.js";import{B as $}from"../../chunks/ButtonIcon-CsX4oYeI.js";import{I as k}from"../../chunks/Icon-CCIgEwA9.js";import"../../chunks/useTheme-njpgklWP.js";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Ripple-Bq9bxg4k.js";import"../../chunks/convertPathToColor-D2SdAqGh.js";function j({children:n,title:s,subtitle:l,isOpen:c,onClose:a,...u}){const[m,i]=C({visible:!1,animation:"hide"}),r=w(null),b=300,v=f(`${t}-modal`,`${t}-modal--${m.animation}`),_=f(`${t}-modal__content`,u.className),x=f(`${t}-modal__backdrop`,`${t}-modal__backdrop--${m.animation}`);p(()=>(document.body.style.overflow="hidden",()=>{document.body.style.overflow="auto"}),[]),p(()=>(c?N():g(),()=>{r.current&&(clearTimeout(r.current),r.current=null)}),[c]);const N=()=>{i(o=>({...o,visible:!0})),r.current=setTimeout(()=>{i(o=>({...o,animation:"show"})),document.body.style.overflow="hidden"},100)},g=()=>{i(o=>({...o,animation:"hide"})),r.current=setTimeout(()=>{i(o=>({...o,visible:!1})),document.body.style.overflow=""},b)};return m.visible&&e("div",{className:x,onClick:a,children:e("div",{className:`${t}-modal__container`,children:e(I,{className:v,children:d(M,{onClick:o=>o.stopPropagation(),children:[d(y,{flexDirection:"row",alignItems:"flex-start",justifyContent:"space-between",style:{flexWrap:"nowrap"},children:[d("div",{children:[s,l]}),e($,{color:"primary",onClick:a,children:e(k,{name:"times",color:"text.secondary"})})]}),e("div",{...u,className:_,children:n})]})})})})}const H=h(j);function T({children:n}){return e(y,{flexDirection:"row",justifyContent:"flex-end",alignItems:"center",children:n})}const J=h(T);function K({open:n=!1}={}){const[s,l]=C(n);return[s,()=>l(a=>!a)]}export{H as Modal,J as ModalFooter,K as useModal};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/feedback/Modal/Modal.tsx"],"sourcesContent":["import { useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\nimport { Card, CardContent } from '@/display/Card';\nimport Stack from '@/layout/Stack';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Icon from '@/display/Icon';\n\nimport '@iziui/styles/components/Modal.scss';\n\ntype AnimationClass = 'show' | 'hide';\ntype Config = { animation: AnimationClass, visible: boolean };\n\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: React.JSX.Element;\n subtitle?: React.JSX.Element;\n}\n\nfunction Modal({ children, title, subtitle, isOpen, onClose, ...props }: ModalProps) {\n const [config, setConfig] = useState<Config>({ visible: false, animation: 'hide' });\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const ANIMATION_DURATION = 300;\n\n const className = joinClass(\n `${prefix}-modal`,\n `${prefix}-modal--${config.animation}`\n );\n const classNameContent = joinClass(\n `${prefix}-modal__content`,\n props.className\n );\n const backdropClassName = joinClass(\n `${prefix}-modal__backdrop`,\n `${prefix}-modal__backdrop--${config.animation}`\n );\n\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = 'auto';\n };\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n handleOpen();\n } else {\n handleClose();\n }\n\n return () => {\n if (!timeoutRef.current) { return; }\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n };\n }, [isOpen]);\n\n const handleOpen = () => {\n setConfig(prev => ({ ...prev, visible: true }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, animation: 'show' }));\n document.body.style.overflow = 'hidden';\n }, 100);\n };\n\n const handleClose = () => {\n setConfig(prev => ({ ...prev, animation: 'hide' }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, visible: false }));\n document.body.style.overflow = '';\n }, ANIMATION_DURATION);\n };\n\n return (\n config.visible && (\n <div className={backdropClassName} onClick={onClose}>\n <div className={`${prefix}-modal__container`}>\n <Card className={className}>\n <CardContent onClick={(e) => e.stopPropagation()}>\n <Stack\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n style={{ flexWrap: 'nowrap' }}\n >\n <div>\n {title}\n {subtitle}\n </div>\n <ButtonIcon color=\"primary\" onClick={onClose}>\n <Icon name=\"times\" color=\"text.secondary\" />\n </ButtonIcon>\n </Stack>\n <div\n {...props}\n className={classNameContent}\n >\n {children}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n );\n}\n\nexport default createComponent(Modal);\n"],"names":["Modal","children","title","subtitle","isOpen","onClose","props","config","setConfig","useState","timeoutRef","useRef","ANIMATION_DURATION","className","joinClass","prefix","classNameContent","backdropClassName","useEffect","handleOpen","handleClose","prev","jsx","Card","jsxs","CardContent","e","Stack","ButtonIcon","Icon","Modal_default","createComponent"],"mappings":"0tBAyBA,SAASA,EAAM,CAAE,SAAAC,EAAU,MAAAC,EAAO,SAAAC,EAAU,OAAAC,EAAQ,QAAAC,EAAS,GAAGC,GAAqB,CACnF,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAiB,CAAE,QAAS,GAAO,UAAW,OAAQ,EAC5EC,EAAaC,EAA6C,IAAI,EAE9DC,EAAqB,IAErBC,EAAYC,EAChB,GAAGC,CAAM,SACT,GAAGA,CAAM,WAAWR,EAAO,SAAS,EAAA,EAEhCS,EAAmBF,EACvB,GAAGC,CAAM,kBACTT,EAAM,SAAA,EAEFW,EAAoBH,EACxB,GAAGC,CAAM,mBACT,GAAGA,CAAM,qBAAqBR,EAAO,SAAS,EAAA,EAGhDW,EAAU,KACR,SAAS,KAAK,MAAM,SAAW,SAExB,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,MACjC,GACC,CAAA,CAAE,EAELA,EAAU,KACJd,EACFe,EAAA,EAEAC,EAAA,EAGK,IAAM,CACNV,EAAW,UAChB,aAAaA,EAAW,OAAO,EAC/BA,EAAW,QAAU,KACvB,GACC,CAACN,CAAM,CAAC,EAEX,MAAMe,EAAa,IAAM,CACvBX,MAAmB,CAAE,GAAGa,EAAM,QAAS,IAAO,EAC9CX,EAAW,QAAU,WAAW,IAAM,CACpCF,MAAmB,CAAE,GAAGa,EAAM,UAAW,QAAS,EAClD,SAAS,KAAK,MAAM,SAAW,QACjC,EAAG,GAAG,CACR,EAEMD,EAAc,IAAM,CACxBZ,MAAmB,CAAE,GAAGa,EAAM,UAAW,QAAS,EAClDX,EAAW,QAAU,WAAW,IAAM,CACpCF,MAAmB,CAAE,GAAGa,EAAM,QAAS,IAAQ,EAC/C,SAAS,KAAK,MAAM,SAAW,EACjC,EAAGT,CAAkB,CACvB,EAEA,OACEL,EAAO,SACLe,EAAC,MAAA,CAAI,UAAWL,EAAmB,QAASZ,EAC1C,SAAAiB,EAAC,MAAA,CAAI,UAAW,GAAGP,CAAM,oBACvB,SAAAO,EAACC,EAAA,CAAK,UAAAV,EACJ,SAAAW,EAACC,EAAA,CAAY,QAAUC,GAAMA,EAAE,gBAAA,EAC7B,SAAA,CAAAF,EAACG,EAAA,CACC,cAAc,MACd,WAAW,aACX,eAAe,gBACf,MAAO,CAAE,SAAU,QAAA,EAEnB,SAAA,CAAAH,EAAC,MAAA,CACE,SAAA,CAAAtB,EACAC,CAAA,EACH,EACAmB,EAACM,EAAA,CAAW,MAAM,UAAU,QAASvB,EACnC,SAAAiB,EAACO,EAAA,CAAK,KAAK,QAAQ,MAAM,gBAAA,CAAiB,CAAA,CAC5C,CAAA,CAAA,CAAA,EAEFP,EAAC,MAAA,CACE,GAAGhB,EACJ,UAAWU,EAEV,SAAAf,CAAA,CAAA,CACH,EACF,CAAA,CACF,EACF,EACF,CAGN,CAEA,MAAA6B,EAAeC,EAAgB/B,CAAK"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/feedback/Modal/Modal.tsx","../../../src/feedback/Modal/ModalFooter.tsx","../../../src/feedback/Modal/useModal.ts"],"sourcesContent":["import { useEffect, useRef, useState, type HTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\nimport { Card, CardContent } from '@/display/Card';\nimport Stack from '@/layout/Stack';\nimport ButtonIcon from '@/actions/ButtonIcon';\nimport Icon from '@/display/Icon';\n\nimport '@iziui/styles/components/Modal.scss';\n\ntype AnimationClass = 'show' | 'hide';\ntype Config = { animation: AnimationClass, visible: boolean };\n\nexport interface ModalProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {\n isOpen: boolean;\n onClose: () => void;\n children: React.ReactNode;\n title?: React.JSX.Element;\n subtitle?: React.JSX.Element;\n}\n\nfunction Modal({ children, title, subtitle, isOpen, onClose, ...props }: ModalProps) {\n const [config, setConfig] = useState<Config>({ visible: false, animation: 'hide' });\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const ANIMATION_DURATION = 300;\n\n const className = joinClass(\n `${prefix}-modal`,\n `${prefix}-modal--${config.animation}`\n );\n const classNameContent = joinClass(\n `${prefix}-modal__content`,\n props.className\n );\n const backdropClassName = joinClass(\n `${prefix}-modal__backdrop`,\n `${prefix}-modal__backdrop--${config.animation}`\n );\n\n useEffect(() => {\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = 'auto';\n };\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n handleOpen();\n } else {\n handleClose();\n }\n\n return () => {\n if (!timeoutRef.current) { return; }\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n };\n }, [isOpen]);\n\n const handleOpen = () => {\n setConfig(prev => ({ ...prev, visible: true }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, animation: 'show' }));\n document.body.style.overflow = 'hidden';\n }, 100);\n };\n\n const handleClose = () => {\n setConfig(prev => ({ ...prev, animation: 'hide' }));\n timeoutRef.current = setTimeout(() => {\n setConfig(prev => ({ ...prev, visible: false }));\n document.body.style.overflow = '';\n }, ANIMATION_DURATION);\n };\n\n return (\n config.visible && (\n <div className={backdropClassName} onClick={onClose}>\n <div className={`${prefix}-modal__container`}>\n <Card className={className}>\n <CardContent onClick={(e) => e.stopPropagation()}>\n <Stack\n flexDirection=\"row\"\n alignItems=\"flex-start\"\n justifyContent=\"space-between\"\n style={{ flexWrap: 'nowrap' }}\n >\n <div>\n {title}\n {subtitle}\n </div>\n <ButtonIcon color=\"primary\" onClick={onClose}>\n <Icon name=\"times\" color=\"text.secondary\" />\n </ButtonIcon>\n </Stack>\n <div\n {...props}\n className={classNameContent}\n >\n {children}\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n )\n );\n}\n\nexport default createComponent(Modal);\n","\nimport Stack from '@/layout/Stack';\n\nimport createComponent from '../../core/createComponent';\n\ninterface ModalFooterProps { children: React.ReactNode; }\n\nfunction ModalFooter({ children }: ModalFooterProps) {\n return (\n <Stack flexDirection=\"row\" justifyContent=\"flex-end\" alignItems=\"center\">\n {children}\n </Stack>\n );\n}\n\nexport default createComponent(ModalFooter);","import { useState } from 'react';\n\ninterface UseModalProps { open?: boolean; }\n\nexport default function useModal({ open = false }: UseModalProps = {}): [boolean, () => void] {\n const [_open, setOpen] = useState(open);\n\n const toggle = () => setOpen((prev) => !prev);\n\n return [_open, toggle];\n};"],"names":["Modal","children","title","subtitle","isOpen","onClose","props","config","setConfig","useState","timeoutRef","useRef","ANIMATION_DURATION","className","joinClass","prefix","classNameContent","backdropClassName","useEffect","handleOpen","handleClose","prev","jsx","Card","jsxs","CardContent","e","Stack","ButtonIcon","Icon","Modal_default","createComponent","ModalFooter","ModalFooter_default","useModal","open","_open","setOpen"],"mappings":"0tBAyBA,SAASA,EAAM,CAAE,SAAAC,EAAU,MAAAC,EAAO,SAAAC,EAAU,OAAAC,EAAQ,QAAAC,EAAS,GAAGC,GAAqB,CACnF,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAiB,CAAE,QAAS,GAAO,UAAW,OAAQ,EAC5EC,EAAaC,EAA6C,IAAI,EAE9DC,EAAqB,IAErBC,EAAYC,EAChB,GAAGC,CAAM,SACT,GAAGA,CAAM,WAAWR,EAAO,SAAS,EAAA,EAEhCS,EAAmBF,EACvB,GAAGC,CAAM,kBACTT,EAAM,SAAA,EAEFW,EAAoBH,EACxB,GAAGC,CAAM,mBACT,GAAGA,CAAM,qBAAqBR,EAAO,SAAS,EAAA,EAGhDW,EAAU,KACR,SAAS,KAAK,MAAM,SAAW,SAExB,IAAM,CACX,SAAS,KAAK,MAAM,SAAW,MACjC,GACC,CAAA,CAAE,EAELA,EAAU,KACJd,EACFe,EAAA,EAEAC,EAAA,EAGK,IAAM,CACNV,EAAW,UAChB,aAAaA,EAAW,OAAO,EAC/BA,EAAW,QAAU,KACvB,GACC,CAACN,CAAM,CAAC,EAEX,MAAMe,EAAa,IAAM,CACvBX,MAAmB,CAAE,GAAGa,EAAM,QAAS,IAAO,EAC9CX,EAAW,QAAU,WAAW,IAAM,CACpCF,MAAmB,CAAE,GAAGa,EAAM,UAAW,QAAS,EAClD,SAAS,KAAK,MAAM,SAAW,QACjC,EAAG,GAAG,CACR,EAEMD,EAAc,IAAM,CACxBZ,MAAmB,CAAE,GAAGa,EAAM,UAAW,QAAS,EAClDX,EAAW,QAAU,WAAW,IAAM,CACpCF,MAAmB,CAAE,GAAGa,EAAM,QAAS,IAAQ,EAC/C,SAAS,KAAK,MAAM,SAAW,EACjC,EAAGT,CAAkB,CACvB,EAEA,OACEL,EAAO,SACLe,EAAC,MAAA,CAAI,UAAWL,EAAmB,QAASZ,EAC1C,SAAAiB,EAAC,MAAA,CAAI,UAAW,GAAGP,CAAM,oBACvB,SAAAO,EAACC,EAAA,CAAK,UAAAV,EACJ,SAAAW,EAACC,EAAA,CAAY,QAAUC,GAAMA,EAAE,gBAAA,EAC7B,SAAA,CAAAF,EAACG,EAAA,CACC,cAAc,MACd,WAAW,aACX,eAAe,gBACf,MAAO,CAAE,SAAU,QAAA,EAEnB,SAAA,CAAAH,EAAC,MAAA,CACE,SAAA,CAAAtB,EACAC,CAAA,EACH,EACAmB,EAACM,EAAA,CAAW,MAAM,UAAU,QAASvB,EACnC,SAAAiB,EAACO,EAAA,CAAK,KAAK,QAAQ,MAAM,gBAAA,CAAiB,CAAA,CAC5C,CAAA,CAAA,CAAA,EAEFP,EAAC,MAAA,CACE,GAAGhB,EACJ,UAAWU,EAEV,SAAAf,CAAA,CAAA,CACH,EACF,CAAA,CACF,EACF,EACF,CAGN,CAEA,MAAA6B,EAAeC,EAAgB/B,CAAK,EC7GpC,SAASgC,EAAY,CAAE,SAAA/B,GAA8B,CACnD,OACEqB,EAACK,GAAM,cAAc,MAAM,eAAe,WAAW,WAAW,SAC7D,SAAA1B,EACH,CAEJ,CAEA,MAAAgC,EAAeF,EAAgBC,CAAW,ECX1C,SAAwBE,EAAS,CAAE,KAAAC,EAAO,EAAA,EAAyB,CAAA,EAA2B,CAC5F,KAAM,CAACC,EAAOC,CAAO,EAAI5B,EAAS0B,CAAI,EAItC,MAAO,CAACC,EAFO,IAAMC,EAAShB,GAAS,CAACA,CAAI,CAEvB,CACvB"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");const o=require("./chunks/useTheme-DoESyi5h.cjs"),i=require("./chunks/Bounce-ByNbJjX0.cjs"),e=require("./chunks/useForm-TyKbw7O8.cjs"),a=require("./chunks/Fade-CM-5xRVt.cjs"),s=require("./chunks/Slide-D4aLHjYS.cjs"),u=require("./chunks/TableHeader-BEIISMsz.cjs"),d=require("./chunks/Zoom-BOnqwiDY.cjs"),r=require("./chunks/DrawerContent-XhAQ7dg_.cjs"),l=require("./chunks/useListenerResized-AwpsZLcP.cjs"),t=require("./chunks/useMenu-C0u9aTiR.cjs"),q=require("./chunks/useResize-B-oebgDR.cjs"),c=require("./chunks/Card-B8XSgLaD.cjs"),m=require("./chunks/CardContent-BivcVoIc.cjs"),n=require("./chunks/GridItem-wwo-SHGR.cjs"),C=require("./chunks/MenuButton-AyzSxRY0.cjs"),T=require("./chunks/Typography-CAQXUFSQ.cjs");require("react");require("./chunks/generateSupportColors-CTMoGhDf.cjs");require("./chunks/index-DYxwT4uW.cjs");require("./chunks/joinClass-Jk3EszKD.cjs");require("./chunks/createComponent-CTufIEiN.cjs");require("./chunks/Stack-beBM7a60.cjs");require("./chunks/ButtonIcon-Cz8zJH-E.cjs");require("./chunks/convertPathToColor-BlQMLS4V.cjs");require("./chunks/Ripple-Dy4i91j1.cjs");require("./chunks/Icon-COl2Nhp9.cjs");require("./chunks/uuid-omnJ9TjZ.cjs");exports.ThemeProvider=o.ThemeProvider;exports.createTheme=o.createTheme;exports.useTheme=o.useTheme;exports.Bounce=i.Bounce;exports.Control=e.Control;exports.Form=e.Form;exports.useControl=e.useControl;exports.useForm=e.useForm;exports.useFormGroup=e.useFormGroup;exports.Fade=a.Fade;exports.Slide=s.Slide;exports.Table=u.Table_default;exports.TableBody=u.TableBody;exports.TableCell=u.TableCell_default;exports.TableHeader=u.TableHeader;exports.Zoom=d.Zoom;exports.Drawer=r.Drawer_default;exports.DrawerContent=r.DrawerContent_default;exports.DrawerFooter=r.DrawerFooter_default;exports.DrawerHeader=r.DrawerHeader_default;exports.useDrawer=r.useDrawer;exports.useListenerResized=l.useListenerResized;exports.Menu=t.Menu;exports.useMenu=t.useMenu;exports.useResize=q.useResize;exports.Card=c.Card;exports.CardContent=m.CardContent;exports.Grid=n.Grid;exports.GridItem=n.GridItem;exports.MenuButton=C.MenuButton_default;exports.variants=T.variants;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./chunks/useTheme-DoESyi5h.cjs"),i=require("./chunks/Bounce-ByNbJjX0.cjs"),e=require("./chunks/useForm-TyKbw7O8.cjs"),a=require("./chunks/Fade-CM-5xRVt.cjs"),s=require("./chunks/Slide-D4aLHjYS.cjs"),u=require("./chunks/TableHeader-BEIISMsz.cjs"),d=require("./chunks/Zoom-BOnqwiDY.cjs"),r=require("./chunks/DrawerContent-XhAQ7dg_.cjs"),l=require("./chunks/useListenerResized-AwpsZLcP.cjs"),t=require("./chunks/useMenu-C0u9aTiR.cjs"),q=require("./chunks/useResize-B-oebgDR.cjs"),c=require("./chunks/Card-B8XSgLaD.cjs"),m=require("./chunks/CardContent-BivcVoIc.cjs"),n=require("./chunks/GridItem-wwo-SHGR.cjs"),C=require("./chunks/MenuButton-AyzSxRY0.cjs"),T=require("./chunks/Typography-CAQXUFSQ.cjs");require("react");require("react/jsx-runtime");require("./chunks/generateSupportColors-CTMoGhDf.cjs");require("./chunks/index-DYxwT4uW.cjs");require("./chunks/joinClass-Jk3EszKD.cjs");require("./chunks/createComponent-CTufIEiN.cjs");require("./chunks/Stack-beBM7a60.cjs");require("./chunks/ButtonIcon-Cz8zJH-E.cjs");require("./chunks/convertPathToColor-BlQMLS4V.cjs");require("./chunks/Ripple-Dy4i91j1.cjs");require("./chunks/Icon-COl2Nhp9.cjs");require("./chunks/uuid-omnJ9TjZ.cjs");exports.ThemeProvider=o.ThemeProvider;exports.createTheme=o.createTheme;exports.useTheme=o.useTheme;exports.Bounce=i.Bounce;exports.Control=e.Control;exports.Form=e.Form;exports.useControl=e.useControl;exports.useForm=e.useForm;exports.useFormGroup=e.useFormGroup;exports.Fade=a.Fade;exports.Slide=s.Slide;exports.Table=u.Table_default;exports.TableBody=u.TableBody;exports.TableCell=u.TableCell_default;exports.TableHeader=u.TableHeader;exports.Zoom=d.Zoom;exports.Drawer=r.Drawer_default;exports.DrawerContent=r.DrawerContent_default;exports.DrawerFooter=r.DrawerFooter_default;exports.DrawerHeader=r.DrawerHeader_default;exports.useDrawer=r.useDrawer;exports.useListenerResized=l.useListenerResized;exports.Menu=t.Menu;exports.useMenu=t.useMenu;exports.useResize=q.useResize;exports.Card=c.Card;exports.CardContent=m.CardContent;exports.Grid=n.Grid;exports.GridItem=n.GridItem;exports.MenuButton=C.MenuButton_default;exports.variants=T.variants;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import"react/jsx-runtime";import{T as C,c as l,u as T}from"./chunks/useTheme-njpgklWP.js";import{B as F}from"./chunks/Bounce-DP0PU3kr.js";import{C as c,F as w,u as M,a as B,b as G}from"./chunks/useForm-3oClzOJC.js";import{F as v}from"./chunks/Fade-spxq-W-Q.js";import{S as H}from"./chunks/Slide-BxEwoZ70.js";import{T as S,a as Z,b as y,c as I}from"./chunks/TableHeader-DRtoebsv.js";import{Z as P}from"./chunks/Zoom-DqgU4Wfv.js";import{D as j,a as k,b as q,c as A,u as E}from"./chunks/DrawerContent-B0yuNjrh.js";import{u as K}from"./chunks/useListenerResized-Bnqxrt7k.js";import{M as O,u as Q}from"./chunks/useMenu-BNL22pOQ.js";import{u as V}from"./chunks/useResize-BjM6tiAF.js";import{C as X}from"./chunks/Card-DOsl4_nu.js";import{C as _}from"./chunks/CardContent-C8ypE7yH.js";import{G as rr,a as er}from"./chunks/GridItem-CaoPZmBu.js";import{M as ar}from"./chunks/MenuButton-DLf22r80.js";import{v as tr}from"./chunks/Typography-BIZP_DtQ.js";import"react";import"./chunks/generateSupportColors-BN5t8dA-.js";import"./chunks/index-CZ41y9Hn.js";import"./chunks/joinClass-anSpaauN.js";import"./chunks/createComponent-WNQRXK89.js";import"./chunks/Stack-DK5pfu2w.js";import"./chunks/ButtonIcon-CsX4oYeI.js";import"./chunks/convertPathToColor-D2SdAqGh.js";import"./chunks/Ripple-Bq9bxg4k.js";import"./chunks/Icon-CCIgEwA9.js";import"./chunks/uuid-dGvr9vBZ.js";export{F as Bounce,X as Card,_ as CardContent,c as Control,j as Drawer,k as DrawerContent,q as DrawerFooter,A as DrawerHeader,v as Fade,w as Form,rr as Grid,er as GridItem,O as Menu,ar as MenuButton,H as Slide,S as Table,Z as TableBody,y as TableCell,I as TableHeader,C as ThemeProvider,P as Zoom,l as createTheme,M as useControl,E as useDrawer,B as useForm,G as useFormGroup,K as useListenerResized,Q as useMenu,V as useResize,T as useTheme,tr as variants};
1
+ import{T as C,c as l,u as T}from"./chunks/useTheme-njpgklWP.js";import{B as F}from"./chunks/Bounce-DP0PU3kr.js";import{C as c,F as w,u as M,a as B,b as G}from"./chunks/useForm-3oClzOJC.js";import{F as v}from"./chunks/Fade-spxq-W-Q.js";import{S as H}from"./chunks/Slide-BxEwoZ70.js";import{T as S,a as Z,b as y,c as I}from"./chunks/TableHeader-DRtoebsv.js";import{Z as P}from"./chunks/Zoom-DqgU4Wfv.js";import{D as j,a as k,b as q,c as A,u as E}from"./chunks/DrawerContent-B0yuNjrh.js";import{u as K}from"./chunks/useListenerResized-Bnqxrt7k.js";import{M as O,u as Q}from"./chunks/useMenu-BNL22pOQ.js";import{u as V}from"./chunks/useResize-BjM6tiAF.js";import{C as X}from"./chunks/Card-DOsl4_nu.js";import{C as _}from"./chunks/CardContent-C8ypE7yH.js";import{G as rr,a as er}from"./chunks/GridItem-CaoPZmBu.js";import{M as ar}from"./chunks/MenuButton-DLf22r80.js";import{v as tr}from"./chunks/Typography-BIZP_DtQ.js";import"react";import"react/jsx-runtime";import"./chunks/generateSupportColors-BN5t8dA-.js";import"./chunks/index-CZ41y9Hn.js";import"./chunks/joinClass-anSpaauN.js";import"./chunks/createComponent-WNQRXK89.js";import"./chunks/Stack-DK5pfu2w.js";import"./chunks/ButtonIcon-CsX4oYeI.js";import"./chunks/convertPathToColor-D2SdAqGh.js";import"./chunks/Ripple-Bq9bxg4k.js";import"./chunks/Icon-CCIgEwA9.js";import"./chunks/uuid-dGvr9vBZ.js";export{F as Bounce,X as Card,_ as CardContent,c as Control,j as Drawer,k as DrawerContent,q as DrawerFooter,A as DrawerHeader,v as Fade,w as Form,rr as Grid,er as GridItem,O as Menu,ar as MenuButton,H as Slide,S as Table,Z as TableBody,y as TableCell,I as TableHeader,C as ThemeProvider,P as Zoom,l as createTheme,M as useControl,E as useDrawer,B as useForm,G as useFormGroup,K as useListenerResized,Q as useMenu,V as useResize,T as useTheme,tr as variants};
2
2
  //# sourceMappingURL=index.js.map
package/dist/style.css CHANGED
@@ -14,9 +14,6 @@
14
14
  /* assets/index-tbLNWUoG.css */
15
15
  .iziui-skeleton{position:relative;overflow:hidden;background-color:var(--divider)}.iziui-skeleton--rounded{border-radius:var(--radius)}.iziui-skeleton--circular{border-radius:50%}.iziui-skeleton:after{position:absolute;inset:0;transform:translate(-100%);background-image:linear-gradient(90deg,#fff0 0,#fff3 20%,#ffffff80 60%,#fff0);animation:2s linear .5s infinite normal none running shimmer;content:""}@keyframes shimmer{0%{transform:translate(-100%)}50%{transform:translate(100%)}to{transform:translate(100%)}}
16
16
  /*$vite$:1*/
17
- /* assets/index-Rdw3YS4e.css */
18
- .iziui-modal{width:600px;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d;transition:all .3s cubic-bezier(.4,0,.2,1);transform:translateY(50px)}.iziui-modal--show{transform:translateY(0)}.iziui-modal__content{margin-top:16px}.iziui-modal__container{height:100%;outline:0px;display:flex;justify-content:center;align-items:center;padding:0 16px}.iziui-modal__backdrop{position:fixed;z-index:1300;inset:0;background-color:#000000a3;opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-modal__backdrop--show{opacity:1}
19
- /*$vite$:1*/
20
17
  /* assets/index-BeVKXeEI.css */
21
18
  .iziui-loading{display:inline-block;animation:circle-rotate 1.4s linear 0s infinite}.iziui-loading__svg{display:block}.iziui-loading__circle{stroke:currentcolor;stroke-dasharray:80px,200px;stroke-dashoffset:0;animation:circle-animation 1.4s ease-in-out 0s infinite}@keyframes circle-rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes circle-animation{0%{stroke-dasharray:1px,200px;stroke-dashoffset:0}50%{stroke-dasharray:100px,200px;stroke-dashoffset:-15px}to{stroke-dasharray:100px,200px;stroke-dashoffset:-125px}}
22
19
  /*$vite$:1*/
@@ -70,6 +67,9 @@
70
67
  /* assets/index-9edV_-Bq.css */
71
68
  .iziui-toast-container{top:15px;z-index:60;right:15px;position:fixed;display:flex;align-items:flex-end;flex-direction:column}@media only screen and (max-width:1199px){.iziui-toast-container{right:auto;left:50%;transform:translate(-50%)}}
72
69
  /*$vite$:1*/
70
+ /* assets/index-Rdw3YS4e.css */
71
+ .iziui-modal{width:600px;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d;transition:all .3s cubic-bezier(.4,0,.2,1);transform:translateY(50px)}.iziui-modal--show{transform:translateY(0)}.iziui-modal__content{margin-top:16px}.iziui-modal__container{height:100%;outline:0px;display:flex;justify-content:center;align-items:center;padding:0 16px}.iziui-modal__backdrop{position:fixed;z-index:1300;inset:0;background-color:#000000a3;opacity:0;transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-modal__backdrop--show{opacity:1}
72
+ /*$vite$:1*/
73
73
  /* assets/useMenu-Bmun71gn.css */
74
74
  .iziui-menu{position:absolute;word-break:break-all;white-space:pre-wrap;display:flex;flex-direction:column;z-index:4}.iziui-menu__overlay{position:fixed;height:100vh;width:100%;top:0;left:0;z-index:3;cursor:auto}.iziui-menu__card{box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d}.iziui-menu__card__content{overflow:auto;padding:8px 0}.iziui-menu--open{opacity:1;transform:translateY(0)}.iziui-menu--close{transform:translateY(-10px);opacity:0}.iziui-menu__item{border:none;padding:8px 16px;position:relative;white-space:nowrap;background-color:transparent;color:var(--text-primary);transition:all .3s cubic-bezier(.4,0,.2,1);font-size:16px;cursor:pointer;display:flex;align-items:center;justify-content:flex-start}.iziui-menu__item:hover{background-color:var(--divider)}.iziui-menu__item--primary{color:var(--primary)}.iziui-menu__item--primary:hover{background-color:var(--primary-opacity)}.iziui-menu__item--secondary{color:var(--secondary)}.iziui-menu__item--secondary:hover{background-color:var(--secondary-opacity)}.iziui-menu__item--info{color:var(--info)}.iziui-menu__item--info:hover{background-color:var(--info-opacity)}.iziui-menu__item--error{color:var(--error)}.iziui-menu__item--error:hover{background-color:var(--error-opacity)}.iziui-menu__item--warning{color:var(--warning)}.iziui-menu__item--warning:hover{background-color:var(--warning-opacity)}.iziui-menu__item--success{color:var(--success)}.iziui-menu__item--success:hover{background-color:var(--success-opacity)}
75
75
  /*$vite$:1*/
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("react/jsx-runtime");const e=require("../chunks/useTheme-DoESyi5h.cjs");require("react");require("../chunks/generateSupportColors-CTMoGhDf.cjs");exports.ThemeProvider=e.ThemeProvider;exports.createTheme=e.createTheme;exports.useTheme=e.useTheme;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../chunks/useTheme-DoESyi5h.cjs");require("react");require("react/jsx-runtime");require("../chunks/generateSupportColors-CTMoGhDf.cjs");exports.ThemeProvider=e.ThemeProvider;exports.createTheme=e.createTheme;exports.useTheme=e.useTheme;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- import"react/jsx-runtime";import{T as a,c as i,u as p}from"../chunks/useTheme-njpgklWP.js";import"react";import"../chunks/generateSupportColors-BN5t8dA-.js";export{a as ThemeProvider,i as createTheme,p as useTheme};
1
+ import{T as a,c as i,u as p}from"../chunks/useTheme-njpgklWP.js";import"react";import"react/jsx-runtime";import"../chunks/generateSupportColors-BN5t8dA-.js";export{a as ThemeProvider,i as createTheme,p as useTheme};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iziui/react",
3
- "version": "0.0.74-rc",
3
+ "version": "0.0.76-rc",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",