@alfakit/vue 0.1.2 → 0.1.7
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/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 +17 -15
- 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/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/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/SliderField.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/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 +1 -1
- 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/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/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/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/TenantMenu.vue_vue_type_script_setup_true_lang.js +35 -35
- 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/SelectCell.vue_vue_type_script_setup_true_lang.js +2 -1
- 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.vue_vue_type_script_setup_true_lang.js +2 -1
- 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/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.css +7 -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/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/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 +6 -1
- package/package.json +2 -2
- package/src/AlfakitRoot.vue +9 -1
- package/src/components/actions/ActionGroupMenu.vue +13 -1
- package/src/components/actions/ActionModal.vue +9 -0
- 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/ImageEditorDialog.vue +7 -3
- package/src/components/fields/KeyValueField.vue +3 -2
- package/src/components/fields/ModalTablePicker.vue +7 -2
- package/src/components/fields/RepeaterField.vue +2 -3
- package/src/components/fields/RichEditorInput.vue +3 -0
- package/src/components/fields/item-actions.ts +31 -10
- package/src/components/form/FormBlock.vue +2 -1
- package/src/components/form/form-context.ts +2 -2
- package/src/components/kanban/KanbanBoard.vue +15 -3
- package/src/components/kanban/KanbanColumnHeader.vue +6 -4
- package/src/components/layout/SectionComponent.vue +10 -4
- package/src/components/panel/GlobalSearchPalette.vue +2 -0
- 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/TableCellContent.vue +4 -2
- package/src/components/table/TablePagination.vue +12 -7
- 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/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/StarterKitImpersonationBanner.vue +57 -0
- 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":"TenantMenu.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","DropdownMenu","_withCtx","_createVNode","DropdownMenuTrigger","_createElementBlock","Avatar","AvatarImage","_createCommentVNode","AvatarFallback","_createTextVNode","_toDisplayString","_unref","_createElementVNode","NavLabel","Icon","SidebarMenuButton","DropdownMenuContent","DropdownMenuLabel","_withDirectives","_withModifiers","_vModelText","_Fragment","_renderList","DropdownMenuItem","DropdownMenuSeparator","MenuItemEntry","MenuItemEntries","Icon_default","DropdownMenu_default","DropdownMenuContent_default","DropdownMenuItem_default","DropdownMenuSeparator_default","DropdownMenuTrigger_default","DropdownMenuLabel_default","SidebarMenuButton_default","NavLabel_default","Avatar_default","AvatarFallback_default","AvatarImage_default","MenuItemEntry_default","MenuItemEntries_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","TenantMenu_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","panel","usePanel","tenancy","computed","current","search","ref","hasSwitcher","tenants","filterTenants","openBlock","createBlock","withCtx","createVNode","createElementBlock","createCommentVNode","createTextVNode","toDisplayString","unref","initials","tenantNameText","createElementVNode","ChevronsUpDownIcon","SearchIcon","withDirectives","_cache","$event","withModifiers","vModelText","Fragment","renderList","tenant","router","CheckIcon","Link","SettingsIcon","PlusIcon"],"sources":["../../../src/components/panel/TenantMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { filterTenants, initials, tenantNameText } from '@alfakit/core'\nimport { Link, router } from '@inertiajs/vue3'\nimport { CheckIcon, ChevronsUpDownIcon, PlusIcon, SearchIcon, SettingsIcon } from '@lucide/vue'\nimport { computed, ref } from 'vue'\nimport { usePanel, useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Avatar from '../ui/Avatar.vue'\nimport AvatarFallback from '../ui/AvatarFallback.vue'\nimport AvatarImage from '../ui/AvatarImage.vue'\nimport DropdownMenu from '../ui/DropdownMenu.vue'\nimport DropdownMenuContent from '../ui/DropdownMenuContent.vue'\nimport DropdownMenuItem from '../ui/DropdownMenuItem.vue'\nimport DropdownMenuLabel from '../ui/DropdownMenuLabel.vue'\nimport DropdownMenuSeparator from '../ui/DropdownMenuSeparator.vue'\nimport DropdownMenuTrigger from '../ui/DropdownMenuTrigger.vue'\nimport SidebarMenuButton from '../ui/SidebarMenuButton.vue'\nimport MenuItemEntries from './MenuItemEntries.vue'\nimport MenuItemEntry from './MenuItemEntry.vue'\nimport NavLabel from './NavLabel.vue'\n\n/**\n * The tenant switcher: a sidebar header button, or a compact button in the top bar of the\n * `topbar` layout (`variant=\"topbar\"`), where the store name shows from `lg` up.\n */\nconst props = withDefaults(defineProps<{ variant?: 'sidebar' | 'topbar' }>(), {\n variant: 'sidebar',\n})\n\nconst t = useT()\nconst panel = usePanel()\nconst tenancy = computed(() => panel.value.tenancy)\nconst current = computed(() => tenancy.value?.current)\nconst search = ref('')\n// `tenantSwitcher(false)` sends no tenants; `searchableTenantMenu()` adds a search field.\nconst hasSwitcher = computed(\n () => tenancy.value?.switcher !== false && (tenancy.value?.tenants.length ?? 0) > 0,\n)\nconst tenants = computed(() =>\n tenancy.value?.searchable\n ? filterTenants(tenancy.value.tenants, search.value)\n : (tenancy.value?.tenants ?? []),\n)\n</script>\n\n<template>\n <DropdownMenu v-if=\"tenancy && current\">\n <DropdownMenuTrigger as-child>\n <button\n v-if=\"props.variant === 'topbar'\"\n type=\"button\"\n data-slot=\"tenant-menu\"\n class=\"hover:bg-accent data-[state=open]:bg-accent inline-flex h-9 max-w-60 shrink-0 items-center gap-2 rounded-md px-2 text-sm font-medium\"\n >\n <Avatar class=\"size-6 rounded-md\">\n <AvatarImage v-if=\"current.avatar\" :src=\"current.avatar\" alt=\"\" />\n <AvatarFallback class=\"rounded-md text-[10px]\">{{\n initials(tenantNameText(current))\n }}</AvatarFallback>\n </Avatar>\n <span\n class=\"sr-only min-w-0 truncate lg:not-sr-only lg:grid lg:text-start lg:leading-tight\"\n >\n <span\n v-if=\"current.label\"\n data-slot=\"tenant-menu-label\"\n class=\"text-muted-foreground text-[10px]\"\n >{{ current.label }}\n </span>\n <NavLabel class=\"truncate\" :text=\"current.name\" :html=\"current.nameHtml\" />\n </span>\n <Icon\n name=\"alfakit::panels.tenant-menu.toggle-button\"\n :fallback=\"ChevronsUpDownIcon\"\n class=\"text-muted-foreground size-4 shrink-0\"\n />\n </button>\n <SidebarMenuButton v-else size=\"lg\" class=\"data-[state=open]:bg-sidebar-accent\">\n <Avatar class=\"size-8 rounded-lg\">\n <AvatarImage v-if=\"current.avatar\" :src=\"current.avatar\" :alt=\"tenantNameText(current)\" />\n <AvatarFallback class=\"rounded-lg\">{{\n initials(tenantNameText(current))\n }}</AvatarFallback>\n </Avatar>\n <div class=\"grid flex-1 text-start text-sm leading-tight\">\n <!-- `HasCurrentTenantLabel`: a caption above the name instead of the brand. -->\n <span\n v-if=\"current.label\"\n data-slot=\"tenant-menu-label\"\n class=\"text-muted-foreground truncate text-xs\"\n >{{ current.label }}</span\n >\n <NavLabel class=\"truncate font-medium\" :text=\"current.name\" :html=\"current.nameHtml\" />\n <span v-if=\"!current.label\" class=\"text-muted-foreground truncate text-xs\">{{\n panel.brandName\n }}</span>\n </div>\n <Icon\n name=\"alfakit::panels.tenant-menu.toggle-button\"\n :fallback=\"ChevronsUpDownIcon\"\n class=\"ms-auto size-4\"\n />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent class=\"min-w-56 rounded-lg\" side=\"bottom\" align=\"start\" :side-offset=\"4\">\n <DropdownMenuLabel v-if=\"hasSwitcher\" class=\"text-muted-foreground text-xs\">{{\n t('tenancy.switch', {}, 'Switch')\n }}</DropdownMenuLabel>\n <div\n v-if=\"hasSwitcher && tenancy.searchable\"\n data-slot=\"tenant-menu-search\"\n class=\"relative px-1 pb-1\"\n >\n <SearchIcon\n class=\"text-muted-foreground pointer-events-none absolute start-3 top-1/2 size-3.5 -translate-y-1/2\"\n aria-hidden=\"true\"\n />\n <!-- Keep the menu's type-ahead from taking the keys. -->\n <input\n v-model=\"search\"\n type=\"search\"\n :placeholder=\"t('tenancy.search', {}, 'Search')\"\n :aria-label=\"t('tenancy.search', {}, 'Search')\"\n class=\"border-input focus-visible:ring-ring/50 h-8 w-full rounded-md border bg-transparent ps-7 pe-2 text-sm outline-none focus-visible:ring-[3px]\"\n @keydown.stop\n />\n </div>\n <p\n v-if=\"hasSwitcher && tenancy.searchable && tenants.length === 0\"\n class=\"text-muted-foreground px-2 py-1.5 text-sm\"\n >\n {{ t('no_results', {}, 'No results.') }}\n </p>\n <DropdownMenuItem\n v-for=\"tenant in tenants\"\n :key=\"String(tenant.id)\"\n @select=\"router.visit(tenant.url)\"\n >\n <Avatar class=\"size-6 rounded-sm\">\n <AvatarImage v-if=\"tenant.avatar\" :src=\"tenant.avatar\" :alt=\"tenantNameText(tenant)\" />\n <AvatarFallback class=\"rounded-sm text-[10px]\">{{\n initials(tenantNameText(tenant))\n }}</AvatarFallback>\n </Avatar>\n <NavLabel class=\"flex-1 truncate\" :text=\"tenant.name\" :html=\"tenant.nameHtml\" />\n <CheckIcon v-if=\"String(tenant.id) === String(current.id)\" class=\"size-4\" />\n </DropdownMenuItem>\n <DropdownMenuSeparator\n v-if=\"\n hasSwitcher && (tenancy.registrationUrl || tenancy.profileUrl || tenancy.menu?.length)\n \"\n />\n <MenuItemEntry v-if=\"tenancy.profile\" :item=\"tenancy.profile\" menu=\"tenantMenu\" />\n <DropdownMenuItem v-else-if=\"tenancy.profileUrl\" as-child>\n <Link :href=\"tenancy.profileUrl\" class=\"w-full\"\n ><Icon name=\"alfakit::panels.tenant-menu.profile-button\" :fallback=\"SettingsIcon\" />\n {{ tenancy.profileLabel ?? t('tenancy.profile', {}, 'Settings') }}</Link\n >\n </DropdownMenuItem>\n <MenuItemEntries v-if=\"tenancy.menu\" :items=\"tenancy.menu\" menu=\"tenantMenu\" />\n <MenuItemEntry v-if=\"tenancy.registration\" :item=\"tenancy.registration\" menu=\"tenantMenu\" />\n <DropdownMenuItem v-else-if=\"tenancy.registrationUrl\" as-child>\n <Link :href=\"tenancy.registrationUrl\" class=\"w-full\"\n ><Icon name=\"alfakit::panels.tenant-menu.registration-button\" :fallback=\"PlusIcon\" />\n {{ tenancy.registrationLabel ?? t('tenancy.register', {}, 'New') }}</Link\n >\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TenantMenu.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","DropdownMenu","_withCtx","_createVNode","DropdownMenuTrigger","_createElementBlock","Avatar","AvatarImage","_createCommentVNode","AvatarFallback","_createTextVNode","_toDisplayString","_unref","_createElementVNode","NavLabel","Icon","SidebarMenuButton","DropdownMenuContent","DropdownMenuLabel","_withDirectives","_withModifiers","_vModelText","_Fragment","_renderList","DropdownMenuItem","DropdownMenuSeparator","MenuItemEntry","MenuItemEntries","Icon_default","DropdownMenu_default","DropdownMenuContent_default","DropdownMenuItem_default","DropdownMenuSeparator_default","DropdownMenuTrigger_default","DropdownMenuLabel_default","NavLabel_default","Avatar_default","AvatarFallback_default","AvatarImage_default","SidebarMenuButton_default","MenuItemEntry_default","MenuItemEntries_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","TenantMenu_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","panel","usePanel","tenancy","computed","current","search","ref","hasSwitcher","tenants","filterTenants","openBlock","createBlock","withCtx","createVNode","createElementBlock","createCommentVNode","createTextVNode","toDisplayString","unref","initials","tenantNameText","createElementVNode","ChevronsUpDownIcon","SearchIcon","withDirectives","_cache","$event","withModifiers","vModelText","Fragment","renderList","tenant","router","CheckIcon","Link","SettingsIcon","PlusIcon"],"sources":["../../../src/components/panel/TenantMenu.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { filterTenants, initials, tenantNameText } from '@alfakit/core'\nimport { Link, router } from '@inertiajs/vue3'\nimport { CheckIcon, ChevronsUpDownIcon, PlusIcon, SearchIcon, SettingsIcon } from '@lucide/vue'\nimport { computed, ref } from 'vue'\nimport { usePanel, useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Avatar from '../ui/Avatar.vue'\nimport AvatarFallback from '../ui/AvatarFallback.vue'\nimport AvatarImage from '../ui/AvatarImage.vue'\nimport DropdownMenu from '../ui/DropdownMenu.vue'\nimport DropdownMenuContent from '../ui/DropdownMenuContent.vue'\nimport DropdownMenuItem from '../ui/DropdownMenuItem.vue'\nimport DropdownMenuLabel from '../ui/DropdownMenuLabel.vue'\nimport DropdownMenuSeparator from '../ui/DropdownMenuSeparator.vue'\nimport DropdownMenuTrigger from '../ui/DropdownMenuTrigger.vue'\nimport SidebarMenuButton from '../ui/SidebarMenuButton.vue'\nimport MenuItemEntries from './MenuItemEntries.vue'\nimport MenuItemEntry from './MenuItemEntry.vue'\nimport NavLabel from './NavLabel.vue'\n\n/**\n * The tenant switcher: a sidebar header button, or a compact button in the top bar of the\n * `topbar` layout (`variant=\"topbar\"`), where the store name shows from `lg` up.\n */\nconst props = withDefaults(defineProps<{ variant?: 'sidebar' | 'topbar' }>(), {\n variant: 'sidebar',\n})\n\nconst t = useT()\nconst panel = usePanel()\nconst tenancy = computed(() => panel.value.tenancy)\nconst current = computed(() => tenancy.value?.current)\nconst search = ref('')\n// `tenantSwitcher(false)` sends no tenants; `searchableTenantMenu()` adds a search field.\nconst hasSwitcher = computed(\n () => tenancy.value?.switcher !== false && (tenancy.value?.tenants.length ?? 0) > 0,\n)\nconst tenants = computed(() =>\n tenancy.value?.searchable\n ? filterTenants(tenancy.value.tenants, search.value)\n : (tenancy.value?.tenants ?? []),\n)\n</script>\n\n<template>\n <DropdownMenu v-if=\"tenancy && current\">\n <DropdownMenuTrigger as-child>\n <button\n v-if=\"props.variant === 'topbar'\"\n type=\"button\"\n data-slot=\"tenant-menu\"\n class=\"hover:bg-accent data-[state=open]:bg-accent inline-flex h-9 max-w-60 shrink-0 items-center gap-2 rounded-md px-2 text-sm font-medium\"\n >\n <Avatar class=\"size-6 rounded-md\">\n <AvatarImage v-if=\"current.avatar\" :src=\"current.avatar\" alt=\"\" />\n <AvatarFallback class=\"rounded-md text-[10px]\">{{\n initials(tenantNameText(current))\n }}</AvatarFallback>\n </Avatar>\n <span\n class=\"sr-only min-w-0 truncate lg:not-sr-only lg:grid lg:text-start lg:leading-tight\"\n >\n <span\n v-if=\"current.label\"\n data-slot=\"tenant-menu-label\"\n class=\"text-muted-foreground text-[10px]\"\n >{{ current.label }}\n </span>\n <NavLabel class=\"truncate\" :text=\"current.name\" :html=\"current.nameHtml\" />\n </span>\n <Icon\n name=\"alfakit::panels.tenant-menu.toggle-button\"\n :fallback=\"ChevronsUpDownIcon\"\n class=\"text-muted-foreground size-4 shrink-0\"\n />\n </button>\n <SidebarMenuButton v-else size=\"lg\" class=\"data-[state=open]:bg-sidebar-accent\">\n <Avatar class=\"size-8 rounded-lg\">\n <AvatarImage v-if=\"current.avatar\" :src=\"current.avatar\" :alt=\"tenantNameText(current)\" />\n <AvatarFallback class=\"rounded-lg\">{{\n initials(tenantNameText(current))\n }}</AvatarFallback>\n </Avatar>\n <div class=\"grid flex-1 text-start text-sm leading-tight\">\n <!-- `HasCurrentTenantLabel`: a caption above the name instead of the brand. -->\n <span\n v-if=\"current.label\"\n data-slot=\"tenant-menu-label\"\n class=\"text-muted-foreground truncate text-xs\"\n >{{ current.label }}</span\n >\n <NavLabel class=\"truncate font-medium\" :text=\"current.name\" :html=\"current.nameHtml\" />\n <span v-if=\"!current.label\" class=\"text-muted-foreground truncate text-xs\">{{\n panel.brandName\n }}</span>\n </div>\n <Icon\n name=\"alfakit::panels.tenant-menu.toggle-button\"\n :fallback=\"ChevronsUpDownIcon\"\n class=\"ms-auto size-4\"\n />\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent class=\"min-w-56 rounded-lg\" side=\"bottom\" align=\"start\" :side-offset=\"4\">\n <DropdownMenuLabel v-if=\"hasSwitcher\" class=\"text-muted-foreground text-xs\">{{\n t('tenancy.switch', {}, 'Switch')\n }}</DropdownMenuLabel>\n <div\n v-if=\"hasSwitcher && tenancy.searchable\"\n data-slot=\"tenant-menu-search\"\n class=\"relative px-1 pb-1\"\n >\n <SearchIcon\n class=\"text-muted-foreground pointer-events-none absolute start-3 top-1/2 size-3.5 -translate-y-1/2\"\n aria-hidden=\"true\"\n />\n <!-- Keep the menu's type-ahead from taking the keys. -->\n <input\n v-model=\"search\"\n type=\"search\"\n :placeholder=\"t('tenancy.search', {}, 'Search')\"\n :aria-label=\"t('tenancy.search', {}, 'Search')\"\n class=\"border-input focus-visible:ring-ring/50 h-8 w-full rounded-md border bg-transparent ps-7 pe-2 text-sm outline-none focus-visible:ring-[3px]\"\n @keydown.stop\n />\n </div>\n <p\n v-if=\"hasSwitcher && tenancy.searchable && tenants.length === 0\"\n class=\"text-muted-foreground px-2 py-1.5 text-sm\"\n >\n {{ t('no_results', {}, 'No results.') }}\n </p>\n <DropdownMenuItem\n v-for=\"tenant in tenants\"\n :key=\"String(tenant.id)\"\n @select=\"router.visit(tenant.url)\"\n >\n <Avatar class=\"size-6 rounded-sm\">\n <AvatarImage v-if=\"tenant.avatar\" :src=\"tenant.avatar\" :alt=\"tenantNameText(tenant)\" />\n <AvatarFallback class=\"rounded-sm text-[10px]\">{{\n initials(tenantNameText(tenant))\n }}</AvatarFallback>\n </Avatar>\n <NavLabel class=\"flex-1 truncate\" :text=\"tenant.name\" :html=\"tenant.nameHtml\" />\n <CheckIcon v-if=\"String(tenant.id) === String(current.id)\" class=\"size-4\" />\n </DropdownMenuItem>\n <DropdownMenuSeparator\n v-if=\"\n hasSwitcher && (tenancy.registrationUrl || tenancy.profileUrl || tenancy.menu?.length)\n \"\n />\n <MenuItemEntry v-if=\"tenancy.profile\" :item=\"tenancy.profile\" menu=\"tenantMenu\" />\n <DropdownMenuItem v-else-if=\"tenancy.profileUrl\" as-child>\n <Link :href=\"tenancy.profileUrl\" class=\"w-full\"\n ><Icon name=\"alfakit::panels.tenant-menu.profile-button\" :fallback=\"SettingsIcon\" />\n {{ tenancy.profileLabel ?? t('tenancy.profile', {}, 'Settings') }}</Link\n >\n </DropdownMenuItem>\n <MenuItemEntries v-if=\"tenancy.menu\" :items=\"tenancy.menu\" menu=\"tenantMenu\" />\n <MenuItemEntry v-if=\"tenancy.registration\" :item=\"tenancy.registration\" menu=\"tenantMenu\" />\n <DropdownMenuItem v-else-if=\"tenancy.registrationUrl\" as-child>\n <Link :href=\"tenancy.registrationUrl\" class=\"w-full\"\n ><Icon name=\"alfakit::panels.tenant-menu.registration-button\" :fallback=\"PlusIcon\" />\n {{ tenancy.registrationLabel ?? t('tenancy.register', {}, 'New') }}</Link\n >\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n</template>\n"],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import t from "./Slot.js";
|
|
|
3
3
|
import n from "../notifications/NotificationsMenu.js";
|
|
4
4
|
import r from "./GlobalSearch.js";
|
|
5
5
|
import i from "./UserMenu.js";
|
|
6
|
-
import a from "
|
|
7
|
-
import o from "./
|
|
8
|
-
import s from "
|
|
9
|
-
import c from "
|
|
10
|
-
import l from "
|
|
11
|
-
import u from "./
|
|
6
|
+
import a from "./Breadcrumbs.js";
|
|
7
|
+
import o from "./DebugPanelSlot.js";
|
|
8
|
+
import s from "./ThemeToggle.js";
|
|
9
|
+
import c from "../ui/Separator.js";
|
|
10
|
+
import l from "../ui/SidebarTrigger.js";
|
|
11
|
+
import u from "./TopbarLocaleSwitcher.js";
|
|
12
12
|
import { createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createVNode as h, defineComponent as g, openBlock as _, unref as v } from "vue";
|
|
13
13
|
//#region src/components/panel/Topbar.vue?vue&type=script&setup=true&lang.ts
|
|
14
14
|
var y = {
|
|
@@ -20,12 +20,12 @@ var y = {
|
|
|
20
20
|
setup(g) {
|
|
21
21
|
let x = g, S = e();
|
|
22
22
|
return (e, g) => (_(), p("header", y, [
|
|
23
|
-
h(
|
|
24
|
-
h(
|
|
23
|
+
h(l, { class: "-ms-1" }),
|
|
24
|
+
h(c, {
|
|
25
25
|
orientation: "vertical",
|
|
26
26
|
class: "me-2 h-4"
|
|
27
27
|
}),
|
|
28
|
-
v(S).breadcrumbs && x.breadcrumbs ? (_(), d(
|
|
28
|
+
v(S).breadcrumbs && x.breadcrumbs ? (_(), d(a, {
|
|
29
29
|
key: 0,
|
|
30
30
|
items: x.breadcrumbs
|
|
31
31
|
}, null, 8, ["items"])) : f("", !0),
|
|
@@ -34,9 +34,9 @@ var y = {
|
|
|
34
34
|
h(t, { name: "topbar.end" }),
|
|
35
35
|
v(S).topNavigation || v(S).globalSearch?.position !== "sidebar" ? (_(), d(r, { key: 0 })) : f("", !0),
|
|
36
36
|
v(S).databaseNotifications?.position === "sidebar" ? f("", !0) : (_(), d(n, { key: 1 })),
|
|
37
|
-
h(o),
|
|
38
37
|
h(u),
|
|
39
|
-
h(
|
|
38
|
+
h(s),
|
|
39
|
+
h(o),
|
|
40
40
|
v(S).topNavigation || v(S).userMenu?.position === "topbar" ? (_(), d(i, {
|
|
41
41
|
key: 2,
|
|
42
42
|
variant: "topbar"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Topbar.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createVNode","SidebarTrigger","Separator","_unref","_createBlock","Breadcrumbs","_createCommentVNode","Slot","_createElementVNode","GlobalSearch","NotificationsMenu","TopbarLocaleSwitcher","ThemeToggle","DebugPanelSlot","UserMenu","Slot_default","NotificationsMenu_default","GlobalSearch_default","UserMenu_default","
|
|
1
|
+
{"version":3,"file":"Topbar.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createVNode","SidebarTrigger","Separator","_unref","_createBlock","Breadcrumbs","_createCommentVNode","Slot","_createElementVNode","GlobalSearch","NotificationsMenu","TopbarLocaleSwitcher","ThemeToggle","DebugPanelSlot","UserMenu","Slot_default","NotificationsMenu_default","GlobalSearch_default","UserMenu_default","Breadcrumbs_default","DebugPanelSlot_default","ThemeToggle_default","Separator_default","SidebarTrigger_default","TopbarLocaleSwitcher_default","_hoisted_1","_hoisted_2","Topbar_vue_vue_type_script_setup_true_lang_default","props","__props","panel","usePanel","openBlock","createElementBlock","createVNode","unref","createBlock","createCommentVNode","createElementVNode"],"sources":["../../../src/components/panel/Topbar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { BreadcrumbSchema } from '@alfakit/core'\nimport { usePanel } from '../../context'\nimport NotificationsMenu from '../notifications/NotificationsMenu.vue'\nimport Separator from '../ui/Separator.vue'\nimport SidebarTrigger from '../ui/SidebarTrigger.vue'\nimport Breadcrumbs from './Breadcrumbs.vue'\nimport DebugPanelSlot from './DebugPanelSlot.vue'\nimport GlobalSearch from './GlobalSearch.vue'\nimport Slot from './Slot.vue'\nimport ThemeToggle from './ThemeToggle.vue'\nimport TopbarLocaleSwitcher from './TopbarLocaleSwitcher.vue'\nimport UserMenu from './UserMenu.vue'\n\nconst props = defineProps<{ breadcrumbs?: BreadcrumbSchema[] }>()\nconst panel = usePanel()\n</script>\n\n<template>\n <header\n data-slot=\"topbar\"\n class=\"bg-background/80 supports-[backdrop-filter]:bg-background/60 sticky top-0 z-20 flex h-14 min-w-0 shrink-0 items-center gap-2 border-b px-4 backdrop-blur\"\n >\n <SidebarTrigger class=\"-ms-1\" />\n <Separator orientation=\"vertical\" class=\"me-2 h-4\" />\n <Breadcrumbs v-if=\"panel.breadcrumbs && props.breadcrumbs\" :items=\"props.breadcrumbs\" />\n <Slot name=\"topbar.start\" />\n <div class=\"ms-auto flex items-center gap-1\">\n <Slot name=\"topbar.end\" />\n <!-- `globalSearch(position: Sidebar)` moves the field to the sidebar header. -->\n <GlobalSearch v-if=\"panel.topNavigation || panel.globalSearch?.position !== 'sidebar'\" />\n <NotificationsMenu v-if=\"panel.databaseNotifications?.position !== 'sidebar'\" />\n <TopbarLocaleSwitcher />\n <ThemeToggle />\n <DebugPanelSlot />\n <!-- `userMenu(position: Topbar)` moves the menu out of the sidebar footer. -->\n <UserMenu\n v-if=\"panel.topNavigation || panel.userMenu?.position === 'topbar'\"\n variant=\"topbar\"\n />\n </div>\n </header>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAcA,IAAM8B,IAAQC,GACRC,IAAQC,EAAS;oBAIrBjC,EAAA,GAAAC,EAsBS,UAtBT0B,GAsBS;GAlBPzB,EAAgCC,GAAA,EAAhB,OAAM,QAAO,CAAA;GAC7BD,EAAqDE,GAAA;IAA1C,aAAY;IAAW,OAAM;;GACrBC,EAAA2B,CAAA,CAAK,CAAC,eAAeF,EAAM,eAA9C9B,EAAA,GAAAM,EAAwFC,GAAA;;IAA5B,OAAOuB,EAAM;;GACzE5B,EAA4BO,GAAA,EAAtB,MAAK,eAAc,CAAA;GACzBC,EAaM,OAbNkB,GAaM;IAZJ1B,EAA0BO,GAAA,EAApB,MAAK,aAAY,CAAA;IAEHJ,EAAA2B,CAAA,CAAK,CAAC,iBAAiB3B,EAAA2B,CAAA,CAAK,CAAC,cAAc,aAAQ,aAAvEhC,EAAA,GAAAM,EAAyFK,GAAA,EAAA,KAAA,EAAA,CAAA,KAAA4B,EAAA,IAAA,EAAA;IAChElC,EAAA2B,CAAA,CAAK,CAAC,uBAAuB,aAAQ,YAAkBO,EAAA,IAAA,EAAA,KAAhFvC,EAAA,GAAAM,EAAgFM,GAAA,EAAA,KAAA,EAAA,CAAA;IAChFV,EAAwBW,CAAA;IACxBX,EAAeY,CAAA;IACfZ,EAAkBa,CAAA;IAGVV,EAAA2B,CAAA,CAAK,CAAC,iBAAiB3B,EAAA2B,CAAA,CAAK,CAAC,UAAU,aAAQ,YADvDhC,EAAA,GAAAM,EAGEU,GAAA;;KADA,SAAQ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-live-updates.d.ts","sourceRoot":"","sources":["../../../src/components/realtime/use-live-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAGnF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM;IACZ,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,GAAG,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;CACpD,GACA;IAAE,UAAU,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"use-live-updates.d.ts","sourceRoot":"","sources":["../../../src/components/realtime/use-live-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAEX,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAgD,KAAK,UAAU,EAAE,MAAM,KAAK,CAAA;AAGnF;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM;IACZ,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,GAAG,CAAC,EAAE,SAAS,CAAA;KAAE,CAAC,GAAG,IAAI,CAAA;CACpD,GACA;IAAE,UAAU,EAAE,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;CAAE,CAiErF"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { usePollComponent as e } from "../../context.js";
|
|
2
|
-
import { LiveUpdates as
|
|
3
|
-
import { onMounted as
|
|
1
|
+
import { usePollComponent as e, useRefreshComponents as t } from "../../context.js";
|
|
2
|
+
import { LiveUpdates as n, shownRecordKeys as r } from "@alfakit/core";
|
|
3
|
+
import { onMounted as i, onScopeDispose as a, shallowRef as o, watch as s } from "vue";
|
|
4
4
|
//#region src/components/realtime/use-live-updates.ts
|
|
5
|
-
function
|
|
6
|
-
let
|
|
5
|
+
function c(c) {
|
|
6
|
+
let l = e(), u = t(), d = o(null), f = o({
|
|
7
7
|
pending: 0,
|
|
8
8
|
connected: !1
|
|
9
|
-
}),
|
|
10
|
-
|
|
9
|
+
}), p = null, m = null, h = () => {
|
|
10
|
+
p?.(), m?.(), p = null, m = null;
|
|
11
11
|
};
|
|
12
|
-
return
|
|
13
|
-
|
|
14
|
-
let { records: e } =
|
|
12
|
+
return i(() => {
|
|
13
|
+
s(() => {
|
|
14
|
+
let { records: e } = c();
|
|
15
15
|
return e;
|
|
16
|
-
}, (e) =>
|
|
17
|
-
let { live: e, target: t, polling: n, records: r } =
|
|
16
|
+
}, (e) => d.value?.setShownKeys(e === void 0 ? null : r(e)), { immediate: !0 }), s(() => {
|
|
17
|
+
let { live: e, target: t, polling: n, records: r } = c();
|
|
18
18
|
return JSON.stringify([
|
|
19
19
|
e ?? null,
|
|
20
20
|
t,
|
|
@@ -22,26 +22,27 @@ function s(s) {
|
|
|
22
22
|
r === void 0
|
|
23
23
|
]);
|
|
24
24
|
}, () => {
|
|
25
|
-
|
|
26
|
-
let { live: e, target:
|
|
25
|
+
h();
|
|
26
|
+
let { live: e, target: t, polling: i, records: a } = c();
|
|
27
27
|
if (!e) {
|
|
28
|
-
|
|
28
|
+
d.value = null;
|
|
29
29
|
return;
|
|
30
30
|
}
|
|
31
|
-
let o = new
|
|
31
|
+
let o = new n({
|
|
32
32
|
live: e,
|
|
33
|
-
target:
|
|
33
|
+
target: t,
|
|
34
34
|
polling: i,
|
|
35
|
-
poll:
|
|
35
|
+
poll: l,
|
|
36
|
+
refresh: u
|
|
36
37
|
});
|
|
37
|
-
|
|
38
|
+
d.value = o, o.setShownKeys(a === void 0 ? null : r(a)), f.value = o.store.get(), m = o.store.subscribe((e) => f.value = e), p = o.start();
|
|
38
39
|
}, { immediate: !0 });
|
|
39
|
-
}),
|
|
40
|
-
controller:
|
|
41
|
-
state:
|
|
40
|
+
}), a(h), {
|
|
41
|
+
controller: d,
|
|
42
|
+
state: f
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
45
|
//#endregion
|
|
45
|
-
export {
|
|
46
|
+
export { c as useLiveUpdates };
|
|
46
47
|
|
|
47
48
|
//# sourceMappingURL=use-live-updates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-live-updates.js","names":["useLiveUpdates","poll","usePollComponent","controller","shallowRef","state","stop","unsubscribe","dispose","onMounted","watch","source","records","shownRecordKeys","live","target","polling","next","LiveUpdates","value","onScopeDispose"],"sources":["../../../src/components/realtime/use-live-updates.ts"],"sourcesContent":["import {\n LiveUpdates,\n shownRecordKeys,\n type LiveUpdatesSchema,\n type LiveUpdatesState,\n type RecordKey,\n} from '@alfakit/core'\nimport { onMounted, onScopeDispose, shallowRef, watch, type ShallowRef } from 'vue'\nimport { usePollComponent } from '../../context'\n\n/**\n * Follow `live()` updates of a table or widget: refresh it in place when its records\n * change, polling instead without Echo. Browser only. Returns the controller and its state\n * (`pending` counts created records for `<LiveRecordsPill>`).\n */\nexport function useLiveUpdates(\n source: () => {\n live: LiveUpdatesSchema | undefined\n target: string\n polling?: boolean\n records?: ReadonlyArray<{ key?: RecordKey }> | null\n },\n): { controller: ShallowRef<LiveUpdates | null>; state: ShallowRef<LiveUpdatesState> } {\n const poll = usePollComponent()\n const controller = shallowRef<LiveUpdates | null>(null)\n const state = shallowRef<LiveUpdatesState>({ pending: 0, connected: false })\n let stop: (() => void) | null = null\n let unsubscribe: (() => void) | null = null\n\n const dispose = () => {\n stop?.()\n unsubscribe?.()\n stop = null\n unsubscribe = null\n }\n\n onMounted(() => {\n watch(\n () => {\n const { records } = source()\n\n return records\n },\n (records) =>\n controller.value?.setShownKeys(records === undefined ? null : shownRecordKeys(records)),\n { immediate: true },\n )\n\n watch(\n () => {\n const { live, target, polling, records } = source()\n\n return JSON.stringify([live ?? null, target, Boolean(polling), records === undefined])\n },\n () => {\n dispose()\n\n const { live, target, polling, records } = source()\n\n if (!live) {\n controller.value = null\n\n return\n }\n\n const next = new LiveUpdates({\n live,\n target,\n polling,\n poll,\n })\n\n controller.value = next\n next.setShownKeys(records === undefined ? null : shownRecordKeys(records))\n state.value = next.store.get()\n unsubscribe = next.store.subscribe((value) => (state.value = value))\n stop = next.start()\n },\n { immediate: true },\n )\n })\n\n onScopeDispose(dispose)\n\n return { controller, state }\n}\n"],"mappings":";;;;AAeA,SAAgBA,EACd,GAMqF;CACrF,IAAMC,IAAOC,EAAiB,GACxBC,IAAaC,EAA+B,IAAI,GAChDC,IAAQD,EAA6B;EAAE,SAAS;EAAG,WAAW;CAAM,CAAC,GACvEE,IAA4B,MAC5BC,IAAmC,MAEjCC,UAAgB;EAIpB,AAHAF,IAAO,GACPC,IAAc,GACd,IAAO,MACP,IAAc;CAChB;
|
|
1
|
+
{"version":3,"file":"use-live-updates.js","names":["useLiveUpdates","poll","usePollComponent","refresh","useRefreshComponents","controller","shallowRef","state","stop","unsubscribe","dispose","onMounted","watch","source","records","shownRecordKeys","live","target","polling","next","LiveUpdates","value","onScopeDispose"],"sources":["../../../src/components/realtime/use-live-updates.ts"],"sourcesContent":["import {\n LiveUpdates,\n shownRecordKeys,\n type LiveUpdatesSchema,\n type LiveUpdatesState,\n type RecordKey,\n} from '@alfakit/core'\nimport { onMounted, onScopeDispose, shallowRef, watch, type ShallowRef } from 'vue'\nimport { usePollComponent, useRefreshComponents } from '../../context'\n\n/**\n * Follow `live()` updates of a table or widget: refresh it in place when its records\n * change, polling instead without Echo. Browser only. Returns the controller and its state\n * (`pending` counts created records for `<LiveRecordsPill>`).\n */\nexport function useLiveUpdates(\n source: () => {\n live: LiveUpdatesSchema | undefined\n target: string\n polling?: boolean\n records?: ReadonlyArray<{ key?: RecordKey }> | null\n },\n): { controller: ShallowRef<LiveUpdates | null>; state: ShallowRef<LiveUpdatesState> } {\n const poll = usePollComponent()\n const refresh = useRefreshComponents()\n const controller = shallowRef<LiveUpdates | null>(null)\n const state = shallowRef<LiveUpdatesState>({ pending: 0, connected: false })\n let stop: (() => void) | null = null\n let unsubscribe: (() => void) | null = null\n\n const dispose = () => {\n stop?.()\n unsubscribe?.()\n stop = null\n unsubscribe = null\n }\n\n onMounted(() => {\n watch(\n () => {\n const { records } = source()\n\n return records\n },\n (records) =>\n controller.value?.setShownKeys(records === undefined ? null : shownRecordKeys(records)),\n { immediate: true },\n )\n\n watch(\n () => {\n const { live, target, polling, records } = source()\n\n return JSON.stringify([live ?? null, target, Boolean(polling), records === undefined])\n },\n () => {\n dispose()\n\n const { live, target, polling, records } = source()\n\n if (!live) {\n controller.value = null\n\n return\n }\n\n const next = new LiveUpdates({\n live,\n target,\n polling,\n poll,\n refresh,\n })\n\n controller.value = next\n next.setShownKeys(records === undefined ? null : shownRecordKeys(records))\n state.value = next.store.get()\n unsubscribe = next.store.subscribe((value) => (state.value = value))\n stop = next.start()\n },\n { immediate: true },\n )\n })\n\n onScopeDispose(dispose)\n\n return { controller, state }\n}\n"],"mappings":";;;;AAeA,SAAgBA,EACd,GAMqF;CACrF,IAAMC,IAAOC,EAAiB,GACxBC,IAAUC,EAAqB,GAC/BC,IAAaC,EAA+B,IAAI,GAChDC,IAAQD,EAA6B;EAAE,SAAS;EAAG,WAAW;CAAM,CAAC,GACvEE,IAA4B,MAC5BC,IAAmC,MAEjCC,UAAgB;EAIpB,AAHAF,IAAO,GACPC,IAAc,GACd,IAAO,MACP,IAAc;CAChB;CAmDA,OAjDAE,QAAgB;EAYd,AAXAC,QACQ;GACJ,IAAM,EAAE,eAAYC,EAAO;GAE3B,OAAOC;EACT,IACC,MACCT,EAAW,OAAO,aAAaS,MAAY,KAAA,IAAY,OAAOC,EAAgBD,CAAO,CAAC,GACxF,EAAE,WAAW,GAAK,CACpB,GAEAF,QACQ;GACJ,IAAM,EAAE,SAAM,WAAQ,YAAS,eAAYC,EAAO;GAElD,OAAO,KAAK,UAAU;IAACG,KAAQ;IAAMC;IAAQ,EAAQC;IAAUJ,MAAY,KAAA;GAAS,CAAC;EACvF,SACM;GACJ,EAAQ;GAER,IAAM,EAAE,SAAM,WAAQ,YAAS,eAAYD,EAAO;GAElD,IAAI,CAACG,GAAM;IACT,EAAW,QAAQ;IAEnB;GACF;GAEA,IAAMG,IAAO,IAAIC,EAAY;IAC3B;IACA;IACA;IACA;IACA;GACF,CAAC;GAMD,AAJA,EAAW,QAAQD,GACnBA,EAAK,aAAaL,MAAY,KAAA,IAAY,OAAOC,EAAgBD,CAAO,CAAC,GACzE,EAAM,QAAQK,EAAK,MAAM,IAAI,GAC7B,IAAcA,EAAK,MAAM,WAAW,MAAW,EAAM,QAAQE,CAAM,GACnE,IAAOF,EAAK,MAAM;EACpB,GACA,EAAE,WAAW,GAAK,CACpB;CACF,CAAC,GAEDG,EAAeZ,CAAO,GAEf;EAAE;EAAY;CAAM;AAC7B"}
|
|
@@ -13,7 +13,8 @@ var b = /*@__PURE__*/ m({
|
|
|
13
13
|
cell: {},
|
|
14
14
|
recordKey: {},
|
|
15
15
|
token: {},
|
|
16
|
-
component: {}
|
|
16
|
+
component: {},
|
|
17
|
+
fromRegistry: { type: Boolean }
|
|
17
18
|
},
|
|
18
19
|
setup(m) {
|
|
19
20
|
let b = m, { update: x, saving: S } = c(b), C = _(!!b.cell.state), w = l(() => !!b.cell.disabled || S.value), T = l(() => b.column), E = (e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BooleanCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","Checkbox","_withModifiers","_createElementBlock","_createVNode","Switch","_normalizeClass","_unref","Icon","_createCommentVNode","Icon_default","Checkbox_default","Switch_default","BooleanCell_vue_vue_type_script_setup_true_lang_default","props","__props","useCellUpdate","checked","ref","disabled","computed","saving","toggle","onChange","next","update","openBlock","createBlock","_cache","$event","withModifiers","createElementBlock","createVNode","normalizeClass","unref","cn","colorClass","switchOnColorClasses","switchOffColorClasses","textColorClasses","createCommentVNode"],"sources":["../../../src/components/table/BooleanCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ToggleColumnSchema } from '@alfakit/core'\nimport { computed, ref } from 'vue'\nimport {\n colorClass,\n switchOffColorClasses,\n switchOnColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Checkbox from '../ui/Checkbox.vue'\nimport Switch from '../ui/Switch.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst { update, saving } = useCellUpdate(props)\nconst checked = ref(Boolean(props.cell.state))\nconst disabled = computed(() => Boolean(props.cell.disabled) || saving.value)\nconst toggle = computed(() => props.column as ToggleColumnSchema)\n\nconst onChange = (next: boolean) => {\n checked.value = next\n void update(next)\n}\n</script>\n\n<template>\n <Checkbox\n v-if=\"props.column.type === 'CheckboxColumn'\"\n :model-value=\"checked\"\n :disabled=\"disabled\"\n :aria-label=\"props.column.label || props.column.name\"\n @update:model-value=\"onChange($event === true)\"\n @click.stop\n />\n <span v-else class=\"inline-flex items-center gap-2\" @click.stop>\n <Switch\n :model-value=\"checked\"\n :disabled=\"disabled\"\n :aria-label=\"props.column.label || props.column.name\"\n :class=\"\n cn(\n toggle.onColor && colorClass(switchOnColorClasses, toggle.onColor),\n toggle.offColor && colorClass(switchOffColorClasses, toggle.offColor),\n )\n \"\n @update:model-value=\"onChange\"\n />\n <Icon\n v-if=\"checked ? toggle.onIcon : toggle.offIcon\"\n :name=\"checked ? toggle.onIcon : toggle.offIcon\"\n :class=\"colorClass(textColorClasses, checked ? toggle.onColor : toggle.offColor, 'gray')\"\n />\n </span>\n</template>\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"BooleanCell.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","Checkbox","_withModifiers","_createElementBlock","_createVNode","Switch","_normalizeClass","_unref","Icon","_createCommentVNode","Icon_default","Checkbox_default","Switch_default","BooleanCell_vue_vue_type_script_setup_true_lang_default","props","__props","useCellUpdate","checked","ref","disabled","computed","saving","toggle","onChange","next","update","openBlock","createBlock","_cache","$event","withModifiers","createElementBlock","createVNode","normalizeClass","unref","cn","colorClass","switchOnColorClasses","switchOffColorClasses","textColorClasses","createCommentVNode"],"sources":["../../../src/components/table/BooleanCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ToggleColumnSchema } from '@alfakit/core'\nimport { computed, ref } from 'vue'\nimport {\n colorClass,\n switchOffColorClasses,\n switchOnColorClasses,\n textColorClasses,\n} from '../../lib/colors'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Checkbox from '../ui/Checkbox.vue'\nimport Switch from '../ui/Switch.vue'\nimport { useCellUpdate, type CellProps } from './cell-update'\n\nconst props = defineProps<CellProps>()\nconst { update, saving } = useCellUpdate(props)\nconst checked = ref(Boolean(props.cell.state))\nconst disabled = computed(() => Boolean(props.cell.disabled) || saving.value)\nconst toggle = computed(() => props.column as ToggleColumnSchema)\n\nconst onChange = (next: boolean) => {\n checked.value = next\n void update(next)\n}\n</script>\n\n<template>\n <Checkbox\n v-if=\"props.column.type === 'CheckboxColumn'\"\n :model-value=\"checked\"\n :disabled=\"disabled\"\n :aria-label=\"props.column.label || props.column.name\"\n @update:model-value=\"onChange($event === true)\"\n @click.stop\n />\n <span v-else class=\"inline-flex items-center gap-2\" @click.stop>\n <Switch\n :model-value=\"checked\"\n :disabled=\"disabled\"\n :aria-label=\"props.column.label || props.column.name\"\n :class=\"\n cn(\n toggle.onColor && colorClass(switchOnColorClasses, toggle.onColor),\n toggle.offColor && colorClass(switchOffColorClasses, toggle.offColor),\n )\n \"\n @update:model-value=\"onChange\"\n />\n <Icon\n v-if=\"checked ? toggle.onIcon : toggle.offIcon\"\n :name=\"checked ? toggle.onIcon : toggle.offIcon\"\n :class=\"colorClass(textColorClasses, checked ? toggle.onColor : toggle.offColor, 'gray')\"\n />\n </span>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAeA,IAAMe,IAAQC,GACR,EAAE,WAAQ,cAAWC,EAAcF,CAAK,GACxCG,IAAUC,EAAI,EAAQJ,EAAM,KAAK,KAAM,GACvCK,IAAWC,QAAe,EAAQN,EAAM,KAAK,YAAaO,EAAO,KAAK,GACtEC,IAASF,QAAeN,EAAM,MAA4B,GAE1DS,KAAY,MAAkB;GAElC,AADA,EAAQ,QAAQC,GAChBC,EAAYD,CAAI;EAClB;mBAKUV,EAAM,OAAO,SAAI,oBADzBf,EAAA,GAAAC,EAOEC,GAAA;;GALC,eAAagB,EAAA;GACb,UAAUE,EAAA;GACV,cAAYL,EAAM,OAAO,SAASA,EAAM,OAAO;GAC/C,uBAAkB,AAAAc,EAAA,QAAA,MAAEL,EAASM,MAAM,EAAA;GACnC,SAAK,AAAAD,EAAA,OAAA1B,QAAN,CAAA,GAAW,CAAA,MAAA,CAAA;;;;;EAEbH,CAAAA,MAAAA,EAAA,GAAAI,EAkBO,QAAA;;GAlBM,OAAM;GAAkC,SAAK,AAAAyB,EAAA,OAAA1B,QAAN,CAAA,GAAW,CAAA,MAAA,CAAA;EAC7DE,GAAAA,CAAAA,EAWEC,GAAA;GAVC,eAAaY,EAAA;GACb,UAAUE,EAAA;GACV,cAAYL,EAAM,OAAO,SAASA,EAAM,OAAO;GAC/C,OAAKR,EAAWC,EAAA4B,CAAA,CAAE,CAAYb,EAAA,MAAO,WAAWf,EAAA6B,CAAA,CAAU,CAAC7B,EAAA8B,CAAA,GAAsBf,EAAA,MAAO,OAAO,GAAaA,EAAA,MAAO,YAAYf,EAAA6B,CAAA,CAAU,CAAC7B,EAAA+B,CAAA,GAAuBhB,EAAA,MAAO,QAAQ,CAAA,CAAA;GAMhL,uBAAoBC;;;;;;EAGf,CAAA,IAAAN,EAAA,QAAUK,EAAA,MAAO,SAASA,EAAA,MAAO,YADzCvB,EAAA,GAAAC,EAIEO,EAAAC,CAAA,GAAA;;GAFC,MAAMS,EAAA,QAAUK,EAAA,MAAO,SAASA,EAAA,MAAO;GACvC,OAAKhB,EAAEC,EAAA6B,CAAA,CAAU,CAAC7B,EAAAgC,CAAA,GAAkBtB,EAAA,QAAUK,EAAA,MAAO,UAAUA,EAAA,MAAO,UAAQ,MAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnHeader.js","names":["_sfc_main","ColumnHeader_vue_vue_type_script_setup_true_lang_default","ColumnHeader_default"],"sources":["../../../src/components/table/ColumnHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { ariaSort, columnVisibilityClasses, visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { createReusableTemplate } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Slot from '../panel/Slot.vue'\nimport Input from '../ui/Input.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport TableHead from '../ui/TableHead.vue'\n\nconst ALIGN: Record<string, string> = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n between: 'text-start',\n justify: 'text-justify',\n}\n\n/** A column's header cell: label, sort button and individual search input. */\nconst props = defineProps<{\n table: TableSchema\n column: ColumnSchema\n rowSpan?: number\n /** The table's component key (`relationManager:<class>`, `widget:<id>`), for slots. */\n component?: string | null\n}>()\nconst t = useT()\nconst [DefineLabel, ColumnHeaderLabel] = createReusableTemplate()\n\n// A spinner replaces the sort icon until the sorted records arrive.\nconst sorting = ref(false)\n\nconst sort = () => {\n const direction =\n props.table.sort?.column === props.column.name && props.table.sort.direction === 'asc'\n ? 'desc'\n : 'asc'\n sorting.value = true\n visitTable(props.table.identifier, { sort: props.column.name, direction }, ['page'], {\n onFinish: () => {\n sorting.value = false\n },\n })\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"ColumnHeader.js","names":["_sfc_main","ColumnHeader_vue_vue_type_script_setup_true_lang_default","ColumnHeader_default"],"sources":["../../../src/components/table/ColumnHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { ariaSort, columnVisibilityClasses, debounce, visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { createReusableTemplate } from '@vueuse/core'\nimport { onBeforeUnmount, ref } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Slot from '../panel/Slot.vue'\nimport Input from '../ui/Input.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport TableHead from '../ui/TableHead.vue'\n\nconst ALIGN: Record<string, string> = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n between: 'text-start',\n justify: 'text-justify',\n}\n\n/** A column's header cell: label, sort button and individual search input. */\nconst props = defineProps<{\n table: TableSchema\n column: ColumnSchema\n rowSpan?: number\n /** The table's component key (`relationManager:<class>`, `widget:<id>`), for slots. */\n component?: string | null\n}>()\nconst t = useT()\nconst [DefineLabel, ColumnHeaderLabel] = createReusableTemplate()\n\n// A spinner replaces the sort icon until the sorted records arrive.\nconst sorting = ref(false)\n\nconst sort = () => {\n const direction =\n props.table.sort?.column === props.column.name && props.table.sort.direction === 'asc'\n ? 'desc'\n : 'asc'\n sorting.value = true\n visitTable(props.table.identifier, { sort: props.column.name, direction }, ['page'], {\n onFinish: () => {\n sorting.value = false\n },\n })\n}\n\n// The column search applies after the same pause as the table search; Enter applies at once.\nconst pushColumnSearch = debounce(\n (value: string) =>\n visitTable(\n props.table.identifier,\n { columnSearch: { ...(props.table.columnSearches ?? {}), [props.column.name]: value } },\n ['page'],\n ),\n props.table.searchDebounce,\n)\n\nonBeforeUnmount(() => pushColumnSearch.cancel())\n\nconst onColumnSearchInput = (value: string) => {\n if (!props.table.searchOnBlur) pushColumnSearch(value)\n}\n\nconst columnSearch = (event: Event) => {\n pushColumnSearch((event.target as HTMLInputElement).value)\n pushColumnSearch.flush()\n}\n</script>\n\n<template>\n <DefineLabel>\n <button\n v-if=\"props.column.sortable\"\n type=\"button\"\n class=\"hover:text-foreground inline-flex items-center gap-1\"\n :aria-busy=\"sorting || undefined\"\n @click=\"sort\"\n >\n {{ props.column.label }}\n <Spinner v-if=\"sorting\" data-slot=\"table-sort-spinner\" class=\"size-3.5\" />\n <template v-else-if=\"props.table.sort?.column === props.column.name\">\n <Icon\n v-if=\"props.table.sort?.direction === 'asc'\"\n name=\"alfakit::tables.header-cell.sort-asc-button\"\n :fallback=\"ArrowUpIcon\"\n class=\"size-3.5\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.header-cell.sort-desc-button\"\n :fallback=\"ArrowDownIcon\"\n class=\"size-3.5\"\n aria-hidden=\"true\"\n />\n </template>\n <Icon\n v-else\n name=\"alfakit::tables.header-cell.sort-button\"\n :fallback=\"ArrowUpDownIcon\"\n class=\"size-3.5 opacity-40\"\n aria-hidden=\"true\"\n />\n </button>\n <template v-else>{{ props.column.label }}</template>\n </DefineLabel>\n <TableHead\n :rowspan=\"props.rowSpan\"\n :class=\"\n cn(\n ALIGN[props.column.alignment ?? 'start'],\n props.column.wrapHeader ? 'whitespace-normal' : undefined,\n props.column.grow === false && 'w-0',\n columnVisibilityClasses(props.column),\n )\n \"\n :style=\"props.column.width ? { width: props.column.width } : undefined\"\n :aria-sort=\"\n props.column.sortable\n ? ariaSort(props.column.name, props.table.sort?.column, props.table.sort?.direction)\n : undefined\n \"\n v-bind=\"props.column.extraHeaderAttributes\"\n >\n <div class=\"flex flex-col gap-1\">\n <span\n v-if=\"props.column.headerTooltip\"\n :title=\"props.column.headerTooltip\"\n data-slot=\"header-tooltip\"\n >\n <ColumnHeaderLabel />\n <span class=\"sr-only\"> ({{ props.column.headerTooltip }})</span>\n </span>\n <ColumnHeaderLabel v-else />\n <Slot\n name=\"table.header-cell\"\n :scope=\"props.component\"\n :data=\"{ column: props.column.name }\"\n />\n <Input\n v-if=\"props.column.searchable\"\n type=\"search\"\n :model-value=\"props.table.columnSearches?.[props.column.name] ?? ''\"\n :placeholder=\"t('search', {}, 'Search')\"\n :aria-label=\"`${t('search', {}, 'Search')} ${props.column.label}`\"\n class=\"h-7 text-xs font-normal\"\n @update:model-value=\"onColumnSearchInput\"\n @blur=\"props.table.searchOnBlur && columnSearch($event)\"\n @keydown.enter=\"columnSearch\"\n />\n </div>\n </TableHead>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnHeader.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/ColumnHeader.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ColumnHeader.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/ColumnHeader.vue"],"names":[],"mappings":"AA8JA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAqB9D,8EAA8E;AAC9E,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,WAAW,CAAA;IAClB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uFAAuF;IACvF,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B,CAAC;;AAoTF,wBAMG"}
|
|
@@ -5,12 +5,12 @@ import r from "../ui/Spinner.js";
|
|
|
5
5
|
import i from "../ui/Input.js";
|
|
6
6
|
import a from "../ui/TableHead.js";
|
|
7
7
|
import o from "../panel/Slot.js";
|
|
8
|
-
import { ariaSort as s, columnVisibilityClasses as c,
|
|
9
|
-
import { Fragment as
|
|
10
|
-
import { ArrowDownIcon as
|
|
11
|
-
import { createReusableTemplate as
|
|
8
|
+
import { ariaSort as s, columnVisibilityClasses as c, debounce as l, visitTable as u } from "@alfakit/core";
|
|
9
|
+
import { Fragment as d, createBlock as f, createCommentVNode as p, createElementBlock as m, createElementVNode as h, createTextVNode as g, createVNode as _, defineComponent as v, mergeProps as y, onBeforeUnmount as b, openBlock as x, ref as S, toDisplayString as C, unref as w, withCtx as T, withKeys as E } from "vue";
|
|
10
|
+
import { ArrowDownIcon as D, ArrowUpDownIcon as O, ArrowUpIcon as k } from "@lucide/vue";
|
|
11
|
+
import { createReusableTemplate as A } from "@vueuse/core";
|
|
12
12
|
//#region src/components/table/ColumnHeader.vue?vue&type=script&setup=true&lang.ts
|
|
13
|
-
var
|
|
13
|
+
var j = ["aria-busy"], M = { class: "flex flex-col gap-1" }, N = ["title"], P = { class: "sr-only" }, F = /*@__PURE__*/ v({
|
|
14
14
|
__name: "ColumnHeader",
|
|
15
15
|
props: {
|
|
16
16
|
table: {},
|
|
@@ -18,88 +18,94 @@ var k = ["aria-busy"], A = { class: "flex flex-col gap-1" }, j = ["title"], M =
|
|
|
18
18
|
rowSpan: {},
|
|
19
19
|
component: {}
|
|
20
20
|
},
|
|
21
|
-
setup(
|
|
22
|
-
let
|
|
21
|
+
setup(v) {
|
|
22
|
+
let F = {
|
|
23
23
|
start: "text-start",
|
|
24
24
|
center: "text-center",
|
|
25
25
|
end: "text-end",
|
|
26
26
|
between: "text-start",
|
|
27
27
|
justify: "text-justify"
|
|
28
|
-
},
|
|
29
|
-
let e =
|
|
30
|
-
|
|
31
|
-
sort:
|
|
28
|
+
}, I = v, L = e(), [R, z] = A(), B = S(!1), V = () => {
|
|
29
|
+
let e = I.table.sort?.column === I.column.name && I.table.sort.direction === "asc" ? "desc" : "asc";
|
|
30
|
+
B.value = !0, u(I.table.identifier, {
|
|
31
|
+
sort: I.column.name,
|
|
32
32
|
direction: e
|
|
33
33
|
}, ["page"], { onFinish: () => {
|
|
34
|
-
|
|
34
|
+
B.value = !1;
|
|
35
35
|
} });
|
|
36
|
-
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
}, H = l((e) => u(I.table.identifier, { columnSearch: {
|
|
37
|
+
...I.table.columnSearches ?? {},
|
|
38
|
+
[I.column.name]: e
|
|
39
|
+
} }, ["page"]), I.table.searchDebounce);
|
|
40
|
+
b(() => H.cancel());
|
|
41
|
+
let U = (e) => {
|
|
42
|
+
I.table.searchOnBlur || H(e);
|
|
43
|
+
}, W = (e) => {
|
|
44
|
+
H(e.target.value), H.flush();
|
|
41
45
|
};
|
|
42
|
-
return (e, l) => (
|
|
43
|
-
default:
|
|
46
|
+
return (e, l) => (x(), m(d, null, [_(w(R), null, {
|
|
47
|
+
default: T(() => [I.column.sortable ? (x(), m("button", {
|
|
44
48
|
key: 0,
|
|
45
49
|
type: "button",
|
|
46
50
|
class: "hover:text-foreground inline-flex items-center gap-1",
|
|
47
|
-
"aria-busy":
|
|
48
|
-
onClick:
|
|
49
|
-
}, [
|
|
51
|
+
"aria-busy": B.value || void 0,
|
|
52
|
+
onClick: V
|
|
53
|
+
}, [g(C(I.column.label) + " ", 1), B.value ? (x(), f(r, {
|
|
50
54
|
key: 0,
|
|
51
55
|
"data-slot": "table-sort-spinner",
|
|
52
56
|
class: "size-3.5"
|
|
53
|
-
})) :
|
|
57
|
+
})) : I.table.sort?.column === I.column.name ? (x(), m(d, { key: 1 }, [I.table.sort?.direction === "asc" ? (x(), f(w(n), {
|
|
54
58
|
key: 0,
|
|
55
59
|
name: "alfakit::tables.header-cell.sort-asc-button",
|
|
56
|
-
fallback:
|
|
60
|
+
fallback: w(k),
|
|
57
61
|
class: "size-3.5",
|
|
58
62
|
"aria-hidden": "true"
|
|
59
|
-
}, null, 8, ["fallback"])) : (
|
|
63
|
+
}, null, 8, ["fallback"])) : (x(), f(w(n), {
|
|
60
64
|
key: 1,
|
|
61
65
|
name: "alfakit::tables.header-cell.sort-desc-button",
|
|
62
|
-
fallback:
|
|
66
|
+
fallback: w(D),
|
|
63
67
|
class: "size-3.5",
|
|
64
68
|
"aria-hidden": "true"
|
|
65
|
-
}, null, 8, ["fallback"]))], 64)) : (
|
|
69
|
+
}, null, 8, ["fallback"]))], 64)) : (x(), f(w(n), {
|
|
66
70
|
key: 2,
|
|
67
71
|
name: "alfakit::tables.header-cell.sort-button",
|
|
68
|
-
fallback:
|
|
72
|
+
fallback: w(O),
|
|
69
73
|
class: "size-3.5 opacity-40",
|
|
70
74
|
"aria-hidden": "true"
|
|
71
|
-
}, null, 8, ["fallback"]))], 8,
|
|
75
|
+
}, null, 8, ["fallback"]))], 8, j)) : (x(), m(d, { key: 1 }, [g(C(I.column.label), 1)], 64))]),
|
|
72
76
|
_: 1
|
|
73
|
-
}),
|
|
74
|
-
rowspan:
|
|
75
|
-
class:
|
|
76
|
-
style:
|
|
77
|
-
"aria-sort":
|
|
78
|
-
},
|
|
79
|
-
default:
|
|
80
|
-
|
|
77
|
+
}), _(a, y({
|
|
78
|
+
rowspan: I.rowSpan,
|
|
79
|
+
class: w(t)(F[I.column.alignment ?? "start"], I.column.wrapHeader ? "whitespace-normal" : void 0, I.column.grow === !1 && "w-0", w(c)(I.column)),
|
|
80
|
+
style: I.column.width ? { width: I.column.width } : void 0,
|
|
81
|
+
"aria-sort": I.column.sortable ? w(s)(I.column.name, I.table.sort?.column, I.table.sort?.direction) : void 0
|
|
82
|
+
}, I.column.extraHeaderAttributes), {
|
|
83
|
+
default: T(() => [h("div", M, [
|
|
84
|
+
I.column.headerTooltip ? (x(), m("span", {
|
|
81
85
|
key: 0,
|
|
82
|
-
title:
|
|
86
|
+
title: I.column.headerTooltip,
|
|
83
87
|
"data-slot": "header-tooltip"
|
|
84
|
-
}, [
|
|
85
|
-
|
|
88
|
+
}, [_(w(z)), h("span", P, " (" + C(I.column.headerTooltip) + ")", 1)], 8, N)) : (x(), f(w(z), { key: 1 })),
|
|
89
|
+
_(o, {
|
|
86
90
|
name: "table.header-cell",
|
|
87
|
-
scope:
|
|
88
|
-
data: { column:
|
|
91
|
+
scope: I.component,
|
|
92
|
+
data: { column: I.column.name }
|
|
89
93
|
}, null, 8, ["scope", "data"]),
|
|
90
|
-
|
|
94
|
+
I.column.searchable ? (x(), f(i, {
|
|
91
95
|
key: 2,
|
|
92
96
|
type: "search",
|
|
93
|
-
"model-value":
|
|
94
|
-
placeholder:
|
|
95
|
-
"aria-label": `${
|
|
97
|
+
"model-value": I.table.columnSearches?.[I.column.name] ?? "",
|
|
98
|
+
placeholder: w(L)("search", {}, "Search"),
|
|
99
|
+
"aria-label": `${w(L)("search", {}, "Search")} ${I.column.label}`,
|
|
96
100
|
class: "h-7 text-xs font-normal",
|
|
97
|
-
|
|
101
|
+
"onUpdate:modelValue": U,
|
|
102
|
+
onBlur: l[0] ||= (e) => I.table.searchOnBlur && W(e),
|
|
103
|
+
onKeydown: E(W, ["enter"])
|
|
98
104
|
}, null, 8, [
|
|
99
105
|
"model-value",
|
|
100
106
|
"placeholder",
|
|
101
107
|
"aria-label"
|
|
102
|
-
])) :
|
|
108
|
+
])) : p("", !0)
|
|
103
109
|
])]),
|
|
104
110
|
_: 1
|
|
105
111
|
}, 16, [
|
|
@@ -111,6 +117,6 @@ var k = ["aria-busy"], A = { class: "flex flex-col gap-1" }, j = ["title"], M =
|
|
|
111
117
|
}
|
|
112
118
|
});
|
|
113
119
|
//#endregion
|
|
114
|
-
export {
|
|
120
|
+
export { F as default };
|
|
115
121
|
|
|
116
122
|
//# sourceMappingURL=ColumnHeader.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColumnHeader.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createBlock","Spinner","Icon","TableHead","_mergeProps","_createElementVNode","Slot","Input","_withKeys","_createCommentVNode","Icon_default","Spinner_default","Input_default","TableHead_default","Slot_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","ColumnHeader_vue_vue_type_script_setup_true_lang_default","ALIGN","props","__props","t","useT","DefineLabel","ColumnHeaderLabel","createReusableTemplate","sorting","ref","sort","direction","visitTable","columnSearch","event","openBlock","createElementBlock","Fragment","createVNode","unref","withCtx","createTextVNode","toDisplayString","createBlock","ArrowUpIcon","ArrowDownIcon","ArrowUpDownIcon","mergeProps","cn","columnVisibilityClasses","ariaSort","createElementVNode","withKeys","createCommentVNode"],"sources":["../../../src/components/table/ColumnHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { ariaSort, columnVisibilityClasses, visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { createReusableTemplate } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Slot from '../panel/Slot.vue'\nimport Input from '../ui/Input.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport TableHead from '../ui/TableHead.vue'\n\nconst ALIGN: Record<string, string> = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n between: 'text-start',\n justify: 'text-justify',\n}\n\n/** A column's header cell: label, sort button and individual search input. */\nconst props = defineProps<{\n table: TableSchema\n column: ColumnSchema\n rowSpan?: number\n /** The table's component key (`relationManager:<class>`, `widget:<id>`), for slots. */\n component?: string | null\n}>()\nconst t = useT()\nconst [DefineLabel, ColumnHeaderLabel] = createReusableTemplate()\n\n// A spinner replaces the sort icon until the sorted records arrive.\nconst sorting = ref(false)\n\nconst sort = () => {\n const direction =\n props.table.sort?.column === props.column.name && props.table.sort.direction === 'asc'\n ? 'desc'\n : 'asc'\n sorting.value = true\n visitTable(props.table.identifier, { sort: props.column.name, direction }, ['page'], {\n onFinish: () => {\n sorting.value = false\n },\n })\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"ColumnHeader.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createVNode","_unref","_withCtx","_createTextVNode","_toDisplayString","_createBlock","Spinner","Icon","TableHead","_mergeProps","_createElementVNode","Slot","Input","_withKeys","_createCommentVNode","Icon_default","Spinner_default","Input_default","TableHead_default","Slot_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","ColumnHeader_vue_vue_type_script_setup_true_lang_default","ALIGN","props","__props","t","useT","DefineLabel","ColumnHeaderLabel","createReusableTemplate","sorting","ref","sort","direction","visitTable","pushColumnSearch","debounce","value","onColumnSearchInput","columnSearch","event","openBlock","createElementBlock","Fragment","createVNode","unref","withCtx","createTextVNode","toDisplayString","createBlock","ArrowUpIcon","ArrowDownIcon","ArrowUpDownIcon","mergeProps","cn","columnVisibilityClasses","ariaSort","createElementVNode","_cache","$event","withKeys","createCommentVNode"],"sources":["../../../src/components/table/ColumnHeader.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ColumnSchema, TableSchema } from '@alfakit/core'\nimport { ariaSort, columnVisibilityClasses, debounce, visitTable } from '@alfakit/core'\nimport { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from '@lucide/vue'\nimport { createReusableTemplate } from '@vueuse/core'\nimport { onBeforeUnmount, ref } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport { cn } from '../../lib/utils'\nimport Slot from '../panel/Slot.vue'\nimport Input from '../ui/Input.vue'\nimport Spinner from '../ui/Spinner.vue'\nimport TableHead from '../ui/TableHead.vue'\n\nconst ALIGN: Record<string, string> = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n between: 'text-start',\n justify: 'text-justify',\n}\n\n/** A column's header cell: label, sort button and individual search input. */\nconst props = defineProps<{\n table: TableSchema\n column: ColumnSchema\n rowSpan?: number\n /** The table's component key (`relationManager:<class>`, `widget:<id>`), for slots. */\n component?: string | null\n}>()\nconst t = useT()\nconst [DefineLabel, ColumnHeaderLabel] = createReusableTemplate()\n\n// A spinner replaces the sort icon until the sorted records arrive.\nconst sorting = ref(false)\n\nconst sort = () => {\n const direction =\n props.table.sort?.column === props.column.name && props.table.sort.direction === 'asc'\n ? 'desc'\n : 'asc'\n sorting.value = true\n visitTable(props.table.identifier, { sort: props.column.name, direction }, ['page'], {\n onFinish: () => {\n sorting.value = false\n },\n })\n}\n\n// The column search applies after the same pause as the table search; Enter applies at once.\nconst pushColumnSearch = debounce(\n (value: string) =>\n visitTable(\n props.table.identifier,\n { columnSearch: { ...(props.table.columnSearches ?? {}), [props.column.name]: value } },\n ['page'],\n ),\n props.table.searchDebounce,\n)\n\nonBeforeUnmount(() => pushColumnSearch.cancel())\n\nconst onColumnSearchInput = (value: string) => {\n if (!props.table.searchOnBlur) pushColumnSearch(value)\n}\n\nconst columnSearch = (event: Event) => {\n pushColumnSearch((event.target as HTMLInputElement).value)\n pushColumnSearch.flush()\n}\n</script>\n\n<template>\n <DefineLabel>\n <button\n v-if=\"props.column.sortable\"\n type=\"button\"\n class=\"hover:text-foreground inline-flex items-center gap-1\"\n :aria-busy=\"sorting || undefined\"\n @click=\"sort\"\n >\n {{ props.column.label }}\n <Spinner v-if=\"sorting\" data-slot=\"table-sort-spinner\" class=\"size-3.5\" />\n <template v-else-if=\"props.table.sort?.column === props.column.name\">\n <Icon\n v-if=\"props.table.sort?.direction === 'asc'\"\n name=\"alfakit::tables.header-cell.sort-asc-button\"\n :fallback=\"ArrowUpIcon\"\n class=\"size-3.5\"\n aria-hidden=\"true\"\n />\n <Icon\n v-else\n name=\"alfakit::tables.header-cell.sort-desc-button\"\n :fallback=\"ArrowDownIcon\"\n class=\"size-3.5\"\n aria-hidden=\"true\"\n />\n </template>\n <Icon\n v-else\n name=\"alfakit::tables.header-cell.sort-button\"\n :fallback=\"ArrowUpDownIcon\"\n class=\"size-3.5 opacity-40\"\n aria-hidden=\"true\"\n />\n </button>\n <template v-else>{{ props.column.label }}</template>\n </DefineLabel>\n <TableHead\n :rowspan=\"props.rowSpan\"\n :class=\"\n cn(\n ALIGN[props.column.alignment ?? 'start'],\n props.column.wrapHeader ? 'whitespace-normal' : undefined,\n props.column.grow === false && 'w-0',\n columnVisibilityClasses(props.column),\n )\n \"\n :style=\"props.column.width ? { width: props.column.width } : undefined\"\n :aria-sort=\"\n props.column.sortable\n ? ariaSort(props.column.name, props.table.sort?.column, props.table.sort?.direction)\n : undefined\n \"\n v-bind=\"props.column.extraHeaderAttributes\"\n >\n <div class=\"flex flex-col gap-1\">\n <span\n v-if=\"props.column.headerTooltip\"\n :title=\"props.column.headerTooltip\"\n data-slot=\"header-tooltip\"\n >\n <ColumnHeaderLabel />\n <span class=\"sr-only\"> ({{ props.column.headerTooltip }})</span>\n </span>\n <ColumnHeaderLabel v-else />\n <Slot\n name=\"table.header-cell\"\n :scope=\"props.component\"\n :data=\"{ column: props.column.name }\"\n />\n <Input\n v-if=\"props.column.searchable\"\n type=\"search\"\n :model-value=\"props.table.columnSearches?.[props.column.name] ?? ''\"\n :placeholder=\"t('search', {}, 'Search')\"\n :aria-label=\"`${t('search', {}, 'Search')} ${props.column.label}`\"\n class=\"h-7 text-xs font-normal\"\n @update:model-value=\"onColumnSearchInput\"\n @blur=\"props.table.searchOnBlur && columnSearch($event)\"\n @keydown.enter=\"columnSearch\"\n />\n </div>\n </TableHead>\n</template>\n"],"mappings":"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"}
|