@alfakit/vue 0.1.2 → 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 +8 -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
|
@@ -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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableCellContent.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_resolveDynamicComponent","_normalizeProps","_mergeProps","_createElementBlock","_toDisplayString","_unref","_Fragment","_normalizeClass","_createCommentVNode","_renderList","Icon","_withModifiers","_createElementVNode","_normalizeStyle","BooleanCell","SelectComboboxCell","SelectCell","TextInputCell","_createVNode","FormattedText","Icon_default","FormattedText_default","BooleanCell_default","SelectCell_default","SelectComboboxCell_default","TextInputCell_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","TableCellContent_vue_vue_type_script_setup_true_lang_default","props","__props","registry","useRegistry","custom","computed","columnRegistryKey","t","useT","viewName","view","imageSchema","defaultImageStack","usesDefaultImageStack","imageUrls","imageLimit","toCss","value","imageStyle","size","colors","colorSchema","copiedColor","ref","copyColor","color","textSchema","isComboboxSelect","descriptionPosition","openBlock","createBlock","resolveDynamicComponent","normalizeProps","mergeProps","createElementBlock","toDisplayString","unref","Fragment","normalizeClass","cn","createCommentVNode","renderList","index","item","colorClass","iconSizeClasses","textColorClasses","url","stackedImageStyle","remainingTextSizeClass","withModifiers","createElementVNode","normalizeStyle","CheckIcon","createVNode"],"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(() => registry.resolve(columnRegistryKey(props.column)))\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\" />\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":"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"}
|
|
1
|
+
{"version":3,"file":"TableCellContent.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_resolveDynamicComponent","_mergeProps","_normalizeProps","_createElementBlock","_toDisplayString","_unref","_Fragment","_normalizeClass","_createCommentVNode","_renderList","Icon","_withModifiers","_createElementVNode","_normalizeStyle","BooleanCell","SelectComboboxCell","SelectCell","TextInputCell","_createVNode","FormattedText","Icon_default","FormattedText_default","BooleanCell_default","SelectCell_default","SelectComboboxCell_default","TextInputCell_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","TableCellContent_vue_vue_type_script_setup_true_lang_default","props","__props","registry","useRegistry","custom","computed","columnRegistryKey","t","useT","viewName","view","imageSchema","defaultImageStack","usesDefaultImageStack","imageUrls","imageLimit","toCss","value","imageStyle","size","colors","colorSchema","copiedColor","ref","copyColor","color","textSchema","isComboboxSelect","descriptionPosition","openBlock","createBlock","resolveDynamicComponent","mergeProps","normalizeProps","createElementBlock","toDisplayString","unref","Fragment","normalizeClass","cn","createCommentVNode","renderList","index","item","colorClass","iconSizeClasses","textColorClasses","url","stackedImageStyle","remainingTextSizeClass","withModifiers","createElementVNode","normalizeStyle","CheckIcon","createVNode"],"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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePagination.js","names":["_sfc_main","TablePagination_vue_vue_type_script_setup_true_lang_default","TablePagination_default"],"sources":["../../../src/components/table/TablePagination.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableSchema } from '@alfakit/core'\nimport {\n extremePageLinks,\n isAppendingPagination,\n nextPageQuery,\n prefetchTablePage,\n previousPageQuery,\n visitTable,\n} from '@alfakit/core'\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon } from '@lucide/vue'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Button from '../ui/Button.vue'\n\nconst props = defineProps<{ table: TableSchema }>()\nconst t = useT()\nconst pagination = computed(() => props.table.pagination)\n\nfunction pageWindow(current: number, last: number): Array<number | null> {\n if (last <= 7) {\n return Array.from({ length: last }, (_, index) => index + 1)\n }\n\n const pages = new Set<number>([1, last, current - 1, current, current + 1])\n const sorted = [...pages].filter((page) => page >= 1 && page <= last).sort((a, b) => a - b)\n const result: Array<number | null> = []\n\n sorted.forEach((page, index) => {\n if (index > 0 && page - (sorted[index - 1] ?? 0) > 1) {\n result.push(null)\n }\n\n result.push(page)\n })\n\n return result\n}\n\n// Numbered pages (the default mode) know their total and last page.\nconst numbered = computed(() => {\n const value = pagination.value\n\n return value && (value.mode === undefined || value.mode === 'default') ? value : null\n})\nconst appending = computed(() =>\n isAppendingPagination(pagination.value) ? pagination.value : null,\n)\nconst pages = computed(() =>\n numbered.value ? pageWindow(numbered.value.currentPage, numbered.value.lastPage) : [],\n)\n// `extremePaginationLinks()`: first / last page buttons around numbered pages.\nconst extremes = computed(() =>\n numbered.value\n ? extremePageLinks(props.table, numbered.value.currentPage, numbered.value.lastPage)\n : null,\n)\nconst previous = computed(() => previousPageQuery(pagination.value))\nconst next = computed(() => nextPageQuery(pagination.value))\nconst summary = computed(() => {\n const value = pagination.value\n\n if (!value) return ''\n\n return numbered.value\n ? t(\n 'table.showing',\n { first: value.from, last: value.to, total: numbered.value.total },\n `Showing ${value.from}–${value.to} of ${numbered.value.total}`,\n )\n : t(\n 'table.showing_range',\n { first: value.from, last: value.to },\n `Showing ${value.from}–${value.to}`,\n )\n})\nconst goTo = (page: number) => visitTable(props.table.identifier, { page }, ['page'])\n// The next page is fetched while hovering or focusing \"next\" (cached for a few seconds).\nconst prefetchNext = () => next.value && prefetchTablePage(props.table.identifier, next.value)\n// `deferTotals()`: the total and page numbers arrive after the rows.\nconst pendingTotal = computed(\n () => pagination.value?.mode === 'simple' && pagination.value.pendingTotal === true,\n)\nconst visit = (query: ReturnType<typeof nextPageQuery>) =>\n query && visitTable(props.table.identifier, query, ['page'])\nconst setPerPage = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(props.table.identifier, { perPage: value === 'all' ? 'all' : Number(value) }, ['page'])\n}\n\n// Load more / infinite scroll: the server returns every record up to the requested page,\n// so asking for the next page appends it (and reloads keep what was already shown). A\n// request that fails shows a retry control instead of staying on \"Loading more…\"; infinite\n// scroll waits for the retry rather than requesting again.\nconst loading = ref(false)\nconst failed = ref(false)\nconst sentinel = ref<HTMLElement | null>(null)\nlet observer: IntersectionObserver | null = null\n\nwatch(\n () => pagination.value?.to,\n () => {\n loading.value = false\n failed.value = false\n },\n)\n\nconst loadMore = () => {\n if (!next.value || loading.value) return\n\n let succeeded = false\n let cancelled = false\n loading.value = true\n failed.value = false\n visitTable(props.table.identifier, next.value, ['page'], {\n onSuccess: () => {\n succeeded = true\n },\n onCancel: () => {\n cancelled = true\n },\n onFinish: () => {\n loading.value = false\n if (!succeeded && !cancelled) failed.value = true\n },\n })\n}\n\nwatch(\n [sentinel, () => appending.value?.mode, next, failed],\n ([element, mode, query, hasFailed]) => {\n observer?.disconnect()\n observer = null\n\n if (\n !element ||\n mode !== 'infinite' ||\n !query ||\n hasFailed ||\n typeof IntersectionObserver === 'undefined'\n ) {\n return\n }\n\n observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) loadMore()\n })\n observer.observe(element)\n },\n { flush: 'post' },\n)\n\nonBeforeUnmount(() => observer?.disconnect())\n</script>\n\n<template>\n <div v-if=\"pagination\" class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div class=\"text-muted-foreground flex items-center gap-3 text-sm\">\n <span>{{ summary }}</span>\n <span\n v-if=\"pendingTotal\"\n data-slot=\"pagination-total\"\n aria-busy=\"true\"\n :aria-label=\"t('loading', {}, 'Loading')\"\n class=\"bg-muted-foreground/20 inline-block h-4 w-12 animate-pulse rounded-md\"\n />\n <label v-if=\"pagination.pageOptions.length > 1\" class=\"flex items-center gap-2\">\n <span class=\"sr-only sm:not-sr-only\">{{ t('table.per_page', {}, 'Per page') }}</span>\n <select\n :value=\"String(pagination.perPage)\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"setPerPage\"\n >\n <option v-for=\"option in pagination.pageOptions\" :key=\"option\" :value=\"String(option)\">\n {{ option === 'all' ? t('table.all', {}, 'All') : option }}\n </option>\n </select>\n </label>\n </div>\n <template v-if=\"appending\">\n <template v-if=\"next\">\n <div v-if=\"failed\" class=\"flex items-center gap-2 text-sm\" role=\"alert\">\n <span class=\"text-destructive\">{{\n t('table.load_more_failed', {}, \"Couldn't load more records.\")\n }}</span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" @click=\"loadMore\">{{\n t('retry', {}, 'Retry')\n }}</Button>\n </div>\n <div\n v-else-if=\"appending.mode === 'infinite'\"\n ref=\"sentinel\"\n class=\"text-muted-foreground text-sm\"\n aria-live=\"polite\"\n >\n {{ loading ? t('table.loading_more', {}, 'Loading more…') : '' }}\n </div>\n <Button\n v-else\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n :disabled=\"loading\"\n @click=\"loadMore\"\n >\n {{\n loading ? t('table.loading_more', {}, 'Loading more…') : t('load_more', {}, 'Load more')\n }}\n </Button>\n </template>\n </template>\n <nav\n v-else-if=\"previous || next\"\n class=\"flex items-center gap-1\"\n :aria-label=\"t('pagination', {}, 'Pagination')\"\n >\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-first\"\n :disabled=\"extremes.first === null\"\n :aria-label=\"t('table.first_page', {}, 'First page')\"\n @click=\"goTo(1)\"\n ><Icon\n name=\"alfakit::support.pagination.first-button\"\n :fallback=\"ChevronsLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!previous\"\n :aria-label=\"t('table.previous', {}, 'Previous')\"\n @click=\"visit(previous)\"\n ><Icon\n name=\"alfakit::support.pagination.previous-button\"\n :fallback=\"ChevronLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <template v-if=\"numbered && !numbered.simple\">\n <template v-for=\"(page, index) in pages\" :key=\"page === null ? `gap-${index}` : page\">\n <span v-if=\"page === null\" class=\"text-muted-foreground px-1\">…</span>\n <Button\n v-else\n type=\"button\"\n :variant=\"page === numbered.currentPage ? 'default' : 'outline'\"\n size=\"icon-sm\"\n :aria-current=\"page === numbered.currentPage ? 'page' : undefined\"\n @click=\"goTo(page)\"\n >{{ page }}</Button\n >\n </template>\n </template>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!next\"\n :aria-label=\"t('table.next', {}, 'Next')\"\n @click=\"visit(next)\"\n @pointerenter=\"prefetchNext\"\n @focus=\"prefetchNext\"\n ><Icon\n name=\"alfakit::support.pagination.next-button\"\n :fallback=\"ChevronRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-last\"\n :disabled=\"extremes.last === null\"\n :aria-label=\"t('table.last_page', {}, 'Last page')\"\n @click=\"extremes.last !== null && goTo(extremes.last)\"\n ><Icon\n name=\"alfakit::support.pagination.last-button\"\n :fallback=\"ChevronsRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n </nav>\n </div>\n</template>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"TablePagination.js","names":["_sfc_main","TablePagination_vue_vue_type_script_setup_true_lang_default","TablePagination_default"],"sources":["../../../src/components/table/TablePagination.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableSchema } from '@alfakit/core'\nimport {\n extremePageLinks,\n isAppendingPagination,\n nextPageQuery,\n prefetchTablePage,\n previousPageQuery,\n visitTable,\n} from '@alfakit/core'\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon } from '@lucide/vue'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { useFormatter, useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Button from '../ui/Button.vue'\n\nconst props = defineProps<{ table: TableSchema }>()\nconst t = useT()\nconst format = useFormatter()\nconst pagination = computed(() => props.table.pagination)\n\nfunction pageWindow(current: number, last: number): Array<number | null> {\n if (last <= 7) {\n return Array.from({ length: last }, (_, index) => index + 1)\n }\n\n const pages = new Set<number>([1, last, current - 1, current, current + 1])\n const sorted = [...pages].filter((page) => page >= 1 && page <= last).sort((a, b) => a - b)\n const result: Array<number | null> = []\n\n sorted.forEach((page, index) => {\n if (index > 0 && page - (sorted[index - 1] ?? 0) > 1) {\n result.push(null)\n }\n\n result.push(page)\n })\n\n return result\n}\n\n// Numbered pages (the default mode) know their total and last page.\nconst numbered = computed(() => {\n const value = pagination.value\n\n return value && (value.mode === undefined || value.mode === 'default') ? value : null\n})\nconst appending = computed(() =>\n isAppendingPagination(pagination.value) ? pagination.value : null,\n)\nconst pages = computed(() =>\n numbered.value ? pageWindow(numbered.value.currentPage, numbered.value.lastPage) : [],\n)\n// `extremePaginationLinks()`: first / last page buttons around numbered pages.\nconst extremes = computed(() =>\n numbered.value\n ? extremePageLinks(props.table, numbered.value.currentPage, numbered.value.lastPage)\n : null,\n)\nconst previous = computed(() => previousPageQuery(pagination.value))\nconst next = computed(() => nextPageQuery(pagination.value))\nconst summary = computed(() => {\n const value = pagination.value\n\n if (!value) return ''\n\n return numbered.value\n ? t(\n 'table.showing',\n {\n first: format.value.number(value.from),\n last: format.value.number(value.to),\n total: format.value.number(numbered.value.total),\n },\n 'Showing :first–:last of :total',\n )\n : t(\n 'table.showing_range',\n { first: format.value.number(value.from), last: format.value.number(value.to) },\n 'Showing :first–:last',\n )\n})\nconst goTo = (page: number) => visitTable(props.table.identifier, { page }, ['page'])\n// The next page is fetched while hovering or focusing \"next\" (cached for a few seconds).\nconst prefetchNext = () => next.value && prefetchTablePage(props.table.identifier, next.value)\n// `deferTotals()`: the total and page numbers arrive after the rows.\nconst pendingTotal = computed(\n () => pagination.value?.mode === 'simple' && pagination.value.pendingTotal === true,\n)\nconst visit = (query: ReturnType<typeof nextPageQuery>) =>\n query && visitTable(props.table.identifier, query, ['page'])\nconst setPerPage = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(props.table.identifier, { perPage: value === 'all' ? 'all' : Number(value) }, ['page'])\n}\n\n// Load more / infinite scroll: the server returns every record up to the requested page,\n// so asking for the next page appends it (and reloads keep what was already shown). A\n// request that fails shows a retry control instead of staying on \"Loading more…\"; infinite\n// scroll waits for the retry rather than requesting again.\nconst loading = ref(false)\nconst failed = ref(false)\nconst sentinel = ref<HTMLElement | null>(null)\nlet observer: IntersectionObserver | null = null\n\nwatch(\n () => pagination.value?.to,\n () => {\n loading.value = false\n failed.value = false\n },\n)\n\nconst loadMore = () => {\n if (!next.value || loading.value) return\n\n let succeeded = false\n let cancelled = false\n loading.value = true\n failed.value = false\n visitTable(props.table.identifier, next.value, ['page'], {\n onSuccess: () => {\n succeeded = true\n },\n onCancel: () => {\n cancelled = true\n },\n onFinish: () => {\n loading.value = false\n if (!succeeded && !cancelled) failed.value = true\n },\n })\n}\n\nwatch(\n [sentinel, () => appending.value?.mode, next, failed],\n ([element, mode, query, hasFailed]) => {\n observer?.disconnect()\n observer = null\n\n if (\n !element ||\n mode !== 'infinite' ||\n !query ||\n hasFailed ||\n typeof IntersectionObserver === 'undefined'\n ) {\n return\n }\n\n observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) loadMore()\n })\n observer.observe(element)\n },\n { flush: 'post' },\n)\n\nonBeforeUnmount(() => observer?.disconnect())\n</script>\n\n<template>\n <div v-if=\"pagination\" class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div class=\"text-muted-foreground flex items-center gap-3 text-sm\">\n <span>{{ summary }}</span>\n <span\n v-if=\"pendingTotal\"\n data-slot=\"pagination-total\"\n aria-busy=\"true\"\n :aria-label=\"t('loading', {}, 'Loading')\"\n class=\"bg-muted-foreground/20 inline-block h-4 w-12 animate-pulse rounded-md\"\n />\n <label v-if=\"pagination.pageOptions.length > 1\" class=\"flex items-center gap-2\">\n <span class=\"sr-only sm:not-sr-only\">{{ t('table.per_page', {}, 'Per page') }}</span>\n <select\n :value=\"String(pagination.perPage)\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"setPerPage\"\n >\n <option v-for=\"option in pagination.pageOptions\" :key=\"option\" :value=\"String(option)\">\n {{ option === 'all' ? t('table.all', {}, 'All') : format.number(option) }}\n </option>\n </select>\n </label>\n </div>\n <template v-if=\"appending\">\n <template v-if=\"next\">\n <div v-if=\"failed\" class=\"flex items-center gap-2 text-sm\" role=\"alert\">\n <span class=\"text-destructive\">{{\n t('table.load_more_failed', {}, \"Couldn't load more records.\")\n }}</span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" @click=\"loadMore\">{{\n t('retry', {}, 'Retry')\n }}</Button>\n </div>\n <div\n v-else-if=\"appending.mode === 'infinite'\"\n ref=\"sentinel\"\n class=\"text-muted-foreground text-sm\"\n aria-live=\"polite\"\n >\n {{ loading ? t('table.loading_more', {}, 'Loading more…') : '' }}\n </div>\n <Button\n v-else\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n :disabled=\"loading\"\n @click=\"loadMore\"\n >\n {{\n loading ? t('table.loading_more', {}, 'Loading more…') : t('load_more', {}, 'Load more')\n }}\n </Button>\n </template>\n </template>\n <nav\n v-else-if=\"previous || next\"\n class=\"flex items-center gap-1\"\n :aria-label=\"t('pagination', {}, 'Pagination')\"\n >\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-first\"\n :disabled=\"extremes.first === null\"\n :aria-label=\"t('table.first_page', {}, 'First page')\"\n @click=\"goTo(1)\"\n ><Icon\n name=\"alfakit::support.pagination.first-button\"\n :fallback=\"ChevronsLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!previous\"\n :aria-label=\"t('table.previous', {}, 'Previous')\"\n @click=\"visit(previous)\"\n ><Icon\n name=\"alfakit::support.pagination.previous-button\"\n :fallback=\"ChevronLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <template v-if=\"numbered && !numbered.simple\">\n <template v-for=\"(page, index) in pages\" :key=\"page === null ? `gap-${index}` : page\">\n <span v-if=\"page === null\" class=\"text-muted-foreground px-1\">…</span>\n <Button\n v-else\n type=\"button\"\n :variant=\"page === numbered.currentPage ? 'default' : 'outline'\"\n size=\"icon-sm\"\n :aria-current=\"page === numbered.currentPage ? 'page' : undefined\"\n @click=\"goTo(page)\"\n >{{ format.number(page) }}</Button\n >\n </template>\n </template>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!next\"\n :aria-label=\"t('table.next', {}, 'Next')\"\n @click=\"visit(next)\"\n @pointerenter=\"prefetchNext\"\n @focus=\"prefetchNext\"\n ><Icon\n name=\"alfakit::support.pagination.next-button\"\n :fallback=\"ChevronRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-last\"\n :disabled=\"extremes.last === null\"\n :aria-label=\"t('table.last_page', {}, 'Last page')\"\n @click=\"extremes.last !== null && goTo(extremes.last)\"\n ><Icon\n name=\"alfakit::support.pagination.last-button\"\n :fallback=\"ChevronsRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n </nav>\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePagination.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/TablePagination.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TablePagination.vue.d.ts","sourceRoot":"","sources":["../../../src/components/table/TablePagination.vue"],"names":[],"mappings":"AAuSA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAehD,KAAK,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC;;AAulB1C,wBAMG"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { extremePageLinks as
|
|
5
|
-
import { Fragment as
|
|
6
|
-
import { ChevronLeftIcon as
|
|
1
|
+
import { useFormatter as e, useT as t } from "../../context.js";
|
|
2
|
+
import n from "../../lib/Icon.js";
|
|
3
|
+
import r from "../ui/Button2.js";
|
|
4
|
+
import { extremePageLinks as i, isAppendingPagination as ee, nextPageQuery as a, prefetchTablePage as o, previousPageQuery as s, visitTable as c } from "@alfakit/core";
|
|
5
|
+
import { Fragment as l, computed as u, createBlock as d, createCommentVNode as f, createElementBlock as p, createElementVNode as m, createTextVNode as h, createVNode as g, defineComponent as _, onBeforeUnmount as v, openBlock as y, ref as b, renderList as x, toDisplayString as S, unref as C, watch as w, withCtx as T } from "vue";
|
|
6
|
+
import { ChevronLeftIcon as E, ChevronRightIcon as D, ChevronsLeftIcon as O, ChevronsRightIcon as k } from "@lucide/vue";
|
|
7
7
|
//#region src/components/table/TablePagination.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
-
var
|
|
8
|
+
var te = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"
|
|
11
|
-
},
|
|
11
|
+
}, ne = { class: "text-muted-foreground flex items-center gap-3 text-sm" }, re = ["aria-label"], ie = {
|
|
12
12
|
key: 1,
|
|
13
13
|
class: "flex items-center gap-2"
|
|
14
|
-
},
|
|
14
|
+
}, ae = { class: "sr-only sm:not-sr-only" }, A = ["value"], oe = ["value"], se = {
|
|
15
15
|
key: 0,
|
|
16
16
|
class: "flex items-center gap-2 text-sm",
|
|
17
17
|
role: "alert"
|
|
18
|
-
},
|
|
18
|
+
}, j = { class: "text-destructive" }, M = ["aria-label"], N = {
|
|
19
19
|
key: 0,
|
|
20
20
|
class: "text-muted-foreground px-1"
|
|
21
|
-
}, P = /*@__PURE__*/
|
|
21
|
+
}, P = /*@__PURE__*/ _({
|
|
22
22
|
__name: "TablePagination",
|
|
23
23
|
props: { table: {} },
|
|
24
|
-
setup(
|
|
25
|
-
let P =
|
|
26
|
-
function
|
|
24
|
+
setup(_) {
|
|
25
|
+
let P = _, F = t(), I = e(), L = u(() => P.table.pagination);
|
|
26
|
+
function R(e, t) {
|
|
27
27
|
if (t <= 7) return Array.from({ length: t }, (e, t) => t + 1);
|
|
28
28
|
let n = [.../* @__PURE__ */ new Set([
|
|
29
29
|
1,
|
|
@@ -36,30 +36,30 @@ var O = {
|
|
|
36
36
|
t > 0 && e - (n[t - 1] ?? 0) > 1 && r.push(null), r.push(e);
|
|
37
37
|
}), r;
|
|
38
38
|
}
|
|
39
|
-
let
|
|
40
|
-
let e =
|
|
39
|
+
let z = u(() => {
|
|
40
|
+
let e = L.value;
|
|
41
41
|
return e && (e.mode === void 0 || e.mode === "default") ? e : null;
|
|
42
|
-
}),
|
|
43
|
-
let e =
|
|
44
|
-
return e ?
|
|
45
|
-
first: e.from,
|
|
46
|
-
last: e.to,
|
|
47
|
-
total:
|
|
48
|
-
},
|
|
49
|
-
first: e.from,
|
|
50
|
-
last: e.to
|
|
51
|
-
},
|
|
52
|
-
}),
|
|
42
|
+
}), B = u(() => ee(L.value) ? L.value : null), V = u(() => z.value ? R(z.value.currentPage, z.value.lastPage) : []), H = u(() => z.value ? i(P.table, z.value.currentPage, z.value.lastPage) : null), U = u(() => s(L.value)), W = u(() => a(L.value)), G = u(() => {
|
|
43
|
+
let e = L.value;
|
|
44
|
+
return e ? z.value ? F("table.showing", {
|
|
45
|
+
first: I.value.number(e.from),
|
|
46
|
+
last: I.value.number(e.to),
|
|
47
|
+
total: I.value.number(z.value.total)
|
|
48
|
+
}, "Showing :first–:last of :total") : F("table.showing_range", {
|
|
49
|
+
first: I.value.number(e.from),
|
|
50
|
+
last: I.value.number(e.to)
|
|
51
|
+
}, "Showing :first–:last") : "";
|
|
52
|
+
}), K = (e) => c(P.table.identifier, { page: e }, ["page"]), q = () => W.value && o(P.table.identifier, W.value), ce = u(() => L.value?.mode === "simple" && L.value.pendingTotal === !0), J = (e) => e && c(P.table.identifier, e, ["page"]), le = (e) => {
|
|
53
53
|
let t = e.target.value;
|
|
54
|
-
|
|
55
|
-
}, Y =
|
|
56
|
-
|
|
54
|
+
c(P.table.identifier, { perPage: t === "all" ? "all" : Number(t) }, ["page"]);
|
|
55
|
+
}, Y = b(!1), X = b(!1), Z = b(null), Q = null;
|
|
56
|
+
w(() => L.value?.to, () => {
|
|
57
57
|
Y.value = !1, X.value = !1;
|
|
58
58
|
});
|
|
59
59
|
let $ = () => {
|
|
60
|
-
if (!
|
|
60
|
+
if (!W.value || Y.value) return;
|
|
61
61
|
let e = !1, t = !1;
|
|
62
|
-
Y.value = !0, X.value = !1,
|
|
62
|
+
Y.value = !0, X.value = !1, c(P.table.identifier, W.value, ["page"], {
|
|
63
63
|
onSuccess: () => {
|
|
64
64
|
e = !0;
|
|
65
65
|
},
|
|
@@ -71,47 +71,47 @@ var O = {
|
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
};
|
|
74
|
-
return
|
|
74
|
+
return w([
|
|
75
75
|
Z,
|
|
76
|
-
() =>
|
|
77
|
-
|
|
76
|
+
() => B.value?.mode,
|
|
77
|
+
W,
|
|
78
78
|
X
|
|
79
79
|
], ([e, t, n, r]) => {
|
|
80
80
|
Q?.disconnect(), Q = null, e && t === "infinite" && n && !r && typeof IntersectionObserver < "u" && (Q = new IntersectionObserver((e) => {
|
|
81
81
|
e.some((e) => e.isIntersecting) && $();
|
|
82
82
|
}), Q.observe(e));
|
|
83
|
-
}, { flush: "post" }),
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
}, { flush: "post" }), v(() => Q?.disconnect()), (e, t) => L.value ? (y(), p("div", te, [m("div", ne, [
|
|
84
|
+
m("span", null, S(G.value), 1),
|
|
85
|
+
ce.value ? (y(), p("span", {
|
|
86
86
|
key: 0,
|
|
87
87
|
"data-slot": "pagination-total",
|
|
88
88
|
"aria-busy": "true",
|
|
89
|
-
"aria-label":
|
|
89
|
+
"aria-label": C(F)("loading", {}, "Loading"),
|
|
90
90
|
class: "bg-muted-foreground/20 inline-block h-4 w-12 animate-pulse rounded-md"
|
|
91
|
-
}, null, 8,
|
|
92
|
-
|
|
93
|
-
value: String(
|
|
91
|
+
}, null, 8, re)) : f("", !0),
|
|
92
|
+
L.value.pageOptions.length > 1 ? (y(), p("label", ie, [m("span", ae, S(C(F)("table.per_page", {}, "Per page")), 1), m("select", {
|
|
93
|
+
value: String(L.value.perPage),
|
|
94
94
|
class: "border-input h-8 rounded-md border bg-transparent px-2 text-sm",
|
|
95
|
-
onChange:
|
|
96
|
-
}, [(
|
|
95
|
+
onChange: le
|
|
96
|
+
}, [(y(!0), p(l, null, x(L.value.pageOptions, (e) => (y(), p("option", {
|
|
97
97
|
key: e,
|
|
98
98
|
value: String(e)
|
|
99
|
-
},
|
|
100
|
-
]),
|
|
99
|
+
}, S(e === "all" ? C(F)("table.all", {}, "All") : C(I).number(e)), 9, oe))), 128))], 40, A)])) : f("", !0)
|
|
100
|
+
]), B.value ? (y(), p(l, { key: 0 }, [W.value ? (y(), p(l, { key: 0 }, [X.value ? (y(), p("div", se, [m("span", j, S(C(F)("table.load_more_failed", {}, "Couldn't load more records.")), 1), g(r, {
|
|
101
101
|
type: "button",
|
|
102
102
|
variant: "outline",
|
|
103
103
|
size: "sm",
|
|
104
104
|
onClick: $
|
|
105
105
|
}, {
|
|
106
|
-
default:
|
|
106
|
+
default: T(() => [h(S(C(F)("retry", {}, "Retry")), 1)]),
|
|
107
107
|
_: 1
|
|
108
|
-
})])) :
|
|
108
|
+
})])) : B.value.mode === "infinite" ? (y(), p("div", {
|
|
109
109
|
key: 1,
|
|
110
110
|
ref_key: "sentinel",
|
|
111
111
|
ref: Z,
|
|
112
112
|
class: "text-muted-foreground text-sm",
|
|
113
113
|
"aria-live": "polite"
|
|
114
|
-
},
|
|
114
|
+
}, S(Y.value ? C(F)("table.loading_more", {}, "Loading more…") : ""), 513)) : (y(), d(r, {
|
|
115
115
|
key: 2,
|
|
116
116
|
type: "button",
|
|
117
117
|
variant: "outline",
|
|
@@ -119,95 +119,95 @@ var O = {
|
|
|
119
119
|
disabled: Y.value,
|
|
120
120
|
onClick: $
|
|
121
121
|
}, {
|
|
122
|
-
default:
|
|
122
|
+
default: T(() => [h(S(Y.value ? C(F)("table.loading_more", {}, "Loading more…") : C(F)("load_more", {}, "Load more")), 1)]),
|
|
123
123
|
_: 1
|
|
124
|
-
}, 8, ["disabled"]))], 64)) :
|
|
124
|
+
}, 8, ["disabled"]))], 64)) : f("", !0)], 64)) : U.value || W.value ? (y(), p("nav", {
|
|
125
125
|
key: 1,
|
|
126
126
|
class: "flex items-center gap-1",
|
|
127
|
-
"aria-label":
|
|
127
|
+
"aria-label": C(F)("pagination", {}, "Pagination")
|
|
128
128
|
}, [
|
|
129
|
-
|
|
129
|
+
H.value ? (y(), d(r, {
|
|
130
130
|
key: 0,
|
|
131
131
|
type: "button",
|
|
132
132
|
variant: "outline",
|
|
133
133
|
size: "icon-sm",
|
|
134
134
|
"data-slot": "pagination-first",
|
|
135
|
-
disabled:
|
|
136
|
-
"aria-label":
|
|
137
|
-
onClick:
|
|
135
|
+
disabled: H.value.first === null,
|
|
136
|
+
"aria-label": C(F)("table.first_page", {}, "First page"),
|
|
137
|
+
onClick: t[0] ||= (e) => K(1)
|
|
138
138
|
}, {
|
|
139
|
-
default:
|
|
139
|
+
default: T(() => [g(C(n), {
|
|
140
140
|
name: "alfakit::support.pagination.first-button",
|
|
141
|
-
fallback:
|
|
141
|
+
fallback: C(O),
|
|
142
142
|
class: "rtl:rotate-180"
|
|
143
143
|
}, null, 8, ["fallback"])]),
|
|
144
144
|
_: 1
|
|
145
|
-
}, 8, ["disabled", "aria-label"])) :
|
|
146
|
-
|
|
145
|
+
}, 8, ["disabled", "aria-label"])) : f("", !0),
|
|
146
|
+
g(r, {
|
|
147
147
|
type: "button",
|
|
148
148
|
variant: "outline",
|
|
149
149
|
size: "icon-sm",
|
|
150
|
-
disabled: !
|
|
151
|
-
"aria-label":
|
|
152
|
-
onClick:
|
|
150
|
+
disabled: !U.value,
|
|
151
|
+
"aria-label": C(F)("table.previous", {}, "Previous"),
|
|
152
|
+
onClick: t[1] ||= (e) => J(U.value)
|
|
153
153
|
}, {
|
|
154
|
-
default:
|
|
154
|
+
default: T(() => [g(C(n), {
|
|
155
155
|
name: "alfakit::support.pagination.previous-button",
|
|
156
|
-
fallback:
|
|
156
|
+
fallback: C(E),
|
|
157
157
|
class: "rtl:rotate-180"
|
|
158
158
|
}, null, 8, ["fallback"])]),
|
|
159
159
|
_: 1
|
|
160
160
|
}, 8, ["disabled", "aria-label"]),
|
|
161
|
-
|
|
161
|
+
z.value && !z.value.simple ? (y(!0), p(l, { key: 1 }, x(V.value, (e, t) => (y(), p(l, { key: e === null ? `gap-${t}` : e }, [e === null ? (y(), p("span", N, "…")) : (y(), d(r, {
|
|
162
162
|
key: 1,
|
|
163
163
|
type: "button",
|
|
164
|
-
variant: e ===
|
|
164
|
+
variant: e === z.value.currentPage ? "default" : "outline",
|
|
165
165
|
size: "icon-sm",
|
|
166
|
-
"aria-current": e ===
|
|
167
|
-
onClick: (t) =>
|
|
166
|
+
"aria-current": e === z.value.currentPage ? "page" : void 0,
|
|
167
|
+
onClick: (t) => K(e)
|
|
168
168
|
}, {
|
|
169
|
-
default:
|
|
169
|
+
default: T(() => [h(S(C(I).number(e)), 1)]),
|
|
170
170
|
_: 2
|
|
171
171
|
}, 1032, [
|
|
172
172
|
"variant",
|
|
173
173
|
"aria-current",
|
|
174
174
|
"onClick"
|
|
175
|
-
]))], 64))), 128)) :
|
|
176
|
-
|
|
175
|
+
]))], 64))), 128)) : f("", !0),
|
|
176
|
+
g(r, {
|
|
177
177
|
type: "button",
|
|
178
178
|
variant: "outline",
|
|
179
179
|
size: "icon-sm",
|
|
180
|
-
disabled: !
|
|
181
|
-
"aria-label":
|
|
182
|
-
onClick:
|
|
183
|
-
onPointerenter:
|
|
184
|
-
onFocus:
|
|
180
|
+
disabled: !W.value,
|
|
181
|
+
"aria-label": C(F)("table.next", {}, "Next"),
|
|
182
|
+
onClick: t[2] ||= (e) => J(W.value),
|
|
183
|
+
onPointerenter: q,
|
|
184
|
+
onFocus: q
|
|
185
185
|
}, {
|
|
186
|
-
default:
|
|
186
|
+
default: T(() => [g(C(n), {
|
|
187
187
|
name: "alfakit::support.pagination.next-button",
|
|
188
|
-
fallback:
|
|
188
|
+
fallback: C(D),
|
|
189
189
|
class: "rtl:rotate-180"
|
|
190
190
|
}, null, 8, ["fallback"])]),
|
|
191
191
|
_: 1
|
|
192
192
|
}, 8, ["disabled", "aria-label"]),
|
|
193
|
-
|
|
193
|
+
H.value ? (y(), d(r, {
|
|
194
194
|
key: 2,
|
|
195
195
|
type: "button",
|
|
196
196
|
variant: "outline",
|
|
197
197
|
size: "icon-sm",
|
|
198
198
|
"data-slot": "pagination-last",
|
|
199
|
-
disabled:
|
|
200
|
-
"aria-label":
|
|
201
|
-
onClick:
|
|
199
|
+
disabled: H.value.last === null,
|
|
200
|
+
"aria-label": C(F)("table.last_page", {}, "Last page"),
|
|
201
|
+
onClick: t[3] ||= (e) => H.value.last !== null && K(H.value.last)
|
|
202
202
|
}, {
|
|
203
|
-
default:
|
|
203
|
+
default: T(() => [g(C(n), {
|
|
204
204
|
name: "alfakit::support.pagination.last-button",
|
|
205
|
-
fallback:
|
|
205
|
+
fallback: C(k),
|
|
206
206
|
class: "rtl:rotate-180"
|
|
207
207
|
}, null, 8, ["fallback"])]),
|
|
208
208
|
_: 1
|
|
209
|
-
}, 8, ["disabled", "aria-label"])) :
|
|
210
|
-
], 8, M)) :
|
|
209
|
+
}, 8, ["disabled", "aria-label"])) : f("", !0)
|
|
210
|
+
], 8, M)) : f("", !0)])) : f("", !0);
|
|
211
211
|
}
|
|
212
212
|
});
|
|
213
213
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TablePagination.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_createCommentVNode","_Fragment","_renderList","_createVNode","Button","_withCtx","_createTextVNode","_createBlock","Icon","Icon_default","Button_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","TablePagination_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","pagination","computed","pageWindow","last","index","sorted","current","page","a","b","result","numbered","value","appending","isAppendingPagination","pages","extremes","extremePageLinks","previous","previousPageQuery","next","nextPageQuery","summary","goTo","visitTable","prefetchNext","prefetchTablePage","pendingTotal","visit","query","setPerPage","event","loading","ref","failed","sentinel","observer","loadMore","succeeded","cancelled","watch","element","mode","hasFailed","entries","entry","onBeforeUnmount","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","createCommentVNode","Fragment","renderList","option","createVNode","withCtx","createTextVNode","createBlock","_cache","ChevronsLeftIcon","ChevronLeftIcon","ChevronRightIcon","ChevronsRightIcon"],"sources":["../../../src/components/table/TablePagination.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableSchema } from '@alfakit/core'\nimport {\n extremePageLinks,\n isAppendingPagination,\n nextPageQuery,\n prefetchTablePage,\n previousPageQuery,\n visitTable,\n} from '@alfakit/core'\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon } from '@lucide/vue'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Button from '../ui/Button.vue'\n\nconst props = defineProps<{ table: TableSchema }>()\nconst t = useT()\nconst pagination = computed(() => props.table.pagination)\n\nfunction pageWindow(current: number, last: number): Array<number | null> {\n if (last <= 7) {\n return Array.from({ length: last }, (_, index) => index + 1)\n }\n\n const pages = new Set<number>([1, last, current - 1, current, current + 1])\n const sorted = [...pages].filter((page) => page >= 1 && page <= last).sort((a, b) => a - b)\n const result: Array<number | null> = []\n\n sorted.forEach((page, index) => {\n if (index > 0 && page - (sorted[index - 1] ?? 0) > 1) {\n result.push(null)\n }\n\n result.push(page)\n })\n\n return result\n}\n\n// Numbered pages (the default mode) know their total and last page.\nconst numbered = computed(() => {\n const value = pagination.value\n\n return value && (value.mode === undefined || value.mode === 'default') ? value : null\n})\nconst appending = computed(() =>\n isAppendingPagination(pagination.value) ? pagination.value : null,\n)\nconst pages = computed(() =>\n numbered.value ? pageWindow(numbered.value.currentPage, numbered.value.lastPage) : [],\n)\n// `extremePaginationLinks()`: first / last page buttons around numbered pages.\nconst extremes = computed(() =>\n numbered.value\n ? extremePageLinks(props.table, numbered.value.currentPage, numbered.value.lastPage)\n : null,\n)\nconst previous = computed(() => previousPageQuery(pagination.value))\nconst next = computed(() => nextPageQuery(pagination.value))\nconst summary = computed(() => {\n const value = pagination.value\n\n if (!value) return ''\n\n return numbered.value\n ? t(\n 'table.showing',\n { first: value.from, last: value.to, total: numbered.value.total },\n `Showing ${value.from}–${value.to} of ${numbered.value.total}`,\n )\n : t(\n 'table.showing_range',\n { first: value.from, last: value.to },\n `Showing ${value.from}–${value.to}`,\n )\n})\nconst goTo = (page: number) => visitTable(props.table.identifier, { page }, ['page'])\n// The next page is fetched while hovering or focusing \"next\" (cached for a few seconds).\nconst prefetchNext = () => next.value && prefetchTablePage(props.table.identifier, next.value)\n// `deferTotals()`: the total and page numbers arrive after the rows.\nconst pendingTotal = computed(\n () => pagination.value?.mode === 'simple' && pagination.value.pendingTotal === true,\n)\nconst visit = (query: ReturnType<typeof nextPageQuery>) =>\n query && visitTable(props.table.identifier, query, ['page'])\nconst setPerPage = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(props.table.identifier, { perPage: value === 'all' ? 'all' : Number(value) }, ['page'])\n}\n\n// Load more / infinite scroll: the server returns every record up to the requested page,\n// so asking for the next page appends it (and reloads keep what was already shown). A\n// request that fails shows a retry control instead of staying on \"Loading more…\"; infinite\n// scroll waits for the retry rather than requesting again.\nconst loading = ref(false)\nconst failed = ref(false)\nconst sentinel = ref<HTMLElement | null>(null)\nlet observer: IntersectionObserver | null = null\n\nwatch(\n () => pagination.value?.to,\n () => {\n loading.value = false\n failed.value = false\n },\n)\n\nconst loadMore = () => {\n if (!next.value || loading.value) return\n\n let succeeded = false\n let cancelled = false\n loading.value = true\n failed.value = false\n visitTable(props.table.identifier, next.value, ['page'], {\n onSuccess: () => {\n succeeded = true\n },\n onCancel: () => {\n cancelled = true\n },\n onFinish: () => {\n loading.value = false\n if (!succeeded && !cancelled) failed.value = true\n },\n })\n}\n\nwatch(\n [sentinel, () => appending.value?.mode, next, failed],\n ([element, mode, query, hasFailed]) => {\n observer?.disconnect()\n observer = null\n\n if (\n !element ||\n mode !== 'infinite' ||\n !query ||\n hasFailed ||\n typeof IntersectionObserver === 'undefined'\n ) {\n return\n }\n\n observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) loadMore()\n })\n observer.observe(element)\n },\n { flush: 'post' },\n)\n\nonBeforeUnmount(() => observer?.disconnect())\n</script>\n\n<template>\n <div v-if=\"pagination\" class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div class=\"text-muted-foreground flex items-center gap-3 text-sm\">\n <span>{{ summary }}</span>\n <span\n v-if=\"pendingTotal\"\n data-slot=\"pagination-total\"\n aria-busy=\"true\"\n :aria-label=\"t('loading', {}, 'Loading')\"\n class=\"bg-muted-foreground/20 inline-block h-4 w-12 animate-pulse rounded-md\"\n />\n <label v-if=\"pagination.pageOptions.length > 1\" class=\"flex items-center gap-2\">\n <span class=\"sr-only sm:not-sr-only\">{{ t('table.per_page', {}, 'Per page') }}</span>\n <select\n :value=\"String(pagination.perPage)\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"setPerPage\"\n >\n <option v-for=\"option in pagination.pageOptions\" :key=\"option\" :value=\"String(option)\">\n {{ option === 'all' ? t('table.all', {}, 'All') : option }}\n </option>\n </select>\n </label>\n </div>\n <template v-if=\"appending\">\n <template v-if=\"next\">\n <div v-if=\"failed\" class=\"flex items-center gap-2 text-sm\" role=\"alert\">\n <span class=\"text-destructive\">{{\n t('table.load_more_failed', {}, \"Couldn't load more records.\")\n }}</span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" @click=\"loadMore\">{{\n t('retry', {}, 'Retry')\n }}</Button>\n </div>\n <div\n v-else-if=\"appending.mode === 'infinite'\"\n ref=\"sentinel\"\n class=\"text-muted-foreground text-sm\"\n aria-live=\"polite\"\n >\n {{ loading ? t('table.loading_more', {}, 'Loading more…') : '' }}\n </div>\n <Button\n v-else\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n :disabled=\"loading\"\n @click=\"loadMore\"\n >\n {{\n loading ? t('table.loading_more', {}, 'Loading more…') : t('load_more', {}, 'Load more')\n }}\n </Button>\n </template>\n </template>\n <nav\n v-else-if=\"previous || next\"\n class=\"flex items-center gap-1\"\n :aria-label=\"t('pagination', {}, 'Pagination')\"\n >\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-first\"\n :disabled=\"extremes.first === null\"\n :aria-label=\"t('table.first_page', {}, 'First page')\"\n @click=\"goTo(1)\"\n ><Icon\n name=\"alfakit::support.pagination.first-button\"\n :fallback=\"ChevronsLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!previous\"\n :aria-label=\"t('table.previous', {}, 'Previous')\"\n @click=\"visit(previous)\"\n ><Icon\n name=\"alfakit::support.pagination.previous-button\"\n :fallback=\"ChevronLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <template v-if=\"numbered && !numbered.simple\">\n <template v-for=\"(page, index) in pages\" :key=\"page === null ? `gap-${index}` : page\">\n <span v-if=\"page === null\" class=\"text-muted-foreground px-1\">…</span>\n <Button\n v-else\n type=\"button\"\n :variant=\"page === numbered.currentPage ? 'default' : 'outline'\"\n size=\"icon-sm\"\n :aria-current=\"page === numbered.currentPage ? 'page' : undefined\"\n @click=\"goTo(page)\"\n >{{ page }}</Button\n >\n </template>\n </template>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!next\"\n :aria-label=\"t('table.next', {}, 'Next')\"\n @click=\"visit(next)\"\n @pointerenter=\"prefetchNext\"\n @focus=\"prefetchNext\"\n ><Icon\n name=\"alfakit::support.pagination.next-button\"\n :fallback=\"ChevronRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-last\"\n :disabled=\"extremes.last === null\"\n :aria-label=\"t('table.last_page', {}, 'Last page')\"\n @click=\"extremes.last !== null && goTo(extremes.last)\"\n ><Icon\n name=\"alfakit::support.pagination.last-button\"\n :fallback=\"ChevronsRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n </nav>\n </div>\n</template>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TablePagination.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_createCommentVNode","_Fragment","_renderList","_createVNode","Button","_withCtx","_createTextVNode","_createBlock","Icon","Icon_default","Button_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","TablePagination_vue_vue_type_script_setup_true_lang_default","props","__props","t","useT","format","useFormatter","pagination","computed","pageWindow","last","index","sorted","current","page","a","b","result","numbered","value","appending","isAppendingPagination","pages","extremes","extremePageLinks","previous","previousPageQuery","next","nextPageQuery","summary","goTo","visitTable","prefetchNext","prefetchTablePage","pendingTotal","visit","query","setPerPage","event","loading","ref","failed","sentinel","observer","loadMore","succeeded","cancelled","watch","element","mode","hasFailed","entries","entry","onBeforeUnmount","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","createCommentVNode","Fragment","renderList","option","createVNode","withCtx","createTextVNode","createBlock","_cache","ChevronsLeftIcon","ChevronLeftIcon","ChevronRightIcon","ChevronsRightIcon"],"sources":["../../../src/components/table/TablePagination.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { TableSchema } from '@alfakit/core'\nimport {\n extremePageLinks,\n isAppendingPagination,\n nextPageQuery,\n prefetchTablePage,\n previousPageQuery,\n visitTable,\n} from '@alfakit/core'\nimport { ChevronLeftIcon, ChevronRightIcon, ChevronsLeftIcon, ChevronsRightIcon } from '@lucide/vue'\nimport { computed, onBeforeUnmount, ref, watch } from 'vue'\nimport { useFormatter, useT } from '../../context'\nimport { Icon } from '../../lib/icons'\nimport Button from '../ui/Button.vue'\n\nconst props = defineProps<{ table: TableSchema }>()\nconst t = useT()\nconst format = useFormatter()\nconst pagination = computed(() => props.table.pagination)\n\nfunction pageWindow(current: number, last: number): Array<number | null> {\n if (last <= 7) {\n return Array.from({ length: last }, (_, index) => index + 1)\n }\n\n const pages = new Set<number>([1, last, current - 1, current, current + 1])\n const sorted = [...pages].filter((page) => page >= 1 && page <= last).sort((a, b) => a - b)\n const result: Array<number | null> = []\n\n sorted.forEach((page, index) => {\n if (index > 0 && page - (sorted[index - 1] ?? 0) > 1) {\n result.push(null)\n }\n\n result.push(page)\n })\n\n return result\n}\n\n// Numbered pages (the default mode) know their total and last page.\nconst numbered = computed(() => {\n const value = pagination.value\n\n return value && (value.mode === undefined || value.mode === 'default') ? value : null\n})\nconst appending = computed(() =>\n isAppendingPagination(pagination.value) ? pagination.value : null,\n)\nconst pages = computed(() =>\n numbered.value ? pageWindow(numbered.value.currentPage, numbered.value.lastPage) : [],\n)\n// `extremePaginationLinks()`: first / last page buttons around numbered pages.\nconst extremes = computed(() =>\n numbered.value\n ? extremePageLinks(props.table, numbered.value.currentPage, numbered.value.lastPage)\n : null,\n)\nconst previous = computed(() => previousPageQuery(pagination.value))\nconst next = computed(() => nextPageQuery(pagination.value))\nconst summary = computed(() => {\n const value = pagination.value\n\n if (!value) return ''\n\n return numbered.value\n ? t(\n 'table.showing',\n {\n first: format.value.number(value.from),\n last: format.value.number(value.to),\n total: format.value.number(numbered.value.total),\n },\n 'Showing :first–:last of :total',\n )\n : t(\n 'table.showing_range',\n { first: format.value.number(value.from), last: format.value.number(value.to) },\n 'Showing :first–:last',\n )\n})\nconst goTo = (page: number) => visitTable(props.table.identifier, { page }, ['page'])\n// The next page is fetched while hovering or focusing \"next\" (cached for a few seconds).\nconst prefetchNext = () => next.value && prefetchTablePage(props.table.identifier, next.value)\n// `deferTotals()`: the total and page numbers arrive after the rows.\nconst pendingTotal = computed(\n () => pagination.value?.mode === 'simple' && pagination.value.pendingTotal === true,\n)\nconst visit = (query: ReturnType<typeof nextPageQuery>) =>\n query && visitTable(props.table.identifier, query, ['page'])\nconst setPerPage = (event: Event) => {\n const value = (event.target as HTMLSelectElement).value\n visitTable(props.table.identifier, { perPage: value === 'all' ? 'all' : Number(value) }, ['page'])\n}\n\n// Load more / infinite scroll: the server returns every record up to the requested page,\n// so asking for the next page appends it (and reloads keep what was already shown). A\n// request that fails shows a retry control instead of staying on \"Loading more…\"; infinite\n// scroll waits for the retry rather than requesting again.\nconst loading = ref(false)\nconst failed = ref(false)\nconst sentinel = ref<HTMLElement | null>(null)\nlet observer: IntersectionObserver | null = null\n\nwatch(\n () => pagination.value?.to,\n () => {\n loading.value = false\n failed.value = false\n },\n)\n\nconst loadMore = () => {\n if (!next.value || loading.value) return\n\n let succeeded = false\n let cancelled = false\n loading.value = true\n failed.value = false\n visitTable(props.table.identifier, next.value, ['page'], {\n onSuccess: () => {\n succeeded = true\n },\n onCancel: () => {\n cancelled = true\n },\n onFinish: () => {\n loading.value = false\n if (!succeeded && !cancelled) failed.value = true\n },\n })\n}\n\nwatch(\n [sentinel, () => appending.value?.mode, next, failed],\n ([element, mode, query, hasFailed]) => {\n observer?.disconnect()\n observer = null\n\n if (\n !element ||\n mode !== 'infinite' ||\n !query ||\n hasFailed ||\n typeof IntersectionObserver === 'undefined'\n ) {\n return\n }\n\n observer = new IntersectionObserver((entries) => {\n if (entries.some((entry) => entry.isIntersecting)) loadMore()\n })\n observer.observe(element)\n },\n { flush: 'post' },\n)\n\nonBeforeUnmount(() => observer?.disconnect())\n</script>\n\n<template>\n <div v-if=\"pagination\" class=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div class=\"text-muted-foreground flex items-center gap-3 text-sm\">\n <span>{{ summary }}</span>\n <span\n v-if=\"pendingTotal\"\n data-slot=\"pagination-total\"\n aria-busy=\"true\"\n :aria-label=\"t('loading', {}, 'Loading')\"\n class=\"bg-muted-foreground/20 inline-block h-4 w-12 animate-pulse rounded-md\"\n />\n <label v-if=\"pagination.pageOptions.length > 1\" class=\"flex items-center gap-2\">\n <span class=\"sr-only sm:not-sr-only\">{{ t('table.per_page', {}, 'Per page') }}</span>\n <select\n :value=\"String(pagination.perPage)\"\n class=\"border-input h-8 rounded-md border bg-transparent px-2 text-sm\"\n @change=\"setPerPage\"\n >\n <option v-for=\"option in pagination.pageOptions\" :key=\"option\" :value=\"String(option)\">\n {{ option === 'all' ? t('table.all', {}, 'All') : format.number(option) }}\n </option>\n </select>\n </label>\n </div>\n <template v-if=\"appending\">\n <template v-if=\"next\">\n <div v-if=\"failed\" class=\"flex items-center gap-2 text-sm\" role=\"alert\">\n <span class=\"text-destructive\">{{\n t('table.load_more_failed', {}, \"Couldn't load more records.\")\n }}</span>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" @click=\"loadMore\">{{\n t('retry', {}, 'Retry')\n }}</Button>\n </div>\n <div\n v-else-if=\"appending.mode === 'infinite'\"\n ref=\"sentinel\"\n class=\"text-muted-foreground text-sm\"\n aria-live=\"polite\"\n >\n {{ loading ? t('table.loading_more', {}, 'Loading more…') : '' }}\n </div>\n <Button\n v-else\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n :disabled=\"loading\"\n @click=\"loadMore\"\n >\n {{\n loading ? t('table.loading_more', {}, 'Loading more…') : t('load_more', {}, 'Load more')\n }}\n </Button>\n </template>\n </template>\n <nav\n v-else-if=\"previous || next\"\n class=\"flex items-center gap-1\"\n :aria-label=\"t('pagination', {}, 'Pagination')\"\n >\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-first\"\n :disabled=\"extremes.first === null\"\n :aria-label=\"t('table.first_page', {}, 'First page')\"\n @click=\"goTo(1)\"\n ><Icon\n name=\"alfakit::support.pagination.first-button\"\n :fallback=\"ChevronsLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!previous\"\n :aria-label=\"t('table.previous', {}, 'Previous')\"\n @click=\"visit(previous)\"\n ><Icon\n name=\"alfakit::support.pagination.previous-button\"\n :fallback=\"ChevronLeftIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <template v-if=\"numbered && !numbered.simple\">\n <template v-for=\"(page, index) in pages\" :key=\"page === null ? `gap-${index}` : page\">\n <span v-if=\"page === null\" class=\"text-muted-foreground px-1\">…</span>\n <Button\n v-else\n type=\"button\"\n :variant=\"page === numbered.currentPage ? 'default' : 'outline'\"\n size=\"icon-sm\"\n :aria-current=\"page === numbered.currentPage ? 'page' : undefined\"\n @click=\"goTo(page)\"\n >{{ format.number(page) }}</Button\n >\n </template>\n </template>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n :disabled=\"!next\"\n :aria-label=\"t('table.next', {}, 'Next')\"\n @click=\"visit(next)\"\n @pointerenter=\"prefetchNext\"\n @focus=\"prefetchNext\"\n ><Icon\n name=\"alfakit::support.pagination.next-button\"\n :fallback=\"ChevronRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n <Button\n v-if=\"extremes\"\n type=\"button\"\n variant=\"outline\"\n size=\"icon-sm\"\n data-slot=\"pagination-last\"\n :disabled=\"extremes.last === null\"\n :aria-label=\"t('table.last_page', {}, 'Last page')\"\n @click=\"extremes.last !== null && goTo(extremes.last)\"\n ><Icon\n name=\"alfakit::support.pagination.last-button\"\n :fallback=\"ChevronsRightIcon\"\n class=\"rtl:rotate-180\"\n /></Button>\n </nav>\n </div>\n</template>\n"],"mappings":"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"}
|
|
@@ -20,7 +20,8 @@ var b = ["data-slot"], x = {
|
|
|
20
20
|
cell: {},
|
|
21
21
|
recordKey: {},
|
|
22
22
|
token: {},
|
|
23
|
-
component: {}
|
|
23
|
+
component: {},
|
|
24
|
+
fromRegistry: { type: Boolean }
|
|
24
25
|
},
|
|
25
26
|
setup(d) {
|
|
26
27
|
let w = d, T = o(() => w.column), { update: E, saving: D, error: O } = a(w), k = _(), A = o(() => w.cell.state === null || w.cell.state === void 0 ? "" : String(w.cell.state)), j = m(A.value), M = o(() => !!(w.cell.prefix || w.cell.suffix));
|