@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.
Files changed (382) hide show
  1. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  2. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +131 -3
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +54 -18
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue.js +1 -1
  7. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue2.js +3 -2
  8. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue2.js.map +1 -1
  9. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue3.js.map +1 -1
  10. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue.js +1 -1
  11. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js +5 -4
  12. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js.map +1 -1
  13. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue3.js.map +1 -1
  14. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue.js +1 -1
  15. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue2.js +2 -1
  16. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue2.js.map +1 -1
  17. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue3.js.map +1 -1
  18. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
  19. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +2 -1
  20. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  21. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  22. package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
  23. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +376 -6
  24. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
  25. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +146 -71
  26. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
  27. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue.js +1 -1
  28. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue2.js +2 -1
  29. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue2.js.map +1 -1
  30. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue3.js.map +1 -1
  31. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue.js +1 -1
  32. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js +2 -1
  33. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js.map +1 -1
  34. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  36. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +6 -5
  37. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  39. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue.js +1 -1
  40. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue2.js +2 -1
  41. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue2.js.map +1 -1
  42. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue3.js.map +1 -1
  43. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  44. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +2 -1
  45. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  46. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  47. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
  48. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +2 -1
  49. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
  50. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
  51. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  52. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +47 -1
  53. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  54. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +22 -12
  55. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  56. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue.js +1 -1
  57. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue2.js +3 -1
  58. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue2.js.map +1 -1
  59. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue3.js.map +1 -1
  60. package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue2.js +2 -1
  61. package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue2.js.map +1 -1
  62. package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue3.js.map +1 -1
  63. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +23 -4
  64. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  65. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  66. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  67. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +3 -1
  68. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  69. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  70. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue.js +1 -1
  71. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue2.js +2 -1
  72. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue2.js.map +1 -1
  73. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue3.js.map +1 -1
  74. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  75. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +18 -5
  76. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  77. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  78. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue.js +1 -1
  79. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue2.js +3 -1
  80. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue2.js.map +1 -1
  81. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue3.js.map +1 -1
  82. package/dist/esm/components/CnFileManager/CnFileManager.vue.js +1 -1
  83. package/dist/esm/components/CnFileManager/CnFileManager.vue2.js +3 -1
  84. package/dist/esm/components/CnFileManager/CnFileManager.vue2.js.map +1 -1
  85. package/dist/esm/components/CnFileManager/CnFileManager.vue3.js.map +1 -1
  86. package/dist/esm/components/CnFilePreview/CnFilePreview.vue.js +1 -1
  87. package/dist/esm/components/CnFilePreview/CnFilePreview.vue2.js +2 -1
  88. package/dist/esm/components/CnFilePreview/CnFilePreview.vue2.js.map +1 -1
  89. package/dist/esm/components/CnFilePreview/CnFilePreview.vue3.js.map +1 -1
  90. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  91. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +49 -1
  92. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  93. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +3 -3
  94. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  95. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue.js +1 -1
  96. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js +2 -1
  97. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js.map +1 -1
  98. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js.map +1 -1
  99. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +571 -77
  100. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  101. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +191 -82
  102. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  103. package/dist/esm/components/CnIndexPage/useSelfFetchList.js +11 -2
  104. package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
  105. package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
  106. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js +2 -1
  107. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
  108. package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
  109. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue.js +1 -1
  110. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue2.js +3 -2
  111. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue2.js.map +1 -1
  112. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue3.js.map +1 -1
  113. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  114. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +28 -0
  115. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  116. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +82 -75
  117. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  118. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue.js +1 -1
  119. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue2.js +5 -4
  120. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue2.js.map +1 -1
  121. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue3.js.map +1 -1
  122. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue.js +1 -1
  123. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue2.js +2 -1
  124. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue2.js.map +1 -1
  125. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue3.js.map +1 -1
  126. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue.js +1 -1
  127. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue2.js +2 -1
  128. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue2.js.map +1 -1
  129. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue3.js.map +1 -1
  130. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue.js +1 -1
  131. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +2 -1
  132. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
  133. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
  134. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue.js +1 -1
  135. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue2.js +2 -1
  136. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue2.js.map +1 -1
  137. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue3.js.map +1 -1
  138. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue.js +1 -1
  139. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue2.js +2 -1
  140. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue2.js.map +1 -1
  141. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue3.js.map +1 -1
  142. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  143. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +70 -2
  144. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  145. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  146. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
  147. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js +67 -5
  148. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
  149. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +181 -124
  150. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
  151. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue.js +1 -1
  152. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue2.js +2 -1
  153. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue2.js.map +1 -1
  154. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue3.js.map +1 -1
  155. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue2.js +2 -0
  156. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue2.js.map +1 -1
  157. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue3.js +2 -2
  158. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue3.js.map +1 -1
  159. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
  160. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +5 -1
  161. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
  162. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
  163. package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
  164. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +134 -10
  165. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  166. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +6 -2
  167. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  168. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue.js +1 -1
  169. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js +2 -1
  170. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js.map +1 -1
  171. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js.map +1 -1
  172. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue.js +1 -1
  173. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue2.js +2 -1
  174. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue2.js.map +1 -1
  175. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue3.js.map +1 -1
  176. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  177. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +6 -3
  178. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  179. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  180. package/dist/esm/components/CnTasksCard/CnTasksCard.vue.js +1 -1
  181. package/dist/esm/components/CnTasksCard/CnTasksCard.vue2.js +2 -1
  182. package/dist/esm/components/CnTasksCard/CnTasksCard.vue2.js.map +1 -1
  183. package/dist/esm/components/CnTasksCard/CnTasksCard.vue3.js.map +1 -1
  184. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +1 -1
  185. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +2 -1
  186. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -1
  187. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -1
  188. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +1 -1
  189. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +140 -7
  190. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -1
  191. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -1
  192. package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue.js +1 -1
  193. package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue2.js +2 -1
  194. package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue2.js.map +1 -1
  195. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue.js +1 -1
  196. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue2.js +2 -1
  197. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue2.js.map +1 -1
  198. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue3.js.map +1 -1
  199. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
  200. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js +37 -9
  201. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
  202. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +6 -5
  203. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
  204. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js +53 -1
  205. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js.map +1 -1
  206. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js +3 -2
  207. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js.map +1 -1
  208. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
  209. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +135 -0
  210. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  211. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  212. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
  213. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +19 -0
  214. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  215. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +37 -19
  216. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  217. package/dist/esm/composables/useListView.js +21 -0
  218. package/dist/esm/composables/useListView.js.map +1 -1
  219. package/dist/esm/dialogs/CnNoteHistoryDialog.vue.js +1 -1
  220. package/dist/esm/dialogs/CnNoteHistoryDialog.vue2.js +2 -1
  221. package/dist/esm/dialogs/CnNoteHistoryDialog.vue2.js.map +1 -1
  222. package/dist/esm/dialogs/CnNoteHistoryDialog.vue3.js.map +1 -1
  223. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue.js +1 -1
  224. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue2.js +3 -2
  225. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue2.js.map +1 -1
  226. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue3.js.map +1 -1
  227. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue.js +1 -1
  228. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue2.js +4 -3
  229. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue2.js.map +1 -1
  230. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue3.js.map +1 -1
  231. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue.js +1 -1
  232. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js +3 -2
  233. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js.map +1 -1
  234. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js.map +1 -1
  235. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue.js +1 -1
  236. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js +2 -1
  237. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js.map +1 -1
  238. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue3.js.map +1 -1
  239. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue.js +1 -1
  240. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js +6 -5
  241. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js.map +1 -1
  242. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue3.js.map +1 -1
  243. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue.js +1 -1
  244. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue2.js +2 -1
  245. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue2.js.map +1 -1
  246. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue3.js.map +1 -1
  247. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue.js +1 -1
  248. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js +2 -1
  249. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js.map +1 -1
  250. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue3.js.map +1 -1
  251. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue.js +1 -1
  252. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js +2 -1
  253. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js.map +1 -1
  254. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js.map +1 -1
  255. package/dist/esm/integrations/builtin/email/CnEmailCard.vue.js +1 -1
  256. package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js +2 -1
  257. package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js.map +1 -1
  258. package/dist/esm/integrations/builtin/email/CnEmailCard.vue3.js.map +1 -1
  259. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue.js +1 -1
  260. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +2 -1
  261. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
  262. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
  263. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue.js +1 -1
  264. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue2.js +2 -1
  265. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue2.js.map +1 -1
  266. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue3.js.map +1 -1
  267. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue.js +1 -1
  268. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js +2 -1
  269. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js.map +1 -1
  270. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue3.js.map +1 -1
  271. package/dist/esm/l10n/en.json.js +57 -2
  272. package/dist/esm/l10n/en.json.js.map +1 -1
  273. package/dist/esm/l10n/nl.json.js +78 -2
  274. package/dist/esm/l10n/nl.json.js.map +1 -1
  275. package/dist/esm/library-style.js +1 -1
  276. package/dist/esm/nextcloud-vue.css +1541 -1166
  277. package/dist/esm/store/useObjectStore.js +23 -4
  278. package/dist/esm/store/useObjectStore.js.map +1 -1
  279. package/dist/esm/utils/boardColumns.js +58 -2
  280. package/dist/esm/utils/boardColumns.js.map +1 -1
  281. package/dist/esm/utils/boardReferenceColumns.js +330 -0
  282. package/dist/esm/utils/boardReferenceColumns.js.map +1 -0
  283. package/dist/esm/utils/buildManifest.js +4 -1
  284. package/dist/esm/utils/buildManifest.js.map +1 -1
  285. package/dist/esm/utils/schema.js +5 -4
  286. package/dist/esm/utils/schema.js.map +1 -1
  287. package/dist/esm/utils/userLocale.js +30 -0
  288. package/dist/esm/utils/userLocale.js.map +1 -0
  289. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  290. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  291. package/dist/esm/utils/widgetDispatch.js +8 -2
  292. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  293. package/dist/nextcloud-vue.cjs.js +30291 -27618
  294. package/dist/nextcloud-vue.cjs.js.map +2 -2
  295. package/dist/nextcloud-vue.css +1541 -1166
  296. package/l10n/en.json +57 -2
  297. package/l10n/nl.json +78 -2
  298. package/package.json +1 -1
  299. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +160 -8
  300. package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +3 -2
  301. package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +5 -4
  302. package/src/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue +2 -1
  303. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +2 -1
  304. package/src/components/CnBoardView/CnBoardView.vue +433 -12
  305. package/src/components/CnCalendarEventPicker/CnCalendarEventPicker.vue +2 -1
  306. package/src/components/CnCalendarWidget/CnCalendarWidget.vue +2 -1
  307. package/src/components/CnChartWidget/CnChartWidget.vue +6 -5
  308. package/src/components/CnCollectivePagePicker/CnCollectivePagePicker.vue +2 -1
  309. package/src/components/CnConversationThread/CnConversationThread.vue +2 -1
  310. package/src/components/CnCountdownWidget/CnCountdownWidget.vue +2 -1
  311. package/src/components/CnDashboardPage/CnDashboardPage.vue +59 -3
  312. package/src/components/CnDataMatrix/CnDataMatrix.vue +2 -1
  313. package/src/components/CnDetailPage/CnDetailHeaderChips.vue +2 -1
  314. package/src/components/CnDetailPage/CnDetailPage.md +1 -1
  315. package/src/components/CnDetailPage/CnDetailPage.vue +23 -4
  316. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +3 -1
  317. package/src/components/CnEmailPicker/CnEmailPicker.vue +2 -1
  318. package/src/components/CnFactsWidget/CnFactsWidget.vue +18 -5
  319. package/src/components/CnFederationStatus/CnFederationStatus.vue +3 -1
  320. package/src/components/CnFileManager/CnFileManager.vue +2 -1
  321. package/src/components/CnFilePreview/CnFilePreview.vue +2 -1
  322. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +54 -6
  323. package/src/components/CnFollowToggle/CnFollowToggle.vue +2 -1
  324. package/src/components/CnIndexPage/CnIndexPage.vue +610 -25
  325. package/src/components/CnIndexPage/useSelfFetchList.js +10 -1
  326. package/src/components/CnNotesCard/CnNotesCard.vue +2 -1
  327. package/src/components/CnObjectCalendar/CnObjectCalendar.vue +3 -2
  328. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +36 -0
  329. package/src/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue +5 -4
  330. package/src/components/CnObjectSidebar/CnAuditTrailTab.vue +2 -1
  331. package/src/components/CnObjectSidebar/CnFlowTasksPanel.vue +2 -1
  332. package/src/components/CnObjectSidebar/CnNotesTab.vue +2 -1
  333. package/src/components/CnObjectSidebar/CnTasksTab.vue +2 -1
  334. package/src/components/CnPropertySourceField/CnPropertySourceField.vue +2 -1
  335. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +70 -2
  336. package/src/components/CnRegisterMapping/CnRegisterMapping.md +5 -0
  337. package/src/components/CnRegisterMapping/CnRegisterMapping.vue +231 -96
  338. package/src/components/CnRoadmapItem/CnRoadmapItem.vue +2 -1
  339. package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +4 -2
  340. package/src/components/CnSettingsPage/CnSettingsPage.vue +5 -1
  341. package/src/components/CnStatWidget/CnStatWidget.vue +136 -11
  342. package/src/components/CnStatsBlock/CnStatsBlock.vue +2 -1
  343. package/src/components/CnSummaryAggregates/CnSummaryAggregates.vue +2 -1
  344. package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -3
  345. package/src/components/CnTasksCard/CnTasksCard.vue +2 -1
  346. package/src/components/CnTimelineWidget/CnTimelineWidget.vue +2 -1
  347. package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +140 -7
  348. package/src/components/CnTranslatedBadge/CnTranslatedBadge.vue +2 -1
  349. package/src/components/CnVersionHistory/CnVersionHistory.vue +2 -1
  350. package/src/components/CnVersionInfoCard/CnVersionInfoCard.md +2 -1
  351. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +42 -13
  352. package/src/components/CnWidgetCardGrid/CnWidgetCardGrid.vue +55 -2
  353. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +135 -0
  354. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +10 -0
  355. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +44 -1
  356. package/src/composables/useListView.js +21 -0
  357. package/src/css/board.css +105 -4
  358. package/src/css/dialog.css +4 -2
  359. package/src/css/index-page.css +49 -0
  360. package/src/css/look-board.css +77 -7
  361. package/src/dialogs/CnNoteHistoryDialog.vue +2 -1
  362. package/src/integrations/builtin/activity/CnActivityCard.vue +3 -2
  363. package/src/integrations/builtin/activity/CnActivityTab.vue +4 -3
  364. package/src/integrations/builtin/analytics/CnAnalyticsTab.vue +3 -2
  365. package/src/integrations/builtin/calendar/CnCalendarCard.vue +2 -1
  366. package/src/integrations/builtin/calendar/CnCalendarTab.vue +6 -5
  367. package/src/integrations/builtin/contactmoment/CnContactmomentCard.vue +2 -1
  368. package/src/integrations/builtin/cospend/CnCospendTab.vue +2 -1
  369. package/src/integrations/builtin/deck/CnDeckTab.vue +2 -1
  370. package/src/integrations/builtin/email/CnEmailCard.vue +2 -1
  371. package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +2 -1
  372. package/src/integrations/builtin/field-inspection/CnFieldInspectionTab.vue +2 -1
  373. package/src/integrations/builtin/photos/CnPhotosTab.vue +2 -1
  374. package/src/schemas/app-manifest-v2.schema.json +116 -5
  375. package/src/store/useObjectStore.js +23 -4
  376. package/src/utils/boardColumns.js +57 -1
  377. package/src/utils/boardReferenceColumns.js +326 -0
  378. package/src/utils/buildManifest.js +4 -1
  379. package/src/utils/schema.js +5 -4
  380. package/src/utils/userLocale.js +26 -0
  381. package/src/utils/validateManifestV2.compiled.js +3 -3
  382. package/src/utils/widgetDispatch.js +8 -2
