@conduction/nextcloud-vue 2.80.0 → 2.81.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 (290) hide show
  1. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  2. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +3 -3
  3. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  4. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +80 -4
  5. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +95 -91
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  8. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +140 -10
  9. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  10. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +52 -16
  11. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  12. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +17 -3
  13. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  14. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +63 -52
  15. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  16. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js +10 -0
  17. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js.map +1 -0
  18. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js +252 -0
  19. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js.map +1 -0
  20. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js +140 -0
  21. package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js.map +1 -0
  22. package/dist/esm/components/CnChipsFieldWidget/index.js +26 -0
  23. package/dist/esm/components/CnChipsFieldWidget/index.js.map +1 -0
  24. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js +10 -0
  25. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js.map +1 -0
  26. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js +354 -0
  27. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js.map +1 -0
  28. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js +172 -0
  29. package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js.map +1 -0
  30. package/dist/esm/components/CnChoicePickerWidget/index.js +27 -0
  31. package/dist/esm/components/CnChoicePickerWidget/index.js.map +1 -0
  32. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +1 -1
  33. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
  34. package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +2 -2
  36. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
  37. package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
  38. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +65 -5
  39. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  40. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -1
  41. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  42. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +19 -11
  43. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  44. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +3 -2
  45. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  46. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +72 -0
  47. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  48. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +21 -4
  49. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  50. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js +1 -1
  51. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js.map +1 -1
  52. package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js.map +1 -1
  53. package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js +7 -7
  54. package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js.map +1 -1
  55. package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue3.js.map +1 -1
  56. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +131 -0
  57. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  58. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  59. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +80 -5
  60. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
  61. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +282 -69
  62. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
  63. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +302 -4
  64. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  65. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +417 -244
  66. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  67. package/dist/esm/components/CnFilesBrowser/filesBrowser.js +101 -1
  68. package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
  69. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js +141 -1
  70. package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js.map +1 -1
  71. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +60 -0
  72. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
  73. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js +74 -49
  74. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
  75. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +29 -2
  76. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  77. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +48 -4
  78. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  79. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +7 -7
  80. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  81. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  82. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js +1 -1
  83. package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js.map +1 -1
  84. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +65 -2
  85. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  86. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +6 -2
  87. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  88. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +63 -1
  89. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  90. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +8 -1
  91. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  92. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +14 -0
  93. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
  94. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js +5 -1
  95. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
  96. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +10 -0
  97. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js.map +1 -0
  98. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +174 -0
  99. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -0
  100. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +75 -0
  101. package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -0
  102. package/dist/esm/components/CnRadioCardsWidget/index.js +28 -0
  103. package/dist/esm/components/CnRadioCardsWidget/index.js.map +1 -0
  104. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +30 -6
  105. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  106. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +34 -25
  107. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  108. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js +10 -0
  109. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js.map +1 -0
  110. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js +222 -0
  111. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js.map +1 -0
  112. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js +64 -0
  113. package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js.map +1 -0
  114. package/dist/esm/components/CnSavedViewsWidget/index.js +30 -0
  115. package/dist/esm/components/CnSavedViewsWidget/index.js.map +1 -0
  116. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
  117. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
  118. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +10 -0
  119. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js.map +1 -0
  120. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +347 -0
  121. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -0
  122. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +184 -0
  123. package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -0
  124. package/dist/esm/components/CnSettingsFormWidget/index.js +27 -0
  125. package/dist/esm/components/CnSettingsFormWidget/index.js.map +1 -0
  126. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +87 -6
  127. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  128. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  129. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +84 -1
  130. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
  131. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +85 -41
  132. package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
  133. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +10 -0
  134. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js.map +1 -0
  135. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +159 -0
  136. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -0
  137. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js +60 -0
  138. package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -0
  139. package/dist/esm/components/CnSwitchRowsWidget/index.js +26 -0
  140. package/dist/esm/components/CnSwitchRowsWidget/index.js.map +1 -0
  141. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +47 -1
  142. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  143. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +16 -14
  144. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  145. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +80 -1
  146. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
  147. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +75 -32
  148. package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
  149. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +10 -0
  150. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js.map +1 -0
  151. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +269 -0
  152. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -0
  153. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js +106 -0
  154. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -0
  155. package/dist/esm/components/CnToggleTableWidget/index.js +27 -0
  156. package/dist/esm/components/CnToggleTableWidget/index.js.map +1 -0
  157. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +7 -0
  158. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  159. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +7 -2
  160. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  161. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  162. package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
  163. package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js.map +1 -1
  164. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +197 -6
  165. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
  166. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +96 -50
  167. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
  168. package/dist/esm/composables/useListView.js +4 -4
  169. package/dist/esm/composables/useListView.js.map +1 -1
  170. package/dist/esm/index.js +17 -1
  171. package/dist/esm/index.js.map +1 -1
  172. package/dist/esm/l10n/en.json.js +9 -1
  173. package/dist/esm/l10n/en.json.js.map +1 -1
  174. package/dist/esm/l10n/nl.json.js +55 -1
  175. package/dist/esm/l10n/nl.json.js.map +1 -1
  176. package/dist/esm/nextcloud-vue.css +1041 -12
  177. package/dist/esm/utils/contentHeaderLink.js +51 -0
  178. package/dist/esm/utils/contentHeaderLink.js.map +1 -0
  179. package/dist/esm/utils/facets.js +75 -3
  180. package/dist/esm/utils/facets.js.map +1 -1
  181. package/dist/esm/utils/fetchFilterCounts.js +40 -5
  182. package/dist/esm/utils/fetchFilterCounts.js.map +1 -1
  183. package/dist/esm/utils/fillTemplate.js +7 -1
  184. package/dist/esm/utils/fillTemplate.js.map +1 -1
  185. package/dist/esm/utils/initials.js +32 -0
  186. package/dist/esm/utils/initials.js.map +1 -0
  187. package/dist/esm/utils/libraryWidgetKeys.js +7 -0
  188. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  189. package/dist/esm/utils/objectWrite.js +59 -0
  190. package/dist/esm/utils/objectWrite.js.map +1 -0
  191. package/dist/esm/utils/pageControls.js +81 -0
  192. package/dist/esm/utils/pageControls.js.map +1 -0
  193. package/dist/esm/utils/personalLenses.js +40 -3
  194. package/dist/esm/utils/personalLenses.js.map +1 -1
  195. package/dist/esm/utils/resolveFilterTokens.js +1 -1
  196. package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
  197. package/dist/esm/utils/resolveManifestTokens.js +2 -0
  198. package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
  199. package/dist/esm/utils/sentinelTokens.js +19 -1
  200. package/dist/esm/utils/sentinelTokens.js.map +1 -1
  201. package/dist/esm/utils/userGroupsPeek.js +91 -0
  202. package/dist/esm/utils/userGroupsPeek.js.map +1 -0
  203. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  204. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  205. package/dist/esm/utils/visibleWhen.js +57 -5
  206. package/dist/esm/utils/visibleWhen.js.map +1 -1
  207. package/dist/esm/utils/widgetDispatch.js +1 -1
  208. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  209. package/dist/esm/utils/widgetVisibility.js +4 -57
  210. package/dist/esm/utils/widgetVisibility.js.map +1 -1
  211. package/dist/nextcloud-vue.cjs.js +13589 -7833
  212. package/dist/nextcloud-vue.cjs.js.map +2 -2
  213. package/dist/nextcloud-vue.css +1041 -12
  214. package/l10n/en.json +9 -1
  215. package/l10n/nl.json +55 -1
  216. package/package.json +2 -1
  217. package/scripts/check-docs-mdx.mjs +108 -0
  218. package/src/components/CnActionsBar/CnActionsBar.vue +6 -1
  219. package/src/components/CnAppRoot/CnAppRoot.md +4 -2
  220. package/src/components/CnAppRoot/CnAppRoot.vue +151 -59
  221. package/src/components/CnBannerWidget/CnBannerWidget.vue +205 -20
  222. package/src/components/CnCellRenderer/CnCellRenderer.md +2 -0
  223. package/src/components/CnCellRenderer/CnCellRenderer.vue +47 -4
  224. package/src/components/CnChipsFieldWidget/CnChipsFieldWidget.vue +433 -0
  225. package/src/components/CnChipsFieldWidget/index.js +25 -0
  226. package/src/components/CnChoicePickerWidget/CnChoicePickerWidget.vue +556 -0
  227. package/src/components/CnChoicePickerWidget/index.js +26 -0
  228. package/src/components/CnConversationThread/CnConversationWidget.vue +1 -1
  229. package/src/components/CnDashboardGrid/CnDashboardGrid.vue +2 -2
  230. package/src/components/CnDashboardPage/CnDashboardPage.vue +78 -5
  231. package/src/components/CnDataTable/CnDataTable.vue +21 -12
  232. package/src/components/CnDetailPage/CnDetailPage.vue +89 -3
  233. package/src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue +1 -1
  234. package/src/components/CnFacetSidebar/CnFacetSidebar.vue +7 -7
  235. package/src/components/CnFactsWidget/CnFactsWidget.vue +142 -2
  236. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +268 -6
  237. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +588 -117
  238. package/src/components/CnFilesBrowser/filesBrowser.js +100 -0
  239. package/src/components/CnFilesBrowser/filesBrowserColumns.js +140 -0
  240. package/src/components/CnFormPage/CnFormPage.vue +81 -0
  241. package/src/components/CnIndexPage/CnIndexPage.vue +56 -4
  242. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +7 -7
  243. package/src/components/CnNextStepCard/CnNextStepWidget.vue +1 -1
  244. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +69 -2
  245. package/src/components/CnObjectSidebar/CnFilesTab.vue +70 -1
  246. package/src/components/CnObjectSidebar/CnNotesTab.vue +16 -0
  247. package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +313 -0
  248. package/src/components/CnRadioCardsWidget/index.js +27 -0
  249. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +55 -6
  250. package/src/components/CnSavedViewsWidget/CnSavedViewsWidget.vue +296 -0
  251. package/src/components/CnSavedViewsWidget/index.js +29 -0
  252. package/src/components/CnSegmentedControl/CnSegmentedControl.vue +13 -0
  253. package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +555 -0
  254. package/src/components/CnSettingsFormWidget/index.js +26 -0
  255. package/src/components/CnStatWidget/CnStatWidget.vue +87 -6
  256. package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +180 -3
  257. package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +226 -0
  258. package/src/components/CnSwitchRowsWidget/index.js +25 -0
  259. package/src/components/CnTabsWidget/CnTabsWidget.vue +82 -3
  260. package/src/components/CnTasksWidget/CnTasksWidget.vue +175 -15
  261. package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +386 -0
  262. package/src/components/CnToggleTableWidget/index.js +26 -0
  263. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +7 -0
  264. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +7 -2
  265. package/src/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
  266. package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +309 -11
  267. package/src/components/index.js +15 -0
  268. package/src/composables/useListView.js +4 -4
  269. package/src/css/look-board-detail.css +36 -2
  270. package/src/css/look-board-index.css +39 -8
  271. package/src/css/look-board.css +72 -0
  272. package/src/index.js +15 -0
  273. package/src/schemas/app-manifest-v2.schema.json +93 -9
  274. package/src/utils/contentHeaderLink.js +48 -0
  275. package/src/utils/facets.js +74 -2
  276. package/src/utils/fetchFilterCounts.js +39 -4
  277. package/src/utils/fillTemplate.js +7 -1
  278. package/src/utils/initials.js +29 -0
  279. package/src/utils/libraryWidgetKeys.js +7 -0
  280. package/src/utils/objectWrite.js +55 -0
  281. package/src/utils/pageControls.js +78 -0
  282. package/src/utils/personalLenses.js +39 -2
  283. package/src/utils/resolveFilterTokens.js +3 -1
  284. package/src/utils/resolveManifestTokens.js +2 -0
  285. package/src/utils/sentinelTokens.js +19 -1
  286. package/src/utils/userGroupsPeek.js +87 -0
  287. package/src/utils/validateManifestV2.compiled.js +3 -3
  288. package/src/utils/visibleWhen.js +56 -4
  289. package/src/utils/widgetDispatch.js +1 -1
  290. package/src/utils/widgetVisibility.js +7 -56
