@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,10 @@
|
|
|
1
|
+
import script from './CnDocumentReviewList.vue2.js';
|
|
2
|
+
import { render } from './CnDocumentReviewList.vue3.js';
|
|
3
|
+
|
|
4
|
+
script.render = render;
|
|
5
|
+
script.__scopeId = "data-v-9a0e5e62";
|
|
6
|
+
script.__file = "src/components/CnDocumentReviewList/CnDocumentReviewList.vue";
|
|
7
|
+
const __sfc_main = script;
|
|
8
|
+
|
|
9
|
+
export { __sfc_main as default };
|
|
10
|
+
//# sourceMappingURL=CnDocumentReviewList.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnDocumentReviewList.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { translate } from '@nextcloud/l10n';
|
|
2
|
+
import { NcButton } from '@nextcloud/vue';
|
|
3
|
+
import FileDocumentOutline from 'vue-material-design-icons/FileDocumentOutline.vue';
|
|
4
|
+
import { readPath } from '../../utils/readPath.js';
|
|
5
|
+
import __sfc_main from '../CnStatusBadge/CnStatusBadge.vue.js';
|
|
6
|
+
|
|
7
|
+
let documentReviewListUid = 0;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* CnDocumentReviewList: files that each need a verdict, and how far along you are.
|
|
11
|
+
*
|
|
12
|
+
* One row per file with its review status, a progress line ("2 of 5 reviewed")
|
|
13
|
+
* and one action per row. Built for a disclosure request, where every document
|
|
14
|
+
* is judged public, partly public or still to review, but the status field and
|
|
15
|
+
* its values are yours to configure.
|
|
16
|
+
*
|
|
17
|
+
* ```vue
|
|
18
|
+
* <CnDocumentReviewList
|
|
19
|
+
* title="Review documents"
|
|
20
|
+
* :documents="[
|
|
21
|
+
* { id: 1, name: 'Advice on street lighting', meta: 'PDF', reviewStatus: 'public' },
|
|
22
|
+
* { id: 2, name: 'Budget note', meta: 'Word, 2 February 2026' },
|
|
23
|
+
* ]"
|
|
24
|
+
* @row-action="openDocument" />
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* The `document-review` detail widget type renders this list from a field on
|
|
28
|
+
* the record.
|
|
29
|
+
*/
|
|
30
|
+
var script = {
|
|
31
|
+
name: 'CnDocumentReviewList',
|
|
32
|
+
|
|
33
|
+
components: {
|
|
34
|
+
CnStatusBadge: __sfc_main,
|
|
35
|
+
FileDocumentOutline,
|
|
36
|
+
NcButton,
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
props: {
|
|
40
|
+
/** The documents, one object per row. */
|
|
41
|
+
documents: {
|
|
42
|
+
type: Array,
|
|
43
|
+
default: () => [],
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
/** Heading of the list. */
|
|
47
|
+
title: {
|
|
48
|
+
type: String,
|
|
49
|
+
default: '',
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
/** Element the heading renders as. */
|
|
53
|
+
titleTag: {
|
|
54
|
+
type: String,
|
|
55
|
+
default: 'h3',
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
/** Dot-path to a document's display name. Falls back to `title`, then `filename`. */
|
|
59
|
+
nameField: {
|
|
60
|
+
type: String,
|
|
61
|
+
default: 'name',
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/** Dot-path to the line under the name (type, date, origin). */
|
|
65
|
+
metaField: {
|
|
66
|
+
type: String,
|
|
67
|
+
default: 'meta',
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/** Dot-path to a document's review status. */
|
|
71
|
+
statusField: {
|
|
72
|
+
type: String,
|
|
73
|
+
default: 'reviewStatus',
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/** Dot-path to a URL that opens the document. When a row has one, its name is a link. */
|
|
77
|
+
hrefField: {
|
|
78
|
+
type: String,
|
|
79
|
+
default: 'href',
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
/** Dot-path to the value that identifies a row. */
|
|
83
|
+
rowKey: {
|
|
84
|
+
type: String,
|
|
85
|
+
default: 'id',
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* The review statuses: `{ value, label, variant?, reviewed? }` each.
|
|
90
|
+
* `variant` is a CnStatusBadge variant. `reviewed: true` counts the
|
|
91
|
+
* row in the progress line. Empty uses the built-in three: public,
|
|
92
|
+
* partly public and to review.
|
|
93
|
+
*/
|
|
94
|
+
statuses: {
|
|
95
|
+
type: Array,
|
|
96
|
+
default: () => [],
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* The status of a document that carries none, or one this list does
|
|
101
|
+
* not know. Defaults to the first status that is not `reviewed`.
|
|
102
|
+
*/
|
|
103
|
+
defaultStatus: {
|
|
104
|
+
type: String,
|
|
105
|
+
default: '',
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/** Label of the per-row action button. An empty string renders no button. */
|
|
109
|
+
rowActionLabel: {
|
|
110
|
+
type: String,
|
|
111
|
+
default: () => translate('nextcloud-vue', 'Review'),
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
/** Shown when there are no documents. */
|
|
115
|
+
emptyText: {
|
|
116
|
+
type: String,
|
|
117
|
+
default: () => translate('nextcloud-vue', 'No documents to review.'),
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
emits: [
|
|
122
|
+
/** A row's action button was pressed. Payload: the document. */
|
|
123
|
+
'row-action',
|
|
124
|
+
],
|
|
125
|
+
|
|
126
|
+
data() {
|
|
127
|
+
documentReviewListUid += 1;
|
|
128
|
+
return {
|
|
129
|
+
titleId: `cn-document-review-title-${documentReviewListUid}`,
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
computed: {
|
|
134
|
+
/**
|
|
135
|
+
* The statuses in effect: the configured ones, or the built-in three.
|
|
136
|
+
*
|
|
137
|
+
* @return {Array<{value: string, label: string, variant: string, reviewed: boolean}>} The statuses.
|
|
138
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
139
|
+
*/
|
|
140
|
+
effectiveStatuses() {
|
|
141
|
+
const configured = (Array.isArray(this.statuses) ? this.statuses : [])
|
|
142
|
+
.filter((status) => status && status.value !== undefined && status.value !== null)
|
|
143
|
+
.map((status) => ({
|
|
144
|
+
value: String(status.value),
|
|
145
|
+
label: typeof status.label === 'string' && status.label !== '' ? status.label : String(status.value),
|
|
146
|
+
variant: typeof status.variant === 'string' && status.variant !== '' ? status.variant : 'default',
|
|
147
|
+
reviewed: status.reviewed === true,
|
|
148
|
+
}));
|
|
149
|
+
if (configured.length > 0) {
|
|
150
|
+
return configured
|
|
151
|
+
}
|
|
152
|
+
return [
|
|
153
|
+
{ value: 'public', label: translate('nextcloud-vue', 'Public'), variant: 'success', reviewed: true },
|
|
154
|
+
{ value: 'partly-public', label: translate('nextcloud-vue', 'Partly public'), variant: 'warning', reviewed: true },
|
|
155
|
+
{ value: 'to-review', label: translate('nextcloud-vue', 'To review'), variant: 'default', reviewed: false },
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* The status a document without a known one falls back to.
|
|
161
|
+
*
|
|
162
|
+
* @return {{value: string, label: string, variant: string, reviewed: boolean}} The fallback status.
|
|
163
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
164
|
+
*/
|
|
165
|
+
fallbackStatus() {
|
|
166
|
+
const statuses = this.effectiveStatuses;
|
|
167
|
+
return statuses.find((status) => status.value === this.defaultStatus)
|
|
168
|
+
|| statuses.find((status) => !status.reviewed)
|
|
169
|
+
|| statuses[0]
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The rows, with everything the template needs resolved.
|
|
174
|
+
*
|
|
175
|
+
* @return {Array<{key: string, name: string, meta: string, href: string, status: object, document: object}>} The rows.
|
|
176
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
177
|
+
*/
|
|
178
|
+
rows() {
|
|
179
|
+
return (Array.isArray(this.documents) ? this.documents : [])
|
|
180
|
+
.filter((document) => document && typeof document === 'object')
|
|
181
|
+
.map((document, index) => {
|
|
182
|
+
const raw = readPath(document, this.statusField);
|
|
183
|
+
const wanted = raw === null || raw === undefined ? '' : String(raw).toLowerCase();
|
|
184
|
+
const status = this.effectiveStatuses.find((candidate) => candidate.value.toLowerCase() === wanted)
|
|
185
|
+
|| this.fallbackStatus;
|
|
186
|
+
const name = readPath(document, this.nameField) || document.title || document.filename || '';
|
|
187
|
+
const key = readPath(document, this.rowKey);
|
|
188
|
+
const href = readPath(document, this.hrefField);
|
|
189
|
+
const meta = readPath(document, this.metaField);
|
|
190
|
+
return {
|
|
191
|
+
key: key === undefined || key === null ? `row-${index}` : String(key),
|
|
192
|
+
name: String(name),
|
|
193
|
+
meta: typeof meta === 'string' ? meta : '',
|
|
194
|
+
href: typeof href === 'string' ? href : '',
|
|
195
|
+
status,
|
|
196
|
+
document,
|
|
197
|
+
}
|
|
198
|
+
})
|
|
199
|
+
},
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* How many rows carry a reviewed status.
|
|
203
|
+
*
|
|
204
|
+
* @return {number} The count.
|
|
205
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
206
|
+
*/
|
|
207
|
+
reviewedCount() {
|
|
208
|
+
return this.rows.filter((row) => row.status.reviewed).length
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* The progress line, for example "2 of 5 reviewed".
|
|
213
|
+
*
|
|
214
|
+
* @return {string} The summary.
|
|
215
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
216
|
+
*/
|
|
217
|
+
summary() {
|
|
218
|
+
return translate('nextcloud-vue', '{reviewed} of {total} reviewed', {
|
|
219
|
+
reviewed: this.reviewedCount,
|
|
220
|
+
total: this.rows.length,
|
|
221
|
+
})
|
|
222
|
+
},
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Accessible name for a list without a title.
|
|
226
|
+
*
|
|
227
|
+
* @return {string} The label.
|
|
228
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
229
|
+
*/
|
|
230
|
+
fallbackLabel() {
|
|
231
|
+
return translate('nextcloud-vue', 'Documents to review')
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
export { script as default };
|
|
237
|
+
//# sourceMappingURL=CnDocumentReviewList.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnDocumentReviewList.vue2.js","sources":["../../../../src/components/CnDocumentReviewList/CnDocumentReviewList.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<section\n\t\tclass=\"cn-document-review-list\"\n\t\tdata-testid=\"cn-document-review-list\"\n\t\t:aria-labelledby=\"title ? titleId : null\"\n\t\t:aria-label=\"title ? null : fallbackLabel\">\n\t\t<div v-if=\"title || rows.length > 0\" class=\"cn-document-review-list__header\">\n\t\t\t<component\n\t\t\t\t:is=\"titleTag\"\n\t\t\t\tv-if=\"title\"\n\t\t\t\t:id=\"titleId\"\n\t\t\t\tclass=\"cn-document-review-list__title\">\n\t\t\t\t{{ title }}\n\t\t\t</component>\n\t\t\t<span\n\t\t\t\tv-if=\"rows.length > 0\"\n\t\t\t\tclass=\"cn-document-review-list__summary\"\n\t\t\t\tdata-testid=\"cn-document-review-summary\">\n\t\t\t\t{{ summary }}\n\t\t\t</span>\n\t\t</div>\n\n\t\t<p v-if=\"rows.length === 0\" class=\"cn-document-review-list__empty\" data-testid=\"cn-document-review-empty\">\n\t\t\t{{ emptyText }}\n\t\t</p>\n\n\t\t<ul v-else class=\"cn-document-review-list__rows\">\n\t\t\t<li\n\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-document-review-list__row\"\n\t\t\t\tdata-testid=\"cn-document-review-row\">\n\t\t\t\t<FileDocumentOutline class=\"cn-document-review-list__icon\" :size=\"22\" aria-hidden=\"true\" />\n\t\t\t\t<span class=\"cn-document-review-list__text\">\n\t\t\t\t\t<a\n\t\t\t\t\t\tv-if=\"row.href\"\n\t\t\t\t\t\tclass=\"cn-document-review-list__name\"\n\t\t\t\t\t\t:href=\"row.href\">\n\t\t\t\t\t\t{{ row.name }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<span v-else class=\"cn-document-review-list__name\">{{ row.name }}</span>\n\t\t\t\t\t<span v-if=\"row.meta\" class=\"cn-document-review-list__meta\">{{ row.meta }}</span>\n\t\t\t\t</span>\n\t\t\t\t<CnStatusBadge\n\t\t\t\t\tclass=\"cn-document-review-list__status\"\n\t\t\t\t\t:label=\"row.status.label\"\n\t\t\t\t\t:variant=\"row.status.variant\" />\n\t\t\t\t<!-- @slot row-action Replace the row's action button. -->\n\t\t\t\t<!-- @binding {object} document The row's document. -->\n\t\t\t\t<!-- @binding {object} status The row's resolved status ({ value, label, variant, reviewed }). -->\n\t\t\t\t<slot name=\"row-action\" :document=\"row.document\" :status=\"row.status\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"rowActionLabel\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:aria-label=\"`${rowActionLabel}: ${row.name}`\"\n\t\t\t\t\t\tdata-testid=\"cn-document-review-action\"\n\t\t\t\t\t\t@click=\"$emit('row-action', row.document)\">\n\t\t\t\t\t\t{{ rowActionLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</slot>\n\t\t\t</li>\n\t\t</ul>\n\t</section>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\nimport FileDocumentOutline from 'vue-material-design-icons/FileDocumentOutline.vue'\nimport { readPath } from '../../utils/readPath.js'\nimport { CnStatusBadge } from '../CnStatusBadge/index.js'\n\nlet documentReviewListUid = 0\n\n/**\n * CnDocumentReviewList: files that each need a verdict, and how far along you are.\n *\n * One row per file with its review status, a progress line (\"2 of 5 reviewed\")\n * and one action per row. Built for a disclosure request, where every document\n * is judged public, partly public or still to review, but the status field and\n * its values are yours to configure.\n *\n * ```vue\n * <CnDocumentReviewList\n * title=\"Review documents\"\n * :documents=\"[\n * { id: 1, name: 'Advice on street lighting', meta: 'PDF', reviewStatus: 'public' },\n * { id: 2, name: 'Budget note', meta: 'Word, 2 February 2026' },\n * ]\"\n * @row-action=\"openDocument\" />\n * ```\n *\n * The `document-review` detail widget type renders this list from a field on\n * the record.\n */\nexport default {\n\tname: 'CnDocumentReviewList',\n\n\tcomponents: {\n\t\tCnStatusBadge,\n\t\tFileDocumentOutline,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\t/** The documents, one object per row. */\n\t\tdocuments: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Heading of the list. */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Element the heading renders as. */\n\t\ttitleTag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'h3',\n\t\t},\n\n\t\t/** Dot-path to a document's display name. Falls back to `title`, then `filename`. */\n\t\tnameField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'name',\n\t\t},\n\n\t\t/** Dot-path to the line under the name (type, date, origin). */\n\t\tmetaField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'meta',\n\t\t},\n\n\t\t/** Dot-path to a document's review status. */\n\t\tstatusField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'reviewStatus',\n\t\t},\n\n\t\t/** Dot-path to a URL that opens the document. When a row has one, its name is a link. */\n\t\threfField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'href',\n\t\t},\n\n\t\t/** Dot-path to the value that identifies a row. */\n\t\trowKey: {\n\t\t\ttype: String,\n\t\t\tdefault: 'id',\n\t\t},\n\n\t\t/**\n\t\t * The review statuses: `{ value, label, variant?, reviewed? }` each.\n\t\t * `variant` is a CnStatusBadge variant. `reviewed: true` counts the\n\t\t * row in the progress line. Empty uses the built-in three: public,\n\t\t * partly public and to review.\n\t\t */\n\t\tstatuses: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The status of a document that carries none, or one this list does\n\t\t * not know. Defaults to the first status that is not `reviewed`.\n\t\t */\n\t\tdefaultStatus: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label of the per-row action button. An empty string renders no button. */\n\t\trowActionLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Review'),\n\t\t},\n\n\t\t/** Shown when there are no documents. */\n\t\temptyText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'No documents to review.'),\n\t\t},\n\t},\n\n\temits: [\n\t\t/** A row's action button was pressed. Payload: the document. */\n\t\t'row-action',\n\t],\n\n\tdata() {\n\t\tdocumentReviewListUid += 1\n\t\treturn {\n\t\t\ttitleId: `cn-document-review-title-${documentReviewListUid}`,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The statuses in effect: the configured ones, or the built-in three.\n\t\t *\n\t\t * @return {Array<{value: string, label: string, variant: string, reviewed: boolean}>} The statuses.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\teffectiveStatuses() {\n\t\t\tconst configured = (Array.isArray(this.statuses) ? this.statuses : [])\n\t\t\t\t.filter((status) => status && status.value !== undefined && status.value !== null)\n\t\t\t\t.map((status) => ({\n\t\t\t\t\tvalue: String(status.value),\n\t\t\t\t\tlabel: typeof status.label === 'string' && status.label !== '' ? status.label : String(status.value),\n\t\t\t\t\tvariant: typeof status.variant === 'string' && status.variant !== '' ? status.variant : 'default',\n\t\t\t\t\treviewed: status.reviewed === true,\n\t\t\t\t}))\n\t\t\tif (configured.length > 0) {\n\t\t\t\treturn configured\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t{ value: 'public', label: t('nextcloud-vue', 'Public'), variant: 'success', reviewed: true },\n\t\t\t\t{ value: 'partly-public', label: t('nextcloud-vue', 'Partly public'), variant: 'warning', reviewed: true },\n\t\t\t\t{ value: 'to-review', label: t('nextcloud-vue', 'To review'), variant: 'default', reviewed: false },\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * The status a document without a known one falls back to.\n\t\t *\n\t\t * @return {{value: string, label: string, variant: string, reviewed: boolean}} The fallback status.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tfallbackStatus() {\n\t\t\tconst statuses = this.effectiveStatuses\n\t\t\treturn statuses.find((status) => status.value === this.defaultStatus)\n\t\t\t\t|| statuses.find((status) => !status.reviewed)\n\t\t\t\t|| statuses[0]\n\t\t},\n\n\t\t/**\n\t\t * The rows, with everything the template needs resolved.\n\t\t *\n\t\t * @return {Array<{key: string, name: string, meta: string, href: string, status: object, document: object}>} The rows.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\trows() {\n\t\t\treturn (Array.isArray(this.documents) ? this.documents : [])\n\t\t\t\t.filter((document) => document && typeof document === 'object')\n\t\t\t\t.map((document, index) => {\n\t\t\t\t\tconst raw = readPath(document, this.statusField)\n\t\t\t\t\tconst wanted = raw === null || raw === undefined ? '' : String(raw).toLowerCase()\n\t\t\t\t\tconst status = this.effectiveStatuses.find((candidate) => candidate.value.toLowerCase() === wanted)\n\t\t\t\t\t\t|| this.fallbackStatus\n\t\t\t\t\tconst name = readPath(document, this.nameField) || document.title || document.filename || ''\n\t\t\t\t\tconst key = readPath(document, this.rowKey)\n\t\t\t\t\tconst href = readPath(document, this.hrefField)\n\t\t\t\t\tconst meta = readPath(document, this.metaField)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey: key === undefined || key === null ? `row-${index}` : String(key),\n\t\t\t\t\t\tname: String(name),\n\t\t\t\t\t\tmeta: typeof meta === 'string' ? meta : '',\n\t\t\t\t\t\thref: typeof href === 'string' ? href : '',\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * How many rows carry a reviewed status.\n\t\t *\n\t\t * @return {number} The count.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\treviewedCount() {\n\t\t\treturn this.rows.filter((row) => row.status.reviewed).length\n\t\t},\n\n\t\t/**\n\t\t * The progress line, for example \"2 of 5 reviewed\".\n\t\t *\n\t\t * @return {string} The summary.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tsummary() {\n\t\t\treturn t('nextcloud-vue', '{reviewed} of {total} reviewed', {\n\t\t\t\treviewed: this.reviewedCount,\n\t\t\t\ttotal: this.rows.length,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Accessible name for a list without a title.\n\t\t *\n\t\t * @return {string} The label.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tfallbackLabel() {\n\t\t\treturn t('nextcloud-vue', 'Documents to review')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-document-review-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(1.5 * var(--default-grid-baseline));\n}\n\n.cn-document-review-list__header {\n\talign-items: center;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: calc(2 * var(--default-grid-baseline));\n\tjustify-content: space-between;\n\tmargin-bottom: calc(2 * var(--default-grid-baseline));\n}\n\n.cn-document-review-list__title {\n\tfont-size: 1.1em;\n\tfont-weight: 700;\n\tmargin: 0;\n}\n\n.cn-document-review-list__summary,\n.cn-document-review-list__meta,\n.cn-document-review-list__empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-document-review-list__empty {\n\tmargin: 0;\n}\n\n.cn-document-review-list__rows {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.cn-document-review-list__row {\n\talign-items: center;\n\tborder-top: 1px solid var(--color-border);\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: calc(3 * var(--default-grid-baseline));\n\tpadding: calc(2.5 * var(--default-grid-baseline)) 0;\n}\n\n.cn-document-review-list__icon {\n\tcolor: var(--color-text-maxcontrast);\n\tflex: none;\n}\n\n.cn-document-review-list__text {\n\tdisplay: flex;\n\tflex: 1 1 220px;\n\tflex-direction: column;\n\tmin-width: 0;\n}\n\n.cn-document-review-list__name {\n\tfont-weight: 500;\n\toverflow-wrap: anywhere;\n}\n\na.cn-document-review-list__name {\n\tcolor: var(--color-primary-element);\n\ttext-decoration: underline;\n}\n\n.cn-document-review-list__meta {\n\tfont-size: 0.9em;\n}\n\n.cn-document-review-list__status {\n\tflex: none;\n}\n</style>\n"],"names":["CnStatusBadge","t"],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, createBlock, resolveDynamicComponent, withCtx, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createVNode, createElementVNode, renderSlot } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = ["aria-labelledby", "aria-label"];
|
|
4
|
+
const _hoisted_2 = {
|
|
5
|
+
key: 0,
|
|
6
|
+
class: "cn-document-review-list__header"
|
|
7
|
+
};
|
|
8
|
+
const _hoisted_3 = {
|
|
9
|
+
key: 1,
|
|
10
|
+
class: "cn-document-review-list__summary",
|
|
11
|
+
"data-testid": "cn-document-review-summary"
|
|
12
|
+
};
|
|
13
|
+
const _hoisted_4 = {
|
|
14
|
+
key: 1,
|
|
15
|
+
class: "cn-document-review-list__empty",
|
|
16
|
+
"data-testid": "cn-document-review-empty"
|
|
17
|
+
};
|
|
18
|
+
const _hoisted_5 = {
|
|
19
|
+
key: 2,
|
|
20
|
+
class: "cn-document-review-list__rows"
|
|
21
|
+
};
|
|
22
|
+
const _hoisted_6 = { class: "cn-document-review-list__text" };
|
|
23
|
+
const _hoisted_7 = ["href"];
|
|
24
|
+
const _hoisted_8 = {
|
|
25
|
+
key: 1,
|
|
26
|
+
class: "cn-document-review-list__name"
|
|
27
|
+
};
|
|
28
|
+
const _hoisted_9 = {
|
|
29
|
+
key: 2,
|
|
30
|
+
class: "cn-document-review-list__meta"
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
34
|
+
const _component_FileDocumentOutline = resolveComponent("FileDocumentOutline");
|
|
35
|
+
const _component_CnStatusBadge = resolveComponent("CnStatusBadge");
|
|
36
|
+
const _component_NcButton = resolveComponent("NcButton");
|
|
37
|
+
|
|
38
|
+
return (openBlock(), createElementBlock("section", {
|
|
39
|
+
class: "cn-document-review-list",
|
|
40
|
+
"data-testid": "cn-document-review-list",
|
|
41
|
+
"aria-labelledby": $props.title ? $data.titleId : null,
|
|
42
|
+
"aria-label": $props.title ? null : $options.fallbackLabel
|
|
43
|
+
}, [
|
|
44
|
+
($props.title || $options.rows.length > 0)
|
|
45
|
+
? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
46
|
+
($props.title)
|
|
47
|
+
? (openBlock(), createBlock(resolveDynamicComponent($props.titleTag), {
|
|
48
|
+
key: 0,
|
|
49
|
+
id: $data.titleId,
|
|
50
|
+
class: "cn-document-review-list__title"
|
|
51
|
+
}, {
|
|
52
|
+
default: withCtx(() => [
|
|
53
|
+
createTextVNode(toDisplayString($props.title), 1 /* TEXT */)
|
|
54
|
+
]),
|
|
55
|
+
_: 1 /* STABLE */
|
|
56
|
+
}, 8 /* PROPS */, ["id"]))
|
|
57
|
+
: createCommentVNode("v-if", true),
|
|
58
|
+
($options.rows.length > 0)
|
|
59
|
+
? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString($options.summary), 1 /* TEXT */))
|
|
60
|
+
: createCommentVNode("v-if", true)
|
|
61
|
+
]))
|
|
62
|
+
: createCommentVNode("v-if", true),
|
|
63
|
+
($options.rows.length === 0)
|
|
64
|
+
? (openBlock(), createElementBlock("p", _hoisted_4, toDisplayString($props.emptyText), 1 /* TEXT */))
|
|
65
|
+
: (openBlock(), createElementBlock("ul", _hoisted_5, [
|
|
66
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.rows, (row) => {
|
|
67
|
+
return (openBlock(), createElementBlock("li", {
|
|
68
|
+
key: row.key,
|
|
69
|
+
class: "cn-document-review-list__row",
|
|
70
|
+
"data-testid": "cn-document-review-row"
|
|
71
|
+
}, [
|
|
72
|
+
createVNode(_component_FileDocumentOutline, {
|
|
73
|
+
class: "cn-document-review-list__icon",
|
|
74
|
+
size: 22,
|
|
75
|
+
"aria-hidden": "true"
|
|
76
|
+
}),
|
|
77
|
+
createElementVNode("span", _hoisted_6, [
|
|
78
|
+
(row.href)
|
|
79
|
+
? (openBlock(), createElementBlock("a", {
|
|
80
|
+
key: 0,
|
|
81
|
+
class: "cn-document-review-list__name",
|
|
82
|
+
href: row.href
|
|
83
|
+
}, toDisplayString(row.name), 9 /* TEXT, PROPS */, _hoisted_7))
|
|
84
|
+
: (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString(row.name), 1 /* TEXT */)),
|
|
85
|
+
(row.meta)
|
|
86
|
+
? (openBlock(), createElementBlock("span", _hoisted_9, toDisplayString(row.meta), 1 /* TEXT */))
|
|
87
|
+
: createCommentVNode("v-if", true)
|
|
88
|
+
]),
|
|
89
|
+
createVNode(_component_CnStatusBadge, {
|
|
90
|
+
class: "cn-document-review-list__status",
|
|
91
|
+
label: row.status.label,
|
|
92
|
+
variant: row.status.variant
|
|
93
|
+
}, null, 8 /* PROPS */, ["label", "variant"]),
|
|
94
|
+
renderSlot(_ctx.$slots, "row-action", {
|
|
95
|
+
document: row.document,
|
|
96
|
+
status: row.status
|
|
97
|
+
}, () => [
|
|
98
|
+
($props.rowActionLabel)
|
|
99
|
+
? (openBlock(), createBlock(_component_NcButton, {
|
|
100
|
+
key: 0,
|
|
101
|
+
variant: "tertiary",
|
|
102
|
+
"aria-label": `${$props.rowActionLabel}: ${row.name}`,
|
|
103
|
+
"data-testid": "cn-document-review-action",
|
|
104
|
+
onClick: $event => (_ctx.$emit('row-action', row.document))
|
|
105
|
+
}, {
|
|
106
|
+
default: withCtx(() => [
|
|
107
|
+
createTextVNode(toDisplayString($props.rowActionLabel), 1 /* TEXT */)
|
|
108
|
+
]),
|
|
109
|
+
_: 1 /* STABLE */
|
|
110
|
+
}, 8 /* PROPS */, ["aria-label", "onClick"]))
|
|
111
|
+
: createCommentVNode("v-if", true)
|
|
112
|
+
])
|
|
113
|
+
]))
|
|
114
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
115
|
+
]))
|
|
116
|
+
], 8 /* PROPS */, _hoisted_1))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { render };
|
|
120
|
+
//# sourceMappingURL=CnDocumentReviewList.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnDocumentReviewList.vue3.js","sources":["../../../../src/components/CnDocumentReviewList/CnDocumentReviewList.vue?vue&type=template&id=9a0e5e62&lang.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<section\n\t\tclass=\"cn-document-review-list\"\n\t\tdata-testid=\"cn-document-review-list\"\n\t\t:aria-labelledby=\"title ? titleId : null\"\n\t\t:aria-label=\"title ? null : fallbackLabel\">\n\t\t<div v-if=\"title || rows.length > 0\" class=\"cn-document-review-list__header\">\n\t\t\t<component\n\t\t\t\t:is=\"titleTag\"\n\t\t\t\tv-if=\"title\"\n\t\t\t\t:id=\"titleId\"\n\t\t\t\tclass=\"cn-document-review-list__title\">\n\t\t\t\t{{ title }}\n\t\t\t</component>\n\t\t\t<span\n\t\t\t\tv-if=\"rows.length > 0\"\n\t\t\t\tclass=\"cn-document-review-list__summary\"\n\t\t\t\tdata-testid=\"cn-document-review-summary\">\n\t\t\t\t{{ summary }}\n\t\t\t</span>\n\t\t</div>\n\n\t\t<p v-if=\"rows.length === 0\" class=\"cn-document-review-list__empty\" data-testid=\"cn-document-review-empty\">\n\t\t\t{{ emptyText }}\n\t\t</p>\n\n\t\t<ul v-else class=\"cn-document-review-list__rows\">\n\t\t\t<li\n\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-document-review-list__row\"\n\t\t\t\tdata-testid=\"cn-document-review-row\">\n\t\t\t\t<FileDocumentOutline class=\"cn-document-review-list__icon\" :size=\"22\" aria-hidden=\"true\" />\n\t\t\t\t<span class=\"cn-document-review-list__text\">\n\t\t\t\t\t<a\n\t\t\t\t\t\tv-if=\"row.href\"\n\t\t\t\t\t\tclass=\"cn-document-review-list__name\"\n\t\t\t\t\t\t:href=\"row.href\">\n\t\t\t\t\t\t{{ row.name }}\n\t\t\t\t\t</a>\n\t\t\t\t\t<span v-else class=\"cn-document-review-list__name\">{{ row.name }}</span>\n\t\t\t\t\t<span v-if=\"row.meta\" class=\"cn-document-review-list__meta\">{{ row.meta }}</span>\n\t\t\t\t</span>\n\t\t\t\t<CnStatusBadge\n\t\t\t\t\tclass=\"cn-document-review-list__status\"\n\t\t\t\t\t:label=\"row.status.label\"\n\t\t\t\t\t:variant=\"row.status.variant\" />\n\t\t\t\t<!-- @slot row-action Replace the row's action button. -->\n\t\t\t\t<!-- @binding {object} document The row's document. -->\n\t\t\t\t<!-- @binding {object} status The row's resolved status ({ value, label, variant, reviewed }). -->\n\t\t\t\t<slot name=\"row-action\" :document=\"row.document\" :status=\"row.status\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"rowActionLabel\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:aria-label=\"`${rowActionLabel}: ${row.name}`\"\n\t\t\t\t\t\tdata-testid=\"cn-document-review-action\"\n\t\t\t\t\t\t@click=\"$emit('row-action', row.document)\">\n\t\t\t\t\t\t{{ rowActionLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</slot>\n\t\t\t</li>\n\t\t</ul>\n\t</section>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\nimport FileDocumentOutline from 'vue-material-design-icons/FileDocumentOutline.vue'\nimport { readPath } from '../../utils/readPath.js'\nimport { CnStatusBadge } from '../CnStatusBadge/index.js'\n\nlet documentReviewListUid = 0\n\n/**\n * CnDocumentReviewList: files that each need a verdict, and how far along you are.\n *\n * One row per file with its review status, a progress line (\"2 of 5 reviewed\")\n * and one action per row. Built for a disclosure request, where every document\n * is judged public, partly public or still to review, but the status field and\n * its values are yours to configure.\n *\n * ```vue\n * <CnDocumentReviewList\n * title=\"Review documents\"\n * :documents=\"[\n * { id: 1, name: 'Advice on street lighting', meta: 'PDF', reviewStatus: 'public' },\n * { id: 2, name: 'Budget note', meta: 'Word, 2 February 2026' },\n * ]\"\n * @row-action=\"openDocument\" />\n * ```\n *\n * The `document-review` detail widget type renders this list from a field on\n * the record.\n */\nexport default {\n\tname: 'CnDocumentReviewList',\n\n\tcomponents: {\n\t\tCnStatusBadge,\n\t\tFileDocumentOutline,\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\t/** The documents, one object per row. */\n\t\tdocuments: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Heading of the list. */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Element the heading renders as. */\n\t\ttitleTag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'h3',\n\t\t},\n\n\t\t/** Dot-path to a document's display name. Falls back to `title`, then `filename`. */\n\t\tnameField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'name',\n\t\t},\n\n\t\t/** Dot-path to the line under the name (type, date, origin). */\n\t\tmetaField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'meta',\n\t\t},\n\n\t\t/** Dot-path to a document's review status. */\n\t\tstatusField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'reviewStatus',\n\t\t},\n\n\t\t/** Dot-path to a URL that opens the document. When a row has one, its name is a link. */\n\t\threfField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'href',\n\t\t},\n\n\t\t/** Dot-path to the value that identifies a row. */\n\t\trowKey: {\n\t\t\ttype: String,\n\t\t\tdefault: 'id',\n\t\t},\n\n\t\t/**\n\t\t * The review statuses: `{ value, label, variant?, reviewed? }` each.\n\t\t * `variant` is a CnStatusBadge variant. `reviewed: true` counts the\n\t\t * row in the progress line. Empty uses the built-in three: public,\n\t\t * partly public and to review.\n\t\t */\n\t\tstatuses: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The status of a document that carries none, or one this list does\n\t\t * not know. Defaults to the first status that is not `reviewed`.\n\t\t */\n\t\tdefaultStatus: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label of the per-row action button. An empty string renders no button. */\n\t\trowActionLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Review'),\n\t\t},\n\n\t\t/** Shown when there are no documents. */\n\t\temptyText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'No documents to review.'),\n\t\t},\n\t},\n\n\temits: [\n\t\t/** A row's action button was pressed. Payload: the document. */\n\t\t'row-action',\n\t],\n\n\tdata() {\n\t\tdocumentReviewListUid += 1\n\t\treturn {\n\t\t\ttitleId: `cn-document-review-title-${documentReviewListUid}`,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The statuses in effect: the configured ones, or the built-in three.\n\t\t *\n\t\t * @return {Array<{value: string, label: string, variant: string, reviewed: boolean}>} The statuses.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\teffectiveStatuses() {\n\t\t\tconst configured = (Array.isArray(this.statuses) ? this.statuses : [])\n\t\t\t\t.filter((status) => status && status.value !== undefined && status.value !== null)\n\t\t\t\t.map((status) => ({\n\t\t\t\t\tvalue: String(status.value),\n\t\t\t\t\tlabel: typeof status.label === 'string' && status.label !== '' ? status.label : String(status.value),\n\t\t\t\t\tvariant: typeof status.variant === 'string' && status.variant !== '' ? status.variant : 'default',\n\t\t\t\t\treviewed: status.reviewed === true,\n\t\t\t\t}))\n\t\t\tif (configured.length > 0) {\n\t\t\t\treturn configured\n\t\t\t}\n\t\t\treturn [\n\t\t\t\t{ value: 'public', label: t('nextcloud-vue', 'Public'), variant: 'success', reviewed: true },\n\t\t\t\t{ value: 'partly-public', label: t('nextcloud-vue', 'Partly public'), variant: 'warning', reviewed: true },\n\t\t\t\t{ value: 'to-review', label: t('nextcloud-vue', 'To review'), variant: 'default', reviewed: false },\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * The status a document without a known one falls back to.\n\t\t *\n\t\t * @return {{value: string, label: string, variant: string, reviewed: boolean}} The fallback status.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tfallbackStatus() {\n\t\t\tconst statuses = this.effectiveStatuses\n\t\t\treturn statuses.find((status) => status.value === this.defaultStatus)\n\t\t\t\t|| statuses.find((status) => !status.reviewed)\n\t\t\t\t|| statuses[0]\n\t\t},\n\n\t\t/**\n\t\t * The rows, with everything the template needs resolved.\n\t\t *\n\t\t * @return {Array<{key: string, name: string, meta: string, href: string, status: object, document: object}>} The rows.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\trows() {\n\t\t\treturn (Array.isArray(this.documents) ? this.documents : [])\n\t\t\t\t.filter((document) => document && typeof document === 'object')\n\t\t\t\t.map((document, index) => {\n\t\t\t\t\tconst raw = readPath(document, this.statusField)\n\t\t\t\t\tconst wanted = raw === null || raw === undefined ? '' : String(raw).toLowerCase()\n\t\t\t\t\tconst status = this.effectiveStatuses.find((candidate) => candidate.value.toLowerCase() === wanted)\n\t\t\t\t\t\t|| this.fallbackStatus\n\t\t\t\t\tconst name = readPath(document, this.nameField) || document.title || document.filename || ''\n\t\t\t\t\tconst key = readPath(document, this.rowKey)\n\t\t\t\t\tconst href = readPath(document, this.hrefField)\n\t\t\t\t\tconst meta = readPath(document, this.metaField)\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey: key === undefined || key === null ? `row-${index}` : String(key),\n\t\t\t\t\t\tname: String(name),\n\t\t\t\t\t\tmeta: typeof meta === 'string' ? meta : '',\n\t\t\t\t\t\thref: typeof href === 'string' ? href : '',\n\t\t\t\t\t\tstatus,\n\t\t\t\t\t\tdocument,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * How many rows carry a reviewed status.\n\t\t *\n\t\t * @return {number} The count.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\treviewedCount() {\n\t\t\treturn this.rows.filter((row) => row.status.reviewed).length\n\t\t},\n\n\t\t/**\n\t\t * The progress line, for example \"2 of 5 reviewed\".\n\t\t *\n\t\t * @return {string} The summary.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tsummary() {\n\t\t\treturn t('nextcloud-vue', '{reviewed} of {total} reviewed', {\n\t\t\t\treviewed: this.reviewedCount,\n\t\t\t\ttotal: this.rows.length,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Accessible name for a list without a title.\n\t\t *\n\t\t * @return {string} The label.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tfallbackLabel() {\n\t\t\treturn t('nextcloud-vue', 'Documents to review')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-document-review-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(1.5 * var(--default-grid-baseline));\n}\n\n.cn-document-review-list__header {\n\talign-items: center;\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: calc(2 * var(--default-grid-baseline));\n\tjustify-content: space-between;\n\tmargin-bottom: calc(2 * var(--default-grid-baseline));\n}\n\n.cn-document-review-list__title {\n\tfont-size: 1.1em;\n\tfont-weight: 700;\n\tmargin: 0;\n}\n\n.cn-document-review-list__summary,\n.cn-document-review-list__meta,\n.cn-document-review-list__empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-document-review-list__empty {\n\tmargin: 0;\n}\n\n.cn-document-review-list__rows {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.cn-document-review-list__row {\n\talign-items: center;\n\tborder-top: 1px solid var(--color-border);\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: calc(3 * var(--default-grid-baseline));\n\tpadding: calc(2.5 * var(--default-grid-baseline)) 0;\n}\n\n.cn-document-review-list__icon {\n\tcolor: var(--color-text-maxcontrast);\n\tflex: none;\n}\n\n.cn-document-review-list__text {\n\tdisplay: flex;\n\tflex: 1 1 220px;\n\tflex-direction: column;\n\tmin-width: 0;\n}\n\n.cn-document-review-list__name {\n\tfont-weight: 500;\n\toverflow-wrap: anywhere;\n}\n\na.cn-document-review-list__name {\n\tcolor: var(--color-primary-element);\n\ttext-decoration: underline;\n}\n\n.cn-document-review-list__meta {\n\tfont-size: 0.9em;\n}\n\n.cn-document-review-list__status {\n\tflex: none;\n}\n</style>\n"],"names":["_createElementBlock","_openBlock","_createBlock","_resolveDynamicComponent","_toDisplayString","_createVNode","_renderSlot"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import script from './CnDocumentReviewWidget.vue2.js';
|
|
2
|
+
import { render } from './CnDocumentReviewWidget.vue3.js';
|
|
3
|
+
|
|
4
|
+
script.render = render;
|
|
5
|
+
script.__scopeId = "data-v-22291596";
|
|
6
|
+
script.__file = "src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue";
|
|
7
|
+
const __sfc_main = script;
|
|
8
|
+
|
|
9
|
+
export { __sfc_main as default };
|
|
10
|
+
//# sourceMappingURL=CnDocumentReviewWidget.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnDocumentReviewWidget.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import __sfc_main from './CnDocumentReviewList.vue.js';
|
|
2
|
+
import { readPath } from '../../utils/readPath.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* CnDocumentReviewWidget: the `document-review` detail widget type.
|
|
6
|
+
*
|
|
7
|
+
* Renders CnDocumentReviewList from a list on the bound record:
|
|
8
|
+
* `content: { field, title?, statusField?, statuses?, rowAction?: { label, route } }`.
|
|
9
|
+
* A row action with a `route` opens that route with the row's key as `id`.
|
|
10
|
+
* Resolved by its registry key, not exported.
|
|
11
|
+
*/
|
|
12
|
+
var script = {
|
|
13
|
+
name: 'CnDocumentReviewWidget',
|
|
14
|
+
|
|
15
|
+
components: {
|
|
16
|
+
CnDocumentReviewList: __sfc_main,
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
props: {
|
|
20
|
+
/** The widget's content. `field` is the dot-path to the documents on the record. */
|
|
21
|
+
content: {
|
|
22
|
+
type: Object,
|
|
23
|
+
default: () => ({}),
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
/** The bound record. */
|
|
27
|
+
objectData: {
|
|
28
|
+
type: Object,
|
|
29
|
+
default: null,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
computed: {
|
|
34
|
+
/**
|
|
35
|
+
* The documents read off the record.
|
|
36
|
+
*
|
|
37
|
+
* @return {Array<object>} The documents, or an empty list.
|
|
38
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
39
|
+
*/
|
|
40
|
+
documents() {
|
|
41
|
+
const value = readPath(this.objectData || {}, this.content.field || 'documents');
|
|
42
|
+
return Array.isArray(value) ? value : []
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The row action's label. Empty, and so no button, unless the content declares one.
|
|
47
|
+
*
|
|
48
|
+
* @return {string} The label.
|
|
49
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
50
|
+
*/
|
|
51
|
+
rowActionLabel() {
|
|
52
|
+
const label = this.content.rowAction?.label;
|
|
53
|
+
return typeof label === 'string' ? label : ''
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
methods: {
|
|
58
|
+
/**
|
|
59
|
+
* Open the route the row action names, with the row's key as `id`.
|
|
60
|
+
*
|
|
61
|
+
* @param {object} document The row's document.
|
|
62
|
+
* @return {void}
|
|
63
|
+
* @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
|
|
64
|
+
*/
|
|
65
|
+
onRowAction(document) {
|
|
66
|
+
const route = this.content.rowAction?.route;
|
|
67
|
+
const id = readPath(document, this.content.rowKey || 'id');
|
|
68
|
+
if (typeof route !== 'string' || route === '' || !this.$router || id === undefined || id === null) {
|
|
69
|
+
return
|
|
70
|
+
}
|
|
71
|
+
this.$router.push({ name: route, params: { id: String(id) } });
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export { script as default };
|
|
77
|
+
//# sourceMappingURL=CnDocumentReviewWidget.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnDocumentReviewWidget.vue2.js","sources":["../../../../src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div class=\"cn-case-widget-card\">\n\t\t<CnDocumentReviewList\n\t\t\t:documents=\"documents\"\n\t\t\t:title=\"content.title || ''\"\n\t\t\t:nameField=\"content.nameField || 'name'\"\n\t\t\t:metaField=\"content.metaField || 'meta'\"\n\t\t\t:statusField=\"content.statusField || 'reviewStatus'\"\n\t\t\t:hrefField=\"content.hrefField || 'href'\"\n\t\t\t:rowKey=\"content.rowKey || 'id'\"\n\t\t\t:statuses=\"content.statuses || []\"\n\t\t\t:defaultStatus=\"content.defaultStatus || ''\"\n\t\t\t:rowActionLabel=\"rowActionLabel\"\n\t\t\t:emptyText=\"content.emptyText || undefined\"\n\t\t\t@rowAction=\"onRowAction\" />\n\t</div>\n</template>\n\n<script>\nimport CnDocumentReviewList from './CnDocumentReviewList.vue'\nimport { readPath } from '../../utils/readPath.js'\n\n/**\n * CnDocumentReviewWidget: the `document-review` detail widget type.\n *\n * Renders CnDocumentReviewList from a list on the bound record:\n * `content: { field, title?, statusField?, statuses?, rowAction?: { label, route } }`.\n * A row action with a `route` opens that route with the row's key as `id`.\n * Resolved by its registry key, not exported.\n */\nexport default {\n\tname: 'CnDocumentReviewWidget',\n\n\tcomponents: {\n\t\tCnDocumentReviewList,\n\t},\n\n\tprops: {\n\t\t/** The widget's content. `field` is the dot-path to the documents on the record. */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The bound record. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The documents read off the record.\n\t\t *\n\t\t * @return {Array<object>} The documents, or an empty list.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tdocuments() {\n\t\t\tconst value = readPath(this.objectData || {}, this.content.field || 'documents')\n\t\t\treturn Array.isArray(value) ? value : []\n\t\t},\n\n\t\t/**\n\t\t * The row action's label. Empty, and so no button, unless the content declares one.\n\t\t *\n\t\t * @return {string} The label.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\trowActionLabel() {\n\t\t\tconst label = this.content.rowAction?.label\n\t\t\treturn typeof label === 'string' ? label : ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the route the row action names, with the row's key as `id`.\n\t\t *\n\t\t * @param {object} document The row's document.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tonRowAction(document) {\n\t\t\tconst route = this.content.rowAction?.route\n\t\t\tconst id = readPath(document, this.content.rowKey || 'id')\n\t\t\tif (typeof route !== 'string' || route === '' || !this.$router || id === undefined || id === null) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$router.push({ name: route, params: { id: String(id) } })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-case-widget-card {\n\tbackground: var(--color-main-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius-large);\n\tpadding: calc(5 * var(--default-grid-baseline));\n}\n</style>\n"],"names":["CnDocumentReviewList"],"mappings":";;;AA2BA;;AAEC;;AAEA;;AAEA;;AAED,aAAe;CACd,IAAI,EAAE,wBAAwB;;CAE9B,UAAU,EAAE;AACX,wBAAAA,UAAoB;EACpB;;AAED,CAAA,KAAK,EAAE;AACN;AACA,EAAA,OAAO,EAAE;GACR,IAAI,EAAE,MAAM;AACZ,GAAA,OAAO,EAAE,OAAO,EAAE,CAAC;GACnB;;AAED;EACA,UAAU,EAAE;GACX,IAAI,EAAE,MAAM;GACZ,OAAO,EAAE,IAAI;GACb;EACD;;AAED,CAAA,QAAQ,EAAE;AACT;;AAEC;;AAEA;;EAED,SAAS,GAAG;AACX,GAAA,MAAM,KAAI,GAAI,QAAQ,CAAC,IAAI,CAAC,UAAS,IAAK,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,KAAM,IAAG,WAAW,EAAA;AAC/E,GAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAA,GAAI,KAAI,GAAI,EAAC;GACvC;;AAED;AACC;AACA;;AAEA;;AAED,EAAA,cAAc,GAAG;AAChB,GAAA,MAAM,KAAM,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAI;AAC1C,GAAA,OAAO,OAAO,KAAM,KAAI,QAAS,GAAE,KAAI,GAAI,EAAC;GAC5C;EACD;;AAED,CAAA,OAAO,EAAE;AACR;;AAEC;AACA;;AAEA;;AAED,EAAA,WAAW,CAAC,QAAQ,EAAE;AACrB,GAAA,MAAM,KAAM,GAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAI;GAC1C,MAAM,EAAG,GAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAK,IAAK,IAAI,EAAA;AACzD,GAAA,IAAI,OAAO,KAAI,KAAM,QAAS,IAAG,UAAU,EAAC,IAAK,CAAC,IAAI,CAAC,OAAM,IAAK,EAAG,KAAI,aAAa,EAAC,KAAM,IAAI,EAAE;IAClG,MAAK;AACN,IAAA;GACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAE,EAAA,EAAG,EAAA;GAC7D;EACD;AACF;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, createVNode } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = { class: "cn-case-widget-card" };
|
|
4
|
+
|
|
5
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
6
|
+
const _component_CnDocumentReviewList = resolveComponent("CnDocumentReviewList");
|
|
7
|
+
|
|
8
|
+
return (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
9
|
+
createVNode(_component_CnDocumentReviewList, {
|
|
10
|
+
documents: $options.documents,
|
|
11
|
+
title: $props.content.title || '',
|
|
12
|
+
nameField: $props.content.nameField || 'name',
|
|
13
|
+
metaField: $props.content.metaField || 'meta',
|
|
14
|
+
statusField: $props.content.statusField || 'reviewStatus',
|
|
15
|
+
hrefField: $props.content.hrefField || 'href',
|
|
16
|
+
rowKey: $props.content.rowKey || 'id',
|
|
17
|
+
statuses: $props.content.statuses || [],
|
|
18
|
+
defaultStatus: $props.content.defaultStatus || '',
|
|
19
|
+
rowActionLabel: $options.rowActionLabel,
|
|
20
|
+
emptyText: $props.content.emptyText || undefined,
|
|
21
|
+
onRowAction: $options.onRowAction
|
|
22
|
+
}, null, 8 /* PROPS */, ["documents", "title", "nameField", "metaField", "statusField", "hrefField", "rowKey", "statuses", "defaultStatus", "rowActionLabel", "emptyText", "onRowAction"])
|
|
23
|
+
]))
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export { render };
|
|
27
|
+
//# sourceMappingURL=CnDocumentReviewWidget.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnDocumentReviewWidget.vue3.js","sources":["../../../../src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue?vue&type=template&id=22291596&lang.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div class=\"cn-case-widget-card\">\n\t\t<CnDocumentReviewList\n\t\t\t:documents=\"documents\"\n\t\t\t:title=\"content.title || ''\"\n\t\t\t:nameField=\"content.nameField || 'name'\"\n\t\t\t:metaField=\"content.metaField || 'meta'\"\n\t\t\t:statusField=\"content.statusField || 'reviewStatus'\"\n\t\t\t:hrefField=\"content.hrefField || 'href'\"\n\t\t\t:rowKey=\"content.rowKey || 'id'\"\n\t\t\t:statuses=\"content.statuses || []\"\n\t\t\t:defaultStatus=\"content.defaultStatus || ''\"\n\t\t\t:rowActionLabel=\"rowActionLabel\"\n\t\t\t:emptyText=\"content.emptyText || undefined\"\n\t\t\t@rowAction=\"onRowAction\" />\n\t</div>\n</template>\n\n<script>\nimport CnDocumentReviewList from './CnDocumentReviewList.vue'\nimport { readPath } from '../../utils/readPath.js'\n\n/**\n * CnDocumentReviewWidget: the `document-review` detail widget type.\n *\n * Renders CnDocumentReviewList from a list on the bound record:\n * `content: { field, title?, statusField?, statuses?, rowAction?: { label, route } }`.\n * A row action with a `route` opens that route with the row's key as `id`.\n * Resolved by its registry key, not exported.\n */\nexport default {\n\tname: 'CnDocumentReviewWidget',\n\n\tcomponents: {\n\t\tCnDocumentReviewList,\n\t},\n\n\tprops: {\n\t\t/** The widget's content. `field` is the dot-path to the documents on the record. */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The bound record. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The documents read off the record.\n\t\t *\n\t\t * @return {Array<object>} The documents, or an empty list.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tdocuments() {\n\t\t\tconst value = readPath(this.objectData || {}, this.content.field || 'documents')\n\t\t\treturn Array.isArray(value) ? value : []\n\t\t},\n\n\t\t/**\n\t\t * The row action's label. Empty, and so no button, unless the content declares one.\n\t\t *\n\t\t * @return {string} The label.\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\trowActionLabel() {\n\t\t\tconst label = this.content.rowAction?.label\n\t\t\treturn typeof label === 'string' ? label : ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Open the route the row action names, with the row's key as `id`.\n\t\t *\n\t\t * @param {object} document The row's document.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list\n\t\t */\n\t\tonRowAction(document) {\n\t\t\tconst route = this.content.rowAction?.route\n\t\t\tconst id = readPath(document, this.content.rowKey || 'id')\n\t\t\tif (typeof route !== 'string' || route === '' || !this.$router || id === undefined || id === null) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$router.push({ name: route, params: { id: String(id) } })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-case-widget-card {\n\tbackground: var(--color-main-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius-large);\n\tpadding: calc(5 * var(--default-grid-baseline));\n}\n</style>\n"],"names":["_openBlock","_createElementBlock"],"mappings":";;AAWM,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,qBAAqB,GAAA;;;;;AAA9B,EAAA,QAAAA,SAAA,EAAA,EAAAC,kBAAA,QAAA;;AAEC,MAAA,SAAS,EAAE,QAAS,CAAA,SAAA;MACpB,KAAK,EAAE,MAAO,CAAA,OAAA,CAAC,KAAK,IAAA,EAAA;MACpB,SAAS,EAAE,MAAO,CAAA,OAAA,CAAC,SAAS,IAAA,MAAA;MAC5B,SAAS,EAAE,MAAO,CAAA,OAAA,CAAC,SAAS,IAAA,MAAA;MAC5B,WAAW,EAAE,MAAO,CAAA,OAAA,CAAC,WAAS,IAAA,cAAA;MAC9B,SAAS,EAAE,MAAO,CAAA,OAAA,CAAC,SAAU,IAAA,MAAA;MAC7B,MAAM,EAAE,MAAO,CAAA,OAAA,CAAC,MAAM,IAAA,IAAA;MACtB,QAAE,EAAA,MAAA,CAAA,OAAA,CAAA,QAAA,IAAA,EAAA;;;;;;;;;;;"}
|