@lattice-php/lattice 0.17.2 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/hooks/use-click-behavior.d.ts +3 -0
- package/dist/action/hooks/use-click-behavior.js +3 -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 +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 +3 -3
- 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/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 +5 -5
- 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 +1 -1
- 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 +10 -11
- 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/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/package.json +28 -94
- 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":"card.js","names":[],"sources":["../../resources/js/ui/card.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { InfoTooltip } from \"./info-tooltip\";\n\nfunction Card({ className, ...props }: React.ComponentProps<\"article\">) {\n return (\n <article\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-6 rounded-lt border border-lt-border bg-lt-surface py-lt-gutter text-lt-surface-fg shadow-lt-sm\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\"flex flex-col gap-1.5 px-lt-gutter\", className)}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"font-semibold leading-none\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-lt-muted-fg\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-content\" className={cn(\"px-lt-gutter\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-lt-gutter\", className)}\n {...props}\n />\n );\n}\n\nconst CardComponent: RendererComponent<\"card\"> = ({ children, node }) => {\n const { title, description, tooltip } = node.props;\n\n return (\n <Card data-lattice-component={nodeIdentity(node)}>\n {(title || description) && (\n <CardHeader>\n {title && (\n <div className=\"flex items-center\">\n <CardTitle>{title}</CardTitle>\n <InfoTooltip content={tooltip} />\n </div>\n )}\n {description && (\n <div className=\"flex items-center\">\n <CardDescription>{description}</CardDescription>\n {!title && <InfoTooltip content={tooltip} />}\n </div>\n )}\n </CardHeader>\n )}\n {children && <CardContent className=\"flex flex-col gap-6\">{children}</CardContent>}\n </Card>\n );\n};\n\nexport default CardComponent;\nexport { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };\n"],"mappings":";;;;;;AAMA,SAAS,KAAK,EAAE,WAAW,GAAG,SAA0C;CACtE,OACE,oBAAC,WAAD;EACE,aAAU;EACV,WAAW,GACT,qHACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,sCAAsC,SAAS;EAC7D,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OAAO,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC7F;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,kCAAkC,SAAS;EACzD,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,EAAE,OAAO,aAAa,YAAY,KAAK;CAE7C,OACE,qBAAC,MAAD;EAAM,0BAAwB,aAAa,IAAI;YAA/C,EACI,SAAS,gBACT,qBAAC,YAAD,EAAA,UAAA,CACG,SACC,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,GAC7B,oBAAC,aAAD,EAAa,SAAS,QAAU,CAAA,CAC7B;MAEN,eACC,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,GAC9C,CAAC,SAAS,oBAAC,aAAD,EAAa,SAAS,QAAU,CAAA,CACxC;IAEG,EAAA,CAAA,GAEb,YAAY,oBAAC,aAAD;GAAa,WAAU;GAAuB;EAAsB,CAAA,CAC7E;;AAEV"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { useLocale } from "
|
|
2
|
-
import { useTimezone } from "
|
|
3
|
-
import { nodeIdentity } from "../test-id.js";
|
|
4
|
-
import { formatValue } from "
|
|
1
|
+
import { useLocale } from "../i18n/locale.js";
|
|
2
|
+
import { useTimezone } from "../i18n/timezone.js";
|
|
3
|
+
import { nodeIdentity } from "../core/test-id.js";
|
|
4
|
+
import { formatValue } from "../format/value.js";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, ComposedChart, Legend, Line, LineChart, Pie, PieChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
|
|
7
|
-
//#region resources/js/
|
|
7
|
+
//#region resources/js/ui/chart-view.tsx
|
|
8
8
|
var chartMargin = {
|
|
9
9
|
bottom: 0,
|
|
10
10
|
left: 0,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-view.js","names":[],"sources":["../../resources/js/ui/chart-view.tsx"],"sourcesContent":["import {\n Area,\n AreaChart,\n Bar,\n BarChart,\n CartesianGrid,\n Cell,\n ComposedChart,\n Legend,\n Line,\n LineChart,\n Pie,\n PieChart,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport type { PropsOf, RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { useLocale, useTimezone } from \"@lattice-php/lattice/i18n\";\nimport { formatValue } from \"@lattice-php/lattice/format/value\";\n\ntype ChartProps = PropsOf<\"chart\">;\ntype ChartSeries = ChartProps[\"series\"][number];\ntype ChartDatum = ChartProps[\"data\"][number];\ntype CartesianSeries = ChartSeries & { type: \"area\" | \"bar\" | \"line\" };\ntype ChartMargin = { bottom: number; left: number; right: number; top: number };\ntype CartesianChartComponent = ComponentType<{\n children: ReactNode;\n data: ChartProps[\"data\"];\n margin?: ChartMargin;\n}>;\n\nconst chartMargin: ChartMargin = { bottom: 0, left: 0, right: 16, top: 8 };\nconst compactLegendProps = {\n align: \"center\" as const,\n height: 24,\n iconSize: 7,\n verticalAlign: \"top\" as const,\n wrapperStyle: { fontSize: 11, lineHeight: \"14px\", paddingBottom: 6 },\n};\nconst axisTick = { fontSize: 10 };\nconst tooltipProps = {\n contentStyle: {\n background: \"var(--lt-surface)\",\n border: \"1px solid var(--lt-border)\",\n borderRadius: \"var(--lt-radius-sm)\",\n boxShadow: \"var(--lt-shadow-sm)\",\n color: \"var(--lt-surface-fg)\",\n fontSize: 12,\n },\n itemStyle: { color: \"var(--lt-surface-fg)\" },\n labelStyle: { color: \"var(--lt-muted-fg)\" },\n} as const;\n\nconst palette = [\n \"var(--lt-primary)\",\n \"var(--lt-success)\",\n \"var(--lt-info)\",\n \"var(--lt-warning)\",\n \"var(--lt-danger)\",\n \"var(--lt-muted-fg)\",\n];\n\nfunction colorAt(index: number): string {\n return palette[index % palette.length] ?? \"var(--lt-primary)\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction datumColor(datum: ChartDatum, series: ChartSeries, index: number): string {\n if (isRecord(datum) && typeof datum.color === \"string\") {\n return datum.color;\n }\n\n return series.color ?? colorAt(index);\n}\n\nfunction isCartesianSeries(series: ChartSeries): series is CartesianSeries {\n return series.type === \"area\" || series.type === \"bar\" || series.type === \"line\";\n}\n\nfunction cartesianChartFor(series: CartesianSeries[]): CartesianChartComponent {\n const types = new Set(series.map((item) => item.type));\n const firstSeries = series[0];\n\n if (firstSeries === undefined || types.size !== 1) {\n return ComposedChart;\n }\n\n switch (firstSeries.type) {\n case \"area\":\n return AreaChart;\n case \"bar\":\n return BarChart;\n case \"line\":\n return LineChart;\n }\n}\n\nfunction ChartFrame({\n children,\n description,\n id,\n title,\n}: {\n children: ReactNode;\n description: string | null;\n id?: string;\n title: string | null;\n}) {\n const hasHeader = title !== null || description !== null;\n\n return (\n <div\n className=\"flex flex-col gap-3 rounded-lt border border-lt-border bg-lt-surface p-4 text-lt-surface-fg shadow-lt-sm\"\n data-lattice-component={id}\n >\n {hasHeader && (\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {title !== null && <div className=\"text-sm font-semibold leading-tight\">{title}</div>}\n {description !== null && (\n <div className=\"text-xs leading-5 text-lt-muted-fg\">{description}</div>\n )}\n </div>\n )}\n {children}\n </div>\n );\n}\n\nfunction CartesianChart({ props }: { props: ChartProps }) {\n const series = props.series.filter(isCartesianSeries);\n const RechartsChart = cartesianChartFor(series);\n const { locale } = useLocale();\n const { timezone } = useTimezone();\n const ctx = { locale, timezone };\n const formatCategory = (value: unknown) => formatValue(value, props.categoryFormat, ctx);\n const formatValueTick = (value: unknown) => formatValue(value, props.valueFormat, ctx);\n const hasBarSeries = series.some((item) => item.type === \"bar\");\n const tooltipCursor = hasBarSeries\n ? { fill: \"var(--lt-muted-fg)\", fillOpacity: 0.15 }\n : { stroke: \"var(--lt-muted-fg)\", strokeOpacity: 0.4 };\n\n return (\n <ResponsiveContainer width=\"100%\" height={props.height} debounce={100}>\n <RechartsChart data={props.data} margin={chartMargin}>\n {props.grid && <CartesianGrid strokeDasharray=\"3 3\" stroke=\"var(--lt-border)\" />}\n {props.xAxis && props.categoryKey !== null && (\n <XAxis\n dataKey={props.categoryKey}\n stroke=\"var(--lt-muted-fg)\"\n tick={axisTick}\n tickFormatter={formatCategory}\n tickLine={false}\n />\n )}\n {props.yAxis && (\n <YAxis\n stroke=\"var(--lt-muted-fg)\"\n tick={axisTick}\n tickFormatter={formatValueTick}\n tickLine={false}\n width={42}\n />\n )}\n {props.tooltip && (\n <Tooltip\n {...tooltipProps}\n cursor={tooltipCursor}\n formatter={formatValueTick}\n labelFormatter={formatCategory}\n />\n )}\n {props.legend && <Legend {...compactLegendProps} />}\n {series.map((item, index) => {\n const color = item.color ?? colorAt(index);\n const key = `${item.type}:${item.dataKey}`;\n\n if (item.type === \"area\") {\n return (\n <Area\n key={key}\n dataKey={item.dataKey}\n fill={color}\n fillOpacity={0.16}\n name={item.name ?? undefined}\n stackId={item.stackId ?? undefined}\n stroke={color}\n type=\"monotone\"\n />\n );\n }\n\n if (item.type === \"bar\") {\n return (\n <Bar\n key={key}\n dataKey={item.dataKey}\n fill={color}\n name={item.name ?? undefined}\n radius={[4, 4, 0, 0]}\n stackId={item.stackId ?? undefined}\n />\n );\n }\n\n return (\n <Line\n key={key}\n dataKey={item.dataKey}\n dot={false}\n name={item.name ?? undefined}\n stroke={color}\n strokeWidth={2}\n type=\"monotone\"\n />\n );\n })}\n </RechartsChart>\n </ResponsiveContainer>\n );\n}\n\nfunction PieChartView({ props, series }: { props: ChartProps; series: ChartSeries }) {\n const { locale } = useLocale();\n const { timezone } = useTimezone();\n const ctx = { locale, timezone };\n\n return (\n <ResponsiveContainer width=\"100%\" height={props.height} debounce={100}>\n <PieChart margin={chartMargin}>\n {props.tooltip && (\n <Tooltip\n {...tooltipProps}\n formatter={(value) => formatValue(value, props.valueFormat, ctx)}\n labelFormatter={(value) => formatValue(value, props.categoryFormat, ctx)}\n />\n )}\n {props.legend && <Legend {...compactLegendProps} />}\n <Pie\n data={props.data}\n dataKey={series.dataKey}\n name={series.name ?? undefined}\n nameKey={series.nameKey ?? undefined}\n outerRadius=\"68%\"\n >\n {props.data.map((datum, index) => (\n <Cell key={index} fill={datumColor(datum, series, index)} />\n ))}\n </Pie>\n </PieChart>\n </ResponsiveContainer>\n );\n}\n\nconst ChartView: RendererComponent<\"chart\"> = ({ node }) => {\n const props = node.props;\n const pieSeries = props.series.find((series) => series.type === \"pie\");\n const hasCartesianSeries = props.series.some(isCartesianSeries);\n\n return (\n <ChartFrame description={props.description} id={nodeIdentity(node)} title={props.title}>\n <div className=\"min-h-0 w-full\">\n {pieSeries && !hasCartesianSeries ? (\n <PieChartView props={props} series={pieSeries} />\n ) : (\n <CartesianChart props={props} />\n )}\n </div>\n </ChartFrame>\n );\n};\n\nexport default ChartView;\n"],"mappings":";;;;;;;AAmCA,IAAM,cAA2B;CAAE,QAAQ;CAAG,MAAM;CAAG,OAAO;CAAI,KAAK;AAAE;AACzE,IAAM,qBAAqB;CACzB,OAAO;CACP,QAAQ;CACR,UAAU;CACV,eAAe;CACf,cAAc;EAAE,UAAU;EAAI,YAAY;EAAQ,eAAe;CAAE;AACrE;AACA,IAAM,WAAW,EAAE,UAAU,GAAG;AAChC,IAAM,eAAe;CACnB,cAAc;EACZ,YAAY;EACZ,QAAQ;EACR,cAAc;EACd,WAAW;EACX,OAAO;EACP,UAAU;CACZ;CACA,WAAW,EAAE,OAAO,uBAAuB;CAC3C,YAAY,EAAE,OAAO,qBAAqB;AAC5C;AAEA,IAAM,UAAU;CACd;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,QAAQ,OAAuB;CACtC,OAAO,QAAQ,QAAQ,QAAQ,WAAW;AAC5C;AAEA,SAAS,SAAS,OAAkD;CAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,WAAW,OAAmB,QAAqB,OAAuB;CACjF,IAAI,SAAS,KAAK,KAAK,OAAO,MAAM,UAAU,UAC5C,OAAO,MAAM;CAGf,OAAO,OAAO,SAAS,QAAQ,KAAK;AACtC;AAEA,SAAS,kBAAkB,QAAgD;CACzE,OAAO,OAAO,SAAS,UAAU,OAAO,SAAS,SAAS,OAAO,SAAS;AAC5E;AAEA,SAAS,kBAAkB,QAAoD;CAC7E,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,SAAS,KAAK,IAAI,CAAC;CACrD,MAAM,cAAc,OAAO;CAE3B,IAAI,gBAAgB,KAAA,KAAa,MAAM,SAAS,GAC9C,OAAO;CAGT,QAAQ,YAAY,MAApB;EACE,KAAK,QACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,KAAK,QACH,OAAO;CACX;AACF;AAEA,SAAS,WAAW,EAClB,UACA,aACA,IACA,SAMC;CAGD,OACE,qBAAC,OAAD;EACE,WAAU;EACV,0BAAwB;YAF1B,EAHgB,UAAU,QAAQ,gBAAgB,SAQ9C,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,UAAU,QAAQ,oBAAC,OAAD;IAAK,WAAU;cAAuC;GAAW,CAAA,GACnF,gBAAgB,QACf,oBAAC,OAAD;IAAK,WAAU;cAAsC;GAAiB,CAAA,CAErE;MAEN,QACE;;AAET;AAEA,SAAS,eAAe,EAAE,SAAgC;CACxD,MAAM,SAAS,MAAM,OAAO,OAAO,iBAAiB;CACpD,MAAM,gBAAgB,kBAAkB,MAAM;CAC9C,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,MAAM;EAAE;EAAQ;CAAS;CAC/B,MAAM,kBAAkB,UAAmB,YAAY,OAAO,MAAM,gBAAgB,GAAG;CACvF,MAAM,mBAAmB,UAAmB,YAAY,OAAO,MAAM,aAAa,GAAG;CAErF,MAAM,gBADe,OAAO,MAAM,SAAS,KAAK,SAAS,KACnC,IAClB;EAAE,MAAM;EAAsB,aAAa;CAAK,IAChD;EAAE,QAAQ;EAAsB,eAAe;CAAI;CAEvD,OACE,oBAAC,qBAAD;EAAqB,OAAM;EAAO,QAAQ,MAAM;EAAQ,UAAU;YAChE,qBAAC,eAAD;GAAe,MAAM,MAAM;GAAM,QAAQ;aAAzC;IACG,MAAM,QAAQ,oBAAC,eAAD;KAAe,iBAAgB;KAAM,QAAO;IAAoB,CAAA;IAC9E,MAAM,SAAS,MAAM,gBAAgB,QACpC,oBAAC,OAAD;KACE,SAAS,MAAM;KACf,QAAO;KACP,MAAM;KACN,eAAe;KACf,UAAU;IACX,CAAA;IAEF,MAAM,SACL,oBAAC,OAAD;KACE,QAAO;KACP,MAAM;KACN,eAAe;KACf,UAAU;KACV,OAAO;IACR,CAAA;IAEF,MAAM,WACL,oBAAC,SAAD;KACE,GAAI;KACJ,QAAQ;KACR,WAAW;KACX,gBAAgB;IACjB,CAAA;IAEF,MAAM,UAAU,oBAAC,QAAD,EAAQ,GAAI,mBAAqB,CAAA;IACjD,OAAO,KAAK,MAAM,UAAU;KAC3B,MAAM,QAAQ,KAAK,SAAS,QAAQ,KAAK;KACzC,MAAM,MAAM,GAAG,KAAK,KAAK,GAAG,KAAK;KAEjC,IAAI,KAAK,SAAS,QAChB,OACE,oBAAC,MAAD;MAEE,SAAS,KAAK;MACd,MAAM;MACN,aAAa;MACb,MAAM,KAAK,QAAQ,KAAA;MACnB,SAAS,KAAK,WAAW,KAAA;MACzB,QAAQ;MACR,MAAK;KACN,GARM,GAQN;KAIL,IAAI,KAAK,SAAS,OAChB,OACE,oBAAC,KAAD;MAEE,SAAS,KAAK;MACd,MAAM;MACN,MAAM,KAAK,QAAQ,KAAA;MACnB,QAAQ;OAAC;OAAG;OAAG;OAAG;MAAC;MACnB,SAAS,KAAK,WAAW,KAAA;KAC1B,GANM,GAMN;KAIL,OACE,oBAAC,MAAD;MAEE,SAAS,KAAK;MACd,KAAK;MACL,MAAM,KAAK,QAAQ,KAAA;MACnB,QAAQ;MACR,aAAa;MACb,MAAK;KACN,GAPM,GAON;IAEL,CAAC;GACY;;CACI,CAAA;AAEzB;AAEA,SAAS,aAAa,EAAE,OAAO,UAAsD;CACnF,MAAM,EAAE,WAAW,UAAU;CAC7B,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,MAAM;EAAE;EAAQ;CAAS;CAE/B,OACE,oBAAC,qBAAD;EAAqB,OAAM;EAAO,QAAQ,MAAM;EAAQ,UAAU;YAChE,qBAAC,UAAD;GAAU,QAAQ;aAAlB;IACG,MAAM,WACL,oBAAC,SAAD;KACE,GAAI;KACJ,YAAY,UAAU,YAAY,OAAO,MAAM,aAAa,GAAG;KAC/D,iBAAiB,UAAU,YAAY,OAAO,MAAM,gBAAgB,GAAG;IACxE,CAAA;IAEF,MAAM,UAAU,oBAAC,QAAD,EAAQ,GAAI,mBAAqB,CAAA;IAClD,oBAAC,KAAD;KACE,MAAM,MAAM;KACZ,SAAS,OAAO;KAChB,MAAM,OAAO,QAAQ,KAAA;KACrB,SAAS,OAAO,WAAW,KAAA;KAC3B,aAAY;eAEX,MAAM,KAAK,KAAK,OAAO,UACtB,oBAAC,MAAD,EAAkB,MAAM,WAAW,OAAO,QAAQ,KAAK,EAAI,GAAhD,KAAgD,CAC5D;IACE,CAAA;GACG;;CACS,CAAA;AAEzB;AAEA,IAAM,aAAyC,EAAE,WAAW;CAC1D,MAAM,QAAQ,KAAK;CACnB,MAAM,YAAY,MAAM,OAAO,MAAM,WAAW,OAAO,SAAS,KAAK;CACrE,MAAM,qBAAqB,MAAM,OAAO,KAAK,iBAAiB;CAE9D,OACE,oBAAC,YAAD;EAAY,aAAa,MAAM;EAAa,IAAI,aAAa,IAAI;EAAG,OAAO,MAAM;YAC/E,oBAAC,OAAD;GAAK,WAAU;aACZ,aAAa,CAAC,qBACb,oBAAC,cAAD;IAAqB;IAAO,QAAQ;GAAY,CAAA,IAEhD,oBAAC,gBAAD,EAAuB,MAAQ,CAAA;EAE9B,CAAA;CACK,CAAA;AAEhB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Suspense, lazy } from "react";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
//#region resources/js/
|
|
3
|
+
//#region resources/js/ui/chart.tsx
|
|
4
4
|
var ChartView = lazy(() => import("./chart-view.js"));
|
|
5
5
|
var ChartComponent = ({ children, node }) => /* @__PURE__ */ jsx(Suspense, {
|
|
6
6
|
fallback: null,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","names":[],"sources":["../../resources/js/ui/chart.tsx"],"sourcesContent":["import { lazy, Suspense } from \"react\";\nimport type { RendererComponent, RendererComponentModule } from \"@lattice-php/lattice/core/types\";\n\nconst ChartView = lazy(() => import(\"./chart-view\") as unknown as Promise<RendererComponentModule>);\n\nconst ChartComponent: RendererComponent<\"chart\"> = ({ children, node }) => (\n <Suspense fallback={null}>\n <ChartView node={node}>{children}</ChartView>\n </Suspense>\n);\n\nexport default ChartComponent;\n"],"mappings":";;;AAGA,IAAM,YAAY,WAAW,OAAO,kBAA8D;AAElG,IAAM,kBAA8C,EAAE,UAAU,WAC9D,oBAAC,UAAD;CAAU,UAAU;WAClB,oBAAC,WAAD;EAAiB;EAAO;CAAoB,CAAA;AACpC,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Icon } from "
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { Icon } from "../icons/sprite.js";
|
|
3
3
|
import "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
5
|
import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
|
|
6
|
-
//#region resources/js/
|
|
6
|
+
//#region resources/js/ui/checkbox.tsx
|
|
7
7
|
function Checkbox({ className, ...props }) {
|
|
8
8
|
return /* @__PURE__ */ jsx(CheckboxPrimitive.Root, {
|
|
9
9
|
"data-slot": "checkbox",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":[],"sources":["../../resources/js/ui/checkbox.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as React from \"react\";\n\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-lt-input data-[state=checked]:bg-lt-primary data-[state=checked]:text-lt-primary-fg data-[state=checked]:border-lt-primary focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger size-4 shrink-0 rounded-lt-xs border shadow-lt-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"flex items-center justify-center text-current transition-none\"\n >\n <Icon name=\"check\" className=\"size-lt-icon-sm\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n"],"mappings":";;;;;;AAMA,SAAS,SAAS,EAAE,WAAW,GAAG,SAA8D;CAC9F,OACE,oBAAC,kBAAkB,MAAnB;EACE,aAAU;EACV,WAAW,GACT,gcACA,SACF;EACA,GAAI;YAEJ,oBAAC,kBAAkB,WAAnB;GACE,aAAU;GACV,WAAU;aAEV,oBAAC,MAAD;IAAM,MAAK;IAAQ,WAAU;GAAmB,CAAA;EACrB,CAAA;CACP,CAAA;AAE5B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Method } from '@inertiajs/core';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
|
-
import { Node } from '
|
|
4
|
-
import { Effect } from '../types/generated';
|
|
3
|
+
import { Node } from '../core/types.js';
|
|
4
|
+
import { Effect } from '../types/generated.js';
|
|
5
5
|
export type ClickBehavior = {
|
|
6
6
|
kind: "navigate";
|
|
7
7
|
href: string;
|
|
@@ -15,28 +15,26 @@ export type ClickBehavior = {
|
|
|
15
15
|
} | {
|
|
16
16
|
kind: "none";
|
|
17
17
|
};
|
|
18
|
-
/**
|
|
19
|
-
* The shared click model for Link/Button/MenuItem: a clickable carries exactly
|
|
20
|
-
* one behavior — navigate to an href, run a server action, or dispatch client
|
|
21
|
-
* effects. This resolves it without touching the action machinery, so plain
|
|
22
|
-
* links/labels stay cheap; the `action` behavior renders through {@link ActionTrigger}.
|
|
23
|
-
*/
|
|
24
|
-
export declare function useClickBehavior(props: {
|
|
25
|
-
href?: string | null;
|
|
26
|
-
method?: Method | null;
|
|
27
|
-
action?: Node | null;
|
|
28
|
-
effects?: Effect[] | null;
|
|
29
|
-
}): ClickBehavior;
|
|
30
18
|
export type TriggerState = {
|
|
31
19
|
onClick: () => void;
|
|
32
20
|
processing: boolean;
|
|
33
21
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
22
|
+
export type ActionTriggerRenderer = (props: {
|
|
23
|
+
action: Node<"action">;
|
|
24
|
+
children: (trigger: TriggerState) => ReactNode;
|
|
25
|
+
}) => ReactNode;
|
|
26
|
+
export declare function ActionTriggerProvider({ children, render, }: {
|
|
27
|
+
children: ReactNode;
|
|
28
|
+
render: ActionTriggerRenderer;
|
|
29
|
+
}): import("react").JSX.Element;
|
|
30
|
+
export declare function useActionTrigger(): ActionTriggerRenderer | null;
|
|
39
31
|
export declare function ActionTrigger({ action, children, }: {
|
|
40
32
|
action: Node<"action">;
|
|
41
33
|
children: (trigger: TriggerState) => ReactNode;
|
|
42
34
|
}): import("react").JSX.Element;
|
|
35
|
+
export declare function useClickBehavior(props: {
|
|
36
|
+
href?: string | null;
|
|
37
|
+
method?: Method | null;
|
|
38
|
+
action?: Node | null;
|
|
39
|
+
effects?: Effect[] | null;
|
|
40
|
+
}): ClickBehavior;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { getActionEffects } from "../effects/dispatch.js";
|
|
2
|
+
import { useEffectDispatcher } from "../effects/use-effect-dispatcher.js";
|
|
3
|
+
import { createContext, useContext } from "react";
|
|
4
|
+
import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region resources/js/ui/click-behavior.tsx
|
|
6
|
+
var ActionTriggerContext = createContext(null);
|
|
7
|
+
function ActionTriggerProvider({ children, render }) {
|
|
8
|
+
return /* @__PURE__ */ jsx(ActionTriggerContext.Provider, {
|
|
9
|
+
value: render,
|
|
10
|
+
children
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
function useActionTrigger() {
|
|
14
|
+
return useContext(ActionTriggerContext);
|
|
15
|
+
}
|
|
16
|
+
function ActionTrigger({ action, children }) {
|
|
17
|
+
const render = useActionTrigger();
|
|
18
|
+
if (!render) throw new Error("Action triggers require an ActionTriggerProvider.");
|
|
19
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: render({
|
|
20
|
+
action,
|
|
21
|
+
children
|
|
22
|
+
}) });
|
|
23
|
+
}
|
|
24
|
+
function useClickBehavior(props) {
|
|
25
|
+
const dispatch = useEffectDispatcher();
|
|
26
|
+
const action = props.action ?? null;
|
|
27
|
+
const effects = props.effects ?? [];
|
|
28
|
+
if (action) return {
|
|
29
|
+
kind: "action",
|
|
30
|
+
action
|
|
31
|
+
};
|
|
32
|
+
if (effects.length > 0) return {
|
|
33
|
+
kind: "effects",
|
|
34
|
+
onClick: () => dispatch(getActionEffects(effects))
|
|
35
|
+
};
|
|
36
|
+
if (props.href != null && props.href !== "") return {
|
|
37
|
+
kind: "navigate",
|
|
38
|
+
href: props.href,
|
|
39
|
+
method: props.method ?? "get"
|
|
40
|
+
};
|
|
41
|
+
return { kind: "none" };
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { ActionTrigger, ActionTriggerProvider, useActionTrigger, useClickBehavior };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=click-behavior.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"click-behavior.js","names":[],"sources":["../../resources/js/ui/click-behavior.tsx"],"sourcesContent":["import type { Method } from \"@inertiajs/core\";\nimport { createContext, useContext, type ReactNode } from \"react\";\nimport type { Node } from \"@lattice-php/lattice/core/types\";\nimport { getActionEffects } from \"@lattice-php/lattice/effects/dispatch\";\nimport { useEffectDispatcher } from \"@lattice-php/lattice/effects/use-effect-dispatcher\";\nimport type { Effect } from \"@lattice-php/lattice/types/generated\";\n\nexport type ClickBehavior =\n | { kind: \"navigate\"; href: string; method: Method }\n | { kind: \"action\"; action: Node<\"action\"> }\n | { kind: \"effects\"; onClick: () => void }\n | { kind: \"none\" };\n\nexport type TriggerState = { onClick: () => void; processing: boolean };\n\nexport type ActionTriggerRenderer = (props: {\n action: Node<\"action\">;\n children: (trigger: TriggerState) => ReactNode;\n}) => ReactNode;\n\nconst ActionTriggerContext = createContext<ActionTriggerRenderer | null>(null);\n\nexport function ActionTriggerProvider({\n children,\n render,\n}: {\n children: ReactNode;\n render: ActionTriggerRenderer;\n}) {\n return <ActionTriggerContext.Provider value={render}>{children}</ActionTriggerContext.Provider>;\n}\n\nexport function useActionTrigger(): ActionTriggerRenderer | null {\n return useContext(ActionTriggerContext);\n}\n\nexport function ActionTrigger({\n action,\n children,\n}: {\n action: Node<\"action\">;\n children: (trigger: TriggerState) => ReactNode;\n}) {\n const render = useActionTrigger();\n\n if (!render) {\n throw new Error(\"Action triggers require an ActionTriggerProvider.\");\n }\n\n return <>{render({ action, children })}</>;\n}\n\nexport function useClickBehavior(props: {\n href?: string | null;\n method?: Method | null;\n action?: Node | null;\n effects?: Effect[] | null;\n}): ClickBehavior {\n const dispatch = useEffectDispatcher();\n const action = (props.action ?? null) as Node<\"action\"> | null;\n const effects = props.effects ?? [];\n\n if (action) {\n return { kind: \"action\", action };\n }\n\n if (effects.length > 0) {\n return { kind: \"effects\", onClick: () => dispatch(getActionEffects(effects)) };\n }\n\n if (props.href != null && props.href !== \"\") {\n return { kind: \"navigate\", href: props.href, method: props.method ?? \"get\" };\n }\n\n return { kind: \"none\" };\n}\n"],"mappings":";;;;;AAoBA,IAAM,uBAAuB,cAA4C,IAAI;AAE7E,SAAgB,sBAAsB,EACpC,UACA,UAIC;CACD,OAAO,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO;EAAS;CAAwC,CAAA;AAChG;AAEA,SAAgB,mBAAiD;CAC/D,OAAO,WAAW,oBAAoB;AACxC;AAEA,SAAgB,cAAc,EAC5B,QACA,YAIC;CACD,MAAM,SAAS,iBAAiB;CAEhC,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,mDAAmD;CAGrE,OAAO,oBAAA,YAAA,EAAA,UAAG,OAAO;EAAE;EAAQ;CAAS,CAAC,EAAI,CAAA;AAC3C;AAEA,SAAgB,iBAAiB,OAKf;CAChB,MAAM,WAAW,oBAAoB;CACrC,MAAM,SAAU,MAAM,UAAU;CAChC,MAAM,UAAU,MAAM,WAAW,CAAC;CAElC,IAAI,QACF,OAAO;EAAE,MAAM;EAAU;CAAO;CAGlC,IAAI,QAAQ,SAAS,GACnB,OAAO;EAAE,MAAM;EAAW,eAAe,SAAS,iBAAiB,OAAO,CAAC;CAAE;CAG/E,IAAI,MAAM,QAAQ,QAAQ,MAAM,SAAS,IACvC,OAAO;EAAE,MAAM;EAAY,MAAM,MAAM;EAAM,QAAQ,MAAM,UAAU;CAAM;CAG7E,OAAO,EAAE,MAAM,OAAO;AACxB"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Icon } from "
|
|
3
|
-
import { Renderer } from "../renderer.js";
|
|
4
|
-
import { nodeIdentity, prefixedTestId } from "../test-id.js";
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { Icon } from "../icons/sprite.js";
|
|
3
|
+
import { Renderer } from "../core/renderer.js";
|
|
4
|
+
import { nodeIdentity, prefixedTestId } from "../core/test-id.js";
|
|
5
5
|
import { InfoTooltip } from "./info-tooltip.js";
|
|
6
|
-
import { toNodes } from "../nodes.js";
|
|
6
|
+
import { toNodes } from "../core/nodes.js";
|
|
7
7
|
import { useState } from "react";
|
|
8
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
-
//#region resources/js/
|
|
9
|
+
//#region resources/js/ui/collapsible.tsx
|
|
10
10
|
function readStored(key, remember, fallback) {
|
|
11
11
|
if (!remember || typeof window === "undefined") return fallback;
|
|
12
12
|
const stored = window.localStorage.getItem(key);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.js","names":[],"sources":["../../resources/js/ui/collapsible.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { Icon } from \"@lattice-php/lattice/icons\";\nimport { Renderer } from \"@lattice-php/lattice/core/renderer\";\nimport { InfoTooltip } from \"./info-tooltip\";\nimport { nodeIdentity, prefixedTestId } from \"@lattice-php/lattice/core/test-id\";\nimport { toNodes } from \"@lattice-php/lattice/core/nodes\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction readStored(key: string, remember: boolean, fallback: boolean): boolean {\n if (!remember || typeof window === \"undefined\") {\n return fallback;\n }\n\n const stored = window.localStorage.getItem(key);\n\n return stored === null ? fallback : stored === \"true\";\n}\n\nconst CollapsibleComponent: RendererComponent<\"collapsible\"> = ({ children, node }) => {\n const rememberState = node.props.rememberState === true;\n const trigger = toNodes(node.props.trigger);\n const identity = nodeIdentity(node);\n const storageKey = `lattice:collapsible:${identity ?? \"default\"}`;\n const contentId = `${identity ?? \"collapsible\"}-content`;\n\n const [open, setOpen] = useState(() =>\n readStored(storageKey, rememberState, node.props.collapsed === false),\n );\n\n function toggle(): void {\n setOpen((value) => {\n const next = !value;\n\n if (rememberState && typeof window !== \"undefined\") {\n window.localStorage.setItem(storageKey, String(next));\n }\n\n return next;\n });\n }\n\n return (\n <div data-slot=\"collapsible\" data-lattice-component={identity}>\n <div\n aria-controls={contentId}\n aria-expanded={open}\n data-test={prefixedTestId(\"collapsible-toggle\", identity) ?? \"collapsible-toggle-default\"}\n className=\"flex w-full cursor-pointer items-center justify-between gap-4 rounded-lt-sm py-2 text-left text-lt-fg transition-colors hover:bg-lt-muted\"\n onClick={toggle}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n toggle();\n }\n }}\n role=\"button\"\n tabIndex={0}\n >\n <div className=\"flex min-w-0 flex-1 items-center gap-2\">\n <Renderer nodes={trigger} />\n {node.props.tooltip && (\n <span\n role=\"presentation\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n <InfoTooltip content={node.props.tooltip} />\n </span>\n )}\n </div>\n <Icon\n name=\"chevron-down\"\n className={cn(\n \"size-lt-icon-md shrink-0 text-lt-muted-fg transition-transform\",\n !open && \"-rotate-90\",\n )}\n />\n </div>\n\n {open && children && (\n <div id={contentId} className=\"flex flex-col gap-4 pt-2\">\n {children}\n </div>\n )}\n </div>\n );\n};\n\nexport default CollapsibleComponent;\n"],"mappings":";;;;;;;;;AASA,SAAS,WAAW,KAAa,UAAmB,UAA4B;CAC9E,IAAI,CAAC,YAAY,OAAO,WAAW,aACjC,OAAO;CAGT,MAAM,SAAS,OAAO,aAAa,QAAQ,GAAG;CAE9C,OAAO,WAAW,OAAO,WAAW,WAAW;AACjD;AAEA,IAAM,wBAA0D,EAAE,UAAU,WAAW;CACrF,MAAM,gBAAgB,KAAK,MAAM,kBAAkB;CACnD,MAAM,UAAU,QAAQ,KAAK,MAAM,OAAO;CAC1C,MAAM,WAAW,aAAa,IAAI;CAClC,MAAM,aAAa,uBAAuB,YAAY;CACtD,MAAM,YAAY,GAAG,YAAY,cAAc;CAE/C,MAAM,CAAC,MAAM,WAAW,eACtB,WAAW,YAAY,eAAe,KAAK,MAAM,cAAc,KAAK,CACtE;CAEA,SAAS,SAAe;EACtB,SAAS,UAAU;GACjB,MAAM,OAAO,CAAC;GAEd,IAAI,iBAAiB,OAAO,WAAW,aACrC,OAAO,aAAa,QAAQ,YAAY,OAAO,IAAI,CAAC;GAGtD,OAAO;EACT,CAAC;CACH;CAEA,OACE,qBAAC,OAAD;EAAK,aAAU;EAAc,0BAAwB;YAArD,CACE,qBAAC,OAAD;GACE,iBAAe;GACf,iBAAe;GACf,aAAW,eAAe,sBAAsB,QAAQ,KAAK;GAC7D,WAAU;GACV,SAAS;GACT,YAAY,UAAU;IACpB,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;KAC9C,MAAM,eAAe;KACrB,OAAO;IACT;GACF;GACA,MAAK;GACL,UAAU;aAbZ,CAeE,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,UAAD,EAAU,OAAO,QAAU,CAAA,GAC1B,KAAK,MAAM,WACV,oBAAC,QAAD;KACE,MAAK;KACL,UAAU,UAAU,MAAM,gBAAgB;KAC1C,YAAY,UAAU,MAAM,gBAAgB;eAE5C,oBAAC,aAAD,EAAa,SAAS,KAAK,MAAM,QAAU,CAAA;IACvC,CAAA,CAEL;OACL,oBAAC,MAAD;IACE,MAAK;IACL,WAAW,GACT,kEACA,CAAC,QAAQ,YACX;GACD,CAAA,CACE;MAEJ,QAAQ,YACP,oBAAC,OAAD;GAAK,IAAI;GAAW,WAAU;GAC3B;EACE,CAAA,CAEJ;;AAET"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Icon } from "
|
|
3
|
-
import { useT } from "
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { Icon } from "../icons/sprite.js";
|
|
3
|
+
import { useT } from "../i18n/instance.js";
|
|
4
4
|
import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
|
|
5
5
|
import { useEffect, useState } from "react";
|
|
6
6
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
//#region resources/js/
|
|
7
|
+
//#region resources/js/ui/combobox.tsx
|
|
8
8
|
var SEARCH_DEBOUNCE_MS = 250;
|
|
9
9
|
/**
|
|
10
10
|
* A popover select list with an optional search box and single/multi selection.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","names":[],"sources":["../../resources/js/ui/combobox.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport * as React from \"react\";\nimport { useEffect, useState } from \"react\";\nimport { useT } from \"@lattice-php/lattice/i18n\";\nimport type { Option } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"./popover\";\n\nconst SEARCH_DEBOUNCE_MS = 250;\n\n/**\n * A popover select list with an optional search box and single/multi selection.\n *\n * Selection state is controlled by the consumer (`selected` + `onSelect`); the\n * consumer also owns option fetching. Pass `onSearch` for remote search (the\n * combobox debounces the query and renders `options` as given); omit it to\n * filter the provided `options` locally by label. The combobox closes itself\n * after a single-select.\n */\nfunction Combobox({\n contentClassName,\n emptyLabel,\n loading = false,\n multiple = false,\n onSearch,\n onSelect,\n open,\n onOpenChange,\n options,\n searchLabel,\n searchPlaceholder,\n selected,\n showSearch = true,\n testId,\n trigger,\n triggerClassName,\n triggerProps,\n}: {\n contentClassName?: string;\n emptyLabel?: string;\n loading?: boolean;\n multiple?: boolean;\n onSearch?: (query: string) => void;\n onSelect: (value: string) => void;\n open: boolean;\n onOpenChange: (open: boolean) => void;\n options: Option[];\n searchLabel?: string;\n searchPlaceholder?: string;\n selected: string[];\n showSearch?: boolean;\n testId?: string;\n trigger: React.ReactNode;\n triggerClassName?: string;\n triggerProps?: React.ComponentProps<\"button\"> & { \"data-test\"?: string };\n}) {\n const { t } = useT(\"lattice\");\n const [query, setQuery] = useState(\"\");\n\n useEffect(() => {\n if (!onSearch || !open) {\n return;\n }\n\n const timer = window.setTimeout(() => onSearch(query), SEARCH_DEBOUNCE_MS);\n\n return () => window.clearTimeout(timer);\n }, [query, onSearch, open]);\n\n const visibleOptions = onSearch\n ? options\n : options.filter((option) => option.label.toLowerCase().includes(query.toLowerCase()));\n\n function close(): void {\n setQuery(\"\");\n onOpenChange(false);\n }\n\n function choose(value: string): void {\n onSelect(value);\n\n if (!multiple) {\n close();\n }\n }\n\n return (\n <Popover open={open} onOpenChange={(next) => (next ? onOpenChange(true) : close())}>\n <PopoverTrigger asChild>\n <button type=\"button\" className={triggerClassName} {...triggerProps}>\n {trigger}\n </button>\n </PopoverTrigger>\n\n <PopoverContent\n align=\"start\"\n className={cn(\n \"w-[var(--radix-popover-trigger-width)] overflow-hidden p-0\",\n contentClassName,\n )}\n >\n {showSearch && (\n <div className=\"flex items-center gap-2 border-b border-lt-border px-3 py-2\">\n <input\n aria-label={searchLabel ?? t(\"form.searchOptions\", \"Search options\")}\n data-slot=\"combobox-search\"\n data-test={testId ? `${testId}-search` : undefined}\n className=\"w-full bg-transparent text-sm outline-none placeholder:text-lt-muted-fg\"\n onChange={(event) => setQuery(event.target.value)}\n placeholder={searchPlaceholder}\n value={query}\n />\n {loading && (\n <Icon\n name=\"loader-2\"\n aria-hidden=\"true\"\n className=\"size-lt-icon-md shrink-0 animate-spin text-lt-muted-fg\"\n />\n )}\n </div>\n )}\n\n <div className=\"max-h-60 overflow-y-auto p-1\" role=\"listbox\">\n {visibleOptions.length === 0 ? (\n <p className=\"px-3 py-2 text-sm text-lt-muted-fg\">{emptyLabel}</p>\n ) : (\n visibleOptions.map((option) => {\n const isSelected = selected.includes(option.value);\n\n return (\n <button\n aria-selected={isSelected}\n className={cn(\n \"flex w-full items-center justify-between gap-2 rounded-lt-sm px-3 py-1.5 text-left text-sm transition-colors hover:bg-lt-accent hover:text-lt-accent-fg\",\n isSelected && \"bg-lt-accent/60\",\n )}\n data-slot=\"combobox-option\"\n data-test={testId ? `${testId}-option-${option.value}` : undefined}\n data-value={option.value}\n key={option.value}\n onClick={() => choose(option.value)}\n role=\"option\"\n type=\"button\"\n >\n {option.label}\n {isSelected && (\n <Icon name=\"check\" aria-hidden=\"true\" className=\"size-lt-icon-md shrink-0\" />\n )}\n </button>\n );\n })\n )}\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nexport { Combobox };\n"],"mappings":";;;;;;;AAQA,IAAM,qBAAqB;;;;;;;;;;AAW3B,SAAS,SAAS,EAChB,kBACA,YACA,UAAU,OACV,WAAW,OACX,UACA,UACA,MACA,cACA,SACA,aACA,mBACA,UACA,aAAa,MACb,QACA,SACA,kBACA,gBAmBC;CACD,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CAErC,gBAAgB;EACd,IAAI,CAAC,YAAY,CAAC,MAChB;EAGF,MAAM,QAAQ,OAAO,iBAAiB,SAAS,KAAK,GAAG,kBAAkB;EAEzE,aAAa,OAAO,aAAa,KAAK;CACxC,GAAG;EAAC;EAAO;EAAU;CAAI,CAAC;CAE1B,MAAM,iBAAiB,WACnB,UACA,QAAQ,QAAQ,WAAW,OAAO,MAAM,YAAY,EAAE,SAAS,MAAM,YAAY,CAAC,CAAC;CAEvF,SAAS,QAAc;EACrB,SAAS,EAAE;EACX,aAAa,KAAK;CACpB;CAEA,SAAS,OAAO,OAAqB;EACnC,SAAS,KAAK;EAEd,IAAI,CAAC,UACH,MAAM;CAEV;CAEA,OACE,qBAAC,SAAD;EAAe;EAAM,eAAe,SAAU,OAAO,aAAa,IAAI,IAAI,MAAM;YAAhF,CACE,oBAAC,gBAAD;GAAgB,SAAA;aACd,oBAAC,UAAD;IAAQ,MAAK;IAAS,WAAW;IAAkB,GAAI;cACpD;GACK,CAAA;EACM,CAAA,GAEhB,qBAAC,gBAAD;GACE,OAAM;GACN,WAAW,GACT,8DACA,gBACF;aALF,CAOG,cACC,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,SAAD;KACE,cAAY,eAAe,EAAE,sBAAsB,gBAAgB;KACnE,aAAU;KACV,aAAW,SAAS,GAAG,OAAO,WAAW,KAAA;KACzC,WAAU;KACV,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;KAChD,aAAa;KACb,OAAO;IACR,CAAA,GACA,WACC,oBAAC,MAAD;KACE,MAAK;KACL,eAAY;KACZ,WAAU;IACX,CAAA,CAEA;OAGP,oBAAC,OAAD;IAAK,WAAU;IAA+B,MAAK;cAChD,eAAe,WAAW,IACzB,oBAAC,KAAD;KAAG,WAAU;eAAsC;IAAc,CAAA,IAEjE,eAAe,KAAK,WAAW;KAC7B,MAAM,aAAa,SAAS,SAAS,OAAO,KAAK;KAEjD,OACE,qBAAC,UAAD;MACE,iBAAe;MACf,WAAW,GACT,2JACA,cAAc,iBAChB;MACA,aAAU;MACV,aAAW,SAAS,GAAG,OAAO,UAAU,OAAO,UAAU,KAAA;MACzD,cAAY,OAAO;MAEnB,eAAe,OAAO,OAAO,KAAK;MAClC,MAAK;MACL,MAAK;gBAZP,CAcG,OAAO,OACP,cACC,oBAAC,MAAD;OAAM,MAAK;OAAQ,eAAY;OAAO,WAAU;MAA4B,CAAA,CAExE;QATD,OAAO,KASN;IAEZ,CAAC;GAEA,CAAA,CACS;IACT;;AAEb"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ButtonVariant } from '
|
|
1
|
+
import { ButtonVariant } from '../types/generated.js';
|
|
2
2
|
export declare function ConfirmDialog({ title, description, confirmLabel, cancelLabel, confirmVariant, processing, confirmDisabled, onConfirm, onCancel, }: {
|
|
3
3
|
title: string;
|
|
4
4
|
description?: string;
|
|
@@ -2,7 +2,7 @@ import { Button } from "./button.js";
|
|
|
2
2
|
import { Dialog, DialogContent, DialogDescription, DialogTitle } from "./dialog.js";
|
|
3
3
|
import { Spinner } from "./spinner.js";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
-
//#region resources/js/
|
|
5
|
+
//#region resources/js/ui/confirm-dialog.tsx
|
|
6
6
|
function ConfirmDialog({ title, description, confirmLabel, cancelLabel = "Cancel", confirmVariant = "default", processing = false, confirmDisabled = false, onConfirm, onCancel }) {
|
|
7
7
|
const blockWhileProcessing = (event) => {
|
|
8
8
|
if (processing) event.preventDefault();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirm-dialog.js","names":[],"sources":["../../resources/js/ui/confirm-dialog.tsx"],"sourcesContent":["import type { ButtonVariant } from \"@lattice-php/lattice/types/generated\";\nimport { Button } from \"./button\";\nimport { Dialog, DialogContent, DialogDescription, DialogTitle } from \"./dialog\";\nimport { Spinner } from \"./spinner\";\n\nexport function ConfirmDialog({\n title,\n description,\n confirmLabel,\n cancelLabel = \"Cancel\",\n confirmVariant = \"default\",\n processing = false,\n confirmDisabled = false,\n onConfirm,\n onCancel,\n}: {\n title: string;\n description?: string;\n confirmLabel: string;\n cancelLabel?: string;\n confirmVariant?: ButtonVariant;\n processing?: boolean;\n confirmDisabled?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const blockWhileProcessing = (event: Event): void => {\n if (processing) {\n event.preventDefault();\n }\n };\n\n return (\n <Dialog\n open\n onOpenChange={(open) => {\n if (!open) {\n onCancel();\n }\n }}\n >\n <DialogContent\n {...(description ? {} : { \"aria-describedby\": undefined })}\n className=\"w-full max-w-md\"\n onEscapeKeyDown={blockWhileProcessing}\n onInteractOutside={blockWhileProcessing}\n >\n <div className=\"grid gap-2\">\n <DialogTitle>{title}</DialogTitle>\n {description && <DialogDescription>{description}</DialogDescription>}\n </div>\n <div className=\"mt-6 flex justify-end gap-2\">\n <Button\n type=\"button\"\n variant=\"outline\"\n data-test=\"confirm-cancel\"\n disabled={processing}\n onClick={onCancel}\n >\n {cancelLabel}\n </Button>\n <Button\n type=\"button\"\n variant={confirmVariant}\n data-test=\"confirm-accept\"\n disabled={processing || confirmDisabled}\n onClick={onConfirm}\n >\n {processing && <Spinner />}\n {confirmLabel}\n </Button>\n </div>\n </DialogContent>\n </Dialog>\n );\n}\n"],"mappings":";;;;;AAKA,SAAgB,cAAc,EAC5B,OACA,aACA,cACA,cAAc,UACd,iBAAiB,WACjB,aAAa,OACb,kBAAkB,OAClB,WACA,YAWC;CACD,MAAM,wBAAwB,UAAuB;EACnD,IAAI,YACF,MAAM,eAAe;CAEzB;CAEA,OACE,oBAAC,QAAD;EACE,MAAA;EACA,eAAe,SAAS;GACtB,IAAI,CAAC,MACH,SAAS;EAEb;YAEA,qBAAC,eAAD;GACE,GAAK,cAAc,CAAC,IAAI,EAAE,oBAAoB,KAAA,EAAU;GACxD,WAAU;GACV,iBAAiB;GACjB,mBAAmB;aAJrB,CAME,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,aAAD,EAAA,UAAc,MAAmB,CAAA,GAChC,eAAe,oBAAC,mBAAD,EAAA,UAAoB,YAA+B,CAAA,CAChE;OACL,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,QAAD;KACE,MAAK;KACL,SAAQ;KACR,aAAU;KACV,UAAU;KACV,SAAS;eAER;IACK,CAAA,GACR,qBAAC,QAAD;KACE,MAAK;KACL,SAAS;KACT,aAAU;KACV,UAAU,cAAc;KACxB,SAAS;eALX,CAOG,cAAc,oBAAC,SAAD,CAAU,CAAA,GACxB,YACK;MACL;KACQ;;CACT,CAAA;AAEZ"}
|
|
@@ -6,5 +6,5 @@ export declare const FOCUS_RING = "focus-visible:border-lt-ring focus-visible:ri
|
|
|
6
6
|
* border, focus ring, invalid, and disabled treatment are unified.
|
|
7
7
|
*/
|
|
8
8
|
export declare const controlSurface: (props?: ({
|
|
9
|
-
density?: "
|
|
9
|
+
density?: "comfortable" | "compact" | null | undefined;
|
|
10
10
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { cva } from "class-variance-authority";
|
|
2
|
-
//#region resources/js/
|
|
2
|
+
//#region resources/js/ui/control.ts
|
|
3
3
|
var FOCUS_RING = "focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px]";
|
|
4
4
|
/**
|
|
5
5
|
* The shared chrome for single-line form/table controls (text inputs, native
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.js","names":[],"sources":["../../resources/js/ui/control.ts"],"sourcesContent":["import { cva } from \"class-variance-authority\";\n\nexport const FOCUS_RING =\n \"focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px]\";\n\n/**\n * The shared chrome for single-line form/table controls (text inputs, native\n * selects, and the Select/filter trigger buttons). `density` is the only axis\n * that differs between forms (comfortable) and table filters (compact); the\n * border, focus ring, invalid, and disabled treatment are unified.\n */\nexport const controlSurface = cva(\n [\n \"w-full min-w-0 rounded-lt-sm border border-lt-input shadow-lt-xs outline-none transition-[color,box-shadow]\",\n \"placeholder:text-lt-muted-fg\",\n FOCUS_RING,\n \"aria-invalid:border-lt-danger aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-lt-disabled disabled:text-lt-disabled-fg\",\n ],\n {\n variants: {\n density: {\n comfortable: \"h-lt-control-md bg-transparent px-3 py-1 text-base\",\n compact: \"h-lt-control-md bg-lt-bg px-2 text-sm font-normal\",\n },\n },\n defaultVariants: { density: \"comfortable\" },\n },\n);\n"],"mappings":";;AAEA,IAAa,aACX;;;;;;;AAQF,IAAa,iBAAiB,IAC5B;CACE;CACA;CACA;CACA;CACA;AACF,GACA;CACE,UAAU,EACR,SAAS;EACP,aAAa;EACb,SAAS;CACX,EACF;CACA,iBAAiB,EAAE,SAAS,cAAc;AAC5C,CACF"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import { Icon } from "../icons/sprite.js";
|
|
2
2
|
import { useT } from "../i18n/instance.js";
|
|
3
|
-
import { copyToClipboard } from "./index.js";
|
|
4
3
|
import { useEffect, useState } from "react";
|
|
5
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
//#region resources/js/
|
|
5
|
+
//#region resources/js/ui/copyable-text.tsx
|
|
6
|
+
async function copyToClipboard(text) {
|
|
7
|
+
if (!navigator?.clipboard) return false;
|
|
8
|
+
try {
|
|
9
|
+
await navigator.clipboard.writeText(text);
|
|
10
|
+
return true;
|
|
11
|
+
} catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
7
15
|
function CopyableText({ value, label, testId, children }) {
|
|
8
16
|
const { t } = useT("lattice");
|
|
9
17
|
const [copied, setCopied] = useState(false);
|
|
@@ -33,6 +41,6 @@ function CopyableText({ value, label, testId, children }) {
|
|
|
33
41
|
});
|
|
34
42
|
}
|
|
35
43
|
//#endregion
|
|
36
|
-
export { CopyableText };
|
|
44
|
+
export { CopyableText, copyToClipboard };
|
|
37
45
|
|
|
38
46
|
//# sourceMappingURL=copyable-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyable-text.js","names":[],"sources":["../../resources/js/ui/copyable-text.tsx"],"sourcesContent":["import { useT } from \"@lattice-php/lattice/i18n\";\nimport { Icon } from \"@lattice-php/lattice/icons\";\nimport { type ReactNode, useEffect, useState } from \"react\";\n\nexport async function copyToClipboard(text: string): Promise<boolean> {\n if (!navigator?.clipboard) {\n return false;\n }\n\n try {\n await navigator.clipboard.writeText(text);\n\n return true;\n } catch {\n return false;\n }\n}\n\ninterface CopyableTextProps {\n value: string;\n label: string;\n testId?: string;\n children?: ReactNode;\n}\n\nexport function CopyableText({ value, label, testId, children }: CopyableTextProps): ReactNode {\n const { t } = useT(\"lattice\");\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!copied) {\n return;\n }\n\n const timeout = window.setTimeout(() => setCopied(false), 1500);\n\n return () => window.clearTimeout(timeout);\n }, [copied]);\n\n function handleCopy(): void {\n void copyToClipboard(value);\n setCopied(true);\n }\n\n const ariaLabel = copied\n ? t(\"common.copiedValue\", \"Copied {{label}}\", { label })\n : t(\"common.copyValue\", \"Copy {{label}}\", { label });\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n {children ?? value}\n <button\n type=\"button\"\n data-test={testId}\n className=\"inline-flex items-center gap-1 rounded-lt-sm border border-lt-border px-2 py-1 text-xs\"\n aria-label={ariaLabel}\n onClick={handleCopy}\n >\n <Icon name={copied ? \"check\" : \"copy\"} className=\"size-lt-icon-xs\" />\n {copied ? t(\"common.copied\", \"Copied\") : t(\"common.copy\", \"Copy\")}\n </button>\n </div>\n );\n}\n"],"mappings":";;;;;AAIA,eAAsB,gBAAgB,MAAgC;CACpE,IAAI,CAAC,WAAW,WACd,OAAO;CAGT,IAAI;EACF,MAAM,UAAU,UAAU,UAAU,IAAI;EAExC,OAAO;CACT,QAAQ;EACN,OAAO;CACT;AACF;AASA,SAAgB,aAAa,EAAE,OAAO,OAAO,QAAQ,YAA0C;CAC7F,MAAM,EAAE,MAAM,KAAK,SAAS;CAC5B,MAAM,CAAC,QAAQ,aAAa,SAAS,KAAK;CAE1C,gBAAgB;EACd,IAAI,CAAC,QACH;EAGF,MAAM,UAAU,OAAO,iBAAiB,UAAU,KAAK,GAAG,IAAI;EAE9D,aAAa,OAAO,aAAa,OAAO;CAC1C,GAAG,CAAC,MAAM,CAAC;CAEX,SAAS,aAAmB;EAC1B,gBAAqB,KAAK;EAC1B,UAAU,IAAI;CAChB;CAEA,MAAM,YAAY,SACd,EAAE,sBAAsB,oBAAoB,EAAE,MAAM,CAAC,IACrD,EAAE,oBAAoB,kBAAkB,EAAE,MAAM,CAAC;CAErD,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACG,YAAY,OACb,qBAAC,UAAD;GACE,MAAK;GACL,aAAW;GACX,WAAU;GACV,cAAY;GACZ,SAAS;aALX,CAOE,oBAAC,MAAD;IAAM,MAAM,SAAS,UAAU;IAAQ,WAAU;GAAmB,CAAA,GACnE,SAAS,EAAE,iBAAiB,QAAQ,IAAI,EAAE,eAAe,MAAM,CAC1D;IACL;;AAET"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Icon } from "
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { Icon } from "../icons/sprite.js";
|
|
3
3
|
import { Button } from "./button.js";
|
|
4
4
|
import "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import * as DialogPrimitive from "@radix-ui/react-dialog";
|
|
7
|
-
//#region resources/js/
|
|
7
|
+
//#region resources/js/ui/dialog.tsx
|
|
8
8
|
var DIALOG_SURFACE = "fixed left-1/2 top-1/2 z-lt-modal -translate-x-1/2 -translate-y-1/2 rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lt-lg";
|
|
9
9
|
function Dialog(props) {
|
|
10
10
|
return /* @__PURE__ */ jsx(DialogPrimitive.Root, {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog.js","names":[],"sources":["../../resources/js/ui/dialog.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport * as React from \"react\";\nimport { Button } from \"@lattice-php/lattice/ui/button\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nexport const DIALOG_SURFACE =\n \"fixed left-1/2 top-1/2 z-lt-modal -translate-x-1/2 -translate-y-1/2 rounded-lt border border-lt-border bg-lt-bg p-6 shadow-lt-lg\";\n\nfunction Dialog(props: React.ComponentProps<typeof DialogPrimitive.Root>) {\n return <DialogPrimitive.Root data-slot=\"dialog\" {...props} />;\n}\n\nfunction DialogClose(props: React.ComponentProps<typeof DialogPrimitive.Close>) {\n return <DialogPrimitive.Close data-slot=\"dialog-close\" {...props} />;\n}\n\nfunction DialogTitle({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>) {\n return (\n <DialogPrimitive.Title\n className={cn(\"text-lg font-semibold leading-none tracking-tight\", className)}\n data-slot=\"dialog-title\"\n {...props}\n />\n );\n}\n\nfunction DialogDescription({\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Description>) {\n return (\n <DialogPrimitive.Description\n className={cn(\"text-sm text-lt-muted-fg\", className)}\n data-slot=\"dialog-description\"\n {...props}\n />\n );\n}\n\nfunction DialogContent({\n children,\n className,\n ...props\n}: React.ComponentProps<typeof DialogPrimitive.Content>) {\n return (\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className=\"fixed inset-0 z-lt-overlay bg-lt-overlay\"\n data-slot=\"dialog-overlay\"\n />\n <DialogPrimitive.Content\n className={cn(DIALOG_SURFACE, className)}\n data-slot=\"dialog-content\"\n {...props}\n >\n {children}\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n );\n}\n\n/**\n * The shared dialog header: a title with an optional description and a ghost\n * close button. Pass `description` as `undefined` to suppress the description\n * and the matching `aria-describedby` wiring on the content.\n */\nfunction DialogHeader({\n closeLabel,\n description,\n title,\n}: {\n closeLabel?: string;\n description?: React.ReactNode;\n title: React.ReactNode;\n}) {\n return (\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"grid gap-2\">\n <DialogTitle>{title}</DialogTitle>\n {description ? <DialogDescription>{description}</DialogDescription> : null}\n </div>\n <DialogClose asChild>\n <Button aria-label={closeLabel} data-test=\"dialog-close\" size=\"icon\" variant=\"ghost\">\n <Icon name=\"x\" aria-hidden=\"true\" className=\"size-lt-icon-md\" />\n </Button>\n </DialogClose>\n </div>\n );\n}\n\nexport { Dialog, DialogClose, DialogContent, DialogDescription, DialogHeader, DialogTitle };\n"],"mappings":";;;;;;;AAMA,IAAa,iBACX;AAEF,SAAS,OAAO,OAA0D;CACxE,OAAO,oBAAC,gBAAgB,MAAjB;EAAsB,aAAU;EAAS,GAAI;CAAQ,CAAA;AAC9D;AAEA,SAAS,YAAY,OAA2D;CAC9E,OAAO,oBAAC,gBAAgB,OAAjB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAA6D;CAChG,OACE,oBAAC,gBAAgB,OAAjB;EACE,WAAW,GAAG,qDAAqD,SAAS;EAC5E,aAAU;EACV,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,kBAAkB,EACzB,WACA,GAAG,SACwD;CAC3D,OACE,oBAAC,gBAAgB,aAAjB;EACE,WAAW,GAAG,4BAA4B,SAAS;EACnD,aAAU;EACV,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,cAAc,EACrB,UACA,WACA,GAAG,SACoD;CACvD,OACE,qBAAC,gBAAgB,QAAjB,EAAA,UAAA,CACE,oBAAC,gBAAgB,SAAjB;EACE,WAAU;EACV,aAAU;CACX,CAAA,GACD,oBAAC,gBAAgB,SAAjB;EACE,WAAW,GAAG,gBAAgB,SAAS;EACvC,aAAU;EACV,GAAI;EAEH;CACsB,CAAA,CACH,EAAA,CAAA;AAE5B;;;;;;AAOA,SAAS,aAAa,EACpB,YACA,aACA,SAKC;CACD,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,aAAD,EAAA,UAAc,MAAmB,CAAA,GAChC,cAAc,oBAAC,mBAAD,EAAA,UAAoB,YAA+B,CAAA,IAAI,IACnE;MACL,oBAAC,aAAD;GAAa,SAAA;aACX,oBAAC,QAAD;IAAQ,cAAY;IAAY,aAAU;IAAe,MAAK;IAAO,SAAQ;cAC3E,oBAAC,MAAD;KAAM,MAAK;KAAI,eAAY;KAAO,WAAU;IAAmB,CAAA;GACzD,CAAA;EACG,CAAA,CACV;;AAET"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Popover, PopoverContent, PopoverTrigger } from './popover';
|
|
1
|
+
import { Popover, PopoverContent, PopoverTrigger } from './popover.js';
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
declare function DropdownMenu(props: React.ComponentProps<typeof Popover>): React.JSX.Element;
|
|
4
4
|
declare function DropdownMenuTrigger(props: React.ComponentProps<typeof PopoverTrigger>): React.JSX.Element;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { Icon } from "
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { Icon } from "../icons/sprite.js";
|
|
3
3
|
import { Popover, PopoverClose, PopoverContent, PopoverTrigger } from "./popover.js";
|
|
4
4
|
import "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
//#region resources/js/
|
|
6
|
+
//#region resources/js/ui/dropdown-menu.tsx
|
|
7
7
|
function DropdownMenu(props) {
|
|
8
8
|
return /* @__PURE__ */ jsx(Popover, { ...props });
|
|
9
9
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown-menu.js","names":[],"sources":["../../resources/js/ui/dropdown-menu.tsx"],"sourcesContent":["import { Icon } from \"@lattice-php/lattice/icons\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { Popover, PopoverClose, PopoverContent, PopoverTrigger } from \"./popover\";\n\nfunction DropdownMenu(props: React.ComponentProps<typeof Popover>) {\n return <Popover {...props} />;\n}\n\nfunction DropdownMenuTrigger(props: React.ComponentProps<typeof PopoverTrigger>) {\n return <PopoverTrigger {...props} />;\n}\n\nfunction DropdownMenuContent({ className, ...props }: React.ComponentProps<typeof PopoverContent>) {\n return (\n <PopoverContent className={cn(\"grid min-w-40 gap-1 p-1\", className)} role=\"menu\" {...props} />\n );\n}\n\n/**\n * A menu entry that closes the menu when activated. Wrap the click handler in\n * `onClick`; selecting the item dismisses the popover via `PopoverClose`.\n */\nfunction DropdownMenuItem({\n children,\n className,\n destructive = false,\n icon,\n ...props\n}: React.ComponentProps<\"button\"> & { destructive?: boolean; icon?: string }) {\n return (\n <PopoverClose asChild>\n <button\n type=\"button\"\n role=\"menuitem\"\n className={cn(\n \"flex w-full items-center gap-2 rounded-lt-sm px-3 py-1.5 text-left text-sm [&_svg]:size-lt-icon-sm\",\n destructive\n ? \"text-lt-danger hover:bg-lt-danger/10\"\n : \"hover:bg-lt-accent hover:text-lt-accent-fg\",\n className,\n )}\n {...props}\n >\n {icon ? <Icon name={icon} aria-hidden=\"true\" /> : null}\n {children}\n </button>\n </PopoverClose>\n );\n}\n\nexport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger };\n"],"mappings":";;;;;;AAKA,SAAS,aAAa,OAA6C;CACjE,OAAO,oBAAC,SAAD,EAAS,GAAI,MAAQ,CAAA;AAC9B;AAEA,SAAS,oBAAoB,OAAoD;CAC/E,OAAO,oBAAC,gBAAD,EAAgB,GAAI,MAAQ,CAAA;AACrC;AAEA,SAAS,oBAAoB,EAAE,WAAW,GAAG,SAAsD;CACjG,OACE,oBAAC,gBAAD;EAAgB,WAAW,GAAG,2BAA2B,SAAS;EAAG,MAAK;EAAO,GAAI;CAAQ,CAAA;AAEjG;;;;;AAMA,SAAS,iBAAiB,EACxB,UACA,WACA,cAAc,OACd,MACA,GAAG,SACyE;CAC5E,OACE,oBAAC,cAAD;EAAc,SAAA;YACZ,qBAAC,UAAD;GACE,MAAK;GACL,MAAK;GACL,WAAW,GACT,sGACA,cACI,yCACA,8CACJ,SACF;GACA,GAAI;aAVN,CAYG,OAAO,oBAAC,MAAD;IAAM,MAAM;IAAM,eAAY;GAAQ,CAAA,IAAI,MACjD,QACK;;CACI,CAAA;AAElB"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { RenderNode } from "../renderer.js";
|
|
3
|
-
import { nodeIdentity } from "../test-id.js";
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { RenderNode } from "../core/renderer.js";
|
|
3
|
+
import { nodeIdentity } from "../core/test-id.js";
|
|
4
4
|
import { useState } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
//#region resources/js/
|
|
6
|
+
//#region resources/js/ui/floating-panel.tsx
|
|
7
7
|
function placementStyle(placement, offset) {
|
|
8
8
|
if (placement === "top-start") return {
|
|
9
9
|
left: offset,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"floating-panel.js","names":[],"sources":["../../resources/js/ui/floating-panel.tsx"],"sourcesContent":["import { type CSSProperties, useState } from \"react\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport type { FloatingPlacement } from \"@lattice-php/lattice/types/generated\";\nimport { RenderNode } from \"@lattice-php/lattice/core/renderer\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\n\nfunction placementStyle(placement: FloatingPlacement, offset: number): CSSProperties {\n if (placement === \"top-start\") {\n return { left: offset, top: offset };\n }\n\n if (placement === \"top-end\") {\n return { right: offset, top: offset };\n }\n\n if (placement === \"bottom-start\") {\n return { bottom: offset, left: offset };\n }\n\n return { bottom: offset, right: offset };\n}\n\nconst FloatingPanelComponent: RendererComponent<\"floating-panel\"> = ({ children, node }) => {\n const label = node.props.label ?? undefined;\n const offset = Math.max(0, node.props.offset ?? 16);\n const placement = node.props.placement ?? \"bottom-end\";\n const trigger = node.props.trigger ?? [];\n const [open, setOpen] = useState(false);\n\n if (trigger.length === 0) {\n return (\n <div\n aria-label={label}\n className=\"fixed z-lt-popover max-w-[calc(100vw-2rem)] rounded-lt border border-lt-border bg-lt-popover p-1 text-lt-popover-fg shadow-lt-md\"\n data-lattice-component={nodeIdentity(node)}\n role={label ? \"group\" : undefined}\n style={placementStyle(placement, offset)}\n >\n {children}\n </div>\n );\n }\n\n const expandsUpward = placement === \"bottom-start\" || placement === \"bottom-end\";\n const anchorsToStart = placement === \"top-start\" || placement === \"bottom-start\";\n\n return (\n <div\n aria-label={label}\n className=\"fixed z-lt-popover max-w-[calc(100vw-2rem)]\"\n data-lattice-component={nodeIdentity(node)}\n role={label ? \"group\" : undefined}\n style={placementStyle(placement, offset)}\n >\n <div className={cn(\"flex w-fit gap-2\", expandsUpward ? \"flex-col-reverse\" : \"flex-col\")}>\n <button\n aria-expanded={open}\n className={cn(\n \"inline-flex items-center gap-2 rounded-lt border border-lt-border bg-lt-popover px-3 py-1.5 text-sm font-medium text-lt-popover-fg shadow-lt-md hover:bg-lt-muted\",\n anchorsToStart ? \"self-start\" : \"self-end\",\n )}\n data-test={node.key ? `${node.key}-trigger` : undefined}\n onClick={() => setOpen((value) => !value)}\n type=\"button\"\n >\n {trigger.map((triggerNode, index) => (\n <RenderNode\n key={triggerNode.key ?? `${triggerNode.type}-${index}`}\n node={triggerNode}\n />\n ))}\n </button>\n <div className={open ? \"block\" : \"hidden\"}>{children}</div>\n </div>\n </div>\n );\n};\n\nexport default FloatingPanelComponent;\n"],"mappings":";;;;;;AAOA,SAAS,eAAe,WAA8B,QAA+B;CACnF,IAAI,cAAc,aAChB,OAAO;EAAE,MAAM;EAAQ,KAAK;CAAO;CAGrC,IAAI,cAAc,WAChB,OAAO;EAAE,OAAO;EAAQ,KAAK;CAAO;CAGtC,IAAI,cAAc,gBAChB,OAAO;EAAE,QAAQ;EAAQ,MAAM;CAAO;CAGxC,OAAO;EAAE,QAAQ;EAAQ,OAAO;CAAO;AACzC;AAEA,IAAM,0BAA+D,EAAE,UAAU,WAAW;CAC1F,MAAM,QAAQ,KAAK,MAAM,SAAS,KAAA;CAClC,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK,MAAM,UAAU,EAAE;CAClD,MAAM,YAAY,KAAK,MAAM,aAAa;CAC1C,MAAM,UAAU,KAAK,MAAM,WAAW,CAAC;CACvC,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,IAAI,QAAQ,WAAW,GACrB,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EACV,0BAAwB,aAAa,IAAI;EACzC,MAAM,QAAQ,UAAU,KAAA;EACxB,OAAO,eAAe,WAAW,MAAM;EAEtC;CACE,CAAA;CAIT,MAAM,gBAAgB,cAAc,kBAAkB,cAAc;CACpE,MAAM,iBAAiB,cAAc,eAAe,cAAc;CAElE,OACE,oBAAC,OAAD;EACE,cAAY;EACZ,WAAU;EACV,0BAAwB,aAAa,IAAI;EACzC,MAAM,QAAQ,UAAU,KAAA;EACxB,OAAO,eAAe,WAAW,MAAM;YAEvC,qBAAC,OAAD;GAAK,WAAW,GAAG,oBAAoB,gBAAgB,qBAAqB,UAAU;aAAtF,CACE,oBAAC,UAAD;IACE,iBAAe;IACf,WAAW,GACT,qKACA,iBAAiB,eAAe,UAClC;IACA,aAAW,KAAK,MAAM,GAAG,KAAK,IAAI,YAAY,KAAA;IAC9C,eAAe,SAAS,UAAU,CAAC,KAAK;IACxC,MAAK;cAEJ,QAAQ,KAAK,aAAa,UACzB,oBAAC,YAAD,EAEE,MAAM,YACP,GAFM,YAAY,OAAO,GAAG,YAAY,KAAK,GAAG,OAEhD,CACF;GACK,CAAA,GACR,oBAAC,OAAD;IAAK,WAAW,OAAO,UAAU;IAAW;GAAc,CAAA,CACvD;;CACF,CAAA;AAET"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { LATTICE_EVENT } from "
|
|
2
|
-
import { Renderer } from "../renderer.js";
|
|
3
|
-
import { apiJson } from "../api.js";
|
|
1
|
+
import { LATTICE_EVENT } from "../events/event-names.js";
|
|
2
|
+
import { Renderer } from "../core/renderer.js";
|
|
3
|
+
import { apiJson } from "../core/api.js";
|
|
4
4
|
import { Skeleton } from "./skeleton.js";
|
|
5
|
-
import { toNodes } from "../nodes.js";
|
|
5
|
+
import { toNodes } from "../core/nodes.js";
|
|
6
6
|
import { useCallback, useEffect, useState } from "react";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
8
|
-
//#region resources/js/
|
|
8
|
+
//#region resources/js/ui/fragment.tsx
|
|
9
9
|
var fragmentSizeHeights = {
|
|
10
10
|
lg: 320,
|
|
11
11
|
md: 64,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fragment.js","names":[],"sources":["../../resources/js/ui/fragment.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from \"react\";\nimport { apiJson } from \"@lattice-php/lattice/core/api\";\nimport { Skeleton } from \"@lattice-php/lattice/ui/skeleton\";\nimport { Renderer } from \"@lattice-php/lattice/core/renderer\";\nimport type { RendererComponent, Schema } from \"@lattice-php/lattice/core/types\";\nimport { toNodes } from \"@lattice-php/lattice/core/nodes\";\nimport { LATTICE_EVENT, type ReloadComponentEvent } from \"@lattice-php/lattice/events/event-names\";\n\ntype FragmentResponse = {\n schema?: Schema;\n};\n\nconst fragmentSizeHeights = {\n lg: 320,\n md: 64,\n sm: 40,\n xl: 384,\n xs: 32,\n \"2xl\": 448,\n \"3xl\": 512,\n \"4xl\": 576,\n} as const;\n\nconst FragmentComponent: RendererComponent<\"fragment\"> = ({ node }) => {\n const endpoint = node.props.endpoint ?? \"\";\n const isLazy = node.props.lazy === true;\n const componentRef = node.props.ref ?? \"\";\n const placeholderHeight = fragmentSizeHeights[node.props.size];\n const [components, setComponents] = useState(() => node.schema ?? []);\n const [hasLoaded, setHasLoaded] = useState(!isLazy);\n const [processing, setProcessing] = useState(isLazy && endpoint !== \"\");\n\n const load = useCallback(async (): Promise<void> => {\n if (!endpoint) {\n return;\n }\n\n setProcessing(true);\n\n try {\n const result = await apiJson<FragmentResponse>(endpoint, { ref: componentRef });\n\n setComponents(toNodes(result.schema));\n setHasLoaded(true);\n } finally {\n setProcessing(false);\n }\n }, [endpoint, componentRef]);\n\n useEffect(() => {\n if (!isLazy || hasLoaded) {\n return;\n }\n\n void load();\n }, [hasLoaded, isLazy, load]);\n\n useEffect(() => {\n function reload(event: Event): void {\n const detail = (event as ReloadComponentEvent).detail;\n\n if (detail?.component !== node.id) {\n return;\n }\n\n void load();\n }\n\n window.addEventListener(LATTICE_EVENT.reloadComponent, reload);\n\n return () => window.removeEventListener(LATTICE_EVENT.reloadComponent, reload);\n }, [load, node.id]);\n\n useEffect(() => {\n function reloadOnLocaleChange(): void {\n if (!hasLoaded) {\n return;\n }\n\n void load();\n }\n\n window.addEventListener(LATTICE_EVENT.localeChange, reloadOnLocaleChange);\n\n return () => window.removeEventListener(LATTICE_EVENT.localeChange, reloadOnLocaleChange);\n }, [hasLoaded, load]);\n\n return (\n <div\n data-lattice-fragment={node.id}\n style={processing && components.length === 0 ? { minHeight: placeholderHeight } : undefined}\n >\n {processing && components.length === 0 ? (\n <Skeleton className=\"w-full\" style={{ height: placeholderHeight }} />\n ) : (\n <Renderer nodes={components} />\n )}\n </div>\n );\n};\n\nexport default FragmentComponent;\n"],"mappings":";;;;;;;;AAYA,IAAM,sBAAsB;CAC1B,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,OAAO;CACP,OAAO;AACT;AAEA,IAAM,qBAAoD,EAAE,WAAW;CACrE,MAAM,WAAW,KAAK,MAAM,YAAY;CACxC,MAAM,SAAS,KAAK,MAAM,SAAS;CACnC,MAAM,eAAe,KAAK,MAAM,OAAO;CACvC,MAAM,oBAAoB,oBAAoB,KAAK,MAAM;CACzD,MAAM,CAAC,YAAY,iBAAiB,eAAe,KAAK,UAAU,CAAC,CAAC;CACpE,MAAM,CAAC,WAAW,gBAAgB,SAAS,CAAC,MAAM;CAClD,MAAM,CAAC,YAAY,iBAAiB,SAAS,UAAU,aAAa,EAAE;CAEtE,MAAM,OAAO,YAAY,YAA2B;EAClD,IAAI,CAAC,UACH;EAGF,cAAc,IAAI;EAElB,IAAI;GAGF,cAAc,SAAQ,MAFD,QAA0B,UAAU,EAAE,KAAK,aAAa,CAAC,GAEjD,MAAM,CAAC;GACpC,aAAa,IAAI;EACnB,UAAU;GACR,cAAc,KAAK;EACrB;CACF,GAAG,CAAC,UAAU,YAAY,CAAC;CAE3B,gBAAgB;EACd,IAAI,CAAC,UAAU,WACb;EAGF,KAAU;CACZ,GAAG;EAAC;EAAW;EAAQ;CAAI,CAAC;CAE5B,gBAAgB;EACd,SAAS,OAAO,OAAoB;GAGlC,IAFgB,MAA+B,QAEnC,cAAc,KAAK,IAC7B;GAGF,KAAU;EACZ;EAEA,OAAO,iBAAiB,cAAc,iBAAiB,MAAM;EAE7D,aAAa,OAAO,oBAAoB,cAAc,iBAAiB,MAAM;CAC/E,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC;CAElB,gBAAgB;EACd,SAAS,uBAA6B;GACpC,IAAI,CAAC,WACH;GAGF,KAAU;EACZ;EAEA,OAAO,iBAAiB,cAAc,cAAc,oBAAoB;EAExE,aAAa,OAAO,oBAAoB,cAAc,cAAc,oBAAoB;CAC1F,GAAG,CAAC,WAAW,IAAI,CAAC;CAEpB,OACE,oBAAC,OAAD;EACE,yBAAuB,KAAK;EAC5B,OAAO,cAAc,WAAW,WAAW,IAAI,EAAE,WAAW,kBAAkB,IAAI,KAAA;YAEjF,cAAc,WAAW,WAAW,IACnC,oBAAC,UAAD;GAAU,WAAU;GAAS,OAAO,EAAE,QAAQ,kBAAkB;EAAI,CAAA,IAEpE,oBAAC,UAAD,EAAU,OAAO,WAAa,CAAA;CAE7B,CAAA;AAET"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { cn } from "
|
|
2
|
-
import { nodeIdentity } from "../test-id.js";
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
|
+
import { nodeIdentity } from "../core/test-id.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
|
-
//#region resources/js/
|
|
4
|
+
//#region resources/js/ui/grid.tsx
|
|
5
5
|
var GridComponent = ({ children, node }) => {
|
|
6
6
|
const columns = Math.min(Math.max(node.props.columns ?? 1, 1), 4);
|
|
7
7
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.js","names":[],"sources":["../../resources/js/ui/grid.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { nodeIdentity } from \"@lattice-php/lattice/core/test-id\";\n\nconst GridComponent: RendererComponent<\"grid\"> = ({ children, node }) => {\n const columns = Math.min(Math.max(node.props.columns ?? 1, 1), 4);\n\n return (\n <div\n data-slot=\"grid\"\n data-lattice-component={nodeIdentity(node)}\n className={cn(\n \"grid gap-x-4 gap-y-6\",\n columns >= 2 && \"md:grid-cols-2\",\n columns >= 3 && \"lg:grid-cols-3\",\n columns >= 4 && \"xl:grid-cols-4\",\n )}\n >\n {children}\n </div>\n );\n};\n\nexport default GridComponent;\n"],"mappings":";;;;AAIA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC;CAEhE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,0BAAwB,aAAa,IAAI;EACzC,WAAW,GACT,wBACA,WAAW,KAAK,kBAChB,WAAW,KAAK,kBAChB,WAAW,KAAK,gBAClB;EAEC;CACE,CAAA;AAET"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { cn } from "
|
|
1
|
+
import { cn } from "../lib/utils.js";
|
|
2
2
|
import { InfoTooltip } from "./info-tooltip.js";
|
|
3
3
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
-
//#region resources/js/
|
|
4
|
+
//#region resources/js/ui/heading.tsx
|
|
5
5
|
var HeadingComponent = ({ node }) => {
|
|
6
6
|
const { text, tooltip } = node.props;
|
|
7
7
|
const level = Math.min(Math.max(node.props.level, 1), 6);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heading.js","names":[],"sources":["../../resources/js/ui/heading.tsx"],"sourcesContent":["import type { RendererComponent } from \"@lattice-php/lattice/core/types\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport { InfoTooltip } from \"./info-tooltip\";\n\nconst HeadingComponent: RendererComponent<\"heading\"> = ({ node }) => {\n const { text, tooltip } = node.props;\n const level = Math.min(Math.max(node.props.level, 1), 6);\n const className = cn(\n \"max-w-3xl font-semibold tracking-normal text-balance text-lt-fg\",\n level === 1 && \"text-2xl font-bold leading-tight\",\n level === 2 && \"text-xl\",\n level > 2 && \"text-base\",\n );\n\n const content = (\n <>\n {text}\n <InfoTooltip content={tooltip} />\n </>\n );\n\n switch (level) {\n case 1:\n return <h1 className={className}>{content}</h1>;\n case 2:\n return <h2 className={className}>{content}</h2>;\n case 3:\n return <h3 className={className}>{content}</h3>;\n case 4:\n return <h4 className={className}>{content}</h4>;\n case 5:\n return <h5 className={className}>{content}</h5>;\n default:\n return <h6 className={className}>{content}</h6>;\n }\n};\n\nexport default HeadingComponent;\n"],"mappings":";;;;AAIA,IAAM,oBAAkD,EAAE,WAAW;CACnE,MAAM,EAAE,MAAM,YAAY,KAAK;CAC/B,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,OAAO,CAAC,GAAG,CAAC;CACvD,MAAM,YAAY,GAChB,mEACA,UAAU,KAAK,oCACf,UAAU,KAAK,WACf,QAAQ,KAAK,WACf;CAEA,MAAM,UACJ,qBAAA,UAAA,EAAA,UAAA,CACG,MACD,oBAAC,aAAD,EAAa,SAAS,QAAU,CAAA,CAChC,EAAA,CAAA;CAGJ,QAAQ,OAAR;EACE,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAY,CAAA;EAChD,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAY,CAAA;EAChD,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAY,CAAA;EAChD,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAY,CAAA;EAChD,KAAK,GACH,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAY,CAAA;EAChD,SACE,OAAO,oBAAC,MAAD;GAAe;aAAY;EAAY,CAAA;CAClD;AACF"}
|