@lattice-php/lattice 0.17.2 → 0.19.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 +1 -1
- package/dist/action/components/action-form.d.ts +2 -2
- package/dist/action/components/action-form.js +11 -11
- package/dist/action/components/action-form.js.map +1 -1
- package/dist/action/components/action-group.d.ts +1 -1
- package/dist/action/components/action-group.js +6 -4
- package/dist/action/components/action-group.js.map +1 -1
- package/dist/action/components/action-trigger-provider.d.ts +10 -0
- package/dist/action/components/action-trigger-provider.js +24 -0
- package/dist/action/components/action-trigger-provider.js.map +1 -0
- package/dist/action/components/action.d.ts +1 -1
- package/dist/action/components/action.js +4 -4
- package/dist/action/components/action.js.map +1 -1
- package/dist/action/{use-action.d.ts → hooks/use-action.d.ts} +1 -1
- package/dist/action/{use-action.js → hooks/use-action.js} +7 -7
- package/dist/action/hooks/use-action.js.map +1 -0
- package/dist/action/index.d.ts +10 -1
- package/dist/action/index.js +8 -13
- package/dist/action/{run-action.d.ts → lib/run-action.d.ts} +1 -1
- package/dist/action/{run-action.js → lib/run-action.js} +2 -2
- package/dist/action/lib/run-action.js.map +1 -0
- package/dist/action/plugin.d.ts +1 -0
- package/dist/action/plugin.js +15 -0
- package/dist/action/plugin.js.map +1 -0
- package/dist/appearance/index.d.ts +4 -1
- package/dist/appearance/index.js +11 -2
- package/dist/appearance/index.js.map +1 -1
- package/dist/chat/components/chat-box.d.ts +1 -1
- package/dist/chat/components/chat-box.js +2 -2
- package/dist/chat/components/chat-box.js.map +1 -1
- package/dist/chat/components/message-list.d.ts +1 -1
- package/dist/chat/components/message-list.js.map +1 -1
- package/dist/chat/components/message.d.ts +1 -1
- package/dist/chat/components/message.js.map +1 -1
- package/dist/chat/components/prompt-input.js +1 -1
- package/dist/chat/components/prompt-input.js.map +1 -1
- package/dist/chat/{use-chat.d.ts → hooks/use-chat.d.ts} +1 -1
- package/dist/chat/{use-chat.js → hooks/use-chat.js} +2 -2
- package/dist/chat/hooks/use-chat.js.map +1 -0
- package/dist/chat/index.d.ts +4 -1
- package/dist/chat/index.js +3 -17
- package/dist/chat/{transport.d.ts → lib/transport.d.ts} +2 -2
- package/dist/chat/{transport.js → lib/transport.js} +2 -2
- package/dist/chat/lib/transport.js.map +1 -0
- package/dist/chat/parts/text.d.ts +1 -1
- package/dist/chat/parts/tool-call.d.ts +1 -1
- package/dist/chat/plugin.d.ts +2 -0
- package/dist/chat/plugin.js +17 -0
- package/dist/chat/plugin.js.map +1 -0
- package/dist/chat/types.d.ts +2 -2
- package/dist/clipboard/index.d.ts +1 -2
- package/dist/clipboard/index.js +1 -10
- package/dist/clipboard/index.js.map +1 -1
- package/dist/core/api.d.ts +1 -1
- package/dist/core/api.js.map +1 -1
- package/dist/core/headers.js.map +1 -1
- package/dist/core/{column-sizing.d.ts → hooks/column-sizing.d.ts} +2 -2
- package/dist/core/{column-sizing.js → hooks/column-sizing.js} +1 -1
- package/dist/core/hooks/column-sizing.js.map +1 -0
- package/dist/core/{use-column-resizing.d.ts → hooks/use-column-resizing.d.ts} +2 -1
- package/dist/core/{use-column-resizing.js → hooks/use-column-resizing.js} +59 -31
- package/dist/core/hooks/use-column-resizing.js.map +1 -0
- package/dist/core/index.d.ts +13 -0
- package/dist/core/index.js +10 -0
- package/dist/core/materialize.d.ts +9 -0
- package/dist/core/materialize.js +39 -0
- package/dist/core/materialize.js.map +1 -0
- package/dist/core/nodes.d.ts +6 -1
- package/dist/core/nodes.js +8 -1
- package/dist/core/nodes.js.map +1 -1
- package/dist/core/registry-context.d.ts +3 -3
- package/dist/core/registry-context.js.map +1 -1
- package/dist/core/registry.d.ts +5 -3
- package/dist/core/registry.js.map +1 -1
- package/dist/core/renderer.d.ts +1 -1
- package/dist/core/renderer.js +4 -6
- package/dist/core/renderer.js.map +1 -1
- package/dist/core/test-id.d.ts +1 -1
- package/dist/core/types.d.ts +1 -1
- package/dist/create-app.d.ts +3 -3
- package/dist/effects/dispatch.d.ts +2 -2
- package/dist/effects/registry.d.ts +4 -3
- package/dist/effects/registry.js +7 -7
- package/dist/effects/registry.js.map +1 -1
- package/dist/effects/use-effect-dispatcher.d.ts +1 -1
- package/dist/{events/event-bridge.d.ts → event-bridge.d.ts} +2 -3
- package/dist/{events/event-bridge.js → event-bridge.js} +4 -11
- package/dist/event-bridge.js.map +1 -0
- package/dist/events/event-names.d.ts +0 -3
- package/dist/events/event-names.js +0 -3
- package/dist/events/event-names.js.map +1 -1
- package/dist/form/components/base/field.d.ts +1 -1
- package/dist/form/components/base/field.js +5 -5
- package/dist/form/components/base/field.js.map +1 -1
- package/dist/form/components/base/submit-button.d.ts +1 -1
- package/dist/form/components/base/submit-button.js +3 -3
- package/dist/form/components/base/submit-button.js.map +1 -1
- package/dist/form/components/fields/{block-add-menu.d.ts → add-row-menu.d.ts} +3 -3
- package/dist/form/components/fields/{block-add-menu.js → add-row-menu.js} +10 -10
- package/dist/form/components/fields/add-row-menu.js.map +1 -0
- package/dist/form/components/fields/builder.d.ts +1 -1
- package/dist/form/components/fields/builder.js +80 -75
- package/dist/form/components/fields/builder.js.map +1 -1
- package/dist/form/components/fields/checkbox.d.ts +1 -1
- package/dist/form/components/fields/checkbox.js +12 -9
- package/dist/form/components/fields/checkbox.js.map +1 -1
- package/dist/form/components/fields/choice.d.ts +1 -1
- package/dist/form/components/fields/choice.js +4 -4
- package/dist/form/components/fields/choice.js.map +1 -1
- package/dist/form/components/fields/date-input.d.ts +1 -1
- package/dist/form/components/fields/date-picker-field.js +2 -2
- package/dist/form/components/fields/date-picker-field.js.map +1 -1
- package/dist/form/components/fields/date-picker.d.ts +1 -1
- package/dist/form/components/fields/date-time-input.d.ts +1 -1
- package/dist/form/components/fields/file-upload.d.ts +1 -1
- package/dist/form/components/fields/file-upload.js +4 -4
- package/dist/form/components/fields/file-upload.js.map +1 -1
- package/dist/form/components/fields/hidden-input.d.ts +1 -1
- package/dist/form/components/fields/hidden-input.js +1 -1
- package/dist/form/components/fields/hidden-input.js.map +1 -1
- package/dist/form/components/fields/number-input.d.ts +1 -1
- package/dist/form/components/fields/number-input.js +2 -2
- package/dist/form/components/fields/number-input.js.map +1 -1
- package/dist/form/components/fields/otp-input.d.ts +1 -1
- package/dist/form/components/fields/otp-input.js +1 -1
- package/dist/form/components/fields/otp-input.js.map +1 -1
- package/dist/form/components/fields/password-input.d.ts +1 -1
- package/dist/form/components/fields/password-input.js +6 -6
- package/dist/form/components/fields/password-input.js.map +1 -1
- package/dist/form/components/fields/repeater-rows.d.ts +6 -1
- package/dist/form/components/fields/repeater-rows.js +9 -5
- package/dist/form/components/fields/repeater-rows.js.map +1 -1
- package/dist/form/components/fields/repeater.d.ts +1 -1
- package/dist/form/components/fields/repeater.js +57 -48
- package/dist/form/components/fields/repeater.js.map +1 -1
- package/dist/form/components/fields/rich-editor-field.d.ts +1 -1
- package/dist/form/components/fields/rich-editor-field.js +8 -6
- package/dist/form/components/fields/rich-editor-field.js.map +1 -1
- package/dist/form/components/fields/rich-editor.d.ts +1 -1
- package/dist/form/components/fields/row-action-menu.d.ts +2 -2
- package/dist/form/components/fields/row-actions.js +1 -1
- package/dist/form/components/fields/row-actions.js.map +1 -1
- package/dist/form/components/fields/row-item.d.ts +3 -3
- package/dist/form/components/fields/row-item.js +3 -2
- package/dist/form/components/fields/row-item.js.map +1 -1
- package/dist/form/components/fields/row-key-inputs.d.ts +7 -0
- package/dist/form/components/fields/row-key-inputs.js +16 -0
- package/dist/form/components/fields/row-key-inputs.js.map +1 -0
- package/dist/form/components/fields/row-templates.d.ts +9 -0
- package/dist/form/components/fields/row-templates.js +14 -0
- package/dist/form/components/fields/row-templates.js.map +1 -0
- package/dist/form/components/fields/select.d.ts +1 -1
- package/dist/form/components/fields/select.js +23 -13
- package/dist/form/components/fields/select.js.map +1 -1
- package/dist/form/components/fields/simple-field.d.ts +2 -2
- package/dist/form/components/fields/simple-field.js +2 -2
- package/dist/form/components/fields/simple-field.js.map +1 -1
- package/dist/form/components/fields/table-rows.d.ts +3 -3
- package/dist/form/components/fields/table-rows.js +13 -13
- package/dist/form/components/fields/table-rows.js.map +1 -1
- package/dist/form/components/fields/text-input.d.ts +1 -1
- package/dist/form/components/fields/text-input.js +2 -2
- package/dist/form/components/fields/text-input.js.map +1 -1
- package/dist/form/components/fields/textarea.d.ts +1 -1
- package/dist/form/components/fields/textarea.js +1 -1
- package/dist/form/components/fields/textarea.js.map +1 -1
- package/dist/form/components/fields/time-input.d.ts +1 -1
- package/dist/form/components/fields/time-input.js +3 -3
- package/dist/form/components/fields/time-input.js.map +1 -1
- package/dist/form/components/fields/time-picker.d.ts +1 -1
- package/dist/form/components/fields/toggle.d.ts +1 -1
- package/dist/form/components/fields/toggle.js +10 -9
- package/dist/form/components/fields/toggle.js.map +1 -1
- package/dist/form/components/fields/use-row-collection.d.ts +1 -1
- package/dist/form/components/fields/use-row-collection.js +2 -2
- package/dist/form/components/fields/use-row-collection.js.map +1 -1
- package/dist/form/components/form.d.ts +1 -1
- package/dist/form/components/form.js +6 -6
- package/dist/form/components/form.js.map +1 -1
- package/dist/form/components/index.d.ts +17 -17
- package/dist/form/embed.d.ts +17 -0
- package/dist/form/embed.js +10 -0
- package/dist/form/{components → hooks}/context.d.ts +3 -0
- package/dist/form/{components → hooks}/context.js +2 -1
- package/dist/form/hooks/context.js.map +1 -0
- package/dist/form/{components → hooks}/field-scope.js +3 -3
- package/dist/form/hooks/field-scope.js.map +1 -0
- package/dist/form/{components → hooks}/prefill-context.js +1 -1
- package/dist/form/hooks/prefill-context.js.map +1 -0
- package/dist/form/{components → hooks}/resolved-nodes.d.ts +1 -1
- package/dist/form/{components → hooks}/resolved-nodes.js +2 -2
- package/dist/form/hooks/resolved-nodes.js.map +1 -0
- package/dist/form/{components → hooks}/row-layout-context.js +1 -1
- package/dist/form/hooks/row-layout-context.js.map +1 -0
- package/dist/form/{components → hooks}/use-controlled-field.d.ts +2 -2
- package/dist/form/{components → hooks}/use-controlled-field.js +6 -5
- package/dist/form/hooks/use-controlled-field.js.map +1 -0
- package/dist/form/hooks/use-dependent-field.d.ts +3 -0
- package/dist/form/{components → hooks}/use-dependent-field.js +6 -6
- package/dist/form/hooks/use-dependent-field.js.map +1 -0
- package/dist/form/{components → hooks}/use-field-commit.d.ts +5 -0
- package/dist/form/{components → hooks}/use-field-commit.js +9 -2
- package/dist/form/hooks/use-field-commit.js.map +1 -0
- package/dist/form/{components → hooks}/use-form-resolver.d.ts +2 -2
- package/dist/form/{components → hooks}/use-form-resolver.js +5 -5
- package/dist/form/hooks/use-form-resolver.js.map +1 -0
- package/dist/form/{components → hooks}/use-seed-default.js +1 -1
- package/dist/form/hooks/use-seed-default.js.map +1 -0
- package/dist/form/{components → hooks}/values.d.ts +3 -1
- package/dist/form/hooks/values.js +136 -0
- package/dist/form/hooks/values.js.map +1 -0
- package/dist/form/index.d.ts +4 -1
- package/dist/form/index.js +3 -30
- package/dist/form/{components → lib}/conditions.d.ts +2 -1
- package/dist/form/{components → lib}/conditions.js +12 -2
- package/dist/form/lib/conditions.js.map +1 -0
- package/dist/form/lib/field-dom-name.d.ts +1 -0
- package/dist/form/lib/field-dom-name.js +10 -0
- package/dist/form/lib/field-dom-name.js.map +1 -0
- package/dist/form/{components → lib}/field-props.d.ts +2 -3
- package/dist/form/{components → lib}/field-props.js +1 -1
- package/dist/form/lib/field-props.js.map +1 -0
- package/dist/form/{components → lib}/form-path.js +1 -1
- package/dist/form/lib/form-path.js.map +1 -0
- package/dist/form/{components → lib}/form-transport.d.ts +1 -1
- package/dist/form/lib/form-transport.js +21 -0
- package/dist/form/lib/form-transport.js.map +1 -0
- package/dist/form/lib/override-keys.js +12 -0
- package/dist/form/lib/override-keys.js.map +1 -0
- package/dist/form/{components → lib}/prefill-targets.d.ts +2 -2
- package/dist/form/{components → lib}/prefill-targets.js +4 -5
- package/dist/form/lib/prefill-targets.js.map +1 -0
- package/dist/form/plugin.d.ts +1 -0
- package/dist/form/plugin.js +47 -0
- package/dist/form/plugin.js.map +1 -0
- package/dist/form/toolkit.d.ts +17 -0
- package/dist/form/toolkit.js +14 -0
- package/dist/form/{components/types.d.ts → types.d.ts} +3 -3
- package/dist/format/number.d.ts +1 -1
- package/dist/format/value.d.ts +1 -1
- package/dist/i18n/backend.d.ts +1 -1
- package/dist/i18n/config.d.ts +1 -1
- package/dist/i18n/index.d.ts +13 -13
- package/dist/i18n/locale-reload.js +1 -1
- package/dist/i18n/locale-reload.js.map +1 -1
- package/dist/i18n/locale.js.map +1 -1
- package/dist/i18n/page-props.d.ts +1 -1
- package/dist/i18n/timezone.js.map +1 -1
- package/dist/i18n/translatable.d.ts +1 -1
- package/dist/icons/icon-renderer.js.map +1 -1
- package/dist/icons/index.d.ts +4 -4
- package/dist/icons/sprite.js.map +1 -1
- package/dist/index.d.ts +37 -38
- package/dist/index.js +10 -9
- package/dist/inertia.js +1 -1
- package/dist/lattice.css +12 -10
- package/dist/layout/{breadcrumbs.d.ts → components/breadcrumbs.d.ts} +1 -1
- package/dist/layout/{breadcrumbs.js → components/breadcrumbs.js} +2 -2
- package/dist/layout/components/breadcrumbs.js.map +1 -0
- package/dist/layout/{callouts.d.ts → components/callouts.d.ts} +1 -1
- package/dist/layout/{callouts.js → components/callouts.js} +7 -7
- package/dist/layout/components/callouts.js.map +1 -0
- package/dist/layout/{dropdown.d.ts → components/dropdown.d.ts} +1 -1
- package/dist/layout/{dropdown.js → components/dropdown.js} +2 -2
- package/dist/layout/components/dropdown.js.map +1 -0
- package/dist/layout/{menu-item.d.ts → components/menu-item.d.ts} +1 -1
- package/dist/layout/{menu-item.js → components/menu-item.js} +9 -8
- package/dist/layout/components/menu-item.js.map +1 -0
- package/dist/layout/{menu.d.ts → components/menu.d.ts} +1 -1
- package/dist/layout/{menu.js → components/menu.js} +2 -2
- package/dist/layout/components/menu.js.map +1 -0
- package/dist/layout/{outlet.d.ts → components/outlet.d.ts} +1 -1
- package/dist/layout/{outlet.js → components/outlet.js} +2 -2
- package/dist/layout/components/outlet.js.map +1 -0
- package/dist/layout/{popover.js → components/popover.js} +4 -4
- package/dist/layout/components/popover.js.map +1 -0
- package/dist/layout/{schema-layout.js → components/schema-layout.js} +3 -3
- package/dist/layout/components/schema-layout.js.map +1 -0
- package/dist/layout/{sidebar.d.ts → components/sidebar.d.ts} +1 -1
- package/dist/layout/{sidebar.js → components/sidebar.js} +5 -5
- package/dist/layout/components/sidebar.js.map +1 -0
- package/dist/layout/{topbar.d.ts → components/topbar.d.ts} +1 -1
- package/dist/layout/{topbar.js → components/topbar.js} +3 -3
- package/dist/layout/components/topbar.js.map +1 -0
- package/dist/layout/{context.d.ts → hooks/context.d.ts} +1 -1
- package/dist/layout/{context.js → hooks/context.js} +2 -2
- package/dist/layout/hooks/context.js.map +1 -0
- package/dist/layout/index.d.ts +4 -4
- package/dist/layout/index.js +4 -4
- package/dist/layout/plugin.d.ts +2 -0
- package/dist/layout/{components.js → plugin.js} +10 -10
- package/dist/layout/plugin.js.map +1 -0
- package/dist/notifications/api.d.ts +1 -1
- package/dist/notifications/components/notification-item.d.ts +1 -1
- package/dist/notifications/components/notification-item.js.map +1 -1
- package/dist/notifications/components/notification-list.d.ts +2 -2
- package/dist/notifications/components/notification-list.js +1 -1
- package/dist/notifications/components/notification-list.js.map +1 -1
- package/dist/notifications/components/notifications-echo.d.ts +1 -1
- package/dist/notifications/components/notifications-echo.js.map +1 -1
- package/dist/notifications/components/notifications.d.ts +1 -1
- package/dist/notifications/components/notifications.js +3 -3
- package/dist/notifications/components/notifications.js.map +1 -1
- package/dist/notifications/index.d.ts +2 -1
- package/dist/notifications/index.js +1 -10
- package/dist/notifications/plugin.d.ts +2 -0
- package/dist/notifications/plugin.js +11 -0
- package/dist/notifications/plugin.js.map +1 -0
- package/dist/notifications/store.d.ts +1 -1
- package/dist/notifications/types.d.ts +1 -1
- package/dist/page.d.ts +1 -1
- package/dist/provider-base.d.ts +2 -2
- package/dist/provider-base.js +5 -4
- package/dist/provider-base.js.map +1 -1
- package/dist/provider.d.ts +3 -3
- package/dist/realtime/build-effects.d.ts +2 -2
- package/dist/realtime/listeners.d.ts +1 -1
- package/dist/realtime/subscriptions.d.ts +1 -1
- package/dist/registry.d.ts +1 -1
- package/dist/registry.js +9 -9
- package/dist/registry.js.map +1 -1
- package/dist/remote/components/data-list.d.ts +2 -2
- package/dist/remote/components/data-list.js +1 -34
- package/dist/remote/components/data-list.js.map +1 -1
- package/dist/remote/index.d.ts +1 -1
- package/dist/remote/index.js +1 -10
- package/dist/remote/plugin.d.ts +2 -0
- package/dist/remote/plugin.js +11 -0
- package/dist/remote/plugin.js.map +1 -0
- package/dist/table/components/bulk-bar.d.ts +1 -1
- package/dist/table/components/bulk-bar.js +4 -4
- package/dist/table/components/bulk-bar.js.map +1 -1
- package/dist/table/components/cells/badge-cell.d.ts +1 -1
- package/dist/table/components/cells/badge-cell.js +1 -1
- package/dist/table/components/cells/badge-cell.js.map +1 -1
- package/dist/table/components/cells/boolean-cell.d.ts +1 -1
- package/dist/table/components/cells/boolean-cell.js.map +1 -1
- package/dist/table/components/cells/icon-cell.d.ts +1 -1
- package/dist/table/components/cells/icon-cell.js.map +1 -1
- package/dist/table/components/cells/image-cell.d.ts +1 -1
- package/dist/table/components/cells/image-cell.js +1 -1
- package/dist/table/components/cells/image-cell.js.map +1 -1
- package/dist/table/components/cells/money-cell.d.ts +1 -1
- package/dist/table/components/cells/money-cell.js +1 -1
- package/dist/table/components/cells/money-cell.js.map +1 -1
- package/dist/table/components/cells/number-cell.d.ts +1 -1
- package/dist/table/components/cells/number-cell.js +1 -1
- package/dist/table/components/cells/number-cell.js.map +1 -1
- package/dist/table/components/cells/stack-cell.d.ts +1 -1
- package/dist/table/components/cells/stack-cell.js +3 -7
- package/dist/table/components/cells/stack-cell.js.map +1 -1
- package/dist/table/components/cells/text-cell.d.ts +1 -1
- package/dist/table/components/cells/text-cell.js +4 -4
- package/dist/table/components/cells/text-cell.js.map +1 -1
- package/dist/table/components/column-filter-control.d.ts +3 -3
- package/dist/table/components/column-filter-control.js +34 -19
- package/dist/table/components/column-filter-control.js.map +1 -1
- package/dist/table/components/column-header.d.ts +1 -1
- package/dist/table/components/column-header.js +7 -7
- package/dist/table/components/column-header.js.map +1 -1
- package/dist/table/components/column-visibility-menu.d.ts +1 -1
- package/dist/table/components/column-visibility-menu.js +3 -3
- package/dist/table/components/column-visibility-menu.js.map +1 -1
- package/dist/table/components/filter-bar.d.ts +9 -7
- package/dist/table/components/filter-bar.js +62 -52
- package/dist/table/components/filter-bar.js.map +1 -1
- package/dist/table/components/filter-controls.d.ts +5 -9
- package/dist/table/components/filter-controls.js +96 -224
- package/dist/table/components/filter-controls.js.map +1 -1
- package/dist/table/components/filter-value-input.d.ts +1 -1
- package/dist/table/components/filter-value-input.js +1 -1
- package/dist/table/components/filter-value-input.js.map +1 -1
- package/dist/table/components/pagination.d.ts +2 -2
- package/dist/table/components/pagination.js.map +1 -1
- package/dist/table/components/sort-bar.d.ts +1 -1
- package/dist/table/components/sort-bar.js +2 -2
- 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 +2 -2
- package/dist/table/components/table-cell.js.map +1 -1
- package/dist/table/components/table.d.ts +1 -1
- package/dist/table/components/table.js +23 -31
- package/dist/table/components/table.js.map +1 -1
- package/dist/{core → table/hooks}/use-column-visibility.d.ts +5 -3
- package/dist/{core → table/hooks}/use-column-visibility.js +4 -4
- package/dist/table/hooks/use-column-visibility.js.map +1 -0
- package/dist/table/{use-table-selection.js → hooks/use-table-selection.js} +1 -1
- package/dist/table/hooks/use-table-selection.js.map +1 -0
- package/dist/table/{use-table.d.ts → hooks/use-table.d.ts} +7 -7
- package/dist/table/{use-table.js → hooks/use-table.js} +12 -9
- package/dist/table/hooks/use-table.js.map +1 -0
- package/dist/table/index.d.ts +6 -1
- package/dist/table/index.js +5 -11
- package/dist/table/{align.d.ts → lib/align.d.ts} +1 -1
- package/dist/table/{align.js → lib/align.js} +1 -1
- package/dist/table/lib/align.js.map +1 -0
- package/dist/table/{bulk.d.ts → lib/bulk.d.ts} +3 -3
- package/dist/table/{bulk.js → lib/bulk.js} +1 -1
- package/dist/table/lib/bulk.js.map +1 -0
- package/dist/table/{filter-values.d.ts → lib/filter-values.d.ts} +10 -3
- package/dist/table/{filter-values.js → lib/filter-values.js} +14 -4
- package/dist/table/lib/filter-values.js.map +1 -0
- package/dist/table/{format.d.ts → lib/format.d.ts} +2 -2
- package/dist/table/{format.js → lib/format.js} +3 -3
- package/dist/table/lib/format.js.map +1 -0
- package/dist/table/{payload.d.ts → lib/payload.d.ts} +2 -3
- package/dist/table/{payload.js → lib/payload.js} +12 -9
- package/dist/table/lib/payload.js.map +1 -0
- package/dist/table/{query.d.ts → lib/query.d.ts} +3 -3
- package/dist/table/{query.js → lib/query.js} +27 -27
- package/dist/table/lib/query.js.map +1 -0
- package/dist/table/plugin.d.ts +2 -0
- package/dist/table/plugin.js +11 -0
- package/dist/table/plugin.js.map +1 -0
- package/dist/table/registry.d.ts +3 -1
- package/dist/table/registry.js.map +1 -1
- package/dist/table/types.d.ts +57 -7
- package/dist/toast/callout.d.ts +1 -1
- package/dist/toast/callout.js.map +1 -1
- package/dist/toast/index.d.ts +6 -5
- package/dist/toast/index.js +2 -1
- package/dist/toast/toast.d.ts +1 -1
- package/dist/toast/toaster.js.map +1 -1
- package/dist/toast/variant-styles.d.ts +1 -1
- package/dist/types/generated.d.ts +118 -64
- package/dist/types/index.d.ts +1 -1
- package/dist/{action/components → ui}/action-menu-context.js +1 -1
- package/dist/ui/action-menu-context.js.map +1 -0
- package/dist/{form/components/base → ui}/affix-group.d.ts +1 -1
- package/dist/{form/components/base → ui}/affix-group.js +3 -3
- package/dist/ui/affix-group.js.map +1 -0
- package/dist/{core/components → ui}/badge.d.ts +1 -1
- package/dist/{core/components → ui}/badge.js +2 -2
- package/dist/ui/badge.js.map +1 -0
- package/dist/{core/components → ui}/button.d.ts +2 -2
- package/dist/{core/components → ui}/button.js +5 -5
- package/dist/ui/button.js.map +1 -0
- package/dist/{core/components → ui}/card.d.ts +1 -1
- package/dist/{core/components → ui}/card.js +3 -3
- package/dist/ui/card.js.map +1 -0
- package/dist/{core/components → ui}/chart-view.d.ts +1 -1
- package/dist/{core/components → ui}/chart-view.js +5 -5
- package/dist/ui/chart-view.js.map +1 -0
- package/dist/{core/components → ui}/chart.d.ts +1 -1
- package/dist/{core/components → ui}/chart.js +1 -1
- package/dist/ui/chart.js.map +1 -0
- package/dist/{core/components → ui}/checkbox.js +3 -3
- package/dist/ui/checkbox.js.map +1 -0
- package/dist/{core/use-click-behavior.d.ts → ui/click-behavior.d.ts} +17 -19
- package/dist/ui/click-behavior.js +46 -0
- package/dist/ui/click-behavior.js.map +1 -0
- package/dist/{core/components → ui}/collapsible.d.ts +1 -1
- package/dist/{core/components → ui}/collapsible.js +6 -6
- package/dist/ui/collapsible.js.map +1 -0
- package/dist/{core/components → ui}/combobox.d.ts +1 -1
- package/dist/{core/components → ui}/combobox.js +4 -4
- package/dist/ui/combobox.js.map +1 -0
- package/dist/{core/components → ui}/confirm-dialog.d.ts +1 -1
- package/dist/{core/components → ui}/confirm-dialog.js +1 -1
- package/dist/ui/confirm-dialog.js.map +1 -0
- package/dist/{core/components → ui}/control.d.ts +1 -1
- package/dist/{core/components → ui}/control.js +1 -1
- package/dist/ui/control.js.map +1 -0
- package/dist/{clipboard → ui}/copyable-text.d.ts +1 -0
- package/dist/{clipboard → ui}/copyable-text.js +11 -3
- package/dist/ui/copyable-text.js.map +1 -0
- package/dist/{core/components → ui}/dialog.js +3 -3
- package/dist/ui/dialog.js.map +1 -0
- package/dist/{core/components → ui}/dropdown-menu.d.ts +1 -1
- package/dist/{core/components → ui}/dropdown-menu.js +3 -3
- package/dist/ui/dropdown-menu.js.map +1 -0
- package/dist/{core/components → ui}/floating-panel.d.ts +1 -1
- package/dist/{core/components → ui}/floating-panel.js +4 -4
- package/dist/ui/floating-panel.js.map +1 -0
- package/dist/{core/components → ui}/fragment.d.ts +1 -1
- package/dist/{core/components → ui}/fragment.js +5 -5
- package/dist/ui/fragment.js.map +1 -0
- package/dist/{core/components → ui}/grid.d.ts +1 -1
- package/dist/{core/components → ui}/grid.js +3 -3
- package/dist/ui/grid.js.map +1 -0
- package/dist/{core/components → ui}/heading.d.ts +1 -1
- package/dist/{core/components → ui}/heading.js +2 -2
- package/dist/ui/heading.js.map +1 -0
- package/dist/{core/components → ui}/icon.d.ts +1 -1
- package/dist/{core/components → ui}/icon.js +3 -3
- package/dist/ui/icon.js.map +1 -0
- package/dist/ui/index.d.ts +27 -0
- package/dist/ui/index.js +26 -0
- package/dist/{core/components → ui}/info-tooltip.js +3 -3
- package/dist/ui/info-tooltip.js.map +1 -0
- package/dist/{form/components/base → ui}/input-error.js +2 -2
- package/dist/ui/input-error.js.map +1 -0
- package/dist/{form/components/base → ui}/input-otp.js +2 -2
- package/dist/ui/input-otp.js.map +1 -0
- package/dist/{form/components/base → ui}/input.js +3 -3
- package/dist/ui/input.js.map +1 -0
- package/dist/{form/components/base → ui}/label.js +2 -2
- package/dist/ui/label.js.map +1 -0
- package/dist/{core/components → ui}/link.d.ts +1 -1
- package/dist/{core/components → ui}/link.js +8 -7
- package/dist/ui/link.js.map +1 -0
- package/dist/{core/components → ui}/modal.d.ts +1 -1
- package/dist/{core/components → ui}/modal.js +2 -2
- package/dist/ui/modal.js.map +1 -0
- package/dist/{form/components/base → ui}/password-input.js +3 -3
- package/dist/ui/password-input.js.map +1 -0
- package/dist/ui/plugin.d.ts +1 -0
- package/dist/{core/components/index.js → ui/plugin.js} +6 -6
- package/dist/ui/plugin.js.map +1 -0
- package/dist/{core/components → ui}/popover.js +2 -2
- package/dist/ui/popover.js.map +1 -0
- package/dist/{core/components → ui}/raw-block.d.ts +1 -1
- package/dist/{core/components → ui}/raw-block.js +1 -1
- package/dist/ui/raw-block.js.map +1 -0
- package/dist/{core/components → ui}/section.d.ts +1 -1
- package/dist/{core/components → ui}/section.js +6 -6
- package/dist/ui/section.js.map +1 -0
- package/dist/{core/components → ui}/segmented-control.d.ts +1 -1
- package/dist/{core/components → ui}/segmented-control.js +1 -1
- package/dist/ui/segmented-control.js.map +1 -0
- package/dist/{core/components → ui}/segmented-pills.d.ts +1 -1
- package/dist/{core/components → ui}/segmented-pills.js +2 -2
- package/dist/ui/segmented-pills.js.map +1 -0
- package/dist/{core/components → ui}/skeleton.js +2 -2
- package/dist/ui/skeleton.js.map +1 -0
- package/dist/{core/components → ui}/spinner.js +4 -4
- package/dist/ui/spinner.js.map +1 -0
- package/dist/{core/components → ui}/stack.d.ts +1 -1
- package/dist/{core/components → ui}/stack.js +3 -3
- package/dist/ui/stack.js.map +1 -0
- package/dist/{core/components → ui}/tabs.d.ts +1 -1
- package/dist/{core/components → ui}/tabs.js +3 -3
- package/dist/ui/tabs.js.map +1 -0
- package/dist/{core/components → ui}/text.d.ts +1 -1
- package/dist/{core/components → ui}/text.js +4 -4
- package/dist/ui/text.js.map +1 -0
- package/dist/{form/components/base → ui}/textarea.js +3 -3
- package/dist/ui/textarea.js.map +1 -0
- package/dist/{core/components → ui}/tooltip.d.ts +1 -1
- package/dist/{core/components → ui}/tooltip.js +3 -3
- package/dist/ui/tooltip.js.map +1 -0
- package/dist/vite.js +2 -2
- package/dist/vite.js.map +1 -1
- package/dist-standalone/chunks/chart-view-CK5fKIkR.js +36 -0
- package/dist-standalone/chunks/date-picker-field-BlCPFhZd.js +1 -0
- package/dist-standalone/chunks/dist-PaT1gYi_.js +2 -0
- package/dist-standalone/chunks/jsx-runtime-CJ_btYLc.js +1 -0
- package/dist-standalone/chunks/notifications-echo-DsfNc4Ge.js +1 -0
- package/dist-standalone/chunks/react-B8IZ02wI.js +1 -0
- package/dist-standalone/chunks/rich-editor-field-DH5dS5c1.js +154 -0
- package/dist-standalone/chunks/subscriptions-B3UuDBmx.js +1 -0
- package/dist-standalone/chunks/test-id-Dh3L6Gfh.js +1 -0
- package/dist-standalone/chunks/use-effect-dispatcher-k98Nzf9M.js +97 -0
- package/dist-standalone/chunks/with-selector-BwDoCrJJ.js +1 -0
- package/dist-standalone/lattice.css +3 -0
- package/dist-standalone/lattice.js +66 -0
- package/dist-standalone/manifest.json +18 -0
- package/dist-standalone/sprite.svg +1 -0
- package/package.json +33 -95
- package/resources/icons/align-center.svg +1 -1
- package/resources/icons/align-justify.svg +1 -1
- package/resources/icons/align-left.svg +1 -1
- package/resources/icons/align-right.svg +1 -1
- package/resources/icons/arrow-down.svg +1 -1
- package/resources/icons/arrow-up.svg +1 -1
- package/resources/icons/bell.svg +1 -1
- package/resources/icons/bold.svg +1 -1
- package/resources/icons/calendar.svg +1 -1
- package/resources/icons/check.svg +1 -1
- package/resources/icons/chevron-down.svg +1 -1
- package/resources/icons/chevron-left.svg +1 -1
- package/resources/icons/chevron-right.svg +1 -1
- package/resources/icons/chevrons-up-down.svg +1 -1
- package/resources/icons/circle-alert.svg +1 -1
- package/resources/icons/circle-check.svg +1 -1
- package/resources/icons/circle-help.svg +1 -1
- package/resources/icons/circle-x.svg +1 -1
- package/resources/icons/clock.svg +1 -1
- package/resources/icons/code.svg +1 -1
- package/resources/icons/columns-3.svg +1 -1
- package/resources/icons/copy.svg +1 -1
- package/resources/icons/external-link.svg +1 -1
- package/resources/icons/eye-off.svg +1 -1
- package/resources/icons/eye.svg +1 -1
- package/resources/icons/filter.svg +1 -1
- package/resources/icons/heading-1.svg +1 -1
- package/resources/icons/heading-2.svg +1 -1
- package/resources/icons/heading-3.svg +1 -1
- package/resources/icons/highlighter.svg +1 -1
- package/resources/icons/info.svg +1 -1
- package/resources/icons/italic.svg +1 -1
- package/resources/icons/layout-dashboard.svg +1 -1
- package/resources/icons/link.svg +1 -1
- package/resources/icons/list-ordered.svg +1 -1
- package/resources/icons/list.svg +1 -1
- package/resources/icons/loader-2.svg +1 -1
- package/resources/icons/minus.svg +1 -1
- package/resources/icons/more-horizontal.svg +1 -1
- package/resources/icons/panel-left.svg +1 -1
- package/resources/icons/pencil-line.svg +1 -1
- package/resources/icons/pencil.svg +1 -1
- package/resources/icons/plus.svg +1 -1
- package/resources/icons/quote.svg +1 -1
- package/resources/icons/rotate-ccw.svg +1 -1
- package/resources/icons/rows-3.svg +1 -1
- package/resources/icons/search.svg +1 -1
- package/resources/icons/send.svg +1 -1
- package/resources/icons/settings.svg +1 -1
- package/resources/icons/smile.svg +1 -1
- package/resources/icons/strikethrough.svg +1 -1
- package/resources/icons/table.svg +1 -1
- package/resources/icons/trash-2.svg +1 -1
- package/resources/icons/underline.svg +1 -1
- package/resources/icons/x.svg +1 -1
- package/dist/action/components/action-menu-context.js.map +0 -1
- package/dist/action/index.js.map +0 -1
- package/dist/action/run-action.js.map +0 -1
- package/dist/action/use-action.js.map +0 -1
- package/dist/chat/index.js.map +0 -1
- package/dist/chat/transport.js.map +0 -1
- package/dist/chat/use-chat.js.map +0 -1
- package/dist/clipboard/copyable-text.js.map +0 -1
- package/dist/core/column-sizing.js.map +0 -1
- package/dist/core/components/badge.js.map +0 -1
- package/dist/core/components/button.js.map +0 -1
- package/dist/core/components/card.js.map +0 -1
- package/dist/core/components/chart-view.js.map +0 -1
- package/dist/core/components/chart.js.map +0 -1
- package/dist/core/components/checkbox.js.map +0 -1
- package/dist/core/components/collapsible.js.map +0 -1
- package/dist/core/components/combobox.js.map +0 -1
- package/dist/core/components/confirm-dialog.js.map +0 -1
- package/dist/core/components/control.js.map +0 -1
- package/dist/core/components/dialog.js.map +0 -1
- package/dist/core/components/dropdown-menu.js.map +0 -1
- package/dist/core/components/floating-panel.js.map +0 -1
- package/dist/core/components/fragment.js.map +0 -1
- package/dist/core/components/grid.js.map +0 -1
- package/dist/core/components/heading.js.map +0 -1
- package/dist/core/components/icon.js.map +0 -1
- package/dist/core/components/index.d.ts +0 -1
- package/dist/core/components/index.js.map +0 -1
- package/dist/core/components/info-tooltip.js.map +0 -1
- package/dist/core/components/link.js.map +0 -1
- package/dist/core/components/modal.js.map +0 -1
- package/dist/core/components/popover.js.map +0 -1
- package/dist/core/components/raw-block.js.map +0 -1
- package/dist/core/components/section.js.map +0 -1
- package/dist/core/components/segmented-control.js.map +0 -1
- package/dist/core/components/segmented-pills.js.map +0 -1
- package/dist/core/components/skeleton.js.map +0 -1
- package/dist/core/components/spinner.js.map +0 -1
- package/dist/core/components/stack.js.map +0 -1
- package/dist/core/components/tabs.js.map +0 -1
- package/dist/core/components/text.js.map +0 -1
- package/dist/core/components/tooltip.js.map +0 -1
- package/dist/core/use-click-behavior.js +0 -46
- package/dist/core/use-click-behavior.js.map +0 -1
- package/dist/core/use-column-resizing.js.map +0 -1
- package/dist/core/use-column-visibility.js.map +0 -1
- package/dist/events/event-bridge.js.map +0 -1
- package/dist/form/components/base/affix-group.js.map +0 -1
- package/dist/form/components/base/input-error.js.map +0 -1
- package/dist/form/components/base/input-otp.js.map +0 -1
- package/dist/form/components/base/input.js.map +0 -1
- package/dist/form/components/base/label.js.map +0 -1
- package/dist/form/components/base/password-input.js.map +0 -1
- package/dist/form/components/base/textarea.js.map +0 -1
- package/dist/form/components/conditions.js.map +0 -1
- package/dist/form/components/context.js.map +0 -1
- package/dist/form/components/field-props.js.map +0 -1
- package/dist/form/components/field-scope.js.map +0 -1
- package/dist/form/components/fields/block-add-menu.js.map +0 -1
- package/dist/form/components/form-path.js.map +0 -1
- package/dist/form/components/form-transport.js +0 -30
- package/dist/form/components/form-transport.js.map +0 -1
- package/dist/form/components/override-keys.js +0 -12
- package/dist/form/components/override-keys.js.map +0 -1
- package/dist/form/components/prefill-context.js.map +0 -1
- package/dist/form/components/prefill-targets.js.map +0 -1
- package/dist/form/components/resolved-nodes.js.map +0 -1
- package/dist/form/components/row-layout-context.js.map +0 -1
- package/dist/form/components/use-controlled-field.js.map +0 -1
- package/dist/form/components/use-dependent-field.d.ts +0 -3
- package/dist/form/components/use-dependent-field.js.map +0 -1
- package/dist/form/components/use-field-commit.js.map +0 -1
- package/dist/form/components/use-form-resolver.js.map +0 -1
- package/dist/form/components/use-seed-default.js.map +0 -1
- package/dist/form/components/values.js +0 -52
- package/dist/form/components/values.js.map +0 -1
- package/dist/form/index.js.map +0 -1
- package/dist/layout/breadcrumbs.js.map +0 -1
- package/dist/layout/callouts.js.map +0 -1
- package/dist/layout/components.d.ts +0 -1
- package/dist/layout/components.js.map +0 -1
- package/dist/layout/context.js.map +0 -1
- package/dist/layout/dropdown.js.map +0 -1
- package/dist/layout/menu-item.js.map +0 -1
- package/dist/layout/menu.js.map +0 -1
- package/dist/layout/outlet.js.map +0 -1
- package/dist/layout/popover.js.map +0 -1
- package/dist/layout/schema-layout.js.map +0 -1
- package/dist/layout/sidebar.js.map +0 -1
- package/dist/layout/topbar.js.map +0 -1
- package/dist/notifications/index.js.map +0 -1
- package/dist/remote/index.js.map +0 -1
- package/dist/svg-sprite-client/index.d.ts +0 -1
- package/dist/svg-sprite-client/index.js +0 -0
- package/dist/table/align.js.map +0 -1
- package/dist/table/bulk.js.map +0 -1
- package/dist/table/components/filter-stack-bar.d.ts +0 -7
- package/dist/table/components/filter-stack-bar.js +0 -38
- package/dist/table/components/filter-stack-bar.js.map +0 -1
- package/dist/table/filter-values.js.map +0 -1
- package/dist/table/format.js.map +0 -1
- package/dist/table/index.js.map +0 -1
- package/dist/table/payload.js.map +0 -1
- package/dist/table/query.js.map +0 -1
- package/dist/table/use-table-selection.js.map +0 -1
- package/dist/table/use-table.js.map +0 -1
- package/dist/types/generated.js +0 -0
- package/dist/types/index.js +0 -0
- /package/dist/form/{components → hooks}/field-scope.d.ts +0 -0
- /package/dist/form/{components → hooks}/prefill-context.d.ts +0 -0
- /package/dist/form/{components → hooks}/row-layout-context.d.ts +0 -0
- /package/dist/form/{components → hooks}/use-seed-default.d.ts +0 -0
- /package/dist/form/{components → lib}/form-path.d.ts +0 -0
- /package/dist/form/{components → lib}/override-keys.d.ts +0 -0
- /package/dist/form/{components/types.js → types.js} +0 -0
- /package/dist/layout/{popover.d.ts → components/popover.d.ts} +0 -0
- /package/dist/layout/{schema-layout.d.ts → components/schema-layout.d.ts} +0 -0
- /package/dist/table/{use-table-selection.d.ts → hooks/use-table-selection.d.ts} +0 -0
- /package/dist/{action/components → ui}/action-menu-context.d.ts +0 -0
- /package/dist/{core/components → ui}/checkbox.d.ts +0 -0
- /package/dist/{core/components → ui}/dialog.d.ts +0 -0
- /package/dist/{core/components → ui}/info-tooltip.d.ts +0 -0
- /package/dist/{form/components/base → ui}/input-error.d.ts +0 -0
- /package/dist/{form/components/base → ui}/input-otp.d.ts +0 -0
- /package/dist/{form/components/base → ui}/input.d.ts +0 -0
- /package/dist/{form/components/base → ui}/label.d.ts +0 -0
- /package/dist/{form/components/base → ui}/password-input.d.ts +0 -0
- /package/dist/{core/components → ui}/popover.d.ts +0 -0
- /package/dist/{core/components → ui}/skeleton.d.ts +0 -0
- /package/dist/{core/components → ui}/spinner.d.ts +0 -0
- /package/dist/{form/components/base → ui}/textarea.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"values.js","names":[],"sources":["../../../resources/js/form/hooks/values.tsx"],"sourcesContent":["import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useSyncExternalStore,\n} from \"react\";\nimport { getPath, setPath } from \"@lattice-php/lattice/form/lib/form-path\";\n\nexport type SetFormValue = (\n name: string,\n value: unknown | ((previous: unknown) => unknown),\n) => void;\n\ntype FormValuesStore = {\n getPathSnapshot: (path: string) => unknown;\n getPathsSnapshot: (paths: string[]) => Record<string, unknown>;\n getSnapshot: () => Record<string, unknown>;\n replaceInitial: (initial: Record<string, unknown>) => void;\n setValue: SetFormValue;\n subscribe: (listener: () => void) => () => void;\n subscribePath: (path: string, listener: () => void) => () => void;\n subscribePaths: (paths: string[], listener: () => void) => () => void;\n};\n\nconst emptyValues: Record<string, unknown> = {};\nconst emptySelectedValues: Record<string, unknown> = {};\n\nconst FormValuesStoreContext = createContext<FormValuesStore | null>(null);\nconst SetFormValueContext = createContext<SetFormValue>(() => {});\n\nfunction valuesEqual(a: unknown, b: unknown): boolean {\n if (Object.is(a, b)) {\n return true;\n }\n\n if (!a || !b || typeof a !== \"object\" || typeof b !== \"object\") {\n return false;\n }\n\n if (Array.isArray(a) || Array.isArray(b)) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((value, index) => valuesEqual(value, b[index]))\n );\n }\n\n const aEntries = Object.entries(a);\n const bObject = b as Record<string, unknown>;\n\n return (\n aEntries.length === Object.keys(bObject).length &&\n aEntries.every(([key, value]) => valuesEqual(value, bObject[key]))\n );\n}\n\nfunction normalizePath(path: string): string {\n return path\n .split(\".\")\n .filter((part) => part !== \"\")\n .join(\".\");\n}\n\nfunction pathsOverlap(left: string, right: string): boolean {\n return (\n left === \"\" ||\n right === \"\" ||\n left === right ||\n left.startsWith(`${right}.`) ||\n right.startsWith(`${left}.`)\n );\n}\n\nfunction createFormValuesStore(initial: Record<string, unknown>): FormValuesStore {\n let initialValues = initial;\n let values = initial;\n const listeners = new Set<() => void>();\n const pathListeners = new Map<string, Set<() => void>>();\n const selectedCache = new Map<string, { snapshot: Record<string, unknown>; values: unknown[] }>();\n\n const notify = (path: string): void => {\n for (const listener of listeners) {\n listener();\n }\n\n const normalizedPath = normalizePath(path);\n\n for (const [subscribedPath, subscribedListeners] of pathListeners) {\n if (!pathsOverlap(subscribedPath, normalizedPath)) {\n continue;\n }\n\n for (const listener of subscribedListeners) {\n listener();\n }\n }\n };\n\n const updateValues = (next: Record<string, unknown>, path: string): void => {\n if (Object.is(values, next)) {\n return;\n }\n\n values = next;\n selectedCache.clear();\n notify(path);\n };\n\n const subscribePath = (path: string, listener: () => void): (() => void) => {\n const normalizedPath = normalizePath(path);\n const listenersForPath = pathListeners.get(normalizedPath) ?? new Set<() => void>();\n\n listenersForPath.add(listener);\n pathListeners.set(normalizedPath, listenersForPath);\n\n return () => {\n listenersForPath.delete(listener);\n\n if (listenersForPath.size === 0) {\n pathListeners.delete(normalizedPath);\n }\n };\n };\n\n return {\n getPathSnapshot: (path: string): unknown => getPath(values, path),\n getPathsSnapshot: (paths: string[]): Record<string, unknown> => {\n if (paths.length === 0) {\n return emptySelectedValues;\n }\n\n const normalizedPaths = paths.map(normalizePath);\n const key = JSON.stringify(paths);\n const selectedValues = normalizedPaths.map((path) => getPath(values, path));\n const cached = selectedCache.get(key);\n\n if (\n cached &&\n cached.values.length === selectedValues.length &&\n selectedValues.every((value, index) => Object.is(value, cached.values[index]))\n ) {\n return cached.snapshot;\n }\n\n const snapshot = Object.fromEntries(\n paths.map((path, index) => [path, selectedValues[index]]),\n );\n\n selectedCache.set(key, { snapshot, values: selectedValues });\n\n return snapshot;\n },\n getSnapshot: () => values,\n replaceInitial: (nextInitial: Record<string, unknown>): void => {\n if (valuesEqual(initialValues, nextInitial)) {\n return;\n }\n\n initialValues = nextInitial;\n updateValues(nextInitial, \"\");\n },\n setValue: (name: string, value: unknown | ((previous: unknown) => unknown)): void => {\n const previous = getPath(values, name);\n const next = typeof value === \"function\" ? value(previous) : value;\n\n if (Object.is(previous, next)) {\n return;\n }\n\n updateValues(setPath(values, name, next), name);\n },\n subscribe: (listener: () => void): (() => void) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n },\n subscribePath,\n subscribePaths: (paths: string[], listener: () => void): (() => void) => {\n const unsubscribers = Array.from(new Set(paths.map(normalizePath))).map((path) =>\n subscribePath(path, listener),\n );\n\n return () => {\n for (const unsubscribe of unsubscribers) {\n unsubscribe();\n }\n };\n },\n };\n}\n\nconst fallbackFormValuesStore = createFormValuesStore(emptyValues);\n\nexport function FormValuesProvider({\n initial,\n children,\n}: {\n initial: Record<string, unknown>;\n children: React.ReactNode;\n}) {\n const storeRef = useRef<FormValuesStore>(null);\n\n if (storeRef.current === null) {\n storeRef.current = createFormValuesStore(initial);\n }\n\n useEffect(() => {\n storeRef.current?.replaceInitial(initial);\n }, [initial]);\n\n return (\n <FormValuesStoreContext.Provider value={storeRef.current}>\n <SetFormValueContext.Provider value={storeRef.current.setValue}>\n {children}\n </SetFormValueContext.Provider>\n </FormValuesStoreContext.Provider>\n );\n}\n\nfunction useFormValuesStore(): FormValuesStore {\n return useContext(FormValuesStoreContext) ?? fallbackFormValuesStore;\n}\n\nexport function useFormValues(): Record<string, unknown> {\n const store = useFormValuesStore();\n\n return useSyncExternalStore(store.subscribe, store.getSnapshot, store.getSnapshot);\n}\n\nexport function useFormValue(name: string): unknown {\n const store = useFormValuesStore();\n const subscribe = useCallback(\n (listener: () => void) => store.subscribePath(name, listener),\n [name, store],\n );\n const getSnapshot = useCallback(() => store.getPathSnapshot(name), [name, store]);\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport function useFormValuesFor(paths: string[]): Record<string, unknown> {\n const store = useFormValuesStore();\n const pathsKey = JSON.stringify(paths);\n const selectedPaths = useMemo(() => JSON.parse(pathsKey) as string[], [pathsKey]);\n const subscribe = useCallback(\n (listener: () => void) => store.subscribePaths(selectedPaths, listener),\n [selectedPaths, store],\n );\n const getSnapshot = useCallback(\n () => store.getPathsSnapshot(selectedPaths),\n [selectedPaths, store],\n );\n\n return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n}\n\nexport function useSetFormValue(): SetFormValue {\n return useContext(SetFormValueContext);\n}\n"],"mappings":"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"}
|
package/dist/form/index.d.ts
CHANGED
package/dist/form/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FormValuesProvider } from "./hooks/values.js";
|
|
2
2
|
import { BuilderComponent } from "./components/fields/builder.js";
|
|
3
3
|
import { CheckboxComponent } from "./components/fields/checkbox.js";
|
|
4
4
|
import { ChoiceComponent } from "./components/fields/choice.js";
|
|
@@ -16,32 +16,5 @@ import { TextareaComponent } from "./components/fields/textarea.js";
|
|
|
16
16
|
import { TextInputComponent } from "./components/fields/text-input.js";
|
|
17
17
|
import { TimeInputComponent } from "./components/fields/time-input.js";
|
|
18
18
|
import { ToggleComponent } from "./components/fields/toggle.js";
|
|
19
|
-
import {
|
|
20
|
-
|
|
21
|
-
var formComponents = createPlugin({
|
|
22
|
-
components: {
|
|
23
|
-
form: eagerComponent(FormComponent),
|
|
24
|
-
"field.builder": eagerComponent(BuilderComponent),
|
|
25
|
-
"field.checkbox": eagerComponent(CheckboxComponent),
|
|
26
|
-
"field.choice": eagerComponent(ChoiceComponent),
|
|
27
|
-
"field.date-input": eagerComponent(DateInputComponent),
|
|
28
|
-
"field.date-time-input": eagerComponent(DateTimeInputComponent),
|
|
29
|
-
"field.file-upload": eagerComponent(FileUploadComponent),
|
|
30
|
-
"field.hidden-input": eagerComponent(HiddenInputComponent),
|
|
31
|
-
"field.number-input": eagerComponent(NumberInputComponent),
|
|
32
|
-
"field.otp": eagerComponent(OtpInputComponent),
|
|
33
|
-
"field.password-input": eagerComponent(PasswordInputComponent),
|
|
34
|
-
"field.repeater": eagerComponent(RepeaterComponent),
|
|
35
|
-
"field.rich-editor": eagerComponent(RichEditorComponent),
|
|
36
|
-
"field.select": eagerComponent(SelectComponent),
|
|
37
|
-
"field.textarea": eagerComponent(TextareaComponent),
|
|
38
|
-
"field.text-input": eagerComponent(TextInputComponent),
|
|
39
|
-
"field.time-input": eagerComponent(TimeInputComponent),
|
|
40
|
-
"field.toggle": eagerComponent(ToggleComponent)
|
|
41
|
-
},
|
|
42
|
-
name: "lattice/form"
|
|
43
|
-
});
|
|
44
|
-
//#endregion
|
|
45
|
-
export { formComponents };
|
|
46
|
-
|
|
47
|
-
//# sourceMappingURL=index.js.map
|
|
19
|
+
import { formComponents } from "./plugin.js";
|
|
20
|
+
export { BuilderComponent, CheckboxComponent, ChoiceComponent, DateInputComponent, DateTimeInputComponent, FileUploadComponent, FormComponent, FormValuesProvider, HiddenInputComponent, NumberInputComponent, OtpInputComponent, PasswordInputComponent, RepeaterComponent, SelectComponent, TextInputComponent, TextareaComponent, TimeInputComponent, ToggleComponent, formComponents };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Condition } from '../../types/generated';
|
|
1
|
+
import { Condition } from '../../types/generated.js';
|
|
2
2
|
export type { Condition };
|
|
3
3
|
export type FieldConditions = {
|
|
4
4
|
visible?: Condition[];
|
|
@@ -18,5 +18,6 @@ export type FieldState = {
|
|
|
18
18
|
readOnly: boolean;
|
|
19
19
|
disabled: boolean;
|
|
20
20
|
};
|
|
21
|
+
export declare function conditionFields(conditions: FieldConditions | undefined | null): string[];
|
|
21
22
|
export declare function toBoolean(value: unknown): boolean;
|
|
22
23
|
export declare function evaluateConditions(conditions: FieldConditions | undefined, values: Record<string, unknown>, flags: FieldFlags): FieldState;
|
|
@@ -1,4 +1,14 @@
|
|
|
1
|
-
//#region resources/js/form/
|
|
1
|
+
//#region resources/js/form/lib/conditions.ts
|
|
2
|
+
function conditionFields(conditions) {
|
|
3
|
+
const fields = /* @__PURE__ */ new Set();
|
|
4
|
+
for (const group of [
|
|
5
|
+
conditions?.visible,
|
|
6
|
+
conditions?.required,
|
|
7
|
+
conditions?.readOnly,
|
|
8
|
+
conditions?.disabled
|
|
9
|
+
]) for (const condition of group ?? []) fields.add(condition.field);
|
|
10
|
+
return Array.from(fields);
|
|
11
|
+
}
|
|
2
12
|
var BOOLEAN_TRUE_VALUES = new Set([
|
|
3
13
|
"1",
|
|
4
14
|
"true",
|
|
@@ -65,6 +75,6 @@ function evaluateConditions(conditions, values, flags) {
|
|
|
65
75
|
};
|
|
66
76
|
}
|
|
67
77
|
//#endregion
|
|
68
|
-
export { evaluateConditions, toBoolean };
|
|
78
|
+
export { conditionFields, evaluateConditions, toBoolean };
|
|
69
79
|
|
|
70
80
|
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","names":[],"sources":["../../../resources/js/form/lib/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\ntype 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\nexport function conditionFields(conditions: FieldConditions | undefined | null): string[] {\n const fields = new Set<string>();\n\n for (const group of [\n conditions?.visible,\n conditions?.required,\n conditions?.readOnly,\n conditions?.disabled,\n ]) {\n for (const condition of group ?? []) {\n fields.add(condition.field);\n }\n }\n\n return Array.from(fields);\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).trim() === \"\";\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":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fieldDomName(name: string, prefix?: string): string;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region resources/js/form/lib/field-dom-name.ts
|
|
2
|
+
function fieldDomName(name, prefix) {
|
|
3
|
+
if (!prefix) return name;
|
|
4
|
+
const suffix = name.replace(/[^A-Za-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "");
|
|
5
|
+
return suffix ? `${prefix}-${suffix}` : prefix;
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { fieldDomName };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=field-dom-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-dom-name.js","names":[],"sources":["../../../resources/js/form/lib/field-dom-name.ts"],"sourcesContent":["export function fieldDomName(name: string, prefix?: string): string {\n if (!prefix) {\n return name;\n }\n\n const suffix = name.replace(/[^A-Za-z0-9_-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n\n return suffix ? `${prefix}-${suffix}` : prefix;\n}\n"],"mappings":";AAAA,SAAgB,aAAa,MAAc,QAAyB;CAClE,IAAI,CAAC,QACH,OAAO;CAGT,MAAM,SAAS,KAAK,QAAQ,oBAAoB,GAAG,EAAE,QAAQ,YAAY,EAAE;CAE3E,OAAO,SAAS,GAAG,OAAO,GAAG,WAAW;AAC1C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Node } from '../../core/types';
|
|
2
|
-
import { FieldConditions } from './conditions';
|
|
1
|
+
import { Node } from '../../core/types.js';
|
|
2
|
+
import { FieldConditions } from './conditions.js';
|
|
3
3
|
/**
|
|
4
4
|
* The props every form-field node shares (the PHP Field base). Nodes flow through
|
|
5
5
|
* the form framework loosely typed via the generic schema, so this is the typed
|
|
@@ -12,7 +12,6 @@ type FieldProps = {
|
|
|
12
12
|
dependsOnKeys?: string[] | null;
|
|
13
13
|
disabled?: boolean | null;
|
|
14
14
|
helperText?: string | null;
|
|
15
|
-
hidden?: boolean | null;
|
|
16
15
|
label?: string | null;
|
|
17
16
|
name?: string;
|
|
18
17
|
editablePrefill?: boolean | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-props.js","names":[],"sources":["../../../resources/js/form/lib/field-props.ts"],"sourcesContent":["import type { Node } from \"@lattice-php/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 */\ntype FieldProps = {\n conditions?: FieldConditions | null;\n dependsOnAny?: boolean | null;\n dependsOnKeys?: string[] | null;\n disabled?: boolean | null;\n helperText?: string | null;\n label?: string | null;\n name?: string;\n editablePrefill?: boolean | null;\n prefillRefreshOn?: string[] | null;\n prefillResetOn?: string[] | null;\n readOnly?: boolean | null;\n required?: boolean | null;\n tooltip?: string | null;\n value?: unknown;\n};\n\nexport function fieldProps(node: Node): FieldProps {\n return node.props as FieldProps;\n}\n\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":";AA0BA,SAAgB,WAAW,MAAwB;CACjD,OAAO,KAAK;AACd;AAEA,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-path.js","names":[],"sources":["../../../resources/js/form/lib/form-path.ts"],"sourcesContent":["function pathParts(path: string): string[] {\n return path.split(\".\").filter((part) => part !== \"\");\n}\n\nexport function appendPath(\n base: string | null | undefined,\n ...parts: Array<string | number>\n): string {\n const suffix = parts.map(String).filter((part) => part !== \"\");\n\n return [base ?? \"\", ...suffix].filter((part) => part !== \"\").join(\".\");\n}\n\nexport function toHtmlName(path: string): string {\n const [head, ...tail] = pathParts(path);\n\n return tail.reduce((name, part) => `${name}[${part}]`, head ?? \"\");\n}\n\nexport function getPath(values: Record<string, unknown>, path: string): unknown {\n let current: unknown = values;\n\n for (const part of pathParts(path)) {\n if (current == null) {\n return undefined;\n }\n\n current = (current as Record<string, unknown>)[part];\n }\n\n return current;\n}\n\nfunction emptyContainer(nextPart: string | undefined): Record<string, unknown> | unknown[] {\n return nextPart !== undefined && /^\\d+$/.test(nextPart) ? [] : {};\n}\n\nexport function setPath(\n values: Record<string, unknown>,\n path: string,\n value: unknown,\n): Record<string, unknown> {\n const parts = pathParts(path);\n\n if (parts.length === 0) {\n return values;\n }\n\n const write = (current: unknown, index: number): unknown => {\n const part = parts[index];\n const last = index === parts.length - 1;\n const source =\n current && typeof current === \"object\" ? current : emptyContainer(parts[index + 1]);\n const next = Array.isArray(source) ? [...source] : { ...(source as Record<string, unknown>) };\n\n (next as Record<string, unknown>)[part] = last\n ? value\n : write((source as Record<string, unknown>)[part], index + 1);\n\n return next;\n };\n\n return write(values, 0) as Record<string, unknown>;\n}\n"],"mappings":";AAAA,SAAS,UAAU,MAAwB;CACzC,OAAO,KAAK,MAAM,GAAG,EAAE,QAAQ,SAAS,SAAS,EAAE;AACrD;AAEA,SAAgB,WACd,MACA,GAAG,OACK;CACR,MAAM,SAAS,MAAM,IAAI,MAAM,EAAE,QAAQ,SAAS,SAAS,EAAE;CAE7D,OAAO,CAAC,QAAQ,IAAI,GAAG,MAAM,EAAE,QAAQ,SAAS,SAAS,EAAE,EAAE,KAAK,GAAG;AACvE;AAEA,SAAgB,WAAW,MAAsB;CAC/C,MAAM,CAAC,MAAM,GAAG,QAAQ,UAAU,IAAI;CAEtC,OAAO,KAAK,QAAQ,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,IAAI,QAAQ,EAAE;AACnE;AAEA,SAAgB,QAAQ,QAAiC,MAAuB;CAC9E,IAAI,UAAmB;CAEvB,KAAK,MAAM,QAAQ,UAAU,IAAI,GAAG;EAClC,IAAI,WAAW,MACb;EAGF,UAAW,QAAoC;CACjD;CAEA,OAAO;AACT;AAEA,SAAS,eAAe,UAAmE;CACzF,OAAO,aAAa,KAAA,KAAa,QAAQ,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC;AAClE;AAEA,SAAgB,QACd,QACA,MACA,OACyB;CACzB,MAAM,QAAQ,UAAU,IAAI;CAE5B,IAAI,MAAM,WAAW,GACnB,OAAO;CAGT,MAAM,SAAS,SAAkB,UAA2B;EAC1D,MAAM,OAAO,MAAM;EACnB,MAAM,OAAO,UAAU,MAAM,SAAS;EACtC,MAAM,SACJ,WAAW,OAAO,YAAY,WAAW,UAAU,eAAe,MAAM,QAAQ,EAAE;EACpF,MAAM,OAAO,MAAM,QAAQ,MAAM,IAAI,CAAC,GAAG,MAAM,IAAI,EAAE,GAAI,OAAmC;EAE5F,KAAkC,QAAQ,OACtC,QACA,MAAO,OAAmC,OAAO,QAAQ,CAAC;EAE9D,OAAO;CACT;CAEA,OAAO,MAAM,QAAQ,CAAC;AACxB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared client transport for the lattice form endpoint: every form sub-action
|
|
3
3
|
* (validation resolve, option search) POSTs to the same signed URL, so the
|
|
4
|
-
* request shape
|
|
4
|
+
* request shape lives here once.
|
|
5
5
|
*/
|
|
6
6
|
export declare const FORM_DEBOUNCE_MS = 250;
|
|
7
7
|
export declare function postFormAction<T>(action: string, componentRef: string, body: Record<string, unknown>, signal: AbortSignal): Promise<T | null>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { apiFetch } from "../../core/api.js";
|
|
2
|
+
//#region resources/js/form/lib/form-transport.ts
|
|
3
|
+
/**
|
|
4
|
+
* Shared client transport for the lattice form endpoint: every form sub-action
|
|
5
|
+
* (validation resolve, option search) POSTs to the same signed URL, so the
|
|
6
|
+
* request shape lives here once.
|
|
7
|
+
*/
|
|
8
|
+
var FORM_DEBOUNCE_MS = 250;
|
|
9
|
+
function postFormAction(action, componentRef, body, signal) {
|
|
10
|
+
return apiFetch(action, {
|
|
11
|
+
method: "POST",
|
|
12
|
+
ref: componentRef,
|
|
13
|
+
signal,
|
|
14
|
+
body: JSON.stringify(body),
|
|
15
|
+
throwOnError: false
|
|
16
|
+
}).then((response) => response.ok ? response.json() : null);
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { FORM_DEBOUNCE_MS, postFormAction };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=form-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form-transport.js","names":[],"sources":["../../../resources/js/form/lib/form-transport.ts"],"sourcesContent":["/**\n * Shared client transport for the lattice form endpoint: every form sub-action\n * (validation resolve, option search) POSTs to the same signed URL, so the\n * request shape lives here once.\n */\n\nimport { apiFetch } from \"@lattice-php/lattice/core/api\";\n\nexport const FORM_DEBOUNCE_MS = 250;\n\nexport function postFormAction<T>(\n action: string,\n componentRef: string,\n body: Record<string, unknown>,\n signal: AbortSignal,\n): Promise<T | null> {\n return apiFetch(action, {\n method: \"POST\",\n ref: componentRef,\n signal,\n body: JSON.stringify(body),\n throwOnError: false,\n }).then((response) => (response.ok ? (response.json() as Promise<T>) : null));\n}\n"],"mappings":";;;;;;;AAQA,IAAa,mBAAmB;AAEhC,SAAgB,eACd,QACA,cACA,MACA,QACmB;CACnB,OAAO,SAAS,QAAQ;EACtB,QAAQ;EACR,KAAK;EACL;EACA,MAAM,KAAK,UAAU,IAAI;EACzB,cAAc;CAChB,CAAC,EAAE,MAAM,aAAc,SAAS,KAAM,SAAS,KAAK,IAAmB,IAAK;AAC9E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ROW_ID_KEY } from "../components/fields/repeater-rows.js";
|
|
2
|
+
//#region resources/js/form/lib/override-keys.ts
|
|
3
|
+
function rowIdFrom(row) {
|
|
4
|
+
return typeof row["rowId"] === "string" ? row[ROW_ID_KEY] : null;
|
|
5
|
+
}
|
|
6
|
+
function buildOverrideKey(base, rowId, index, name) {
|
|
7
|
+
return `${base}.${rowId ?? String(index)}.${name}`;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { buildOverrideKey, rowIdFrom };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=override-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"override-keys.js","names":[],"sources":["../../../resources/js/form/lib/override-keys.ts"],"sourcesContent":["import { ROW_ID_KEY } from \"@lattice-php/lattice/form/components/fields/repeater-rows\";\n\nexport function rowIdFrom(row: Record<string, unknown>): string | null {\n return typeof row[ROW_ID_KEY] === \"string\" ? row[ROW_ID_KEY] : null;\n}\n\nexport function buildOverrideKey(\n base: string,\n rowId: string | null,\n index: number,\n name: string,\n): string {\n return `${base}.${rowId ?? String(index)}.${name}`;\n}\n"],"mappings":";;AAEA,SAAgB,UAAU,KAA6C;CACrE,OAAO,OAAO,IAAA,aAAoB,WAAW,IAAI,cAAc;AACjE;AAEA,SAAgB,iBACd,MACA,OACA,OACA,MACQ;CACR,OAAO,GAAG,KAAK,GAAG,SAAS,OAAO,KAAK,EAAE,GAAG;AAC9C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Node } from '../../core/types';
|
|
1
|
+
import { Node } from '../../core/types.js';
|
|
2
2
|
type PrefillTarget = {
|
|
3
3
|
path: string;
|
|
4
4
|
overrideKey: string;
|
|
@@ -9,7 +9,7 @@ type PrefillSnapshot = {
|
|
|
9
9
|
targets: PrefillTarget[];
|
|
10
10
|
values: Record<string, unknown>;
|
|
11
11
|
};
|
|
12
|
-
export { getPath } from './form-path';
|
|
12
|
+
export { getPath } from './form-path.js';
|
|
13
13
|
export declare function collectPrefillTargets(nodes: Node[] | undefined, values: Record<string, unknown>): PrefillTarget[];
|
|
14
14
|
export declare function pathsToClear(previous: PrefillSnapshot, next: PrefillSnapshot): string[];
|
|
15
15
|
export declare function seededOverrides(targets: PrefillTarget[], values: Record<string, unknown>): string[];
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { fieldProps } from "./field-props.js";
|
|
2
2
|
import { appendPath, getPath } from "./form-path.js";
|
|
3
3
|
import { buildOverrideKey, rowIdFrom } from "./override-keys.js";
|
|
4
|
-
|
|
4
|
+
import { rowSchemaFor } from "../components/fields/row-templates.js";
|
|
5
|
+
//#region resources/js/form/lib/prefill-targets.ts
|
|
5
6
|
var ROW_COLLECTION_TYPES = new Set(["field.builder", "field.repeater"]);
|
|
6
7
|
function mapDep(dep, rowPath) {
|
|
7
8
|
if (dep.startsWith("@")) return dep.slice(1);
|
|
@@ -28,10 +29,8 @@ function collectPrefillTargets(nodes, values) {
|
|
|
28
29
|
const childCollectionPath = appendPath(rowPath, name);
|
|
29
30
|
const childIdentityCollectionPath = appendPath(identityRowPath, name);
|
|
30
31
|
const storedRows = getPath(values, childCollectionPath);
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
rows.forEach((childRow, childIndex) => {
|
|
34
|
-
walk(blocks ? blocks.find((block) => block.type === childRow.type)?.schema ?? [] : node.schema ?? [], appendPath(childCollectionPath, childIndex), appendPath(childIdentityCollectionPath, rowIdFrom(childRow) ?? childIndex), childIdentityCollectionPath, childIndex, childRow);
|
|
32
|
+
(Array.isArray(storedRows) ? storedRows : []).forEach((childRow, childIndex) => {
|
|
33
|
+
walk(rowSchemaFor(node, childRow), appendPath(childCollectionPath, childIndex), appendPath(childIdentityCollectionPath, rowIdFrom(childRow) ?? childIndex), childIdentityCollectionPath, childIndex, childRow);
|
|
35
34
|
});
|
|
36
35
|
}
|
|
37
36
|
continue;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prefill-targets.js","names":[],"sources":["../../../resources/js/form/lib/prefill-targets.ts"],"sourcesContent":["import type { Node } from \"@lattice-php/lattice/core/types\";\nimport { fieldProps } from \"./field-props\";\nimport { rowSchemaFor } from \"@lattice-php/lattice/form/components/fields/row-templates\";\nimport { appendPath, getPath } from \"./form-path\";\nimport { buildOverrideKey, rowIdFrom } from \"./override-keys\";\n\ntype PrefillTarget = {\n path: string;\n overrideKey: string;\n resetOn: string[];\n refreshOn: string[];\n};\n\ntype PrefillSnapshot = {\n targets: PrefillTarget[];\n values: Record<string, unknown>;\n};\n\nconst ROW_COLLECTION_TYPES = new Set([\"field.builder\", \"field.repeater\"]);\n\nexport { getPath } from \"./form-path\";\n\nfunction mapDep(dep: string, rowPath: string | null): string {\n if (dep.startsWith(\"@\")) {\n return dep.slice(1);\n }\n\n return rowPath === null ? dep : appendPath(rowPath, dep);\n}\n\nfunction targetFor(\n node: Node,\n rowPath: string | null,\n identityCollectionPath: string | null,\n index = 0,\n row: Record<string, unknown> = {},\n): PrefillTarget | null {\n const props = fieldProps(node);\n\n if (!props.editablePrefill || !props.name) {\n return null;\n }\n\n const rowId = rowIdFrom(row);\n\n return {\n path: rowPath === null ? props.name : appendPath(rowPath, props.name),\n overrideKey:\n identityCollectionPath === null\n ? props.name\n : buildOverrideKey(identityCollectionPath, rowId, index, props.name),\n resetOn: (props.prefillResetOn ?? []).map((dep) => mapDep(dep, rowPath)),\n refreshOn: (props.prefillRefreshOn ?? []).map((dep) => mapDep(dep, rowPath)),\n };\n}\n\nexport function collectPrefillTargets(\n nodes: Node[] | undefined,\n values: Record<string, unknown>,\n): PrefillTarget[] {\n const targets: PrefillTarget[] = [];\n\n const walk = (\n list: Node[] | undefined,\n rowPath: string | null = null,\n identityRowPath: string | null = null,\n identityCollectionPath: string | null = null,\n index = 0,\n row: Record<string, unknown> = {},\n ): void => {\n for (const node of list ?? []) {\n if (ROW_COLLECTION_TYPES.has(node.type)) {\n const name = fieldProps(node).name;\n if (name) {\n const childCollectionPath = appendPath(rowPath, name);\n const childIdentityCollectionPath = appendPath(identityRowPath, name);\n const storedRows = getPath(values, childCollectionPath);\n const rows = Array.isArray(storedRows)\n ? (storedRows as Array<Record<string, unknown>>)\n : [];\n rows.forEach((childRow, childIndex) => {\n walk(\n rowSchemaFor(node, childRow),\n appendPath(childCollectionPath, childIndex),\n appendPath(childIdentityCollectionPath, rowIdFrom(childRow) ?? childIndex),\n childIdentityCollectionPath,\n childIndex,\n childRow,\n );\n });\n }\n\n continue;\n }\n\n const target = targetFor(node, rowPath, identityCollectionPath, index, row);\n if (target) {\n targets.push(target);\n }\n\n walk(node.schema, rowPath, identityRowPath, identityCollectionPath, index, row);\n }\n };\n\n walk(nodes);\n\n return targets;\n}\n\nexport function pathsToClear(previous: PrefillSnapshot, next: PrefillSnapshot): string[] {\n const previousByKey = new Map(\n previous.targets.map((target) => [target.overrideKey, target] as const),\n );\n\n return next.targets\n .filter((target) => {\n const previousTarget = previousByKey.get(target.overrideKey);\n\n return target.resetOn.some((dep, index) => {\n const previousDep = previousTarget?.resetOn[index] ?? dep;\n\n return !Object.is(getPath(previous.values, previousDep), getPath(next.values, dep));\n });\n })\n .map((target) => target.overrideKey);\n}\n\nexport function seededOverrides(\n targets: PrefillTarget[],\n values: Record<string, unknown>,\n): string[] {\n return targets\n .filter((target) => {\n const value = getPath(values, target.path);\n\n return value !== undefined && value !== null && value !== \"\";\n })\n .map((target) => target.overrideKey);\n}\n\nexport function pruneOverrides(overrides: Set<string>, targets: PrefillTarget[]): Set<string> {\n const liveKeys = new Set(targets.map((target) => target.overrideKey));\n\n return new Set([...overrides].filter((key) => liveKeys.has(key)));\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const formComponents: import('../core/registry.js').Plugin;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createPlugin, eagerComponent } from "../core/registry.js";
|
|
2
|
+
import { BuilderComponent } from "./components/fields/builder.js";
|
|
3
|
+
import { CheckboxComponent } from "./components/fields/checkbox.js";
|
|
4
|
+
import { ChoiceComponent } from "./components/fields/choice.js";
|
|
5
|
+
import { DateInputComponent } from "./components/fields/date-input.js";
|
|
6
|
+
import { DateTimeInputComponent } from "./components/fields/date-time-input.js";
|
|
7
|
+
import { FileUploadComponent } from "./components/fields/file-upload.js";
|
|
8
|
+
import { FormComponent } from "./components/form.js";
|
|
9
|
+
import { HiddenInputComponent } from "./components/fields/hidden-input.js";
|
|
10
|
+
import { NumberInputComponent } from "./components/fields/number-input.js";
|
|
11
|
+
import { OtpInputComponent } from "./components/fields/otp-input.js";
|
|
12
|
+
import { PasswordInputComponent } from "./components/fields/password-input.js";
|
|
13
|
+
import { RepeaterComponent } from "./components/fields/repeater.js";
|
|
14
|
+
import { SelectComponent } from "./components/fields/select.js";
|
|
15
|
+
import { TextareaComponent } from "./components/fields/textarea.js";
|
|
16
|
+
import { TextInputComponent } from "./components/fields/text-input.js";
|
|
17
|
+
import { TimeInputComponent } from "./components/fields/time-input.js";
|
|
18
|
+
import { ToggleComponent } from "./components/fields/toggle.js";
|
|
19
|
+
import { RichEditorComponent } from "./components/fields/rich-editor.js";
|
|
20
|
+
//#region resources/js/form/plugin.ts
|
|
21
|
+
var formComponents = createPlugin({
|
|
22
|
+
components: {
|
|
23
|
+
form: eagerComponent(FormComponent),
|
|
24
|
+
"field.builder": eagerComponent(BuilderComponent),
|
|
25
|
+
"field.checkbox": eagerComponent(CheckboxComponent),
|
|
26
|
+
"field.choice": eagerComponent(ChoiceComponent),
|
|
27
|
+
"field.date-input": eagerComponent(DateInputComponent),
|
|
28
|
+
"field.date-time-input": eagerComponent(DateTimeInputComponent),
|
|
29
|
+
"field.file-upload": eagerComponent(FileUploadComponent),
|
|
30
|
+
"field.hidden-input": eagerComponent(HiddenInputComponent),
|
|
31
|
+
"field.number-input": eagerComponent(NumberInputComponent),
|
|
32
|
+
"field.otp": eagerComponent(OtpInputComponent),
|
|
33
|
+
"field.password-input": eagerComponent(PasswordInputComponent),
|
|
34
|
+
"field.repeater": eagerComponent(RepeaterComponent),
|
|
35
|
+
"field.rich-editor": eagerComponent(RichEditorComponent),
|
|
36
|
+
"field.select": eagerComponent(SelectComponent),
|
|
37
|
+
"field.textarea": eagerComponent(TextareaComponent),
|
|
38
|
+
"field.text-input": eagerComponent(TextInputComponent),
|
|
39
|
+
"field.time-input": eagerComponent(TimeInputComponent),
|
|
40
|
+
"field.toggle": eagerComponent(ToggleComponent)
|
|
41
|
+
},
|
|
42
|
+
name: "lattice/form"
|
|
43
|
+
});
|
|
44
|
+
//#endregion
|
|
45
|
+
export { formComponents };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","names":[],"sources":["../../resources/js/form/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n eagerComponent,\n type ComponentRegistryFor,\n} from \"@lattice-php/lattice/core/registry\";\nimport type { FormNodeType } from \"@lattice-php/lattice/types/generated\";\nimport {\n BuilderComponent,\n CheckboxComponent,\n ChoiceComponent,\n DateInputComponent,\n DateTimeInputComponent,\n FileUploadComponent,\n FormComponent,\n HiddenInputComponent,\n NumberInputComponent,\n OtpInputComponent,\n PasswordInputComponent,\n RepeaterComponent,\n SelectComponent,\n TextareaComponent,\n TextInputComponent,\n TimeInputComponent,\n ToggleComponent,\n} from \"./components\";\nimport { RichEditorComponent } from \"./components/fields/rich-editor\";\n\nexport const formComponents = createPlugin({\n components: {\n form: eagerComponent(FormComponent),\n \"field.builder\": eagerComponent(BuilderComponent),\n \"field.checkbox\": eagerComponent(CheckboxComponent),\n \"field.choice\": eagerComponent(ChoiceComponent),\n \"field.date-input\": eagerComponent(DateInputComponent),\n \"field.date-time-input\": eagerComponent(DateTimeInputComponent),\n \"field.file-upload\": eagerComponent(FileUploadComponent),\n \"field.hidden-input\": eagerComponent(HiddenInputComponent),\n \"field.number-input\": eagerComponent(NumberInputComponent),\n \"field.otp\": eagerComponent(OtpInputComponent),\n \"field.password-input\": eagerComponent(PasswordInputComponent),\n \"field.repeater\": eagerComponent(RepeaterComponent),\n \"field.rich-editor\": eagerComponent(RichEditorComponent),\n \"field.select\": eagerComponent(SelectComponent),\n \"field.textarea\": eagerComponent(TextareaComponent),\n \"field.text-input\": eagerComponent(TextInputComponent),\n \"field.time-input\": eagerComponent(TimeInputComponent),\n \"field.toggle\": eagerComponent(ToggleComponent),\n } satisfies ComponentRegistryFor<FormNodeType>,\n name: \"lattice/form\",\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,IAAa,iBAAiB,aAAa;CACzC,YAAY;EACV,MAAM,eAAe,aAAa;EAClC,iBAAiB,eAAe,gBAAgB;EAChD,kBAAkB,eAAe,iBAAiB;EAClD,gBAAgB,eAAe,eAAe;EAC9C,oBAAoB,eAAe,kBAAkB;EACrD,yBAAyB,eAAe,sBAAsB;EAC9D,qBAAqB,eAAe,mBAAmB;EACvD,sBAAsB,eAAe,oBAAoB;EACzD,sBAAsB,eAAe,oBAAoB;EACzD,aAAa,eAAe,iBAAiB;EAC7C,wBAAwB,eAAe,sBAAsB;EAC7D,kBAAkB,eAAe,iBAAiB;EAClD,qBAAqB,eAAe,mBAAmB;EACvD,gBAAgB,eAAe,eAAe;EAC9C,kBAAkB,eAAe,iBAAiB;EAClD,oBAAoB,eAAe,kBAAkB;EACrD,oBAAoB,eAAe,kBAAkB;EACrD,gBAAgB,eAAe,eAAe;CAChD;CACA,MAAM;AACR,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry point for building custom form fields outside the package. Form
|
|
3
|
+
* modules not re-exported here are internal and may change without notice.
|
|
4
|
+
*/
|
|
5
|
+
export { FormFieldFrame } from './components/base/field.js';
|
|
6
|
+
export { useFormContext } from './hooks/context.js';
|
|
7
|
+
export { FieldScopeProvider, useFieldScope } from './hooks/field-scope.js';
|
|
8
|
+
export { fieldProps, walkFields } from './lib/field-props.js';
|
|
9
|
+
export { appendPath, getPath, setPath, toHtmlName } from './lib/form-path.js';
|
|
10
|
+
export { AddRowMenu, type AddRowOption } from './components/fields/add-row-menu.js';
|
|
11
|
+
export { ROW_ID_KEY, addRow, duplicateRow, ensureRowIds, moveRow, removeRow, seedRows, withRowId, type RepeaterRow, } from './components/fields/repeater-rows.js';
|
|
12
|
+
export { RowKeyInputs } from './components/fields/row-key-inputs.js';
|
|
13
|
+
export { rowSchemaFor, rowTemplatesOf, type RowTemplate } from './components/fields/row-templates.js';
|
|
14
|
+
export { useRowCollection } from './components/fields/use-row-collection.js';
|
|
15
|
+
export { useDependentField } from './hooks/use-dependent-field.js';
|
|
16
|
+
export { useFieldCommit } from './hooks/use-field-commit.js';
|
|
17
|
+
export { useFormValue, useFormValues, useSetFormValue } from './hooks/values.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useFormContext } from "./hooks/context.js";
|
|
2
|
+
import { fieldProps, walkFields } from "./lib/field-props.js";
|
|
3
|
+
import { appendPath, getPath, setPath, toHtmlName } from "./lib/form-path.js";
|
|
4
|
+
import { ROW_ID_KEY, addRow, duplicateRow, ensureRowIds, moveRow, removeRow, seedRows, withRowId } from "./components/fields/repeater-rows.js";
|
|
5
|
+
import { FieldScopeProvider, useFieldScope } from "./hooks/field-scope.js";
|
|
6
|
+
import { useFormValue, useFormValues, useSetFormValue } from "./hooks/values.js";
|
|
7
|
+
import { useFieldCommit } from "./hooks/use-field-commit.js";
|
|
8
|
+
import { rowSchemaFor, rowTemplatesOf } from "./components/fields/row-templates.js";
|
|
9
|
+
import { FormFieldFrame } from "./components/base/field.js";
|
|
10
|
+
import { useDependentField } from "./hooks/use-dependent-field.js";
|
|
11
|
+
import { AddRowMenu } from "./components/fields/add-row-menu.js";
|
|
12
|
+
import { RowKeyInputs } from "./components/fields/row-key-inputs.js";
|
|
13
|
+
import { useRowCollection } from "./components/fields/use-row-collection.js";
|
|
14
|
+
export { AddRowMenu, FieldScopeProvider, FormFieldFrame, ROW_ID_KEY, RowKeyInputs, addRow, appendPath, duplicateRow, ensureRowIds, fieldProps, getPath, moveRow, removeRow, rowSchemaFor, rowTemplatesOf, seedRows, setPath, toHtmlName, useDependentField, useFieldCommit, useFieldScope, useFormContext, useFormValue, useFormValues, useRowCollection, useSetFormValue, walkFields, withRowId };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Method } from '@inertiajs/core';
|
|
2
|
-
import { NodeUnionOf } from '
|
|
3
|
-
import { FormFieldNodeType, FormNodeType } from '
|
|
4
|
-
export type { Checkbox, Choice, DateInput, DateTimeInput, Form, FormNodeType, HiddenInput, NumberInput, PasswordInput, RichEditor, Select, Textarea, TextInput, TimeInput, } from '
|
|
2
|
+
import { NodeUnionOf } from '../core/types.js';
|
|
3
|
+
import { FormFieldNodeType, FormNodeType } from '../types/generated.js';
|
|
4
|
+
export type { Checkbox, Choice, DateInput, DateTimeInput, Form, FormNodeType, HiddenInput, NumberInput, PasswordInput, RichEditor, Select, Textarea, TextInput, TimeInput, } from '../types/generated.js';
|
|
5
5
|
export type FormFieldNode = NodeUnionOf<FormFieldNodeType>;
|
|
6
6
|
export type FormNode = NodeUnionOf<FormNodeType>;
|
|
7
7
|
export type FormMethod = Method;
|
package/dist/format/number.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { NumberFormat } from '../types';
|
|
1
|
+
import { NumberFormat } from '../types/index.js';
|
|
2
2
|
export declare function formatNumber(value: unknown, format: NumberFormat, locale: string): string;
|
package/dist/format/value.d.ts
CHANGED
package/dist/i18n/backend.d.ts
CHANGED
package/dist/i18n/config.d.ts
CHANGED
package/dist/i18n/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export { i18n, useT, translate } from './instance';
|
|
2
|
-
export { configureI18n, enableBackend } from './backend';
|
|
3
|
-
export { currentLocale, localeHeader, setLocale, useLocale } from './locale';
|
|
4
|
-
export { LocaleReload } from './locale-reload';
|
|
5
|
-
export { LocaleSwitcher, useLocaleOptions } from './locale-switcher';
|
|
6
|
-
export { configureI18nFromPageProps, i18nConfigFromPageProps } from './page-props';
|
|
7
|
-
export type { BackendOptions, ConfigureI18nOptions, I18nConfig } from './backend';
|
|
8
|
-
export type { LocaleOption, LocaleSwitcherProps, UseLocaleOptionsOptions, UseLocaleOptionsReturn, } from './locale-switcher';
|
|
9
|
-
export type { UseLocaleReturn } from './locale';
|
|
10
|
-
export { currentTimezone, setTimezone, useTimezone } from './timezone';
|
|
11
|
-
export type { UseTimezoneReturn } from './timezone';
|
|
12
|
-
export { DateTime } from './date-time';
|
|
13
|
-
export type { DateTimeProps } from './date-time';
|
|
1
|
+
export { i18n, useT, translate } from './instance.js';
|
|
2
|
+
export { configureI18n, enableBackend } from './backend.js';
|
|
3
|
+
export { currentLocale, localeHeader, setLocale, useLocale } from './locale.js';
|
|
4
|
+
export { LocaleReload } from './locale-reload.js';
|
|
5
|
+
export { LocaleSwitcher, useLocaleOptions } from './locale-switcher.js';
|
|
6
|
+
export { configureI18nFromPageProps, i18nConfigFromPageProps } from './page-props.js';
|
|
7
|
+
export type { BackendOptions, ConfigureI18nOptions, I18nConfig } from './backend.js';
|
|
8
|
+
export type { LocaleOption, LocaleSwitcherProps, UseLocaleOptionsOptions, UseLocaleOptionsReturn, } from './locale-switcher.js';
|
|
9
|
+
export type { UseLocaleReturn } from './locale.js';
|
|
10
|
+
export { currentTimezone, setTimezone, useTimezone } from './timezone.js';
|
|
11
|
+
export type { UseTimezoneReturn } from './timezone.js';
|
|
12
|
+
export { DateTime } from './date-time.js';
|
|
13
|
+
export type { DateTimeProps } from './date-time.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale-reload.js","names":[],"sources":["../../resources/js/i18n/locale-reload.tsx"],"sourcesContent":["import type { VisitOptions } from \"@inertiajs/core\";\nimport { router } from \"@inertiajs/react\";\nimport { useCallback } from \"react\";\nimport { EventBridge } from \"
|
|
1
|
+
{"version":3,"file":"locale-reload.js","names":[],"sources":["../../resources/js/i18n/locale-reload.tsx"],"sourcesContent":["import type { VisitOptions } from \"@inertiajs/core\";\nimport { router } from \"@inertiajs/react\";\nimport { useCallback } from \"react\";\nimport { EventBridge } from \"@lattice-php/lattice/event-bridge\";\n\ntype LocaleReloadProps = Pick<VisitOptions, \"preserveScroll\" | \"preserveState\">;\n\n// preserveState by default: the visit only re-fetches the re-localized props,\n// so keeping the page mounted avoids remounting the whole tree (and losing\n// table sort/filter, form input, focus) on every locale switch.\nexport function LocaleReload({ preserveScroll = true, preserveState = true }: LocaleReloadProps) {\n const reload = useCallback(() => {\n router.visit(window.location.href, { preserveScroll, preserveState });\n }, [preserveScroll, preserveState]);\n\n return <EventBridge onLocaleChange={reload} />;\n}\n"],"mappings":";;;;;AAUA,SAAgB,aAAa,EAAE,iBAAiB,MAAM,gBAAgB,QAA2B;CAK/F,OAAO,oBAAC,aAAD,EAAa,gBAJL,kBAAkB;EAC/B,OAAO,MAAM,OAAO,SAAS,MAAM;GAAE;GAAgB;EAAc,CAAC;CACtE,GAAG,CAAC,gBAAgB,aAAa,CAEG,EAAS,CAAA;AAC/C"}
|
package/dist/i18n/locale.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.js","names":[],"sources":["../../resources/js/i18n/locale.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { LATTICE_EVENT } from \"
|
|
1
|
+
{"version":3,"file":"locale.js","names":[],"sources":["../../resources/js/i18n/locale.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { LATTICE_EVENT } from \"@lattice-php/lattice/events/event-names\";\n\nexport type UseLocaleReturn = {\n readonly locale: string;\n readonly setLocale: (locale: string) => void;\n};\n\nconst key = \"locale\";\nconst fallback = \"en\";\nconst maxAge = 365 * 24 * 60 * 60;\nconst listeners = new Set<() => void>();\n\nlet active: string | undefined;\n\nfunction normalize(value: string): string {\n const next = value.trim();\n\n return next === \"\" ? fallback : next;\n}\n\nfunction storedValue(): string | null {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction cookieValue(): string | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n\n const item = document.cookie\n .split(\";\")\n .map((cookie) => cookie.trim())\n .find((cookie) => cookie.startsWith(`${key}=`));\n\n if (!item) {\n return null;\n }\n\n try {\n return decodeURIComponent(item.slice(key.length + 1));\n } catch {\n return null;\n }\n}\n\nfunction documentValue(): string | null {\n if (typeof document === \"undefined\") {\n return null;\n }\n\n return document.documentElement.lang || null;\n}\n\nfunction detectedLocale(): string {\n return normalize(storedValue() ?? cookieValue() ?? documentValue() ?? fallback);\n}\n\nfunction persist(locale: string): void {\n if (typeof document !== \"undefined\") {\n document.cookie = `${key}=${encodeURIComponent(locale)};path=/;max-age=${maxAge};SameSite=Lax`;\n document.documentElement.lang = locale;\n }\n\n if (typeof window !== \"undefined\") {\n try {\n localStorage.setItem(key, locale);\n } catch {\n return;\n }\n }\n}\n\nfunction snapshot(): string {\n active ??= detectedLocale();\n\n return active;\n}\n\nfunction subscribe(callback: () => void): () => void {\n listeners.add(callback);\n\n return () => {\n listeners.delete(callback);\n };\n}\n\nfunction notify(): void {\n listeners.forEach((listener) => listener());\n}\n\nfunction dispatch(locale: string): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(new CustomEvent(LATTICE_EVENT.localeChange, { detail: { locale } }));\n}\n\nexport function currentLocale(): string {\n return snapshot();\n}\n\nexport function localeHeader(): Record<string, string> {\n return { \"Accept-Language\": currentLocale() };\n}\n\nexport function subscribeLocale(callback: (locale: string) => void): () => void {\n return subscribe(() => callback(currentLocale()));\n}\n\nexport function setLocale(locale: string): void {\n const previous = currentLocale();\n const next = normalize(locale);\n\n active = next;\n persist(next);\n\n if (next === previous) {\n return;\n }\n\n notify();\n dispatch(next);\n}\n\nexport function useLocale(): UseLocaleReturn {\n const locale = useSyncExternalStore(subscribe, snapshot, () => fallback);\n\n return { locale, setLocale } as const;\n}\n"],"mappings":";;;AAQA,IAAM,MAAM;AACZ,IAAM,WAAW;AACjB,IAAM,SAAS,MAAM,KAAK,KAAK;AAC/B,IAAM,4BAAY,IAAI,IAAgB;AAEtC,IAAI;AAEJ,SAAS,UAAU,OAAuB;CACxC,MAAM,OAAO,MAAM,KAAK;CAExB,OAAO,SAAS,KAAK,WAAW;AAClC;AAEA,SAAS,cAA6B;CACpC,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,IAAI;EACF,OAAO,aAAa,QAAQ,GAAG;CACjC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,cAA6B;CACpC,IAAI,OAAO,aAAa,aACtB,OAAO;CAGT,MAAM,OAAO,SAAS,OACnB,MAAM,GAAG,EACT,KAAK,WAAW,OAAO,KAAK,CAAC,EAC7B,MAAM,WAAW,OAAO,WAAW,GAAG,IAAI,EAAE,CAAC;CAEhD,IAAI,CAAC,MACH,OAAO;CAGT,IAAI;EACF,OAAO,mBAAmB,KAAK,MAAM,CAAc,CAAC;CACtD,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,gBAA+B;CACtC,IAAI,OAAO,aAAa,aACtB,OAAO;CAGT,OAAO,SAAS,gBAAgB,QAAQ;AAC1C;AAEA,SAAS,iBAAyB;CAChC,OAAO,UAAU,YAAY,KAAK,YAAY,KAAK,cAAc,KAAK,QAAQ;AAChF;AAEA,SAAS,QAAQ,QAAsB;CACrC,IAAI,OAAO,aAAa,aAAa;EACnC,SAAS,SAAS,GAAG,IAAI,GAAG,mBAAmB,MAAM,EAAE,kBAAkB,OAAO;EAChF,SAAS,gBAAgB,OAAO;CAClC;CAEA,IAAI,OAAO,WAAW,aACpB,IAAI;EACF,aAAa,QAAQ,KAAK,MAAM;CAClC,QAAQ;EACN;CACF;AAEJ;AAEA,SAAS,WAAmB;CAC1B,WAAW,eAAe;CAE1B,OAAO;AACT;AAEA,SAAS,UAAU,UAAkC;CACnD,UAAU,IAAI,QAAQ;CAEtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AAEA,SAAS,SAAe;CACtB,UAAU,SAAS,aAAa,SAAS,CAAC;AAC5C;AAEA,SAAS,SAAS,QAAsB;CACtC,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,cAAc,IAAI,YAAY,cAAc,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAC1F;AAEA,SAAgB,gBAAwB;CACtC,OAAO,SAAS;AAClB;AAEA,SAAgB,eAAuC;CACrD,OAAO,EAAE,mBAAmB,cAAc,EAAE;AAC9C;AAEA,SAAgB,gBAAgB,UAAgD;CAC9E,OAAO,gBAAgB,SAAS,cAAc,CAAC,CAAC;AAClD;AAEA,SAAgB,UAAU,QAAsB;CAC9C,MAAM,WAAW,cAAc;CAC/B,MAAM,OAAO,UAAU,MAAM;CAE7B,SAAS;CACT,QAAQ,IAAI;CAEZ,IAAI,SAAS,UACX;CAGF,OAAO;CACP,SAAS,IAAI;AACf;AAEA,SAAgB,YAA6B;CAG3C,OAAO;EAAE,QAFM,qBAAqB,WAAW,gBAAgB,QAEtD;EAAQ;CAAU;AAC7B"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ConfigureI18nOptions, I18nConfig } from './backend';
|
|
1
|
+
import { ConfigureI18nOptions, I18nConfig } from './backend.js';
|
|
2
2
|
export declare function i18nConfigFromPageProps(props: unknown): I18nConfig | undefined;
|
|
3
3
|
export declare function configureI18nFromPageProps(props: unknown, options?: ConfigureI18nOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timezone.js","names":[],"sources":["../../resources/js/i18n/timezone.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { LATTICE_EVENT } from \"
|
|
1
|
+
{"version":3,"file":"timezone.js","names":[],"sources":["../../resources/js/i18n/timezone.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\nimport { LATTICE_EVENT } from \"@lattice-php/lattice/events/event-names\";\nimport { configTimezone, subscribeConfig } from \"./config\";\n\nexport type UseTimezoneReturn = {\n readonly timezone: string;\n readonly setTimezone: (timezone: string) => void;\n};\n\nconst fallback = \"UTC\";\nconst listeners = new Set<() => void>();\n\nlet override: string | undefined;\n\nfunction detectedTimezone(): string {\n if (typeof Intl === \"undefined\") {\n return fallback;\n }\n\n try {\n return Intl.DateTimeFormat().resolvedOptions().timeZone || fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction snapshot(): string {\n return override ?? configTimezone() ?? detectedTimezone();\n}\n\nfunction subscribe(callback: () => void): () => void {\n listeners.add(callback);\n\n return () => {\n listeners.delete(callback);\n };\n}\n\nfunction notify(): void {\n listeners.forEach((listener) => listener());\n}\n\nsubscribeConfig(() => notify());\n\nfunction dispatch(timezone: string): void {\n if (typeof window === \"undefined\") {\n return;\n }\n\n window.dispatchEvent(new CustomEvent(LATTICE_EVENT.timezoneChange, { detail: { timezone } }));\n}\n\nexport function currentTimezone(): string {\n return snapshot();\n}\n\nexport function setTimezone(timezone: string): void {\n const previous = currentTimezone();\n const next = timezone.trim();\n\n override = next === \"\" ? undefined : next;\n\n if (currentTimezone() === previous) {\n return;\n }\n\n notify();\n dispatch(currentTimezone());\n}\n\nexport function useTimezone(): UseTimezoneReturn {\n const timezone = useSyncExternalStore(subscribe, snapshot, () => fallback);\n\n return { timezone, setTimezone } as const;\n}\n"],"mappings":";;;;AASA,IAAM,WAAW;AACjB,IAAM,4BAAY,IAAI,IAAgB;AAEtC,IAAI;AAEJ,SAAS,mBAA2B;CAClC,IAAI,OAAO,SAAS,aAClB,OAAO;CAGT,IAAI;EACF,OAAO,KAAK,eAAe,EAAE,gBAAgB,EAAE,YAAY;CAC7D,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,WAAmB;CAC1B,OAAO,YAAY,eAAe,KAAK,iBAAiB;AAC1D;AAEA,SAAS,UAAU,UAAkC;CACnD,UAAU,IAAI,QAAQ;CAEtB,aAAa;EACX,UAAU,OAAO,QAAQ;CAC3B;AACF;AAEA,SAAS,SAAe;CACtB,UAAU,SAAS,aAAa,SAAS,CAAC;AAC5C;AAEA,sBAAsB,OAAO,CAAC;AAE9B,SAAS,SAAS,UAAwB;CACxC,IAAI,OAAO,WAAW,aACpB;CAGF,OAAO,cAAc,IAAI,YAAY,cAAc,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAC9F;AAEA,SAAgB,kBAA0B;CACxC,OAAO,SAAS;AAClB;AAEA,SAAgB,YAAY,UAAwB;CAClD,MAAM,WAAW,gBAAgB;CACjC,MAAM,OAAO,SAAS,KAAK;CAE3B,WAAW,SAAS,KAAK,KAAA,IAAY;CAErC,IAAI,gBAAgB,MAAM,UACxB;CAGF,OAAO;CACP,SAAS,gBAAgB,CAAC;AAC5B;AAEA,SAAgB,cAAiC;CAG/C,OAAO;EAAE,UAFQ,qBAAqB,WAAW,gBAAgB,QAExD;EAAU;CAAY;AACjC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Translatable } from '../types/generated';
|
|
1
|
+
import { Translatable } from '../types/generated.js';
|
|
2
2
|
export type Translate = (key: string, defaultValue?: string, options?: Record<string, unknown>) => string;
|
|
3
3
|
export declare function isTranslatable(value: unknown): value is Translatable;
|
|
4
4
|
export declare function resolveTranslatable(value: Translatable, payload: Record<string, unknown>, t: Translate): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon-renderer.js","names":[],"sources":["../../resources/js/icons/icon-renderer.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"
|
|
1
|
+
{"version":3,"file":"icon-renderer.js","names":[],"sources":["../../resources/js/icons/icon-renderer.tsx"],"sourcesContent":["import { createContext, useContext, useMemo } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { Icon, useSprite } from \"./sprite\";\n\nexport type IconRendererProps = {\n className?: string;\n icon: string;\n};\n\nexport type IconRendererFunction = (props: IconRendererProps) => ReactNode;\n\ntype IconRendererProviderProps = {\n children: ReactNode;\n mode?: \"replace\" | \"stack\";\n renderer: IconRendererFunction;\n};\n\nconst IconRenderersContext = createContext<IconRendererFunction[]>([]);\nconst loggedMissingIcons = new Set<string>();\n\nexport function IconRendererProvider({\n children,\n mode = \"stack\",\n renderer,\n}: IconRendererProviderProps) {\n const parentRenderers = useContext(IconRenderersContext);\n const renderers = useMemo(\n () => (mode === \"replace\" ? [renderer] : [renderer, ...parentRenderers]),\n [mode, parentRenderers, renderer],\n );\n\n return (\n <IconRenderersContext.Provider value={renderers}>{children}</IconRenderersContext.Provider>\n );\n}\n\nexport function IconRenderer({ className, icon }: IconRendererProps) {\n const renderers = useContext(IconRenderersContext);\n const { ids } = useSprite();\n\n for (const renderer of renderers) {\n const rendered = renderer({ className, icon });\n\n if (rendered !== null && rendered !== undefined && rendered !== false) {\n return rendered;\n }\n }\n\n // When the sprite is wired and the icon is genuinely absent, show a visible\n // marker. When `ids` is unknown (not yet wired), optimistically emit the\n // sprite reference rather than crying wolf.\n if (ids && !ids.includes(icon)) {\n logMissingIcon(icon);\n return <MissingIcon className={className} />;\n }\n\n return <Icon className={className} name={icon} />;\n}\n\nfunction MissingIcon({ className }: { className?: string }) {\n return (\n <svg\n aria-hidden=\"true\"\n className={cn(\"size-lt-icon-md text-lt-muted-fg\", className)}\n data-lattice-missing-icon=\"\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\" />\n <path d=\"M12 17h.01\" />\n </svg>\n );\n}\n\nfunction logMissingIcon(icon: string): void {\n if (!import.meta.env.DEV || loggedMissingIcons.has(icon)) {\n return;\n }\n\n loggedMissingIcons.add(icon);\n console.log(`[Lattice] Missing icon renderer for \"${icon}\".`);\n}\n"],"mappings":";;;;;AAkBA,IAAM,uBAAuB,cAAsC,CAAC,CAAC;AAGrE,SAAgB,qBAAqB,EACnC,UACA,OAAO,SACP,YAC4B;CAC5B,MAAM,kBAAkB,WAAW,oBAAoB;CACvD,MAAM,YAAY,cACT,SAAS,YAAY,CAAC,QAAQ,IAAI,CAAC,UAAU,GAAG,eAAe,GACtE;EAAC;EAAM;EAAiB;CAAQ,CAClC;CAEA,OACE,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO;EAAY;CAAwC,CAAA;AAE9F;AAEA,SAAgB,aAAa,EAAE,WAAW,QAA2B;CACnE,MAAM,YAAY,WAAW,oBAAoB;CACjD,MAAM,EAAE,QAAQ,UAAU;CAE1B,KAAK,MAAM,YAAY,WAAW;EAChC,MAAM,WAAW,SAAS;GAAE;GAAW;EAAK,CAAC;EAE7C,IAAI,aAAa,QAAQ,aAAa,KAAA,KAAa,aAAa,OAC9D,OAAO;CAEX;CAKA,IAAI,OAAO,CAAC,IAAI,SAAS,IAAI,GAE3B,OAAO,oBAAC,aAAD,EAAwB,UAAY,CAAA;CAG7C,OAAO,oBAAC,MAAD;EAAiB;EAAW,MAAM;CAAO,CAAA;AAClD;AAEA,SAAS,YAAY,EAAE,aAAqC;CAC1D,OACE,qBAAC,OAAD;EACE,eAAY;EACZ,WAAW,GAAG,oCAAoC,SAAS;EAC3D,6BAA0B;EAC1B,MAAK;EACL,QAAO;EACP,eAAc;EACd,gBAAe;EACf,aAAY;EACZ,SAAQ;YATV;GAWE,oBAAC,UAAD;IAAQ,IAAG;IAAK,IAAG;IAAK,GAAE;GAAM,CAAA;GAChC,oBAAC,QAAD,EAAM,GAAE,uCAAwC,CAAA;GAChD,oBAAC,QAAD,EAAM,GAAE,aAAc,CAAA;EACnB;;AAET"}
|
package/dist/icons/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { Icon, SpriteProvider, useSprite } from './sprite';
|
|
2
|
-
export type { IconName, KnownIcons, SpriteValue } from './sprite';
|
|
3
|
-
export { IconRenderer, IconRendererProvider } from './icon-renderer';
|
|
4
|
-
export type { IconRendererFunction, IconRendererProps } from './icon-renderer';
|
|
1
|
+
export { Icon, SpriteProvider, useSprite } from './sprite.js';
|
|
2
|
+
export type { IconName, KnownIcons, SpriteValue } from './sprite.js';
|
|
3
|
+
export { IconRenderer, IconRendererProvider } from './icon-renderer.js';
|
|
4
|
+
export type { IconRendererFunction, IconRendererProps } from './icon-renderer.js';
|