@lattice-php/lattice 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +39 -0
- package/dist/action/components/action-group.d.ts +10 -0
- package/dist/action/components/action-group.js +79 -0
- package/dist/action/components/action-group.js.map +1 -0
- package/dist/action/components/action.d.ts +26 -0
- package/dist/action/components/action.js +87 -0
- package/dist/action/components/action.js.map +1 -0
- package/dist/action/effects.d.ts +30 -0
- package/dist/action/effects.js +44 -0
- package/dist/action/effects.js.map +1 -0
- package/dist/action/index.d.ts +1 -0
- package/dist/action/index.js +15 -0
- package/dist/action/index.js.map +1 -0
- package/dist/appearance/index.d.ts +9 -0
- package/dist/appearance/index.js +66 -0
- package/dist/appearance/index.js.map +1 -0
- package/dist/clipboard/index.d.ts +5 -0
- package/dist/clipboard/index.js +24 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/core/component-ref.d.ts +8 -0
- package/dist/core/component-ref.js +15 -0
- package/dist/core/component-ref.js.map +1 -0
- package/dist/core/components/badge.d.ts +19 -0
- package/dist/core/components/badge.js +32 -0
- package/dist/core/components/badge.js.map +1 -0
- package/dist/core/components/button.d.ts +23 -0
- package/dist/core/components/button.js +68 -0
- package/dist/core/components/button.js.map +1 -0
- package/dist/core/components/card.d.ts +19 -0
- package/dist/core/components/card.js +62 -0
- package/dist/core/components/card.js.map +1 -0
- package/dist/core/components/confirm-dialog.d.ts +13 -0
- package/dist/core/components/confirm-dialog.js +47 -0
- package/dist/core/components/confirm-dialog.js.map +1 -0
- package/dist/core/components/fragment.d.ts +12 -0
- package/dist/core/components/fragment.js +62 -0
- package/dist/core/components/fragment.js.map +1 -0
- package/dist/core/components/grid.d.ts +10 -0
- package/dist/core/components/grid.js +16 -0
- package/dist/core/components/grid.js.map +1 -0
- package/dist/core/components/heading.d.ts +11 -0
- package/dist/core/components/heading.js +39 -0
- package/dist/core/components/heading.js.map +1 -0
- package/dist/core/components/index.d.ts +1 -0
- package/dist/core/components/index.js +36 -0
- package/dist/core/components/index.js.map +1 -0
- package/dist/core/components/link.d.ts +18 -0
- package/dist/core/components/link.js +26 -0
- package/dist/core/components/link.js.map +1 -0
- package/dist/core/components/modal.d.ts +13 -0
- package/dist/core/components/modal.js +75 -0
- package/dist/core/components/modal.js.map +1 -0
- package/dist/core/components/segmented-control.d.ts +16 -0
- package/dist/core/components/segmented-control.js +30 -0
- package/dist/core/components/segmented-control.js.map +1 -0
- package/dist/core/components/segmented-pills.d.ts +13 -0
- package/dist/core/components/segmented-pills.js +31 -0
- package/dist/core/components/segmented-pills.js.map +1 -0
- package/dist/core/components/spinner.d.ts +2 -0
- package/dist/core/components/spinner.js +16 -0
- package/dist/core/components/spinner.js.map +1 -0
- package/dist/core/components/stack.d.ts +13 -0
- package/dist/core/components/stack.js +47 -0
- package/dist/core/components/stack.js.map +1 -0
- package/dist/core/components/tabs.d.ts +22 -0
- package/dist/core/components/tabs.js +118 -0
- package/dist/core/components/tabs.js.map +1 -0
- package/dist/core/components/text.d.ts +11 -0
- package/dist/core/components/text.js +18 -0
- package/dist/core/components/text.js.map +1 -0
- package/dist/core/props.d.ts +14 -0
- package/dist/core/props.js +30 -0
- package/dist/core/props.js.map +1 -0
- package/dist/core/registry.d.ts +26 -0
- package/dist/core/registry.js +36 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/renderer.d.ts +16 -0
- package/dist/core/renderer.js +61 -0
- package/dist/core/renderer.js.map +1 -0
- package/dist/core/types.d.ts +55 -0
- package/dist/core/types.js +0 -0
- package/dist/events/event-bridge.d.ts +14 -0
- package/dist/events/event-bridge.js +75 -0
- package/dist/events/event-bridge.js.map +1 -0
- package/dist/events/event-names.d.ts +21 -0
- package/dist/events/event-names.js +22 -0
- package/dist/events/event-names.js.map +1 -0
- package/dist/form/components/base/checkbox.d.ts +4 -0
- package/dist/form/components/base/checkbox.js +22 -0
- package/dist/form/components/base/checkbox.js.map +1 -0
- package/dist/form/components/base/field.d.ts +9 -0
- package/dist/form/components/base/field.js +38 -0
- package/dist/form/components/base/field.js.map +1 -0
- package/dist/form/components/base/input-error.d.ts +4 -0
- package/dist/form/components/base/input-error.js +14 -0
- package/dist/form/components/base/input-error.js.map +1 -0
- package/dist/form/components/base/input.d.ts +3 -0
- package/dist/form/components/base/input.js +16 -0
- package/dist/form/components/base/input.js.map +1 -0
- package/dist/form/components/base/label.d.ts +4 -0
- package/dist/form/components/base/label.js +16 -0
- package/dist/form/components/base/label.js.map +1 -0
- package/dist/form/components/base/password-input.d.ts +7 -0
- package/dist/form/components/base/password-input.js +29 -0
- package/dist/form/components/base/password-input.js.map +1 -0
- package/dist/form/components/base/submit-button.d.ts +6 -0
- package/dist/form/components/base/submit-button.js +46 -0
- package/dist/form/components/base/submit-button.js.map +1 -0
- package/dist/form/components/base/textarea.d.ts +3 -0
- package/dist/form/components/base/textarea.js +15 -0
- package/dist/form/components/base/textarea.js.map +1 -0
- package/dist/form/components/conditions.d.ts +25 -0
- package/dist/form/components/conditions.js +62 -0
- package/dist/form/components/conditions.js.map +1 -0
- package/dist/form/components/context.d.ts +20 -0
- package/dist/form/components/context.js +30 -0
- package/dist/form/components/context.js.map +1 -0
- package/dist/form/components/fields/checkbox.d.ts +16 -0
- package/dist/form/components/fields/checkbox.js +51 -0
- package/dist/form/components/fields/checkbox.js.map +1 -0
- package/dist/form/components/fields/choice.d.ts +14 -0
- package/dist/form/components/fields/choice.js +49 -0
- package/dist/form/components/fields/choice.js.map +1 -0
- package/dist/form/components/fields/date-input.d.ts +20 -0
- package/dist/form/components/fields/date-input.js +33 -0
- package/dist/form/components/fields/date-input.js.map +1 -0
- package/dist/form/components/fields/hidden-input.d.ts +10 -0
- package/dist/form/components/fields/hidden-input.js +12 -0
- package/dist/form/components/fields/hidden-input.js.map +1 -0
- package/dist/form/components/fields/number-input.d.ts +23 -0
- package/dist/form/components/fields/number-input.js +55 -0
- package/dist/form/components/fields/number-input.js.map +1 -0
- package/dist/form/components/fields/password-input.d.ts +29 -0
- package/dist/form/components/fields/password-input.js +73 -0
- package/dist/form/components/fields/password-input.js.map +1 -0
- package/dist/form/components/fields/rich-editor.d.ts +17 -0
- package/dist/form/components/fields/rich-editor.js +302 -0
- package/dist/form/components/fields/rich-editor.js.map +1 -0
- package/dist/form/components/fields/select.d.ts +23 -0
- package/dist/form/components/fields/select.js +182 -0
- package/dist/form/components/fields/select.js.map +1 -0
- package/dist/form/components/fields/submit-button.d.ts +10 -0
- package/dist/form/components/fields/submit-button.js +14 -0
- package/dist/form/components/fields/submit-button.js.map +1 -0
- package/dist/form/components/fields/text-input.d.ts +21 -0
- package/dist/form/components/fields/text-input.js +33 -0
- package/dist/form/components/fields/text-input.js.map +1 -0
- package/dist/form/components/fields/textarea.d.ts +20 -0
- package/dist/form/components/fields/textarea.js +32 -0
- package/dist/form/components/fields/textarea.js.map +1 -0
- package/dist/form/components/form-transport.d.ts +8 -0
- package/dist/form/components/form-transport.js +31 -0
- package/dist/form/components/form-transport.js.map +1 -0
- package/dist/form/components/form.d.ts +21 -0
- package/dist/form/components/form.js +126 -0
- package/dist/form/components/form.js.map +1 -0
- package/dist/form/components/index.d.ts +11 -0
- package/dist/form/components/index.js +12 -0
- package/dist/form/components/resolved-nodes.d.ts +6 -0
- package/dist/form/components/resolved-nodes.js +20 -0
- package/dist/form/components/resolved-nodes.js.map +1 -0
- package/dist/form/components/types.d.ts +7 -0
- package/dist/form/components/types.js +0 -0
- package/dist/form/components/use-controlled-field.d.ts +16 -0
- package/dist/form/components/use-controlled-field.js +33 -0
- package/dist/form/components/use-controlled-field.js.map +1 -0
- package/dist/form/components/use-dependent-field.d.ts +3 -0
- package/dist/form/components/use-dependent-field.js +18 -0
- package/dist/form/components/use-dependent-field.js.map +1 -0
- package/dist/form/components/use-field-commit.d.ts +14 -0
- package/dist/form/components/use-field-commit.js +30 -0
- package/dist/form/components/use-field-commit.js.map +1 -0
- package/dist/form/components/use-form-resolver.d.ts +2 -0
- package/dist/form/components/use-form-resolver.js +57 -0
- package/dist/form/components/use-form-resolver.js.map +1 -0
- package/dist/form/components/values.d.ts +7 -0
- package/dist/form/components/values.js +37 -0
- package/dist/form/components/values.js.map +1 -0
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.js +33 -0
- package/dist/form/index.js.map +1 -0
- package/dist/form/skeleton.d.ts +2 -0
- package/dist/form/skeleton.js +21 -0
- package/dist/form/skeleton.js.map +1 -0
- package/dist/generated/types.d.ts +17 -0
- package/dist/generated/types.js +0 -0
- package/dist/icons/default-icons.d.ts +3 -0
- package/dist/icons/default-icons.js +44 -0
- package/dist/icons/default-icons.js.map +1 -0
- package/dist/icons/dynamic-lucide-renderer.d.ts +2 -0
- package/dist/icons/dynamic-lucide-renderer.js +18 -0
- package/dist/icons/dynamic-lucide-renderer.js.map +1 -0
- package/dist/icons/icon-renderer.d.ts +14 -0
- package/dist/icons/icon-renderer.js +35 -0
- package/dist/icons/icon-renderer.js.map +1 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.js +2 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +14 -0
- package/dist/inertia.d.ts +17 -0
- package/dist/inertia.js +26 -0
- package/dist/inertia.js.map +1 -0
- package/dist/lattice.css +247 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.js +13 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/menu/index.d.ts +1 -0
- package/dist/menu/index.js +2 -0
- package/dist/menu/use-menu.d.ts +2 -0
- package/dist/menu/use-menu.js +9 -0
- package/dist/menu/use-menu.js.map +1 -0
- package/dist/page.d.ts +6 -0
- package/dist/page.js +30 -0
- package/dist/page.js.map +1 -0
- package/dist/provider.d.ts +7 -0
- package/dist/provider.js +19 -0
- package/dist/provider.js.map +1 -0
- package/dist/registry.d.ts +1 -0
- package/dist/registry.js +11 -0
- package/dist/registry.js.map +1 -0
- package/dist/table/bulk.d.ts +18 -0
- package/dist/table/bulk.js +44 -0
- package/dist/table/bulk.js.map +1 -0
- package/dist/table/components/bulk-bar.d.ts +11 -0
- package/dist/table/components/bulk-bar.js +76 -0
- package/dist/table/components/bulk-bar.js.map +1 -0
- package/dist/table/components/column-filter-control.d.ts +14 -0
- package/dist/table/components/column-filter-control.js +244 -0
- package/dist/table/components/column-filter-control.js.map +1 -0
- package/dist/table/components/column-header.d.ts +7 -0
- package/dist/table/components/column-header.js +37 -0
- package/dist/table/components/column-header.js.map +1 -0
- package/dist/table/components/filter-stack-bar.d.ts +7 -0
- package/dist/table/components/filter-stack-bar.js +35 -0
- package/dist/table/components/filter-stack-bar.js.map +1 -0
- package/dist/table/components/filter-value-input.d.ts +11 -0
- package/dist/table/components/filter-value-input.js +82 -0
- package/dist/table/components/filter-value-input.js.map +1 -0
- package/dist/table/components/pagination.d.ts +14 -0
- package/dist/table/components/pagination.js +67 -0
- package/dist/table/components/pagination.js.map +1 -0
- package/dist/table/components/sort-bar.d.ts +7 -0
- package/dist/table/components/sort-bar.js +43 -0
- package/dist/table/components/sort-bar.js.map +1 -0
- package/dist/table/components/table-action-node.d.ts +4 -0
- package/dist/table/components/table-action-node.js +24 -0
- package/dist/table/components/table-action-node.js.map +1 -0
- package/dist/table/components/table-cell.d.ts +5 -0
- package/dist/table/components/table-cell.js +63 -0
- package/dist/table/components/table-cell.js.map +1 -0
- package/dist/table/components/table.d.ts +3 -0
- package/dist/table/components/table.js +189 -0
- package/dist/table/components/table.js.map +1 -0
- package/dist/table/format.d.ts +3 -0
- package/dist/table/format.js +41 -0
- package/dist/table/format.js.map +1 -0
- package/dist/table/index.d.ts +1 -0
- package/dist/table/index.js +10 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/payload.d.ts +9 -0
- package/dist/table/payload.js +46 -0
- package/dist/table/payload.js.map +1 -0
- package/dist/table/query.d.ts +12 -0
- package/dist/table/query.js +83 -0
- package/dist/table/query.js.map +1 -0
- package/dist/table/types.d.ts +67 -0
- package/dist/table/types.js +0 -0
- package/dist/table/use-table-selection.d.ts +12 -0
- package/dist/table/use-table-selection.js +46 -0
- package/dist/table/use-table-selection.js.map +1 -0
- package/dist/table/use-table.d.ts +19 -0
- package/dist/table/use-table.js +157 -0
- package/dist/table/use-table.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +0 -0
- package/package.json +151 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getBooleanProp, getOptionalNumberProp, getStringProp } from "../../../core/props.js";
|
|
2
|
+
import { FormFieldFrame } from "../base/field.js";
|
|
3
|
+
import { useControlledField } from "../use-controlled-field.js";
|
|
4
|
+
import { Input } from "../base/input.js";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region resources/js/form/components/fields/text-input.tsx
|
|
7
|
+
var TextInputComponent = ({ node }) => {
|
|
8
|
+
const { name, value, error, hidden, required, readonly, disabled, commit } = useControlledField(node);
|
|
9
|
+
if (hidden) return null;
|
|
10
|
+
return /* @__PURE__ */ jsx(FormFieldFrame, {
|
|
11
|
+
error,
|
|
12
|
+
label: getStringProp(node.props, "label"),
|
|
13
|
+
name,
|
|
14
|
+
required,
|
|
15
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
16
|
+
autoComplete: getStringProp(node.props, "autoComplete"),
|
|
17
|
+
autoFocus: getBooleanProp(node.props, "autoFocus"),
|
|
18
|
+
disabled,
|
|
19
|
+
id: name,
|
|
20
|
+
name,
|
|
21
|
+
onChange: (event) => commit(event.target.value),
|
|
22
|
+
placeholder: getStringProp(node.props, "placeholder"),
|
|
23
|
+
readOnly: readonly,
|
|
24
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
25
|
+
type: getStringProp(node.props, "type", "text"),
|
|
26
|
+
value
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
export { TextInputComponent };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=text-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/text-input.tsx"],"sourcesContent":["import { getBooleanProp, getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { Input } from \"../base/input\";\nimport { useControlledField } from \"../use-controlled-field\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.text-input\": {\n autoComplete?: string;\n autoFocus?: boolean;\n conditions?: unknown;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n name?: string;\n placeholder?: string;\n readonly?: boolean;\n required?: boolean;\n tabIndex?: number;\n type?: \"email\" | \"text\";\n value?: string;\n };\n }\n}\n\nexport const TextInputComponent: RendererComponent<\"form.text-input\"> = ({ node }) => {\n const { name, value, error, hidden, required, readonly, disabled, commit } =\n useControlledField(node);\n\n if (hidden) {\n return null;\n }\n\n return (\n <FormFieldFrame\n error={error}\n label={getStringProp(node.props, \"label\")}\n name={name}\n required={required}\n >\n <Input\n autoComplete={getStringProp(node.props, \"autoComplete\")}\n autoFocus={getBooleanProp(node.props, \"autoFocus\")}\n disabled={disabled}\n id={name}\n name={name}\n onChange={(event) => commit(event.target.value)}\n placeholder={getStringProp(node.props, \"placeholder\")}\n readOnly={readonly}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n type={getStringProp(node.props, \"type\", \"text\")}\n value={value}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;AA0BA,IAAa,sBAA4D,EAAE,WAAW;CACpF,MAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WAChE,mBAAmB,IAAI;CAEzB,IAAI,QACF,OAAO;CAGT,OACE,oBAAC,gBAAD;EACS;EACP,OAAO,cAAc,KAAK,OAAO,OAAO;EAClC;EACI;YAEV,oBAAC,OAAD;GACE,cAAc,cAAc,KAAK,OAAO,cAAc;GACtD,WAAW,eAAe,KAAK,OAAO,WAAW;GACvC;GACV,IAAI;GACE;GACN,WAAW,UAAU,OAAO,MAAM,OAAO,KAAK;GAC9C,aAAa,cAAc,KAAK,OAAO,aAAa;GACpD,UAAU;GACV,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACtD,MAAM,cAAc,KAAK,OAAO,QAAQ,MAAM;GACvC;EACR,CAAA;CACa,CAAA;AAEpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
declare module '../../../../../core/types' {
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
"form.textarea": {
|
|
5
|
+
autoFocus?: boolean;
|
|
6
|
+
conditions?: unknown;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
label?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
readonly?: boolean;
|
|
13
|
+
required?: boolean;
|
|
14
|
+
rows?: number;
|
|
15
|
+
tabIndex?: number;
|
|
16
|
+
value?: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export declare const TextareaComponent: RendererComponent<"form.textarea">;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { getBooleanProp, getOptionalNumberProp, getStringProp } from "../../../core/props.js";
|
|
2
|
+
import { FormFieldFrame } from "../base/field.js";
|
|
3
|
+
import { useControlledField } from "../use-controlled-field.js";
|
|
4
|
+
import { Textarea } from "../base/textarea.js";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
//#region resources/js/form/components/fields/textarea.tsx
|
|
7
|
+
var TextareaComponent = ({ node }) => {
|
|
8
|
+
const { name, value, error, hidden, required, readonly, disabled, commit } = useControlledField(node);
|
|
9
|
+
if (hidden) return null;
|
|
10
|
+
return /* @__PURE__ */ jsx(FormFieldFrame, {
|
|
11
|
+
error,
|
|
12
|
+
label: getStringProp(node.props, "label"),
|
|
13
|
+
name,
|
|
14
|
+
required,
|
|
15
|
+
children: /* @__PURE__ */ jsx(Textarea, {
|
|
16
|
+
autoFocus: getBooleanProp(node.props, "autoFocus"),
|
|
17
|
+
disabled,
|
|
18
|
+
id: name,
|
|
19
|
+
name,
|
|
20
|
+
onChange: (event) => commit(event.target.value),
|
|
21
|
+
placeholder: getStringProp(node.props, "placeholder"),
|
|
22
|
+
readOnly: readonly,
|
|
23
|
+
rows: getOptionalNumberProp(node.props, "rows"),
|
|
24
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
25
|
+
value
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
//#endregion
|
|
30
|
+
export { TextareaComponent };
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","names":[],"sources":["../../../../resources/js/form/components/fields/textarea.tsx"],"sourcesContent":["import { getBooleanProp, getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { Textarea } from \"../base/textarea\";\nimport { useControlledField } from \"../use-controlled-field\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.textarea\": {\n autoFocus?: boolean;\n conditions?: unknown;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n name?: string;\n placeholder?: string;\n readonly?: boolean;\n required?: boolean;\n rows?: number;\n tabIndex?: number;\n value?: string;\n };\n }\n}\n\nexport const TextareaComponent: RendererComponent<\"form.textarea\"> = ({ node }) => {\n const { name, value, error, hidden, required, readonly, disabled, commit } =\n useControlledField(node);\n\n if (hidden) {\n return null;\n }\n\n return (\n <FormFieldFrame\n error={error}\n label={getStringProp(node.props, \"label\")}\n name={name}\n required={required}\n >\n <Textarea\n autoFocus={getBooleanProp(node.props, \"autoFocus\")}\n disabled={disabled}\n id={name}\n name={name}\n onChange={(event) => commit(event.target.value)}\n placeholder={getStringProp(node.props, \"placeholder\")}\n readOnly={readonly}\n rows={getOptionalNumberProp(node.props, \"rows\")}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n value={value}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;AAyBA,IAAa,qBAAyD,EAAE,WAAW;CACjF,MAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WAChE,mBAAmB,IAAI;CAEzB,IAAI,QACF,OAAO;CAGT,OACE,oBAAC,gBAAD;EACS;EACP,OAAO,cAAc,KAAK,OAAO,OAAO;EAClC;EACI;YAEV,oBAAC,UAAD;GACE,WAAW,eAAe,KAAK,OAAO,WAAW;GACvC;GACV,IAAI;GACE;GACN,WAAW,UAAU,OAAO,MAAM,OAAO,KAAK;GAC9C,aAAa,cAAc,KAAK,OAAO,aAAa;GACpD,UAAU;GACV,MAAM,sBAAsB,KAAK,OAAO,MAAM;GAC9C,UAAU,sBAAsB,KAAK,OAAO,UAAU;GAC/C;EACR,CAAA;CACa,CAAA;AAEpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared client transport for the lattice form endpoint. Every form sub-action
|
|
3
|
+
* (validation resolve, option search) POSTs to the same signed form URL, so the
|
|
4
|
+
* CSRF header, component-ref header, and request shape live here in one place.
|
|
5
|
+
*/
|
|
6
|
+
export declare const FORM_DEBOUNCE_MS = 250;
|
|
7
|
+
export declare function xsrfToken(): string;
|
|
8
|
+
export declare function postFormAction<T>(action: string, componentRef: string, body: Record<string, unknown>, signal: AbortSignal): Promise<T | null>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { withRefHeader } from "../../core/component-ref.js";
|
|
2
|
+
//#region resources/js/form/components/form-transport.ts
|
|
3
|
+
/**
|
|
4
|
+
* Shared client transport for the lattice form endpoint. Every form sub-action
|
|
5
|
+
* (validation resolve, option search) POSTs to the same signed form URL, so the
|
|
6
|
+
* CSRF header, component-ref header, and request shape live here in one place.
|
|
7
|
+
*/
|
|
8
|
+
var FORM_DEBOUNCE_MS = 250;
|
|
9
|
+
function xsrfToken() {
|
|
10
|
+
const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);
|
|
11
|
+
return match ? decodeURIComponent(match[1]) : "";
|
|
12
|
+
}
|
|
13
|
+
function postFormAction(action, componentRef, body, signal) {
|
|
14
|
+
return fetch(action, {
|
|
15
|
+
method: "POST",
|
|
16
|
+
credentials: "same-origin",
|
|
17
|
+
signal,
|
|
18
|
+
headers: {
|
|
19
|
+
"Content-Type": "application/json",
|
|
20
|
+
Accept: "application/json",
|
|
21
|
+
"X-Requested-With": "XMLHttpRequest",
|
|
22
|
+
"X-XSRF-TOKEN": xsrfToken(),
|
|
23
|
+
...withRefHeader(componentRef)
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify(body)
|
|
26
|
+
}).then((response) => response.ok ? response.json() : null);
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
export { FORM_DEBOUNCE_MS, postFormAction, xsrfToken };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=form-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-transport.js","names":[],"sources":["../../../resources/js/form/components/form-transport.ts"],"sourcesContent":["/**\n * Shared client transport for the lattice form endpoint. Every form sub-action\n * (validation resolve, option search) POSTs to the same signed form URL, so the\n * CSRF header, component-ref header, and request shape live here in one place.\n */\n\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\n\nexport const FORM_DEBOUNCE_MS = 250;\n\nexport function xsrfToken(): string {\n const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);\n\n return match ? decodeURIComponent(match[1]) : \"\";\n}\n\nexport function postFormAction<T>(\n action: string,\n componentRef: string,\n body: Record<string, unknown>,\n signal: AbortSignal,\n): Promise<T | null> {\n return fetch(action, {\n method: \"POST\",\n credentials: \"same-origin\",\n signal,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-XSRF-TOKEN\": xsrfToken(),\n ...withRefHeader(componentRef),\n },\n body: JSON.stringify(body),\n }).then((response) => (response.ok ? (response.json() as Promise<T>) : null));\n}\n"],"mappings":";;;;;;;AAQA,IAAa,mBAAmB;AAEhC,SAAgB,YAAoB;CAClC,MAAM,QAAQ,SAAS,OAAO,MAAM,oBAAoB;CAExD,OAAO,QAAQ,mBAAmB,MAAM,EAAE,IAAI;AAChD;AAEA,SAAgB,eACd,QACA,cACA,MACA,QACmB;CACnB,OAAO,MAAM,QAAQ;EACnB,QAAQ;EACR,aAAa;EACb;EACA,SAAS;GACP,gBAAgB;GAChB,QAAQ;GACR,oBAAoB;GACpB,gBAAgB,UAAU;GAC1B,GAAG,cAAc,YAAY;EAC/B;EACA,MAAM,KAAK,UAAU,IAAI;CAC3B,CAAC,EAAE,MAAM,aAAc,SAAS,KAAM,SAAS,KAAK,IAAmB,IAAK;AAC9E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../core/types';
|
|
2
|
+
import { FormMethod } from './types';
|
|
3
|
+
declare module '../../../../core/types' {
|
|
4
|
+
interface ComponentProps {
|
|
5
|
+
form: {
|
|
6
|
+
action?: string;
|
|
7
|
+
errorBag?: string;
|
|
8
|
+
ref?: string;
|
|
9
|
+
method?: FormMethod;
|
|
10
|
+
precognitive?: boolean;
|
|
11
|
+
resetOnError?: boolean | string[];
|
|
12
|
+
resetOnSuccess?: boolean | string[];
|
|
13
|
+
state?: Record<string, unknown>;
|
|
14
|
+
status?: string;
|
|
15
|
+
submitButton?: boolean;
|
|
16
|
+
submitLabel?: string;
|
|
17
|
+
validationTimeout?: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export declare const FormComponent: RendererComponent<"form">;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { withRefHeader } from "../../core/component-ref.js";
|
|
2
|
+
import { getBooleanProp, getOptionalNumberProp, getStringProp } from "../../core/props.js";
|
|
3
|
+
import { LATTICE_EVENT } from "../../events/event-names.js";
|
|
4
|
+
import { FormProvider } from "./context.js";
|
|
5
|
+
import { FormSubmitButton } from "./base/submit-button.js";
|
|
6
|
+
import { ResolvedNodesProvider } from "./resolved-nodes.js";
|
|
7
|
+
import { FormValuesProvider } from "./values.js";
|
|
8
|
+
import { useFormResolver } from "./use-form-resolver.js";
|
|
9
|
+
import { useEffect, useMemo } from "react";
|
|
10
|
+
import { Form } from "@inertiajs/react";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
//#region resources/js/form/components/form.tsx
|
|
13
|
+
function getFormState(props) {
|
|
14
|
+
const state = props?.state;
|
|
15
|
+
if (typeof state !== "object" || state === null || Array.isArray(state)) return {};
|
|
16
|
+
return state;
|
|
17
|
+
}
|
|
18
|
+
function collectFields(nodes, collected = {
|
|
19
|
+
labels: {},
|
|
20
|
+
values: {}
|
|
21
|
+
}) {
|
|
22
|
+
for (const child of nodes ?? []) {
|
|
23
|
+
const name = getStringProp(child.props, "name");
|
|
24
|
+
if (name) {
|
|
25
|
+
const label = getStringProp(child.props, "label");
|
|
26
|
+
if (label) collected.labels[name] = label;
|
|
27
|
+
if (child.props?.value !== void 0) collected.values[name] = child.props.value;
|
|
28
|
+
}
|
|
29
|
+
collectFields(child.children, collected);
|
|
30
|
+
}
|
|
31
|
+
return collected;
|
|
32
|
+
}
|
|
33
|
+
function FormResetListener({ componentId, reset }) {
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const handler = (event) => {
|
|
36
|
+
const detail = event.detail;
|
|
37
|
+
if (!detail?.form || detail.form === componentId) reset();
|
|
38
|
+
};
|
|
39
|
+
window.addEventListener(LATTICE_EVENT.resetForm, handler);
|
|
40
|
+
return () => window.removeEventListener(LATTICE_EVENT.resetForm, handler);
|
|
41
|
+
}, [componentId, reset]);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
function FormBody({ action, children, componentRef, nodes, shouldRenderSubmitButton, submitLabel }) {
|
|
45
|
+
return /* @__PURE__ */ jsx(ResolvedNodesProvider, {
|
|
46
|
+
nodes: useFormResolver(action, componentRef, nodes),
|
|
47
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
48
|
+
className: "flex flex-col gap-6",
|
|
49
|
+
children: [children, shouldRenderSubmitButton && /* @__PURE__ */ jsx("div", {
|
|
50
|
+
className: "flex justify-end rounded-lt border border-lt-border bg-lt-surface px-6 py-4 shadow-xs",
|
|
51
|
+
children: /* @__PURE__ */ jsx(FormSubmitButton, { label: submitLabel })
|
|
52
|
+
})]
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
var FormComponent = ({ children, node }) => {
|
|
57
|
+
const props = node.props ?? {};
|
|
58
|
+
const action = props.action ?? "#";
|
|
59
|
+
const errorBag = props.errorBag;
|
|
60
|
+
const componentRef = getStringProp(props, "ref");
|
|
61
|
+
const method = props.method ?? "post";
|
|
62
|
+
const precognitive = getBooleanProp(props, "precognitive");
|
|
63
|
+
const resetOnError = props.resetOnError ?? false;
|
|
64
|
+
const resetOnSuccess = props.resetOnSuccess ?? [];
|
|
65
|
+
const state = getFormState(node.props);
|
|
66
|
+
const { labels: fieldLabels, values: fieldValues } = useMemo(() => collectFields(node.children), [node.children]);
|
|
67
|
+
const initialValues = {
|
|
68
|
+
...fieldValues,
|
|
69
|
+
...state
|
|
70
|
+
};
|
|
71
|
+
const shouldRenderSubmitButton = getBooleanProp(props, "submitButton", true);
|
|
72
|
+
const submitLabel = props.submitLabel ?? "Submit";
|
|
73
|
+
const validationTimeout = getOptionalNumberProp(props, "validationTimeout");
|
|
74
|
+
return /* @__PURE__ */ jsx(Form, {
|
|
75
|
+
action,
|
|
76
|
+
"data-lattice-component": node.id,
|
|
77
|
+
errorBag,
|
|
78
|
+
method,
|
|
79
|
+
resetOnError,
|
|
80
|
+
resetOnSuccess,
|
|
81
|
+
validationTimeout: precognitive ? validationTimeout : void 0,
|
|
82
|
+
headers: withRefHeader(componentRef),
|
|
83
|
+
className: "mx-auto flex w-full max-w-2xl flex-col gap-6",
|
|
84
|
+
children: ({ clearErrors, errors, invalid, processing, reset, touch, validate, validating, valid }) => /* @__PURE__ */ jsxs(FormProvider, {
|
|
85
|
+
value: {
|
|
86
|
+
action,
|
|
87
|
+
clearErrors: (field) => clearErrors(field),
|
|
88
|
+
componentRef,
|
|
89
|
+
errors,
|
|
90
|
+
fieldLabels,
|
|
91
|
+
invalid: (field) => invalid(field),
|
|
92
|
+
precognitive,
|
|
93
|
+
processing,
|
|
94
|
+
touch: (field) => touch(field),
|
|
95
|
+
validate: (field) => validate(field),
|
|
96
|
+
validating,
|
|
97
|
+
valid: (field) => valid(field)
|
|
98
|
+
},
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ jsx(FormResetListener, {
|
|
101
|
+
componentId: node.id,
|
|
102
|
+
reset
|
|
103
|
+
}),
|
|
104
|
+
props.status && /* @__PURE__ */ jsx("div", {
|
|
105
|
+
className: "text-center text-sm font-medium text-green-600 dark:text-green-400",
|
|
106
|
+
children: props.status
|
|
107
|
+
}),
|
|
108
|
+
/* @__PURE__ */ jsx(FormValuesProvider, {
|
|
109
|
+
initial: initialValues,
|
|
110
|
+
children: /* @__PURE__ */ jsx(FormBody, {
|
|
111
|
+
action,
|
|
112
|
+
componentRef,
|
|
113
|
+
nodes: node.children,
|
|
114
|
+
shouldRenderSubmitButton,
|
|
115
|
+
submitLabel,
|
|
116
|
+
children
|
|
117
|
+
})
|
|
118
|
+
})
|
|
119
|
+
]
|
|
120
|
+
})
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
//#endregion
|
|
124
|
+
export { FormComponent };
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.js","names":[],"sources":["../../../resources/js/form/components/form.tsx"],"sourcesContent":["import { Form as InertiaForm } from \"@inertiajs/react\";\nimport { withRefHeader } from \"@lattice/lattice/core/component-ref\";\nimport { getBooleanProp, getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport { LATTICE_EVENT } from \"@lattice/lattice/events/event-names\";\nimport type { Node, NodeProps, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { useEffect, useMemo } from \"react\";\nimport { FormSubmitButton } from \"./base/submit-button\";\nimport { FormProvider } from \"./context\";\nimport { ResolvedNodesProvider } from \"./resolved-nodes\";\nimport type { FormMethod } from \"./types\";\nimport { useFormResolver } from \"./use-form-resolver\";\nimport { FormValuesProvider } from \"./values\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n form: {\n action?: string;\n errorBag?: string;\n ref?: string;\n method?: FormMethod;\n precognitive?: boolean;\n resetOnError?: boolean | string[];\n resetOnSuccess?: boolean | string[];\n state?: Record<string, unknown>;\n status?: string;\n submitButton?: boolean;\n submitLabel?: string;\n validationTimeout?: number;\n };\n }\n}\n\nfunction getFormState(props: NodeProps | undefined): Record<string, unknown> {\n const state = props?.state;\n\n if (typeof state !== \"object\" || state === null || Array.isArray(state)) {\n return {};\n }\n\n return state as Record<string, unknown>;\n}\n\ntype CollectedFields = {\n labels: Record<string, string>;\n values: Record<string, unknown>;\n};\n\nfunction collectFields(\n nodes: Node[] | undefined,\n collected: CollectedFields = { labels: {}, values: {} },\n): CollectedFields {\n for (const child of nodes ?? []) {\n const name = getStringProp(child.props, \"name\");\n\n if (name) {\n const label = getStringProp(child.props, \"label\");\n if (label) {\n collected.labels[name] = label;\n }\n if (child.props?.value !== undefined) {\n collected.values[name] = child.props.value;\n }\n }\n\n collectFields(child.children, collected);\n }\n\n return collected;\n}\n\nfunction FormResetListener({\n componentId,\n reset,\n}: {\n componentId?: string;\n reset: (...fields: string[]) => void;\n}) {\n useEffect(() => {\n const handler = (event: Event) => {\n const detail = (event as CustomEvent<{ form?: string }>).detail;\n\n if (!detail?.form || detail.form === componentId) {\n reset();\n }\n };\n\n window.addEventListener(LATTICE_EVENT.resetForm, handler);\n\n return () => window.removeEventListener(LATTICE_EVENT.resetForm, handler);\n }, [componentId, reset]);\n\n return null;\n}\n\nfunction FormBody({\n action,\n children,\n componentRef,\n nodes,\n shouldRenderSubmitButton,\n submitLabel,\n}: {\n action: string;\n children: React.ReactNode;\n componentRef: string;\n nodes: Node[] | undefined;\n shouldRenderSubmitButton: boolean;\n submitLabel: string;\n}) {\n const resolvedNodes = useFormResolver(action, componentRef, nodes);\n\n return (\n <ResolvedNodesProvider nodes={resolvedNodes}>\n <div className=\"flex flex-col gap-6\">\n {children}\n\n {shouldRenderSubmitButton && (\n <div className=\"flex justify-end rounded-lt border border-lt-border bg-lt-surface px-6 py-4 shadow-xs\">\n <FormSubmitButton label={submitLabel} />\n </div>\n )}\n </div>\n </ResolvedNodesProvider>\n );\n}\n\nexport const FormComponent: RendererComponent<\"form\"> = ({ children, node }) => {\n const props = node.props ?? {};\n const action = props.action ?? \"#\";\n const errorBag = props.errorBag;\n const componentRef = getStringProp(props, \"ref\");\n const method = props.method ?? \"post\";\n const precognitive = getBooleanProp(props, \"precognitive\");\n const resetOnError = props.resetOnError ?? false;\n const resetOnSuccess = props.resetOnSuccess ?? [];\n const state = getFormState(node.props);\n const { labels: fieldLabels, values: fieldValues } = useMemo(\n () => collectFields(node.children),\n [node.children],\n );\n const initialValues = { ...fieldValues, ...state };\n const shouldRenderSubmitButton = getBooleanProp(props, \"submitButton\", true);\n const submitLabel = props.submitLabel ?? \"Submit\";\n const validationTimeout = getOptionalNumberProp(props, \"validationTimeout\");\n\n return (\n <InertiaForm\n action={action}\n data-lattice-component={node.id}\n errorBag={errorBag}\n method={method}\n resetOnError={resetOnError}\n resetOnSuccess={resetOnSuccess}\n validationTimeout={precognitive ? validationTimeout : undefined}\n headers={withRefHeader(componentRef)}\n className=\"mx-auto flex w-full max-w-2xl flex-col gap-6\"\n >\n {({\n clearErrors,\n errors,\n invalid,\n processing,\n reset,\n touch,\n validate,\n validating,\n valid,\n }) => (\n <FormProvider\n value={{\n action,\n clearErrors: (field) => clearErrors(field),\n componentRef,\n errors: errors as Record<string, string | undefined>,\n fieldLabels,\n invalid: (field) => invalid(field),\n precognitive,\n processing,\n touch: (field) => touch(field),\n validate: (field) => validate(field),\n validating,\n valid: (field) => valid(field),\n }}\n >\n <FormResetListener componentId={node.id} reset={reset} />\n\n {props.status && (\n <div className=\"text-center text-sm font-medium text-green-600 dark:text-green-400\">\n {props.status}\n </div>\n )}\n\n <FormValuesProvider initial={initialValues}>\n <FormBody\n action={action}\n componentRef={componentRef}\n nodes={node.children}\n shouldRenderSubmitButton={shouldRenderSubmitButton}\n submitLabel={submitLabel}\n >\n {children}\n </FormBody>\n </FormValuesProvider>\n </FormProvider>\n )}\n </InertiaForm>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAgCA,SAAS,aAAa,OAAuD;CAC3E,MAAM,QAAQ,OAAO;CAErB,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACpE,OAAO,CAAC;CAGV,OAAO;AACT;AAOA,SAAS,cACP,OACA,YAA6B;CAAE,QAAQ,CAAC;CAAG,QAAQ,CAAC;AAAE,GACrC;CACjB,KAAK,MAAM,SAAS,SAAS,CAAC,GAAG;EAC/B,MAAM,OAAO,cAAc,MAAM,OAAO,MAAM;EAE9C,IAAI,MAAM;GACR,MAAM,QAAQ,cAAc,MAAM,OAAO,OAAO;GAChD,IAAI,OACF,UAAU,OAAO,QAAQ;GAE3B,IAAI,MAAM,OAAO,UAAU,KAAA,GACzB,UAAU,OAAO,QAAQ,MAAM,MAAM;EAEzC;EAEA,cAAc,MAAM,UAAU,SAAS;CACzC;CAEA,OAAO;AACT;AAEA,SAAS,kBAAkB,EACzB,aACA,SAIC;CACD,gBAAgB;EACd,MAAM,WAAW,UAAiB;GAChC,MAAM,SAAU,MAAyC;GAEzD,IAAI,CAAC,QAAQ,QAAQ,OAAO,SAAS,aACnC,MAAM;EAEV;EAEA,OAAO,iBAAiB,cAAc,WAAW,OAAO;EAExD,aAAa,OAAO,oBAAoB,cAAc,WAAW,OAAO;CAC1E,GAAG,CAAC,aAAa,KAAK,CAAC;CAEvB,OAAO;AACT;AAEA,SAAS,SAAS,EAChB,QACA,UACA,cACA,OACA,0BACA,eAQC;CAGD,OACE,oBAAC,uBAAD;EAAuB,OAHH,gBAAgB,QAAQ,cAAc,KAG5B;YAC5B,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,UAEA,4BACC,oBAAC,OAAD;IAAK,WAAU;cACb,oBAAC,kBAAD,EAAkB,OAAO,YAAc,CAAA;GACpC,CAAA,CAEJ;;CACgB,CAAA;AAE3B;AAEA,IAAa,iBAA4C,EAAE,UAAU,WAAW;CAC9E,MAAM,QAAQ,KAAK,SAAS,CAAC;CAC7B,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,WAAW,MAAM;CACvB,MAAM,eAAe,cAAc,OAAO,KAAK;CAC/C,MAAM,SAAS,MAAM,UAAU;CAC/B,MAAM,eAAe,eAAe,OAAO,cAAc;CACzD,MAAM,eAAe,MAAM,gBAAgB;CAC3C,MAAM,iBAAiB,MAAM,kBAAkB,CAAC;CAChD,MAAM,QAAQ,aAAa,KAAK,KAAK;CACrC,MAAM,EAAE,QAAQ,aAAa,QAAQ,gBAAgB,cAC7C,cAAc,KAAK,QAAQ,GACjC,CAAC,KAAK,QAAQ,CAChB;CACA,MAAM,gBAAgB;EAAE,GAAG;EAAa,GAAG;CAAM;CACjD,MAAM,2BAA2B,eAAe,OAAO,gBAAgB,IAAI;CAC3E,MAAM,cAAc,MAAM,eAAe;CACzC,MAAM,oBAAoB,sBAAsB,OAAO,mBAAmB;CAE1E,OACE,oBAAC,MAAD;EACU;EACR,0BAAwB,KAAK;EACnB;EACF;EACM;EACE;EAChB,mBAAmB,eAAe,oBAAoB,KAAA;EACtD,SAAS,cAAc,YAAY;EACnC,WAAU;aAER,EACA,aACA,QACA,SACA,YACA,OACA,OACA,UACA,YACA,YAEA,qBAAC,cAAD;GACE,OAAO;IACL;IACA,cAAc,UAAU,YAAY,KAAK;IACzC;IACQ;IACR;IACA,UAAU,UAAU,QAAQ,KAAK;IACjC;IACA;IACA,QAAQ,UAAU,MAAM,KAAK;IAC7B,WAAW,UAAU,SAAS,KAAK;IACnC;IACA,QAAQ,UAAU,MAAM,KAAK;GAC/B;aAdF;IAgBE,oBAAC,mBAAD;KAAmB,aAAa,KAAK;KAAW;IAAQ,CAAA;IAEvD,MAAM,UACL,oBAAC,OAAD;KAAK,WAAU;eACZ,MAAM;IACJ,CAAA;IAGP,oBAAC,oBAAD;KAAoB,SAAS;eAC3B,oBAAC,UAAD;MACU;MACM;MACd,OAAO,KAAK;MACc;MACb;MAEZ;KACO,CAAA;IACQ,CAAA;GACR;;CAEL,CAAA;AAEjB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { CheckboxComponent } from './fields/checkbox';
|
|
2
|
+
export { ChoiceComponent } from './fields/choice';
|
|
3
|
+
export { DateInputComponent } from './fields/date-input';
|
|
4
|
+
export { FormComponent } from './form';
|
|
5
|
+
export { HiddenInputComponent } from './fields/hidden-input';
|
|
6
|
+
export { NumberInputComponent } from './fields/number-input';
|
|
7
|
+
export { PasswordInputComponent } from './fields/password-input';
|
|
8
|
+
export { SelectComponent } from './fields/select';
|
|
9
|
+
export { SubmitButtonComponent } from './fields/submit-button';
|
|
10
|
+
export { TextareaComponent } from './fields/textarea';
|
|
11
|
+
export { TextInputComponent } from './fields/text-input';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FormComponent } from "./form.js";
|
|
2
|
+
import { CheckboxComponent } from "./fields/checkbox.js";
|
|
3
|
+
import { ChoiceComponent } from "./fields/choice.js";
|
|
4
|
+
import { DateInputComponent } from "./fields/date-input.js";
|
|
5
|
+
import { HiddenInputComponent } from "./fields/hidden-input.js";
|
|
6
|
+
import { NumberInputComponent } from "./fields/number-input.js";
|
|
7
|
+
import { PasswordInputComponent } from "./fields/password-input.js";
|
|
8
|
+
import { SelectComponent } from "./fields/select.js";
|
|
9
|
+
import { SubmitButtonComponent } from "./fields/submit-button.js";
|
|
10
|
+
import { TextareaComponent } from "./fields/textarea.js";
|
|
11
|
+
import { TextInputComponent } from "./fields/text-input.js";
|
|
12
|
+
export { CheckboxComponent, ChoiceComponent, DateInputComponent, FormComponent, HiddenInputComponent, NumberInputComponent, PasswordInputComponent, SelectComponent, SubmitButtonComponent, TextInputComponent, TextareaComponent };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Node } from '../../../../core/types';
|
|
2
|
+
export declare function ResolvedNodesProvider({ nodes, children, }: {
|
|
3
|
+
nodes: Record<string, Node>;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
|
+
export declare function useResolvedNode(node: Node): Node;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { getStringProp } from "../../core/props.js";
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
//#region resources/js/form/components/resolved-nodes.tsx
|
|
5
|
+
var ResolvedNodesContext = createContext({});
|
|
6
|
+
function ResolvedNodesProvider({ nodes, children }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(ResolvedNodesContext.Provider, {
|
|
8
|
+
value: nodes,
|
|
9
|
+
children
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
function useResolvedNode(node) {
|
|
13
|
+
const nodes = useContext(ResolvedNodesContext);
|
|
14
|
+
const name = getStringProp(node.props, "name");
|
|
15
|
+
return name && nodes[name] ? nodes[name] : node;
|
|
16
|
+
}
|
|
17
|
+
//#endregion
|
|
18
|
+
export { ResolvedNodesProvider, useResolvedNode };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=resolved-nodes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolved-nodes.js","names":[],"sources":["../../../resources/js/form/components/resolved-nodes.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { Node } from \"@lattice/lattice/core/types\";\n\nconst ResolvedNodesContext = createContext<Record<string, Node>>({});\n\nexport function ResolvedNodesProvider({\n nodes,\n children,\n}: {\n nodes: Record<string, Node>;\n children: React.ReactNode;\n}) {\n return <ResolvedNodesContext.Provider value={nodes}>{children}</ResolvedNodesContext.Provider>;\n}\n\nexport function useResolvedNode(node: Node): Node {\n const nodes = useContext(ResolvedNodesContext);\n const name = getStringProp(node.props, \"name\");\n\n return name && nodes[name] ? nodes[name] : node;\n}\n"],"mappings":";;;;AAIA,IAAM,uBAAuB,cAAoC,CAAC,CAAC;AAEnE,SAAgB,sBAAsB,EACpC,OACA,YAIC;CACD,OAAO,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO;EAAQ;CAAwC,CAAA;AAC/F;AAEA,SAAgB,gBAAgB,MAAkB;CAChD,MAAM,QAAQ,WAAW,oBAAoB;CAC7C,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAE7C,OAAO,QAAQ,MAAM,QAAQ,MAAM,QAAQ;AAC7C"}
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Node } from '../../../../core/types';
|
|
2
|
+
import { FieldState } from './conditions';
|
|
3
|
+
type ControlledField = FieldState & {
|
|
4
|
+
name: string;
|
|
5
|
+
value: string;
|
|
6
|
+
error?: string;
|
|
7
|
+
commit: (value: unknown) => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Shared wiring for store-controlled, condition-aware fields: derives the current
|
|
11
|
+
* string value (store, falling back to the node's value prop), the field state
|
|
12
|
+
* (hidden/required/readonly/disabled), the current error, and a `commit` callback
|
|
13
|
+
* that writes to the store and triggers precognition validation / error clearing.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useControlledField(node: Node): ControlledField;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { getStringProp } from "../../core/props.js";
|
|
2
|
+
import { useFormContext } from "./context.js";
|
|
3
|
+
import { useFormValue } from "./values.js";
|
|
4
|
+
import { useDependentField } from "./use-dependent-field.js";
|
|
5
|
+
import { useFieldCommit } from "./use-field-commit.js";
|
|
6
|
+
//#region resources/js/form/components/use-controlled-field.ts
|
|
7
|
+
/**
|
|
8
|
+
* Shared wiring for store-controlled, condition-aware fields: derives the current
|
|
9
|
+
* string value (store, falling back to the node's value prop), the field state
|
|
10
|
+
* (hidden/required/readonly/disabled), the current error, and a `commit` callback
|
|
11
|
+
* that writes to the store and triggers precognition validation / error clearing.
|
|
12
|
+
*/
|
|
13
|
+
function useControlledField(node) {
|
|
14
|
+
const { errors } = useFormContext();
|
|
15
|
+
const state = useDependentField(node);
|
|
16
|
+
const name = getStringProp(node.props, "name");
|
|
17
|
+
const storedValue = useFormValue(name);
|
|
18
|
+
const currentValue = storedValue !== void 0 ? storedValue : node.props?.value;
|
|
19
|
+
const value = typeof currentValue === "string" || typeof currentValue === "number" ? String(currentValue) : "";
|
|
20
|
+
const { commit: commitField } = useFieldCommit();
|
|
21
|
+
const commit = (next) => commitField(name, next);
|
|
22
|
+
return {
|
|
23
|
+
...state,
|
|
24
|
+
name,
|
|
25
|
+
value,
|
|
26
|
+
error: errors[name],
|
|
27
|
+
commit
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { useControlledField };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=use-controlled-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-controlled-field.js","names":[],"sources":["../../../resources/js/form/components/use-controlled-field.ts"],"sourcesContent":["import { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { Node } from \"@lattice/lattice/core/types\";\nimport type { FieldState } from \"./conditions\";\nimport { useFormContext } from \"./context\";\nimport { useDependentField } from \"./use-dependent-field\";\nimport { useFieldCommit } from \"./use-field-commit\";\nimport { useFormValue } from \"./values\";\n\ntype ControlledField = FieldState & {\n name: string;\n value: string;\n error?: string;\n commit: (value: unknown) => void;\n};\n\n/**\n * Shared wiring for store-controlled, condition-aware fields: derives the current\n * string value (store, falling back to the node's value prop), the field state\n * (hidden/required/readonly/disabled), the current error, and a `commit` callback\n * that writes to the store and triggers precognition validation / error clearing.\n */\nexport function useControlledField(node: Node): ControlledField {\n const { errors } = useFormContext();\n const state = useDependentField(node);\n const name = getStringProp(node.props, \"name\");\n const storedValue = useFormValue(name);\n const currentValue = storedValue !== undefined ? storedValue : node.props?.value;\n const value =\n typeof currentValue === \"string\" || typeof currentValue === \"number\"\n ? String(currentValue)\n : \"\";\n\n const { commit: commitField } = useFieldCommit();\n const commit = (next: unknown): void => commitField(name, next);\n\n return { ...state, name, value, error: errors[name], commit };\n}\n"],"mappings":";;;;;;;;;;;;AAqBA,SAAgB,mBAAmB,MAA6B;CAC9D,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,QAAQ,kBAAkB,IAAI;CACpC,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,cAAc,aAAa,IAAI;CACrC,MAAM,eAAe,gBAAgB,KAAA,IAAY,cAAc,KAAK,OAAO;CAC3E,MAAM,QACJ,OAAO,iBAAiB,YAAY,OAAO,iBAAiB,WACxD,OAAO,YAAY,IACnB;CAEN,MAAM,EAAE,QAAQ,gBAAgB,eAAe;CAC/C,MAAM,UAAU,SAAwB,YAAY,MAAM,IAAI;CAE9D,OAAO;EAAE,GAAG;EAAO;EAAM;EAAO,OAAO,OAAO;EAAO;CAAO;AAC9D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getBooleanProp } from "../../core/props.js";
|
|
2
|
+
import { evaluateConditions } from "./conditions.js";
|
|
3
|
+
import { useFormValues } from "./values.js";
|
|
4
|
+
//#region resources/js/form/components/use-dependent-field.ts
|
|
5
|
+
function useDependentField(node) {
|
|
6
|
+
const values = useFormValues();
|
|
7
|
+
const conditions = node.props?.conditions;
|
|
8
|
+
return evaluateConditions(conditions, values, {
|
|
9
|
+
hidden: getBooleanProp(node.props, "hidden"),
|
|
10
|
+
required: getBooleanProp(node.props, "required"),
|
|
11
|
+
readonly: getBooleanProp(node.props, "readonly"),
|
|
12
|
+
disabled: getBooleanProp(node.props, "disabled")
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { useDependentField };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=use-dependent-field.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-dependent-field.js","names":[],"sources":["../../../resources/js/form/components/use-dependent-field.ts"],"sourcesContent":["import { getBooleanProp } from \"@lattice/lattice/core/props\";\nimport type { Node } from \"@lattice/lattice/core/types\";\nimport { type FieldConditions, type FieldState, evaluateConditions } from \"./conditions\";\nimport { useFormValues } from \"./values\";\n\nexport function useDependentField(node: Node): FieldState {\n const values = useFormValues();\n const conditions = node.props?.conditions as FieldConditions | undefined;\n\n return evaluateConditions(conditions, values, {\n hidden: getBooleanProp(node.props, \"hidden\"),\n required: getBooleanProp(node.props, \"required\"),\n readonly: getBooleanProp(node.props, \"readonly\"),\n disabled: getBooleanProp(node.props, \"disabled\"),\n });\n}\n"],"mappings":";;;;AAKA,SAAgB,kBAAkB,MAAwB;CACxD,MAAM,SAAS,cAAc;CAC7B,MAAM,aAAa,KAAK,OAAO;CAE/B,OAAO,mBAAmB,YAAY,QAAQ;EAC5C,QAAQ,eAAe,KAAK,OAAO,QAAQ;EAC3C,UAAU,eAAe,KAAK,OAAO,UAAU;EAC/C,UAAU,eAAe,KAAK,OAAO,UAAU;EAC/C,UAAU,eAAe,KAAK,OAAO,UAAU;CACjD,CAAC;AACH"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type FieldCommit = {
|
|
2
|
+
/** Write the value and validate immediately (precognitive) or clear errors. */
|
|
3
|
+
commit: (name: string, value: unknown) => void;
|
|
4
|
+
/** Write the value and clear errors, deferring validation to a later `blur`. */
|
|
5
|
+
change: (name: string, value: unknown) => void;
|
|
6
|
+
/** Validate the field now if precognitive (e.g. on blur or popover close). */
|
|
7
|
+
blur: (name: string) => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* The shared field-mutation contract every form field uses to write its value
|
|
11
|
+
* and drive precognition. Fields that validate on change call `commit`; fields
|
|
12
|
+
* that validate on blur/close (rich editor, select) call `change` then `blur`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useFieldCommit(): FieldCommit;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { useFormContext } from "./context.js";
|
|
2
|
+
import { useSetFormValue } from "./values.js";
|
|
3
|
+
//#region resources/js/form/components/use-field-commit.ts
|
|
4
|
+
/**
|
|
5
|
+
* The shared field-mutation contract every form field uses to write its value
|
|
6
|
+
* and drive precognition. Fields that validate on change call `commit`; fields
|
|
7
|
+
* that validate on blur/close (rich editor, select) call `change` then `blur`.
|
|
8
|
+
*/
|
|
9
|
+
function useFieldCommit() {
|
|
10
|
+
const { clearErrors, precognitive, validate } = useFormContext();
|
|
11
|
+
const setValue = useSetFormValue();
|
|
12
|
+
return {
|
|
13
|
+
commit(name, value) {
|
|
14
|
+
setValue(name, value);
|
|
15
|
+
if (precognitive) validate(name);
|
|
16
|
+
else clearErrors(name);
|
|
17
|
+
},
|
|
18
|
+
change(name, value) {
|
|
19
|
+
setValue(name, value);
|
|
20
|
+
clearErrors(name);
|
|
21
|
+
},
|
|
22
|
+
blur(name) {
|
|
23
|
+
if (precognitive) validate(name);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { useFieldCommit };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=use-field-commit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-field-commit.js","names":[],"sources":["../../../resources/js/form/components/use-field-commit.ts"],"sourcesContent":["import { useFormContext } from \"./context\";\nimport { useSetFormValue } from \"./values\";\n\nexport type FieldCommit = {\n /** Write the value and validate immediately (precognitive) or clear errors. */\n commit: (name: string, value: unknown) => void;\n /** Write the value and clear errors, deferring validation to a later `blur`. */\n change: (name: string, value: unknown) => void;\n /** Validate the field now if precognitive (e.g. on blur or popover close). */\n blur: (name: string) => void;\n};\n\n/**\n * The shared field-mutation contract every form field uses to write its value\n * and drive precognition. Fields that validate on change call `commit`; fields\n * that validate on blur/close (rich editor, select) call `change` then `blur`.\n */\nexport function useFieldCommit(): FieldCommit {\n const { clearErrors, precognitive, validate } = useFormContext();\n const setValue = useSetFormValue();\n\n return {\n commit(name, value) {\n setValue(name, value);\n if (precognitive) {\n validate(name);\n } else {\n clearErrors(name);\n }\n },\n change(name, value) {\n setValue(name, value);\n clearErrors(name);\n },\n blur(name) {\n if (precognitive) {\n validate(name);\n }\n },\n };\n}\n"],"mappings":";;;;;;;;AAiBA,SAAgB,iBAA8B;CAC5C,MAAM,EAAE,aAAa,cAAc,aAAa,eAAe;CAC/D,MAAM,WAAW,gBAAgB;CAEjC,OAAO;EACL,OAAO,MAAM,OAAO;GAClB,SAAS,MAAM,KAAK;GACpB,IAAI,cACF,SAAS,IAAI;QAEb,YAAY,IAAI;EAEpB;EACA,OAAO,MAAM,OAAO;GAClB,SAAS,MAAM,KAAK;GACpB,YAAY,IAAI;EAClB;EACA,KAAK,MAAM;GACT,IAAI,cACF,SAAS,IAAI;EAEjB;CACF;AACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { getBooleanProp } from "../../core/props.js";
|
|
2
|
+
import { postFormAction } from "./form-transport.js";
|
|
3
|
+
import { useFormValues, useSetFormValue } from "./values.js";
|
|
4
|
+
import { useEffect, useMemo, useState } from "react";
|
|
5
|
+
//#region resources/js/form/components/use-form-resolver.ts
|
|
6
|
+
function collectWatch(nodes, keys, state) {
|
|
7
|
+
for (const child of nodes ?? []) {
|
|
8
|
+
const dependsOnKeys = child.props?.dependsOnKeys;
|
|
9
|
+
if (Array.isArray(dependsOnKeys)) for (const key of dependsOnKeys) keys.add(String(key));
|
|
10
|
+
if (getBooleanProp(child.props, "dependsOnAny")) state.any = true;
|
|
11
|
+
collectWatch(child.children, keys, state);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
function useFormResolver(action, componentRef, nodes) {
|
|
15
|
+
const values = useFormValues();
|
|
16
|
+
const setValue = useSetFormValue();
|
|
17
|
+
const [resolved, setResolved] = useState({});
|
|
18
|
+
const watch = useMemo(() => {
|
|
19
|
+
const keys = /* @__PURE__ */ new Set();
|
|
20
|
+
const state = { any: false };
|
|
21
|
+
collectWatch(nodes, keys, state);
|
|
22
|
+
return {
|
|
23
|
+
keys: [...keys],
|
|
24
|
+
any: state.any
|
|
25
|
+
};
|
|
26
|
+
}, [nodes]);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (watch.keys.length === 0 && !watch.any) return;
|
|
29
|
+
const controller = new AbortController();
|
|
30
|
+
const timer = window.setTimeout(() => {
|
|
31
|
+
postFormAction(action, componentRef, {
|
|
32
|
+
_resolve: true,
|
|
33
|
+
...values
|
|
34
|
+
}, controller.signal).then((response) => {
|
|
35
|
+
if (!response) return;
|
|
36
|
+
for (const [name, value] of Object.entries(response.values ?? {})) setValue(name, value);
|
|
37
|
+
if (response.fields) setResolved(response.fields);
|
|
38
|
+
}).catch(() => {});
|
|
39
|
+
}, 250);
|
|
40
|
+
return () => {
|
|
41
|
+
window.clearTimeout(timer);
|
|
42
|
+
controller.abort();
|
|
43
|
+
};
|
|
44
|
+
}, [
|
|
45
|
+
watch.any ? JSON.stringify(values) : JSON.stringify(watch.keys.map((key) => values[key])),
|
|
46
|
+
action,
|
|
47
|
+
componentRef,
|
|
48
|
+
watch.keys.length,
|
|
49
|
+
watch.any,
|
|
50
|
+
setValue
|
|
51
|
+
]);
|
|
52
|
+
return resolved;
|
|
53
|
+
}
|
|
54
|
+
//#endregion
|
|
55
|
+
export { useFormResolver };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=use-form-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-form-resolver.js","names":[],"sources":["../../../resources/js/form/components/use-form-resolver.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { getBooleanProp } from \"@lattice/lattice/core/props\";\nimport type { Node } from \"@lattice/lattice/core/types\";\nimport { FORM_DEBOUNCE_MS, postFormAction } from \"./form-transport\";\nimport { useFormValues, useSetFormValue } from \"./values\";\n\ntype ResolveResponse = {\n fields?: Record<string, Node>;\n values?: Record<string, unknown>;\n};\n\nfunction collectWatch(nodes: Node[] | undefined, keys: Set<string>, state: { any: boolean }): void {\n for (const child of nodes ?? []) {\n const dependsOnKeys = child.props?.dependsOnKeys;\n if (Array.isArray(dependsOnKeys)) {\n for (const key of dependsOnKeys) {\n keys.add(String(key));\n }\n }\n if (getBooleanProp(child.props, \"dependsOnAny\")) {\n state.any = true;\n }\n collectWatch(child.children, keys, state);\n }\n}\n\nexport function useFormResolver(\n action: string,\n componentRef: string,\n nodes: Node[] | undefined,\n): Record<string, Node> {\n const values = useFormValues();\n const setValue = useSetFormValue();\n const [resolved, setResolved] = useState<Record<string, Node>>({});\n\n const watch = useMemo(() => {\n const keys = new Set<string>();\n const state = { any: false };\n collectWatch(nodes, keys, state);\n return { keys: [...keys], any: state.any };\n }, [nodes]);\n\n const watched = watch.any\n ? JSON.stringify(values)\n : JSON.stringify(watch.keys.map((key) => values[key]));\n\n useEffect(() => {\n if (watch.keys.length === 0 && !watch.any) {\n return;\n }\n\n const controller = new AbortController();\n\n const timer = window.setTimeout(() => {\n void postFormAction<ResolveResponse>(\n action,\n componentRef,\n { _resolve: true, ...values },\n controller.signal,\n )\n .then((response) => {\n if (!response) {\n return;\n }\n for (const [name, value] of Object.entries(response.values ?? {})) {\n setValue(name, value);\n }\n if (response.fields) {\n setResolved(response.fields);\n }\n })\n .catch(() => {});\n }, FORM_DEBOUNCE_MS);\n\n return () => {\n window.clearTimeout(timer);\n controller.abort();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [watched, action, componentRef, watch.keys.length, watch.any, setValue]);\n\n return resolved;\n}\n"],"mappings":";;;;;AAWA,SAAS,aAAa,OAA2B,MAAmB,OAA+B;CACjG,KAAK,MAAM,SAAS,SAAS,CAAC,GAAG;EAC/B,MAAM,gBAAgB,MAAM,OAAO;EACnC,IAAI,MAAM,QAAQ,aAAa,GAC7B,KAAK,MAAM,OAAO,eAChB,KAAK,IAAI,OAAO,GAAG,CAAC;EAGxB,IAAI,eAAe,MAAM,OAAO,cAAc,GAC5C,MAAM,MAAM;EAEd,aAAa,MAAM,UAAU,MAAM,KAAK;CAC1C;AACF;AAEA,SAAgB,gBACd,QACA,cACA,OACsB;CACtB,MAAM,SAAS,cAAc;CAC7B,MAAM,WAAW,gBAAgB;CACjC,MAAM,CAAC,UAAU,eAAe,SAA+B,CAAC,CAAC;CAEjE,MAAM,QAAQ,cAAc;EAC1B,MAAM,uBAAO,IAAI,IAAY;EAC7B,MAAM,QAAQ,EAAE,KAAK,MAAM;EAC3B,aAAa,OAAO,MAAM,KAAK;EAC/B,OAAO;GAAE,MAAM,CAAC,GAAG,IAAI;GAAG,KAAK,MAAM;EAAI;CAC3C,GAAG,CAAC,KAAK,CAAC;CAMV,gBAAgB;EACd,IAAI,MAAM,KAAK,WAAW,KAAK,CAAC,MAAM,KACpC;EAGF,MAAM,aAAa,IAAI,gBAAgB;EAEvC,MAAM,QAAQ,OAAO,iBAAiB;GACpC,eACE,QACA,cACA;IAAE,UAAU;IAAM,GAAG;GAAO,GAC5B,WAAW,MACb,EACG,MAAM,aAAa;IAClB,IAAI,CAAC,UACH;IAEF,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,SAAS,UAAU,CAAC,CAAC,GAC9D,SAAS,MAAM,KAAK;IAEtB,IAAI,SAAS,QACX,YAAY,SAAS,MAAM;GAE/B,CAAC,EACA,YAAY,CAAC,CAAC;EACnB,GAAA,GAAmB;EAEnB,aAAa;GACX,OAAO,aAAa,KAAK;GACzB,WAAW,MAAM;EACnB;CAEF,GAAG;EArCa,MAAM,MAClB,KAAK,UAAU,MAAM,IACrB,KAAK,UAAU,MAAM,KAAK,KAAK,QAAQ,OAAO,IAAI,CAAC;EAmC1C;EAAQ;EAAc,MAAM,KAAK;EAAQ,MAAM;EAAK;CAAQ,CAAC;CAE1E,OAAO;AACT"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function FormValuesProvider({ initial, children, }: {
|
|
2
|
+
initial: Record<string, unknown>;
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}): import("react").JSX.Element;
|
|
5
|
+
export declare function useFormValues(): Record<string, unknown>;
|
|
6
|
+
export declare function useFormValue(name: string): unknown;
|
|
7
|
+
export declare function useSetFormValue(): (name: string, value: unknown) => void;
|