@conduction/nextcloud-vue 2.104.0 → 2.106.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 (224) hide show
  1. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  2. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  5. package/dist/esm/components/CnCardGrid/CnCardGrid.vue.js +1 -1
  6. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +18 -0
  7. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
  8. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js +3 -1
  9. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
  10. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue.js +1 -1
  11. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +18 -0
  12. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  13. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +1 -1
  14. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  15. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  16. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +93 -1
  17. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  18. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  19. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  20. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +6 -3
  21. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  22. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +3 -3
  23. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  24. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +112 -5
  25. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  26. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  27. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue.js +9 -0
  28. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue.js.map +1 -0
  29. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js +24 -0
  30. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js.map +1 -0
  31. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js +49 -0
  32. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js.map +1 -0
  33. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  34. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +36 -18
  35. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  36. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +17 -38
  37. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  38. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  39. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  40. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  41. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue.js +1 -1
  42. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js +1 -1
  43. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue2.js.map +1 -1
  44. package/dist/esm/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue3.js.map +1 -1
  45. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue.js +1 -1
  46. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js +2 -0
  47. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue2.js.map +1 -1
  48. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js +32 -29
  49. package/dist/esm/components/CnFeaturesBoard/CnFeaturesBoard.vue3.js.map +1 -1
  50. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  51. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +53 -2
  52. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  53. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +119 -111
  54. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  55. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue.js +1 -1
  56. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js +62 -1
  57. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue2.js.map +1 -1
  58. package/dist/esm/components/CnFlowRunsWidget/CnFlowRunsWidget.vue3.js.map +1 -1
  59. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue.js +1 -1
  60. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js +73 -4
  61. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue2.js.map +1 -1
  62. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js +74 -27
  63. package/dist/esm/components/CnFlowsPage/CnFlowBoard.vue3.js.map +1 -1
  64. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +208 -46
  65. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  66. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +121 -98
  67. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  68. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +1 -1
  69. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +24 -0
  70. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -1
  71. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +20 -4
  72. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -1
  73. package/dist/esm/components/CnIndexPage/useSelfFetchList.js +25 -6
  74. package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
  75. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +112 -1
  76. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  77. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +100 -44
  78. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  79. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue.js +1 -1
  80. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js +67 -4
  81. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js.map +1 -1
  82. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js +1 -1
  83. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js.map +1 -1
  84. package/dist/esm/components/CnNoticeWidget/CnNoticeWidget.vue.js +9 -0
  85. package/dist/esm/components/CnNoticeWidget/CnNoticeWidget.vue.js.map +1 -0
  86. package/dist/esm/components/CnNoticeWidget/CnNoticeWidget.vue2.js +88 -0
  87. package/dist/esm/components/CnNoticeWidget/CnNoticeWidget.vue2.js.map +1 -0
  88. package/dist/esm/components/CnNoticeWidget/CnNoticeWidget.vue3.js +39 -0
  89. package/dist/esm/components/CnNoticeWidget/CnNoticeWidget.vue3.js.map +1 -0
  90. package/dist/esm/components/CnObjectCard/CnObjectCard.vue.js +1 -1
  91. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +295 -12
  92. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
  93. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +267 -144
  94. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
  95. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue.js +1 -1
  96. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +4 -0
  97. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
  98. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +3 -1
  99. package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
  100. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  101. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +93 -1
  102. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  103. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +322 -246
  104. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  105. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue.js +1 -1
  106. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js +122 -7
  107. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js.map +1 -1
  108. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js +189 -93
  109. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js.map +1 -1
  110. package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js +1 -1
  111. package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js.map +1 -1
  112. package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js +3 -3
  113. package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js.map +1 -1
  114. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue.js +1 -1
  115. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
  116. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +16 -4
  117. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
  118. package/dist/esm/components/CnTabs/CnTabs.vue.js +1 -1
  119. package/dist/esm/components/CnTabs/CnTabs.vue2.js.map +1 -1
  120. package/dist/esm/components/CnTabs/CnTabs.vue3.js.map +1 -1
  121. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  122. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +42 -0
  123. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  124. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +38 -19
  125. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  126. package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue.js +9 -0
  127. package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue.js.map +1 -0
  128. package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue2.js +258 -0
  129. package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue2.js.map +1 -0
  130. package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue3.js +69 -0
  131. package/dist/esm/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue3.js.map +1 -0
  132. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
  133. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js +11 -0
  134. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
  135. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +4 -4
  136. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
  137. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js +16 -14
  138. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js.map +1 -1
  139. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +12 -0
  140. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  141. package/dist/esm/index.js +2 -0
  142. package/dist/esm/index.js.map +1 -1
  143. package/dist/esm/l10n/en.json.js +24 -1
  144. package/dist/esm/l10n/en.json.js.map +1 -1
  145. package/dist/esm/l10n/nl.json.js +24 -1
  146. package/dist/esm/l10n/nl.json.js.map +1 -1
  147. package/dist/esm/library-style.js +1 -1
  148. package/dist/esm/nextcloud-vue.css +1369 -748
  149. package/dist/esm/utils/dueText.js +18 -3
  150. package/dist/esm/utils/dueText.js.map +1 -1
  151. package/dist/esm/utils/libraryWidgetKeys.js +2 -0
  152. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  153. package/dist/esm/utils/nextcloudApps.js +45 -0
  154. package/dist/esm/utils/nextcloudApps.js.map +1 -0
  155. package/dist/esm/utils/scopeListLayout.js +9 -2
  156. package/dist/esm/utils/scopeListLayout.js.map +1 -1
  157. package/dist/esm/utils/sortOrder.js +11 -1
  158. package/dist/esm/utils/sortOrder.js.map +1 -1
  159. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  160. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  161. package/dist/esm/utils/visibleWhen.js +12 -4
  162. package/dist/esm/utils/visibleWhen.js.map +1 -1
  163. package/dist/nextcloud-vue.cjs.js +8965 -6497
  164. package/dist/nextcloud-vue.cjs.js.map +2 -2
  165. package/dist/nextcloud-vue.css +1369 -748
  166. package/l10n/en.json +24 -1
  167. package/l10n/nl.json +24 -1
  168. package/package.json +1 -1
  169. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +1 -1
  170. package/src/components/CnCardGrid/CnCardGrid.md +2 -0
  171. package/src/components/CnCardGrid/CnCardGrid.vue +20 -0
  172. package/src/components/CnCellRenderer/CnCellRenderer.vue +19 -1
  173. package/src/components/CnChartWidget/CnChartWidget.md +2 -0
  174. package/src/components/CnChartWidget/CnChartWidget.vue +93 -1
  175. package/src/components/CnDashboardPage/CnDashboardPage.vue +9 -6
  176. package/src/components/CnDetailPage/CnDetailPage.md +3 -2
  177. package/src/components/CnDetailPage/CnDetailPage.vue +112 -5
  178. package/src/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue +60 -0
  179. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +36 -29
  180. package/src/components/CnFactsWidget/CnFactsWidget.vue +4 -0
  181. package/src/components/CnFeaturesAndRoadmapView/CnFeaturesAndRoadmapView.vue +1 -1
  182. package/src/components/CnFeaturesBoard/CnFeaturesBoard.vue +4 -1
  183. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +70 -4
  184. package/src/components/CnFlowRunsWidget/CnFlowRunsWidget.vue +62 -1
  185. package/src/components/CnFlowsPage/CnFlowBoard.vue +132 -8
  186. package/src/components/CnIndexPage/CnIndexPage.md +8 -5
  187. package/src/components/CnIndexPage/CnIndexPage.vue +236 -54
  188. package/src/components/CnIndexPage/CnIndexPageWidgets.vue +36 -1
  189. package/src/components/CnIndexPage/useSelfFetchList.js +25 -6
  190. package/src/components/CnIndexSidebar/CnIndexSidebar.md +2 -0
  191. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +148 -1
  192. package/src/components/CnNcWidgetWidget/CnNcWidgetWidget.vue +68 -5
  193. package/src/components/CnNoticeWidget/CnNoticeWidget.vue +153 -0
  194. package/src/components/CnNoticeWidget/index.js +12 -0
  195. package/src/components/CnObjectCard/CnObjectCard.md +1 -0
  196. package/src/components/CnObjectCard/CnObjectCard.vue +354 -13
  197. package/src/components/CnObjectSidebar/CnFilesTab.vue +6 -0
  198. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +190 -4
  199. package/src/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue +209 -9
  200. package/src/components/CnSettingsField/CnSettingsField.vue +4 -1
  201. package/src/components/CnSetupWizard/CnSetupWizard.vue +9 -1
  202. package/src/components/CnTabs/CnTabs.vue +11 -0
  203. package/src/components/CnTabsWidget/CnTabsWidget.vue +91 -18
  204. package/src/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.md +11 -0
  205. package/src/components/CnTeamWorkloadWidget/CnTeamWorkloadWidget.vue +382 -0
  206. package/src/components/CnTeamWorkloadWidget/index.js +14 -0
  207. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +15 -4
  208. package/src/components/CnWidgetGrid/builtInWidgets.js +2 -0
  209. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +12 -0
  210. package/src/components/index.js +2 -0
  211. package/src/css/dialog.css +20 -2
  212. package/src/css/index-page.css +14 -2
  213. package/src/css/look-board-detail.css +125 -8
  214. package/src/css/look-board-index.css +100 -4
  215. package/src/css/look-board.css +122 -14
  216. package/src/index.js +2 -1
  217. package/src/schemas/app-manifest-v2.schema.json +110 -8
  218. package/src/utils/dueText.js +18 -3
  219. package/src/utils/libraryWidgetKeys.js +2 -0
  220. package/src/utils/nextcloudApps.js +50 -0
  221. package/src/utils/scopeListLayout.js +9 -2
  222. package/src/utils/sortOrder.js +10 -0
  223. package/src/utils/validateManifestV2.compiled.js +3 -3
  224. package/src/utils/visibleWhen.js +12 -4
