@alfakit/react 0.0.0-stage → 0.1.1
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/CHANGELOG.md +9 -0
- package/LICENSE.md +21 -0
- package/README.md +19 -2
- package/dist/app/components.d.ts +49 -0
- package/dist/app/components.d.ts.map +1 -0
- package/dist/app/components.js +99 -0
- package/dist/app/components.js.map +1 -0
- package/dist/app/hooks.d.ts +79 -0
- package/dist/app/hooks.d.ts.map +1 -0
- package/dist/app/hooks.js +239 -0
- package/dist/app/hooks.js.map +1 -0
- package/dist/components/actions/action-button.d.ts +17 -0
- package/dist/components/actions/action-button.d.ts.map +1 -0
- package/dist/components/actions/action-button.js +150 -0
- package/dist/components/actions/action-button.js.map +1 -0
- package/dist/components/actions/action-context.d.ts +11 -0
- package/dist/components/actions/action-context.d.ts.map +1 -0
- package/dist/components/actions/action-context.js +24 -0
- package/dist/components/actions/action-context.js.map +1 -0
- package/dist/components/actions/action-list.d.ts +20 -0
- package/dist/components/actions/action-list.d.ts.map +1 -0
- package/dist/components/actions/action-list.js +181 -0
- package/dist/components/actions/action-list.js.map +1 -0
- package/dist/components/actions/action-modals.d.ts +5 -0
- package/dist/components/actions/action-modals.d.ts.map +1 -0
- package/dist/components/actions/action-modals.js +362 -0
- package/dist/components/actions/action-modals.js.map +1 -0
- package/dist/components/actions/index.d.ts +5 -0
- package/dist/components/ai/copilot-panel.js +439 -0
- package/dist/components/ai/copilot-panel.js.map +1 -0
- package/dist/components/ai/copilot.d.ts +12 -0
- package/dist/components/ai/copilot.d.ts.map +1 -0
- package/dist/components/ai/copilot.js +66 -0
- package/dist/components/ai/copilot.js.map +1 -0
- package/dist/components/ai/index.d.ts +3 -0
- package/dist/components/ai/index.js +3 -0
- package/dist/components/ai/stream-lazy.d.ts +9 -0
- package/dist/components/ai/stream-lazy.d.ts.map +1 -0
- package/dist/components/ai/stream-lazy.js +13 -0
- package/dist/components/ai/stream-lazy.js.map +1 -0
- package/dist/components/ai/stream.js +85 -0
- package/dist/components/ai/stream.js.map +1 -0
- package/dist/components/analytics/alfakit-analytics.d.ts +14 -0
- package/dist/components/analytics/alfakit-analytics.d.ts.map +1 -0
- package/dist/components/analytics/alfakit-analytics.js +36 -0
- package/dist/components/analytics/alfakit-analytics.js.map +1 -0
- package/dist/components/analytics/breakdown.d.ts +11 -0
- package/dist/components/analytics/breakdown.d.ts.map +1 -0
- package/dist/components/analytics/breakdown.js +155 -0
- package/dist/components/analytics/breakdown.js.map +1 -0
- package/dist/components/analytics/index.d.ts +3 -0
- package/dist/components/cms/admin-bar.js +68 -0
- package/dist/components/cms/admin-bar.js.map +1 -0
- package/dist/components/cms/blocks.d.ts +41 -0
- package/dist/components/cms/blocks.d.ts.map +1 -0
- package/dist/components/cms/blocks.js +400 -0
- package/dist/components/cms/blocks.js.map +1 -0
- package/dist/components/cms/context.d.ts +24 -0
- package/dist/components/cms/context.d.ts.map +1 -0
- package/dist/components/cms/context.js +43 -0
- package/dist/components/cms/context.js.map +1 -0
- package/dist/components/cms/head.d.ts +11 -0
- package/dist/components/cms/head.d.ts.map +1 -0
- package/dist/components/cms/head.js +40 -0
- package/dist/components/cms/head.js.map +1 -0
- package/dist/components/cms/index.d.ts +8 -0
- package/dist/components/cms/index.js +8 -0
- package/dist/components/cms/live-preview-lazy.d.ts +9 -0
- package/dist/components/cms/live-preview-lazy.d.ts.map +1 -0
- package/dist/components/cms/live-preview-lazy.js +13 -0
- package/dist/components/cms/live-preview-lazy.js.map +1 -0
- package/dist/components/cms/live-preview.js +288 -0
- package/dist/components/cms/live-preview.js.map +1 -0
- package/dist/components/cms/menu.d.ts +24 -0
- package/dist/components/cms/menu.d.ts.map +1 -0
- package/dist/components/cms/menu.js +181 -0
- package/dist/components/cms/menu.js.map +1 -0
- package/dist/components/cms/page.d.ts +27 -0
- package/dist/components/cms/page.d.ts.map +1 -0
- package/dist/components/cms/page.js +180 -0
- package/dist/components/cms/page.js.map +1 -0
- package/dist/components/cms/parts.d.ts +24 -0
- package/dist/components/cms/parts.d.ts.map +1 -0
- package/dist/components/cms/parts.js +58 -0
- package/dist/components/cms/parts.js.map +1 -0
- package/dist/components/dev-tools/dev-tools-inspector.js +302 -0
- package/dist/components/dev-tools/dev-tools-inspector.js.map +1 -0
- package/dist/components/dev-tools/dev-tools-slot.js +24 -0
- package/dist/components/dev-tools/dev-tools-slot.js.map +1 -0
- package/dist/components/entries/code-entry.d.ts +8 -0
- package/dist/components/entries/code-entry.d.ts.map +1 -0
- package/dist/components/entries/code-entry.js +59 -0
- package/dist/components/entries/code-entry.js.map +1 -0
- package/dist/components/entries/entry-wrapper.d.ts +13 -0
- package/dist/components/entries/entry-wrapper.d.ts.map +1 -0
- package/dist/components/entries/entry-wrapper.js +175 -0
- package/dist/components/entries/entry-wrapper.js.map +1 -0
- package/dist/components/entries/index.d.ts +6 -0
- package/dist/components/entries/other-entries.d.ts +20 -0
- package/dist/components/entries/other-entries.d.ts.map +1 -0
- package/dist/components/entries/other-entries.js +169 -0
- package/dist/components/entries/other-entries.js.map +1 -0
- package/dist/components/entries/repeatable-entry-table.js +33 -0
- package/dist/components/entries/repeatable-entry-table.js.map +1 -0
- package/dist/components/entries/text-entry.d.ts +12 -0
- package/dist/components/entries/text-entry.d.ts.map +1 -0
- package/dist/components/entries/text-entry.js +181 -0
- package/dist/components/entries/text-entry.js.map +1 -0
- package/dist/components/entries/view-entry.d.ts +8 -0
- package/dist/components/entries/view-entry.d.ts.map +1 -0
- package/dist/components/entries/view-entry.js +26 -0
- package/dist/components/entries/view-entry.js.map +1 -0
- package/dist/components/fields/builder-picker.js +215 -0
- package/dist/components/fields/builder-picker.js.map +1 -0
- package/dist/components/fields/builder.d.ts +16 -0
- package/dist/components/fields/builder.d.ts.map +1 -0
- package/dist/components/fields/builder.js +351 -0
- package/dist/components/fields/builder.js.map +1 -0
- package/dist/components/fields/checkbox-list.d.ts +7 -0
- package/dist/components/fields/checkbox-list.d.ts.map +1 -0
- package/dist/components/fields/checkbox-list.js +133 -0
- package/dist/components/fields/checkbox-list.js.map +1 -0
- package/dist/components/fields/checkbox.d.ts +7 -0
- package/dist/components/fields/checkbox.d.ts.map +1 -0
- package/dist/components/fields/checkbox.js +29 -0
- package/dist/components/fields/checkbox.js.map +1 -0
- package/dist/components/fields/code-editor-lazy.d.ts +9 -0
- package/dist/components/fields/code-editor-lazy.d.ts.map +1 -0
- package/dist/components/fields/code-editor-lazy.js +31 -0
- package/dist/components/fields/code-editor-lazy.js.map +1 -0
- package/dist/components/fields/code-editor.js +107 -0
- package/dist/components/fields/code-editor.js.map +1 -0
- package/dist/components/fields/code-tokens.js +18 -0
- package/dist/components/fields/code-tokens.js.map +1 -0
- package/dist/components/fields/color-picker.d.ts +7 -0
- package/dist/components/fields/color-picker.d.ts.map +1 -0
- package/dist/components/fields/color-picker.js +70 -0
- package/dist/components/fields/color-picker.js.map +1 -0
- package/dist/components/fields/date-picker.d.ts +7 -0
- package/dist/components/fields/date-picker.d.ts.map +1 -0
- package/dist/components/fields/date-picker.js +230 -0
- package/dist/components/fields/date-picker.js.map +1 -0
- package/dist/components/fields/file-upload.d.ts +7 -0
- package/dist/components/fields/file-upload.d.ts.map +1 -0
- package/dist/components/fields/file-upload.js +397 -0
- package/dist/components/fields/file-upload.js.map +1 -0
- package/dist/components/fields/hidden.d.ts +7 -0
- package/dist/components/fields/hidden.d.ts.map +1 -0
- package/dist/components/fields/hidden.js +17 -0
- package/dist/components/fields/hidden.js.map +1 -0
- package/dist/components/fields/icon-picker-lazy.d.ts +9 -0
- package/dist/components/fields/icon-picker-lazy.d.ts.map +1 -0
- package/dist/components/fields/icon-picker-lazy.js +45 -0
- package/dist/components/fields/icon-picker-lazy.js.map +1 -0
- package/dist/components/fields/icon-picker-value.js +48 -0
- package/dist/components/fields/icon-picker-value.js.map +1 -0
- package/dist/components/fields/icon-picker.js +228 -0
- package/dist/components/fields/icon-picker.js.map +1 -0
- package/dist/components/fields/image-editor-dialog-lazy.js +18 -0
- package/dist/components/fields/image-editor-dialog-lazy.js.map +1 -0
- package/dist/components/fields/image-editor-dialog.js +328 -0
- package/dist/components/fields/image-editor-dialog.js.map +1 -0
- package/dist/components/fields/index.d.ts +24 -0
- package/dist/components/fields/item-actions.js +270 -0
- package/dist/components/fields/item-actions.js.map +1 -0
- package/dist/components/fields/key-value.d.ts +11 -0
- package/dist/components/fields/key-value.d.ts.map +1 -0
- package/dist/components/fields/key-value.js +194 -0
- package/dist/components/fields/key-value.js.map +1 -0
- package/dist/components/fields/lazy-fields.d.ts +13 -0
- package/dist/components/fields/lazy-fields.d.ts.map +1 -0
- package/dist/components/fields/lazy-fields.js +34 -0
- package/dist/components/fields/lazy-fields.js.map +1 -0
- package/dist/components/fields/modal-table-select.js +386 -0
- package/dist/components/fields/modal-table-select.js.map +1 -0
- package/dist/components/fields/money-input.d.ts +7 -0
- package/dist/components/fields/money-input.d.ts.map +1 -0
- package/dist/components/fields/money-input.js +91 -0
- package/dist/components/fields/money-input.js.map +1 -0
- package/dist/components/fields/one-time-code-input.d.ts +12 -0
- package/dist/components/fields/one-time-code-input.d.ts.map +1 -0
- package/dist/components/fields/one-time-code-input.js +53 -0
- package/dist/components/fields/one-time-code-input.js.map +1 -0
- package/dist/components/fields/query-builder-rules.js +295 -0
- package/dist/components/fields/query-builder-rules.js.map +1 -0
- package/dist/components/fields/radio.d.ts +7 -0
- package/dist/components/fields/radio.d.ts.map +1 -0
- package/dist/components/fields/radio.js +57 -0
- package/dist/components/fields/radio.js.map +1 -0
- package/dist/components/fields/repeater-table.js +111 -0
- package/dist/components/fields/repeater-table.js.map +1 -0
- package/dist/components/fields/repeater.d.ts +15 -0
- package/dist/components/fields/repeater.d.ts.map +1 -0
- package/dist/components/fields/repeater.js +209 -0
- package/dist/components/fields/repeater.js.map +1 -0
- package/dist/components/fields/rich-editor-extensions.js +295 -0
- package/dist/components/fields/rich-editor-extensions.js.map +1 -0
- package/dist/components/fields/rich-editor-lazy.d.ts +9 -0
- package/dist/components/fields/rich-editor-lazy.d.ts.map +1 -0
- package/dist/components/fields/rich-editor-lazy.js +24 -0
- package/dist/components/fields/rich-editor-lazy.js.map +1 -0
- package/dist/components/fields/rich-editor.js +517 -0
- package/dist/components/fields/rich-editor.js.map +1 -0
- package/dist/components/fields/select.d.ts +7 -0
- package/dist/components/fields/select.d.ts.map +1 -0
- package/dist/components/fields/select.js +455 -0
- package/dist/components/fields/select.js.map +1 -0
- package/dist/components/fields/slider.d.ts +12 -0
- package/dist/components/fields/slider.d.ts.map +1 -0
- package/dist/components/fields/slider.js +146 -0
- package/dist/components/fields/slider.js.map +1 -0
- package/dist/components/fields/tags-input.d.ts +7 -0
- package/dist/components/fields/tags-input.d.ts.map +1 -0
- package/dist/components/fields/tags-input.js +129 -0
- package/dist/components/fields/tags-input.js.map +1 -0
- package/dist/components/fields/text-input.d.ts +7 -0
- package/dist/components/fields/text-input.d.ts.map +1 -0
- package/dist/components/fields/text-input.js +135 -0
- package/dist/components/fields/text-input.js.map +1 -0
- package/dist/components/fields/textarea.d.ts +7 -0
- package/dist/components/fields/textarea.d.ts.map +1 -0
- package/dist/components/fields/textarea.js +37 -0
- package/dist/components/fields/textarea.js.map +1 -0
- package/dist/components/fields/toggle-buttons.d.ts +7 -0
- package/dist/components/fields/toggle-buttons.d.ts.map +1 -0
- package/dist/components/fields/toggle-buttons.js +84 -0
- package/dist/components/fields/toggle-buttons.js.map +1 -0
- package/dist/components/fields/toggle.d.ts +7 -0
- package/dist/components/fields/toggle.d.ts.map +1 -0
- package/dist/components/fields/toggle.js +39 -0
- package/dist/components/fields/toggle.js.map +1 -0
- package/dist/components/file-manager/file-manager-lazy.d.ts +10 -0
- package/dist/components/file-manager/file-manager-lazy.d.ts.map +1 -0
- package/dist/components/file-manager/file-manager-lazy.js +49 -0
- package/dist/components/file-manager/file-manager-lazy.js.map +1 -0
- package/dist/components/file-manager/file-manager.d.ts +1 -0
- package/dist/components/file-manager/file-manager.js +1387 -0
- package/dist/components/file-manager/file-manager.js.map +1 -0
- package/dist/components/file-manager/index.d.ts +3 -0
- package/dist/components/file-manager/picker-field.d.ts +12 -0
- package/dist/components/file-manager/picker-field.d.ts.map +1 -0
- package/dist/components/file-manager/picker-field.js +124 -0
- package/dist/components/file-manager/picker-field.js.map +1 -0
- package/dist/components/form/form-block.d.ts +12 -0
- package/dist/components/form/form-block.d.ts.map +1 -0
- package/dist/components/form/form-block.js +155 -0
- package/dist/components/form/form-block.js.map +1 -0
- package/dist/components/form/form-context.d.ts +27 -0
- package/dist/components/form/form-context.d.ts.map +1 -0
- package/dist/components/form/form-context.js +65 -0
- package/dist/components/form/form-context.js.map +1 -0
- package/dist/components/helpdesk/chat-panel.js +209 -0
- package/dist/components/helpdesk/chat-panel.js.map +1 -0
- package/dist/components/helpdesk/chat-widget.d.ts +23 -0
- package/dist/components/helpdesk/chat-widget.d.ts.map +1 -0
- package/dist/components/helpdesk/chat-widget.js +76 -0
- package/dist/components/helpdesk/chat-widget.js.map +1 -0
- package/dist/components/helpdesk/inbox-lazy.d.ts +9 -0
- package/dist/components/helpdesk/inbox-lazy.d.ts.map +1 -0
- package/dist/components/helpdesk/inbox-lazy.js +46 -0
- package/dist/components/helpdesk/inbox-lazy.js.map +1 -0
- package/dist/components/helpdesk/inbox.js +609 -0
- package/dist/components/helpdesk/inbox.js.map +1 -0
- package/dist/components/helpdesk/index.d.ts +3 -0
- package/dist/components/kanban/index.d.ts +2 -0
- package/dist/components/kanban/index.js +2 -0
- package/dist/components/kanban/kanban-lazy.d.ts +10 -0
- package/dist/components/kanban/kanban-lazy.d.ts.map +1 -0
- package/dist/components/kanban/kanban-lazy.js +31 -0
- package/dist/components/kanban/kanban-lazy.js.map +1 -0
- package/dist/components/kanban/kanban.js +591 -0
- package/dist/components/kanban/kanban.js.map +1 -0
- package/dist/components/layout/actions.js +40 -0
- package/dist/components/layout/actions.js.map +1 -0
- package/dist/components/layout/component-context.d.ts +13 -0
- package/dist/components/layout/component-context.d.ts.map +1 -0
- package/dist/components/layout/component-context.js +28 -0
- package/dist/components/layout/component-context.js.map +1 -0
- package/dist/components/layout/deferred.js +135 -0
- package/dist/components/layout/deferred.js.map +1 -0
- package/dist/components/layout/elements.d.ts +23 -0
- package/dist/components/layout/elements.d.ts.map +1 -0
- package/dist/components/layout/elements.js +183 -0
- package/dist/components/layout/elements.js.map +1 -0
- package/dist/components/layout/fieldset.d.ts +7 -0
- package/dist/components/layout/fieldset.d.ts.map +1 -0
- package/dist/components/layout/fieldset.js +29 -0
- package/dist/components/layout/fieldset.js.map +1 -0
- package/dist/components/layout/fused-group.d.ts +11 -0
- package/dist/components/layout/fused-group.d.ts.map +1 -0
- package/dist/components/layout/fused-group.js +64 -0
- package/dist/components/layout/fused-group.js.map +1 -0
- package/dist/components/layout/grid.d.ts +7 -0
- package/dist/components/layout/grid.d.ts.map +1 -0
- package/dist/components/layout/grid.js +20 -0
- package/dist/components/layout/grid.js.map +1 -0
- package/dist/components/layout/index.d.ts +12 -0
- package/dist/components/layout/mixed-content.d.ts +14 -0
- package/dist/components/layout/mixed-content.d.ts.map +1 -0
- package/dist/components/layout/mixed-content.js +44 -0
- package/dist/components/layout/mixed-content.js.map +1 -0
- package/dist/components/layout/prime.d.ts +17 -0
- package/dist/components/layout/prime.d.ts.map +1 -0
- package/dist/components/layout/prime.js +126 -0
- package/dist/components/layout/prime.js.map +1 -0
- package/dist/components/layout/schema-children.d.ts +18 -0
- package/dist/components/layout/schema-children.d.ts.map +1 -0
- package/dist/components/layout/schema-children.js +26 -0
- package/dist/components/layout/schema-children.js.map +1 -0
- package/dist/components/layout/section.d.ts +7 -0
- package/dist/components/layout/section.d.ts.map +1 -0
- package/dist/components/layout/section.js +133 -0
- package/dist/components/layout/section.js.map +1 -0
- package/dist/components/layout/tabs.d.ts +7 -0
- package/dist/components/layout/tabs.d.ts.map +1 -0
- package/dist/components/layout/tabs.js +83 -0
- package/dist/components/layout/tabs.js.map +1 -0
- package/dist/components/layout/wizard.d.ts +7 -0
- package/dist/components/layout/wizard.d.ts.map +1 -0
- package/dist/components/layout/wizard.js +172 -0
- package/dist/components/layout/wizard.js.map +1 -0
- package/dist/components/notifications/flash-toasts.d.ts +20 -0
- package/dist/components/notifications/flash-toasts.d.ts.map +1 -0
- package/dist/components/notifications/flash-toasts.js +121 -0
- package/dist/components/notifications/flash-toasts.js.map +1 -0
- package/dist/components/notifications/index.d.ts +5 -0
- package/dist/components/notifications/notifications-menu.d.ts +15 -0
- package/dist/components/notifications/notifications-menu.d.ts.map +1 -0
- package/dist/components/notifications/notifications-menu.js +201 -0
- package/dist/components/notifications/notifications-menu.js.map +1 -0
- package/dist/components/notifications/realtime-notifications.d.ts +9 -0
- package/dist/components/notifications/realtime-notifications.d.ts.map +1 -0
- package/dist/components/notifications/realtime-notifications.js +30 -0
- package/dist/components/notifications/realtime-notifications.js.map +1 -0
- package/dist/components/notifications/undo-button.d.ts +13 -0
- package/dist/components/notifications/undo-button.d.ts.map +1 -0
- package/dist/components/notifications/undo-button.js +54 -0
- package/dist/components/notifications/undo-button.js.map +1 -0
- package/dist/components/panel/app-sidebar.d.ts +7 -0
- package/dist/components/panel/app-sidebar.d.ts.map +1 -0
- package/dist/components/panel/app-sidebar.js +302 -0
- package/dist/components/panel/app-sidebar.js.map +1 -0
- package/dist/components/panel/bottom-nav.d.ts +9 -0
- package/dist/components/panel/bottom-nav.d.ts.map +1 -0
- package/dist/components/panel/bottom-nav.js +100 -0
- package/dist/components/panel/bottom-nav.js.map +1 -0
- package/dist/components/panel/debug-panel-slot.d.ts +8 -0
- package/dist/components/panel/debug-panel-slot.d.ts.map +1 -0
- package/dist/components/panel/debug-panel-slot.js +19 -0
- package/dist/components/panel/debug-panel-slot.js.map +1 -0
- package/dist/components/panel/debug-panel.d.ts +18 -0
- package/dist/components/panel/debug-panel.d.ts.map +1 -0
- package/dist/components/panel/debug-panel.js +423 -0
- package/dist/components/panel/debug-panel.js.map +1 -0
- package/dist/components/panel/global-search-palette.js +278 -0
- package/dist/components/panel/global-search-palette.js.map +1 -0
- package/dist/components/panel/global-search.d.ts +13 -0
- package/dist/components/panel/global-search.d.ts.map +1 -0
- package/dist/components/panel/global-search.js +114 -0
- package/dist/components/panel/global-search.js.map +1 -0
- package/dist/components/panel/impersonation-banner.d.ts +11 -0
- package/dist/components/panel/impersonation-banner.d.ts.map +1 -0
- package/dist/components/panel/impersonation-banner.js +52 -0
- package/dist/components/panel/impersonation-banner.js.map +1 -0
- package/dist/components/panel/index.d.ts +18 -0
- package/dist/components/panel/keyboard-shortcuts.d.ts +10 -0
- package/dist/components/panel/keyboard-shortcuts.d.ts.map +1 -0
- package/dist/components/panel/keyboard-shortcuts.js +107 -0
- package/dist/components/panel/keyboard-shortcuts.js.map +1 -0
- package/dist/components/panel/lazy-placeholder.d.ts +11 -0
- package/dist/components/panel/lazy-placeholder.d.ts.map +1 -0
- package/dist/components/panel/lazy-placeholder.js +35 -0
- package/dist/components/panel/lazy-placeholder.js.map +1 -0
- package/dist/components/panel/locale-switcher.d.ts +19 -0
- package/dist/components/panel/locale-switcher.d.ts.map +1 -0
- package/dist/components/panel/locale-switcher.js +113 -0
- package/dist/components/panel/locale-switcher.js.map +1 -0
- package/dist/components/panel/menu-item.js +65 -0
- package/dist/components/panel/menu-item.js.map +1 -0
- package/dist/components/panel/nav-label.js +29 -0
- package/dist/components/panel/nav-label.js.map +1 -0
- package/dist/components/panel/pwa.d.ts +13 -0
- package/dist/components/panel/pwa.d.ts.map +1 -0
- package/dist/components/panel/pwa.js +90 -0
- package/dist/components/panel/pwa.js.map +1 -0
- package/dist/components/panel/schema-contract-guard.js +44 -0
- package/dist/components/panel/schema-contract-guard.js.map +1 -0
- package/dist/components/panel/shortcut-keys.d.ts +11 -0
- package/dist/components/panel/shortcut-keys.d.ts.map +1 -0
- package/dist/components/panel/shortcut-keys.js +33 -0
- package/dist/components/panel/shortcut-keys.js.map +1 -0
- package/dist/components/panel/shortcuts-overlay.d.ts +13 -0
- package/dist/components/panel/shortcuts-overlay.d.ts.map +1 -0
- package/dist/components/panel/shortcuts-overlay.js +159 -0
- package/dist/components/panel/shortcuts-overlay.js.map +1 -0
- package/dist/components/panel/slot.d.ts +18 -0
- package/dist/components/panel/slot.d.ts.map +1 -0
- package/dist/components/panel/slot.js +31 -0
- package/dist/components/panel/slot.js.map +1 -0
- package/dist/components/panel/sub-navigation.js +125 -0
- package/dist/components/panel/sub-navigation.js.map +1 -0
- package/dist/components/panel/tenant-menu.d.ts +10 -0
- package/dist/components/panel/tenant-menu.d.ts.map +1 -0
- package/dist/components/panel/tenant-menu.js +196 -0
- package/dist/components/panel/tenant-menu.js.map +1 -0
- package/dist/components/panel/theme-toggle.d.ts +4 -0
- package/dist/components/panel/theme-toggle.d.ts.map +1 -0
- package/dist/components/panel/theme-toggle.js +84 -0
- package/dist/components/panel/theme-toggle.js.map +1 -0
- package/dist/components/panel/topbar.d.ts +10 -0
- package/dist/components/panel/topbar.d.ts.map +1 -0
- package/dist/components/panel/topbar.js +74 -0
- package/dist/components/panel/topbar.js.map +1 -0
- package/dist/components/panel/user-menu.d.ts +16 -0
- package/dist/components/panel/user-menu.d.ts.map +1 -0
- package/dist/components/panel/user-menu.js +151 -0
- package/dist/components/panel/user-menu.js.map +1 -0
- package/dist/components/realtime/conflict-banner.d.ts +13 -0
- package/dist/components/realtime/conflict-banner.d.ts.map +1 -0
- package/dist/components/realtime/conflict-banner.js +193 -0
- package/dist/components/realtime/conflict-banner.js.map +1 -0
- package/dist/components/realtime/index.d.ts +4 -0
- package/dist/components/realtime/index.js +4 -0
- package/dist/components/realtime/live-records-pill.d.ts +19 -0
- package/dist/components/realtime/live-records-pill.d.ts.map +1 -0
- package/dist/components/realtime/live-records-pill.js +57 -0
- package/dist/components/realtime/live-records-pill.js.map +1 -0
- package/dist/components/realtime/record-presence.d.ts +12 -0
- package/dist/components/realtime/record-presence.d.ts.map +1 -0
- package/dist/components/realtime/record-presence.js +79 -0
- package/dist/components/realtime/record-presence.js.map +1 -0
- package/dist/components/schema/content-slot.js +49 -0
- package/dist/components/schema/content-slot.js.map +1 -0
- package/dist/components/schema/field-actions.js +72 -0
- package/dist/components/schema/field-actions.js.map +1 -0
- package/dist/components/schema/field-wrapper.d.ts +20 -0
- package/dist/components/schema/field-wrapper.d.ts.map +1 -0
- package/dist/components/schema/field-wrapper.js +210 -0
- package/dist/components/schema/field-wrapper.js.map +1 -0
- package/dist/components/schema/fused-group-context.js +14 -0
- package/dist/components/schema/fused-group-context.js.map +1 -0
- package/dist/components/schema/schema-renderer.d.ts +23 -0
- package/dist/components/schema/schema-renderer.d.ts.map +1 -0
- package/dist/components/schema/schema-renderer.js +77 -0
- package/dist/components/schema/schema-renderer.js.map +1 -0
- package/dist/components/schema/translatable-field.js +76 -0
- package/dist/components/schema/translatable-field.js.map +1 -0
- package/dist/components/schema/virtual-spacer.js +23 -0
- package/dist/components/schema/virtual-spacer.js.map +1 -0
- package/dist/components/table/cells.d.ts +12 -0
- package/dist/components/table/cells.d.ts.map +1 -0
- package/dist/components/table/cells.js +472 -0
- package/dist/components/table/cells.js.map +1 -0
- package/dist/components/table/column-manager.d.ts +17 -0
- package/dist/components/table/column-manager.d.ts.map +1 -0
- package/dist/components/table/column-manager.js +338 -0
- package/dist/components/table/column-manager.js.map +1 -0
- package/dist/components/table/content-layout.d.ts +30 -0
- package/dist/components/table/content-layout.d.ts.map +1 -0
- package/dist/components/table/content-layout.js +224 -0
- package/dist/components/table/content-layout.js.map +1 -0
- package/dist/components/table/filters.d.ts +15 -0
- package/dist/components/table/filters.d.ts.map +1 -0
- package/dist/components/table/filters.js +300 -0
- package/dist/components/table/filters.js.map +1 -0
- package/dist/components/table/grouping.js +194 -0
- package/dist/components/table/grouping.js.map +1 -0
- package/dist/components/table/index.d.ts +10 -0
- package/dist/components/table/list-tabs.js +105 -0
- package/dist/components/table/list-tabs.js.map +1 -0
- package/dist/components/table/pagination.d.ts +7 -0
- package/dist/components/table/pagination.d.ts.map +1 -0
- package/dist/components/table/pagination.js +255 -0
- package/dist/components/table/pagination.js.map +1 -0
- package/dist/components/table/record-cell.d.ts +25 -0
- package/dist/components/table/record-cell.d.ts.map +1 -0
- package/dist/components/table/record-cell.js +86 -0
- package/dist/components/table/record-cell.js.map +1 -0
- package/dist/components/table/spreadsheet-lazy.d.ts +7 -0
- package/dist/components/table/spreadsheet-lazy.d.ts.map +1 -0
- package/dist/components/table/spreadsheet-lazy.js +15 -0
- package/dist/components/table/spreadsheet-lazy.js.map +1 -0
- package/dist/components/table/spreadsheet.d.ts +11 -0
- package/dist/components/table/spreadsheet.d.ts.map +1 -0
- package/dist/components/table/spreadsheet.js +420 -0
- package/dist/components/table/spreadsheet.js.map +1 -0
- package/dist/components/table/summary-rows.js +104 -0
- package/dist/components/table/summary-rows.js.map +1 -0
- package/dist/components/table/table-block.d.ts +12 -0
- package/dist/components/table/table-block.d.ts.map +1 -0
- package/dist/components/table/table-block.js +875 -0
- package/dist/components/table/table-block.js.map +1 -0
- package/dist/components/table/table-views.d.ts +15 -0
- package/dist/components/table/table-views.d.ts.map +1 -0
- package/dist/components/table/table-views.js +376 -0
- package/dist/components/table/table-views.js.map +1 -0
- package/dist/components/table/trigger-button.js +44 -0
- package/dist/components/table/trigger-button.js.map +1 -0
- package/dist/components/translation-manager/index.d.ts +2 -0
- package/dist/components/translation-manager/index.js +2 -0
- package/dist/components/translation-manager/translation-manager-lazy.d.ts +9 -0
- package/dist/components/translation-manager/translation-manager-lazy.d.ts.map +1 -0
- package/dist/components/translation-manager/translation-manager-lazy.js +24 -0
- package/dist/components/translation-manager/translation-manager-lazy.js.map +1 -0
- package/dist/components/translation-manager/translation-manager.js +719 -0
- package/dist/components/translation-manager/translation-manager.js.map +1 -0
- package/dist/components/tree/index.d.ts +2 -0
- package/dist/components/tree/index.js +2 -0
- package/dist/components/tree/tree-lazy.d.ts +10 -0
- package/dist/components/tree/tree-lazy.d.ts.map +1 -0
- package/dist/components/tree/tree-lazy.js +24 -0
- package/dist/components/tree/tree-lazy.js.map +1 -0
- package/dist/components/tree/tree.js +291 -0
- package/dist/components/tree/tree.js.map +1 -0
- package/dist/components/ui/alert.d.ts +12 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +37 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +9 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.js +29 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +12 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +26 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +14 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.js +79 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.d.ts +13 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +47 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +7 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/calendar.js +48 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +12 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +56 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +7 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.js +21 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +9 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +25 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.d.ts +23 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/command.js +89 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +18 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +92 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +28 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +123 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/input.d.ts +6 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +15 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +7 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +15 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/popover.d.ts +10 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/popover.js +35 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +8 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/radio-group.js +28 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +8 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.js +36 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +18 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +96 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.d.ts +7 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.js +17 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +17 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.js +89 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sidebar.d.ts +72 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/sidebar.js +376 -0
- package/dist/components/ui/sidebar.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +6 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +14 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +6 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/sonner.js +34 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/spinner.d.ts +10 -0
- package/dist/components/ui/spinner.d.ts.map +1 -0
- package/dist/components/ui/spinner.js +30 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/switch.d.ts +7 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/switch.js +19 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.d.ts +13 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +67 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +10 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +36 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +14 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/tooltip.js +36 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/versions/record-versions.d.ts +12 -0
- package/dist/components/versions/record-versions.d.ts.map +1 -0
- package/dist/components/versions/record-versions.js +138 -0
- package/dist/components/versions/record-versions.js.map +1 -0
- package/dist/components/widgets/calendar-lazy.d.ts +9 -0
- package/dist/components/widgets/calendar-lazy.d.ts.map +1 -0
- package/dist/components/widgets/calendar-lazy.js +47 -0
- package/dist/components/widgets/calendar-lazy.js.map +1 -0
- package/dist/components/widgets/calendar.js +122 -0
- package/dist/components/widgets/calendar.js.map +1 -0
- package/dist/components/widgets/chart-filters.js +101 -0
- package/dist/components/widgets/chart-filters.js.map +1 -0
- package/dist/components/widgets/chart-lazy.d.ts +9 -0
- package/dist/components/widgets/chart-lazy.d.ts.map +1 -0
- package/dist/components/widgets/chart-lazy.js +27 -0
- package/dist/components/widgets/chart-lazy.js.map +1 -0
- package/dist/components/widgets/chart.js +216 -0
- package/dist/components/widgets/chart.js.map +1 -0
- package/dist/components/widgets/dashboard-customizer.d.ts +15 -0
- package/dist/components/widgets/dashboard-customizer.d.ts.map +1 -0
- package/dist/components/widgets/dashboard-customizer.js +219 -0
- package/dist/components/widgets/dashboard-customizer.js.map +1 -0
- package/dist/components/widgets/index.d.ts +6 -0
- package/dist/components/widgets/stats-overview.d.ts +7 -0
- package/dist/components/widgets/stats-overview.d.ts.map +1 -0
- package/dist/components/widgets/stats-overview.js +133 -0
- package/dist/components/widgets/stats-overview.js.map +1 -0
- package/dist/components/widgets/widgets-block.d.ts +10 -0
- package/dist/components/widgets/widgets-block.d.ts.map +1 -0
- package/dist/components/widgets/widgets-block.js +72 -0
- package/dist/components/widgets/widgets-block.js.map +1 -0
- package/dist/context.d.ts +55 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +115 -0
- package/dist/context.js.map +1 -0
- package/dist/create-alfakit.d.ts +25 -0
- package/dist/create-alfakit.d.ts.map +1 -0
- package/dist/create-alfakit.js +182 -0
- package/dist/create-alfakit.js.map +1 -0
- package/dist/eject-manifest.json +1128 -0
- package/dist/hooks/use-hydrated.d.ts +9 -0
- package/dist/hooks/use-hydrated.d.ts.map +1 -0
- package/dist/hooks/use-hydrated.js +15 -0
- package/dist/hooks/use-hydrated.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +8 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +21 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-store.d.ts +7 -0
- package/dist/hooks/use-store.d.ts.map +1 -0
- package/dist/hooks/use-store.js +13 -0
- package/dist/hooks/use-store.js.map +1 -0
- package/dist/hooks/use-virtual-list.d.ts +29 -0
- package/dist/hooks/use-virtual-list.d.ts.map +1 -0
- package/dist/hooks/use-virtual-list.js +73 -0
- package/dist/hooks/use-virtual-list.js.map +1 -0
- package/dist/index.d.ts +180 -0
- package/dist/index.js +161 -0
- package/dist/layouts/app-layout.d.ts +11 -0
- package/dist/layouts/app-layout.d.ts.map +1 -0
- package/dist/layouts/app-layout.js +104 -0
- package/dist/layouts/app-layout.js.map +1 -0
- package/dist/layouts/auth-layout.d.ts +11 -0
- package/dist/layouts/auth-layout.d.ts.map +1 -0
- package/dist/layouts/auth-layout.js +65 -0
- package/dist/layouts/auth-layout.js.map +1 -0
- package/dist/layouts/blank-layout.d.ts +7 -0
- package/dist/layouts/blank-layout.d.ts.map +1 -0
- package/dist/layouts/blank-layout.js +12 -0
- package/dist/layouts/blank-layout.js.map +1 -0
- package/dist/layouts/fullscreen-layout.d.ts +16 -0
- package/dist/layouts/fullscreen-layout.d.ts.map +1 -0
- package/dist/layouts/fullscreen-layout.js +107 -0
- package/dist/layouts/fullscreen-layout.js.map +1 -0
- package/dist/layouts/top-nav-layout.d.ts +15 -0
- package/dist/layouts/top-nav-layout.d.ts.map +1 -0
- package/dist/layouts/top-nav-layout.js +223 -0
- package/dist/layouts/top-nav-layout.js.map +1 -0
- package/dist/lib/attributes.d.ts +12 -0
- package/dist/lib/attributes.d.ts.map +1 -0
- package/dist/lib/attributes.js +55 -0
- package/dist/lib/attributes.js.map +1 -0
- package/dist/lib/colors.d.ts +23 -0
- package/dist/lib/colors.d.ts.map +1 -0
- package/dist/lib/colors.js +126 -0
- package/dist/lib/colors.js.map +1 -0
- package/dist/lib/discovery.d.ts +22 -0
- package/dist/lib/discovery.d.ts.map +1 -0
- package/dist/lib/discovery.js +45 -0
- package/dist/lib/discovery.js.map +1 -0
- package/dist/lib/icons.d.ts +24 -0
- package/dist/lib/icons.d.ts.map +1 -0
- package/dist/lib/icons.js +93 -0
- package/dist/lib/icons.js.map +1 -0
- package/dist/lib/lazy.d.ts +8 -0
- package/dist/lib/lazy.d.ts.map +1 -0
- package/dist/lib/lazy.js +47 -0
- package/dist/lib/lazy.js.map +1 -0
- package/dist/lib/new-tab-hint.js +15 -0
- package/dist/lib/new-tab-hint.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +10 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/pages/page.d.ts +23 -0
- package/dist/pages/page.d.ts.map +1 -0
- package/dist/pages/page.js +328 -0
- package/dist/pages/page.js.map +1 -0
- package/dist/registry.d.ts +7 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +113 -0
- package/dist/registry.js.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +38 -0
- package/dist/server.js.map +1 -0
- package/dist/standalone/alfakit-component.d.ts +30 -0
- package/dist/standalone/alfakit-component.d.ts.map +1 -0
- package/dist/standalone/alfakit-component.js +156 -0
- package/dist/standalone/alfakit-component.js.map +1 -0
- package/dist/standalone/alfakit-toaster.d.ts +26 -0
- package/dist/standalone/alfakit-toaster.d.ts.map +1 -0
- package/dist/standalone/alfakit-toaster.js +38 -0
- package/dist/standalone/alfakit-toaster.js.map +1 -0
- package/dist/standalone/configure.d.ts +14 -0
- package/dist/standalone/configure.d.ts.map +1 -0
- package/dist/standalone/configure.js +27 -0
- package/dist/standalone/configure.js.map +1 -0
- package/dist/standalone/index.d.ts +4 -0
- package/dist/standalone/runtime.js +94 -0
- package/dist/standalone/runtime.js.map +1 -0
- package/dist/standalone.css +150 -0
- package/dist/starter-kit/index.d.ts +4 -0
- package/dist/starter-kit/index.js +4 -0
- package/dist/starter-kit/navigation.d.ts +20 -0
- package/dist/starter-kit/navigation.d.ts.map +1 -0
- package/dist/starter-kit/navigation.js +25 -0
- package/dist/starter-kit/navigation.js.map +1 -0
- package/dist/starter-kit/starter-kit.d.ts +56 -0
- package/dist/starter-kit/starter-kit.d.ts.map +1 -0
- package/dist/starter-kit/starter-kit.js +120 -0
- package/dist/starter-kit/starter-kit.js.map +1 -0
- package/dist/starter-kit/widgets-loaded.js +172 -0
- package/dist/starter-kit/widgets-loaded.js.map +1 -0
- package/dist/starter-kit/widgets-triggers.js +90 -0
- package/dist/starter-kit/widgets-triggers.js.map +1 -0
- package/dist/starter-kit/widgets.d.ts +38 -0
- package/dist/starter-kit/widgets.d.ts.map +1 -0
- package/dist/starter-kit/widgets.js +64 -0
- package/dist/starter-kit/widgets.js.map +1 -0
- package/dist/styles.css +305 -0
- package/dist/themes.css +1340 -0
- package/package.json +128 -3
- package/src/app/components.tsx +104 -0
- package/src/app/hooks.ts +365 -0
- package/src/components/actions/action-button.tsx +254 -0
- package/src/components/actions/action-context.tsx +23 -0
- package/src/components/actions/action-list.tsx +356 -0
- package/src/components/actions/action-modals.tsx +479 -0
- package/src/components/actions/index.ts +4 -0
- package/src/components/ai/copilot-panel.tsx +517 -0
- package/src/components/ai/copilot.tsx +82 -0
- package/src/components/ai/index.ts +2 -0
- package/src/components/ai/stream-lazy.tsx +8 -0
- package/src/components/ai/stream.tsx +100 -0
- package/src/components/analytics/alfakit-analytics.tsx +27 -0
- package/src/components/analytics/breakdown.tsx +150 -0
- package/src/components/analytics/index.ts +2 -0
- package/src/components/cms/admin-bar.tsx +66 -0
- package/src/components/cms/blocks.tsx +474 -0
- package/src/components/cms/context.tsx +57 -0
- package/src/components/cms/head.tsx +47 -0
- package/src/components/cms/index.ts +23 -0
- package/src/components/cms/live-preview-lazy.tsx +8 -0
- package/src/components/cms/live-preview.tsx +339 -0
- package/src/components/cms/menu.tsx +246 -0
- package/src/components/cms/page.tsx +219 -0
- package/src/components/cms/parts.tsx +84 -0
- package/src/components/dev-tools/dev-tools-inspector.tsx +374 -0
- package/src/components/dev-tools/dev-tools-slot.tsx +28 -0
- package/src/components/entries/code-entry.tsx +73 -0
- package/src/components/entries/entry-wrapper.tsx +171 -0
- package/src/components/entries/index.ts +11 -0
- package/src/components/entries/other-entries.tsx +235 -0
- package/src/components/entries/repeatable-entry-table.tsx +50 -0
- package/src/components/entries/text-entry.tsx +264 -0
- package/src/components/entries/view-entry.tsx +27 -0
- package/src/components/fields/builder-picker.tsx +323 -0
- package/src/components/fields/builder.tsx +537 -0
- package/src/components/fields/checkbox-list.tsx +181 -0
- package/src/components/fields/checkbox.tsx +26 -0
- package/src/components/fields/code-editor-lazy.tsx +33 -0
- package/src/components/fields/code-editor.tsx +157 -0
- package/src/components/fields/code-tokens.ts +15 -0
- package/src/components/fields/color-picker.tsx +72 -0
- package/src/components/fields/date-picker.tsx +336 -0
- package/src/components/fields/file-upload.tsx +643 -0
- package/src/components/fields/hidden.tsx +8 -0
- package/src/components/fields/icon-picker-lazy.tsx +44 -0
- package/src/components/fields/icon-picker-value.tsx +46 -0
- package/src/components/fields/icon-picker.tsx +293 -0
- package/src/components/fields/image-editor-dialog-lazy.tsx +22 -0
- package/src/components/fields/image-editor-dialog.tsx +431 -0
- package/src/components/fields/index.ts +23 -0
- package/src/components/fields/item-actions.tsx +381 -0
- package/src/components/fields/key-value.tsx +218 -0
- package/src/components/fields/lazy-fields.tsx +30 -0
- package/src/components/fields/modal-table-select.tsx +519 -0
- package/src/components/fields/money-input.tsx +132 -0
- package/src/components/fields/one-time-code-input.tsx +56 -0
- package/src/components/fields/query-builder-rules.tsx +444 -0
- package/src/components/fields/radio.tsx +67 -0
- package/src/components/fields/repeater-table.tsx +185 -0
- package/src/components/fields/repeater.tsx +317 -0
- package/src/components/fields/rich-editor-extensions.tsx +470 -0
- package/src/components/fields/rich-editor-lazy.tsx +21 -0
- package/src/components/fields/rich-editor.tsx +815 -0
- package/src/components/fields/select.tsx +667 -0
- package/src/components/fields/slider.tsx +262 -0
- package/src/components/fields/tags-input.tsx +176 -0
- package/src/components/fields/text-input.tsx +179 -0
- package/src/components/fields/textarea.tsx +37 -0
- package/src/components/fields/toggle-buttons.tsx +125 -0
- package/src/components/fields/toggle.tsx +50 -0
- package/src/components/file-manager/file-manager-lazy.tsx +52 -0
- package/src/components/file-manager/file-manager.tsx +1857 -0
- package/src/components/file-manager/index.ts +2 -0
- package/src/components/file-manager/picker-field.tsx +169 -0
- package/src/components/form/form-block.tsx +237 -0
- package/src/components/form/form-context.tsx +95 -0
- package/src/components/helpdesk/chat-panel.tsx +247 -0
- package/src/components/helpdesk/chat-widget.tsx +107 -0
- package/src/components/helpdesk/inbox-lazy.tsx +42 -0
- package/src/components/helpdesk/inbox.tsx +745 -0
- package/src/components/helpdesk/index.ts +2 -0
- package/src/components/kanban/index.ts +1 -0
- package/src/components/kanban/kanban-lazy.tsx +34 -0
- package/src/components/kanban/kanban.tsx +788 -0
- package/src/components/layout/actions.tsx +48 -0
- package/src/components/layout/component-context.ts +31 -0
- package/src/components/layout/deferred.tsx +156 -0
- package/src/components/layout/elements.tsx +259 -0
- package/src/components/layout/fieldset.tsx +35 -0
- package/src/components/layout/fused-group.tsx +96 -0
- package/src/components/layout/grid.tsx +19 -0
- package/src/components/layout/index.ts +18 -0
- package/src/components/layout/mixed-content.tsx +59 -0
- package/src/components/layout/prime.tsx +168 -0
- package/src/components/layout/schema-children.tsx +30 -0
- package/src/components/layout/section.tsx +173 -0
- package/src/components/layout/tabs.tsx +129 -0
- package/src/components/layout/wizard.tsx +244 -0
- package/src/components/notifications/flash-toasts.tsx +200 -0
- package/src/components/notifications/index.ts +4 -0
- package/src/components/notifications/notifications-menu.tsx +262 -0
- package/src/components/notifications/realtime-notifications.tsx +40 -0
- package/src/components/notifications/undo-button.tsx +50 -0
- package/src/components/panel/app-sidebar.tsx +439 -0
- package/src/components/panel/bottom-nav.tsx +130 -0
- package/src/components/panel/debug-panel-slot.tsx +25 -0
- package/src/components/panel/debug-panel.tsx +412 -0
- package/src/components/panel/global-search-palette.tsx +387 -0
- package/src/components/panel/global-search.tsx +147 -0
- package/src/components/panel/impersonation-banner.tsx +47 -0
- package/src/components/panel/index.ts +16 -0
- package/src/components/panel/keyboard-shortcuts.tsx +134 -0
- package/src/components/panel/lazy-placeholder.tsx +39 -0
- package/src/components/panel/locale-switcher.tsx +144 -0
- package/src/components/panel/menu-item.tsx +89 -0
- package/src/components/panel/nav-label.tsx +34 -0
- package/src/components/panel/pwa.tsx +118 -0
- package/src/components/panel/schema-contract-guard.tsx +50 -0
- package/src/components/panel/shortcut-keys.tsx +34 -0
- package/src/components/panel/shortcuts-overlay.tsx +238 -0
- package/src/components/panel/slot.tsx +43 -0
- package/src/components/panel/sub-navigation.tsx +161 -0
- package/src/components/panel/tenant-menu.tsx +175 -0
- package/src/components/panel/theme-toggle.tsx +69 -0
- package/src/components/panel/topbar.tsx +81 -0
- package/src/components/panel/user-menu.tsx +166 -0
- package/src/components/realtime/conflict-banner.tsx +208 -0
- package/src/components/realtime/index.ts +3 -0
- package/src/components/realtime/live-records-pill.tsx +66 -0
- package/src/components/realtime/record-presence.tsx +98 -0
- package/src/components/schema/content-slot.tsx +81 -0
- package/src/components/schema/field-actions.tsx +67 -0
- package/src/components/schema/field-wrapper.tsx +246 -0
- package/src/components/schema/fused-group-context.ts +11 -0
- package/src/components/schema/schema-renderer.tsx +127 -0
- package/src/components/schema/translatable-field.tsx +113 -0
- package/src/components/schema/virtual-spacer.tsx +14 -0
- package/src/components/table/cells.tsx +712 -0
- package/src/components/table/column-manager.tsx +480 -0
- package/src/components/table/content-layout.tsx +368 -0
- package/src/components/table/filters.tsx +378 -0
- package/src/components/table/grouping.tsx +275 -0
- package/src/components/table/index.ts +9 -0
- package/src/components/table/list-tabs.tsx +144 -0
- package/src/components/table/pagination.tsx +335 -0
- package/src/components/table/record-cell.tsx +147 -0
- package/src/components/table/spreadsheet-lazy.tsx +14 -0
- package/src/components/table/spreadsheet.tsx +602 -0
- package/src/components/table/summary-rows.tsx +160 -0
- package/src/components/table/table-block.tsx +1112 -0
- package/src/components/table/table-views.tsx +460 -0
- package/src/components/table/trigger-button.tsx +92 -0
- package/src/components/translation-manager/index.ts +1 -0
- package/src/components/translation-manager/translation-manager-lazy.tsx +25 -0
- package/src/components/translation-manager/translation-manager.tsx +827 -0
- package/src/components/tree/index.ts +1 -0
- package/src/components/tree/tree-lazy.tsx +30 -0
- package/src/components/tree/tree.tsx +385 -0
- package/src/components/ui/alert.tsx +57 -0
- package/src/components/ui/avatar.tsx +38 -0
- package/src/components/ui/badge.tsx +33 -0
- package/src/components/ui/breadcrumb.tsx +110 -0
- package/src/components/ui/button.tsx +54 -0
- package/src/components/ui/calendar.tsx +65 -0
- package/src/components/ui/card.tsx +74 -0
- package/src/components/ui/checkbox.tsx +30 -0
- package/src/components/ui/collapsible.tsx +20 -0
- package/src/components/ui/command.tsx +158 -0
- package/src/components/ui/dialog.tsx +124 -0
- package/src/components/ui/dropdown-menu.tsx +217 -0
- package/src/components/ui/input.tsx +20 -0
- package/src/components/ui/label.tsx +18 -0
- package/src/components/ui/popover.tsx +39 -0
- package/src/components/ui/radio-group.tsx +36 -0
- package/src/components/ui/scroll-area.tsx +53 -0
- package/src/components/ui/select.tsx +165 -0
- package/src/components/ui/separator.tsx +25 -0
- package/src/components/ui/sheet.tsx +131 -0
- package/src/components/ui/sidebar.tsx +660 -0
- package/src/components/ui/skeleton.tsx +14 -0
- package/src/components/ui/sonner.tsx +43 -0
- package/src/components/ui/spinner.tsx +31 -0
- package/src/components/ui/switch.tsx +25 -0
- package/src/components/ui/table.tsx +89 -0
- package/src/components/ui/tabs.tsx +51 -0
- package/src/components/ui/textarea.tsx +17 -0
- package/src/components/ui/tooltip.tsx +50 -0
- package/src/components/versions/record-versions.tsx +162 -0
- package/src/components/widgets/calendar-lazy.tsx +31 -0
- package/src/components/widgets/calendar.tsx +124 -0
- package/src/components/widgets/chart-filters.tsx +114 -0
- package/src/components/widgets/chart-lazy.tsx +21 -0
- package/src/components/widgets/chart.tsx +252 -0
- package/src/components/widgets/dashboard-customizer.tsx +309 -0
- package/src/components/widgets/index.ts +5 -0
- package/src/components/widgets/stats-overview.tsx +185 -0
- package/src/components/widgets/widgets-block.tsx +102 -0
- package/src/context.tsx +187 -0
- package/src/create-alfakit.tsx +300 -0
- package/src/hooks/use-hydrated.ts +16 -0
- package/src/hooks/use-mobile.ts +29 -0
- package/src/hooks/use-store.ts +18 -0
- package/src/hooks/use-virtual-list.ts +88 -0
- package/src/index.ts +135 -0
- package/src/layouts/app-layout.tsx +128 -0
- package/src/layouts/auth-layout.tsx +66 -0
- package/src/layouts/blank-layout.tsx +5 -0
- package/src/layouts/fullscreen-layout.tsx +86 -0
- package/src/layouts/top-nav-layout.tsx +293 -0
- package/src/lib/attributes.ts +79 -0
- package/src/lib/colors.ts +151 -0
- package/src/lib/discovery.tsx +68 -0
- package/src/lib/icons.tsx +145 -0
- package/src/lib/lazy.tsx +89 -0
- package/src/lib/new-tab-hint.tsx +8 -0
- package/src/lib/utils.ts +6 -0
- package/src/pages/page.tsx +463 -0
- package/src/registry.ts +132 -0
- package/src/server.tsx +68 -0
- package/src/standalone/alfakit-component.tsx +222 -0
- package/src/standalone/alfakit-toaster.tsx +52 -0
- package/src/standalone/configure.ts +24 -0
- package/src/standalone/index.ts +3 -0
- package/src/standalone/runtime.ts +153 -0
- package/src/starter-kit/index.ts +14 -0
- package/src/starter-kit/navigation.ts +34 -0
- package/src/starter-kit/starter-kit.tsx +196 -0
- package/src/starter-kit/widgets-loaded.tsx +217 -0
- package/src/starter-kit/widgets-triggers.tsx +103 -0
- package/src/starter-kit/widgets.tsx +103 -0
- package/src/styles.css +305 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image-editor-dialog.js","names":[],"sources":["../../../src/components/fields/image-editor-dialog.tsx"],"sourcesContent":["import type {\n CropHandle,\n FileUploadImageEditorSchema,\n ImageEditorData,\n ImageEditorDragMode,\n} from '@alfakit/core'\nimport { ImageEditor, loadEditorImage } from '@alfakit/core'\nimport {\n FlipHorizontal2Icon,\n FlipVertical2Icon,\n RotateCcwIcon,\n RotateCwIcon,\n Undo2Icon,\n ZoomInIcon,\n ZoomOutIcon,\n} from 'lucide-react'\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type FocusEvent,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n} from 'react'\nimport { useT } from '../../context'\nimport { useStore } from '../../hooks/use-store'\nimport { cn } from '../../lib/utils'\nimport { Button } from '../ui/button'\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogTitle,\n} from '../ui/dialog'\nimport { Input } from '../ui/input'\nimport { Spinner } from '../ui/spinner'\n\nexport interface ImageEditRequest {\n file: File\n resolve: (file: File | null) => void\n}\n\nconst HANDLES: CropHandle[] = ['nw', 'ne', 'sw', 'se']\n\n/**\n * `FileUpload::imageEditor()`: crop, zoom, rotate and flip an image before it is uploaded\n * (or to replace an uploaded one). Resolves the request with the edited file, or null\n * when cancelled.\n */\nexport function ImageEditorDialog({\n request,\n options,\n}: {\n request: ImageEditRequest | null\n options: FileUploadImageEditorSchema\n}) {\n const t = useT()\n const [loaded, setLoaded] = useState<{ bitmap: ImageBitmap; editor: ImageEditor } | null>(null)\n const [saving, setSaving] = useState(false)\n const hintId = useId()\n\n useEffect(() => {\n if (!request) return\n\n let cancelled = false\n\n loadEditorImage(request.file)\n .then((bitmap) => {\n if (cancelled) return bitmap.close()\n\n setLoaded({\n bitmap,\n editor: new ImageEditor({\n width: bitmap.width,\n height: bitmap.height,\n aspectRatios: options.aspectRatios,\n circle: options.circle,\n mode: options.mode,\n emptyFillColor: options.emptyFillColor,\n viewportWidth: options.viewportWidth,\n viewportHeight: options.viewportHeight,\n }),\n })\n })\n // Undecodable: upload the file as it is.\n .catch(() => !cancelled && request.resolve(request.file))\n\n return () => {\n cancelled = true\n setLoaded((current) => {\n current?.bitmap.close()\n\n return null\n })\n }\n }, [request, options])\n\n const finish = (file: File | null) => {\n request?.resolve(file)\n }\n\n const save = async () => {\n if (!request || !loaded) return\n\n setSaving(true)\n\n try {\n finish(await loaded.editor.export(loaded.bitmap, request.file))\n } catch {\n finish(request.file)\n } finally {\n setSaving(false)\n }\n }\n\n return (\n <Dialog open={request !== null} onOpenChange={(open) => !open && finish(null)}>\n <DialogContent className=\"sm:max-w-3xl\" data-slot=\"image-editor\">\n <DialogHeader>\n <DialogTitle>{t('image_editor.title', {}, 'Edit image')}</DialogTitle>\n <DialogDescription id={hintId} className=\"sr-only\">\n {t(\n 'image_editor.keyboard_hint',\n {},\n 'Arrow keys move the crop area. Shift and arrow keys resize it.',\n )}{' '}\n {t('image_editor.zoom_hint', {}, 'Plus and minus keys zoom the image.')}\n </DialogDescription>\n </DialogHeader>\n {loaded ? (\n <ImageEditorCanvas editor={loaded.editor} bitmap={loaded.bitmap} hintId={hintId} />\n ) : (\n <div className=\"flex h-48 items-center justify-center\">\n <Spinner />\n </div>\n )}\n <DialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => finish(null)}>\n {t('image_editor.cancel', {}, 'Cancel')}\n </Button>\n <Button type=\"button\" disabled={!loaded || saving} onClick={() => void save()}>\n {saving && <Spinner />}\n {t('image_editor.save', {}, 'Apply')}\n </Button>\n </DialogFooter>\n </DialogContent>\n </Dialog>\n )\n}\n\n/** The numeric inputs, in the order Filament shows them. */\nconst NUMERIC_FIELDS = [\n ['x', 'image_editor.x', 'X'],\n ['y', 'image_editor.y', 'Y'],\n ['width', 'image_editor.width', 'Width'],\n ['height', 'image_editor.height', 'Height'],\n ['rotate', 'image_editor.rotation', 'Rotation'],\n] as const satisfies ReadonlyArray<readonly [keyof ImageEditorData, string, string]>\n\nfunction ImageEditorCanvas({\n editor,\n bitmap,\n hintId,\n}: {\n editor: ImageEditor\n bitmap: ImageBitmap\n hintId: string\n}) {\n const t = useT()\n const state = useStore(editor.store)\n const canvas = useRef<HTMLCanvasElement>(null)\n const frame = useRef<HTMLDivElement>(null)\n const inputsId = useId()\n\n // Measure the container, and follow its size.\n useEffect(() => {\n const element = frame.current\n\n if (!element) return\n\n const measure = () => editor.setContainer(element.clientWidth, element.clientHeight)\n measure()\n\n if (typeof ResizeObserver === 'undefined') return\n\n const observer = new ResizeObserver(measure)\n observer.observe(element)\n\n return () => observer.disconnect()\n }, [editor])\n\n // Wheel and trackpad pinch zoom. A native listener: React's wheel listener is passive.\n useEffect(() => {\n const element = frame.current\n\n if (!element) return\n\n const onWheel = (event: WheelEvent) => {\n const rect = element.getBoundingClientRect()\n\n if (editor.wheel(event, { x: event.clientX - rect.left, y: event.clientY - rect.top })) {\n event.preventDefault()\n }\n }\n\n element.addEventListener('wheel', onWheel, { passive: false })\n\n return () => element.removeEventListener('wheel', onWheel)\n }, [editor])\n\n useEffect(() => {\n if (canvas.current) {\n editor.drawPreview(canvas.current, bitmap, globalThis.devicePixelRatio || 1)\n }\n }, [editor, bitmap, state])\n\n const box = editor.cropBox()\n const data = editor.getData()\n\n const start = (mode: ImageEditorDragMode) => (event: PointerEvent<HTMLElement>) => {\n event.preventDefault()\n event.stopPropagation()\n event.currentTarget.setPointerCapture?.(event.pointerId)\n editor.startDrag(mode, event.clientX, event.clientY, undefined, event.pointerId ?? 0)\n }\n\n const end = (event: PointerEvent<HTMLElement>) => editor.endDrag(event.pointerId ?? 0)\n\n // Numeric inputs apply on blur and Enter; invalid values snap back to the current one.\n const commit =\n (field: keyof ImageEditorData) =>\n (event: FocusEvent<HTMLInputElement> | KeyboardEvent<HTMLInputElement>) => {\n const input = event.currentTarget\n const value = input.value.trim() === '' ? Number.NaN : Number(input.value)\n\n editor.setData({ [field]: value })\n input.value = String(editor.getData()[field])\n }\n\n const ratioLabel = (ratio: string | null) => ratio ?? t('image_editor.free', {}, 'Free')\n\n const tool = (label: string, icon: ReactNode, onClick: () => void, disabled = false) => (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n aria-label={label}\n title={label}\n disabled={disabled}\n onClick={onClick}\n >\n {icon}\n </Button>\n )\n\n return (\n <div className=\"flex flex-col gap-4 md:flex-row\">\n <div className=\"flex min-w-0 flex-1 flex-col gap-3\">\n {/* Image space: left is the image's left in every reading direction. */}\n <div\n ref={frame}\n dir=\"ltr\"\n data-slot=\"image-editor-viewport\"\n className=\"bg-muted/40 relative h-72 w-full cursor-grab touch-none overflow-hidden rounded-md select-none sm:h-96\"\n onPointerDown={start('pan')}\n onPointerMove={(event) =>\n editor.dragTo(event.clientX, event.clientY, event.pointerId ?? 0)\n }\n onPointerUp={end}\n onPointerCancel={end}\n >\n <canvas ref={canvas} className=\"pointer-events-none absolute inset-0 block size-full\" />\n <div\n role=\"group\"\n tabIndex={0}\n aria-label={t('image_editor.crop_area', {}, 'Crop area')}\n aria-describedby={hintId}\n data-slot=\"image-editor-crop\"\n className={cn(\n 'ring-ring/50 absolute cursor-move border-2 border-white shadow-[0_0_0_9999px_rgb(0_0_0/0.5)] outline-none focus-visible:ring-[3px]',\n editor.circle && 'rounded-full',\n )}\n // Runtime geometry: no Tailwind class can hold these values.\n style={{\n left: `${box.left}%`,\n top: `${box.top}%`,\n width: `${box.width}%`,\n height: `${box.height}%`,\n }}\n onPointerDown={start('move')}\n onKeyDown={(event) => {\n if (editor.handleKey(event)) event.preventDefault()\n }}\n >\n {HANDLES.map((handle) => (\n <span\n key={handle}\n data-handle={handle}\n aria-hidden=\"true\"\n className=\"absolute size-3 -translate-x-1/2 -translate-y-1/2 rounded-sm border border-black/40 bg-white\"\n style={{\n left: handle.endsWith('w') ? '0%' : '100%',\n top: handle.startsWith('n') ? '0%' : '100%',\n cursor: handle === 'nw' || handle === 'se' ? 'nwse-resize' : 'nesw-resize',\n }}\n onPointerDown={start(handle)}\n />\n ))}\n </div>\n </div>\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n {editor.aspectRatios.length > 1 ? (\n <div\n role=\"group\"\n aria-label={t('image_editor.aspect_ratio', {}, 'Aspect ratio')}\n className=\"flex flex-wrap gap-1\"\n >\n {editor.aspectRatios.map((ratio) => (\n <Button\n key={ratio ?? 'free'}\n type=\"button\"\n size=\"sm\"\n variant={state.aspectRatio === ratio ? 'default' : 'outline'}\n aria-pressed={state.aspectRatio === ratio}\n onClick={() => editor.setAspectRatio(ratio)}\n >\n {ratioLabel(ratio)}\n </Button>\n ))}\n </div>\n ) : (\n <span />\n )}\n <div className=\"flex flex-wrap gap-1\">\n {tool(\n t('image_editor.zoom_out', {}, 'Zoom out'),\n <ZoomOutIcon />,\n () => editor.zoomOut(),\n !editor.canZoomOut,\n )}\n {tool(\n t('image_editor.zoom_in', {}, 'Zoom in'),\n <ZoomInIcon />,\n () => editor.zoomIn(),\n !editor.canZoomIn,\n )}\n {tool(t('image_editor.rotate_left', {}, 'Rotate left'), <RotateCcwIcon />, () =>\n editor.rotate(-1),\n )}\n {tool(t('image_editor.rotate_right', {}, 'Rotate right'), <RotateCwIcon />, () =>\n editor.rotate(1),\n )}\n {tool(\n t('image_editor.flip_horizontal', {}, 'Flip horizontally'),\n <FlipHorizontal2Icon />,\n () => editor.flip('x'),\n )}\n {tool(\n t('image_editor.flip_vertical', {}, 'Flip vertically'),\n <FlipVertical2Icon />,\n () => editor.flip('y'),\n )}\n {tool(t('image_editor.reset', {}, 'Reset'), <Undo2Icon />, () => editor.reset())}\n </div>\n </div>\n </div>\n {/* Numeric inputs: beside the image from md up, under it on phones. */}\n <div\n role=\"group\"\n aria-label={t('image_editor.inputs', {}, 'Position and size')}\n data-slot=\"image-editor-inputs\"\n className=\"grid grid-cols-2 content-start gap-x-3 gap-y-2 sm:grid-cols-4 md:w-40 md:shrink-0 md:grid-cols-1\"\n >\n {NUMERIC_FIELDS.map(([field, key, fallback]) => (\n <div key={field} className=\"flex flex-col gap-1\">\n <label htmlFor={`${inputsId}-${field}`} className=\"text-muted-foreground text-xs\">\n {t(key, {}, fallback)}\n </label>\n <Input\n // Remount with the new value when the editor changes it (drag, zoom…).\n key={`${field}:${data[field]}`}\n id={`${inputsId}-${field}`}\n type=\"number\"\n inputMode=\"decimal\"\n step={1}\n data-field={field}\n className=\"h-8 tabular-nums\"\n defaultValue={data[field]}\n onBlur={commit(field)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n commit(field)(event)\n }\n }}\n />\n </div>\n ))}\n <div className=\"col-span-2 flex gap-1 sm:col-span-4 md:col-span-1\">\n {(\n [\n ['x', 'image_editor.scale_x', 'Scale X'],\n ['y', 'image_editor.scale_y', 'Scale Y'],\n ] as const\n ).map(([axis, key, fallback]) => {\n const flipped = axis === 'x' ? state.flipX : state.flipY\n\n return (\n <Button\n key={axis}\n type=\"button\"\n size=\"sm\"\n variant={flipped ? 'default' : 'outline'}\n aria-pressed={flipped}\n data-field={`scale${axis.toUpperCase()}`}\n className=\"flex-1\"\n onClick={() => editor.flip(axis)}\n >\n {t(key, {}, fallback)}\n </Button>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { BuilderField } from "./builder.js";
|
|
2
|
+
import { CheckboxField } from "./checkbox.js";
|
|
3
|
+
import { CheckboxListField } from "./checkbox-list.js";
|
|
4
|
+
import { CodeEditorField } from "./code-editor-lazy.js";
|
|
5
|
+
import { ColorPickerField } from "./color-picker.js";
|
|
6
|
+
import { DatePickerField } from "./date-picker.js";
|
|
7
|
+
import { FileUploadField } from "./file-upload.js";
|
|
8
|
+
import { HiddenField } from "./hidden.js";
|
|
9
|
+
import { IconPickerField } from "./icon-picker-lazy.js";
|
|
10
|
+
import { KeyValueField } from "./key-value.js";
|
|
11
|
+
import { ModalTableSelectField, QueryBuilderRulesField } from "./lazy-fields.js";
|
|
12
|
+
import { MoneyInputField } from "./money-input.js";
|
|
13
|
+
import { OneTimeCodeInputField } from "./one-time-code-input.js";
|
|
14
|
+
import { RadioField } from "./radio.js";
|
|
15
|
+
import { RepeaterField } from "./repeater.js";
|
|
16
|
+
import { RichEditorField } from "./rich-editor-lazy.js";
|
|
17
|
+
import { SelectField } from "./select.js";
|
|
18
|
+
import { SliderField } from "./slider.js";
|
|
19
|
+
import { TagsInputField } from "./tags-input.js";
|
|
20
|
+
import { TextInputField } from "./text-input.js";
|
|
21
|
+
import { TextareaField } from "./textarea.js";
|
|
22
|
+
import { ToggleField } from "./toggle.js";
|
|
23
|
+
import { ToggleButtonsField } from "./toggle-buttons.js";
|
|
24
|
+
export { BuilderField, CheckboxField, CheckboxListField, CodeEditorField, ColorPickerField, DatePickerField, FileUploadField, HiddenField, IconPickerField, KeyValueField, ModalTableSelectField, MoneyInputField, OneTimeCodeInputField, QueryBuilderRulesField, RadioField, RepeaterField, RichEditorField, SelectField, SliderField, TagsInputField, TextInputField, TextareaField, ToggleButtonsField, ToggleField };
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { useActionRunner, useT } from "../../context.js";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { colorClass, ghostButtonColorClasses } from "../../lib/colors.js";
|
|
4
|
+
import { Icon } from "../../lib/icons.js";
|
|
5
|
+
import { Button } from "../ui/button.js";
|
|
6
|
+
import { extraProps } from "../../lib/attributes.js";
|
|
7
|
+
import { ActionButton } from "../actions/action-button.js";
|
|
8
|
+
import { ActionList } from "../actions/action-list.js";
|
|
9
|
+
import { ITEM_MOVE_ATTRIBUTE, ItemMoveTracker, addActionJustify, itemActionContext, resolveItemAction, withItemActionState } from "@alfakit/core";
|
|
10
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
11
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { ChevronDownIcon, ChevronUpIcon, CopyIcon, GripVerticalIcon, PlusIcon, Trash2Icon } from "lucide-react";
|
|
13
|
+
//#region src/components/fields/item-actions.tsx
|
|
14
|
+
/**
|
|
15
|
+
* A built-in item action (Repeater, Builder, KeyValue). Uncustomised actions apply their
|
|
16
|
+
* change in the browser (`onClient`); customised ones (`server`) run through the field
|
|
17
|
+
* action endpoint with `args` (`item`, `items`, `block`).
|
|
18
|
+
*/
|
|
19
|
+
function ItemActionButton({ action, context, args, onClient, disabled, attributes, size = "xs", className }) {
|
|
20
|
+
if (!action) return null;
|
|
21
|
+
if (!action.server && action.variant === "icon-button" && !action.badge) {
|
|
22
|
+
const StaticIcon = action.icon ? STATIC_ICONS[action.icon] : void 0;
|
|
23
|
+
const label = action.label ?? action.tooltip ?? action.name;
|
|
24
|
+
return /* @__PURE__ */ jsx(Button, {
|
|
25
|
+
type: "button",
|
|
26
|
+
variant: "plain",
|
|
27
|
+
size: size === "xs" ? "icon-xs" : size === "sm" ? "icon-sm" : "icon",
|
|
28
|
+
disabled: disabled || action.disabled,
|
|
29
|
+
"aria-label": label,
|
|
30
|
+
title: action.tooltip ?? label,
|
|
31
|
+
onClick: () => onClient?.(),
|
|
32
|
+
...extraProps({
|
|
33
|
+
...action.extraAttributes,
|
|
34
|
+
...attributes
|
|
35
|
+
}, cn(colorClass(ghostButtonColorClasses, action.color, "gray"), className)),
|
|
36
|
+
children: StaticIcon ? /* @__PURE__ */ jsx(StaticIcon, {}) : /* @__PURE__ */ jsx(Icon, { name: action.icon })
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return /* @__PURE__ */ jsx(ServerItemActionButton, {
|
|
40
|
+
action,
|
|
41
|
+
context,
|
|
42
|
+
args,
|
|
43
|
+
onClient,
|
|
44
|
+
disabled,
|
|
45
|
+
attributes,
|
|
46
|
+
size,
|
|
47
|
+
className
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/** The common item action icons, bundled so headers don't wait for dynamic icons. */
|
|
51
|
+
const STATIC_ICONS = {
|
|
52
|
+
"chevron-up": ChevronUpIcon,
|
|
53
|
+
"chevron-down": ChevronDownIcon,
|
|
54
|
+
copy: CopyIcon,
|
|
55
|
+
"trash-2": Trash2Icon,
|
|
56
|
+
"grip-vertical": GripVerticalIcon,
|
|
57
|
+
plus: PlusIcon
|
|
58
|
+
};
|
|
59
|
+
function ServerItemActionButton({ action, context, args, onClient, disabled, attributes, size = "xs", className }) {
|
|
60
|
+
const runner = useActionRunner();
|
|
61
|
+
const scoped = useMemo(() => itemActionContext(context, args ?? {}), [context, args]);
|
|
62
|
+
return /* @__PURE__ */ jsx(ActionButton, {
|
|
63
|
+
action: withItemActionState(action, {
|
|
64
|
+
disabled,
|
|
65
|
+
attributes
|
|
66
|
+
}),
|
|
67
|
+
context: scoped,
|
|
68
|
+
size,
|
|
69
|
+
className,
|
|
70
|
+
withKeyBindings: false,
|
|
71
|
+
onTrigger: (schema, ctx) => action.server ? runner.trigger(schema, ctx) : onClient?.()
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/** Run a built-in action: on the server when customised, else `onClient`. */
|
|
75
|
+
function useRunItemAction(context) {
|
|
76
|
+
const runner = useActionRunner();
|
|
77
|
+
return (action, args, onClient) => {
|
|
78
|
+
if (!action) return;
|
|
79
|
+
if (action.server) runner.trigger(action, itemActionContext(context, args));
|
|
80
|
+
else onClient();
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Default looks of the built-in actions, for payloads without `itemActions`. */
|
|
84
|
+
function useItemActionFallbacks(addLabel = "") {
|
|
85
|
+
const t = useT();
|
|
86
|
+
return {
|
|
87
|
+
add: {
|
|
88
|
+
label: addLabel,
|
|
89
|
+
icon: "plus",
|
|
90
|
+
variant: "outline"
|
|
91
|
+
},
|
|
92
|
+
delete: {
|
|
93
|
+
label: t("form.remove_item", {}, "Remove"),
|
|
94
|
+
icon: "trash-2",
|
|
95
|
+
color: "danger"
|
|
96
|
+
},
|
|
97
|
+
clone: {
|
|
98
|
+
label: t("form.clone", {}, "Clone"),
|
|
99
|
+
icon: "copy"
|
|
100
|
+
},
|
|
101
|
+
reorder: {
|
|
102
|
+
label: t("form.reorder_item", {}, "Reorder"),
|
|
103
|
+
icon: "grip-vertical"
|
|
104
|
+
},
|
|
105
|
+
moveUp: {
|
|
106
|
+
label: t("form.move_up", {}, "Move up"),
|
|
107
|
+
icon: "chevron-up"
|
|
108
|
+
},
|
|
109
|
+
moveDown: {
|
|
110
|
+
label: t("form.move_down", {}, "Move down"),
|
|
111
|
+
icon: "chevron-down"
|
|
112
|
+
},
|
|
113
|
+
collapse: {
|
|
114
|
+
label: t("form.collapse_item", {}, "Collapse"),
|
|
115
|
+
icon: "chevron-up"
|
|
116
|
+
},
|
|
117
|
+
expand: {
|
|
118
|
+
label: t("form.expand_item", {}, "Expand"),
|
|
119
|
+
icon: "chevron-down"
|
|
120
|
+
},
|
|
121
|
+
collapseAll: {
|
|
122
|
+
label: t("form.collapse_all", {}, "Collapse all"),
|
|
123
|
+
icon: "chevrons-down-up",
|
|
124
|
+
variant: "link"
|
|
125
|
+
},
|
|
126
|
+
expandAll: {
|
|
127
|
+
label: t("form.expand_all", {}, "Expand all"),
|
|
128
|
+
icon: "chevrons-up-down",
|
|
129
|
+
variant: "link"
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/** Resolve every built-in action of a field (and optionally one of its items). */
|
|
134
|
+
function useItemActions(field, fallbacks) {
|
|
135
|
+
return (name, item) => resolveItemAction(name, field, item, fallbacks[name]);
|
|
136
|
+
}
|
|
137
|
+
/** Marks the move buttons so focus can return to them after a move (`ItemMoveTracker`). */
|
|
138
|
+
const MOVE_UP_ATTRIBUTES = { [ITEM_MOVE_ATTRIBUTE]: "up" };
|
|
139
|
+
const MOVE_DOWN_ATTRIBUTES = { [ITEM_MOVE_ATTRIBUTE]: "down" };
|
|
140
|
+
/**
|
|
141
|
+
* The end of an item header: move up / down, extra item actions, clone, delete and the
|
|
142
|
+
* collapse toggle, in Filament's order.
|
|
143
|
+
*/
|
|
144
|
+
function ItemHeaderActions({ context, itemKey, index, count, resolve, extraActions, buttons, canClone, canDelete, collapsible, collapsed, onMove, onClone, onDelete, onToggle, children }) {
|
|
145
|
+
const args = useMemo(() => ({ item: itemKey }), [itemKey]);
|
|
146
|
+
const extraContext = useMemo(() => itemActionContext(context, args), [context, args]);
|
|
147
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
148
|
+
className: "ms-auto flex items-center gap-0.5",
|
|
149
|
+
"data-slot": "item-actions",
|
|
150
|
+
children: [
|
|
151
|
+
children,
|
|
152
|
+
buttons && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(ItemActionButton, {
|
|
153
|
+
action: resolve("moveUp"),
|
|
154
|
+
context,
|
|
155
|
+
args,
|
|
156
|
+
disabled: index === 0,
|
|
157
|
+
attributes: MOVE_UP_ATTRIBUTES,
|
|
158
|
+
onClient: () => onMove(index, index - 1)
|
|
159
|
+
}), /* @__PURE__ */ jsx(ItemActionButton, {
|
|
160
|
+
action: resolve("moveDown"),
|
|
161
|
+
context,
|
|
162
|
+
args,
|
|
163
|
+
disabled: index === count - 1,
|
|
164
|
+
attributes: MOVE_DOWN_ATTRIBUTES,
|
|
165
|
+
onClient: () => onMove(index, index + 1)
|
|
166
|
+
})] }),
|
|
167
|
+
extraActions && extraActions.length > 0 && /* @__PURE__ */ jsx(ActionList, {
|
|
168
|
+
actions: extraActions,
|
|
169
|
+
context: extraContext,
|
|
170
|
+
size: "xs",
|
|
171
|
+
className: "gap-0.5"
|
|
172
|
+
}),
|
|
173
|
+
canClone && /* @__PURE__ */ jsx(ItemActionButton, {
|
|
174
|
+
action: resolve("clone"),
|
|
175
|
+
context,
|
|
176
|
+
args,
|
|
177
|
+
onClient: onClone
|
|
178
|
+
}),
|
|
179
|
+
canDelete && /* @__PURE__ */ jsx(ItemActionButton, {
|
|
180
|
+
action: resolve("delete"),
|
|
181
|
+
context,
|
|
182
|
+
args,
|
|
183
|
+
className: "text-destructive hover:text-destructive",
|
|
184
|
+
onClient: onDelete
|
|
185
|
+
}),
|
|
186
|
+
collapsible && /* @__PURE__ */ jsx(ItemActionButton, {
|
|
187
|
+
action: resolve(collapsed ? "expand" : "collapse"),
|
|
188
|
+
context,
|
|
189
|
+
args,
|
|
190
|
+
attributes: { "aria-expanded": collapsed ? "false" : "true" },
|
|
191
|
+
onClient: onToggle
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
/** "Collapse all" / "Expand all" above collapsible items. */
|
|
197
|
+
function CollapseAllActions({ context, resolve, onCollapseAll, onExpandAll }) {
|
|
198
|
+
const collapseAll = resolve("collapseAll");
|
|
199
|
+
const expandAll = resolve("expandAll");
|
|
200
|
+
if (!collapseAll && !expandAll) return null;
|
|
201
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
202
|
+
className: "flex justify-end gap-3",
|
|
203
|
+
"data-slot": "item-collapse-actions",
|
|
204
|
+
children: [/* @__PURE__ */ jsx(ItemActionButton, {
|
|
205
|
+
action: collapseAll,
|
|
206
|
+
context,
|
|
207
|
+
onClient: onCollapseAll
|
|
208
|
+
}), /* @__PURE__ */ jsx(ItemActionButton, {
|
|
209
|
+
action: expandAll,
|
|
210
|
+
context,
|
|
211
|
+
onClient: onExpandAll
|
|
212
|
+
})]
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
const JUSTIFY = {
|
|
216
|
+
start: "justify-start",
|
|
217
|
+
center: "justify-center",
|
|
218
|
+
end: "justify-end"
|
|
219
|
+
};
|
|
220
|
+
/** The row holding the add button, aligned with `addActionAlignment()`. */
|
|
221
|
+
function AddActionRow({ alignment, children }) {
|
|
222
|
+
return /* @__PURE__ */ jsx("div", {
|
|
223
|
+
className: cn("flex", JUSTIFY[addActionJustify(alignment)]),
|
|
224
|
+
"data-slot": "item-add-action",
|
|
225
|
+
children
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Moves made with the item move buttons: one at a time, announced in a live region
|
|
230
|
+
* ("Moved to position 2 of 5") and with focus kept on the moved item's move button.
|
|
231
|
+
* Render `region` once in the field and put `containerRef` on an element holding the
|
|
232
|
+
* items (they carry `data-index`).
|
|
233
|
+
*/
|
|
234
|
+
function useItemMoves(value, move, labelFor, count) {
|
|
235
|
+
const t = useT();
|
|
236
|
+
const [tracker] = useState(() => new ItemMoveTracker());
|
|
237
|
+
const [announcement, setAnnouncement] = useState("");
|
|
238
|
+
const containerRef = useRef(null);
|
|
239
|
+
useEffect(() => {
|
|
240
|
+
if (tracker.isMoving) tracker.finish(containerRef.current);
|
|
241
|
+
}, [value, tracker]);
|
|
242
|
+
const moveWithButton = (from, to) => {
|
|
243
|
+
if (to < 0 || to >= count || !tracker.begin(from, to)) return;
|
|
244
|
+
const label = labelFor(from);
|
|
245
|
+
move(from, to);
|
|
246
|
+
setAnnouncement(label ? t("form.labelled_item_moved", {
|
|
247
|
+
item: label,
|
|
248
|
+
position: to + 1,
|
|
249
|
+
total: count
|
|
250
|
+
}, ":item moved to position :position of :total") : t("form.item_moved", {
|
|
251
|
+
position: to + 1,
|
|
252
|
+
total: count
|
|
253
|
+
}, "Item moved to position :position of :total"));
|
|
254
|
+
};
|
|
255
|
+
return {
|
|
256
|
+
moveWithButton,
|
|
257
|
+
region: /* @__PURE__ */ jsx("span", {
|
|
258
|
+
"aria-live": "polite",
|
|
259
|
+
"aria-atomic": "true",
|
|
260
|
+
className: "sr-only",
|
|
261
|
+
"data-slot": "item-move-status",
|
|
262
|
+
children: announcement
|
|
263
|
+
}),
|
|
264
|
+
containerRef
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
//#endregion
|
|
268
|
+
export { AddActionRow, CollapseAllActions, ItemActionButton, ItemHeaderActions, useItemActionFallbacks, useItemActions, useItemMoves, useRunItemAction };
|
|
269
|
+
|
|
270
|
+
//# sourceMappingURL=item-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-actions.js","names":[],"sources":["../../../src/components/fields/item-actions.tsx"],"sourcesContent":["import type {\n ActionContext,\n ActionSchema,\n ItemActionFallback,\n ItemActionName,\n ItemActionSchema,\n ItemActionsItemProps,\n ItemActionsProps,\n} from '@alfakit/core'\nimport {\n ITEM_MOVE_ATTRIBUTE,\n ItemMoveTracker,\n addActionJustify,\n itemActionContext,\n resolveItemAction,\n withItemActionState,\n} from '@alfakit/core'\nimport {\n ChevronDownIcon,\n ChevronUpIcon,\n CopyIcon,\n GripVerticalIcon,\n PlusIcon,\n Trash2Icon,\n type LucideIcon,\n} from 'lucide-react'\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { useActionRunner, useT } from '../../context'\nimport { extraProps } from '../../lib/attributes'\nimport { colorClass, ghostButtonColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport { ActionButton } from '../actions/action-button'\nimport { ActionList } from '../actions/action-list'\nimport { Button } from '../ui/button'\n\n/**\n * A built-in item action (Repeater, Builder, KeyValue). Uncustomised actions apply their\n * change in the browser (`onClient`); customised ones (`server`) run through the field\n * action endpoint with `args` (`item`, `items`, `block`).\n */\nexport function ItemActionButton({\n action,\n context,\n args,\n onClient,\n disabled,\n attributes,\n size = 'xs',\n className,\n}: {\n action: ItemActionSchema | null\n context: ActionContext\n args?: Record<string, unknown>\n onClient?: () => void\n disabled?: boolean\n attributes?: Record<string, string>\n size?: 'xs' | 'sm' | 'default'\n className?: string\n}) {\n if (!action) return null\n\n // Plain icon buttons that change the state in the browser repeat on every item: render\n // them light (no runner subscription, no tooltip portal, static icons).\n if (!action.server && action.variant === 'icon-button' && !action.badge) {\n const StaticIcon = action.icon ? STATIC_ICONS[action.icon] : undefined\n const label = action.label ?? action.tooltip ?? action.name\n\n return (\n <Button\n type=\"button\"\n variant=\"plain\"\n size={size === 'xs' ? 'icon-xs' : size === 'sm' ? 'icon-sm' : 'icon'}\n disabled={disabled || action.disabled}\n aria-label={label}\n title={action.tooltip ?? label}\n onClick={() => onClient?.()}\n {...extraProps(\n { ...action.extraAttributes, ...attributes },\n cn(colorClass(ghostButtonColorClasses, action.color, 'gray'), className),\n )}\n >\n {StaticIcon ? <StaticIcon /> : <Icon name={action.icon} />}\n </Button>\n )\n }\n\n return (\n <ServerItemActionButton\n action={action}\n context={context}\n args={args}\n onClient={onClient}\n disabled={disabled}\n attributes={attributes}\n size={size}\n className={className}\n />\n )\n}\n\n/** The common item action icons, bundled so headers don't wait for dynamic icons. */\nconst STATIC_ICONS: Record<string, LucideIcon> = {\n 'chevron-up': ChevronUpIcon,\n 'chevron-down': ChevronDownIcon,\n copy: CopyIcon,\n 'trash-2': Trash2Icon,\n 'grip-vertical': GripVerticalIcon,\n plus: PlusIcon,\n}\n\nfunction ServerItemActionButton({\n action,\n context,\n args,\n onClient,\n disabled,\n attributes,\n size = 'xs',\n className,\n}: {\n action: ItemActionSchema\n context: ActionContext\n args?: Record<string, unknown>\n onClient?: () => void\n disabled?: boolean\n attributes?: Record<string, string>\n size?: 'xs' | 'sm' | 'default'\n className?: string\n}) {\n const runner = useActionRunner()\n const scoped = useMemo(() => itemActionContext(context, args ?? {}), [context, args])\n\n return (\n <ActionButton\n action={withItemActionState(action, { disabled, attributes })}\n context={scoped}\n size={size}\n className={className}\n withKeyBindings={false}\n onTrigger={(schema, ctx) => (action.server ? runner.trigger(schema, ctx) : onClient?.())}\n />\n )\n}\n\n/** Run a built-in action: on the server when customised, else `onClient`. */\nexport function useRunItemAction(context: ActionContext) {\n const runner = useActionRunner()\n\n return (action: ItemActionSchema | null, args: Record<string, unknown>, onClient: () => void) => {\n if (!action) return\n if (action.server) void runner.trigger(action, itemActionContext(context, args))\n else onClient()\n }\n}\n\n/** Default looks of the built-in actions, for payloads without `itemActions`. */\nexport function useItemActionFallbacks(addLabel = ''): Record<ItemActionName, ItemActionFallback> {\n const t = useT()\n\n return {\n add: { label: addLabel, icon: 'plus', variant: 'outline' },\n delete: { label: t('form.remove_item', {}, 'Remove'), icon: 'trash-2', color: 'danger' },\n clone: { label: t('form.clone', {}, 'Clone'), icon: 'copy' },\n reorder: { label: t('form.reorder_item', {}, 'Reorder'), icon: 'grip-vertical' },\n moveUp: { label: t('form.move_up', {}, 'Move up'), icon: 'chevron-up' },\n moveDown: { label: t('form.move_down', {}, 'Move down'), icon: 'chevron-down' },\n collapse: { label: t('form.collapse_item', {}, 'Collapse'), icon: 'chevron-up' },\n expand: { label: t('form.expand_item', {}, 'Expand'), icon: 'chevron-down' },\n collapseAll: {\n label: t('form.collapse_all', {}, 'Collapse all'),\n icon: 'chevrons-down-up',\n variant: 'link',\n },\n expandAll: {\n label: t('form.expand_all', {}, 'Expand all'),\n icon: 'chevrons-up-down',\n variant: 'link',\n },\n }\n}\n\n/** Resolve every built-in action of a field (and optionally one of its items). */\nexport function useItemActions(\n field: ItemActionsProps,\n fallbacks: Record<ItemActionName, ItemActionFallback>,\n) {\n return (name: ItemActionName, item?: ItemActionsItemProps): ItemActionSchema | null =>\n resolveItemAction(name, field, item, fallbacks[name])\n}\n\nexport interface ItemHeaderActionsProps {\n context: ActionContext\n itemKey: string\n index: number\n count: number\n resolve: (name: ItemActionName) => ItemActionSchema | null\n extraActions?: ActionSchema[]\n buttons: boolean\n canClone: boolean\n canDelete: boolean\n collapsible: boolean\n collapsed: boolean\n onMove: (from: number, to: number) => void\n onClone: () => void\n onDelete: () => void\n onToggle: () => void\n children?: ReactNode\n}\n\n/** Marks the move buttons so focus can return to them after a move (`ItemMoveTracker`). */\nconst MOVE_UP_ATTRIBUTES = { [ITEM_MOVE_ATTRIBUTE]: 'up' }\nconst MOVE_DOWN_ATTRIBUTES = { [ITEM_MOVE_ATTRIBUTE]: 'down' }\n\n/**\n * The end of an item header: move up / down, extra item actions, clone, delete and the\n * collapse toggle, in Filament's order.\n */\nexport function ItemHeaderActions({\n context,\n itemKey,\n index,\n count,\n resolve,\n extraActions,\n buttons,\n canClone,\n canDelete,\n collapsible,\n collapsed,\n onMove,\n onClone,\n onDelete,\n onToggle,\n children,\n}: ItemHeaderActionsProps) {\n const args = useMemo(() => ({ item: itemKey }), [itemKey])\n const extraContext = useMemo(() => itemActionContext(context, args), [context, args])\n\n return (\n <div className=\"ms-auto flex items-center gap-0.5\" data-slot=\"item-actions\">\n {children}\n {buttons && (\n <>\n <ItemActionButton\n action={resolve('moveUp')}\n context={context}\n args={args}\n disabled={index === 0}\n attributes={MOVE_UP_ATTRIBUTES}\n onClient={() => onMove(index, index - 1)}\n />\n <ItemActionButton\n action={resolve('moveDown')}\n context={context}\n args={args}\n disabled={index === count - 1}\n attributes={MOVE_DOWN_ATTRIBUTES}\n onClient={() => onMove(index, index + 1)}\n />\n </>\n )}\n {extraActions && extraActions.length > 0 && (\n <ActionList actions={extraActions} context={extraContext} size=\"xs\" className=\"gap-0.5\" />\n )}\n {canClone && (\n <ItemActionButton\n action={resolve('clone')}\n context={context}\n args={args}\n onClient={onClone}\n />\n )}\n {canDelete && (\n <ItemActionButton\n action={resolve('delete')}\n context={context}\n args={args}\n className=\"text-destructive hover:text-destructive\"\n onClient={onDelete}\n />\n )}\n {collapsible && (\n <ItemActionButton\n action={resolve(collapsed ? 'expand' : 'collapse')}\n context={context}\n args={args}\n attributes={{ 'aria-expanded': collapsed ? 'false' : 'true' }}\n onClient={onToggle}\n />\n )}\n </div>\n )\n}\n\n/** \"Collapse all\" / \"Expand all\" above collapsible items. */\nexport function CollapseAllActions({\n context,\n resolve,\n onCollapseAll,\n onExpandAll,\n}: {\n context: ActionContext\n resolve: (name: ItemActionName) => ItemActionSchema | null\n onCollapseAll: () => void\n onExpandAll: () => void\n}) {\n const collapseAll = resolve('collapseAll')\n const expandAll = resolve('expandAll')\n\n if (!collapseAll && !expandAll) return null\n\n return (\n <div className=\"flex justify-end gap-3\" data-slot=\"item-collapse-actions\">\n <ItemActionButton action={collapseAll} context={context} onClient={onCollapseAll} />\n <ItemActionButton action={expandAll} context={context} onClient={onExpandAll} />\n </div>\n )\n}\n\nconst JUSTIFY = { start: 'justify-start', center: 'justify-center', end: 'justify-end' } as const\n\n/** The row holding the add button, aligned with `addActionAlignment()`. */\nexport function AddActionRow({ alignment, children }: { alignment?: string; children: ReactNode }) {\n return (\n <div className={cn('flex', JUSTIFY[addActionJustify(alignment)])} data-slot=\"item-add-action\">\n {children}\n </div>\n )\n}\n\n/**\n * Moves made with the item move buttons: one at a time, announced in a live region\n * (\"Moved to position 2 of 5\") and with focus kept on the moved item's move button.\n * Render `region` once in the field and put `containerRef` on an element holding the\n * items (they carry `data-index`).\n */\nexport function useItemMoves<T>(\n value: T,\n move: (from: number, to: number) => void,\n labelFor: (index: number) => string | null | undefined,\n count: number,\n) {\n const t = useT()\n const [tracker] = useState(() => new ItemMoveTracker())\n const [announcement, setAnnouncement] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n if (tracker.isMoving) tracker.finish(containerRef.current)\n }, [value, tracker])\n\n const moveWithButton = (from: number, to: number) => {\n if (to < 0 || to >= count || !tracker.begin(from, to)) return\n\n const label = labelFor(from)\n\n move(from, to)\n setAnnouncement(\n label\n ? t(\n 'form.labelled_item_moved',\n { item: label, position: to + 1, total: count },\n ':item moved to position :position of :total',\n )\n : t(\n 'form.item_moved',\n { position: to + 1, total: count },\n 'Item moved to position :position of :total',\n ),\n )\n }\n\n const region = (\n <span aria-live=\"polite\" aria-atomic=\"true\" className=\"sr-only\" data-slot=\"item-move-status\">\n {announcement}\n </span>\n )\n\n return { moveWithButton, region, containerRef }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAyCA,SAAgB,iBAAiB,EAC/B,QACA,SACA,MACA,UACA,UACA,YACA,OAAO,MACP,aAUC;CACD,IAAI,CAAC,QAAQ,OAAO;CAIpB,IAAI,CAAC,OAAO,UAAU,OAAO,YAAY,iBAAiB,CAAC,OAAO,OAAO;EACvE,MAAM,aAAa,OAAO,OAAO,aAAa,OAAO,QAAQ,KAAA;EAC7D,MAAM,QAAQ,OAAO,SAAS,OAAO,WAAW,OAAO;EAEvD,OACE,oBAAC,QAAD;GACE,MAAK;GACL,SAAQ;GACR,MAAM,SAAS,OAAO,YAAY,SAAS,OAAO,YAAY;GAC9D,UAAU,YAAY,OAAO;GAC7B,cAAY;GACZ,OAAO,OAAO,WAAW;GACzB,eAAe,WAAW;GAC1B,GAAI,WACF;IAAE,GAAG,OAAO;IAAiB,GAAG;GAAW,GAC3C,GAAG,WAAW,yBAAyB,OAAO,OAAO,MAAM,GAAG,SAAS,CACzE;GAEC,UAAA,aAAa,oBAAC,YAAD,CAAa,CAAA,IAAI,oBAAC,MAAD,EAAM,MAAM,OAAO,KAAO,CAAA;EACnD,CAAA;CAEZ;CAEA,OACE,oBAAC,wBAAD;EACU;EACC;EACH;EACI;EACA;EACE;EACN;EACK;CACZ,CAAA;AAEL;;AAGA,MAAM,eAA2C;CAC/C,cAAc;CACd,gBAAgB;CAChB,MAAM;CACN,WAAW;CACX,iBAAiB;CACjB,MAAM;AACR;AAEA,SAAS,uBAAuB,EAC9B,QACA,SACA,MACA,UACA,UACA,YACA,OAAO,MACP,aAUC;CACD,MAAM,SAAS,gBAAgB;CAC/B,MAAM,SAAS,cAAc,kBAAkB,SAAS,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC;CAEpF,OACE,oBAAC,cAAD;EACE,QAAQ,oBAAoB,QAAQ;GAAE;GAAU;EAAW,CAAC;EAC5D,SAAS;EACH;EACK;EACX,iBAAiB;EACjB,YAAY,QAAQ,QAAS,OAAO,SAAS,OAAO,QAAQ,QAAQ,GAAG,IAAI,WAAW;CACvF,CAAA;AAEL;;AAGA,SAAgB,iBAAiB,SAAwB;CACvD,MAAM,SAAS,gBAAgB;CAE/B,QAAQ,QAAiC,MAA+B,aAAyB;EAC/F,IAAI,CAAC,QAAQ;EACb,IAAI,OAAO,QAAQ,OAAY,QAAQ,QAAQ,kBAAkB,SAAS,IAAI,CAAC;OAC1E,SAAS;CAChB;AACF;;AAGA,SAAgB,uBAAuB,WAAW,IAAgD;CAChG,MAAM,IAAI,KAAK;CAEf,OAAO;EACL,KAAK;GAAE,OAAO;GAAU,MAAM;GAAQ,SAAS;EAAU;EACzD,QAAQ;GAAE,OAAO,EAAE,oBAAoB,CAAC,GAAG,QAAQ;GAAG,MAAM;GAAW,OAAO;EAAS;EACvF,OAAO;GAAE,OAAO,EAAE,cAAc,CAAC,GAAG,OAAO;GAAG,MAAM;EAAO;EAC3D,SAAS;GAAE,OAAO,EAAE,qBAAqB,CAAC,GAAG,SAAS;GAAG,MAAM;EAAgB;EAC/E,QAAQ;GAAE,OAAO,EAAE,gBAAgB,CAAC,GAAG,SAAS;GAAG,MAAM;EAAa;EACtE,UAAU;GAAE,OAAO,EAAE,kBAAkB,CAAC,GAAG,WAAW;GAAG,MAAM;EAAe;EAC9E,UAAU;GAAE,OAAO,EAAE,sBAAsB,CAAC,GAAG,UAAU;GAAG,MAAM;EAAa;EAC/E,QAAQ;GAAE,OAAO,EAAE,oBAAoB,CAAC,GAAG,QAAQ;GAAG,MAAM;EAAe;EAC3E,aAAa;GACX,OAAO,EAAE,qBAAqB,CAAC,GAAG,cAAc;GAChD,MAAM;GACN,SAAS;EACX;EACA,WAAW;GACT,OAAO,EAAE,mBAAmB,CAAC,GAAG,YAAY;GAC5C,MAAM;GACN,SAAS;EACX;CACF;AACF;;AAGA,SAAgB,eACd,OACA,WACA;CACA,QAAQ,MAAsB,SAC5B,kBAAkB,MAAM,OAAO,MAAM,UAAU,KAAK;AACxD;;AAsBA,MAAM,qBAAqB,GAAG,sBAAsB,KAAK;AACzD,MAAM,uBAAuB,GAAG,sBAAsB,OAAO;;;;;AAM7D,SAAgB,kBAAkB,EAChC,SACA,SACA,OACA,OACA,SACA,cACA,SACA,UACA,WACA,aACA,WACA,QACA,SACA,UACA,UACA,YACyB;CACzB,MAAM,OAAO,eAAe,EAAE,MAAM,QAAQ,IAAI,CAAC,OAAO,CAAC;CACzD,MAAM,eAAe,cAAc,kBAAkB,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC;CAEpF,OACE,qBAAC,OAAD;EAAK,WAAU;EAAoC,aAAU;EAA7D,UAAA;GACG;GACA,WACC,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,kBAAD;IACE,QAAQ,QAAQ,QAAQ;IACf;IACH;IACN,UAAU,UAAU;IACpB,YAAY;IACZ,gBAAgB,OAAO,OAAO,QAAQ,CAAC;GACxC,CAAA,GACD,oBAAC,kBAAD;IACE,QAAQ,QAAQ,UAAU;IACjB;IACH;IACN,UAAU,UAAU,QAAQ;IAC5B,YAAY;IACZ,gBAAgB,OAAO,OAAO,QAAQ,CAAC;GACxC,CAAA,CACD,EAAA,CAAA;GAEH,gBAAgB,aAAa,SAAS,KACrC,oBAAC,YAAD;IAAY,SAAS;IAAc,SAAS;IAAc,MAAK;IAAK,WAAU;GAAW,CAAA;GAE1F,YACC,oBAAC,kBAAD;IACE,QAAQ,QAAQ,OAAO;IACd;IACH;IACN,UAAU;GACX,CAAA;GAEF,aACC,oBAAC,kBAAD;IACE,QAAQ,QAAQ,QAAQ;IACf;IACH;IACN,WAAU;IACV,UAAU;GACX,CAAA;GAEF,eACC,oBAAC,kBAAD;IACE,QAAQ,QAAQ,YAAY,WAAW,UAAU;IACxC;IACH;IACN,YAAY,EAAE,iBAAiB,YAAY,UAAU,OAAO;IAC5D,UAAU;GACX,CAAA;EAEA;;AAET;;AAGA,SAAgB,mBAAmB,EACjC,SACA,SACA,eACA,eAMC;CACD,MAAM,cAAc,QAAQ,aAAa;CACzC,MAAM,YAAY,QAAQ,WAAW;CAErC,IAAI,CAAC,eAAe,CAAC,WAAW,OAAO;CAEvC,OACE,qBAAC,OAAD;EAAK,WAAU;EAAyB,aAAU;EAAlD,UAAA,CACE,oBAAC,kBAAD;GAAkB,QAAQ;GAAsB;GAAS,UAAU;EAAgB,CAAA,GACnF,oBAAC,kBAAD;GAAkB,QAAQ;GAAoB;GAAS,UAAU;EAAc,CAAA,CAC5E;;AAET;AAEA,MAAM,UAAU;CAAE,OAAO;CAAiB,QAAQ;CAAkB,KAAK;AAAc;;AAGvF,SAAgB,aAAa,EAAE,WAAW,YAAyD;CACjG,OACE,oBAAC,OAAD;EAAK,WAAW,GAAG,QAAQ,QAAQ,iBAAiB,SAAS,EAAE;EAAG,aAAU;EACzE;CACE,CAAA;AAET;;;;;;;AAQA,SAAgB,aACd,OACA,MACA,UACA,OACA;CACA,MAAM,IAAI,KAAK;CACf,MAAM,CAAC,WAAW,eAAe,IAAI,gBAAgB,CAAC;CACtD,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,eAAe,OAAuB,IAAI;CAEhD,gBAAgB;EACd,IAAI,QAAQ,UAAU,QAAQ,OAAO,aAAa,OAAO;CAC3D,GAAG,CAAC,OAAO,OAAO,CAAC;CAEnB,MAAM,kBAAkB,MAAc,OAAe;EACnD,IAAI,KAAK,KAAK,MAAM,SAAS,CAAC,QAAQ,MAAM,MAAM,EAAE,GAAG;EAEvD,MAAM,QAAQ,SAAS,IAAI;EAE3B,KAAK,MAAM,EAAE;EACb,gBACE,QACI,EACE,4BACA;GAAE,MAAM;GAAO,UAAU,KAAK;GAAG,OAAO;EAAM,GAC9C,6CACF,IACA,EACE,mBACA;GAAE,UAAU,KAAK;GAAG,OAAO;EAAM,GACjC,4CACF,CACN;CACF;CAQA,OAAO;EAAE;EAAgB,QAAA,oBALtB,QAAD;GAAM,aAAU;GAAS,eAAY;GAAO,WAAU;GAAU,aAAU;GACvE,UAAA;EACG,CAGsB;EAAG;CAAa;AAChD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { KeyValueSchema } from "@alfakit/core";
|
|
2
|
+
//#region src/components/fields/key-value.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The server stores an object; while editing we keep an ordered list of rows so keys
|
|
5
|
+
* can be typed freely (including temporarily duplicate or empty keys).
|
|
6
|
+
*/
|
|
7
|
+
export declare function KeyValueField({ component }: {
|
|
8
|
+
component: KeyValueSchema;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
//#endregion
|
|
11
|
+
//# sourceMappingURL=key-value.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value.d.ts","names":[],"sources":["../../../src/components/fields/key-value.tsx"],"mappings":";;;;;;wBAwBgB,gBAAgB;EAAe,WAAW;oBAAgB,IAAA"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { useT } from "../../context.js";
|
|
2
|
+
import { cn } from "../../lib/utils.js";
|
|
3
|
+
import { Button } from "../ui/button.js";
|
|
4
|
+
import { useField } from "../form/form-context.js";
|
|
5
|
+
import { useFieldActionContext } from "../schema/field-actions.js";
|
|
6
|
+
import { FieldWrapper } from "../schema/field-wrapper.js";
|
|
7
|
+
import { Input } from "../ui/input.js";
|
|
8
|
+
import { ItemActionButton, useItemMoves, useRunItemAction } from "./item-actions.js";
|
|
9
|
+
import { fieldIds, moveRepeaterItem, reorderedItemKeys, resolveItemAction } from "@alfakit/core";
|
|
10
|
+
import { useMemo, useState } from "react";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { ChevronDownIcon, ChevronUpIcon } from "lucide-react";
|
|
13
|
+
//#region src/components/fields/key-value.tsx
|
|
14
|
+
/**
|
|
15
|
+
* The server stores an object; while editing we keep an ordered list of rows so keys
|
|
16
|
+
* can be typed freely (including temporarily duplicate or empty keys).
|
|
17
|
+
*/
|
|
18
|
+
function KeyValueField({ component }) {
|
|
19
|
+
const t = useT();
|
|
20
|
+
const { value, setValue, blur, error, id, disabled, readOnly, aria } = useField(component);
|
|
21
|
+
const rows = useMemo(() => {
|
|
22
|
+
if (Array.isArray(value)) return value.map((row) => ({
|
|
23
|
+
key: String(row.key ?? ""),
|
|
24
|
+
value: row.value === null || row.value === void 0 ? "" : String(row.value)
|
|
25
|
+
}));
|
|
26
|
+
return Object.entries(value ?? {}).map(([key, rowValue]) => ({
|
|
27
|
+
key,
|
|
28
|
+
value: rowValue === null || rowValue === void 0 ? "" : String(rowValue)
|
|
29
|
+
}));
|
|
30
|
+
}, [value]);
|
|
31
|
+
const context = useFieldActionContext(component);
|
|
32
|
+
const runItemAction = useRunItemAction(context);
|
|
33
|
+
const addAction = resolveItemAction("add", component, void 0, {
|
|
34
|
+
label: component.addActionLabel,
|
|
35
|
+
icon: "plus",
|
|
36
|
+
variant: "ghost"
|
|
37
|
+
});
|
|
38
|
+
const deleteAction = resolveItemAction("delete", component, void 0, {
|
|
39
|
+
label: t("form.remove_row", {}, "Remove row"),
|
|
40
|
+
icon: "trash-2"
|
|
41
|
+
});
|
|
42
|
+
const reorderAction = resolveItemAction("reorder", component, void 0, {
|
|
43
|
+
label: t("form.reorder_item", {}, "Reorder"),
|
|
44
|
+
icon: "grip-vertical"
|
|
45
|
+
});
|
|
46
|
+
const update = (next) => setValue(next);
|
|
47
|
+
const deletable = component.deletable && !readOnly && deleteAction !== null;
|
|
48
|
+
const reorderable = component.reorderable && !readOnly && !disabled && reorderAction !== null;
|
|
49
|
+
const [dragIndex, setDragIndex] = useState(null);
|
|
50
|
+
const move = (from, to) => runItemAction(reorderAction, { items: reorderedItemKeys(rows.length, from, to) }, () => update(moveRepeaterItem(rows, from, to)));
|
|
51
|
+
const { moveWithButton, region: moveRegion, containerRef: moveContainerRef } = useItemMoves(value, move, (index) => rows[index]?.key || null, rows.length);
|
|
52
|
+
return /* @__PURE__ */ jsx(FieldWrapper, {
|
|
53
|
+
field: component,
|
|
54
|
+
htmlFor: id,
|
|
55
|
+
error,
|
|
56
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
57
|
+
ref: moveContainerRef,
|
|
58
|
+
className: "overflow-hidden rounded-md border",
|
|
59
|
+
children: [
|
|
60
|
+
moveRegion,
|
|
61
|
+
/* @__PURE__ */ jsxs("table", {
|
|
62
|
+
className: "w-full text-sm",
|
|
63
|
+
"aria-labelledby": component.label ? fieldIds(id).label : void 0,
|
|
64
|
+
"aria-describedby": aria["aria-describedby"],
|
|
65
|
+
children: [/* @__PURE__ */ jsx("thead", {
|
|
66
|
+
className: "bg-muted/50 text-muted-foreground text-xs",
|
|
67
|
+
children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
68
|
+
reorderable && /* @__PURE__ */ jsx("th", { className: "w-16" }),
|
|
69
|
+
/* @__PURE__ */ jsx("th", {
|
|
70
|
+
className: "px-3 py-2 text-start font-medium",
|
|
71
|
+
children: component.keyLabel
|
|
72
|
+
}),
|
|
73
|
+
/* @__PURE__ */ jsx("th", {
|
|
74
|
+
className: "px-3 py-2 text-start font-medium",
|
|
75
|
+
children: component.valueLabel
|
|
76
|
+
}),
|
|
77
|
+
deletable && /* @__PURE__ */ jsx("th", { className: "w-10" })
|
|
78
|
+
] })
|
|
79
|
+
}), /* @__PURE__ */ jsxs("tbody", { children: [rows.map((row, index) => /* @__PURE__ */ jsxs("tr", {
|
|
80
|
+
"data-index": index,
|
|
81
|
+
draggable: reorderable,
|
|
82
|
+
onDragStart: () => setDragIndex(index),
|
|
83
|
+
onDragOver: (event) => reorderable && event.preventDefault(),
|
|
84
|
+
onDrop: () => {
|
|
85
|
+
if (dragIndex !== null && dragIndex !== index) move(dragIndex, index);
|
|
86
|
+
setDragIndex(null);
|
|
87
|
+
},
|
|
88
|
+
onDragEnd: () => setDragIndex(null),
|
|
89
|
+
className: cn("border-t", dragIndex === index && "opacity-50"),
|
|
90
|
+
children: [
|
|
91
|
+
reorderable && /* @__PURE__ */ jsx("td", {
|
|
92
|
+
className: "p-1.5",
|
|
93
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
94
|
+
className: "flex items-center",
|
|
95
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
96
|
+
type: "button",
|
|
97
|
+
variant: "ghost",
|
|
98
|
+
size: "icon-xs",
|
|
99
|
+
"aria-label": t("form.move_up", {}, "Move up"),
|
|
100
|
+
disabled: index === 0,
|
|
101
|
+
"data-item-move": "up",
|
|
102
|
+
onClick: () => moveWithButton(index, index - 1),
|
|
103
|
+
children: /* @__PURE__ */ jsx(ChevronUpIcon, {})
|
|
104
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
105
|
+
type: "button",
|
|
106
|
+
variant: "ghost",
|
|
107
|
+
size: "icon-xs",
|
|
108
|
+
"aria-label": t("form.move_down", {}, "Move down"),
|
|
109
|
+
disabled: index === rows.length - 1,
|
|
110
|
+
"data-item-move": "down",
|
|
111
|
+
onClick: () => moveWithButton(index, index + 1),
|
|
112
|
+
children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
|
|
113
|
+
})]
|
|
114
|
+
})
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ jsx("td", {
|
|
117
|
+
className: "p-1.5",
|
|
118
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
119
|
+
dir: "auto",
|
|
120
|
+
value: row.key,
|
|
121
|
+
readOnly: readOnly || !component.editableKeys,
|
|
122
|
+
disabled,
|
|
123
|
+
placeholder: component.keyPlaceholder,
|
|
124
|
+
"aria-label": component.keyLabel,
|
|
125
|
+
"aria-invalid": aria["aria-invalid"],
|
|
126
|
+
className: "h-8",
|
|
127
|
+
onChange: (event) => update(rows.map((item, i) => i === index ? {
|
|
128
|
+
...item,
|
|
129
|
+
key: event.target.value
|
|
130
|
+
} : item)),
|
|
131
|
+
onBlur: blur
|
|
132
|
+
})
|
|
133
|
+
}),
|
|
134
|
+
/* @__PURE__ */ jsx("td", {
|
|
135
|
+
className: "p-1.5",
|
|
136
|
+
children: /* @__PURE__ */ jsx(Input, {
|
|
137
|
+
dir: "auto",
|
|
138
|
+
value: row.value,
|
|
139
|
+
readOnly: readOnly || !component.editableValues,
|
|
140
|
+
disabled,
|
|
141
|
+
placeholder: component.valuePlaceholder,
|
|
142
|
+
"aria-label": component.valueLabel,
|
|
143
|
+
"aria-invalid": aria["aria-invalid"],
|
|
144
|
+
className: "h-8",
|
|
145
|
+
onChange: (event) => update(rows.map((item, i) => i === index ? {
|
|
146
|
+
...item,
|
|
147
|
+
value: event.target.value
|
|
148
|
+
} : item)),
|
|
149
|
+
onBlur: blur
|
|
150
|
+
})
|
|
151
|
+
}),
|
|
152
|
+
deletable && /* @__PURE__ */ jsx("td", {
|
|
153
|
+
className: "p-1.5",
|
|
154
|
+
children: /* @__PURE__ */ jsx(ItemActionButton, {
|
|
155
|
+
action: deleteAction,
|
|
156
|
+
context,
|
|
157
|
+
args: { item: String(index) },
|
|
158
|
+
size: "sm",
|
|
159
|
+
disabled,
|
|
160
|
+
className: "text-muted-foreground",
|
|
161
|
+
onClient: () => update(rows.filter((_, i) => i !== index))
|
|
162
|
+
})
|
|
163
|
+
})
|
|
164
|
+
]
|
|
165
|
+
}, index)), rows.length === 0 && /* @__PURE__ */ jsx("tr", {
|
|
166
|
+
className: "border-t",
|
|
167
|
+
children: /* @__PURE__ */ jsx("td", {
|
|
168
|
+
colSpan: reorderable ? 4 : 3,
|
|
169
|
+
className: "text-muted-foreground px-3 py-4 text-center text-xs",
|
|
170
|
+
children: "—"
|
|
171
|
+
})
|
|
172
|
+
})] })]
|
|
173
|
+
}),
|
|
174
|
+
component.addable && !readOnly && addAction && /* @__PURE__ */ jsx("div", {
|
|
175
|
+
className: "border-t p-1.5",
|
|
176
|
+
children: /* @__PURE__ */ jsx(ItemActionButton, {
|
|
177
|
+
action: addAction,
|
|
178
|
+
context,
|
|
179
|
+
size: "sm",
|
|
180
|
+
disabled,
|
|
181
|
+
onClient: () => update([...rows, {
|
|
182
|
+
key: "",
|
|
183
|
+
value: ""
|
|
184
|
+
}])
|
|
185
|
+
})
|
|
186
|
+
})
|
|
187
|
+
]
|
|
188
|
+
})
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
//#endregion
|
|
192
|
+
export { KeyValueField };
|
|
193
|
+
|
|
194
|
+
//# sourceMappingURL=key-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value.js","names":[],"sources":["../../../src/components/fields/key-value.tsx"],"sourcesContent":["import {\n fieldIds,\n moveRepeaterItem,\n reorderedItemKeys,\n resolveItemAction,\n type KeyValueSchema,\n} from '@alfakit/core'\nimport { ChevronDownIcon, ChevronUpIcon } from 'lucide-react'\nimport { useMemo, useState } from 'react'\nimport { useT } from '../../context'\nimport { cn } from '../../lib/utils'\nimport { useField } from '../form/form-context'\nimport { useFieldActionContext } from '../schema/field-actions'\nimport { FieldWrapper } from '../schema/field-wrapper'\nimport { Button } from '../ui/button'\nimport { Input } from '../ui/input'\nimport { ItemActionButton, useItemMoves, useRunItemAction } from './item-actions'\n\ntype Row = { key: string; value: string }\n\n/**\n * The server stores an object; while editing we keep an ordered list of rows so keys\n * can be typed freely (including temporarily duplicate or empty keys).\n */\nexport function KeyValueField({ component }: { component: KeyValueSchema }) {\n const t = useT()\n const { value, setValue, blur, error, id, disabled, readOnly, aria } = useField<\n Record<string, unknown> | Row[] | null\n >(component)\n\n const rows = useMemo<Row[]>(() => {\n if (Array.isArray(value)) {\n return value.map((row) => ({\n key: String(row.key ?? ''),\n value: row.value === null || row.value === undefined ? '' : String(row.value),\n }))\n }\n\n return Object.entries(value ?? {}).map(([key, rowValue]) => ({\n key,\n value: rowValue === null || rowValue === undefined ? '' : String(rowValue),\n }))\n }, [value])\n\n const context = useFieldActionContext(component)\n const runItemAction = useRunItemAction(context)\n const addAction = resolveItemAction('add', component, undefined, {\n label: component.addActionLabel,\n icon: 'plus',\n variant: 'ghost',\n })\n const deleteAction = resolveItemAction('delete', component, undefined, {\n label: t('form.remove_row', {}, 'Remove row'),\n icon: 'trash-2',\n })\n const reorderAction = resolveItemAction('reorder', component, undefined, {\n label: t('form.reorder_item', {}, 'Reorder'),\n icon: 'grip-vertical',\n })\n\n const update = (next: Row[]) => setValue(next)\n const deletable = component.deletable && !readOnly && deleteAction !== null\n const reorderable = component.reorderable && !readOnly && !disabled && reorderAction !== null\n const [dragIndex, setDragIndex] = useState<number | null>(null)\n // Moving runs the reorder action: in the browser, or on the server when customised.\n const move = (from: number, to: number) =>\n runItemAction(reorderAction, { items: reorderedItemKeys(rows.length, from, to) }, () =>\n update(moveRepeaterItem(rows, from, to) as Row[]),\n )\n // Move buttons: announced, one at a time, focus kept on the moved row.\n const {\n moveWithButton,\n region: moveRegion,\n containerRef: moveContainerRef,\n } = useItemMoves(value, move, (index) => rows[index]?.key || null, rows.length)\n\n return (\n <FieldWrapper field={component} htmlFor={id} error={error}>\n <div ref={moveContainerRef} className=\"overflow-hidden rounded-md border\">\n {moveRegion}\n <table\n className=\"w-full text-sm\"\n aria-labelledby={component.label ? fieldIds(id).label : undefined}\n aria-describedby={aria['aria-describedby']}\n >\n <thead className=\"bg-muted/50 text-muted-foreground text-xs\">\n <tr>\n {reorderable && <th className=\"w-16\" />}\n <th className=\"px-3 py-2 text-start font-medium\">{component.keyLabel}</th>\n <th className=\"px-3 py-2 text-start font-medium\">{component.valueLabel}</th>\n {deletable && <th className=\"w-10\" />}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, index) => (\n <tr\n key={index}\n data-index={index}\n draggable={reorderable}\n onDragStart={() => setDragIndex(index)}\n onDragOver={(event) => reorderable && event.preventDefault()}\n onDrop={() => {\n if (dragIndex !== null && dragIndex !== index) move(dragIndex, index)\n setDragIndex(null)\n }}\n onDragEnd={() => setDragIndex(null)}\n className={cn('border-t', dragIndex === index && 'opacity-50')}\n >\n {reorderable && (\n <td className=\"p-1.5\">\n <div className=\"flex items-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={t('form.move_up', {}, 'Move up')}\n disabled={index === 0}\n data-item-move=\"up\"\n onClick={() => moveWithButton(index, index - 1)}\n >\n <ChevronUpIcon />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-xs\"\n aria-label={t('form.move_down', {}, 'Move down')}\n disabled={index === rows.length - 1}\n data-item-move=\"down\"\n onClick={() => moveWithButton(index, index + 1)}\n >\n <ChevronDownIcon />\n </Button>\n </div>\n </td>\n )}\n <td className=\"p-1.5\">\n <Input\n dir=\"auto\"\n value={row.key}\n readOnly={readOnly || !component.editableKeys}\n disabled={disabled}\n placeholder={component.keyPlaceholder}\n aria-label={component.keyLabel}\n aria-invalid={aria['aria-invalid']}\n className=\"h-8\"\n onChange={(event) =>\n update(\n rows.map((item, i) =>\n i === index ? { ...item, key: event.target.value } : item,\n ),\n )\n }\n onBlur={blur}\n />\n </td>\n <td className=\"p-1.5\">\n <Input\n dir=\"auto\"\n value={row.value}\n readOnly={readOnly || !component.editableValues}\n disabled={disabled}\n placeholder={component.valuePlaceholder}\n aria-label={component.valueLabel}\n aria-invalid={aria['aria-invalid']}\n className=\"h-8\"\n onChange={(event) =>\n update(\n rows.map((item, i) =>\n i === index ? { ...item, value: event.target.value } : item,\n ),\n )\n }\n onBlur={blur}\n />\n </td>\n {deletable && (\n <td className=\"p-1.5\">\n <ItemActionButton\n action={deleteAction}\n context={context}\n args={{ item: String(index) }}\n size=\"sm\"\n disabled={disabled}\n className=\"text-muted-foreground\"\n onClient={() => update(rows.filter((_, i) => i !== index))}\n />\n </td>\n )}\n </tr>\n ))}\n {rows.length === 0 && (\n <tr className=\"border-t\">\n <td\n colSpan={reorderable ? 4 : 3}\n className=\"text-muted-foreground px-3 py-4 text-center text-xs\"\n >\n —\n </td>\n </tr>\n )}\n </tbody>\n </table>\n {component.addable && !readOnly && addAction && (\n <div className=\"border-t p-1.5\">\n <ItemActionButton\n action={addAction}\n context={context}\n size=\"sm\"\n disabled={disabled}\n onClient={() => update([...rows, { key: '', value: '' }])}\n />\n </div>\n )}\n </div>\n </FieldWrapper>\n )\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { LazyComponent } from "../../lib/lazy.js";
|
|
2
|
+
import { ModalTableSelectSchema, QueryBuilderRulesSchema } from "@alfakit/core";
|
|
3
|
+
//#region src/components/fields/lazy-fields.d.ts
|
|
4
|
+
/** `ModalTableSelect`; its code (the picker's table) loads the first time one is shown. */
|
|
5
|
+
export declare const ModalTableSelectField: LazyComponent<{
|
|
6
|
+
component: ModalTableSelectSchema;
|
|
7
|
+
}>;
|
|
8
|
+
/** The query builder filter's rules; its code loads the first time one is shown. */
|
|
9
|
+
export declare const QueryBuilderRulesField: LazyComponent<{
|
|
10
|
+
component: QueryBuilderRulesSchema;
|
|
11
|
+
}>;
|
|
12
|
+
//#endregion
|
|
13
|
+
//# sourceMappingURL=lazy-fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lazy-fields.d.ts","names":["_$______lib_lazy0.LazyComponent"],"sources":["../../../src/components/fields/lazy-fields.tsx"],"mappings":";;;;qBAkBa,uBAAmDA;EAAA,WAAA;;;qBAMnD,wBAAoDA;EAAA,WAAA"}
|