@conduction/nextcloud-vue 2.58.0 → 2.60.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +12 -2
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +1 -2
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js +14 -1
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +0 -3
- package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +1 -2
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +39 -0
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +46 -4
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +224 -9
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +79 -25
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue2.js +42 -3
- package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue2.js.map +1 -1
- package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue3.js +39 -6
- package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue3.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +58 -5
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +13 -5
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
- package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue.js +10 -0
- package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue.js.map +1 -0
- package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue2.js +39 -0
- package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue2.js.map +1 -0
- package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue3.js +16 -0
- package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue3.js.map +1 -0
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +9 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +117 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +147 -89
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnContextMenu/CnContextMenu.vue2.js +6 -1
- package/dist/esm/components/CnContextMenu/CnContextMenu.vue2.js.map +1 -1
- package/dist/esm/components/CnContextMenu/CnContextMenu.vue3.js.map +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +10 -0
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +259 -0
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +131 -0
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +10 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +116 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js +24 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +116 -15
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +27 -14
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue2.js +13 -6
- package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue2.js.map +1 -1
- package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue3.js +2 -0
- package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +532 -29
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +300 -142
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue.js +10 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue.js.map +1 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue2.js +237 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue2.js.map +1 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue3.js +120 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue3.js.map +1 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue.js +10 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue.js.map +1 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js +77 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js +27 -0
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js +1 -2
- package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +3 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +17 -17
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesWidget/CnFilesWidget.vue2.js +4 -21
- package/dist/esm/components/CnFilesWidget/CnFilesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesWidget/CnFilesWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js +0 -13
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue3.js +8 -8
- package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFlowsPage/CnFlowsPage.vue3.js +3 -2
- package/dist/esm/components/CnFlowsPage/CnFlowsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +169 -12
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +15 -7
- package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue2.js +37 -3
- package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue2.js.map +1 -1
- package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue3.js +44 -16
- package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +199 -16
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +20 -10
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/manifestActionDispatch.js +31 -11
- package/dist/esm/components/CnIndexPage/manifestActionDispatch.js.map +1 -1
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue2.js.map +1 -1
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue3.js +1 -2
- package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue3.js.map +1 -1
- package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js +0 -1
- package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnLinkButtonWidget/CnLinkButtonWidget.vue2.js +2 -17
- package/dist/esm/components/CnLinkButtonWidget/CnLinkButtonWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnLinkButtonWidget/CnLinkButtonWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnLogsPage/CnLogsPage.vue2.js +35 -11
- package/dist/esm/components/CnLogsPage/CnLogsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnLogsPage/CnLogsPage.vue3.js +3 -2
- package/dist/esm/components/CnLogsPage/CnLogsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue.js +10 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue.js.map +1 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue2.js +150 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue2.js.map +1 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue3.js +106 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue3.js.map +1 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue.js +9 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue.js.map +1 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js +47 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue3.js +17 -0
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +23 -5
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +49 -0
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue2.js +6 -0
- package/dist/esm/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue2.js +46 -0
- package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue3.js +15 -3
- package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectList/CnObjectList.vue2.js +19 -3
- package/dist/esm/components/CnObjectList/CnObjectList.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectList/CnObjectList.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +45 -15
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +4 -2
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectRow/CnObjectRow.vue2.js +24 -6
- package/dist/esm/components/CnObjectRow/CnObjectRow.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectRow/CnObjectRow.vue3.js +1 -1
- package/dist/esm/components/CnObjectRow/CnObjectRow.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +0 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js +4 -2
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +37 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js +29 -13
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js +100 -3
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRowActions/CnRowActions.vue2.js +7 -2
- package/dist/esm/components/CnRowActions/CnRowActions.vue2.js.map +1 -1
- package/dist/esm/components/CnRowActions/CnRowActions.vue3.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js +50 -3
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue.js +10 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue.js.map +1 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js +186 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js +46 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -0
- package/dist/esm/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue2.js +5 -3
- package/dist/esm/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue.js +11 -0
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue.js.map +1 -0
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js +298 -0
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js +77 -0
- package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue.js +10 -0
- package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue.js.map +1 -0
- package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue2.js +169 -0
- package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue2.js.map +1 -0
- package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue3.js +48 -0
- package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue3.js.map +1 -0
- package/dist/esm/components/CnTabs/CnTab.vue2.js +35 -0
- package/dist/esm/components/CnTabs/CnTab.vue2.js.map +1 -1
- package/dist/esm/components/CnTabs/CnTab.vue3.js.map +1 -1
- package/dist/esm/components/CnTabs/CnTabs.vue2.js +120 -7
- package/dist/esm/components/CnTabs/CnTabs.vue2.js.map +1 -1
- package/dist/esm/components/CnTabs/CnTabs.vue3.js +57 -5
- package/dist/esm/components/CnTabs/CnTabs.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +59 -4
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +6 -2
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +3 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +1 -0
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js +10 -0
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js.map +1 -0
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +484 -0
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js +115 -0
- package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue.js +10 -0
- package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue.js.map +1 -0
- package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue2.js +189 -0
- package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue2.js.map +1 -0
- package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue3.js +74 -0
- package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue3.js.map +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +82 -8
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsCard.vue2.js +3 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js +3 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue2.js +6 -0
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue3.js +68 -53
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue2.js +17 -0
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue3.js +21 -19
- package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/collectives/CnCollectivesCard.vue2.js +3 -1
- package/dist/esm/integrations/builtin/collectives/CnCollectivesCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/collectives/CnCollectivesCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue2.js +3 -1
- package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/deck/CnDeckCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/deck/CnDeckCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/deck/CnDeckCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/email/CnEmailCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/email/CnEmailTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/email/CnEmailTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/email/CnEmailTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/flow/CnFlowCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/flow/CnFlowCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/flow/CnFlowCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/flow/CnFlowTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/flow/CnFlowTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/flow/CnFlowTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/flow/CnFlowTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/forms/CnFormsCard.vue2.js +3 -1
- package/dist/esm/integrations/builtin/forms/CnFormsCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/forms/CnFormsCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/forms/CnFormsTab.vue2.js +3 -1
- package/dist/esm/integrations/builtin/forms/CnFormsTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/forms/CnFormsTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/forms/CnFormsTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/maps/CnMapsCard.vue2.js +3 -1
- package/dist/esm/integrations/builtin/maps/CnMapsCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/maps/CnMapsCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/maps/CnMapsTab.vue2.js +3 -1
- package/dist/esm/integrations/builtin/maps/CnMapsTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/maps/CnMapsTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/maps/CnMapsTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectCard.vue2.js +3 -1
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue2.js +3 -1
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/polls/CnPollsCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/polls/CnPollsCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/polls/CnPollsCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/polls/CnPollsTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/polls/CnPollsTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/polls/CnPollsTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/polls/CnPollsTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/shares/CnSharesTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/shares/CnSharesTab.vue3.js +3 -6
- package/dist/esm/integrations/builtin/shares/CnSharesTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/talk/CnTalkCard.vue2.js +3 -1
- package/dist/esm/integrations/builtin/talk/CnTalkCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/talk/CnTalkCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/talk/CnTalkTab.vue2.js +3 -1
- package/dist/esm/integrations/builtin/talk/CnTalkTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/talk/CnTalkTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/talk/CnTalkTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue3.js +1 -2
- package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/xwiki/CnXwikiCard.vue2.js +4 -1
- package/dist/esm/integrations/builtin/xwiki/CnXwikiCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/xwiki/CnXwikiCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue2.js +6 -3
- package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue3.js +2 -4
- package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue3.js.map +1 -1
- package/dist/esm/l10n/en.json.js +55 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +55 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +998 -7
- package/dist/esm/utils/actionLink.js +5 -0
- package/dist/esm/utils/actionLink.js.map +1 -1
- package/dist/esm/utils/actionsDispatcher.js +16 -1
- package/dist/esm/utils/actionsDispatcher.js.map +1 -1
- package/dist/esm/utils/dateVariant.js +124 -0
- package/dist/esm/utils/dateVariant.js.map +1 -0
- package/dist/esm/utils/detailActionModel.js +260 -0
- package/dist/esm/utils/detailActionModel.js.map +1 -0
- package/dist/esm/utils/dueRule.js +84 -0
- package/dist/esm/utils/dueRule.js.map +1 -0
- package/dist/esm/utils/fetchAggregate.js +37 -1
- package/dist/esm/utils/fetchAggregate.js.map +1 -1
- package/dist/esm/utils/fetchFilterCounts.js +186 -0
- package/dist/esm/utils/fetchFilterCounts.js.map +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js +5 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/linkNavigation.js +6 -3
- package/dist/esm/utils/linkNavigation.js.map +1 -1
- package/dist/esm/utils/readPath.js +30 -0
- package/dist/esm/utils/readPath.js.map +1 -0
- package/dist/esm/utils/rowAuxClick.js +30 -5
- package/dist/esm/utils/rowAuxClick.js.map +1 -1
- package/dist/esm/utils/safeHref.js +18 -3
- package/dist/esm/utils/safeHref.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +15855 -9353
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +998 -7
- package/l10n/en.json +55 -1
- package/l10n/nl.json +55 -1
- package/package.json +1 -1
- package/scripts/.jsdoc-baselines.json +3 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +14 -5
- package/src/components/CnActionsMenu/CnActionsMenu.vue +14 -4
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +1 -2
- package/src/components/CnAppNav/CnAppNav.md +26 -0
- package/src/components/CnAppNav/CnAppNav.vue +104 -1
- package/src/components/CnBannerWidget/CnBannerWidget.vue +365 -10
- package/src/components/CnBannerWidgetForm/CnBannerWidgetForm.vue +65 -3
- package/src/components/CnBoardView/CnBoardView.vue +90 -5
- package/src/components/CnBrandStripe/CnBrandStripe.md +22 -0
- package/src/components/CnBrandStripe/CnBrandStripe.vue +100 -0
- package/src/components/CnBrandStripe/index.js +4 -0
- package/src/components/CnCardGrid/CnCardGrid.vue +9 -1
- package/src/components/CnCellRenderer/CnCellRenderer.vue +207 -1
- package/src/components/CnContextMenu/CnContextMenu.vue +6 -1
- package/src/components/CnConversationThread/CnConversationThread.md +51 -0
- package/src/components/CnConversationThread/CnConversationThread.vue +457 -0
- package/src/components/CnConversationThread/CnConversationWidget.vue +144 -0
- package/src/components/CnConversationThread/index.js +4 -0
- package/src/components/CnDataTable/CnDataTable.md +1 -1
- package/src/components/CnDataTable/CnDataTable.vue +131 -17
- package/src/components/CnDateAxisView/CnDateAxisView.vue +15 -6
- package/src/components/CnDetailPage/CnDetailPage.md +17 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +712 -49
- package/src/components/CnDocumentReviewList/CnDocumentReviewList.md +55 -0
- package/src/components/CnDocumentReviewList/CnDocumentReviewList.vue +384 -0
- package/src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue +108 -0
- package/src/components/CnDocumentReviewList/index.js +4 -0
- package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +1 -2
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +5 -3
- package/src/components/CnFilesWidget/CnFilesWidget.vue +4 -21
- package/src/components/CnFlowRunsWidget/CnFlowRunsWidget.vue +8 -21
- package/src/components/CnFlowsPage/CnFlowsPage.vue +2 -1
- package/src/components/CnHeaderWidget/CnHeaderWidget.vue +189 -14
- package/src/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue +53 -3
- package/src/components/CnIndexPage/CnIndexPage.vue +210 -17
- package/src/components/CnIndexPage/manifestActionDispatch.js +31 -11
- package/src/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue +1 -2
- package/src/components/CnInteractionFormWidget/CnInteractionFormWidget.vue +0 -1
- package/src/components/CnLinkButtonWidget/CnLinkButtonWidget.vue +2 -17
- package/src/components/CnLogsPage/CnLogsPage.vue +37 -12
- package/src/components/CnNextStepCard/CnNextStepCard.md +40 -0
- package/src/components/CnNextStepCard/CnNextStepCard.vue +319 -0
- package/src/components/CnNextStepCard/CnNextStepWidget.vue +59 -0
- package/src/components/CnNextStepCard/index.js +4 -0
- package/src/components/CnObjectCard/CnObjectCard.vue +24 -6
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +49 -0
- package/src/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue +6 -0
- package/src/components/CnObjectKanban/CnObjectKanban.vue +86 -2
- package/src/components/CnObjectList/CnObjectList.vue +19 -3
- package/src/components/CnObjectListWidget/CnObjectListWidget.vue +47 -15
- package/src/components/CnObjectRow/CnObjectRow.vue +25 -7
- package/src/components/CnObjectSidebar/CnFilesTab.vue +0 -1
- package/src/components/CnPageRenderer/CnPageRenderer.vue +2 -0
- package/src/components/CnQuickFilterBar/CnQuickFilterBar.md +3 -0
- package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +60 -1
- package/src/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue +100 -3
- package/src/components/CnRowActions/CnRowActions.vue +7 -2
- package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +50 -3
- package/src/components/CnSegmentedControl/CnSegmentedControl.md +46 -0
- package/src/components/CnSegmentedControl/CnSegmentedControl.vue +291 -0
- package/src/components/CnSegmentedControl/index.js +4 -0
- package/src/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue +5 -3
- package/src/components/CnStackedBarWidget/CnStackedBarWidget.md +15 -0
- package/src/components/CnStackedBarWidget/CnStackedBarWidget.vue +414 -0
- package/src/components/CnStackedBarWidget/index.js +14 -0
- package/src/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue +224 -0
- package/src/components/CnStackedBarWidgetForm/index.js +4 -0
- package/src/components/CnTabs/CnTab.vue +35 -0
- package/src/components/CnTabs/CnTabs.vue +251 -13
- package/src/components/CnTabsWidget/CnTabsWidget.vue +63 -4
- package/src/components/CnTasksWidget/CnTasksWidget.vue +4 -1
- package/src/components/CnWeekStripWidget/CnWeekStripWidget.md +31 -0
- package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +668 -0
- package/src/components/CnWeekStripWidget/index.js +14 -0
- package/src/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue +265 -0
- package/src/components/CnWeekStripWidgetForm/index.js +4 -0
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +74 -0
- package/src/components/index.js +11 -0
- package/src/css/detail-page.css +47 -0
- package/src/css/table.css +26 -0
- package/src/index.js +9 -0
- package/src/integrations/builtin/analytics/CnAnalyticsCard.vue +3 -2
- package/src/integrations/builtin/analytics/CnAnalyticsTab.vue +5 -6
- package/src/integrations/builtin/bookmarks/CnBookmarksCard.vue +12 -1
- package/src/integrations/builtin/bookmarks/CnBookmarksTab.vue +23 -6
- package/src/integrations/builtin/bookmarks/__tests__/CnBookmarksTab.spec.js +7 -2
- package/src/integrations/builtin/collectives/CnCollectivesCard.vue +3 -2
- package/src/integrations/builtin/collectives/CnCollectivesTab.vue +5 -6
- package/src/integrations/builtin/cospend/CnCospendCard.vue +2 -2
- package/src/integrations/builtin/cospend/CnCospendTab.vue +3 -4
- package/src/integrations/builtin/deck/CnDeckCard.vue +2 -2
- package/src/integrations/builtin/deck/CnDeckTab.vue +3 -4
- package/src/integrations/builtin/email/CnEmailCard.vue +6 -2
- package/src/integrations/builtin/email/CnEmailTab.vue +7 -4
- package/src/integrations/builtin/flow/CnFlowCard.vue +2 -2
- package/src/integrations/builtin/flow/CnFlowTab.vue +3 -4
- package/src/integrations/builtin/forms/CnFormsCard.vue +3 -2
- package/src/integrations/builtin/forms/CnFormsTab.vue +5 -6
- package/src/integrations/builtin/maps/CnMapsCard.vue +3 -2
- package/src/integrations/builtin/maps/CnMapsTab.vue +5 -6
- package/src/integrations/builtin/maps/__tests__/CnMapsTab.spec.js +9 -0
- package/src/integrations/builtin/openproject/CnOpenprojectCard.vue +3 -2
- package/src/integrations/builtin/openproject/CnOpenprojectTab.vue +5 -6
- package/src/integrations/builtin/photos/CnPhotosCard.vue +2 -2
- package/src/integrations/builtin/photos/CnPhotosTab.vue +3 -4
- package/src/integrations/builtin/polls/CnPollsCard.vue +2 -2
- package/src/integrations/builtin/polls/CnPollsTab.vue +3 -4
- package/src/integrations/builtin/shares/CnSharesTab.vue +3 -6
- package/src/integrations/builtin/talk/CnTalkCard.vue +3 -2
- package/src/integrations/builtin/talk/CnTalkTab.vue +5 -6
- package/src/integrations/builtin/time-tracker/CnTimeTrackerCard.vue +2 -2
- package/src/integrations/builtin/time-tracker/CnTimeTrackerTab.vue +3 -4
- package/src/integrations/builtin/xwiki/CnXwikiCard.vue +4 -2
- package/src/integrations/builtin/xwiki/CnXwikiTab.vue +7 -7
- package/src/integrations/builtin/xwiki/__tests__/CnXwikiTab.spec.js +9 -0
- package/src/schemas/app-manifest-v2.schema.json +389 -1
- package/src/schemas/app-manifest.schema.json +2 -1
- package/src/utils/actionLink.js +5 -0
- package/src/utils/actionsDispatcher.js +15 -0
- package/src/utils/dateVariant.js +120 -0
- package/src/utils/detailActionModel.js +256 -0
- package/src/utils/dueRule.js +94 -0
- package/src/utils/fetchAggregate.js +36 -0
- package/src/utils/fetchFilterCounts.js +182 -0
- package/src/utils/index.js +1 -0
- package/src/utils/libraryWidgetKeys.js +5 -0
- package/src/utils/linkNavigation.js +6 -3
- package/src/utils/readPath.js +27 -0
- package/src/utils/rowAuxClick.js +29 -4
- package/src/utils/safeHref.js +18 -3
- package/src/utils/validateManifestV2.compiled.js +2 -2
|
@@ -119,6 +119,7 @@
|
|
|
119
119
|
:views="viewsForControl"
|
|
120
120
|
:loading="savedViewsLoading"
|
|
121
121
|
:currentUserId="currentSavedViewsUserId"
|
|
122
|
+
:counts="savedViewCounts"
|
|
122
123
|
@apply="onApplySavedView"
|
|
123
124
|
@saveRequest="showSaveViewDialog = true"
|
|
124
125
|
@deleteRequest="onDeleteViewRequest" />
|
|
@@ -171,6 +172,7 @@
|
|
|
171
172
|
:multiple="quickFilterMultiple"
|
|
172
173
|
:activeIndex="activeQuickFilterIndex"
|
|
173
174
|
:selectedIndices="selectedQuickFilterIndices"
|
|
175
|
+
:counts="tabCounts"
|
|
174
176
|
@update:activeIndex="onQuickFilterChange"
|
|
175
177
|
@update:selectedIndices="onQuickFilterMultiChange" />
|
|
176
178
|
</template>
|
|
@@ -451,6 +453,7 @@
|
|
|
451
453
|
@sort="onSortEvent"
|
|
452
454
|
@select="onSelect"
|
|
453
455
|
@rowClick="onRowClick"
|
|
456
|
+
@rowAuxClick="onRowAuxClick"
|
|
454
457
|
@rowContextMenu="onRowContextMenu">
|
|
455
458
|
<!-- Pass through column slots -->
|
|
456
459
|
<template
|
|
@@ -544,10 +547,12 @@
|
|
|
544
547
|
:statusField="board.statusField || 'status'"
|
|
545
548
|
:cardFields="board.cardFields || []"
|
|
546
549
|
:swimlaneField="board.swimlaneField || ''"
|
|
550
|
+
:dueRule="board.dueRule || null"
|
|
547
551
|
:rowKey="rowKey"
|
|
548
552
|
:runTransition="runTransition"
|
|
549
553
|
:paged="isPaged"
|
|
550
554
|
@cardClick="onRowClick"
|
|
555
|
+
@cardAuxClick="onRowAuxClick"
|
|
551
556
|
@moved="onBoardMoved" />
|
|
552
557
|
|
|
553
558
|
<!--
|
|
@@ -563,7 +568,8 @@
|
|
|
563
568
|
:laneField="dateAxis.laneField || ''"
|
|
564
569
|
:labelField="dateAxis.labelField || ''"
|
|
565
570
|
:rowKey="rowKey"
|
|
566
|
-
@rowClick="onRowClick"
|
|
571
|
+
@rowClick="onRowClick"
|
|
572
|
+
@rowAuxClick="onRowAuxClick" />
|
|
567
573
|
|
|
568
574
|
<!-- List view -->
|
|
569
575
|
<CnObjectList
|
|
@@ -576,6 +582,7 @@
|
|
|
576
582
|
:rowKey="rowKey"
|
|
577
583
|
:emptyText="emptyText"
|
|
578
584
|
@click="onRowClick"
|
|
585
|
+
@auxClick="onRowAuxClick"
|
|
579
586
|
@select="onSelect">
|
|
580
587
|
<!--
|
|
581
588
|
List-item slot resolution priority (highest first):
|
|
@@ -596,6 +603,7 @@
|
|
|
596
603
|
:register="register"
|
|
597
604
|
:selected="selected"
|
|
598
605
|
@click="(...args) => onRowClick(object, args.find(isDomEvent))"
|
|
606
|
+
@mousedown="onCustomItemMouseDown"
|
|
599
607
|
@auxclick="onCustomItemAuxClick(object, $event)"
|
|
600
608
|
@select="onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))" />
|
|
601
609
|
</template>
|
|
@@ -629,6 +637,7 @@
|
|
|
629
637
|
:rowKey="rowKey"
|
|
630
638
|
:emptyText="emptyText"
|
|
631
639
|
@click="onRowClick"
|
|
640
|
+
@auxClick="onRowAuxClick"
|
|
632
641
|
@select="onSelect">
|
|
633
642
|
<!--
|
|
634
643
|
Card slot resolution priority (highest first):
|
|
@@ -649,6 +658,7 @@
|
|
|
649
658
|
:register="register"
|
|
650
659
|
:selected="selected"
|
|
651
660
|
@click="(...args) => onRowClick(object, args.find(isDomEvent))"
|
|
661
|
+
@mousedown="onCustomItemMouseDown"
|
|
652
662
|
@auxclick="onCustomItemAuxClick(object, $event)"
|
|
653
663
|
@select="onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))" />
|
|
654
664
|
</template>
|
|
@@ -774,14 +784,16 @@ import { useSavedViewsApi } from '../../composables/useSavedViewsApi.js'
|
|
|
774
784
|
import { METADATA_COLUMNS } from '../../constants/metadata.js'
|
|
775
785
|
import { routeHref } from '../../utils/actionLink.js'
|
|
776
786
|
import { buildOnSuccessRoute, resolveRegisteredHandler } from '../../utils/actionsDispatcher.js'
|
|
787
|
+
import { fetchFilterCounts } from '../../utils/fetchFilterCounts.js'
|
|
777
788
|
import { buildExportUrl } from '../../utils/indexExportHelpers.js'
|
|
778
789
|
import { openRowTarget } from '../../utils/linkNavigation.js'
|
|
779
|
-
import { resolveClaimedTeams, resolveClaimTokens, splitViewsIntoTabs, viewAsTab } from '../../utils/listLenses.js'
|
|
790
|
+
import { resolveClaimedTeams, resolveClaimTokens, splitViewsIntoTabs, viewAsTab, viewIdOf } from '../../utils/listLenses.js'
|
|
780
791
|
import { LIST_SHORTCUTS, listPaletteCommands, shortcutFor } from '../../utils/listShortcuts.js'
|
|
781
792
|
import { multiKeySort } from '../../utils/multiKeySort.js'
|
|
782
793
|
import { resolveDeepTokens, resolveFilterValue } from '../../utils/resolveFilterTokens.js'
|
|
794
|
+
import { resolveFilterMap } from '../../utils/routeFilters.js'
|
|
783
795
|
import { availableRowActions, DEFAULT_ROW_ACTION_FIELD, refusalReasonFor, undeclaredRowActions } from '../../utils/rowActionAvailability.js'
|
|
784
|
-
import { isNewTabClick, isRowMiddleClick, markNewTabHandled } from '../../utils/rowAuxClick.js'
|
|
796
|
+
import { isNewTabClick, isNewTabHandled, isRowMiddleClick, markNewTabHandled, preventMiddleClickAutoscroll } from '../../utils/rowAuxClick.js'
|
|
785
797
|
import { DEFAULT_ROW_INDICATOR_CAP } from '../../utils/rowIndicators.js'
|
|
786
798
|
import { buildRouteQueryFromViewState, buildViewCreatePayload, extractViewState, extractViewStateFromRouteQuery, savedViewScope, viewMatchesScope } from '../../utils/savedViewHelpers.js'
|
|
787
799
|
import { columnsFromSchema } from '../../utils/schema.js'
|
|
@@ -995,7 +1007,8 @@ function namedFilterToQuery(values) {
|
|
|
995
1007
|
* @event {object} mass-export — Mass export confirmed. Payload: { ids, format }
|
|
996
1008
|
* @event {object} mass-import — Mass import confirmed. Payload: import data
|
|
997
1009
|
* @event {void} refresh — Refresh button clicked
|
|
998
|
-
* @event {object} row-click — Table row or card clicked
|
|
1010
|
+
* @event {object} row-click — Table row or card clicked. Payload: (row, event) — the row object and the native click event
|
|
1011
|
+
* @event {object} row-aux-click — Table row or card middle-clicked. Payload: (row, event) — the row object and the native auxclick event
|
|
999
1012
|
* @event {{ key: string, order: string }} sort — Column sort changed
|
|
1000
1013
|
* @event {number} page-changed — Pagination page changed
|
|
1001
1014
|
* @event {number} page-size-changed — Pagination page size changed
|
|
@@ -1191,7 +1204,6 @@ export default {
|
|
|
1191
1204
|
default: null,
|
|
1192
1205
|
},
|
|
1193
1206
|
|
|
1194
|
-
/* eslint-disable vue/no-unused-properties -- used in useSelfFetchList */
|
|
1195
1207
|
/**
|
|
1196
1208
|
* Base filter for the self-fetch path. String values of the form
|
|
1197
1209
|
* `"@route.<name>"` / `":<name>"` are interpolated from `$route.params`.
|
|
@@ -1200,7 +1212,6 @@ export default {
|
|
|
1200
1212
|
type: Object,
|
|
1201
1213
|
default: null,
|
|
1202
1214
|
},
|
|
1203
|
-
/* eslint-enable vue/no-unused-properties */
|
|
1204
1215
|
|
|
1205
1216
|
/**
|
|
1206
1217
|
* Self-fetch mode only — an array of clickable filter tabs rendered as
|
|
@@ -2203,6 +2214,19 @@ export default {
|
|
|
2203
2214
|
default: () => [],
|
|
2204
2215
|
},
|
|
2205
2216
|
|
|
2217
|
+
/**
|
|
2218
|
+
* Which saved views show how many records they match: `true` for all
|
|
2219
|
+
* of them (tabs and the entries in the views control), or a list of
|
|
2220
|
+
* view ids. Off by default, so no count request is made. A quick
|
|
2221
|
+
* filter opts in on its own entry with `showCount: true`.
|
|
2222
|
+
*
|
|
2223
|
+
* @type {boolean|string[]}
|
|
2224
|
+
*/
|
|
2225
|
+
viewCounts: {
|
|
2226
|
+
type: [Boolean, Array],
|
|
2227
|
+
default: false,
|
|
2228
|
+
},
|
|
2229
|
+
|
|
2206
2230
|
/**
|
|
2207
2231
|
* The teams this person may claim. The instance decides this list; it
|
|
2208
2232
|
* is the membership side of `claimedTeams`.
|
|
@@ -2568,6 +2592,7 @@ export default {
|
|
|
2568
2592
|
'quick-filter-change',
|
|
2569
2593
|
'refresh',
|
|
2570
2594
|
'row-click',
|
|
2595
|
+
'row-aux-click',
|
|
2571
2596
|
'search',
|
|
2572
2597
|
'select',
|
|
2573
2598
|
'sort',
|
|
@@ -2640,6 +2665,10 @@ export default {
|
|
|
2640
2665
|
data() {
|
|
2641
2666
|
return {
|
|
2642
2667
|
currentViewMode: this.viewMode,
|
|
2668
|
+
/** Count per tab-strip index, for the entries that asked for one; null = none. */
|
|
2669
|
+
tabCounts: null,
|
|
2670
|
+
/** Count per saved-view id, for the views control; null = none. */
|
|
2671
|
+
savedViewCounts: null,
|
|
2643
2672
|
/**
|
|
2644
2673
|
* The non-`_` query keys this page owns, i.e. may clear on the next
|
|
2645
2674
|
* persist. Seeded with what it adopted from the query on load, and
|
|
@@ -2810,6 +2839,9 @@ export default {
|
|
|
2810
2839
|
* that is what Add does (no host `@add` listener) and the router can
|
|
2811
2840
|
* resolve it. The bar then renders Add as a real link; null otherwise.
|
|
2812
2841
|
*
|
|
2842
|
+
* `$.vnode.props` is not reactive, so an `add` listener attached or
|
|
2843
|
+
* removed after mount does not re-evaluate this.
|
|
2844
|
+
*
|
|
2813
2845
|
* @return {string|object|null}
|
|
2814
2846
|
*/
|
|
2815
2847
|
addLinkTo() {
|
|
@@ -3229,6 +3261,55 @@ export default {
|
|
|
3229
3261
|
return this.splitSavedViews.control
|
|
3230
3262
|
},
|
|
3231
3263
|
|
|
3264
|
+
/**
|
|
3265
|
+
* The filters whose record count this page shows: quick filters that
|
|
3266
|
+
* set `showCount`, and the saved views `viewCounts` names. Empty when
|
|
3267
|
+
* nothing opted in, which is what keeps the page from making a count
|
|
3268
|
+
* request nobody asked for.
|
|
3269
|
+
*
|
|
3270
|
+
* @return {Array<{key: string, filter: object}>} The filters to count.
|
|
3271
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
|
|
3272
|
+
*/
|
|
3273
|
+
countEntries() {
|
|
3274
|
+
const entries = []
|
|
3275
|
+
const tabs = this.tabStripEntries || []
|
|
3276
|
+
const lens = this.lensTabs.length > 0
|
|
3277
|
+
tabs.forEach((tab, index) => {
|
|
3278
|
+
const wants = lens ? this.viewWantsCount(tab.id) : (tab && tab.showCount === true)
|
|
3279
|
+
if (wants && tab.narrowsToNothing !== true) {
|
|
3280
|
+
entries.push({ key: `tab:${index}`, filter: tab.filter || {} })
|
|
3281
|
+
}
|
|
3282
|
+
})
|
|
3283
|
+
for (const view of this.viewsForControl) {
|
|
3284
|
+
const id = viewIdOf(view)
|
|
3285
|
+
if (this.viewWantsCount(id)) {
|
|
3286
|
+
entries.push({ key: `view:${id}`, filter: viewAsTab(view).filter })
|
|
3287
|
+
}
|
|
3288
|
+
}
|
|
3289
|
+
return entries
|
|
3290
|
+
},
|
|
3291
|
+
|
|
3292
|
+
/**
|
|
3293
|
+
* Changes whenever the counts have to be fetched again: another set
|
|
3294
|
+
* of filters, another register or schema, or a list whose total moved
|
|
3295
|
+
* (a record was added, removed, or left a filter).
|
|
3296
|
+
*
|
|
3297
|
+
* @return {string} The signature.
|
|
3298
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
|
|
3299
|
+
*/
|
|
3300
|
+
countRequestKey() {
|
|
3301
|
+
if (this.countEntries.length === 0) {
|
|
3302
|
+
return ''
|
|
3303
|
+
}
|
|
3304
|
+
return JSON.stringify({
|
|
3305
|
+
r: this.register,
|
|
3306
|
+
s: this.exportSchemaSlug,
|
|
3307
|
+
f: this.filter || null,
|
|
3308
|
+
e: this.countEntries,
|
|
3309
|
+
t: Number(this.effectivePagination?.total ?? 0),
|
|
3310
|
+
})
|
|
3311
|
+
},
|
|
3312
|
+
|
|
3232
3313
|
/**
|
|
3233
3314
|
* What the tab strip shows: the page's lens tabs when it named any,
|
|
3234
3315
|
* else its quick filters. One strip, never two, so a person is not
|
|
@@ -4267,6 +4348,14 @@ export default {
|
|
|
4267
4348
|
},
|
|
4268
4349
|
|
|
4269
4350
|
watch: {
|
|
4351
|
+
countRequestKey: {
|
|
4352
|
+
immediate: true,
|
|
4353
|
+
/** @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views */
|
|
4354
|
+
handler() {
|
|
4355
|
+
this.loadFilterCounts()
|
|
4356
|
+
},
|
|
4357
|
+
},
|
|
4358
|
+
|
|
4270
4359
|
// Remember the whole folder set whenever no folder narrows the query.
|
|
4271
4360
|
folderSidebarLiveFacetValues: {
|
|
4272
4361
|
immediate: true,
|
|
@@ -4476,6 +4565,61 @@ export default {
|
|
|
4476
4565
|
},
|
|
4477
4566
|
|
|
4478
4567
|
methods: {
|
|
4568
|
+
/**
|
|
4569
|
+
* Whether a saved view shows its record count (`viewCounts`).
|
|
4570
|
+
*
|
|
4571
|
+
* @param {string} id The view id.
|
|
4572
|
+
* @return {boolean} True when the view opted in.
|
|
4573
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
|
|
4574
|
+
*/
|
|
4575
|
+
viewWantsCount(id) {
|
|
4576
|
+
if (this.viewCounts === true) {
|
|
4577
|
+
return true
|
|
4578
|
+
}
|
|
4579
|
+
return Array.isArray(this.viewCounts) && this.viewCounts.map(String).includes(String(id))
|
|
4580
|
+
},
|
|
4581
|
+
|
|
4582
|
+
/**
|
|
4583
|
+
* Fetch the record counts for the filters and views that asked for
|
|
4584
|
+
* one. Filters that narrow the same single field share one grouped
|
|
4585
|
+
* request. A failed count leaves that entry without a number.
|
|
4586
|
+
*
|
|
4587
|
+
* @return {Promise<void>}
|
|
4588
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
|
|
4589
|
+
*/
|
|
4590
|
+
async loadFilterCounts() {
|
|
4591
|
+
const requestKey = this.countRequestKey
|
|
4592
|
+
const schema = this.exportSchemaSlug
|
|
4593
|
+
if (requestKey === '' || !this.register || !schema) {
|
|
4594
|
+
this.tabCounts = null
|
|
4595
|
+
this.savedViewCounts = null
|
|
4596
|
+
return
|
|
4597
|
+
}
|
|
4598
|
+
const params = (this.$route && this.$route.params) || {}
|
|
4599
|
+
const ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}
|
|
4600
|
+
const counts = await fetchFilterCounts({
|
|
4601
|
+
register: this.register,
|
|
4602
|
+
schema,
|
|
4603
|
+
entries: this.countEntries.map((entry) => ({ key: entry.key, filter: resolveFilterMap(entry.filter, params, ctx) })),
|
|
4604
|
+
baseFilter: resolveFilterMap(this.filter, params, ctx),
|
|
4605
|
+
ctx,
|
|
4606
|
+
})
|
|
4607
|
+
if (requestKey !== this.countRequestKey) {
|
|
4608
|
+
return
|
|
4609
|
+
}
|
|
4610
|
+
const tabCounts = {}
|
|
4611
|
+
const viewCounts = {}
|
|
4612
|
+
for (const [key, value] of Object.entries(counts)) {
|
|
4613
|
+
if (key.startsWith('tab:')) {
|
|
4614
|
+
tabCounts[Number(key.slice(4))] = value
|
|
4615
|
+
} else {
|
|
4616
|
+
viewCounts[key.slice(5)] = value
|
|
4617
|
+
}
|
|
4618
|
+
}
|
|
4619
|
+
this.tabCounts = tabCounts
|
|
4620
|
+
this.savedViewCounts = viewCounts
|
|
4621
|
+
},
|
|
4622
|
+
|
|
4479
4623
|
// ── Split view (case-page-and-list-as-a-place) ──────────────────
|
|
4480
4624
|
|
|
4481
4625
|
/**
|
|
@@ -5565,21 +5709,60 @@ export default {
|
|
|
5565
5709
|
/**
|
|
5566
5710
|
* Row/card click: toggles selection when `selectable` (covers the custom
|
|
5567
5711
|
* `cardComponent` path), otherwise emits `row-click` for navigation. A
|
|
5568
|
-
* ctrl/cmd/shift
|
|
5712
|
+
* ctrl/cmd/shift click opens a named source's row in a new tab.
|
|
5569
5713
|
*
|
|
5570
5714
|
* The `@event` block below sits directly against its `$emit`, and must
|
|
5571
5715
|
* stay there. vue-docgen binds an event's description to the emit it
|
|
5572
5716
|
* IMMEDIATELY precedes.
|
|
5573
5717
|
*
|
|
5574
5718
|
* @param {object} row The clicked row object
|
|
5575
|
-
* @param {MouseEvent|KeyboardEvent} [event] The originating click
|
|
5719
|
+
* @param {MouseEvent|KeyboardEvent} [event] The originating click event.
|
|
5576
5720
|
*/
|
|
5577
5721
|
onRowClick(row, event) {
|
|
5722
|
+
if (!this.routeClickedRow(row, event)) {
|
|
5723
|
+
return
|
|
5724
|
+
}
|
|
5725
|
+
/**
|
|
5726
|
+
* @event row-click Emitted on a row/card click for navigation. Fires when `selectable` is false, OR when `rowClickToView` is set and something can open the row (selection then happens via the checkbox). Payload: `(row, event)` — the clicked row and the native click event (absent for a keyboard shortcut or map marker), so a host can open the row in a new tab on a ctrl/cmd/shift click with `openRowTarget`. A middle click emits `row-aux-click` instead.
|
|
5727
|
+
* @type {object} The clicked row object.
|
|
5728
|
+
*/
|
|
5729
|
+
this.$emit('row-click', ...(event ? [row, event] : [row]))
|
|
5730
|
+
},
|
|
5731
|
+
|
|
5732
|
+
/**
|
|
5733
|
+
* Row/card middle click: opens a named source's row in a new tab and
|
|
5734
|
+
* emits `row-aux-click`, not `row-click`, so a host whose `row-click`
|
|
5735
|
+
* listener navigates never moves the current tab away.
|
|
5736
|
+
*
|
|
5737
|
+
* @param {object} row The clicked row object
|
|
5738
|
+
* @param {MouseEvent} event The originating auxclick event.
|
|
5739
|
+
*/
|
|
5740
|
+
onRowAuxClick(row, event) {
|
|
5741
|
+
if (!this.routeClickedRow(row, event)) {
|
|
5742
|
+
return
|
|
5743
|
+
}
|
|
5744
|
+
/**
|
|
5745
|
+
* @event row-aux-click Emitted on a row/card middle click, under the same conditions as `row-click`, so a host can open the row in a new tab with `openRowTarget`. Payload: `(row, event)` — the clicked row and the native auxclick event.
|
|
5746
|
+
* @type {object} The clicked row object.
|
|
5747
|
+
*/
|
|
5748
|
+
this.$emit('row-aux-click', row, event)
|
|
5749
|
+
},
|
|
5750
|
+
|
|
5751
|
+
/**
|
|
5752
|
+
* The shared part of a row click and a middle click: on a selectable
|
|
5753
|
+
* page a plain click toggles selection instead, and a named source opens
|
|
5754
|
+
* its own row.
|
|
5755
|
+
*
|
|
5756
|
+
* @param {object} row The clicked row object
|
|
5757
|
+
* @param {MouseEvent|KeyboardEvent} [event] The originating event.
|
|
5758
|
+
* @return {boolean} Whether the click navigates, so the caller emits.
|
|
5759
|
+
*/
|
|
5760
|
+
routeClickedRow(row, event) {
|
|
5578
5761
|
if (this.selectable && !this.rowClickOpens) {
|
|
5579
5762
|
if (!event || event.button === undefined || event.button === 0) {
|
|
5580
5763
|
this.onSelect(this.toggleIdInArray(this.internalSelectedIds, row[this.rowKey]))
|
|
5581
5764
|
}
|
|
5582
|
-
return
|
|
5765
|
+
return false
|
|
5583
5766
|
}
|
|
5584
5767
|
// A named source knows where its rows live. Emitting only would leave
|
|
5585
5768
|
// the click inert on a manifest page, which has no listener to bind —
|
|
@@ -5626,11 +5809,7 @@ export default {
|
|
|
5626
5809
|
}
|
|
5627
5810
|
}
|
|
5628
5811
|
}
|
|
5629
|
-
|
|
5630
|
-
* @event row-click Emitted on a row/card click (or middle click) for navigation. Fires when `selectable` is false, OR when `rowClickToView` is set and something can open the row (selection then happens via the checkbox). Payload: `(row, event)` — the clicked row and the native click/auxclick event (absent for a keyboard shortcut or map marker), so a host can open the row in a new tab on a ctrl/cmd/shift or middle click with `openRowTarget`.
|
|
5631
|
-
* @type {object} The clicked row object.
|
|
5632
|
-
*/
|
|
5633
|
-
this.$emit('row-click', ...(event ? [row, event] : [row]))
|
|
5812
|
+
return true
|
|
5634
5813
|
},
|
|
5635
5814
|
|
|
5636
5815
|
/**
|
|
@@ -5644,17 +5823,31 @@ export default {
|
|
|
5644
5823
|
return typeof Event !== 'undefined' && value instanceof Event
|
|
5645
5824
|
},
|
|
5646
5825
|
|
|
5826
|
+
/**
|
|
5827
|
+
* Mousedown on a custom list/card component's root: when a middle click
|
|
5828
|
+
* opens the row, keep the browser from starting autoscroll.
|
|
5829
|
+
*
|
|
5830
|
+
* @param {MouseEvent} event The mousedown event.
|
|
5831
|
+
* @return {void}
|
|
5832
|
+
*/
|
|
5833
|
+
onCustomItemMouseDown(event) {
|
|
5834
|
+
if (!this.selectable || this.rowClickOpens) {
|
|
5835
|
+
preventMiddleClickAutoscroll(event)
|
|
5836
|
+
}
|
|
5837
|
+
},
|
|
5838
|
+
|
|
5647
5839
|
/**
|
|
5648
5840
|
* Middle click on a custom list/card component's root: open the row
|
|
5649
|
-
* like a click would.
|
|
5841
|
+
* like a middle click on a built-in card would. Skipped when something
|
|
5842
|
+
* inside the component already opened it in a new tab.
|
|
5650
5843
|
*
|
|
5651
5844
|
* @param {object} row The component's row.
|
|
5652
5845
|
* @param {MouseEvent} event The auxclick event.
|
|
5653
5846
|
* @return {void}
|
|
5654
5847
|
*/
|
|
5655
5848
|
onCustomItemAuxClick(row, event) {
|
|
5656
|
-
if (isRowMiddleClick(event)) {
|
|
5657
|
-
this.
|
|
5849
|
+
if (isRowMiddleClick(event) && !isNewTabHandled(event)) {
|
|
5850
|
+
this.onRowAuxClick(row, event)
|
|
5658
5851
|
}
|
|
5659
5852
|
},
|
|
5660
5853
|
|
|
@@ -37,19 +37,39 @@ function resolveRowToken(value, row) {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* The
|
|
41
|
-
*
|
|
42
|
-
*
|
|
40
|
+
* The implicit `{ id }` param for a row, only when the named route declares
|
|
41
|
+
* `:id`: vue-router warns about (and drops) a param its path does not take.
|
|
42
|
+
* Without a router to ask, or for a route it does not know, the id is kept.
|
|
43
43
|
*
|
|
44
|
-
* @param {object}
|
|
44
|
+
* @param {object} [router] The app's router.
|
|
45
|
+
* @param {string} name The route name.
|
|
45
46
|
* @param {object} row The row.
|
|
46
47
|
* @param {string} rowKey The row's id field.
|
|
48
|
+
* @return {object} `{ id }`, or an empty object.
|
|
49
|
+
*/
|
|
50
|
+
function rowIdParam(router, name, row, rowKey) {
|
|
51
|
+
const routes = typeof router?.getRoutes === 'function' ? router.getRoutes() : null
|
|
52
|
+
const route = routes ? routes.find((r) => r.name === name) : null
|
|
53
|
+
if (route && !/:id\b/.test(route.path)) {
|
|
54
|
+
return {}
|
|
55
|
+
}
|
|
56
|
+
return { id: row?.[rowKey] }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The route params a `handler: "navigate"` action pushes for a row: the row id
|
|
61
|
+
* (when the route takes one), overridden by the declared `params` after the
|
|
62
|
+
* `{field}` token grammar. A token naming a field the row lacks is dropped.
|
|
63
|
+
*
|
|
64
|
+
* @param {object} action Manifest action descriptor.
|
|
65
|
+
* @param {object} row The row.
|
|
66
|
+
* @param {object} ctx Dispatch context (`rowKey`, `router`).
|
|
47
67
|
* @param {boolean} warn Whether to warn about a dropped param.
|
|
48
68
|
* @return {object} The params.
|
|
49
69
|
*/
|
|
50
|
-
function navigateParams(action, row,
|
|
70
|
+
function navigateParams(action, row, ctx, warn) {
|
|
51
71
|
const declaredParams = (action.params && typeof action.params === 'object') ? action.params : null
|
|
52
|
-
const params =
|
|
72
|
+
const params = rowIdParam(ctx.router, action.route, row, ctx.rowKey)
|
|
53
73
|
for (const [key, declared] of Object.entries(declaredParams || {})) {
|
|
54
74
|
const { resolved, value } = resolveRowToken(declared, row)
|
|
55
75
|
if (resolved) {
|
|
@@ -88,7 +108,7 @@ export function resolveActionTarget(action, row, ctx, warn = false) {
|
|
|
88
108
|
return null
|
|
89
109
|
}
|
|
90
110
|
if (type === 'open-page') {
|
|
91
|
-
return { target: { name: target, params:
|
|
111
|
+
return { target: { name: target, params: rowIdParam(ctx.router, target, row, ctx.rowKey) }, external: false }
|
|
92
112
|
}
|
|
93
113
|
return { target, external: isExternalActionTarget(target) }
|
|
94
114
|
}
|
|
@@ -96,7 +116,7 @@ export function resolveActionTarget(action, row, ctx, warn = false) {
|
|
|
96
116
|
if (typeof action.route !== 'string' || action.route.length === 0) {
|
|
97
117
|
return null
|
|
98
118
|
}
|
|
99
|
-
return { target: { name: action.route, params: navigateParams(action, row, ctx
|
|
119
|
+
return { target: { name: action.route, params: navigateParams(action, row, ctx, warn) }, external: false }
|
|
100
120
|
}
|
|
101
121
|
return null
|
|
102
122
|
}
|
|
@@ -115,8 +135,8 @@ export function resolveActionTarget(action, row, ctx, warn = false) {
|
|
|
115
135
|
* - `open-modal` → not wired for index actions; falls back to `@action`.
|
|
116
136
|
*
|
|
117
137
|
* Handler dispatch (`type: 'handler'`, the default) reads `action.handler`:
|
|
118
|
-
* - `navigate` → $router.push to `action.route` with `{ id: row[rowKey] }
|
|
119
|
-
* merged with the `action.params` map (declared params win — so a
|
|
138
|
+
* - `navigate` → $router.push to `action.route` with `{ id: row[rowKey] }`
|
|
139
|
+
* (when the route declares `:id`), merged with the `action.params` map (declared params win — so a
|
|
120
140
|
* "New X" action can navigate to a detail route with `{ id: "new" }`).
|
|
121
141
|
* Param strings run the `{field}` row-token grammar: `"{id}"` resolves to
|
|
122
142
|
* `row.id` (type preserved), `"item-{id}"` interpolates, and a brace-less
|
|
@@ -187,7 +207,7 @@ export function resolveActionHandler(action, ctx) {
|
|
|
187
207
|
// `{field}` row-token grammar first — an unresolved token is dropped
|
|
188
208
|
// rather than pushed as a literal `%7Bid%7D` path segment.
|
|
189
209
|
return (row) => {
|
|
190
|
-
ctx.router.push({ name: route, params: navigateParams(action, row, ctx
|
|
210
|
+
ctx.router.push({ name: route, params: navigateParams(action, row, ctx, true) })
|
|
191
211
|
}
|
|
192
212
|
}
|
|
193
213
|
|
|
@@ -420,10 +420,9 @@ export default {
|
|
|
420
420
|
* @return {void}
|
|
421
421
|
*/
|
|
422
422
|
dispatchAction({ actionType, url, value }) {
|
|
423
|
+
// An `external` entry with a URL is a real link (see linkAttrsFor);
|
|
424
|
+
// one without a URL has nothing to open.
|
|
423
425
|
switch (actionType) {
|
|
424
|
-
case ACTION_TYPES.EXTERNAL:
|
|
425
|
-
this.handleExternal(url)
|
|
426
|
-
break
|
|
427
426
|
case ACTION_TYPES.INTERNAL:
|
|
428
427
|
this.$emit('internal-action', url)
|
|
429
428
|
break
|
|
@@ -434,20 +433,6 @@ export default {
|
|
|
434
433
|
break
|
|
435
434
|
}
|
|
436
435
|
},
|
|
437
|
-
|
|
438
|
-
/**
|
|
439
|
-
* Open an external URL in a new tab; `noopener,noreferrer` prevents
|
|
440
|
-
* the opened page reaching back via `window.opener`.
|
|
441
|
-
*
|
|
442
|
-
* @param {string} url the URL to open.
|
|
443
|
-
* @return {void}
|
|
444
|
-
*/
|
|
445
|
-
handleExternal(url) {
|
|
446
|
-
if (typeof url !== 'string' || url === '') {
|
|
447
|
-
return
|
|
448
|
-
}
|
|
449
|
-
window.open(url, '_blank', 'noopener,noreferrer')
|
|
450
|
-
},
|
|
451
436
|
},
|
|
452
437
|
}
|
|
453
438
|
</script>
|
|
@@ -89,7 +89,8 @@
|
|
|
89
89
|
:sortKeys="effectiveSortKeys"
|
|
90
90
|
:emptyText="emptyText"
|
|
91
91
|
@sort="onSort"
|
|
92
|
-
@rowClick="onRowClick"
|
|
92
|
+
@rowClick="onRowClick"
|
|
93
|
+
@rowAuxClick="onRowAuxClick">
|
|
93
94
|
<template
|
|
94
95
|
v-for="col in slotColumns"
|
|
95
96
|
#[`column-${col}`]="{ row, value }">
|
|
@@ -484,14 +485,21 @@ export default {
|
|
|
484
485
|
*/
|
|
485
486
|
'action',
|
|
486
487
|
/**
|
|
487
|
-
* @event row-click Emitted when a log row's body is clicked or
|
|
488
|
-
*
|
|
489
|
-
*
|
|
490
|
-
*
|
|
491
|
-
*
|
|
488
|
+
* @event row-click Emitted when a log row's body is clicked, whether or
|
|
489
|
+
* not `rowDetail` opened the detail dialog — so a host can navigate
|
|
490
|
+
* instead of (or as well as) showing the dialog. Payload: `(row, event)`,
|
|
491
|
+
* the second being the native click event. A middle click emits
|
|
492
|
+
* `row-aux-click` instead.
|
|
492
493
|
* @type {object}
|
|
493
494
|
*/
|
|
494
495
|
'row-click',
|
|
496
|
+
/**
|
|
497
|
+
* @event row-aux-click Emitted when a log row's body is middle-clicked,
|
|
498
|
+
* for opening it in a new tab. Payload: `(row, event)`, the second being
|
|
499
|
+
* the native auxclick event.
|
|
500
|
+
* @type {object}
|
|
501
|
+
*/
|
|
502
|
+
'row-aux-click',
|
|
495
503
|
],
|
|
496
504
|
|
|
497
505
|
setup(props) {
|
|
@@ -994,26 +1002,43 @@ export default {
|
|
|
994
1002
|
/**
|
|
995
1003
|
* Handle a row-body click: navigate to `rowRoute` when one is declared,
|
|
996
1004
|
* else open the detail dialog when `rowDetail` is set. Always re-emits
|
|
997
|
-
* so a host can do its own thing regardless. A ctrl/cmd/shift
|
|
998
|
-
*
|
|
999
|
-
* dialog.
|
|
1005
|
+
* so a host can do its own thing regardless. A ctrl/cmd/shift click
|
|
1006
|
+
* opens `rowRoute` in a new tab.
|
|
1000
1007
|
*
|
|
1001
1008
|
* @param {object} row The clicked log entry.
|
|
1002
|
-
* @param {MouseEvent} [event] The originating click
|
|
1009
|
+
* @param {MouseEvent} [event] The originating click event.
|
|
1003
1010
|
*/
|
|
1004
1011
|
onRowClick(row, event) {
|
|
1005
1012
|
if (this.rowRoute) {
|
|
1006
1013
|
markNewTabHandled(event, openRowTarget(event, { name: this.rowRoute, params: { id: row?.[this.rowKey] } }, this.$router))
|
|
1007
|
-
} else if (this.rowDetail
|
|
1014
|
+
} else if (this.rowDetail) {
|
|
1008
1015
|
this.detailRow = row
|
|
1009
1016
|
}
|
|
1010
1017
|
/**
|
|
1011
|
-
* @event row-click Emitted when a log row's body is clicked
|
|
1018
|
+
* @event row-click Emitted when a log row's body is clicked. Payload: `(row, event)` — the log entry and the native click event.
|
|
1012
1019
|
* @type {object}
|
|
1013
1020
|
*/
|
|
1014
1021
|
this.$emit('row-click', row, event)
|
|
1015
1022
|
},
|
|
1016
1023
|
|
|
1024
|
+
/**
|
|
1025
|
+
* Handle a row-body middle click: open `rowRoute` in a new tab, never
|
|
1026
|
+
* the detail dialog, and emit `row-aux-click` rather than `row-click`.
|
|
1027
|
+
*
|
|
1028
|
+
* @param {object} row The clicked log entry.
|
|
1029
|
+
* @param {MouseEvent} event The originating auxclick event.
|
|
1030
|
+
*/
|
|
1031
|
+
onRowAuxClick(row, event) {
|
|
1032
|
+
if (this.rowRoute) {
|
|
1033
|
+
markNewTabHandled(event, openRowTarget(event, { name: this.rowRoute, params: { id: row?.[this.rowKey] } }, this.$router))
|
|
1034
|
+
}
|
|
1035
|
+
/**
|
|
1036
|
+
* @event row-aux-click Emitted when a log row's body is middle-clicked. Payload: `(row, event)` — the log entry and the native auxclick event.
|
|
1037
|
+
* @type {object}
|
|
1038
|
+
*/
|
|
1039
|
+
this.$emit('row-aux-click', row, event)
|
|
1040
|
+
},
|
|
1041
|
+
|
|
1017
1042
|
/** Close the row-detail dialog. */
|
|
1018
1043
|
closeDetail() {
|
|
1019
1044
|
this.detailRow = null
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
A step with one thing done and two to go:
|
|
2
|
+
|
|
3
|
+
```vue
|
|
4
|
+
<CnNextStepCard
|
|
5
|
+
title="What now? Step 2: handling"
|
|
6
|
+
:items="[
|
|
7
|
+
{ label: 'Receipt confirmed to the resident', done: true },
|
|
8
|
+
{ label: 'Review the 3 documents that are still open', hint: '2 of 5 done' },
|
|
9
|
+
{ label: 'Draft the decision' },
|
|
10
|
+
]"
|
|
11
|
+
action-label="Continue reviewing"
|
|
12
|
+
after="Then: step 3, decision" />
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
A checklist only, with no button:
|
|
16
|
+
|
|
17
|
+
```vue
|
|
18
|
+
<CnNextStepCard
|
|
19
|
+
:items="[
|
|
20
|
+
{ label: 'Inform the resident', done: true },
|
|
21
|
+
{ label: 'Archive the case', done: true },
|
|
22
|
+
]" />
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
As a page section, with the button waiting for its request. `title-tag` sets the heading level, `action-id` gives the button an id a skip link can target, and `done-label` and `todo-label` are the states a screen reader hears:
|
|
26
|
+
|
|
27
|
+
```vue
|
|
28
|
+
<CnNextStepCard
|
|
29
|
+
title="What now?"
|
|
30
|
+
title-tag="h2"
|
|
31
|
+
action-label="Publish"
|
|
32
|
+
action-id="case-primary-action"
|
|
33
|
+
:action-disabled="true"
|
|
34
|
+
done-label="Klaar"
|
|
35
|
+
todo-label="Nog doen"
|
|
36
|
+
:items="[
|
|
37
|
+
{ label: 'Check what can be made public', done: true },
|
|
38
|
+
{ label: 'Create the publication' },
|
|
39
|
+
]" />
|
|
40
|
+
```
|