@lattice-php/lattice 0.1.0 → 0.3.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/README.md +3 -1
- package/dist/action/components/action-form.d.ts +24 -0
- package/dist/action/components/action-form.js +238 -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 +34 -64
- package/dist/action/components/action-group.js.map +1 -1
- package/dist/action/components/action-menu-context.d.ts +6 -0
- package/dist/action/components/action-menu-context.js +18 -0
- package/dist/action/components/action-menu-context.js.map +1 -0
- package/dist/action/components/action.d.ts +1 -24
- package/dist/action/components/action.js +73 -51
- package/dist/action/components/action.js.map +1 -1
- package/dist/action/index.d.ts +1 -1
- package/dist/action/index.js.map +1 -1
- package/dist/appearance/index.js +7 -2
- package/dist/appearance/index.js.map +1 -1
- package/dist/chat/components/chat-box.d.ts +3 -0
- package/dist/chat/components/chat-box.js +53 -0
- package/dist/chat/components/chat-box.js.map +1 -0
- package/dist/chat/components/message-list.d.ts +5 -0
- package/dist/chat/components/message-list.js +22 -0
- package/dist/chat/components/message-list.js.map +1 -0
- package/dist/chat/components/message.d.ts +5 -0
- package/dist/chat/components/message.js +20 -0
- package/dist/chat/components/message.js.map +1 -0
- package/dist/chat/components/prompt-input.d.ts +8 -0
- package/dist/chat/components/prompt-input.js +49 -0
- package/dist/chat/components/prompt-input.js.map +1 -0
- package/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.js +15 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/parts/text.d.ts +3 -0
- package/dist/chat/parts/text.js +12 -0
- package/dist/chat/parts/text.js.map +1 -0
- package/dist/chat/parts/tool-call.d.ts +3 -0
- package/dist/chat/parts/tool-call.js +20 -0
- package/dist/chat/parts/tool-call.js.map +1 -0
- package/dist/chat/transport.d.ts +2 -0
- package/dist/chat/transport.js +47 -0
- package/dist/chat/transport.js.map +1 -0
- package/dist/chat/types.d.ts +39 -0
- package/dist/chat/use-chat.d.ts +15 -0
- package/dist/chat/use-chat.js +161 -0
- package/dist/chat/use-chat.js.map +1 -0
- package/dist/core/api.d.ts +18 -0
- package/dist/core/api.js +51 -0
- package/dist/core/api.js.map +1 -0
- package/dist/core/collapsed-context.d.ts +2 -0
- package/dist/core/collapsed-context.js +10 -0
- package/dist/core/collapsed-context.js.map +1 -0
- package/dist/core/column-sizing.d.ts +17 -0
- package/dist/core/column-sizing.js +61 -0
- package/dist/core/column-sizing.js.map +1 -0
- 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 +5 -13
- package/dist/core/components/button.js +10 -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/chart.d.ts +3 -0
- package/dist/core/components/chart.js +175 -0
- package/dist/core/components/chart.js.map +1 -0
- package/dist/{form/components/base → core/components}/checkbox.js +7 -4
- package/dist/core/components/checkbox.js.map +1 -0
- package/dist/core/components/combobox.d.ts +33 -0
- package/dist/core/components/combobox.js +99 -0
- package/dist/core/components/combobox.js.map +1 -0
- package/dist/core/components/confirm-dialog.d.ts +2 -3
- package/dist/core/components/confirm-dialog.js +17 -17
- package/dist/core/components/confirm-dialog.js.map +1 -1
- package/dist/core/components/control.d.ts +13 -0
- package/dist/core/components/control.js +27 -0
- package/dist/core/components/control.js.map +1 -0
- package/dist/core/components/dialog.d.ts +19 -0
- package/dist/core/components/dialog.js +75 -0
- package/dist/core/components/dialog.js.map +1 -0
- package/dist/core/components/dropdown-menu.d.ts +14 -0
- package/dist/core/components/dropdown-menu.js +42 -0
- package/dist/core/components/dropdown-menu.js.map +1 -0
- package/dist/core/components/floating-panel.d.ts +3 -0
- package/dist/core/components/floating-panel.js +65 -0
- package/dist/core/components/floating-panel.js.map +1 -0
- package/dist/core/components/fragment.d.ts +1 -10
- package/dist/core/components/fragment.js +29 -18
- 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 +31 -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 +12 -1
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/info-tooltip.d.ts +3 -0
- package/dist/core/components/info-tooltip.js +26 -0
- package/dist/core/components/info-tooltip.js.map +1 -0
- package/dist/core/components/link.d.ts +1 -12
- package/dist/core/components/link.js +12 -11
- package/dist/core/components/link.js.map +1 -1
- package/dist/core/components/modal.d.ts +1 -11
- package/dist/core/components/modal.js +16 -42
- package/dist/core/components/modal.js.map +1 -1
- package/dist/core/components/popover.d.ts +8 -0
- package/dist/core/components/popover.js +37 -0
- package/dist/core/components/popover.js.map +1 -0
- package/dist/core/components/raw-block.d.ts +3 -0
- package/dist/core/components/raw-block.js +10 -0
- package/dist/core/components/raw-block.js.map +1 -0
- package/dist/core/components/section.d.ts +3 -0
- package/dist/core/components/section.js +75 -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/skeleton.d.ts +3 -0
- package/dist/core/components/skeleton.js +16 -0
- package/dist/core/components/skeleton.js.map +1 -0
- 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 +24 -13
- 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 +18 -3
- package/dist/core/components/text.js.map +1 -1
- package/dist/core/headers.d.ts +1 -0
- package/dist/core/headers.js +14 -0
- package/dist/core/headers.js.map +1 -0
- package/dist/core/registry-context.d.ts +21 -0
- package/dist/core/registry-context.js +40 -0
- package/dist/core/registry-context.js.map +1 -0
- package/dist/core/registry.d.ts +12 -3
- package/dist/core/registry.js +30 -5
- package/dist/core/registry.js.map +1 -1
- package/dist/core/renderer.d.ts +8 -14
- package/dist/core/renderer.js +20 -36
- package/dist/core/renderer.js.map +1 -1
- package/dist/core/test-id.d.ts +8 -0
- package/dist/core/test-id.js +21 -0
- package/dist/core/test-id.js.map +1 -0
- package/dist/core/types.d.ts +68 -26
- package/dist/core/use-column-resizing.d.ts +27 -0
- package/dist/core/use-column-resizing.js +228 -0
- package/dist/core/use-column-resizing.js.map +1 -0
- package/dist/effects/dispatch.d.ts +20 -0
- package/dist/effects/dispatch.js +39 -0
- package/dist/effects/dispatch.js.map +1 -0
- package/dist/effects/registry.d.ts +38 -0
- package/dist/effects/registry.js +51 -0
- package/dist/effects/registry.js.map +1 -0
- package/dist/effects/use-effect-dispatcher.d.ts +8 -0
- package/dist/effects/use-effect-dispatcher.js +20 -0
- package/dist/effects/use-effect-dispatcher.js.map +1 -0
- package/dist/effects/use-flash-effects.d.ts +5 -0
- package/dist/effects/use-flash-effects.js +22 -0
- package/dist/effects/use-flash-effects.js.map +1 -0
- package/dist/events/event-bridge.d.ts +3 -7
- package/dist/events/event-bridge.js +17 -47
- package/dist/events/event-bridge.js.map +1 -1
- package/dist/events/event-names.d.ts +3 -1
- package/dist/events/event-names.js +3 -1
- package/dist/events/event-names.js.map +1 -1
- package/dist/form/components/base/field.d.ts +3 -1
- package/dist/form/components/base/field.js +21 -2
- package/dist/form/components/base/field.js.map +1 -1
- package/dist/form/components/base/input-error.js +1 -1
- package/dist/form/components/base/input-error.js.map +1 -1
- package/dist/form/components/base/input.js +2 -1
- package/dist/form/components/base/input.js.map +1 -1
- package/dist/form/components/base/label.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 +5 -3
- package/dist/form/components/base/submit-button.js.map +1 -1
- package/dist/form/components/base/textarea.js +2 -1
- package/dist/form/components/base/textarea.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 +1 -4
- package/dist/form/components/context.js +2 -5
- package/dist/form/components/context.js.map +1 -1
- package/dist/form/components/field-props.d.ts +28 -0
- package/dist/form/components/field-props.js +15 -0
- package/dist/form/components/field-props.js.map +1 -0
- package/dist/form/components/field-scope.d.ts +21 -0
- package/dist/form/components/field-scope.js +54 -0
- package/dist/form/components/field-scope.js.map +1 -0
- package/dist/form/components/fields/block-add-menu.d.ts +9 -0
- package/dist/form/components/fields/block-add-menu.js +27 -0
- package/dist/form/components/fields/block-add-menu.js.map +1 -0
- package/dist/form/components/fields/builder.d.ts +2 -0
- package/dist/form/components/fields/builder.js +124 -0
- package/dist/form/components/fields/builder.js.map +1 -0
- package/dist/form/components/fields/checkbox.d.ts +2 -16
- package/dist/form/components/fields/checkbox.js +28 -30
- package/dist/form/components/fields/checkbox.js.map +1 -1
- package/dist/form/components/fields/choice.d.ts +2 -14
- package/dist/form/components/fields/choice.js +14 -20
- package/dist/form/components/fields/choice.js.map +1 -1
- package/dist/form/components/fields/date-input.d.ts +2 -20
- package/dist/form/components/fields/date-input.js +12 -16
- package/dist/form/components/fields/date-input.js.map +1 -1
- package/dist/form/components/fields/file-upload.d.ts +2 -0
- package/dist/form/components/fields/file-upload.js +250 -0
- package/dist/form/components/fields/file-upload.js.map +1 -0
- package/dist/form/components/fields/hidden-input.d.ts +2 -10
- package/dist/form/components/fields/hidden-input.js +11 -6
- package/dist/form/components/fields/hidden-input.js.map +1 -1
- package/dist/form/components/fields/number-input.d.ts +2 -23
- package/dist/form/components/fields/number-input.js +40 -41
- package/dist/form/components/fields/number-input.js.map +1 -1
- package/dist/form/components/fields/password-input.d.ts +2 -29
- package/dist/form/components/fields/password-input.js +41 -41
- package/dist/form/components/fields/password-input.js.map +1 -1
- package/dist/form/components/fields/repeater-rows.d.ts +12 -0
- package/dist/form/components/fields/repeater-rows.js +46 -0
- package/dist/form/components/fields/repeater-rows.js.map +1 -0
- package/dist/form/components/fields/repeater.d.ts +2 -0
- package/dist/form/components/fields/repeater.js +97 -0
- package/dist/form/components/fields/repeater.js.map +1 -0
- package/dist/form/components/fields/rich-editor.d.ts +2 -17
- package/dist/form/components/fields/rich-editor.js +90 -52
- package/dist/form/components/fields/rich-editor.js.map +1 -1
- package/dist/form/components/fields/row-action-menu.d.ts +17 -0
- package/dist/form/components/fields/row-action-menu.js +61 -0
- package/dist/form/components/fields/row-action-menu.js.map +1 -0
- package/dist/form/components/fields/row-actions.d.ts +10 -0
- package/dist/form/components/fields/row-actions.js +45 -0
- package/dist/form/components/fields/row-actions.js.map +1 -0
- package/dist/form/components/fields/row-item.d.ts +27 -0
- package/dist/form/components/fields/row-item.js +69 -0
- package/dist/form/components/fields/row-item.js.map +1 -0
- package/dist/form/components/fields/select.d.ts +2 -23
- package/dist/form/components/fields/select.js +97 -121
- 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 +23 -0
- package/dist/form/components/fields/simple-field.js.map +1 -0
- package/dist/form/components/fields/table-rows.d.ts +32 -0
- package/dist/form/components/fields/table-rows.js +188 -0
- package/dist/form/components/fields/table-rows.js.map +1 -0
- package/dist/form/components/fields/text-input.d.ts +2 -21
- package/dist/form/components/fields/text-input.js +13 -17
- package/dist/form/components/fields/text-input.js.map +1 -1
- package/dist/form/components/fields/textarea.d.ts +2 -20
- package/dist/form/components/fields/textarea.js +12 -16
- package/dist/form/components/fields/textarea.js.map +1 -1
- package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
- package/dist/form/components/fields/use-flip-reorder.js +51 -0
- package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
- package/dist/form/components/fields/use-row-collection.d.ts +11 -0
- package/dist/form/components/fields/use-row-collection.js +44 -0
- package/dist/form/components/fields/use-row-collection.js.map +1 -0
- package/dist/form/components/form-path.d.ts +5 -0
- package/dist/form/components/form-path.js +40 -0
- package/dist/form/components/form-path.js.map +1 -0
- package/dist/form/components/form-transport.d.ts +3 -4
- package/dist/form/components/form-transport.js +17 -18
- package/dist/form/components/form-transport.js.map +1 -1
- package/dist/form/components/form.d.ts +1 -20
- package/dist/form/components/form.js +47 -48
- package/dist/form/components/form.js.map +1 -1
- package/dist/form/components/index.d.ts +3 -1
- package/dist/form/components/index.js +4 -2
- package/dist/form/components/override-keys.d.ts +2 -0
- package/dist/form/components/override-keys.js +12 -0
- package/dist/form/components/override-keys.js.map +1 -0
- package/dist/form/components/prefill-context.d.ts +5 -0
- package/dist/form/components/prefill-context.js +11 -0
- package/dist/form/components/prefill-context.js.map +1 -0
- package/dist/form/components/prefill-targets.d.ts +17 -0
- package/dist/form/components/prefill-targets.js +73 -0
- package/dist/form/components/prefill-targets.js.map +1 -0
- package/dist/form/components/resolved-nodes.d.ts +1 -1
- package/dist/form/components/resolved-nodes.js +6 -3
- package/dist/form/components/resolved-nodes.js.map +1 -1
- package/dist/form/components/row-layout-context.d.ts +5 -0
- package/dist/form/components/row-layout-context.js +18 -0
- package/dist/form/components/row-layout-context.js.map +1 -0
- package/dist/form/components/types.d.ts +1 -0
- package/dist/form/components/use-controlled-field.d.ts +5 -9
- package/dist/form/components/use-controlled-field.js +17 -13
- 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 +14 -8
- package/dist/form/components/use-dependent-field.js.map +1 -1
- package/dist/form/components/use-field-commit.d.ts +4 -0
- package/dist/form/components/use-field-commit.js +21 -7
- package/dist/form/components/use-field-commit.js.map +1 -1
- package/dist/form/components/use-form-resolver.d.ts +7 -2
- package/dist/form/components/use-form-resolver.js +57 -17
- 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 +28 -0
- package/dist/form/components/use-seed-default.js.map +1 -0
- package/dist/form/components/values.js +20 -5
- package/dist/form/components/values.js.map +1 -1
- package/dist/form/index.d.ts +1 -1
- package/dist/form/index.js +13 -11
- package/dist/form/index.js.map +1 -1
- package/dist/form/skeleton.d.ts +1 -1
- package/dist/form/skeleton.js +5 -4
- package/dist/form/skeleton.js.map +1 -1
- package/dist/i18n/backend.d.ts +26 -0
- package/dist/i18n/backend.js +54 -0
- package/dist/i18n/backend.js.map +1 -0
- package/dist/i18n/config.d.ts +6 -0
- package/dist/i18n/config.js +36 -0
- package/dist/i18n/config.js.map +1 -0
- package/dist/i18n/index.d.ts +9 -0
- package/dist/i18n/index.js +7 -0
- package/dist/i18n/instance.d.ts +27 -0
- package/dist/i18n/instance.js +95 -0
- package/dist/i18n/instance.js.map +1 -0
- package/dist/i18n/locale-reload.d.ts +3 -0
- package/dist/i18n/locale-reload.js +17 -0
- package/dist/i18n/locale-reload.js.map +1 -0
- package/dist/i18n/locale-switcher.d.ts +21 -0
- package/dist/i18n/locale-switcher.js +25 -0
- package/dist/i18n/locale-switcher.js.map +1 -0
- package/dist/i18n/locale.d.ts +9 -0
- package/dist/i18n/locale.js +93 -0
- package/dist/i18n/locale.js.map +1 -0
- package/dist/i18n/page-props.d.ts +3 -0
- package/dist/i18n/page-props.js +24 -0
- package/dist/i18n/page-props.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 +23 -9
- package/dist/index.js +22 -7
- package/dist/inertia.d.ts +3 -7
- package/dist/inertia.js +13 -10
- package/dist/inertia.js.map +1 -1
- package/dist/lattice.css +172 -15
- package/dist/layout/breadcrumbs.d.ts +3 -0
- package/dist/layout/breadcrumbs.js +34 -0
- package/dist/layout/breadcrumbs.js.map +1 -0
- package/dist/layout/callouts.d.ts +3 -0
- package/dist/layout/callouts.js +67 -0
- package/dist/layout/callouts.js.map +1 -0
- package/dist/layout/components.d.ts +1 -0
- package/dist/layout/components.js +25 -0
- package/dist/layout/components.js.map +1 -0
- package/dist/layout/context.d.ts +4 -0
- package/dist/layout/context.js +8 -0
- package/dist/layout/context.js.map +1 -0
- package/dist/layout/dropdown.d.ts +3 -0
- package/dist/layout/dropdown.js +23 -0
- package/dist/layout/dropdown.js.map +1 -0
- package/dist/layout/index.d.ts +4 -0
- package/dist/layout/index.js +6 -0
- package/dist/layout/menu-item.d.ts +3 -0
- package/dist/layout/menu-item.js +101 -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/popover.d.ts +17 -0
- package/dist/layout/popover.js +46 -0
- package/dist/layout/popover.js.map +1 -0
- package/dist/layout/schema-layout.d.ts +10 -0
- package/dist/layout/schema-layout.js +23 -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/page.d.ts +1 -1
- package/dist/page.js +4 -10
- package/dist/page.js.map +1 -1
- package/dist/provider.d.ts +7 -4
- package/dist/provider.js +15 -11
- package/dist/provider.js.map +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +3 -1
- package/dist/registry.js.map +1 -1
- package/dist/svg-sprite-client/index.d.ts +1 -0
- package/dist/svg-sprite-client/index.js +0 -0
- package/dist/svg-sprite-client.d.ts +1 -0
- package/dist/table/align.d.ts +4 -0
- package/dist/table/align.js +23 -0
- package/dist/table/align.js.map +1 -0
- 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/components/bulk-bar.js +40 -6
- package/dist/table/components/bulk-bar.js.map +1 -1
- package/dist/table/components/cells/badge-cell.d.ts +2 -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/boolean-cell.d.ts +3 -0
- package/dist/table/components/cells/boolean-cell.js +23 -0
- package/dist/table/components/cells/boolean-cell.js.map +1 -0
- package/dist/table/components/cells/icon-cell.d.ts +2 -0
- package/dist/table/components/cells/icon-cell.js +21 -0
- package/dist/table/components/cells/icon-cell.js.map +1 -0
- package/dist/table/components/cells/image-cell.d.ts +2 -0
- package/dist/table/components/cells/image-cell.js +23 -0
- package/dist/table/components/cells/image-cell.js.map +1 -0
- package/dist/table/components/cells/money-cell.d.ts +2 -0
- package/dist/table/components/cells/money-cell.js +28 -0
- package/dist/table/components/cells/money-cell.js.map +1 -0
- package/dist/table/components/cells/number-cell.d.ts +2 -0
- package/dist/table/components/cells/number-cell.js +25 -0
- package/dist/table/components/cells/number-cell.js.map +1 -0
- package/dist/table/components/cells/numeric.d.ts +2 -0
- package/dist/table/components/cells/numeric.js +10 -0
- package/dist/table/components/cells/numeric.js.map +1 -0
- package/dist/table/components/cells/stack-cell.d.ts +3 -0
- package/dist/table/components/cells/stack-cell.js +17 -0
- package/dist/table/components/cells/stack-cell.js.map +1 -0
- package/dist/table/components/cells/text-cell.d.ts +2 -0
- package/dist/table/components/cells/text-cell.js +49 -0
- package/dist/table/components/cells/text-cell.js.map +1 -0
- package/dist/table/components/column-filter-control.d.ts +3 -1
- package/dist/table/components/column-filter-control.js +125 -100
- package/dist/table/components/column-filter-control.js.map +1 -1
- package/dist/table/components/column-header.d.ts +3 -1
- package/dist/table/components/column-header.js +28 -14
- package/dist/table/components/column-header.js.map +1 -1
- package/dist/table/components/filter-bar.d.ts +15 -0
- package/dist/table/components/filter-bar.js +81 -0
- package/dist/table/components/filter-bar.js.map +1 -0
- package/dist/table/components/filter-controls.d.ts +18 -0
- package/dist/table/components/filter-controls.js +256 -0
- package/dist/table/components/filter-controls.js.map +1 -0
- 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 +6 -3
- package/dist/table/components/filter-value-input.js +27 -17
- 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.js +23 -52
- 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 +198 -136
- package/dist/table/components/table.js.map +1 -1
- package/dist/table/filter-values.d.ts +13 -0
- package/dist/table/filter-values.js +30 -0
- package/dist/table/filter-values.js.map +1 -0
- 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/payload.js +24 -3
- package/dist/table/payload.js.map +1 -1
- package/dist/table/query.d.ts +10 -2
- package/dist/table/query.js +64 -11
- package/dist/table/query.js.map +1 -1
- package/dist/table/registry.d.ts +19 -0
- package/dist/table/registry.js +14 -0
- package/dist/table/registry.js.map +1 -0
- package/dist/table/types.d.ts +43 -57
- package/dist/table/use-table.d.ts +9 -5
- package/dist/table/use-table.js +66 -27
- package/dist/table/use-table.js.map +1 -1
- package/dist/toast/callout.d.ts +6 -0
- package/dist/toast/callout.js +31 -0
- package/dist/toast/callout.js.map +1 -0
- package/dist/toast/index.d.ts +5 -0
- package/dist/toast/index.js +4 -0
- package/dist/toast/toast.d.ts +14 -0
- package/dist/toast/toast.js +51 -0
- package/dist/toast/toast.js.map +1 -0
- package/dist/toast/toaster.d.ts +3 -0
- package/dist/toast/toaster.js +62 -0
- package/dist/toast/toaster.js.map +1 -0
- package/dist/toast/variant-styles.d.ts +6 -0
- package/dist/toast/variant-styles.js +37 -0
- package/dist/toast/variant-styles.js.map +1 -0
- package/dist/types/generated.d.ts +1037 -0
- package/dist/types/generated.js +0 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/vite-env.d.ts +1 -0
- package/dist/vite.d.ts +25 -0
- package/dist/vite.js +72 -0
- package/dist/vite.js.map +1 -0
- package/package.json +125 -12
- 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/rotate-ccw.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/action/effects.d.ts +0 -30
- package/dist/action/effects.js +0 -44
- package/dist/action/effects.js.map +0 -1
- 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/base/checkbox.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 → chat}/types.js +0 -0
- /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getActionEffects } from "./dispatch.js";
|
|
2
|
+
import { useEffectDispatcher } from "./use-effect-dispatcher.js";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { router } from "@inertiajs/react";
|
|
5
|
+
//#region resources/js/effects/use-flash-effects.ts
|
|
6
|
+
/**
|
|
7
|
+
* Drains the `latticeEffects` flash bag (server `Effects::flash(...)`) on each
|
|
8
|
+
* Inertia navigation and runs the effects through the registry dispatcher.
|
|
9
|
+
*/
|
|
10
|
+
function useFlashEffects() {
|
|
11
|
+
const dispatch = useEffectDispatcher();
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
return router.on("flash", (event) => {
|
|
14
|
+
const effects = getActionEffects(event.detail?.flash?.latticeEffects);
|
|
15
|
+
if (effects.length > 0) dispatch(effects);
|
|
16
|
+
});
|
|
17
|
+
}, [dispatch]);
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { useFlashEffects };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=use-flash-effects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-flash-effects.js","names":[],"sources":["../../resources/js/effects/use-flash-effects.ts"],"sourcesContent":["import { router } from \"@inertiajs/react\";\nimport { useEffect } from \"react\";\nimport { getActionEffects } from \"@lattice-php/lattice/effects/dispatch\";\nimport { useEffectDispatcher } from \"@lattice-php/lattice/effects/use-effect-dispatcher\";\n\ntype InertiaFlashEvent = CustomEvent<{\n flash?: {\n latticeEffects?: unknown;\n };\n}>;\n\n/**\n * Drains the `latticeEffects` flash bag (server `Effects::flash(...)`) on each\n * Inertia navigation and runs the effects through the registry dispatcher.\n */\nexport function useFlashEffects(): void {\n const dispatch = useEffectDispatcher();\n\n useEffect(() => {\n return router.on(\"flash\", (event) => {\n const effects = getActionEffects((event as InertiaFlashEvent).detail?.flash?.latticeEffects);\n\n if (effects.length > 0) {\n dispatch(effects);\n }\n });\n }, [dispatch]);\n}\n"],"mappings":";;;;;;;;;AAeA,SAAgB,kBAAwB;CACtC,MAAM,WAAW,oBAAoB;CAErC,gBAAgB;EACd,OAAO,OAAO,GAAG,UAAU,UAAU;GACnC,MAAM,UAAU,iBAAkB,MAA4B,QAAQ,OAAO,cAAc;GAE3F,IAAI,QAAQ,SAAS,GACnB,SAAS,OAAO;EAEpB,CAAC;CACH,GAAG,CAAC,QAAQ,CAAC;AACf"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import { ToastMessage } from '../toast/toast';
|
|
2
2
|
export declare const appearances: readonly ["light", "dark", "system"];
|
|
3
|
-
export type ToastVariant = (typeof toastVariants)[number];
|
|
4
3
|
export type Appearance = (typeof appearances)[number];
|
|
5
|
-
export type ToastMessage = {
|
|
6
|
-
message: string;
|
|
7
|
-
variant: ToastVariant;
|
|
8
|
-
};
|
|
9
4
|
type EventBridgeProps = {
|
|
10
5
|
onAppearanceChange?: (appearance: Appearance) => void;
|
|
6
|
+
onLocaleChange?: (locale: string) => void;
|
|
11
7
|
onToast?: (toast: ToastMessage) => void;
|
|
12
8
|
};
|
|
13
|
-
export declare function EventBridge({ onAppearanceChange, onToast }: EventBridgeProps): null;
|
|
9
|
+
export declare function EventBridge({ onAppearanceChange, onLocaleChange, onToast }: EventBridgeProps): null;
|
|
14
10
|
export {};
|
|
@@ -1,61 +1,20 @@
|
|
|
1
1
|
import { LATTICE_EVENT } from "./event-names.js";
|
|
2
|
+
import { onToast } from "../toast/toast.js";
|
|
2
3
|
import { useEffect } from "react";
|
|
3
|
-
import { router } from "@inertiajs/react";
|
|
4
4
|
//#region resources/js/events/event-bridge.tsx
|
|
5
|
-
var toastVariants = [
|
|
6
|
-
"success",
|
|
7
|
-
"info",
|
|
8
|
-
"warning",
|
|
9
|
-
"error"
|
|
10
|
-
];
|
|
11
5
|
var appearances = [
|
|
12
6
|
"light",
|
|
13
7
|
"dark",
|
|
14
8
|
"system"
|
|
15
9
|
];
|
|
16
|
-
function isToastVariant(value) {
|
|
17
|
-
return toastVariants.some((variant) => variant === value);
|
|
18
|
-
}
|
|
19
10
|
function isAppearance(value) {
|
|
20
11
|
return appearances.some((appearance) => appearance === value);
|
|
21
12
|
}
|
|
22
|
-
function
|
|
23
|
-
if (typeof value !== "object" || value === null) return null;
|
|
24
|
-
const candidate = value;
|
|
25
|
-
if (typeof candidate.message !== "string" || !isToastVariant(candidate.variant)) return null;
|
|
26
|
-
return {
|
|
27
|
-
message: candidate.message,
|
|
28
|
-
variant: candidate.variant
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
function normalizeLatticeToast(event) {
|
|
32
|
-
const detail = event.detail;
|
|
33
|
-
const message = detail?.message;
|
|
34
|
-
if (typeof message !== "string" || message === "") return null;
|
|
35
|
-
return {
|
|
36
|
-
message,
|
|
37
|
-
variant: isToastVariant(detail.variant) ? detail.variant : "success"
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function EventBridge({ onAppearanceChange, onToast }) {
|
|
13
|
+
function EventBridge({ onAppearanceChange, onLocaleChange, onToast: onToast$1 }) {
|
|
41
14
|
useEffect(() => {
|
|
42
|
-
if (!onToast) return;
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
if (toast) onToast(toast);
|
|
46
|
-
});
|
|
47
|
-
}, [onToast]);
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
if (!onToast) return;
|
|
50
|
-
const listener = (event) => {
|
|
51
|
-
const toast = normalizeLatticeToast(event);
|
|
52
|
-
if (toast) onToast(toast);
|
|
53
|
-
};
|
|
54
|
-
window.addEventListener(LATTICE_EVENT.toast, listener);
|
|
55
|
-
return () => {
|
|
56
|
-
window.removeEventListener(LATTICE_EVENT.toast, listener);
|
|
57
|
-
};
|
|
58
|
-
}, [onToast]);
|
|
15
|
+
if (!onToast$1) return;
|
|
16
|
+
return onToast(onToast$1);
|
|
17
|
+
}, [onToast$1]);
|
|
59
18
|
useEffect(() => {
|
|
60
19
|
if (!onAppearanceChange) return;
|
|
61
20
|
const listener = (event) => {
|
|
@@ -67,9 +26,20 @@ function EventBridge({ onAppearanceChange, onToast }) {
|
|
|
67
26
|
window.removeEventListener(LATTICE_EVENT.appearanceChange, listener);
|
|
68
27
|
};
|
|
69
28
|
}, [onAppearanceChange]);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (!onLocaleChange) return;
|
|
31
|
+
const listener = (event) => {
|
|
32
|
+
const locale = event.detail?.locale;
|
|
33
|
+
if (typeof locale === "string" && locale !== "") onLocaleChange(locale);
|
|
34
|
+
};
|
|
35
|
+
window.addEventListener(LATTICE_EVENT.localeChange, listener);
|
|
36
|
+
return () => {
|
|
37
|
+
window.removeEventListener(LATTICE_EVENT.localeChange, listener);
|
|
38
|
+
};
|
|
39
|
+
}, [onLocaleChange]);
|
|
70
40
|
return null;
|
|
71
41
|
}
|
|
72
42
|
//#endregion
|
|
73
|
-
export { EventBridge, appearances
|
|
43
|
+
export { EventBridge, appearances };
|
|
74
44
|
|
|
75
45
|
//# sourceMappingURL=event-bridge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-bridge.js","names":[],"sources":["../../resources/js/events/event-bridge.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"event-bridge.js","names":[],"sources":["../../resources/js/events/event-bridge.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { onToast as subscribeToToasts } from \"@lattice-php/lattice/toast/toast\";\nimport type { ToastMessage } from \"@lattice-php/lattice/toast/toast\";\nimport { LATTICE_EVENT } from \"./event-names\";\n\nexport const appearances = [\"light\", \"dark\", \"system\"] as const;\n\nexport type Appearance = (typeof appearances)[number];\n\ntype EventBridgeProps = {\n onAppearanceChange?: (appearance: Appearance) => void;\n onLocaleChange?: (locale: string) => void;\n onToast?: (toast: ToastMessage) => void;\n};\n\ntype AppearanceEvent = CustomEvent<{\n value?: unknown;\n}>;\n\ntype LocaleEvent = CustomEvent<{\n locale?: unknown;\n}>;\n\nfunction isAppearance(value: unknown): value is Appearance {\n return appearances.some((appearance) => appearance === value);\n}\n\nexport function EventBridge({ onAppearanceChange, onLocaleChange, onToast }: EventBridgeProps) {\n useEffect(() => {\n if (!onToast) {\n return;\n }\n\n return subscribeToToasts(onToast);\n }, [onToast]);\n\n useEffect(() => {\n if (!onAppearanceChange) {\n return;\n }\n\n const listener = (event: Event): void => {\n const value = (event as AppearanceEvent).detail?.value;\n\n if (isAppearance(value)) {\n onAppearanceChange(value);\n }\n };\n\n window.addEventListener(LATTICE_EVENT.appearanceChange, listener);\n\n return () => {\n window.removeEventListener(LATTICE_EVENT.appearanceChange, listener);\n };\n }, [onAppearanceChange]);\n\n useEffect(() => {\n if (!onLocaleChange) {\n return;\n }\n\n const listener = (event: Event): void => {\n const locale = (event as LocaleEvent).detail?.locale;\n\n if (typeof locale === \"string\" && locale !== \"\") {\n onLocaleChange(locale);\n }\n };\n\n window.addEventListener(LATTICE_EVENT.localeChange, listener);\n\n return () => {\n window.removeEventListener(LATTICE_EVENT.localeChange, listener);\n };\n }, [onLocaleChange]);\n\n return null;\n}\n"],"mappings":";;;;AAKA,IAAa,cAAc;CAAC;CAAS;CAAQ;AAAQ;AAkBrD,SAAS,aAAa,OAAqC;CACzD,OAAO,YAAY,MAAM,eAAe,eAAe,KAAK;AAC9D;AAEA,SAAgB,YAAY,EAAE,oBAAoB,gBAAgB,SAAA,aAA6B;CAC7F,gBAAgB;EACd,IAAI,CAAC,WACH;EAGF,OAAO,QAAkB,SAAO;CAClC,GAAG,CAAC,SAAO,CAAC;CAEZ,gBAAgB;EACd,IAAI,CAAC,oBACH;EAGF,MAAM,YAAY,UAAuB;GACvC,MAAM,QAAS,MAA0B,QAAQ;GAEjD,IAAI,aAAa,KAAK,GACpB,mBAAmB,KAAK;EAE5B;EAEA,OAAO,iBAAiB,cAAc,kBAAkB,QAAQ;EAEhE,aAAa;GACX,OAAO,oBAAoB,cAAc,kBAAkB,QAAQ;EACrE;CACF,GAAG,CAAC,kBAAkB,CAAC;CAEvB,gBAAgB;EACd,IAAI,CAAC,gBACH;EAGF,MAAM,YAAY,UAAuB;GACvC,MAAM,SAAU,MAAsB,QAAQ;GAE9C,IAAI,OAAO,WAAW,YAAY,WAAW,IAC3C,eAAe,MAAM;EAEzB;EAEA,OAAO,iBAAiB,cAAc,cAAc,QAAQ;EAE5D,aAAa;GACX,OAAO,oBAAoB,cAAc,cAAc,QAAQ;EACjE;CACF,GAAG,CAAC,cAAc,CAAC;CAEnB,OAAO;AACT"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Single source of truth for the `lattice:*` DOM events the runtime dispatches
|
|
3
3
|
* and listens for. Effect-driven events are mapped from the generated EffectType
|
|
4
|
-
* in
|
|
4
|
+
* in effects/registry.ts; the rest are framework events with no PHP counterpart.
|
|
5
5
|
*/
|
|
6
6
|
export declare const LATTICE_EVENT: {
|
|
7
|
+
readonly callout: "lattice:callout";
|
|
7
8
|
readonly toast: "lattice:toast";
|
|
8
9
|
readonly reloadComponent: "lattice:reload-component";
|
|
9
10
|
readonly reloadPage: "lattice:reload-page";
|
|
@@ -13,6 +14,7 @@ export declare const LATTICE_EVENT: {
|
|
|
13
14
|
readonly closeModal: "lattice:close-modal";
|
|
14
15
|
readonly resetForm: "lattice:reset-form";
|
|
15
16
|
readonly appearanceChange: "lattice:appearance-change";
|
|
17
|
+
readonly localeChange: "lattice:locale-change";
|
|
16
18
|
readonly actionError: "lattice:action-error";
|
|
17
19
|
};
|
|
18
20
|
export type ReloadComponentEvent = CustomEvent<{
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Single source of truth for the `lattice:*` DOM events the runtime dispatches
|
|
4
4
|
* and listens for. Effect-driven events are mapped from the generated EffectType
|
|
5
|
-
* in
|
|
5
|
+
* in effects/registry.ts; the rest are framework events with no PHP counterpart.
|
|
6
6
|
*/
|
|
7
7
|
var LATTICE_EVENT = {
|
|
8
|
+
callout: "lattice:callout",
|
|
8
9
|
toast: "lattice:toast",
|
|
9
10
|
reloadComponent: "lattice:reload-component",
|
|
10
11
|
reloadPage: "lattice:reload-page",
|
|
@@ -14,6 +15,7 @@ var LATTICE_EVENT = {
|
|
|
14
15
|
closeModal: "lattice:close-modal",
|
|
15
16
|
resetForm: "lattice:reset-form",
|
|
16
17
|
appearanceChange: "lattice:appearance-change",
|
|
18
|
+
localeChange: "lattice:locale-change",
|
|
17
19
|
actionError: "lattice:action-error"
|
|
18
20
|
};
|
|
19
21
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-names.js","names":[],"sources":["../../resources/js/events/event-names.ts"],"sourcesContent":["/**\n * Single source of truth for the `lattice:*` DOM events the runtime dispatches\n * and listens for. Effect-driven events are mapped from the generated EffectType\n * in
|
|
1
|
+
{"version":3,"file":"event-names.js","names":[],"sources":["../../resources/js/events/event-names.ts"],"sourcesContent":["/**\n * Single source of truth for the `lattice:*` DOM events the runtime dispatches\n * and listens for. Effect-driven events are mapped from the generated EffectType\n * in effects/registry.ts; the rest are framework events with no PHP counterpart.\n */\nexport const LATTICE_EVENT = {\n callout: \"lattice:callout\",\n toast: \"lattice:toast\",\n reloadComponent: \"lattice:reload-component\",\n reloadPage: \"lattice:reload-page\",\n redirect: \"lattice:redirect\",\n download: \"lattice:download\",\n openModal: \"lattice:open-modal\",\n closeModal: \"lattice:close-modal\",\n resetForm: \"lattice:reset-form\",\n appearanceChange: \"lattice:appearance-change\",\n localeChange: \"lattice:locale-change\",\n actionError: \"lattice:action-error\",\n} as const;\n\nexport type ReloadComponentEvent = CustomEvent<{\n component?: string;\n type?: string;\n}>;\n"],"mappings":";;;;;;AAKA,IAAa,gBAAgB;CAC3B,SAAS;CACT,OAAO;CACP,iBAAiB;CACjB,YAAY;CACZ,UAAU;CACV,UAAU;CACV,WAAW;CACX,YAAY;CACZ,WAAW;CACX,kBAAkB;CAClB,cAAc;CACd,aAAa;AACf"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { FormLabelAction } from '../types';
|
|
2
|
-
export declare function FormFieldFrame({ children, error, label, labelAction, name, required, }: {
|
|
2
|
+
export declare function FormFieldFrame({ children, error, helperText, label, labelAction, name, required, tooltip, }: {
|
|
3
3
|
children: React.ReactNode;
|
|
4
4
|
error?: string;
|
|
5
|
+
helperText?: string;
|
|
5
6
|
label: string;
|
|
6
7
|
labelAction?: FormLabelAction;
|
|
7
8
|
name: string;
|
|
8
9
|
required?: boolean;
|
|
10
|
+
tooltip?: string;
|
|
9
11
|
}): import("react").JSX.Element;
|
|
@@ -1,9 +1,23 @@
|
|
|
1
1
|
import { TextLink } from "../../../core/components/link.js";
|
|
2
|
-
import {
|
|
2
|
+
import { InfoTooltip } from "../../../core/components/info-tooltip.js";
|
|
3
3
|
import InputError from "./input-error.js";
|
|
4
|
+
import { Label } from "./label.js";
|
|
5
|
+
import { useInTableCell } from "../row-layout-context.js";
|
|
4
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
7
|
//#region resources/js/form/components/base/field.tsx
|
|
6
|
-
function FormFieldFrame({ children, error, label, labelAction, name, required }) {
|
|
8
|
+
function FormFieldFrame({ children, error, helperText, label, labelAction, name, required, tooltip }) {
|
|
9
|
+
if (useInTableCell()) return /* @__PURE__ */ jsxs("div", {
|
|
10
|
+
className: "grid gap-1",
|
|
11
|
+
children: [
|
|
12
|
+
/* @__PURE__ */ jsx(Label, {
|
|
13
|
+
htmlFor: name,
|
|
14
|
+
className: "sr-only",
|
|
15
|
+
children: label
|
|
16
|
+
}),
|
|
17
|
+
children,
|
|
18
|
+
/* @__PURE__ */ jsx(InputError, { message: error })
|
|
19
|
+
]
|
|
20
|
+
});
|
|
7
21
|
return /* @__PURE__ */ jsxs("div", {
|
|
8
22
|
className: "grid gap-2",
|
|
9
23
|
children: [
|
|
@@ -19,6 +33,7 @@ function FormFieldFrame({ children, error, label, labelAction, name, required })
|
|
|
19
33
|
className: "ml-0.5 text-lt-danger",
|
|
20
34
|
children: "*"
|
|
21
35
|
}),
|
|
36
|
+
/* @__PURE__ */ jsx(InfoTooltip, { content: tooltip }),
|
|
22
37
|
labelAction && /* @__PURE__ */ jsx(TextLink, {
|
|
23
38
|
href: labelAction.href,
|
|
24
39
|
tabIndex: labelAction.tabIndex,
|
|
@@ -28,6 +43,10 @@ function FormFieldFrame({ children, error, label, labelAction, name, required })
|
|
|
28
43
|
]
|
|
29
44
|
}),
|
|
30
45
|
children,
|
|
46
|
+
helperText && /* @__PURE__ */ jsx("p", {
|
|
47
|
+
className: "text-sm text-lt-muted-fg",
|
|
48
|
+
children: helperText
|
|
49
|
+
}),
|
|
31
50
|
/* @__PURE__ */ jsx(InputError, { message: error })
|
|
32
51
|
]
|
|
33
52
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field.js","names":[],"sources":["../../../../resources/js/form/components/base/field.tsx"],"sourcesContent":["import InputError from \"@lattice/lattice/form/components/base/input-error\";\nimport { TextLink } from \"@lattice/lattice/core/components/link\";\nimport { Label } from \"@lattice/lattice/form/components/base/label\";\nimport type { FormLabelAction } from \"../types\";\n\nexport function FormFieldFrame({\n children,\n error,\n label,\n labelAction,\n name,\n required,\n}: {\n children: React.ReactNode;\n error?: string;\n label: string;\n labelAction?: FormLabelAction;\n name: string;\n required?: boolean;\n}) {\n return (\n <div className=\"grid gap-2\">\n <div className=\"flex min-h-5 items-center\">\n <Label htmlFor={name}>{label}</Label>\n {required && (\n <span aria-hidden=\"true\" className=\"ml-0.5 text-lt-danger\">\n *\n </span>\n )}\n {labelAction && (\n <TextLink\n href={labelAction.href}\n tabIndex={labelAction.tabIndex}\n className=\"ml-auto text-sm\"\n >\n {labelAction.label}\n </TextLink>\n )}\n </div>\n\n {children}\n\n <InputError message={error} />\n </div>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"field.js","names":[],"sources":["../../../../resources/js/form/components/base/field.tsx"],"sourcesContent":["import InputError from \"@lattice-php/lattice/form/components/base/input-error\";\nimport { InfoTooltip } from \"@lattice-php/lattice/core/components/info-tooltip\";\nimport { TextLink } from \"@lattice-php/lattice/core/components/link\";\nimport { Label } from \"@lattice-php/lattice/form/components/base/label\";\nimport { useInTableCell } from \"../row-layout-context\";\nimport type { FormLabelAction } from \"../types\";\n\nexport function FormFieldFrame({\n children,\n error,\n helperText,\n label,\n labelAction,\n name,\n required,\n tooltip,\n}: {\n children: React.ReactNode;\n error?: string;\n helperText?: string;\n label: string;\n labelAction?: FormLabelAction;\n name: string;\n required?: boolean;\n tooltip?: string;\n}) {\n const bare = useInTableCell();\n\n if (bare) {\n return (\n <div className=\"grid gap-1\">\n <Label htmlFor={name} className=\"sr-only\">\n {label}\n </Label>\n {children}\n <InputError message={error} />\n </div>\n );\n }\n\n return (\n <div className=\"grid gap-2\">\n <div className=\"flex min-h-5 items-center\">\n <Label htmlFor={name}>{label}</Label>\n {required && (\n <span aria-hidden=\"true\" className=\"ml-0.5 text-lt-danger\">\n *\n </span>\n )}\n <InfoTooltip content={tooltip} />\n {labelAction && (\n <TextLink\n href={labelAction.href}\n tabIndex={labelAction.tabIndex}\n className=\"ml-auto text-sm\"\n >\n {labelAction.label}\n </TextLink>\n )}\n </div>\n\n {children}\n\n {helperText && <p className=\"text-sm text-lt-muted-fg\">{helperText}</p>}\n\n <InputError message={error} />\n </div>\n );\n}\n"],"mappings":";;;;;;;AAOA,SAAgB,eAAe,EAC7B,UACA,OACA,YACA,OACA,aACA,MACA,UACA,WAUC;CAGD,IAFa,eAET,GACF,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,oBAAC,OAAD;IAAO,SAAS;IAAM,WAAU;cAC7B;GACI,CAAA;GACN;GACD,oBAAC,YAAD,EAAY,SAAS,MAAQ,CAAA;EAC1B;;CAIT,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf;GACE,qBAAC,OAAD;IAAK,WAAU;cAAf;KACE,oBAAC,OAAD;MAAO,SAAS;gBAAO;KAAa,CAAA;KACnC,YACC,oBAAC,QAAD;MAAM,eAAY;MAAO,WAAU;gBAAwB;KAErD,CAAA;KAER,oBAAC,aAAD,EAAa,SAAS,QAAU,CAAA;KAC/B,eACC,oBAAC,UAAD;MACE,MAAM,YAAY;MAClB,UAAU,YAAY;MACtB,WAAU;gBAET,YAAY;KACL,CAAA;IAET;;GAEJ;GAEA,cAAc,oBAAC,KAAD;IAAG,WAAU;cAA4B;GAAc,CAAA;GAEtE,oBAAC,YAAD,EAAY,SAAS,MAAQ,CAAA;EAC1B;;AAET"}
|
|
@@ -4,7 +4,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
4
4
|
function InputError({ message, className = "", ...props }) {
|
|
5
5
|
return message ? /* @__PURE__ */ jsx("p", {
|
|
6
6
|
...props,
|
|
7
|
-
className: cn("text-sm text-
|
|
7
|
+
className: cn("text-sm text-lt-danger", className),
|
|
8
8
|
children: message
|
|
9
9
|
}) : null;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-error.js","names":[],"sources":["../../../../resources/js/form/components/base/input-error.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nexport default function InputError({\n message,\n className = \"\",\n ...props\n}: HTMLAttributes<HTMLParagraphElement> & { message?: string }) {\n return message ? (\n <p {...props} className={cn(\"text-sm text-
|
|
1
|
+
{"version":3,"file":"input-error.js","names":[],"sources":["../../../../resources/js/form/components/base/input-error.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nexport default function InputError({\n message,\n className = \"\",\n ...props\n}: HTMLAttributes<HTMLParagraphElement> & { message?: string }) {\n return message ? (\n <p {...props} className={cn(\"text-sm text-lt-danger\", className)}>\n {message}\n </p>\n ) : null;\n}\n"],"mappings":";;;AAGA,SAAwB,WAAW,EACjC,SACA,YAAY,IACZ,GAAG,SAC2D;CAC9D,OAAO,UACL,oBAAC,KAAD;EAAG,GAAI;EAAO,WAAW,GAAG,0BAA0B,SAAS;YAC5D;CACA,CAAA,IACD;AACN"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { controlSurface } from "../../../core/components/control.js";
|
|
2
3
|
import "react";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
//#region resources/js/form/components/base/input.tsx
|
|
@@ -6,7 +7,7 @@ function Input({ className, type, ...props }) {
|
|
|
6
7
|
return /* @__PURE__ */ jsx("input", {
|
|
7
8
|
type,
|
|
8
9
|
"data-slot": "input",
|
|
9
|
-
className: cn("
|
|
10
|
+
className: cn(controlSurface(), "file:text-lt-fg selection:bg-lt-primary selection:text-lt-primary-fg file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium", className),
|
|
10
11
|
...props
|
|
11
12
|
});
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","names":[],"sources":["../../../../resources/js/form/components/base/input.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n \"
|
|
1
|
+
{"version":3,"file":"input.js","names":[],"sources":["../../../../resources/js/form/components/base/input.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { controlSurface } from \"@lattice-php/lattice/core/components/control\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction Input({ className, type, ...props }: React.ComponentProps<\"input\">) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n controlSurface(),\n \"file:text-lt-fg selection:bg-lt-primary selection:text-lt-primary-fg file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Input };\n"],"mappings":";;;;;AAKA,SAAS,MAAM,EAAE,WAAW,MAAM,GAAG,SAAwC;CAC3E,OACE,oBAAC,SAAD;EACQ;EACN,aAAU;EACV,WAAW,GACT,eAAe,GACf,kKACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"label.js","names":[],"sources":["../../../../resources/js/form/components/base/label.tsx"],"sourcesContent":["import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport * as React from \"react\";\n\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n"],"mappings":";;;;;AAKA,SAAS,MAAM,EAAE,WAAW,GAAG,SAA2D;CACxF,OACE,oBAAC,eAAe,MAAhB;EACE,aAAU;EACV,WAAW,GACT,+LACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
1
|
+
{"version":3,"file":"label.js","names":[],"sources":["../../../../resources/js/form/components/base/label.tsx"],"sourcesContent":["import * as LabelPrimitive from \"@radix-ui/react-label\";\nimport * as React from \"react\";\n\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n"],"mappings":";;;;;AAKA,SAAS,MAAM,EAAE,WAAW,GAAG,SAA2D;CACxF,OACE,oBAAC,eAAe,MAAhB;EACE,aAAU;EACV,WAAW,GACT,+LACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { Icon } from "../../../icons/sprite.js";
|
|
2
3
|
import { Input } from "./input.js";
|
|
3
4
|
import { useState } from "react";
|
|
4
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
import { Eye, EyeOff } from "lucide-react";
|
|
6
6
|
//#region resources/js/form/components/base/password-input.tsx
|
|
7
7
|
function PasswordInput({ className, ref, ...props }) {
|
|
8
8
|
const [showPassword, setShowPassword] = useState(false);
|
|
@@ -15,11 +15,18 @@ function PasswordInput({ className, ref, ...props }) {
|
|
|
15
15
|
...props
|
|
16
16
|
}), /* @__PURE__ */ jsx("button", {
|
|
17
17
|
type: "button",
|
|
18
|
+
"data-test": typeof props.name === "string" ? `${props.name}-visibility` : "password-visibility",
|
|
18
19
|
onClick: () => setShowPassword((prev) => !prev),
|
|
19
20
|
className: "absolute inset-y-0 right-0 flex items-center rounded-r-lt-sm px-3 text-lt-muted-fg hover:text-lt-fg focus-visible:ring-[3px] focus-visible:ring-lt-ring focus-visible:outline-none",
|
|
20
21
|
"aria-label": showPassword ? "Hide password" : "Show password",
|
|
21
22
|
tabIndex: -1,
|
|
22
|
-
children: showPassword ? /* @__PURE__ */ jsx(
|
|
23
|
+
children: showPassword ? /* @__PURE__ */ jsx(Icon, {
|
|
24
|
+
name: "eye-off",
|
|
25
|
+
className: "size-lt-icon-md"
|
|
26
|
+
}) : /* @__PURE__ */ jsx(Icon, {
|
|
27
|
+
name: "eye",
|
|
28
|
+
className: "size-lt-icon-md"
|
|
29
|
+
})
|
|
23
30
|
})]
|
|
24
31
|
});
|
|
25
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-input.js","names":[],"sources":["../../../../resources/js/form/components/base/password-input.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"password-input.js","names":[],"sources":["../../../../resources/js/form/components/base/password-input.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport type { ComponentProps, Ref } from \"react\";\nimport { useState } from \"react\";\nimport { Input } from \"@lattice-php/lattice/form/components/base/input\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\ntype PasswordInputProps = Omit<ComponentProps<\"input\">, \"type\"> & {\n passwordrules?: string;\n ref?: Ref<HTMLInputElement>;\n};\n\nexport default function PasswordInput({ className, ref, ...props }: PasswordInputProps) {\n const [showPassword, setShowPassword] = useState(false);\n\n return (\n <div className=\"relative\">\n <Input\n type={showPassword ? \"text\" : \"password\"}\n className={cn(\"pr-10\", className)}\n ref={ref}\n {...props}\n />\n <button\n type=\"button\"\n data-test={\n typeof props.name === \"string\" ? `${props.name}-visibility` : \"password-visibility\"\n }\n onClick={() => setShowPassword((prev) => !prev)}\n className=\"absolute inset-y-0 right-0 flex items-center rounded-r-lt-sm px-3 text-lt-muted-fg hover:text-lt-fg focus-visible:ring-[3px] focus-visible:ring-lt-ring focus-visible:outline-none\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n tabIndex={-1}\n >\n {showPassword ? (\n <Icon name=\"eye-off\" className=\"size-lt-icon-md\" />\n ) : (\n <Icon name=\"eye\" className=\"size-lt-icon-md\" />\n )}\n </button>\n </div>\n );\n}\n"],"mappings":";;;;;;AAWA,SAAwB,cAAc,EAAE,WAAW,KAAK,GAAG,SAA6B;CACtF,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CAEtD,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,OAAD;GACE,MAAM,eAAe,SAAS;GAC9B,WAAW,GAAG,SAAS,SAAS;GAC3B;GACL,GAAI;EACL,CAAA,GACD,oBAAC,UAAD;GACE,MAAK;GACL,aACE,OAAO,MAAM,SAAS,WAAW,GAAG,MAAM,KAAK,eAAe;GAEhE,eAAe,iBAAiB,SAAS,CAAC,IAAI;GAC9C,WAAU;GACV,cAAY,eAAe,kBAAkB;GAC7C,UAAU;aAET,eACC,oBAAC,MAAD;IAAM,MAAK;IAAU,WAAU;GAAmB,CAAA,IAElD,oBAAC,MAAD;IAAM,MAAK;IAAM,WAAU;GAAmB,CAAA;EAE1C,CAAA,CACL;;AAET"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function FormSubmitButton({ label, variant, }: {
|
|
1
|
+
import { ButtonVariant } from '../../../types/generated';
|
|
2
|
+
export declare function FormSubmitButton({ label, summaryLabel, variant, }: {
|
|
3
3
|
label: string;
|
|
4
|
-
|
|
4
|
+
summaryLabel: string;
|
|
5
|
+
variant?: ButtonVariant;
|
|
5
6
|
}): import("react").JSX.Element;
|
|
6
|
-
export {};
|
|
@@ -3,8 +3,8 @@ 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" }) {
|
|
7
|
-
const { errors, fieldLabels, processing } = useFormContext();
|
|
6
|
+
function FormSubmitButton({ label, summaryLabel, variant = "default" }) {
|
|
7
|
+
const { componentId, errors, fieldLabels, processing } = useFormContext();
|
|
8
8
|
const invalidFields = Object.entries(errors).filter(([, message]) => Boolean(message)).map(([name, message]) => ({
|
|
9
9
|
label: fieldLabels[name] ?? name,
|
|
10
10
|
message
|
|
@@ -13,6 +13,8 @@ function FormSubmitButton({ label, variant = "default" }) {
|
|
|
13
13
|
return /* @__PURE__ */ jsxs("span", {
|
|
14
14
|
className: "group relative inline-flex flex-col",
|
|
15
15
|
children: [/* @__PURE__ */ jsxs(Button, {
|
|
16
|
+
"data-lattice-form": componentId,
|
|
17
|
+
"data-test": "form-submit",
|
|
16
18
|
disabled: processing || hasErrors,
|
|
17
19
|
type: "submit",
|
|
18
20
|
variant,
|
|
@@ -22,7 +24,7 @@ function FormSubmitButton({ label, variant = "default" }) {
|
|
|
22
24
|
role: "tooltip",
|
|
23
25
|
children: [/* @__PURE__ */ jsx("p", {
|
|
24
26
|
className: "mb-1 font-medium text-lt-fg",
|
|
25
|
-
children:
|
|
27
|
+
children: summaryLabel
|
|
26
28
|
}), /* @__PURE__ */ jsx("ul", {
|
|
27
29
|
className: "space-y-1",
|
|
28
30
|
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-php/lattice/core/components/button\";\nimport { Spinner } from \"@lattice-php/lattice/core/components/spinner\";\nimport type { ButtonVariant } from \"@lattice-php/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 { componentId, 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\n data-lattice-form={componentId}\n data-test=\"form-submit\"\n disabled={processing || hasErrors}\n type=\"submit\"\n variant={variant}\n >\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,aAAa,QAAQ,aAAa,eAAe,eAAe;CAExE,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;GACE,qBAAmB;GACnB,aAAU;GACV,UAAU,cAAc;GACxB,MAAK;GACI;aALX,CAOG,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,11 +1,12 @@
|
|
|
1
1
|
import { cn } from "../../../lib/utils.js";
|
|
2
|
+
import { FOCUS_RING } from "../../../core/components/control.js";
|
|
2
3
|
import "react";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
//#region resources/js/form/components/base/textarea.tsx
|
|
5
6
|
function Textarea({ className, ...props }) {
|
|
6
7
|
return /* @__PURE__ */ jsx("textarea", {
|
|
7
8
|
"data-slot": "textarea",
|
|
8
|
-
className: cn("border-lt-input placeholder:text-lt-muted-fg flex field-sizing-content min-h-16 w-full rounded-lt-sm border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
9
|
+
className: cn("border-lt-input placeholder:text-lt-muted-fg flex field-sizing-content min-h-16 w-full rounded-lt-sm border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", FOCUS_RING, "aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger", className),
|
|
9
10
|
...props
|
|
10
11
|
});
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textarea.js","names":[],"sources":["../../../../resources/js/form/components/base/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@lattice/lattice/lib/utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-lt-input placeholder:text-lt-muted-fg flex field-sizing-content min-h-16 w-full rounded-lt-sm border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n
|
|
1
|
+
{"version":3,"file":"textarea.js","names":[],"sources":["../../../../resources/js/form/components/base/textarea.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { FOCUS_RING } from \"@lattice-php/lattice/core/components/control\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction Textarea({ className, ...props }: React.ComponentProps<\"textarea\">) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(\n \"border-lt-input placeholder:text-lt-muted-fg flex field-sizing-content min-h-16 w-full rounded-lt-sm border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n FOCUS_RING,\n \"aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Textarea };\n"],"mappings":";;;;;AAKA,SAAS,SAAS,EAAE,WAAW,GAAG,SAA2C;CAC3E,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GACT,+RACA,YACA,oGACA,SACF;EACA,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -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-php/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"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
type FormContextValue = {
|
|
2
2
|
action: string;
|
|
3
3
|
clearErrors: (field: string) => void;
|
|
4
|
+
componentId?: string;
|
|
4
5
|
componentRef: string;
|
|
5
6
|
errors: Record<string, string | undefined>;
|
|
6
7
|
fieldLabels: Record<string, string>;
|
|
7
|
-
invalid: (field: string) => boolean;
|
|
8
8
|
precognitive: boolean;
|
|
9
9
|
processing: boolean;
|
|
10
|
-
touch: (field: string) => void;
|
|
11
10
|
validate: (field: string) => void;
|
|
12
|
-
validating: boolean;
|
|
13
|
-
valid: (field: string) => boolean;
|
|
14
11
|
};
|
|
15
12
|
export declare function FormProvider({ children, value, }: {
|
|
16
13
|
children: React.ReactNode;
|
|
@@ -4,16 +4,13 @@ import { jsx } from "react/jsx-runtime";
|
|
|
4
4
|
var FormContext = createContext({
|
|
5
5
|
action: "#",
|
|
6
6
|
clearErrors: () => {},
|
|
7
|
+
componentId: void 0,
|
|
7
8
|
componentRef: "",
|
|
8
9
|
errors: {},
|
|
9
10
|
fieldLabels: {},
|
|
10
|
-
invalid: () => false,
|
|
11
11
|
precognitive: false,
|
|
12
12
|
processing: false,
|
|
13
|
-
|
|
14
|
-
validate: () => {},
|
|
15
|
-
validating: false,
|
|
16
|
-
valid: () => false
|
|
13
|
+
validate: () => {}
|
|
17
14
|
});
|
|
18
15
|
function FormProvider({ children, value }) {
|
|
19
16
|
return /* @__PURE__ */ jsx(FormContext.Provider, {
|