@conduction/nextcloud-vue 2.56.0-beta.36 → 2.56.0-beta.38
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/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +131 -3
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +54 -18
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- 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 +376 -6
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +146 -71
- 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 +47 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +22 -12
- 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/CnDetailPage/CnDetailPage.vue2.js +23 -4
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +3 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.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/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +18 -5
- 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/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 +571 -77
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +191 -82
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js +11 -2
- package/dist/esm/components/CnIndexPage/useSelfFetchList.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/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +70 -2
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js +67 -5
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +181 -124
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.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/CnSettingsPage/CnSettingsPage.vue.js +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +5 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
- package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +134 -10
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +6 -2
- package/dist/esm/components/CnStatWidget/CnStatWidget.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 +6 -3
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- 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/CnToggleTableWidget/CnToggleTableWidget.vue.js +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +140 -7
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.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/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js +37 -9
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +6 -5
- package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js +53 -1
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js +3 -2
- package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +135 -0
- 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/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +19 -0
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +37 -19
- package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
- package/dist/esm/composables/useListView.js +21 -0
- package/dist/esm/composables/useListView.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 +57 -2
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +78 -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 +1541 -1166
- package/dist/esm/store/useObjectStore.js +23 -4
- package/dist/esm/store/useObjectStore.js.map +1 -1
- package/dist/esm/utils/boardColumns.js +58 -2
- package/dist/esm/utils/boardColumns.js.map +1 -1
- package/dist/esm/utils/boardReferenceColumns.js +330 -0
- package/dist/esm/utils/boardReferenceColumns.js.map +1 -0
- package/dist/esm/utils/buildManifest.js +4 -1
- package/dist/esm/utils/buildManifest.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 +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +8 -2
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +30291 -27618
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1541 -1166
- package/l10n/en.json +57 -2
- package/l10n/nl.json +78 -2
- package/package.json +1 -1
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +160 -8
- 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 +433 -12
- 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 +59 -3
- package/src/components/CnDataMatrix/CnDataMatrix.vue +2 -1
- package/src/components/CnDetailPage/CnDetailHeaderChips.vue +2 -1
- package/src/components/CnDetailPage/CnDetailPage.md +1 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +23 -4
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +3 -1
- package/src/components/CnEmailPicker/CnEmailPicker.vue +2 -1
- package/src/components/CnFactsWidget/CnFactsWidget.vue +18 -5
- 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 +610 -25
- package/src/components/CnIndexPage/useSelfFetchList.js +10 -1
- 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/CnRecordListWidget/CnRecordListWidget.vue +70 -2
- package/src/components/CnRegisterMapping/CnRegisterMapping.md +5 -0
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +231 -96
- package/src/components/CnRoadmapItem/CnRoadmapItem.vue +2 -1
- package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +4 -2
- package/src/components/CnSettingsPage/CnSettingsPage.vue +5 -1
- package/src/components/CnStatWidget/CnStatWidget.vue +136 -11
- package/src/components/CnStatsBlock/CnStatsBlock.vue +2 -1
- package/src/components/CnSummaryAggregates/CnSummaryAggregates.vue +2 -1
- package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -3
- package/src/components/CnTasksCard/CnTasksCard.vue +2 -1
- package/src/components/CnTimelineWidget/CnTimelineWidget.vue +2 -1
- package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +140 -7
- package/src/components/CnTranslatedBadge/CnTranslatedBadge.vue +2 -1
- package/src/components/CnVersionHistory/CnVersionHistory.vue +2 -1
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.md +2 -1
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +42 -13
- package/src/components/CnWidgetCardGrid/CnWidgetCardGrid.vue +55 -2
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +135 -0
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +10 -0
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +44 -1
- package/src/composables/useListView.js +21 -0
- package/src/css/board.css +105 -4
- package/src/css/dialog.css +4 -2
- package/src/css/index-page.css +49 -0
- package/src/css/look-board.css +77 -7
- 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 +116 -5
- package/src/store/useObjectStore.js +23 -4
- package/src/utils/boardColumns.js +57 -1
- package/src/utils/boardReferenceColumns.js +326 -0
- package/src/utils/buildManifest.js +4 -1
- package/src/utils/schema.js +5 -4
- package/src/utils/userLocale.js +26 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/widgetDispatch.js +8 -2
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<template>
|
|
6
6
|
<div
|
|
7
7
|
class="cn-board-view"
|
|
8
|
-
:class="{ 'cn-board-view--board': isBoardLook }"
|
|
8
|
+
:class="{ 'cn-board-view--board': isBoardLook, 'cn-board-view--wrap': wrapColumns, 'cn-board-view--selecting': selectedKeys.length > 0 }"
|
|
9
9
|
data-testid="cn-board-view">
|
|
10
10
|
<p v-if="!usable" class="cn-board-view__unusable" data-testid="cn-board-unusable">
|
|
11
11
|
{{ unusableText }}
|
|
@@ -36,9 +36,12 @@
|
|
|
36
36
|
v-for="column in lane.columns"
|
|
37
37
|
:key="`col-${lane.key}-${column.key}`"
|
|
38
38
|
class="cn-board-view__column"
|
|
39
|
+
:class="{ 'cn-board-view__column--unreachable': isUnreachable(column), 'cn-board-view__column--full': isFull(column), 'cn-board-view__column--reason': dragReason(column) !== '' }"
|
|
39
40
|
role="listitem"
|
|
40
41
|
data-testid="cn-board-column"
|
|
41
42
|
:data-column="column.key"
|
|
43
|
+
:data-unreachable="isUnreachable(column) ? 'true' : null"
|
|
44
|
+
:data-full="isFull(column) ? 'true' : null"
|
|
42
45
|
@dragover.prevent
|
|
43
46
|
@drop="onDrop(column, $event)">
|
|
44
47
|
<!-- Board look: a dot, the label and a white count badge, with an
|
|
@@ -51,8 +54,11 @@
|
|
|
51
54
|
:style="{ background: dotColor(column) }"
|
|
52
55
|
aria-hidden="true" />
|
|
53
56
|
<span class="cn-board-view__column-title">{{ column.label }}</span>
|
|
54
|
-
<span
|
|
55
|
-
|
|
57
|
+
<span
|
|
58
|
+
class="cn-board-view__badge"
|
|
59
|
+
:class="{ 'cn-board-view__badge--full': isFull(column) }"
|
|
60
|
+
data-testid="cn-board-count">
|
|
61
|
+
{{ capacityOf(column) === null ? column.count : capacityText(column) }}<span v-if="paged" class="hidden-visually"> {{ t('nextcloud-vue', 'on this page') }}</span><span v-if="isFull(column)" class="hidden-visually">{{ ' ' + t('nextcloud-vue', 'full') }}</span>
|
|
56
62
|
</span>
|
|
57
63
|
</h2>
|
|
58
64
|
<span
|
|
@@ -64,11 +70,21 @@
|
|
|
64
70
|
</div>
|
|
65
71
|
<h3 v-else class="cn-board-view__column-header">
|
|
66
72
|
{{ column.label }}
|
|
67
|
-
<span
|
|
68
|
-
|
|
73
|
+
<span
|
|
74
|
+
class="cn-board-view__count"
|
|
75
|
+
:class="{ 'cn-board-view__count--full': isFull(column) }"
|
|
76
|
+
data-testid="cn-board-count">
|
|
77
|
+
{{ countLabel(column) }}<span v-if="isFull(column)" class="hidden-visually">{{ ' ' + t('nextcloud-vue', 'full') }}</span>
|
|
69
78
|
</span>
|
|
70
79
|
</h3>
|
|
71
80
|
|
|
81
|
+
<p
|
|
82
|
+
v-if="dragReason(column) !== ''"
|
|
83
|
+
class="cn-board-view__column-reason"
|
|
84
|
+
data-testid="cn-board-column-reason">
|
|
85
|
+
{{ dragReason(column) }}
|
|
86
|
+
</p>
|
|
87
|
+
|
|
72
88
|
<!--
|
|
73
89
|
A list of its own, so a reader is told how many cards
|
|
74
90
|
this column holds. The column is a listitem of the
|
|
@@ -116,11 +132,21 @@
|
|
|
116
132
|
:data-card-id="cardKey(card)"
|
|
117
133
|
:draggable="canMove"
|
|
118
134
|
@dragstart="onDragStart(card, column, $event)"
|
|
135
|
+
@dragend="onDragEnd"
|
|
119
136
|
@keydown="onCardKeydown(card, column, lane, $event)">
|
|
120
137
|
<!-- Board look: title link, sub line, pill, footer, and a
|
|
121
138
|
menu button instead of the Move to select. -->
|
|
122
139
|
<template v-if="isBoardLook">
|
|
123
140
|
<div class="cn-board-view__card-head">
|
|
141
|
+
<input
|
|
142
|
+
v-if="selectable"
|
|
143
|
+
type="checkbox"
|
|
144
|
+
class="cn-board-view__select"
|
|
145
|
+
data-testid="cn-board-card-select"
|
|
146
|
+
:data-card-id="cardKey(card)"
|
|
147
|
+
:checked="isSelected(card)"
|
|
148
|
+
:aria-label="selectLabel(card)"
|
|
149
|
+
@change="toggleSelected(card)">
|
|
124
150
|
<a
|
|
125
151
|
href="#"
|
|
126
152
|
class="cn-board-view__card-title"
|
|
@@ -164,8 +190,18 @@
|
|
|
164
190
|
class="cn-board-view__menu-item"
|
|
165
191
|
data-testid="cn-board-menu-move"
|
|
166
192
|
:data-target="target.key"
|
|
167
|
-
|
|
193
|
+
:aria-disabled="canMoveTo(card, target) ? null : 'true'"
|
|
194
|
+
:class="{ 'cn-board-view__menu-item--blocked': !canMoveTo(card, target), 'cn-board-view__menu-item--reason': blockReason(card, target) !== '' }"
|
|
195
|
+
@click="canMoveTo(card, target) && onMenuMove(card, column, target)">
|
|
168
196
|
{{ target.label }}
|
|
197
|
+
<span
|
|
198
|
+
v-if="!canMoveTo(card, target) && blockedNote(card, target) !== ''"
|
|
199
|
+
class="cn-board-view__menu-note"
|
|
200
|
+
data-testid="cn-board-menu-blocked">{{ blockedNote(card, target) }}</span>
|
|
201
|
+
<span
|
|
202
|
+
v-if="blockReason(card, target) !== ''"
|
|
203
|
+
class="cn-board-view__menu-reason"
|
|
204
|
+
data-testid="cn-board-menu-reason">{{ blockReason(card, target) }}</span>
|
|
169
205
|
</button>
|
|
170
206
|
</div>
|
|
171
207
|
<button
|
|
@@ -216,6 +252,16 @@
|
|
|
216
252
|
</span>
|
|
217
253
|
</template>
|
|
218
254
|
<template v-else>
|
|
255
|
+
<label v-if="selectable" class="cn-board-view__select-label">
|
|
256
|
+
<input
|
|
257
|
+
type="checkbox"
|
|
258
|
+
class="cn-board-view__select"
|
|
259
|
+
data-testid="cn-board-card-select"
|
|
260
|
+
:data-card-id="cardKey(card)"
|
|
261
|
+
:checked="isSelected(card)"
|
|
262
|
+
:aria-label="selectLabel(card)"
|
|
263
|
+
@change="toggleSelected(card)">
|
|
264
|
+
</label>
|
|
219
265
|
<span
|
|
220
266
|
v-if="dueLabel(card)"
|
|
221
267
|
class="cn-board-view__due"
|
|
@@ -309,13 +355,14 @@ import { translate as t } from '@nextcloud/l10n'
|
|
|
309
355
|
import CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'
|
|
310
356
|
import { normalizeLook } from '../../composables/useLook.js'
|
|
311
357
|
import { isBadgeVariant } from '../../utils/badgeVariants.js'
|
|
312
|
-
import { buildBoardColumns, resolveStageColor } from '../../utils/boardColumns.js'
|
|
358
|
+
import { buildBoardColumns, normalizeAllowed, resolveStageColor } from '../../utils/boardColumns.js'
|
|
313
359
|
import { buildSwimlanes } from '../../utils/boardSwimlanes.js'
|
|
314
360
|
import { DROP_OUTCOMES, runBoardDrop } from '../../utils/boardTransition.js'
|
|
315
361
|
import { daysUntil, dueStateForRow } from '../../utils/dueRule.js'
|
|
316
362
|
import { formatMetricValue } from '../../utils/formatMetric.js'
|
|
317
363
|
import { readPath } from '../../utils/readPath.js'
|
|
318
364
|
import { isRowMiddleClick, preventMiddleClickAutoscroll } from '../../utils/rowAuxClick.js'
|
|
365
|
+
import { userLocale } from '../../utils/userLocale.js'
|
|
319
366
|
|
|
320
367
|
import '../../css/board.css'
|
|
321
368
|
|
|
@@ -354,6 +401,12 @@ export default {
|
|
|
354
401
|
* draws the screens' board anatomy (screens-kanban-parity).
|
|
355
402
|
*/
|
|
356
403
|
cnLook: { default: 'nextcloud' },
|
|
404
|
+
/**
|
|
405
|
+
* The app's cell-formatter registry, provided by CnAppRoot. A card
|
|
406
|
+
* role named in `cardRoles.formatters` shows its value through it, as
|
|
407
|
+
* the table's cells do (screens-board-reference-columns).
|
|
408
|
+
*/
|
|
409
|
+
cnFormatters: { default: () => ({}) },
|
|
357
410
|
},
|
|
358
411
|
|
|
359
412
|
props: {
|
|
@@ -494,9 +547,78 @@ export default {
|
|
|
494
547
|
type: Number,
|
|
495
548
|
default: 0,
|
|
496
549
|
},
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* The column a row belongs in, for a status whose raw value is not
|
|
553
|
+
* the column key: a reference whose rows are merged by name
|
|
554
|
+
* (screens-board-reference-columns). Absent, the row's `statusField`
|
|
555
|
+
* value is the key.
|
|
556
|
+
*
|
|
557
|
+
* @type {((row: object) => string)|null}
|
|
558
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references
|
|
559
|
+
*/
|
|
560
|
+
columnKeyOf: {
|
|
561
|
+
type: Function,
|
|
562
|
+
default: null,
|
|
563
|
+
},
|
|
564
|
+
|
|
565
|
+
/**
|
|
566
|
+
* Wrap the columns onto more rows, as many to a row as fit at 240px,
|
|
567
|
+
* instead of one row that scrolls sideways (manifest
|
|
568
|
+
* `config.board.wrap`). For a board with more stages than fit.
|
|
569
|
+
*
|
|
570
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-wide-board-can-wrap-its-columns
|
|
571
|
+
*/
|
|
572
|
+
wrapColumns: {
|
|
573
|
+
type: Boolean,
|
|
574
|
+
default: false,
|
|
575
|
+
},
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Offer a checkbox on every card, so cards can be selected for the
|
|
579
|
+
* list's bulk actions (the same selection the table holds).
|
|
580
|
+
*
|
|
581
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-cards-can-be-selected-for-bulk-actions
|
|
582
|
+
*/
|
|
583
|
+
selectable: {
|
|
584
|
+
type: Boolean,
|
|
585
|
+
default: false,
|
|
586
|
+
},
|
|
587
|
+
|
|
588
|
+
/**
|
|
589
|
+
* The selected cards, by row key.
|
|
590
|
+
*
|
|
591
|
+
* @type {Array<string|number>}
|
|
592
|
+
*/
|
|
593
|
+
selectedIds: {
|
|
594
|
+
type: Array,
|
|
595
|
+
default: () => [],
|
|
596
|
+
},
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* The columns one card may move to, asked when its menu opens or its
|
|
600
|
+
* drag starts: `(card) => Promise<Array<string>|null>`, column keys,
|
|
601
|
+
* `null` for every column. A column the card cannot reach is greyed
|
|
602
|
+
* during the drag and marked "not allowed" in the menu, and a drop on
|
|
603
|
+
* it is refused without asking the host. Absent, every column is
|
|
604
|
+
* offered and the host's move decides.
|
|
605
|
+
*
|
|
606
|
+
* An entry may also be `{ key, allowed, reason }`. With `allowed:
|
|
607
|
+
* false` the column is blocked: the menu shows the reason under its
|
|
608
|
+
* name, the column shows it under its header during a drag, and a
|
|
609
|
+
* drop there is refused with it.
|
|
610
|
+
*
|
|
611
|
+
* @type {((card: object) => Promise<Array<string|{key: string, allowed?: boolean, reason?: string}>|null>)|null}
|
|
612
|
+
* @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason
|
|
613
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-board-shows-where-a-card-can-go
|
|
614
|
+
*/
|
|
615
|
+
allowedMoves: {
|
|
616
|
+
type: Function,
|
|
617
|
+
default: null,
|
|
618
|
+
},
|
|
497
619
|
},
|
|
498
620
|
|
|
499
|
-
emits: ['card-click', 'card-aux-click', 'moved', 'refused', 'stale', 'load-more'],
|
|
621
|
+
emits: ['card-click', 'card-aux-click', 'moved', 'refused', 'stale', 'load-more', 'select'],
|
|
500
622
|
|
|
501
623
|
data() {
|
|
502
624
|
return {
|
|
@@ -512,6 +634,10 @@ export default {
|
|
|
512
634
|
expanded: [],
|
|
513
635
|
/** The card whose menu is open (board look), by card key. */
|
|
514
636
|
openMenuKey: null,
|
|
637
|
+
/** Where each card may move (`allowedMoves`), as `{ keys, reasons }` by card key; null = everywhere, absent = not asked yet. */
|
|
638
|
+
allowedByCard: {},
|
|
639
|
+
/** Where the dragged card may move, as `{ keys, reasons }`, or null for everywhere. */
|
|
640
|
+
dragAllowed: null,
|
|
515
641
|
}
|
|
516
642
|
},
|
|
517
643
|
|
|
@@ -529,6 +655,7 @@ export default {
|
|
|
529
655
|
statusField: this.statusField,
|
|
530
656
|
offBoardLabel: t('nextcloud-vue', 'Elsewhere'),
|
|
531
657
|
colorField: this.colorField,
|
|
658
|
+
keyOf: this.columnKeyOf,
|
|
532
659
|
})
|
|
533
660
|
},
|
|
534
661
|
|
|
@@ -556,9 +683,35 @@ export default {
|
|
|
556
683
|
due: (given && given.due) || '',
|
|
557
684
|
owner: (given && given.owner) || '',
|
|
558
685
|
pillColors: (given && given.pillColors) || {},
|
|
686
|
+
formatters: (given && given.formatters && typeof given.formatters === 'object') ? given.formatters : {},
|
|
559
687
|
}
|
|
560
688
|
},
|
|
561
689
|
|
|
690
|
+
/** @return {string} The note on a menu target the card cannot reach. */
|
|
691
|
+
notAllowedLabel() {
|
|
692
|
+
return t('nextcloud-vue', 'not allowed')
|
|
693
|
+
},
|
|
694
|
+
|
|
695
|
+
/** @return {string} The note on a menu target that is full. */
|
|
696
|
+
fullLabel() {
|
|
697
|
+
return t('nextcloud-vue', 'full')
|
|
698
|
+
},
|
|
699
|
+
|
|
700
|
+
/**
|
|
701
|
+
* Every column's total over all lanes, by key: what a limit is
|
|
702
|
+
* measured against, since a swimlane holds only part of a column.
|
|
703
|
+
*
|
|
704
|
+
* @return {Map<string, number>} The totals.
|
|
705
|
+
*/
|
|
706
|
+
columnTotals() {
|
|
707
|
+
return new Map(this.board.columns.map((column) => [String(column.key), column.count]))
|
|
708
|
+
},
|
|
709
|
+
|
|
710
|
+
/** @return {Array<string>} The selected row keys as strings. */
|
|
711
|
+
selectedKeys() {
|
|
712
|
+
return (Array.isArray(this.selectedIds) ? this.selectedIds : []).map(String)
|
|
713
|
+
},
|
|
714
|
+
|
|
562
715
|
/** @return {string} The Open in new tab menu item. */
|
|
563
716
|
openInNewTabLabel() {
|
|
564
717
|
return t('nextcloud-vue', 'Open in new tab')
|
|
@@ -617,6 +770,206 @@ export default {
|
|
|
617
770
|
|
|
618
771
|
preventMiddleClickAutoscroll,
|
|
619
772
|
|
|
773
|
+
/**
|
|
774
|
+
* Whether a card is selected.
|
|
775
|
+
*
|
|
776
|
+
* @param {object} card The card.
|
|
777
|
+
* @return {boolean} True when selected.
|
|
778
|
+
*/
|
|
779
|
+
isSelected(card) {
|
|
780
|
+
return this.selectedKeys.includes(this.cardKey(card))
|
|
781
|
+
},
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* The checkbox's accessible name.
|
|
785
|
+
*
|
|
786
|
+
* @param {object} card The card.
|
|
787
|
+
* @return {string} "Select <name>".
|
|
788
|
+
*/
|
|
789
|
+
selectLabel(card) {
|
|
790
|
+
const name = this.roleText(card, this.roles.title) || this.cardKey(card)
|
|
791
|
+
return t('nextcloud-vue', 'Select {name}', { name })
|
|
792
|
+
},
|
|
793
|
+
|
|
794
|
+
/**
|
|
795
|
+
* Select a card, or unselect it.
|
|
796
|
+
*
|
|
797
|
+
* @param {object} card The card.
|
|
798
|
+
* @return {void}
|
|
799
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-cards-can-be-selected-for-bulk-actions
|
|
800
|
+
*/
|
|
801
|
+
toggleSelected(card) {
|
|
802
|
+
const key = this.cardKey(card)
|
|
803
|
+
const next = this.isSelected(card)
|
|
804
|
+
? this.selectedIds.filter((id) => String(id) !== key)
|
|
805
|
+
: [...this.selectedIds, card?.[this.rowKey]]
|
|
806
|
+
/**
|
|
807
|
+
* @event select Emitted when a card's checkbox changes. Payload: the selected row keys.
|
|
808
|
+
*/
|
|
809
|
+
this.$emit('select', next)
|
|
810
|
+
},
|
|
811
|
+
|
|
812
|
+
/**
|
|
813
|
+
* Ask the host where one card may go (`allowedMoves`), once per card.
|
|
814
|
+
*
|
|
815
|
+
* @param {object} card The card.
|
|
816
|
+
* @return {Promise<{keys: Array<string>, reasons: object}|null>} Where it may go, or null for everywhere.
|
|
817
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-board-shows-where-a-card-can-go
|
|
818
|
+
*/
|
|
819
|
+
async loadAllowed(card) {
|
|
820
|
+
if (typeof this.allowedMoves !== 'function') {
|
|
821
|
+
return null
|
|
822
|
+
}
|
|
823
|
+
const key = this.cardKey(card)
|
|
824
|
+
if (Object.hasOwn(this.allowedByCard, key)) {
|
|
825
|
+
return this.allowedByCard[key]
|
|
826
|
+
}
|
|
827
|
+
let allowed
|
|
828
|
+
try {
|
|
829
|
+
allowed = normalizeAllowed(await this.allowedMoves(card))
|
|
830
|
+
} catch {
|
|
831
|
+
// Unknown is not "nowhere": the host's move stays the authority.
|
|
832
|
+
allowed = null
|
|
833
|
+
}
|
|
834
|
+
this.allowedByCard = { ...this.allowedByCard, [key]: allowed }
|
|
835
|
+
return allowed
|
|
836
|
+
},
|
|
837
|
+
|
|
838
|
+
/**
|
|
839
|
+
* Whether a card may move to a column, as far as the board knows.
|
|
840
|
+
*
|
|
841
|
+
* @param {object} card The card.
|
|
842
|
+
* @param {object} target The column.
|
|
843
|
+
* @return {boolean} False only when the host said it cannot.
|
|
844
|
+
*/
|
|
845
|
+
isMoveAllowed(card, target) {
|
|
846
|
+
const allowed = this.allowedByCard[this.cardKey(card)]
|
|
847
|
+
return !allowed || allowed.keys.includes(String(target.key))
|
|
848
|
+
},
|
|
849
|
+
|
|
850
|
+
/**
|
|
851
|
+
* Why the host blocked a card's move to a column, when it said.
|
|
852
|
+
*
|
|
853
|
+
* @param {object} card The card.
|
|
854
|
+
* @param {object} target The column.
|
|
855
|
+
* @return {string} The reason, '' when the move is allowed or no reason was given.
|
|
856
|
+
* @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason
|
|
857
|
+
*/
|
|
858
|
+
blockReason(card, target) {
|
|
859
|
+
const allowed = this.allowedByCard[this.cardKey(card)]
|
|
860
|
+
if (!allowed || this.isMoveAllowed(card, target)) {
|
|
861
|
+
return ''
|
|
862
|
+
}
|
|
863
|
+
return allowed.reasons[String(target.key)] || ''
|
|
864
|
+
},
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* The note beside a menu target the card cannot move to.
|
|
868
|
+
*
|
|
869
|
+
* @param {object} card The card.
|
|
870
|
+
* @param {object} target The column.
|
|
871
|
+
* @return {string} "full" or "not allowed"; '' when a reason is shown instead.
|
|
872
|
+
*/
|
|
873
|
+
blockedNote(card, target) {
|
|
874
|
+
if (this.blockReason(card, target) !== '') {
|
|
875
|
+
return ''
|
|
876
|
+
}
|
|
877
|
+
return this.isMoveAllowed(card, target) && this.isFull(target) ? this.fullLabel : this.notAllowedLabel
|
|
878
|
+
},
|
|
879
|
+
|
|
880
|
+
/**
|
|
881
|
+
* Why the dragged card cannot land on a column, shown under its header.
|
|
882
|
+
*
|
|
883
|
+
* @param {object} column The column.
|
|
884
|
+
* @return {string} The host's reason while a drag is on, else ''.
|
|
885
|
+
* @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason
|
|
886
|
+
*/
|
|
887
|
+
dragReason(column) {
|
|
888
|
+
if (this.dragging === null || !this.dragAllowed || column.key === this.dragging.fromKey) {
|
|
889
|
+
return ''
|
|
890
|
+
}
|
|
891
|
+
const key = String(column.key)
|
|
892
|
+
return this.dragAllowed.keys.includes(key) ? '' : (this.dragAllowed.reasons[key] || '')
|
|
893
|
+
},
|
|
894
|
+
|
|
895
|
+
/**
|
|
896
|
+
* A column's limit.
|
|
897
|
+
*
|
|
898
|
+
* @param {object} column The column.
|
|
899
|
+
* @return {number|null} The limit, or null when it has none.
|
|
900
|
+
* @spec openspec/changes/board-column-capacity/specs/board-view/spec.md#requirement-a-column-can-carry-a-capacity
|
|
901
|
+
*/
|
|
902
|
+
capacityOf(column) {
|
|
903
|
+
const capacity = Number(column?.capacity)
|
|
904
|
+
return Number.isFinite(capacity) && capacity > 0 ? capacity : null
|
|
905
|
+
},
|
|
906
|
+
|
|
907
|
+
/**
|
|
908
|
+
* Whether a column holds as many cards as its limit, or more.
|
|
909
|
+
*
|
|
910
|
+
* @param {object} column The column.
|
|
911
|
+
* @return {boolean} True when full; false without a limit.
|
|
912
|
+
* @spec openspec/changes/board-column-capacity/specs/board-view/spec.md#requirement-a-column-can-carry-a-capacity
|
|
913
|
+
*/
|
|
914
|
+
isFull(column) {
|
|
915
|
+
const capacity = this.capacityOf(column)
|
|
916
|
+
return capacity !== null && (this.columnTotals.get(String(column.key)) ?? column.count) >= capacity
|
|
917
|
+
},
|
|
918
|
+
|
|
919
|
+
/**
|
|
920
|
+
* "count / capacity" for a column with a limit.
|
|
921
|
+
*
|
|
922
|
+
* @param {object} column The column.
|
|
923
|
+
* @return {string} The text.
|
|
924
|
+
*/
|
|
925
|
+
capacityText(column) {
|
|
926
|
+
return t('nextcloud-vue', '{count} / {capacity}', {
|
|
927
|
+
count: this.columnTotals.get(String(column.key)) ?? column.count,
|
|
928
|
+
capacity: this.capacityOf(column),
|
|
929
|
+
})
|
|
930
|
+
},
|
|
931
|
+
|
|
932
|
+
/**
|
|
933
|
+
* Whether a card may move to a column: the host allows it and the
|
|
934
|
+
* column is not full.
|
|
935
|
+
*
|
|
936
|
+
* @param {object} card The card.
|
|
937
|
+
* @param {object} target The column.
|
|
938
|
+
* @return {boolean} True when the move may be asked for.
|
|
939
|
+
* @spec openspec/changes/board-column-capacity/specs/board-view/spec.md#requirement-a-drop-into-a-full-column-is-refused
|
|
940
|
+
*/
|
|
941
|
+
canMoveTo(card, target) {
|
|
942
|
+
return this.isMoveAllowed(card, target) && !this.isFull(target)
|
|
943
|
+
},
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
* The sentence a drop into a full column is refused with.
|
|
947
|
+
*
|
|
948
|
+
* @param {object} column The column.
|
|
949
|
+
* @return {string} The sentence.
|
|
950
|
+
*/
|
|
951
|
+
fullRefusal(column) {
|
|
952
|
+
return t('nextcloud-vue', '{column} is full: {count} of {capacity}.', {
|
|
953
|
+
column: column.label,
|
|
954
|
+
count: this.columnTotals.get(String(column.key)) ?? column.count,
|
|
955
|
+
capacity: this.capacityOf(column),
|
|
956
|
+
})
|
|
957
|
+
},
|
|
958
|
+
|
|
959
|
+
/**
|
|
960
|
+
* Whether a column is out of reach for the card being dragged.
|
|
961
|
+
*
|
|
962
|
+
* @param {object} column The column.
|
|
963
|
+
* @return {boolean} True while a drag is on and the card cannot go there.
|
|
964
|
+
*/
|
|
965
|
+
isUnreachable(column) {
|
|
966
|
+
if (this.dragging === null || column.key === this.dragging.fromKey) {
|
|
967
|
+
return false
|
|
968
|
+
}
|
|
969
|
+
return this.isFull(column)
|
|
970
|
+
|| (this.dragAllowed !== null && !this.dragAllowed.keys.includes(String(column.key)))
|
|
971
|
+
},
|
|
972
|
+
|
|
620
973
|
/**
|
|
621
974
|
* A card's due state under `dueRule`.
|
|
622
975
|
*
|
|
@@ -658,11 +1011,35 @@ export default {
|
|
|
658
1011
|
const fields = Array.isArray(role) ? role : [role]
|
|
659
1012
|
return fields
|
|
660
1013
|
.filter((field) => typeof field === 'string' && field !== '')
|
|
661
|
-
.map((field) => this.
|
|
1014
|
+
.map((field) => this.fieldText(card, field))
|
|
662
1015
|
.filter((value) => value !== '')
|
|
663
1016
|
.join(' \u00b7 ')
|
|
664
1017
|
},
|
|
665
1018
|
|
|
1019
|
+
/**
|
|
1020
|
+
* One card field as text: through the formatter `cardRoles.formatters`
|
|
1021
|
+
* names for it, else the value itself.
|
|
1022
|
+
*
|
|
1023
|
+
* @param {object} card The card's row.
|
|
1024
|
+
* @param {string} field The dot-path.
|
|
1025
|
+
* @return {string} The text.
|
|
1026
|
+
* @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-card-field-can-show-through-a-formatter
|
|
1027
|
+
*/
|
|
1028
|
+
fieldText(card, field) {
|
|
1029
|
+
const raw = readPath(card, field)
|
|
1030
|
+
const id = this.roles.formatters[field]
|
|
1031
|
+
const fn = id && this.cnFormatters ? this.cnFormatters[id] : null
|
|
1032
|
+
if (typeof fn === 'function') {
|
|
1033
|
+
try {
|
|
1034
|
+
const out = fn(raw, card, null)
|
|
1035
|
+
return out === null || out === undefined ? '' : String(out).trim()
|
|
1036
|
+
} catch {
|
|
1037
|
+
return this.textOf(raw)
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
return this.textOf(raw)
|
|
1041
|
+
},
|
|
1042
|
+
|
|
666
1043
|
/**
|
|
667
1044
|
* A value as text: a string or number as is, an object by its label.
|
|
668
1045
|
*
|
|
@@ -687,7 +1064,7 @@ export default {
|
|
|
687
1064
|
* @return {string} A CnStatusBadge variant.
|
|
688
1065
|
*/
|
|
689
1066
|
pillVariant(card) {
|
|
690
|
-
const raw = this.
|
|
1067
|
+
const raw = this.fieldText(card, this.roles.pill)
|
|
691
1068
|
const variant = this.roles.pillColors[raw] ?? this.roles.pillColors[raw.toLowerCase()]
|
|
692
1069
|
return isBadgeVariant(variant) ? variant : 'default'
|
|
693
1070
|
},
|
|
@@ -714,7 +1091,7 @@ export default {
|
|
|
714
1091
|
const date = new Date(value)
|
|
715
1092
|
const shown = Number.isNaN(date.getTime())
|
|
716
1093
|
? String(value)
|
|
717
|
-
: date.toLocaleDateString(
|
|
1094
|
+
: date.toLocaleDateString(userLocale(), { day: 'numeric', month: 'short' })
|
|
718
1095
|
return days < 0
|
|
719
1096
|
? t('nextcloud-vue', 'Overdue {date}', { date: shown })
|
|
720
1097
|
: t('nextcloud-vue', 'Due {date}', { date: shown })
|
|
@@ -727,7 +1104,7 @@ export default {
|
|
|
727
1104
|
* @return {string} The name, '' when there is none.
|
|
728
1105
|
*/
|
|
729
1106
|
ownerName(card) {
|
|
730
|
-
return this.roles.owner === '' ? '' : this.
|
|
1107
|
+
return this.roles.owner === '' ? '' : this.fieldText(card, this.roles.owner)
|
|
731
1108
|
},
|
|
732
1109
|
|
|
733
1110
|
/**
|
|
@@ -879,6 +1256,7 @@ export default {
|
|
|
879
1256
|
const key = this.cardKey(card)
|
|
880
1257
|
this.openMenuKey = this.openMenuKey === key ? null : key
|
|
881
1258
|
if (this.openMenuKey !== null) {
|
|
1259
|
+
this.loadAllowed(card)
|
|
882
1260
|
this.focusMenuItem(card, 0)
|
|
883
1261
|
}
|
|
884
1262
|
},
|
|
@@ -967,6 +1345,7 @@ export default {
|
|
|
967
1345
|
event.preventDefault()
|
|
968
1346
|
if (!this.isMenuOpen(card)) {
|
|
969
1347
|
this.openMenuKey = this.cardKey(card)
|
|
1348
|
+
this.loadAllowed(card)
|
|
970
1349
|
this.focusMenuItem(card, 0)
|
|
971
1350
|
}
|
|
972
1351
|
}
|
|
@@ -1062,6 +1441,9 @@ export default {
|
|
|
1062
1441
|
* @return {string} The count.
|
|
1063
1442
|
*/
|
|
1064
1443
|
countLabel(column) {
|
|
1444
|
+
if (this.capacityOf(column) !== null) {
|
|
1445
|
+
return this.capacityText(column)
|
|
1446
|
+
}
|
|
1065
1447
|
return this.paged
|
|
1066
1448
|
? t('nextcloud-vue', '{count} on this page', { count: column.count })
|
|
1067
1449
|
: String(column.count)
|
|
@@ -1113,8 +1495,27 @@ export default {
|
|
|
1113
1495
|
*/
|
|
1114
1496
|
onDragStart(card, column, event) {
|
|
1115
1497
|
this.dragging = { card, fromKey: column.key }
|
|
1498
|
+
this.dragAllowed = null
|
|
1116
1499
|
// Firefox drops a drag that carries no data.
|
|
1117
1500
|
event?.dataTransfer?.setData?.('text/plain', this.cardKey(card))
|
|
1501
|
+
if (typeof this.allowedMoves === 'function') {
|
|
1502
|
+
this.loadAllowed(card).then((allowed) => {
|
|
1503
|
+
if (this.dragging && this.dragging.card === card) {
|
|
1504
|
+
this.dragAllowed = allowed
|
|
1505
|
+
}
|
|
1506
|
+
})
|
|
1507
|
+
}
|
|
1508
|
+
},
|
|
1509
|
+
|
|
1510
|
+
/**
|
|
1511
|
+
* The drag ended (dropped anywhere, or cancelled): no column stays
|
|
1512
|
+
* greyed. A drop on a column has already run by now.
|
|
1513
|
+
*
|
|
1514
|
+
* @return {void}
|
|
1515
|
+
*/
|
|
1516
|
+
onDragEnd() {
|
|
1517
|
+
this.dragging = null
|
|
1518
|
+
this.dragAllowed = null
|
|
1118
1519
|
},
|
|
1119
1520
|
|
|
1120
1521
|
/**
|
|
@@ -1129,6 +1530,14 @@ export default {
|
|
|
1129
1530
|
}
|
|
1130
1531
|
const { card, fromKey } = this.dragging
|
|
1131
1532
|
this.dragging = null
|
|
1533
|
+
this.dragAllowed = null
|
|
1534
|
+
if (column.key !== fromKey && !this.isMoveAllowed(card, column)) {
|
|
1535
|
+
const name = this.roleText(card, this.roles.title) || this.cardKey(card)
|
|
1536
|
+
this.refusal = this.blockReason(card, column)
|
|
1537
|
+
|| t('nextcloud-vue', '{name} cannot move to {column}.', { name, column: column.label })
|
|
1538
|
+
this.$emit('refused', { card, message: this.refusal })
|
|
1539
|
+
return
|
|
1540
|
+
}
|
|
1132
1541
|
await this.move(card, fromKey, column.key)
|
|
1133
1542
|
},
|
|
1134
1543
|
|
|
@@ -1155,6 +1564,13 @@ export default {
|
|
|
1155
1564
|
async move(card, fromKey, toKey) {
|
|
1156
1565
|
this.refusal = ''
|
|
1157
1566
|
|
|
1567
|
+
const target = this.board.columns.find((column) => String(column.key) === String(toKey))
|
|
1568
|
+
if (target && String(toKey) !== String(fromKey) && this.isFull(target)) {
|
|
1569
|
+
this.refusal = this.fullRefusal(target)
|
|
1570
|
+
this.$emit('refused', { card, message: this.refusal })
|
|
1571
|
+
return
|
|
1572
|
+
}
|
|
1573
|
+
|
|
1158
1574
|
const result = await runBoardDrop({
|
|
1159
1575
|
card,
|
|
1160
1576
|
fromKey,
|
|
@@ -1295,4 +1711,9 @@ export default {
|
|
|
1295
1711
|
.cn-board-view__refusal {
|
|
1296
1712
|
color: var(--color-error);
|
|
1297
1713
|
}
|
|
1714
|
+
|
|
1715
|
+
.cn-board-view__count--full {
|
|
1716
|
+
color: var(--color-error-text, var(--color-error));
|
|
1717
|
+
font-weight: 600;
|
|
1718
|
+
}
|
|
1298
1719
|
</style>
|
|
@@ -120,6 +120,7 @@ import { translate as t } from '@nextcloud/l10n'
|
|
|
120
120
|
import { NcButton, NcDialog, NcLoadingIcon, NcTextField } from '@nextcloud/vue'
|
|
121
121
|
import ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'
|
|
122
122
|
import { buildHeaders, prefixUrl } from '../../utils/index.js'
|
|
123
|
+
import { userLocale } from '../../utils/userLocale.js'
|
|
123
124
|
|
|
124
125
|
/**
|
|
125
126
|
* CnCalendarEventPicker — 2-step calendar/event picker modal for the
|
|
@@ -307,7 +308,7 @@ export default {
|
|
|
307
308
|
if (Number.isNaN(d.getTime())) {
|
|
308
309
|
return String(ev.dtstart)
|
|
309
310
|
}
|
|
310
|
-
return d.toLocaleString(
|
|
311
|
+
return d.toLocaleString(userLocale(), { dateStyle: 'medium', timeStyle: 'short' })
|
|
311
312
|
} catch {
|
|
312
313
|
return String(ev.dtstart)
|
|
313
314
|
}
|
|
@@ -130,6 +130,7 @@
|
|
|
130
130
|
|
|
131
131
|
<script>
|
|
132
132
|
import { translate as t } from '@nextcloud/l10n'
|
|
133
|
+
import { userLocale } from '../../utils/userLocale.js'
|
|
133
134
|
|
|
134
135
|
const VIEW_MODES = ['month', 'week', 'agenda']
|
|
135
136
|
const DEFAULT_DAYS_AHEAD = 14
|
|
@@ -604,7 +605,7 @@ export default {
|
|
|
604
605
|
* @return {string} the header label.
|
|
605
606
|
*/
|
|
606
607
|
formatDayHeader(date) {
|
|
607
|
-
const month = date.toLocaleString(
|
|
608
|
+
const month = date.toLocaleString(userLocale(), { month: 'short' })
|
|
608
609
|
return `${this.weekdayHeaders[date.getDay()]} ${date.getDate()} ${month}`
|
|
609
610
|
},
|
|
610
611
|
|