@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
@@ -1,5 +1,5 @@
1
1
  import { getCurrentUser } from '@nextcloud/auth';
2
- import { translate } from '@nextcloud/l10n';
2
+ import { translate, translatePlural } from '@nextcloud/l10n';
3
3
  import { NcLoadingIcon, NcActions, NcActionLink, NcActionButton, NcActionCaption, NcActionSeparator, NcActionCheckbox, NcButton, NcCheckboxRadioSwitch } from '@nextcloud/vue';
4
4
  import { ref, getCurrentInstance, markRaw, inject } from 'vue';
5
5
  import AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue';
@@ -14,8 +14,8 @@ import ImportIcon from 'vue-material-design-icons/Import.vue';
14
14
  import TrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue';
15
15
  import Tune from 'vue-material-design-icons/Tune.vue';
16
16
  import ViewColumnOutline from 'vue-material-design-icons/ViewColumnOutline.vue';
17
- import __sfc_main$w from '../../dialogs/CnConfirmDialog.vue.js';
18
- import __sfc_main$x from '../../dialogs/CnQuickEditDialog.vue.js';
17
+ import __sfc_main$x from '../../dialogs/CnConfirmDialog.vue.js';
18
+ import __sfc_main$y from '../../dialogs/CnQuickEditDialog.vue.js';
19
19
  import __sfc_main$1 from '../CnBuildiqEditButton/CnBuildiqEditButton.vue.js';
20
20
  import __sfc_main$3 from '../CnEmptyContent/CnEmptyContent.vue.js';
21
21
  import __sfc_main$2 from '../CnFollowToggle/CnFollowToggle.vue.js';
@@ -28,6 +28,7 @@ import { METADATA_COLUMNS } from '../../constants/metadata.js';
28
28
  import { useObjectStore } from '../../store/useObjectStore.js';
29
29
  import { routeHref, followItemActionLink, resolveItemActionLink } from '../../utils/actionLink.js';
30
30
  import { resolveRegisteredHandler, buildOnSuccessRoute } from '../../utils/actionsDispatcher.js';
31
+ import { columnFieldsOf, refIdOf, buildValueStages, buildReferenceStages, columnKeyOfRow, resolveDropValue, fullTargetOf, referenceTargetOf, fetchReferenceObjects } from '../../utils/boardReferenceColumns.js';
31
32
  import { reportBindingProblems } from '../../utils/diagnostics.js';
32
33
  import { fetchFilterCounts } from '../../utils/fetchFilterCounts.js';
33
34
  import { buildExportUrl } from '../../utils/indexExportHelpers.js';
