@alfakit/vue 0.1.1 → 0.1.6
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 +16 -0
- package/dist/AlfakitRoot.js.map +1 -1
- package/dist/AlfakitRoot.vue.d.ts.map +1 -1
- package/dist/AlfakitRoot.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/AlfakitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/actions/ActionButton.js.map +1 -1
- package/dist/components/actions/ActionButton.vue.d.ts.map +1 -1
- package/dist/components/actions/ActionButton.vue_vue_type_script_setup_true_lang.js +160 -159
- package/dist/components/actions/ActionButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/actions/ActionGroupMenu.js.map +1 -1
- package/dist/components/actions/ActionGroupMenu.vue.d.ts.map +1 -1
- package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js +69 -65
- package/dist/components/actions/ActionGroupMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/actions/ActionModal.js.map +1 -1
- package/dist/components/actions/ActionModal.vue.d.ts.map +1 -1
- package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js +221 -219
- package/dist/components/actions/ActionModal.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ai/AiCopilot.js.map +1 -1
- package/dist/components/ai/AiCopilot.vue.d.ts +2 -0
- package/dist/components/ai/AiCopilot.vue.d.ts.map +1 -1
- package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js +7 -2
- package/dist/components/ai/AiCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js +19 -19
- package/dist/components/cms/CmsPage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/cms/LivePreview.js.map +1 -1
- package/dist/components/cms/LivePreview.vue.d.ts.map +1 -1
- package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js +83 -83
- package/dist/components/cms/LivePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/BuilderField.js.map +1 -1
- package/dist/components/fields/BuilderField.vue.d.ts.map +1 -1
- package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js +162 -157
- package/dist/components/fields/BuilderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/ColorPickerField.js.map +1 -1
- package/dist/components/fields/ColorPickerField.vue.d.ts.map +1 -1
- package/dist/components/fields/ColorPickerField.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/fields/ColorPickerField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/ComboboxSelect.js.map +1 -1
- package/dist/components/fields/ComboboxSelect.vue.d.ts.map +1 -1
- package/dist/components/fields/ComboboxSelect.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/fields/ComboboxSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/FileUploadField.js.map +1 -1
- package/dist/components/fields/FileUploadField.vue.d.ts.map +1 -1
- package/dist/components/fields/FileUploadField.vue_vue_type_script_setup_true_lang.js +183 -183
- package/dist/components/fields/FileUploadField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/ImageEditorDialog.js.map +1 -1
- package/dist/components/fields/ImageEditorDialog.vue.d.ts.map +1 -1
- package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js +46 -46
- package/dist/components/fields/ImageEditorDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/KeyValueField.js.map +1 -1
- package/dist/components/fields/KeyValueField.vue.d.ts.map +1 -1
- package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js +66 -66
- package/dist/components/fields/KeyValueField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/ModalTablePicker.js.map +1 -1
- package/dist/components/fields/ModalTablePicker.vue.d.ts.map +1 -1
- package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js +113 -113
- package/dist/components/fields/ModalTablePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/OneTimeCodeInputField.js.map +1 -1
- package/dist/components/fields/OneTimeCodeInputField.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/components/fields/OneTimeCodeInputField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/RepeaterField.js.map +1 -1
- package/dist/components/fields/RepeaterField.vue.d.ts.map +1 -1
- package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js +12 -12
- package/dist/components/fields/RepeaterField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/RichEditorInput.js.map +1 -1
- package/dist/components/fields/RichEditorInput.vue.d.ts.map +1 -1
- package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js +166 -165
- package/dist/components/fields/RichEditorInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/SelectField.js.map +1 -1
- package/dist/components/fields/SelectField.vue.d.ts.map +1 -1
- package/dist/components/fields/SelectField.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/fields/SelectField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/SliderField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/TableColumnHeaders.js.map +1 -1
- package/dist/components/fields/TableColumnHeaders.vue.d.ts.map +1 -1
- package/dist/components/fields/TableColumnHeaders.vue_vue_type_script_setup_true_lang.js +6 -3
- package/dist/components/fields/TableColumnHeaders.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/fields/item-actions.d.ts +2 -2
- package/dist/components/fields/item-actions.d.ts.map +1 -1
- package/dist/components/fields/item-actions.js +31 -31
- package/dist/components/fields/item-actions.js.map +1 -1
- package/dist/components/file-manager/FileManagerView.js.map +1 -1
- package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/file-manager/FileManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/FormBlock.js.map +1 -1
- package/dist/components/form/FormBlock.vue.d.ts.map +1 -1
- package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js +81 -77
- package/dist/components/form/FormBlock.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form/form-context.js +25 -25
- package/dist/components/form/form-context.js.map +1 -1
- package/dist/components/kanban/KanbanBoard.js.map +1 -1
- package/dist/components/kanban/KanbanBoard.vue.d.ts.map +1 -1
- package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js +5 -2
- package/dist/components/kanban/KanbanBoard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/kanban/KanbanColumnHeader.js.map +1 -1
- package/dist/components/kanban/KanbanColumnHeader.vue.d.ts.map +1 -1
- package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js +64 -64
- package/dist/components/kanban/KanbanColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/FusedGroupComponent.js.map +1 -1
- package/dist/components/layout/FusedGroupComponent.vue.d.ts.map +1 -1
- package/dist/components/layout/FusedGroupComponent.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/layout/FusedGroupComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/SectionComponent.js.map +1 -1
- package/dist/components/layout/SectionComponent.vue.d.ts.map +1 -1
- package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js +23 -23
- package/dist/components/layout/SectionComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/layout/TabsComponent.js.map +1 -1
- package/dist/components/layout/TabsComponent.vue.d.ts.map +1 -1
- package/dist/components/layout/TabsComponent.vue_vue_type_script_setup_true_lang.js +76 -55
- package/dist/components/layout/TabsComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/notifications/NotificationsMenu.js.map +1 -1
- package/dist/components/notifications/NotificationsMenu.vue.d.ts.map +1 -1
- package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js +44 -42
- package/dist/components/notifications/NotificationsMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/components/panel/DebugPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/GlobalSearch.js.map +1 -1
- package/dist/components/panel/GlobalSearch.vue.d.ts.map +1 -1
- package/dist/components/panel/GlobalSearch.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/components/panel/GlobalSearch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/GlobalSearchPalette.js.map +1 -1
- package/dist/components/panel/GlobalSearchPalette.vue.d.ts.map +1 -1
- package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js +102 -96
- package/dist/components/panel/GlobalSearchPalette.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/panel/NavGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/components/panel/NavGroupFlyout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js +16 -16
- package/dist/components/panel/NavItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js +10 -10
- package/dist/components/panel/NavSubItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/ShortcutKeys.js.map +1 -1
- package/dist/components/panel/ShortcutKeys.vue.d.ts.map +1 -1
- package/dist/components/panel/ShortcutKeys.vue_vue_type_script_setup_true_lang.js +4 -1
- package/dist/components/panel/ShortcutKeys.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/TenantMenu.js.map +1 -1
- package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js +37 -37
- package/dist/components/panel/TenantMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js +11 -11
- package/dist/components/panel/Topbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/realtime/use-live-updates.d.ts.map +1 -1
- package/dist/components/realtime/use-live-updates.js +24 -23
- package/dist/components/realtime/use-live-updates.js.map +1 -1
- package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/table/BooleanCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/ColumnHeader.js.map +1 -1
- package/dist/components/table/ColumnHeader.vue.d.ts.map +1 -1
- package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js +55 -49
- package/dist/components/table/ColumnHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/ColumnManager.js.map +1 -1
- package/dist/components/table/ColumnManager.vue.d.ts.map +1 -1
- package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js +5 -4
- package/dist/components/table/ColumnManager.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/ContentLayoutSort.js.map +1 -1
- package/dist/components/table/ContentLayoutSort.vue.d.ts.map +1 -1
- package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/components/table/ContentLayoutSort.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/GroupHeaderRow.js.map +1 -1
- package/dist/components/table/GroupHeaderRow.vue.d.ts.map +1 -1
- package/dist/components/table/GroupHeaderRow.vue_vue_type_script_setup_true_lang.js +55 -34
- package/dist/components/table/GroupHeaderRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/SelectCell.js.map +1 -1
- package/dist/components/table/SelectCell.vue.d.ts.map +1 -1
- package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js +26 -20
- package/dist/components/table/SelectCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js +2 -1
- package/dist/components/table/SelectComboboxCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TableCellContent.js.map +1 -1
- package/dist/components/table/TableCellContent.vue.d.ts.map +1 -1
- package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js +4 -3
- package/dist/components/table/TableCellContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TablePagination.js.map +1 -1
- package/dist/components/table/TablePagination.vue.d.ts.map +1 -1
- package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js +87 -87
- package/dist/components/table/TablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/TextInputCell.js.map +1 -1
- package/dist/components/table/TextInputCell.vue.d.ts.map +1 -1
- package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js +40 -34
- package/dist/components/table/TextInputCell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/table/cell-update.d.ts +6 -0
- package/dist/components/table/cell-update.d.ts.map +1 -1
- package/dist/components/table/cell-update.js.map +1 -1
- package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/components/translation-manager/TranslationManagerView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/CommandAutoHighlight.js +7 -0
- package/dist/components/ui/CommandAutoHighlight.js.map +1 -0
- package/dist/components/ui/CommandAutoHighlight.vue.d.ts +21 -0
- package/dist/components/ui/CommandAutoHighlight.vue.d.ts.map +1 -0
- package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js +18 -0
- package/dist/components/ui/CommandAutoHighlight.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/components/ui/DialogContent.js.map +1 -1
- package/dist/components/ui/DialogContent.vue.d.ts.map +1 -1
- package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js +13 -12
- package/dist/components/ui/DialogContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/PopoverContent.js.map +1 -1
- package/dist/components/ui/PopoverContent.vue.d.ts.map +1 -1
- package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js +9 -8
- package/dist/components/ui/PopoverContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/SheetContent.js.map +1 -1
- package/dist/components/ui/SheetContent.vue.d.ts.map +1 -1
- package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js +13 -12
- package/dist/components/ui/SheetContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/ui/TooltipContent.js.map +1 -1
- package/dist/components/ui/TooltipContent.vue.d.ts.map +1 -1
- package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js +9 -8
- package/dist/components/ui/TooltipContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components.css +347 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +29 -26
- package/dist/context.js.map +1 -1
- package/dist/create-alfakit.d.ts.map +1 -1
- package/dist/create-alfakit.js +33 -31
- package/dist/create-alfakit.js.map +1 -1
- package/dist/eject-manifest.json +11 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +219 -217
- package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/layouts/AppLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/layouts/AuthLayout.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/layouts/FullscreenLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/layouts/TopNavLayout.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/layouts/lazy-layouts.d.ts +10 -0
- package/dist/layouts/lazy-layouts.d.ts.map +1 -0
- package/dist/layouts/lazy-layouts.js +8 -0
- package/dist/layouts/lazy-layouts.js.map +1 -0
- package/dist/layouts/panel-layouts.d.ts +8 -0
- package/dist/layouts/panel-layouts.d.ts.map +1 -0
- package/dist/layouts/panel-layouts.js +15 -0
- package/dist/layouts/panel-layouts.js.map +1 -0
- package/dist/lib/lazy.d.ts.map +1 -1
- package/dist/lib/lazy.js +2 -2
- package/dist/lib/lazy.js.map +1 -1
- package/dist/pages/PageShell.js.map +1 -1
- package/dist/pages/PageShell.vue.d.ts.map +1 -1
- package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js +39 -42
- package/dist/pages/PageShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/standalone/AlfakitComponent.js.map +1 -1
- package/dist/standalone/AlfakitComponent.vue.d.ts.map +1 -1
- package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js +56 -52
- package/dist/standalone/AlfakitComponent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/standalone/AlfakitToaster.js.map +1 -1
- package/dist/standalone/AlfakitToaster.vue.d.ts.map +1 -1
- package/dist/standalone/AlfakitToaster.vue_vue_type_script_setup_true_lang.js +23 -15
- package/dist/standalone/AlfakitToaster.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/standalone.css +54 -0
- package/dist/starter-kit/AlfakitStarterKitRoot.js.map +1 -1
- package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts +2 -2
- package/dist/starter-kit/AlfakitStarterKitRoot.vue.d.ts.map +1 -1
- package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js +17 -12
- package/dist/starter-kit/AlfakitStarterKitRoot.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/starter-kit/dashboard-widgets.d.ts +54 -0
- package/dist/starter-kit/dashboard-widgets.d.ts.map +1 -0
- package/dist/starter-kit/dashboard-widgets.js +54 -0
- package/dist/starter-kit/dashboard-widgets.js.map +1 -0
- package/dist/starter-kit/index.d.ts +2 -1
- package/dist/starter-kit/index.d.ts.map +1 -1
- package/dist/starter-kit/index.js +5 -4
- package/dist/starter-kit/runtime.d.ts +6 -0
- package/dist/starter-kit/runtime.d.ts.map +1 -1
- package/dist/starter-kit/runtime.js +19 -15
- package/dist/starter-kit/runtime.js.map +1 -1
- package/dist/starter-kit/starter-kit.d.ts.map +1 -1
- package/dist/starter-kit/starter-kit.js +8 -8
- package/dist/starter-kit/starter-kit.js.map +1 -1
- package/dist/starter-kit/widgets/CopilotTrigger.js +7 -0
- package/dist/starter-kit/widgets/CopilotTrigger.js.map +1 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts +12 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue.d.ts.map +1 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js +23 -0
- package/dist/starter-kit/widgets/CopilotTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/starter-kit/widgets/LoadedCopilot.js +7 -0
- package/dist/starter-kit/widgets/LoadedCopilot.js.map +1 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts +8 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue.d.ts.map +1 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js +31 -0
- package/dist/starter-kit/widgets/LoadedCopilot.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/starter-kit/widgets/SearchTrigger.js.map +1 -1
- package/dist/starter-kit/widgets/SearchTrigger.vue.d.ts.map +1 -1
- package/dist/starter-kit/widgets/SearchTrigger.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/starter-kit/widgets/SearchTrigger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js +7 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.js.map +1 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts +8 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue.d.ts.map +1 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js +34 -0
- package/dist/starter-kit/widgets/StarterKitImpersonationBanner.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/starter-kit/widgets/TenantChooser.js.map +1 -1
- package/dist/starter-kit/widgets/TenantChooser.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/starter-kit/widgets/TenantChooser.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/starter-kit/widgets/index.d.ts +40 -9
- package/dist/starter-kit/widgets/index.d.ts.map +1 -1
- package/dist/starter-kit/widgets/index.js +21 -18
- package/dist/starter-kit/widgets/index.js.map +1 -1
- package/dist/starter-kit/widgets/loaded.d.ts +10 -0
- package/dist/starter-kit/widgets/loaded.d.ts.map +1 -0
- package/dist/starter-kit/widgets/loaded.js +5 -0
- package/dist/styles.css +9 -2
- package/dist/themes.css +8 -335
- package/package.json +3 -3
- package/src/AlfakitRoot.vue +9 -1
- package/src/components/actions/ActionButton.vue +14 -6
- package/src/components/actions/ActionGroupMenu.vue +13 -1
- package/src/components/actions/ActionModal.vue +12 -1
- package/src/components/ai/AiCopilot.vue +7 -1
- package/src/components/cms/LivePreview.vue +8 -2
- package/src/components/fields/BuilderField.vue +15 -2
- package/src/components/fields/ColorPickerField.vue +1 -0
- package/src/components/fields/ComboboxSelect.vue +1 -1
- package/src/components/fields/FileUploadField.vue +14 -11
- package/src/components/fields/ImageEditorDialog.vue +7 -3
- package/src/components/fields/KeyValueField.vue +3 -2
- package/src/components/fields/ModalTablePicker.vue +7 -2
- package/src/components/fields/OneTimeCodeInputField.vue +1 -1
- package/src/components/fields/RepeaterField.vue +2 -3
- package/src/components/fields/RichEditorInput.vue +3 -0
- package/src/components/fields/SelectField.vue +4 -2
- package/src/components/fields/TableColumnHeaders.vue +6 -1
- package/src/components/fields/item-actions.ts +31 -10
- package/src/components/file-manager/FileManagerView.vue +1 -1
- package/src/components/form/FormBlock.vue +26 -1
- package/src/components/form/form-context.ts +3 -3
- package/src/components/kanban/KanbanBoard.vue +15 -3
- package/src/components/kanban/KanbanColumnHeader.vue +6 -4
- package/src/components/layout/FusedGroupComponent.vue +1 -0
- package/src/components/layout/SectionComponent.vue +10 -4
- package/src/components/layout/TabsComponent.vue +61 -5
- package/src/components/notifications/NotificationsMenu.vue +11 -0
- package/src/components/panel/GlobalSearch.vue +1 -0
- package/src/components/panel/GlobalSearchPalette.vue +2 -0
- package/src/components/panel/ShortcutKeys.vue +1 -0
- package/src/components/panel/TenantMenu.vue +2 -2
- package/src/components/realtime/use-live-updates.ts +3 -1
- package/src/components/table/ColumnHeader.vue +23 -12
- package/src/components/table/ColumnManager.vue +12 -8
- package/src/components/table/ContentLayoutSort.vue +7 -1
- package/src/components/table/GroupHeaderRow.vue +27 -0
- package/src/components/table/SelectCell.vue +5 -2
- package/src/components/table/TableCellContent.vue +4 -2
- package/src/components/table/TablePagination.vue +12 -7
- package/src/components/table/TextInputCell.vue +11 -5
- package/src/components/table/cell-update.ts +6 -0
- package/src/components/ui/CommandAutoHighlight.vue +27 -0
- package/src/components/ui/DialogContent.vue +5 -1
- package/src/components/ui/PopoverContent.vue +5 -1
- package/src/components/ui/SheetContent.vue +5 -1
- package/src/components/ui/TooltipContent.vue +5 -1
- package/src/context.ts +10 -0
- package/src/create-alfakit.ts +5 -0
- package/src/index.ts +2 -0
- package/src/layouts/lazy-layouts.ts +14 -0
- package/src/layouts/panel-layouts.ts +17 -0
- package/src/lib/lazy.ts +11 -1
- package/src/pages/PageShell.vue +5 -6
- package/src/standalone/AlfakitComponent.vue +17 -6
- package/src/standalone/AlfakitToaster.vue +12 -2
- package/src/starter-kit/AlfakitStarterKitRoot.vue +12 -3
- package/src/starter-kit/dashboard-widgets.ts +93 -0
- package/src/starter-kit/index.ts +7 -1
- package/src/starter-kit/runtime.ts +17 -1
- package/src/starter-kit/starter-kit.ts +2 -1
- package/src/starter-kit/widgets/CopilotTrigger.vue +58 -0
- package/src/starter-kit/widgets/LoadedCopilot.vue +29 -0
- package/src/starter-kit/widgets/SearchTrigger.vue +1 -0
- package/src/starter-kit/widgets/StarterKitImpersonationBanner.vue +57 -0
- package/src/starter-kit/widgets/TenantChooser.vue +1 -1
- package/src/starter-kit/widgets/index.ts +56 -11
- package/src/starter-kit/widgets/loaded.ts +9 -0
- package/src/styles.css +9 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentLayoutSort.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_createBlock","Button","_withCtx","_createCommentVNode","Button_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","ContentLayoutSort_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","sortable","computed","column","direction","sortBy","value","event","flip","visitTable","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","Fragment","renderList","createBlock","withCtx","ArrowUpIcon","ArrowDownIcon","createCommentVNode"],"sources":["../../../src/components/table/ContentLayoutSort.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport Button from '../ui/Button.vue'\n\n/**\n * Sorting for content layouts, which have no column headers: a select of the sortable\n * columns and a direction toggle.\n */\nconst props = defineProps<{ table: TableSchema; columns: ColumnSchema[] }>()\nconst t = useT()\nconst sortable = computed(() => props.columns.filter((column) => column.sortable))\nconst direction = computed(() => props.table.sort?.direction ?? 'asc')\n\nconst sortBy = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(\n props.table.identifier,\n { sort: value || null, direction: value ? direction.value : null },\n ['page'],\n )\n}\nconst flip = () =>\n visitTable(\n props.table.identifier,\n {\n sort: props.table.sort?.column ?? null,\n direction: direction.value === 'asc' ? 'desc' : 'asc',\n },\n ['page'],\n )\n</script>\n\n<template>\n <div v-if=\"sortable.length > 0\" class=\"flex items-center gap-1\">\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('table.sort_by', {}, 'Sort by') }}</span>\n <select\n :value=\"
|
|
1
|
+
{"version":3,"file":"ContentLayoutSort.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_Fragment","_renderList","_createBlock","Button","_withCtx","_createCommentVNode","Button_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","ContentLayoutSort_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","sortable","computed","column","direction","selected","sortBy","value","event","flip","visitTable","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","Fragment","renderList","createBlock","withCtx","ArrowUpIcon","ArrowDownIcon","createCommentVNode"],"sources":["../../../src/components/table/ContentLayoutSort.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport Button from '../ui/Button.vue'\n\n/**\n * Sorting for content layouts, which have no column headers: a select of the sortable\n * columns and a direction toggle.\n */\nconst props = defineProps<{ table: TableSchema; columns: ColumnSchema[] }>()\nconst t = useT()\nconst sortable = computed(() => props.columns.filter((column) => column.sortable))\nconst direction = computed(() => props.table.sort?.direction ?? 'asc')\n// A default sort on a column the select doesn't list (`created_at`) shows the placeholder.\nconst selected = computed(() =>\n sortable.value.some((column) => column.name === props.table.sort?.column)\n ? (props.table.sort?.column ?? '')\n : '',\n)\n\nconst sortBy = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(\n props.table.identifier,\n { sort: value || null, direction: value ? direction.value : null },\n ['page'],\n )\n}\nconst flip = () =>\n visitTable(\n props.table.identifier,\n {\n sort: props.table.sort?.column ?? null,\n direction: direction.value === 'asc' ? 'desc' : 'asc',\n },\n ['page'],\n )\n</script>\n\n<template>\n <div v-if=\"sortable.length > 0\" class=\"flex items-center gap-1\">\n <label class=\"flex items-center gap-2 text-sm\">\n <span class=\"sr-only\">{{ t('table.sort_by', {}, 'Sort by') }}</span>\n <select\n :value=\"selected\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"sortBy\"\n >\n <option value=\"\">\n {{ props.table.defaultSortOptionLabel ?? t('table.sort_by', {}, 'Sort by') }}\n </option>\n <option v-for=\"column in sortable\" :key=\"column.name\" :value=\"column.name\">\n {{ column.label }}\n </option>\n </select>\n </label>\n <Button\n v-if=\"props.table.sort\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :aria-label=\"\n direction === 'asc'\n ? t('table.sort_ascending', {}, 'Ascending')\n : t('table.sort_descending', {}, 'Descending')\n \"\n @click=\"flip\"\n >\n <ArrowUpIcon v-if=\"direction === 'asc'\" />\n <ArrowDownIcon v-else />\n </Button>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;EAYA,IAAMmB,IAAQC,GACRC,IAAIC,EAAK,GACTC,IAAWC,QAAeL,EAAM,QAAQ,QAAQ,MAAWM,EAAO,QAAQ,CAAC,GAC3EC,IAAYF,QAAeL,EAAM,MAAM,MAAM,aAAa,KAAK,GAE/DQ,IAAWH,QACfD,EAAS,MAAM,MAAM,MAAWE,EAAO,SAASN,EAAM,MAAM,MAAM,MAAM,IACnEA,EAAM,MAAM,MAAM,UAAU,KAC7B,EACN,GAEMS,KAAU,MAAiB;GAC/B,IAAMC,IAASC,EAAM,OAA6B;GAClD,EACEX,EAAM,MAAM,YACZ;IAAE,MAAMU,KAAS;IAAM,WAAWA,IAAQH,EAAU,QAAQ;GAAK,GACjE,CAAC,MAAM,CACT;EACF,GACMK,UACJC,EACEb,EAAM,MAAM,YACZ;GACE,MAAMA,EAAM,MAAM,MAAM,UAAU;GAClC,WAAWO,EAAU,UAAU,QAAQ,SAAS;EAClD,GACA,CAAC,MAAM,CACT;mBAIWH,EAAA,MAAS,SAAM,KAA1BvB,EAAA,GAAAC,EA+BM,OA/BNW,GA+BM,CA9BJV,EAcQ,SAdRW,GAcQ,CAbNX,EAAoE,QAApEY,GAAoEX,EAA3CC,EAAAiB,CAAA,CAAC,CAAA,iBAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,GAC1BnB,EAWS,UAAA;GAVN,OAAOyB,EAAA;GACR,OAAM;GACL,UAAQC;EAET1B,GAAAA,CAAAA,EAES,UAFTc,GAESb,EADJgB,EAAM,MAAM,0BAA0Bf,EAAAiB,CAAA,CAAC,CAAA,iBAAA,CAAA,GAAA,SAAA,CAAA,GAAA,CAAA,IAE5CrB,EAAA,EAAA,GAAAC,EAESI,GAAA,MAAAC,EAFgBiB,EAAA,QAAV,OAAfvB,EAAA,GAAAC,EAES,UAAA;GAF2B,KAAKwB,EAAO;GAAO,OAAOA,EAAO;EAChE,GAAAtB,EAAAsB,EAAO,KAAK,GAAA,GAAAR,CAAA,EAKb,GAAA,GAAA,EAAA,GAAA,IAAAF,CAAA,CAAA,CAAA,GAAAI,EAAM,MAAM,QADpBnB,EAAA,GAAAO,EAcSC,GAAA;;GAZP,MAAK;GACL,SAAQ;GACR,MAAK;GACJ,cAAqBkB,EAAA,UAAS,QAAuBtB,EAAAiB,CAAA,CAAC,CAAA,wBAAA,CAAA,GAAA,WAAA,IAAsDjB,EAAAiB,CAAA,CAAC,CAAA,yBAAA,CAAA,GAAA,YAAA;GAK7G,SAAOU;;GAER,SAAAtB,QAA0C,CAAvBiB,EAAA,UAAS,SAA5B1B,EAAA,GAAAO,EAA0CH,EAAAsC,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,MAC1C1C,EAAA,GAAAO,EAAwBH,EAAAuC,CAAA,GAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupHeaderRow.js","names":["_sfc_main","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","GroupHeaderRow_default"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"GroupHeaderRow.js","names":["_sfc_main","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","GroupHeaderRow_default"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { colorClass, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\n// An enum group shows its `HasIcon` icon, in its `HasColor` colour, before the title.\nconst groupIconClass = computed(\n () => `size-4 shrink-0 ${colorClass(textColorClasses, props.group.color, 'gray')}`,\n)\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <Icon\n v-if=\"props.group.icon\"\n :name=\"props.group.icon\"\n :class=\"groupIconClass\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span\n v-else-if=\"props.group.icon\"\n data-slot=\"table-group-title\"\n class=\"flex items-center gap-2\"\n >\n <Icon :name=\"props.group.icon\" :class=\"groupIconClass\" aria-hidden=\"true\" />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </span>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupHeaderRow.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/GroupHeaderRow.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GroupHeaderRow.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/GroupHeaderRow.vue"],"names":[],"mappings":"AA0GA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAU3D,gGAAgG;AAChG,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,sBAAsB,CAAA;IAC7B,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,kFAAkF;IAClF,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;QAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAA;CACzF,CAAC;;;;;;AA2QF,wBAOG"}
|
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
import { useT as e } from "../../context.js";
|
|
2
|
-
import t from "../../lib/
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
2
|
+
import { colorClass as t, textColorClasses as n } from "../../lib/colors.js";
|
|
3
|
+
import r from "../../lib/Icon.js";
|
|
4
|
+
import i from "../ui/Checkbox.js";
|
|
5
|
+
import a from "../ui/TableCell.js";
|
|
6
|
+
import o from "../ui/TableRow.js";
|
|
7
|
+
import { computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createVNode as f, defineComponent as p, normalizeClass as m, openBlock as h, toDisplayString as g, unref as _, withCtx as v } from "vue";
|
|
8
|
+
import { ChevronDownIcon as y, ChevronRightIcon as b } from "@lucide/vue";
|
|
8
9
|
//#region src/components/table/GroupHeaderRow.vue?vue&type=script&setup=true&lang.ts
|
|
9
|
-
var
|
|
10
|
+
var x = { class: "flex items-center gap-3" }, S = ["aria-expanded", "aria-label"], C = { class: "flex flex-col items-start" }, w = { class: "font-medium" }, T = {
|
|
10
11
|
key: 0,
|
|
11
12
|
class: "text-muted-foreground text-xs font-normal"
|
|
12
|
-
},
|
|
13
|
+
}, E = {
|
|
13
14
|
key: 2,
|
|
15
|
+
"data-slot": "table-group-title",
|
|
16
|
+
class: "flex items-center gap-2"
|
|
17
|
+
}, D = { class: "flex flex-col items-start" }, O = { class: "font-medium" }, k = {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "text-muted-foreground text-xs font-normal"
|
|
20
|
+
}, A = {
|
|
21
|
+
key: 3,
|
|
14
22
|
class: "flex flex-col items-start"
|
|
15
|
-
},
|
|
23
|
+
}, j = { class: "font-medium" }, M = {
|
|
16
24
|
key: 0,
|
|
17
25
|
class: "text-muted-foreground text-xs font-normal"
|
|
18
|
-
},
|
|
26
|
+
}, N = /*@__PURE__*/ p({
|
|
19
27
|
__name: "GroupHeaderRow",
|
|
20
28
|
props: {
|
|
21
29
|
group: {},
|
|
@@ -25,39 +33,52 @@ var v = { class: "flex items-center gap-3" }, y = ["aria-expanded", "aria-label"
|
|
|
25
33
|
selection: {}
|
|
26
34
|
},
|
|
27
35
|
emits: ["toggle"],
|
|
28
|
-
setup(
|
|
29
|
-
let
|
|
30
|
-
return (e,
|
|
36
|
+
setup(p, { emit: N }) {
|
|
37
|
+
let P = p, F = N, I = e(), L = s(() => `size-4 shrink-0 ${t(n, P.group.color, "gray")}`), R = s(() => `${P.collapsed ? I("table_grouping.expand", {}, "Expand group") : I("table_grouping.collapse", {}, "Collapse group")}: ${P.group.title}`);
|
|
38
|
+
return (e, t) => (h(), c(o, {
|
|
31
39
|
"data-slot": "table-group",
|
|
32
40
|
class: "bg-muted/50 hover:bg-muted/50"
|
|
33
41
|
}, {
|
|
34
|
-
default:
|
|
35
|
-
colspan:
|
|
42
|
+
default: v(() => [f(a, {
|
|
43
|
+
colspan: P.colSpan,
|
|
36
44
|
class: "py-2"
|
|
37
45
|
}, {
|
|
38
|
-
default:
|
|
46
|
+
default: v(() => [d("span", x, [P.selection ? (h(), c(i, {
|
|
39
47
|
key: 0,
|
|
40
|
-
"model-value":
|
|
41
|
-
"aria-label":
|
|
42
|
-
"onUpdate:modelValue":
|
|
43
|
-
}, null, 8, ["model-value", "aria-label"])) :
|
|
48
|
+
"model-value": P.selection.checked,
|
|
49
|
+
"aria-label": _(I)("table.select_group", { group: P.group.title }, "Select group :group"),
|
|
50
|
+
"onUpdate:modelValue": t[0] ||= (e) => P.selection.onChange(e === !0)
|
|
51
|
+
}, null, 8, ["model-value", "aria-label"])) : l("", !0), P.collapsible ? (h(), u("button", {
|
|
44
52
|
key: 1,
|
|
45
53
|
type: "button",
|
|
46
54
|
class: "focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]",
|
|
47
|
-
"aria-expanded": !
|
|
48
|
-
"aria-label":
|
|
49
|
-
onClick:
|
|
50
|
-
}, [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
"aria-expanded": !P.collapsed,
|
|
56
|
+
"aria-label": R.value,
|
|
57
|
+
onClick: t[1] ||= (e) => F("toggle")
|
|
58
|
+
}, [
|
|
59
|
+
P.collapsed ? (h(), c(_(b), {
|
|
60
|
+
key: 0,
|
|
61
|
+
class: "size-4 shrink-0 rtl:rotate-180",
|
|
62
|
+
"aria-hidden": "true"
|
|
63
|
+
})) : (h(), c(_(r), {
|
|
64
|
+
key: 1,
|
|
65
|
+
name: "alfakit::tables.grouping.collapse-button",
|
|
66
|
+
fallback: _(y),
|
|
67
|
+
class: "size-4 shrink-0",
|
|
68
|
+
"aria-hidden": "true"
|
|
69
|
+
}, null, 8, ["fallback"])),
|
|
70
|
+
P.group.icon ? (h(), c(_(r), {
|
|
71
|
+
key: 2,
|
|
72
|
+
name: P.group.icon,
|
|
73
|
+
class: m(L.value),
|
|
74
|
+
"aria-hidden": "true"
|
|
75
|
+
}, null, 8, ["name", "class"])) : l("", !0),
|
|
76
|
+
d("span", C, [d("span", w, g(P.group.title), 1), P.group.description ? (h(), u("span", T, g(P.group.description), 1)) : l("", !0)])
|
|
77
|
+
], 8, S)) : P.group.icon ? (h(), u("span", E, [f(_(r), {
|
|
78
|
+
name: P.group.icon,
|
|
79
|
+
class: m(L.value),
|
|
59
80
|
"aria-hidden": "true"
|
|
60
|
-
}, null, 8, ["
|
|
81
|
+
}, null, 8, ["name", "class"]), d("span", D, [d("span", O, g(P.group.title), 1), P.group.description ? (h(), u("span", k, g(P.group.description), 1)) : l("", !0)])])) : (h(), u("span", A, [d("span", j, g(P.group.title), 1), P.group.description ? (h(), u("span", M, g(P.group.description), 1)) : l("", !0)]))])]),
|
|
61
82
|
_: 1
|
|
62
83
|
}, 8, ["colspan"])]),
|
|
63
84
|
_: 1
|
|
@@ -65,6 +86,6 @@ var v = { class: "flex items-center gap-3" }, y = ["aria-expanded", "aria-label"
|
|
|
65
86
|
}
|
|
66
87
|
});
|
|
67
88
|
//#endregion
|
|
68
|
-
export {
|
|
89
|
+
export { N as default };
|
|
69
90
|
|
|
70
91
|
//# sourceMappingURL=GroupHeaderRow.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupHeaderRow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","TableRow","_withCtx","_createVNode","TableCell","_createElementVNode","Checkbox","_unref","_createCommentVNode","_createElementBlock","Icon","_toDisplayString","Icon_default","Checkbox_default","TableCell_default","TableRow_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","t","useT","
|
|
1
|
+
{"version":3,"file":"GroupHeaderRow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","TableRow","_withCtx","_createVNode","TableCell","_createElementVNode","Checkbox","_unref","_createCommentVNode","_createElementBlock","Icon","_normalizeClass","_toDisplayString","Icon_default","Checkbox_default","TableCell_default","TableRow_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","GroupHeaderRow_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","t","useT","groupIconClass","computed","colorClass","textColorClasses","toggleLabel","openBlock","createBlock","withCtx","createVNode","createElementVNode","unref","_cache","$event","createCommentVNode","createElementBlock","ChevronRightIcon","ChevronDownIcon","normalizeClass","toDisplayString"],"sources":["../../../src/components/table/GroupHeaderRow.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableRecordGroupSchema } from '@alfakit/core'\nimport { ChevronDownIcon, ChevronRightIcon } from '@lucide/vue'\nimport { computed } from 'vue'\nimport { useT } from '../../context'\nimport { colorClass, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport Checkbox from '../ui/Checkbox.vue'\nimport TableCell from '../ui/TableCell.vue'\nimport TableRow from '../ui/TableRow.vue'\n\n/** A group heading row (`data-slot=\"table-group\"`), with a collapse toggle when collapsible. */\nconst props = defineProps<{\n group: TableRecordGroupSchema\n collapsed: boolean\n collapsible: boolean\n colSpan: number\n /** `selectGroupsOnly()`: a checkbox selecting the group's records on the page. */\n selection?: { checked: boolean | 'indeterminate'; onChange: (checked: boolean) => void }\n}>()\nconst emit = defineEmits<{ toggle: [] }>()\nconst t = useT()\n\n// An enum group shows its `HasIcon` icon, in its `HasColor` colour, before the title.\nconst groupIconClass = computed(\n () => `size-4 shrink-0 ${colorClass(textColorClasses, props.group.color, 'gray')}`,\n)\n\nconst toggleLabel = computed(\n () =>\n `${props.collapsed ? t('table_grouping.expand', {}, 'Expand group') : t('table_grouping.collapse', {}, 'Collapse group')}: ${props.group.title}`,\n)\n</script>\n\n<template>\n <TableRow data-slot=\"table-group\" class=\"bg-muted/50 hover:bg-muted/50\">\n <TableCell :colspan=\"props.colSpan\" class=\"py-2\">\n <span class=\"flex items-center gap-3\">\n <Checkbox\n v-if=\"props.selection\"\n :model-value=\"props.selection.checked\"\n :aria-label=\"t('table.select_group', { group: props.group.title }, 'Select group :group')\"\n @update:model-value=\"props.selection.onChange($event === true)\"\n />\n <button\n v-if=\"props.collapsible\"\n type=\"button\"\n class=\"focus-visible:ring-ring/50 flex items-center gap-2 rounded-sm text-start outline-none focus-visible:ring-[3px]\"\n :aria-expanded=\"!props.collapsed\"\n :aria-label=\"toggleLabel\"\n @click=\"emit('toggle')\"\n >\n <ChevronRightIcon\n v-if=\"props.collapsed\"\n class=\"size-4 shrink-0 rtl:rotate-180\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.grouping.collapse-button\"\n :fallback=\"ChevronDownIcon\"\n class=\"size-4 shrink-0\"\n aria-hidden=\"true\"\n />\n <Icon\n v-if=\"props.group.icon\"\n :name=\"props.group.icon\"\n :class=\"groupIconClass\"\n aria-hidden=\"true\"\n />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </button>\n <span\n v-else-if=\"props.group.icon\"\n data-slot=\"table-group-title\"\n class=\"flex items-center gap-2\"\n >\n <Icon :name=\"props.group.icon\" :class=\"groupIconClass\" aria-hidden=\"true\" />\n <span class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span\n v-if=\"props.group.description\"\n class=\"text-muted-foreground text-xs font-normal\"\n >{{ props.group.description }}</span\n >\n </span>\n </span>\n <span v-else class=\"flex flex-col items-start\">\n <span class=\"font-medium\">{{ props.group.title }}</span>\n <span v-if=\"props.group.description\" class=\"text-muted-foreground text-xs font-normal\">{{\n props.group.description\n }}</span>\n </span>\n </span>\n </TableCell>\n </TableRow>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectCell.js","names":["_sfc_main","SelectCell_vue_vue_type_script_setup_true_lang_default","SelectCell_default"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"SelectCell.js","names":["_sfc_main","SelectCell_vue_vue_type_script_setup_true_lang_default","SelectCell_default"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref, useId } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst errorId = useId()\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :aria-describedby=\"error ? errorId : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" :id=\"errorId\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectCell.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/SelectCell.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SelectCell.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/SelectCell.vue"],"names":[],"mappings":"AA8DA,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;;AAkG7D,wBAMG"}
|
|
@@ -1,45 +1,51 @@
|
|
|
1
1
|
import { cn as e } from "../../lib/utils.js";
|
|
2
2
|
import { useCellUpdate as t } from "./cell-update.js";
|
|
3
3
|
import { isOptionGroup as n } from "@alfakit/core";
|
|
4
|
-
import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, normalizeClass as l, openBlock as u, ref as d, renderList as f, toDisplayString as p, unref as m,
|
|
4
|
+
import { Fragment as r, computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, defineComponent as c, normalizeClass as l, openBlock as u, ref as d, renderList as f, toDisplayString as p, unref as m, useId as h, withModifiers as g } from "vue";
|
|
5
5
|
//#region src/components/table/SelectCell.vue?vue&type=script&setup=true&lang.ts
|
|
6
|
-
var
|
|
6
|
+
var _ = [
|
|
7
7
|
"value",
|
|
8
8
|
"disabled",
|
|
9
|
-
"aria-
|
|
10
|
-
|
|
9
|
+
"aria-label",
|
|
10
|
+
"aria-invalid",
|
|
11
|
+
"aria-describedby"
|
|
12
|
+
], v = {
|
|
11
13
|
key: 0,
|
|
12
14
|
value: ""
|
|
13
|
-
},
|
|
14
|
-
key: 0,
|
|
15
|
-
class: "text-destructive block text-xs"
|
|
16
|
-
}, b = /*@__PURE__*/ c({
|
|
15
|
+
}, y = ["value", "disabled"], b = ["id"], x = /*@__PURE__*/ c({
|
|
17
16
|
__name: "SelectCell",
|
|
18
17
|
props: {
|
|
19
18
|
column: {},
|
|
20
19
|
cell: {},
|
|
21
20
|
recordKey: {},
|
|
22
21
|
token: {},
|
|
23
|
-
component: {}
|
|
22
|
+
component: {},
|
|
23
|
+
fromRegistry: { type: Boolean }
|
|
24
24
|
},
|
|
25
25
|
setup(c) {
|
|
26
|
-
let
|
|
27
|
-
|
|
26
|
+
let x = c, S = i(() => x.column), { update: C, saving: w, error: T } = t(x), E = h(), D = d(x.cell.state === null || x.cell.state === void 0 ? "" : String(x.cell.state)), O = i(() => S.value.options.flatMap((e) => n(e) ? e.options : [e]).filter((e) => !(S.value.ignoreRecord && e.value === String(x.recordKey)))), k = (e) => {
|
|
27
|
+
D.value = e.target.value, C(D.value === "" ? null : D.value);
|
|
28
28
|
};
|
|
29
|
-
return (t, n) => (u(), o("span", { onClick: n[0] ||=
|
|
30
|
-
value:
|
|
31
|
-
disabled: !!
|
|
32
|
-
"aria-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
return (t, n) => (u(), o("span", { onClick: n[0] ||= g(() => {}, ["stop"]) }, [s("select", {
|
|
30
|
+
value: D.value,
|
|
31
|
+
disabled: !!x.cell.disabled || m(w),
|
|
32
|
+
"aria-label": x.column.label || x.column.name,
|
|
33
|
+
"aria-invalid": m(T) ? !0 : void 0,
|
|
34
|
+
"aria-describedby": m(T) ? m(E) : void 0,
|
|
35
|
+
class: l(m(e)("border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]", m(T) && "border-destructive")),
|
|
36
|
+
onChange: k
|
|
37
|
+
}, [S.value.selectablePlaceholder ? (u(), o("option", v, p(S.value.placeholder ?? ""), 1)) : a("", !0), (u(!0), o(r, null, f(O.value, (e) => (u(), o("option", {
|
|
36
38
|
key: e.value,
|
|
37
39
|
value: e.value,
|
|
38
40
|
disabled: e.disabled
|
|
39
|
-
}, p(e.label), 9,
|
|
41
|
+
}, p(e.label), 9, y))), 128))], 42, _), m(T) ? (u(), o("span", {
|
|
42
|
+
key: 0,
|
|
43
|
+
id: m(E),
|
|
44
|
+
class: "text-destructive block text-xs"
|
|
45
|
+
}, p(m(T)), 9, b)) : a("", !0)]));
|
|
40
46
|
}
|
|
41
47
|
});
|
|
42
48
|
//#endregion
|
|
43
|
-
export {
|
|
49
|
+
export { x as default };
|
|
44
50
|
|
|
45
51
|
//# sourceMappingURL=SelectCell.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_unref","_normalizeClass","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","SelectCell_vue_vue_type_script_setup_true_lang_default","props","__props","schema","computed","useCellUpdate","value","ref","options","isOptionGroup","option","onChange","event","update","openBlock","createElementBlock","_cache","withModifiers","createElementVNode","unref","saving","error","normalizeClass","cn","toDisplayString","createCommentVNode","Fragment","renderList"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-invalid=\"error ? true : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAOA,IAAMe,IAAQC,GACRC,IAASC,QAAeH,EAAM,MAA4B,GAC1D,EAAE,WAAQ,WAAQ,aAAUI,EAAcJ,CAAK,GAC/CK,IAAQC,
|
|
1
|
+
{"version":3,"file":"SelectCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createElementVNode","_unref","_normalizeClass","_toDisplayString","_createCommentVNode","_Fragment","_renderList","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","SelectCell_vue_vue_type_script_setup_true_lang_default","props","__props","schema","computed","useCellUpdate","errorId","useId","value","ref","options","isOptionGroup","option","onChange","event","update","openBlock","createElementBlock","_cache","withModifiers","createElementVNode","unref","saving","error","normalizeClass","cn","toDisplayString","createCommentVNode","Fragment","renderList"],"sources":["../../../src/components/table/SelectCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { SelectColumnSchema } from '@alfakit/core'\nimport { isOptionGroup } from '@alfakit/core'\nimport { computed, ref, useId } from 'vue'\nimport { cn } from '../../lib/utils'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst errorId = useId()\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\n// `optionsRelationship(ignoreRecord: true)`: the record itself is not an option.\nconst options = computed(() =>\n schema.value.options\n .flatMap((option) => (isOptionGroup(option) ? option.options : [option]))\n .filter((option) => !(schema.value.ignoreRecord && option.value === String(props.recordKey))),\n)\n\nconst onChange = (event: Event) => {\n value.value = (event.target as HTMLSelectElement).value\n void update(value.value === '' ? null : value.value)\n}\n</script>\n\n<template>\n <span @click.stop>\n <select\n :value=\"value\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :aria-describedby=\"error ? errorId : undefined\"\n :class=\"\n cn(\n 'border-input dark:bg-input/30 focus-visible:ring-ring/50 h-8 min-w-32 rounded-md border bg-transparent px-2 text-sm shadow-xs outline-none focus-visible:ring-[3px]',\n error && 'border-destructive',\n )\n \"\n @change=\"onChange\"\n >\n <option v-if=\"schema.selectablePlaceholder\" value=\"\">{{ schema.placeholder ?? '' }}</option>\n <option\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </option>\n </select>\n <span v-if=\"error\" :id=\"errorId\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAOA,IAAMe,IAAQC,GACRC,IAASC,QAAeH,EAAM,MAA4B,GAC1D,EAAE,WAAQ,WAAQ,aAAUI,EAAcJ,CAAK,GAC/CK,IAAUC,EAAM,GAChBC,IAAQC,EACZR,EAAM,KAAK,UAAU,QAAQA,EAAM,KAAK,UAAU,KAAA,IAAY,KAAK,OAAOA,EAAM,KAAK,KAAK,CAC5F,GAEMS,IAAUN,QACdD,EAAO,MAAM,QACV,SAAS,MAAYQ,EAAcC,CAAM,IAAIA,EAAO,UAAU,CAACA,CAAM,CAAE,CAAA,CACvE,QAAQ,MAAW,EAAET,EAAO,MAAM,gBAAgBS,EAAO,UAAU,OAAOX,EAAM,SAAS,EAAE,CAChG,GAEMY,KAAY,MAAiB;GAEjC,AADA,EAAM,QAASC,EAAM,OAA6B,OAClDC,EAAYP,EAAM,UAAU,KAAK,OAAOA,EAAM,KAAK;EACrD;oBAIEtB,EAAA,GAAAC,EA0BO,QAAA,EA1BA,SAAK,AAAA+B,EAAA,OAAA9B,QAAN,CAAA,GAAW,CAAA,MAAA,CAAA,EAAA,GAAA,CACfC,EAuBS,UAAA;GAtBN,OAAOmB,EAAA;GACP,UAAU,EAAQP,EAAM,KAAK,YAAaX,EAAAgC,CAAA;GAC1C,cAAYrB,EAAM,OAAO,SAASA,EAAM,OAAO;GAC/C,gBAAcX,EAAAiC,CAAA,IAAK,KAAU,KAAA;GAC7B,oBAAkBjC,EAAAiC,CAAA,IAAQjC,EAAAgB,CAAA,IAAU,KAAA;GACpC,OAAKf,EAAWD,EAAAmC,CAAA,CAAE,CAAA,uKAA6LnC,EAAAiC,CAAA,KAAK,oBAAA,CAAA;GAM5M;EAEK,GAAA,CAAApB,EAAA,MAAO,yBAArBjB,EAAA,GAAAC,EAA4F,UAA5FU,GAA4FL,EAApCW,EAAA,MAAO,eAAW,EAAA,GAAA,CAAA,KAAAwB,EAAA,IAAA,EAAA,IAC1EzC,EAAA,EAAA,GAAAC,EAOSO,GAAA,MAAAC,EANUe,EAAA,QAAV,OADTxB,EAAA,GAAAC,EAOS,UAAA;GALN,KAAKyB,EAAO;GACZ,OAAOA,EAAO;GACd,UAAUA,EAAO;EAEf,GAAApB,EAAAoB,EAAO,KAAK,GAAA,GAAAd,CAAA,EAGPR,GAAAA,GAAAA,EAAAA,GAAAA,IAAAA,CAAAA,GAAAA,EAAAiC,CAAA,KAAZrC,EAAA,GAAAC,EAA0F,QAAA;;GAAtE,IAAIG,EAAAgB,CAAA;GAAS,OAAM;EAAoC,GAAAd,EAAAF,EAAAiC,CAAA,CAAK,GAAA,GAAAxB,CAAA,KAAA4B,EAAA,IAAA,EAAA,CAAA,CAAA"}
|
|
@@ -32,7 +32,8 @@ var de = ["innerHTML"], fe = {
|
|
|
32
32
|
cell: {},
|
|
33
33
|
recordKey: {},
|
|
34
34
|
token: {},
|
|
35
|
-
component: {}
|
|
35
|
+
component: {},
|
|
36
|
+
fromRegistry: { type: Boolean }
|
|
36
37
|
},
|
|
37
38
|
setup(x) {
|
|
38
39
|
let j = x, M = t(), N = e(), P = m(() => j.column), { update: F, saving: I, error: L } = o(j), R = w(j.cell.state === null || j.cell.state === void 0 ? "" : String(j.cell.state)), z = w(j.cell.optionLabel), B = w(!1), V = w(""), H = w(!1), U = w([]), W = m(() => !!P.value.optionsSearchPath), G = m(() => P.value.options.flatMap((e) => u(e) ? e.options : [e])), K = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectComboboxCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createVNode","Popover","_withCtx","PopoverTrigger","Button","_unref","_normalizeClass","_Fragment","_toDisplayString","_createBlock","Spinner","PopoverContent","Command","CommandInput","_createCommentVNode","CommandList","CommandEmpty","_createTextVNode","CommandGroup","CommandItem","_createElementVNode","_renderList","Button_default","Spinner_default","Popover_default","PopoverContent_default","PopoverTrigger_default","Command_default","CommandEmpty_default","CommandGroup_default","CommandInput_default","CommandItem_default","CommandList_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","SelectComboboxCell_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","panel","usePanel","schema","computed","useCellUpdate","value","ref","label","open","search","loading","remote","isRemote","staticOptions","isOptionGroup","option","request","isOpen","term","url","timer","current","searchTableColumnOptions","results","optionLabelClass","options","filterSelectColumnOptions","emptyMessage","selectColumnEmptyMessage","currentLabel","showsClear","onOpenChange","next","choose","nextLabel","update","openBlock","createElementBlock","_cache","withModifiers","createVNode","withCtx","unref","error","saving","normalizeClass","cn","Fragment","toDisplayString","createBlock","ChevronsUpDownIcon","$event","createCommentVNode","createTextVNode","createElementVNode","renderList","CheckIcon"],"sources":["../../../src/components/table/SelectComboboxCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Option, SelectColumnSchema } from '@alfakit/core'\nimport {\n filterSelectColumnOptions,\n isOptionGroup,\n searchTableColumnOptions,\n selectColumnEmptyMessage,\n} from '@alfakit/core'\nimport { CheckIcon, ChevronsUpDownIcon } from '@lucide/vue'\nimport { computed, ref, watch } from 'vue'\nimport { usePanel, useT } from '../../context'\nimport { cn } from '../../lib/utils'\nimport Button from '../ui/Button.vue'\nimport Command from '../ui/Command.vue'\nimport CommandEmpty from '../ui/CommandEmpty.vue'\nimport CommandGroup from '../ui/CommandGroup.vue'\nimport CommandInput from '../ui/CommandInput.vue'\nimport CommandItem from '../ui/CommandItem.vue'\nimport CommandList from '../ui/CommandList.vue'\nimport Popover from '../ui/Popover.vue'\nimport PopoverContent from '../ui/PopoverContent.vue'\nimport PopoverTrigger from '../ui/PopoverTrigger.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\n/**\n * `SelectColumn::native(false)`: a combobox, searchable with `searchableOptions()`. Options\n * come with the table, or from the server (`optionsSearchPath`) as the user types.\n */\nconst props = defineProps<CellProps>()\nconst t = useT()\nconst panel = usePanel()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\nconst label = ref<string | undefined>(props.cell.optionLabel)\nconst open = ref(false)\nconst search = ref('')\nconst loading = ref(false)\nconst remote = ref<Option[]>([])\nconst isRemote = computed(() => Boolean(schema.value.optionsSearchPath))\nconst staticOptions = computed(() =>\n schema.value.options.flatMap((option) => (isOptionGroup(option) ? option.options : [option])),\n)\nlet request = 0\n\nwatch([open, search], ([isOpen, term], _old, onCleanup) => {\n const url = panel.value.endpoints.schemaOptions\n\n if (!isOpen || !isRemote.value || !url) return\n\n const timer = setTimeout(() => {\n const current = ++request\n loading.value = true\n\n void searchTableColumnOptions(url, props.token, props.component, schema.value, term)\n .then((results) => {\n if (current === request) remote.value = results\n })\n .catch(() => {\n if (current === request) remote.value = []\n })\n .finally(() => {\n if (current === request) loading.value = false\n })\n }, schema.value.optionsSearchDebounce ?? 300)\n\n onCleanup(() => clearTimeout(timer))\n})\n\n// Long labels wrap unless `wrapOptionLabels(false)` truncates them.\nconst optionLabelClass = computed(() =>\n schema.value.wrapOptionLabels === false\n ? 'min-w-0 truncate'\n : 'min-w-0 break-words whitespace-normal',\n)\n\nconst options = computed(() =>\n filterSelectColumnOptions(\n isRemote.value ? remote.value : staticOptions.value,\n schema.value,\n isRemote.value ? '' : search.value,\n props.recordKey,\n ),\n)\nconst emptyMessage = computed(() =>\n selectColumnEmptyMessage(schema.value, {\n loading: loading.value,\n search: search.value,\n optionCount: options.value.length,\n }),\n)\nconst currentLabel = computed(\n () =>\n staticOptions.value.find((option) => option.value === value.value)?.label ??\n remote.value.find((option) => option.value === value.value)?.label ??\n label.value,\n)\nconst showsClear = computed(() => schema.value.selectablePlaceholder && value.value !== '')\n\nconst onOpenChange = (next: boolean) => {\n open.value = next\n\n if (!next) search.value = ''\n}\n\nconst choose = (next: string, nextLabel?: string) => {\n value.value = next\n label.value = nextLabel\n onOpenChange(false)\n void update(next === '' ? null : next)\n}\n</script>\n\n<template>\n <span @click.stop>\n <Popover :open=\"open\" @update:open=\"onOpenChange\">\n <PopoverTrigger as-child>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n role=\"combobox\"\n :aria-expanded=\"open\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :class=\"cn('h-8 min-w-32 justify-between font-normal', error && 'border-destructive')\"\n >\n <template v-if=\"value !== '' && currentLabel !== undefined\">\n <!-- The server sanitises HTML labels (`Support\\Html::sanitize`). -->\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"schema.allowOptionsHtml\" class=\"min-w-0 truncate\" v-html=\"currentLabel\" />\n <span v-else class=\"min-w-0 truncate\">{{ currentLabel }}</span>\n </template>\n <span v-else class=\"text-muted-foreground\">{{\n schema.placeholder ??\n (value !== '' ? value : t('select_option', {}, 'Select an option'))\n }}</span>\n <Spinner v-if=\"loading\" class=\"opacity-50\" />\n <ChevronsUpDownIcon v-else class=\"size-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent class=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput\n v-if=\"schema.searchableOptions\"\n :model-value=\"search\"\n :placeholder=\"\n schema.searchPrompt ?? t('form.search_placeholder', {}, 'Type to search…')\n \"\n @update:model-value=\"search = $event\"\n />\n <CommandList>\n <CommandEmpty\n v-if=\"options.length === 0 && !showsClear\"\n data-slot=\"select-column-message\"\n >{{\n emptyMessage.message ?? t(emptyMessage.key, {}, emptyMessage.fallback)\n }}</CommandEmpty\n >\n <CommandGroup>\n <CommandItem v-if=\"showsClear\" value=\"\" @select=\"choose('')\">\n <span class=\"text-muted-foreground\">{{\n schema.placeholder ?? t('clear', {}, 'Clear')\n }}</span>\n </CommandItem>\n <CommandItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n @select=\"choose(option.value, option.label)\"\n >\n <CheckIcon\n :class=\"cn('size-4', option.value === value ? 'opacity-100' : 'opacity-0')\"\n />\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span\n v-if=\"schema.allowOptionsHtml\"\n :class=\"optionLabelClass\"\n v-html=\"option.label\"\n />\n <span v-else :class=\"optionLabelClass\">{{ option.label }}</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectComboboxCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_withModifiers","_createVNode","Popover","_withCtx","PopoverTrigger","Button","_unref","_normalizeClass","_Fragment","_toDisplayString","_createBlock","Spinner","PopoverContent","Command","CommandInput","_createCommentVNode","CommandList","CommandEmpty","_createTextVNode","CommandGroup","CommandItem","_createElementVNode","_renderList","Button_default","Spinner_default","Popover_default","PopoverContent_default","PopoverTrigger_default","Command_default","CommandEmpty_default","CommandGroup_default","CommandInput_default","CommandItem_default","CommandList_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","SelectComboboxCell_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","panel","usePanel","schema","computed","useCellUpdate","value","ref","label","open","search","loading","remote","isRemote","staticOptions","isOptionGroup","option","request","isOpen","term","url","timer","current","searchTableColumnOptions","results","optionLabelClass","options","filterSelectColumnOptions","emptyMessage","selectColumnEmptyMessage","currentLabel","showsClear","onOpenChange","next","choose","nextLabel","update","openBlock","createElementBlock","_cache","withModifiers","createVNode","withCtx","unref","error","saving","normalizeClass","cn","Fragment","toDisplayString","createBlock","ChevronsUpDownIcon","$event","createCommentVNode","createTextVNode","createElementVNode","renderList","CheckIcon"],"sources":["../../../src/components/table/SelectComboboxCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Option, SelectColumnSchema } from '@alfakit/core'\nimport {\n filterSelectColumnOptions,\n isOptionGroup,\n searchTableColumnOptions,\n selectColumnEmptyMessage,\n} from '@alfakit/core'\nimport { CheckIcon, ChevronsUpDownIcon } from '@lucide/vue'\nimport { computed, ref, watch } from 'vue'\nimport { usePanel, useT } from '../../context'\nimport { cn } from '../../lib/utils'\nimport Button from '../ui/Button.vue'\nimport Command from '../ui/Command.vue'\nimport CommandEmpty from '../ui/CommandEmpty.vue'\nimport CommandGroup from '../ui/CommandGroup.vue'\nimport CommandInput from '../ui/CommandInput.vue'\nimport CommandItem from '../ui/CommandItem.vue'\nimport CommandList from '../ui/CommandList.vue'\nimport Popover from '../ui/Popover.vue'\nimport PopoverContent from '../ui/PopoverContent.vue'\nimport PopoverTrigger from '../ui/PopoverTrigger.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\n/**\n * `SelectColumn::native(false)`: a combobox, searchable with `searchableOptions()`. Options\n * come with the table, or from the server (`optionsSearchPath`) as the user types.\n */\nconst props = defineProps<CellProps>()\nconst t = useT()\nconst panel = usePanel()\nconst schema = computed(() => props.column as SelectColumnSchema)\nconst { update, saving, error } = useCellUpdate(props)\nconst value = ref(\n props.cell.state === null || props.cell.state === undefined ? '' : String(props.cell.state),\n)\nconst label = ref<string | undefined>(props.cell.optionLabel)\nconst open = ref(false)\nconst search = ref('')\nconst loading = ref(false)\nconst remote = ref<Option[]>([])\nconst isRemote = computed(() => Boolean(schema.value.optionsSearchPath))\nconst staticOptions = computed(() =>\n schema.value.options.flatMap((option) => (isOptionGroup(option) ? option.options : [option])),\n)\nlet request = 0\n\nwatch([open, search], ([isOpen, term], _old, onCleanup) => {\n const url = panel.value.endpoints.schemaOptions\n\n if (!isOpen || !isRemote.value || !url) return\n\n const timer = setTimeout(() => {\n const current = ++request\n loading.value = true\n\n void searchTableColumnOptions(url, props.token, props.component, schema.value, term)\n .then((results) => {\n if (current === request) remote.value = results\n })\n .catch(() => {\n if (current === request) remote.value = []\n })\n .finally(() => {\n if (current === request) loading.value = false\n })\n }, schema.value.optionsSearchDebounce ?? 300)\n\n onCleanup(() => clearTimeout(timer))\n})\n\n// Long labels wrap unless `wrapOptionLabels(false)` truncates them.\nconst optionLabelClass = computed(() =>\n schema.value.wrapOptionLabels === false\n ? 'min-w-0 truncate'\n : 'min-w-0 break-words whitespace-normal',\n)\n\nconst options = computed(() =>\n filterSelectColumnOptions(\n isRemote.value ? remote.value : staticOptions.value,\n schema.value,\n isRemote.value ? '' : search.value,\n props.recordKey,\n ),\n)\nconst emptyMessage = computed(() =>\n selectColumnEmptyMessage(schema.value, {\n loading: loading.value,\n search: search.value,\n optionCount: options.value.length,\n }),\n)\nconst currentLabel = computed(\n () =>\n staticOptions.value.find((option) => option.value === value.value)?.label ??\n remote.value.find((option) => option.value === value.value)?.label ??\n label.value,\n)\nconst showsClear = computed(() => schema.value.selectablePlaceholder && value.value !== '')\n\nconst onOpenChange = (next: boolean) => {\n open.value = next\n\n if (!next) search.value = ''\n}\n\nconst choose = (next: string, nextLabel?: string) => {\n value.value = next\n label.value = nextLabel\n onOpenChange(false)\n void update(next === '' ? null : next)\n}\n</script>\n\n<template>\n <span @click.stop>\n <Popover :open=\"open\" @update:open=\"onOpenChange\">\n <PopoverTrigger as-child>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n role=\"combobox\"\n :aria-expanded=\"open\"\n :aria-label=\"props.column.label || props.column.name\"\n :aria-invalid=\"error ? true : undefined\"\n :disabled=\"Boolean(props.cell.disabled) || saving\"\n :class=\"cn('h-8 min-w-32 justify-between font-normal', error && 'border-destructive')\"\n >\n <template v-if=\"value !== '' && currentLabel !== undefined\">\n <!-- The server sanitises HTML labels (`Support\\Html::sanitize`). -->\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span v-if=\"schema.allowOptionsHtml\" class=\"min-w-0 truncate\" v-html=\"currentLabel\" />\n <span v-else class=\"min-w-0 truncate\">{{ currentLabel }}</span>\n </template>\n <span v-else class=\"text-muted-foreground\">{{\n schema.placeholder ??\n (value !== '' ? value : t('select_option', {}, 'Select an option'))\n }}</span>\n <Spinner v-if=\"loading\" class=\"opacity-50\" />\n <ChevronsUpDownIcon v-else class=\"size-4 shrink-0 opacity-50\" />\n </Button>\n </PopoverTrigger>\n <PopoverContent class=\"w-64 p-0\" align=\"start\">\n <Command>\n <CommandInput\n v-if=\"schema.searchableOptions\"\n :model-value=\"search\"\n :placeholder=\"\n schema.searchPrompt ?? t('form.search_placeholder', {}, 'Type to search…')\n \"\n @update:model-value=\"search = $event\"\n />\n <CommandList>\n <CommandEmpty\n v-if=\"options.length === 0 && !showsClear\"\n data-slot=\"select-column-message\"\n >{{\n emptyMessage.message ?? t(emptyMessage.key, {}, emptyMessage.fallback)\n }}</CommandEmpty\n >\n <CommandGroup>\n <CommandItem v-if=\"showsClear\" value=\"\" @select=\"choose('')\">\n <span class=\"text-muted-foreground\">{{\n schema.placeholder ?? t('clear', {}, 'Clear')\n }}</span>\n </CommandItem>\n <CommandItem\n v-for=\"option in options\"\n :key=\"option.value\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n @select=\"choose(option.value, option.label)\"\n >\n <CheckIcon\n :class=\"cn('size-4', option.value === value ? 'opacity-100' : 'opacity-0')\"\n />\n <!-- eslint-disable-next-line vue/no-v-html -->\n <span\n v-if=\"schema.allowOptionsHtml\"\n :class=\"optionLabelClass\"\n v-html=\"option.label\"\n />\n <span v-else :class=\"optionLabelClass\">{{ option.label }}</span>\n </CommandItem>\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n </Popover>\n <span v-if=\"error\" class=\"text-destructive block text-xs\">{{ error }}</span>\n </span>\n</template>\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCellContent.js","names":["_sfc_main","TableCellContent_vue_vue_type_script_setup_true_lang_default","TableCellContent_default"],"sources":["../../../src/components/table/TableCellContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColorColumnSchema, IconColumnSchema } from '@alfakit/core'\nimport {\n columnRegistryKey,\n remainingTextSizeClass,\n stackedImageStyle,\n usesDefaultImageStack,\n} from '@alfakit/core'\nimport { CheckIcon } from '@lucide/vue'\nimport { computed, ref } from 'vue'\nimport { useRegistry, useT } from '../../context'\nimport { colorClass, iconSizeClasses, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport FormattedText from '../entries/FormattedText.vue'\nimport BooleanCell from './BooleanCell.vue'\nimport type { CellProps } from './cell-update'\nimport SelectCell from './SelectCell.vue'\nimport SelectComboboxCell from './SelectComboboxCell.vue'\nimport TextInputCell from './TextInputCell.vue'\n\nconst props = defineProps<CellProps>()\nconst registry = useRegistry()\n// A component registered as `column:<type>` replaces the built-in cell renderer.\nconst custom = computed(()
|
|
1
|
+
{"version":3,"file":"TableCellContent.js","names":["_sfc_main","TableCellContent_vue_vue_type_script_setup_true_lang_default","TableCellContent_default"],"sources":["../../../src/components/table/TableCellContent.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColorColumnSchema, IconColumnSchema } from '@alfakit/core'\nimport {\n columnRegistryKey,\n remainingTextSizeClass,\n stackedImageStyle,\n usesDefaultImageStack,\n} from '@alfakit/core'\nimport { CheckIcon } from '@lucide/vue'\nimport { computed, ref } from 'vue'\nimport { useRegistry, useT } from '../../context'\nimport { colorClass, iconSizeClasses, textColorClasses } from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport FormattedText from '../entries/FormattedText.vue'\nimport BooleanCell from './BooleanCell.vue'\nimport type { CellProps } from './cell-update'\nimport SelectCell from './SelectCell.vue'\nimport SelectComboboxCell from './SelectComboboxCell.vue'\nimport TextInputCell from './TextInputCell.vue'\n\nconst props = defineProps<CellProps>()\nconst registry = useRegistry()\n// A component registered as `column:<type>` replaces the built-in cell renderer.\nconst custom = computed(() =>\n props.fromRegistry ? undefined : registry.resolve(columnRegistryKey(props.column)),\n)\nconst t = useT()\n// `ViewColumn`: the application component registered under the column's `view()` name.\nconst viewName = computed(() => (props.column as { component?: string }).component ?? '')\nconst view = computed(() =>\n props.column.type === 'ViewColumn' && viewName.value\n ? registry.resolve(viewName.value)\n : undefined,\n)\n\nconst imageSchema = computed(\n () =>\n props.column as {\n circular?: boolean\n square?: boolean\n size?: number | string\n height?: number | string\n width?: string\n stacked?: boolean\n limit?: number\n limitedRemainingText?: boolean\n limitedRemainingTextSize?: string\n wrap?: boolean\n ring?: number\n overlap?: number\n },\n)\nconst defaultImageStack = computed(() => usesDefaultImageStack(imageSchema.value))\nconst imageUrls = computed(() =>\n Array.isArray(props.cell.state) ? (props.cell.state as string[]) : [],\n)\nconst imageLimit = computed(() => imageSchema.value.limit ?? imageUrls.value.length)\nconst toCss = (value: number | string | undefined) =>\n typeof value === 'number' ? `${value}px` : value\nconst imageStyle = computed(() => {\n const size = imageSchema.value.size ?? 40\n\n return {\n height: toCss(imageSchema.value.height ?? size),\n width: toCss(\n imageSchema.value.width ??\n (imageSchema.value.square || imageSchema.value.circular ? size : undefined),\n ),\n }\n})\nconst colors = computed(() =>\n Array.isArray(props.cell.state)\n ? (props.cell.state as string[])\n : props.cell.state\n ? [String(props.cell.state)]\n : [],\n)\nconst colorSchema = computed(() => props.column as ColorColumnSchema)\nconst copiedColor = ref<string | null>(null)\nconst copyColor = (color: string) => {\n void navigator.clipboard?.writeText(color).then(() => {\n copiedColor.value = color\n setTimeout(() => {\n copiedColor.value = null\n }, colorSchema.value.copyMessageDuration ?? 1500)\n })\n}\nconst textSchema = computed(() => ({\n ...(props.column as object),\n color: props.cell.color,\n icon: props.cell.icon,\n iconPosition: props.cell.iconPosition,\n iconColor: props.cell.iconColor,\n itemColors: props.cell.itemColors,\n itemIcons: props.cell.itemIcons,\n itemUrls: props.cell.itemUrls,\n}))\n// `SelectColumn::native(false)` renders a combobox.\nconst isComboboxSelect = computed(\n () =>\n props.column.type === 'SelectColumn' && (props.column as { native?: boolean }).native === false,\n)\nconst descriptionPosition = computed(\n () =>\n (props.column as { descriptionPosition?: 'above' | 'below' }).descriptionPosition ?? 'below',\n)\n</script>\n\n<template>\n <component :is=\"custom\" v-if=\"custom\" v-bind=\"props\" :from-registry=\"true\" />\n <component\n :is=\"view\"\n v-else-if=\"view\"\n v-bind=\"{ ...(props.cell.props ?? {}), state: props.cell.state, ...props }\"\n />\n <span v-else-if=\"props.column.type === 'ViewColumn'\" class=\"text-destructive text-xs\">{{\n t(\n 'component_not_registered',\n { component: viewName },\n `Component ${viewName} is not registered.`,\n )\n }}</span>\n <template v-else-if=\"props.column.type === 'IconColumn'\">\n <!-- A list state: one icon per item (`wrap()` lets them wrap). -->\n <div\n v-if=\"props.cell.icons\"\n data-slot=\"icon-column-icons\"\n :class=\"\n cn(\n 'flex items-center gap-1.5',\n (props.column as IconColumnSchema).wrap ? 'flex-wrap' : 'flex-nowrap',\n )\n \"\n >\n <span v-if=\"props.cell.icons.length === 0\" class=\"text-muted-foreground\">—</span>\n <Icon\n v-for=\"(item, index) in props.cell.icons\"\n :key=\"index\"\n :name=\"item.icon\"\n :class=\"\n cn(\n colorClass(iconSizeClasses, props.cell.size, 'md'),\n item.color && textColorClasses[item.color],\n )\n \"\n />\n </div>\n <Icon\n v-else-if=\"props.cell.icon\"\n :name=\"props.cell.icon\"\n :class=\"\n cn(\n colorClass(iconSizeClasses, props.cell.size, 'md'),\n props.cell.color && textColorClasses[props.cell.color],\n )\n \"\n />\n <span v-else class=\"text-muted-foreground\">—</span>\n </template>\n <template v-else-if=\"props.column.type === 'ImageColumn'\">\n <span v-if=\"imageUrls.length === 0\" class=\"text-muted-foreground\">—</span>\n <div\n v-else\n :class=\"\n cn(\n 'flex items-center',\n imageSchema.wrap && 'flex-wrap',\n imageSchema.stacked ? defaultImageStack && '-space-x-2' : 'gap-1.5',\n imageSchema.wrap && imageSchema.stacked && 'gap-y-1.5',\n )\n \"\n >\n <img\n v-for=\"(url, index) in imageUrls.slice(0, imageLimit)\"\n :key=\"index\"\n :src=\"url\"\n :alt=\"props.cell.alt ?? ''\"\n :style=\"[imageStyle, stackedImageStyle(index, imageSchema)]\"\n :class=\"\n cn(\n 'object-cover',\n imageSchema.circular ? 'rounded-full' : 'rounded-md',\n imageSchema.stacked && defaultImageStack && 'ring-background ring-2',\n )\n \"\n v-bind=\"props.cell.extraImgAttributes\"\n />\n <span\n v-if=\"imageSchema.limitedRemainingText && imageUrls.length > imageLimit\"\n data-slot=\"image-remaining\"\n :class=\"\n cn(\n 'text-muted-foreground ms-1',\n remainingTextSizeClass(imageSchema.limitedRemainingTextSize),\n )\n \"\n >+{{ imageUrls.length - imageLimit }}</span\n >\n </div>\n </template>\n <template v-else-if=\"props.column.type === 'ColorColumn'\">\n <span v-if=\"colors.length === 0\" class=\"text-muted-foreground\">—</span>\n <div\n v-else\n :class=\"cn('flex items-center gap-1.5', colorSchema.wrap ? 'flex-wrap' : 'flex-nowrap')\"\n >\n <template v-for=\"color in colors\" :key=\"color\">\n <!-- The cell may sit inside a link or a clickable row. -->\n <button\n v-if=\"colorSchema.copyable\"\n type=\"button\"\n data-slot=\"color-copy\"\n :title=\"color\"\n :aria-label=\"`${t('copy', {}, 'Copy')} ${color}`\"\n class=\"focus-visible:ring-ring/50 inline-flex rounded outline-none focus-visible:ring-[3px]\"\n @click.prevent.stop=\"copyColor(color)\"\n >\n <span\n class=\"inline-flex size-5 items-center justify-center rounded border shadow-xs\"\n :style=\"{ backgroundColor: color }\"\n >\n <CheckIcon\n v-if=\"copiedColor === color\"\n class=\"size-3 text-white mix-blend-difference\"\n />\n </span>\n </button>\n <span\n v-else\n :title=\"color\"\n class=\"size-5 rounded border shadow-xs\"\n :style=\"{ backgroundColor: color }\"\n />\n </template>\n <span\n v-if=\"colorSchema.copyable && copiedColor\"\n role=\"status\"\n :class=\"cn('text-xs', !colorSchema.copyMessage && 'sr-only')\"\n >{{ colorSchema.copyMessage ?? t('copied', {}, 'Copied') }}</span\n >\n </div>\n </template>\n <BooleanCell\n v-else-if=\"props.column.type === 'ToggleColumn' || props.column.type === 'CheckboxColumn'\"\n v-bind=\"props\"\n />\n <SelectComboboxCell v-else-if=\"isComboboxSelect\" v-bind=\"props\" />\n <SelectCell v-else-if=\"props.column.type === 'SelectColumn'\" v-bind=\"props\" />\n <TextInputCell v-else-if=\"props.column.type === 'TextInputColumn'\" v-bind=\"props\" />\n <div v-else class=\"flex flex-col gap-0.5\">\n <span\n v-if=\"props.cell.description && descriptionPosition === 'above'\"\n class=\"text-muted-foreground block text-xs\"\n >{{ props.cell.description }}</span\n >\n <FormattedText :value=\"props.cell.state\" :schema=\"textSchema\" />\n <span\n v-if=\"props.cell.description && descriptionPosition === 'below'\"\n class=\"text-muted-foreground block text-xs\"\n >{{ props.cell.description }}</span\n >\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCellContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/TableCellContent.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TableCellContent.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/TableCellContent.vue"],"names":[],"mappings":"AAyRA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;;AA6d9C,wBAMG"}
|
|
@@ -46,10 +46,11 @@ var ae = {
|
|
|
46
46
|
cell: {},
|
|
47
47
|
recordKey: {},
|
|
48
48
|
token: {},
|
|
49
|
-
component: {}
|
|
49
|
+
component: {},
|
|
50
|
+
fromRegistry: { type: Boolean }
|
|
50
51
|
},
|
|
51
52
|
setup(b) {
|
|
52
|
-
let z = b, B = e(), V = g(() => B.resolve(d(z.column))), H = t(), U = g(() => z.column.component ?? ""), W = g(() => z.column.type === "ViewColumn" && U.value ? B.resolve(U.value) : void 0), G = g(() => z.column), K = g(() => m(G.value)), q = g(() => Array.isArray(z.cell.state) ? z.cell.state : []), J = g(() => G.value.limit ?? q.value.length), Y = (e) => typeof e == "number" ? `${e}px` : e, ce = g(() => {
|
|
53
|
+
let z = b, B = e(), V = g(() => z.fromRegistry ? void 0 : B.resolve(d(z.column))), H = t(), U = g(() => z.column.component ?? ""), W = g(() => z.column.type === "ViewColumn" && U.value ? B.resolve(U.value) : void 0), G = g(() => z.column), K = g(() => m(G.value)), q = g(() => Array.isArray(z.cell.state) ? z.cell.state : []), J = g(() => G.value.limit ?? q.value.length), Y = (e) => typeof e == "number" ? `${e}px` : e, ce = g(() => {
|
|
53
54
|
let e = G.value.size ?? 40;
|
|
54
55
|
return {
|
|
55
56
|
height: Y(G.value.height ?? e),
|
|
@@ -71,7 +72,7 @@ var ae = {
|
|
|
71
72
|
itemIcons: z.cell.itemIcons,
|
|
72
73
|
itemUrls: z.cell.itemUrls
|
|
73
74
|
})), de = g(() => z.column.type === "SelectColumn" && z.column.native === !1), $ = g(() => z.column.descriptionPosition ?? "below");
|
|
74
|
-
return (e, t) => V.value ? (T(), _(O(V.value),
|
|
75
|
+
return (e, t) => V.value ? (T(), _(O(V.value), x({ key: 0 }, z, { "from-registry": !0 }), null, 16)) : W.value ? (T(), _(O(W.value), C(x({ key: 1 }, {
|
|
75
76
|
...z.cell.props ?? {},
|
|
76
77
|
state: z.cell.state,
|
|
77
78
|
...z
|