@conduction/nextcloud-vue 2.58.0 → 2.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (507) hide show
  1. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +12 -2
  2. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +1 -2
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  5. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js +14 -1
  6. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue2.js.map +1 -1
  7. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js +0 -3
  8. package/dist/esm/components/CnActionsMenu/CnActionsMenu.vue3.js.map +1 -1
  9. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  10. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +1 -2
  11. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  12. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +39 -0
  13. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  14. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +46 -4
  15. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  16. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +224 -9
  17. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  18. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +79 -25
  19. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  20. package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue2.js +42 -3
  21. package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue2.js.map +1 -1
  22. package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue3.js +39 -6
  23. package/dist/esm/components/CnBannerWidgetForm/CnBannerWidgetForm.vue3.js.map +1 -1
  24. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +58 -5
  25. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
  26. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +13 -5
  27. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
  28. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue.js +10 -0
  29. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue.js.map +1 -0
  30. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue2.js +39 -0
  31. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue2.js.map +1 -0
  32. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue3.js +16 -0
  33. package/dist/esm/components/CnBrandStripe/CnBrandStripe.vue3.js.map +1 -0
  34. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +9 -1
  35. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
  36. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
  37. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +117 -1
  38. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  39. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +147 -89
  40. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  41. package/dist/esm/components/CnContextMenu/CnContextMenu.vue2.js +6 -1
  42. package/dist/esm/components/CnContextMenu/CnContextMenu.vue2.js.map +1 -1
  43. package/dist/esm/components/CnContextMenu/CnContextMenu.vue3.js.map +1 -1
  44. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +10 -0
  45. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js.map +1 -0
  46. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +259 -0
  47. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -0
  48. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js +131 -0
  49. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -0
  50. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js +10 -0
  51. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue.js.map +1 -0
  52. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +116 -0
  53. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -0
  54. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js +24 -0
  55. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -0
  56. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +116 -15
  57. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  58. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +27 -14
  59. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  60. package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue2.js +13 -6
  61. package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue2.js.map +1 -1
  62. package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue3.js +2 -0
  63. package/dist/esm/components/CnDateAxisView/CnDateAxisView.vue3.js.map +1 -1
  64. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +532 -29
  65. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  66. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +300 -142
  67. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  68. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue.js +10 -0
  69. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue.js.map +1 -0
  70. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue2.js +237 -0
  71. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue2.js.map +1 -0
  72. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue3.js +120 -0
  73. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewList.vue3.js.map +1 -0
  74. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue.js +10 -0
  75. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue.js.map +1 -0
  76. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js +77 -0
  77. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js.map +1 -0
  78. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js +27 -0
  79. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js.map +1 -0
  80. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
  81. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js +1 -2
  82. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
  83. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +3 -1
  84. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  85. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +17 -17
  86. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  87. package/dist/esm/components/CnFilesWidget/CnFilesWidget.vue2.js +4 -21
  88. package/dist/esm/components/CnFilesWidget/CnFilesWidget.vue2.js.map +1 -1
  89. package/dist/esm/components/CnFilesWidget/CnFilesWidget.vue3.js.map +1 -1
  90. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js +0 -13
  91. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js.map +1 -1
  92. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue3.js +8 -8
  93. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue3.js.map +1 -1
  94. package/dist/esm/components/CnFlowsPage/CnFlowsPage.vue2.js.map +1 -1
  95. package/dist/esm/components/CnFlowsPage/CnFlowsPage.vue3.js +3 -2
  96. package/dist/esm/components/CnFlowsPage/CnFlowsPage.vue3.js.map +1 -1
  97. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +169 -12
  98. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
  99. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +15 -7
  100. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
  101. package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue2.js +37 -3
  102. package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue2.js.map +1 -1
  103. package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue3.js +44 -16
  104. package/dist/esm/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue3.js.map +1 -1
  105. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +199 -16
  106. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  107. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +20 -10
  108. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  109. package/dist/esm/components/CnIndexPage/manifestActionDispatch.js +31 -11
  110. package/dist/esm/components/CnIndexPage/manifestActionDispatch.js.map +1 -1
  111. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue2.js.map +1 -1
  112. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue3.js +1 -2
  113. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue3.js.map +1 -1
  114. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue2.js.map +1 -1
  115. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js +0 -1
  116. package/dist/esm/components/CnInteractionFormWidget/CnInteractionFormWidget.vue3.js.map +1 -1
  117. package/dist/esm/components/CnLinkButtonWidget/CnLinkButtonWidget.vue2.js +2 -17
  118. package/dist/esm/components/CnLinkButtonWidget/CnLinkButtonWidget.vue2.js.map +1 -1
  119. package/dist/esm/components/CnLinkButtonWidget/CnLinkButtonWidget.vue3.js.map +1 -1
  120. package/dist/esm/components/CnLogsPage/CnLogsPage.vue2.js +35 -11
  121. package/dist/esm/components/CnLogsPage/CnLogsPage.vue2.js.map +1 -1
  122. package/dist/esm/components/CnLogsPage/CnLogsPage.vue3.js +3 -2
  123. package/dist/esm/components/CnLogsPage/CnLogsPage.vue3.js.map +1 -1
  124. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue.js +10 -0
  125. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue.js.map +1 -0
  126. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue2.js +150 -0
  127. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue2.js.map +1 -0
  128. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue3.js +106 -0
  129. package/dist/esm/components/CnNextStepCard/CnNextStepCard.vue3.js.map +1 -0
  130. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue.js +9 -0
  131. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue.js.map +1 -0
  132. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js +47 -0
  133. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js.map +1 -0
  134. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue3.js +17 -0
  135. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue3.js.map +1 -0
  136. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +23 -5
  137. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
  138. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +1 -1
  139. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
  140. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +49 -0
  141. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  142. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  143. package/dist/esm/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue2.js +6 -0
  144. package/dist/esm/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue2.js.map +1 -1
  145. package/dist/esm/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue3.js.map +1 -1
  146. package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue2.js +46 -0
  147. package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue2.js.map +1 -1
  148. package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue3.js +15 -3
  149. package/dist/esm/components/CnObjectKanban/CnObjectKanban.vue3.js.map +1 -1
  150. package/dist/esm/components/CnObjectList/CnObjectList.vue2.js +19 -3
  151. package/dist/esm/components/CnObjectList/CnObjectList.vue2.js.map +1 -1
  152. package/dist/esm/components/CnObjectList/CnObjectList.vue3.js.map +1 -1
  153. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +45 -15
  154. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  155. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +4 -2
  156. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  157. package/dist/esm/components/CnObjectRow/CnObjectRow.vue2.js +24 -6
  158. package/dist/esm/components/CnObjectRow/CnObjectRow.vue2.js.map +1 -1
  159. package/dist/esm/components/CnObjectRow/CnObjectRow.vue3.js +1 -1
  160. package/dist/esm/components/CnObjectRow/CnObjectRow.vue3.js.map +1 -1
  161. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  162. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +0 -1
  163. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  164. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
  165. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js +4 -2
  166. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
  167. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +37 -1
  168. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
  169. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js +29 -13
  170. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
  171. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js +100 -3
  172. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js.map +1 -1
  173. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js.map +1 -1
  174. package/dist/esm/components/CnRowActions/CnRowActions.vue2.js +7 -2
  175. package/dist/esm/components/CnRowActions/CnRowActions.vue2.js.map +1 -1
  176. package/dist/esm/components/CnRowActions/CnRowActions.vue3.js.map +1 -1
  177. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js +50 -3
  178. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
  179. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
  180. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue.js +10 -0
  181. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue.js.map +1 -0
  182. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js +186 -0
  183. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -0
  184. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js +46 -0
  185. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -0
  186. package/dist/esm/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue2.js +5 -3
  187. package/dist/esm/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue2.js.map +1 -1
  188. package/dist/esm/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue3.js.map +1 -1
  189. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue.js +11 -0
  190. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue.js.map +1 -0
  191. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js +298 -0
  192. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue2.js.map +1 -0
  193. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js +77 -0
  194. package/dist/esm/components/CnStackedBarWidget/CnStackedBarWidget.vue3.js.map +1 -0
  195. package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue.js +10 -0
  196. package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue.js.map +1 -0
  197. package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue2.js +169 -0
  198. package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue2.js.map +1 -0
  199. package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue3.js +48 -0
  200. package/dist/esm/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue3.js.map +1 -0
  201. package/dist/esm/components/CnTabs/CnTab.vue2.js +35 -0
  202. package/dist/esm/components/CnTabs/CnTab.vue2.js.map +1 -1
  203. package/dist/esm/components/CnTabs/CnTab.vue3.js.map +1 -1
  204. package/dist/esm/components/CnTabs/CnTabs.vue2.js +120 -7
  205. package/dist/esm/components/CnTabs/CnTabs.vue2.js.map +1 -1
  206. package/dist/esm/components/CnTabs/CnTabs.vue3.js +57 -5
  207. package/dist/esm/components/CnTabs/CnTabs.vue3.js.map +1 -1
  208. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +59 -4
  209. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  210. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +6 -2
  211. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  212. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +3 -1
  213. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
  214. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +1 -0
  215. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
  216. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js +10 -0
  217. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue.js.map +1 -0
  218. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js +484 -0
  219. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue2.js.map +1 -0
  220. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js +115 -0
  221. package/dist/esm/components/CnWeekStripWidget/CnWeekStripWidget.vue3.js.map +1 -0
  222. package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue.js +10 -0
  223. package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue.js.map +1 -0
  224. package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue2.js +189 -0
  225. package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue2.js.map +1 -0
  226. package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue3.js +74 -0
  227. package/dist/esm/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue3.js.map +1 -0
  228. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +82 -8
  229. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  230. package/dist/esm/index.js +10 -0
  231. package/dist/esm/index.js.map +1 -1
  232. package/dist/esm/integrations/builtin/analytics/CnAnalyticsCard.vue2.js +3 -1
  233. package/dist/esm/integrations/builtin/analytics/CnAnalyticsCard.vue2.js.map +1 -1
  234. package/dist/esm/integrations/builtin/analytics/CnAnalyticsCard.vue3.js.map +1 -1
  235. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js +3 -1
  236. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js.map +1 -1
  237. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js +2 -4
  238. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js.map +1 -1
  239. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue2.js +6 -0
  240. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue2.js.map +1 -1
  241. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue3.js +68 -53
  242. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksCard.vue3.js.map +1 -1
  243. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue2.js +17 -0
  244. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue2.js.map +1 -1
  245. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue3.js +21 -19
  246. package/dist/esm/integrations/builtin/bookmarks/CnBookmarksTab.vue3.js.map +1 -1
  247. package/dist/esm/integrations/builtin/collectives/CnCollectivesCard.vue2.js +3 -1
  248. package/dist/esm/integrations/builtin/collectives/CnCollectivesCard.vue2.js.map +1 -1
  249. package/dist/esm/integrations/builtin/collectives/CnCollectivesCard.vue3.js.map +1 -1
  250. package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue2.js +3 -1
  251. package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue2.js.map +1 -1
  252. package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue3.js +2 -4
  253. package/dist/esm/integrations/builtin/collectives/CnCollectivesTab.vue3.js.map +1 -1
  254. package/dist/esm/integrations/builtin/cospend/CnCospendCard.vue2.js +2 -1
  255. package/dist/esm/integrations/builtin/cospend/CnCospendCard.vue2.js.map +1 -1
  256. package/dist/esm/integrations/builtin/cospend/CnCospendCard.vue3.js.map +1 -1
  257. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js +2 -1
  258. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js.map +1 -1
  259. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue3.js +1 -2
  260. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue3.js.map +1 -1
  261. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue2.js +2 -1
  262. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue2.js.map +1 -1
  263. package/dist/esm/integrations/builtin/deck/CnDeckCard.vue3.js.map +1 -1
  264. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js +2 -1
  265. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js.map +1 -1
  266. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js +1 -2
  267. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js.map +1 -1
  268. package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js.map +1 -1
  269. package/dist/esm/integrations/builtin/email/CnEmailCard.vue3.js.map +1 -1
  270. package/dist/esm/integrations/builtin/email/CnEmailTab.vue2.js.map +1 -1
  271. package/dist/esm/integrations/builtin/email/CnEmailTab.vue3.js +1 -2
  272. package/dist/esm/integrations/builtin/email/CnEmailTab.vue3.js.map +1 -1
  273. package/dist/esm/integrations/builtin/flow/CnFlowCard.vue2.js +2 -1
  274. package/dist/esm/integrations/builtin/flow/CnFlowCard.vue2.js.map +1 -1
  275. package/dist/esm/integrations/builtin/flow/CnFlowCard.vue3.js.map +1 -1
  276. package/dist/esm/integrations/builtin/flow/CnFlowTab.vue2.js +2 -1
  277. package/dist/esm/integrations/builtin/flow/CnFlowTab.vue2.js.map +1 -1
  278. package/dist/esm/integrations/builtin/flow/CnFlowTab.vue3.js +1 -2
  279. package/dist/esm/integrations/builtin/flow/CnFlowTab.vue3.js.map +1 -1
  280. package/dist/esm/integrations/builtin/forms/CnFormsCard.vue2.js +3 -1
  281. package/dist/esm/integrations/builtin/forms/CnFormsCard.vue2.js.map +1 -1
  282. package/dist/esm/integrations/builtin/forms/CnFormsCard.vue3.js.map +1 -1
  283. package/dist/esm/integrations/builtin/forms/CnFormsTab.vue2.js +3 -1
  284. package/dist/esm/integrations/builtin/forms/CnFormsTab.vue2.js.map +1 -1
  285. package/dist/esm/integrations/builtin/forms/CnFormsTab.vue3.js +2 -4
  286. package/dist/esm/integrations/builtin/forms/CnFormsTab.vue3.js.map +1 -1
  287. package/dist/esm/integrations/builtin/maps/CnMapsCard.vue2.js +3 -1
  288. package/dist/esm/integrations/builtin/maps/CnMapsCard.vue2.js.map +1 -1
  289. package/dist/esm/integrations/builtin/maps/CnMapsCard.vue3.js.map +1 -1
  290. package/dist/esm/integrations/builtin/maps/CnMapsTab.vue2.js +3 -1
  291. package/dist/esm/integrations/builtin/maps/CnMapsTab.vue2.js.map +1 -1
  292. package/dist/esm/integrations/builtin/maps/CnMapsTab.vue3.js +2 -4
  293. package/dist/esm/integrations/builtin/maps/CnMapsTab.vue3.js.map +1 -1
  294. package/dist/esm/integrations/builtin/openproject/CnOpenprojectCard.vue2.js +3 -1
  295. package/dist/esm/integrations/builtin/openproject/CnOpenprojectCard.vue2.js.map +1 -1
  296. package/dist/esm/integrations/builtin/openproject/CnOpenprojectCard.vue3.js.map +1 -1
  297. package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue2.js +3 -1
  298. package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue2.js.map +1 -1
  299. package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue3.js +2 -4
  300. package/dist/esm/integrations/builtin/openproject/CnOpenprojectTab.vue3.js.map +1 -1
  301. package/dist/esm/integrations/builtin/photos/CnPhotosCard.vue2.js +2 -1
  302. package/dist/esm/integrations/builtin/photos/CnPhotosCard.vue2.js.map +1 -1
  303. package/dist/esm/integrations/builtin/photos/CnPhotosCard.vue3.js.map +1 -1
  304. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js +2 -1
  305. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js.map +1 -1
  306. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue3.js +1 -2
  307. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue3.js.map +1 -1
  308. package/dist/esm/integrations/builtin/polls/CnPollsCard.vue2.js +2 -1
  309. package/dist/esm/integrations/builtin/polls/CnPollsCard.vue2.js.map +1 -1
  310. package/dist/esm/integrations/builtin/polls/CnPollsCard.vue3.js.map +1 -1
  311. package/dist/esm/integrations/builtin/polls/CnPollsTab.vue2.js +2 -1
  312. package/dist/esm/integrations/builtin/polls/CnPollsTab.vue2.js.map +1 -1
  313. package/dist/esm/integrations/builtin/polls/CnPollsTab.vue3.js +1 -2
  314. package/dist/esm/integrations/builtin/polls/CnPollsTab.vue3.js.map +1 -1
  315. package/dist/esm/integrations/builtin/shares/CnSharesTab.vue2.js.map +1 -1
  316. package/dist/esm/integrations/builtin/shares/CnSharesTab.vue3.js +3 -6
  317. package/dist/esm/integrations/builtin/shares/CnSharesTab.vue3.js.map +1 -1
  318. package/dist/esm/integrations/builtin/talk/CnTalkCard.vue2.js +3 -1
  319. package/dist/esm/integrations/builtin/talk/CnTalkCard.vue2.js.map +1 -1
  320. package/dist/esm/integrations/builtin/talk/CnTalkCard.vue3.js.map +1 -1
  321. package/dist/esm/integrations/builtin/talk/CnTalkTab.vue2.js +3 -1
  322. package/dist/esm/integrations/builtin/talk/CnTalkTab.vue2.js.map +1 -1
  323. package/dist/esm/integrations/builtin/talk/CnTalkTab.vue3.js +2 -4
  324. package/dist/esm/integrations/builtin/talk/CnTalkTab.vue3.js.map +1 -1
  325. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerCard.vue2.js +2 -1
  326. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerCard.vue2.js.map +1 -1
  327. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerCard.vue3.js.map +1 -1
  328. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue2.js +2 -1
  329. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue2.js.map +1 -1
  330. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue3.js +1 -2
  331. package/dist/esm/integrations/builtin/time-tracker/CnTimeTrackerTab.vue3.js.map +1 -1
  332. package/dist/esm/integrations/builtin/xwiki/CnXwikiCard.vue2.js +4 -1
  333. package/dist/esm/integrations/builtin/xwiki/CnXwikiCard.vue2.js.map +1 -1
  334. package/dist/esm/integrations/builtin/xwiki/CnXwikiCard.vue3.js.map +1 -1
  335. package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue2.js +6 -3
  336. package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue2.js.map +1 -1
  337. package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue3.js +2 -4
  338. package/dist/esm/integrations/builtin/xwiki/CnXwikiTab.vue3.js.map +1 -1
  339. package/dist/esm/l10n/en.json.js +55 -1
  340. package/dist/esm/l10n/en.json.js.map +1 -1
  341. package/dist/esm/l10n/nl.json.js +55 -1
  342. package/dist/esm/l10n/nl.json.js.map +1 -1
  343. package/dist/esm/nextcloud-vue.css +998 -7
  344. package/dist/esm/utils/actionLink.js +5 -0
  345. package/dist/esm/utils/actionLink.js.map +1 -1
  346. package/dist/esm/utils/actionsDispatcher.js +16 -1
  347. package/dist/esm/utils/actionsDispatcher.js.map +1 -1
  348. package/dist/esm/utils/dateVariant.js +124 -0
  349. package/dist/esm/utils/dateVariant.js.map +1 -0
  350. package/dist/esm/utils/detailActionModel.js +260 -0
  351. package/dist/esm/utils/detailActionModel.js.map +1 -0
  352. package/dist/esm/utils/dueRule.js +84 -0
  353. package/dist/esm/utils/dueRule.js.map +1 -0
  354. package/dist/esm/utils/fetchAggregate.js +37 -1
  355. package/dist/esm/utils/fetchAggregate.js.map +1 -1
  356. package/dist/esm/utils/fetchFilterCounts.js +186 -0
  357. package/dist/esm/utils/fetchFilterCounts.js.map +1 -0
  358. package/dist/esm/utils/libraryWidgetKeys.js +5 -0
  359. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  360. package/dist/esm/utils/linkNavigation.js +6 -3
  361. package/dist/esm/utils/linkNavigation.js.map +1 -1
  362. package/dist/esm/utils/readPath.js +30 -0
  363. package/dist/esm/utils/readPath.js.map +1 -0
  364. package/dist/esm/utils/rowAuxClick.js +30 -5
  365. package/dist/esm/utils/rowAuxClick.js.map +1 -1
  366. package/dist/esm/utils/safeHref.js +18 -3
  367. package/dist/esm/utils/safeHref.js.map +1 -1
  368. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  369. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  370. package/dist/nextcloud-vue.cjs.js +15855 -9353
  371. package/dist/nextcloud-vue.cjs.js.map +2 -2
  372. package/dist/nextcloud-vue.css +998 -7
  373. package/l10n/en.json +55 -1
  374. package/l10n/nl.json +55 -1
  375. package/package.json +1 -1
  376. package/scripts/.jsdoc-baselines.json +3 -0
  377. package/src/components/CnActionsBar/CnActionsBar.vue +14 -5
  378. package/src/components/CnActionsMenu/CnActionsMenu.vue +14 -4
  379. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +1 -2
  380. package/src/components/CnAppNav/CnAppNav.md +26 -0
  381. package/src/components/CnAppNav/CnAppNav.vue +104 -1
  382. package/src/components/CnBannerWidget/CnBannerWidget.vue +365 -10
  383. package/src/components/CnBannerWidgetForm/CnBannerWidgetForm.vue +65 -3
  384. package/src/components/CnBoardView/CnBoardView.vue +90 -5
  385. package/src/components/CnBrandStripe/CnBrandStripe.md +22 -0
  386. package/src/components/CnBrandStripe/CnBrandStripe.vue +100 -0
  387. package/src/components/CnBrandStripe/index.js +4 -0
  388. package/src/components/CnCardGrid/CnCardGrid.vue +9 -1
  389. package/src/components/CnCellRenderer/CnCellRenderer.vue +207 -1
  390. package/src/components/CnContextMenu/CnContextMenu.vue +6 -1
  391. package/src/components/CnConversationThread/CnConversationThread.md +51 -0
  392. package/src/components/CnConversationThread/CnConversationThread.vue +457 -0
  393. package/src/components/CnConversationThread/CnConversationWidget.vue +144 -0
  394. package/src/components/CnConversationThread/index.js +4 -0
  395. package/src/components/CnDataTable/CnDataTable.md +1 -1
  396. package/src/components/CnDataTable/CnDataTable.vue +131 -17
  397. package/src/components/CnDateAxisView/CnDateAxisView.vue +15 -6
  398. package/src/components/CnDetailPage/CnDetailPage.md +17 -1
  399. package/src/components/CnDetailPage/CnDetailPage.vue +712 -49
  400. package/src/components/CnDocumentReviewList/CnDocumentReviewList.md +55 -0
  401. package/src/components/CnDocumentReviewList/CnDocumentReviewList.vue +384 -0
  402. package/src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue +108 -0
  403. package/src/components/CnDocumentReviewList/index.js +4 -0
  404. package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +1 -2
  405. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +5 -3
  406. package/src/components/CnFilesWidget/CnFilesWidget.vue +4 -21
  407. package/src/components/CnFlowRunsWidget/CnFlowRunsWidget.vue +8 -21
  408. package/src/components/CnFlowsPage/CnFlowsPage.vue +2 -1
  409. package/src/components/CnHeaderWidget/CnHeaderWidget.vue +189 -14
  410. package/src/components/CnHeaderWidgetForm/CnHeaderWidgetForm.vue +53 -3
  411. package/src/components/CnIndexPage/CnIndexPage.vue +210 -17
  412. package/src/components/CnIndexPage/manifestActionDispatch.js +31 -11
  413. package/src/components/CnIntegrationWidget/CnIntegrationWidgetEmpty.vue +1 -2
  414. package/src/components/CnInteractionFormWidget/CnInteractionFormWidget.vue +0 -1
  415. package/src/components/CnLinkButtonWidget/CnLinkButtonWidget.vue +2 -17
  416. package/src/components/CnLogsPage/CnLogsPage.vue +37 -12
  417. package/src/components/CnNextStepCard/CnNextStepCard.md +40 -0
  418. package/src/components/CnNextStepCard/CnNextStepCard.vue +319 -0
  419. package/src/components/CnNextStepCard/CnNextStepWidget.vue +59 -0
  420. package/src/components/CnNextStepCard/index.js +4 -0
  421. package/src/components/CnObjectCard/CnObjectCard.vue +24 -6
  422. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +49 -0
  423. package/src/components/CnObjectDataWidgetForm/CnObjectDataWidgetForm.vue +6 -0
  424. package/src/components/CnObjectKanban/CnObjectKanban.vue +86 -2
  425. package/src/components/CnObjectList/CnObjectList.vue +19 -3
  426. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +47 -15
  427. package/src/components/CnObjectRow/CnObjectRow.vue +25 -7
  428. package/src/components/CnObjectSidebar/CnFilesTab.vue +0 -1
  429. package/src/components/CnPageRenderer/CnPageRenderer.vue +2 -0
  430. package/src/components/CnQuickFilterBar/CnQuickFilterBar.md +3 -0
  431. package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +60 -1
  432. package/src/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue +100 -3
  433. package/src/components/CnRowActions/CnRowActions.vue +7 -2
  434. package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +50 -3
  435. package/src/components/CnSegmentedControl/CnSegmentedControl.md +46 -0
  436. package/src/components/CnSegmentedControl/CnSegmentedControl.vue +291 -0
  437. package/src/components/CnSegmentedControl/index.js +4 -0
  438. package/src/components/CnSpendAnalyticsWidget/CnSpendAnalyticsWidget.vue +5 -3
  439. package/src/components/CnStackedBarWidget/CnStackedBarWidget.md +15 -0
  440. package/src/components/CnStackedBarWidget/CnStackedBarWidget.vue +414 -0
  441. package/src/components/CnStackedBarWidget/index.js +14 -0
  442. package/src/components/CnStackedBarWidgetForm/CnStackedBarWidgetForm.vue +224 -0
  443. package/src/components/CnStackedBarWidgetForm/index.js +4 -0
  444. package/src/components/CnTabs/CnTab.vue +35 -0
  445. package/src/components/CnTabs/CnTabs.vue +251 -13
  446. package/src/components/CnTabsWidget/CnTabsWidget.vue +63 -4
  447. package/src/components/CnTasksWidget/CnTasksWidget.vue +4 -1
  448. package/src/components/CnWeekStripWidget/CnWeekStripWidget.md +31 -0
  449. package/src/components/CnWeekStripWidget/CnWeekStripWidget.vue +668 -0
  450. package/src/components/CnWeekStripWidget/index.js +14 -0
  451. package/src/components/CnWeekStripWidgetForm/CnWeekStripWidgetForm.vue +265 -0
  452. package/src/components/CnWeekStripWidgetForm/index.js +4 -0
  453. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +74 -0
  454. package/src/components/index.js +11 -0
  455. package/src/css/detail-page.css +47 -0
  456. package/src/css/table.css +26 -0
  457. package/src/index.js +9 -0
  458. package/src/integrations/builtin/analytics/CnAnalyticsCard.vue +3 -2
  459. package/src/integrations/builtin/analytics/CnAnalyticsTab.vue +5 -6
  460. package/src/integrations/builtin/bookmarks/CnBookmarksCard.vue +12 -1
  461. package/src/integrations/builtin/bookmarks/CnBookmarksTab.vue +23 -6
  462. package/src/integrations/builtin/bookmarks/__tests__/CnBookmarksTab.spec.js +7 -2
  463. package/src/integrations/builtin/collectives/CnCollectivesCard.vue +3 -2
  464. package/src/integrations/builtin/collectives/CnCollectivesTab.vue +5 -6
  465. package/src/integrations/builtin/cospend/CnCospendCard.vue +2 -2
  466. package/src/integrations/builtin/cospend/CnCospendTab.vue +3 -4
  467. package/src/integrations/builtin/deck/CnDeckCard.vue +2 -2
  468. package/src/integrations/builtin/deck/CnDeckTab.vue +3 -4
  469. package/src/integrations/builtin/email/CnEmailCard.vue +6 -2
  470. package/src/integrations/builtin/email/CnEmailTab.vue +7 -4
  471. package/src/integrations/builtin/flow/CnFlowCard.vue +2 -2
  472. package/src/integrations/builtin/flow/CnFlowTab.vue +3 -4
  473. package/src/integrations/builtin/forms/CnFormsCard.vue +3 -2
  474. package/src/integrations/builtin/forms/CnFormsTab.vue +5 -6
  475. package/src/integrations/builtin/maps/CnMapsCard.vue +3 -2
  476. package/src/integrations/builtin/maps/CnMapsTab.vue +5 -6
  477. package/src/integrations/builtin/maps/__tests__/CnMapsTab.spec.js +9 -0
  478. package/src/integrations/builtin/openproject/CnOpenprojectCard.vue +3 -2
  479. package/src/integrations/builtin/openproject/CnOpenprojectTab.vue +5 -6
  480. package/src/integrations/builtin/photos/CnPhotosCard.vue +2 -2
  481. package/src/integrations/builtin/photos/CnPhotosTab.vue +3 -4
  482. package/src/integrations/builtin/polls/CnPollsCard.vue +2 -2
  483. package/src/integrations/builtin/polls/CnPollsTab.vue +3 -4
  484. package/src/integrations/builtin/shares/CnSharesTab.vue +3 -6
  485. package/src/integrations/builtin/talk/CnTalkCard.vue +3 -2
  486. package/src/integrations/builtin/talk/CnTalkTab.vue +5 -6
  487. package/src/integrations/builtin/time-tracker/CnTimeTrackerCard.vue +2 -2
  488. package/src/integrations/builtin/time-tracker/CnTimeTrackerTab.vue +3 -4
  489. package/src/integrations/builtin/xwiki/CnXwikiCard.vue +4 -2
  490. package/src/integrations/builtin/xwiki/CnXwikiTab.vue +7 -7
  491. package/src/integrations/builtin/xwiki/__tests__/CnXwikiTab.spec.js +9 -0
  492. package/src/schemas/app-manifest-v2.schema.json +389 -1
  493. package/src/schemas/app-manifest.schema.json +2 -1
  494. package/src/utils/actionLink.js +5 -0
  495. package/src/utils/actionsDispatcher.js +15 -0
  496. package/src/utils/dateVariant.js +120 -0
  497. package/src/utils/detailActionModel.js +256 -0
  498. package/src/utils/dueRule.js +94 -0
  499. package/src/utils/fetchAggregate.js +36 -0
  500. package/src/utils/fetchFilterCounts.js +182 -0
  501. package/src/utils/index.js +1 -0
  502. package/src/utils/libraryWidgetKeys.js +5 -0
  503. package/src/utils/linkNavigation.js +6 -3
  504. package/src/utils/readPath.js +27 -0
  505. package/src/utils/rowAuxClick.js +29 -4
  506. package/src/utils/safeHref.js +18 -3
  507. package/src/utils/validateManifestV2.compiled.js +2 -2
