@lattice-php/lattice 0.1.0 → 0.2.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/dist/_virtual/_rolldown/runtime.js +8 -0
- package/dist/action/components/action-form.d.ts +24 -0
- package/dist/action/components/action-form.js +270 -0
- package/dist/action/components/action-form.js.map +1 -0
- package/dist/action/components/action-group.d.ts +1 -8
- package/dist/action/components/action-group.js +24 -66
- package/dist/action/components/action-group.js.map +1 -1
- package/dist/action/components/action.d.ts +1 -24
- package/dist/action/components/action.js +61 -46
- package/dist/action/components/action.js.map +1 -1
- package/dist/action/effects.d.ts +6 -25
- package/dist/action/effects.js +2 -2
- package/dist/action/effects.js.map +1 -1
- package/dist/action/index.d.ts +1 -1
- package/dist/core/components/badge.d.ts +1 -8
- package/dist/core/components/badge.js +2 -3
- package/dist/core/components/badge.js.map +1 -1
- package/dist/core/components/button.d.ts +4 -12
- package/dist/core/components/button.js +6 -9
- package/dist/core/components/button.js.map +1 -1
- package/dist/core/components/card.d.ts +1 -9
- package/dist/core/components/card.js +1 -3
- package/dist/core/components/card.js.map +1 -1
- package/dist/core/components/confirm-dialog.d.ts +2 -3
- package/dist/core/components/confirm-dialog.js +19 -13
- package/dist/core/components/confirm-dialog.js.map +1 -1
- package/dist/core/components/fragment.d.ts +1 -10
- package/dist/core/components/fragment.js +5 -6
- package/dist/core/components/fragment.js.map +1 -1
- package/dist/core/components/grid.d.ts +1 -8
- package/dist/core/components/grid.js +1 -2
- package/dist/core/components/grid.js.map +1 -1
- package/dist/core/components/heading.d.ts +1 -9
- package/dist/core/components/heading.js +2 -3
- package/dist/core/components/heading.js.map +1 -1
- package/dist/core/components/icon.d.ts +3 -0
- package/dist/core/components/icon.js +30 -0
- package/dist/core/components/icon.js.map +1 -0
- package/dist/core/components/index.d.ts +1 -1
- package/dist/core/components/index.js +4 -0
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/link.d.ts +1 -12
- package/dist/core/components/link.js +4 -9
- package/dist/core/components/link.js.map +1 -1
- package/dist/core/components/modal.d.ts +1 -11
- package/dist/core/components/modal.js +27 -31
- package/dist/core/components/modal.js.map +1 -1
- package/dist/core/components/section.d.ts +3 -0
- package/dist/core/components/section.js +79 -0
- package/dist/core/components/section.js.map +1 -0
- package/dist/core/components/segmented-control.d.ts +1 -14
- package/dist/core/components/segmented-control.js +4 -7
- package/dist/core/components/segmented-control.js.map +1 -1
- package/dist/core/components/segmented-pills.d.ts +4 -2
- package/dist/core/components/segmented-pills.js +10 -1
- package/dist/core/components/segmented-pills.js.map +1 -1
- package/dist/core/components/spinner.js +8 -4
- package/dist/core/components/spinner.js.map +1 -1
- package/dist/core/components/stack.d.ts +1 -11
- package/dist/core/components/stack.js +5 -5
- package/dist/core/components/stack.js.map +1 -1
- package/dist/core/components/tabs.d.ts +1 -19
- package/dist/core/components/tabs.js +45 -21
- package/dist/core/components/tabs.js.map +1 -1
- package/dist/core/components/text.d.ts +1 -9
- package/dist/core/components/text.js +2 -3
- package/dist/core/components/text.js.map +1 -1
- package/dist/core/registry.d.ts +9 -3
- package/dist/core/registry.js +21 -5
- package/dist/core/registry.js.map +1 -1
- package/dist/core/renderer.js +7 -13
- package/dist/core/renderer.js.map +1 -1
- package/dist/core/types.d.ts +54 -26
- package/dist/form/components/base/checkbox.js +5 -2
- package/dist/form/components/base/checkbox.js.map +1 -1
- package/dist/form/components/base/field.d.ts +2 -1
- package/dist/form/components/base/field.js +5 -1
- package/dist/form/components/base/field.js.map +1 -1
- package/dist/form/components/base/password-input.js +9 -2
- package/dist/form/components/base/password-input.js.map +1 -1
- package/dist/form/components/base/submit-button.d.ts +4 -4
- package/dist/form/components/base/submit-button.js +2 -2
- package/dist/form/components/base/submit-button.js.map +1 -1
- package/dist/form/components/conditions.d.ts +6 -9
- package/dist/form/components/conditions.js +10 -2
- package/dist/form/components/conditions.js.map +1 -1
- package/dist/form/components/context.d.ts +0 -4
- package/dist/form/components/context.js +1 -5
- package/dist/form/components/context.js.map +1 -1
- package/dist/form/components/field-props.d.ts +24 -0
- package/dist/form/components/field-props.js +15 -0
- package/dist/form/components/field-props.js.map +1 -0
- package/dist/form/components/fields/checkbox.d.ts +1 -15
- package/dist/form/components/fields/checkbox.js +16 -21
- package/dist/form/components/fields/checkbox.js.map +1 -1
- package/dist/form/components/fields/choice.d.ts +1 -13
- package/dist/form/components/fields/choice.js +13 -20
- package/dist/form/components/fields/choice.js.map +1 -1
- package/dist/form/components/fields/date-input.d.ts +1 -19
- package/dist/form/components/fields/date-input.js +11 -16
- package/dist/form/components/fields/date-input.js.map +1 -1
- package/dist/form/components/fields/hidden-input.d.ts +1 -9
- package/dist/form/components/fields/hidden-input.js +2 -3
- package/dist/form/components/fields/hidden-input.js.map +1 -1
- package/dist/form/components/fields/number-input.d.ts +1 -22
- package/dist/form/components/fields/number-input.js +38 -41
- package/dist/form/components/fields/number-input.js.map +1 -1
- package/dist/form/components/fields/password-input.d.ts +1 -28
- package/dist/form/components/fields/password-input.js +15 -24
- package/dist/form/components/fields/password-input.js.map +1 -1
- package/dist/form/components/fields/rich-editor.d.ts +1 -16
- package/dist/form/components/fields/rich-editor.js +57 -47
- package/dist/form/components/fields/rich-editor.js.map +1 -1
- package/dist/form/components/fields/select.d.ts +1 -22
- package/dist/form/components/fields/select.js +85 -74
- package/dist/form/components/fields/select.js.map +1 -1
- package/dist/form/components/fields/simple-field.d.ts +9 -0
- package/dist/form/components/fields/simple-field.js +22 -0
- package/dist/form/components/fields/simple-field.js.map +1 -0
- package/dist/form/components/fields/text-input.d.ts +1 -20
- package/dist/form/components/fields/text-input.js +12 -17
- package/dist/form/components/fields/text-input.js.map +1 -1
- package/dist/form/components/fields/textarea.d.ts +1 -19
- package/dist/form/components/fields/textarea.js +11 -16
- package/dist/form/components/fields/textarea.js.map +1 -1
- package/dist/form/components/form.d.ts +1 -20
- package/dist/form/components/form.js +29 -36
- package/dist/form/components/form.js.map +1 -1
- package/dist/form/components/index.d.ts +0 -1
- package/dist/form/components/index.js +1 -2
- package/dist/form/components/resolved-nodes.d.ts +1 -1
- package/dist/form/components/resolved-nodes.js +2 -2
- package/dist/form/components/resolved-nodes.js.map +1 -1
- package/dist/form/components/types.d.ts +1 -0
- package/dist/form/components/use-controlled-field.d.ts +3 -9
- package/dist/form/components/use-controlled-field.js +5 -9
- package/dist/form/components/use-controlled-field.js.map +1 -1
- package/dist/form/components/use-dependent-field.d.ts +1 -1
- package/dist/form/components/use-dependent-field.js +8 -8
- package/dist/form/components/use-dependent-field.js.map +1 -1
- package/dist/form/components/use-form-resolver.d.ts +1 -1
- package/dist/form/components/use-form-resolver.js +8 -13
- package/dist/form/components/use-form-resolver.js.map +1 -1
- package/dist/form/components/use-seed-default.d.ts +5 -0
- package/dist/form/components/use-seed-default.js +23 -0
- package/dist/form/components/use-seed-default.js.map +1 -0
- package/dist/form/index.d.ts +1 -1
- package/dist/form/index.js +0 -1
- package/dist/form/index.js.map +1 -1
- package/dist/form/skeleton.d.ts +1 -1
- package/dist/form/skeleton.js +1 -1
- package/dist/form/skeleton.js.map +1 -1
- package/dist/i18n/backend.d.ts +24 -0
- package/dist/i18n/backend.js +39 -0
- package/dist/i18n/backend.js.map +1 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/instance.js +48 -0
- package/dist/i18n/instance.js.map +1 -0
- package/dist/icons/icon-renderer.js +30 -5
- package/dist/icons/icon-renderer.js.map +1 -1
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/index.js +2 -1
- package/dist/icons/sprite.d.ts +30 -0
- package/dist/icons/sprite.js +40 -0
- package/dist/icons/sprite.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +7 -3
- package/dist/inertia.d.ts +1 -6
- package/dist/inertia.js +4 -8
- package/dist/inertia.js.map +1 -1
- package/dist/lattice.css +129 -5
- package/dist/layout/components.d.ts +1 -0
- package/dist/layout/components.js +19 -0
- package/dist/layout/components.js.map +1 -0
- package/dist/layout/context.d.ts +12 -0
- package/dist/layout/context.js +19 -0
- package/dist/layout/context.js.map +1 -0
- package/dist/layout/index.d.ts +3 -0
- package/dist/layout/index.js +4 -0
- package/dist/layout/menu-item.d.ts +3 -0
- package/dist/layout/menu-item.js +130 -0
- package/dist/layout/menu-item.js.map +1 -0
- package/dist/layout/menu.d.ts +3 -0
- package/dist/layout/menu.js +13 -0
- package/dist/layout/menu.js.map +1 -0
- package/dist/layout/outlet.d.ts +6 -0
- package/dist/layout/outlet.js +14 -0
- package/dist/layout/outlet.js.map +1 -0
- package/dist/layout/schema-layout.d.ts +10 -0
- package/dist/layout/schema-layout.js +30 -0
- package/dist/layout/schema-layout.js.map +1 -0
- package/dist/layout/sidebar.d.ts +3 -0
- package/dist/layout/sidebar.js +48 -0
- package/dist/layout/sidebar.js.map +1 -0
- package/dist/lib/utils.d.ts +0 -2
- package/dist/lib/utils.js +1 -4
- package/dist/lib/utils.js.map +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js +1982 -0
- package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -0
- package/dist/node_modules/i18next-http-backend/esm/index.js +352 -0
- package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/context.js +23 -0
- package/dist/node_modules/react-i18next/dist/es/context.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/defaults.js +29 -0
- package/dist/node_modules/react-i18next/dist/es/defaults.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +10 -0
- package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +14 -0
- package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/unescape.js +30 -0
- package/dist/node_modules/react-i18next/dist/es/unescape.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js +157 -0
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -0
- package/dist/node_modules/react-i18next/dist/es/utils.js +58 -0
- package/dist/node_modules/react-i18next/dist/es/utils.js.map +1 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +70 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +1 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +61 -0
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +1 -0
- package/dist/node_modules/use-sync-external-store/shim/index.js +13 -0
- package/dist/node_modules/use-sync-external-store/shim/index.js.map +1 -0
- package/dist/page.d.ts +1 -1
- package/dist/page.js +2 -2
- package/dist/page.js.map +1 -1
- package/dist/provider.d.ts +8 -3
- package/dist/provider.js +17 -9
- package/dist/provider.js.map +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +2 -1
- package/dist/registry.js.map +1 -1
- package/dist/table/bulk.d.ts +6 -10
- package/dist/table/bulk.js +13 -35
- package/dist/table/bulk.js.map +1 -1
- package/dist/table/column-registry.d.ts +9 -0
- package/dist/table/components/bulk-bar.js +34 -3
- package/dist/table/components/bulk-bar.js.map +1 -1
- package/dist/table/components/cells/badge-cell.d.ts +5 -0
- package/dist/table/components/cells/badge-cell.js +16 -0
- package/dist/table/components/cells/badge-cell.js.map +1 -0
- package/dist/table/components/cells/icon-cell.d.ts +5 -0
- package/dist/table/components/cells/icon-cell.js +22 -0
- package/dist/table/components/cells/icon-cell.js.map +1 -0
- package/dist/table/components/cells/image-cell.d.ts +5 -0
- package/dist/table/components/cells/image-cell.js +24 -0
- package/dist/table/components/cells/image-cell.js.map +1 -0
- package/dist/table/components/cells/text-cell.d.ts +6 -0
- package/dist/table/components/cells/text-cell.js +50 -0
- package/dist/table/components/cells/text-cell.js.map +1 -0
- package/dist/table/components/column-filter-control.js +59 -96
- package/dist/table/components/column-filter-control.js.map +1 -1
- package/dist/table/components/column-header.js +22 -11
- package/dist/table/components/column-header.js.map +1 -1
- package/dist/table/components/filter-stack-bar.d.ts +2 -2
- package/dist/table/components/filter-stack-bar.js +10 -8
- package/dist/table/components/filter-stack-bar.js.map +1 -1
- package/dist/table/components/filter-value-input.d.ts +5 -3
- package/dist/table/components/filter-value-input.js +25 -16
- package/dist/table/components/filter-value-input.js.map +1 -1
- package/dist/table/components/pagination.d.ts +1 -1
- package/dist/table/components/pagination.js +20 -8
- package/dist/table/components/pagination.js.map +1 -1
- package/dist/table/components/sort-bar.d.ts +2 -2
- package/dist/table/components/sort-bar.js +12 -10
- package/dist/table/components/sort-bar.js.map +1 -1
- package/dist/table/components/table-action-node.d.ts +1 -1
- package/dist/table/components/table-action-node.js +1 -1
- package/dist/table/components/table-action-node.js.map +1 -1
- package/dist/table/components/table-cell.d.ts +1 -1
- package/dist/table/components/table-cell.js +24 -43
- package/dist/table/components/table-cell.js.map +1 -1
- package/dist/table/components/table.d.ts +6 -2
- package/dist/table/components/table.js +40 -17
- package/dist/table/components/table.js.map +1 -1
- package/dist/table/format.js +5 -3
- package/dist/table/format.js.map +1 -1
- package/dist/table/index.d.ts +1 -1
- package/dist/table/index.js.map +1 -1
- package/dist/table/payload.d.ts +1 -1
- package/dist/table/query.d.ts +0 -1
- package/dist/table/query.js +8 -9
- package/dist/table/query.js.map +1 -1
- package/dist/table/types.d.ts +38 -42
- package/dist/table/use-table.d.ts +3 -4
- package/dist/table/use-table.js +12 -23
- package/dist/table/use-table.js.map +1 -1
- package/dist/test-support.d.ts +14 -0
- package/dist/test-support.js +14 -0
- package/dist/test-support.js.map +1 -0
- package/dist/toast/index.d.ts +1 -0
- package/dist/toast/index.js +2 -0
- package/dist/toast/toaster.d.ts +3 -0
- package/dist/toast/toaster.js +126 -0
- package/dist/toast/toaster.js.map +1 -0
- package/dist/types/generated.d.ts +677 -0
- package/dist/types/generated.js +0 -0
- package/dist/types/index.d.ts +1 -1
- package/package.json +18 -3
- package/resources/icons/align-center.svg +17 -0
- package/resources/icons/align-justify.svg +17 -0
- package/resources/icons/align-left.svg +17 -0
- package/resources/icons/align-right.svg +17 -0
- package/resources/icons/arrow-down.svg +16 -0
- package/resources/icons/arrow-up.svg +16 -0
- package/resources/icons/bold.svg +15 -0
- package/resources/icons/check.svg +15 -0
- package/resources/icons/chevron-down.svg +15 -0
- package/resources/icons/chevron-right.svg +15 -0
- package/resources/icons/chevrons-up-down.svg +16 -0
- package/resources/icons/circle-alert.svg +17 -0
- package/resources/icons/circle-check.svg +16 -0
- package/resources/icons/circle-help.svg +17 -0
- package/resources/icons/circle-x.svg +17 -0
- package/resources/icons/code.svg +16 -0
- package/resources/icons/columns-3.svg +17 -0
- package/resources/icons/copy.svg +16 -0
- package/resources/icons/external-link.svg +17 -0
- package/resources/icons/eye-off.svg +18 -0
- package/resources/icons/eye.svg +16 -0
- package/resources/icons/filter.svg +15 -0
- package/resources/icons/heading-1.svg +18 -0
- package/resources/icons/heading-2.svg +18 -0
- package/resources/icons/heading-3.svg +19 -0
- package/resources/icons/highlighter.svg +16 -0
- package/resources/icons/info.svg +17 -0
- package/resources/icons/italic.svg +17 -0
- package/resources/icons/layout-dashboard.svg +18 -0
- package/resources/icons/link.svg +16 -0
- package/resources/icons/list-ordered.svg +20 -0
- package/resources/icons/list.svg +20 -0
- package/resources/icons/loader-2.svg +15 -0
- package/resources/icons/minus.svg +15 -0
- package/resources/icons/more-horizontal.svg +17 -0
- package/resources/icons/panel-left.svg +16 -0
- package/resources/icons/pencil-line.svg +17 -0
- package/resources/icons/pencil.svg +16 -0
- package/resources/icons/plus.svg +16 -0
- package/resources/icons/quote.svg +16 -0
- package/resources/icons/rows-3.svg +17 -0
- package/resources/icons/search.svg +16 -0
- package/resources/icons/send.svg +16 -0
- package/resources/icons/settings.svg +16 -0
- package/resources/icons/smile.svg +18 -0
- package/resources/icons/strikethrough.svg +17 -0
- package/resources/icons/table.svg +18 -0
- package/resources/icons/trash-2.svg +19 -0
- package/resources/icons/underline.svg +16 -0
- package/resources/icons/x.svg +16 -0
- package/dist/core/props.d.ts +0 -14
- package/dist/core/props.js +0 -30
- package/dist/core/props.js.map +0 -1
- package/dist/form/components/fields/submit-button.d.ts +0 -10
- package/dist/form/components/fields/submit-button.js +0 -14
- package/dist/form/components/fields/submit-button.js.map +0 -1
- package/dist/generated/types.d.ts +0 -17
- package/dist/icons/default-icons.d.ts +0 -3
- package/dist/icons/default-icons.js +0 -44
- package/dist/icons/default-icons.js.map +0 -1
- package/dist/icons/dynamic-lucide-renderer.d.ts +0 -2
- package/dist/icons/dynamic-lucide-renderer.js +0 -18
- package/dist/icons/dynamic-lucide-renderer.js.map +0 -1
- package/dist/menu/index.d.ts +0 -1
- package/dist/menu/index.js +0 -2
- package/dist/menu/use-menu.d.ts +0 -2
- package/dist/menu/use-menu.js +0 -9
- package/dist/menu/use-menu.js.map +0 -1
- /package/dist/{generated/types.js → table/column-registry.js} +0 -0
|
@@ -3,7 +3,7 @@ import { Spinner } from "../../../core/components/spinner.js";
|
|
|
3
3
|
import { useFormContext } from "../context.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region resources/js/form/components/base/submit-button.tsx
|
|
6
|
-
function FormSubmitButton({ label, variant = "default" }) {
|
|
6
|
+
function FormSubmitButton({ label, summaryLabel, variant = "default" }) {
|
|
7
7
|
const { errors, fieldLabels, processing } = useFormContext();
|
|
8
8
|
const invalidFields = Object.entries(errors).filter(([, message]) => Boolean(message)).map(([name, message]) => ({
|
|
9
9
|
label: fieldLabels[name] ?? name,
|
|
@@ -22,7 +22,7 @@ function FormSubmitButton({ label, variant = "default" }) {
|
|
|
22
22
|
role: "tooltip",
|
|
23
23
|
children: [/* @__PURE__ */ jsx("p", {
|
|
24
24
|
className: "mb-1 font-medium text-lt-fg",
|
|
25
|
-
children:
|
|
25
|
+
children: summaryLabel
|
|
26
26
|
}), /* @__PURE__ */ jsx("ul", {
|
|
27
27
|
className: "space-y-1",
|
|
28
28
|
children: invalidFields.map((field) => /* @__PURE__ */ jsxs("li", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"submit-button.js","names":[],"sources":["../../../../resources/js/form/components/base/submit-button.tsx"],"sourcesContent":["import { Button } from \"@lattice/lattice/core/components/button\";\nimport { Spinner } from \"@lattice/lattice/core/components/spinner\";\nimport {
|
|
1
|
+
{"version":3,"file":"submit-button.js","names":[],"sources":["../../../../resources/js/form/components/base/submit-button.tsx"],"sourcesContent":["import { Button } from \"@lattice/lattice/core/components/button\";\nimport { Spinner } from \"@lattice/lattice/core/components/spinner\";\nimport type { ButtonVariant } from \"@lattice/lattice/types/generated\";\nimport { useFormContext } from \"../context\";\n\nexport function FormSubmitButton({\n label,\n summaryLabel,\n variant = \"default\",\n}: {\n label: string;\n summaryLabel: string;\n variant?: ButtonVariant;\n}) {\n const { errors, fieldLabels, processing } = useFormContext();\n\n const invalidFields = Object.entries(errors)\n .filter(([, message]) => Boolean(message))\n .map(([name, message]) => ({ label: fieldLabels[name] ?? name, message: message as string }));\n const hasErrors = invalidFields.length > 0;\n\n return (\n <span className=\"group relative inline-flex flex-col\">\n <Button disabled={processing || hasErrors} type=\"submit\" variant={variant}>\n {processing && <Spinner />}\n {label}\n </Button>\n\n {hasErrors && (\n <div\n className=\"pointer-events-none absolute bottom-full left-1/2 z-10 mb-2 w-max max-w-xs -translate-x-1/2 rounded-lt border border-lt-border bg-lt-surface p-3 text-left text-sm opacity-0 shadow-md transition-opacity group-hover:opacity-100\"\n role=\"tooltip\"\n >\n <p className=\"mb-1 font-medium text-lt-fg\">{summaryLabel}</p>\n <ul className=\"space-y-1\">\n {invalidFields.map((field) => (\n <li className=\"text-lt-muted-fg\" key={field.label}>\n <span className=\"font-medium text-lt-fg\">{field.label}</span> — {field.message}\n </li>\n ))}\n </ul>\n </div>\n )}\n </span>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,iBAAiB,EAC/B,OACA,cACA,UAAU,aAKT;CACD,MAAM,EAAE,QAAQ,aAAa,eAAe,eAAe;CAE3D,MAAM,gBAAgB,OAAO,QAAQ,MAAM,EACxC,QAAQ,GAAG,aAAa,QAAQ,OAAO,CAAC,EACxC,KAAK,CAAC,MAAM,cAAc;EAAE,OAAO,YAAY,SAAS;EAAe;CAAkB,EAAE;CAC9F,MAAM,YAAY,cAAc,SAAS;CAEzC,OACE,qBAAC,QAAD;EAAM,WAAU;YAAhB,CACE,qBAAC,QAAD;GAAQ,UAAU,cAAc;GAAW,MAAK;GAAkB;aAAlE,CACG,cAAc,oBAAC,SAAD,CAAU,CAAA,GACxB,KACK;MAEP,aACC,qBAAC,OAAD;GACE,WAAU;GACV,MAAK;aAFP,CAIE,oBAAC,KAAD;IAAG,WAAU;cAA+B;GAAgB,CAAA,GAC5D,oBAAC,MAAD;IAAI,WAAU;cACX,cAAc,KAAK,UAClB,qBAAC,MAAD;KAAI,WAAU;eAAd;MACE,oBAAC,QAAD;OAAM,WAAU;iBAA0B,MAAM;MAAY,CAAA;MAAC;MAAI,MAAM;KACrE;OAFkC,MAAM,KAExC,CACL;GACC,CAAA,CACD;IAEH;;AAEV"}
|
|
@@ -1,25 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export type Condition
|
|
3
|
-
field: string;
|
|
4
|
-
operator: ConditionOperator;
|
|
5
|
-
value: unknown;
|
|
6
|
-
};
|
|
1
|
+
import { Condition } from '../../types/generated';
|
|
2
|
+
export type { Condition };
|
|
7
3
|
export type FieldConditions = {
|
|
8
4
|
visible?: Condition[];
|
|
9
5
|
required?: Condition[];
|
|
10
|
-
|
|
6
|
+
readOnly?: Condition[];
|
|
11
7
|
disabled?: Condition[];
|
|
12
8
|
};
|
|
13
9
|
export type FieldFlags = {
|
|
14
10
|
hidden?: boolean;
|
|
15
11
|
required?: boolean;
|
|
16
|
-
|
|
12
|
+
readOnly?: boolean;
|
|
17
13
|
disabled?: boolean;
|
|
18
14
|
};
|
|
19
15
|
export type FieldState = {
|
|
20
16
|
hidden: boolean;
|
|
21
17
|
required: boolean;
|
|
22
|
-
|
|
18
|
+
readOnly: boolean;
|
|
23
19
|
disabled: boolean;
|
|
24
20
|
};
|
|
21
|
+
export declare function toBoolean(value: unknown): boolean;
|
|
25
22
|
export declare function evaluateConditions(conditions: FieldConditions | undefined, values: Record<string, unknown>, flags: FieldFlags): FieldState;
|
|
@@ -20,6 +20,12 @@ function isIn(actual, expected) {
|
|
|
20
20
|
function isBlank(value) {
|
|
21
21
|
return value == null || String(value) === "";
|
|
22
22
|
}
|
|
23
|
+
function compareDates(actual, expected) {
|
|
24
|
+
const left = Date.parse(String(actual));
|
|
25
|
+
const right = Date.parse(String(expected));
|
|
26
|
+
if (Number.isNaN(left) || Number.isNaN(right)) return null;
|
|
27
|
+
return left === right ? 0 : left < right ? -1 : 1;
|
|
28
|
+
}
|
|
23
29
|
function evaluateUnknownOperator(_operator) {
|
|
24
30
|
return true;
|
|
25
31
|
}
|
|
@@ -36,6 +42,8 @@ function evaluateOp(operator, actual, expected) {
|
|
|
36
42
|
case "ends_with": return String(actual ?? "").endsWith(String(expected ?? ""));
|
|
37
43
|
case "in": return isIn(actual, expected);
|
|
38
44
|
case "not_in": return !isIn(actual, expected);
|
|
45
|
+
case "before": return compareDates(actual, expected) === -1;
|
|
46
|
+
case "after": return compareDates(actual, expected) === 1;
|
|
39
47
|
case "empty": return isBlank(actual);
|
|
40
48
|
case "filled": return !isBlank(actual);
|
|
41
49
|
default: return evaluateUnknownOperator(operator);
|
|
@@ -52,11 +60,11 @@ function evaluateConditions(conditions, values, flags) {
|
|
|
52
60
|
return {
|
|
53
61
|
hidden: Boolean(flags.hidden) || !visible,
|
|
54
62
|
required: Boolean(flags.required) || anyMatch(conditions?.required, values),
|
|
55
|
-
|
|
63
|
+
readOnly: Boolean(flags.readOnly) || anyMatch(conditions?.readOnly, values),
|
|
56
64
|
disabled: Boolean(flags.disabled) || anyMatch(conditions?.disabled, values)
|
|
57
65
|
};
|
|
58
66
|
}
|
|
59
67
|
//#endregion
|
|
60
|
-
export { evaluateConditions };
|
|
68
|
+
export { evaluateConditions, toBoolean };
|
|
61
69
|
|
|
62
70
|
//# sourceMappingURL=conditions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conditions.js","names":[],"sources":["../../../resources/js/form/components/conditions.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"conditions.js","names":[],"sources":["../../../resources/js/form/components/conditions.ts"],"sourcesContent":["import type { Condition, Op } from \"@lattice/lattice/types/generated\";\n\nexport type { Condition };\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.\nexport function 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// Null when either value can't be parsed, so before/after never matches a bad date. Mirrors PHP strtotime.\nfunction compareDates(actual: unknown, expected: unknown): number | null {\n const left = Date.parse(String(actual));\n const right = Date.parse(String(expected));\n\n if (Number.isNaN(left) || Number.isNaN(right)) {\n return null;\n }\n\n return left === right ? 0 : left < right ? -1 : 1;\n}\n\n// Unknown operators from untrusted payloads fail open (the condition matches).\n// The `never` parameter makes an Op value 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: Op, 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 \"before\":\n return compareDates(actual, expected) === -1;\n case \"after\":\n return compareDates(actual, expected) === 1;\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,SAAgB,UAAU,OAAyB;CACjD,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;AAGA,SAAS,aAAa,QAAiB,UAAkC;CACvE,MAAM,OAAO,KAAK,MAAM,OAAO,MAAM,CAAC;CACtC,MAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,CAAC;CAEzC,IAAI,OAAO,MAAM,IAAI,KAAK,OAAO,MAAM,KAAK,GAC1C,OAAO;CAGT,OAAO,SAAS,QAAQ,IAAI,OAAO,QAAQ,KAAK;AAClD;AAKA,SAAS,wBAAwB,WAA2B;CAC1D,OAAO;AACT;AAEA,SAAS,WAAW,UAAc,QAAiB,UAA4B;CAC7E,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,UACH,OAAO,aAAa,QAAQ,QAAQ,MAAM;EAC5C,KAAK,SACH,OAAO,aAAa,QAAQ,QAAQ,MAAM;EAC5C,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"}
|
|
@@ -4,13 +4,9 @@ type FormContextValue = {
|
|
|
4
4
|
componentRef: string;
|
|
5
5
|
errors: Record<string, string | undefined>;
|
|
6
6
|
fieldLabels: Record<string, string>;
|
|
7
|
-
invalid: (field: string) => boolean;
|
|
8
7
|
precognitive: boolean;
|
|
9
8
|
processing: boolean;
|
|
10
|
-
touch: (field: string) => void;
|
|
11
9
|
validate: (field: string) => void;
|
|
12
|
-
validating: boolean;
|
|
13
|
-
valid: (field: string) => boolean;
|
|
14
10
|
};
|
|
15
11
|
export declare function FormProvider({ children, value, }: {
|
|
16
12
|
children: React.ReactNode;
|
|
@@ -7,13 +7,9 @@ var FormContext = createContext({
|
|
|
7
7
|
componentRef: "",
|
|
8
8
|
errors: {},
|
|
9
9
|
fieldLabels: {},
|
|
10
|
-
invalid: () => false,
|
|
11
10
|
precognitive: false,
|
|
12
11
|
processing: false,
|
|
13
|
-
|
|
14
|
-
validate: () => {},
|
|
15
|
-
validating: false,
|
|
16
|
-
valid: () => false
|
|
12
|
+
validate: () => {}
|
|
17
13
|
});
|
|
18
14
|
function FormProvider({ children, value }) {
|
|
19
15
|
return /* @__PURE__ */ jsx(FormContext.Provider, {
|
|
@@ -1 +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
|
|
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 precognitive: boolean;\n processing: boolean;\n validate: (field: string) => void;\n};\n\nconst FormContext = createContext<FormContextValue>({\n action: \"#\",\n clearErrors: () => {},\n componentRef: \"\",\n errors: {},\n fieldLabels: {},\n precognitive: false,\n processing: false,\n validate: () => {},\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":";;;AAaA,IAAM,cAAc,cAAgC;CAClD,QAAQ;CACR,mBAAmB,CAAC;CACpB,cAAc;CACd,QAAQ,CAAC;CACT,aAAa,CAAC;CACd,cAAc;CACd,YAAY;CACZ,gBAAgB,CAAC;AACnB,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,24 @@
|
|
|
1
|
+
import { Node } from '../../core/types';
|
|
2
|
+
import { FieldConditions } from './conditions';
|
|
3
|
+
/**
|
|
4
|
+
* The props every form-field node shares (the PHP Field base). Nodes flow through
|
|
5
|
+
* the form framework loosely typed via the generic schema, so this is the typed
|
|
6
|
+
* lens the shared hooks read them through. Everything is optional because the
|
|
7
|
+
* lens is also applied to non-field nodes while walking the schema.
|
|
8
|
+
*/
|
|
9
|
+
export type FieldProps = {
|
|
10
|
+
conditions?: FieldConditions | null;
|
|
11
|
+
dependsOnAny?: boolean | null;
|
|
12
|
+
dependsOnKeys?: string[] | null;
|
|
13
|
+
disabled?: boolean | null;
|
|
14
|
+
helperText?: string | null;
|
|
15
|
+
hidden?: boolean | null;
|
|
16
|
+
label?: string | null;
|
|
17
|
+
name?: string;
|
|
18
|
+
readOnly?: boolean | null;
|
|
19
|
+
required?: boolean | null;
|
|
20
|
+
value?: unknown;
|
|
21
|
+
};
|
|
22
|
+
export declare function fieldProps(node: Node): FieldProps;
|
|
23
|
+
/** The single schema traversal shared by the label/value and dependency-watch collectors. */
|
|
24
|
+
export declare function walkFields(nodes: Node[] | undefined, visit: (props: FieldProps, node: Node) => void): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region resources/js/form/components/field-props.ts
|
|
2
|
+
function fieldProps(node) {
|
|
3
|
+
return node.props;
|
|
4
|
+
}
|
|
5
|
+
/** The single schema traversal shared by the label/value and dependency-watch collectors. */
|
|
6
|
+
function walkFields(nodes, visit) {
|
|
7
|
+
for (const child of nodes ?? []) {
|
|
8
|
+
visit(fieldProps(child), child);
|
|
9
|
+
walkFields(child.schema, visit);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { fieldProps, walkFields };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=field-props.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-props.js","names":[],"sources":["../../../resources/js/form/components/field-props.ts"],"sourcesContent":["import type { Node } from \"@lattice/lattice/core/types\";\nimport type { FieldConditions } from \"./conditions\";\n\n/**\n * The props every form-field node shares (the PHP Field base). Nodes flow through\n * the form framework loosely typed via the generic schema, so this is the typed\n * lens the shared hooks read them through. Everything is optional because the\n * lens is also applied to non-field nodes while walking the schema.\n */\nexport type FieldProps = {\n conditions?: FieldConditions | null;\n dependsOnAny?: boolean | null;\n dependsOnKeys?: string[] | null;\n disabled?: boolean | null;\n helperText?: string | null;\n hidden?: boolean | null;\n label?: string | null;\n name?: string;\n readOnly?: boolean | null;\n required?: boolean | null;\n value?: unknown;\n};\n\nexport function fieldProps(node: Node): FieldProps {\n return node.props as FieldProps;\n}\n\n/** The single schema traversal shared by the label/value and dependency-watch collectors. */\nexport function walkFields(\n nodes: Node[] | undefined,\n visit: (props: FieldProps, node: Node) => void,\n): void {\n for (const child of nodes ?? []) {\n visit(fieldProps(child), child);\n walkFields(child.schema, visit);\n }\n}\n"],"mappings":";AAuBA,SAAgB,WAAW,MAAwB;CACjD,OAAO,KAAK;AACd;;AAGA,SAAgB,WACd,OACA,OACM;CACN,KAAK,MAAM,SAAS,SAAS,CAAC,GAAG;EAC/B,MAAM,WAAW,KAAK,GAAG,KAAK;EAC9B,WAAW,MAAM,QAAQ,KAAK;CAChC;AACF"}
|
|
@@ -1,16 +1,2 @@
|
|
|
1
|
-
import { RendererComponent } from '
|
|
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
|
-
}
|
|
1
|
+
import { RendererComponent } from '../../../core/types';
|
|
16
2
|
export declare const CheckboxComponent: RendererComponent<"form.checkbox">;
|
|
@@ -1,36 +1,28 @@
|
|
|
1
|
-
import { getOptionalNumberProp, getStringProp } from "../../../core/props.js";
|
|
2
1
|
import { useFormContext } from "../context.js";
|
|
3
2
|
import { useFormValue, useSetFormValue } from "../values.js";
|
|
3
|
+
import { toBoolean } from "../conditions.js";
|
|
4
4
|
import { Checkbox } from "../base/checkbox.js";
|
|
5
5
|
import { Label } from "../base/label.js";
|
|
6
6
|
import { useDependentField } from "../use-dependent-field.js";
|
|
7
|
-
import {
|
|
7
|
+
import { useSeedDefault } from "../use-seed-default.js";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
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
10
|
var CheckboxComponent = ({ node }) => {
|
|
14
11
|
const { clearErrors, precognitive, validate } = useFormContext();
|
|
15
|
-
const { hidden,
|
|
16
|
-
const name =
|
|
12
|
+
const { hidden, readOnly, disabled } = useDependentField(node);
|
|
13
|
+
const name = node.props.name;
|
|
17
14
|
const setValue = useSetFormValue();
|
|
18
15
|
const storedValue = useFormValue(name);
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}, [
|
|
23
|
-
name,
|
|
24
|
-
node.props?.checked,
|
|
25
|
-
setValue,
|
|
26
|
-
storedValue
|
|
27
|
-
]);
|
|
16
|
+
const defaultChecked = toBoolean(node.props.value);
|
|
17
|
+
const checked = storedValue !== void 0 ? toBoolean(storedValue) : defaultChecked;
|
|
18
|
+
useSeedDefault(name, defaultChecked);
|
|
28
19
|
if (hidden) return null;
|
|
29
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
20
|
+
return /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
|
|
30
21
|
className: "flex items-center space-x-3",
|
|
31
22
|
children: [/* @__PURE__ */ jsx(Checkbox, {
|
|
23
|
+
autoFocus: node.props.autoFocus ?? void 0,
|
|
32
24
|
checked,
|
|
33
|
-
disabled:
|
|
25
|
+
disabled: readOnly || disabled,
|
|
34
26
|
id: name,
|
|
35
27
|
name,
|
|
36
28
|
onCheckedChange: (next) => {
|
|
@@ -38,12 +30,15 @@ var CheckboxComponent = ({ node }) => {
|
|
|
38
30
|
if (precognitive) window.requestAnimationFrame(() => validate(name));
|
|
39
31
|
else clearErrors(name);
|
|
40
32
|
},
|
|
41
|
-
tabIndex:
|
|
33
|
+
tabIndex: node.props.tabIndex ?? void 0
|
|
42
34
|
}), /* @__PURE__ */ jsx(Label, {
|
|
43
35
|
htmlFor: name,
|
|
44
|
-
children:
|
|
36
|
+
children: node.props.label
|
|
45
37
|
})]
|
|
46
|
-
})
|
|
38
|
+
}), node.props.helperText && /* @__PURE__ */ jsx("p", {
|
|
39
|
+
className: "mt-1 pl-7 text-sm text-lt-muted-fg",
|
|
40
|
+
children: node.props.helperText
|
|
41
|
+
})] });
|
|
47
42
|
};
|
|
48
43
|
//#endregion
|
|
49
44
|
export { CheckboxComponent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","names":[],"sources":["../../../../resources/js/form/components/fields/checkbox.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":[],"sources":["../../../../resources/js/form/components/fields/checkbox.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { Checkbox } from \"../base/checkbox\";\nimport { Label } from \"../base/label\";\nimport { toBoolean } from \"../conditions\";\nimport { useFormContext } from \"../context\";\nimport { useDependentField } from \"../use-dependent-field\";\nimport { useSeedDefault } from \"../use-seed-default\";\nimport { useFormValue, useSetFormValue } from \"../values\";\n\nexport const CheckboxComponent: RendererComponent<\"form.checkbox\"> = ({ node }) => {\n const { clearErrors, precognitive, validate } = useFormContext();\n const { hidden, readOnly, disabled } = useDependentField(node);\n const name = node.props.name;\n const setValue = useSetFormValue();\n const storedValue = useFormValue(name);\n const defaultChecked = toBoolean(node.props.value);\n const checked = storedValue !== undefined ? toBoolean(storedValue) : defaultChecked;\n\n useSeedDefault(name, defaultChecked);\n\n if (hidden) {\n return null;\n }\n\n return (\n <div>\n <div className=\"flex items-center space-x-3\">\n <Checkbox\n autoFocus={node.props.autoFocus ?? undefined}\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={node.props.tabIndex ?? undefined}\n />\n <Label htmlFor={name}>{node.props.label}</Label>\n </div>\n {node.props.helperText && (\n <p className=\"mt-1 pl-7 text-sm text-lt-muted-fg\">{node.props.helperText}</p>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;AASA,IAAa,qBAAyD,EAAE,WAAW;CACjF,MAAM,EAAE,aAAa,cAAc,aAAa,eAAe;CAC/D,MAAM,EAAE,QAAQ,UAAU,aAAa,kBAAkB,IAAI;CAC7D,MAAM,OAAO,KAAK,MAAM;CACxB,MAAM,WAAW,gBAAgB;CACjC,MAAM,cAAc,aAAa,IAAI;CACrC,MAAM,iBAAiB,UAAU,KAAK,MAAM,KAAK;CACjD,MAAM,UAAU,gBAAgB,KAAA,IAAY,UAAU,WAAW,IAAI;CAErE,eAAe,MAAM,cAAc;CAEnC,IAAI,QACF,OAAO;CAGT,OACE,qBAAC,OAAD,EAAA,UAAA,CACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,UAAD;GACE,WAAW,KAAK,MAAM,aAAa,KAAA;GAC1B;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,KAAK,MAAM,YAAY,KAAA;EAClC,CAAA,GACD,oBAAC,OAAD;GAAO,SAAS;aAAO,KAAK,MAAM;EAAa,CAAA,CAC5C;KACJ,KAAK,MAAM,cACV,oBAAC,KAAD;EAAG,WAAU;YAAsC,KAAK,MAAM;CAAc,CAAA,CAE3E,EAAA,CAAA;AAET"}
|
|
@@ -1,14 +1,2 @@
|
|
|
1
|
-
import {
|
|
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
|
-
}
|
|
1
|
+
import { RendererComponent } from '../../../core/types';
|
|
14
2
|
export declare const ChoiceComponent: RendererComponent<"form.choice">;
|
|
@@ -1,32 +1,23 @@
|
|
|
1
|
-
import { getOptionalNumberProp, getOptions, getStringProp } from "../../../core/props.js";
|
|
2
|
-
import { SegmentedPills } from "../../../core/components/segmented-pills.js";
|
|
3
1
|
import { useResolvedNode } from "../resolved-nodes.js";
|
|
4
|
-
import {
|
|
2
|
+
import { SegmentedPills } from "../../../core/components/segmented-pills.js";
|
|
3
|
+
import { useSeedDefault } from "../use-seed-default.js";
|
|
5
4
|
import { FormFieldFrame } from "../base/field.js";
|
|
6
5
|
import { useControlledField } from "../use-controlled-field.js";
|
|
7
|
-
import {
|
|
6
|
+
import { useMemo } from "react";
|
|
8
7
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
8
|
//#region resources/js/form/components/fields/choice.tsx
|
|
10
9
|
var ChoiceComponent = ({ node }) => {
|
|
11
10
|
const resolvedNode = useResolvedNode(node);
|
|
12
|
-
const { name, value, error, hidden, required,
|
|
13
|
-
const
|
|
14
|
-
const setValue = useSetFormValue();
|
|
15
|
-
const options = useMemo(() => getOptions(resolvedNode.props), [resolvedNode.props]);
|
|
11
|
+
const { name, value, error, hidden, required, readOnly, disabled, commit } = useControlledField(node);
|
|
12
|
+
const options = useMemo(() => resolvedNode.props.options ?? [], [resolvedNode.props]);
|
|
16
13
|
const fallbackValue = options[0]?.value ?? "";
|
|
17
14
|
const selected = value || fallbackValue;
|
|
18
|
-
|
|
19
|
-
if (storedValue === void 0 && selected) setValue(name, selected);
|
|
20
|
-
}, [
|
|
21
|
-
name,
|
|
22
|
-
storedValue,
|
|
23
|
-
selected,
|
|
24
|
-
setValue
|
|
25
|
-
]);
|
|
15
|
+
useSeedDefault(name, selected || void 0);
|
|
26
16
|
if (hidden || options.length === 0) return null;
|
|
27
17
|
return /* @__PURE__ */ jsxs(FormFieldFrame, {
|
|
28
18
|
error,
|
|
29
|
-
|
|
19
|
+
helperText: node.props.helperText ?? void 0,
|
|
20
|
+
label: node.props.label ?? "",
|
|
30
21
|
name,
|
|
31
22
|
required,
|
|
32
23
|
children: [/* @__PURE__ */ jsx("input", {
|
|
@@ -34,11 +25,13 @@ var ChoiceComponent = ({ node }) => {
|
|
|
34
25
|
type: "hidden",
|
|
35
26
|
value: selected
|
|
36
27
|
}), /* @__PURE__ */ jsx(SegmentedPills, {
|
|
37
|
-
ariaLabel:
|
|
38
|
-
|
|
28
|
+
ariaLabel: node.props.label ?? void 0,
|
|
29
|
+
autoFocus: node.props.autoFocus ?? void 0,
|
|
30
|
+
disabled: readOnly || disabled,
|
|
31
|
+
name,
|
|
39
32
|
onSelect: commit,
|
|
40
33
|
options,
|
|
41
|
-
tabIndex:
|
|
34
|
+
tabIndex: node.props.tabIndex ?? void 0,
|
|
42
35
|
value: selected
|
|
43
36
|
})]
|
|
44
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"choice.js","names":[],"sources":["../../../../resources/js/form/components/fields/choice.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"choice.js","names":[],"sources":["../../../../resources/js/form/components/fields/choice.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { Option, 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 { useSeedDefault } from \"../use-seed-default\";\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 options = useMemo(\n () => (resolvedNode.props as { options?: Option[] }).options ?? [],\n [resolvedNode.props],\n );\n const fallbackValue = options[0]?.value ?? \"\";\n const selected = value || fallbackValue;\n\n useSeedDefault(name, selected || undefined);\n\n if (hidden || options.length === 0) {\n return null;\n }\n\n return (\n <FormFieldFrame\n error={error}\n helperText={node.props.helperText ?? undefined}\n label={node.props.label ?? \"\"}\n name={name}\n required={required}\n >\n <input name={name} type=\"hidden\" value={selected} />\n <SegmentedPills\n ariaLabel={node.props.label ?? undefined}\n autoFocus={node.props.autoFocus ?? undefined}\n disabled={readOnly || disabled}\n name={name}\n onSelect={commit}\n options={options}\n tabIndex={node.props.tabIndex ?? undefined}\n value={selected}\n />\n </FormFieldFrame>\n );\n};\n"],"mappings":";;;;;;;;AAQA,IAAa,mBAAqD,EAAE,WAAW;CAC7E,MAAM,eAAe,gBAAgB,IAAI;CACzC,MAAM,EAAE,MAAM,OAAO,OAAO,QAAQ,UAAU,UAAU,UAAU,WAChE,mBAAmB,IAAI;CACzB,MAAM,UAAU,cACP,aAAa,MAAiC,WAAW,CAAC,GACjE,CAAC,aAAa,KAAK,CACrB;CACA,MAAM,gBAAgB,QAAQ,IAAI,SAAS;CAC3C,MAAM,WAAW,SAAS;CAE1B,eAAe,MAAM,YAAY,KAAA,CAAS;CAE1C,IAAI,UAAU,QAAQ,WAAW,GAC/B,OAAO;CAGT,OACE,qBAAC,gBAAD;EACS;EACP,YAAY,KAAK,MAAM,cAAc,KAAA;EACrC,OAAO,KAAK,MAAM,SAAS;EACrB;EACI;YALZ,CAOE,oBAAC,SAAD;GAAa;GAAM,MAAK;GAAS,OAAO;EAAW,CAAA,GACnD,oBAAC,gBAAD;GACE,WAAW,KAAK,MAAM,SAAS,KAAA;GAC/B,WAAW,KAAK,MAAM,aAAa,KAAA;GACnC,UAAU,YAAY;GAChB;GACN,UAAU;GACD;GACT,UAAU,KAAK,MAAM,YAAY,KAAA;GACjC,OAAO;EACR,CAAA,CACa;;AAEpB"}
|
|
@@ -1,20 +1,2 @@
|
|
|
1
|
-
import { RendererComponent } from '
|
|
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
|
-
}
|
|
1
|
+
import { RendererComponent } from '../../../core/types';
|
|
20
2
|
export declare const DateInputComponent: RendererComponent<"form.date-input">;
|
|
@@ -1,27 +1,22 @@
|
|
|
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
1
|
import { Input } from "../base/input.js";
|
|
2
|
+
import { SimpleField } from "./simple-field.js";
|
|
5
3
|
import { jsx } from "react/jsx-runtime";
|
|
6
4
|
//#region resources/js/form/components/fields/date-input.tsx
|
|
7
5
|
var DateInputComponent = ({ node }) => {
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
required,
|
|
15
|
-
children: /* @__PURE__ */ jsx(Input, {
|
|
16
|
-
autoFocus: getBooleanProp(node.props, "autoFocus"),
|
|
6
|
+
const props = node.props;
|
|
7
|
+
return /* @__PURE__ */ jsx(SimpleField, {
|
|
8
|
+
node,
|
|
9
|
+
label: props.label ?? "",
|
|
10
|
+
children: ({ name, value, readOnly, disabled, commit }) => /* @__PURE__ */ jsx(Input, {
|
|
11
|
+
autoFocus: props.autoFocus ?? false,
|
|
17
12
|
disabled,
|
|
18
13
|
id: name,
|
|
19
|
-
max:
|
|
20
|
-
min:
|
|
14
|
+
max: props.max || void 0,
|
|
15
|
+
min: props.min || void 0,
|
|
21
16
|
name,
|
|
22
17
|
onChange: (event) => commit(event.target.value),
|
|
23
|
-
readOnly
|
|
24
|
-
tabIndex:
|
|
18
|
+
readOnly,
|
|
19
|
+
tabIndex: props.tabIndex ?? void 0,
|
|
25
20
|
type: "date",
|
|
26
21
|
value
|
|
27
22
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/date-input.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"date-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/date-input.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport { Input } from \"../base/input\";\nimport { SimpleField } from \"./simple-field\";\n\nexport const DateInputComponent: RendererComponent<\"form.date-input\"> = ({ node }) => {\n const props = node.props;\n\n return (\n <SimpleField node={node} label={props.label ?? \"\"}>\n {({ name, value, readOnly, disabled, commit }) => (\n <Input\n autoFocus={props.autoFocus ?? false}\n disabled={disabled}\n id={name}\n max={props.max || undefined}\n min={props.min || undefined}\n name={name}\n onChange={(event) => commit(event.target.value)}\n readOnly={readOnly}\n tabIndex={props.tabIndex ?? undefined}\n type=\"date\"\n value={value}\n />\n )}\n </SimpleField>\n );\n};\n"],"mappings":";;;;AAIA,IAAa,sBAA4D,EAAE,WAAW;CACpF,MAAM,QAAQ,KAAK;CAEnB,OACE,oBAAC,aAAD;EAAmB;EAAM,OAAO,MAAM,SAAS;aAC3C,EAAE,MAAM,OAAO,UAAU,UAAU,aACnC,oBAAC,OAAD;GACE,WAAW,MAAM,aAAa;GACpB;GACV,IAAI;GACJ,KAAK,MAAM,OAAO,KAAA;GAClB,KAAK,MAAM,OAAO,KAAA;GACZ;GACN,WAAW,UAAU,OAAO,MAAM,OAAO,KAAK;GACpC;GACV,UAAU,MAAM,YAAY,KAAA;GAC5B,MAAK;GACE;EACR,CAAA;CAEQ,CAAA;AAEjB"}
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
import { RendererComponent } from '
|
|
2
|
-
declare module '../../../../../core/types' {
|
|
3
|
-
interface ComponentProps {
|
|
4
|
-
"form.hidden-input": {
|
|
5
|
-
name?: string;
|
|
6
|
-
value?: string;
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
}
|
|
1
|
+
import { RendererComponent } from '../../../core/types';
|
|
10
2
|
export declare const HiddenInputComponent: RendererComponent<"form.hidden-input">;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { getStringProp } from "../../../core/props.js";
|
|
2
1
|
import { jsx } from "react/jsx-runtime";
|
|
3
2
|
//#region resources/js/form/components/fields/hidden-input.tsx
|
|
4
3
|
var HiddenInputComponent = ({ node }) => /* @__PURE__ */ jsx("input", {
|
|
5
|
-
defaultValue:
|
|
6
|
-
name:
|
|
4
|
+
defaultValue: typeof node.props.value === "string" ? node.props.value : "",
|
|
5
|
+
name: node.props.name,
|
|
7
6
|
type: "hidden"
|
|
8
7
|
});
|
|
9
8
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hidden-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/hidden-input.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"hidden-input.js","names":[],"sources":["../../../../resources/js/form/components/fields/hidden-input.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nexport const HiddenInputComponent: RendererComponent<\"form.hidden-input\"> = ({ node }) => (\n <input\n defaultValue={typeof node.props.value === \"string\" ? node.props.value : \"\"}\n name={node.props.name}\n type=\"hidden\"\n />\n);\n"],"mappings":";;AAEA,IAAa,wBAAgE,EAAE,WAC7E,oBAAC,SAAD;CACE,cAAc,OAAO,KAAK,MAAM,UAAU,WAAW,KAAK,MAAM,QAAQ;CACxE,MAAM,KAAK,MAAM;CACjB,MAAK;AACN,CAAA"}
|
|
@@ -1,23 +1,2 @@
|
|
|
1
|
-
import { RendererComponent } from '
|
|
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
|
-
}
|
|
1
|
+
import { RendererComponent } from '../../../core/types';
|
|
23
2
|
export declare const NumberInputComponent: RendererComponent<"form.number-input">;
|