@conduction/nextcloud-vue 2.80.0 → 2.81.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.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +3 -3
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +80 -4
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +95 -91
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +140 -10
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +52 -16
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +17 -3
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +63 -52
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js +10 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js.map +1 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js +252 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js +140 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnChipsFieldWidget/index.js +26 -0
- package/dist/esm/components/CnChipsFieldWidget/index.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js +10 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js +354 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js +172 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/index.js +27 -0
- package/dist/esm/components/CnChoicePickerWidget/index.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +2 -2
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +65 -5
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +19 -11
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +3 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +72 -0
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +21 -4
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js +7 -7
- package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +131 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +80 -5
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +282 -69
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +302 -4
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +417 -244
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js +101 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js +141 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +60 -0
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js +74 -49
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +29 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +48 -4
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +7 -7
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +65 -2
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +6 -2
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +63 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +8 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +14 -0
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js +5 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +10 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +174 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +75 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnRadioCardsWidget/index.js +28 -0
- package/dist/esm/components/CnRadioCardsWidget/index.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +30 -6
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +34 -25
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js +10 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js +222 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js +64 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/index.js +30 -0
- package/dist/esm/components/CnSavedViewsWidget/index.js.map +1 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +10 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +347 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +184 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsFormWidget/index.js +27 -0
- package/dist/esm/components/CnSettingsFormWidget/index.js.map +1 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +87 -6
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +84 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +85 -41
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +10 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +159 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js +60 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSwitchRowsWidget/index.js +26 -0
- package/dist/esm/components/CnSwitchRowsWidget/index.js.map +1 -0
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +47 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +16 -14
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +80 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +75 -32
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +10 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js.map +1 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +269 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js +106 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnToggleTableWidget/index.js +27 -0
- package/dist/esm/components/CnToggleTableWidget/index.js.map +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +7 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +7 -2
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
- package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +197 -6
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +96 -50
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
- package/dist/esm/composables/useListView.js +4 -4
- package/dist/esm/composables/useListView.js.map +1 -1
- package/dist/esm/index.js +17 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +9 -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 +1041 -12
- package/dist/esm/utils/contentHeaderLink.js +51 -0
- package/dist/esm/utils/contentHeaderLink.js.map +1 -0
- package/dist/esm/utils/facets.js +75 -3
- package/dist/esm/utils/facets.js.map +1 -1
- package/dist/esm/utils/fetchFilterCounts.js +40 -5
- package/dist/esm/utils/fetchFilterCounts.js.map +1 -1
- package/dist/esm/utils/fillTemplate.js +7 -1
- package/dist/esm/utils/fillTemplate.js.map +1 -1
- package/dist/esm/utils/initials.js +32 -0
- package/dist/esm/utils/initials.js.map +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js +7 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/objectWrite.js +59 -0
- package/dist/esm/utils/objectWrite.js.map +1 -0
- package/dist/esm/utils/pageControls.js +81 -0
- package/dist/esm/utils/pageControls.js.map +1 -0
- package/dist/esm/utils/personalLenses.js +40 -3
- package/dist/esm/utils/personalLenses.js.map +1 -1
- package/dist/esm/utils/resolveFilterTokens.js +1 -1
- package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
- package/dist/esm/utils/resolveManifestTokens.js +2 -0
- package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
- package/dist/esm/utils/sentinelTokens.js +19 -1
- package/dist/esm/utils/sentinelTokens.js.map +1 -1
- package/dist/esm/utils/userGroupsPeek.js +91 -0
- package/dist/esm/utils/userGroupsPeek.js.map +1 -0
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/visibleWhen.js +57 -5
- package/dist/esm/utils/visibleWhen.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +1 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/esm/utils/widgetVisibility.js +4 -57
- package/dist/esm/utils/widgetVisibility.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +13589 -7833
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1041 -12
- package/l10n/en.json +9 -1
- package/l10n/nl.json +55 -1
- package/package.json +2 -1
- package/scripts/check-docs-mdx.mjs +108 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +6 -1
- package/src/components/CnAppRoot/CnAppRoot.md +4 -2
- package/src/components/CnAppRoot/CnAppRoot.vue +151 -59
- package/src/components/CnBannerWidget/CnBannerWidget.vue +205 -20
- package/src/components/CnCellRenderer/CnCellRenderer.md +2 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +47 -4
- package/src/components/CnChipsFieldWidget/CnChipsFieldWidget.vue +433 -0
- package/src/components/CnChipsFieldWidget/index.js +25 -0
- package/src/components/CnChoicePickerWidget/CnChoicePickerWidget.vue +556 -0
- package/src/components/CnChoicePickerWidget/index.js +26 -0
- package/src/components/CnConversationThread/CnConversationWidget.vue +1 -1
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +2 -2
- package/src/components/CnDashboardPage/CnDashboardPage.vue +78 -5
- package/src/components/CnDataTable/CnDataTable.vue +21 -12
- package/src/components/CnDetailPage/CnDetailPage.vue +89 -3
- package/src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue +1 -1
- package/src/components/CnFacetSidebar/CnFacetSidebar.vue +7 -7
- package/src/components/CnFactsWidget/CnFactsWidget.vue +142 -2
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +268 -6
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +588 -117
- package/src/components/CnFilesBrowser/filesBrowser.js +100 -0
- package/src/components/CnFilesBrowser/filesBrowserColumns.js +140 -0
- package/src/components/CnFormPage/CnFormPage.vue +81 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +56 -4
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +7 -7
- package/src/components/CnNextStepCard/CnNextStepWidget.vue +1 -1
- package/src/components/CnObjectListWidget/CnObjectListWidget.vue +69 -2
- package/src/components/CnObjectSidebar/CnFilesTab.vue +70 -1
- package/src/components/CnObjectSidebar/CnNotesTab.vue +16 -0
- package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +313 -0
- package/src/components/CnRadioCardsWidget/index.js +27 -0
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +55 -6
- package/src/components/CnSavedViewsWidget/CnSavedViewsWidget.vue +296 -0
- package/src/components/CnSavedViewsWidget/index.js +29 -0
- package/src/components/CnSegmentedControl/CnSegmentedControl.vue +13 -0
- package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +555 -0
- package/src/components/CnSettingsFormWidget/index.js +26 -0
- package/src/components/CnStatWidget/CnStatWidget.vue +87 -6
- package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +180 -3
- package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +226 -0
- package/src/components/CnSwitchRowsWidget/index.js +25 -0
- package/src/components/CnTabsWidget/CnTabsWidget.vue +82 -3
- package/src/components/CnTasksWidget/CnTasksWidget.vue +175 -15
- package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +386 -0
- package/src/components/CnToggleTableWidget/index.js +26 -0
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +7 -0
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +7 -2
- package/src/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
- package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +309 -11
- package/src/components/index.js +15 -0
- package/src/composables/useListView.js +4 -4
- package/src/css/look-board-detail.css +36 -2
- package/src/css/look-board-index.css +39 -8
- package/src/css/look-board.css +72 -0
- package/src/index.js +15 -0
- package/src/schemas/app-manifest-v2.schema.json +93 -9
- package/src/utils/contentHeaderLink.js +48 -0
- package/src/utils/facets.js +74 -2
- package/src/utils/fetchFilterCounts.js +39 -4
- package/src/utils/fillTemplate.js +7 -1
- package/src/utils/initials.js +29 -0
- package/src/utils/libraryWidgetKeys.js +7 -0
- package/src/utils/objectWrite.js +55 -0
- package/src/utils/pageControls.js +78 -0
- package/src/utils/personalLenses.js +39 -2
- package/src/utils/resolveFilterTokens.js +3 -1
- package/src/utils/resolveManifestTokens.js +2 -0
- package/src/utils/sentinelTokens.js +19 -1
- package/src/utils/userGroupsPeek.js +87 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/visibleWhen.js +56 -4
- package/src/utils/widgetDispatch.js +1 -1
- package/src/utils/widgetVisibility.js +7 -56
|
@@ -22,8 +22,8 @@ import __sfc_main$1 from '../CnIcon/CnIcon.vue.js';
|
|
|
22
22
|
import { readUserPreference, writeUserPreference } from '../../composables/useUserPreferences.js';
|
|
23
23
|
import { dispatchAction } from '../../utils/actionsDispatcher.js';
|
|
24
24
|
import { preventMiddleClickAutoscroll, isNewTabClick, isRowMiddleClick } from '../../utils/rowAuxClick.js';
|
|
25
|
-
import { crumbsFor, ACTIONS_NEEDING_THE_FILES_PAGE, joinPath } from './filesBrowser.js';
|
|
26
|
-
import { sortNodesByColumn, normaliseFileColumns, visibleFileColumns, attributePropertiesFor, fileColumnValue } from './filesBrowserColumns.js';
|
|
25
|
+
import { crumbsFor, ACTIONS_NEEDING_THE_FILES_PAGE, joinPath, hostActionApplies } from './filesBrowser.js';
|
|
26
|
+
import { sortNodesByColumn, normaliseFileColumns, visibleFileColumns, facetCounts, nodeMatchesFacets, groupNodes, attributePropertiesFor, fileColumnValue } from './filesBrowserColumns.js';
|
|
27
27
|
|
|
28
28
|
let uploadSeq = 0;
|
|
29
29
|
|
|
@@ -99,9 +99,11 @@ var script = {
|
|
|
99
99
|
* dispatched through the page's action runner with the node's
|
|
100
100
|
* `fileId`, `fileName` and `path` merged into an `open-modal` action's
|
|
101
101
|
* props (or appended as the node to a `handler` action's args). Folders
|
|
102
|
-
* get none. `icon` is an MDI icon name.
|
|
102
|
+
* get none. `icon` is an MDI icon name. `visibleIf` offers the action
|
|
103
|
+
* only on some files: `extension` (a list, no case) and `mime` (a list;
|
|
104
|
+
* `image/` or `image/*` names the family), each that is named must hold.
|
|
103
105
|
*
|
|
104
|
-
* @type {Array<{id: string, label: string, icon?: string, type?: string, target?: string, props?: object, handler?: string, args?: Array}>}
|
|
106
|
+
* @type {Array<{id: string, label: string, icon?: string, type?: string, target?: string, props?: object, handler?: string, args?: Array, visibleIf?: {extension?: string[], mime?: string[]}}>}
|
|
105
107
|
*/
|
|
106
108
|
rowActions: {
|
|
107
109
|
type: Array,
|
|
@@ -321,6 +323,52 @@ var script = {
|
|
|
321
323
|
default: 'files-browser-columns',
|
|
322
324
|
},
|
|
323
325
|
|
|
326
|
+
/**
|
|
327
|
+
* The host's actions on a selection of files, declared like
|
|
328
|
+
* `rowActions`. With at least one, every file row (never a folder or a
|
|
329
|
+
* linked row) gets a checkbox, the header a select-all, and a bar with
|
|
330
|
+
* these actions shows while files are selected. An `open-modal`
|
|
331
|
+
* action's props gain `files` (each `{ fileId, fileName, path }`) and
|
|
332
|
+
* `fileIds`; a `handler` action's args gain the selected nodes. The
|
|
333
|
+
* selection clears after an action and when another folder opens.
|
|
334
|
+
*
|
|
335
|
+
* @type {Array<{id: string, label: string, icon?: string, type?: string, target?: string, props?: object, handler?: string, args?: Array}>}
|
|
336
|
+
*/
|
|
337
|
+
bulkActions: {
|
|
338
|
+
type: Array,
|
|
339
|
+
default: () => [],
|
|
340
|
+
},
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* The key of a declared column to group the files on: a heading row
|
|
344
|
+
* per value, in the order each is first met, with its count. Files
|
|
345
|
+
* with no value come last under `groupEmptyLabel`; folders stay above.
|
|
346
|
+
* Empty (the default) does not group.
|
|
347
|
+
*/
|
|
348
|
+
groupBy: {
|
|
349
|
+
type: String,
|
|
350
|
+
default: '',
|
|
351
|
+
},
|
|
352
|
+
|
|
353
|
+
/** The heading of the group of files with no value in the `groupBy` column. */
|
|
354
|
+
groupEmptyLabel: {
|
|
355
|
+
type: String,
|
|
356
|
+
default: () => translate('nextcloud-vue', 'Other'),
|
|
357
|
+
},
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Keys of declared columns to filter on. Each gets a chip per value in
|
|
361
|
+
* use among the folder's files (a list counts per entry) with how many
|
|
362
|
+
* files carry it; chosen chips keep the files with any chosen value of
|
|
363
|
+
* that column, across every column with a choice.
|
|
364
|
+
*
|
|
365
|
+
* @type {string[]}
|
|
366
|
+
*/
|
|
367
|
+
facets: {
|
|
368
|
+
type: Array,
|
|
369
|
+
default: () => [],
|
|
370
|
+
},
|
|
371
|
+
|
|
324
372
|
/** Label of the toolbar's Columns chooser. */
|
|
325
373
|
columnsLabel: {
|
|
326
374
|
type: String,
|
|
@@ -343,6 +391,10 @@ var script = {
|
|
|
343
391
|
sortAsc: true,
|
|
344
392
|
/** The host's per-file data for `row` columns, by file id. */
|
|
345
393
|
resolvedRowData: null,
|
|
394
|
+
/** File ids (as strings) of the selected files. */
|
|
395
|
+
selectedIds: [],
|
|
396
|
+
/** Chosen facet values by column key. */
|
|
397
|
+
facetSelections: {},
|
|
346
398
|
/**
|
|
347
399
|
* The column keys this user chose to see, or null while they have
|
|
348
400
|
* chosen nothing. Never a source of membership: it is intersected
|
|
@@ -473,6 +525,149 @@ var script = {
|
|
|
473
525
|
return visibleFileColumns(this.declaredColumns, this.visibleColumnKeys)
|
|
474
526
|
},
|
|
475
527
|
|
|
528
|
+
/**
|
|
529
|
+
* The declared columns by key, for grouping and facets.
|
|
530
|
+
*
|
|
531
|
+
* @return {object} Resolved columns by key.
|
|
532
|
+
*/
|
|
533
|
+
columnsByKey() {
|
|
534
|
+
const byKey = {};
|
|
535
|
+
this.declaredColumns.forEach((column) => {
|
|
536
|
+
byKey[column.key] = column;
|
|
537
|
+
});
|
|
538
|
+
return byKey
|
|
539
|
+
},
|
|
540
|
+
|
|
541
|
+
/**
|
|
542
|
+
* How many cells a row has, for a heading or message spanning the row.
|
|
543
|
+
*
|
|
544
|
+
* @return {number} The column count.
|
|
545
|
+
*/
|
|
546
|
+
columnCount() {
|
|
547
|
+
return this.renderedColumns.length + 2 + (this.bulkEnabled ? 1 : 0)
|
|
548
|
+
},
|
|
549
|
+
|
|
550
|
+
/**
|
|
551
|
+
* Whether the host gave bulk actions, which turns on the selection.
|
|
552
|
+
*
|
|
553
|
+
* @return {boolean} True with at least one bulk action.
|
|
554
|
+
* @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
|
|
555
|
+
*/
|
|
556
|
+
bulkEnabled() {
|
|
557
|
+
return Array.isArray(this.bulkActions) && this.bulkActions.length > 0
|
|
558
|
+
},
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* The listed folders, in display order.
|
|
562
|
+
*
|
|
563
|
+
* @return {Array<object>} The folder nodes.
|
|
564
|
+
*/
|
|
565
|
+
folderNodes() {
|
|
566
|
+
return this.sorted.filter((node) => this.isFolder(node))
|
|
567
|
+
},
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* The listed files, in display order, before the filter.
|
|
571
|
+
*
|
|
572
|
+
* @return {Array<object>} The file nodes.
|
|
573
|
+
*/
|
|
574
|
+
fileNodes() {
|
|
575
|
+
return this.sorted.filter((node) => !this.isFolder(node))
|
|
576
|
+
},
|
|
577
|
+
|
|
578
|
+
/**
|
|
579
|
+
* Whether any facet value is chosen.
|
|
580
|
+
*
|
|
581
|
+
* @return {boolean} True when the filter narrows the list.
|
|
582
|
+
*/
|
|
583
|
+
facetActive() {
|
|
584
|
+
return Object.values(this.facetSelections).some((values) => Array.isArray(values) && values.length > 0)
|
|
585
|
+
},
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* The chips: per facet column, the values in use with their counts.
|
|
589
|
+
*
|
|
590
|
+
* @return {Array<{key: string, label: string, values: Array<{value: string, count: number, active: boolean}>}>} The facets.
|
|
591
|
+
* @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
|
|
592
|
+
*/
|
|
593
|
+
facetGroups() {
|
|
594
|
+
const keys = Array.isArray(this.facets) ? this.facets : [];
|
|
595
|
+
return keys
|
|
596
|
+
.map((key) => this.columnsByKey[key])
|
|
597
|
+
.filter(Boolean)
|
|
598
|
+
.map((column) => {
|
|
599
|
+
const chosen = this.facetSelections[column.key] || [];
|
|
600
|
+
return {
|
|
601
|
+
key: column.key,
|
|
602
|
+
label: this.columnLabel(column),
|
|
603
|
+
values: facetCounts(this.fileNodes, column, this.resolvedRowData)
|
|
604
|
+
.map((entry) => ({ ...entry, active: chosen.includes(entry.value) })),
|
|
605
|
+
}
|
|
606
|
+
})
|
|
607
|
+
.filter((facet) => facet.values.length > 0)
|
|
608
|
+
},
|
|
609
|
+
|
|
610
|
+
/**
|
|
611
|
+
* The files the filter keeps.
|
|
612
|
+
*
|
|
613
|
+
* @return {Array<object>} The file nodes.
|
|
614
|
+
*/
|
|
615
|
+
filteredFiles() {
|
|
616
|
+
if (!this.facetActive) {
|
|
617
|
+
return this.fileNodes
|
|
618
|
+
}
|
|
619
|
+
return this.fileNodes.filter((node) => nodeMatchesFacets(node, this.facetSelections, this.columnsByKey, this.resolvedRowData))
|
|
620
|
+
},
|
|
621
|
+
|
|
622
|
+
/**
|
|
623
|
+
* What the table body renders, in order: folders, then the files,
|
|
624
|
+
* under a heading per group when the host groups.
|
|
625
|
+
*
|
|
626
|
+
* @return {Array<{key: string, group?: object, node?: object}>} The rows.
|
|
627
|
+
* @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
|
|
628
|
+
*/
|
|
629
|
+
displayRows() {
|
|
630
|
+
const rows = this.folderNodes.map((node) => ({ key: node.source, node }));
|
|
631
|
+
const column = this.groupBy ? this.columnsByKey[this.groupBy] : null;
|
|
632
|
+
if (!column) {
|
|
633
|
+
this.filteredFiles.forEach((node) => rows.push({ key: node.source, node }));
|
|
634
|
+
return rows
|
|
635
|
+
}
|
|
636
|
+
groupNodes(this.filteredFiles, column, this.resolvedRowData).forEach((group) => {
|
|
637
|
+
const label = group.value === null ? this.groupEmptyLabel : group.value;
|
|
638
|
+
rows.push({ key: `group-${group.value === null ? '' : group.value}`, group: { label, count: group.nodes.length } });
|
|
639
|
+
group.nodes.forEach((node) => rows.push({ key: node.source, node }));
|
|
640
|
+
});
|
|
641
|
+
return rows
|
|
642
|
+
},
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* The ids of the files a select-all takes: the files the filter keeps.
|
|
646
|
+
*
|
|
647
|
+
* @return {string[]} File ids as strings.
|
|
648
|
+
*/
|
|
649
|
+
selectableIds() {
|
|
650
|
+
return this.filteredFiles.map((node) => String(node.fileid))
|
|
651
|
+
},
|
|
652
|
+
|
|
653
|
+
/**
|
|
654
|
+
* Whether every selectable file is selected.
|
|
655
|
+
*
|
|
656
|
+
* @return {boolean} True when all are.
|
|
657
|
+
*/
|
|
658
|
+
allSelected() {
|
|
659
|
+
return this.selectableIds.length > 0 && this.selectableIds.every((id) => this.selectedIds.includes(id))
|
|
660
|
+
},
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* Whether some file is selected.
|
|
664
|
+
*
|
|
665
|
+
* @return {boolean} True when one or more are.
|
|
666
|
+
*/
|
|
667
|
+
someSelected() {
|
|
668
|
+
return this.selectedIds.length > 0
|
|
669
|
+
},
|
|
670
|
+
|
|
476
671
|
/**
|
|
477
672
|
* The column the table is currently sorted on, or null when the sort
|
|
478
673
|
* key belongs to no declared column.
|
|
@@ -521,6 +716,11 @@ var script = {
|
|
|
521
716
|
this.currentPath = next;
|
|
522
717
|
this.refresh();
|
|
523
718
|
},
|
|
719
|
+
|
|
720
|
+
// A selection belongs to the folder it was made in.
|
|
721
|
+
currentPath() {
|
|
722
|
+
this.selectedIds = [];
|
|
723
|
+
},
|
|
524
724
|
},
|
|
525
725
|
|
|
526
726
|
mounted() {
|
|
@@ -1417,6 +1617,104 @@ var script = {
|
|
|
1417
1617
|
return generateUrl('/f/{fileid}', { fileid: node.fileid })
|
|
1418
1618
|
},
|
|
1419
1619
|
|
|
1620
|
+
/**
|
|
1621
|
+
* Whether a file is selected.
|
|
1622
|
+
*
|
|
1623
|
+
* @param {object} node The file.
|
|
1624
|
+
* @return {boolean} True when selected.
|
|
1625
|
+
*/
|
|
1626
|
+
isSelected(node) {
|
|
1627
|
+
return this.selectedIds.includes(String(node.fileid))
|
|
1628
|
+
},
|
|
1629
|
+
|
|
1630
|
+
/**
|
|
1631
|
+
* Select or deselect one file.
|
|
1632
|
+
*
|
|
1633
|
+
* @param {object} node The file.
|
|
1634
|
+
* @param {boolean} checked Whether it is now selected.
|
|
1635
|
+
* @return {void}
|
|
1636
|
+
*/
|
|
1637
|
+
toggleSelected(node, checked) {
|
|
1638
|
+
const id = String(node.fileid);
|
|
1639
|
+
const rest = this.selectedIds.filter((entry) => entry !== id);
|
|
1640
|
+
this.selectedIds = checked ? [...rest, id] : rest;
|
|
1641
|
+
},
|
|
1642
|
+
|
|
1643
|
+
/**
|
|
1644
|
+
* Select every file the filter keeps, or none.
|
|
1645
|
+
*
|
|
1646
|
+
* @param {boolean} checked Whether to select all.
|
|
1647
|
+
* @return {void}
|
|
1648
|
+
*/
|
|
1649
|
+
toggleAll(checked) {
|
|
1650
|
+
this.selectedIds = checked ? [...this.selectableIds] : [];
|
|
1651
|
+
},
|
|
1652
|
+
|
|
1653
|
+
/** Drop the selection. */
|
|
1654
|
+
clearSelection() {
|
|
1655
|
+
this.selectedIds = [];
|
|
1656
|
+
},
|
|
1657
|
+
|
|
1658
|
+
/**
|
|
1659
|
+
* Run one of the host's bulk actions on the selected files, then drop
|
|
1660
|
+
* the selection. An `open-modal` action's props gain `files` and
|
|
1661
|
+
* `fileIds`; a `handler` action's args gain the selected nodes.
|
|
1662
|
+
*
|
|
1663
|
+
* @param {object} action The declared bulk action.
|
|
1664
|
+
* @return {void}
|
|
1665
|
+
* @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
|
|
1666
|
+
*/
|
|
1667
|
+
runBulkAction(action) {
|
|
1668
|
+
if (!action || typeof action !== 'object') {
|
|
1669
|
+
return
|
|
1670
|
+
}
|
|
1671
|
+
const nodes = this.fileNodes.filter((node) => this.selectedIds.includes(String(node.fileid)));
|
|
1672
|
+
const type = action.type || 'handler';
|
|
1673
|
+
let wrapped = action;
|
|
1674
|
+
if (type === 'open-modal') {
|
|
1675
|
+
const files = nodes.map((node) => ({ fileId: node.fileid, fileName: node.basename, path: node.path }));
|
|
1676
|
+
wrapped = { ...action, props: { ...(action.props || {}), files, fileIds: files.map((file) => file.fileId) } };
|
|
1677
|
+
} else if (type === 'handler') {
|
|
1678
|
+
wrapped = { ...action, args: [...(action.args || []), nodes] };
|
|
1679
|
+
}
|
|
1680
|
+
this.selectedIds = [];
|
|
1681
|
+
if (typeof this.cnDispatchAction === 'function') {
|
|
1682
|
+
this.cnDispatchAction(wrapped);
|
|
1683
|
+
return
|
|
1684
|
+
}
|
|
1685
|
+
dispatchAction(wrapped, { router: this.$router || null });
|
|
1686
|
+
},
|
|
1687
|
+
|
|
1688
|
+
/**
|
|
1689
|
+
* Choose or drop one facet value.
|
|
1690
|
+
*
|
|
1691
|
+
* @param {string} key The column key.
|
|
1692
|
+
* @param {string} value The value.
|
|
1693
|
+
* @return {void}
|
|
1694
|
+
*/
|
|
1695
|
+
toggleFacet(key, value) {
|
|
1696
|
+
const chosen = this.facetSelections[key] || [];
|
|
1697
|
+
const next = chosen.includes(value) ? chosen.filter((entry) => entry !== value) : [...chosen, value];
|
|
1698
|
+
this.facetSelections = { ...this.facetSelections, [key]: next };
|
|
1699
|
+
},
|
|
1700
|
+
|
|
1701
|
+
/** Drop every facet choice. */
|
|
1702
|
+
clearFacets() {
|
|
1703
|
+
this.facetSelections = {};
|
|
1704
|
+
},
|
|
1705
|
+
|
|
1706
|
+
/**
|
|
1707
|
+
* The host's own row actions that belong on this file: those whose
|
|
1708
|
+
* `visibleIf` (extension, mime) holds for it, or that name none.
|
|
1709
|
+
*
|
|
1710
|
+
* @param {object} node The file.
|
|
1711
|
+
* @return {Array<object>} The actions to offer.
|
|
1712
|
+
* @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
|
|
1713
|
+
*/
|
|
1714
|
+
hostActionsFor(node) {
|
|
1715
|
+
return this.rowActions.filter((action) => hostActionApplies(action, node))
|
|
1716
|
+
},
|
|
1717
|
+
|
|
1420
1718
|
/**
|
|
1421
1719
|
* Run one of the host's declared actions on a file.
|
|
1422
1720
|
*
|