@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
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
- SPDX-FileCopyrightText: 2026 Conduction B.V.
|
|
3
|
+
- SPDX-License-Identifier: EUPL-1.2
|
|
4
|
+
-->
|
|
5
|
+
|
|
6
|
+
<template>
|
|
7
|
+
<div class="cn-week-strip-form">
|
|
8
|
+
<div class="cn-week-strip-form__row2">
|
|
9
|
+
<CnRegisterSchemaSelect
|
|
10
|
+
:register="source.register"
|
|
11
|
+
:schema="source.schema"
|
|
12
|
+
@update:register="updateSource('register', $event)"
|
|
13
|
+
@update:schema="updateSource('schema', $event)" />
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="cn-week-strip-form__row2">
|
|
17
|
+
<CnFieldPicker
|
|
18
|
+
:value="dateField"
|
|
19
|
+
:label="t('nextcloud-vue', 'Date field')"
|
|
20
|
+
:options="availableFields"
|
|
21
|
+
placeholder="deadline"
|
|
22
|
+
@update="updateField('dateField', $event)" />
|
|
23
|
+
<CnFieldPicker
|
|
24
|
+
:value="titleField"
|
|
25
|
+
:label="t('nextcloud-vue', 'Title field')"
|
|
26
|
+
:options="availableFields"
|
|
27
|
+
placeholder="title"
|
|
28
|
+
@update="updateField('titleField', $event)" />
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<NcTextField
|
|
32
|
+
:modelValue="metaFieldsText"
|
|
33
|
+
:label="t('nextcloud-vue', 'Extra fields under the title (comma separated)')"
|
|
34
|
+
placeholder="identifier, type"
|
|
35
|
+
@update:modelValue="updateField('metaFieldsText', $event)" />
|
|
36
|
+
|
|
37
|
+
<CnFilterRowsEditor :value="filterRows" :fields="availableFields" @input="onFilterRows" />
|
|
38
|
+
|
|
39
|
+
<div class="cn-week-strip-form__row2">
|
|
40
|
+
<NcSelect
|
|
41
|
+
:modelValue="days"
|
|
42
|
+
:options="dayOptions"
|
|
43
|
+
:inputLabel="t('nextcloud-vue', 'Days shown')"
|
|
44
|
+
:clearable="false"
|
|
45
|
+
@update:modelValue="updateField('days', $event)" />
|
|
46
|
+
<NcTextField
|
|
47
|
+
:modelValue="itemRoute"
|
|
48
|
+
:label="t('nextcloud-vue', 'Page an item opens (page id, optional)')"
|
|
49
|
+
@update:modelValue="updateField('itemRoute', $event)" />
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
<NcTextField
|
|
53
|
+
:modelValue="emptyText"
|
|
54
|
+
:label="t('nextcloud-vue', 'Text for a day without items')"
|
|
55
|
+
@update:modelValue="updateField('emptyText', $event)" />
|
|
56
|
+
</div>
|
|
57
|
+
</template>
|
|
58
|
+
|
|
59
|
+
<script>
|
|
60
|
+
import { translate as t } from '@nextcloud/l10n'
|
|
61
|
+
import { NcSelect, NcTextField } from '@nextcloud/vue'
|
|
62
|
+
import CnFieldPicker from '../CnFieldPicker/CnFieldPicker.vue'
|
|
63
|
+
import CnFilterRowsEditor from '../CnFilterRowsEditor/CnFilterRowsEditor.vue'
|
|
64
|
+
import CnRegisterSchemaSelect from '../CnRegisterSchemaSelect/CnRegisterSchemaSelect.vue'
|
|
65
|
+
import { fetchSchemaProperties } from '../../utils/fetchSchemaProperties.js'
|
|
66
|
+
import { filterToRows, rowsToFilter } from '../CnFilterRowsEditor/filterRows.js'
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* CnWeekStripWidgetForm is the settings form of a `week-strip` widget. It
|
|
70
|
+
* edits the source (register, schema, filter), the date field the items are
|
|
71
|
+
* bucketed by, what each item shows, how many days render and the text of an
|
|
72
|
+
* empty day. Static `items` and the `lateWhen` rule are written in the
|
|
73
|
+
* manifest and pass through untouched. Emits `update:content` on every
|
|
74
|
+
* change; `validate()` asks for a register, a schema and a date field unless
|
|
75
|
+
* the widget has static items.
|
|
76
|
+
*/
|
|
77
|
+
export default {
|
|
78
|
+
name: 'CnWeekStripWidgetForm',
|
|
79
|
+
|
|
80
|
+
components: { NcSelect, NcTextField, CnFieldPicker, CnFilterRowsEditor, CnRegisterSchemaSelect },
|
|
81
|
+
|
|
82
|
+
props: {
|
|
83
|
+
/**
|
|
84
|
+
* The placement being edited (pre-fills from `editingWidget.content`), or null.
|
|
85
|
+
*
|
|
86
|
+
* @type {{content: object}|null}
|
|
87
|
+
*/
|
|
88
|
+
editingWidget: { type: Object, default: null },
|
|
89
|
+
/**
|
|
90
|
+
* Initial content values when not editing (registry defaults).
|
|
91
|
+
*
|
|
92
|
+
* @type {object}
|
|
93
|
+
*/
|
|
94
|
+
value: { type: Object, default: () => ({}) },
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
emits: [
|
|
98
|
+
/**
|
|
99
|
+
* Emitted with the assembled content blob on every field change.
|
|
100
|
+
*
|
|
101
|
+
* @event update:content
|
|
102
|
+
* @type {object}
|
|
103
|
+
*/
|
|
104
|
+
'update:content',
|
|
105
|
+
],
|
|
106
|
+
|
|
107
|
+
data() {
|
|
108
|
+
const initial = this.editingWidget?.content || this.value || {}
|
|
109
|
+
const src = initial.source || {}
|
|
110
|
+
return {
|
|
111
|
+
initial,
|
|
112
|
+
source: { register: src.register ?? '', schema: src.schema ?? '' },
|
|
113
|
+
limit: src.limit,
|
|
114
|
+
filterRows: filterToRows(src.filter || {}),
|
|
115
|
+
dateField: initial.dateField ?? '',
|
|
116
|
+
titleField: initial.titleField ?? '',
|
|
117
|
+
metaFieldsText: Array.isArray(initial.metaFields) ? initial.metaFields.join(', ') : '',
|
|
118
|
+
days: Number(initial.days) === 7 ? 7 : 5,
|
|
119
|
+
itemRoute: initial.itemRoute ?? '',
|
|
120
|
+
emptyText: initial.emptyText ?? '',
|
|
121
|
+
availableFields: [],
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
computed: {
|
|
126
|
+
/**
|
|
127
|
+
* The day counts on offer: working days or the whole week.
|
|
128
|
+
*
|
|
129
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
130
|
+
*/
|
|
131
|
+
dayOptions() {
|
|
132
|
+
return [5, 7]
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The assembled content blob. Keys the form does not edit (static
|
|
137
|
+
* items, the late rule) are carried over from the initial content.
|
|
138
|
+
*
|
|
139
|
+
* @return {object}
|
|
140
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
141
|
+
*/
|
|
142
|
+
assembledContent() {
|
|
143
|
+
const source = {
|
|
144
|
+
register: this.source.register,
|
|
145
|
+
schema: this.source.schema,
|
|
146
|
+
filter: rowsToFilter(this.filterRows),
|
|
147
|
+
}
|
|
148
|
+
if (this.limit !== undefined) {
|
|
149
|
+
source.limit = this.limit
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
...this.initial,
|
|
153
|
+
source,
|
|
154
|
+
dateField: this.dateField,
|
|
155
|
+
titleField: this.titleField,
|
|
156
|
+
metaFields: this.metaFieldsText.split(',').map((field) => field.trim()).filter((field) => field !== ''),
|
|
157
|
+
days: this.days,
|
|
158
|
+
itemRoute: this.itemRoute,
|
|
159
|
+
emptyText: this.emptyText,
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
watch: {
|
|
165
|
+
'source.register': 'loadFields',
|
|
166
|
+
'source.schema': 'loadFields',
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
mounted() {
|
|
170
|
+
this.loadFields()
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
methods: {
|
|
174
|
+
t,
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Load the schema's field names for the pickers.
|
|
178
|
+
*
|
|
179
|
+
* @return {Promise<void>}
|
|
180
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
181
|
+
*/
|
|
182
|
+
async loadFields() {
|
|
183
|
+
this.availableFields = await fetchSchemaProperties(this.source.register, this.source.schema)
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Set one field and emit the assembled content.
|
|
188
|
+
*
|
|
189
|
+
* @param {string} field The data key to write.
|
|
190
|
+
* @param {string|number} value The new value.
|
|
191
|
+
* @return {void}
|
|
192
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
193
|
+
*/
|
|
194
|
+
updateField(field, value) {
|
|
195
|
+
this[field] = value
|
|
196
|
+
this.$emit('update:content', this.assembledContent)
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Set the register or the schema and emit.
|
|
201
|
+
*
|
|
202
|
+
* @param {'register'|'schema'} field The source key to write.
|
|
203
|
+
* @param {string} value The chosen slug.
|
|
204
|
+
* @return {void}
|
|
205
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
206
|
+
*/
|
|
207
|
+
updateSource(field, value) {
|
|
208
|
+
this.source[field] = value
|
|
209
|
+
this.$emit('update:content', this.assembledContent)
|
|
210
|
+
},
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Take the filter editor's rows and emit.
|
|
214
|
+
*
|
|
215
|
+
* @param {Array<{key: string, op: string, value: string}>} rows The rows.
|
|
216
|
+
* @return {void}
|
|
217
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
218
|
+
*/
|
|
219
|
+
onFilterRows(rows) {
|
|
220
|
+
this.filterRows = rows
|
|
221
|
+
this.$emit('update:content', this.assembledContent)
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Validate the form; an empty array means valid.
|
|
226
|
+
*
|
|
227
|
+
* @return {string[]} The validation errors.
|
|
228
|
+
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-week-strip-widget
|
|
229
|
+
*/
|
|
230
|
+
validate() {
|
|
231
|
+
const hasStaticItems = Array.isArray(this.initial.items) && this.initial.items.length > 0
|
|
232
|
+
if (hasStaticItems && !this.source.register && !this.source.schema) {
|
|
233
|
+
return []
|
|
234
|
+
}
|
|
235
|
+
const errors = []
|
|
236
|
+
if (!this.source.register || !this.source.schema) {
|
|
237
|
+
errors.push(t('nextcloud-vue', 'A register and schema are required'))
|
|
238
|
+
}
|
|
239
|
+
if (!this.dateField) {
|
|
240
|
+
errors.push(t('nextcloud-vue', 'A date field is required'))
|
|
241
|
+
}
|
|
242
|
+
return errors
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
}
|
|
246
|
+
</script>
|
|
247
|
+
|
|
248
|
+
<style scoped>
|
|
249
|
+
.cn-week-strip-form {
|
|
250
|
+
display: flex;
|
|
251
|
+
flex-direction: column;
|
|
252
|
+
gap: 12px;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.cn-week-strip-form__row2 {
|
|
256
|
+
display: flex;
|
|
257
|
+
gap: 12px;
|
|
258
|
+
align-items: flex-end;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.cn-week-strip-form__row2 > * {
|
|
262
|
+
flex: 1;
|
|
263
|
+
min-width: 0;
|
|
264
|
+
}
|
|
265
|
+
</style>
|
|
@@ -17,20 +17,27 @@
|
|
|
17
17
|
|
|
18
18
|
import CnChartWidget from '../CnChartWidget/CnChartWidget.vue'
|
|
19
19
|
import CnChartWidgetForm from '../CnChartWidgetForm/CnChartWidgetForm.vue'
|
|
20
|
+
import CnConversationWidget from '../CnConversationThread/CnConversationWidget.vue'
|
|
20
21
|
import CnCountdownWidget from '../CnCountdownWidget/CnCountdownWidget.vue'
|
|
21
22
|
import CnCountdownWidgetForm from '../CnCountdownWidgetForm/CnCountdownWidgetForm.vue'
|
|
23
|
+
import CnDocumentReviewWidget from '../CnDocumentReviewList/CnDocumentReviewWidget.vue'
|
|
22
24
|
import CnMapWidget from '../CnMapWidget/CnMapWidget.vue'
|
|
23
25
|
import CnMapWidgetForm from '../CnMapWidgetForm/CnMapWidgetForm.vue'
|
|
26
|
+
import CnNextStepWidget from '../CnNextStepCard/CnNextStepWidget.vue'
|
|
24
27
|
import CnObjectListWidget2 from '../CnObjectListWidget/CnObjectListWidget.vue'
|
|
25
28
|
import CnObjectListWidgetForm2 from '../CnObjectListWidgetForm/CnObjectListWidgetForm.vue'
|
|
26
29
|
import CnRelatedObjectsWidget from '../CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue'
|
|
27
30
|
import CnRelatedObjectsWidgetForm from '../CnRelatedObjectsWidgetForm/CnRelatedObjectsWidgetForm.vue'
|
|
31
|
+
import CnStackedBarWidget from '../CnStackedBarWidget/CnStackedBarWidget.vue'
|
|
32
|
+
import CnStackedBarWidgetForm from '../CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue'
|
|
28
33
|
import CnStagesWidget from '../CnStagesWidget/CnStagesWidget.vue'
|
|
29
34
|
import CnStagesWidgetForm from '../CnStagesWidgetForm/CnStagesWidgetForm.vue'
|
|
30
35
|
import CnStatsBlockWidget from '../CnStatsBlockWidget/CnStatsBlockWidget.vue'
|
|
31
36
|
import CnStatsBlockWidgetForm from '../CnStatsBlockWidgetForm/CnStatsBlockWidgetForm.vue'
|
|
32
37
|
import CnTabsWidget from '../CnTabsWidget/CnTabsWidget.vue'
|
|
33
38
|
import CnTabsWidgetForm from '../CnTabsWidgetForm/CnTabsWidgetForm.vue'
|
|
39
|
+
import CnWeekStripWidget from '../CnWeekStripWidget/CnWeekStripWidget.vue'
|
|
40
|
+
import CnWeekStripWidgetForm from '../CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue'
|
|
34
41
|
// Typed widgets registered with an explicit renderer + config FORM. chart /
|
|
35
42
|
// stats-block render through CnDashboardPage's own isChart()/isStatsBlock()
|
|
36
43
|
// branches and `related` through CnDetailPage's isRelatedWidget() branch — the
|
|
@@ -217,6 +224,41 @@ registerDashboardWidget('countdown', {
|
|
|
217
224
|
surfaces: ['detail-page'],
|
|
218
225
|
})
|
|
219
226
|
|
|
227
|
+
// The case surfaces (detail-action-model-and-case-surfaces). Each reads the
|
|
228
|
+
// BOUND RECORD, which only a detail page has, and none has a config form yet,
|
|
229
|
+
// so `form: null` keeps them out of the Add-widget picker: they are placed
|
|
230
|
+
// from the manifest. Registered inline for the same tree-shaking reason as
|
|
231
|
+
// `map` above.
|
|
232
|
+
registerDashboardWidget('next-step', {
|
|
233
|
+
renderer: CnNextStepWidget,
|
|
234
|
+
form: null,
|
|
235
|
+
defaultContent: { field: 'status', stages: {} },
|
|
236
|
+
displayName: 'Next step',
|
|
237
|
+
icon: 'CheckCircleOutline',
|
|
238
|
+
surfaces: ['detail-page'],
|
|
239
|
+
ownsTitle: true,
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
registerDashboardWidget('document-review', {
|
|
243
|
+
renderer: CnDocumentReviewWidget,
|
|
244
|
+
form: null,
|
|
245
|
+
defaultContent: { field: 'documents', statusField: 'reviewStatus', statuses: [] },
|
|
246
|
+
displayName: 'Document review',
|
|
247
|
+
icon: 'FileDocumentCheckOutline',
|
|
248
|
+
surfaces: ['detail-page'],
|
|
249
|
+
ownsTitle: true,
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
registerDashboardWidget('conversation', {
|
|
253
|
+
renderer: CnConversationWidget,
|
|
254
|
+
form: null,
|
|
255
|
+
defaultContent: { field: 'messages', endpoint: '' },
|
|
256
|
+
displayName: 'Conversation',
|
|
257
|
+
icon: 'ForumOutline',
|
|
258
|
+
surfaces: ['detail-page'],
|
|
259
|
+
ownsTitle: true,
|
|
260
|
+
})
|
|
261
|
+
|
|
220
262
|
// The record's stages, where clicking a stage moves the record there.
|
|
221
263
|
// Registered inline for the same tree-shaking reason as `map` above.
|
|
222
264
|
registerDashboardWidget('stages', {
|
|
@@ -258,6 +300,38 @@ registerDashboardWidget('tabs', {
|
|
|
258
300
|
surfaces: ['detail-page'],
|
|
259
301
|
})
|
|
260
302
|
|
|
303
|
+
// The current week as day columns, with the dated items under each day.
|
|
304
|
+
// Registered inline for the same tree-shaking reason as `map` above.
|
|
305
|
+
registerDashboardWidget('week-strip', {
|
|
306
|
+
renderer: CnWeekStripWidget,
|
|
307
|
+
form: CnWeekStripWidgetForm,
|
|
308
|
+
defaultContent: {
|
|
309
|
+
source: { register: '', schema: '', filter: {} },
|
|
310
|
+
dateField: '',
|
|
311
|
+
titleField: '',
|
|
312
|
+
metaFields: [],
|
|
313
|
+
days: 5,
|
|
314
|
+
itemRoute: '',
|
|
315
|
+
emptyText: '',
|
|
316
|
+
},
|
|
317
|
+
displayName: 'Week strip',
|
|
318
|
+
icon: 'Calendar',
|
|
319
|
+
})
|
|
320
|
+
|
|
321
|
+
// One segmented bar with a legend that carries the numbers.
|
|
322
|
+
registerDashboardWidget('stacked-bar', {
|
|
323
|
+
renderer: CnStackedBarWidget,
|
|
324
|
+
form: CnStackedBarWidgetForm,
|
|
325
|
+
defaultContent: {
|
|
326
|
+
source: { register: '', schema: '', groupBy: '', filter: {} },
|
|
327
|
+
order: [],
|
|
328
|
+
labels: {},
|
|
329
|
+
emptyText: '',
|
|
330
|
+
},
|
|
331
|
+
displayName: 'Stacked bar',
|
|
332
|
+
icon: 'ChartBar',
|
|
333
|
+
})
|
|
334
|
+
|
|
261
335
|
/**
|
|
262
336
|
* Explicit no-op that guarantees this module (and therefore every widget's
|
|
263
337
|
* self-registration side effect) is evaluated. Call it once at app bootstrap if
|
package/src/components/index.js
CHANGED
|
@@ -130,6 +130,9 @@ export { CnLeafMountHost } from './CnLeafMountHost/index.js'
|
|
|
130
130
|
export { CnDetailCard } from './CnDetailCard/index.js'
|
|
131
131
|
export { CnCard } from './CnCard/index.js'
|
|
132
132
|
export { CnChoiceCards } from './CnChoiceCards/index.js'
|
|
133
|
+
export { CnNextStepCard } from './CnNextStepCard/index.js'
|
|
134
|
+
export { CnDocumentReviewList } from './CnDocumentReviewList/index.js'
|
|
135
|
+
export { CnConversationThread } from './CnConversationThread/index.js'
|
|
133
136
|
export { CnStatsPanel } from './CnStatsPanel/index.js'
|
|
134
137
|
export { CnJsonViewer } from './CnJsonViewer/index.js'
|
|
135
138
|
export { CnColorPicker } from './CnColorPicker/index.js'
|
|
@@ -352,3 +355,11 @@ export { CnDetailWidgetHost } from './CnDetailWidgetHost/index.js'
|
|
|
352
355
|
|
|
353
356
|
// Guardian/parent portal surface pattern (nextcloud-vue:guardian-portal-surface-pattern).
|
|
354
357
|
export { CnGuardianHome } from './CnGuardianHome/index.js'
|
|
358
|
+
|
|
359
|
+
// Workplace dashboard primitives (openspec: workplace-dashboard-primitives).
|
|
360
|
+
export { CnWeekStripWidget } from './CnWeekStripWidget/index.js'
|
|
361
|
+
export { CnWeekStripWidgetForm } from './CnWeekStripWidgetForm/index.js'
|
|
362
|
+
export { CnStackedBarWidget } from './CnStackedBarWidget/index.js'
|
|
363
|
+
export { CnStackedBarWidgetForm } from './CnStackedBarWidgetForm/index.js'
|
|
364
|
+
export { CnSegmentedControl } from './CnSegmentedControl/index.js'
|
|
365
|
+
export { CnBrandStripe } from './CnBrandStripe/index.js'
|
package/src/css/detail-page.css
CHANGED
|
@@ -342,6 +342,53 @@
|
|
|
342
342
|
}
|
|
343
343
|
}
|
|
344
344
|
|
|
345
|
+
/* The action model and case surfaces (detail-action-model-and-case-surfaces) */
|
|
346
|
+
|
|
347
|
+
/* Type and status pills above the title. */
|
|
348
|
+
.cn-detail-page__pills {
|
|
349
|
+
align-items: center;
|
|
350
|
+
display: flex;
|
|
351
|
+
flex-wrap: wrap;
|
|
352
|
+
gap: calc(2 * var(--default-grid-baseline));
|
|
353
|
+
margin-bottom: calc(1.5 * var(--default-grid-baseline));
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.cn-detail-page__next-step {
|
|
357
|
+
margin-bottom: calc(5 * var(--default-grid-baseline));
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/* Side column. The page becomes a wrapping flex row in which every child
|
|
361
|
+
takes a full line, except the body and the side column: those two share a
|
|
362
|
+
line while there is room for both (520px + 300px) and the column drops
|
|
363
|
+
under the body when there is not. No breakpoint, so it also holds inside a
|
|
364
|
+
split pane or beside an open sidebar, where the viewport says nothing about
|
|
365
|
+
the room the page has. Pages without a side column never get this class. */
|
|
366
|
+
.cn-detail-page--with-side {
|
|
367
|
+
align-items: flex-start;
|
|
368
|
+
column-gap: calc(5 * var(--default-grid-baseline));
|
|
369
|
+
display: flex;
|
|
370
|
+
flex-wrap: wrap;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.cn-detail-page--with-side > * {
|
|
374
|
+
flex: 1 1 100%;
|
|
375
|
+
min-width: 0;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
.cn-detail-page--with-side > .cn-detail-page__body {
|
|
379
|
+
flex: 999 1 520px;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.cn-detail-page--with-side > .cn-detail-page__side {
|
|
383
|
+
flex: 1 1 300px;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.cn-detail-page__side {
|
|
387
|
+
display: flex;
|
|
388
|
+
flex-direction: column;
|
|
389
|
+
gap: calc(5 * var(--default-grid-baseline));
|
|
390
|
+
}
|
|
391
|
+
|
|
345
392
|
/* The record as a place (case-page-and-list-as-a-place) */
|
|
346
393
|
|
|
347
394
|
/* A skip link that reaches the page's declared primary action. Off screen
|
package/src/css/table.css
CHANGED
|
@@ -334,6 +334,32 @@
|
|
|
334
334
|
background-color: var(--color-primary-light);
|
|
335
335
|
}
|
|
336
336
|
|
|
337
|
+
/* A row with a route is a real link (see CnDataTable's row link): the anchor
|
|
338
|
+
in its first cell is stretched over the whole row. The row's own controls
|
|
339
|
+
sit above it so they stay usable; keep the list in step with NESTED_CONTROL
|
|
340
|
+
in utils/rowAuxClick.js. */
|
|
341
|
+
.cn-table-row--linked {
|
|
342
|
+
position: relative;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.cn-table-row__link {
|
|
346
|
+
position: absolute;
|
|
347
|
+
inset: 0;
|
|
348
|
+
cursor: pointer;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.cn-table-row__link:focus-visible {
|
|
352
|
+
outline: 2px solid var(--color-main-text);
|
|
353
|
+
outline-offset: -2px;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
.cn-table-row--linked .cn-table-col--checkbox,
|
|
357
|
+
.cn-table-row--linked .cn-table-col--actions,
|
|
358
|
+
.cn-table-row--linked td :is(a, button, input, select, textarea, label, summary, [role='button'], [role='checkbox'], [role='link'], [contenteditable='true']):not(.cn-table-row__link) {
|
|
359
|
+
position: relative;
|
|
360
|
+
z-index: 1;
|
|
361
|
+
}
|
|
362
|
+
|
|
337
363
|
/* Column Types */
|
|
338
364
|
.cn-table-col--checkbox {
|
|
339
365
|
width: 50px;
|
package/src/index.js
CHANGED
|
@@ -65,6 +65,7 @@ export {
|
|
|
65
65
|
CnContainerWidget,
|
|
66
66
|
CnContainerWidgetForm,
|
|
67
67
|
CnContextMenu,
|
|
68
|
+
CnConversationThread,
|
|
68
69
|
CnCopyDialog,
|
|
69
70
|
CnCountdownWidget,
|
|
70
71
|
CnCountdownWidgetForm,
|
|
@@ -91,6 +92,7 @@ export {
|
|
|
91
92
|
CnDetailWidgetHost,
|
|
92
93
|
CnDividerWidget,
|
|
93
94
|
CnDividerWidgetForm,
|
|
95
|
+
CnDocumentReviewList,
|
|
94
96
|
CnEditActionsModal,
|
|
95
97
|
CnEditDataModal,
|
|
96
98
|
CnEditMenuModal,
|
|
@@ -180,6 +182,7 @@ export {
|
|
|
180
182
|
CnNcDashboardWidgetForm,
|
|
181
183
|
CnNcWidgetGridPicker,
|
|
182
184
|
CnNcWidgetWidget,
|
|
185
|
+
CnNextStepCard,
|
|
183
186
|
CnNoteCard,
|
|
184
187
|
CnNotesCard,
|
|
185
188
|
CnNotificationMatrix,
|
|
@@ -303,6 +306,11 @@ export {
|
|
|
303
306
|
// @deprecated Use `CnBuildiqEditButton`.
|
|
304
307
|
export { CnOpenBuildEditButton } from './components/index.js'
|
|
305
308
|
|
|
309
|
+
// Workplace dashboard primitives (openspec: workplace-dashboard-primitives):
|
|
310
|
+
// the week strip and stacked bar widgets with their forms, the segmented
|
|
311
|
+
// control, and the brand stripe.
|
|
312
|
+
export { CnBrandStripe, CnSegmentedControl, CnStackedBarWidget, CnStackedBarWidgetForm, CnWeekStripWidget, CnWeekStripWidgetForm } from './components/index.js'
|
|
313
|
+
|
|
306
314
|
// AI Chat Companion component family
|
|
307
315
|
export {
|
|
308
316
|
CnAiAgentPicker,
|
|
@@ -511,6 +519,7 @@ export { filterWidgetsByVisibility, getCurrentUserGroups, getCurrentUserId, isWi
|
|
|
511
519
|
export { safeHref, safeImageSrc, safeSvgPath } from './utils/index.js'
|
|
512
520
|
export { followLinkClick, isModifiedClick, isNewTabHandled, isRowMiddleClick, openRowTarget, resolveHref } from './utils/index.js'
|
|
513
521
|
export { resolveImageUrl } from './utils/index.js'
|
|
522
|
+
export { resolveDateVariant } from './utils/index.js'
|
|
514
523
|
export { actionLink, dispatchAction } from './utils/actionsDispatcher.js'
|
|
515
524
|
// Nested-modal stacking. `CnAppRoot` installs this itself; apps that do not
|
|
516
525
|
// mount `CnAppRoot` should call `installModalStack()` once from `main.js`, or
|
|
@@ -122,7 +122,7 @@ import ChartPie from 'vue-material-design-icons/ChartPie.vue'
|
|
|
122
122
|
import TableIcon from 'vue-material-design-icons/Table.vue'
|
|
123
123
|
import ViewDashboard from 'vue-material-design-icons/ViewDashboard.vue'
|
|
124
124
|
import CnDetailCard from '../../../components/CnDetailCard/CnDetailCard.vue'
|
|
125
|
-
import { buildHeaders, prefixUrl } from '../../../utils/index.js'
|
|
125
|
+
import { buildHeaders, prefixUrl, safeHref } from '../../../utils/index.js'
|
|
126
126
|
|
|
127
127
|
const VALID_SURFACES = ['user-dashboard', 'app-dashboard', 'detail-page', 'single-entity']
|
|
128
128
|
const COMPACT_LIMIT = 5
|
|
@@ -287,8 +287,9 @@ export default {
|
|
|
287
287
|
return `cn-analytics-card__badge--type-${type ?? 'unknown'}`
|
|
288
288
|
},
|
|
289
289
|
|
|
290
|
+
// A provider URL is used only when it is a safe scheme; else the app link.
|
|
290
291
|
reportUrl(report) {
|
|
291
|
-
if (report && report.url) {
|
|
292
|
+
if (report && report.url && safeHref(report.url) !== '#') {
|
|
292
293
|
return report.url
|
|
293
294
|
}
|
|
294
295
|
const id = this.reportKey(report)
|
|
@@ -82,8 +82,7 @@
|
|
|
82
82
|
<NcButton
|
|
83
83
|
variant="primary"
|
|
84
84
|
:href="analyticsAppUrl"
|
|
85
|
-
target="_blank"
|
|
86
|
-
rel="noopener noreferrer">
|
|
85
|
+
target="_blank">
|
|
87
86
|
<template #icon>
|
|
88
87
|
<ChartBar :size="20" />
|
|
89
88
|
</template>
|
|
@@ -131,8 +130,7 @@
|
|
|
131
130
|
<NcActionLink
|
|
132
131
|
:closeAfterClick="true"
|
|
133
132
|
:href="reportUrl(report)"
|
|
134
|
-
target="_blank"
|
|
135
|
-
rel="noopener noreferrer">
|
|
133
|
+
target="_blank">
|
|
136
134
|
<template #icon>
|
|
137
135
|
<OpenInNew :size="20" />
|
|
138
136
|
</template>
|
|
@@ -178,7 +176,7 @@ import ViewDashboard from 'vue-material-design-icons/ViewDashboard.vue'
|
|
|
178
176
|
import CnAnalyticsReportCreate from '../../../components/CnAnalyticsReportCreate/CnAnalyticsReportCreate.vue'
|
|
179
177
|
import CnAnalyticsReportPicker from '../../../components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue'
|
|
180
178
|
import CnStatusBadge from '../../../components/CnStatusBadge/CnStatusBadge.vue'
|
|
181
|
-
import { buildHeaders, prefixUrl } from '../../../utils/index.js'
|
|
179
|
+
import { buildHeaders, prefixUrl, safeHref } from '../../../utils/index.js'
|
|
182
180
|
|
|
183
181
|
/**
|
|
184
182
|
* CnAnalyticsTab — bespoke dataset list for the `analytics` integration.
|
|
@@ -408,8 +406,9 @@ export default {
|
|
|
408
406
|
return t('nextcloud-vue', 'Latest value')
|
|
409
407
|
},
|
|
410
408
|
|
|
409
|
+
// A provider URL is used only when it is a safe scheme; else the app link.
|
|
411
410
|
reportUrl(report) {
|
|
412
|
-
if (report && report.url) {
|
|
411
|
+
if (report && report.url && safeHref(report.url) !== '#') {
|
|
413
412
|
return report.url
|
|
414
413
|
}
|
|
415
414
|
const id = this.reportKey(report)
|
|
@@ -34,9 +34,11 @@
|
|
|
34
34
|
@error="onFaviconError(entity)">
|
|
35
35
|
<Bookmark v-else :size="14" />
|
|
36
36
|
<a
|
|
37
|
+
v-if="hasSafeUrl(entity)"
|
|
37
38
|
:href="entity.url"
|
|
38
39
|
target="_blank"
|
|
39
40
|
rel="noopener noreferrer">{{ bookmarkTitle(entity) }}</a>
|
|
41
|
+
<span v-else>{{ bookmarkTitle(entity) }}</span>
|
|
40
42
|
</span>
|
|
41
43
|
<span v-else class="cn-bookmarks-card__empty">{{ emptyLabel }}</span>
|
|
42
44
|
</template>
|
|
@@ -62,9 +64,11 @@
|
|
|
62
64
|
@error="onFaviconError(mostRecent)">
|
|
63
65
|
<Bookmark v-else :size="14" />
|
|
64
66
|
<a
|
|
67
|
+
v-if="hasSafeUrl(mostRecent)"
|
|
65
68
|
:href="mostRecent.url"
|
|
66
69
|
target="_blank"
|
|
67
70
|
rel="noopener noreferrer">{{ bookmarkTitle(mostRecent) }}</a>
|
|
71
|
+
<span v-else>{{ bookmarkTitle(mostRecent) }}</span>
|
|
68
72
|
</div>
|
|
69
73
|
<div v-if="bookmarks.length > 1" class="cn-bookmarks-card__view-all">
|
|
70
74
|
<a
|
|
@@ -99,10 +103,12 @@
|
|
|
99
103
|
</div>
|
|
100
104
|
<div class="cn-bookmarks-card__row-main">
|
|
101
105
|
<a
|
|
106
|
+
v-if="hasSafeUrl(bookmark)"
|
|
102
107
|
:href="bookmark.url"
|
|
103
108
|
target="_blank"
|
|
104
109
|
rel="noopener noreferrer"
|
|
105
110
|
class="cn-bookmarks-card__title">{{ bookmarkTitle(bookmark) }}</a>
|
|
111
|
+
<span v-else class="cn-bookmarks-card__title">{{ bookmarkTitle(bookmark) }}</span>
|
|
106
112
|
</div>
|
|
107
113
|
</li>
|
|
108
114
|
</ul>
|
|
@@ -121,7 +127,7 @@ import { translatePlural as n, translate as t } from '@nextcloud/l10n'
|
|
|
121
127
|
import { NcLoadingIcon } from '@nextcloud/vue'
|
|
122
128
|
import Bookmark from 'vue-material-design-icons/Bookmark.vue'
|
|
123
129
|
import CnDetailCard from '../../../components/CnDetailCard/CnDetailCard.vue'
|
|
124
|
-
import { buildHeaders, prefixUrl } from '../../../utils/index.js'
|
|
130
|
+
import { buildHeaders, prefixUrl, safeHref } from '../../../utils/index.js'
|
|
125
131
|
|
|
126
132
|
const VALID_SURFACES = ['user-dashboard', 'app-dashboard', 'detail-page', 'single-entity']
|
|
127
133
|
const COMPACT_LIMIT = 5
|
|
@@ -245,6 +251,11 @@ export default {
|
|
|
245
251
|
return bookmark.title || bookmark.url || ''
|
|
246
252
|
},
|
|
247
253
|
|
|
254
|
+
// Bookmark URLs are user-entered (bookmarklets are `javascript:`), so only a safe one is a link.
|
|
255
|
+
hasSafeUrl(bookmark) {
|
|
256
|
+
return safeHref(bookmark.url) !== '#'
|
|
257
|
+
},
|
|
258
|
+
|
|
248
259
|
chipSubtitle(bookmark) {
|
|
249
260
|
return bookmark.description || bookmark.url || this.bookmarkTitle(bookmark)
|
|
250
261
|
},
|