@@ -119,6 +119,7 @@
119
119
  :views="viewsForControl"
120
120
  :loading="savedViewsLoading"
121
121
  :currentUserId="currentSavedViewsUserId"
122
+ :counts="savedViewCounts"
122
123
  @apply="onApplySavedView"
123
124
  @saveRequest="showSaveViewDialog = true"
124
125
  @deleteRequest="onDeleteViewRequest" />
@@ -171,6 +172,7 @@
171
172
  :multiple="quickFilterMultiple"
172
173
  :activeIndex="activeQuickFilterIndex"
173
174
  :selectedIndices="selectedQuickFilterIndices"
175
+ :counts="tabCounts"
174
176
  @update:activeIndex="onQuickFilterChange"
175
177
  @update:selectedIndices="onQuickFilterMultiChange" />
176
178
  </template>
@@ -451,6 +453,7 @@
451
453
  @sort="onSortEvent"
452
454
  @select="onSelect"
453
455
  @rowClick="onRowClick"
456
+ @rowAuxClick="onRowAuxClick"
454
457
  @rowContextMenu="onRowContextMenu">
455
458
  <!-- Pass through column slots -->
456
459
  <template
@@ -544,10 +547,12 @@
544
547
  :statusField="board.statusField || 'status'"
545
548
  :cardFields="board.cardFields || []"
