@iziui/react 0.0.71-rc → 0.0.73-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,5 @@
1
- export { default, type TableProps } from './Table';
1
+ export { default as Table } from './Table';
2
+ export { default as TableBody } from './TableBody';
3
+ export { default as TableCell } from './TableCell';
4
+ export { default as TableHeader } from './TableHeader';
2
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/display/Table/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/display/Table/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { HTMLAttributes } from 'react';
2
2
  import { default as FormGroup } from './FormGroup';
3
3
  export declare const FormContext: import('react').Context<FormGroup<any> | null>;
4
- interface FormProps<T extends Record<string, unknown>> extends HTMLAttributes<HTMLFormElement> {
4
+ interface FormProps<T extends Record<string, any>> extends HTMLAttributes<HTMLFormElement> {
5
5
  formGroup: FormGroup<T>;
6
6
  debug?: boolean;
7
7
  }
8
- export default function Form<T extends Record<string, unknown>>({ formGroup, debug, children, ...props }: FormProps<T>): import("react/jsx-runtime").JSX.Element;
8
+ export default function Form<T extends Record<string, any>>({ formGroup, debug, children, ...props }: FormProps<T>): import("react/jsx-runtime").JSX.Element;
9
9
  export {};
10
10
  //# sourceMappingURL=Form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/Form.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,WAAW,gDAA6C,CAAC;AAEtE,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,cAAc,CAAC,eAAe,CAAC;IAC5F,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAC9D,SAAS,EACT,KAAa,EACb,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,CAAC,CAAC,2CAkCd"}
1
+ {"version":3,"file":"Form.d.ts","sourceRoot":"","sources":["../../../../src/lab/Form/Form.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA8B,cAAc,EAAE,MAAM,OAAO,CAAC;AAEnE,OAAO,KAAK,SAAS,MAAM,aAAa,CAAC;AAEzC,eAAO,MAAM,WAAW,gDAA6C,CAAC;AAEtE,UAAU,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,SAAQ,cAAc,CAAC,eAAe,CAAC;IACxF,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAC1D,SAAS,EACT,KAAa,EACb,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,CAAC,CAAC,2CAkCd"}
@@ -0,0 +1,2 @@
1
+ "use strict";const l=require("react/jsx-runtime"),t=require("./index-DYxwT4uW.cjs"),n=require("./joinClass-Jk3EszKD.cjs"),r=require("./createComponent-CTufIEiN.cjs"),d=require("./Card-B8XSgLaD.cjs");function b({children:a,...e}){const s=n.joinClass(`${t.prefix}-table`,e.className);return l.jsx(d.Card,{style:{overflow:"auto"},children:l.jsx("table",{className:s,...e,children:a})})}const u=r.createComponent(b);function o({children:a,...e}){const s=n.joinClass(`${t.prefix}-table__body`,e.className);return l.jsx("tbody",{className:s,...e,children:a})}o.displayName="TableBody";function f({align:a="left",children:e,...s}){const i=n.joinClass(`${t.prefix}-table__cell`,`${t.prefix}-table__cell--${a}`);return l.jsx("td",{className:i,...s,children:e})}const x=r.createComponent(f);function c({children:a}){const e=n.joinClass(`${t.prefix}-table__header`);return l.jsx("thead",{className:e,children:l.jsx("tr",{children:a})})}c.displayName="TableHeader";exports.TableBody=o;exports.TableCell_default=x;exports.TableHeader=c;exports.Table_default=u;
2
+ //# sourceMappingURL=TableHeader-BEIISMsz.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHeader-BEIISMsz.cjs","sources":["../../src/display/Table/Table.tsx","../../src/display/Table/TableBody.tsx","../../src/display/Table/TableCell.tsx","../../src/display/Table/TableHeader.tsx"],"sourcesContent":["import type { TableHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\n\nimport { Card } from '../Card';\n\nimport '@iziui/styles/components/Table.scss';\n\nexport type TableProps = TableHTMLAttributes<HTMLTableElement>;\n\nfunction Table({ children, ...props }: TableProps) {\n const cls = joinClass(\n `${prefix}-table`,\n props.className\n );\n\n return (\n <Card style={{ overflow: 'auto' }}>\n <table className={cls} {...props}>\n {children}\n </table>\n </Card>\n );\n}\n\nexport default createComponent(Table);\n","import type { TableHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\ninterface TableBodyProps extends TableHTMLAttributes<HTMLTableSectionElement> {\n children: React.ReactNode;\n}\n\nfunction TableBody({ children, ...props }: TableBodyProps) {\n\n const cls = joinClass(\n `${prefix}-table__body`,\n props.className\n );\n\n return (\n <tbody className={cls} {...props}>\n {children}\n </tbody>\n );\n}\n\nTableBody.displayName = 'TableBody';\n\nexport default TableBody;","import { TdHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '../../core/createComponent';\n\ninterface TableCellProps extends TdHTMLAttributes<HTMLTableDataCellElement> {\n align?: 'left' | 'center' | 'right';\n children: React.JSX.Element | string | number | null;\n}\nfunction TableCell({ align = 'left', children, ...props }: TableCellProps) {\n const className = joinClass(\n `${prefix}-table__cell`,\n `${prefix}-table__cell--${align}`,\n );\n\n return (\n <td className={className} {...props}>\n {children}\n </td>\n );\n}\n\nexport default createComponent(TableCell);","import type { PropsWithChildren } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nfunction TableHeader({ children }: PropsWithChildren) {\n const className = joinClass(\n `${prefix}-table__header`,\n );\n\n return (\n <thead className={className}>\n <tr>\n {children}\n </tr>\n </thead>\n );\n}\n\nTableHeader.displayName = 'TableHeader';\n\nexport default TableHeader;"],"names":["Table","children","props","cls","joinClass","prefix","jsx","Card","Table_default","createComponent","TableBody","TableCell","align","className","TableCell_default","TableHeader"],"mappings":"uMAcA,SAASA,EAAM,CAAE,SAAAC,EAAU,GAAGC,GAAqB,CACjD,MAAMC,EAAMC,EAAAA,UACV,GAAGC,EAAAA,MAAM,SACTH,EAAM,SAAA,EAGR,OACEI,EAAAA,IAACC,EAAAA,KAAA,CAAK,MAAO,CAAE,SAAU,MAAA,EACvB,SAAAD,EAAAA,IAAC,QAAA,CAAM,UAAWH,EAAM,GAAGD,EACxB,SAAAD,EACH,EACF,CAEJ,CAEA,MAAAO,EAAeC,EAAAA,gBAAgBT,CAAK,ECnBpC,SAASU,EAAU,CAAE,SAAAT,EAAU,GAAGC,GAAyB,CAEzD,MAAMC,EAAMC,EAAAA,UACV,GAAGC,EAAAA,MAAM,eACTH,EAAM,SAAA,EAGR,aACG,QAAA,CAAM,UAAWC,EAAM,GAAGD,EACxB,SAAAD,EACH,CAEJ,CAEAS,EAAU,YAAc,YCZxB,SAASC,EAAU,CAAE,MAAAC,EAAQ,OAAQ,SAAAX,EAAU,GAAGC,GAAyB,CACzE,MAAMW,EAAYT,EAAAA,UAChB,GAAGC,EAAAA,MAAM,eACT,GAAGA,EAAAA,MAAM,iBAAiBO,CAAK,EAAA,EAGjC,OACEN,EAAAA,IAAC,KAAA,CAAG,UAAAO,EAAuB,GAAGX,EAC3B,SAAAD,EACH,CAEJ,CAEA,MAAAa,EAAeL,EAAAA,gBAAgBE,CAAS,ECnBxC,SAASI,EAAY,CAAE,SAAAd,GAA+B,CACpD,MAAMY,EAAYT,EAAAA,UAChB,GAAGC,EAAAA,MAAM,gBAAA,EAGX,aACG,QAAA,CAAM,UAAAQ,EACL,SAAAP,EAAAA,IAAC,KAAA,CACE,SAAAL,EACH,EACF,CAEJ,CAEAc,EAAY,YAAc"}
@@ -0,0 +1,2 @@
1
+ import{jsx as l}from"react/jsx-runtime";import{p as s}from"./index-CZ41y9Hn.js";import{j as o}from"./joinClass-anSpaauN.js";import{c as r}from"./createComponent-WNQRXK89.js";import{C as n}from"./Card-DOsl4_nu.js";function m({children:e,...a}){const t=o(`${s}-table`,a.className);return l(n,{style:{overflow:"auto"},children:l("table",{className:t,...a,children:e})})}const p=r(m);function b({children:e,...a}){const t=o(`${s}-table__body`,a.className);return l("tbody",{className:t,...a,children:e})}b.displayName="TableBody";function d({align:e="left",children:a,...t}){const c=o(`${s}-table__cell`,`${s}-table__cell--${e}`);return l("td",{className:c,...t,children:a})}const y=r(d);function i({children:e}){const a=o(`${s}-table__header`);return l("thead",{className:a,children:l("tr",{children:e})})}i.displayName="TableHeader";export{p as T,b as a,y as b,i as c};
2
+ //# sourceMappingURL=TableHeader-DRtoebsv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHeader-DRtoebsv.js","sources":["../../src/display/Table/Table.tsx","../../src/display/Table/TableBody.tsx","../../src/display/Table/TableCell.tsx","../../src/display/Table/TableHeader.tsx"],"sourcesContent":["import type { TableHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\n\nimport { Card } from '../Card';\n\nimport '@iziui/styles/components/Table.scss';\n\nexport type TableProps = TableHTMLAttributes<HTMLTableElement>;\n\nfunction Table({ children, ...props }: TableProps) {\n const cls = joinClass(\n `${prefix}-table`,\n props.className\n );\n\n return (\n <Card style={{ overflow: 'auto' }}>\n <table className={cls} {...props}>\n {children}\n </table>\n </Card>\n );\n}\n\nexport default createComponent(Table);\n","import type { TableHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\ninterface TableBodyProps extends TableHTMLAttributes<HTMLTableSectionElement> {\n children: React.ReactNode;\n}\n\nfunction TableBody({ children, ...props }: TableBodyProps) {\n\n const cls = joinClass(\n `${prefix}-table__body`,\n props.className\n );\n\n return (\n <tbody className={cls} {...props}>\n {children}\n </tbody>\n );\n}\n\nTableBody.displayName = 'TableBody';\n\nexport default TableBody;","import { TdHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '../../core/createComponent';\n\ninterface TableCellProps extends TdHTMLAttributes<HTMLTableDataCellElement> {\n align?: 'left' | 'center' | 'right';\n children: React.JSX.Element | string | number | null;\n}\nfunction TableCell({ align = 'left', children, ...props }: TableCellProps) {\n const className = joinClass(\n `${prefix}-table__cell`,\n `${prefix}-table__cell--${align}`,\n );\n\n return (\n <td className={className} {...props}>\n {children}\n </td>\n );\n}\n\nexport default createComponent(TableCell);","import type { PropsWithChildren } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nfunction TableHeader({ children }: PropsWithChildren) {\n const className = joinClass(\n `${prefix}-table__header`,\n );\n\n return (\n <thead className={className}>\n <tr>\n {children}\n </tr>\n </thead>\n );\n}\n\nTableHeader.displayName = 'TableHeader';\n\nexport default TableHeader;"],"names":["Table","children","props","cls","joinClass","prefix","jsx","Card","Table_default","createComponent","TableBody","TableCell","align","className","TableCell_default","TableHeader"],"mappings":"qNAcA,SAASA,EAAM,CAAE,SAAAC,EAAU,GAAGC,GAAqB,CACjD,MAAMC,EAAMC,EACV,GAAGC,CAAM,SACTH,EAAM,SAAA,EAGR,OACEI,EAACC,EAAA,CAAK,MAAO,CAAE,SAAU,MAAA,EACvB,SAAAD,EAAC,QAAA,CAAM,UAAWH,EAAM,GAAGD,EACxB,SAAAD,EACH,EACF,CAEJ,CAEA,MAAAO,EAAeC,EAAgBT,CAAK,ECnBpC,SAASU,EAAU,CAAE,SAAAT,EAAU,GAAGC,GAAyB,CAEzD,MAAMC,EAAMC,EACV,GAAGC,CAAM,eACTH,EAAM,SAAA,EAGR,SACG,QAAA,CAAM,UAAWC,EAAM,GAAGD,EACxB,SAAAD,EACH,CAEJ,CAEAS,EAAU,YAAc,YCZxB,SAASC,EAAU,CAAE,MAAAC,EAAQ,OAAQ,SAAAX,EAAU,GAAGC,GAAyB,CACzE,MAAMW,EAAYT,EAChB,GAAGC,CAAM,eACT,GAAGA,CAAM,iBAAiBO,CAAK,EAAA,EAGjC,OACEN,EAAC,KAAA,CAAG,UAAAO,EAAuB,GAAGX,EAC3B,SAAAD,EACH,CAEJ,CAEA,MAAAa,EAAeL,EAAgBE,CAAS,ECnBxC,SAASI,EAAY,CAAE,SAAAd,GAA+B,CACpD,MAAMY,EAAYT,EAChB,GAAGC,CAAM,gBAAA,EAGX,SACG,QAAA,CAAM,UAAAQ,EACL,SAAAP,EAAC,KAAA,CACE,SAAAL,EACH,EACF,CAEJ,CAEAc,EAAY,YAAc"}
@@ -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, unknown>> extends HTMLAttributes<HTMLFormElement> {\n formGroup: FormGroup<T>;\n debug?: boolean;\n}\n\nexport default function Form<T extends Record<string, unknown>>({\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, 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 +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, unknown>> extends HTMLAttributes<HTMLFormElement> {\n formGroup: FormGroup<T>;\n debug?: boolean;\n}\n\nexport default function Form<T extends Record<string, unknown>>({\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, 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,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("react/jsx-runtime"),n=require("../../chunks/index-DYxwT4uW.cjs"),o=require("../../chunks/joinClass-Jk3EszKD.cjs"),u=require("../../chunks/createComponent-CTufIEiN.cjs"),a=require("../../chunks/Card-B8XSgLaD.cjs");require("../../chunks/useTheme-DoESyi5h.cjs");require("react");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");function i({children:t,...e}){const s=o.joinClass(`${n.prefix}-table`,e.className);return r.jsx(a.Card,{style:{overflow:"auto"},children:r.jsx("table",{className:s,...e,children:t})})}const l=u.createComponent(i);exports.default=l;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../../chunks/TableHeader-BEIISMsz.cjs");require("react/jsx-runtime");require("../../chunks/index-DYxwT4uW.cjs");require("../../chunks/joinClass-Jk3EszKD.cjs");require("../../chunks/createComponent-CTufIEiN.cjs");require("../../chunks/useTheme-DoESyi5h.cjs");require("react");require("../../chunks/generateSupportColors-CTMoGhDf.cjs");require("../../chunks/Card-B8XSgLaD.cjs");require("../../chunks/Ripple-Dy4i91j1.cjs");exports.Table=e.Table_default;exports.TableBody=e.TableBody;exports.TableCell=e.TableCell_default;exports.TableHeader=e.TableHeader;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/display/Table/Table.tsx"],"sourcesContent":["import type { TableHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\n\nimport { Card } from '../Card';\n\nimport '@iziui/styles/components/Table.scss';\n\nexport type TableProps = TableHTMLAttributes<HTMLTableElement>;\n\nfunction Table({ children, ...props }: TableProps) {\n const cls = joinClass(\n `${prefix}-table`,\n props.className\n );\n\n return (\n <Card style={{ overflow: 'auto' }}>\n <table className={cls} {...props}>\n {children}\n </table>\n </Card>\n );\n}\n\nexport default createComponent(Table);\n"],"names":["Table","children","props","cls","joinClass","prefix","jsx","Card","Table_default","createComponent"],"mappings":"wfAcA,SAASA,EAAM,CAAE,SAAAC,EAAU,GAAGC,GAAqB,CACjD,MAAMC,EAAMC,EAAAA,UACV,GAAGC,EAAAA,MAAM,SACTH,EAAM,SAAA,EAGR,OACEI,EAAAA,IAACC,EAAAA,KAAA,CAAK,MAAO,CAAE,SAAU,MAAA,EACvB,SAAAD,EAAAA,IAAC,QAAA,CAAM,UAAWH,EAAM,GAAGD,EACxB,SAAAD,EACH,EACF,CAEJ,CAEA,MAAAO,EAAeC,EAAAA,gBAAgBT,CAAK"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{p as e}from"../../chunks/index-CZ41y9Hn.js";import{j as m}from"../../chunks/joinClass-anSpaauN.js";import{c as s}from"../../chunks/createComponent-WNQRXK89.js";import{C as i}from"../../chunks/Card-DOsl4_nu.js";import"../../chunks/useTheme-njpgklWP.js";import"react";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Ripple-Bq9bxg4k.js";function l({children:r,...o}){const a=m(`${e}-table`,o.className);return t(i,{style:{overflow:"auto"},children:t("table",{className:a,...o,children:r})})}const x=s(l);export{x as default};
1
+ import{T as s,a as d,b as c,c as f}from"../../chunks/TableHeader-DRtoebsv.js";import"react/jsx-runtime";import"../../chunks/index-CZ41y9Hn.js";import"../../chunks/joinClass-anSpaauN.js";import"../../chunks/createComponent-WNQRXK89.js";import"../../chunks/useTheme-njpgklWP.js";import"react";import"../../chunks/generateSupportColors-BN5t8dA-.js";import"../../chunks/Card-DOsl4_nu.js";import"../../chunks/Ripple-Bq9bxg4k.js";export{s as Table,d as TableBody,c as TableCell,f as TableHeader};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/display/Table/Table.tsx"],"sourcesContent":["import type { TableHTMLAttributes } from 'react';\n\nimport { prefix } from '@iziui/tokens/web/js';\n\nimport { joinClass } from '@iziui/core/utils/joinClass';\n\nimport createComponent from '@/core/createComponent';\n\nimport { Card } from '../Card';\n\nimport '@iziui/styles/components/Table.scss';\n\nexport type TableProps = TableHTMLAttributes<HTMLTableElement>;\n\nfunction Table({ children, ...props }: TableProps) {\n const cls = joinClass(\n `${prefix}-table`,\n props.className\n );\n\n return (\n <Card style={{ overflow: 'auto' }}>\n <table className={cls} {...props}>\n {children}\n </table>\n </Card>\n );\n}\n\nexport default createComponent(Table);\n"],"names":["Table","children","props","cls","joinClass","prefix","jsx","Card","Table_default","createComponent"],"mappings":"wZAcA,SAASA,EAAM,CAAE,SAAAC,EAAU,GAAGC,GAAqB,CACjD,MAAMC,EAAMC,EACV,GAAGC,CAAM,SACTH,EAAM,SAAA,EAGR,OACEI,EAACC,EAAA,CAAK,MAAO,CAAE,SAAU,MAAA,EACvB,SAAAD,EAAC,QAAA,CAAM,UAAWH,EAAM,GAAGD,EACxB,SAAAD,EACH,EACF,CAEJ,CAEA,MAAAO,EAAeC,EAAgBT,CAAK"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("./chunks/useTheme-DoESyi5h.cjs"),n=require("./chunks/Bounce-ByNbJjX0.cjs"),e=require("./chunks/useForm-TyKbw7O8.cjs"),i=require("./chunks/Fade-CM-5xRVt.cjs"),s=require("./chunks/Slide-D4aLHjYS.cjs"),a=require("./chunks/Zoom-BOnqwiDY.cjs"),r=require("./chunks/DrawerContent-XhAQ7dg_.cjs"),d=require("./chunks/useListenerResized-AwpsZLcP.cjs"),o=require("./chunks/useMenu-C0u9aTiR.cjs"),q=require("./chunks/useResize-B-oebgDR.cjs"),c=require("./chunks/Card-B8XSgLaD.cjs"),m=require("./chunks/CardContent-BivcVoIc.cjs"),t=require("./chunks/GridItem-wwo-SHGR.cjs"),C=require("./chunks/MenuButton-AyzSxRY0.cjs"),l=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/Stack-beBM7a60.cjs");require("./chunks/createComponent-CTufIEiN.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=u.ThemeProvider;exports.createTheme=u.createTheme;exports.useTheme=u.useTheme;exports.Bounce=n.Bounce;exports.Control=e.Control;exports.Form=e.Form;exports.useControl=e.useControl;exports.useForm=e.useForm;exports.useFormGroup=e.useFormGroup;exports.Fade=i.Fade;exports.Slide=s.Slide;exports.Zoom=a.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=d.useListenerResized;exports.Menu=o.Menu;exports.useMenu=o.useMenu;exports.useResize=q.useResize;exports.Card=c.Card;exports.CardContent=m.CardContent;exports.Grid=t.Grid;exports.GridItem=t.GridItem;exports.MenuButton=C.MenuButton_default;exports.variants=l.variants;
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;
2
2
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{T as C,c as F,u as D}from"./chunks/useTheme-njpgklWP.js";import{B as M}from"./chunks/Bounce-DP0PU3kr.js";import{C as G,F as T,u as h,a as l,b as v}from"./chunks/useForm-3oClzOJC.js";import{F as b}from"./chunks/Fade-spxq-W-Q.js";import{S as R}from"./chunks/Slide-BxEwoZ70.js";import{Z}from"./chunks/Zoom-DqgU4Wfv.js";import{D as I,a as L,b as P,c as g,u as j}from"./chunks/DrawerContent-B0yuNjrh.js";import{u as q}from"./chunks/useListenerResized-Bnqxrt7k.js";import{M as A,u as E}from"./chunks/useMenu-BNL22pOQ.js";import{u as K}from"./chunks/useResize-BjM6tiAF.js";import{C as O}from"./chunks/Card-DOsl4_nu.js";import{C as U}from"./chunks/CardContent-C8ypE7yH.js";import{G as W,a as X}from"./chunks/GridItem-CaoPZmBu.js";import{M as _}from"./chunks/MenuButton-DLf22r80.js";import{v as rr}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/Stack-DK5pfu2w.js";import"./chunks/createComponent-WNQRXK89.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{M as Bounce,O as Card,U as CardContent,G as Control,I as Drawer,L as DrawerContent,P as DrawerFooter,g as DrawerHeader,b as Fade,T as Form,W as Grid,X as GridItem,A as Menu,_ as MenuButton,R as Slide,C as ThemeProvider,Z as Zoom,F as createTheme,h as useControl,j as useDrawer,l as useForm,v as useFormGroup,q as useListenerResized,E as useMenu,K as useResize,D as useTheme,rr as variants};
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};
2
2
  //# sourceMappingURL=index.js.map
package/dist/style.css CHANGED
@@ -5,9 +5,6 @@
5
5
  /* assets/index-BvWznzJs.css */
6
6
  .iziui-tooltip{position:absolute;transition:all .3s cubic-bezier(.4,0,.2,1);border-radius:var(--radius);padding:10.8px 14.4px;font-size:12px;background:var(--text-primary);color:var(--background-default);box-shadow:0 1px 3px #0000001f,0 1px 2px #0000003d;text-align:center;opacity:0;transform:scale(.9);z-index:9999}.iziui-tooltip--visible{opacity:1;transform:scale(1)}
7
7
  /*$vite$:1*/
8
- /* assets/index-BihiZoyL.css */
9
- .iziui-table{width:100%;border-radius:var(--radius);overflow:hidden;border-spacing:0px;border-collapse:separate}.iziui-table__header td{font-size:.875rem;text-transform:uppercase;padding:10.8px 14.4px;font-weight:600;color:var(--text-primary);border-right:1px solid var(--divider);border-bottom:1px solid var(--divider);background-color:var(--background-default);transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-table__header td:last-child{border-right:0}.iziui-table__body tr{background-color:var(--background-default);transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-table__body tr:hover{background-color:var(--background-paper)}.iziui-table__body tr td{padding:10.8px 14.4px;font-size:.875rem;border:none;border-right:1px solid var(--divider);border-bottom:1px solid var(--divider);color:var(--text-primary);transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-table__body tr td:last-child{border-right:none}.iziui-table__body tr:last-child td{border-bottom:none}.iziui-table__cell--center{text-align:center}.iziui-table__cell--right{text-align:right}.iziui-table__cell--left{text-align:left}
10
- /*$vite$:1*/
11
8
  /* assets/index-CNn-Ebrn.css */
12
9
  .iziui-divider{height:1px;width:100%;background-color:var(--divider);margin-block-start:.5em;margin-block-end:.5em;border-radius:var(--radius)}
13
10
  /*$vite$:1*/
@@ -76,6 +73,9 @@
76
73
  /* assets/useMenu-Bmun71gn.css */
77
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)}
78
75
  /*$vite$:1*/
76
+ /* assets/TableHeader-BihiZoyL.css */
77
+ .iziui-table{width:100%;border-radius:var(--radius);overflow:hidden;border-spacing:0px;border-collapse:separate}.iziui-table__header td{font-size:.875rem;text-transform:uppercase;padding:10.8px 14.4px;font-weight:600;color:var(--text-primary);border-right:1px solid var(--divider);border-bottom:1px solid var(--divider);background-color:var(--background-default);transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-table__header td:last-child{border-right:0}.iziui-table__body tr{background-color:var(--background-default);transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-table__body tr:hover{background-color:var(--background-paper)}.iziui-table__body tr td{padding:10.8px 14.4px;font-size:.875rem;border:none;border-right:1px solid var(--divider);border-bottom:1px solid var(--divider);color:var(--text-primary);transition:all .3s cubic-bezier(.4,0,.2,1)}.iziui-table__body tr td:last-child{border-right:none}.iziui-table__body tr:last-child td{border-bottom:none}.iziui-table__cell--center{text-align:center}.iziui-table__cell--right{text-align:right}.iziui-table__cell--left{text-align:left}
78
+ /*$vite$:1*/
79
79
  /* assets/DrawerContent-CPC_3egd.css */
80
80
  .iziui-drawer{top:0;left:0;width:100%;height:100vh;position:fixed;overflow:hidden;transition:all ease-in-out .3s;z-index:50}.iziui-drawer__overlay{position:fixed;top:0;left:0;width:100%;height:100%;opacity:0;background-color:#000000a3;transition:all ease-in-out .3s;z-index:50}.iziui-drawer__overlay--show{opacity:1}.iziui-drawer__content{position:fixed;z-index:90;background-color:var(--background-default);transition:all ease-in-out .3s;width:570px;height:100vh}@media only screen and (max-width:899px){.iziui-drawer__content{width:100%}}.iziui-drawer__content__container{height:100%;padding:1rem;overflow-y:auto;overflow-x:hidden}.iziui-drawer__content__close-button{display:flex;padding:1rem}.iziui-drawer__content--right .iziui-drawer__content__close-button,.iziui-drawer__content--bottom .iziui-drawer__content__close-button{justify-content:flex-end}.iziui-drawer__content--left .iziui-drawer__content__close-button{justify-content:flex-start}.iziui-drawer__content--left{top:0;height:100%;transform:translate(-100%)}.iziui-drawer__content--left--show{transform:translate(0)}.iziui-drawer__content--right{top:0;right:0;height:100%;transform:translate(100%)}.iziui-drawer__content--right--show{transform:translate(0)}.iziui-drawer__content--bottom{bottom:0;width:100%;border-radius:var(--radius) var(--radius) 0 0;transform:translateY(100%);height:auto}.iziui-drawer__content--bottom--show{transform:translateY(0)}.iziui-drawer__header{width:100%;padding:1rem;box-sizing:border-box;border-bottom:1px solid var(--divider)}.iziui-drawer__footer{width:100%;padding:1rem;box-sizing:border-box;border-top:1px solid var(--divider)}
81
81
  /*$vite$:1*/
@@ -1,2 +1,2 @@
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;
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;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
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};
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};
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.71-rc",
3
+ "version": "0.0.73-rc",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",