@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
@@ -0,0 +1,55 @@
1
+ Five documents, two reviewed:
2
+
3
+ ```vue
4
+ <CnDocumentReviewList
5
+ title="Review documents"
6
+ :documents="[
7
+ { id: 1, name: 'Advice on street lighting', meta: 'PDF, from the resident file', reviewStatus: 'public' },
8
+ { id: 2, name: 'Mail from the contractor about planning', meta: 'E-mail, 12 March 2026', reviewStatus: 'partly-public' },
9
+ { id: 3, name: 'Council proposal', meta: 'PDF, already published', reviewStatus: 'to-review' },
10
+ { id: 4, name: 'Internal budget note', meta: 'Word, 2 February 2026' },
11
+ { id: 5, name: 'Quote for lamp posts', meta: 'PDF, 20 January 2026' },
12
+ ]" />
13
+ ```
14
+
15
+ Your own status field and values:
16
+
17
+ ```vue
18
+ <CnDocumentReviewList
19
+ title="Check attachments"
20
+ status-field="verdict"
21
+ row-action-label="Open"
22
+ :statuses="[
23
+ { value: 'approved', label: 'Approved', variant: 'success', reviewed: true },
24
+ { value: 'rejected', label: 'Rejected', variant: 'error', reviewed: true },
25
+ { value: 'open', label: 'Not checked' },
26
+ ]"
27
+ :documents="[
28
+ { id: 1, name: 'Passport copy', verdict: 'approved' },
29
+ { id: 2, name: 'Bank statement', verdict: 'open' },
30
+ ]" />
31
+ ```
32
+
33
+ Nothing to review:
34
+
35
+ ```vue
36
+ <CnDocumentReviewList title="Review documents" :documents="[]" />
37
+ ```
38
+
39
+ Records that name their fields differently. `name-field`, `meta-field`, `href-field` and `row-key` say where to look, `default-status` is the status of a document that carries none, and `title-tag` and `empty-text` adjust the heading and the empty state:
40
+
41
+ ```vue
42
+ <CnDocumentReviewList
43
+ title="Review documents"
44
+ title-tag="h2"
45
+ name-field="filename"
46
+ meta-field="description"
47
+ href-field="downloadUrl"
48
+ row-key="uuid"
49
+ default-status="to-review"
50
+ empty-text="This request has no documents yet."
51
+ :documents="[
52
+ { uuid: 'a1', filename: 'advice.pdf', description: 'PDF, 240 kB', downloadUrl: '#advice', reviewStatus: 'public' },
53
+ { uuid: 'b2', filename: 'note.docx', description: 'Word, 18 kB' },
54
+ ]" />
55
+ ```
@@ -0,0 +1,384 @@
1
+ <!--
2
+ - SPDX-FileCopyrightText: 2026 Conduction B.V.
3
+ - SPDX-License-Identifier: EUPL-1.2
4
+ -->
5
+
6
+ <template>
7
+ <section
8
+ class="cn-document-review-list"
9
+ data-testid="cn-document-review-list"
10
+ :aria-labelledby="title ? titleId : null"
11
+ :aria-label="title ? null : fallbackLabel">
12
+ <div v-if="title || rows.length > 0" class="cn-document-review-list__header">
13
+ <component
14
+ :is="titleTag"
15
+ v-if="title"
16
+ :id="titleId"
17
+ class="cn-document-review-list__title">
18
+ {{ title }}
19
+ </component>
20
+ <span
21
+ v-if="rows.length > 0"
22
+ class="cn-document-review-list__summary"
23
+ data-testid="cn-document-review-summary">
24
+ {{ summary }}
25
+ </span>
26
+ </div>
27
+
28
+ <p v-if="rows.length === 0" class="cn-document-review-list__empty" data-testid="cn-document-review-empty">
29
+ {{ emptyText }}
30
+ </p>
31
+
32
+ <ul v-else class="cn-document-review-list__rows">
33
+ <li
34
+ v-for="row in rows"
35
+ :key="row.key"
36
+ class="cn-document-review-list__row"
37
+ data-testid="cn-document-review-row">
38
+ <FileDocumentOutline class="cn-document-review-list__icon" :size="22" aria-hidden="true" />
39
+ <span class="cn-document-review-list__text">
40
+ <a
41
+ v-if="row.href"
42
+ class="cn-document-review-list__name"
43
+ :href="row.href">
44
+ {{ row.name }}
45
+ </a>
46
+ <span v-else class="cn-document-review-list__name">{{ row.name }}</span>
47
+ <span v-if="row.meta" class="cn-document-review-list__meta">{{ row.meta }}</span>
48
+ </span>
49
+ <CnStatusBadge
50
+ class="cn-document-review-list__status"
51
+ :label="row.status.label"
52
+ :variant="row.status.variant" />
53
+ <!-- @slot row-action Replace the row's action button. -->
54
+ <!-- @binding {object} document The row's document. -->
55
+ <!-- @binding {object} status The row's resolved status ({ value, label, variant, reviewed }). -->
56
+ <slot name="row-action" :document="row.document" :status="row.status">
57
+ <NcButton
58
+ v-if="rowActionLabel"
59
+ variant="tertiary"
60
+ :aria-label="`${rowActionLabel}: ${row.name}`"
61
+ data-testid="cn-document-review-action"
62
+ @click="$emit('row-action', row.document)">
63
+ {{ rowActionLabel }}
64
+ </NcButton>
65
+ </slot>
66
+ </li>
67
+ </ul>
68
+ </section>
69
+ </template>
70
+
71
+ <script>
72
+ import { translate as t } from '@nextcloud/l10n'
73
+ import { NcButton } from '@nextcloud/vue'
74
+ import FileDocumentOutline from 'vue-material-design-icons/FileDocumentOutline.vue'
75
+ import { readPath } from '../../utils/readPath.js'
76
+ import { CnStatusBadge } from '../CnStatusBadge/index.js'
77
+
78
+ let documentReviewListUid = 0
79
+
80
+ /**
81
+ * CnDocumentReviewList: files that each need a verdict, and how far along you are.
82
+ *
83
+ * One row per file with its review status, a progress line ("2 of 5 reviewed")
84
+ * and one action per row. Built for a disclosure request, where every document
85
+ * is judged public, partly public or still to review, but the status field and
86
+ * its values are yours to configure.
87
+ *
88
+ * ```vue
89
+ * <CnDocumentReviewList
90
+ * title="Review documents"
91
+ * :documents="[
92
+ * { id: 1, name: 'Advice on street lighting', meta: 'PDF', reviewStatus: 'public' },
93
+ * { id: 2, name: 'Budget note', meta: 'Word, 2 February 2026' },
94
+ * ]"
95
+ * @row-action="openDocument" />
96
+ * ```
97
+ *
98
+ * The `document-review` detail widget type renders this list from a field on
99
+ * the record.
100
+ */
101
+ export default {
102
+ name: 'CnDocumentReviewList',
103
+
104
+ components: {
105
+ CnStatusBadge,
106
+ FileDocumentOutline,
107
+ NcButton,
108
+ },
109
+
110
+ props: {
111
+ /** The documents, one object per row. */
112
+ documents: {
113
+ type: Array,
114
+ default: () => [],
115
+ },
116
+
117
+ /** Heading of the list. */
118
+ title: {
119
+ type: String,
120
+ default: '',
121
+ },
122
+
123
+ /** Element the heading renders as. */
124
+ titleTag: {
125
+ type: String,
126
+ default: 'h3',
127
+ },
128
+
129
+ /** Dot-path to a document's display name. Falls back to `title`, then `filename`. */
130
+ nameField: {
131
+ type: String,
132
+ default: 'name',
133
+ },
134
+
135
+ /** Dot-path to the line under the name (type, date, origin). */
136
+ metaField: {
137
+ type: String,
138
+ default: 'meta',
139
+ },
140
+
141
+ /** Dot-path to a document's review status. */
142
+ statusField: {
143
+ type: String,
144
+ default: 'reviewStatus',
145
+ },
146
+
147
+ /** Dot-path to a URL that opens the document. When a row has one, its name is a link. */
148
+ hrefField: {
149
+ type: String,
150
+ default: 'href',
151
+ },
152
+
153
+ /** Dot-path to the value that identifies a row. */
154
+ rowKey: {
155
+ type: String,
156
+ default: 'id',
157
+ },
158
+
159
+ /**
160
+ * The review statuses: `{ value, label, variant?, reviewed? }` each.
161
+ * `variant` is a CnStatusBadge variant. `reviewed: true` counts the
162
+ * row in the progress line. Empty uses the built-in three: public,
163
+ * partly public and to review.
164
+ */
165
+ statuses: {
166
+ type: Array,
167
+ default: () => [],
168
+ },
169
+
170
+ /**
171
+ * The status of a document that carries none, or one this list does
172
+ * not know. Defaults to the first status that is not `reviewed`.
173
+ */
174
+ defaultStatus: {
175
+ type: String,
176
+ default: '',
177
+ },
178
+
179
+ /** Label of the per-row action button. An empty string renders no button. */
180
+ rowActionLabel: {
181
+ type: String,
182
+ default: () => t('nextcloud-vue', 'Review'),
183
+ },
184
+
185
+ /** Shown when there are no documents. */
186
+ emptyText: {
187
+ type: String,
188
+ default: () => t('nextcloud-vue', 'No documents to review.'),
189
+ },
190
+ },
191
+
192
+ emits: [
193
+ /** A row's action button was pressed. Payload: the document. */
194
+ 'row-action',
195
+ ],
196
+
197
+ data() {
198
+ documentReviewListUid += 1
199
+ return {
200
+ titleId: `cn-document-review-title-${documentReviewListUid}`,
201
+ }
202
+ },
203
+
204
+ computed: {
205
+ /**
206
+ * The statuses in effect: the configured ones, or the built-in three.
207
+ *
208
+ * @return {Array<{value: string, label: string, variant: string, reviewed: boolean}>} The statuses.
209
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
210
+ */
211
+ effectiveStatuses() {
212
+ const configured = (Array.isArray(this.statuses) ? this.statuses : [])
213
+ .filter((status) => status && status.value !== undefined && status.value !== null)
214
+ .map((status) => ({
215
+ value: String(status.value),
216
+ label: typeof status.label === 'string' && status.label !== '' ? status.label : String(status.value),
217
+ variant: typeof status.variant === 'string' && status.variant !== '' ? status.variant : 'default',
218
+ reviewed: status.reviewed === true,
219
+ }))
220
+ if (configured.length > 0) {
221
+ return configured
222
+ }
223
+ return [
224
+ { value: 'public', label: t('nextcloud-vue', 'Public'), variant: 'success', reviewed: true },
225
+ { value: 'partly-public', label: t('nextcloud-vue', 'Partly public'), variant: 'warning', reviewed: true },
226
+ { value: 'to-review', label: t('nextcloud-vue', 'To review'), variant: 'default', reviewed: false },
227
+ ]
228
+ },
229
+
230
+ /**
231
+ * The status a document without a known one falls back to.
232
+ *
233
+ * @return {{value: string, label: string, variant: string, reviewed: boolean}} The fallback status.
234
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
235
+ */
236
+ fallbackStatus() {
237
+ const statuses = this.effectiveStatuses
238
+ return statuses.find((status) => status.value === this.defaultStatus)
239
+ || statuses.find((status) => !status.reviewed)
240
+ || statuses[0]
241
+ },
242
+
243
+ /**
244
+ * The rows, with everything the template needs resolved.
245
+ *
246
+ * @return {Array<{key: string, name: string, meta: string, href: string, status: object, document: object}>} The rows.
247
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
248
+ */
249
+ rows() {
250
+ return (Array.isArray(this.documents) ? this.documents : [])
251
+ .filter((document) => document && typeof document === 'object')
252
+ .map((document, index) => {
253
+ const raw = readPath(document, this.statusField)
254
+ const wanted = raw === null || raw === undefined ? '' : String(raw).toLowerCase()
255
+ const status = this.effectiveStatuses.find((candidate) => candidate.value.toLowerCase() === wanted)
256
+ || this.fallbackStatus
257
+ const name = readPath(document, this.nameField) || document.title || document.filename || ''
258
+ const key = readPath(document, this.rowKey)
259
+ const href = readPath(document, this.hrefField)
260
+ const meta = readPath(document, this.metaField)
261
+ return {
262
+ key: key === undefined || key === null ? `row-${index}` : String(key),
263
+ name: String(name),
264
+ meta: typeof meta === 'string' ? meta : '',
265
+ href: typeof href === 'string' ? href : '',
266
+ status,
267
+ document,
268
+ }
269
+ })
270
+ },
271
+
272
+ /**
273
+ * How many rows carry a reviewed status.
274
+ *
275
+ * @return {number} The count.
276
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
277
+ */
278
+ reviewedCount() {
279
+ return this.rows.filter((row) => row.status.reviewed).length
280
+ },
281
+
282
+ /**
283
+ * The progress line, for example "2 of 5 reviewed".
284
+ *
285
+ * @return {string} The summary.
286
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
287
+ */
288
+ summary() {
289
+ return t('nextcloud-vue', '{reviewed} of {total} reviewed', {
290
+ reviewed: this.reviewedCount,
291
+ total: this.rows.length,
292
+ })
293
+ },
294
+
295
+ /**
296
+ * Accessible name for a list without a title.
297
+ *
298
+ * @return {string} The label.
299
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
300
+ */
301
+ fallbackLabel() {
302
+ return t('nextcloud-vue', 'Documents to review')
303
+ },
304
+ },
305
+ }
306
+ </script>
307
+
308
+ <style scoped>
309
+ .cn-document-review-list {
310
+ display: flex;
311
+ flex-direction: column;
312
+ gap: calc(1.5 * var(--default-grid-baseline));
313
+ }
314
+
315
+ .cn-document-review-list__header {
316
+ align-items: center;
317
+ display: flex;
318
+ flex-wrap: wrap;
319
+ gap: calc(2 * var(--default-grid-baseline));
320
+ justify-content: space-between;
321
+ margin-bottom: calc(2 * var(--default-grid-baseline));
322
+ }
323
+
324
+ .cn-document-review-list__title {
325
+ font-size: 1.1em;
326
+ font-weight: 700;
327
+ margin: 0;
328
+ }
329
+
330
+ .cn-document-review-list__summary,
331
+ .cn-document-review-list__meta,
332
+ .cn-document-review-list__empty {
333
+ color: var(--color-text-maxcontrast);
334
+ }
335
+
336
+ .cn-document-review-list__empty {
337
+ margin: 0;
338
+ }
339
+
340
+ .cn-document-review-list__rows {
341
+ list-style: none;
342
+ margin: 0;
343
+ padding: 0;
344
+ }
345
+
346
+ .cn-document-review-list__row {
347
+ align-items: center;
348
+ border-top: 1px solid var(--color-border);
349
+ display: flex;
350
+ flex-wrap: wrap;
351
+ gap: calc(3 * var(--default-grid-baseline));
352
+ padding: calc(2.5 * var(--default-grid-baseline)) 0;
353
+ }
354
+
355
+ .cn-document-review-list__icon {
356
+ color: var(--color-text-maxcontrast);
357
+ flex: none;
358
+ }
359
+
360
+ .cn-document-review-list__text {
361
+ display: flex;
362
+ flex: 1 1 220px;
363
+ flex-direction: column;
364
+ min-width: 0;
365
+ }
366
+
367
+ .cn-document-review-list__name {
368
+ font-weight: 500;
369
+ overflow-wrap: anywhere;
370
+ }
371
+
372
+ a.cn-document-review-list__name {
373
+ color: var(--color-primary-element);
374
+ text-decoration: underline;
375
+ }
376
+
377
+ .cn-document-review-list__meta {
378
+ font-size: 0.9em;
379
+ }
380
+
381
+ .cn-document-review-list__status {
382
+ flex: none;
383
+ }
384
+ </style>
@@ -0,0 +1,108 @@
1
+ <!--
2
+ - SPDX-FileCopyrightText: 2026 Conduction B.V.
3
+ - SPDX-License-Identifier: EUPL-1.2
4
+ -->
5
+
6
+ <template>
7
+ <div class="cn-case-widget-card">
8
+ <CnDocumentReviewList
9
+ :documents="documents"
10
+ :title="content.title || ''"
11
+ :nameField="content.nameField || 'name'"
12
+ :metaField="content.metaField || 'meta'"
13
+ :statusField="content.statusField || 'reviewStatus'"
14
+ :hrefField="content.hrefField || 'href'"
15
+ :rowKey="content.rowKey || 'id'"
16
+ :statuses="content.statuses || []"
17
+ :defaultStatus="content.defaultStatus || ''"
18
+ :rowActionLabel="rowActionLabel"
19
+ :emptyText="content.emptyText || undefined"
20
+ @rowAction="onRowAction" />
21
+ </div>
22
+ </template>
23
+
24
+ <script>
25
+ import CnDocumentReviewList from './CnDocumentReviewList.vue'
26
+ import { readPath } from '../../utils/readPath.js'
27
+
28
+ /**
29
+ * CnDocumentReviewWidget: the `document-review` detail widget type.
30
+ *
31
+ * Renders CnDocumentReviewList from a list on the bound record:
32
+ * `content: { field, title?, statusField?, statuses?, rowAction?: { label, route } }`.
33
+ * A row action with a `route` opens that route with the row's key as `id`.
34
+ * Resolved by its registry key, not exported.
35
+ */
36
+ export default {
37
+ name: 'CnDocumentReviewWidget',
38
+
39
+ components: {
40
+ CnDocumentReviewList,
41
+ },
42
+
43
+ props: {
44
+ /** The widget's content. `field` is the dot-path to the documents on the record. */
45
+ content: {
46
+ type: Object,
47
+ default: () => ({}),
48
+ },
49
+
50
+ /** The bound record. */
51
+ objectData: {
52
+ type: Object,
53
+ default: null,
54
+ },
55
+ },
56
+
57
+ computed: {
58
+ /**
59
+ * The documents read off the record.
60
+ *
61
+ * @return {Array<object>} The documents, or an empty list.
62
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
63
+ */
64
+ documents() {
65
+ const value = readPath(this.objectData || {}, this.content.field || 'documents')
66
+ return Array.isArray(value) ? value : []
67
+ },
68
+
69
+ /**
70
+ * The row action's label. Empty, and so no button, unless the content declares one.
71
+ *
72
+ * @return {string} The label.
73
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
74
+ */
75
+ rowActionLabel() {
76
+ const label = this.content.rowAction?.label
77
+ return typeof label === 'string' ? label : ''
78
+ },
79
+ },
80
+
81
+ methods: {
82
+ /**
83
+ * Open the route the row action names, with the row's key as `id`.
84
+ *
85
+ * @param {object} document The row's document.
86
+ * @return {void}
87
+ * @spec openspec/changes/detail-action-model-and-case-surfaces/specs/detail-action-model/spec.md#requirement-document-review-list
88
+ */
89
+ onRowAction(document) {
90
+ const route = this.content.rowAction?.route
91
+ const id = readPath(document, this.content.rowKey || 'id')
92
+ if (typeof route !== 'string' || route === '' || !this.$router || id === undefined || id === null) {
93
+ return
94
+ }
95
+ this.$router.push({ name: route, params: { id: String(id) } })
96
+ },
97
+ },
98
+ }
99
+ </script>
100
+
101
+ <style scoped>
102
+ .cn-case-widget-card {
103
+ background: var(--color-main-background);
104
+ border: 1px solid var(--color-border);
105
+ border-radius: var(--border-radius-large);
106
+ padding: calc(5 * var(--default-grid-baseline));
107
+ }
108
+ </style>
@@ -0,0 +1,4 @@
1
+ import CnDocumentReviewList from './CnDocumentReviewList.vue'
2
+
3
+ export default CnDocumentReviewList
4
+ export { CnDocumentReviewList }
@@ -29,8 +29,7 @@
29
29
  v-if="resolvedSuggestUrl"