@@ -22,8 +22,8 @@ import __sfc_main$1 from '../CnIcon/CnIcon.vue.js';
22
22
  import { readUserPreference, writeUserPreference } from '../../composables/useUserPreferences.js';
23
23
  import { dispatchAction } from '../../utils/actionsDispatcher.js';
24
24
  import { preventMiddleClickAutoscroll, isNewTabClick, isRowMiddleClick } from '../../utils/rowAuxClick.js';
25
- import { crumbsFor, ACTIONS_NEEDING_THE_FILES_PAGE, joinPath } from './filesBrowser.js';
26
- import { sortNodesByColumn, normaliseFileColumns, visibleFileColumns, attributePropertiesFor, fileColumnValue } from './filesBrowserColumns.js';
25
+ import { crumbsFor, ACTIONS_NEEDING_THE_FILES_PAGE, joinPath, hostActionApplies } from './filesBrowser.js';
26
+ import { sortNodesByColumn, normaliseFileColumns, visibleFileColumns, facetCounts, nodeMatchesFacets, groupNodes, attributePropertiesFor, fileColumnValue } from './filesBrowserColumns.js';
27
27
 
28
28
  let uploadSeq = 0;
29
29
 
@@ -99,9 +99,11 @@ var script = {
99
99
  * dispatched through the page's action runner with the node's
100
100
  * `fileId`, `fileName` and `path` merged into an `open-modal` action's
101
101
  * props (or appended as the node to a `handler` action's args). Folders
102
- * get none. `icon` is an MDI icon name.
102
+ * get none. `icon` is an MDI icon name. `visibleIf` offers the action
103
+ * only on some files: `extension` (a list, no case) and `mime` (a list;
104
+ * `image/` or `image/*` names the family), each that is named must hold.
103
105
  *
104
- * @type {Array<{id: string, label: string, icon?: string, type?: string, target?: string, props?: object, handler?: string, args?: Array}>}
106
+ * @type {Array<{id: string, label: string, icon?: string, type?: string, target?: string, props?: object, handler?: string, args?: Array, visibleIf?: {extension?: string[], mime?: string[]}}>}
105
107
  */
106
108
  rowActions: {
107
109
  type: Array,
@@ -321,6 +323,52 @@ var script = {
321
323
  default: 'files-browser-columns',
322
324
  },
323
325
 
326
+ /**
327
+ * The host's actions on a selection of files, declared like
328
+ * `rowActions`. With at least one, every file row (never a folder or a
329
+ * linked row) gets a checkbox, the header a select-all, and a bar with
330
+ * these actions shows while files are selected. An `open-modal`
331
+ * action's props gain `files` (each `{ fileId, fileName, path }`) and
332
+ * `fileIds`; a `handler` action's args gain the selected nodes. The
333
+ * selection clears after an action and when another folder opens.
334
+ *
335
+ * @type {Array<{id: string, label: string, icon?: string, type?: string, target?: string, props?: object, handler?: string, args?: Array}>}
336
+ */
337
+ bulkActions: {
338
+ type: Array,
339
+ default: () => [],
340
+ },
341
+
342
+ /**
343
+ * The key of a declared column to group the files on: a heading row
344
+ * per value, in the order each is first met, with its count. Files
345
+ * with no value come last under `groupEmptyLabel`; folders stay above.
346
+ * Empty (the default) does not group.
347
+ */
348
+ groupBy: {
349
+ type: String,
350
+ default: '',
351
+ },
352
+
353
+ /** The heading of the group of files with no value in the `groupBy` column. */
354
+ groupEmptyLabel: {
355
+ type: String,
356
+ default: () => translate('nextcloud-vue', 'Other'),
357
+ },
358
+
359
+ /**
360
+ * Keys of declared columns to filter on. Each gets a chip per value in
361
+ * use among the folder's files (a list counts per entry) with how many
362
+ * files carry it; chosen chips keep the files with any chosen value of
363
+ * that column, across every column with a choice.
364
+ *
365
+ * @type {string[]}
366
+ */
367
+ facets: {
368
+ type: Array,
369
+ default: () => [],
370
+ },
371
+
324
372
  /** Label of the toolbar's Columns chooser. */
325
373
  columnsLabel: {
326
374
  type: String,
@@ -343,6 +391,10 @@ var script = {
343
391
  sortAsc: true,
344
392
  /** The host's per-file data for `row` columns, by file id. */
345
393
  resolvedRowData: null,
394
+ /** File ids (as strings) of the selected files. */
395
+ selectedIds: [],
396
+ /** Chosen facet values by column key. */
397
+ facetSelections: {},
346
398
  /**
347
399
  * The column keys this user chose to see, or null while they have
348
400
  * chosen nothing. Never a source of membership: it is intersected
@@ -473,6 +525,149 @@ var script = {
473
525
  return visibleFileColumns(this.declaredColumns, this.visibleColumnKeys)
474
526
  },
475
527
 
528
+ /**
529
+ * The declared columns by key, for grouping and facets.
530
+ *
531
+ * @return {object} Resolved columns by key.
532
+ */
533
+ columnsByKey() {
534
+ const byKey = {};
535
+ this.declaredColumns.forEach((column) => {
536
+ byKey[column.key] = column;
537
+ });
538
+ return byKey
539
+ },
540
+
541
+ /**
542
+ * How many cells a row has, for a heading or message spanning the row.
543
+ *
544
+ * @return {number} The column count.
545
+ */
546
+ columnCount() {
547
+ return this.renderedColumns.length + 2 + (this.bulkEnabled ? 1 : 0)
548
+ },
549
+
550
+ /**
551
+ * Whether the host gave bulk actions, which turns on the selection.
552
+ *
553
+ * @return {boolean} True with at least one bulk action.
554
+ * @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
555
+ */
556
+ bulkEnabled() {
557
+ return Array.isArray(this.bulkActions) && this.bulkActions.length > 0
558
+ },
559
+
560
+ /**
561
+ * The listed folders, in display order.
562
+ *
563
+ * @return {Array<object>} The folder nodes.
564
+ */
565
+ folderNodes() {
566
+ return this.sorted.filter((node) => this.isFolder(node))
567
+ },
568
+
569
+ /**
570
+ * The listed files, in display order, before the filter.
571
+ *
572
+ * @return {Array<object>} The file nodes.
573
+ */
574
+ fileNodes() {
575
+ return this.sorted.filter((node) => !this.isFolder(node))
576
+ },
577
+
578
+ /**
579
+ * Whether any facet value is chosen.
580
+ *
581
+ * @return {boolean} True when the filter narrows the list.
582
+ */
583
+ facetActive() {
584
+ return Object.values(this.facetSelections).some((values) => Array.isArray(values) && values.length > 0)
585
+ },
586
+
587
+ /**
588
+ * The chips: per facet column, the values in use with their counts.
589
+ *
590
+ * @return {Array<{key: string, label: string, values: Array<{value: string, count: number, active: boolean}>}>} The facets.
591
+ * @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
592
+ */
593
+ facetGroups() {
594
+ const keys = Array.isArray(this.facets) ? this.facets : [];
595
+ return keys
596
+ .map((key) => this.columnsByKey[key])
597
+ .filter(Boolean)
598
+ .map((column) => {
599
+ const chosen = this.facetSelections[column.key] || [];
600
+ return {
601
+ key: column.key,
602
+ label: this.columnLabel(column),
603
+ values: facetCounts(this.fileNodes, column, this.resolvedRowData)
604
+ .map((entry) => ({ ...entry, active: chosen.includes(entry.value) })),
605
+ }
606
+ })
607
+ .filter((facet) => facet.values.length > 0)
608
+ },
609
+
610
+ /**
611
+ * The files the filter keeps.
612
+ *
613
+ * @return {Array<object>} The file nodes.
614
+ */
615
+ filteredFiles() {
616
+ if (!this.facetActive) {
617
+ return this.fileNodes
618
+ }
619
+ return this.fileNodes.filter((node) => nodeMatchesFacets(node, this.facetSelections, this.columnsByKey, this.resolvedRowData))
620
+ },
621
+
622
+ /**
623
+ * What the table body renders, in order: folders, then the files,
624
+ * under a heading per group when the host groups.
625
+ *
626
+ * @return {Array<{key: string, group?: object, node?: object}>} The rows.
627
+ * @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
628
+ */
629
+ displayRows() {
630
+ const rows = this.folderNodes.map((node) => ({ key: node.source, node }));
631
+ const column = this.groupBy ? this.columnsByKey[this.groupBy] : null;
632
+ if (!column) {
633
+ this.filteredFiles.forEach((node) => rows.push({ key: node.source, node }));
634
+ return rows
635
+ }
636
+ groupNodes(this.filteredFiles, column, this.resolvedRowData).forEach((group) => {
637
+ const label = group.value === null ? this.groupEmptyLabel : group.value;
638
+ rows.push({ key: `group-${group.value === null ? '' : group.value}`, group: { label, count: group.nodes.length } });
639
+ group.nodes.forEach((node) => rows.push({ key: node.source, node }));
640
+ });
641
+ return rows
642
+ },
643
+
644
+ /**
645
+ * The ids of the files a select-all takes: the files the filter keeps.
646
+ *
647
+ * @return {string[]} File ids as strings.
648
+ */
649
+ selectableIds() {
650
+ return this.filteredFiles.map((node) => String(node.fileid))
651
+ },
652
+
653
+ /**
654
+ * Whether every selectable file is selected.
655
+ *
656
+ * @return {boolean} True when all are.
657
+ */
658
+ allSelected() {
659
+ return this.selectableIds.length > 0 && this.selectableIds.every((id) => this.selectedIds.includes(id))
660
+ },
661
+
662
+ /**
663
+ * Whether some file is selected.
664
+ *
665
+ * @return {boolean} True when one or more are.
666
+ */
667
+ someSelected() {
668
+ return this.selectedIds.length > 0
669
+ },
670
+
476
671
  /**
477
672
  * The column the table is currently sorted on, or null when the sort
478
673
  * key belongs to no declared column.
@@ -521,6 +716,11 @@ var script = {
521
716
  this.currentPath = next;
522
717
  this.refresh();
523
718
  },
719
+
720
+ // A selection belongs to the folder it was made in.
721
+ currentPath() {
722
+ this.selectedIds = [];
723
+ },
524
724
  },
525
725
 
526
726
  mounted() {
@@ -1417,6 +1617,104 @@ var script = {
1417
1617
  return generateUrl('/f/{fileid}', { fileid: node.fileid })
1418
1618
  },
1419
1619
 
1620
+ /**
1621
+ * Whether a file is selected.
1622
+ *
1623
+ * @param {object} node The file.
1624
+ * @return {boolean} True when selected.
1625
+ */
1626
+ isSelected(node) {
1627
+ return this.selectedIds.includes(String(node.fileid))
1628
+ },
1629
+
1630
+ /**
1631
+ * Select or deselect one file.
1632
+ *
1633
+ * @param {object} node The file.
1634
+ * @param {boolean} checked Whether it is now selected.
1635
+ * @return {void}
1636
+ */
1637
+ toggleSelected(node, checked) {
1638
+ const id = String(node.fileid);
1639
+ const rest = this.selectedIds.filter((entry) => entry !== id);
1640
+ this.selectedIds = checked ? [...rest, id] : rest;
1641
+ },
1642
+
1643
+ /**
1644
+ * Select every file the filter keeps, or none.
1645
+ *
1646
+ * @param {boolean} checked Whether to select all.
1647
+ * @return {void}
1648
+ */
1649
+ toggleAll(checked) {
1650
+ this.selectedIds = checked ? [...this.selectableIds] : [];
1651
+ },
1652
+
1653
+ /** Drop the selection. */
1654
+ clearSelection() {
1655
+ this.selectedIds = [];
1656
+ },
1657
+
1658
+ /**
1659
+ * Run one of the host's bulk actions on the selected files, then drop
1660
+ * the selection. An `open-modal` action's props gain `files` and
1661
+ * `fileIds`; a `handler` action's args gain the selected nodes.
1662
+ *
1663
+ * @param {object} action The declared bulk action.
1664
+ * @return {void}
1665
+ * @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
1666
+ */
1667
+ runBulkAction(action) {
1668
+ if (!action || typeof action !== 'object') {
1669
+ return
1670
+ }
1671
+ const nodes = this.fileNodes.filter((node) => this.selectedIds.includes(String(node.fileid)));
1672
+ const type = action.type || 'handler';
1673
+ let wrapped = action;
1674
+ if (type === 'open-modal') {
1675
+ const files = nodes.map((node) => ({ fileId: node.fileid, fileName: node.basename, path: node.path }));
1676
+ wrapped = { ...action, props: { ...(action.props || {}), files, fileIds: files.map((file) => file.fileId) } };
1677
+ } else if (type === 'handler') {
1678
+ wrapped = { ...action, args: [...(action.args || []), nodes] };
1679
+ }
1680
+ this.selectedIds = [];
1681
+ if (typeof this.cnDispatchAction === 'function') {
1682
+ this.cnDispatchAction(wrapped);
1683
+ return
1684
+ }
1685
+ dispatchAction(wrapped, { router: this.$router || null });
1686
+ },
1687
+
1688
+ /**
1689
+ * Choose or drop one facet value.
1690
+ *
1691
+ * @param {string} key The column key.
1692
+ * @param {string} value The value.
1693
+ * @return {void}
1694
+ */
1695
+ toggleFacet(key, value) {
1696
+ const chosen = this.facetSelections[key] || [];
1697
+ const next = chosen.includes(value) ? chosen.filter((entry) => entry !== value) : [...chosen, value];
1698
+ this.facetSelections = { ...this.facetSelections, [key]: next };
1699
+ },
1700
+
1701
+ /** Drop every facet choice. */
1702
+ clearFacets() {
1703
+ this.facetSelections = {};
1704
+ },
1705
+
1706
+ /**
1707
+ * The host's own row actions that belong on this file: those whose
1708
+ * `visibleIf` (extension, mime) holds for it, or that name none.
1709
+ *
1710
+ * @param {object} node The file.
1711
+ * @return {Array<object>} The actions to offer.
1712
+ * @spec openspec/changes/files-browser-hosts-a-documents-list/specs/files-browser/spec.md
1713
+ */
1714
+ hostActionsFor(node) {
1715
+ return this.rowActions.filter((action) => hostActionApplies(action, node))
1716
+ },
1717
+
1420
1718
  /**
1421
1719
  * Run one of the host's declared actions on a file.
1422
1720
  *