546
549
  :swimlaneField="board.swimlaneField || ''"
550
+ :dueRule="board.dueRule || null"
547
551
  :rowKey="rowKey"
548
552
  :runTransition="runTransition"
549
553
  :paged="isPaged"
550
554
  @cardClick="onRowClick"
555
+ @cardAuxClick="onRowAuxClick"
551
556
  @moved="onBoardMoved" />
552
557
 
553
558
  <!--
@@ -563,7 +568,8 @@
563
568
  :laneField="dateAxis.laneField || ''"
564
569
  :labelField="dateAxis.labelField || ''"
565
570
  :rowKey="rowKey"
566
- @rowClick="onRowClick" />
571
+ @rowClick="onRowClick"
572
+ @rowAuxClick="onRowAuxClick" />
567
573
 
568
574
  <!-- List view -->
569
575
  <CnObjectList
@@ -576,6 +582,7 @@
576
582
  :rowKey="rowKey"
577
583
  :emptyText="emptyText"
578
584
  @click="onRowClick"
585
+ @auxClick="onRowAuxClick"
579
586
  @select="onSelect">
580
587
  <!--
581
588
  List-item slot resolution priority (highest first):
@@ -596,6 +603,7 @@
596
603
  :register="register"
597
604
  :selected="selected"
598
605
  @click="(...args) => onRowClick(object, args.find(isDomEvent))"