@@ -26,6 +26,15 @@ function resolveInitialQuickFilterIndex(quickFilters) {
26
26
  * @param {Array<object>} filterMaps Already route-resolved filter maps.
27
27
  * @return {object} The merged filter (scalar when a key has one value, array when many).
28
28
  */
29
+ /**
30
+ * Rows one board fetch asks for. A board shows every matching row at once,
31
+ * so it loads far more than a table page (OpenRegister serves up to 1000);
32
+ * past this the board offers "Load more".
33
+ *
34
+ * @type {number}
35
+ */
36
+ export const BOARD_PAGE_SIZE = 500
37
+
29
38
  /**
30
39
  * The sort a quick filter sets while it is active (`sort: { key, order }`, or a
31
40
  * list of those for a multi-column order), as sort keys, or null when it sets
@@ -236,7 +245,7 @@ export function useSelfFetchList(props, instance, inject, extras = {}) {
236
245
  defaultSortKeys: initialSortKeys,
237
246
  defaultActiveFilters: initialActiveFilters,
238
247
  defaultSearchTerm: initialSearchTerm,
239
- defaultPageSize: (props.pagination && props.pagination.limit) || undefined,
248
+ defaultPageSize: props.viewMode === 'board' ? BOARD_PAGE_SIZE : ((props.pagination && props.pagination.limit) || undefined),
240
249
  defaultVisibleColumns: configuredColumnKeys.length ? configuredColumnKeys : null,
241
250
  // `pages[].config.extend` → OpenRegister's repeated `_extend[]`. A
242
251
  // getter so a reactive change re-scopes the next fetch, matching how
@@ -158,6 +158,7 @@ import { useFileComments } from '../../composables/useFileComments.js'
158
158
  import { buildHeaders, prefixUrl } from '../../utils/index.js'
159
159
  import { extractMentionedGroupIds, extractMentionedIds } from '../../utils/mentions.js'
160
160
  import { quoteFor, supportsReplies, threadNotes, threadRootId } from '../../utils/noteThreads.js'
161
+ import { userLocale } from '../../utils/userLocale.js'
161
162
 
162
163
  /**
163
164
  * CnNotesCard — Inline notes widget for detail pages.
@@ -655,7 +656,7 @@ export default {
655
656
  return ''
656
657
  }
657
658
  try {
658
- return new Date(dateStr).toLocaleString(undefined, {
659
+ return new Date(dateStr).toLocaleString(userLocale(), {
659
660
  year: 'numeric',
660
661
  month: 'short',
661
662
  day: 'numeric',
@@ -95,6 +95,7 @@ import { translate as t } from '@nextcloud/l10n'
95
95
  import { NcButton, NcLoadingIcon } from '@nextcloud/vue'
96
96
  import ChevronLeft from 'vue-material-design-icons/ChevronLeft.vue'
97
97
  import ChevronRight from 'vue-material-design-icons/ChevronRight.vue'
98
+ import { userLocale } from '../../utils/userLocale.js'
98
99
 
99
100
  /**
100
101
  * CnObjectCalendar — plots objects on a month calendar by a date property.
@@ -210,7 +211,7 @@ export default {
210
211
 
211
212
  computed: {
212
213
  monthLabel() {
213
- return this.internalDate.toLocaleDateString(undefined, { month: 'long', year: 'numeric' })
214
+ return this.internalDate.toLocaleDateString(userLocale(), { month: 'long', year: 'numeric' })
214
215
  },
215
216
 
216
217
  prevMonthLabel() {
@@ -460,7 +461,7 @@ export default {
460
461
  * @return {string}
461
462
  */
462
463
  dayLabel(day) {
463
- const date = this.parseDate(day.iso).toLocaleDateString(undefined, { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' })
464
+ const date = this.parseDate(day.iso).toLocaleDateString(userLocale(), { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' })
464
465
  return day.objects.length === 0 ? date : `${date}, ${t('nextcloud-vue', '{count} records', { count: day.objects.length })}`
465
466
  },
466
467
 
@@ -291,6 +291,14 @@
291
291
  <CnGroupNameCell :gid="gid" />
292
292
  </template>
293
293
  </span>
294
+ <!-- A Nextcloud user (or list): the display name, the
295
+ uid while it loads or when it cannot be found. -->
296
+ <span
297
+ v-else-if="isUserPicker(field) && userIdsOf(field).length"
298
+ class="cn-object-data-widget__users"
299
+ :title="userIdsOf(field).join(', ')">
300
+ {{ userIdsOf(field).map((uid) => personLabel(field, uid)).join(', ') }}
301
+ </span>
294
302
  <img v-else-if="isImageField(field) && rawOf(field)"
295
303
  :src="rawOf(field)"
296
304
  :alt="field.label"
@@ -1132,12 +1140,14 @@ export default {
1132
1140
  }
1133
1141
  // Resolve relation display names whenever the object changes.
1134
1142
  this.resolveRelations()
1143
+ this.resolveUserNames()
1135
1144
  },
1136
1145
  },
1137
1146
 
1138
1147
  schema: {
1139
1148
  handler() {
1140
1149
  this.resolveRelations()
1150
+ this.resolveUserNames()
1141
1151
  },
1142
1152
  },
1143
1153
 
@@ -1161,6 +1171,7 @@ export default {
1161
1171
 
1162
1172
  mounted() {
1163
1173
  this.resolveRelations()
1174
+ this.resolveUserNames()
1164
1175
  this.publishPanelActions()
1165
1176
  this.observeCell()
1166
1177
  this.scheduleFit()
@@ -2189,6 +2200,31 @@ export default {
2189
2200
  return list.filter((v) => typeof v === 'string' && v !== '')
2190
2201
  },
2191
2202
 
2203
+ /**
2204
+ * The uids a user field holds, for the display mode. The same list
2205
+ * shape a group field holds.
2206
+ *
2207
+ * @spec openspec/changes/a-user-field-reads-its-display-name/specs/data-display/spec.md#requirement-a-user-field-shows-the-users-display-name
2208
+ * @param {object} field Field descriptor.
2209
+ * @return {string[]}
2210
+ */
2211
+ userIdsOf(field) {
2212
+ return this.groupIdsOf(field)
2213
+ },
2214
+
2215
+ /**
2216
+ * Look up the display names of every user field's value, so the read
2217
+ * mode shows "Thomas Kuiper" rather than `thomas.kuiper`. Each uid is
2218
+ * asked once per widget.
2219
+ *
2220
+ * @spec openspec/changes/a-user-field-reads-its-display-name/specs/data-display/spec.md#requirement-a-user-field-shows-the-users-display-name
2221
+ * @return {Promise<void>}
2222
+ */
2223
+ async resolveUserNames() {
2224
+ const fields = (this.resolvedFields || []).filter((field) => this.isUserPicker(field))
2225
+ await Promise.all(fields.map((field) => this.resolvePersonLabels(field, this.rawOf(field))))
2226
+ },
2227
+
2192
2228
  /**
2193
2229
  * The display name of a group id or uid, falling back to the id.
2194
2230
  *
@@ -55,6 +55,7 @@
55
55
  <script>
56
56
  import { translatePlural as n, translate as t } from '@nextcloud/l10n'
57
57
  import { generateUrl } from '@nextcloud/router'
58
+ import { userLocale } from '../../utils/userLocale.js'
58
59
  import { CnDetailCard } from '../CnDetailCard/index.js'
59
60
  import { CnDetailGrid } from '../CnDetailGrid/index.js'
60
61
 
@@ -516,7 +517,7 @@ export default {
516
517
  if (Number.isNaN(date.getTime())) {
517
518
  return String(value)
518
519
  }
519
- return date.toLocaleDateString(undefined, {
520
+ return date.toLocaleDateString(userLocale(), {
520
521
  day: '2-digit',
521
522
  month: '2-digit',
522
523
  year: 'numeric',
@@ -530,11 +531,11 @@ export default {
530
531
  if (Number.isNaN(date.getTime())) {
531
532
  return String(value)
532
533
  }
533
- return date.toLocaleDateString(undefined, {
534
+ return date.toLocaleDateString(userLocale(), {
534
535
  day: '2-digit',
535
536
  month: '2-digit',
536
537
  year: 'numeric',
537
- }) + ', ' + date.toLocaleTimeString(undefined, {
538
+ }) + ', ' + date.toLocaleTimeString(userLocale(), {
538
539
  hour: '2-digit',
539
540
  minute: '2-digit',
540
541
  second: '2-digit',
@@ -579,7 +580,7 @@ export default {
579
580
  if (holder && hasUntil) {
580
581
  return t('nextcloud-vue', 'Locked by {user} until {date}', {
581
582
  user: holder,
582
- date: until.toLocaleString(),
583
+ date: until.toLocaleString(userLocale()),
583
584
  })
584
585
  }
585
586
 
@@ -146,6 +146,7 @@ import CnConfirmDialog from '../../dialogs/CnConfirmDialog.vue'
146
146
  import { useRestoreVersion } from '../../composables/useRestoreVersion.js'
147
147
  import { buildHeaders } from '../../utils/index.js'
148
148
  import { isLockedByCurrentUser, isObjectLocked, lockHolder } from '../../utils/objectLock.js'
149
+ import { userLocale } from '../../utils/userLocale.js'
149
150
 
150
151
  export default {
151
152
  name: 'CnAuditTrailTab',
@@ -426,7 +427,7 @@ export default {
426
427
  return ''
427
428
  }
428
429
  try {
429
- return new Date(dateStr).toLocaleString(undefined, {
430
+ return new Date(dateStr).toLocaleString(userLocale(), {
430
431
  year: 'numeric',
431
432
  month: 'short',
432
433
  day: 'numeric',
@@ -118,6 +118,7 @@ import { taskDeepLink, taskDueLabel } from '../../composables/indexSources.js'
118
118
  import { useTaskInboxStore } from '../../composables/useTaskInboxStore.js'
119
119
  import { searchGroupSharees } from '../../utils/searchGroupSharees.js'
120
120
  import { searchNextcloudUsers } from '../../utils/userAutocomplete.js'
121
+ import { userLocale } from '../../utils/userLocale.js'
121
122
 
122
123
  /** The verbs this panel has a control for, in the order a row shows them. */
123
124
  const VERBS = ['claim', 'unclaim', 'reassign', 'complete', 'cancel']
@@ -239,7 +240,7 @@ export default {
239
240
  return label
240
241
  }
241
242
  const d = new Date(task.dueAt)
242
- const date = Number.isNaN(d.getTime()) ? String(task.dueAt) : d.toLocaleDateString()
243
+ const date = Number.isNaN(d.getTime()) ? String(task.dueAt) : d.toLocaleDateString(userLocale())
243
244
  return this.isOverdue(task) ? t('nextcloud-vue', 'Overdue: {date}', { date }) : date
244
245
  },
245
246
 
@@ -169,6 +169,7 @@ import { buildHeaders, prefixUrl } from '../../utils/index.js'
169
169
  import { extractMentionedGroupIds, extractMentionedIds } from '../../utils/mentions.js'
170
170
  import { quoteFor, supportsReplies, threadNotes, threadRootId } from '../../utils/noteThreads.js'
171
171
  import { searchNextcloudUsers } from '../../utils/userAutocomplete.js'
172
+ import { userLocale } from '../../utils/userLocale.js'
172
173
 
173
174
  export default {
174
175
  name: 'CnNotesTab',
@@ -595,7 +596,7 @@ export default {
595
596
  return ''
596
597
  }
597
598
  try {
598
- return new Date(dateStr).toLocaleString(undefined, {
599
+ return new Date(dateStr).toLocaleString(userLocale(), {
599
600
  year: 'numeric',
600
601
  month: 'short',
601
602
  day: 'numeric',
@@ -145,6 +145,7 @@ import Pencil from 'vue-material-design-icons/Pencil.vue'
145
145
  import Plus from 'vue-material-design-icons/Plus.vue'
146
146
  import CnFlowTasksPanel from './CnFlowTasksPanel.vue'
147
147
  import { buildHeaders, prefixUrl } from '../../utils/index.js'
148
+ import { userLocale } from '../../utils/userLocale.js'
148
149
 
149
150
  export default {
150
151
  name: 'CnTasksTab',
@@ -471,7 +472,7 @@ export default {
471
472
  return ''
472
473
  }
473
474
  try {
474
- return new Date(dateStr).toLocaleDateString(undefined, {
475
+ return new Date(dateStr).toLocaleDateString(userLocale(), {
475
476
  day: 'numeric',
476
477
  month: 'short',
477
478
  })
@@ -45,6 +45,7 @@ import { translate as t } from '@nextcloud/l10n'
45
45
  import { generateUrl } from '@nextcloud/router'
46
46
  import { NcSelect, NcTextField } from '@nextcloud/vue'
47
47
  import { isAppInstalled } from '../../utils/appInstalled.js'
48
+ import { userLocale } from '../../utils/userLocale.js'
48
49
 
49
50
  const BASE = '/apps/integriq/api/property-sources'
50
51
 
@@ -207,7 +208,7 @@ export default {
207
208
  methods: {
208
209
  formatTime(iso) {
209
210
  const d = new Date(iso)
210
- return Number.isNaN(d.getTime()) ? String(iso) : d.toLocaleString()
211
+ return Number.isNaN(d.getTime()) ? String(iso) : d.toLocaleString(userLocale())
211
212
  },
212
213
 
213
214
  url(path) {
@@ -141,9 +141,11 @@
141
141
  import { subscribe, unsubscribe } from '@nextcloud/event-bus'
142
142
  import { translate as t } from '@nextcloud/l10n'
143
143
  import { NcLoadingIcon } from '@nextcloud/vue'
144
+ import { inject, ref } from 'vue'
144
145
  import ChevronRight from 'vue-material-design-icons/ChevronRight.vue'
145
146
  import CnIcon from '../CnIcon/CnIcon.vue'
146
147
  import CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'
148
+ import { useEndpointSource } from '../../composables/useEndpointSource.js'
147
149
  import { actionLink, dispatchAction, interpolateActionTarget } from '../../utils/actionsDispatcher.js'
148
150
  import { isBadgeVariant } from '../../utils/badgeVariants.js'
149
151
  import { ageInDays } from '../../utils/boardDate.js'
@@ -180,7 +182,8 @@ function unwrap(value) {
180
182
  * objects filtered on a reference to this record. The source keys are those of
181
183
  * `object-list` (`register`, `schema`, `filter` with the `@objectId` /
182
184
  * `@object.<field>` / `@workspace.<key>` tokens, `sort`, `limit`, `extend`,
183
- * `rowRoute`, `pageControls`); `avatar` puts a circle with the initials of a name
185
+ * `rowRoute`, `pageControls`), or `endpointSource` (an app endpoint whose
186
+ * payload, after `responsePath`, is the array of rows, as on the object table); `avatar` puts a circle with the initials of a name
184
187
  * template before the title; what differs is the drawing: `presentation` is `rows`, `feed`
185
188
  * or `inline`, and each line is a template (`"{identifier} · {caseTypeName}"`,
186
189
  * `"Termijn {deadline|date}"`).
@@ -213,7 +216,9 @@ export default {
213
216
  * The list config: `{ register, schema, filter?, sort?, limit?, extend?,
214
217
  * presentation?, title?, meta?, text?, label?, pill?, trailing?, icon?,
215
218
  * rowRoute?, rowIdField?, headerLink?, headerNote?, emptyText?, errorText?,
216
- * valueLabels? }`. `valueLabels` maps a field's stored values to the labels
219
+ * valueLabels?, endpointSource? }`. `endpointSource` (`{ url, method?,
220
+ * params?, responsePath? }`) reads the rows from an app endpoint instead
221
+ * of `register` / `schema`. `valueLabels` maps a field's stored values to the labels
217
222
  * the templates show.
218
223
  *
219
224
  * @type {object}
@@ -238,6 +243,28 @@ export default {
238
243
 
239
244
  emits: ['header'],
240
245
 
246
+ setup(props) {
247
+ const objectCtxRaw = inject('cnObjectContext', null)
248
+ const workspaceRaw = inject('cnWorkspaceContext', null)
249
+ const appConfigRaw = inject('cnAppConfig', ref({}))
250
+ const { data, loading, error } = useEndpointSource(
251
+ () => props.content?.endpointSource || null,
252
+ {
253
+ ctx: () => {
254
+ const injected = unwrap(objectCtxRaw) || {}
255
+ return {
256
+ ...injected,
257
+ objectId: props.objectId ?? injected.objectId ?? props.objectData?.id ?? null,
258
+ object: props.objectData || injected.object || null,
259
+ workspace: unwrap(workspaceRaw) || {},
260
+ config: unwrapAppConfig(appConfigRaw) || {},
261
+ }
262
+ },
263
+ },
264
+ )
265
+ return { epData: data, epLoading: loading, epError: error }
266
+ },
267
+
241
268
  data() {
242
269
  return {
243
270
  rows: [],
@@ -294,6 +321,22 @@ export default {
294
321
  return { config: unwrapAppConfig(this.cnAppConfig) }
295
322
  },
296
323
 
324
+ /**
325
+ * Whether the rows come from `endpointSource` rather than OpenRegister.
326
+ *
327
+ * @return {boolean}
328
+ * @spec openspec/changes/endpoint-source-card-grid-record-list/specs/dashboard-page/spec.md#requirement-a-record-list-and-a-card-grid-can-read-an-endpoint
329
+ */
330
+ endpointActive() {
331
+ const source = this.content?.endpointSource
332
+ return Boolean(source && typeof source === 'object' && source.url)
333
+ },
334
+
335
+ /** @return {string} The endpoint read's state, to copy into the list when it changes. */
336
+ endpointKey() {
337
+ return this.endpointActive ? JSON.stringify([this.epData, this.epLoading, this.epError]) : ''
338
+ },
339
+
297
340
  /** @return {number} The fetch cap. */
298
341
  limit() {
299
342
  const value = Number(this.content?.limit)
@@ -398,6 +441,10 @@ export default {
398
441
  requestKey() {
399
442
  this.fetchRows()
400
443
  },
444
+
445
+ endpointKey() {
446
+ this.fetchRows()
447
+ },
401
448
  },
402
449
 
403
450
  mounted() {
@@ -854,6 +901,23 @@ export default {
854
901
  return { rows, total: typeof head.total === 'number' ? head.total : rows.length }
855
902
  },
856
903
 
904
+ /**
905
+ * Copy the endpoint read into the list: its payload must be an array of
906
+ * rows (anything else is an empty list), and a failed read is an error.
907
+ *
908
+ * @spec openspec/changes/endpoint-source-card-grid-record-list/specs/dashboard-page/spec.md#requirement-a-record-list-and-a-card-grid-can-read-an-endpoint
909
+ */
910
+ takeEndpointRows() {
911
+ this.rows = Array.isArray(this.epData) ? this.epData : []
912
+ this.total = this.rows.length
913
+ this.loading = this.epLoading === true
914
+ this.error = Boolean(this.epError)
915
+ this.lenses = {}
916
+ if (!this.loading) {
917
+ this.emitHeader()
918
+ }
919
+ },
920
+
857
921
  /**
858
922
  * Fetch the list. Sends nothing while a required token is unresolved
859
923
  * or the source is incomplete.
@@ -862,6 +926,10 @@ export default {
862
926
  */
863
927
  async fetchRows() {
864
928
  const c = this.content || {}
929
+ if (this.endpointActive) {
930
+ this.takeEndpointRows()
931
+ return
932
+ }
865
933
  if (!c.register || !c.schema || this.waiting) {
866
934
  this.rows = []
867
935
  this.total = 0
@@ -111,6 +111,10 @@ export default {
111
111
  </script>
112
112
  ```
113
113
 
114
+ ## Several groups
115
+
116
+ With more than one group each group starts closed: its heading is a button that shows the group name and how many of its types are configured ("2/8 configured"), and opens the register select and type list on a click or Enter. A page with several registers is a short card until the administrator opens the group they need.
117
+
114
118
  ## Additional props
115
119
 
116
120
  | Prop | Type | Default | Description |
@@ -122,5 +126,6 @@ export default {
122
126
  | `reimporting` | Boolean | `false` | Disables the reimport button and shows a spinner while reimport is in progress |
123
127
  | `saveButtonText` | String | `'Save configuration'` | Label for the save button |
124
128
  | `reimportButtonText` | String | `'Re-import configuration'` | Label for the reimport button |
129
+ | `collapseGroups` | Boolean | `null` | Draw each group as a heading button that opens and closes it, with its configured count shown while closed; the groups start closed. `null` does this when there is more than one group, `true` or `false` forces it |
125
130
  | `autoMatch` | Boolean | `true` | Automatically match schema titles to type slugs when a register is selected |
126
131
  | `labels` | Object | *(see below)* | UI label overrides for all user-visible strings (register, schema, notConfigured, noSchemas, selectRegister, selectSchema, allConfigured, partiallyConfigured) |