@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,62 @@
|
|
|
1
|
+
//#region resources/js/form/components/conditions.ts
|
|
2
|
+
var BOOLEAN_TRUE_VALUES = new Set([
|
|
3
|
+
"1",
|
|
4
|
+
"true",
|
|
5
|
+
"on",
|
|
6
|
+
"yes"
|
|
7
|
+
]);
|
|
8
|
+
function toBoolean(value) {
|
|
9
|
+
if (typeof value === "boolean") return value;
|
|
10
|
+
if (typeof value === "number") return value === 1;
|
|
11
|
+
return BOOLEAN_TRUE_VALUES.has(String(value).toLowerCase());
|
|
12
|
+
}
|
|
13
|
+
function equals(actual, expected) {
|
|
14
|
+
if (typeof expected === "boolean") return toBoolean(actual) === expected;
|
|
15
|
+
return String(actual ?? "") === String(expected ?? "");
|
|
16
|
+
}
|
|
17
|
+
function isIn(actual, expected) {
|
|
18
|
+
return (Array.isArray(expected) ? expected : [expected]).map((value) => String(value)).includes(String(actual ?? ""));
|
|
19
|
+
}
|
|
20
|
+
function isBlank(value) {
|
|
21
|
+
return value == null || String(value) === "";
|
|
22
|
+
}
|
|
23
|
+
function evaluateUnknownOperator(_operator) {
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
function evaluateOp(operator, actual, expected) {
|
|
27
|
+
switch (operator) {
|
|
28
|
+
case "eq": return equals(actual, expected);
|
|
29
|
+
case "neq": return !equals(actual, expected);
|
|
30
|
+
case "gt": return Number(actual) > Number(expected);
|
|
31
|
+
case "lt": return Number(actual) < Number(expected);
|
|
32
|
+
case "gte": return Number(actual) >= Number(expected);
|
|
33
|
+
case "lte": return Number(actual) <= Number(expected);
|
|
34
|
+
case "contains": return String(actual ?? "").includes(String(expected ?? ""));
|
|
35
|
+
case "starts_with": return String(actual ?? "").startsWith(String(expected ?? ""));
|
|
36
|
+
case "ends_with": return String(actual ?? "").endsWith(String(expected ?? ""));
|
|
37
|
+
case "in": return isIn(actual, expected);
|
|
38
|
+
case "not_in": return !isIn(actual, expected);
|
|
39
|
+
case "empty": return isBlank(actual);
|
|
40
|
+
case "filled": return !isBlank(actual);
|
|
41
|
+
default: return evaluateUnknownOperator(operator);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function allMatch(conditions, values) {
|
|
45
|
+
return conditions.every((condition) => evaluateOp(condition.operator, values[condition.field], condition.value));
|
|
46
|
+
}
|
|
47
|
+
function anyMatch(conditions, values) {
|
|
48
|
+
return Boolean(conditions?.some((condition) => evaluateOp(condition.operator, values[condition.field], condition.value)));
|
|
49
|
+
}
|
|
50
|
+
function evaluateConditions(conditions, values, flags) {
|
|
51
|
+
const visible = !conditions?.visible?.length || allMatch(conditions.visible, values);
|
|
52
|
+
return {
|
|
53
|
+
hidden: Boolean(flags.hidden) || !visible,
|
|
54
|
+
required: Boolean(flags.required) || anyMatch(conditions?.required, values),
|
|
55
|
+
readonly: Boolean(flags.readonly) || anyMatch(conditions?.readonly, values),
|
|
56
|
+
disabled: Boolean(flags.disabled) || anyMatch(conditions?.disabled, values)
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { evaluateConditions };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","names":[],"sources":["../../../resources/js/form/components/conditions.ts"],"sourcesContent":["import type { ConditionOperator } from \"@lattice/lattice/generated/types\";\n\nexport type Condition = { field: string; operator: ConditionOperator; value: unknown };\n\nexport type FieldConditions = {\n visible?: Condition[];\n required?: Condition[];\n readonly?: Condition[];\n disabled?: Condition[];\n};\n\nexport type FieldFlags = {\n hidden?: boolean;\n required?: boolean;\n readonly?: boolean;\n disabled?: boolean;\n};\n\nexport type FieldState = {\n hidden: boolean;\n required: boolean;\n readonly: boolean;\n disabled: boolean;\n};\n\nconst BOOLEAN_TRUE_VALUES = new Set([\"1\", \"true\", \"on\", \"yes\"]);\n\n// Mirrors PHP filter_var(FILTER_VALIDATE_BOOLEAN) so conditions evaluate\n// identically on the server and the client.\nfunction toBoolean(value: unknown): boolean {\n if (typeof value === \"boolean\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n return value === 1;\n }\n\n return BOOLEAN_TRUE_VALUES.has(String(value).toLowerCase());\n}\n\nfunction equals(actual: unknown, expected: unknown): boolean {\n if (typeof expected === \"boolean\") {\n return toBoolean(actual) === expected;\n }\n return String(actual ?? \"\") === String(expected ?? \"\");\n}\n\nfunction isIn(actual: unknown, expected: unknown): boolean {\n const needles = (Array.isArray(expected) ? expected : [expected]).map((value) => String(value));\n return needles.includes(String(actual ?? \"\"));\n}\n\nfunction isBlank(value: unknown): boolean {\n return value == null || String(value) === \"\";\n}\n\n// Unknown operators from untrusted payloads fail open (the condition matches).\n// The `never` parameter makes a ConditionOperator added without a case above a\n// compile error rather than a silent fall-through.\nfunction evaluateUnknownOperator(_operator: never): boolean {\n return true;\n}\n\nfunction evaluateOp(operator: ConditionOperator, actual: unknown, expected: unknown): boolean {\n switch (operator) {\n case \"eq\":\n return equals(actual, expected);\n case \"neq\":\n return !equals(actual, expected);\n case \"gt\":\n return Number(actual) > Number(expected);\n case \"lt\":\n return Number(actual) < Number(expected);\n case \"gte\":\n return Number(actual) >= Number(expected);\n case \"lte\":\n return Number(actual) <= Number(expected);\n case \"contains\":\n return String(actual ?? \"\").includes(String(expected ?? \"\"));\n case \"starts_with\":\n return String(actual ?? \"\").startsWith(String(expected ?? \"\"));\n case \"ends_with\":\n return String(actual ?? \"\").endsWith(String(expected ?? \"\"));\n case \"in\":\n return isIn(actual, expected);\n case \"not_in\":\n return !isIn(actual, expected);\n case \"empty\":\n return isBlank(actual);\n case \"filled\":\n return !isBlank(actual);\n default:\n return evaluateUnknownOperator(operator);\n }\n}\n\nfunction allMatch(conditions: Condition[], values: Record<string, unknown>): boolean {\n return conditions.every((condition) =>\n evaluateOp(condition.operator, values[condition.field], condition.value),\n );\n}\n\nfunction anyMatch(conditions: Condition[] | undefined, values: Record<string, unknown>): boolean {\n return Boolean(\n conditions?.some((condition) =>\n evaluateOp(condition.operator, values[condition.field], condition.value),\n ),\n );\n}\n\nexport function evaluateConditions(\n conditions: FieldConditions | undefined,\n values: Record<string, unknown>,\n flags: FieldFlags,\n): FieldState {\n const visible = !conditions?.visible?.length || allMatch(conditions.visible, values);\n\n return {\n hidden: Boolean(flags.hidden) || !visible,\n required: Boolean(flags.required) || anyMatch(conditions?.required, values),\n readonly: Boolean(flags.readonly) || anyMatch(conditions?.readonly, values),\n disabled: Boolean(flags.disabled) || anyMatch(conditions?.disabled, values),\n };\n}\n"],"mappings":";AAyBA,IAAM,sBAAsB,IAAI,IAAI;CAAC;CAAK;CAAQ;CAAM;AAAK,CAAC;AAI9D,SAAS,UAAU,OAAyB;CAC1C,IAAI,OAAO,UAAU,WACnB,OAAO;CAGT,IAAI,OAAO,UAAU,UACnB,OAAO,UAAU;CAGnB,OAAO,oBAAoB,IAAI,OAAO,KAAK,EAAE,YAAY,CAAC;AAC5D;AAEA,SAAS,OAAO,QAAiB,UAA4B;CAC3D,IAAI,OAAO,aAAa,WACtB,OAAO,UAAU,MAAM,MAAM;CAE/B,OAAO,OAAO,UAAU,EAAE,MAAM,OAAO,YAAY,EAAE;AACvD;AAEA,SAAS,KAAK,QAAiB,UAA4B;CAEzD,QADiB,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC,QAAQ,GAAG,KAAK,UAAU,OAAO,KAAK,CACtF,EAAQ,SAAS,OAAO,UAAU,EAAE,CAAC;AAC9C;AAEA,SAAS,QAAQ,OAAyB;CACxC,OAAO,SAAS,QAAQ,OAAO,KAAK,MAAM;AAC5C;AAKA,SAAS,wBAAwB,WAA2B;CAC1D,OAAO;AACT;AAEA,SAAS,WAAW,UAA6B,QAAiB,UAA4B;CAC5F,QAAQ,UAAR;EACE,KAAK,MACH,OAAO,OAAO,QAAQ,QAAQ;EAChC,KAAK,OACH,OAAO,CAAC,OAAO,QAAQ,QAAQ;EACjC,KAAK,MACH,OAAO,OAAO,MAAM,IAAI,OAAO,QAAQ;EACzC,KAAK,MACH,OAAO,OAAO,MAAM,IAAI,OAAO,QAAQ;EACzC,KAAK,OACH,OAAO,OAAO,MAAM,KAAK,OAAO,QAAQ;EAC1C,KAAK,OACH,OAAO,OAAO,MAAM,KAAK,OAAO,QAAQ;EAC1C,KAAK,YACH,OAAO,OAAO,UAAU,EAAE,EAAE,SAAS,OAAO,YAAY,EAAE,CAAC;EAC7D,KAAK,eACH,OAAO,OAAO,UAAU,EAAE,EAAE,WAAW,OAAO,YAAY,EAAE,CAAC;EAC/D,KAAK,aACH,OAAO,OAAO,UAAU,EAAE,EAAE,SAAS,OAAO,YAAY,EAAE,CAAC;EAC7D,KAAK,MACH,OAAO,KAAK,QAAQ,QAAQ;EAC9B,KAAK,UACH,OAAO,CAAC,KAAK,QAAQ,QAAQ;EAC/B,KAAK,SACH,OAAO,QAAQ,MAAM;EACvB,KAAK,UACH,OAAO,CAAC,QAAQ,MAAM;EACxB,SACE,OAAO,wBAAwB,QAAQ;CAC3C;AACF;AAEA,SAAS,SAAS,YAAyB,QAA0C;CACnF,OAAO,WAAW,OAAO,cACvB,WAAW,UAAU,UAAU,OAAO,UAAU,QAAQ,UAAU,KAAK,CACzE;AACF;AAEA,SAAS,SAAS,YAAqC,QAA0C;CAC/F,OAAO,QACL,YAAY,MAAM,cAChB,WAAW,UAAU,UAAU,OAAO,UAAU,QAAQ,UAAU,KAAK,CACzE,CACF;AACF;AAEA,SAAgB,mBACd,YACA,QACA,OACY;CACZ,MAAM,UAAU,CAAC,YAAY,SAAS,UAAU,SAAS,WAAW,SAAS,MAAM;CAEnF,OAAO;EACL,QAAQ,QAAQ,MAAM,MAAM,KAAK,CAAC;EAClC,UAAU,QAAQ,MAAM,QAAQ,KAAK,SAAS,YAAY,UAAU,MAAM;EAC1E,UAAU,QAAQ,MAAM,QAAQ,KAAK,SAAS,YAAY,UAAU,MAAM;EAC1E,UAAU,QAAQ,MAAM,QAAQ,KAAK,SAAS,YAAY,UAAU,MAAM;CAC5E;AACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type FormContextValue = {
|
|
2
|
+
action: string;
|
|
3
|
+
clearErrors: (field: string) => void;
|
|
4
|
+
componentRef: string;
|
|
5
|
+
errors: Record<string, string | undefined>;
|
|
6
|
+
fieldLabels: Record<string, string>;
|
|
7
|
+
invalid: (field: string) => boolean;
|
|
8
|
+
precognitive: boolean;
|
|
9
|
+
processing: boolean;
|
|
10
|
+
touch: (field: string) => void;
|
|
11
|
+
validate: (field: string) => void;
|
|
12
|
+
validating: boolean;
|
|
13
|
+
valid: (field: string) => boolean;
|
|
14
|
+
};
|
|
15
|
+
export declare function FormProvider({ children, value, }: {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
value: FormContextValue;
|
|
18
|
+
}): import("react").JSX.Element;
|
|
19
|
+
export declare function useFormContext(): FormContextValue;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region resources/js/form/components/context.tsx
|
|
4
|
+
var FormContext = createContext({
|
|
5
|
+
action: "#",
|
|
6
|
+
clearErrors: () => {},
|
|
7
|
+
componentRef: "",
|
|
8
|
+
errors: {},
|
|
9
|
+
fieldLabels: {},
|
|
10
|
+
invalid: () => false,
|
|
11
|
+
precognitive: false,
|
|
12
|
+
processing: false,
|
|
13
|
+
touch: () => {},
|
|
14
|
+
validate: () => {},
|
|
15
|
+
validating: false,
|
|
16
|
+
valid: () => false
|
|
17
|
+
});
|
|
18
|
+
function FormProvider({ children, value }) {
|
|
19
|
+
return /* @__PURE__ */ jsx(FormContext.Provider, {
|
|
20
|
+
value,
|
|
21
|
+
children
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function useFormContext() {
|
|
25
|
+
return useContext(FormContext);
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { FormProvider, useFormContext };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../resources/js/form/components/context.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\ntype FormContextValue = {\n action: string;\n clearErrors: (field: string) => void;\n componentRef: string;\n errors: Record<string, string | undefined>;\n fieldLabels: Record<string, string>;\n invalid: (field: string) => boolean;\n precognitive: boolean;\n processing: boolean;\n touch: (field: string) => void;\n validate: (field: string) => void;\n validating: boolean;\n valid: (field: string) => boolean;\n};\n\nconst FormContext = createContext<FormContextValue>({\n action: \"#\",\n clearErrors: () => {},\n componentRef: \"\",\n errors: {},\n fieldLabels: {},\n invalid: () => false,\n precognitive: false,\n processing: false,\n touch: () => {},\n validate: () => {},\n validating: false,\n valid: () => false,\n});\n\nexport function FormProvider({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: FormContextValue;\n}) {\n return <FormContext.Provider value={value}>{children}</FormContext.Provider>;\n}\n\nexport function useFormContext() {\n return useContext(FormContext);\n}\n"],"mappings":";;;AAiBA,IAAM,cAAc,cAAgC;CAClD,QAAQ;CACR,mBAAmB,CAAC;CACpB,cAAc;CACd,QAAQ,CAAC;CACT,aAAa,CAAC;CACd,eAAe;CACf,cAAc;CACd,YAAY;CACZ,aAAa,CAAC;CACd,gBAAgB,CAAC;CACjB,YAAY;CACZ,aAAa;AACf,CAAC;AAED,SAAgB,aAAa,EAC3B,UACA,SAIC;CACD,OAAO,oBAAC,YAAY,UAAb;EAA6B;EAAQ;CAA+B,CAAA;AAC7E;AAEA,SAAgB,iBAAiB;CAC/B,OAAO,WAAW,WAAW;AAC/B"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
declare module '../../../../../core/types' {
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
"form.checkbox": {
|
|
5
|
+
checked?: boolean;
|
|
6
|
+
conditions?: unknown;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
label?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
tabIndex?: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export declare const CheckboxComponent: RendererComponent<"form.checkbox">;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { getOptionalNumberProp, getStringProp } from "../../../core/props.js";
|
|
2
|
+
import { useFormContext } from "../context.js";
|
|
3
|
+
import { useFormValue, useSetFormValue } from "../values.js";
|
|
4
|
+
import { Checkbox } from "../base/checkbox.js";
|
|
5
|
+
import { Label } from "../base/label.js";
|
|
6
|
+
import { useDependentField } from "../use-dependent-field.js";
|
|
7
|
+
import { useEffect } from "react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region resources/js/form/components/fields/checkbox.tsx
|
|
10
|
+
function isTruthy(value) {
|
|
11
|
+
return value === true || value === "true" || value === "1" || value === 1;
|
|
12
|
+
}
|
|
13
|
+
var CheckboxComponent = ({ node }) => {
|
|
14
|
+
const { clearErrors, precognitive, validate } = useFormContext();
|
|
15
|
+
const { hidden, readonly, disabled } = useDependentField(node);
|
|
16
|
+
const name = getStringProp(node.props, "name");
|
|
17
|
+
const setValue = useSetFormValue();
|
|
18
|
+
const storedValue = useFormValue(name);
|
|
19
|
+
const checked = storedValue !== void 0 ? isTruthy(storedValue) : Boolean(node.props?.checked);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (storedValue === void 0) setValue(name, Boolean(node.props?.checked));
|
|
22
|
+
}, [
|
|
23
|
+
name,
|
|
24
|
+
node.props?.checked,
|
|
25
|
+
setValue,
|
|
26
|
+
storedValue
|
|
27
|
+
]);
|
|
28
|
+
if (hidden) return null;
|
|
29
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
30
|
+
className: "flex items-center space-x-3",
|
|
31
|
+
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
32
|
+
checked,
|
|
33
|
+
disabled: readonly || disabled,
|
|
34
|
+
id: name,
|
|
35
|
+
name,
|
|
36
|
+
onCheckedChange: (next) => {
|
|
37
|
+
setValue(name, next === true);
|
|
38
|
+
if (precognitive) window.requestAnimationFrame(() => validate(name));
|
|
39
|
+
else clearErrors(name);
|
|
40
|
+
},
|
|
41
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex")
|
|
42
|
+
}), /* @__PURE__ */ jsx(Label, {
|
|
43
|
+
htmlFor: name,
|
|
44
|
+
children: getStringProp(node.props, "label")
|
|
45
|
+
})]
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
//#endregion
|
|
49
|
+
export { CheckboxComponent };
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=checkbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":[],"sources":["../../../../resources/js/form/components/fields/checkbox.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { Checkbox } from \"../base/checkbox\";\nimport { Label } from \"../base/label\";\nimport { useFormContext } from \"../context\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useFormValue, useSetFormValue } from \"../values\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.checkbox\": {\n checked?: boolean;\n conditions?: unknown;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n name?: string;\n required?: boolean;\n tabIndex?: number;\n };\n }\n}\n\nfunction isTruthy(value: unknown): boolean {\n return value === true || value === \"true\" || value === \"1\" || value === 1;\n}\n\nexport const CheckboxComponent: RendererComponent<\"form.checkbox\"> = ({ node }) => {\n const { clearErrors, precognitive, validate } = useFormContext();\n const { hidden, readonly, disabled } = useDependentField(node);\n const name = getStringProp(node.props, \"name\");\n const setValue = useSetFormValue();\n const storedValue = useFormValue(name);\n const checked = storedValue !== undefined ? isTruthy(storedValue) : Boolean(node.props?.checked);\n\n useEffect(() => {\n if (storedValue === undefined) {\n setValue(name, Boolean(node.props?.checked));\n }\n }, [name, node.props?.checked, setValue, storedValue]);\n\n if (hidden) {\n return null;\n }\n\n return (\n <div className=\"flex items-center space-x-3\">\n <Checkbox\n checked={checked}\n disabled={readonly || disabled}\n id={name}\n name={name}\n onCheckedChange={(next) => {\n const value = next === true;\n setValue(name, value);\n if (precognitive) {\n window.requestAnimationFrame(() => validate(name));\n } else {\n clearErrors(name);\n }\n }}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n />\n <Label htmlFor={name}>{getStringProp(node.props, \"label\")}</Label>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AAwBA,SAAS,SAAS,OAAyB;CACzC,OAAO,UAAU,QAAQ,UAAU,UAAU,UAAU,OAAO,UAAU;AAC1E;AAEA,IAAa,qBAAyD,EAAE,WAAW;CACjF,MAAM,EAAE,aAAa,cAAc,aAAa,eAAe;CAC/D,MAAM,EAAE,QAAQ,UAAU,aAAa,kBAAkB,IAAI;CAC7D,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,WAAW,gBAAgB;CACjC,MAAM,cAAc,aAAa,IAAI;CACrC,MAAM,UAAU,gBAAgB,KAAA,IAAY,SAAS,WAAW,IAAI,QAAQ,KAAK,OAAO,OAAO;CAE/F,gBAAgB;EACd,IAAI,gBAAgB,KAAA,GAClB,SAAS,MAAM,QAAQ,KAAK,OAAO,OAAO,CAAC;CAE/C,GAAG;EAAC;EAAM,KAAK,OAAO;EAAS;EAAU;CAAW,CAAC;CAErD,IAAI,QACF,OAAO;CAGT,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,UAAD;GACW;GACT,UAAU,YAAY;GACtB,IAAI;GACE;GACN,kBAAkB,SAAS;IAEzB,SAAS,MADK,SAAS,IACH;IACpB,IAAI,cACF,OAAO,4BAA4B,SAAS,IAAI,CAAC;SAEjD,YAAY,IAAI;GAEpB;GACA,UAAU,sBAAsB,KAAK,OAAO,UAAU;EACvD,CAAA,GACD,oBAAC,OAAD;GAAO,SAAS;aAAO,cAAc,KAAK,OAAO,OAAO;EAAS,CAAA,CAC9D;;AAET"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Option } from '../../../../../core/props';
|
|
2
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
3
|
+
declare module '../../../../../core/types' {
|
|
4
|
+
interface ComponentProps {
|
|
5
|
+
"form.choice": {
|
|
6
|
+
label?: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
options?: Option[];
|
|
9
|
+
tabIndex?: number;
|
|
10
|
+
value?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export declare const ChoiceComponent: RendererComponent<"form.choice">;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getOptionalNumberProp, getOptions, getStringProp } from "../../../core/props.js";
|
|
2
|
+
import { SegmentedPills } from "../../../core/components/segmented-pills.js";
|
|
3
|
+
import { useResolvedNode } from "../resolved-nodes.js";
|
|
4
|
+
import { useFormValue, useSetFormValue } from "../values.js";
|
|
5
|
+
import { FormFieldFrame } from "../base/field.js";
|
|
6
|
+
import { useControlledField } from "../use-controlled-field.js";
|
|
7
|
+
import { useEffect, useMemo } from "react";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
//#region resources/js/form/components/fields/choice.tsx
|
|
10
|
+
var ChoiceComponent = ({ node }) => {
|
|
11
|
+
const resolvedNode = useResolvedNode(node);
|
|
12
|
+
const { name, value, error, hidden, required, readonly, disabled, commit } = useControlledField(node);
|
|
13
|
+
const storedValue = useFormValue(name);
|
|
14
|
+
const setValue = useSetFormValue();
|
|
15
|
+
const options = useMemo(() => getOptions(resolvedNode.props), [resolvedNode.props]);
|
|
16
|
+
const fallbackValue = options[0]?.value ?? "";
|
|
17
|
+
const selected = value || fallbackValue;
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
if (storedValue === void 0 && selected) setValue(name, selected);
|
|
20
|
+
}, [
|
|
21
|
+
name,
|
|
22
|
+
storedValue,
|
|
23
|
+
selected,
|
|
24
|
+
setValue
|
|
25
|
+
]);
|
|
26
|
+
if (hidden || options.length === 0) return null;
|
|
27
|
+
return /* @__PURE__ */ jsxs(FormFieldFrame, {
|
|
28
|
+
error,
|
|
29
|
+
label: getStringProp(node.props, "label"),
|
|
30
|
+
name,
|
|
31
|
+
required,
|
|
32
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
33
|
+
name,
|
|
34
|
+
type: "hidden",
|
|
35
|
+
value: selected
|
|
36
|
+
}), /* @__PURE__ */ jsx(SegmentedPills, {
|
|
37
|
+
ariaLabel: getStringProp(node.props, "label"),
|
|
38
|
+
disabled: readonly || disabled,
|
|
39
|
+
onSelect: commit,
|
|
40
|
+
options,
|
|
41
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
42
|
+
value: selected
|
|
43
|
+
})]
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
//#endregion
|
|
47
|
+
export { ChoiceComponent };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=choice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice.js","names":[],"sources":["../../../../resources/js/form/components/fields/choice.tsx"],"sourcesContent":["import { useEffect, useMemo } from \"react\";\nimport {\n type Option,\n getOptionalNumberProp,\n getOptions,\n getStringProp,\n} from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { SegmentedPills } from \"@lattice/lattice/core/components/segmented-pills\";\nimport { FormFieldFrame } from \"../base/field\";\nimport { useControlledField } from \"../use-controlled-field\";\nimport { useResolvedNode } from \"../resolved-nodes\";\nimport { useFormValue, useSetFormValue } from \"../values\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.choice\": {\n label?: string;\n name?: string;\n options?: Option[];\n tabIndex?: number;\n value?: string;\n };\n }\n}\n\nexport const ChoiceComponent: RendererComponent<\"form.choice\"> = ({ node }) => {\n const resolvedNode = useResolvedNode(node);\n const { name, value, error, hidden, required, readonly, disabled, commit } =\n useControlledField(node);\n const storedValue = useFormValue(name);\n const setValue = useSetFormValue();\n const options = useMemo(() => getOptions(resolvedNode.props), [resolvedNode.props]);\n const fallbackValue = options[0]?.value ?? \"\";\n const selected = value || fallbackValue;\n\n // Seed the store with the default selection so dependent fields and the\n // submitted payload reflect it before the user interacts.\n useEffect(() => {\n if (storedValue === undefined && selected) {\n setValue(name, selected);\n }\n }, [name, storedValue, selected, setValue]);\n\n if (hidden || options.length === 0) {\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 name={name} type=\"hidden\" value={selected} />\n <SegmentedPills\n ariaLabel={getStringProp(node.props, \"label\")}\n disabled={readonly || disabled}\n onSelect={commit}\n options={options}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n value={selected}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;;;;AA0BA,IAAa,mBAAqD,EAAE,WAAW;CAC7E,MAAM,eAAe,gBAAgB,IAAI;CACzC,MAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WAChE,mBAAmB,IAAI;CACzB,MAAM,cAAc,aAAa,IAAI;CACrC,MAAM,WAAW,gBAAgB;CACjC,MAAM,UAAU,cAAc,WAAW,aAAa,KAAK,GAAG,CAAC,aAAa,KAAK,CAAC;CAClF,MAAM,gBAAgB,QAAQ,IAAI,SAAS;CAC3C,MAAM,WAAW,SAAS;CAI1B,gBAAgB;EACd,IAAI,gBAAgB,KAAA,KAAa,UAC/B,SAAS,MAAM,QAAQ;CAE3B,GAAG;EAAC;EAAM;EAAa;EAAU;CAAQ,CAAC;CAE1C,IAAI,UAAU,QAAQ,WAAW,GAC/B,OAAO;CAGT,OACE,qBAAC,gBAAD;EACS;EACP,OAAO,cAAc,KAAK,OAAO,OAAO;EAClC;EACI;YAJZ,CAME,oBAAC,SAAD;GAAa;GAAM,MAAK;GAAS,OAAO;EAAW,CAAA,GACnD,oBAAC,gBAAD;GACE,WAAW,cAAc,KAAK,OAAO,OAAO;GAC5C,UAAU,YAAY;GACtB,UAAU;GACD;GACT,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACtD,OAAO;EACR,CAAA,CACa;;AAEpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
declare module '../../../../../core/types' {
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
"form.date-input": {
|
|
5
|
+
autoFocus?: boolean;
|
|
6
|
+
conditions?: unknown;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
label?: string;
|
|
10
|
+
max?: string;
|
|
11
|
+
min?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
readonly?: boolean;
|
|
14
|
+
required?: boolean;
|
|
15
|
+
tabIndex?: number;
|
|
16
|
+
value?: string;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export declare const DateInputComponent: RendererComponent<"form.date-input">;
|
|
@@ -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/date-input.tsx
|
|
7
|
+
var DateInputComponent = ({ 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
|
+
autoFocus: getBooleanProp(node.props, "autoFocus"),
|
|
17
|
+
disabled,
|
|
18
|
+
id: name,
|
|
19
|
+
max: getStringProp(node.props, "max") || void 0,
|
|
20
|
+
min: getStringProp(node.props, "min") || void 0,
|
|
21
|
+
name,
|
|
22
|
+
onChange: (event) => commit(event.target.value),
|
|
23
|
+
readOnly: readonly,
|
|
24
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
25
|
+
type: "date",
|
|
26
|
+
value
|
|
27
|
+
})
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
//#endregion
|
|
31
|
+
export { DateInputComponent };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=date-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/date-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.date-input\": {\n autoFocus?: boolean;\n conditions?: unknown;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n max?: string;\n min?: string;\n name?: string;\n readonly?: boolean;\n required?: boolean;\n tabIndex?: number;\n value?: string;\n };\n }\n}\n\nexport const DateInputComponent: RendererComponent<\"form.date-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 autoFocus={getBooleanProp(node.props, \"autoFocus\")}\n disabled={disabled}\n id={name}\n max={getStringProp(node.props, \"max\") || undefined}\n min={getStringProp(node.props, \"min\") || undefined}\n name={name}\n onChange={(event) => commit(event.target.value)}\n readOnly={readonly}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n type=\"date\"\n value={value}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;AAyBA,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,WAAW,eAAe,KAAK,OAAO,WAAW;GACvC;GACV,IAAI;GACJ,KAAK,cAAc,KAAK,OAAO,KAAK,KAAK,KAAA;GACzC,KAAK,cAAc,KAAK,OAAO,KAAK,KAAK,KAAA;GACnC;GACN,WAAW,UAAU,OAAO,MAAM,OAAO,KAAK;GAC9C,UAAU;GACV,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACtD,MAAK;GACE;EACR,CAAA;CACa,CAAA;AAEpB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
declare module '../../../../../core/types' {
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
"form.hidden-input": {
|
|
5
|
+
name?: string;
|
|
6
|
+
value?: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export declare const HiddenInputComponent: RendererComponent<"form.hidden-input">;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getStringProp } from "../../../core/props.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
//#region resources/js/form/components/fields/hidden-input.tsx
|
|
4
|
+
var HiddenInputComponent = ({ node }) => /* @__PURE__ */ jsx("input", {
|
|
5
|
+
defaultValue: getStringProp(node.props, "value"),
|
|
6
|
+
name: getStringProp(node.props, "name"),
|
|
7
|
+
type: "hidden"
|
|
8
|
+
});
|
|
9
|
+
//#endregion
|
|
10
|
+
export { HiddenInputComponent };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=hidden-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hidden-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/hidden-input.tsx"],"sourcesContent":["import { getStringProp } from \"@lattice/lattice/core/props\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.hidden-input\": {\n name?: string;\n value?: string;\n };\n }\n}\n\nexport const HiddenInputComponent: RendererComponent<\"form.hidden-input\"> = ({ node }) => (\n <input\n defaultValue={getStringProp(node.props, \"value\")}\n name={getStringProp(node.props, \"name\")}\n type=\"hidden\"\n />\n);\n"],"mappings":";;;AAYA,IAAa,wBAAgE,EAAE,WAC7E,oBAAC,SAAD;CACE,cAAc,cAAc,KAAK,OAAO,OAAO;CAC/C,MAAM,cAAc,KAAK,OAAO,MAAM;CACtC,MAAK;AACN,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
declare module '../../../../../core/types' {
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
"form.number-input": {
|
|
5
|
+
autoFocus?: boolean;
|
|
6
|
+
conditions?: unknown;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
hidden?: boolean;
|
|
9
|
+
label?: string;
|
|
10
|
+
max?: number;
|
|
11
|
+
min?: number;
|
|
12
|
+
name?: string;
|
|
13
|
+
placeholder?: string;
|
|
14
|
+
readonly?: boolean;
|
|
15
|
+
required?: boolean;
|
|
16
|
+
slider?: boolean;
|
|
17
|
+
step?: number;
|
|
18
|
+
tabIndex?: number;
|
|
19
|
+
value?: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export declare const NumberInputComponent: RendererComponent<"form.number-input">;
|
|
@@ -0,0 +1,55 @@
|
|
|
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, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region resources/js/form/components/fields/number-input.tsx
|
|
7
|
+
var NumberInputComponent = ({ node }) => {
|
|
8
|
+
const { name, value, error, hidden, required, readonly, disabled, commit } = useControlledField(node);
|
|
9
|
+
if (hidden) return null;
|
|
10
|
+
const onChange = (event) => commit(event.target.value);
|
|
11
|
+
return /* @__PURE__ */ jsx(FormFieldFrame, {
|
|
12
|
+
error,
|
|
13
|
+
label: getStringProp(node.props, "label"),
|
|
14
|
+
name,
|
|
15
|
+
required,
|
|
16
|
+
children: getBooleanProp(node.props, "slider") ? /* @__PURE__ */ jsxs("div", {
|
|
17
|
+
className: "flex items-center gap-3",
|
|
18
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
19
|
+
"aria-label": getStringProp(node.props, "label"),
|
|
20
|
+
className: "h-2 w-full cursor-pointer appearance-none rounded-lt-sm bg-lt-muted accent-lt-primary disabled:cursor-not-allowed disabled:opacity-50",
|
|
21
|
+
disabled: disabled || readonly,
|
|
22
|
+
id: name,
|
|
23
|
+
max: getOptionalNumberProp(node.props, "max"),
|
|
24
|
+
min: getOptionalNumberProp(node.props, "min"),
|
|
25
|
+
name,
|
|
26
|
+
onChange,
|
|
27
|
+
step: getOptionalNumberProp(node.props, "step"),
|
|
28
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
29
|
+
type: "range",
|
|
30
|
+
value
|
|
31
|
+
}), /* @__PURE__ */ jsx("output", {
|
|
32
|
+
className: "w-10 shrink-0 text-right text-sm tabular-nums text-lt-fg",
|
|
33
|
+
children: value
|
|
34
|
+
})]
|
|
35
|
+
}) : /* @__PURE__ */ jsx(Input, {
|
|
36
|
+
autoFocus: getBooleanProp(node.props, "autoFocus"),
|
|
37
|
+
disabled,
|
|
38
|
+
id: name,
|
|
39
|
+
max: getOptionalNumberProp(node.props, "max"),
|
|
40
|
+
min: getOptionalNumberProp(node.props, "min"),
|
|
41
|
+
name,
|
|
42
|
+
onChange,
|
|
43
|
+
placeholder: getStringProp(node.props, "placeholder"),
|
|
44
|
+
readOnly: readonly,
|
|
45
|
+
step: getOptionalNumberProp(node.props, "step"),
|
|
46
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex"),
|
|
47
|
+
type: "number",
|
|
48
|
+
value
|
|
49
|
+
})
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
//#endregion
|
|
53
|
+
export { NumberInputComponent };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=number-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/number-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.number-input\": {\n autoFocus?: boolean;\n conditions?: unknown;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n max?: number;\n min?: number;\n name?: string;\n placeholder?: string;\n readonly?: boolean;\n required?: boolean;\n slider?: boolean;\n step?: number;\n tabIndex?: number;\n value?: string;\n };\n }\n}\n\nexport const NumberInputComponent: RendererComponent<\"form.number-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 const onChange = (event: React.ChangeEvent<HTMLInputElement>): void => commit(event.target.value);\n\n return (\n <FormFieldFrame\n error={error}\n label={getStringProp(node.props, \"label\")}\n name={name}\n required={required}\n >\n {getBooleanProp(node.props, \"slider\") ? (\n <div className=\"flex items-center gap-3\">\n <input\n aria-label={getStringProp(node.props, \"label\")}\n className=\"h-2 w-full cursor-pointer appearance-none rounded-lt-sm bg-lt-muted accent-lt-primary disabled:cursor-not-allowed disabled:opacity-50\"\n disabled={disabled || readonly}\n id={name}\n max={getOptionalNumberProp(node.props, \"max\")}\n min={getOptionalNumberProp(node.props, \"min\")}\n name={name}\n onChange={onChange}\n step={getOptionalNumberProp(node.props, \"step\")}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n type=\"range\"\n value={value}\n />\n <output className=\"w-10 shrink-0 text-right text-sm tabular-nums text-lt-fg\">\n {value}\n </output>\n </div>\n ) : (\n <Input\n autoFocus={getBooleanProp(node.props, \"autoFocus\")}\n disabled={disabled}\n id={name}\n max={getOptionalNumberProp(node.props, \"max\")}\n min={getOptionalNumberProp(node.props, \"min\")}\n name={name}\n onChange={onChange}\n placeholder={getStringProp(node.props, \"placeholder\")}\n readOnly={readonly}\n step={getOptionalNumberProp(node.props, \"step\")}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n type=\"number\"\n value={value}\n />\n )}\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;AA4BA,IAAa,wBAAgE,EAAE,WAAW;CACxF,MAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WAChE,mBAAmB,IAAI;CAEzB,IAAI,QACF,OAAO;CAGT,MAAM,YAAY,UAAqD,OAAO,MAAM,OAAO,KAAK;CAEhG,OACE,oBAAC,gBAAD;EACS;EACP,OAAO,cAAc,KAAK,OAAO,OAAO;EAClC;EACI;YAET,eAAe,KAAK,OAAO,QAAQ,IAClC,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,SAAD;IACE,cAAY,cAAc,KAAK,OAAO,OAAO;IAC7C,WAAU;IACV,UAAU,YAAY;IACtB,IAAI;IACJ,KAAK,sBAAsB,KAAK,OAAO,KAAK;IAC5C,KAAK,sBAAsB,KAAK,OAAO,KAAK;IACtC;IACI;IACV,MAAM,sBAAsB,KAAK,OAAO,MAAM;IAC9C,UAAU,sBAAsB,KAAK,OAAO,UAAU;IACtD,MAAK;IACE;GACR,CAAA,GACD,oBAAC,UAAD;IAAQ,WAAU;cACf;GACK,CAAA,CACL;OAEL,oBAAC,OAAD;GACE,WAAW,eAAe,KAAK,OAAO,WAAW;GACvC;GACV,IAAI;GACJ,KAAK,sBAAsB,KAAK,OAAO,KAAK;GAC5C,KAAK,sBAAsB,KAAK,OAAO,KAAK;GACtC;GACI;GACV,aAAa,cAAc,KAAK,OAAO,aAAa;GACpD,UAAU;GACV,MAAM,sBAAsB,KAAK,OAAO,MAAM;GAC9C,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACtD,MAAK;GACE;EACR,CAAA;CAEW,CAAA;AAEpB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
import { FormLabelAction } from '../types';
|
|
3
|
+
type PasswordConfirmation = {
|
|
4
|
+
label?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
};
|
|
8
|
+
declare module '../../../../../core/types' {
|
|
9
|
+
interface ComponentProps {
|
|
10
|
+
"form.password-input": {
|
|
11
|
+
autoComplete?: string;
|
|
12
|
+
autoFocus?: boolean;
|
|
13
|
+
conditions?: unknown;
|
|
14
|
+
confirmation?: PasswordConfirmation;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
hidden?: boolean;
|
|
17
|
+
label?: string;
|
|
18
|
+
labelAction?: FormLabelAction;
|
|
19
|
+
name?: string;
|
|
20
|
+
passwordRules?: string;
|
|
21
|
+
placeholder?: string;
|
|
22
|
+
readonly?: boolean;
|
|
23
|
+
required?: boolean;
|
|
24
|
+
tabIndex?: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export declare const PasswordInputComponent: RendererComponent<"form.password-input">;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { getBooleanProp, getOptionalNumberProp, getStringProp } from "../../../core/props.js";
|
|
2
|
+
import { useFormContext } from "../context.js";
|
|
3
|
+
import { useDependentField } from "../use-dependent-field.js";
|
|
4
|
+
import { FormFieldFrame } from "../base/field.js";
|
|
5
|
+
import { useFieldCommit } from "../use-field-commit.js";
|
|
6
|
+
import PasswordInput from "../base/password-input.js";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
//#region resources/js/form/components/fields/password-input.tsx
|
|
9
|
+
function getPasswordConfirmation(props) {
|
|
10
|
+
const value = props?.confirmation;
|
|
11
|
+
if (typeof value !== "object" || value === null) return;
|
|
12
|
+
const confirmation = value;
|
|
13
|
+
return {
|
|
14
|
+
label: typeof confirmation.label === "string" ? confirmation.label : void 0,
|
|
15
|
+
name: typeof confirmation.name === "string" ? confirmation.name : void 0,
|
|
16
|
+
placeholder: typeof confirmation.placeholder === "string" ? confirmation.placeholder : void 0
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
var PasswordInputComponent = ({ node }) => {
|
|
20
|
+
const { errors } = useFormContext();
|
|
21
|
+
const { hidden, required, readonly, disabled } = useDependentField(node);
|
|
22
|
+
const { commit } = useFieldCommit();
|
|
23
|
+
const name = getStringProp(node.props, "name");
|
|
24
|
+
const confirmation = getPasswordConfirmation(node.props);
|
|
25
|
+
const confirmationName = confirmation?.name ?? `${name}_confirmation`;
|
|
26
|
+
const passwordRules = getStringProp(node.props, "passwordRules") || void 0;
|
|
27
|
+
if (hidden) return null;
|
|
28
|
+
const onChange = (field) => (event) => {
|
|
29
|
+
commit(field, event.target.value);
|
|
30
|
+
};
|
|
31
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
32
|
+
className: "grid gap-6",
|
|
33
|
+
children: [/* @__PURE__ */ jsx(FormFieldFrame, {
|
|
34
|
+
error: errors[name],
|
|
35
|
+
label: getStringProp(node.props, "label"),
|
|
36
|
+
labelAction: node.props?.labelAction,
|
|
37
|
+
name,
|
|
38
|
+
required,
|
|
39
|
+
children: /* @__PURE__ */ jsx(PasswordInput, {
|
|
40
|
+
autoComplete: getStringProp(node.props, "autoComplete"),
|
|
41
|
+
autoFocus: getBooleanProp(node.props, "autoFocus"),
|
|
42
|
+
disabled,
|
|
43
|
+
id: name,
|
|
44
|
+
name,
|
|
45
|
+
onChange: onChange(name),
|
|
46
|
+
placeholder: getStringProp(node.props, "placeholder"),
|
|
47
|
+
passwordrules: passwordRules,
|
|
48
|
+
readOnly: readonly,
|
|
49
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex")
|
|
50
|
+
})
|
|
51
|
+
}), confirmation && /* @__PURE__ */ jsx(FormFieldFrame, {
|
|
52
|
+
error: errors[confirmationName],
|
|
53
|
+
label: confirmation.label ?? "Confirm password",
|
|
54
|
+
name: confirmationName,
|
|
55
|
+
required,
|
|
56
|
+
children: /* @__PURE__ */ jsx(PasswordInput, {
|
|
57
|
+
autoComplete: "new-password",
|
|
58
|
+
disabled,
|
|
59
|
+
id: confirmationName,
|
|
60
|
+
name: confirmationName,
|
|
61
|
+
onChange: onChange(confirmationName),
|
|
62
|
+
placeholder: confirmation.placeholder ?? confirmation.label ?? "Confirm password",
|
|
63
|
+
passwordrules: passwordRules,
|
|
64
|
+
readOnly: readonly,
|
|
65
|
+
tabIndex: getOptionalNumberProp(node.props, "tabIndex")
|
|
66
|
+
})
|
|
67
|
+
})]
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
//#endregion
|
|
71
|
+
export { PasswordInputComponent };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=password-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/password-input.tsx"],"sourcesContent":["import { getBooleanProp, getOptionalNumberProp, getStringProp } from \"@lattice/lattice/core/props\";\nimport type { NodeProps, RendererComponent } from \"@lattice/lattice/core/types\";\nimport { FormFieldFrame } from \"../base/field\";\nimport PasswordInput from \"../base/password-input\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useFieldCommit } from \"../use-field-commit\";\nimport { useFormContext } from \"../context\";\nimport type { FormLabelAction } from \"../types\";\n\ntype PasswordConfirmation = {\n label?: string;\n name?: string;\n placeholder?: string;\n};\n\nfunction getPasswordConfirmation(props: NodeProps | undefined): PasswordConfirmation | undefined {\n const value = props?.confirmation;\n\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n\n const confirmation = value as Record<string, unknown>;\n\n return {\n label: typeof confirmation.label === \"string\" ? confirmation.label : undefined,\n name: typeof confirmation.name === \"string\" ? confirmation.name : undefined,\n placeholder:\n typeof confirmation.placeholder === \"string\" ? confirmation.placeholder : undefined,\n };\n}\n\ndeclare module \"@lattice/lattice/core/types\" {\n interface ComponentProps {\n \"form.password-input\": {\n autoComplete?: string;\n autoFocus?: boolean;\n conditions?: unknown;\n confirmation?: PasswordConfirmation;\n disabled?: boolean;\n hidden?: boolean;\n label?: string;\n labelAction?: FormLabelAction;\n name?: string;\n passwordRules?: string;\n placeholder?: string;\n readonly?: boolean;\n required?: boolean;\n tabIndex?: number;\n };\n }\n}\n\nexport const PasswordInputComponent: RendererComponent<\"form.password-input\"> = ({ node }) => {\n const { errors } = useFormContext();\n const { hidden, required, readonly, disabled } = useDependentField(node);\n const { commit } = useFieldCommit();\n const name = getStringProp(node.props, \"name\");\n const confirmation = getPasswordConfirmation(node.props);\n const confirmationName = confirmation?.name ?? `${name}_confirmation`;\n const passwordRules = getStringProp(node.props, \"passwordRules\") || undefined;\n\n if (hidden) {\n return null;\n }\n\n const onChange =\n (field: string) =>\n (event: React.ChangeEvent<HTMLInputElement>): void => {\n commit(field, event.target.value);\n };\n\n return (\n <div className=\"grid gap-6\">\n <FormFieldFrame\n error={errors[name]}\n label={getStringProp(node.props, \"label\")}\n labelAction={node.props?.labelAction}\n name={name}\n required={required}\n >\n <PasswordInput\n autoComplete={getStringProp(node.props, \"autoComplete\")}\n autoFocus={getBooleanProp(node.props, \"autoFocus\")}\n disabled={disabled}\n id={name}\n name={name}\n onChange={onChange(name)}\n placeholder={getStringProp(node.props, \"placeholder\")}\n passwordrules={passwordRules}\n readOnly={readonly}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n />\n </FormFieldFrame>\n\n {confirmation && (\n <FormFieldFrame\n error={errors[confirmationName]}\n label={confirmation.label ?? \"Confirm password\"}\n name={confirmationName}\n required={required}\n >\n <PasswordInput\n autoComplete=\"new-password\"\n disabled={disabled}\n id={confirmationName}\n name={confirmationName}\n onChange={onChange(confirmationName)}\n placeholder={confirmation.placeholder ?? confirmation.label ?? \"Confirm password\"}\n passwordrules={passwordRules}\n readOnly={readonly}\n tabIndex={getOptionalNumberProp(node.props, \"tabIndex\")}\n />\n </FormFieldFrame>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAeA,SAAS,wBAAwB,OAAgE;CAC/F,MAAM,QAAQ,OAAO;CAErB,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC;CAGF,MAAM,eAAe;CAErB,OAAO;EACL,OAAO,OAAO,aAAa,UAAU,WAAW,aAAa,QAAQ,KAAA;EACrE,MAAM,OAAO,aAAa,SAAS,WAAW,aAAa,OAAO,KAAA;EAClE,aACE,OAAO,aAAa,gBAAgB,WAAW,aAAa,cAAc,KAAA;CAC9E;AACF;AAuBA,IAAa,0BAAoE,EAAE,WAAW;CAC5F,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,EAAE,QAAQ,UAAU,UAAU,aAAa,kBAAkB,IAAI;CACvE,MAAM,EAAE,WAAW,eAAe;CAClC,MAAM,OAAO,cAAc,KAAK,OAAO,MAAM;CAC7C,MAAM,eAAe,wBAAwB,KAAK,KAAK;CACvD,MAAM,mBAAmB,cAAc,QAAQ,GAAG,KAAK;CACvD,MAAM,gBAAgB,cAAc,KAAK,OAAO,eAAe,KAAK,KAAA;CAEpE,IAAI,QACF,OAAO;CAGT,MAAM,YACH,WACA,UAAqD;EACpD,OAAO,OAAO,MAAM,OAAO,KAAK;CAClC;CAEF,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,gBAAD;GACE,OAAO,OAAO;GACd,OAAO,cAAc,KAAK,OAAO,OAAO;GACxC,aAAa,KAAK,OAAO;GACnB;GACI;aAEV,oBAAC,eAAD;IACE,cAAc,cAAc,KAAK,OAAO,cAAc;IACtD,WAAW,eAAe,KAAK,OAAO,WAAW;IACvC;IACV,IAAI;IACE;IACN,UAAU,SAAS,IAAI;IACvB,aAAa,cAAc,KAAK,OAAO,aAAa;IACpD,eAAe;IACf,UAAU;IACV,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACvD,CAAA;EACa,CAAA,GAEf,gBACC,oBAAC,gBAAD;GACE,OAAO,OAAO;GACd,OAAO,aAAa,SAAS;GAC7B,MAAM;GACI;aAEV,oBAAC,eAAD;IACE,cAAa;IACH;IACV,IAAI;IACJ,MAAM;IACN,UAAU,SAAS,gBAAgB;IACnC,aAAa,aAAa,eAAe,aAAa,SAAS;IAC/D,eAAe;IACf,UAAU;IACV,UAAU,sBAAsB,KAAK,OAAO,UAAU;GACvD,CAAA;EACa,CAAA,CAEf;;AAET"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RendererComponent } from '../../../../../core/types';
|
|
2
|
+
declare module '../../../../../core/types' {
|
|
3
|
+
interface ComponentProps {
|
|
4
|
+
"form.rich-editor": {
|
|
5
|
+
conditions?: unknown;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
hidden?: boolean;
|
|
8
|
+
label?: string;
|
|
9
|
+
name?: string;
|
|
10
|
+
placeholder?: string;
|
|
11
|
+
readonly?: boolean;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
value?: unknown;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export declare const RichEditorComponent: RendererComponent<"form.rich-editor">;
|