@conduction/nextcloud-vue 2.56.0-beta.30 → 2.56.0-beta.32
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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
<section
|
|
8
8
|
v-if="visible && isAttention"
|
|
9
9
|
class="cn-banner-widget cn-banner-widget--attention"
|
|
10
|
-
:class="'cn-banner-widget--' + resolvedVariant"
|
|
10
|
+
:class="['cn-banner-widget--' + resolvedVariant, { 'cn-banner-widget--stacked': isStacked }]"
|
|
11
11
|
:aria-labelledby="headingId"
|
|
12
12
|
data-testid="cn-banner-widget-attention">
|
|
13
13
|
<div class="cn-banner-widget__body">
|
|
@@ -48,15 +48,27 @@
|
|
|
48
48
|
</p>
|
|
49
49
|
<div v-else-if="visible" class="cn-banner-widget">
|
|
50
50
|
<NcNoteCard :type="resolvedVariant" class="cn-banner-widget__card">
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
<!-- A named icon replaces the variant's own glyph. -->
|
|
52
|
+
<template v-if="resolvedIcon" #icon>
|
|
53
|
+
<CnIcon :name="resolvedIcon" :size="22" data-testid="cn-banner-widget-icon" />
|
|
54
|
+
</template>
|
|
55
|
+
<span class="cn-banner-widget__line">
|
|
56
|
+
<component
|
|
57
|
+
:is="clickable ? 'a' : 'span'"
|
|
58
|
+
class="cn-banner-widget__text"
|
|
59
|
+
:class="{ 'cn-banner-widget__text--clickable': clickable }"
|
|
60
|
+
:href="clickable ? routeHref : null"
|
|
61
|
+
data-testid="cn-banner-widget-text"
|
|
62
|
+
@click="onClick"><strong v-if="displayLead" class="cn-banner-widget__lead" data-testid="cn-banner-widget-lead">{{ displayLead }}</strong>{{ displayLead && displayText ? ' ' : '' }}{{ displayText }}</component>
|
|
63
|
+
<!-- Board look: the actions as links at the end of the line. -->
|
|
64
|
+
<a
|
|
65
|
+
v-for="action in noteActions"
|
|
66
|
+
:key="action.key"
|
|
67
|
+
class="cn-banner-widget__link"
|
|
68
|
+
:href="action.href || null"
|
|
69
|
+
data-testid="cn-banner-widget-link"
|
|
70
|
+
@click="onActionClick($event, action)">{{ action.label }}</a>
|
|
71
|
+
</span>
|
|
60
72
|
</NcNoteCard>
|
|
61
73
|
</div>
|
|
62
74
|
</template>
|
|
@@ -64,8 +76,11 @@
|
|
|
64
76
|
<script>
|
|
65
77
|
import { translate as t } from '@nextcloud/l10n'
|
|
66
78
|
import { NcNoteCard } from '@nextcloud/vue'
|
|
79
|
+
import CnIcon from '../CnIcon/CnIcon.vue'
|
|
67
80
|
import { normalizeLook } from '../../composables/useLook.js'
|
|
81
|
+
import { fillTemplate } from '../../utils/fillTemplate.js'
|
|
68
82
|
import { followLinkClick, resolveHref } from '../../utils/linkNavigation.js'
|
|
83
|
+
import { readPath } from '../../utils/readPath.js'
|
|
69
84
|
import { safeHref } from '../../utils/safeHref.js'
|
|
70
85
|
import { nextUid } from '../../utils/uid.js'
|
|
71
86
|
import { compareVisibleWhen, readVisibleWhenValue } from '../../utils/visibleWhen.js'
|
|
@@ -147,7 +162,7 @@ const MAX_ACTIONS_BOARD = 4
|
|
|
147
162
|
export default {
|
|
148
163
|
name: 'CnBannerWidget',
|
|
149
164
|
|
|
150
|
-
components: { NcNoteCard },
|
|
165
|
+
components: { CnIcon, NcNoteCard },
|
|
151
166
|
|
|
152
167
|
inject: {
|
|
153
168
|
/**
|
|
@@ -177,6 +192,27 @@ export default {
|
|
|
177
192
|
default: '',
|
|
178
193
|
},
|
|
179
194
|
|
|
195
|
+
/**
|
|
196
|
+
* A bold lead in front of the text ("2 aanmeldingen wachten op
|
|
197
|
+
* goedkeuring." before the rest of the sentence). `{value}` is replaced
|
|
198
|
+
* like in `text`, and it goes through the app's translate. Empty falls
|
|
199
|
+
* back to the `content` blob.
|
|
200
|
+
*/
|
|
201
|
+
lead: {
|
|
202
|
+
type: String,
|
|
203
|
+
default: '',
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* A named icon (`AccountPlus`, `AlertOutline`, ...) drawn before the
|
|
208
|
+
* text instead of the variant's own glyph. Empty falls back to the
|
|
209
|
+
* `content` blob, then to the variant glyph.
|
|
210
|
+
*/
|
|
211
|
+
icon: {
|
|
212
|
+
type: String,
|
|
213
|
+
default: '',
|
|
214
|
+
},
|
|
215
|
+
|
|
180
216
|
/**
|
|
181
217
|
* Optional visibility condition. Shape:
|
|
182
218
|
* `{ endpoint?, source?, field?, op?, value }` — exactly one of
|
|
@@ -266,6 +302,18 @@ export default {
|
|
|
266
302
|
default: null,
|
|
267
303
|
},
|
|
268
304
|
|
|
305
|
+
/**
|
|
306
|
+
* Attention card: stack the actions under the text instead of beside it,
|
|
307
|
+
* the "Begin hier" card of PqMijnWerk (16px title, the action under the
|
|
308
|
+
* reason). Falls back to the `content` blob.
|
|
309
|
+
*
|
|
310
|
+
* @spec openspec/changes/screens-start-here-banner/specs/start-here-banner/spec.md#requirement-a-card-can-stack-its-action-under-the-text
|
|
311
|
+
*/
|
|
312
|
+
stacked: {
|
|
313
|
+
type: Boolean,
|
|
314
|
+
default: false,
|
|
315
|
+
},
|
|
316
|
+
|
|
269
317
|
/**
|
|
270
318
|
* Stored content blob (CnDashboardPage registry branch) carrying the
|
|
271
319
|
* same keys as the flat props: `{ variant, text, visibleWhen, route,
|
|
@@ -326,6 +374,12 @@ export default {
|
|
|
326
374
|
* the text wherever it says `{value}`.
|
|
327
375
|
*/
|
|
328
376
|
conditionValue: null,
|
|
377
|
+
/**
|
|
378
|
+
* The first row of the `visibleWhen` source query (its `order`
|
|
379
|
+
* applied), the card's subject: `{subject.<field>}` in the texts
|
|
380
|
+
* and `@subject.<field>` in an action route read it.
|
|
381
|
+
*/
|
|
382
|
+
conditionRow: null,
|
|
329
383
|
/** Whether the visibleWhen request itself failed (not: answered "no"). */
|
|
330
384
|
conditionFailed: false,
|
|
331
385
|
/** Why it failed, as the request reported it. */
|
|
@@ -340,9 +394,38 @@ export default {
|
|
|
340
394
|
return VARIANTS.includes(v) ? v : 'info'
|
|
341
395
|
},
|
|
342
396
|
|
|
343
|
-
/** The effective banner text (prop → content → ''). */
|
|
397
|
+
/** The effective banner text (prop → content → ''), through the app's translate. */
|
|
344
398
|
resolvedText() {
|
|
345
|
-
|
|
399
|
+
const text = this.text || (this.content && this.content.text) || ''
|
|
400
|
+
return text ? this.tl(text) : ''
|
|
401
|
+
},
|
|
402
|
+
|
|
403
|
+
/** The effective bold lead (prop → content → ''), through the app's translate. */
|
|
404
|
+
resolvedLead() {
|
|
405
|
+
const lead = this.lead || (this.content && this.content.lead) || ''
|
|
406
|
+
return lead ? this.tl(lead) : ''
|
|
407
|
+
},
|
|
408
|
+
|
|
409
|
+
/** The lead with `{value}` filled in. */
|
|
410
|
+
displayLead() {
|
|
411
|
+
return this.fillValue(this.resolvedLead)
|
|
412
|
+
},
|
|
413
|
+
|
|
414
|
+
/** The effective icon name (prop → content → ''). */
|
|
415
|
+
resolvedIcon() {
|
|
416
|
+
return this.icon || (this.content && this.content.icon) || ''
|
|
417
|
+
},
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* The note card's actions as links, under the board look only: the
|
|
421
|
+
* first resolved action of `actions`, as the board draws "Beleid
|
|
422
|
+
* wijzigen" at the end of the line. Without the look the note card
|
|
423
|
+
* ignores `actions`, as it always did.
|
|
424
|
+
*
|
|
425
|
+
* @return {Array<object>} The resolved actions (at most one).
|
|
426
|
+
*/
|
|
427
|
+
noteActions() {
|
|
428
|
+
return normalizeLook(this.cnLook) === 'board' ? this.resolvedActions.slice(0, 1) : []
|
|
346
429
|
},
|
|
347
430
|
|
|
348
431
|
/** The effective visibleWhen condition (prop → content → null). */
|
|
@@ -383,6 +466,15 @@ export default {
|
|
|
383
466
|
return (this.layout || (this.content && this.content.layout) || 'banner') === 'attention'
|
|
384
467
|
},
|
|
385
468
|
|
|
469
|
+
/**
|
|
470
|
+
* Whether the actions sit under the text.
|
|
471
|
+
*
|
|
472
|
+
* @return {boolean}
|
|
473
|
+
*/
|
|
474
|
+
isStacked() {
|
|
475
|
+
return this.stacked || Boolean(this.content && this.content.stacked)
|
|
476
|
+
},
|
|
477
|
+
|
|
386
478
|
/**
|
|
387
479
|
* The attention card's kicker (prop, else content).
|
|
388
480
|
*
|
|
@@ -391,7 +483,7 @@ export default {
|
|
|
391
483
|
*/
|
|
392
484
|
resolvedKicker() {
|
|
393
485
|
const kicker = this.kicker || (this.content && this.content.kicker) || ''
|
|
394
|
-
return kicker ? this.tl(kicker) : ''
|
|
486
|
+
return kicker ? this.fillValue(this.tl(kicker)) : ''
|
|
395
487
|
},
|
|
396
488
|
|
|
397
489
|
/**
|
|
@@ -459,7 +551,7 @@ export default {
|
|
|
459
551
|
let target = null
|
|
460
552
|
let href = ''
|
|
461
553
|
if (action.route) {
|
|
462
|
-
target = typeof action.route === 'string' ? { name: action.route } : action.route
|
|
554
|
+
target = typeof action.route === 'string' ? { name: action.route } : this.resolveSubject(action.route)
|
|
463
555
|
href = resolveHref(target, this.$router)
|
|
464
556
|
} else if (typeof action.href === 'string' && action.href !== '') {
|
|
465
557
|
const safe = safeHref(action.href)
|
|
@@ -484,7 +576,7 @@ export default {
|
|
|
484
576
|
*/
|
|
485
577
|
visible() {
|
|
486
578
|
const title = this.title || (this.content && this.content.title) || ''
|
|
487
|
-
if (this.resolvedText === '' && !(this.isAttention && title !== '')) {
|
|
579
|
+
if (this.resolvedText === '' && this.resolvedLead === '' && !(this.isAttention && title !== '')) {
|
|
488
580
|
return false
|
|
489
581
|
}
|
|
490
582
|
if (!this.resolvedVisibleWhen) {
|
|
@@ -518,7 +610,7 @@ export default {
|
|
|
518
610
|
*/
|
|
519
611
|
uncheckedText() {
|
|
520
612
|
const title = this.title || (this.content && this.content.title) || this.resolvedText
|
|
521
|
-
if (!title || title.includes('{value}')) {
|
|
613
|
+
if (!title || title.includes('{value}') || title.includes('{subject.')) {
|
|
522
614
|
return t('nextcloud-vue', 'Could not check')
|
|
523
615
|
}
|
|
524
616
|
// `escape: false`: the result is rendered through `{{ }}`, which escapes.
|
|
@@ -590,10 +682,55 @@ export default {
|
|
|
590
682
|
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-attention-card
|
|
591
683
|
*/
|
|
592
684
|
fillValue(text) {
|
|
593
|
-
|
|
685
|
+
let out = text
|
|
686
|
+
if (this.conditionValue !== null && out.includes('{value}')) {
|
|
687
|
+
out = out.replaceAll('{value}', String(this.conditionValue))
|
|
688
|
+
}
|
|
689
|
+
return this.fillSubject(out)
|
|
690
|
+
},
|
|
691
|
+
|
|
692
|
+
/**
|
|
693
|
+
* Fill `{subject.<field>}` (and `{subject.<field>|date}`, `|days`) from
|
|
694
|
+
* the card's subject row. A token with no value empties the whole text,
|
|
695
|
+
* as in a record list. Text without a subject token is untouched.
|
|
696
|
+
*
|
|
697
|
+
* @param {string} text The text.
|
|
698
|
+
* @return {string} The filled text.
|
|
699
|
+
* @spec openspec/changes/screens-start-here-banner/specs/start-here-banner/spec.md#requirement-a-banner-can-name-the-first-row-of-a-query
|
|
700
|
+
*/
|
|
701
|
+
fillSubject(text) {
|
|
702
|
+
if (typeof text !== 'string' || !text.includes('{subject.')) {
|
|
594
703
|
return text
|
|
595
704
|
}
|
|
596
|
-
|
|
705
|
+
// `{value}` is not a subject token: keep it out of the template fill.
|
|
706
|
+
const guard = '\u0000value\u0000'
|
|
707
|
+
const filled = fillTemplate(text.replaceAll('{value}', guard), { subject: this.conditionRow || {} })
|
|
708
|
+
return filled.replaceAll(guard, '{value}')
|
|
709
|
+
},
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* Replace `@subject.<field>` strings anywhere in an action route
|
|
713
|
+
* (params, query) by the subject's value.
|
|
714
|
+
*
|
|
715
|
+
* @param {unknown} node A route name, location or any nested part of one.
|
|
716
|
+
* @return {unknown} The same shape with the tokens resolved.
|
|
717
|
+
* @spec openspec/changes/screens-start-here-banner/specs/start-here-banner/spec.md#requirement-a-banner-can-name-the-first-row-of-a-query
|
|
718
|
+
*/
|
|
719
|
+
resolveSubject(node) {
|
|
720
|
+
if (typeof node === 'string') {
|
|
721
|
+
if (!node.startsWith('@subject.')) {
|
|
722
|
+
return node
|
|
723
|
+
}
|
|
724
|
+
const value = this.conditionRow ? readPath(this.conditionRow, node.slice('@subject.'.length)) : undefined
|
|
725
|
+
return value === undefined || value === null ? '' : String(value)
|
|
726
|
+
}
|
|
727
|
+
if (Array.isArray(node)) {
|
|
728
|
+
return node.map((item) => this.resolveSubject(item))
|
|
729
|
+
}
|
|
730
|
+
if (node && typeof node === 'object') {
|
|
731
|
+
return Object.fromEntries(Object.entries(node).map(([key, value]) => [key, this.resolveSubject(value)]))
|
|
732
|
+
}
|
|
733
|
+
return node
|
|
597
734
|
},
|
|
598
735
|
|
|
599
736
|
/**
|
|
@@ -636,6 +773,7 @@ export default {
|
|
|
636
773
|
if (outcome) {
|
|
637
774
|
this.conditionMet = outcome.met === true
|
|
638
775
|
this.conditionValue = outcome.value !== undefined ? outcome.value : null
|
|
776
|
+
this.conditionRow = outcome.row && typeof outcome.row === 'object' ? outcome.row : null
|
|
639
777
|
this.conditionFailed = outcome.failed === true
|
|
640
778
|
this.conditionFailureReason = outcome.failed === true && typeof outcome.reason === 'string' ? outcome.reason : ''
|
|
641
779
|
return
|
|
@@ -644,12 +782,15 @@ export default {
|
|
|
644
782
|
if (!cond) {
|
|
645
783
|
this.conditionMet = null
|
|
646
784
|
this.conditionValue = null
|
|
785
|
+
this.conditionRow = null
|
|
647
786
|
this.conditionFailed = false
|
|
648
787
|
this.conditionFailureReason = ''
|
|
649
788
|
return
|
|
650
789
|
}
|
|
651
790
|
try {
|
|
652
|
-
const
|
|
791
|
+
const sink = {}
|
|
792
|
+
const value = await readVisibleWhenValue(cond, undefined, sink)
|
|
793
|
+
this.conditionRow = sink.row || null
|
|
653
794
|
this.conditionValue = value
|
|
654
795
|
this.conditionMet = compareVisibleWhen(value, cond.op || 'eq', cond.value)
|
|
655
796
|
this.conditionFailed = false
|
|
@@ -662,6 +803,7 @@ export default {
|
|
|
662
803
|
console.warn('[CnBannerWidget] visibleWhen could not be evaluated, banner hidden:', error?.message || error)
|
|
663
804
|
this.conditionMet = false
|
|
664
805
|
this.conditionValue = null
|
|
806
|
+
this.conditionRow = null
|
|
665
807
|
this.conditionFailed = true
|
|
666
808
|
this.conditionFailureReason = typeof error?.message === 'string' ? error.message : String(error ?? '')
|
|
667
809
|
}
|
|
@@ -693,6 +835,23 @@ export default {
|
|
|
693
835
|
margin: 0;
|
|
694
836
|
}
|
|
695
837
|
|
|
838
|
+
.cn-banner-widget__line {
|
|
839
|
+
display: flex;
|
|
840
|
+
flex-wrap: wrap;
|
|
841
|
+
align-items: baseline;
|
|
842
|
+
gap: 4px 20px;
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
.cn-banner-widget__lead {
|
|
846
|
+
font-weight: 700;
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
.cn-banner-widget__link {
|
|
850
|
+
margin-inline-start: auto;
|
|
851
|
+
font-size: 14px;
|
|
852
|
+
font-weight: 600;
|
|
853
|
+
}
|
|
854
|
+
|
|
696
855
|
.cn-banner-widget__text--clickable {
|
|
697
856
|
cursor: pointer;
|
|
698
857
|
text-decoration: underline;
|
|
@@ -784,6 +943,32 @@ export default {
|
|
|
784
943
|
color: var(--color-text-maxcontrast);
|
|
785
944
|
}
|
|
786
945
|
|
|
946
|
+
/* Stacked (PqMijnWerk "Begin hier"): the text, then the action under it. */
|
|
947
|
+
.cn-banner-widget--stacked {
|
|
948
|
+
flex-direction: column;
|
|
949
|
+
align-items: flex-start;
|
|
950
|
+
gap: 10px;
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
.cn-banner-widget--stacked .cn-banner-widget__body {
|
|
954
|
+
flex: 0 0 auto;
|
|
955
|
+
gap: 10px;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
.cn-banner-widget--stacked .cn-banner-widget__title {
|
|
959
|
+
font-size: 16px;
|
|
960
|
+
line-height: 1.4;
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
.cn-banner-widget--stacked .cn-banner-widget__reason {
|
|
964
|
+
font-size: 14px;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
.cn-banner-widget--stacked .cn-banner-widget__action {
|
|
968
|
+
min-height: var(--cn-board-control-height, 40px);
|
|
969
|
+
font-size: 14px;
|
|
970
|
+
}
|
|
971
|
+
|
|
787
972
|
.cn-banner-widget__actions {
|
|
788
973
|
display: flex;
|
|
789
974
|
flex-wrap: wrap;
|
|
@@ -86,6 +86,8 @@ fall back to the normal rendering. See `docs/migrating-to-manifest.md` →
|
|
|
86
86
|
> `cnFormatters: { automationTrigger: v => ({ 'lead.created': 'Lead created' }[v] ?? v) }`);
|
|
87
87
|
> standalone (no provider) it falls back to rendering the raw value.
|
|
88
88
|
|
|
89
|
+
The `secondary` prop is the column's secondary line: the `avatar` widget draws it under the name, beside the picture (`CnDataTable` passes it for an avatar column); other cells ignore it.
|
|
90
|
+
|
|
89
91
|
Column widget — `widget="badge"`, `widget="fkResolve"` (uuid → related object label via the shared object store with per-schema caching; config `widgetProps { register, schema, labelField }`), and `widget="link"` are built-in; any other id resolves against the app's `cellWidgets` registry (`CnAppRoot`'s `cellWidgets` prop → `cnCellWidgets`), and that component receives `{ value, row, property, formatted, ...widgetProps }`. `widget` takes precedence over `formatter`; when both are set the widget gets the formatter-shaped value as `formatted`. See `docs/migrating-to-manifest.md` → "Column widgets" + "Built-in cell formatters / widgets".
|
|
90
92
|
|
|
91
93
|
- `widget="badge"` — `CnStatusBadge` pill; `widgetProps.variant` picks the colour.
|
|
@@ -113,7 +113,14 @@
|
|
|
113
113
|
class="cn-cell-renderer__avatar-initials"
|
|
114
114
|
:style="{ width: avatarSize + 'px', height: avatarSize + 'px' }"
|
|
115
115
|
aria-hidden="true">{{ avatarInitials }}</span>
|
|
116
|
-
<span class="cn-cell-renderer__avatar-
|
|
116
|
+
<span class="cn-cell-renderer__avatar-text">
|
|
117
|
+
<span class="cn-cell-renderer__avatar-name" :title="avatarName || avatarUserId">{{ avatarName || avatarUserId }}</span>
|
|
118
|
+
<!-- The column's secondary line (e-mail), under the name and beside the picture. -->
|
|
119
|
+
<span
|
|
120
|
+
v-if="secondary"
|
|
121
|
+
class="cn-cell-renderer__avatar-secondary"
|
|
122
|
+
data-testid="cn-cell-secondary">{{ secondary }}</span>
|
|
123
|
+
</span>
|
|
117
124
|
</span>
|
|
118
125
|
<span v-else class="cn-cell-renderer__dash">—</span>
|
|
119
126
|
</template>
|
|
@@ -406,6 +413,16 @@ export default {
|
|
|
406
413
|
default: () => ({}),
|
|
407
414
|
},
|
|
408
415
|
|
|
416
|
+
/**
|
|
417
|
+
* The column's secondary line (a muted second line under the value).
|
|
418
|
+
* The `avatar` widget draws it under the name, beside the picture;
|
|
419
|
+
* other cells ignore it, because the table draws it under the cell.
|
|
420
|
+
*/
|
|
421
|
+
secondary: {
|
|
422
|
+
type: String,
|
|
423
|
+
default: '',
|
|
424
|
+
},
|
|
425
|
+
|
|
409
426
|
/**
|
|
410
427
|
* Optional declarative cell-format spec — a no-code alternative to a
|
|
411
428
|
* registry `formatter`. Recognised `style` values:
|
|
@@ -560,14 +577,15 @@ export default {
|
|
|
560
577
|
},
|
|
561
578
|
|
|
562
579
|
/**
|
|
563
|
-
* `avatar` widget: the picture size in pixels (`widgetProps.size`, default 24
|
|
580
|
+
* `avatar` widget: the picture size in pixels (`widgetProps.size`, default 24,
|
|
581
|
+
* 32 under the board look).
|
|
564
582
|
*
|
|
565
583
|
* @return {number}
|
|
566
584
|
* @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-avatar-and-date-cells
|
|
567
585
|
*/
|
|
568
586
|
avatarSize() {
|
|
569
587
|
const size = Number(this.widgetProps && this.widgetProps.size)
|
|
570
|
-
return Number.isFinite(size) && size > 0 ? size : 24
|
|
588
|
+
return Number.isFinite(size) && size > 0 ? size : (this.isBoardLook ? 32 : 24)
|
|
571
589
|
},
|
|
572
590
|
|
|
573
591
|
/**
|
|
@@ -882,11 +900,14 @@ export default {
|
|
|
882
900
|
* a `{ value: variant }` map (e.g. `{ placed: 'primary', delivered: 'success' }`)
|
|
883
901
|
* that CnStatusBadge resolves per label. Null when unset (falls back to
|
|
884
902
|
* `badgeVariant`). Lets a manifest colour a status column without code.
|
|
903
|
+
* A column-level `colorMap` (it reaches the cell as the property's
|
|
904
|
+
* `colorMap`) works too, so `{ widget: 'badge', colorMap }` and
|
|
905
|
+
* `{ widget: 'badge', widgetProps: { colorMap } }` read the same.
|
|
885
906
|
*
|
|
886
907
|
* @return {object|null}
|
|
887
908
|
*/
|
|
888
909
|
badgeColorMap() {
|
|
889
|
-
return (this.widgetProps && this.widgetProps.colorMap) || null
|
|
910
|
+
return (this.widgetProps && this.widgetProps.colorMap) || this.enumColorMap || null
|
|
890
911
|
},
|
|
891
912
|
|
|
892
913
|
/**
|
|
@@ -1316,11 +1337,33 @@ export default {
|
|
|
1316
1337
|
line-height: 1;
|
|
1317
1338
|
}
|
|
1318
1339
|
|
|
1340
|
+
.cn-cell-renderer__avatar-text {
|
|
1341
|
+
display: flex;
|
|
1342
|
+
flex-direction: column;
|
|
1343
|
+
min-width: 0;
|
|
1344
|
+
}
|
|
1345
|
+
|
|
1319
1346
|
.cn-cell-renderer__avatar-name {
|
|
1320
1347
|
min-width: 0;
|
|
1321
1348
|
overflow: hidden;
|
|
1322
1349
|
text-overflow: ellipsis;
|
|
1323
1350
|
white-space: nowrap;
|
|
1351
|
+
/* The name is the cell's text: it keeps the weight, size and colour the
|
|
1352
|
+
cell sets, as a plain value does. */
|
|
1353
|
+
font: inherit;
|
|
1354
|
+
color: inherit;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
.cn-cell-renderer__avatar-secondary {
|
|
1358
|
+
min-width: 0;
|
|
1359
|
+
overflow: hidden;
|
|
1360
|
+
color: var(--color-text-maxcontrast);
|
|
1361
|
+
font-size: 13px;
|
|
1362
|
+
font-weight: 400;
|
|
1363
|
+
line-height: 1.35;
|
|
1364
|
+
text-overflow: ellipsis;
|
|
1365
|
+
text-decoration: none;
|
|
1366
|
+
white-space: nowrap;
|
|
1324
1367
|
}
|
|
1325
1368
|
|
|
1326
1369
|
/* A date that matched a rule is also set in a heavier weight, so the signal
|