606
+ @mousedown="onCustomItemMouseDown"
599
607
  @auxclick="onCustomItemAuxClick(object, $event)"
600
608
  @select="onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))" />
601
609
  </template>
@@ -629,6 +637,7 @@
629
637
  :rowKey="rowKey"
630
638
  :emptyText="emptyText"
631
639
  @click="onRowClick"
640
+ @auxClick="onRowAuxClick"
632
641
  @select="onSelect">
633
642
  <!--
634
643
  Card slot resolution priority (highest first):
@@ -649,6 +658,7 @@
649
658
  :register="register"
650
659
  :selected="selected"
651
660
  @click="(...args) => onRowClick(object, args.find(isDomEvent))"
661
+ @mousedown="onCustomItemMouseDown"
652
662
  @auxclick="onCustomItemAuxClick(object, $event)"
653
663
  @select="onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))" />
654
664
  </template>
@@ -774,14 +784,16 @@ import { useSavedViewsApi } from '../../composables/useSavedViewsApi.js'
774
784
  import { METADATA_COLUMNS } from '../../constants/metadata.js'
775
785
  import { routeHref } from '../../utils/actionLink.js'
776
786
  import { buildOnSuccessRoute, resolveRegisteredHandler } from '../../utils/actionsDispatcher.js'
