@lattice-php/lattice 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/action/components/action-form.d.ts +2 -2
- package/dist/action/components/action-form.js +35 -67
- package/dist/action/components/action-form.js.map +1 -1
- package/dist/action/components/action-group.js +18 -6
- package/dist/action/components/action-group.js.map +1 -1
- package/dist/action/components/action-menu-context.d.ts +6 -0
- package/dist/action/components/action-menu-context.js +18 -0
- package/dist/action/components/action-menu-context.js.map +1 -0
- package/dist/action/components/action.js +20 -13
- package/dist/action/components/action.js.map +1 -1
- package/dist/action/index.js.map +1 -1
- package/dist/appearance/index.js +7 -2
- package/dist/appearance/index.js.map +1 -1
- package/dist/chat/components/chat-box.d.ts +3 -0
- package/dist/chat/components/chat-box.js +53 -0
- package/dist/chat/components/chat-box.js.map +1 -0
- package/dist/chat/components/message-list.d.ts +5 -0
- package/dist/chat/components/message-list.js +22 -0
- package/dist/chat/components/message-list.js.map +1 -0
- package/dist/chat/components/message.d.ts +5 -0
- package/dist/chat/components/message.js +20 -0
- package/dist/chat/components/message.js.map +1 -0
- package/dist/chat/components/prompt-input.d.ts +8 -0
- package/dist/chat/components/prompt-input.js +49 -0
- package/dist/chat/components/prompt-input.js.map +1 -0
- package/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.js +15 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/parts/text.d.ts +3 -0
- package/dist/chat/parts/text.js +12 -0
- package/dist/chat/parts/text.js.map +1 -0
- package/dist/chat/parts/tool-call.d.ts +3 -0
- package/dist/chat/parts/tool-call.js +20 -0
- package/dist/chat/parts/tool-call.js.map +1 -0
- package/dist/chat/transport.d.ts +2 -0
- package/dist/chat/transport.js +47 -0
- package/dist/chat/transport.js.map +1 -0
- package/dist/chat/types.d.ts +39 -0
- package/dist/chat/use-chat.d.ts +15 -0
- package/dist/chat/use-chat.js +161 -0
- package/dist/chat/use-chat.js.map +1 -0
- package/dist/core/api.d.ts +18 -0
- package/dist/core/api.js +51 -0
- package/dist/core/api.js.map +1 -0
- package/dist/core/collapsed-context.d.ts +2 -0
- package/dist/core/collapsed-context.js +10 -0
- package/dist/core/collapsed-context.js.map +1 -0
- package/dist/core/column-sizing.d.ts +17 -0
- package/dist/core/column-sizing.js +61 -0
- package/dist/core/column-sizing.js.map +1 -0
- package/dist/core/components/badge.js.map +1 -1
- package/dist/core/components/button.d.ts +1 -1
- package/dist/core/components/button.js +4 -0
- package/dist/core/components/button.js.map +1 -1
- package/dist/core/components/card.js.map +1 -1
- package/dist/core/components/chart.d.ts +3 -0
- package/dist/core/components/chart.js +175 -0
- package/dist/core/components/chart.js.map +1 -0
- package/dist/{form/components/base → core/components}/checkbox.js +3 -3
- package/dist/{form/components/base → core/components}/checkbox.js.map +1 -1
- package/dist/core/components/combobox.d.ts +33 -0
- package/dist/core/components/combobox.js +99 -0
- package/dist/core/components/combobox.js.map +1 -0
- package/dist/core/components/confirm-dialog.js +6 -12
- package/dist/core/components/confirm-dialog.js.map +1 -1
- package/dist/core/components/control.d.ts +13 -0
- package/dist/core/components/control.js +27 -0
- package/dist/core/components/control.js.map +1 -0
- package/dist/core/components/dialog.d.ts +19 -0
- package/dist/core/components/dialog.js +75 -0
- package/dist/core/components/dialog.js.map +1 -0
- package/dist/core/components/dropdown-menu.d.ts +14 -0
- package/dist/core/components/dropdown-menu.js +42 -0
- package/dist/core/components/dropdown-menu.js.map +1 -0
- package/dist/core/components/floating-panel.d.ts +3 -0
- package/dist/core/components/floating-panel.js +65 -0
- package/dist/core/components/floating-panel.js.map +1 -0
- package/dist/core/components/fragment.js +25 -13
- package/dist/core/components/fragment.js.map +1 -1
- package/dist/core/components/grid.js.map +1 -1
- package/dist/core/components/heading.js.map +1 -1
- package/dist/core/components/icon.js +1 -0
- package/dist/core/components/icon.js.map +1 -1
- package/dist/core/components/index.js +8 -1
- package/dist/core/components/index.js.map +1 -1
- package/dist/core/components/info-tooltip.d.ts +3 -0
- package/dist/core/components/info-tooltip.js +26 -0
- package/dist/core/components/info-tooltip.js.map +1 -0
- package/dist/core/components/link.js +12 -6
- package/dist/core/components/link.js.map +1 -1
- package/dist/core/components/modal.js +9 -31
- package/dist/core/components/modal.js.map +1 -1
- package/dist/core/components/popover.d.ts +8 -0
- package/dist/core/components/popover.js +37 -0
- package/dist/core/components/popover.js.map +1 -0
- package/dist/core/components/raw-block.d.ts +3 -0
- package/dist/core/components/raw-block.js +10 -0
- package/dist/core/components/raw-block.js.map +1 -0
- package/dist/core/components/section.js +6 -10
- package/dist/core/components/section.js.map +1 -1
- package/dist/core/components/segmented-control.js.map +1 -1
- package/dist/core/components/segmented-pills.js.map +1 -1
- package/dist/core/components/skeleton.d.ts +3 -0
- package/dist/core/components/skeleton.js +16 -0
- package/dist/core/components/skeleton.js.map +1 -0
- package/dist/core/components/spinner.js.map +1 -1
- package/dist/core/components/stack.js +19 -8
- package/dist/core/components/stack.js.map +1 -1
- package/dist/core/components/tabs.js.map +1 -1
- package/dist/core/components/text.js +17 -1
- package/dist/core/components/text.js.map +1 -1
- package/dist/core/headers.d.ts +1 -0
- package/dist/core/headers.js +14 -0
- package/dist/core/headers.js.map +1 -0
- package/dist/core/registry-context.d.ts +21 -0
- package/dist/core/registry-context.js +40 -0
- package/dist/core/registry-context.js.map +1 -0
- package/dist/core/registry.d.ts +4 -1
- package/dist/core/registry.js +10 -1
- package/dist/core/registry.js.map +1 -1
- package/dist/core/renderer.d.ts +8 -14
- package/dist/core/renderer.js +17 -27
- package/dist/core/renderer.js.map +1 -1
- package/dist/core/test-id.d.ts +8 -0
- package/dist/core/test-id.js +21 -0
- package/dist/core/test-id.js.map +1 -0
- package/dist/core/types.d.ts +22 -8
- package/dist/core/use-column-resizing.d.ts +27 -0
- package/dist/core/use-column-resizing.js +228 -0
- package/dist/core/use-column-resizing.js.map +1 -0
- package/dist/effects/dispatch.d.ts +20 -0
- package/dist/effects/dispatch.js +39 -0
- package/dist/effects/dispatch.js.map +1 -0
- package/dist/effects/registry.d.ts +38 -0
- package/dist/effects/registry.js +51 -0
- package/dist/effects/registry.js.map +1 -0
- package/dist/effects/use-effect-dispatcher.d.ts +8 -0
- package/dist/effects/use-effect-dispatcher.js +20 -0
- package/dist/effects/use-effect-dispatcher.js.map +1 -0
- package/dist/effects/use-flash-effects.d.ts +5 -0
- package/dist/effects/use-flash-effects.js +22 -0
- package/dist/effects/use-flash-effects.js.map +1 -0
- package/dist/events/event-bridge.d.ts +3 -7
- package/dist/events/event-bridge.js +17 -47
- package/dist/events/event-bridge.js.map +1 -1
- package/dist/events/event-names.d.ts +3 -1
- package/dist/events/event-names.js +3 -1
- package/dist/events/event-names.js.map +1 -1
- package/dist/form/components/base/field.d.ts +2 -1
- package/dist/form/components/base/field.js +17 -2
- package/dist/form/components/base/field.js.map +1 -1
- package/dist/form/components/base/input-error.js +1 -1
- package/dist/form/components/base/input-error.js.map +1 -1
- package/dist/form/components/base/input.js +2 -1
- package/dist/form/components/base/input.js.map +1 -1
- package/dist/form/components/base/label.js.map +1 -1
- package/dist/form/components/base/password-input.js.map +1 -1
- package/dist/form/components/base/submit-button.js +3 -1
- package/dist/form/components/base/submit-button.js.map +1 -1
- package/dist/form/components/base/textarea.js +2 -1
- package/dist/form/components/base/textarea.js.map +1 -1
- package/dist/form/components/conditions.js.map +1 -1
- package/dist/form/components/context.d.ts +1 -0
- package/dist/form/components/context.js +1 -0
- package/dist/form/components/context.js.map +1 -1
- package/dist/form/components/field-props.d.ts +4 -0
- package/dist/form/components/field-props.js.map +1 -1
- package/dist/form/components/field-scope.d.ts +21 -0
- package/dist/form/components/field-scope.js +54 -0
- package/dist/form/components/field-scope.js.map +1 -0
- package/dist/form/components/fields/block-add-menu.d.ts +9 -0
- package/dist/form/components/fields/block-add-menu.js +27 -0
- package/dist/form/components/fields/block-add-menu.js.map +1 -0
- package/dist/form/components/fields/builder.d.ts +2 -0
- package/dist/form/components/fields/builder.js +124 -0
- package/dist/form/components/fields/builder.js.map +1 -0
- package/dist/form/components/fields/checkbox.d.ts +1 -1
- package/dist/form/components/fields/checkbox.js +14 -11
- 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 +5 -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-input.js +2 -1
- package/dist/form/components/fields/date-input.js.map +1 -1
- package/dist/form/components/fields/file-upload.d.ts +2 -0
- package/dist/form/components/fields/file-upload.js +250 -0
- package/dist/form/components/fields/file-upload.js.map +1 -0
- package/dist/form/components/fields/hidden-input.d.ts +1 -1
- package/dist/form/components/fields/hidden-input.js +11 -5
- 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 +3 -1
- package/dist/form/components/fields/number-input.js.map +1 -1
- package/dist/form/components/fields/password-input.d.ts +1 -1
- package/dist/form/components/fields/password-input.js +31 -22
- package/dist/form/components/fields/password-input.js.map +1 -1
- package/dist/form/components/fields/repeater-rows.d.ts +12 -0
- package/dist/form/components/fields/repeater-rows.js +46 -0
- package/dist/form/components/fields/repeater-rows.js.map +1 -0
- package/dist/form/components/fields/repeater.d.ts +2 -0
- package/dist/form/components/fields/repeater.js +97 -0
- package/dist/form/components/fields/repeater.js.map +1 -0
- package/dist/form/components/fields/rich-editor.d.ts +1 -1
- package/dist/form/components/fields/rich-editor.js +37 -9
- package/dist/form/components/fields/rich-editor.js.map +1 -1
- package/dist/form/components/fields/row-action-menu.d.ts +17 -0
- package/dist/form/components/fields/row-action-menu.js +61 -0
- package/dist/form/components/fields/row-action-menu.js.map +1 -0
- package/dist/form/components/fields/row-actions.d.ts +10 -0
- package/dist/form/components/fields/row-actions.js +45 -0
- package/dist/form/components/fields/row-actions.js.map +1 -0
- package/dist/form/components/fields/row-item.d.ts +27 -0
- package/dist/form/components/fields/row-item.js +69 -0
- package/dist/form/components/fields/row-item.js.map +1 -0
- package/dist/form/components/fields/select.d.ts +1 -1
- package/dist/form/components/fields/select.js +69 -104
- package/dist/form/components/fields/select.js.map +1 -1
- package/dist/form/components/fields/simple-field.js +1 -0
- package/dist/form/components/fields/simple-field.js.map +1 -1
- package/dist/form/components/fields/table-rows.d.ts +32 -0
- package/dist/form/components/fields/table-rows.js +188 -0
- package/dist/form/components/fields/table-rows.js.map +1 -0
- package/dist/form/components/fields/text-input.d.ts +1 -1
- package/dist/form/components/fields/text-input.js +2 -1
- 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 +2 -1
- package/dist/form/components/fields/textarea.js.map +1 -1
- package/dist/form/components/fields/use-flip-reorder.d.ts +6 -0
- package/dist/form/components/fields/use-flip-reorder.js +51 -0
- package/dist/form/components/fields/use-flip-reorder.js.map +1 -0
- package/dist/form/components/fields/use-row-collection.d.ts +11 -0
- package/dist/form/components/fields/use-row-collection.js +44 -0
- package/dist/form/components/fields/use-row-collection.js.map +1 -0
- package/dist/form/components/form-path.d.ts +5 -0
- package/dist/form/components/form-path.js +40 -0
- package/dist/form/components/form-path.js.map +1 -0
- package/dist/form/components/form-transport.d.ts +3 -4
- package/dist/form/components/form-transport.js +17 -18
- package/dist/form/components/form-transport.js.map +1 -1
- package/dist/form/components/form.js +24 -18
- package/dist/form/components/form.js.map +1 -1
- package/dist/form/components/index.d.ts +3 -0
- package/dist/form/components/index.js +4 -1
- package/dist/form/components/override-keys.d.ts +2 -0
- package/dist/form/components/override-keys.js +12 -0
- package/dist/form/components/override-keys.js.map +1 -0
- package/dist/form/components/prefill-context.d.ts +5 -0
- package/dist/form/components/prefill-context.js +11 -0
- package/dist/form/components/prefill-context.js.map +1 -0
- package/dist/form/components/prefill-targets.d.ts +17 -0
- package/dist/form/components/prefill-targets.js +73 -0
- package/dist/form/components/prefill-targets.js.map +1 -0
- package/dist/form/components/resolved-nodes.js +4 -1
- package/dist/form/components/resolved-nodes.js.map +1 -1
- package/dist/form/components/row-layout-context.d.ts +5 -0
- package/dist/form/components/row-layout-context.js +18 -0
- package/dist/form/components/row-layout-context.js.map +1 -0
- package/dist/form/components/use-controlled-field.d.ts +2 -0
- package/dist/form/components/use-controlled-field.js +13 -5
- package/dist/form/components/use-controlled-field.js.map +1 -1
- package/dist/form/components/use-dependent-field.js +7 -1
- package/dist/form/components/use-dependent-field.js.map +1 -1
- package/dist/form/components/use-field-commit.d.ts +4 -0
- package/dist/form/components/use-field-commit.js +21 -7
- package/dist/form/components/use-field-commit.js.map +1 -1
- package/dist/form/components/use-form-resolver.d.ts +6 -1
- package/dist/form/components/use-form-resolver.js +50 -5
- package/dist/form/components/use-form-resolver.js.map +1 -1
- package/dist/form/components/use-seed-default.js +8 -3
- package/dist/form/components/use-seed-default.js.map +1 -1
- package/dist/form/components/values.js +20 -5
- package/dist/form/components/values.js.map +1 -1
- package/dist/form/index.js +13 -10
- package/dist/form/index.js.map +1 -1
- package/dist/form/skeleton.js +5 -4
- package/dist/form/skeleton.js.map +1 -1
- package/dist/i18n/backend.d.ts +7 -5
- package/dist/i18n/backend.js +23 -8
- package/dist/i18n/backend.js.map +1 -1
- package/dist/i18n/config.d.ts +6 -0
- package/dist/i18n/config.js +36 -0
- package/dist/i18n/config.js.map +1 -0
- package/dist/i18n/index.d.ts +7 -1
- package/dist/i18n/index.js +5 -1
- package/dist/i18n/instance.d.ts +27 -0
- package/dist/i18n/instance.js +63 -16
- package/dist/i18n/instance.js.map +1 -1
- package/dist/i18n/locale-reload.d.ts +3 -0
- package/dist/i18n/locale-reload.js +17 -0
- package/dist/i18n/locale-reload.js.map +1 -0
- package/dist/i18n/locale-switcher.d.ts +21 -0
- package/dist/i18n/locale-switcher.js +25 -0
- package/dist/i18n/locale-switcher.js.map +1 -0
- package/dist/i18n/locale.d.ts +9 -0
- package/dist/i18n/locale.js +93 -0
- package/dist/i18n/locale.js.map +1 -0
- package/dist/i18n/page-props.d.ts +3 -0
- package/dist/i18n/page-props.js +24 -0
- package/dist/i18n/page-props.js.map +1 -0
- package/dist/index.d.ts +18 -8
- package/dist/index.js +18 -7
- package/dist/inertia.d.ts +2 -1
- package/dist/inertia.js +9 -2
- package/dist/inertia.js.map +1 -1
- package/dist/lattice.css +49 -16
- package/dist/layout/breadcrumbs.d.ts +3 -0
- package/dist/layout/breadcrumbs.js +34 -0
- package/dist/layout/breadcrumbs.js.map +1 -0
- package/dist/layout/callouts.d.ts +3 -0
- package/dist/layout/callouts.js +67 -0
- package/dist/layout/callouts.js.map +1 -0
- package/dist/layout/components.js +6 -0
- package/dist/layout/components.js.map +1 -1
- package/dist/layout/context.d.ts +2 -10
- package/dist/layout/context.js +3 -14
- package/dist/layout/context.js.map +1 -1
- package/dist/layout/dropdown.d.ts +3 -0
- package/dist/layout/dropdown.js +23 -0
- package/dist/layout/dropdown.js.map +1 -0
- package/dist/layout/index.d.ts +2 -1
- package/dist/layout/index.js +3 -1
- package/dist/layout/menu-item.js +30 -59
- package/dist/layout/menu-item.js.map +1 -1
- package/dist/layout/menu.js.map +1 -1
- package/dist/layout/outlet.js +2 -2
- package/dist/layout/outlet.js.map +1 -1
- package/dist/layout/popover.d.ts +17 -0
- package/dist/layout/popover.js +46 -0
- package/dist/layout/popover.js.map +1 -0
- package/dist/layout/schema-layout.js +2 -9
- package/dist/layout/schema-layout.js.map +1 -1
- package/dist/layout/sidebar.js +3 -3
- package/dist/layout/sidebar.js.map +1 -1
- package/dist/page.js +3 -9
- package/dist/page.js.map +1 -1
- package/dist/provider.d.ts +2 -4
- package/dist/provider.js +5 -9
- package/dist/provider.js.map +1 -1
- package/dist/registry.js +2 -1
- package/dist/registry.js.map +1 -1
- package/dist/svg-sprite-client/index.d.ts +1 -0
- package/dist/svg-sprite-client/index.js +0 -0
- package/dist/svg-sprite-client.d.ts +1 -0
- package/dist/table/align.d.ts +4 -0
- package/dist/table/align.js +23 -0
- package/dist/table/align.js.map +1 -0
- package/dist/table/bulk.js +1 -1
- package/dist/table/bulk.js.map +1 -1
- package/dist/table/components/bulk-bar.js +8 -5
- package/dist/table/components/bulk-bar.js.map +1 -1
- package/dist/table/components/cells/badge-cell.d.ts +2 -5
- package/dist/table/components/cells/badge-cell.js +3 -3
- package/dist/table/components/cells/badge-cell.js.map +1 -1
- package/dist/table/components/cells/boolean-cell.d.ts +3 -0
- package/dist/table/components/cells/boolean-cell.js +23 -0
- package/dist/table/components/cells/boolean-cell.js.map +1 -0
- package/dist/table/components/cells/icon-cell.d.ts +2 -5
- package/dist/table/components/cells/icon-cell.js +4 -5
- package/dist/table/components/cells/icon-cell.js.map +1 -1
- package/dist/table/components/cells/image-cell.d.ts +2 -5
- package/dist/table/components/cells/image-cell.js +4 -5
- package/dist/table/components/cells/image-cell.js.map +1 -1
- package/dist/table/components/cells/money-cell.d.ts +2 -0
- package/dist/table/components/cells/money-cell.js +28 -0
- package/dist/table/components/cells/money-cell.js.map +1 -0
- package/dist/table/components/cells/number-cell.d.ts +2 -0
- package/dist/table/components/cells/number-cell.js +25 -0
- package/dist/table/components/cells/number-cell.js.map +1 -0
- package/dist/table/components/cells/numeric.d.ts +2 -0
- package/dist/table/components/cells/numeric.js +10 -0
- package/dist/table/components/cells/numeric.js.map +1 -0
- package/dist/table/components/cells/stack-cell.d.ts +3 -0
- package/dist/table/components/cells/stack-cell.js +17 -0
- package/dist/table/components/cells/stack-cell.js.map +1 -0
- package/dist/table/components/cells/text-cell.d.ts +2 -6
- package/dist/table/components/cells/text-cell.js +5 -6
- package/dist/table/components/cells/text-cell.js.map +1 -1
- package/dist/table/components/column-filter-control.d.ts +3 -1
- package/dist/table/components/column-filter-control.js +73 -11
- package/dist/table/components/column-filter-control.js.map +1 -1
- package/dist/table/components/column-header.d.ts +3 -1
- package/dist/table/components/column-header.js +11 -8
- package/dist/table/components/column-header.js.map +1 -1
- package/dist/table/components/filter-bar.d.ts +15 -0
- package/dist/table/components/filter-bar.js +81 -0
- package/dist/table/components/filter-bar.js.map +1 -0
- package/dist/table/components/filter-controls.d.ts +18 -0
- package/dist/table/components/filter-controls.js +256 -0
- package/dist/table/components/filter-controls.js.map +1 -0
- package/dist/table/components/filter-stack-bar.js.map +1 -1
- package/dist/table/components/filter-value-input.d.ts +1 -0
- package/dist/table/components/filter-value-input.js +6 -5
- package/dist/table/components/filter-value-input.js.map +1 -1
- package/dist/table/components/pagination.js +1 -1
- package/dist/table/components/pagination.js.map +1 -1
- package/dist/table/components/sort-bar.js.map +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 +18 -28
- package/dist/table/components/table-cell.js.map +1 -1
- package/dist/table/components/table.js +191 -152
- package/dist/table/components/table.js.map +1 -1
- package/dist/table/filter-values.d.ts +13 -0
- package/dist/table/filter-values.js +30 -0
- package/dist/table/filter-values.js.map +1 -0
- package/dist/table/format.js.map +1 -1
- package/dist/table/index.js.map +1 -1
- package/dist/table/payload.js +24 -3
- package/dist/table/payload.js.map +1 -1
- package/dist/table/query.d.ts +10 -1
- package/dist/table/query.js +60 -6
- package/dist/table/query.js.map +1 -1
- package/dist/table/registry.d.ts +19 -0
- package/dist/table/registry.js +14 -0
- package/dist/table/registry.js.map +1 -0
- package/dist/table/types.d.ts +9 -19
- package/dist/table/use-table.d.ts +7 -2
- package/dist/table/use-table.js +57 -7
- package/dist/table/use-table.js.map +1 -1
- package/dist/toast/callout.d.ts +6 -0
- package/dist/toast/callout.js +31 -0
- package/dist/toast/callout.js.map +1 -0
- package/dist/toast/index.d.ts +4 -0
- package/dist/toast/index.js +3 -1
- package/dist/toast/toast.d.ts +14 -0
- package/dist/toast/toast.js +51 -0
- package/dist/toast/toast.js.map +1 -0
- package/dist/toast/toaster.js +10 -74
- package/dist/toast/toaster.js.map +1 -1
- package/dist/toast/variant-styles.d.ts +6 -0
- package/dist/toast/variant-styles.js +37 -0
- package/dist/toast/variant-styles.js.map +1 -0
- package/dist/types/generated.d.ts +461 -101
- package/dist/types/vite-env.d.ts +1 -0
- package/dist/vite.d.ts +25 -0
- package/dist/vite.js +72 -0
- package/dist/vite.js.map +1 -0
- package/package.json +111 -13
- package/resources/icons/rotate-ccw.svg +16 -0
- package/dist/_virtual/_rolldown/runtime.js +0 -8
- package/dist/action/effects.d.ts +0 -11
- package/dist/action/effects.js +0 -44
- package/dist/action/effects.js.map +0 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js +0 -1982
- package/dist/node_modules/i18next/dist/esm/i18next.js.map +0 -1
- package/dist/node_modules/i18next-http-backend/esm/index.js +0 -352
- package/dist/node_modules/i18next-http-backend/esm/index.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/context.js +0 -23
- package/dist/node_modules/react-i18next/dist/es/context.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/defaults.js +0 -29
- package/dist/node_modules/react-i18next/dist/es/defaults.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/i18nInstance.js +0 -10
- package/dist/node_modules/react-i18next/dist/es/i18nInstance.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/initReactI18next.js +0 -14
- package/dist/node_modules/react-i18next/dist/es/initReactI18next.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/unescape.js +0 -30
- package/dist/node_modules/react-i18next/dist/es/unescape.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js +0 -157
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +0 -1
- package/dist/node_modules/react-i18next/dist/es/utils.js +0 -58
- package/dist/node_modules/react-i18next/dist/es/utils.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -70
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -61
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/shim/index.js +0 -13
- package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
- package/dist/table/column-registry.d.ts +0 -9
- package/dist/test-support.d.ts +0 -14
- package/dist/test-support.js +0 -14
- package/dist/test-support.js.map +0 -1
- /package/dist/{table/column-registry.js → chat/types.js} +0 -0
- /package/dist/{form/components/base → core/components}/checkbox.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","names":[],"sources":["../../resources/js/core/api.ts"],"sourcesContent":["/**\n * The single funnel for raw-fetch HTTP, so the cross-cutting header, credential,\n * and error policy has one home and call sites only declare intent. Returns a\n * Response (not parsed data) so one primitive serves JSON, the chat's streaming\n * getReader(), and multipart alike. Not for the Inertia world (router/useHttp),\n * which carries its own headers.\n */\n\nimport { withHeaders } from \"./headers\";\n\nexport class ApiError extends Error {\n constructor(readonly response: Response) {\n super(`HTTP ${response.status}`);\n }\n}\n\nfunction xsrfToken(): string {\n const match = document.cookie.match(/XSRF-TOKEN=([^;]+)/);\n\n return match ? decodeURIComponent(match[1]) : \"\";\n}\n\nexport type ApiInit = Omit<RequestInit, \"headers\"> & {\n ref?: string;\n headers?: Record<string, string>;\n throwOnError?: boolean;\n};\n\nfunction defaultHeaders(method: string | undefined): Record<string, string> {\n const isWrite = method !== undefined && method !== \"GET\" && method !== \"HEAD\";\n\n if (!isWrite) {\n return { Accept: \"application/json\" };\n }\n\n return {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-XSRF-TOKEN\": xsrfToken(),\n };\n}\n\nexport async function apiFetch(url: string, init: ApiInit = {}): Promise<Response> {\n const { ref, headers, throwOnError = true, method, ...rest } = init;\n // Some servers reject a lower-case method line, and fetch only normalizes the\n // standard verbs, so upper-case it here.\n const normalizedMethod = method?.toUpperCase();\n const response = await fetch(url, {\n credentials: \"same-origin\",\n ...rest,\n method: normalizedMethod,\n headers: withHeaders(ref ?? \"\", { ...defaultHeaders(normalizedMethod), ...headers }),\n });\n\n if (throwOnError && !response.ok) {\n throw new ApiError(response);\n }\n\n return response;\n}\n\nexport async function apiJson<T>(url: string, init?: ApiInit): Promise<T> {\n return (await apiFetch(url, init)).json() as Promise<T>;\n}\n"],"mappings":";;;;;;;;;AAUA,IAAa,WAAb,cAA8B,MAAM;CACb;CAArB,YAAY,UAA6B;EACvC,MAAM,QAAQ,SAAS,QAAQ;EADZ,KAAA,WAAA;CAErB;AACF;AAEA,SAAS,YAAoB;CAC3B,MAAM,QAAQ,SAAS,OAAO,MAAM,oBAAoB;CAExD,OAAO,QAAQ,mBAAmB,MAAM,EAAE,IAAI;AAChD;AAQA,SAAS,eAAe,QAAoD;CAG1E,IAAI,EAFY,WAAW,KAAA,KAAa,WAAW,SAAS,WAAW,SAGrE,OAAO,EAAE,QAAQ,mBAAmB;CAGtC,OAAO;EACL,QAAQ;EACR,gBAAgB;EAChB,oBAAoB;EACpB,gBAAgB,UAAU;CAC5B;AACF;AAEA,eAAsB,SAAS,KAAa,OAAgB,CAAC,GAAsB;CACjF,MAAM,EAAE,KAAK,SAAS,eAAe,MAAM,QAAQ,GAAG,SAAS;CAG/D,MAAM,mBAAmB,QAAQ,YAAY;CAC7C,MAAM,WAAW,MAAM,MAAM,KAAK;EAChC,aAAa;EACb,GAAG;EACH,QAAQ;EACR,SAAS,YAAY,OAAO,IAAI;GAAE,GAAG,eAAe,gBAAgB;GAAG,GAAG;EAAQ,CAAC;CACrF,CAAC;CAED,IAAI,gBAAgB,CAAC,SAAS,IAC5B,MAAM,IAAI,SAAS,QAAQ;CAG7B,OAAO;AACT;AAEA,eAAsB,QAAW,KAAa,MAA4B;CACxE,QAAQ,MAAM,SAAS,KAAK,IAAI,GAAG,KAAK;AAC1C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
//#region resources/js/core/collapsed-context.ts
|
|
3
|
+
var CollapsedContext = createContext(false);
|
|
4
|
+
function useCollapsed() {
|
|
5
|
+
return useContext(CollapsedContext);
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { CollapsedContext, useCollapsed };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=collapsed-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsed-context.js","names":[],"sources":["../../resources/js/core/collapsed-context.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport const CollapsedContext = createContext(false);\n\nexport function useCollapsed(): boolean {\n return useContext(CollapsedContext);\n}\n"],"mappings":";;AAEA,IAAa,mBAAmB,cAAc,KAAK;AAEnD,SAAgB,eAAwB;CACtC,OAAO,WAAW,gBAAgB;AACpC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ColumnWidth } from '../types/generated';
|
|
2
|
+
export type SizableColumn = {
|
|
3
|
+
key: string;
|
|
4
|
+
label?: string;
|
|
5
|
+
width: ColumnWidth;
|
|
6
|
+
};
|
|
7
|
+
export declare const DEFAULT_COLUMN_WIDTH: ColumnWidth;
|
|
8
|
+
export declare function columnWidthTrack(width: ColumnWidth): string;
|
|
9
|
+
export declare function minColumnWidthPx(column: SizableColumn): number;
|
|
10
|
+
export declare function defaultColumnWidthPx(column: SizableColumn): number;
|
|
11
|
+
export declare function maxColumnWidthPx(column: SizableColumn): number;
|
|
12
|
+
export declare function buildColumnGridTemplate({ columns, leadingTracks, trailingTracks, overrides, }: {
|
|
13
|
+
columns: SizableColumn[];
|
|
14
|
+
leadingTracks?: string[];
|
|
15
|
+
trailingTracks?: string[];
|
|
16
|
+
overrides?: Record<string, number | undefined>;
|
|
17
|
+
}): string;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region resources/js/core/column-sizing.ts
|
|
2
|
+
var DEFAULT_COLUMN_WIDTH = "md";
|
|
3
|
+
var tracks = {
|
|
4
|
+
xs: {
|
|
5
|
+
track: "minmax(4rem, 0.35fr)",
|
|
6
|
+
minPx: 64,
|
|
7
|
+
defaultPx: 96,
|
|
8
|
+
maxPx: 1024
|
|
9
|
+
},
|
|
10
|
+
sm: {
|
|
11
|
+
track: "minmax(6rem, 0.5fr)",
|
|
12
|
+
minPx: 96,
|
|
13
|
+
defaultPx: 128,
|
|
14
|
+
maxPx: 1024
|
|
15
|
+
},
|
|
16
|
+
md: {
|
|
17
|
+
track: "minmax(8rem, 1fr)",
|
|
18
|
+
minPx: 128,
|
|
19
|
+
defaultPx: 176,
|
|
20
|
+
maxPx: 1024
|
|
21
|
+
},
|
|
22
|
+
lg: {
|
|
23
|
+
track: "minmax(12rem, 1.5fr)",
|
|
24
|
+
minPx: 192,
|
|
25
|
+
defaultPx: 240,
|
|
26
|
+
maxPx: 1024
|
|
27
|
+
},
|
|
28
|
+
xl: {
|
|
29
|
+
track: "minmax(16rem, 2fr)",
|
|
30
|
+
minPx: 256,
|
|
31
|
+
defaultPx: 320,
|
|
32
|
+
maxPx: 1024
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
function columnWidthTrack(width) {
|
|
36
|
+
return tracks[width].track;
|
|
37
|
+
}
|
|
38
|
+
function minColumnWidthPx(column) {
|
|
39
|
+
return tracks[column.width].minPx;
|
|
40
|
+
}
|
|
41
|
+
function defaultColumnWidthPx(column) {
|
|
42
|
+
return tracks[column.width].defaultPx;
|
|
43
|
+
}
|
|
44
|
+
function maxColumnWidthPx(column) {
|
|
45
|
+
return tracks[column.width].maxPx;
|
|
46
|
+
}
|
|
47
|
+
function buildColumnGridTemplate({ columns, leadingTracks = [], trailingTracks = [], overrides = {} }) {
|
|
48
|
+
return [
|
|
49
|
+
...leadingTracks,
|
|
50
|
+
...columns.map((column) => {
|
|
51
|
+
const override = overrides[column.key];
|
|
52
|
+
if (override !== void 0) return `${Math.min(maxColumnWidthPx(column), Math.max(minColumnWidthPx(column), override))}px`;
|
|
53
|
+
return columnWidthTrack(column.width);
|
|
54
|
+
}),
|
|
55
|
+
...trailingTracks
|
|
56
|
+
].join(" ");
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { DEFAULT_COLUMN_WIDTH, buildColumnGridTemplate, columnWidthTrack, defaultColumnWidthPx, maxColumnWidthPx, minColumnWidthPx };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=column-sizing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-sizing.js","names":[],"sources":["../../resources/js/core/column-sizing.ts"],"sourcesContent":["import type { ColumnWidth } from \"@lattice-php/lattice/types/generated\";\n\nexport type SizableColumn = {\n key: string;\n label?: string;\n width: ColumnWidth;\n};\n\nexport const DEFAULT_COLUMN_WIDTH: ColumnWidth = \"md\";\n\nconst tracks: Record<\n ColumnWidth,\n { track: string; minPx: number; defaultPx: number; maxPx: number }\n> = {\n xs: { track: \"minmax(4rem, 0.35fr)\", minPx: 64, defaultPx: 96, maxPx: 1024 },\n sm: { track: \"minmax(6rem, 0.5fr)\", minPx: 96, defaultPx: 128, maxPx: 1024 },\n md: { track: \"minmax(8rem, 1fr)\", minPx: 128, defaultPx: 176, maxPx: 1024 },\n lg: { track: \"minmax(12rem, 1.5fr)\", minPx: 192, defaultPx: 240, maxPx: 1024 },\n xl: { track: \"minmax(16rem, 2fr)\", minPx: 256, defaultPx: 320, maxPx: 1024 },\n};\n\nexport function columnWidthTrack(width: ColumnWidth): string {\n return tracks[width].track;\n}\n\nexport function minColumnWidthPx(column: SizableColumn): number {\n return tracks[column.width].minPx;\n}\n\nexport function defaultColumnWidthPx(column: SizableColumn): number {\n return tracks[column.width].defaultPx;\n}\n\nexport function maxColumnWidthPx(column: SizableColumn): number {\n return tracks[column.width].maxPx;\n}\n\nexport function buildColumnGridTemplate({\n columns,\n leadingTracks = [],\n trailingTracks = [],\n overrides = {},\n}: {\n columns: SizableColumn[];\n leadingTracks?: string[];\n trailingTracks?: string[];\n overrides?: Record<string, number | undefined>;\n}): string {\n return [\n ...leadingTracks,\n ...columns.map((column) => {\n const override = overrides[column.key];\n\n if (override !== undefined) {\n return `${Math.min(maxColumnWidthPx(column), Math.max(minColumnWidthPx(column), override))}px`;\n }\n\n return columnWidthTrack(column.width);\n }),\n ...trailingTracks,\n ].join(\" \");\n}\n"],"mappings":";AAQA,IAAa,uBAAoC;AAEjD,IAAM,SAGF;CACF,IAAI;EAAE,OAAO;EAAwB,OAAO;EAAI,WAAW;EAAI,OAAO;CAAK;CAC3E,IAAI;EAAE,OAAO;EAAuB,OAAO;EAAI,WAAW;EAAK,OAAO;CAAK;CAC3E,IAAI;EAAE,OAAO;EAAqB,OAAO;EAAK,WAAW;EAAK,OAAO;CAAK;CAC1E,IAAI;EAAE,OAAO;EAAwB,OAAO;EAAK,WAAW;EAAK,OAAO;CAAK;CAC7E,IAAI;EAAE,OAAO;EAAsB,OAAO;EAAK,WAAW;EAAK,OAAO;CAAK;AAC7E;AAEA,SAAgB,iBAAiB,OAA4B;CAC3D,OAAO,OAAO,OAAO;AACvB;AAEA,SAAgB,iBAAiB,QAA+B;CAC9D,OAAO,OAAO,OAAO,OAAO;AAC9B;AAEA,SAAgB,qBAAqB,QAA+B;CAClE,OAAO,OAAO,OAAO,OAAO;AAC9B;AAEA,SAAgB,iBAAiB,QAA+B;CAC9D,OAAO,OAAO,OAAO,OAAO;AAC9B;AAEA,SAAgB,wBAAwB,EACtC,SACA,gBAAgB,CAAC,GACjB,iBAAiB,CAAC,GAClB,YAAY,CAAC,KAMJ;CACT,OAAO;EACL,GAAG;EACH,GAAG,QAAQ,KAAK,WAAW;GACzB,MAAM,WAAW,UAAU,OAAO;GAElC,IAAI,aAAa,KAAA,GACf,OAAO,GAAG,KAAK,IAAI,iBAAiB,MAAM,GAAG,KAAK,IAAI,iBAAiB,MAAM,GAAG,QAAQ,CAAC,EAAE;GAG7F,OAAO,iBAAiB,OAAO,KAAK;EACtC,CAAC;EACD,GAAG;CACL,EAAE,KAAK,GAAG;AACZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.js","names":[],"sources":["../../../resources/js/core/components/badge.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-lt-icon-xs gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary/90\",\n secondary:\n \"border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary/90\",\n destructive:\n \"border-transparent bg-lt-danger text-lt-danger-fg [a&]:hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 dark:bg-lt-danger/60\",\n outline: \"border-lt-border text-lt-fg [a&]:hover:bg-lt-accent [a&]:hover:text-lt-accent-fg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nconst BadgeComponent: RendererComponent<\"badge\"> = ({ node }) => (\n <Badge variant=\"secondary\" className=\"w-fit px-3 py-1\">\n {node.props.label}\n </Badge>\n);\n\nexport default BadgeComponent;\nexport { Badge, badgeVariants };\n"],"mappings":";;;;;;AAMA,IAAM,gBAAgB,IACpB,8ZACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,WACE;EACF,aACE;EACF,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,UAAU,OACV,GAAG,SACyF;CAG5F,OACE,oBAHW,UAAU,OAAO,QAG5B;EAAM,aAAU;EAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE9F;AAEA,IAAM,kBAA8C,EAAE,WACpD,oBAAC,OAAD;CAAO,SAAQ;CAAY,WAAU;WAClC,KAAK,MAAM;AACP,CAAA"}
|
|
1
|
+
{"version":3,"file":"badge.js","names":[],"sources":["../../../resources/js/core/components/badge.tsx"],"sourcesContent":["import { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\n\nconst badgeVariants = cva(\n \"inline-flex items-center justify-center rounded-lt-sm border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-lt-icon-xs gap-1 [&>svg]:pointer-events-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger transition-[color,box-shadow] overflow-hidden\",\n {\n variants: {\n variant: {\n default: \"border-transparent bg-lt-primary text-lt-primary-fg [a&]:hover:bg-lt-primary/90\",\n secondary:\n \"border-transparent bg-lt-secondary text-lt-secondary-fg [a&]:hover:bg-lt-secondary/90\",\n destructive:\n \"border-transparent bg-lt-danger text-lt-danger-fg [a&]:hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40 dark:bg-lt-danger/60\",\n outline: \"border-lt-border text-lt-fg [a&]:hover:bg-lt-accent [a&]:hover:text-lt-accent-fg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n },\n);\n\nfunction Badge({\n className,\n variant,\n asChild = false,\n ...props\n}: React.ComponentProps<\"span\"> & VariantProps<typeof badgeVariants> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : \"span\";\n\n return (\n <Comp data-slot=\"badge\" className={cn(badgeVariants({ variant }), className)} {...props} />\n );\n}\n\nconst BadgeComponent: RendererComponent<\"badge\"> = ({ node }) => (\n <Badge variant=\"secondary\" className=\"w-fit px-3 py-1\">\n {node.props.label}\n </Badge>\n);\n\nexport default BadgeComponent;\nexport { Badge, badgeVariants };\n"],"mappings":";;;;;;AAMA,IAAM,gBAAgB,IACpB,8ZACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,WACE;EACF,aACE;EACF,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,MAAM,EACb,WACA,SACA,UAAU,OACV,GAAG,SACyF;CAG5F,OACE,oBAHW,UAAU,OAAO,QAG5B;EAAM,aAAU;EAAQ,WAAW,GAAG,cAAc,EAAE,QAAQ,CAAC,GAAG,SAAS;EAAG,GAAI;CAAQ,CAAA;AAE9F;AAEA,IAAM,kBAA8C,EAAE,WACpD,oBAAC,OAAD;CAAO,SAAQ;CAAY,WAAU;WAClC,KAAK,MAAM;AACP,CAAA"}
|
|
@@ -5,7 +5,7 @@ import * as React from "react";
|
|
|
5
5
|
export type { ButtonVariant };
|
|
6
6
|
declare const buttonVariants: (props?: ({
|
|
7
7
|
variant?: "default" | "destructive" | "ghost" | "info" | "link" | "outline" | "secondary" | "success" | null | undefined;
|
|
8
|
-
size?: "default" | "
|
|
8
|
+
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
9
9
|
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
10
10
|
declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
|
|
11
11
|
asChild?: boolean;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { nodeIdentity } from "../test-id.js";
|
|
2
3
|
import "react";
|
|
3
4
|
import { Link } from "@inertiajs/react";
|
|
4
5
|
import { Slot } from "@radix-ui/react-slot";
|
|
@@ -43,8 +44,10 @@ function Button({ className, variant, size, asChild = false, ...props }) {
|
|
|
43
44
|
var ButtonComponent = ({ node }) => {
|
|
44
45
|
const { href, label } = node.props;
|
|
45
46
|
const variant = node.props.variant ?? "default";
|
|
47
|
+
const testId = nodeIdentity(node);
|
|
46
48
|
if (href) return /* @__PURE__ */ jsx(Button, {
|
|
47
49
|
asChild: true,
|
|
50
|
+
"data-test": testId,
|
|
48
51
|
variant,
|
|
49
52
|
size: "lg",
|
|
50
53
|
children: /* @__PURE__ */ jsx(Link, {
|
|
@@ -53,6 +56,7 @@ var ButtonComponent = ({ node }) => {
|
|
|
53
56
|
})
|
|
54
57
|
});
|
|
55
58
|
return /* @__PURE__ */ jsx(Button, {
|
|
59
|
+
"data-test": testId,
|
|
56
60
|
type: node.props.buttonType,
|
|
57
61
|
variant,
|
|
58
62
|
size: "lg",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","names":[],"sources":["../../../resources/js/core/components/button.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\nimport type { ButtonVariant } from \"@lattice/lattice/types/generated\";\n\nexport type { ButtonVariant };\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n {\n variants: {\n variant: {\n default: \"bg-lt-primary text-lt-primary-fg shadow-xs hover:bg-lt-primary/90\",\n destructive:\n \"bg-lt-danger text-lt-danger-fg shadow-xs hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40\",\n success: \"bg-lt-success text-lt-success-fg shadow-xs hover:bg-lt-success/90\",\n info: \"bg-lt-info text-lt-info-fg shadow-xs hover:bg-lt-info/90\",\n outline:\n \"border border-lt-input bg-lt-bg shadow-xs hover:bg-lt-accent hover:text-lt-accent-fg\",\n secondary: \"bg-lt-secondary text-lt-secondary-fg shadow-xs hover:bg-lt-secondary/80\",\n ghost: \"hover:bg-lt-accent hover:text-lt-accent-fg\",\n link: \"text-lt-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-lt-sm px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-lt-sm px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst ButtonComponent: RendererComponent<\"button\"> = ({ node }) => {\n const { href, label } = node.props;\n const variant = node.props.variant ?? \"default\";\n\n if (href) {\n return (\n <Button asChild variant={variant} size=\"lg\">\n <Link href={href}>{label}</Link>\n </Button>\n );\n }\n\n return (\n <Button type={node.props.buttonType} variant={variant} size=\"lg\">\n {label}\n </Button>\n );\n};\n\nexport default ButtonComponent;\nexport { Button, buttonVariants };\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"button.js","names":[],"sources":["../../../resources/js/core/components/button.tsx"],"sourcesContent":["import { Link } from \"@inertiajs/react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport * 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 type { ButtonVariant } from \"@lattice-php/lattice/types/generated\";\n\nexport type { ButtonVariant };\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-lt-sm text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-lt-icon-md [&_svg]:shrink-0 outline-none focus-visible:border-lt-ring focus-visible:ring-lt-ring/50 focus-visible:ring-[3px] aria-invalid:ring-lt-danger/20 dark:aria-invalid:ring-lt-danger/40 aria-invalid:border-lt-danger\",\n {\n variants: {\n variant: {\n default: \"bg-lt-primary text-lt-primary-fg shadow-xs hover:bg-lt-primary/90\",\n destructive:\n \"bg-lt-danger text-lt-danger-fg shadow-xs hover:bg-lt-danger/90 focus-visible:ring-lt-danger/20 dark:focus-visible:ring-lt-danger/40\",\n success: \"bg-lt-success text-lt-success-fg shadow-xs hover:bg-lt-success/90\",\n info: \"bg-lt-info text-lt-info-fg shadow-xs hover:bg-lt-info/90\",\n outline:\n \"border border-lt-input bg-lt-bg shadow-xs hover:bg-lt-accent hover:text-lt-accent-fg\",\n secondary: \"bg-lt-secondary text-lt-secondary-fg shadow-xs hover:bg-lt-secondary/80\",\n ghost: \"hover:bg-lt-accent hover:text-lt-accent-fg\",\n link: \"text-lt-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-lt-sm px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-lt-sm px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nconst ButtonComponent: RendererComponent<\"button\"> = ({ node }) => {\n const { href, label } = node.props;\n const variant = node.props.variant ?? \"default\";\n const testId = nodeIdentity(node);\n\n if (href) {\n return (\n <Button asChild data-test={testId} variant={variant} size=\"lg\">\n <Link href={href}>{label}</Link>\n </Button>\n );\n }\n\n return (\n <Button data-test={testId} type={node.props.buttonType} variant={variant} size=\"lg\">\n {label}\n </Button>\n );\n};\n\nexport default ButtonComponent;\nexport { Button, buttonVariants };\n"],"mappings":";;;;;;;;AAWA,IAAM,iBAAiB,IACrB,idACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aACE;GACF,SAAS;GACT,MAAM;GACN,SACE;GACF,WAAW;GACX,OAAO;GACP,MAAM;EACR;EACA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,MAAM;EACR;CACF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CACF;AAEA,SAAS,OAAO,EACd,WACA,SACA,MACA,UAAU,OACV,GAAG,SAIA;CAGH,OACE,oBAHW,UAAU,OAAO,UAG5B;EACE,aAAU;EACV,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;EAAU,CAAC,CAAC;EAC1D,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,mBAAgD,EAAE,WAAW;CACjE,MAAM,EAAE,MAAM,UAAU,KAAK;CAC7B,MAAM,UAAU,KAAK,MAAM,WAAW;CACtC,MAAM,SAAS,aAAa,IAAI;CAEhC,IAAI,MACF,OACE,oBAAC,QAAD;EAAQ,SAAA;EAAQ,aAAW;EAAiB;EAAS,MAAK;YACxD,oBAAC,MAAD;GAAY;aAAO;EAAY,CAAA;CACzB,CAAA;CAIZ,OACE,oBAAC,QAAD;EAAQ,aAAW;EAAQ,MAAM,KAAK,MAAM;EAAqB;EAAS,MAAK;YAC5E;CACK,CAAA;AAEZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","names":[],"sources":["../../../resources/js/core/components/card.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice/lattice/core/types\";\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-6 text-lt-surface-fg shadow-xs\",\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-6\", 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-6\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-footer\" className={cn(\"flex items-center px-6\", className)} {...props} />\n );\n}\n\nconst CardComponent: RendererComponent<\"card\"> = ({ children, node }) => {\n const { title, description } = node.props;\n\n return (\n <Card data-lattice-component={node.id}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\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":";;;;AAIA,SAAS,KAAK,EAAE,WAAW,GAAG,SAA0C;CACtE,OACE,oBAAC,WAAD;EACE,aAAU;EACV,WAAW,GACT,0GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,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,QAAQ,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrF;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,0BAA0B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEjG;AAEA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,EAAE,OAAO,gBAAgB,KAAK;CAEpC,OACE,qBAAC,MAAD;EAAM,0BAAwB,KAAK;YAAnC,EACI,SAAS,gBACT,qBAAC,YAAD,EAAA,UAAA,CACG,SAAS,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,GACtC,eAAe,oBAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,CACrD,EAAA,CAAA,GAEb,YAAY,oBAAC,aAAD;GAAa,WAAU;GAAuB;EAAsB,CAAA,CAC7E;;AAEV"}
|
|
1
|
+
{"version":3,"file":"card.js","names":[],"sources":["../../../resources/js/core/components/card.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"@lattice-php/lattice/lib/utils\";\nimport type { RendererComponent } from \"@lattice-php/lattice/core/types\";\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-6 text-lt-surface-fg shadow-xs\",\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-6\", 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-6\", className)} {...props} />;\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-footer\" className={cn(\"flex items-center px-6\", className)} {...props} />\n );\n}\n\nconst CardComponent: RendererComponent<\"card\"> = ({ children, node }) => {\n const { title, description } = node.props;\n\n return (\n <Card data-lattice-component={node.id}>\n {(title || description) && (\n <CardHeader>\n {title && <CardTitle>{title}</CardTitle>}\n {description && <CardDescription>{description}</CardDescription>}\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":";;;;AAIA,SAAS,KAAK,EAAE,WAAW,GAAG,SAA0C;CACtE,OACE,oBAAC,WAAD;EACE,aAAU;EACV,WAAW,GACT,0GACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,SAAS;EACrD,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,QAAQ,SAAS;EAAG,GAAI;CAAQ,CAAA;AACrF;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,0BAA0B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEjG;AAEA,IAAM,iBAA4C,EAAE,UAAU,WAAW;CACvE,MAAM,EAAE,OAAO,gBAAgB,KAAK;CAEpC,OACE,qBAAC,MAAD;EAAM,0BAAwB,KAAK;YAAnC,EACI,SAAS,gBACT,qBAAC,YAAD,EAAA,UAAA,CACG,SAAS,oBAAC,WAAD,EAAA,UAAY,MAAiB,CAAA,GACtC,eAAe,oBAAC,iBAAD,EAAA,UAAkB,YAA6B,CAAA,CACrD,EAAA,CAAA,GAEb,YAAY,oBAAC,aAAD;GAAa,WAAU;GAAuB;EAAsB,CAAA,CAC7E;;AAEV"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Area, AreaChart, Bar, BarChart, CartesianGrid, Cell, ComposedChart, Legend, Line, LineChart, Pie, PieChart, ResponsiveContainer, Tooltip, XAxis, YAxis } from "recharts";
|
|
3
|
+
//#region resources/js/core/components/chart.tsx
|
|
4
|
+
var chartMargin = {
|
|
5
|
+
bottom: 0,
|
|
6
|
+
left: 0,
|
|
7
|
+
right: 16,
|
|
8
|
+
top: 8
|
|
9
|
+
};
|
|
10
|
+
var compactLegendProps = {
|
|
11
|
+
align: "center",
|
|
12
|
+
height: 24,
|
|
13
|
+
iconSize: 7,
|
|
14
|
+
verticalAlign: "top",
|
|
15
|
+
wrapperStyle: {
|
|
16
|
+
fontSize: 11,
|
|
17
|
+
lineHeight: "14px",
|
|
18
|
+
paddingBottom: 6
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var axisTick = { fontSize: 10 };
|
|
22
|
+
var palette = [
|
|
23
|
+
"var(--lt-primary)",
|
|
24
|
+
"var(--lt-success)",
|
|
25
|
+
"var(--lt-info)",
|
|
26
|
+
"var(--lt-warning)",
|
|
27
|
+
"var(--lt-danger)",
|
|
28
|
+
"var(--lt-muted-fg)"
|
|
29
|
+
];
|
|
30
|
+
function colorAt(index) {
|
|
31
|
+
return palette[index % palette.length] ?? "var(--lt-primary)";
|
|
32
|
+
}
|
|
33
|
+
function isRecord(value) {
|
|
34
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
|
+
}
|
|
36
|
+
function datumColor(datum, series, index) {
|
|
37
|
+
if (isRecord(datum) && typeof datum.color === "string") return datum.color;
|
|
38
|
+
return series.color ?? colorAt(index);
|
|
39
|
+
}
|
|
40
|
+
function isCartesianSeries(series) {
|
|
41
|
+
return series.type === "area" || series.type === "bar" || series.type === "line";
|
|
42
|
+
}
|
|
43
|
+
function cartesianChartFor(series) {
|
|
44
|
+
const types = new Set(series.map((item) => item.type));
|
|
45
|
+
const firstSeries = series[0];
|
|
46
|
+
if (firstSeries === void 0 || types.size !== 1) return ComposedChart;
|
|
47
|
+
switch (firstSeries.type) {
|
|
48
|
+
case "area": return AreaChart;
|
|
49
|
+
case "bar": return BarChart;
|
|
50
|
+
case "line": return LineChart;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function ChartFrame({ children, description, id, title }) {
|
|
54
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55
|
+
className: "flex flex-col gap-3 rounded-lt border border-lt-border bg-lt-surface p-4 text-lt-surface-fg shadow-xs",
|
|
56
|
+
"data-lattice-component": id,
|
|
57
|
+
children: [(title !== null || description !== null) && /* @__PURE__ */ jsxs("div", {
|
|
58
|
+
className: "flex min-w-0 flex-col gap-1.5",
|
|
59
|
+
children: [title !== null && /* @__PURE__ */ jsx("div", {
|
|
60
|
+
className: "text-sm font-semibold leading-tight",
|
|
61
|
+
children: title
|
|
62
|
+
}), description !== null && /* @__PURE__ */ jsx("div", {
|
|
63
|
+
className: "text-xs leading-5 text-lt-muted-fg",
|
|
64
|
+
children: description
|
|
65
|
+
})]
|
|
66
|
+
}), children]
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
function CartesianChart({ props }) {
|
|
70
|
+
const series = props.series.filter(isCartesianSeries);
|
|
71
|
+
const RechartsChart = cartesianChartFor(series);
|
|
72
|
+
return /* @__PURE__ */ jsx(ResponsiveContainer, {
|
|
73
|
+
width: "100%",
|
|
74
|
+
height: props.height,
|
|
75
|
+
children: /* @__PURE__ */ jsxs(RechartsChart, {
|
|
76
|
+
data: props.data,
|
|
77
|
+
margin: chartMargin,
|
|
78
|
+
children: [
|
|
79
|
+
props.grid && /* @__PURE__ */ jsx(CartesianGrid, {
|
|
80
|
+
strokeDasharray: "3 3",
|
|
81
|
+
stroke: "var(--lt-border)"
|
|
82
|
+
}),
|
|
83
|
+
props.xAxis && props.categoryKey !== null && /* @__PURE__ */ jsx(XAxis, {
|
|
84
|
+
dataKey: props.categoryKey,
|
|
85
|
+
stroke: "var(--lt-muted-fg)",
|
|
86
|
+
tick: axisTick,
|
|
87
|
+
tickLine: false
|
|
88
|
+
}),
|
|
89
|
+
props.yAxis && /* @__PURE__ */ jsx(YAxis, {
|
|
90
|
+
stroke: "var(--lt-muted-fg)",
|
|
91
|
+
tick: axisTick,
|
|
92
|
+
tickLine: false,
|
|
93
|
+
width: 42
|
|
94
|
+
}),
|
|
95
|
+
props.tooltip && /* @__PURE__ */ jsx(Tooltip, {}),
|
|
96
|
+
props.legend && /* @__PURE__ */ jsx(Legend, { ...compactLegendProps }),
|
|
97
|
+
series.map((item, index) => {
|
|
98
|
+
const color = item.color ?? colorAt(index);
|
|
99
|
+
const key = `${item.type}:${item.dataKey}`;
|
|
100
|
+
if (item.type === "area") return /* @__PURE__ */ jsx(Area, {
|
|
101
|
+
dataKey: item.dataKey,
|
|
102
|
+
fill: color,
|
|
103
|
+
fillOpacity: .16,
|
|
104
|
+
name: item.name ?? void 0,
|
|
105
|
+
stackId: item.stackId ?? void 0,
|
|
106
|
+
stroke: color,
|
|
107
|
+
type: "monotone"
|
|
108
|
+
}, key);
|
|
109
|
+
if (item.type === "bar") return /* @__PURE__ */ jsx(Bar, {
|
|
110
|
+
dataKey: item.dataKey,
|
|
111
|
+
fill: color,
|
|
112
|
+
name: item.name ?? void 0,
|
|
113
|
+
radius: [
|
|
114
|
+
4,
|
|
115
|
+
4,
|
|
116
|
+
0,
|
|
117
|
+
0
|
|
118
|
+
],
|
|
119
|
+
stackId: item.stackId ?? void 0
|
|
120
|
+
}, key);
|
|
121
|
+
return /* @__PURE__ */ jsx(Line, {
|
|
122
|
+
dataKey: item.dataKey,
|
|
123
|
+
dot: false,
|
|
124
|
+
name: item.name ?? void 0,
|
|
125
|
+
stroke: color,
|
|
126
|
+
strokeWidth: 2,
|
|
127
|
+
type: "monotone"
|
|
128
|
+
}, key);
|
|
129
|
+
})
|
|
130
|
+
]
|
|
131
|
+
})
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function PieChartView({ props, series }) {
|
|
135
|
+
return /* @__PURE__ */ jsx(ResponsiveContainer, {
|
|
136
|
+
width: "100%",
|
|
137
|
+
height: props.height,
|
|
138
|
+
children: /* @__PURE__ */ jsxs(PieChart, {
|
|
139
|
+
margin: chartMargin,
|
|
140
|
+
children: [
|
|
141
|
+
props.tooltip && /* @__PURE__ */ jsx(Tooltip, {}),
|
|
142
|
+
props.legend && /* @__PURE__ */ jsx(Legend, { ...compactLegendProps }),
|
|
143
|
+
/* @__PURE__ */ jsx(Pie, {
|
|
144
|
+
data: props.data,
|
|
145
|
+
dataKey: series.dataKey,
|
|
146
|
+
name: series.name ?? void 0,
|
|
147
|
+
nameKey: series.nameKey ?? void 0,
|
|
148
|
+
outerRadius: "68%",
|
|
149
|
+
children: props.data.map((datum, index) => /* @__PURE__ */ jsx(Cell, { fill: datumColor(datum, series, index) }, index))
|
|
150
|
+
})
|
|
151
|
+
]
|
|
152
|
+
})
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
var ChartComponent = ({ node }) => {
|
|
156
|
+
const props = node.props;
|
|
157
|
+
const pieSeries = props.series.find((series) => series.type === "pie");
|
|
158
|
+
const hasCartesianSeries = props.series.some(isCartesianSeries);
|
|
159
|
+
return /* @__PURE__ */ jsx(ChartFrame, {
|
|
160
|
+
description: props.description,
|
|
161
|
+
id: node.id,
|
|
162
|
+
title: props.title,
|
|
163
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
164
|
+
className: "min-h-0 w-full",
|
|
165
|
+
children: pieSeries && !hasCartesianSeries ? /* @__PURE__ */ jsx(PieChartView, {
|
|
166
|
+
props,
|
|
167
|
+
series: pieSeries
|
|
168
|
+
}) : /* @__PURE__ */ jsx(CartesianChart, { props })
|
|
169
|
+
})
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
//#endregion
|
|
173
|
+
export { ChartComponent as default };
|
|
174
|
+
|
|
175
|
+
//# sourceMappingURL=chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart.js","names":[],"sources":["../../../resources/js/core/components/chart.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 type { PropsOf, RendererComponent } from \"@lattice-php/lattice/core/types\";\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 };\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-xs\"\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\n return (\n <ResponsiveContainer width=\"100%\" height={props.height}>\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 tickLine={false}\n />\n )}\n {props.yAxis && (\n <YAxis stroke=\"var(--lt-muted-fg)\" tick={axisTick} tickLine={false} width={42} />\n )}\n {props.tooltip && <Tooltip />}\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 return (\n <ResponsiveContainer width=\"100%\" height={props.height}>\n <PieChart margin={chartMargin}>\n {props.tooltip && <Tooltip />}\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 ChartComponent: 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={node.id} 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 ChartComponent;\n"],"mappings":";;;AAgCA,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;AAEhC,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;CAE9C,OACE,oBAAC,qBAAD;EAAqB,OAAM;EAAO,QAAQ,MAAM;YAC9C,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,UAAU;IACX,CAAA;IAEF,MAAM,SACL,oBAAC,OAAD;KAAO,QAAO;KAAqB,MAAM;KAAU,UAAU;KAAO,OAAO;IAAK,CAAA;IAEjF,MAAM,WAAW,oBAAC,SAAD,CAAU,CAAA;IAC3B,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,OACE,oBAAC,qBAAD;EAAqB,OAAM;EAAO,QAAQ,MAAM;YAC9C,qBAAC,UAAD;GAAU,QAAQ;aAAlB;IACG,MAAM,WAAW,oBAAC,SAAD,CAAU,CAAA;IAC3B,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,kBAA8C,EAAE,WAAW;CAC/D,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,KAAK;EAAI,OAAO,MAAM;YACpE,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,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/core/components/checkbox.tsx
|
|
7
7
|
function Checkbox({ className, ...props }) {
|
|
8
8
|
return /* @__PURE__ */ jsx(CheckboxPrimitive.Root, {
|
|
9
9
|
"data-slot": "checkbox",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","names":[],"sources":["
|
|
1
|
+
{"version":3,"file":"checkbox.js","names":[],"sources":["../../../resources/js/core/components/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-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,6bACA,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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Option } from '../types';
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/**
|
|
4
|
+
* A popover select list with an optional search box and single/multi selection.
|
|
5
|
+
*
|
|
6
|
+
* Selection state is controlled by the consumer (`selected` + `onSelect`); the
|
|
7
|
+
* consumer also owns option fetching. Pass `onSearch` for remote search (the
|
|
8
|
+
* combobox debounces the query and renders `options` as given); omit it to
|
|
9
|
+
* filter the provided `options` locally by label. The combobox closes itself
|
|
10
|
+
* after a single-select.
|
|
11
|
+
*/
|
|
12
|
+
declare function Combobox({ contentClassName, emptyLabel, loading, multiple, onSearch, onSelect, open, onOpenChange, options, searchLabel, searchPlaceholder, selected, showSearch, testId, trigger, triggerClassName, triggerProps, }: {
|
|
13
|
+
contentClassName?: string;
|
|
14
|
+
emptyLabel?: string;
|
|
15
|
+
loading?: boolean;
|
|
16
|
+
multiple?: boolean;
|
|
17
|
+
onSearch?: (query: string) => void;
|
|
18
|
+
onSelect: (value: string) => void;
|
|
19
|
+
open: boolean;
|
|
20
|
+
onOpenChange: (open: boolean) => void;
|
|
21
|
+
options: Option[];
|
|
22
|
+
searchLabel?: string;
|
|
23
|
+
searchPlaceholder?: string;
|
|
24
|
+
selected: string[];
|
|
25
|
+
showSearch?: boolean;
|
|
26
|
+
testId?: string;
|
|
27
|
+
trigger: React.ReactNode;
|
|
28
|
+
triggerClassName?: string;
|
|
29
|
+
triggerProps?: React.ComponentProps<"button"> & {
|
|
30
|
+
"data-test"?: string;
|
|
31
|
+
};
|
|
32
|
+
}): React.JSX.Element;
|
|
33
|
+
export { Combobox };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { cn } from "../../lib/utils.js";
|
|
2
|
+
import { Icon } from "../../icons/sprite.js";
|
|
3
|
+
import { useT } from "../../i18n/instance.js";
|
|
4
|
+
import { Popover, PopoverContent, PopoverTrigger } from "./popover.js";
|
|
5
|
+
import { useEffect, useState } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
//#region resources/js/core/components/combobox.tsx
|
|
8
|
+
var SEARCH_DEBOUNCE_MS = 250;
|
|
9
|
+
/**
|
|
10
|
+
* A popover select list with an optional search box and single/multi selection.
|
|
11
|
+
*
|
|
12
|
+
* Selection state is controlled by the consumer (`selected` + `onSelect`); the
|
|
13
|
+
* consumer also owns option fetching. Pass `onSearch` for remote search (the
|
|
14
|
+
* combobox debounces the query and renders `options` as given); omit it to
|
|
15
|
+
* filter the provided `options` locally by label. The combobox closes itself
|
|
16
|
+
* after a single-select.
|
|
17
|
+
*/
|
|
18
|
+
function Combobox({ contentClassName, emptyLabel, loading = false, multiple = false, onSearch, onSelect, open, onOpenChange, options, searchLabel, searchPlaceholder, selected, showSearch = true, testId, trigger, triggerClassName, triggerProps }) {
|
|
19
|
+
const { t } = useT("lattice");
|
|
20
|
+
const [query, setQuery] = useState("");
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!onSearch || !open) return;
|
|
23
|
+
const timer = window.setTimeout(() => onSearch(query), SEARCH_DEBOUNCE_MS);
|
|
24
|
+
return () => window.clearTimeout(timer);
|
|
25
|
+
}, [
|
|
26
|
+
query,
|
|
27
|
+
onSearch,
|
|
28
|
+
open
|
|
29
|
+
]);
|
|
30
|
+
const visibleOptions = onSearch ? options : options.filter((option) => option.label.toLowerCase().includes(query.toLowerCase()));
|
|
31
|
+
function close() {
|
|
32
|
+
setQuery("");
|
|
33
|
+
onOpenChange(false);
|
|
34
|
+
}
|
|
35
|
+
function choose(value) {
|
|
36
|
+
onSelect(value);
|
|
37
|
+
if (!multiple) close();
|
|
38
|
+
}
|
|
39
|
+
return /* @__PURE__ */ jsxs(Popover, {
|
|
40
|
+
open,
|
|
41
|
+
onOpenChange: (next) => next ? onOpenChange(true) : close(),
|
|
42
|
+
children: [/* @__PURE__ */ jsx(PopoverTrigger, {
|
|
43
|
+
asChild: true,
|
|
44
|
+
children: /* @__PURE__ */ jsx("button", {
|
|
45
|
+
type: "button",
|
|
46
|
+
className: triggerClassName,
|
|
47
|
+
...triggerProps,
|
|
48
|
+
children: trigger
|
|
49
|
+
})
|
|
50
|
+
}), /* @__PURE__ */ jsxs(PopoverContent, {
|
|
51
|
+
align: "start",
|
|
52
|
+
className: cn("w-[var(--radix-popover-trigger-width)] overflow-hidden p-0", contentClassName),
|
|
53
|
+
children: [showSearch && /* @__PURE__ */ jsxs("div", {
|
|
54
|
+
className: "flex items-center gap-2 border-b border-lt-border px-3 py-2",
|
|
55
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
56
|
+
"aria-label": searchLabel ?? t("a11y.searchOptions", "Search options"),
|
|
57
|
+
"data-slot": "combobox-search",
|
|
58
|
+
"data-test": testId ? `${testId}-search` : void 0,
|
|
59
|
+
className: "w-full bg-transparent text-sm outline-none placeholder:text-lt-muted-fg",
|
|
60
|
+
onChange: (event) => setQuery(event.target.value),
|
|
61
|
+
placeholder: searchPlaceholder,
|
|
62
|
+
value: query
|
|
63
|
+
}), loading && /* @__PURE__ */ jsx(Icon, {
|
|
64
|
+
name: "loader-2",
|
|
65
|
+
"aria-hidden": "true",
|
|
66
|
+
className: "size-lt-icon-md shrink-0 animate-spin text-lt-muted-fg"
|
|
67
|
+
})]
|
|
68
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
69
|
+
className: "max-h-60 overflow-y-auto p-1",
|
|
70
|
+
role: "listbox",
|
|
71
|
+
children: visibleOptions.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
72
|
+
className: "px-3 py-2 text-sm text-lt-muted-fg",
|
|
73
|
+
children: emptyLabel
|
|
74
|
+
}) : visibleOptions.map((option) => {
|
|
75
|
+
const isSelected = selected.includes(option.value);
|
|
76
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
77
|
+
"aria-selected": isSelected,
|
|
78
|
+
className: cn("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", isSelected && "bg-lt-accent/60"),
|
|
79
|
+
"data-slot": "combobox-option",
|
|
80
|
+
"data-test": testId ? `${testId}-option-${option.value}` : void 0,
|
|
81
|
+
"data-value": option.value,
|
|
82
|
+
onClick: () => choose(option.value),
|
|
83
|
+
role: "option",
|
|
84
|
+
type: "button",
|
|
85
|
+
children: [option.label, isSelected && /* @__PURE__ */ jsx(Icon, {
|
|
86
|
+
name: "check",
|
|
87
|
+
"aria-hidden": "true",
|
|
88
|
+
className: "size-lt-icon-md shrink-0"
|
|
89
|
+
})]
|
|
90
|
+
}, option.value);
|
|
91
|
+
})
|
|
92
|
+
})]
|
|
93
|
+
})]
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
export { Combobox };
|
|
98
|
+
|
|
99
|
+
//# sourceMappingURL=combobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combobox.js","names":[],"sources":["../../../resources/js/core/components/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(\"a11y.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"}
|