30
30
  variant="primary"
31
31
  :href="resolvedSuggestUrl"
32
- target="_blank"
33
- rel="noopener noreferrer">
32
+ target="_blank">
34
33
  <template #icon>
35
34
  <Plus :size="20" />
36
35
  </template>
@@ -180,6 +180,7 @@
180
180
  data-testid="cn-files-browser-row"
181
181
  :data-name="node.basename"
182
182
  @click="onRowClick(node, $event)"
183
+ @mousedown="preventMiddleClickAutoscroll"
183
184
  @auxclick="onRowAuxClick(node, $event)">
184
185
  <td class="cn-files-browser__col-icon">
185
186
  <img
@@ -258,7 +259,6 @@
258
259
  v-if="node.fileid"
259
260
  :href="permalink(node)"
260
261
  target="_blank"
261
- rel="noopener noreferrer"
262
262
  :closeAfterClick="true">
263
263
  <template #icon>
264
264
  <OpenInNew :size="20" />
@@ -278,6 +278,7 @@
278
278
  data-testid="cn-files-browser-linked-row"
279
279
  :data-name="item.name"
280
280
  @click="openLinked(item)"
281
+ @mousedown="preventMiddleClickAutoscroll"
281
282
  @auxclick="onLinkedAuxClick(item, $event)">