787
+ import { fetchFilterCounts } from '../../utils/fetchFilterCounts.js'
777
788
  import { buildExportUrl } from '../../utils/indexExportHelpers.js'
778
789
  import { openRowTarget } from '../../utils/linkNavigation.js'
779
- import { resolveClaimedTeams, resolveClaimTokens, splitViewsIntoTabs, viewAsTab } from '../../utils/listLenses.js'
790
+ import { resolveClaimedTeams, resolveClaimTokens, splitViewsIntoTabs, viewAsTab, viewIdOf } from '../../utils/listLenses.js'
780
791
  import { LIST_SHORTCUTS, listPaletteCommands, shortcutFor } from '../../utils/listShortcuts.js'
781
792
  import { multiKeySort } from '../../utils/multiKeySort.js'
782
793
  import { resolveDeepTokens, resolveFilterValue } from '../../utils/resolveFilterTokens.js'
794
+ import { resolveFilterMap } from '../../utils/routeFilters.js'
783
795
  import { availableRowActions, DEFAULT_ROW_ACTION_FIELD, refusalReasonFor, undeclaredRowActions } from '../../utils/rowActionAvailability.js'
784
- import { isNewTabClick, isRowMiddleClick, markNewTabHandled } from '../../utils/rowAuxClick.js'
796
+ import { isNewTabClick, isNewTabHandled, isRowMiddleClick, markNewTabHandled, preventMiddleClickAutoscroll } from '../../utils/rowAuxClick.js'
785
797
  import { DEFAULT_ROW_INDICATOR_CAP } from '../../utils/rowIndicators.js'
786
798
  import { buildRouteQueryFromViewState, buildViewCreatePayload, extractViewState, extractViewStateFromRouteQuery, savedViewScope, viewMatchesScope } from '../../utils/savedViewHelpers.js'
787
799
  import { columnsFromSchema } from '../../utils/schema.js'