@@ -1 +1 @@
1
- {"version":3,"file":"CnIndexSidebar.vue2.js","sources":["../../../../src/components/CnIndexSidebar/CnIndexSidebar.vue"],"sourcesContent":["<template>\n\t<NcAppSidebar\n\t\tv-model:open=\"internalOpen\"\n\t\t:name=\"resolvedName\"\n\t\t:title=\"resolvedName\"\n\t\t:subname=\"resolvedSubname\"\n\t\t:active=\"internalActiveTab\"\n\t\t:compact=\"!!resolvedIcon\"\n\t\t@close=\"$emit('update:open', false)\"\n\t\t@update:active=\"onTabChange\">\n\t\t<!-- Schema icon in sidebar header -->\n\t\t<template v-if=\"resolvedIcon\" #header>\n\t\t\t<div class=\"cn-index-sidebar__header-icon\">\n\t\t\t\t<CnIcon :name=\"resolvedIcon\" :size=\"32\" />\n\t\t\t</div>\n\t\t</template>\n\n\t\t<!-- Search Tab -->\n\t\t<NcAppSidebarTab\n\t\t\tid=\"search-tab\"\n\t\t\t:name=\"searchTabLabel\"\n\t\t\t:order=\"1\">\n\t\t\t<template #icon>\n\t\t\t\t<FilterOutline :size=\"20\" />\n\t\t\t</template>\n\n\t\t\t<div class=\"cn-index-sidebar__tab-content\">\n\t\t\t\t<div v-if=\"$slots['search-above']\" class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<slot name=\"search-above\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t:modelValue=\"searchValue || ''\"\n\t\t\t\t\t\t:placeholder=\"searchPlaceholder\"\n\t\t\t\t\t\t:label=\"searchLabel\"\n\t\t\t\t\t\t@update:modelValue=\"$emit('search', $event)\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"hasActiveFilters\" class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<NcButton variant=\"tertiary\" @click=\"onClearAll\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<FilterRemoveOutline :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ clearAllLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"schemaFilters.length > 0\" class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<h3>{{ filtersLabel }}</h3>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"filter in schemaFilters\"\n\t\t\t\t\t\t:key=\"filter.key\"\n\t\t\t\t\t\tclass=\"cn-index-sidebar__filter-group\">\n\t\t\t\t\t\t<div class=\"cn-index-sidebar__filter-header\">\n\t\t\t\t\t\t\t<span class=\"cn-index-sidebar__filter-label\">{{ filter.label }}</span>\n\t\t\t\t\t\t\t<NcPopover v-if=\"filter.description\" popupRole=\"dialog\">\n\t\t\t\t\t\t\t\t<template #trigger>\n\t\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t\t\t\t\t\t\t:aria-label=\"filter.label + ' info'\"\n\t\t\t\t\t\t\t\t\t\tclass=\"cn-index-sidebar__info-btn\">\n\t\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t\t<InformationOutline :size=\"16\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<p class=\"cn-index-sidebar__filter-description\">\n\t\t\t\t\t\t\t\t\t{{ filter.description }}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</NcPopover>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<!-- A window, not a list of values: two bounds and a\n\t\t\t\t\t\t preset, emitted as the `{ from, to }` the range\n\t\t\t\t\t\t filters upstream are already spelled in. -->\n\t\t\t\t\t\t<CnDateRangePicker\n\t\t\t\t\t\t\tv-if=\"filter.type === 'date-range'\"\n\t\t\t\t\t\t\tclass=\"cn-index-sidebar__date-range\"\n\t\t\t\t\t\t\t:modelValue=\"getRangeValue(filter)\"\n\t\t\t\t\t\t\t:presets=\"filter.presets || rangePresets\"\n\t\t\t\t\t\t\t:fromLabel=\"filter.fromLabel || fromLabel\"\n\t\t\t\t\t\t\t:toLabel=\"filter.toLabel || toLabel\"\n\t\t\t\t\t\t\t:presetLabel=\"filter.label\"\n\t\t\t\t\t\t\t@update:modelValue=\"onRangeChange(filter.key, $event)\" />\n\t\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t\tv-else-if=\"filter.type === 'text'\"\n\t\t\t\t\t\t\tclass=\"cn-index-sidebar__filter-text\"\n\t\t\t\t\t\t\t:modelValue=\"getTextValue(filter)\"\n\t\t\t\t\t\t\t:label=\"filter.label\"\n\t\t\t\t\t\t\t:placeholder=\"filter.label\"\n\t\t\t\t\t\t\t@update:modelValue=\"onTextChange(filter.key, $event)\" />\n\t\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\tclass=\"cn-index-sidebar__select\"\n\t\t\t\t\t\t\t:modelValue=\"getSelectedFilterOptions(filter)\"\n\t\t\t\t\t\t\t:options=\"getFilterOptions(filter)\"\n\t\t\t\t\t\t\t:loading=\"isLoadingOptions(filter)\"\n\t\t\t\t\t\t\tplaceholder=\"Select...\"\n\t\t\t\t\t\t\t:inputLabel=\"filter.label\"\n\t\t\t\t\t\t\t:multiple=\"filter.multiple !== false\"\n\t\t\t\t\t\t\t:keepOpen=\"filter.multiple !== false\"\n\t\t\t\t\t\t\t:clearable=\"true\"\n\t\t\t\t\t\t\t@update:modelValue=\"onFilterChange(filter.key, $event)\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<slot name=\"search-extra\" />\n\t\t\t</div>\n\t\t</NcAppSidebarTab>\n\n\t\t<!-- Columns Tab -->\n\t\t<NcAppSidebarTab\n\t\t\tid=\"columns-tab\"\n\t\t\t:name=\"columnsTabLabel\"\n\t\t\t:order=\"2\">\n\t\t\t<template #icon>\n\t\t\t\t<ViewColumnOutline :size=\"20\" />\n\t\t\t</template>\n\n\t\t\t<div class=\"cn-index-sidebar__tab-content\">\n\t\t\t\t<div class=\"cn-sidebar-columns\">\n\t\t\t\t\t<h3>{{ columnsHeading }}</h3>\n\t\t\t\t\t<p class=\"cn-sidebar-columns__description\">\n\t\t\t\t\t\t{{ columnsDescription }}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t<!-- Order and pin the visible columns. Drag and the Move buttons\n\t\t\t\t\t call the same method (moveColumn); the table header is not a drag target. -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"personalColumns && orderedVisible.length > 0\"\n\t\t\t\t\t\tclass=\"cn-sidebar-columns__order\"\n\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-order\">\n\t\t\t\t\t\t<h4>{{ t('nextcloud-vue', 'Order and pin') }}</h4>\n\t\t\t\t\t\t<ol class=\"cn-sidebar-columns__order-list\">\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tv-for=\"(item, index) in orderedVisible\"\n\t\t\t\t\t\t\t\t:key=\"item.key\"\n\t\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__order-item\"\n\t\t\t\t\t\t\t\t:class=\"{ 'cn-sidebar-columns__order-item--pinned': index < pinnedCount }\"\n\t\t\t\t\t\t\t\tdraggable=\"true\"\n\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-order-item\"\n\t\t\t\t\t\t\t\t@dragstart=\"dragFrom = index\"\n\t\t\t\t\t\t\t\t@dragover.prevent\n\t\t\t\t\t\t\t\t@drop.prevent=\"onDropColumn(index)\">\n\t\t\t\t\t\t\t\t<DragVertical :size=\"18\" class=\"cn-sidebar-columns__handle\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t<span class=\"cn-sidebar-columns__order-label\">{{ item.label }}</span>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:disabled=\"index === 0 || index === pinnedCount\"\n\t\t\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Move {column} up', { column: item.label })\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-up\"\n\t\t\t\t\t\t\t\t\t@click=\"moveColumn(index, index - 1)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<ChevronUp :size=\"18\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:disabled=\"index === orderedVisible.length - 1 || index === pinnedCount - 1\"\n\t\t\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Move {column} down', { column: item.label })\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-down\"\n\t\t\t\t\t\t\t\t\t@click=\"moveColumn(index, index + 1)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<ChevronDown :size=\"18\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:aria-pressed=\"String(index < pinnedCount)\"\n\t\t\t\t\t\t\t\t\t:aria-label=\"index < pinnedCount ? t('nextcloud-vue', 'Unpin {column}', { column: item.label }) : t('nextcloud-vue', 'Pin {column}', { column: item.label })\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-pin\"\n\t\t\t\t\t\t\t\t\t@click=\"togglePin(index)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<Pin v-if=\"index < pinnedCount\" :size=\"18\" />\n\t\t\t\t\t\t\t\t\t\t<PinOutline v-else :size=\"18\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-reset\"\n\t\t\t\t\t\t\t@click=\"$emit('columns-reset')\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Reset columns') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<template v-if=\"allColumns.length > 0 || allGroups.length > 0\">\n\t\t\t\t\t\t<!-- Schema properties group (collapsible) -->\n\t\t\t\t\t\t<div v-if=\"allColumns.length > 0\" class=\"cn-sidebar-columns__group cn-sidebar-columns__group--collapsible\">\n\t\t\t\t\t\t\t<div class=\"cn-sidebar-columns__group-header\" @click=\"propertiesExpanded = !propertiesExpanded\">\n\t\t\t\t\t\t\t\t<ChevronDown v-if=\"propertiesExpanded\" :size=\"20\" />\n\t\t\t\t\t\t\t\t<ChevronRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t\t<h4>{{ resolvedPropertiesLabel }}</h4>\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\t:modelValue=\"isGroupAllVisible(allColumns)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__select-all\"\n\t\t\t\t\t\t\t\t\t@click.stop\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleGroupAll(allColumns)\">\n\t\t\t\t\t\t\t\t\tAll\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-if=\"propertiesExpanded\" class=\"cn-sidebar-columns__group-content\">\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\tv-for=\"col in allColumns\"\n\t\t\t\t\t\t\t\t\t:key=\"col.key\"\n\t\t\t\t\t\t\t\t\t:modelValue=\"isColumnVisible(col.key)\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleColumn(col.key)\">\n\t\t\t\t\t\t\t\t\t{{ col.label }}\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Extra column groups (built-in Metadata + external) -->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"group in allGroups\"\n\t\t\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__group cn-sidebar-columns__group--collapsible\">\n\t\t\t\t\t\t\t<div class=\"cn-sidebar-columns__group-header\" @click=\"toggleGroup(group.id)\">\n\t\t\t\t\t\t\t\t<ChevronDown v-if=\"expandedGroups[group.id]\" :size=\"20\" />\n\t\t\t\t\t\t\t\t<ChevronRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t\t<h4 :lang=\"langOf(group.label)\">\n\t\t\t\t\t\t\t\t\t{{ shown(group.label) }}\n\t\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\t:modelValue=\"isGroupAllVisible(group.columns)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__select-all\"\n\t\t\t\t\t\t\t\t\t@click.stop\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleGroupAll(group.columns)\">\n\t\t\t\t\t\t\t\t\tAll\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-if=\"expandedGroups[group.id]\" class=\"cn-sidebar-columns__group-content\">\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\tv-for=\"col in group.columns\"\n\t\t\t\t\t\t\t\t\t:key=\"col.key\"\n\t\t\t\t\t\t\t\t\t:modelValue=\"isColumnVisible(col.key)\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleColumn(col.key)\">\n\t\t\t\t\t\t\t\t\t{{ shown(col.label) }}\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<p v-else class=\"cn-sidebar-columns__empty\">\n\t\t\t\t\t\tNo columns available. Provide a schema to auto-generate columns.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\n\t\t\t\t<slot name=\"columns-extra\" />\n\t\t\t</div>\n\t\t</NcAppSidebarTab>\n\n\t\t<!-- Extra tabs injected by the consumer -->\n\t\t<slot name=\"tabs\" />\n\t</NcAppSidebar>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcAppSidebar, NcAppSidebarTab, NcButton, NcCheckboxRadioSwitch, NcPopover, NcSelect, NcTextField } from '@nextcloud/vue'\nimport ChevronDown from 'vue-material-design-icons/ChevronDown.vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport ChevronUp from 'vue-material-design-icons/ChevronUp.vue'\nimport DragVertical from 'vue-material-design-icons/DragVertical.vue'\nimport FilterOutline from 'vue-material-design-icons/FilterOutline.vue'\nimport FilterRemoveOutline from 'vue-material-design-icons/FilterRemoveOutline.vue'\nimport InformationOutline from 'vue-material-design-icons/InformationOutline.vue'\nimport Pin from 'vue-material-design-icons/Pin.vue'\nimport PinOutline from 'vue-material-design-icons/PinOutline.vue'\nimport ViewColumnOutline from 'vue-material-design-icons/ViewColumnOutline.vue'\nimport { METADATA_COLUMNS } from '../../constants/metadata.js'\nimport { facetOptions } from '../../utils/facets.js'\nimport { labelLang } from '../../utils/manifestTranslate.js'\nimport { columnsFromSchema, filtersFromSchema } from '../../utils/schema.js'\nimport { CnDateRangePicker, DEFAULT_DATE_RANGE_PRESETS } from '../CnDateRangePicker/index.js'\nimport { CnIcon } from '../CnIcon/index.js'\n\n/**\n * CnIndexSidebar — Reusable NcAppSidebar wrapper with Search + Columns tabs.\n *\n * Designed to be schema-driven: pass a schema and the sidebar auto-generates\n * search filters, column visibility controls, and the standard Metadata group.\n * Title and properties group label are derived from schema.title by default.\n *\n * Must be rendered at the App.vue level as a sibling of NcAppContent.\n * Use provide/inject to connect it to page components.\n *\n * @slot search-above - Content rendered above the search field in the Search tab (e.g. hints, quick actions).\n * @slot search-extra - Content rendered below the search field and filters in the Search tab (e.g. saved searches).\n */\nexport default {\n\tname: 'CnIndexSidebar',\n\n\tcomponents: {\n\t\tNcAppSidebar,\n\t\tNcAppSidebarTab,\n\t\tNcTextField,\n\t\tNcSelect,\n\t\tCnDateRangePicker,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcPopover,\n\t\tNcButton,\n\t\tCnIcon,\n\t\tFilterOutline,\n\t\tFilterRemoveOutline,\n\t\tViewColumnOutline,\n\t\tChevronDown,\n\t\tChevronRight,\n\t\tChevronUp,\n\t\tDragVertical,\n\t\tPin,\n\t\tPinOutline,\n\t\tInformationOutline,\n\t},\n\n\tinject: {\n\t\t/**\n\t\t * Consumer translation function, provided by CnAppRoot as\n\t\t * `cnTranslate: this.translate` (bound to the host app's id). Column and\n\t\t * filter labels come from schema property titles, authored in English as\n\t\t * the canonical source; the visible label is resolved through this\n\t\t * function so it follows the user's language. Defaults to identity when\n\t\t * used standalone (no CnAppRoot ancestor).\n\t\t */\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/** Sidebar title. Defaults to schema.title when not set. */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name or emoji. Defaults to schema.icon when not set. */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Schema object for auto-generating filters, columns, and labels */\n\t\tschema: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Array of currently visible column keys */\n\t\tvisibleColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Show the Order and pin controls in the Columns tab, and Reset columns.\n\t\t * Off keeps show and hide only.\n\t\t */\n\t\tpersonalColumns: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** How many of the first visible columns are pinned to the start of the table. */\n\t\tpinnedCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/** Current search term */\n\t\tsearchValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Whether sidebar is open */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Current active facet filters: { fieldName: [values] } */\n\t\tactiveFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Live facet data from the API: `{ fieldName: { values: [{ value, count?, label? }] } }` */\n\t\tfacetData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Additional column groups beyond schema properties and the built-in Metadata.\n\t\t * Each group: { id: string, label: string, columns: Array<{key, label}>, expanded?: boolean }\n\t\t */\n\t\tcolumnGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether to include the built-in Metadata column group */\n\t\tshowMetadata: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Search input placeholder */\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Type to search…'),\n\t\t},\n\n\t\t/** Search tab label */\n\t\tsearchTabLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Search'),\n\t\t},\n\n\t\t/** Columns tab label */\n\t\tcolumnsTabLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Columns'),\n\t\t},\n\n\t\t/** Search section heading */\n\t\tsearchLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Search'),\n\t\t},\n\n\t\t/** Filters section heading */\n\t\tfiltersLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Filters'),\n\t\t},\n\n\t\t/** \"Clear all\" button label, shown when search or a filter is active */\n\t\tclearAllLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Clear all'),\n\t\t},\n\n\t\t/**\n\t\t * Filter declarations for a page with no schema of its own: `{ name: declaration }`, the same shape a schema property has. Wins over `schema`, and feeds the Search tab only.\n\t\t *\n\t\t * 🔑 A FILTER IS NOT A COLUMN, which is the whole reason this is its\n\t\t * own prop rather than a synthetic `schema`. The schema feeds BOTH\n\t\t * tabs, so a page that declared its filters there would also offer\n\t\t * them in the Columns tab: the toggle would tick and no column would\n\t\t * appear, because the table's columns come from somewhere else\n\t\t * entirely. These reach the Search tab and nothing else.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tfilterFields: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Start-of-window label on a date-range filter. */\n\t\tfromLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'From'),\n\t\t},\n\n\t\t/** End-of-window label on a date-range filter. */\n\t\ttoLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'To'),\n\t\t},\n\n\t\t/** Columns section heading */\n\t\tcolumnsHeading: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Column visibility'),\n\t\t},\n\n\t\t/** Columns section description */\n\t\tcolumnsDescription: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Select which columns to display in the table'),\n\t\t},\n\n\t\t/** Override label for the schema properties group. Defaults to schema.title. */\n\t\tpropertiesGroupLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * ID of the tab that should be active when the sidebar opens.\n\t\t * Built-in IDs are 'search-tab' and 'columns-tab'.\n\t\t * Use the id you set on your custom NcAppSidebarTab for custom tabs.\n\t\t */\n\t\tdefaultTab: {\n\t\t\ttype: String,\n\t\t\tdefault: 'search-tab',\n\t\t},\n\n\t\t/**\n\t\t * Whether the current user is an admin.\n\t\t * When false, schema properties with `adminOnly: true` are hidden from filters.\n\t\t */\n\t\tuserIsAdmin: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\temits: ['clear-filters', 'columns-change', 'columns-reorder', 'columns-reset', 'pin-change', 'filter-change', 'search', 'tab-change', 'update:open'],\n\n\tdata() {\n\t\treturn {\n\t\t\tinternalOpen: this.open,\n\t\t\tinternalActiveTab: this.defaultTab,\n\t\t\t/** Index of the column being dragged in the Order and pin list, or -1. */\n\t\t\tdragFrom: -1,\n\t\t\tpropertiesExpanded: true,\n\t\t\texpandedGroups: {},\n\t\t\t/**\n\t\t\t * Options loaded for a `reference` filter, keyed by field.\n\t\t\t *\n\t\t\t * A reference picker lists rows from ANOTHER list (the cases a\n\t\t\t * task can hang off, say), and neither the schema nor a facet\n\t\t\t * bucket carries them. Loaded once per field and cached, because\n\t\t\t * the sidebar re-renders on every keystroke in the search box.\n\t\t\t *\n\t\t\t * @type {Record<string, Array<{id: string, label: string}>>}\n\t\t\t */\n\t\t\treferenceOptions: {},\n\t\t\t/** @type {Record<string, boolean>} Which reference loads are in flight. */\n\t\t\treferenceLoading: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** Resolved icon — explicit prop overrides schema.icon */\n\t\tresolvedIcon() {\n\t\t\treturn this.icon || this.schema?.icon || ''\n\t\t},\n\n\t\t/** Sidebar name — schema title, shown as the h2 header */\n\t\tresolvedName() {\n\t\t\tif (this.title) {\n\t\t\t\treturn this.shown(this.title)\n\t\t\t}\n\t\t\treturn this.schema?.title || 'Search'\n\t\t},\n\n\t\t/** Sidebar subname — schema description, shown below the name */\n\t\tresolvedSubname() {\n\t\t\treturn this.schema?.description || ''\n\t\t},\n\n\t\t/** Properties group label — derived from schema.title if not explicitly set */\n\t\tresolvedPropertiesLabel() {\n\t\t\tif (this.propertiesGroupLabel) {\n\t\t\t\treturn this.propertiesGroupLabel\n\t\t\t}\n\t\t\treturn this.schema?.title || 'Properties'\n\t\t},\n\n\t\t/** All available columns from schema */\n\t\tallColumns() {\n\t\t\tif (!this.schema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn columnsFromSchema(this.schema, { translate: this.cnTranslate })\n\t\t},\n\n\t\t/** Filter definitions from schema (facetable properties, respecting RBAC) */\n\t\tschemaFilters() {\n\t\t\t// An explicitly declared filter set wins: it is the page saying\n\t\t\t// \"these are the questions\", where a schema only says \"these are\n\t\t\t// the properties\" and the sidebar has to guess which of them are\n\t\t\t// worth asking about.\n\t\t\tif (this.filterFields && Object.keys(this.filterFields).length > 0) {\n\t\t\t\treturn filtersFromSchema(\n\t\t\t\t\t{ properties: this.filterFields },\n\t\t\t\t\t{ isAdmin: this.userIsAdmin, translate: this.cnTranslate },\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (!this.schema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn filtersFromSchema(this.schema, { isAdmin: this.userIsAdmin, translate: this.cnTranslate })\n\t\t},\n\n\t\t/** Whether a search term or any facet filter is currently active. */\n\t\thasActiveFilters() {\n\t\t\tif ((this.searchValue || '').length > 0) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Object.values(this.activeFilters || {}).some((v) => (Array.isArray(v) ? v.length > 0 : !!v))\n\t\t},\n\n\t\t/** Combined column groups: built-in Metadata + external groups */\n\t\tallGroups() {\n\t\t\tconst groups = []\n\t\t\tif (this.showMetadata && this.schema) {\n\t\t\t\tgroups.push({\n\t\t\t\t\tid: 'metadata',\n\t\t\t\t\tlabel: 'Metadata',\n\t\t\t\t\tcolumns: METADATA_COLUMNS,\n\t\t\t\t\texpanded: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn [...groups, ...this.columnGroups]\n\t\t},\n\n\t\t/** Label of each column key, from the schema properties and the groups. */\n\t\tcolumnLabels() {\n\t\t\tconst map = {}\n\t\t\tthis.allColumns.forEach((c) => {\n\t\t\t\tmap[c.key] = c.label\n\t\t\t})\n\t\t\tthis.allGroups.forEach((g) => g.columns.forEach((c) => {\n\t\t\t\tmap[c.key] = c.label\n\t\t\t}))\n\t\t\treturn map\n\t\t},\n\n\t\t/** The visible columns in their order, with labels (all columns when none were chosen). */\n\t\torderedVisible() {\n\t\t\tconst keys = this.visibleColumns === null ? this.allColumnKeys : this.visibleColumns\n\t\t\treturn keys.filter((k) => this.columnLabels[k] !== undefined).map((key) => ({ key, label: this.columnLabels[key] }))\n\t\t},\n\n\t\t/** All column keys across schema properties and all groups */\n\t\tallColumnKeys() {\n\t\t\treturn [\n\t\t\t\t...this.allColumns.map((c) => c.key),\n\t\t\t\t...this.allGroups.flatMap((g) => g.columns.map((c) => c.key)),\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * The presets a date-range filter offers when it declares none.\n\t\t *\n\t\t * Just `custom`. Every shipped preset rolls BACKWARDS from today\n\t\t * (\"Last 30 days\"), and a sidebar filter is as often a forward window\n\t\t * (\"due next week\") as a backward one. Offering a preset that answers\n\t\t * the wrong direction is worse than offering none: it is one click and\n\t\t * it looks deliberate.\n\t\t *\n\t\t * @return {Array<object>} The preset list.\n\t\t */\n\t\trangePresets() {\n\t\t\t// Taken FROM the picker's own list rather than written out again, so\n\t\t\t// the one preset a filter offers carries the same id and the same\n\t\t\t// label as everywhere else it appears.\n\t\t\treturn DEFAULT_DATE_RANGE_PRESETS\n\t\t\t\t.filter((preset) => preset.id === 'custom')\n\t\t\t\t.map((preset) => ({ ...preset }))\n\t\t},\n\t},\n\n\twatch: {\n\t\topen(val) {\n\t\t\tthis.internalOpen = val\n\t\t},\n\n\t\tinternalOpen(val) {\n\t\t\tthis.$emit('update:open', val)\n\t\t},\n\n\t\tdefaultTab(val) {\n\t\t\tthis.internalActiveTab = val\n\t\t},\n\n\t\tallGroups: {\n\t\t\timmediate: true,\n\t\t\thandler(groups) {\n\t\t\t\tfor (const group of groups) {\n\t\t\t\t\tif (!(group.id in this.expandedGroups)) {\n\t\t\t\t\t\tthis.expandedGroups[group.id] = group.expanded !== false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A reference picker's rows load once the schema naming them arrives,\n\t\t// which on a manifest page is after mount. Watching the FILTERS rather\n\t\t// than calling from `mounted()` covers both orders.\n\t\tschemaFilters: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadReferenceOptions()\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\n\t\t/**\n\t\t * A manifest label through the injected lookup, or as written.\n\t\t *\n\t\t * @param {string} text The label as written.\n\t\t * @return {string} The label in the user's language.\n\t\t */\n\t\tshown(text) {\n\t\t\treturn typeof this.cnTranslate === 'function' && typeof text === 'string' && text !== '' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The `lang` of a label that fell back to its written text in another language.\n\t\t *\n\t\t * @param {string} text The label as written.\n\t\t * @return {string|undefined} The source language, or undefined.\n\t\t */\n\t\tlangOf(text) {\n\t\t\treturn labelLang(this.cnTranslate, text) || undefined\n\t\t},\n\n\t\t/**\n\t\t * Handle tab change from NcAppSidebar\n\t\t *\n\t\t * @param {string} tabId Tab identifier\n\t\t */\n\t\tonTabChange(tabId) {\n\t\t\tthis.internalActiveTab = tabId\n\t\t\tthis.$emit('tab-change', tabId)\n\t\t},\n\n\t\t/**\n\t\t * Check if a column is currently visible\n\t\t *\n\t\t * @param {string} key Column key\n\t\t */\n\t\tisColumnVisible(key) {\n\t\t\tif (this.visibleColumns === null) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn this.visibleColumns.includes(key)\n\t\t},\n\n\t\t/**\n\t\t * Check if all columns in a group are visible\n\t\t *\n\t\t * @param {string[]} columns Array of column keys\n\t\t */\n\t\tisGroupAllVisible(columns) {\n\t\t\treturn columns.every((col) => this.isColumnVisible(col.key))\n\t\t},\n\n\t\t/**\n\t\t * Toggle a single column's visibility\n\t\t *\n\t\t * @param {string} key Column key\n\t\t */\n\t\ttoggleColumn(key) {\n\t\t\tlet newVisible\n\t\t\tif (this.visibleColumns === null) {\n\t\t\t\tnewVisible = this.allColumnKeys.filter((k) => k !== key)\n\t\t\t} else if (this.isColumnVisible(key)) {\n\t\t\t\tnewVisible = this.visibleColumns.filter((k) => k !== key)\n\t\t\t} else {\n\t\t\t\tnewVisible = [...this.visibleColumns, key]\n\t\t\t}\n\t\t\tthis.$emit('columns-change', newVisible)\n\t\t},\n\n\t\t/**\n\t\t * Select or deselect all columns in a group\n\t\t *\n\t\t * @param {string[]} columns Array of column keys\n\t\t */\n\t\ttoggleGroupAll(columns) {\n\t\t\tconst groupKeys = columns.map((c) => c.key)\n\t\t\tconst allVisible = this.isGroupAllVisible(columns)\n\n\t\t\tlet newVisible\n\t\t\tif (this.visibleColumns === null) {\n\t\t\t\t// Currently all visible — deselect this group\n\t\t\t\tnewVisible = this.allColumnKeys.filter((k) => !groupKeys.includes(k))\n\t\t\t} else if (allVisible) {\n\t\t\t\t// All in group visible — deselect them\n\t\t\t\tnewVisible = this.visibleColumns.filter((k) => !groupKeys.includes(k))\n\t\t\t} else {\n\t\t\t\t// Not all visible — select them all\n\t\t\t\tconst current = new Set(this.visibleColumns)\n\t\t\t\tgroupKeys.forEach((k) => current.add(k))\n\t\t\t\tnewVisible = [...current]\n\t\t\t}\n\t\t\tthis.$emit('columns-change', newVisible)\n\t\t},\n\n\t\t/**\n\t\t * Move a visible column to another place in the order. The drag and the\n\t\t * Move buttons both call this. A column stays inside its block: pinned\n\t\t * columns move among the pinned, the rest among the rest.\n\t\t *\n\t\t * @param {number} from Current index.\n\t\t * @param {number} to Target index.\n\t\t * @return {void}\n\t\t */\n\t\tmoveColumn(from, to) {\n\t\t\tconst list = this.orderedVisible.map((c) => c.key)\n\t\t\tconst lo = from < this.pinnedCount ? 0 : this.pinnedCount\n\t\t\tconst hi = from < this.pinnedCount ? this.pinnedCount - 1 : list.length - 1\n\t\t\tconst target = Math.min(hi, Math.max(lo, to))\n\t\t\tif (from < 0 || from >= list.length || target === from) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst [moved] = list.splice(from, 1)\n\t\t\tlist.splice(target, 0, moved)\n\t\t\t/**\n\t\t\t * @event columns-reorder Emitted when the user moves a column. Payload: the visible column keys in their new order.\n\t\t\t * @type {string[]}\n\t\t\t */\n\t\t\tthis.$emit('columns-reorder', list)\n\t\t},\n\n\t\t/**\n\t\t * Dropping a dragged column on another row.\n\t\t *\n\t\t * @param {number} index Index of the row it was dropped on.\n\t\t * @return {void}\n\t\t */\n\t\tonDropColumn(index) {\n\t\t\tconst from = this.dragFrom\n\t\t\tthis.dragFrom = -1\n\t\t\tif (from >= 0) {\n\t\t\t\tthis.moveColumn(from, index)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pin a column (it joins the pinned block at the start) or unpin it (it\n\t\t * leaves that block, to the first place after it).\n\t\t *\n\t\t * @param {number} index Index of the column.\n\t\t * @return {void}\n\t\t */\n\t\ttogglePin(index) {\n\t\t\tconst list = this.orderedVisible.map((c) => c.key)\n\t\t\tconst [moved] = list.splice(index, 1)\n\t\t\tlet count = this.pinnedCount\n\t\t\tif (index < count) {\n\t\t\t\tcount -= 1\n\t\t\t\tlist.splice(count, 0, moved)\n\t\t\t} else {\n\t\t\t\tlist.splice(count, 0, moved)\n\t\t\t\tcount += 1\n\t\t\t}\n\t\t\tthis.$emit('columns-reorder', list)\n\t\t\t/**\n\t\t\t * @event pin-change Emitted when a column is pinned or unpinned. Payload: the new number of pinned columns.\n\t\t\t * @type {number}\n\t\t\t */\n\t\t\tthis.$emit('pin-change', count)\n\t\t},\n\n\t\t/**\n\t\t * Toggle a group's expanded state\n\t\t *\n\t\t * @param {string} groupId Filter group identifier\n\t\t */\n\t\ttoggleGroup(groupId) {\n\t\t\tthis.expandedGroups[groupId] = !this.expandedGroups[groupId]\n\t\t},\n\n\t\t/**\n\t\t * Get filter options for a filter definition\n\t\t *\n\t\t * @param {object} filter Filter object\n\t\t */\n\t\tgetFilterOptions(filter) {\n\t\t\tconst live = facetOptions(\n\t\t\t\tthis.facetData[filter.key],\n\t\t\t\t(count) => t('nextcloud-vue', 'No value ({count})', { count }),\n\t\t\t)\n\t\t\tif (live !== null) {\n\t\t\t\treturn live\n\t\t\t}\n\t\t\t// A reference picker's rows come from another list, and neither a\n\t\t\t// schema enum nor a facet bucket can carry them.\n\t\t\tif (filter.type === 'reference') {\n\t\t\t\treturn this.referenceOptions[filter.key] || []\n\t\t\t}\n\t\t\treturn filter.options || []\n\t\t},\n\n\t\t/**\n\t\t * Whether a reference filter is still fetching its rows.\n\t\t *\n\t\t * Shown rather than hidden: an empty picker that is still loading and\n\t\t * one that genuinely has nothing to pick look identical, and only one\n\t\t * of them means the person should stop waiting.\n\t\t *\n\t\t * @param {object} filter The filter definition.\n\t\t *\n\t\t * @return {boolean} True while the load is in flight.\n\t\t */\n\t\tisLoadingOptions(filter) {\n\t\t\treturn this.referenceLoading[filter.key] === true\n\t\t},\n\n\t\t/**\n\t\t * The `{ from, to }` window a date-range filter currently holds.\n\t\t *\n\t\t * @param {object} filter The filter definition.\n\t\t *\n\t\t * @return {object|null} The window, or null when none is set.\n\t\t */\n\t\tgetRangeValue(filter) {\n\t\t\tconst value = this.activeFilters[filter.key]\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * A date-range filter changed.\n\t\t *\n\t\t * Emitted in the SAME `filter-change` shape every other control uses,\n\t\t * with the window as the payload's `values`, so a consumer has one\n\t\t * event to listen to and not two.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {object|null} window The `{ from, to, preset }` value.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonRangeChange(key, window) {\n\t\t\tconst from = (window && window.from) || ''\n\t\t\tconst to = (window && window.to) || ''\n\t\t\tif (from === '' && to === '') {\n\t\t\t\tthis.$emit('filter-change', { key, values: [] })\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('filter-change', { key, values: { from, to } })\n\t\t},\n\n\t\t/**\n\t\t * The text a `text` filter currently holds.\n\t\t *\n\t\t * @param {object} filter The filter definition.\n\t\t *\n\t\t * @return {string} The current value.\n\t\t */\n\t\tgetTextValue(filter) {\n\t\t\tconst value = this.activeFilters[filter.key]\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.length > 0 ? String(value[0]) : ''\n\t\t\t}\n\t\t\treturn (value === undefined || value === null) ? '' : String(value)\n\t\t},\n\n\t\t/**\n\t\t * A text filter changed.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {string} value The typed value.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonTextChange(key, value) {\n\t\t\tconst text = String(value ?? '').trim()\n\t\t\tthis.$emit('filter-change', { key, values: text === '' ? [] : [text] })\n\t\t},\n\n\t\t/**\n\t\t * Load the rows a `reference` filter picks from.\n\t\t *\n\t\t * Reads `optionsSource` off the schema property:\n\t\t * `{ register, schema, labelField, valueField, limit }`. The VALUE is\n\t\t * the referenced object's uuid, because that is what the server\n\t\t * filters on; the label is only what the person reads.\n\t\t *\n\t\t * Failures are logged and leave the picker empty rather than throwing:\n\t\t * one unreachable list must not take the whole sidebar with it.\n\t\t *\n\t\t * @return {Promise<void>} Resolves when every reference filter settled.\n\t\t */\n\t\tasync loadReferenceOptions() {\n\t\t\tconst pending = this.schemaFilters.filter((filter) => filter.type === 'reference'\n\t\t\t\t&& filter.optionsSource\n\t\t\t\t&& this.referenceOptions[filter.key] === undefined\n\t\t\t\t&& this.referenceLoading[filter.key] !== true)\n\t\t\tif (pending.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst [{ default: axios }, { generateUrl }] = await Promise.all([\n\t\t\t\timport('@nextcloud/axios'),\n\t\t\t\timport('@nextcloud/router'),\n\t\t\t])\n\n\t\t\tawait Promise.all(pending.map(async (filter) => {\n\t\t\t\tconst source = filter.optionsSource\n\t\t\t\tif (!source.register || !source.schema) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.referenceLoading = { ...this.referenceLoading, [filter.key]: true }\n\t\t\t\ttry {\n\t\t\t\t\tconst url = generateUrl('/apps/openregister/api/objects/{register}/{schema}', {\n\t\t\t\t\t\tregister: source.register,\n\t\t\t\t\t\tschema: source.schema,\n\t\t\t\t\t})\n\t\t\t\t\tconst response = await axios.get(url, { params: { _limit: source.limit || 200 } })\n\t\t\t\t\tconst rows = response?.data?.results || response?.data || []\n\t\t\t\t\tconst valueField = source.valueField || '@self.uuid'\n\t\t\t\t\tconst labelField = source.labelField || 'title'\n\t\t\t\t\tconst options = rows\n\t\t\t\t\t\t.map((row) => ({\n\t\t\t\t\t\t\tid: this.readPath(row, valueField),\n\t\t\t\t\t\t\tlabel: String(this.readPath(row, labelField) ?? this.readPath(row, valueField) ?? ''),\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.filter((option) => option.id !== null && option.id !== undefined && option.id !== '')\n\t\t\t\t\t\t.sort((a, b) => a.label.localeCompare(b.label))\n\t\t\t\t\tthis.referenceOptions = { ...this.referenceOptions, [filter.key]: options }\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(`[CnIndexSidebar] the reference filter \"${filter.key}\" could not load its options`, error)\n\t\t\t\t\tthis.referenceOptions = { ...this.referenceOptions, [filter.key]: [] }\n\t\t\t\t} finally {\n\t\t\t\t\tthis.referenceLoading = { ...this.referenceLoading, [filter.key]: false }\n\t\t\t\t}\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Read a dotted path off a row (`@self.uuid`, `title`).\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {string} path The dotted path.\n\t\t *\n\t\t * @return {unknown} The value, or undefined.\n\t\t */\n\t\treadPath(row, path) {\n\t\t\treturn String(path).split('.').reduce((acc, part) => ((acc === null || acc === undefined) ? acc : acc[part]), row)\n\t\t},\n\n\t\t/**\n\t\t * Get currently selected options for a filter\n\t\t *\n\t\t * @param {object} filter Filter object\n\t\t */\n\t\tgetSelectedFilterOptions(filter) {\n\t\t\tconst value = this.activeFilters[filter.key]\n\t\t\tif (!value) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst values = Array.isArray(value) ? value : [value]\n\t\t\tconst options = this.getFilterOptions(filter)\n\t\t\treturn values.map((v) => options.find((o) => o.id === v) || { id: v, label: String(v) })\n\t\t},\n\n\t\t/**\n\t\t * Handle filter select change\n\t\t *\n\t\t * @param {string} key Filter key\n\t\t * @param {Array} selected Selected values\n\t\t */\n\t\tonFilterChange(key, selected) {\n\t\t\t// 🔴 A SINGLE-VALUED SELECT EMITS AN OBJECT, NOT AN ARRAY. NcSelect\n\t\t\t// changes the SHAPE of its payload with `multiple`, and `.map` on\n\t\t\t// the object shape throws inside an event handler, where Vue logs\n\t\t\t// it and carries on: the picker looks inert and the console says\n\t\t\t// why in a place nobody is looking.\n\t\t\tconst chosen = Array.isArray(selected) ? selected : (selected ? [selected] : [])\n\t\t\tconst values = chosen.map((o) => ((o && typeof o === 'object' && 'id' in o) ? o.id : o))\n\t\t\tthis.$emit('filter-change', { key, values })\n\t\t},\n\n\t\t/**\n\t\t * \"Clear all\" click: reset search and every active facet filter in\n\t\t * one shot, so the parent does one fetch instead of one per field.\n\t\t */\n\t\tonClearAll() {\n\t\t\t/**\n\t\t\t * @event clear-filters \"Clear all\" clicked; reset search and every active filter.\n\t\t\t */\n\t\t\tthis.$emit('clear-filters')\n\t\t},\n\t},\n}\n</script>\n\n<!-- Styles in css/index-sidebar.css -->\n"],"names":["CnDateRangePicker","CnIcon","t"],"mappings":"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"}
1
+ {"version":3,"file":"CnIndexSidebar.vue2.js","sources":["../../../../src/components/CnIndexSidebar/CnIndexSidebar.vue"],"sourcesContent":["<template>\n\t<NcAppSidebar\n\t\tv-model:open=\"internalOpen\"\n\t\t:name=\"resolvedName\"\n\t\t:title=\"resolvedName\"\n\t\t:subname=\"resolvedSubname\"\n\t\t:active=\"internalActiveTab\"\n\t\t:compact=\"!!resolvedIcon\"\n\t\t@close=\"$emit('update:open', false)\"\n\t\t@update:active=\"onTabChange\">\n\t\t<!-- Schema icon in sidebar header -->\n\t\t<template v-if=\"resolvedIcon\" #header>\n\t\t\t<div class=\"cn-index-sidebar__header-icon\">\n\t\t\t\t<CnIcon :name=\"resolvedIcon\" :size=\"32\" />\n\t\t\t</div>\n\t\t</template>\n\n\t\t<!-- Search Tab -->\n\t\t<NcAppSidebarTab\n\t\t\tid=\"search-tab\"\n\t\t\t:name=\"searchTabLabel\"\n\t\t\t:order=\"1\">\n\t\t\t<template #icon>\n\t\t\t\t<FilterOutline :size=\"20\" />\n\t\t\t</template>\n\n\t\t\t<div class=\"cn-index-sidebar__tab-content\">\n\t\t\t\t<div v-if=\"$slots['search-above']\" class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<slot name=\"search-above\" />\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t:modelValue=\"searchValue || ''\"\n\t\t\t\t\t\t:placeholder=\"searchPlaceholder\"\n\t\t\t\t\t\t:label=\"searchLabel\"\n\t\t\t\t\t\t@update:modelValue=\"$emit('search', $event)\" />\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Sort (list, card and map views; the table sorts by its headers):\n\t\t\t\t the field, the direction and the order the list has now. -->\n\t\t\t\t<div v-if=\"sortOptions.length > 0\" class=\"cn-index-sidebar__section cn-index-sidebar__sort\" data-testid=\"cn-index-sidebar-sort\">\n\t\t\t\t\t<h3>{{ t('nextcloud-vue', 'Sort') }}</h3>\n\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t:modelValue=\"sortSelected\"\n\t\t\t\t\t\t:options=\"sortOptions\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\t\t:inputLabel=\"t('nextcloud-vue', 'Sort by')\"\n\t\t\t\t\t\t@update:modelValue=\"onSortField\" />\n\t\t\t\t\t<div class=\"cn-index-sidebar__sort-direction\" role=\"radiogroup\" :aria-label=\"t('nextcloud-vue', 'Direction')\">\n\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\tname=\"cn-index-sidebar-sort-direction\"\n\t\t\t\t\t\t\tvalue=\"asc\"\n\t\t\t\t\t\t\t:modelValue=\"sortDirection\"\n\t\t\t\t\t\t\t:disabled=\"!sortSelected\"\n\t\t\t\t\t\t\t@update:modelValue=\"onSortDirection\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Ascending') }}\n\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t\t\tname=\"cn-index-sidebar-sort-direction\"\n\t\t\t\t\t\t\tvalue=\"desc\"\n\t\t\t\t\t\t\t:modelValue=\"sortDirection\"\n\t\t\t\t\t\t\t:disabled=\"!sortSelected\"\n\t\t\t\t\t\t\t@update:modelValue=\"onSortDirection\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Descending') }}\n\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t</div>\n\t\t\t\t\t<p class=\"cn-index-sidebar__sort-current\" data-testid=\"cn-index-sidebar-sort-current\">\n\t\t\t\t\t\t{{ currentSortText }}\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"hasActiveFilters\" class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<NcButton variant=\"tertiary\" @click=\"onClearAll\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<FilterRemoveOutline :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ clearAllLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<div v-if=\"schemaFilters.length > 0\" class=\"cn-index-sidebar__section\">\n\t\t\t\t\t<h3>{{ filtersLabel }}</h3>\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-for=\"filter in schemaFilters\"\n\t\t\t\t\t\t:key=\"filter.key\"\n\t\t\t\t\t\tclass=\"cn-index-sidebar__filter-group\">\n\t\t\t\t\t\t<div class=\"cn-index-sidebar__filter-header\">\n\t\t\t\t\t\t\t<span class=\"cn-index-sidebar__filter-label\">{{ filter.label }}</span>\n\t\t\t\t\t\t\t<NcPopover v-if=\"filter.description\" popupRole=\"dialog\">\n\t\t\t\t\t\t\t\t<template #trigger>\n\t\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t\t\t\t\t\t\t\t:aria-label=\"filter.label + ' info'\"\n\t\t\t\t\t\t\t\t\t\tclass=\"cn-index-sidebar__info-btn\">\n\t\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t\t<InformationOutline :size=\"16\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<p class=\"cn-index-sidebar__filter-description\">\n\t\t\t\t\t\t\t\t\t{{ filter.description }}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</NcPopover>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<!-- A window, not a list of values: two bounds and a\n\t\t\t\t\t\t preset, emitted as the `{ from, to }` the range\n\t\t\t\t\t\t filters upstream are already spelled in. -->\n\t\t\t\t\t\t<CnDateRangePicker\n\t\t\t\t\t\t\tv-if=\"filter.type === 'date-range'\"\n\t\t\t\t\t\t\tclass=\"cn-index-sidebar__date-range\"\n\t\t\t\t\t\t\t:modelValue=\"getRangeValue(filter)\"\n\t\t\t\t\t\t\t:presets=\"filter.presets || rangePresets\"\n\t\t\t\t\t\t\t:fromLabel=\"filter.fromLabel || fromLabel\"\n\t\t\t\t\t\t\t:toLabel=\"filter.toLabel || toLabel\"\n\t\t\t\t\t\t\t:presetLabel=\"filter.label\"\n\t\t\t\t\t\t\t@update:modelValue=\"onRangeChange(filter.key, $event)\" />\n\t\t\t\t\t\t<NcTextField\n\t\t\t\t\t\t\tv-else-if=\"filter.type === 'text'\"\n\t\t\t\t\t\t\tclass=\"cn-index-sidebar__filter-text\"\n\t\t\t\t\t\t\t:modelValue=\"getTextValue(filter)\"\n\t\t\t\t\t\t\t:label=\"filter.label\"\n\t\t\t\t\t\t\t:placeholder=\"filter.label\"\n\t\t\t\t\t\t\t@update:modelValue=\"onTextChange(filter.key, $event)\" />\n\t\t\t\t\t\t<NcSelect\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\tclass=\"cn-index-sidebar__select\"\n\t\t\t\t\t\t\t:modelValue=\"getSelectedFilterOptions(filter)\"\n\t\t\t\t\t\t\t:options=\"getFilterOptions(filter)\"\n\t\t\t\t\t\t\t:loading=\"isLoadingOptions(filter)\"\n\t\t\t\t\t\t\tplaceholder=\"Select...\"\n\t\t\t\t\t\t\t:inputLabel=\"filter.label\"\n\t\t\t\t\t\t\t:multiple=\"filter.multiple !== false\"\n\t\t\t\t\t\t\t:keepOpen=\"filter.multiple !== false\"\n\t\t\t\t\t\t\t:clearable=\"true\"\n\t\t\t\t\t\t\t@update:modelValue=\"onFilterChange(filter.key, $event)\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<slot name=\"search-extra\" />\n\t\t\t</div>\n\t\t</NcAppSidebarTab>\n\n\t\t<!-- Columns Tab -->\n\t\t<NcAppSidebarTab\n\t\t\tid=\"columns-tab\"\n\t\t\t:name=\"columnsTabLabel\"\n\t\t\t:order=\"2\">\n\t\t\t<template #icon>\n\t\t\t\t<ViewColumnOutline :size=\"20\" />\n\t\t\t</template>\n\n\t\t\t<div class=\"cn-index-sidebar__tab-content\">\n\t\t\t\t<div class=\"cn-sidebar-columns\">\n\t\t\t\t\t<h3>{{ columnsHeading }}</h3>\n\t\t\t\t\t<p class=\"cn-sidebar-columns__description\">\n\t\t\t\t\t\t{{ columnsDescription }}\n\t\t\t\t\t</p>\n\n\t\t\t\t\t<!-- Order and pin the visible columns. Drag and the Move buttons\n\t\t\t\t\t call the same method (moveColumn); the table header is not a drag target. -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-if=\"personalColumns && orderedVisible.length > 0\"\n\t\t\t\t\t\tclass=\"cn-sidebar-columns__order\"\n\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-order\">\n\t\t\t\t\t\t<h4>{{ t('nextcloud-vue', 'Order and pin') }}</h4>\n\t\t\t\t\t\t<ol class=\"cn-sidebar-columns__order-list\">\n\t\t\t\t\t\t\t<li\n\t\t\t\t\t\t\t\tv-for=\"(item, index) in orderedVisible\"\n\t\t\t\t\t\t\t\t:key=\"item.key\"\n\t\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__order-item\"\n\t\t\t\t\t\t\t\t:class=\"{ 'cn-sidebar-columns__order-item--pinned': index < pinnedCount }\"\n\t\t\t\t\t\t\t\tdraggable=\"true\"\n\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-order-item\"\n\t\t\t\t\t\t\t\t@dragstart=\"dragFrom = index\"\n\t\t\t\t\t\t\t\t@dragover.prevent\n\t\t\t\t\t\t\t\t@drop.prevent=\"onDropColumn(index)\">\n\t\t\t\t\t\t\t\t<DragVertical :size=\"18\" class=\"cn-sidebar-columns__handle\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t<span class=\"cn-sidebar-columns__order-label\">{{ item.label }}</span>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:disabled=\"index === 0 || index === pinnedCount\"\n\t\t\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Move {column} up', { column: item.label })\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-up\"\n\t\t\t\t\t\t\t\t\t@click=\"moveColumn(index, index - 1)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<ChevronUp :size=\"18\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:disabled=\"index === orderedVisible.length - 1 || index === pinnedCount - 1\"\n\t\t\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Move {column} down', { column: item.label })\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-down\"\n\t\t\t\t\t\t\t\t\t@click=\"moveColumn(index, index + 1)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<ChevronDown :size=\"18\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t\t\t:aria-pressed=\"String(index < pinnedCount)\"\n\t\t\t\t\t\t\t\t\t:aria-label=\"index < pinnedCount ? t('nextcloud-vue', 'Unpin {column}', { column: item.label }) : t('nextcloud-vue', 'Pin {column}', { column: item.label })\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-pin\"\n\t\t\t\t\t\t\t\t\t@click=\"togglePin(index)\">\n\t\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t\t<Pin v-if=\"index < pinnedCount\" :size=\"18\" />\n\t\t\t\t\t\t\t\t\t\t<PinOutline v-else :size=\"18\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\tdata-testid=\"cn-sidebar-columns-reset\"\n\t\t\t\t\t\t\t@click=\"$emit('columns-reset')\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Reset columns') }}\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<template v-if=\"allColumns.length > 0 || allGroups.length > 0\">\n\t\t\t\t\t\t<!-- Schema properties group (collapsible) -->\n\t\t\t\t\t\t<div v-if=\"allColumns.length > 0\" class=\"cn-sidebar-columns__group cn-sidebar-columns__group--collapsible\">\n\t\t\t\t\t\t\t<div class=\"cn-sidebar-columns__group-header\" @click=\"propertiesExpanded = !propertiesExpanded\">\n\t\t\t\t\t\t\t\t<ChevronDown v-if=\"propertiesExpanded\" :size=\"20\" />\n\t\t\t\t\t\t\t\t<ChevronRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t\t<h4>{{ resolvedPropertiesLabel }}</h4>\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\t:modelValue=\"isGroupAllVisible(allColumns)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__select-all\"\n\t\t\t\t\t\t\t\t\t@click.stop\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleGroupAll(allColumns)\">\n\t\t\t\t\t\t\t\t\tAll\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-if=\"propertiesExpanded\" class=\"cn-sidebar-columns__group-content\">\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\tv-for=\"col in allColumns\"\n\t\t\t\t\t\t\t\t\t:key=\"col.key\"\n\t\t\t\t\t\t\t\t\t:modelValue=\"isColumnVisible(col.key)\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleColumn(col.key)\">\n\t\t\t\t\t\t\t\t\t{{ col.label }}\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Extra column groups (built-in Metadata + external) -->\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-for=\"group in allGroups\"\n\t\t\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__group cn-sidebar-columns__group--collapsible\">\n\t\t\t\t\t\t\t<div class=\"cn-sidebar-columns__group-header\" @click=\"toggleGroup(group.id)\">\n\t\t\t\t\t\t\t\t<ChevronDown v-if=\"expandedGroups[group.id]\" :size=\"20\" />\n\t\t\t\t\t\t\t\t<ChevronRight v-else :size=\"20\" />\n\t\t\t\t\t\t\t\t<h4 :lang=\"langOf(group.label)\">\n\t\t\t\t\t\t\t\t\t{{ shown(group.label) }}\n\t\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\t:modelValue=\"isGroupAllVisible(group.columns)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-sidebar-columns__select-all\"\n\t\t\t\t\t\t\t\t\t@click.stop\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleGroupAll(group.columns)\">\n\t\t\t\t\t\t\t\t\tAll\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-if=\"expandedGroups[group.id]\" class=\"cn-sidebar-columns__group-content\">\n\t\t\t\t\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\t\t\t\t\tv-for=\"col in group.columns\"\n\t\t\t\t\t\t\t\t\t:key=\"col.key\"\n\t\t\t\t\t\t\t\t\t:modelValue=\"isColumnVisible(col.key)\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleColumn(col.key)\">\n\t\t\t\t\t\t\t\t\t{{ shown(col.label) }}\n\t\t\t\t\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<p v-else class=\"cn-sidebar-columns__empty\">\n\t\t\t\t\t\tNo columns available. Provide a schema to auto-generate columns.\n\t\t\t\t\t</p>\n\t\t\t\t</div>\n\n\t\t\t\t<slot name=\"columns-extra\" />\n\t\t\t</div>\n\t\t</NcAppSidebarTab>\n\n\t\t<!-- Extra tabs injected by the consumer -->\n\t\t<slot name=\"tabs\" />\n\t</NcAppSidebar>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcAppSidebar, NcAppSidebarTab, NcButton, NcCheckboxRadioSwitch, NcPopover, NcSelect, NcTextField } from '@nextcloud/vue'\nimport ChevronDown from 'vue-material-design-icons/ChevronDown.vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport ChevronUp from 'vue-material-design-icons/ChevronUp.vue'\nimport DragVertical from 'vue-material-design-icons/DragVertical.vue'\nimport FilterOutline from 'vue-material-design-icons/FilterOutline.vue'\nimport FilterRemoveOutline from 'vue-material-design-icons/FilterRemoveOutline.vue'\nimport InformationOutline from 'vue-material-design-icons/InformationOutline.vue'\nimport Pin from 'vue-material-design-icons/Pin.vue'\nimport PinOutline from 'vue-material-design-icons/PinOutline.vue'\nimport ViewColumnOutline from 'vue-material-design-icons/ViewColumnOutline.vue'\nimport { METADATA_COLUMNS } from '../../constants/metadata.js'\nimport { facetOptions } from '../../utils/facets.js'\nimport { labelLang } from '../../utils/manifestTranslate.js'\nimport { columnsFromSchema, filtersFromSchema } from '../../utils/schema.js'\nimport { reverseSortKeys, sameSortKeys } from '../../utils/sortOrder.js'\nimport { CnDateRangePicker, DEFAULT_DATE_RANGE_PRESETS } from '../CnDateRangePicker/index.js'\nimport { CnIcon } from '../CnIcon/index.js'\n\n/**\n * CnIndexSidebar — Reusable NcAppSidebar wrapper with Search + Columns tabs.\n *\n * Designed to be schema-driven: pass a schema and the sidebar auto-generates\n * search filters, column visibility controls, and the standard Metadata group.\n * Title and properties group label are derived from schema.title by default.\n *\n * Must be rendered at the App.vue level as a sibling of NcAppContent.\n * Use provide/inject to connect it to page components.\n *\n * @slot search-above - Content rendered above the search field in the Search tab (e.g. hints, quick actions).\n * @slot search-extra - Content rendered below the search field and filters in the Search tab (e.g. saved searches).\n */\nexport default {\n\tname: 'CnIndexSidebar',\n\n\tcomponents: {\n\t\tNcAppSidebar,\n\t\tNcAppSidebarTab,\n\t\tNcTextField,\n\t\tNcSelect,\n\t\tCnDateRangePicker,\n\t\tNcCheckboxRadioSwitch,\n\t\tNcPopover,\n\t\tNcButton,\n\t\tCnIcon,\n\t\tFilterOutline,\n\t\tFilterRemoveOutline,\n\t\tViewColumnOutline,\n\t\tChevronDown,\n\t\tChevronRight,\n\t\tChevronUp,\n\t\tDragVertical,\n\t\tPin,\n\t\tPinOutline,\n\t\tInformationOutline,\n\t},\n\n\tinject: {\n\t\t/**\n\t\t * Consumer translation function, provided by CnAppRoot as\n\t\t * `cnTranslate: this.translate` (bound to the host app's id). Column and\n\t\t * filter labels come from schema property titles, authored in English as\n\t\t * the canonical source; the visible label is resolved through this\n\t\t * function so it follows the user's language. Defaults to identity when\n\t\t * used standalone (no CnAppRoot ancestor).\n\t\t */\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/** Sidebar title. Defaults to schema.title when not set. */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name or emoji. Defaults to schema.icon when not set. */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Schema object for auto-generating filters, columns, and labels */\n\t\tschema: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Array of currently visible column keys */\n\t\tvisibleColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Show the Order and pin controls in the Columns tab, and Reset columns.\n\t\t * Off keeps show and hide only.\n\t\t */\n\t\tpersonalColumns: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** How many of the first visible columns are pinned to the start of the table. */\n\t\tpinnedCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/**\n\t\t * The orders the Sort section offers, `[{ value, label, keys }]`, each\n\t\t * `keys` a `[{ key, order }]` list read as its ascending form. Empty\n\t\t * draws no Sort section (the table view sorts by its headers).\n\t\t */\n\t\tsortOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** The list's current order, `[{ key, order }]`. */\n\t\tcurrentSort: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Current search term */\n\t\tsearchValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Whether sidebar is open */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Current active facet filters: { fieldName: [values] } */\n\t\tactiveFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Live facet data from the API: `{ fieldName: { values: [{ value, count?, label? }] } }` */\n\t\tfacetData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Additional column groups beyond schema properties and the built-in Metadata.\n\t\t * Each group: { id: string, label: string, columns: Array<{key, label}>, expanded?: boolean }\n\t\t */\n\t\tcolumnGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether to include the built-in Metadata column group */\n\t\tshowMetadata: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Search input placeholder */\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Type to search…'),\n\t\t},\n\n\t\t/** Search tab label */\n\t\tsearchTabLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Search'),\n\t\t},\n\n\t\t/** Columns tab label */\n\t\tcolumnsTabLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Columns'),\n\t\t},\n\n\t\t/** Search section heading */\n\t\tsearchLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Search'),\n\t\t},\n\n\t\t/** Filters section heading */\n\t\tfiltersLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Filters'),\n\t\t},\n\n\t\t/** \"Clear all\" button label, shown when search or a filter is active */\n\t\tclearAllLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Clear all'),\n\t\t},\n\n\t\t/**\n\t\t * Filter declarations for a page with no schema of its own: `{ name: declaration }`, the same shape a schema property has. Wins over `schema`, and feeds the Search tab only.\n\t\t *\n\t\t * 🔑 A FILTER IS NOT A COLUMN, which is the whole reason this is its\n\t\t * own prop rather than a synthetic `schema`. The schema feeds BOTH\n\t\t * tabs, so a page that declared its filters there would also offer\n\t\t * them in the Columns tab: the toggle would tick and no column would\n\t\t * appear, because the table's columns come from somewhere else\n\t\t * entirely. These reach the Search tab and nothing else.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tfilterFields: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Start-of-window label on a date-range filter. */\n\t\tfromLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'From'),\n\t\t},\n\n\t\t/** End-of-window label on a date-range filter. */\n\t\ttoLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'To'),\n\t\t},\n\n\t\t/** Columns section heading */\n\t\tcolumnsHeading: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Column visibility'),\n\t\t},\n\n\t\t/** Columns section description */\n\t\tcolumnsDescription: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Select which columns to display in the table'),\n\t\t},\n\n\t\t/** Override label for the schema properties group. Defaults to schema.title. */\n\t\tpropertiesGroupLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * ID of the tab that should be active when the sidebar opens.\n\t\t * Built-in IDs are 'search-tab' and 'columns-tab'.\n\t\t * Use the id you set on your custom NcAppSidebarTab for custom tabs.\n\t\t */\n\t\tdefaultTab: {\n\t\t\ttype: String,\n\t\t\tdefault: 'search-tab',\n\t\t},\n\n\t\t/**\n\t\t * Whether the current user is an admin.\n\t\t * When false, schema properties with `adminOnly: true` are hidden from filters.\n\t\t */\n\t\tuserIsAdmin: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\n\temits: ['clear-filters', 'columns-change', 'columns-reorder', 'columns-reset', 'pin-change', 'filter-change', 'search', 'sort-change', 'tab-change', 'update:open'],\n\n\tdata() {\n\t\treturn {\n\t\t\tinternalOpen: this.open,\n\t\t\tinternalActiveTab: this.defaultTab,\n\t\t\t/** Index of the column being dragged in the Order and pin list, or -1. */\n\t\t\tdragFrom: -1,\n\t\t\tpropertiesExpanded: true,\n\t\t\texpandedGroups: {},\n\t\t\t/**\n\t\t\t * Options loaded for a `reference` filter, keyed by field.\n\t\t\t *\n\t\t\t * A reference picker lists rows from ANOTHER list (the cases a\n\t\t\t * task can hang off, say), and neither the schema nor a facet\n\t\t\t * bucket carries them. Loaded once per field and cached, because\n\t\t\t * the sidebar re-renders on every keystroke in the search box.\n\t\t\t *\n\t\t\t * @type {Record<string, Array<{id: string, label: string}>>}\n\t\t\t */\n\t\t\treferenceOptions: {},\n\t\t\t/** @type {Record<string, boolean>} Which reference loads are in flight. */\n\t\t\treferenceLoading: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The Sort option the current order matches, as declared or reversed.\n\t\t *\n\t\t * @return {{option: object, direction: string}|null} The match, or null.\n\t\t */\n\t\tsortMatch() {\n\t\t\tconst current = Array.isArray(this.currentSort) ? this.currentSort : []\n\t\t\tfor (const option of this.sortOptions) {\n\t\t\t\tconst keys = Array.isArray(option.keys) ? option.keys : []\n\t\t\t\tif (sameSortKeys(keys, current)) {\n\t\t\t\t\treturn { option, direction: 'asc' }\n\t\t\t\t}\n\t\t\t\tif (sameSortKeys(reverseSortKeys(keys), current)) {\n\t\t\t\t\treturn { option, direction: 'desc' }\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/** @return {object|null} The Sort option shown as chosen. */\n\t\tsortSelected() {\n\t\t\treturn this.sortMatch ? this.sortMatch.option : null\n\t\t},\n\n\t\t/** @return {string} The chosen direction, `asc` or `desc`. */\n\t\tsortDirection() {\n\t\t\treturn this.sortMatch ? this.sortMatch.direction : 'asc'\n\t\t},\n\n\t\t/**\n\t\t * The order the list has now, in words: \"Current order: Created,\n\t\t * descending\", or that it is not sorted.\n\t\t *\n\t\t * @return {string} The sentence.\n\t\t */\n\t\tcurrentSortText() {\n\t\t\tconst current = Array.isArray(this.currentSort) ? this.currentSort : []\n\t\t\tif (current.length === 0) {\n\t\t\t\treturn t('nextcloud-vue', 'Not sorted')\n\t\t\t}\n\t\t\tconst labelOf = (key) => {\n\t\t\t\tconst single = this.sortOptions.find((o) => Array.isArray(o.keys) && o.keys.length === 1 && o.keys[0].key === key)\n\t\t\t\treturn single ? single.label : key\n\t\t\t}\n\t\t\tconst order = this.sortMatch && this.sortMatch.option.keys.length > 1\n\t\t\t\t? `${this.sortMatch.option.label}, ${this.sortDirection === 'desc' ? t('nextcloud-vue', 'descending') : t('nextcloud-vue', 'ascending')}`\n\t\t\t\t: current.map((entry) => `${labelOf(entry.key)}, ${entry.order === 'desc' ? t('nextcloud-vue', 'descending') : t('nextcloud-vue', 'ascending')}`).join('; ')\n\t\t\treturn t('nextcloud-vue', 'Current order: {order}', { order })\n\t\t},\n\n\t\t/** Resolved icon — explicit prop overrides schema.icon */\n\t\tresolvedIcon() {\n\t\t\treturn this.icon || this.schema?.icon || ''\n\t\t},\n\n\t\t/** Sidebar name — schema title, shown as the h2 header */\n\t\tresolvedName() {\n\t\t\tif (this.title) {\n\t\t\t\treturn this.shown(this.title)\n\t\t\t}\n\t\t\treturn this.schema?.title || 'Search'\n\t\t},\n\n\t\t/** Sidebar subname — schema description, shown below the name */\n\t\tresolvedSubname() {\n\t\t\treturn this.schema?.description || ''\n\t\t},\n\n\t\t/** Properties group label — derived from schema.title if not explicitly set */\n\t\tresolvedPropertiesLabel() {\n\t\t\tif (this.propertiesGroupLabel) {\n\t\t\t\treturn this.propertiesGroupLabel\n\t\t\t}\n\t\t\treturn this.schema?.title || 'Properties'\n\t\t},\n\n\t\t/** All available columns from schema */\n\t\tallColumns() {\n\t\t\tif (!this.schema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn columnsFromSchema(this.schema, { translate: this.cnTranslate })\n\t\t},\n\n\t\t/** Filter definitions from schema (facetable properties, respecting RBAC) */\n\t\tschemaFilters() {\n\t\t\t// An explicitly declared filter set wins: it is the page saying\n\t\t\t// \"these are the questions\", where a schema only says \"these are\n\t\t\t// the properties\" and the sidebar has to guess which of them are\n\t\t\t// worth asking about.\n\t\t\tif (this.filterFields && Object.keys(this.filterFields).length > 0) {\n\t\t\t\treturn filtersFromSchema(\n\t\t\t\t\t{ properties: this.filterFields },\n\t\t\t\t\t{ isAdmin: this.userIsAdmin, translate: this.cnTranslate },\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (!this.schema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn filtersFromSchema(this.schema, { isAdmin: this.userIsAdmin, translate: this.cnTranslate })\n\t\t},\n\n\t\t/** Whether a search term or any facet filter is currently active. */\n\t\thasActiveFilters() {\n\t\t\tif ((this.searchValue || '').length > 0) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Object.values(this.activeFilters || {}).some((v) => (Array.isArray(v) ? v.length > 0 : !!v))\n\t\t},\n\n\t\t/** Combined column groups: built-in Metadata + external groups */\n\t\tallGroups() {\n\t\t\tconst groups = []\n\t\t\tif (this.showMetadata && this.schema) {\n\t\t\t\tgroups.push({\n\t\t\t\t\tid: 'metadata',\n\t\t\t\t\tlabel: 'Metadata',\n\t\t\t\t\tcolumns: METADATA_COLUMNS,\n\t\t\t\t\texpanded: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn [...groups, ...this.columnGroups]\n\t\t},\n\n\t\t/** Label of each column key, from the schema properties and the groups. */\n\t\tcolumnLabels() {\n\t\t\tconst map = {}\n\t\t\tthis.allColumns.forEach((c) => {\n\t\t\t\tmap[c.key] = c.label\n\t\t\t})\n\t\t\tthis.allGroups.forEach((g) => g.columns.forEach((c) => {\n\t\t\t\tmap[c.key] = c.label\n\t\t\t}))\n\t\t\treturn map\n\t\t},\n\n\t\t/** The visible columns in their order, with labels (all columns when none were chosen). */\n\t\torderedVisible() {\n\t\t\tconst keys = this.visibleColumns === null ? this.allColumnKeys : this.visibleColumns\n\t\t\treturn keys.filter((k) => this.columnLabels[k] !== undefined).map((key) => ({ key, label: this.columnLabels[key] }))\n\t\t},\n\n\t\t/** All column keys across schema properties and all groups */\n\t\tallColumnKeys() {\n\t\t\treturn [\n\t\t\t\t...this.allColumns.map((c) => c.key),\n\t\t\t\t...this.allGroups.flatMap((g) => g.columns.map((c) => c.key)),\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * The presets a date-range filter offers when it declares none.\n\t\t *\n\t\t * Just `custom`. Every shipped preset rolls BACKWARDS from today\n\t\t * (\"Last 30 days\"), and a sidebar filter is as often a forward window\n\t\t * (\"due next week\") as a backward one. Offering a preset that answers\n\t\t * the wrong direction is worse than offering none: it is one click and\n\t\t * it looks deliberate.\n\t\t *\n\t\t * @return {Array<object>} The preset list.\n\t\t */\n\t\trangePresets() {\n\t\t\t// Taken FROM the picker's own list rather than written out again, so\n\t\t\t// the one preset a filter offers carries the same id and the same\n\t\t\t// label as everywhere else it appears.\n\t\t\treturn DEFAULT_DATE_RANGE_PRESETS\n\t\t\t\t.filter((preset) => preset.id === 'custom')\n\t\t\t\t.map((preset) => ({ ...preset }))\n\t\t},\n\t},\n\n\twatch: {\n\t\topen(val) {\n\t\t\tthis.internalOpen = val\n\t\t},\n\n\t\tinternalOpen(val) {\n\t\t\tthis.$emit('update:open', val)\n\t\t},\n\n\t\tdefaultTab(val) {\n\t\t\tthis.internalActiveTab = val\n\t\t},\n\n\t\tallGroups: {\n\t\t\timmediate: true,\n\t\t\thandler(groups) {\n\t\t\t\tfor (const group of groups) {\n\t\t\t\t\tif (!(group.id in this.expandedGroups)) {\n\t\t\t\t\t\tthis.expandedGroups[group.id] = group.expanded !== false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A reference picker's rows load once the schema naming them arrives,\n\t\t// which on a manifest page is after mount. Watching the FILTERS rather\n\t\t// than calling from `mounted()` covers both orders.\n\t\tschemaFilters: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadReferenceOptions()\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * A field chosen in the Sort section: its order, in the direction\n\t\t * already chosen.\n\t\t *\n\t\t * @param {object|null} option The chosen option.\n\t\t * @return {void}\n\t\t */\n\t\tonSortField(option) {\n\t\t\tconst chosen = option && this.sortOptions.find((o) => o.value === option.value)\n\t\t\tif (!chosen) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.emitSort(chosen, this.sortDirection)\n\t\t},\n\n\t\t/**\n\t\t * A direction chosen in the Sort section, for the chosen field.\n\t\t *\n\t\t * @param {string} direction `asc` or `desc`.\n\t\t * @return {void}\n\t\t */\n\t\tonSortDirection(direction) {\n\t\t\tif (!this.sortSelected) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.emitSort(this.sortSelected, direction === 'desc' ? 'desc' : 'asc')\n\t\t},\n\n\t\t/**\n\t\t * Emit the order an option stands for in a direction.\n\t\t *\n\t\t * @param {object} option The Sort option.\n\t\t * @param {string} direction `asc` or `desc`.\n\t\t * @return {void}\n\t\t */\n\t\temitSort(option, direction) {\n\t\t\tconst keys = Array.isArray(option.keys) ? option.keys : []\n\t\t\t/**\n\t\t\t * @event sort-change The Sort section chose an order. Payload: `[{ key, order }]`.\n\t\t\t */\n\t\t\tthis.$emit('sort-change', direction === 'desc' ? reverseSortKeys(keys) : keys.map((k) => ({ key: k.key, order: k.order || 'asc' })))\n\t\t},\n\n\t\t/**\n\t\t * A manifest label through the injected lookup, or as written.\n\t\t *\n\t\t * @param {string} text The label as written.\n\t\t * @return {string} The label in the user's language.\n\t\t */\n\t\tshown(text) {\n\t\t\treturn typeof this.cnTranslate === 'function' && typeof text === 'string' && text !== '' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The `lang` of a label that fell back to its written text in another language.\n\t\t *\n\t\t * @param {string} text The label as written.\n\t\t * @return {string|undefined} The source language, or undefined.\n\t\t */\n\t\tlangOf(text) {\n\t\t\treturn labelLang(this.cnTranslate, text) || undefined\n\t\t},\n\n\t\t/**\n\t\t * Handle tab change from NcAppSidebar\n\t\t *\n\t\t * @param {string} tabId Tab identifier\n\t\t */\n\t\tonTabChange(tabId) {\n\t\t\tthis.internalActiveTab = tabId\n\t\t\tthis.$emit('tab-change', tabId)\n\t\t},\n\n\t\t/**\n\t\t * Check if a column is currently visible\n\t\t *\n\t\t * @param {string} key Column key\n\t\t */\n\t\tisColumnVisible(key) {\n\t\t\tif (this.visibleColumns === null) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn this.visibleColumns.includes(key)\n\t\t},\n\n\t\t/**\n\t\t * Check if all columns in a group are visible\n\t\t *\n\t\t * @param {string[]} columns Array of column keys\n\t\t */\n\t\tisGroupAllVisible(columns) {\n\t\t\treturn columns.every((col) => this.isColumnVisible(col.key))\n\t\t},\n\n\t\t/**\n\t\t * Toggle a single column's visibility\n\t\t *\n\t\t * @param {string} key Column key\n\t\t */\n\t\ttoggleColumn(key) {\n\t\t\tlet newVisible\n\t\t\tif (this.visibleColumns === null) {\n\t\t\t\tnewVisible = this.allColumnKeys.filter((k) => k !== key)\n\t\t\t} else if (this.isColumnVisible(key)) {\n\t\t\t\tnewVisible = this.visibleColumns.filter((k) => k !== key)\n\t\t\t} else {\n\t\t\t\tnewVisible = [...this.visibleColumns, key]\n\t\t\t}\n\t\t\tthis.$emit('columns-change', newVisible)\n\t\t},\n\n\t\t/**\n\t\t * Select or deselect all columns in a group\n\t\t *\n\t\t * @param {string[]} columns Array of column keys\n\t\t */\n\t\ttoggleGroupAll(columns) {\n\t\t\tconst groupKeys = columns.map((c) => c.key)\n\t\t\tconst allVisible = this.isGroupAllVisible(columns)\n\n\t\t\tlet newVisible\n\t\t\tif (this.visibleColumns === null) {\n\t\t\t\t// Currently all visible — deselect this group\n\t\t\t\tnewVisible = this.allColumnKeys.filter((k) => !groupKeys.includes(k))\n\t\t\t} else if (allVisible) {\n\t\t\t\t// All in group visible — deselect them\n\t\t\t\tnewVisible = this.visibleColumns.filter((k) => !groupKeys.includes(k))\n\t\t\t} else {\n\t\t\t\t// Not all visible — select them all\n\t\t\t\tconst current = new Set(this.visibleColumns)\n\t\t\t\tgroupKeys.forEach((k) => current.add(k))\n\t\t\t\tnewVisible = [...current]\n\t\t\t}\n\t\t\tthis.$emit('columns-change', newVisible)\n\t\t},\n\n\t\t/**\n\t\t * Move a visible column to another place in the order. The drag and the\n\t\t * Move buttons both call this. A column stays inside its block: pinned\n\t\t * columns move among the pinned, the rest among the rest.\n\t\t *\n\t\t * @param {number} from Current index.\n\t\t * @param {number} to Target index.\n\t\t * @return {void}\n\t\t */\n\t\tmoveColumn(from, to) {\n\t\t\tconst list = this.orderedVisible.map((c) => c.key)\n\t\t\tconst lo = from < this.pinnedCount ? 0 : this.pinnedCount\n\t\t\tconst hi = from < this.pinnedCount ? this.pinnedCount - 1 : list.length - 1\n\t\t\tconst target = Math.min(hi, Math.max(lo, to))\n\t\t\tif (from < 0 || from >= list.length || target === from) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst [moved] = list.splice(from, 1)\n\t\t\tlist.splice(target, 0, moved)\n\t\t\t/**\n\t\t\t * @event columns-reorder Emitted when the user moves a column. Payload: the visible column keys in their new order.\n\t\t\t * @type {string[]}\n\t\t\t */\n\t\t\tthis.$emit('columns-reorder', list)\n\t\t},\n\n\t\t/**\n\t\t * Dropping a dragged column on another row.\n\t\t *\n\t\t * @param {number} index Index of the row it was dropped on.\n\t\t * @return {void}\n\t\t */\n\t\tonDropColumn(index) {\n\t\t\tconst from = this.dragFrom\n\t\t\tthis.dragFrom = -1\n\t\t\tif (from >= 0) {\n\t\t\t\tthis.moveColumn(from, index)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Pin a column (it joins the pinned block at the start) or unpin it (it\n\t\t * leaves that block, to the first place after it).\n\t\t *\n\t\t * @param {number} index Index of the column.\n\t\t * @return {void}\n\t\t */\n\t\ttogglePin(index) {\n\t\t\tconst list = this.orderedVisible.map((c) => c.key)\n\t\t\tconst [moved] = list.splice(index, 1)\n\t\t\tlet count = this.pinnedCount\n\t\t\tif (index < count) {\n\t\t\t\tcount -= 1\n\t\t\t\tlist.splice(count, 0, moved)\n\t\t\t} else {\n\t\t\t\tlist.splice(count, 0, moved)\n\t\t\t\tcount += 1\n\t\t\t}\n\t\t\tthis.$emit('columns-reorder', list)\n\t\t\t/**\n\t\t\t * @event pin-change Emitted when a column is pinned or unpinned. Payload: the new number of pinned columns.\n\t\t\t * @type {number}\n\t\t\t */\n\t\t\tthis.$emit('pin-change', count)\n\t\t},\n\n\t\t/**\n\t\t * Toggle a group's expanded state\n\t\t *\n\t\t * @param {string} groupId Filter group identifier\n\t\t */\n\t\ttoggleGroup(groupId) {\n\t\t\tthis.expandedGroups[groupId] = !this.expandedGroups[groupId]\n\t\t},\n\n\t\t/**\n\t\t * Get filter options for a filter definition\n\t\t *\n\t\t * @param {object} filter Filter object\n\t\t */\n\t\tgetFilterOptions(filter) {\n\t\t\tconst live = facetOptions(\n\t\t\t\tthis.facetData[filter.key],\n\t\t\t\t(count) => t('nextcloud-vue', 'No value ({count})', { count }),\n\t\t\t)\n\t\t\tif (live !== null) {\n\t\t\t\treturn live\n\t\t\t}\n\t\t\t// A reference picker's rows come from another list, and neither a\n\t\t\t// schema enum nor a facet bucket can carry them.\n\t\t\tif (filter.type === 'reference') {\n\t\t\t\treturn this.referenceOptions[filter.key] || []\n\t\t\t}\n\t\t\treturn filter.options || []\n\t\t},\n\n\t\t/**\n\t\t * Whether a reference filter is still fetching its rows.\n\t\t *\n\t\t * Shown rather than hidden: an empty picker that is still loading and\n\t\t * one that genuinely has nothing to pick look identical, and only one\n\t\t * of them means the person should stop waiting.\n\t\t *\n\t\t * @param {object} filter The filter definition.\n\t\t *\n\t\t * @return {boolean} True while the load is in flight.\n\t\t */\n\t\tisLoadingOptions(filter) {\n\t\t\treturn this.referenceLoading[filter.key] === true\n\t\t},\n\n\t\t/**\n\t\t * The `{ from, to }` window a date-range filter currently holds.\n\t\t *\n\t\t * @param {object} filter The filter definition.\n\t\t *\n\t\t * @return {object|null} The window, or null when none is set.\n\t\t */\n\t\tgetRangeValue(filter) {\n\t\t\tconst value = this.activeFilters[filter.key]\n\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * A date-range filter changed.\n\t\t *\n\t\t * Emitted in the SAME `filter-change` shape every other control uses,\n\t\t * with the window as the payload's `values`, so a consumer has one\n\t\t * event to listen to and not two.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {object|null} window The `{ from, to, preset }` value.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonRangeChange(key, window) {\n\t\t\tconst from = (window && window.from) || ''\n\t\t\tconst to = (window && window.to) || ''\n\t\t\tif (from === '' && to === '') {\n\t\t\t\tthis.$emit('filter-change', { key, values: [] })\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('filter-change', { key, values: { from, to } })\n\t\t},\n\n\t\t/**\n\t\t * The text a `text` filter currently holds.\n\t\t *\n\t\t * @param {object} filter The filter definition.\n\t\t *\n\t\t * @return {string} The current value.\n\t\t */\n\t\tgetTextValue(filter) {\n\t\t\tconst value = this.activeFilters[filter.key]\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.length > 0 ? String(value[0]) : ''\n\t\t\t}\n\t\t\treturn (value === undefined || value === null) ? '' : String(value)\n\t\t},\n\n\t\t/**\n\t\t * A text filter changed.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {string} value The typed value.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonTextChange(key, value) {\n\t\t\tconst text = String(value ?? '').trim()\n\t\t\tthis.$emit('filter-change', { key, values: text === '' ? [] : [text] })\n\t\t},\n\n\t\t/**\n\t\t * Load the rows a `reference` filter picks from.\n\t\t *\n\t\t * Reads `optionsSource` off the schema property:\n\t\t * `{ register, schema, labelField, valueField, limit }`. The VALUE is\n\t\t * the referenced object's uuid, because that is what the server\n\t\t * filters on; the label is only what the person reads.\n\t\t *\n\t\t * Failures are logged and leave the picker empty rather than throwing:\n\t\t * one unreachable list must not take the whole sidebar with it.\n\t\t *\n\t\t * @return {Promise<void>} Resolves when every reference filter settled.\n\t\t */\n\t\tasync loadReferenceOptions() {\n\t\t\tconst pending = this.schemaFilters.filter((filter) => filter.type === 'reference'\n\t\t\t\t&& filter.optionsSource\n\t\t\t\t&& this.referenceOptions[filter.key] === undefined\n\t\t\t\t&& this.referenceLoading[filter.key] !== true)\n\t\t\tif (pending.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst [{ default: axios }, { generateUrl }] = await Promise.all([\n\t\t\t\timport('@nextcloud/axios'),\n\t\t\t\timport('@nextcloud/router'),\n\t\t\t])\n\n\t\t\tawait Promise.all(pending.map(async (filter) => {\n\t\t\t\tconst source = filter.optionsSource\n\t\t\t\tif (!source.register || !source.schema) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.referenceLoading = { ...this.referenceLoading, [filter.key]: true }\n\t\t\t\ttry {\n\t\t\t\t\tconst url = generateUrl('/apps/openregister/api/objects/{register}/{schema}', {\n\t\t\t\t\t\tregister: source.register,\n\t\t\t\t\t\tschema: source.schema,\n\t\t\t\t\t})\n\t\t\t\t\tconst response = await axios.get(url, { params: { _limit: source.limit || 200 } })\n\t\t\t\t\tconst rows = response?.data?.results || response?.data || []\n\t\t\t\t\tconst valueField = source.valueField || '@self.uuid'\n\t\t\t\t\tconst labelField = source.labelField || 'title'\n\t\t\t\t\tconst options = rows\n\t\t\t\t\t\t.map((row) => ({\n\t\t\t\t\t\t\tid: this.readPath(row, valueField),\n\t\t\t\t\t\t\tlabel: String(this.readPath(row, labelField) ?? this.readPath(row, valueField) ?? ''),\n\t\t\t\t\t\t}))\n\t\t\t\t\t\t.filter((option) => option.id !== null && option.id !== undefined && option.id !== '')\n\t\t\t\t\t\t.sort((a, b) => a.label.localeCompare(b.label))\n\t\t\t\t\tthis.referenceOptions = { ...this.referenceOptions, [filter.key]: options }\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error(`[CnIndexSidebar] the reference filter \"${filter.key}\" could not load its options`, error)\n\t\t\t\t\tthis.referenceOptions = { ...this.referenceOptions, [filter.key]: [] }\n\t\t\t\t} finally {\n\t\t\t\t\tthis.referenceLoading = { ...this.referenceLoading, [filter.key]: false }\n\t\t\t\t}\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Read a dotted path off a row (`@self.uuid`, `title`).\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {string} path The dotted path.\n\t\t *\n\t\t * @return {unknown} The value, or undefined.\n\t\t */\n\t\treadPath(row, path) {\n\t\t\treturn String(path).split('.').reduce((acc, part) => ((acc === null || acc === undefined) ? acc : acc[part]), row)\n\t\t},\n\n\t\t/**\n\t\t * Get currently selected options for a filter\n\t\t *\n\t\t * @param {object} filter Filter object\n\t\t */\n\t\tgetSelectedFilterOptions(filter) {\n\t\t\tconst value = this.activeFilters[filter.key]\n\t\t\tif (!value) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst values = Array.isArray(value) ? value : [value]\n\t\t\tconst options = this.getFilterOptions(filter)\n\t\t\treturn values.map((v) => options.find((o) => o.id === v) || { id: v, label: String(v) })\n\t\t},\n\n\t\t/**\n\t\t * Handle filter select change\n\t\t *\n\t\t * @param {string} key Filter key\n\t\t * @param {Array} selected Selected values\n\t\t */\n\t\tonFilterChange(key, selected) {\n\t\t\t// 🔴 A SINGLE-VALUED SELECT EMITS AN OBJECT, NOT AN ARRAY. NcSelect\n\t\t\t// changes the SHAPE of its payload with `multiple`, and `.map` on\n\t\t\t// the object shape throws inside an event handler, where Vue logs\n\t\t\t// it and carries on: the picker looks inert and the console says\n\t\t\t// why in a place nobody is looking.\n\t\t\tconst chosen = Array.isArray(selected) ? selected : (selected ? [selected] : [])\n\t\t\tconst values = chosen.map((o) => ((o && typeof o === 'object' && 'id' in o) ? o.id : o))\n\t\t\tthis.$emit('filter-change', { key, values })\n\t\t},\n\n\t\t/**\n\t\t * \"Clear all\" click: reset search and every active facet filter in\n\t\t * one shot, so the parent does one fetch instead of one per field.\n\t\t */\n\t\tonClearAll() {\n\t\t\t/**\n\t\t\t * @event clear-filters \"Clear all\" clicked; reset search and every active filter.\n\t\t\t */\n\t\t\tthis.$emit('clear-filters')\n\t\t},\n\t},\n}\n</script>\n\n<!-- Styles in css/index-sidebar.css -->\n"],"names":["CnDateRangePicker","CnIcon","t"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { resolveComponent, openBlock, createBlock, createSlots, withCtx, createVNode, createElementVNode, createElementBlock, renderSlot, createCommentVNode, createTextVNode, toDisplayString, Fragment, renderList, normalizeClass, withModifiers } from 'vue';
1
+ import { resolveComponent, openBlock, createBlock, createSlots, withCtx, createVNode, createElementVNode, createElementBlock, renderSlot, createCommentVNode, toDisplayString, createTextVNode, Fragment, renderList, normalizeClass, withModifiers } from 'vue';
2
2
 
3
3
  const _hoisted_1 = { class: "cn-index-sidebar__header-icon" };
4
4
  const _hoisted_2 = { class: "cn-index-sidebar__tab-content" };
@@ -9,41 +9,51 @@ const _hoisted_3 = {
9
9
  const _hoisted_4 = { class: "cn-index-sidebar__section" };
10
10
  const _hoisted_5 = {
11
11
  key: 1,
12
- class: "cn-index-sidebar__section"
12
+ class: "cn-index-sidebar__section cn-index-sidebar__sort",
13
+ "data-testid": "cn-index-sidebar-sort"
14
+ };
15
+ const _hoisted_6 = ["aria-label"];
16
+ const _hoisted_7 = {
17
+ class: "cn-index-sidebar__sort-current",
18
+ "data-testid": "cn-index-sidebar-sort-current"
13
19
  };
14
- const _hoisted_6 = {
20
+ const _hoisted_8 = {
15
21
  key: 2,
16
22
  class: "cn-index-sidebar__section"
17
23
  };
18
- const _hoisted_7 = { class: "cn-index-sidebar__filter-header" };
19
- const _hoisted_8 = { class: "cn-index-sidebar__filter-label" };
20
- const _hoisted_9 = { class: "cn-index-sidebar__filter-description" };
21
- const _hoisted_10 = { class: "cn-index-sidebar__tab-content" };
22
- const _hoisted_11 = { class: "cn-sidebar-columns" };
23
- const _hoisted_12 = { class: "cn-sidebar-columns__description" };
24
- const _hoisted_13 = {
24
+ const _hoisted_9 = {
25
+ key: 3,
26
+ class: "cn-index-sidebar__section"
27
+ };
28
+ const _hoisted_10 = { class: "cn-index-sidebar__filter-header" };
29
+ const _hoisted_11 = { class: "cn-index-sidebar__filter-label" };
30
+ const _hoisted_12 = { class: "cn-index-sidebar__filter-description" };
31
+ const _hoisted_13 = { class: "cn-index-sidebar__tab-content" };
32
+ const _hoisted_14 = { class: "cn-sidebar-columns" };
33
+ const _hoisted_15 = { class: "cn-sidebar-columns__description" };
34
+ const _hoisted_16 = {
25
35
  key: 0,
26
36
  class: "cn-sidebar-columns__order",
27
37
  "data-testid": "cn-sidebar-columns-order"
28
38
  };
29
- const _hoisted_14 = { class: "cn-sidebar-columns__order-list" };
30
- const _hoisted_15 = ["onDragstart", "onDrop"];
31
- const _hoisted_16 = { class: "cn-sidebar-columns__order-label" };
32
- const _hoisted_17 = {
39
+ const _hoisted_17 = { class: "cn-sidebar-columns__order-list" };
40
+ const _hoisted_18 = ["onDragstart", "onDrop"];
41
+ const _hoisted_19 = { class: "cn-sidebar-columns__order-label" };
42
+ const _hoisted_20 = {
33
43
  key: 0,
34
44
  class: "cn-sidebar-columns__group cn-sidebar-columns__group--collapsible"
35
45
  };
36
- const _hoisted_18 = {
46
+ const _hoisted_21 = {
37
47
  key: 0,
38
48
  class: "cn-sidebar-columns__group-content"
39
49
  };
40
- const _hoisted_19 = ["onClick"];
41
- const _hoisted_20 = ["lang"];
42
- const _hoisted_21 = {
50
+ const _hoisted_22 = ["onClick"];
51
+ const _hoisted_23 = ["lang"];
52
+ const _hoisted_24 = {
43
53
  key: 0,
44
54
  class: "cn-sidebar-columns__group-content"
45
55
  };
46
- const _hoisted_22 = {
56
+ const _hoisted_25 = {
47
57
  key: 2,
48
58
  class: "cn-sidebar-columns__empty"
49
59
  };
@@ -52,12 +62,13 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
52
62
  const _component_CnIcon = resolveComponent("CnIcon");
53
63
  const _component_FilterOutline = resolveComponent("FilterOutline");
54
64
  const _component_NcTextField = resolveComponent("NcTextField");
65
+ const _component_NcSelect = resolveComponent("NcSelect");
66
+ const _component_NcCheckboxRadioSwitch = resolveComponent("NcCheckboxRadioSwitch");
55
67
  const _component_FilterRemoveOutline = resolveComponent("FilterRemoveOutline");
56
68
  const _component_NcButton = resolveComponent("NcButton");
57
69
  const _component_InformationOutline = resolveComponent("InformationOutline");
58
70
  const _component_NcPopover = resolveComponent("NcPopover");
59
71
  const _component_CnDateRangePicker = resolveComponent("CnDateRangePicker");
60
- const _component_NcSelect = resolveComponent("NcSelect");
61
72
  const _component_NcAppSidebarTab = resolveComponent("NcAppSidebarTab");
62
73
  const _component_ViewColumnOutline = resolveComponent("ViewColumnOutline");
63
74
  const _component_DragVertical = resolveComponent("DragVertical");
@@ -66,7 +77,6 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
66
77
  const _component_Pin = resolveComponent("Pin");
67
78
  const _component_PinOutline = resolveComponent("PinOutline");
68
79
  const _component_ChevronRight = resolveComponent("ChevronRight");
69
- const _component_NcCheckboxRadioSwitch = resolveComponent("NcCheckboxRadioSwitch");
70
80
  const _component_NcAppSidebar = resolveComponent("NcAppSidebar");
71
81
 
72
82
  return (openBlock(), createBlock(_component_NcAppSidebar, {
@@ -104,8 +114,54 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
104
114
  "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (_ctx.$emit('search', $event)))
105
115
  }, null, 8 /* PROPS */, ["modelValue", "placeholder", "label"])
106
116
  ]),
107
- ($options.hasActiveFilters)
117
+ ($props.sortOptions.length > 0)
108
118
  ? (openBlock(), createElementBlock("div", _hoisted_5, [
119
+ createElementVNode("h3", null, toDisplayString($options.t('nextcloud-vue', 'Sort')), 1 /* TEXT */),
120
+ createVNode(_component_NcSelect, {
121
+ modelValue: $options.sortSelected,
122
+ options: $props.sortOptions,
123
+ label: "label",
124
+ clearable: false,
125
+ inputLabel: $options.t('nextcloud-vue', 'Sort by'),
126
+ "onUpdate:modelValue": $options.onSortField
127
+ }, null, 8 /* PROPS */, ["modelValue", "options", "inputLabel", "onUpdate:modelValue"]),
128
+ createElementVNode("div", {
129
+ class: "cn-index-sidebar__sort-direction",
130
+ role: "radiogroup",
131
+ "aria-label": $options.t('nextcloud-vue', 'Direction')
132
+ }, [
133
+ createVNode(_component_NcCheckboxRadioSwitch, {
134
+ type: "radio",
135
+ name: "cn-index-sidebar-sort-direction",
136
+ value: "asc",
137
+ modelValue: $options.sortDirection,
138
+ disabled: !$options.sortSelected,
139
+ "onUpdate:modelValue": $options.onSortDirection
140
+ }, {
141
+ default: withCtx(() => [
142
+ createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Ascending')), 1 /* TEXT */)
143
+ ]),
144
+ _: 1 /* STABLE */
145
+ }, 8 /* PROPS */, ["modelValue", "disabled", "onUpdate:modelValue"]),
146
+ createVNode(_component_NcCheckboxRadioSwitch, {
147
+ type: "radio",
148
+ name: "cn-index-sidebar-sort-direction",
149
+ value: "desc",
150
+ modelValue: $options.sortDirection,
151
+ disabled: !$options.sortSelected,
152
+ "onUpdate:modelValue": $options.onSortDirection
153
+ }, {
154
+ default: withCtx(() => [
155
+ createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Descending')), 1 /* TEXT */)
156
+ ]),
157
+ _: 1 /* STABLE */
158
+ }, 8 /* PROPS */, ["modelValue", "disabled", "onUpdate:modelValue"])
159
+ ], 8 /* PROPS */, _hoisted_6),
160
+ createElementVNode("p", _hoisted_7, toDisplayString($options.currentSortText), 1 /* TEXT */)
161
+ ]))
162
+ : createCommentVNode("v-if", true),
163
+ ($options.hasActiveFilters)
164
+ ? (openBlock(), createElementBlock("div", _hoisted_8, [
109
165
  createVNode(_component_NcButton, {
110
166
  variant: "tertiary",
111
167
  onClick: $options.onClearAll
@@ -121,15 +177,15 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
121
177
  ]))
122
178
  : createCommentVNode("v-if", true),
123
179
  ($options.schemaFilters.length > 0)
124
- ? (openBlock(), createElementBlock("div", _hoisted_6, [
180
+ ? (openBlock(), createElementBlock("div", _hoisted_9, [
125
181
  createElementVNode("h3", null, toDisplayString($props.filtersLabel), 1 /* TEXT */),
126
182
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.schemaFilters, (filter) => {
127
183
  return (openBlock(), createElementBlock("div", {
128
184
  key: filter.key,
129
185
  class: "cn-index-sidebar__filter-group"
130
186
  }, [
131
- createElementVNode("div", _hoisted_7, [
132
- createElementVNode("span", _hoisted_8, toDisplayString(filter.label), 1 /* TEXT */),
187
+ createElementVNode("div", _hoisted_10, [
188
+ createElementVNode("span", _hoisted_11, toDisplayString(filter.label), 1 /* TEXT */),
133
189
  (filter.description)
134
190
  ? (openBlock(), createBlock(_component_NcPopover, {
135
191
  key: 0,
@@ -148,7 +204,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
148
204
  }, 8 /* PROPS */, ["aria-label"])
149
205
  ]),
150
206
  default: withCtx(() => [
151
- createElementVNode("p", _hoisted_9, toDisplayString(filter.description), 1 /* TEXT */)
207
+ createElementVNode("p", _hoisted_12, toDisplayString(filter.description), 1 /* TEXT */)
152
208
  ]),
153
209
  _: 2 /* DYNAMIC */
154
210
  }, 1024 /* DYNAMIC_SLOTS */))
@@ -205,14 +261,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
205
261
  createVNode(_component_ViewColumnOutline, { size: 20 })
206
262
  ]),
207
263
  default: withCtx(() => [
208
- createElementVNode("div", _hoisted_10, [
209
- createElementVNode("div", _hoisted_11, [
264
+ createElementVNode("div", _hoisted_13, [
265
+ createElementVNode("div", _hoisted_14, [
210
266
  createElementVNode("h3", null, toDisplayString($props.columnsHeading), 1 /* TEXT */),
211
- createElementVNode("p", _hoisted_12, toDisplayString($props.columnsDescription), 1 /* TEXT */),
267
+ createElementVNode("p", _hoisted_15, toDisplayString($props.columnsDescription), 1 /* TEXT */),
212
268
  ($props.personalColumns && $options.orderedVisible.length > 0)
213
- ? (openBlock(), createElementBlock("div", _hoisted_13, [
214
- createElementVNode("h4", null, toDisplayString(_ctx.t('nextcloud-vue', 'Order and pin')), 1 /* TEXT */),
215
- createElementVNode("ol", _hoisted_14, [
269
+ ? (openBlock(), createElementBlock("div", _hoisted_16, [
270
+ createElementVNode("h4", null, toDisplayString($options.t('nextcloud-vue', 'Order and pin')), 1 /* TEXT */),
271
+ createElementVNode("ol", _hoisted_17, [
216
272
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.orderedVisible, (item, index) => {
217
273
  return (openBlock(), createElementBlock("li", {
218
274
  key: item.key,
@@ -228,11 +284,11 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
228
284
  class: "cn-sidebar-columns__handle",
229
285
  "aria-hidden": "true"
230
286
  }),
231
- createElementVNode("span", _hoisted_16, toDisplayString(item.label), 1 /* TEXT */),
287
+ createElementVNode("span", _hoisted_19, toDisplayString(item.label), 1 /* TEXT */),
232
288
  createVNode(_component_NcButton, {
233
289
  variant: "tertiary",
234
290
  disabled: index === 0 || index === $props.pinnedCount,
235
- "aria-label": _ctx.t('nextcloud-vue', 'Move {column} up', { column: item.label }),
291
+ "aria-label": $options.t('nextcloud-vue', 'Move {column} up', { column: item.label }),
236
292
  "data-testid": "cn-sidebar-columns-up",
237
293
  onClick: $event => ($options.moveColumn(index, index - 1))
238
294
  }, {
@@ -244,7 +300,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
244
300
  createVNode(_component_NcButton, {
245
301
  variant: "tertiary",
246
302
  disabled: index === $options.orderedVisible.length - 1 || index === $props.pinnedCount - 1,
247
- "aria-label": _ctx.t('nextcloud-vue', 'Move {column} down', { column: item.label }),
303
+ "aria-label": $options.t('nextcloud-vue', 'Move {column} down', { column: item.label }),
248
304
  "data-testid": "cn-sidebar-columns-down",
249
305
  onClick: $event => ($options.moveColumn(index, index + 1))
250
306
  }, {
@@ -256,7 +312,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
256
312
  createVNode(_component_NcButton, {
257
313
  variant: "tertiary",
258
314
  "aria-pressed": String(index < $props.pinnedCount),
259
- "aria-label": index < $props.pinnedCount ? _ctx.t('nextcloud-vue', 'Unpin {column}', { column: item.label }) : _ctx.t('nextcloud-vue', 'Pin {column}', { column: item.label }),
315
+ "aria-label": index < $props.pinnedCount ? $options.t('nextcloud-vue', 'Unpin {column}', { column: item.label }) : $options.t('nextcloud-vue', 'Pin {column}', { column: item.label }),
260
316
  "data-testid": "cn-sidebar-columns-pin",
261
317
  onClick: $event => ($options.togglePin(index))
262
318
  }, {
@@ -273,7 +329,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
273
329
  ]),
274
330
  _: 2 /* DYNAMIC */
275
331
  }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["aria-pressed", "aria-label", "onClick"])
276
- ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_15))
332
+ ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_18))
277
333
  }), 128 /* KEYED_FRAGMENT */))
278
334
  ]),
279
335
  createVNode(_component_NcButton, {
@@ -282,7 +338,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
282
338
  onClick: _cache[2] || (_cache[2] = $event => (_ctx.$emit('columns-reset')))
283
339
  }, {
284
340
  default: withCtx(() => [
285
- createTextVNode(toDisplayString(_ctx.t('nextcloud-vue', 'Reset columns')), 1 /* TEXT */)
341
+ createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Reset columns')), 1 /* TEXT */)
286
342
  ]),
287
343
  _: 1 /* STABLE */
288
344
  })
@@ -291,7 +347,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
291
347
  ($options.allColumns.length > 0 || $options.allGroups.length > 0)
292
348
  ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
293
349
  ($options.allColumns.length > 0)
294
- ? (openBlock(), createElementBlock("div", _hoisted_17, [
350
+ ? (openBlock(), createElementBlock("div", _hoisted_20, [
295
351
  createElementVNode("div", {
296
352
  class: "cn-sidebar-columns__group-header",
297
353
  onClick: _cache[5] || (_cache[5] = $event => ($data.propertiesExpanded = !$data.propertiesExpanded))
@@ -319,7 +375,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
319
375
  }, 8 /* PROPS */, ["modelValue"])
320
376
  ]),
321
377
  ($data.propertiesExpanded)
322
- ? (openBlock(), createElementBlock("div", _hoisted_18, [
378
+ ? (openBlock(), createElementBlock("div", _hoisted_21, [
323
379
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.allColumns, (col) => {
324
380
  return (openBlock(), createBlock(_component_NcCheckboxRadioSwitch, {
325
381
  key: col.key,
@@ -356,7 +412,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
356
412
  })),
357
413
  createElementVNode("h4", {
358
414
  lang: $options.langOf(group.label)
359
- }, toDisplayString($options.shown(group.label)), 9 /* TEXT, PROPS */, _hoisted_20),
415
+ }, toDisplayString($options.shown(group.label)), 9 /* TEXT, PROPS */, _hoisted_23),
360
416
  createVNode(_component_NcCheckboxRadioSwitch, {
361
417
  modelValue: $options.isGroupAllVisible(group.columns),
362
418
  class: "cn-sidebar-columns__select-all",
@@ -368,9 +424,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
368
424
  ]))]),
369
425
  _: 1 /* STABLE */
370
426
  }, 8 /* PROPS */, ["modelValue", "onUpdate:modelValue"])
371
- ], 8 /* PROPS */, _hoisted_19),
427
+ ], 8 /* PROPS */, _hoisted_22),
372
428
  ($data.expandedGroups[group.id])
373
- ? (openBlock(), createElementBlock("div", _hoisted_21, [
429
+ ? (openBlock(), createElementBlock("div", _hoisted_24, [
374
430
  (openBlock(true), createElementBlock(Fragment, null, renderList(group.columns, (col) => {
375
431
  return (openBlock(), createBlock(_component_NcCheckboxRadioSwitch, {
376
432
  key: col.key,
@@ -388,7 +444,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
388
444
  ]))
389
445
  }), 128 /* KEYED_FRAGMENT */))
390
446
  ], 64 /* STABLE_FRAGMENT */))
391
- : (openBlock(), createElementBlock("p", _hoisted_22, " No columns available. Provide a schema to auto-generate columns. "))
447
+ : (openBlock(), createElementBlock("p", _hoisted_25, " No columns available. Provide a schema to auto-generate columns. "))
392
448
  ]),
393
449
  renderSlot(_ctx.$slots, "columns-extra")
394
450
  ])