@@ -37,6 +38,7 @@ import { resolveClaimedTeams, splitViewsIntoTabs, viewAsTab, resolveClaimTokens,
37
38
  import { LIST_SHORTCUTS, listPaletteCommands, shortcutFor } from '../../utils/listShortcuts.js';
38
39
  import { multiKeySort } from '../../utils/multiKeySort.js';
39
40
  import { OBJECTS_CHANGED_EVENT } from '../../utils/objectSignals.js';
41
+ import { objectUrlOf, patchObject } from '../../utils/objectWrite.js';
40
42
  import { withPersonalLenses } from '../../utils/personalLenses.js';
41
43
  import { resolveDeepTokens, resolveFilterValue } from '../../utils/resolveFilterTokens.js';
42
44
  import { resolveRowActions } from '../../utils/resolveRowActions.js';
@@ -49,37 +51,38 @@ import { viewMatchesScope, extractViewState, buildRouteQueryFromViewState, extra
49
51
  import { fieldsFromSchema, columnsFromSchema } from '../../utils/schema.js';
50
52
  import { resolveScopeLayout } from '../../utils/scopeListLayout.js';
51
53
  import { dispatchObjectCreated } from '../../utils/walkthroughSignals.js';
52
- import __sfc_main$6 from '../CnActionsBar/CnActionsBar.vue.js';
53
- import __sfc_main$p from '../CnAdvancedFormDialog/CnAdvancedFormDialog.vue.js';
54
+ import __sfc_main$6 from '../CnActionButtons/CnActionButtons.vue.js';
55
+ import __sfc_main$7 from '../CnActionsBar/CnActionsBar.vue.js';
56
+ import __sfc_main$q from '../CnAdvancedFormDialog/CnAdvancedFormDialog.vue.js';
54
57
  import '../CnAdvancedFormDialog/CnMetadataTab.vue.js';
55
58
  import '../CnAdvancedFormDialog/CnPropertiesTab.vue.js';
56
59
  import '../CnAdvancedFormDialog/CnPropertyValueCell.vue.js';
57
- import __sfc_main$a from '../CnBoardView/CnBoardView.vue.js';
58
- import __sfc_main$9 from '../CnCardGrid/CnCardGrid.vue.js';
59
- import __sfc_main$q from '../CnContextMenu/CnContextMenu.vue.js';
60
- import __sfc_main$n from '../CnCopyDialog/CnCopyDialog.vue.js';
61
- import __sfc_main$8 from '../CnDataTable/CnDataTable.vue.js';
62
- import __sfc_main$b from '../CnDateAxisView/CnDateAxisView.vue.js';
63
- import __sfc_main$m from '../CnDeleteDialog/CnDeleteDialog.vue.js';
64
- import __sfc_main$f from '../CnFolderSidebar/CnFolderSidebar.vue.js';
65
- import __sfc_main$o from '../CnFormDialog/CnFormDialog.vue.js';
66
- import __sfc_main$7 from '../CnIcon/CnIcon.vue.js';
67
- import __sfc_main$r from '../CnIndexSidebar/CnIndexSidebar.vue.js';
68
- import __sfc_main$d from '../CnMapWidget/CnMapWidget.vue.js';
69
- import __sfc_main$j from '../CnMassCopyDialog/CnMassCopyDialog.vue.js';
70
- import __sfc_main$i from '../CnMassDeleteDialog/CnMassDeleteDialog.vue.js';
71
- import __sfc_main$k from '../CnMassExportDialog/CnMassExportDialog.vue.js';
72
- import __sfc_main$l from '../CnMassImportDialog/CnMassImportDialog.vue.js';
73
- import __sfc_main$c from '../CnObjectCalendar/CnObjectCalendar.vue.js';
74
- import __sfc_main$e from '../CnObjectList/CnObjectList.vue.js';
60
+ import __sfc_main$b from '../CnBoardView/CnBoardView.vue.js';
61
+ import __sfc_main$a from '../CnCardGrid/CnCardGrid.vue.js';
62
+ import __sfc_main$r from '../CnContextMenu/CnContextMenu.vue.js';
63
+ import __sfc_main$o from '../CnCopyDialog/CnCopyDialog.vue.js';
64
+ import __sfc_main$9 from '../CnDataTable/CnDataTable.vue.js';
65
+ import __sfc_main$c from '../CnDateAxisView/CnDateAxisView.vue.js';
66
+ import __sfc_main$n from '../CnDeleteDialog/CnDeleteDialog.vue.js';
67
+ import __sfc_main$g from '../CnFolderSidebar/CnFolderSidebar.vue.js';
68
+ import __sfc_main$p from '../CnFormDialog/CnFormDialog.vue.js';
69
+ import __sfc_main$8 from '../CnIcon/CnIcon.vue.js';
70
+ import __sfc_main$s from '../CnIndexSidebar/CnIndexSidebar.vue.js';
71
+ import __sfc_main$e from '../CnMapWidget/CnMapWidget.vue.js';
72
+ import __sfc_main$k from '../CnMassCopyDialog/CnMassCopyDialog.vue.js';
73
+ import __sfc_main$j from '../CnMassDeleteDialog/CnMassDeleteDialog.vue.js';
74
+ import __sfc_main$l from '../CnMassExportDialog/CnMassExportDialog.vue.js';
75
+ import __sfc_main$m from '../CnMassImportDialog/CnMassImportDialog.vue.js';
76
+ import __sfc_main$d from '../CnObjectCalendar/CnObjectCalendar.vue.js';
77
+ import __sfc_main$f from '../CnObjectList/CnObjectList.vue.js';
75
78
  import __sfc_main$4 from '../CnPageHeader/CnPageHeader.vue.js';
76
- import __sfc_main$g from '../CnPagination/CnPagination.vue.js';
79
+ import __sfc_main$h from '../CnPagination/CnPagination.vue.js';
77
80
  import __sfc_main$5 from '../CnQuickFilterBar/CnQuickFilterBar.vue.js';
78
- import __sfc_main$h from '../CnRowActions/CnRowActions.vue.js';
79
- import __sfc_main$t from '../CnSavedViewPresentationDialog/CnSavedViewPresentationDialog.vue.js';
80
- import __sfc_main$s from '../CnSavedViewsControl/CnSavedViewsControl.vue.js';
81
- import __sfc_main$u from '../CnSavedViewShareDialog/CnSavedViewShareDialog.vue.js';
82
- import __sfc_main$v from '../CnSaveViewDialog/CnSaveViewDialog.vue.js';
81
+ import __sfc_main$i from '../CnRowActions/CnRowActions.vue.js';
82
+ import __sfc_main$u from '../CnSavedViewPresentationDialog/CnSavedViewPresentationDialog.vue.js';
83
+ import __sfc_main$t from '../CnSavedViewsControl/CnSavedViewsControl.vue.js';
84
+ import __sfc_main$v from '../CnSavedViewShareDialog/CnSavedViewShareDialog.vue.js';
85
+ import __sfc_main$w from '../CnSaveViewDialog/CnSaveViewDialog.vue.js';
83
86
  import { applyAiContext } from './aiContext.js';
84
87
  import { buildDefaultActions } from './defaultActions.js';
85
88
  import { dispatchAction } from './manifestActionDispatch.js';
@@ -88,7 +91,7 @@ import { reconcilePersonalColumns, orderColumns, personalColumnsKey } from './pe
88
91
  import { createSelfModeActions, resolveRowTarget } from './selfModeActions.js';
89
92
  import { applyRowPatches, splitLayoutFor, normalisePaneWidth, rowIdOf } from './splitView.js';
90
93
  import { useNamedSource } from './useNamedSource.js';
91
- import { useSelfFetchList } from './useSelfFetchList.js';
94
+ import { useSelfFetchList, BOARD_PAGE_SIZE } from './useSelfFetchList.js';
92
95
  import { useContextMenu } from '../../composables/useContextMenu.js';
93
96
 
94
97
  /** Rows fetched for one month in calendar mode. */
@@ -343,35 +346,36 @@ var script = {
343
346
  NcCheckboxRadioSwitch,
344
347
  CnPageHeader: __sfc_main$4,
345
348
  CnQuickFilterBar: __sfc_main$5,
346
- CnActionsBar: __sfc_main$6,
349
+ CnActionButtons: __sfc_main$6,
350
+ CnActionsBar: __sfc_main$7,
347
351
  DotsHorizontal,
348
- CnIcon: __sfc_main$7,
349
- CnDataTable: __sfc_main$8,
350
- CnCardGrid: __sfc_main$9,
351
- CnBoardView: __sfc_main$a,
352
- CnDateAxisView: __sfc_main$b,
353
- CnObjectCalendar: __sfc_main$c,
354
- CnMapWidget: __sfc_main$d,
355
- CnObjectList: __sfc_main$e,
356
- CnFolderSidebar: __sfc_main$f,
357
- CnPagination: __sfc_main$g,
358
- CnRowActions: __sfc_main$h,
359
- CnMassDeleteDialog: __sfc_main$i,
360
- CnMassCopyDialog: __sfc_main$j,
361
- CnMassExportDialog: __sfc_main$k,
362
- CnMassImportDialog: __sfc_main$l,
363
- CnDeleteDialog: __sfc_main$m,
364
- CnCopyDialog: __sfc_main$n,
365
- CnFormDialog: __sfc_main$o,
366
- CnAdvancedFormDialog: __sfc_main$p,
367
- CnContextMenu: __sfc_main$q,
368
- CnIndexSidebar: __sfc_main$r,
369
- CnSavedViewsControl: __sfc_main$s,
370
- CnSavedViewPresentationDialog: __sfc_main$t,
371
- CnSavedViewShareDialog: __sfc_main$u,
372
- CnSaveViewDialog: __sfc_main$v,
373
- CnConfirmDialog: __sfc_main$w,
374
- CnQuickEditDialog: __sfc_main$x,
352
+ CnIcon: __sfc_main$8,
353
+ CnDataTable: __sfc_main$9,
354
+ CnCardGrid: __sfc_main$a,
355
+ CnBoardView: __sfc_main$b,
356
+ CnDateAxisView: __sfc_main$c,
357
+ CnObjectCalendar: __sfc_main$d,
358
+ CnMapWidget: __sfc_main$e,
359
+ CnObjectList: __sfc_main$f,
360
+ CnFolderSidebar: __sfc_main$g,
361
+ CnPagination: __sfc_main$h,
362
+ CnRowActions: __sfc_main$i,
363
+ CnMassDeleteDialog: __sfc_main$j,
364
+ CnMassCopyDialog: __sfc_main$k,
365
+ CnMassExportDialog: __sfc_main$l,
366
+ CnMassImportDialog: __sfc_main$m,
367
+ CnDeleteDialog: __sfc_main$n,
368
+ CnCopyDialog: __sfc_main$o,
369
+ CnFormDialog: __sfc_main$p,
370
+ CnAdvancedFormDialog: __sfc_main$q,
371
+ CnContextMenu: __sfc_main$r,
372
+ CnIndexSidebar: __sfc_main$s,
373
+ CnSavedViewsControl: __sfc_main$t,
374
+ CnSavedViewPresentationDialog: __sfc_main$u,
375
+ CnSavedViewShareDialog: __sfc_main$v,
376
+ CnSaveViewDialog: __sfc_main$w,
377
+ CnConfirmDialog: __sfc_main$x,
378
+ CnQuickEditDialog: __sfc_main$y,
375
379
  },
376
380
 
377
381
  /**
@@ -389,6 +393,8 @@ var script = {
389
393
  */
390
394
  inject: {
391
395
  cnCustomComponents: { default: () => ({}) },
396
+ /** The app id CnAppRoot provides, for the plural form of `countSubtitle`. */
397
+ cnAppId: { default: '' },
392
398
  /**
393
399
  * The app manifest, provided by CnAppRoot. A column with `labelField`
394
400
  * and `link: true` finds the referenced schema's detail page here.
@@ -475,10 +481,17 @@ var script = {
475
481
  * shows. Manifest key `config.countSubtitle`. Goes through the host
476
482
  * translate function.
477
483
  *
484
+ * `{ singular, plural }` picks the form by the total ("1 invoice",
485
+ * "12 invoices") through the app's plural translation
486
+ * (`translatePlural` with the app id CnAppRoot provides), so a
487
+ * language with other plural rules gets its own forms.
488
+ *
478
489
  * @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-an-index-page-title-is-a-manifest-key
490
+ * @spec openspec/changes/index-count-plural/specs/index-header/spec.md#requirement-the-count-line-takes-a-singular-and-a-plural-form
491
+ * @type {string|{singular: string, plural: string}}
479
492
  */
480
493
  countSubtitle: {
481
- type: String,
494
+ type: [String, Object],
482
495
  default: '',
483
496
  },
484
497
 
@@ -1259,10 +1272,14 @@ var script = {
1259
1272
  default: () => [],
1260
1273
  },
1261
1274
 
1262
- /** Text shown when no items found */
1275
+ /**
1276
+ * Text shown when no items found. The default is the library's own
1277
+ * string, so it reads in the user's language; a page's own text goes
1278
+ * through the app's translate function.
1279
+ */
1263
1280
  emptyText: {
1264
1281
  type: String,
1265
- default: 'No items found',
1282
+ default: () => translate('nextcloud-vue', 'No items found'),
1266
1283
  },
1267
1284
 
1268
1285
  /**
@@ -2284,6 +2301,7 @@ var script = {
2284
2301
  'add',
2285
2302
  'apply-view',
2286
2303
  'board-move',
2304
+ 'board-column-field-change',
2287
2305
  'bulk-action',
2288
2306
  'clear-filters',
2289
2307
  'columns-change',
@@ -2395,10 +2413,21 @@ var script = {
2395
2413
  data() {
2396
2414
  return {
2397
2415
  currentViewMode: this.viewMode,
2416
+ /** The column field the reader picked in the board's column switch; '' = the default. */
2417
+ boardColumnFieldChoice: '',
2418
+ /** The rows a reference column field is built from, by field. */
2419
+ boardRefs: {},
2420
+ /** The options of the board's narrowing select (`board.narrow`). */
2421
+ boardNarrowOptions: [],
2422
+ /** The menu entries CnActionButtons reports for the dialog header actions, each with its `run()`. */
2423
+ dialogHeaderRuns: [],
2398
2424
  /** The visible calendar window `{ rangeStart, rangeEnd }` (ISO dates), or null outside calendar mode. */
2399
2425
  calendarRange: null,
2400
2426
  /** The page size to restore when leaving calendar mode. */
2401
2427
  calendarPrevPageSize: null,
2428
+ // The table's page size while the board view holds the list at
2429
+ // BOARD_PAGE_SIZE; restored on leaving the board.
2430
+ boardPrevPageSize: this.viewMode === 'board' ? ((this.pagination && this.pagination.limit) || 20) : null,
2402
2431
  /** Resolved labels of reference columns: `{ [columnKey]: { [id]: label|null } }`. */
2403
2432
  refLabels: {},
2404
2433
  /** Count per tab-strip index, for the entries that asked for one; null = none. */
@@ -2619,6 +2648,24 @@ var script = {
2619
2648
  *
2620
2649
  * @return {Array<object>}
2621
2650
  */
2651
+ /**
2652
+ * The header actions that open a dialog: `type: "open-form"` (the
2653
+ * schema-driven create form, as the navigation's primary action opens
2654
+ * it) or `type: "open-modal"`, without a `handler` of their own.
2655
+ * Reserved ids are left out, as in `mergedHeaderActions`.
2656
+ *
2657
+ * @spec openspec/changes/index-header-open-form/specs/index-header/spec.md#requirement-an-index-header-action-can-open-the-create-form
2658
+ * @return {Array<object>}
2659
+ */
2660
+ dialogHeaderActions() {
2661
+ const reserved = new Set(['refresh', 'import', 'export', 'copy', 'delete']);
2662
+ return (this.headerActions || []).filter((entry) => entry
2663
+ && typeof entry.id === 'string'
2664
+ && !reserved.has(entry.id)
2665
+ && (entry.handler === undefined || entry.handler === null || entry.handler === '')
2666
+ && (entry.type === 'open-form' || entry.type === 'open-modal'))
2667
+ },
2668
+
2622
2669
  mergedHeaderActions() {
2623
2670
  const reserved = new Set(['refresh', 'import', 'export', 'copy', 'delete']);
2624
2671
  const merged = [];
@@ -2971,6 +3018,264 @@ var script = {
2971
3018
  })
2972
3019
  },
2973
3020
 
3021
+ /**
3022
+ * The column fields the board offers (`board.columnFields`), for the
3023
+ * column switch (screens-board-reference-columns).
3024
+ *
3025
+ * @return {Array<object>} The normalised fields; empty for a board on `statusField` only.
3026
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-board-can-switch-the-field-its-columns-come-from
3027
+ */
3028
+ boardColumnFields() {
3029
+ return columnFieldsOf(this.board)
3030
+ },
3031
+
3032
+ /**
3033
+ * The column field in use: the reader's pick, else the one on
3034
+ * `statusField`, else the first. Null on a board without `columnFields`.
3035
+ *
3036
+ * @return {object|null} The normalised column field.
3037
+ */
3038
+ boardActiveColumnField() {
3039
+ const fields = this.boardColumnFields;
3040
+ if (fields.length === 0) {
3041
+ return null
3042
+ }
3043
+ return fields.find((entry) => entry.field === this.boardColumnFieldChoice)
3044
+ || fields.find((entry) => entry.field === this.board?.statusField)
3045
+ || fields[0]
3046
+ },
3047
+
3048
+ /** @return {string} The row field the columns come from. */
3049
+ boardColumnField() {
3050
+ return this.boardActiveColumnField?.field || this.board?.statusField || 'status'
3051
+ },
3052
+
3053
+ /**
3054
+ * The parent the board is narrowed to: the single value of the page
3055
+ * filter on the reference's `narrowBy.rowField`, '' when none or several.
3056
+ *
3057
+ * @return {string} The parent id.
3058
+ */
3059
+ boardNarrowValue() {
3060
+ const field = this.board?.narrow?.field || this.boardActiveColumnField?.source?.narrowBy?.rowField;
3061
+ if (!field) {
3062
+ return ''
3063
+ }
3064
+ const current = this.effectiveActiveFilters?.[field];
3065
+ const values = Array.isArray(current) ? current : (current === undefined || current === null || current === '' ? [] : [current]);
3066
+ return values.length === 1 ? refIdOf(values[0]) : ''
3067
+ },
3068
+
3069
+ /**
3070
+ * The stages of a reference or values column field, or null for a
3071
+ * field the schema's enum or lifecycle states back.
3072
+ *
3073
+ * @return {object|null} `{ states, keyByValue, refsByKey }`.
3074
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references
3075
+ */
3076
+ boardStages() {
3077
+ const active = this.boardActiveColumnField;
3078
+ if (!active) {
3079
+ return null
3080
+ }
3081
+ if (active.kind === 'values') {
3082
+ return buildValueStages({
3083
+ rows: this.displayObjects,
3084
+ field: active.field,
3085
+ valueLabels: active.valueLabels,
3086
+ emptyLabel: active.emptyLabel ? this.cnTranslate(active.emptyLabel) : translate('nextcloud-vue', 'Nobody'),
3087
+ })
3088
+ }
3089
+ if (active.kind !== 'reference') {
3090
+ return null
3091
+ }
3092
+ const source = active.source || {};
3093
+ const narrowBy = source.narrowBy && typeof source.narrowBy === 'object' ? source.narrowBy : null;
3094
+ return buildReferenceStages({
3095
+ refs: this.boardRefs[active.field] || [],
3096
+ labelField: source.labelField || '',
3097
+ orderField: source.orderField || '',
3098
+ colorField: source.colorField || '',
3099
+ mergeBy: source.mergeBy || '',
3100
+ narrowBy,
3101
+ narrowValue: narrowBy ? this.boardNarrowValue : '',
3102
+ capacityField: source.capacityField || '',
3103
+ })
3104
+ },
3105
+
3106
+ /**
3107
+ * The field schema the board reads its columns from: the stages of a
3108
+ * reference or values field as lifecycle `states`, else the schema's
3109
+ * own property.
3110
+ *
3111
+ * @return {?object} The field schema, or null.
3112
+ */
3113
+ boardFieldSchema() {
3114
+ if (this.boardStages) {
3115
+ return { states: this.boardStages.states }
3116
+ }
3117
+ const field = this.boardColumnField;
3118
+ return this.effectiveSchema?.properties?.[field] || null
3119
+ },
3120
+
3121
+ /**
3122
+ * The column a card sits in, for a reference or values field.
3123
+ *
3124
+ * @return {((row: object) => string)|null} The mapper, or null.
3125
+ */
3126
+ boardColumnKeyOf() {
3127
+ const stages = this.boardStages;
3128
+ if (!stages) {
3129
+ return null
3130
+ }
3131
+ const field = this.boardColumnField;
3132
+ return (row) => columnKeyOfRow(row, field, stages.keyByValue)
3133
+ },
3134
+
3135
+ /**
3136
+ * The move the board runs on a drop or a menu pick.
3137
+ *
3138
+ * A named handler (`moveHandler`, from the app's registry) gets
3139
+ * `{ card, toKey, field, value, target }` and owns the write; the
3140
+ * status of a case goes through the app's transition this way. A
3141
+ * reference or values field without one has its value written on the
3142
+ * row (PATCH). `readOnly` gives no move. A board on `statusField` with
3143
+ * neither keeps the `runTransition` prop.
3144
+ *
3145
+ * With `source.capacityField`, a drop that would fill the referenced
3146
+ * row past its limit is refused before the handler or the PATCH runs.
3147
+ * The server still guards; this only spares the round trip.
3148
+ *
3149
+ * @return {((move: {card: object, toKey: string}) => Promise<object>)|null} The move, or null for a read-only board.
3150
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-drop-writes-the-reference
3151
+ */
3152
+ boardRunTransition() {
3153
+ const active = this.boardActiveColumnField;
3154
+ if (active?.readOnly) {
3155
+ return null
3156
+ }
3157
+ const onStatusField = !active || active.field === this.board?.statusField;
3158
+ const name = active?.moveHandler || (onStatusField ? (this.board?.moveHandler || '') : '');
3159
+ const handler = name ? resolveRegisteredHandler(name, this.effectiveRegistry, this.resolvedCustomComponents) : null;
3160
+ if (name && typeof handler !== 'function') {
3161
+ return null
3162
+ }
3163
+ const stages = this.boardStages;
3164
+ if (!handler && !stages) {
3165
+ return this.runTransition
3166
+ }
3167
+ const field = this.boardColumnField;
3168
+ const kind = active?.kind || 'schema';
3169
+ const narrowBy = active?.source?.narrowBy || null;
3170
+ const capacityField = active?.source?.capacityField || '';
3171
+ return async ({ card, toKey }) => {
3172
+ const drop = stages
3173
+ ? resolveDropValue({ card, toKey, kind, refsByKey: stages.refsByKey, narrowBy })
3174
+ : { value: toKey, target: null };
3175
+ if (drop === null) {
3176
+ throw new Error(translate('nextcloud-vue', 'This card cannot move to that column.'))
3177
+ }
3178
+ const full = capacityField && drop.target
3179
+ ? fullTargetOf({ target: drop.target, card, rows: this.displayObjects, field, capacityField, rowKey: this.rowKey })
3180
+ : null;
3181
+ if (full) {
3182
+ const column = stages.states.find((state) => state.key === String(toKey))?.label || String(toKey);
3183
+ throw new Error(translate('nextcloud-vue', '{column} is full: {count} of {capacity}.', { column, count: full.count, capacity: full.capacity }))
3184
+ }
3185
+ if (handler) {
3186
+ return handler({ card, toKey, field, value: drop.value, target: drop.target })
3187
+ }
3188
+ const id = card?.id ?? card?.['@self']?.id ?? card?.[this.rowKey];
3189
+ const url = objectUrlOf(this.register, this.exportSchemaSlug, id);
3190
+ if (url === '') {
3191
+ throw new Error(translate('nextcloud-vue', 'This card cannot move to that column.'))
3192
+ }
3193
+ return patchObject(url, { [field]: drop.value })
3194
+ }
3195
+ },
3196
+
3197
+ /**
3198
+ * Where a card may go, from the app's `moveTargetsHandler`: it gets
3199
+ * `{ card, field }` and answers the values (referenced ids) the card
3200
+ * can reach; the board maps them to its columns. An entry may also be
3201
+ * `{ key, allowed, reason }`: a target that is offered but blocked,
3202
+ * with the sentence that says why.
3203
+ *
3204
+ * @return {((card: object) => Promise<Array<string|{key: string, allowed: boolean, reason: string}>|null>)|null} The question, or null.
3205
+ * @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason
3206
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-board-shows-where-a-card-can-go
3207
+ */
3208
+ boardAllowedMoves() {
3209
+ const active = this.boardActiveColumnField;
3210
+ const onStatusField = !active || active.field === this.board?.statusField;
3211
+ const name = active?.moveTargetsHandler || (onStatusField ? (this.board?.moveTargetsHandler || '') : '');
3212
+ const handler = name ? resolveRegisteredHandler(name, this.effectiveRegistry, this.resolvedCustomComponents) : null;
3213
+ if (typeof handler !== 'function' || this.boardRunTransition === null) {
3214
+ return null
3215
+ }
3216
+ const field = this.boardColumnField;
3217
+ const stages = this.boardStages;
3218
+ return async (card) => {
3219
+ const values = await handler({ card, field });
3220
+ if (!Array.isArray(values)) {
3221
+ return null
3222
+ }
3223
+ const columnOf = (id) => (stages && stages.keyByValue.has(id) ? stages.keyByValue.get(id) : id);
3224
+ return values.map((value) => {
3225
+ if (value && typeof value === 'object' && Object.hasOwn(value, 'key')) {
3226
+ return {
3227
+ key: columnOf(refIdOf(value.key)),
3228
+ allowed: value.allowed !== false,
3229
+ reason: typeof value.reason === 'string' ? value.reason : '',
3230
+ }
3231
+ }
3232
+ return columnOf(refIdOf(value))
3233
+ })
3234
+ }
3235
+ },
3236
+
3237
+ /** @return {object|null} The board's narrowing select (`board.narrow`). */
3238
+ boardNarrow() {
3239
+ const narrow = this.board?.narrow;
3240
+ return narrow && typeof narrow === 'object' && typeof narrow.field === 'string' && narrow.field !== '' ? narrow : null
3241
+ },
3242
+
3243
+ /** @return {string} The narrowing select's label, with its colon. */
3244
+ boardNarrowLabel() {
3245
+ const narrow = this.boardNarrow || {};
3246
+ const prop = (this.effectiveSchema?.properties || {})[narrow.field] || {};
3247
+ return translate('nextcloud-vue', '{label}:', { label: this.cnTranslate(narrow.label || prop.title || narrow.field || '') })
3248
+ },
3249
+
3250
+ /** @return {string} The narrowing select's "all" option. */
3251
+ boardNarrowAllLabel() {
3252
+ return this.boardNarrow?.allLabel ? this.cnTranslate(this.boardNarrow.allLabel) : translate('nextcloud-vue', 'All')
3253
+ },
3254
+
3255
+ /** @return {string} The column switch's label, with its colon. */
3256
+ boardColumnSwitchLabel() {
3257
+ const label = this.board?.columnSwitchLabel ? this.cnTranslate(this.board.columnSwitchLabel) : translate('nextcloud-vue', 'Columns');
3258
+ return translate('nextcloud-vue', '{label}:', { label })
3259
+ },
3260
+
3261
+ /** @return {boolean} Whether the board view draws its controls row. */
3262
+ boardControlsShown() {
3263
+ return this.currentViewMode === 'board'
3264
+ && (this.boardColumnFields.length > 1 || this.boardNarrow !== null || Boolean(this.board?.hint))
3265
+ },
3266
+
3267
+ /**
3268
+ * What the board needs fetched, as one key the watcher reacts to.
3269
+ *
3270
+ * @return {string} The key, '' outside the board view.
3271
+ */
3272
+ boardFetchKey() {
3273
+ if (this.currentViewMode !== 'board') {
3274
+ return ''
3275
+ }
3276
+ return [this.boardColumnField, this.boardActiveColumnField?.kind || '', this.effectiveSchema ? 1 : 0, this.boardNarrow ? this.boardNarrow.field : ''].join('|')
3277
+ },
3278
+
2974
3279
  /**
2975
3280
  * The status field's schema, for the board's columns.
2976
3281
  *
@@ -3017,9 +3322,36 @@ var script = {
3017
3322
  * @return {boolean} True when there is more than this page.
3018
3323
  */
3019
3324
  isPaged() {
3325
+ if (this.boardLoadsAll) {
3326
+ const loaded = this.effectivePagination || {};
3327
+ return Number(loaded.page || 1) < Number(loaded.pages || 1)
3328
+ }
3020
3329
  return Number(this.pagination?.pages || 1) > 1
3021
3330
  },
3022
3331
 
3332
+ /**
3333
+ * Whether the board view gathers every row itself: in self-fetch mode
3334
+ * it adds page after page (`list.loadMore`) instead of paging, and
3335
+ * draws its own footer in place of the pagination.
3336
+ *
3337
+ * @return {boolean} True for a self-fetching page in board view.
3338
+ * @spec openspec/changes/board-loads-every-row/specs/board-view/spec.md#requirement-the-index-board-shows-every-matching-row
3339
+ */
3340
+ boardLoadsAll() {
3341
+ return this.currentViewMode === 'board' && this.isSelfFetchMode && !this.isNamedSource && typeof this.list.loadMore === 'function'
3342
+ },
3343
+
3344
+ /**
3345
+ * The rows the board holds against the rows that match, for the
3346
+ * board's footer.
3347
+ *
3348
+ * @return {{shown: number, total: number}} The counts.
3349
+ */
3350
+ boardLoadCounts() {
3351
+ const shown = this.effectiveObjects.length;
3352
+ return { shown, total: Math.max(shown, Number(this.effectivePagination?.total || 0)) }
3353
+ },
3354
+
3023
3355
  /**
3024
3356
  * The CnFolderSidebar source. A `register` source is fetched by this
3025
3357
  * component and handed to CnFolderSidebar as a `custom` folder list.
@@ -4822,13 +5154,15 @@ var script = {
4822
5154
  if (!this.countText && !this.countSubtitle) {
4823
5155
  return translate('nextcloud-vue', '{shown} of {total}', { shown, total })
4824
5156
  }
4825
- const template = this.countText || this.countSubtitle;
4826
- return this.cnTranslate(template)
4827
- .replace('{shown}', String(shown))
4828
- .replace('{total}', String(total))
5157
+ if (this.countText) {
5158
+ return this.cnTranslate(this.countText)
5159
+ .replace('{shown}', String(shown))
5160
+ .replace('{total}', String(total))
5161
+ }
5162
+ return this.countLine(this.countSubtitle, total, shown)
4829
5163
  }
4830
5164
  if (this.countSubtitle && typeof total === 'number' && total >= 0) {
4831
- return this.cnTranslate(this.countSubtitle).replace('{total}', String(total))
5165
+ return this.countLine(this.countSubtitle, total, null)
4832
5166
  }
4833
5167
  return this.description
4834
5168
  },
@@ -4994,6 +5328,19 @@ var script = {
4994
5328
  },
4995
5329
 
4996
5330
  watch: {
5331
+ '$route.query._view': function() {
5332
+ this.applyViewModeFromRoute();
5333
+ },
5334
+
5335
+ boardFetchKey: {
5336
+ immediate: true,
5337
+ handler(key) {
5338
+ if (key !== '') {
5339
+ this.loadBoardSources();
5340
+ }
5341
+ },
5342
+ },
5343
+
4997
5344
  effectiveObjects: {
4998
5345
  immediate: true,
4999
5346
  handler(rows) {
@@ -5067,22 +5414,33 @@ var script = {
5067
5414
  // Entering calendar mode fetches one page sized to the month; leaving
5068
5415
  // removes the month range and restores the page size, so the table is
5069
5416
  // never left narrowed.
5417
+ // The board does the same at BOARD_PAGE_SIZE, so it shows every row
5418
+ // rather than the table's first page.
5070
5419
  currentViewMode(mode, previous) {
5071
5420
  if (!this.isSelfFetchMode) {
5072
5421
  return
5073
5422
  }
5074
- if (mode === 'calendar') {
5075
- this.calendarPrevPageSize = this.list.pageSize.value;
5076
- if (typeof this.list.onPageSizeChange === 'function') {
5077
- this.list.onPageSizeChange(CALENDAR_PAGE_SIZE);
5078
- }
5079
- } else if (previous === 'calendar') {
5423
+ let listSize = this.list.pageSize.value;
5424
+ if (previous === 'calendar') {
5080
5425
  this.calendarRange = null;
5081
- const restore = this.calendarPrevPageSize || 20;
5426
+ listSize = this.calendarPrevPageSize || 20;
5082
5427
  this.calendarPrevPageSize = null;
5083
- if (typeof this.list.onPageSizeChange === 'function') {
5084
- this.list.onPageSizeChange(restore);
5085
- }
5428
+ } else if (previous === 'board') {
5429
+ listSize = this.boardPrevPageSize || 20;
5430
+ this.boardPrevPageSize = null;
5431
+ }
5432
+ let size = null;
5433
+ if (mode === 'calendar') {
5434
+ this.calendarPrevPageSize = listSize;
5435
+ size = CALENDAR_PAGE_SIZE;
5436
+ } else if (mode === 'board') {
5437
+ this.boardPrevPageSize = listSize;
5438
+ size = BOARD_PAGE_SIZE;
5439
+ } else if (previous === 'calendar' || previous === 'board') {
5440
+ size = listSize;
5441
+ }
5442
+ if (size !== null && typeof this.list.onPageSizeChange === 'function') {
5443
+ this.list.onPageSizeChange(size);
5086
5444
  }
5087
5445
  },
5088
5446
 
@@ -5237,6 +5595,7 @@ var script = {
5237
5595
  },
5238
5596
 
5239
5597
  created() {
5598
+ this.applyViewModeFromRoute();
5240
5599
  this.pushAiContext();
5241
5600
  if (this.allowSavedViews) {
5242
5601
  this.fetchSavedViews();
@@ -6019,6 +6378,11 @@ var script = {
6019
6378
  const entry = this.mergedHeaderActions.find((e) => e.id === id);
6020
6379
  if (entry && typeof entry.handler === 'function') {
6021
6380
  entry.handler();
6381
+ } else {
6382
+ const dialogRun = this.dialogHeaderRuns.find((e) => e.id === id);
6383
+ if (dialogRun && typeof dialogRun.run === 'function') {
6384
+ dialogRun.run();
6385
+ }
6022
6386
  }
6023
6387
  if (entry && entry._dispatchSuppress) {
6024
6388
  return
@@ -6026,6 +6390,49 @@ var script = {
6026
6390
  this.$emit('header-action', { action: id, id });
6027
6391
  },
6028
6392
 
6393
+ /**
6394
+ * The `countSubtitle` line for a total. A string goes through the host
6395
+ * translate; `{ singular, plural }` takes the form for the total
6396
+ * through the app's plural translation, or by `total === 1` when no app
6397
+ * id is provided. `{total}` (and `{shown}` when given) are filled in.
6398
+ *
6399
+ * @spec openspec/changes/index-count-plural/specs/index-header/spec.md#requirement-the-count-line-takes-a-singular-and-a-plural-form
6400
+ * @param {string|{singular: string, plural: string}} subtitle The declared line.
6401
+ * @param {number} total The collection's total.
6402
+ * @param {number|null} shown The rows on this page, or null to leave `{shown}` alone.
6403
+ * @return {string} The line, '' for a declaration without both forms.
6404
+ */
6405
+ countLine(subtitle, total, shown) {
6406
+ const fill = (text) => {
6407
+ const out = String(text).replace('{total}', String(total));
6408
+ return shown === null ? out : out.replace('{shown}', String(shown))
6409
+ };
6410
+ if (typeof subtitle === 'string') {
6411
+ return fill(this.cnTranslate(subtitle))
6412
+ }
6413
+ const singular = subtitle && typeof subtitle.singular === 'string' ? subtitle.singular : '';
6414
+ const plural = subtitle && typeof subtitle.plural === 'string' ? subtitle.plural : '';
6415
+ if (singular === '' || plural === '') {
6416
+ return ''
6417
+ }
6418
+ if (typeof this.cnAppId === 'string' && this.cnAppId !== '') {
6419
+ const vars = shown === null ? { total } : { total, shown };
6420
+ return translatePlural(this.cnAppId, singular, plural, total, vars)
6421
+ }
6422
+ return fill(this.cnTranslate(total === 1 ? singular : plural))
6423
+ },
6424
+
6425
+ /**
6426
+ * An `open-form` header action saved a record: the list reloads so the
6427
+ * new row shows.
6428
+ *
6429
+ * @spec openspec/changes/index-header-open-form/specs/index-header/spec.md#requirement-an-index-header-action-can-open-the-create-form
6430
+ * @return {void}
6431
+ */
6432
+ onHeaderActionCreated() {
6433
+ this.onRefreshEvent();
6434
+ },
6435
+
6029
6436
  pushAiContext() {
6030
6437
  applyAiContext(this.cnAiContext, 'index', {
6031
6438
  register: this.register,
@@ -6241,6 +6648,72 @@ var script = {
6241
6648
  this.$emit('clear-filters');
6242
6649
  },
6243
6650
 
6651
+ /**
6652
+ * Fetch what the board view needs: the rows of a reference column
6653
+ * field (once per field) and the narrowing select's options.
6654
+ *
6655
+ * @return {Promise<void>}
6656
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references
6657
+ */
6658
+ async loadBoardSources() {
6659
+ const active = this.boardActiveColumnField;
6660
+ if (active && active.kind === 'reference' && !Object.hasOwn(this.boardRefs, active.field)) {
6661
+ const property = this.effectiveSchema?.properties?.[active.field] || null;
6662
+ const target = referenceTargetOf(active.source, { register: this.register, property });
6663
+ if (target.register && target.schema) {
6664
+ let rows;
6665
+ try {
6666
+ rows = await fetchReferenceObjects({ ...target, filter: active.source?.filter || {} });
6667
+ } catch {
6668
+ rows = [];
6669
+ }
6670
+ this.boardRefs = { ...this.boardRefs, [active.field]: rows };
6671
+ }
6672
+ }
6673
+ const narrow = this.boardNarrow;
6674
+ if (narrow && this.boardNarrowOptions.length === 0) {
6675
+ const property = this.effectiveSchema?.properties?.[narrow.field] || null;
6676
+ const target = referenceTargetOf(narrow.source || {}, { register: this.register, property });
6677
+ let rows;
6678
+ try {
6679
+ rows = await fetchReferenceObjects({ ...target, filter: narrow.source?.filter || {} });
6680
+ } catch {
6681
+ rows = [];
6682
+ }
6683
+ const labelField = narrow.source?.labelField || 'title';
6684
+ this.boardNarrowOptions = rows
6685
+ .map((row) => ({ value: refIdOf(row), label: String(row?.[labelField] ?? row?.name ?? row?.title ?? refIdOf(row)) }))
6686
+ .filter((option) => option.value !== '')
6687
+ .sort((a, b) => a.label.localeCompare(b.label));
6688
+ }
6689
+ },
6690
+
6691
+ /**
6692
+ * The column switch changed.
6693
+ *
6694
+ * @param {string} field The column field picked.
6695
+ * @return {void}
6696
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-board-can-switch-the-field-its-columns-come-from
6697
+ */
6698
+ onBoardColumnFieldChange(field) {
6699
+ this.boardColumnFieldChoice = field;
6700
+ /**
6701
+ * @event board-column-field-change The board's column switch picked another field. Payload: the field name.
6702
+ */
6703
+ this.$emit('board-column-field-change', field);
6704
+ },
6705
+
6706
+ /**
6707
+ * The narrowing select changed: it sets the page filter on its field,
6708
+ * so the cards narrow with the columns and the active filter shows.
6709
+ *
6710
+ * @param {string} value The parent id, '' for all.
6711
+ * @return {void}
6712
+ */
6713
+ onBoardNarrowChange(value) {
6714
+ this.onFilterEvent({ key: this.boardNarrow.field, values: value === '' ? [] : [value] });
6715
+ },
6716
+
6244
6717
  /**
6245
6718
  * A paged board's "Show N more": ask for the next page.
6246
6719
  *
@@ -6248,6 +6721,10 @@ var script = {
6248
6721
  * @spec openspec/changes/screens-kanban-parity/specs/board-view/spec.md#requirement-a-long-column-is-cut-with-a-show-more-button
6249
6722
  */
6250
6723
  onBoardLoadMore() {
6724
+ if (this.boardLoadsAll) {
6725
+ this.list.loadMore();
6726
+ return
6727
+ }
6251
6728
  const page = Number(this.pagination?.page || 1);
6252
6729
  if (page < Number(this.pagination?.pages || 1)) {
6253
6730
  this.onPageEvent(page + 1);
@@ -7069,7 +7546,7 @@ var script = {
7069
7546
  this.cnIndexSidebarConfig.value = {
7070
7547
  // markRaw: the holder is CnAppRoot `data()`, so it is deeply
7071
7548
  // reactive and would proxy the component definition itself.
7072
- component: markRaw(__sfc_main$r),
7549
+ component: markRaw(__sfc_main$s),
7073
7550
  props: this.hoistedSidebarProps,
7074
7551
  listeners: {
7075
7552
  'update:open': (val) => {
@@ -7586,6 +8063,23 @@ var script = {
7586
8063
  this.$emit('view-mode-change', mode);
7587
8064
  },
7588
8065
 
8066
+ /**
8067
+ * Open in the mode the address names (`?_view=board`), when the page
8068
+ * offers it. The key starts with `_`, like `_search` and `_page`, so it
8069
+ * is never read as a list filter. A menu entry's `query` can so open a
8070
+ * list as its board, on the one page that lists the schema
8071
+ * (screens-board-reference-columns).
8072
+ *
8073
+ * @return {void}
8074
+ * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-address-can-open-a-list-in-a-view-mode
8075
+ */
8076
+ applyViewModeFromRoute() {
8077
+ const wanted = this.$route?.query?._view;
8078
+ if (typeof wanted === 'string' && wanted !== this.currentViewMode && this.effectiveToggleModes.includes(wanted)) {
8079
+ this.currentViewMode = wanted;
8080
+ }
8081
+ },
8082
+
7589
8083
  /**
7590
8084
  * Handle selection changes from CnDataTable/CnCardGrid.
7591
8085
  * Updates internal state and re-emits for parent.