@@ -995,7 +1007,8 @@ function namedFilterToQuery(values) {
995
1007
  * @event {object} mass-export — Mass export confirmed. Payload: { ids, format }
996
1008
  * @event {object} mass-import — Mass import confirmed. Payload: import data
997
1009
  * @event {void} refresh — Refresh button clicked
998
- * @event {object} row-click — Table row or card clicked or middle-clicked. Payload: (row, event) — the row object and the native click/auxclick event
1010
+ * @event {object} row-click — Table row or card clicked. Payload: (row, event) — the row object and the native click event
1011
+ * @event {object} row-aux-click — Table row or card middle-clicked. Payload: (row, event) — the row object and the native auxclick event
999
1012
  * @event {{ key: string, order: string }} sort — Column sort changed
1000
1013
  * @event {number} page-changed — Pagination page changed
1001
1014
  * @event {number} page-size-changed — Pagination page size changed
@@ -1191,7 +1204,6 @@ export default {
1191
1204
  default: null,
1192
1205
  },
1193
1206
 
1194
- /* eslint-disable vue/no-unused-properties -- used in useSelfFetchList */
1195
1207
  /**
1196
1208
  * Base filter for the self-fetch path. String values of the form
1197
1209
  * `"@route.<name>"` / `":<name>"` are interpolated from `$route.params`.
@@ -1200,7 +1212,6 @@ export default {
1200
1212
  type: Object,
1201
1213
  default: null,
1202
1214
  },
1203
- /* eslint-enable vue/no-unused-properties */
1204
1215
 
1205
1216
  /**
1206
1217
  * Self-fetch mode only — an array of clickable filter tabs rendered as
@@ -2203,6 +2214,19 @@ export default {
2203
2214
  default: () => [],
2204
2215
  },
2205
2216
 
2217
+ /**
2218
+ * Which saved views show how many records they match: `true` for all
2219
+ * of them (tabs and the entries in the views control), or a list of
2220
+ * view ids. Off by default, so no count request is made. A quick
2221
+ * filter opts in on its own entry with `showCount: true`.
2222
+ *
2223
+ * @type {boolean|string[]}
2224
+ */
2225
+ viewCounts: {
2226
+ type: [Boolean, Array],
2227
+ default: false,
2228
+ },
2229
+
2206
2230
  /**
2207
2231
  * The teams this person may claim. The instance decides this list; it
2208
2232
  * is the membership side of `claimedTeams`.
@@ -2568,6 +2592,7 @@ export default {
2568
2592
  'quick-filter-change',
2569
2593
  'refresh',
2570
2594
  'row-click',
2595
+ 'row-aux-click',
2571
2596
  'search',
2572
2597
  'select',
2573
2598
  'sort',
@@ -2640,6 +2665,10 @@ export default {
2640
2665
  data() {
2641
2666
  return {
2642
2667
  currentViewMode: this.viewMode,
2668
+ /** Count per tab-strip index, for the entries that asked for one; null = none. */
2669
+ tabCounts: null,
2670
+ /** Count per saved-view id, for the views control; null = none. */
2671
+ savedViewCounts: null,
2643
2672
  /**
2644
2673
  * The non-`_` query keys this page owns, i.e. may clear on the next
2645
2674
  * persist. Seeded with what it adopted from the query on load, and
@@ -2810,6 +2839,9 @@ export default {
2810
2839
  * that is what Add does (no host `@add` listener) and the router can
2811
2840
  * resolve it. The bar then renders Add as a real link; null otherwise.
2812
2841
  *
2842
+ * `$.vnode.props` is not reactive, so an `add` listener attached or
2843
+ * removed after mount does not re-evaluate this.
2844
+ *
2813
2845
  * @return {string|object|null}
2814
2846
  */
2815
2847
  addLinkTo() {
@@ -3229,6 +3261,55 @@ export default {
3229
3261
  return this.splitSavedViews.control
3230
3262
  },
3231
3263
 
3264
+ /**
3265
+ * The filters whose record count this page shows: quick filters that
3266
+ * set `showCount`, and the saved views `viewCounts` names. Empty when
3267
+ * nothing opted in, which is what keeps the page from making a count
3268
+ * request nobody asked for.
3269
+ *
3270
+ * @return {Array<{key: string, filter: object}>} The filters to count.
3271
+ * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
3272
+ */
3273
+ countEntries() {
3274
+ const entries = []
3275
+ const tabs = this.tabStripEntries || []
3276
+ const lens = this.lensTabs.length > 0
3277
+ tabs.forEach((tab, index) => {
3278
+ const wants = lens ? this.viewWantsCount(tab.id) : (tab && tab.showCount === true)
3279
+ if (wants && tab.narrowsToNothing !== true) {
3280
+ entries.push({ key: `tab:${index}`, filter: tab.filter || {} })
3281
+ }
3282
+ })
3283
+ for (const view of this.viewsForControl) {
3284
+ const id = viewIdOf(view)
3285
+ if (this.viewWantsCount(id)) {
3286
+ entries.push({ key: `view:${id}`, filter: viewAsTab(view).filter })
3287
+ }
3288
+ }
3289
+ return entries
3290
+ },
3291
+
3292
+ /**
3293
+ * Changes whenever the counts have to be fetched again: another set
3294
+ * of filters, another register or schema, or a list whose total moved
3295
+ * (a record was added, removed, or left a filter).
3296
+ *
3297
+ * @return {string} The signature.
3298
+ * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
3299
+ */
3300
+ countRequestKey() {
3301
+ if (this.countEntries.length === 0) {
3302
+ return ''
3303
+ }
3304
+ return JSON.stringify({
3305
+ r: this.register,
3306
+ s: this.exportSchemaSlug,
3307
+ f: this.filter || null,
3308
+ e: this.countEntries,
3309
+ t: Number(this.effectivePagination?.total ?? 0),
3310
+ })
3311
+ },
3312
+
3232
3313
  /**
3233
3314
  * What the tab strip shows: the page's lens tabs when it named any,
3234
3315
  * else its quick filters. One strip, never two, so a person is not
@@ -4267,6 +4348,14 @@ export default {
4267
4348
  },
4268
4349
 
4269
4350
  watch: {
4351
+ countRequestKey: {
4352
+ immediate: true,
4353
+ /** @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views */
4354
+ handler() {
4355
+ this.loadFilterCounts()
4356
+ },
4357
+ },
4358
+
4270
4359
  // Remember the whole folder set whenever no folder narrows the query.
4271
4360
  folderSidebarLiveFacetValues: {
4272
4361
  immediate: true,
@@ -4476,6 +4565,61 @@ export default {
4476
4565
  },
4477
4566
 
4478
4567
  methods: {
4568
+ /**
4569
+ * Whether a saved view shows its record count (`viewCounts`).
4570
+ *
4571
+ * @param {string} id The view id.
4572
+ * @return {boolean} True when the view opted in.
4573
+ * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
4574
+ */
4575
+ viewWantsCount(id) {
4576
+ if (this.viewCounts === true) {
4577
+ return true
4578
+ }
4579
+ return Array.isArray(this.viewCounts) && this.viewCounts.map(String).includes(String(id))
4580
+ },
4581
+
4582
+ /**
4583
+ * Fetch the record counts for the filters and views that asked for
4584
+ * one. Filters that narrow the same single field share one grouped
4585
+ * request. A failed count leaves that entry without a number.
4586
+ *
4587
+ * @return {Promise<void>}
4588
+ * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views
4589
+ */
4590
+ async loadFilterCounts() {
4591
+ const requestKey = this.countRequestKey
4592
+ const schema = this.exportSchemaSlug
4593
+ if (requestKey === '' || !this.register || !schema) {
4594
+ this.tabCounts = null
4595
+ this.savedViewCounts = null
4596
+ return
4597
+ }
4598
+ const params = (this.$route && this.$route.params) || {}
4599
+ const ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}
4600
+ const counts = await fetchFilterCounts({
4601
+ register: this.register,
4602
+ schema,
4603
+ entries: this.countEntries.map((entry) => ({ key: entry.key, filter: resolveFilterMap(entry.filter, params, ctx) })),
4604
+ baseFilter: resolveFilterMap(this.filter, params, ctx),
4605
+ ctx,
4606
+ })
4607
+ if (requestKey !== this.countRequestKey) {
4608
+ return
4609
+ }
4610
+ const tabCounts = {}
4611
+ const viewCounts = {}
4612
+ for (const [key, value] of Object.entries(counts)) {
4613
+ if (key.startsWith('tab:')) {
4614
+ tabCounts[Number(key.slice(4))] = value
4615
+ } else {
4616
+ viewCounts[key.slice(5)] = value
4617
+ }
4618
+ }
4619
+ this.tabCounts = tabCounts
4620
+ this.savedViewCounts = viewCounts
4621
+ },
4622
+
4479
4623
  // ── Split view (case-page-and-list-as-a-place) ──────────────────
4480
4624
 
4481
4625
  /**
@@ -5565,21 +5709,60 @@ export default {
5565
5709
  /**
5566
5710
  * Row/card click: toggles selection when `selectable` (covers the custom
5567
5711
  * `cardComponent` path), otherwise emits `row-click` for navigation. A
5568
- * ctrl/cmd/shift or middle click opens a named source's row in a new tab.
5712
+ * ctrl/cmd/shift click opens a named source's row in a new tab.
5569
5713
  *
5570
5714
  * The `@event` block below sits directly against its `$emit`, and must
5571
5715
  * stay there. vue-docgen binds an event's description to the emit it
5572
5716
  * IMMEDIATELY precedes.
5573
5717
  *
5574
5718
  * @param {object} row The clicked row object
5575
- * @param {MouseEvent|KeyboardEvent} [event] The originating click/auxclick event.
5719
+ * @param {MouseEvent|KeyboardEvent} [event] The originating click event.
5576
5720
  */
5577
5721
  onRowClick(row, event) {
5722
+ if (!this.routeClickedRow(row, event)) {
5723
+ return
5724
+ }
5725
+ /**
5726
+ * @event row-click Emitted on a row/card click for navigation. Fires when `selectable` is false, OR when `rowClickToView` is set and something can open the row (selection then happens via the checkbox). Payload: `(row, event)` — the clicked row and the native click event (absent for a keyboard shortcut or map marker), so a host can open the row in a new tab on a ctrl/cmd/shift click with `openRowTarget`. A middle click emits `row-aux-click` instead.
5727
+ * @type {object} The clicked row object.
5728
+ */
5729
+ this.$emit('row-click', ...(event ? [row, event] : [row]))
5730
+ },
5731
+
5732
+ /**
5733
+ * Row/card middle click: opens a named source's row in a new tab and
5734
+ * emits `row-aux-click`, not `row-click`, so a host whose `row-click`
5735
+ * listener navigates never moves the current tab away.
5736
+ *
5737
+ * @param {object} row The clicked row object
5738
+ * @param {MouseEvent} event The originating auxclick event.
5739
+ */
5740
+ onRowAuxClick(row, event) {
5741
+ if (!this.routeClickedRow(row, event)) {
5742
+ return
5743
+ }
5744
+ /**
5745
+ * @event row-aux-click Emitted on a row/card middle click, under the same conditions as `row-click`, so a host can open the row in a new tab with `openRowTarget`. Payload: `(row, event)` — the clicked row and the native auxclick event.
5746
+ * @type {object} The clicked row object.
5747
+ */
5748
+ this.$emit('row-aux-click', row, event)
5749
+ },
5750
+
5751
+ /**
5752
+ * The shared part of a row click and a middle click: on a selectable
5753
+ * page a plain click toggles selection instead, and a named source opens
5754
+ * its own row.
5755
+ *
5756
+ * @param {object} row The clicked row object
5757
+ * @param {MouseEvent|KeyboardEvent} [event] The originating event.
5758
+ * @return {boolean} Whether the click navigates, so the caller emits.
5759
+ */
5760
+ routeClickedRow(row, event) {
5578
5761
  if (this.selectable && !this.rowClickOpens) {
5579
5762
  if (!event || event.button === undefined || event.button === 0) {
5580
5763
  this.onSelect(this.toggleIdInArray(this.internalSelectedIds, row[this.rowKey]))
5581
5764
  }
5582
- return
5765
+ return false
5583
5766
  }
5584
5767
  // A named source knows where its rows live. Emitting only would leave
5585
5768
  // the click inert on a manifest page, which has no listener to bind —
@@ -5626,11 +5809,7 @@ export default {
5626
5809
  }
5627
5810
  }
5628
5811
  }
5629
- /**
5630
- * @event row-click Emitted on a row/card click (or middle click) for navigation. Fires when `selectable` is false, OR when `rowClickToView` is set and something can open the row (selection then happens via the checkbox). Payload: `(row, event)` — the clicked row and the native click/auxclick event (absent for a keyboard shortcut or map marker), so a host can open the row in a new tab on a ctrl/cmd/shift or middle click with `openRowTarget`.
5631
- * @type {object} The clicked row object.
5632
- */
5633
- this.$emit('row-click', ...(event ? [row, event] : [row]))
5812
+ return true
5634
5813
  },
