@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
@@ -622,6 +622,78 @@
622
622
  .cn-look-board .cn-cell-renderer__age:not(.cn-look-nextcloud *) {
623
623
  font-weight: 600;
624
624
  }
625
+
626
+ /* ---- Record list on a dashboard card (PtDashboard) ---------------------- */
627
+ /* The dashboard's card body is flush, so the rows carry their own inset: the
628
+ board's card pads 24px at the sides and each row 14px, a soft hairline
629
+ between rows, the title 15px weight 600 and the meta 13px muted. A row is a
630
+ link, but only the hover says so: no underline on any text run, however the
631
+ host styles its links (`!important`, because a host rule such as
632
+ `#content a` outranks any class). The pill and the date sit at the right. */
633
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list {
634
+ padding: 0 24px 10px;
635
+ }
636
+
637
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list--rows .cn-record-list__item + .cn-record-list__item {
638
+ border-top: 1px solid var(--color-border-dark, var(--color-border));
639
+ }
640
+
641
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row {
642
+ padding: 14px 0;
643
+ flex-wrap: wrap;
644
+ gap: 8px 16px;
645
+ }
646
+
647
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row,
648
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row:hover,
649
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row:focus-visible,
650
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row * {
651
+ color: inherit;
652
+ text-decoration: none !important;
653
+ }
654
+
655
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__title {
656
+ color: var(--color-main-text);
657
+ font-size: 15px;
658
+ font-weight: 600;
659
+ }
660
+
661
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__meta {
662
+ color: var(--color-text-maxcontrast);
663
+ font-size: 13px;
664
+ }
665
+
666
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__trailing {
667
+ color: var(--color-text-maxcontrast);
668
+ font-size: 13px;
669
+ font-weight: 600;
670
+ }
671
+
672
+ /* Hover: the whole row takes the hover ground, 8px beyond the text so the
673
+ text does not move. */
674
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link {
675
+ margin-inline: -8px;
676
+ padding-inline: 8px;
677
+ border-radius: 8px;
678
+ }
679
+
680
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:hover,
681
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:focus-visible {
682
+ background: var(--color-background-hover);
683
+ }
684
+
685
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__row--link:hover .cn-record-list__title {
686
+ text-decoration: none !important;
687
+ }
688
+
689
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__aside {
690
+ margin-inline-start: auto;
691
+ }
692
+
693
+ /* The board draws no chevron after the pill and date. */
694
+ .cn-look-board .cn-dashboard-page:not(.cn-look-nextcloud *) .cn-record-list__chevron {
695
+ display: none;
696
+ }
625
697
  /*
626
698
  * The board dialog (screens-dialog-parity, canon section 5).
627
699
  *
@@ -1530,7 +1602,8 @@
1530
1602
  }
1531
1603
 
1532
1604
  /* Filter: a labelled secondary button, 36px, radius 8, with the active count. */
1533
- .cn-look-board .cn-actions-bar__filter-button.button-vue {
1605
+ .cn-look-board .cn-actions-bar__filter-button.button-vue,
1606
+ .cn-look-board .cn-actions-bar__filter-menu .button-vue {
1534
1607
  min-height: 36px;
1535
1608
  height: 36px;
1536
1609
  border-radius: 8px;
@@ -1780,11 +1853,16 @@
1780
1853
  max-width: calc(100% - 26px);
1781
1854
  }
1782
1855
 
1783
- /* The selection column: 28px, 18px checkboxes. */
1856
+ /* The selection column: 18px checkboxes, 28px of content after 16px of padding.
1857
+ The box model is set with `!important` and the widths include the padding:
1858
+ Nextcloud's server.css sets `box-sizing: border-box` on everything under
1859
+ `#content[class*="app-"]`, an id selector no class rule outranks, so a plain
1860
+ `content-box` here was ignored and the cell left 12px for the checkbox (the
1861
+ header's checkbox showed as a stray bracket). */
1784
1862
  .cn-look-board .cn-table-container--board .cn-data-table .cn-table-col--checkbox {
1785
- box-sizing: content-box;
1786
- width: 28px;
1787
- min-width: 28px;
1863
+ box-sizing: border-box !important;
1864
+ width: 44px;
1865
+ min-width: 44px;
1788
1866
  padding-inline: 16px 0;
1789
1867
  text-align: start;
1790
1868
  }
@@ -1832,6 +1910,29 @@
1832
1910
  font-size: 13px;
1833
1911
  }
1834
1912
 
1913
+ /* An avatar in the title column (PtAccounts): a 32px chip circle, 10px before
1914
+ the name, the e-mail under the name beside it. The name keeps the title's
1915
+ weight and size, and its underline: an inline-flex box is atomic, so the
1916
+ cell's own underline does not reach it. */
1917
+ .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar {
1918
+ gap: 10px;
1919
+ }
1920
+
1921
+ .cn-look-board .cn-table-container--board .cn-data-table .cn-cell-renderer__avatar-initials {
1922
+ background: var(--color-background-dark);
1923
+ color: var(--color-main-text);
1924
+ font-size: 12px;
1925
+ }
1926
+
1927
+ .cn-look-board .cn-table-container--board .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
1928
+ text-decoration: underline;
1929
+ text-underline-offset: 2px;
1930
+ }
1931
+
1932
+ .cn-look-board .cn-table-container--board.cn-table-container--title-plain .cn-data-table td.cn-table-col--title .cn-cell-renderer__avatar-name {
1933
+ text-decoration: none;
1934
+ }
1935
+
1835
1936
  /* A status pill: 3px 10px, radius 12, 13px weight 600. The colours stay the
1836
1937
  status colour map's. */
1837
1938
  .cn-look-board .cn-table-container--board .cn-data-table .cn-status-badge {
@@ -1842,10 +1943,12 @@
1842
1943
  line-height: 1.4;
1843
1944
  }
1844
1945
 
1845
- /* The row menu column holds one 34px button. */
1946
+ /* The row menu column holds one 34px button between 16px of padding, so 66px
1947
+ border to border (see the selection column for why the box model is forced). */
1846
1948
  .cn-look-board .cn-table-container--board .cn-data-table .cn-table-col--actions {
1847
- width: 34px;
1848
- min-width: 0;
1949
+ box-sizing: border-box !important;
1950
+ width: 66px;
1951
+ min-width: 66px;
1849
1952
  padding-inline: 16px;
1850
1953
  text-align: end;
1851
1954
  }
@@ -6196,6 +6299,15 @@ a.cn-kpi-card--board * {
6196
6299
  gap: 4px;
6197
6300
  }
6198
6301
 
