@conduction/nextcloud-vue 2.85.0 → 2.87.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/CnAdvancedFormDialog/CnMetadataTab.vue.js +1 -1
- package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue2.js +3 -2
- package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue2.js.map +1 -1
- package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue3.js.map +1 -1
- package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue.js +1 -1
- package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js +5 -4
- package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue3.js.map +1 -1
- package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue.js +1 -1
- package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue2.js +2 -1
- package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue2.js.map +1 -1
- package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +2 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +156 -14
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +105 -74
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
- package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue.js +1 -1
- package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue2.js +2 -1
- package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue2.js.map +1 -1
- package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue3.js.map +1 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue.js +1 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js +2 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +6 -5
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue.js +1 -1
- package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue2.js +2 -1
- package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue2.js.map +1 -1
- package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue3.js.map +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +2 -1
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +2 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +2 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue.js +1 -1
- package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue2.js +3 -1
- package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue2.js.map +1 -1
- package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue2.js +2 -1
- package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue3.js.map +1 -1
- package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue.js +1 -1
- package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue2.js +2 -1
- package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue2.js.map +1 -1
- package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue3.js.map +1 -1
- package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue.js +1 -1
- package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue2.js +3 -1
- package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue2.js.map +1 -1
- package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue3.js.map +1 -1
- package/dist/esm/components/CnFileManager/CnFileManager.vue.js +1 -1
- package/dist/esm/components/CnFileManager/CnFileManager.vue2.js +3 -1
- package/dist/esm/components/CnFileManager/CnFileManager.vue2.js.map +1 -1
- package/dist/esm/components/CnFileManager/CnFileManager.vue3.js.map +1 -1
- package/dist/esm/components/CnFilePreview/CnFilePreview.vue.js +1 -1
- package/dist/esm/components/CnFilePreview/CnFilePreview.vue2.js +2 -1
- package/dist/esm/components/CnFilePreview/CnFilePreview.vue2.js.map +1 -1
- package/dist/esm/components/CnFilePreview/CnFilePreview.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +49 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +3 -3
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue.js +1 -1
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js +2 -1
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js.map +1 -1
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +30 -5
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js +2 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue.js +1 -1
- package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue2.js +3 -2
- package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +28 -0
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +82 -75
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue2.js +5 -4
- package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue2.js +2 -1
- package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue2.js +2 -1
- package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +2 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue2.js +2 -1
- package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue3.js.map +1 -1
- package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue.js +1 -1
- package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue2.js +2 -1
- package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue2.js.map +1 -1
- package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue3.js.map +1 -1
- package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue.js +1 -1
- package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue2.js +2 -1
- package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue2.js.map +1 -1
- package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue3.js.map +1 -1
- package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue2.js +2 -0
- package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue3.js +2 -2
- package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue.js +1 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js +2 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js.map +1 -1
- package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue.js +1 -1
- package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue2.js +2 -1
- package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue2.js.map +1 -1
- package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +36 -0
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +55 -40
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTasksCard/CnTasksCard.vue.js +1 -1
- package/dist/esm/components/CnTasksCard/CnTasksCard.vue2.js +2 -1
- package/dist/esm/components/CnTasksCard/CnTasksCard.vue2.js.map +1 -1
- package/dist/esm/components/CnTasksCard/CnTasksCard.vue3.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +2 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue.js +1 -1
- package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue2.js +2 -1
- package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue2.js.map +1 -1
- package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue.js +1 -1
- package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue2.js +2 -1
- package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue2.js.map +1 -1
- package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +3 -26
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
- package/dist/esm/dialogs/CnNoteHistoryDialog.vue.js +1 -1
- package/dist/esm/dialogs/CnNoteHistoryDialog.vue2.js +2 -1
- package/dist/esm/dialogs/CnNoteHistoryDialog.vue2.js.map +1 -1
- package/dist/esm/dialogs/CnNoteHistoryDialog.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/activity/CnActivityCard.vue.js +1 -1
- package/dist/esm/integrations/builtin/activity/CnActivityCard.vue2.js +3 -2
- package/dist/esm/integrations/builtin/activity/CnActivityCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/activity/CnActivityCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/activity/CnActivityTab.vue.js +1 -1
- package/dist/esm/integrations/builtin/activity/CnActivityTab.vue2.js +4 -3
- package/dist/esm/integrations/builtin/activity/CnActivityTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/activity/CnActivityTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue.js +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js +3 -2
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue.js +1 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue.js +1 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js +6 -5
- package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue.js +1 -1
- package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue.js +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.map +1 -1
- package/dist/esm/integrations/builtin/deck/CnDeckTab.vue.js +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.map +1 -1
- package/dist/esm/integrations/builtin/email/CnEmailCard.vue.js +1 -1
- package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js +2 -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/field-inspection/CnFieldInspectionCard.vue.js +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +2 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue.js +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue2.js +2 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue.js +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.map +1 -1
- package/dist/esm/l10n/en.json.js +35 -2
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +38 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +1068 -962
- package/dist/esm/store/useObjectStore.js +7 -2
- package/dist/esm/store/useObjectStore.js.map +1 -1
- package/dist/esm/utils/boardColumns.js +50 -1
- package/dist/esm/utils/boardColumns.js.map +1 -1
- package/dist/esm/utils/boardReferenceColumns.js +115 -4
- package/dist/esm/utils/boardReferenceColumns.js.map +1 -1
- package/dist/esm/utils/contentHeaderLink.js +48 -1
- package/dist/esm/utils/contentHeaderLink.js.map +1 -1
- package/dist/esm/utils/schema.js +5 -4
- package/dist/esm/utils/schema.js.map +1 -1
- package/dist/esm/utils/userLocale.js +30 -0
- package/dist/esm/utils/userLocale.js.map +1 -0
- 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 +1088 -476
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1068 -962
- package/l10n/en.json +35 -2
- package/l10n/nl.json +38 -2
- package/package.json +1 -1
- package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +3 -2
- package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +5 -4
- package/src/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue +2 -1
- package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +2 -1
- package/src/components/CnBoardView/CnBoardView.vue +189 -24
- package/src/components/CnCalendarEventPicker/CnCalendarEventPicker.vue +2 -1
- package/src/components/CnCalendarWidget/CnCalendarWidget.vue +2 -1
- package/src/components/CnChartWidget/CnChartWidget.vue +6 -5
- package/src/components/CnCollectivePagePicker/CnCollectivePagePicker.vue +2 -1
- package/src/components/CnConversationThread/CnConversationThread.vue +2 -1
- package/src/components/CnCountdownWidget/CnCountdownWidget.vue +2 -1
- package/src/components/CnDashboardPage/CnDashboardPage.vue +2 -1
- package/src/components/CnDataMatrix/CnDataMatrix.vue +2 -1
- package/src/components/CnDetailPage/CnDetailHeaderChips.vue +2 -1
- package/src/components/CnEmailPicker/CnEmailPicker.vue +2 -1
- package/src/components/CnFederationStatus/CnFederationStatus.vue +3 -1
- package/src/components/CnFileManager/CnFileManager.vue +2 -1
- package/src/components/CnFilePreview/CnFilePreview.vue +2 -1
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +54 -6
- package/src/components/CnFollowToggle/CnFollowToggle.vue +2 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +30 -4
- package/src/components/CnNotesCard/CnNotesCard.vue +2 -1
- package/src/components/CnObjectCalendar/CnObjectCalendar.vue +3 -2
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +36 -0
- package/src/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue +5 -4
- package/src/components/CnObjectSidebar/CnAuditTrailTab.vue +2 -1
- package/src/components/CnObjectSidebar/CnFlowTasksPanel.vue +2 -1
- package/src/components/CnObjectSidebar/CnNotesTab.vue +2 -1
- package/src/components/CnObjectSidebar/CnTasksTab.vue +2 -1
- package/src/components/CnPropertySourceField/CnPropertySourceField.vue +2 -1
- package/src/components/CnRoadmapItem/CnRoadmapItem.vue +2 -1
- package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +4 -2
- package/src/components/CnStatsBlock/CnStatsBlock.vue +2 -1
- package/src/components/CnSummaryAggregates/CnSummaryAggregates.vue +2 -1
- package/src/components/CnTabsWidget/CnTabsWidget.vue +71 -0
- package/src/components/CnTasksCard/CnTasksCard.vue +2 -1
- package/src/components/CnTimelineWidget/CnTimelineWidget.vue +2 -1
- package/src/components/CnTranslatedBadge/CnTranslatedBadge.vue +2 -1
- package/src/components/CnVersionHistory/CnVersionHistory.vue +2 -1
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +3 -26
- package/src/css/board.css +40 -0
- package/src/dialogs/CnNoteHistoryDialog.vue +2 -1
- package/src/integrations/builtin/activity/CnActivityCard.vue +3 -2
- package/src/integrations/builtin/activity/CnActivityTab.vue +4 -3
- package/src/integrations/builtin/analytics/CnAnalyticsTab.vue +3 -2
- package/src/integrations/builtin/calendar/CnCalendarCard.vue +2 -1
- package/src/integrations/builtin/calendar/CnCalendarTab.vue +6 -5
- package/src/integrations/builtin/contactmoment/CnContactmomentCard.vue +2 -1
- package/src/integrations/builtin/cospend/CnCospendTab.vue +2 -1
- package/src/integrations/builtin/deck/CnDeckTab.vue +2 -1
- package/src/integrations/builtin/email/CnEmailCard.vue +2 -1
- package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +2 -1
- package/src/integrations/builtin/field-inspection/CnFieldInspectionTab.vue +2 -1
- package/src/integrations/builtin/photos/CnPhotosTab.vue +2 -1
- package/src/schemas/app-manifest-v2.schema.json +4 -1
- package/src/store/useObjectStore.js +7 -2
- package/src/utils/boardColumns.js +49 -0
- package/src/utils/boardReferenceColumns.js +114 -3
- package/src/utils/contentHeaderLink.js +47 -0
- package/src/utils/schema.js +5 -4
- package/src/utils/userLocale.js +26 -0
- package/src/utils/validateManifestV2.compiled.js +2 -2
|
@@ -55,12 +55,28 @@ export function stagesOf(field, colorField = '') {
|
|
|
55
55
|
label: String(entry?.label ?? entry?.title ?? entry?.key ?? entry?.value ?? ''),
|
|
56
56
|
hidden: entry?.hidden === true,
|
|
57
57
|
color: colorOf(field, entry, colorField),
|
|
58
|
+
capacity: capacityValue(entry?.capacity),
|
|
58
59
|
}))
|
|
59
60
|
.filter((stage) => stage.key !== '')
|
|
60
61
|
|
|
61
62
|
return { stages, usable: stages.length > 0 }
|
|
62
63
|
}
|
|
63
64
|
|
|
65
|
+
/**
|
|
66
|
+
* A column limit as a usable number.
|
|
67
|
+
*
|
|
68
|
+
* @param {unknown} value - The declared limit.
|
|
69
|
+
* @return {number|null} The limit, or null when there is none (not a number above 0).
|
|
70
|
+
* @spec openspec/changes/board-column-capacity/specs/board-view/spec.md#requirement-a-column-can-carry-a-capacity
|
|
71
|
+
*/
|
|
72
|
+
export function capacityValue(value) {
|
|
73
|
+
if (value === null || value === undefined || value === '') {
|
|
74
|
+
return null
|
|
75
|
+
}
|
|
76
|
+
const n = Number(value)
|
|
77
|
+
return Number.isFinite(n) && n > 0 ? n : null
|
|
78
|
+
}
|
|
79
|
+
|
|
64
80
|
/**
|
|
65
81
|
* The colour a state declares: the `colorField` key on the state, else its
|
|
66
82
|
* `color`, else (for a plain enum value) the field's `enumColors` entry.
|
|
@@ -154,6 +170,7 @@ export function buildBoardColumns({
|
|
|
154
170
|
key: stage.key,
|
|
155
171
|
label: stage.label,
|
|
156
172
|
color: stage.color,
|
|
173
|
+
capacity: stage.capacity ?? null,
|
|
157
174
|
cards: [],
|
|
158
175
|
count: 0,
|
|
159
176
|
}))
|
|
@@ -177,3 +194,35 @@ export function buildBoardColumns({
|
|
|
177
194
|
|
|
178
195
|
return { columns, usable: true }
|
|
179
196
|
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Where a card may move, from what `allowedMoves` answered: plain column keys
|
|
200
|
+
* and `{ key, allowed, reason }` entries. A key any entry allows is allowed;
|
|
201
|
+
* a blocked key keeps the first reason given for it.
|
|
202
|
+
*
|
|
203
|
+
* @param {unknown} answer The answer.
|
|
204
|
+
* @return {{keys: Array<string>, reasons: object}|null} The allowed keys and the reasons by key, or null for everywhere.
|
|
205
|
+
* @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason
|
|
206
|
+
*/
|
|
207
|
+
export function normalizeAllowed(answer) {
|
|
208
|
+
if (!Array.isArray(answer)) {
|
|
209
|
+
return null
|
|
210
|
+
}
|
|
211
|
+
const keys = []
|
|
212
|
+
const reasons = {}
|
|
213
|
+
for (const entry of answer) {
|
|
214
|
+
if (entry && typeof entry === 'object') {
|
|
215
|
+
const key = String(entry.key ?? '')
|
|
216
|
+
if (entry.allowed === false) {
|
|
217
|
+
if (!reasons[key] && typeof entry.reason === 'string' && entry.reason.trim() !== '') {
|
|
218
|
+
reasons[key] = entry.reason.trim()
|
|
219
|
+
}
|
|
220
|
+
} else {
|
|
221
|
+
keys.push(key)
|
|
222
|
+
}
|
|
223
|
+
} else if (entry !== null && entry !== undefined) {
|
|
224
|
+
keys.push(String(entry))
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
return { keys, reasons }
|
|
228
|
+
}
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* Pure apart from `fetchReferenceObjects`: no store, no Vue.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
+
import { capacityValue } from './boardColumns.js'
|
|
30
31
|
import { buildHeaders, buildQueryString, prefixUrl } from './headers.js'
|
|
31
32
|
import { readPath } from './readPath.js'
|
|
32
33
|
import { schemaRefSlug } from './schemaRefSlug.js'
|
|
@@ -124,7 +125,14 @@ export function referenceTargetOf(source, { register = '', property = null } = {
|
|
|
124
125
|
* @param {string} [options.mergeBy] The row field whose equal values make one column.
|
|
125
126
|
* @param {{field: string, rowField: string}|null} [options.narrowBy] The parent link.
|
|
126
127
|
* @param {string} [options.narrowValue] The parent the board is narrowed to, '' for all.
|
|
127
|
-
* @
|
|
128
|
+
* @param {string} [options.capacityField] The numeric row field that holds a column's limit.
|
|
129
|
+
* A column merged from two or more rows shows none: each row has its own limit.
|
|
130
|
+
* @param {string} [options.neutralColor] The colour a row holds when nobody chose one. A merged
|
|
131
|
+
* column then takes its first row colour that is not this one, and this one only when no row
|
|
132
|
+
* has another. Compared as written: "Grey" is not "grey", and a hex value is not a name.
|
|
133
|
+
* @param {object} [options.colorMap] A stored colour to the CSS colour a column is drawn in,
|
|
134
|
+
* applied after the merge. A colour it does not map is kept as stored.
|
|
135
|
+
* @return {{states: Array<{key: string, label: string, color: string, capacity?: (number|null)}>, keyByValue: Map<string, string>, refsByKey: Map<string, Array<object>>}} The stages.
|
|
128
136
|
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references
|
|
129
137
|
*/
|
|
130
138
|
export function buildReferenceStages({
|
|
@@ -135,6 +143,9 @@ export function buildReferenceStages({
|
|
|
135
143
|
mergeBy = '',
|
|
136
144
|
narrowBy = null,
|
|
137
145
|
narrowValue = '',
|
|
146
|
+
capacityField = '',
|
|
147
|
+
neutralColor = '',
|
|
148
|
+
colorMap = null,
|
|
138
149
|
} = {}) {
|
|
139
150
|
const list = (Array.isArray(refs) ? refs : []).filter((ref) => ref && typeof ref === 'object' && refIdOf(ref) !== '')
|
|
140
151
|
const narrowed = narrowBy && narrowBy.field && narrowValue !== ''
|
|
@@ -160,14 +171,114 @@ export function buildReferenceStages({
|
|
|
160
171
|
keyByValue.set(id, key)
|
|
161
172
|
if (!refsByKey.has(key)) {
|
|
162
173
|
refsByKey.set(key, [])
|
|
163
|
-
const
|
|
164
|
-
|
|
174
|
+
const state = { key, label, color: colorOfRef(ref, colorField) }
|
|
175
|
+
if (capacityField) {
|
|
176
|
+
state.capacity = capacityOfRef(ref, capacityField)
|
|
177
|
+
}
|
|
178
|
+
states.push(state)
|
|
165
179
|
}
|
|
166
180
|
refsByKey.get(key).push(ref)
|
|
167
181
|
}
|
|
182
|
+
for (const state of states) {
|
|
183
|
+
const rows = refsByKey.get(state.key)
|
|
184
|
+
if (capacityField && rows.length > 1) {
|
|
185
|
+
state.capacity = null
|
|
186
|
+
}
|
|
187
|
+
if (neutralColor && rows.length > 1) {
|
|
188
|
+
state.color = mergedColumnColor(rows.map((ref) => colorOfRef(ref, colorField)), neutralColor, state.color)
|
|
189
|
+
}
|
|
190
|
+
state.color = mappedColor(state.color, colorMap)
|
|
191
|
+
}
|
|
168
192
|
return { states, keyByValue, refsByKey }
|
|
169
193
|
}
|
|
170
194
|
|
|
195
|
+
/**
|
|
196
|
+
* The colour one referenced row carries.
|
|
197
|
+
*
|
|
198
|
+
* @param {object} ref The referenced row.
|
|
199
|
+
* @param {string} colorField The row field that holds the colour, '' for `color`.
|
|
200
|
+
* @return {string} The colour, '' when it has none.
|
|
201
|
+
*/
|
|
202
|
+
function colorOfRef(ref, colorField) {
|
|
203
|
+
const color = colorField ? readPath(ref, colorField) : ref.color
|
|
204
|
+
return typeof color === 'string' ? color : ''
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* The colour a column merged from several rows takes when a neutral colour
|
|
209
|
+
* is declared: the first chosen colour, so a row stored with the default
|
|
210
|
+
* never outranks one somebody picked, whatever order the rows come in.
|
|
211
|
+
*
|
|
212
|
+
* @param {Array<string>} colors The rows' colours, in column order.
|
|
213
|
+
* @param {string} neutralColor The colour a row holds when nobody chose one.
|
|
214
|
+
* @param {string} fallback The colour when no row has a chosen or neutral one.
|
|
215
|
+
* @return {string} The column's colour.
|
|
216
|
+
* @spec openspec/changes/board-neutral-column-colour/specs/board-view/spec.md#requirement-a-merged-column-prefers-a-chosen-colour
|
|
217
|
+
*/
|
|
218
|
+
export function mergedColumnColor(colors, neutralColor, fallback = '') {
|
|
219
|
+
const chosen = colors.find((color) => color !== '' && color !== neutralColor)
|
|
220
|
+
if (chosen !== undefined) {
|
|
221
|
+
return chosen
|
|
222
|
+
}
|
|
223
|
+
return colors.includes(neutralColor) ? neutralColor : fallback
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* The CSS colour a stored colour maps to, so a palette name such as
|
|
228
|
+
* "orange" or "grey-light" can draw a theme token.
|
|
229
|
+
*
|
|
230
|
+
* @param {string} color The stored colour.
|
|
231
|
+
* @param {object|null} colorMap A stored colour to a CSS colour.
|
|
232
|
+
* @return {string} The mapped colour, else the stored one.
|
|
233
|
+
* @spec openspec/changes/board-column-colour-map/specs/board-view/spec.md#requirement-a-column-colour-can-be-mapped-to-a-css-colour
|
|
234
|
+
*/
|
|
235
|
+
export function mappedColor(color, colorMap) {
|
|
236
|
+
if (!colorMap || typeof colorMap !== 'object' || color === '' || !Object.hasOwn(colorMap, color)) {
|
|
237
|
+
return color
|
|
238
|
+
}
|
|
239
|
+
const mapped = colorMap[color]
|
|
240
|
+
return typeof mapped === 'string' && mapped !== '' ? mapped : color
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* The limit one referenced row declares.
|
|
245
|
+
*
|
|
246
|
+
* @param {object} ref The referenced row.
|
|
247
|
+
* @param {string} capacityField The row field that holds the limit.
|
|
248
|
+
* @return {number|null} The limit, or null when it has none.
|
|
249
|
+
* @spec openspec/changes/board-column-capacity/specs/board-view/spec.md#requirement-a-column-can-carry-a-capacity
|
|
250
|
+
*/
|
|
251
|
+
export function capacityOfRef(ref, capacityField) {
|
|
252
|
+
return capacityField ? capacityValue(readPath(ref, capacityField)) : null
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Whether a drop fills a referenced row past its limit: the cards that
|
|
257
|
+
* already carry that row, counted against the row's own limit. Counted per
|
|
258
|
+
* row, not per column, so a column merged from several rows still refuses
|
|
259
|
+
* the one that is full.
|
|
260
|
+
*
|
|
261
|
+
* @param {object} options The call.
|
|
262
|
+
* @param {object} options.target The referenced row the drop would write.
|
|
263
|
+
* @param {object} options.card The card being moved.
|
|
264
|
+
* @param {Array<object>} options.rows The cards the board holds.
|
|
265
|
+
* @param {string} options.field The row field the columns come from.
|
|
266
|
+
* @param {string} options.capacityField The referenced row's limit field.
|
|
267
|
+
* @param {string} [options.rowKey] The row key, so the moving card is not counted.
|
|
268
|
+
* @return {{count: number, capacity: number}|null} The count and limit when full, else null.
|
|
269
|
+
* @spec openspec/changes/board-column-capacity/specs/board-view/spec.md#requirement-a-drop-into-a-full-column-is-refused
|
|
270
|
+
*/
|
|
271
|
+
export function fullTargetOf({ target, card, rows = [], field, capacityField, rowKey = 'id' } = {}) {
|
|
272
|
+
const capacity = capacityOfRef(target, capacityField)
|
|
273
|
+
if (capacity === null) {
|
|
274
|
+
return null
|
|
275
|
+
}
|
|
276
|
+
const id = refIdOf(target)
|
|
277
|
+
const self = String(card?.[rowKey] ?? '')
|
|
278
|
+
const count = (Array.isArray(rows) ? rows : []).filter((row) => String(row?.[rowKey] ?? '') !== self && refIdOf(readPath(row, field)) === id).length
|
|
279
|
+
return count >= capacity ? { count, capacity } : null
|
|
280
|
+
}
|
|
281
|
+
|
|
171
282
|
/**
|
|
172
283
|
* The stages of a field with no referenced schema (a user id): the values
|
|
173
284
|
* present on the rows, by label, then one column for no value.
|
|
@@ -46,3 +46,50 @@ export function contentHeaderLink(content) {
|
|
|
46
46
|
}
|
|
47
47
|
return link
|
|
48
48
|
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The header link a widget DEFINITION declares: `headerLink` on the
|
|
52
|
+
* definition itself, else what its content asks for (see contentHeaderLink).
|
|
53
|
+
*
|
|
54
|
+
* @param {object|null|undefined} widget A widget definition.
|
|
55
|
+
* @return {{label: string, route?: string, params?: object, query?: object, href?: string}|null}
|
|
56
|
+
*/
|
|
57
|
+
export function widgetHeaderLink(widget) {
|
|
58
|
+
if (!widget || typeof widget !== 'object') {
|
|
59
|
+
return null
|
|
60
|
+
}
|
|
61
|
+
const declared = widget.headerLink
|
|
62
|
+
if (declared && typeof declared === 'object' && typeof declared.label === 'string' && declared.label !== '') {
|
|
63
|
+
return declared
|
|
64
|
+
}
|
|
65
|
+
return contentHeaderLink(widget.content)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* How to draw a header link: the tag and its attributes. A `route` is a
|
|
70
|
+
* `router-link` (only when a router is mounted), an `href` a plain anchor.
|
|
71
|
+
* An empty tag means there is nothing usable to draw.
|
|
72
|
+
*
|
|
73
|
+
* @param {object|null|undefined} link A link `{ label, route?, params?, query?, href? }`.
|
|
74
|
+
* @param {boolean} hasRouter Whether a router is mounted.
|
|
75
|
+
* @return {{tag: string, attrs: object}}
|
|
76
|
+
*/
|
|
77
|
+
export function headerLinkTarget(link, hasRouter) {
|
|
78
|
+
if (!link || typeof link.label !== 'string' || link.label === '') {
|
|
79
|
+
return { tag: '', attrs: {} }
|
|
80
|
+
}
|
|
81
|
+
if (link.route && hasRouter) {
|
|
82
|
+
const to = { name: link.route }
|
|
83
|
+
if (link.params && typeof link.params === 'object') {
|
|
84
|
+
to.params = link.params
|
|
85
|
+
}
|
|
86
|
+
if (link.query && typeof link.query === 'object') {
|
|
87
|
+
to.query = link.query
|
|
88
|
+
}
|
|
89
|
+
return { tag: 'router-link', attrs: { to } }
|
|
90
|
+
}
|
|
91
|
+
if (typeof link.href === 'string' && link.href !== '') {
|
|
92
|
+
return { tag: 'a', attrs: { href: link.href } }
|
|
93
|
+
}
|
|
94
|
+
return { tag: '', attrs: {} }
|
|
95
|
+
}
|
package/src/utils/schema.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { schemaRefSlug } from './schemaRefSlug.js'
|
|
10
|
+
import { userLocale } from './userLocale.js'
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Default column widths per property type/format.
|
|
@@ -159,7 +160,7 @@ export function formatValue(value, property = {}, options = {}) {
|
|
|
159
160
|
if (Number.isNaN(num)) {
|
|
160
161
|
return String(value)
|
|
161
162
|
}
|
|
162
|
-
return num.toLocaleString()
|
|
163
|
+
return num.toLocaleString(userLocale())
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
// Array
|
|
@@ -213,17 +214,17 @@ export function formatValue(value, property = {}, options = {}) {
|
|
|
213
214
|
return str
|
|
214
215
|
}
|
|
215
216
|
if (format === 'date') {
|
|
216
|
-
return date.toLocaleDateString(
|
|
217
|
+
return date.toLocaleDateString(userLocale(), {
|
|
217
218
|
day: '2-digit',
|
|
218
219
|
month: '2-digit',
|
|
219
220
|
year: 'numeric',
|
|
220
221
|
})
|
|
221
222
|
}
|
|
222
|
-
return date.toLocaleDateString(
|
|
223
|
+
return date.toLocaleDateString(userLocale(), {
|
|
223
224
|
day: '2-digit',
|
|
224
225
|
month: '2-digit',
|
|
225
226
|
year: 'numeric',
|
|
226
|
-
}) + ', ' + date.toLocaleTimeString(
|
|
227
|
+
}) + ', ' + date.toLocaleTimeString(userLocale(), {
|
|
227
228
|
hour: '2-digit',
|
|
228
229
|
minute: '2-digit',
|
|
229
230
|
second: '2-digit',
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SPDX-FileCopyrightText: 2026 Conduction B.V.
|
|
3
|
+
* SPDX-License-Identifier: EUPL-1.2
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { getCanonicalLocale } from '@nextcloud/l10n'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The BCP 47 tag dates and numbers are written in: the locale the user chose
|
|
10
|
+
* in Nextcloud (`nl_NL` becomes `nl-NL`), not the browser's.
|
|
11
|
+
*
|
|
12
|
+
* `toLocaleDateString(undefined)` answers in the BROWSER's locale, so a Dutch
|
|
13
|
+
* instance opened in an English browser wrote 10/15/2026. Pass this instead.
|
|
14
|
+
*
|
|
15
|
+
* @return {string|undefined} The tag, or undefined for the runtime default
|
|
16
|
+
* when Nextcloud names none or Intl does not accept it.
|
|
17
|
+
* @spec openspec/changes/dates-in-the-users-locale/specs/data-display/spec.md#requirement-a-date-reads-in-the-users-nextcloud-locale
|
|
18
|
+
*/
|
|
19
|
+
export function userLocale() {
|
|
20
|
+
try {
|
|
21
|
+
const tag = getCanonicalLocale()
|
|
22
|
+
return tag && Intl.DateTimeFormat.supportedLocalesOf([tag]).length > 0 ? tag : undefined
|
|
23
|
+
} catch {
|
|
24
|
+
return undefined
|
|
25
|
+
}
|
|
26
|
+
}
|