282
283
  <td class="cn-files-browser__col-icon">
283
284
  <img
@@ -316,7 +317,6 @@
316
317
  v-if="item.href"
317
318
  :href="item.href"
318
319
  target="_blank"
319
- rel="noopener noreferrer"
320
320
  :closeAfterClick="true"
321
321
  data-testid="cn-files-browser-linked-open">
322
322
  <template #icon>
@@ -473,7 +473,7 @@ import CnCellRenderer from '../CnCellRenderer/CnCellRenderer.vue'
473
473
  import CnIcon from '../CnIcon/CnIcon.vue'
474
474
  import { readUserPreference, writeUserPreference } from '../../composables/useUserPreferences.js'
475
475
  import { dispatchAction } from '../../utils/actionsDispatcher.js'
476
- import { isNewTabClick, isRowMiddleClick } from '../../utils/rowAuxClick.js'
476
+ import { isNewTabClick, isRowMiddleClick, preventMiddleClickAutoscroll } from '../../utils/rowAuxClick.js'
477
477
  import { ACTIONS_NEEDING_THE_FILES_PAGE, crumbsFor, joinPath } from './filesBrowser.js'
478
478
  import {
479
479
  attributePropertiesFor,
@@ -898,6 +898,8 @@ export default {
898
898
  methods: {
899
899
  t,
900
900
 
901
+ preventMiddleClickAutoscroll,
902
+
901
903
  /**
902
904
  * Hold the file input element from its function ref.
903
905
  *
@@ -725,18 +725,14 @@ export default {
725
725
  },
726
726
 
727
727
  /**
728
- * Handle a row click — descend into folders, open files in the Files app.
728
+ * Handle a folder row click by descending into it. A file row is a
729
+ * real link to the Files app and never reaches this.
729
730
  *
730
- * @param {object} item the clicked item.
731
+ * @param {object} item the clicked folder item.
731
732
  * @return {void}
732
733
  */
733
734
  onItemClick(item) {
734
- if (item.isFolder) {
735
- const next = this.joinPath(this.currentSubPath, item.name)
736
- this.navigateTo(next)
737
- } else {
738
- this.openFileInFilesApp(item.fileId)
739
- }
735
+ this.navigateTo(this.joinPath(this.currentSubPath, item.name))
740
736
  },
741
737
 
742
738
  /**
@@ -779,19 +775,6 @@ export default {
779
775
  return `${trimmedBase}/${trimmedName}`
780
776
  },
781
777
 
782
- /**
783
- * Deep-link a file into the Nextcloud Files app in a new tab.
784
- *
785
- * @param {number|string} fileId the Nextcloud file id.
786
- * @return {void}
787
- */
788
- openFileInFilesApp(fileId) {
789
- const url = this.fileUrl(fileId)
790
- if (url) {
791
- window.open(url, '_blank', 'noopener,noreferrer')
792
- }
793
- },
794
-
795
778
  /**
796
779
  * The Files-app permalink for a file.
797
780
  *