5635
5814
 
5636
5815
  /**
@@ -5644,17 +5823,31 @@ export default {
5644
5823
  return typeof Event !== 'undefined' && value instanceof Event
5645
5824
  },
5646
5825
 
5826
+ /**
5827
+ * Mousedown on a custom list/card component's root: when a middle click
5828
+ * opens the row, keep the browser from starting autoscroll.
5829
+ *
5830
+ * @param {MouseEvent} event The mousedown event.
5831
+ * @return {void}
5832
+ */
5833
+ onCustomItemMouseDown(event) {
5834
+ if (!this.selectable || this.rowClickOpens) {
5835
+ preventMiddleClickAutoscroll(event)
5836
+ }
5837
+ },
5838
+
5647
5839
  /**
5648
5840
  * Middle click on a custom list/card component's root: open the row
5649
- * like a click would.
5841
+ * like a middle click on a built-in card would. Skipped when something
5842
+ * inside the component already opened it in a new tab.
5650
5843
  *
5651
5844
  * @param {object} row The component's row.
5652
5845
  * @param {MouseEvent} event The auxclick event.
5653
5846
  * @return {void}
5654
5847
  */
5655
5848
  onCustomItemAuxClick(row, event) {
5656
- if (isRowMiddleClick(event)) {
5657
- this.onRowClick(row, event)
5849
+ if (isRowMiddleClick(event) && !isNewTabHandled(event)) {
5850
+ this.onRowAuxClick(row, event)
5658
5851
  }
5659
5852
  },
5660
5853
 
@@ -37,19 +37,39 @@ function resolveRowToken(value, row) {
37
37
  }
38
38
 
39
39
  /**
40
- * The route params a `handler: "navigate"` action pushes for a row: the row id,
41
- * overridden by the declared `params` after the `{field}` token grammar. A
42
- * token naming a field the row lacks is dropped.
40
+ * The implicit `{ id }` param for a row, only when the named route declares
41
+ * `:id`: vue-router warns about (and drops) a param its path does not take.
42
+ * Without a router to ask, or for a route it does not know, the id is kept.
43
43
  *
44
- * @param {object} action Manifest action descriptor.
44
+ * @param {object} [router] The app's router.
45
+ * @param {string} name The route name.
45
46
  * @param {object} row The row.
46
47
  * @param {string} rowKey The row's id field.
48
+ * @return {object} `{ id }`, or an empty object.
49
+ */
50
+ function rowIdParam(router, name, row, rowKey) {
51
+ const routes = typeof router?.getRoutes === 'function' ? router.getRoutes() : null
52
+ const route = routes ? routes.find((r) => r.name === name) : null
53
+ if (route && !/:id\b/.test(route.path)) {
54
+ return {}
55
+ }
56
+ return { id: row?.[rowKey] }
57
+ }
58
+
59
+ /**
60
+ * The route params a `handler: "navigate"` action pushes for a row: the row id
61
+ * (when the route takes one), overridden by the declared `params` after the
62
+ * `{field}` token grammar. A token naming a field the row lacks is dropped.
63
+ *
64
+ * @param {object} action Manifest action descriptor.
65
+ * @param {object} row The row.
66
+ * @param {object} ctx Dispatch context (`rowKey`, `router`).
47
67
  * @param {boolean} warn Whether to warn about a dropped param.
48
68
  * @return {object} The params.
49
69
  */
50
- function navigateParams(action, row, rowKey, warn) {
70
+ function navigateParams(action, row, ctx, warn) {
51
71
  const declaredParams = (action.params && typeof action.params === 'object') ? action.params : null
52
- const params = { id: row?.[rowKey] }
72
+ const params = rowIdParam(ctx.router, action.route, row, ctx.rowKey)
53
73
  for (const [key, declared] of Object.entries(declaredParams || {})) {
54
74
  const { resolved, value } = resolveRowToken(declared, row)
55
75
  if (resolved) {
@@ -88,7 +108,7 @@ export function resolveActionTarget(action, row, ctx, warn = false) {
88
108
  return null
89
109
  }
90
110
  if (type === 'open-page') {
91
- return { target: { name: target, params: { id: row?.[ctx.rowKey] } }, external: false }
111
+ return { target: { name: target, params: rowIdParam(ctx.router, target, row, ctx.rowKey) }, external: false }
92
112
  }
93
113
  return { target, external: isExternalActionTarget(target) }
94
114
  }
@@ -96,7 +116,7 @@ export function resolveActionTarget(action, row, ctx, warn = false) {
96
116
  if (typeof action.route !== 'string' || action.route.length === 0) {
97
117
  return null
98
118
  }
99
- return { target: { name: action.route, params: navigateParams(action, row, ctx.rowKey, warn) }, external: false }
119
+ return { target: { name: action.route, params: navigateParams(action, row, ctx, warn) }, external: false }
100
120
  }
101
121
  return null
102
122
  }
@@ -115,8 +135,8 @@ export function resolveActionTarget(action, row, ctx, warn = false) {
115
135
  * - `open-modal` → not wired for index actions; falls back to `@action`.
116
136
  *
117
137
  * Handler dispatch (`type: 'handler'`, the default) reads `action.handler`:
118
- * - `navigate` → $router.push to `action.route` with `{ id: row[rowKey] }`,
119
- * merged with the `action.params` map (declared params win — so a
138
+ * - `navigate` → $router.push to `action.route` with `{ id: row[rowKey] }`
139
+ * (when the route declares `:id`), merged with the `action.params` map (declared params win — so a
120
140
  * "New X" action can navigate to a detail route with `{ id: "new" }`).
121
141
  * Param strings run the `{field}` row-token grammar: `"{id}"` resolves to
122
142
  * `row.id` (type preserved), `"item-{id}"` interpolates, and a brace-less
@@ -187,7 +207,7 @@ export function resolveActionHandler(action, ctx) {
187
207
  // `{field}` row-token grammar first — an unresolved token is dropped
188
208
  // rather than pushed as a literal `%7Bid%7D` path segment.
189
209
  return (row) => {
190
- ctx.router.push({ name: route, params: navigateParams(action, row, ctx.rowKey, true) })
210
+ ctx.router.push({ name: route, params: navigateParams(action, row, ctx, true) })
191
211
  }
192
212
  }
193
213
 
@@ -25,8 +25,7 @@
25
25
  <NcButton
26
26
  variant="primary"
27
27
  :href="docsUrl"
28
- target="_blank"
29
- rel="noopener">
28
+ target="_blank">
30
29
  <template #icon>
31
30
  <OpenInNew :size="18" />
32
31
  </template>
@@ -38,7 +38,6 @@
38
38
  variant="tertiary"
39
39
  :href="savedHref"
40
40
  target="_blank"
41
- rel="noopener noreferrer"
42
41
  data-testid="cn-interaction-form-open">
43
42
  <template #icon>
44
43
  <OpenInNew :size="20" />
@@ -420,10 +420,9 @@ export default {
420
420
  * @return {void}
421
421
  */
422
422
  dispatchAction({ actionType, url, value }) {
423
+ // An `external` entry with a URL is a real link (see linkAttrsFor);
424
+ // one without a URL has nothing to open.
423
425
  switch (actionType) {
424
- case ACTION_TYPES.EXTERNAL:
425
- this.handleExternal(url)
426
- break
427
426
  case ACTION_TYPES.INTERNAL:
428
427
  this.$emit('internal-action', url)
429
428
  break
@@ -434,20 +433,6 @@ export default {
434
433
  break
435
434
  }
436
435
  },
437
-
438
- /**
439
- * Open an external URL in a new tab; `noopener,noreferrer` prevents
440
- * the opened page reaching back via `window.opener`.
441
- *
442
- * @param {string} url the URL to open.
443
- * @return {void}
444
- */
445
- handleExternal(url) {
446
- if (typeof url !== 'string' || url === '') {
447
- return
448
- }
449
- window.open(url, '_blank', 'noopener,noreferrer')
450
- },
451
436
  },
452
437
  }
453
438
  </script>
@@ -89,7 +89,8 @@
89
89
  :sortKeys="effectiveSortKeys"
90
90
  :emptyText="emptyText"
91
91
  @sort="onSort"
92
- @rowClick="onRowClick">
92
+ @rowClick="onRowClick"
93
+ @rowAuxClick="onRowAuxClick">
93
94
  <template
94
95
  v-for="col in slotColumns"
95
96
  #[`column-${col}`]="{ row, value }">
@@ -484,14 +485,21 @@ export default {
484
485
  */
485
486
  'action',
486
487
  /**
487
- * @event row-click Emitted when a log row's body is clicked or
488
- * middle-clicked, whether or not `rowDetail` opened the detail dialog —
489
- * so a host can navigate instead of (or as well as) showing the dialog.
490
- * Payload: `(row, event)`, the second being the native click/auxclick
491
- * event.
488
+ * @event row-click Emitted when a log row's body is clicked, whether or
489
+ * not `rowDetail` opened the detail dialog — so a host can navigate
490
+ * instead of (or as well as) showing the dialog. Payload: `(row, event)`,
491
+ * the second being the native click event. A middle click emits
492
+ * `row-aux-click` instead.
492
493
  * @type {object}
493
494
  */
494
495
  'row-click',
496
+ /**
497
+ * @event row-aux-click Emitted when a log row's body is middle-clicked,
498
+ * for opening it in a new tab. Payload: `(row, event)`, the second being
499
+ * the native auxclick event.
500
+ * @type {object}
501
+ */
502
+ 'row-aux-click',
495
503
  ],
496
504
 
497
505
  setup(props) {
@@ -994,26 +1002,43 @@ export default {
994
1002
  /**
995
1003
  * Handle a row-body click: navigate to `rowRoute` when one is declared,
996
1004
  * else open the detail dialog when `rowDetail` is set. Always re-emits
997
- * so a host can do its own thing regardless. A ctrl/cmd/shift or middle
998
- * click opens `rowRoute` in a new tab; a middle click never opens the
999
- * dialog.
1005
+ * so a host can do its own thing regardless. A ctrl/cmd/shift click
1006
+ * opens `rowRoute` in a new tab.
1000
1007
  *
1001
1008
  * @param {object} row The clicked log entry.
1002
- * @param {MouseEvent} [event] The originating click/auxclick event.
1009
+ * @param {MouseEvent} [event] The originating click event.
1003
1010
  */
1004
1011
  onRowClick(row, event) {
1005
1012
  if (this.rowRoute) {
1006
1013
  markNewTabHandled(event, openRowTarget(event, { name: this.rowRoute, params: { id: row?.[this.rowKey] } }, this.$router))
1007
- } else if (this.rowDetail && !(event && event.button === 1)) {
1014
+ } else if (this.rowDetail) {
1008
1015
  this.detailRow = row
1009
1016
  }
1010
1017
  /**
1011
- * @event row-click Emitted when a log row's body is clicked or middle-clicked. Payload: `(row, event)` — the log entry and the native click/auxclick event.
1018
+ * @event row-click Emitted when a log row's body is clicked. Payload: `(row, event)` — the log entry and the native click event.
1012
1019
  * @type {object}
1013
1020
  */
1014
1021
  this.$emit('row-click', row, event)
1015
1022
  },
1016
1023
 
1024
+ /**
1025
+ * Handle a row-body middle click: open `rowRoute` in a new tab, never
1026
+ * the detail dialog, and emit `row-aux-click` rather than `row-click`.
1027
+ *
1028
+ * @param {object} row The clicked log entry.
1029
+ * @param {MouseEvent} event The originating auxclick event.
1030
+ */
1031
+ onRowAuxClick(row, event) {
1032
+ if (this.rowRoute) {
1033
+ markNewTabHandled(event, openRowTarget(event, { name: this.rowRoute, params: { id: row?.[this.rowKey] } }, this.$router))
1034
+ }
1035
+ /**
1036
+ * @event row-aux-click Emitted when a log row's body is middle-clicked. Payload: `(row, event)` — the log entry and the native auxclick event.
1037
+ * @type {object}
1038
+ */
1039
+ this.$emit('row-aux-click', row, event)
1040
+ },
1041
+
1017
1042
  /** Close the row-detail dialog. */
1018
1043
  closeDetail() {
1019
1044
  this.detailRow = null
@@ -0,0 +1,40 @@
1
+ A step with one thing done and two to go:
2
+
3
+ ```vue
4
+ <CnNextStepCard
5
+ title="What now? Step 2: handling"
6
+ :items="[
7
+ { label: 'Receipt confirmed to the resident', done: true },
8
+ { label: 'Review the 3 documents that are still open', hint: '2 of 5 done' },
9
+ { label: 'Draft the decision' },
10
+ ]"
11
+ action-label="Continue reviewing"
12
+ after="Then: step 3, decision" />
13
+ ```
14
+
15
+ A checklist only, with no button:
16
+
17
+ ```vue
18
+ <CnNextStepCard
19
+ :items="[
20
+ { label: 'Inform the resident', done: true },
21
+ { label: 'Archive the case', done: true },
22
+ ]" />
23
+ ```
24
+
25
+ As a page section, with the button waiting for its request. `title-tag` sets the heading level, `action-id` gives the button an id a skip link can target, and `done-label` and `todo-label` are the states a screen reader hears:
26
+
27
+ ```vue
28
+ <CnNextStepCard
29
+ title="What now?"
30
+ title-tag="h2"
31
+ action-label="Publish"
32
+ action-id="case-primary-action"
33
+ :action-disabled="true"
34
+ done-label="Klaar"
35
+ todo-label="Nog doen"
36
+ :items="[
37
+ { label: 'Check what can be made public', done: true },
38
+ { label: 'Create the publication' },
39
+ ]" />
40
+ ```