6302
+ /* No inner scroller: tabs that do not fit the width wrap onto a second row
6303
+ instead of scrolling sideways (the library's default strip), so the strip
6304
+ has no scrollbar, no clipped tab and no fade or chevron to find the rest. */
6305
+ .cn-look-board .cn-tabs--board .cn-tabs__nav {
6306
+ flex-wrap: wrap;
6307
+ overflow: visible;
6308
+ row-gap: 4px;
6309
+ }
6310
+
6199
6311
  .cn-look-board .cn-tabs--board .cn-tabs__nav-item {
6200
6312
  background-color: var(--color-background-dark);
6201
6313
  border: 1px solid var(--color-border-dark);
@@ -6341,12 +6453,28 @@ a.cn-kpi-card--board * {
6341
6453
  padding: 0 0 10px;
6342
6454
  }
6343
6455
 
6344
- .cn-look-board .cn-object-data-widget__label {
6345
- color: var(--color-text-maxcontrast);
6456
+ /* Outranks the component's own `.cn-object-data-widget__label[data-v-...]`
6457
+ (weight 500, 0.85em, which has the same specificity as the look's rule and
6458
+ wins on source order wherever a bundle, such as a companion app's, loads
6459
+ after this stylesheet), through the grid the labels sit in. Measured live:
6460
+ the labels read bold and dark where the boards (DqContact, PqKlant, ShKlant)
6461
+ draw them 13px, regular weight and light grey.
6462
+
6463
+ The colour carries `!important`: a theme (nldesign's element overrides) sets
6464
+ the ink of every `div` outside the header with a selector that has an id in
6465
+ its `:not()`, which no class rule outranks. */
6466
+ .cn-look-board .cn-object-data-widget__grid .cn-object-data-widget__label {
6467
+ color: var(--color-text-maxcontrast) !important;
6346
6468
  font-size: 13px;
6347
6469
  font-weight: 400;
6348
6470
  }
6349
6471
 
6472
+ /* The facts card's labels: the same light grey, regular weight. */
6473
+ .cn-look-board .cn-facts-widget .cn-facts-widget__label {
6474
+ color: var(--color-text-maxcontrast);
6475
+ font-weight: 400;
6476
+ }
6477
+
6350
6478
  .cn-look-board .cn-object-data-widget__value {
6351
6479
  font-weight: 500;
6352
6480
  }
@@ -6604,6 +6732,15 @@ a.cn-kpi-card--board * {
6604
6732
  font-size: 13px;
6605
6733
  margin: 2px 0 0;
6606
6734
  }
6735
+
6736
+ /* The sidebar's own open toggle (NcAppSidebar's `.app-sidebar__toggle`, drawn
6737
+ when the sidebar is closed) is positioned over the content's top-right
6738
+ corner, which in this look is the header's last button: a stray square icon
6739
+ on "More". The board draws none, so it is hidden on a detail page and the
6740
+ header menu offers "Open sidebar" instead. */
6741
+ .cn-look-board:has(.cn-detail-page) > .app-sidebar__toggle {
6742
+ display: none;
6743
+ }
6607
6744
  /* CnReferencePreview — a reference that shows what it points at. */
6608
6745
 
6609
6746
  .cn-reference-preview {
@@ -9726,11 +9863,31 @@ svg.leaflet-image-layer.leaflet-interactive path {
9726
9863
  font-weight: 700;
9727
9864
  line-height: 1;
9728
9865
  }
9866
+ .cn-cell-renderer__avatar-text[data-v-37d7b88f] {
9867
+ display: flex;
9868
+ flex-direction: column;
9869
+ min-width: 0;
9870
+ }
9729
9871
  .cn-cell-renderer__avatar-name[data-v-37d7b88f] {
9730
9872
  min-width: 0;
9731
9873
  overflow: hidden;
9732
9874
  text-overflow: ellipsis;
9733
9875
  white-space: nowrap;
9876
+ /* The name is the cell's text: it keeps the weight, size and colour the
9877
+ cell sets, as a plain value does. */
9878
+ font: inherit;
9879
+ color: inherit;
9880
+ }
9881
+ .cn-cell-renderer__avatar-secondary[data-v-37d7b88f] {
9882
+ min-width: 0;
9883
+ overflow: hidden;
9884
+ color: var(--color-text-maxcontrast);
9885
+ font-size: 13px;
9886
+ font-weight: 400;
9887
+ line-height: 1.35;
9888
+ text-overflow: ellipsis;
9889
+ text-decoration: none;
9890
+ white-space: nowrap;
9734
9891
  }
9735
9892
 
9736
9893
  /* A date that matched a rule is also set in a heavier weight, so the signal
@@ -15273,6 +15430,70 @@ button.cn-files-card__open[data-v-46f7e3c9]:hover {
15273
15430
  white-space: nowrap;
15274
15431
  color: var(--color-text-maxcontrast);
15275
15432
  }
15433
+ .cn-files-browser__col-select[data-v-f5bdd9e2] {
15434
+ width: 36px;
15435
+ text-align: center;
15436
+ }
15437
+ .cn-files-browser__select[data-v-f5bdd9e2] {
15438
+ width: 18px;
15439
+ height: 18px;
15440
+ margin: 0;
15441
+ accent-color: var(--color-primary-element);
15442
+ }
15443
+ .cn-files-browser__bulk-bar[data-v-f5bdd9e2] {
15444
+ display: flex;
15445
+ flex-wrap: wrap;
15446
+ align-items: center;
15447
+ gap: 8px;
15448
+ padding: 8px 12px;
15449
+ border-radius: var(--border-radius-large);
15450
+ background: var(--color-primary-element-light);
15451
+ }
15452
+ .cn-files-browser__bulk-count[data-v-f5bdd9e2] {
15453
+ font-weight: 600;
15454
+ margin-inline-end: 8px;
15455
+ }
15456
+ .cn-files-browser__facets[data-v-f5bdd9e2] {
15457
+ display: flex;
15458
+ flex-wrap: wrap;
15459
+ align-items: center;
15460
+ gap: 8px 16px;
15461
+ }
15462
+ .cn-files-browser__facet[data-v-f5bdd9e2] {
15463
+ display: flex;
15464
+ flex-wrap: wrap;
15465
+ gap: 6px;
15466
+ }
15467
+ .cn-files-browser__facet-chip[data-v-f5bdd9e2] {
15468
+ display: inline-flex;
15469
+ align-items: center;
15470
+ gap: 6px;
15471
+ min-height: 32px;
15472
+ padding: 0 12px;
15473
+ border: 1px solid var(--color-border-dark);
15474
+ border-radius: var(--border-radius-pill);
15475
+ background: var(--color-main-background);
15476
+ color: var(--color-main-text);
15477
+ cursor: pointer;
15478
+ }
15479
+ .cn-files-browser__facet-chip--active[data-v-f5bdd9e2] {
15480
+ border-color: var(--color-primary-element);
15481
+ background: var(--color-primary-element-light);
15482
+ }
15483
+ .cn-files-browser__group-heading[data-v-f5bdd9e2] {
15484
+ padding: 12px 8px 4px;
15485
+ text-align: start;
15486
+ font-weight: 700;
15487
+ }
15488
+ .cn-files-browser__group-count[data-v-f5bdd9e2] {
15489
+ margin-inline-start: 6px;
15490
+ font-weight: 400;
15491
+ color: var(--color-text-maxcontrast);
15492
+ }
15493
+ .cn-files-browser__no-match[data-v-f5bdd9e2] {
15494
+ padding: 16px 8px;
15495
+ color: var(--color-text-maxcontrast);
15496
+ }
15276
15497
  .cn-files-browser__col-actions[data-v-f5bdd9e2] {
15277
15498
  width: 48px;
15278
15499
  }
@@ -21928,6 +22149,59 @@ a.cn-kpi-card--board * {
21928
22149
  gap: var(--cn-kpi-stack-gap, 12px);
21929
22150
  }
21930
22151
 
22152
+ /* Rows layout: the board's "label left, number right" card body. */
22153
+ .cn-stats-block-widget--rows[data-v-4f8583ef] {
22154
+ display: flex;
22155
+ flex-direction: column;
22156
+ gap: 12px;
22157
+ box-sizing: border-box;
22158
+ padding: 20px 22px;
22159
+ }
22160
+ .cn-stats-block-widget__rows-title[data-v-4f8583ef] {
22161
+ margin: 0;
22162
+ font-size: 15px;
22163
+ font-weight: 600;
22164
+ color: var(--color-text-maxcontrast);
22165
+ }
22166
+ .cn-stats-block-widget__rows[data-v-4f8583ef] {
22167
+ display: flex;
22168
+ flex-direction: column;
22169
+ gap: 8px;
22170
+ margin: 0;
22171
+ font-size: 14px;
22172
+ }
22173
+ .cn-stats-block-widget__row[data-v-4f8583ef] {
22174
+ display: flex;
22175
+ align-items: baseline;
22176
+ justify-content: space-between;
22177
+ gap: 16px;
22178
+ }
22179
+ .cn-stats-block-widget__row-label[data-v-4f8583ef] {
22180
+ min-width: 0;
22181
+ margin: 0;
22182
+ overflow: hidden;
22183
+ text-overflow: ellipsis;
22184
+ }
22185
+ .cn-stats-block-widget__row-value[data-v-4f8583ef] {
22186
+ flex: none;
22187
+ margin: 0;
22188
+ font-size: 17px;
22189
+ font-weight: 700;
22190
+ text-align: right;
22191
+ }
22192
+ .cn-stats-block-widget__row-value--success[data-v-4f8583ef] {
22193
+ color: var(--color-text-success, var(--color-success-text));
22194
+ }
22195
+ .cn-stats-block-widget__row-value--warning[data-v-4f8583ef] {
22196
+ color: var(--color-text-warning, var(--color-warning-text));
22197
+ }
22198
+ .cn-stats-block-widget__row-value--error[data-v-4f8583ef] {
22199
+ color: var(--color-text-error, var(--color-error-text));
22200
+ }
22201
+ .cn-stats-block-widget__row-value--primary[data-v-4f8583ef] {
22202
+ color: var(--color-primary-element);
22203
+ }
22204
+
21931
22205
 
21932
22206
  .cn-stats-block-form[data-v-20f3b26f] {
21933
22207
  display: flex;
@@ -22446,6 +22720,20 @@ to { background-position: -200% 0;
22446
22720
  .cn-banner-widget__card[data-v-3531692f] {
22447
22721
  margin: 0;
22448
22722
  }
22723
+ .cn-banner-widget__line[data-v-3531692f] {
22724
+ display: flex;
22725
+ flex-wrap: wrap;
22726
+ align-items: baseline;
22727
+ gap: 4px 20px;
22728
+ }
22729
+ .cn-banner-widget__lead[data-v-3531692f] {
22730
+ font-weight: 700;
22731
+ }
22732
+ .cn-banner-widget__link[data-v-3531692f] {
22733
+ margin-inline-start: auto;
22734
+ font-size: 14px;
22735
+ font-weight: 600;
22736
+ }
22449
22737
  .cn-banner-widget__text--clickable[data-v-3531692f] {
22450
22738
  cursor: pointer;
22451
22739
  text-decoration: underline;
@@ -22529,6 +22817,28 @@ to { background-position: -200% 0;
22529
22817
  margin: 0;
22530
22818
  color: var(--color-text-maxcontrast);
22531
22819
  }
22820
+
22821
+ /* Stacked (PqMijnWerk "Begin hier"): the text, then the action under it. */
22822
+ .cn-banner-widget--stacked[data-v-3531692f] {
22823
+ flex-direction: column;
22824
+ align-items: flex-start;
22825
+ gap: 10px;
22826
+ }
22827
+ .cn-banner-widget--stacked .cn-banner-widget__body[data-v-3531692f] {
22828
+ flex: 0 0 auto;
22829
+ gap: 10px;
22830
+ }
22831
+ .cn-banner-widget--stacked .cn-banner-widget__title[data-v-3531692f] {
22832
+ font-size: 16px;
22833
+ line-height: 1.4;
22834
+ }
22835
+ .cn-banner-widget--stacked .cn-banner-widget__reason[data-v-3531692f] {
22836
+ font-size: 14px;
22837
+ }
22838
+ .cn-banner-widget--stacked .cn-banner-widget__action[data-v-3531692f] {
22839
+ min-height: var(--cn-board-control-height, 40px);
22840
+ font-size: 14px;
22841
+ }
22532
22842
  .cn-banner-widget__actions[data-v-3531692f] {
22533
22843
  display: flex;
22534
22844
  flex-wrap: wrap;
@@ -22700,6 +23010,18 @@ to { background-position: -200% 0;
22700
23010
  box-shadow: 0 1px 2px var(--color-box-shadow);
22701
23011
  }
22702
23012
 
23013
+ /* On a phone (screens-dashboard-phone) the compact group's segments are 44px
23014
+ high touch targets, and the group wraps onto a second row instead of
23015
+ running off the screen. */
23016
+ @media (max-width: 640px) {
23017
+ .cn-segmented-control.cn-segmented-control--compact[data-v-7b344b4f] {
23018
+ flex-wrap: wrap;
23019
+ }
23020
+ .cn-segmented-control.cn-segmented-control--compact .cn-segmented-control__option[data-v-7b344b4f] {
23021
+ min-height: 44px;
23022
+ }
23023
+ }
23024
+
22703
23025
 
22704
23026
  .cn-header-widget[data-v-1b97430f] {
22705
23027
  width: 100%;
@@ -23524,6 +23846,13 @@ button.cn-stepper__step[data-v-19697746] {
23524
23846
  }
23525
23847
 
23526
23848
 
23849
+ .cn-form-page__honeypot {
23850
+ position: absolute;
23851
+ left: -10000px;
23852
+ width: 1px;
23853
+ height: 1px;
23854
+ overflow: hidden;
23855
+ }
23527
23856
  .cn-form-page {
23528
23857
  display: flex;
23529
23858
  flex-direction: column;
@@ -23977,6 +24306,26 @@ button.cn-stepper__step[data-v-19697746] {
23977
24306
  gap: 20px;
23978
24307
  }
23979
24308
 
24309
+ /* A gridded stack (`columns` / `layout` on the tab): 12 columns, widgets wrap
24310
+ onto the next row, a row's cards as tall as the tallest. Narrow, it is the
24311
+ plain stack again. */
24312
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] {
24313
+ display: grid;
24314
+ grid-template-columns: repeat(12, minmax(0, 1fr));
24315
+ align-items: stretch;
24316
+ }
24317
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] > * {
24318
+ min-width: 0;
24319
+ }
24320
+ @media (max-width: 700px) {
24321
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] {
24322
+ grid-template-columns: minmax(0, 1fr);
24323
+ }
24324
+ .cn-tabs-widget__stack--grid[data-v-1dbd6122] > * {
24325
+ grid-column: auto !important;
24326
+ }
24327
+ }
24328
+
23980
24329
  /* The panel is the card; the strip is not inside it. There is no title bar
23981
24330
  above the tabs either: the open tab names the panel, so a title row would
23982
24331
  say the same thing twice and cost a row of height on a card that is mostly
@@ -24093,6 +24442,14 @@ button.cn-stepper__step[data-v-19697746] {
24093
24442
  .cn-tabs-widget__tabs[data-v-1dbd6122] .cn-tab {
24094
24443
  height: 100%;
24095
24444
  }
24445
+
24446
+ /* A list widget's footer Add bleeds through its card's 16px content padding
24447
+ (margin 0 -16px -16px). The panel of a tab pads 12px, so on a tab that
24448
+ holds the list directly the footer stuck out 4px on the right and at the
24449
+ bottom and made the panel scroll. It bleeds exactly the panel's padding. */
24450
+ .cn-tabs-widget__tabs[data-v-1dbd6122] .cn-tabs__content > .cn-tab > .cn-detail-widget-host--bare .cn-object-list-widget__add {
24451
+ margin: auto -12px -12px;
24452
+ }
24096
24453
  .cn-tabs-widget__title[data-v-1dbd6122] {
24097
24454
  align-items: center;
24098
24455
  display: inline-flex;
@@ -28048,6 +28405,50 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28048
28405
  font-variant-numeric: tabular-nums;
28049
28406
  }
28050
28407
 
28408
+ /* List variant, after the dashboard board's My tasks card: a checkbox, the
28409
+ title, the subject on a muted second line and the due date at its right. */
28410
+ .cn-tasks-widget--list .cn-tasks-widget__row[data-v-ff399342] {
28411
+ align-items: flex-start;
28412
+ gap: 12px;
28413
+ padding: 12px 0;
28414
+ }
28415
+ .cn-tasks-widget--list .cn-tasks-widget__name[data-v-ff399342] {
28416
+ font-weight: 400;
28417
+ font-size: 15px;
28418
+ line-height: 1.35;
28419
+ color: var(--color-main-text);
28420
+ }
28421
+ .cn-tasks-widget__check[data-v-ff399342],
28422
+ .cn-tasks-widget__check-spacer[data-v-ff399342] {
28423
+ flex: none;
28424
+ width: 20px;
28425
+ height: 20px;
28426
+ margin: 1px 0 0;
28427
+ }
28428
+ .cn-tasks-widget__check[data-v-ff399342] {
28429
+ accent-color: var(--color-primary-element);
28430
+ cursor: pointer;
28431
+ }
28432
+ .cn-tasks-widget__meta--split[data-v-ff399342] {
28433
+ display: flex;
28434
+ justify-content: space-between;
28435
+ gap: 8px;
28436
+ font-size: 13px;
28437
+ overflow: visible;
28438
+ }
28439
+ .cn-tasks-widget__subject[data-v-ff399342] {
28440
+ min-width: 0;
28441
+ overflow: hidden;
28442
+ text-overflow: ellipsis;
28443
+ }
28444
+ .cn-tasks-widget--list .cn-tasks-widget__due[data-v-ff399342] {
28445
+ font-size: 13px;
28446
+ font-weight: 500;
28447
+ }
28448
+ .cn-tasks-widget--list .cn-tasks-widget__due--overdue[data-v-ff399342] {
28449
+ font-weight: 600;
28450
+ }
28451
+
28051
28452
  /* Overdue: weight AND colour on top of the wording, which already says
28052
28453
  "Overdue by N days" — the signal survives monochrome. */
28053
28454
  .cn-tasks-widget__due--overdue[data-v-ff399342] {
@@ -28146,11 +28547,21 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28146
28547
  .cn-facts-widget__row[data-v-2ca63011] {
28147
28548
  display: contents;
28148
28549
  }
28149
- .cn-facts-widget__label[data-v-2ca63011] {
28550
+
28551
+ /* Nextcloud core styles `dt` and `dd` (text-align end, 12px padding), which
28552
+ pushed the label to the right of its column and added 12px around both. The
28553
+ class is doubled so these resets outrank that rule, and a dossiq-style
28554
+ `:deep()` override in an app is not needed. */
28555
+ .cn-facts-widget__label.cn-facts-widget__label[data-v-2ca63011] {
28556
+ margin: 0;
28557
+ padding: 0;
28558
+ text-align: start;
28150
28559
  color: var(--color-text-maxcontrast);
28151
28560
  }
28152
- .cn-facts-widget__value[data-v-2ca63011] {
28561
+ .cn-facts-widget__value.cn-facts-widget__value[data-v-2ca63011] {
28153
28562
  margin: 0;
28563
+ padding: 0;
28564
+ text-align: start;
28154
28565
  font-weight: 500;
28155
28566
  min-width: 0;
28156
28567
  overflow-wrap: anywhere;
@@ -28370,6 +28781,496 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28370
28781
  .cn-field-list-widget__add > button[data-v-0f29a833] {
28371
28782
  flex: 0 0 auto;
28372
28783
  }
28784
+ .cn-field-list-widget__toolbar[data-v-0f29a833] {
28785
+ display: flex;
28786
+ justify-content: flex-end;
28787
+ }
28788
+ .cn-field-list-widget__table-wrap[data-v-0f29a833] {
28789
+ display: flex;
28790
+ flex-direction: column;
28791
+ gap: 12px;
28792
+ overflow-x: auto;
28793
+ }
28794
+ .cn-field-list-widget__table[data-v-0f29a833] {
28795
+ width: 100%;
28796
+ border-collapse: collapse;
28797
+ }
28798
+ .cn-field-list-widget__th[data-v-0f29a833] {
28799
+ padding: 8px 12px;
28800
+ text-align: start;
28801
+ font-size: 13px;
28802
+ font-weight: 600;
28803
+ white-space: nowrap;
28804
+ color: var(--color-text-maxcontrast);
28805
+ background: var(--color-background-hover);
28806
+ }
28807
+ .cn-field-list-widget__th--menu[data-v-0f29a833],
28808
+ .cn-field-list-widget__td--menu[data-v-0f29a833] {
28809
+ width: 1%;
28810
+ text-align: end;
28811
+ }
28812
+ .cn-field-list-widget__tr[data-v-0f29a833] {
28813
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
28814
+ }
28815
+ .cn-field-list-widget__td[data-v-0f29a833] {
28816
+ padding: 10px 12px;
28817
+ vertical-align: middle;
28818
+ overflow-wrap: anywhere;
28819
+ }
28820
+ .cn-field-list-widget__sr[data-v-0f29a833] {
28821
+ position: absolute;
28822
+ width: 1px;
28823
+ height: 1px;
28824
+ overflow: hidden;
28825
+ clip-path: inset(50%);
28826
+ }
28827
+ .cn-field-list-widget__band[data-v-0f29a833] {
28828
+ display: flex;
28829
+ flex-wrap: wrap;
28830
+ align-items: center;
28831
+ justify-content: space-between;
28832
+ gap: 8px 12px;
28833
+ padding: 12px 14px;
28834
+ border: 1px solid var(--color-warning);
28835
+ border-radius: 10px;
28836
+ background: color-mix(in srgb, var(--color-warning) 14%, var(--color-main-background));
28837
+ font-size: 14px;
28838
+ }
28839
+
28840
+
28841
+ .cn-settings-form[data-v-731c450f] {
28842
+ display: flex;
28843
+ flex-direction: column;
28844
+ gap: 14px;
28845
+ min-width: 0;
28846
+ }
28847
+ .cn-settings-form__grid[data-v-731c450f] {
28848
+ display: grid;
28849
+ gap: 14px 16px;
28850
+ grid-template-columns: minmax(0, 1fr);
28851
+ }
28852
+ .cn-settings-form__grid--2[data-v-731c450f] {
28853
+ grid-template-columns: repeat(2, minmax(0, 1fr));
28854
+ }
28855
+ .cn-settings-form__field[data-v-731c450f] {
28856
+ display: flex;
28857
+ flex-direction: column;
28858
+ gap: 4px;
28859
+ min-width: 0;
28860
+ }
28861
+ .cn-settings-form__field--wide[data-v-731c450f] {
28862
+ grid-column: 1 / -1;
28863
+ }
28864
+ .cn-settings-form__label[data-v-731c450f] {
28865
+ font-size: 13px;
28866
+ font-weight: 600;
28867
+ color: var(--color-main-text);
28868
+ }
28869
+ .cn-settings-form__control[data-v-731c450f] {
28870
+ width: 100%;
28871
+ box-sizing: border-box;
28872
+ height: var(--cn-board-control-height, 40px);
28873
+ padding: 0 12px;
28874
+ border: 1px solid var(--color-border-maxcontrast);
28875
+ border-radius: var(--cn-board-control-radius, 8px);
28876
+ background: var(--color-main-background);
28877
+ color: var(--color-main-text);
28878
+ font: inherit;
28879
+ }
28880
+ .cn-settings-form__file[data-v-731c450f] {
28881
+ display: flex;
28882
+ flex-wrap: wrap;
28883
+ align-items: center;
28884
+ gap: 8px;
28885
+ }
28886
+ .cn-settings-form__control--file[data-v-731c450f] {
28887
+ display: inline-flex;
28888
+ align-items: center;
28889
+ width: auto;
28890
+ min-width: 120px;
28891
+ flex: 0 1 auto;
28892
+ overflow-wrap: anywhere;
28893
+ }
28894
+ .cn-settings-form__control--placeholder[data-v-731c450f] {
28895
+ color: var(--color-text-maxcontrast);
28896
+ }
28897
+ .cn-settings-form__control--area[data-v-731c450f] {
28898
+ height: auto;
28899
+ padding: 10px 12px;
28900
+ resize: vertical;
28901
+ }
28902
+ .cn-settings-form__control[data-v-731c450f]:focus-visible {
28903
+ outline: 2px solid var(--color-primary-element);
28904
+ outline-offset: 1px;
28905
+ }
28906
+ .cn-settings-form__hint[data-v-731c450f],
28907
+ .cn-settings-form__error[data-v-731c450f] {
28908
+ margin: 0;
28909
+ font-size: 12px;
28910
+ color: var(--color-text-maxcontrast);
28911
+ }
28912
+ .cn-settings-form__error[data-v-731c450f] {
28913
+ color: var(--color-error-text);
28914
+ }
28915
+ .cn-settings-form__actions[data-v-731c450f] {
28916
+ display: flex;
28917
+ justify-content: flex-start;
28918
+ }
28919
+ @media (max-width: 640px) {
28920
+ .cn-settings-form__grid--2[data-v-731c450f] {
28921
+ grid-template-columns: minmax(0, 1fr);
28922
+ }
28923
+ }
28924
+
28925
+
28926
+ .cn-switch-rows[data-v-9dd5b4e2] {
28927
+ display: flex;
28928
+ flex-direction: column;
28929
+ gap: 8px;
28930
+ min-width: 0;
28931
+ }
28932
+ .cn-switch-rows__list[data-v-9dd5b4e2] {
28933
+ list-style: none;
28934
+ margin: 0;
28935
+ padding: 0;
28936
+ display: flex;
28937
+ flex-direction: column;
28938
+ }
28939
+ .cn-switch-rows__row[data-v-9dd5b4e2] {
28940
+ padding: 10px 0;
28941
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
28942
+ }
28943
+ .cn-switch-rows__row[data-v-9dd5b4e2]:first-child {
28944
+ border-top: none;
28945
+ padding-top: 0;
28946
+ }
28947
+ .cn-switch-rows__label[data-v-9dd5b4e2] {
28948
+ display: block;
28949
+ font-weight: 600;
28950
+ }
28951
+ .cn-switch-rows__hint[data-v-9dd5b4e2] {
28952
+ display: block;
28953
+ font-size: 12px;
28954
+ font-weight: 400;
28955
+ color: var(--color-text-maxcontrast);
28956
+ }
28957
+
28958
+
28959
+ .cn-radio-cards[data-v-8aefa4a2] {
28960
+ display: flex;
28961
+ flex-direction: column;
28962
+ gap: 8px;
28963
+ min-width: 0;
28964
+ margin: 0;
28965
+ padding: 0;
28966
+ border: 0;
28967
+ }
28968
+ .cn-radio-cards__legend[data-v-8aefa4a2] {
28969
+ padding: 0;
28970
+ margin-bottom: 6px;
28971
+ font-weight: 600;
28972
+ }
28973
+ .cn-radio-cards__grid[data-v-8aefa4a2] {
28974
+ display: grid;
28975
+ gap: 10px;
28976
+ grid-template-columns: minmax(0, 1fr);
28977
+ }
28978
+ .cn-radio-cards__grid--2[data-v-8aefa4a2] {
28979
+ grid-template-columns: repeat(2, minmax(0, 1fr));
28980
+ }
28981
+ .cn-radio-cards__grid--3[data-v-8aefa4a2] {
28982
+ grid-template-columns: repeat(3, minmax(0, 1fr));
28983
+ }
28984
+ .cn-radio-cards__card[data-v-8aefa4a2] {
28985
+ position: relative;
28986
+ display: flex;
28987
+ align-items: flex-start;
28988
+ gap: 10px;
28989
+ padding: 12px 14px;
28990
+ border: 1px solid var(--color-border-maxcontrast);
28991
+ border-radius: var(--cn-board-control-radius, 8px);
28992
+ background: var(--color-main-background);
28993
+ cursor: pointer;
28994
+ }
28995
+ .cn-radio-cards__card--selected[data-v-8aefa4a2] {
28996
+ border-color: var(--color-primary-element);
28997
+ background: var(--color-primary-element-light);
28998
+ box-shadow: 0 0 0 1px var(--color-primary-element);
28999
+ }
29000
+ .cn-radio-cards__card[data-v-8aefa4a2]:focus-within {
29001
+ outline: 2px solid var(--color-primary-element);
29002
+ outline-offset: 2px;
29003
+ }
29004
+
29005
+ /* The real input stays in the DOM and in the accessibility tree; the dot is its picture. */
29006
+ .cn-radio-cards__input[data-v-8aefa4a2] {
29007
+ position: absolute;
29008
+ opacity: 0;
29009
+ inset: 0;
29010
+ margin: 0;
29011
+ cursor: pointer;
29012
+ }
29013
+ .cn-radio-cards__dot[data-v-8aefa4a2] {
29014
+ flex: 0 0 auto;
29015
+ width: 14px;
29016
+ height: 14px;
29017
+ margin-top: 3px;
29018
+ box-sizing: border-box;
29019
+ border: 1px solid var(--color-border-maxcontrast);
29020
+ border-radius: 50%;
29021
+ background: var(--color-main-background);
29022
+ }
29023
+ .cn-radio-cards__card--selected .cn-radio-cards__dot[data-v-8aefa4a2] {
29024
+ border: 4px solid var(--color-primary-element);
29025
+ }
29026
+ .cn-radio-cards__text[data-v-8aefa4a2] {
29027
+ display: flex;
29028
+ flex-direction: column;
29029
+ gap: 2px;
29030
+ min-width: 0;
29031
+ }
29032
+ .cn-radio-cards__title[data-v-8aefa4a2] {
29033
+ font-weight: 600;
29034
+ }
29035
+ .cn-radio-cards__description[data-v-8aefa4a2] {
29036
+ font-size: 12px;
29037
+ color: var(--color-text-maxcontrast);
29038
+ }
29039
+ @media (max-width: 640px) {
29040
+ .cn-radio-cards__grid--2[data-v-8aefa4a2],
29041
+ .cn-radio-cards__grid--3[data-v-8aefa4a2] {
29042
+ grid-template-columns: minmax(0, 1fr);
29043
+ }
29044
+ }
29045
+
29046
+
29047
+ .cn-chips-field[data-v-43e5bfcf] {
29048
+ display: flex;
29049
+ flex-direction: column;
29050
+ gap: 6px;
29051
+ min-width: 0;
29052
+ }
29053
+ .cn-chips-field__label[data-v-43e5bfcf] {
29054
+ margin: 0;
29055
+ font-size: 13px;
29056
+ font-weight: 600;
29057
+ }
29058
+ .cn-chips-field__chips[data-v-43e5bfcf] {
29059
+ list-style: none;
29060
+ margin: 0;
29061
+ padding: 0;
29062
+ display: flex;
29063
+ flex-wrap: wrap;
29064
+ align-items: center;
29065
+ gap: 8px;
29066
+ }
29067
+ .cn-chips-field__chip[data-v-43e5bfcf] {
29068
+ display: inline-flex;
29069
+ align-items: center;
29070
+ gap: 6px;
29071
+ padding: 4px 6px 4px 12px;
29072
+ border-radius: 999px;
29073
+ background: var(--color-primary-element-light);
29074
+ color: var(--color-primary-element-light-text, var(--color-main-text));
29075
+ font-weight: 600;
29076
+ overflow-wrap: anywhere;
29077
+ }
29078
+ .cn-chips-field__remove[data-v-43e5bfcf] {
29079
+ display: inline-flex;
29080
+ align-items: center;
29081
+ justify-content: center;
29082
+ width: 20px;
29083
+ height: 20px;
29084
+ padding: 0;
29085
+ border: 0;
29086
+ border-radius: 50%;
29087
+ background: transparent;
29088
+ color: inherit;
29089
+ font-size: 16px;
29090
+ line-height: 1;
29091
+ cursor: pointer;
29092
+ }
29093
+ .cn-chips-field__remove[data-v-43e5bfcf]:hover:not(:disabled),
29094
+ .cn-chips-field__remove[data-v-43e5bfcf]:focus-visible {
29095
+ background: var(--color-primary-element-light-hover, var(--color-background-hover));
29096
+ }
29097
+ .cn-chips-field__add[data-v-43e5bfcf] {
29098
+ padding: 4px 12px;
29099
+ border: 1px dashed var(--color-border-maxcontrast);
29100
+ border-radius: 999px;
29101
+ background: transparent;
29102
+ color: var(--color-main-text);
29103
+ font-weight: 600;
29104
+ cursor: pointer;
29105
+ }
29106
+ .cn-chips-field__add[data-v-43e5bfcf]:hover:not(:disabled) {
29107
+ background: var(--color-background-hover);
29108
+ }
29109
+ .cn-chips-field__form[data-v-43e5bfcf] {
29110
+ display: flex;
29111
+ align-items: center;
29112
+ gap: 8px;
29113
+ }
29114
+ .cn-chips-field__input[data-v-43e5bfcf] {
29115
+ height: var(--cn-board-control-height, 40px);
29116
+ box-sizing: border-box;
29117
+ padding: 0 12px;
29118
+ border: 1px solid var(--color-border-maxcontrast);
29119
+ border-radius: var(--cn-board-control-radius, 8px);
29120
+ background: var(--color-main-background);
29121
+ color: var(--color-main-text);
29122
+ font: inherit;
29123
+ }
29124
+ .cn-chips-field__hint[data-v-43e5bfcf],
29125
+ .cn-chips-field__error[data-v-43e5bfcf] {
29126
+ margin: 0;
29127
+ font-size: 12px;
29128
+ color: var(--color-text-maxcontrast);
29129
+ }
29130
+ .cn-chips-field__error[data-v-43e5bfcf] {
29131
+ color: var(--color-error-text);
29132
+ }
29133
+
29134
+
29135
+ .cn-toggle-table[data-v-53a57112] {
29136
+ display: flex;
29137
+ flex-direction: column;
29138
+ gap: 8px;
29139
+ min-width: 0;
29140
+ }
29141
+ .cn-toggle-table__table[data-v-53a57112] {
29142
+ width: 100%;
29143
+ border-collapse: collapse;
29144
+ }
29145
+ .cn-toggle-table__head[data-v-53a57112] {
29146
+ padding: 8px 12px;
29147
+ text-align: start;
29148
+ font-size: 13px;
29149
+ font-weight: 600;
29150
+ color: var(--color-text-maxcontrast);
29151
+ background: var(--color-background-hover);
29152
+ }
29153
+ .cn-toggle-table__head--toggle[data-v-53a57112],
29154
+ .cn-toggle-table__cell--toggle[data-v-53a57112] {
29155
+ width: 1%;
29156
+ white-space: nowrap;
29157
+ text-align: end;
29158
+ }
29159
+ .cn-toggle-table__row[data-v-53a57112] {
29160
+ border-top: 1px solid var(--cn-board-hairline, var(--color-border));
29161
+ }
29162
+ .cn-toggle-table__cell[data-v-53a57112] {
29163
+ padding: 10px 12px;
29164
+ vertical-align: middle;
29165
+ overflow-wrap: anywhere;
29166
+ }
29167
+ .cn-toggle-table__title[data-v-53a57112] {
29168
+ display: block;
29169
+ font-weight: 600;
29170
+ }
29171
+ .cn-toggle-table__hint[data-v-53a57112] {
29172
+ display: block;
29173
+ font-size: 12px;
29174
+ color: var(--color-text-maxcontrast);
29175
+ }
29176
+ .cn-toggle-table__empty[data-v-53a57112] {
29177
+ margin: 0;
29178
+ color: var(--color-text-maxcontrast);
29179
+ }
29180
+
29181
+
29182
+ .cn-choice-picker[data-v-7075cbe2] {
29183
+ display: flex;
29184
+ flex-direction: column;
29185
+ gap: 12px;
29186
+ min-width: 0;
29187
+ }
29188
+ .cn-choice-picker__cards[data-v-7075cbe2] {
29189
+ display: flex;
29190
+ flex-wrap: wrap;
29191
+ gap: 10px;
29192
+ margin: 0;
29193
+ padding: 0;
29194
+ border: 0;
29195
+ }
29196
+ .cn-choice-picker__legend[data-v-7075cbe2] {
29197
+ position: absolute;
29198
+ width: 1px;
29199
+ height: 1px;
29200
+ overflow: hidden;
29201
+ clip-path: inset(50%);
29202
+ }
29203
+ .cn-choice-picker__card[data-v-7075cbe2] {
29204
+ position: relative;
29205
+ display: flex;
29206
+ flex: 1 1 220px;
29207
+ align-items: center;
29208
+ gap: 12px;
29209
+ padding: 10px 12px;
29210
+ border: 1px solid var(--cn-board-hairline, var(--color-border));
29211
+ border-radius: 10px;
29212
+ background: var(--color-main-background);
29213
+ cursor: pointer;
29214
+ }
29215
+ .cn-choice-picker__card--selected[data-v-7075cbe2] {
29216
+ padding: 9px 11px;
29217
+ border: 2px solid var(--color-primary-element);
29218
+ }
29219
+ .cn-choice-picker__card--refused[data-v-7075cbe2] {
29220
+ cursor: not-allowed;
29221
+ opacity: 0.7;
29222
+ }
29223
+ .cn-choice-picker__card[data-v-7075cbe2]:focus-within {
29224
+ outline: 2px solid var(--color-primary-element);
29225
+ outline-offset: 2px;
29226
+ }
29227
+ .cn-choice-picker__input[data-v-7075cbe2] {
29228
+ flex: 0 0 auto;
29229
+ width: 18px;
29230
+ height: 18px;
29231
+ margin: 0;
29232
+ accent-color: var(--color-primary-element);
29233
+ }
29234
+ .cn-choice-picker__swatches[data-v-7075cbe2] {
29235
+ display: flex;
29236
+ gap: 4px;
29237
+ }
29238
+ .cn-choice-picker__swatch[data-v-7075cbe2] {
29239
+ width: 18px;
29240
+ height: 18px;
29241
+ box-sizing: border-box;
29242
+ border: 1px solid var(--color-border);
29243
+ border-radius: 4px;
29244
+ }
29245
+ .cn-choice-picker__text[data-v-7075cbe2] {
29246
+ display: flex;
29247
+ flex: 1 1 auto;
29248
+ flex-direction: column;
29249
+ gap: 2px;
29250
+ min-width: 0;
29251
+ }
29252
+ .cn-choice-picker__title[data-v-7075cbe2] {
29253
+ font-size: 15px;
29254
+ }
29255
+ .cn-choice-picker__refusal[data-v-7075cbe2],
29256
+ .cn-choice-picker__hint[data-v-7075cbe2],
29257
+ .cn-choice-picker__note[data-v-7075cbe2] {
29258
+ margin: 0;
29259
+ font-size: 13px;
29260
+ color: var(--color-text-maxcontrast);
29261
+ }
29262
+ .cn-choice-picker__warning-intro[data-v-7075cbe2] {
29263
+ margin: 0 0 4px;
29264
+ }
29265
+ .cn-choice-picker__warning-list[data-v-7075cbe2] {
29266
+ margin: 0;
29267
+ padding-inline-start: 18px;
29268
+ }
29269
+ .cn-choice-picker__actions[data-v-7075cbe2] {
29270
+ display: flex;
29271
+ flex-wrap: wrap;
29272
+ gap: 8px;
29273
+ }
28373
29274
 
28374
29275
 
28375
29276
  .cn-record-list__list[data-v-7073b362] {
@@ -28404,6 +29305,19 @@ a.cn-flow-runs-widget__row-content:hover .cn-flow-runs-widget__name[data-v-75628
28404
29305
  .cn-record-list__row--link:focus-visible .cn-record-list__title[data-v-7073b362] {
28405
29306
  text-decoration: underline;
28406
29307
  }
29308
+ .cn-record-list__avatar[data-v-7073b362] {
29309
+ align-items: center;
29310
+ background: var(--color-background-hover);
29311
+ border-radius: 50%;
29312
+ color: var(--color-main-text);
29313
+ display: flex;
29314
+ flex: none;
29315
+ font-size: 12px;
29316
+ font-weight: 700;
29317
+ height: 36px;
29318
+ justify-content: center;
29319
+ width: 36px;
29320
+ }
28407
29321
  .cn-record-list__main[data-v-7073b362] {
28408
29322
  display: flex;
28409
29323
  flex: 1 1 auto;
@@ -28493,6 +29407,53 @@ a.cn-record-list__inline-title[data-v-7073b362] {
28493
29407
  display: none;
28494
29408
  }
28495
29409
 
29410
+ /* A row is a touch target of at least 44px on a phone. */
29411
+ @media (max-width: 640px) {
29412
+ .cn-record-list__row {
29413
+ min-height: 44px;
29414
+ }
29415
+ }
29416
+
29417
+
29418
+ .cn-saved-views-widget__list[data-v-8ca66162] {
29419
+ display: flex;
29420
+ flex-direction: column;
29421
+ gap: 10px;
29422
+ list-style: none;
29423
+ margin: 0;
29424
+ padding: 0;
29425
+ }
29426
+ .cn-saved-views-widget__link[data-v-8ca66162] {
29427
+ color: var(--color-primary-element);
29428
+ display: inline-block;
29429
+ font-size: 14px;
29430
+ font-weight: 600;
29431
+ min-height: 24px;
29432
+ text-decoration: none;
29433
+ }
29434
+ .cn-saved-views-widget__link[data-v-8ca66162]:hover,
29435
+ .cn-saved-views-widget__link[data-v-8ca66162]:focus-visible {
29436
+ text-decoration: underline;
29437
+ }
29438
+ .cn-saved-views-widget__note[data-v-8ca66162] {
29439
+ color: var(--color-text-maxcontrast);
29440
+ margin: 0;
29441
+ }
29442
+ .cn-saved-views-widget__loading[data-v-8ca66162] {
29443
+ display: flex;
29444
+ justify-content: center;
29445
+ padding: 8px 0;
29446
+ }
29447
+
29448
+ /* A phone: each link is a 44px touch target. */
29449
+ @media (max-width: 640px) {
29450
+ .cn-saved-views-widget__link[data-v-8ca66162] {
29451
+ align-items: center;
29452
+ display: inline-flex;
29453
+ min-height: 44px;
29454
+ }
29455
+ }
29456
+
28496
29457
 
28497
29458
  .cn-notepad-widget-form[data-v-c752df66] {
28498
29459
  display: flex;
@@ -28805,6 +29766,42 @@ a.cn-record-list__inline-title[data-v-7073b362] {
28805
29766
  gap: 2px;
28806
29767
  }
28807
29768
 
29769
+ /* The chips: the compact segmented group, left, in the card the grid draws. */
29770
+ .cn-workspace-filter-widget--chips[data-v-f0d5c1c6] {
29771
+ flex-direction: row;
29772
+ flex-wrap: wrap;
29773
+ align-items: center;
29774
+ }
29775
+
29776
+ /* A bar: its controls in one row, an `align: "end"` control pushed right. */
29777
+ .cn-workspace-filter-widget--bar[data-v-f0d5c1c6] {
29778
+ flex-direction: row;
29779
+ flex-wrap: wrap;
29780
+ align-items: center;
29781
+ gap: 12px 16px;
29782
+ }
29783
+
29784
+ /* An inline control sits in a bar: label left of the control, width to its content. */
29785
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] {
29786
+ flex-direction: row;
29787
+ align-items: center;
29788
+ gap: 8px;
29789
+ width: auto;
29790
+ }
29791
+ .cn-workspace-filter-widget--inline .cn-workspace-filter-widget__label[data-v-f0d5c1c6] {
29792
+ font-weight: 400;
29793
+ color: var(--color-text-maxcontrast);
29794
+ }
29795
+ .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29796
+ margin-inline-start: auto;
29797
+ }
29798
+ .cn-workspace-filter-widget--end ~ .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29799
+ margin-inline-start: 0;
29800
+ }
29801
+ .cn-workspace-filter-widget__toggle[data-v-f0d5c1c6] {
29802
+ font-weight: 600;
29803
+ }
29804
+
28808
29805
  /* The start card: text left, control (and link) right, as PqDashboard's "Contact starten". */
28809
29806
  .cn-workspace-filter-widget--start[data-v-f0d5c1c6] {
28810
29807
  flex-direction: row;
@@ -28847,6 +29844,27 @@ a.cn-record-list__inline-title[data-v-7073b362] {
28847
29844
  font-size: 0.85em;
28848
29845
  }
28849
29846
 
29847
+ /* On a phone the bar's controls take a row each (the chips already wrap), and
29848
+ a switch and a select are 44px touch targets. */
29849
+ @media (max-width: 640px) {
29850
+ .cn-workspace-filter-widget--bar > .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] {
29851
+ flex: 1 1 100%;
29852
+ }
29853
+ .cn-workspace-filter-widget--bar > .cn-workspace-filter-widget--end[data-v-f0d5c1c6] {
29854
+ margin-inline-start: 0;
29855
+ }
29856
+ .cn-workspace-filter-widget--inline .cn-workspace-filter-widget__toggle[data-v-f0d5c1c6] {
29857
+ min-height: 44px;
29858
+ }
29859
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] .v-select {
29860
+ flex: 1 1 auto;
29861
+ min-width: 0;
29862
+ }
29863
+ .cn-workspace-filter-widget--inline[data-v-f0d5c1c6] .vs__dropdown-toggle {
29864
+ min-height: 44px;
29865
+ }
29866
+ }
29867
+
28850
29868
 
28851
29869
  .cn-data-matrix[data-v-6e3e1a0f] {
28852
29870
  display: flex;
@@ -36476,6 +37494,17 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
36476
37494
  .cn-dashboard-page__content-item[data-v-824052fe] {
36477
37495
  width: 100%;
36478
37496
  }
37497
+ /* On a phone (screens-dashboard-phone) the touch targets of a board dashboard
37498
+ are 44px: the widget Actions menu and the KPI tiles. */
37499
+ @media (max-width: 640px) {
37500
+ .cn-dashboard-page--board[data-v-824052fe] .cn-widget-wrapper__actions .action-item__menutoggle,
37501
+ .cn-dashboard-page--board[data-v-824052fe] .cn-widget-wrapper__actions .button-vue {
37502
+ min-height: 44px;
37503
+ }
37504
+ .cn-dashboard-page--board .cn-dashboard-page__kpi-cell[data-v-824052fe] {
37505
+ min-height: 44px;
37506
+ }
37507
+ }
36479
37508
 
36480
37509
 
36481
37510
  /* Trigger: strip NcActions' default button chrome down to just the chip span. */