@conduction/nextcloud-vue 2.56.0-beta.36 → 2.56.0-beta.38

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 (382) hide show
  1. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
  2. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +131 -3
  3. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
  4. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +54 -18
  5. package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
  6. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue.js +1 -1
  7. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue2.js +3 -2
  8. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue2.js.map +1 -1
  9. package/dist/esm/components/CnAdvancedFormDialog/CnMetadataTab.vue3.js.map +1 -1
  10. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue.js +1 -1
  11. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js +5 -4
  12. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue2.js.map +1 -1
  13. package/dist/esm/components/CnAdvancedFormDialog/CnPropertyValueCell.vue3.js.map +1 -1
  14. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue.js +1 -1
  15. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue2.js +2 -1
  16. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue2.js.map +1 -1
  17. package/dist/esm/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue3.js.map +1 -1
  18. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
  19. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +2 -1
  20. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  21. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  22. package/dist/esm/components/CnBoardView/CnBoardView.vue.js +1 -1
  23. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +376 -6
  24. package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
  25. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js +146 -71
  26. package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
  27. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue.js +1 -1
  28. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue2.js +2 -1
  29. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue2.js.map +1 -1
  30. package/dist/esm/components/CnCalendarEventPicker/CnCalendarEventPicker.vue3.js.map +1 -1
  31. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue.js +1 -1
  32. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js +2 -1
  33. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue2.js.map +1 -1
  34. package/dist/esm/components/CnCalendarWidget/CnCalendarWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnChartWidget/CnChartWidget.vue.js +1 -1
  36. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +6 -5
  37. package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
  39. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue.js +1 -1
  40. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue2.js +2 -1
  41. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue2.js.map +1 -1
  42. package/dist/esm/components/CnCollectivePagePicker/CnCollectivePagePicker.vue3.js.map +1 -1
  43. package/dist/esm/components/CnConversationThread/CnConversationThread.vue.js +1 -1
  44. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js +2 -1
  45. package/dist/esm/components/CnConversationThread/CnConversationThread.vue2.js.map +1 -1
  46. package/dist/esm/components/CnConversationThread/CnConversationThread.vue3.js.map +1 -1
  47. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue.js +1 -1
  48. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js +2 -1
  49. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue2.js.map +1 -1
  50. package/dist/esm/components/CnCountdownWidget/CnCountdownWidget.vue3.js.map +1 -1
  51. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  52. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +47 -1
  53. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  54. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +22 -12
  55. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  56. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue.js +1 -1
  57. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue2.js +3 -1
  58. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue2.js.map +1 -1
  59. package/dist/esm/components/CnDataMatrix/CnDataMatrix.vue3.js.map +1 -1
  60. package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue2.js +2 -1
  61. package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue2.js.map +1 -1
  62. package/dist/esm/components/CnDetailPage/CnDetailHeaderChips.vue3.js.map +1 -1
  63. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +23 -4
  64. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  65. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  66. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
  67. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +3 -1
  68. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  69. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  70. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue.js +1 -1
  71. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue2.js +2 -1
  72. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue2.js.map +1 -1
  73. package/dist/esm/components/CnEmailPicker/CnEmailPicker.vue3.js.map +1 -1
  74. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
  75. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +18 -5
  76. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
  77. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
  78. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue.js +1 -1
  79. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue2.js +3 -1
  80. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue2.js.map +1 -1
  81. package/dist/esm/components/CnFederationStatus/CnFederationStatus.vue3.js.map +1 -1
  82. package/dist/esm/components/CnFileManager/CnFileManager.vue.js +1 -1
  83. package/dist/esm/components/CnFileManager/CnFileManager.vue2.js +3 -1
  84. package/dist/esm/components/CnFileManager/CnFileManager.vue2.js.map +1 -1
  85. package/dist/esm/components/CnFileManager/CnFileManager.vue3.js.map +1 -1
  86. package/dist/esm/components/CnFilePreview/CnFilePreview.vue.js +1 -1
  87. package/dist/esm/components/CnFilePreview/CnFilePreview.vue2.js +2 -1
  88. package/dist/esm/components/CnFilePreview/CnFilePreview.vue2.js.map +1 -1
  89. package/dist/esm/components/CnFilePreview/CnFilePreview.vue3.js.map +1 -1
  90. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue.js +1 -1
  91. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +49 -1
  92. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
  93. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +3 -3
  94. package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
  95. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue.js +1 -1
  96. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js +2 -1
  97. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js.map +1 -1
  98. package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js.map +1 -1
  99. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +571 -77
  100. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  101. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +191 -82
  102. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  103. package/dist/esm/components/CnIndexPage/useSelfFetchList.js +11 -2
  104. package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
  105. package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
  106. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js +2 -1
  107. package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
  108. package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
  109. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue.js +1 -1
  110. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue2.js +3 -2
  111. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue2.js.map +1 -1
  112. package/dist/esm/components/CnObjectCalendar/CnObjectCalendar.vue3.js.map +1 -1
  113. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
  114. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +28 -0
  115. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
  116. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +82 -75
  117. package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
  118. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue.js +1 -1
  119. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue2.js +5 -4
  120. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue2.js.map +1 -1
  121. package/dist/esm/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue3.js.map +1 -1
  122. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue.js +1 -1
  123. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue2.js +2 -1
  124. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue2.js.map +1 -1
  125. package/dist/esm/components/CnObjectSidebar/CnAuditTrailTab.vue3.js.map +1 -1
  126. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue.js +1 -1
  127. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue2.js +2 -1
  128. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue2.js.map +1 -1
  129. package/dist/esm/components/CnObjectSidebar/CnFlowTasksPanel.vue3.js.map +1 -1
  130. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue.js +1 -1
  131. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +2 -1
  132. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
  133. package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
  134. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue.js +1 -1
  135. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue2.js +2 -1
  136. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue2.js.map +1 -1
  137. package/dist/esm/components/CnObjectSidebar/CnTasksTab.vue3.js.map +1 -1
  138. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue.js +1 -1
  139. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue2.js +2 -1
  140. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue2.js.map +1 -1
  141. package/dist/esm/components/CnPropertySourceField/CnPropertySourceField.vue3.js.map +1 -1
  142. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  143. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +70 -2
  144. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  145. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  146. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
  147. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js +67 -5
  148. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
  149. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +181 -124
  150. package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
  151. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue.js +1 -1
  152. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue2.js +2 -1
  153. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue2.js.map +1 -1
  154. package/dist/esm/components/CnRoadmapItem/CnRoadmapItem.vue3.js.map +1 -1
  155. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue2.js +2 -0
  156. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue2.js.map +1 -1
  157. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue3.js +2 -2
  158. package/dist/esm/components/CnSchemaFormDialog/CnSchemaFormDialog.vue3.js.map +1 -1
  159. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue.js +1 -1
  160. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js +5 -1
  161. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue2.js.map +1 -1
  162. package/dist/esm/components/CnSettingsPage/CnSettingsPage.vue3.js.map +1 -1
  163. package/dist/esm/components/CnStatWidget/CnStatWidget.vue.js +1 -1
  164. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +134 -10
  165. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  166. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +6 -2
  167. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  168. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue.js +1 -1
  169. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js +2 -1
  170. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js.map +1 -1
  171. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js.map +1 -1
  172. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue.js +1 -1
  173. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue2.js +2 -1
  174. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue2.js.map +1 -1
  175. package/dist/esm/components/CnSummaryAggregates/CnSummaryAggregates.vue3.js.map +1 -1
  176. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  177. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +6 -3
  178. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  179. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  180. package/dist/esm/components/CnTasksCard/CnTasksCard.vue.js +1 -1
  181. package/dist/esm/components/CnTasksCard/CnTasksCard.vue2.js +2 -1
  182. package/dist/esm/components/CnTasksCard/CnTasksCard.vue2.js.map +1 -1
  183. package/dist/esm/components/CnTasksCard/CnTasksCard.vue3.js.map +1 -1
  184. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +1 -1
  185. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +2 -1
  186. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -1
  187. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -1
  188. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +1 -1
  189. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +140 -7
  190. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -1
  191. package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -1
  192. package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue.js +1 -1
  193. package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue2.js +2 -1
  194. package/dist/esm/components/CnTranslatedBadge/CnTranslatedBadge.vue2.js.map +1 -1
  195. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue.js +1 -1
  196. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue2.js +2 -1
  197. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue2.js.map +1 -1
  198. package/dist/esm/components/CnVersionHistory/CnVersionHistory.vue3.js.map +1 -1
  199. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue.js +1 -1
  200. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js +37 -9
  201. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue2.js.map +1 -1
  202. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js +6 -5
  203. package/dist/esm/components/CnVersionInfoCard/CnVersionInfoCard.vue3.js.map +1 -1
  204. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js +53 -1
  205. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue2.js.map +1 -1
  206. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js +3 -2
  207. package/dist/esm/components/CnWidgetCardGrid/CnWidgetCardGrid.vue3.js.map +1 -1
  208. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
  209. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +135 -0
  210. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
  211. package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
  212. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue.js +1 -1
  213. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +19 -0
  214. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  215. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +37 -19
  216. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  217. package/dist/esm/composables/useListView.js +21 -0
  218. package/dist/esm/composables/useListView.js.map +1 -1
  219. package/dist/esm/dialogs/CnNoteHistoryDialog.vue.js +1 -1
  220. package/dist/esm/dialogs/CnNoteHistoryDialog.vue2.js +2 -1
  221. package/dist/esm/dialogs/CnNoteHistoryDialog.vue2.js.map +1 -1
  222. package/dist/esm/dialogs/CnNoteHistoryDialog.vue3.js.map +1 -1
  223. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue.js +1 -1
  224. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue2.js +3 -2
  225. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue2.js.map +1 -1
  226. package/dist/esm/integrations/builtin/activity/CnActivityCard.vue3.js.map +1 -1
  227. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue.js +1 -1
  228. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue2.js +4 -3
  229. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue2.js.map +1 -1
  230. package/dist/esm/integrations/builtin/activity/CnActivityTab.vue3.js.map +1 -1
  231. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue.js +1 -1
  232. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js +3 -2
  233. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue2.js.map +1 -1
  234. package/dist/esm/integrations/builtin/analytics/CnAnalyticsTab.vue3.js.map +1 -1
  235. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue.js +1 -1
  236. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js +2 -1
  237. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue2.js.map +1 -1
  238. package/dist/esm/integrations/builtin/calendar/CnCalendarCard.vue3.js.map +1 -1
  239. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue.js +1 -1
  240. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js +6 -5
  241. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue2.js.map +1 -1
  242. package/dist/esm/integrations/builtin/calendar/CnCalendarTab.vue3.js.map +1 -1
  243. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue.js +1 -1
  244. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue2.js +2 -1
  245. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue2.js.map +1 -1
  246. package/dist/esm/integrations/builtin/contactmoment/CnContactmomentCard.vue3.js.map +1 -1
  247. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue.js +1 -1
  248. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js +2 -1
  249. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue2.js.map +1 -1
  250. package/dist/esm/integrations/builtin/cospend/CnCospendTab.vue3.js.map +1 -1
  251. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue.js +1 -1
  252. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js +2 -1
  253. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue2.js.map +1 -1
  254. package/dist/esm/integrations/builtin/deck/CnDeckTab.vue3.js.map +1 -1
  255. package/dist/esm/integrations/builtin/email/CnEmailCard.vue.js +1 -1
  256. package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js +2 -1
  257. package/dist/esm/integrations/builtin/email/CnEmailCard.vue2.js.map +1 -1
  258. package/dist/esm/integrations/builtin/email/CnEmailCard.vue3.js.map +1 -1
  259. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue.js +1 -1
  260. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +2 -1
  261. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
  262. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
  263. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue.js +1 -1
  264. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue2.js +2 -1
  265. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue2.js.map +1 -1
  266. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionTab.vue3.js.map +1 -1
  267. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue.js +1 -1
  268. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js +2 -1
  269. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue2.js.map +1 -1
  270. package/dist/esm/integrations/builtin/photos/CnPhotosTab.vue3.js.map +1 -1
  271. package/dist/esm/l10n/en.json.js +57 -2
  272. package/dist/esm/l10n/en.json.js.map +1 -1
  273. package/dist/esm/l10n/nl.json.js +78 -2
  274. package/dist/esm/l10n/nl.json.js.map +1 -1
  275. package/dist/esm/library-style.js +1 -1
  276. package/dist/esm/nextcloud-vue.css +1541 -1166
  277. package/dist/esm/store/useObjectStore.js +23 -4
  278. package/dist/esm/store/useObjectStore.js.map +1 -1
  279. package/dist/esm/utils/boardColumns.js +58 -2
  280. package/dist/esm/utils/boardColumns.js.map +1 -1
  281. package/dist/esm/utils/boardReferenceColumns.js +330 -0
  282. package/dist/esm/utils/boardReferenceColumns.js.map +1 -0
  283. package/dist/esm/utils/buildManifest.js +4 -1
  284. package/dist/esm/utils/buildManifest.js.map +1 -1
  285. package/dist/esm/utils/schema.js +5 -4
  286. package/dist/esm/utils/schema.js.map +1 -1
  287. package/dist/esm/utils/userLocale.js +30 -0
  288. package/dist/esm/utils/userLocale.js.map +1 -0
  289. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  290. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  291. package/dist/esm/utils/widgetDispatch.js +8 -2
  292. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  293. package/dist/nextcloud-vue.cjs.js +30291 -27618
  294. package/dist/nextcloud-vue.cjs.js.map +2 -2
  295. package/dist/nextcloud-vue.css +1541 -1166
  296. package/l10n/en.json +57 -2
  297. package/l10n/nl.json +78 -2
  298. package/package.json +1 -1
  299. package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +160 -8
  300. package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +3 -2
  301. package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +5 -4
  302. package/src/components/CnAnalyticsReportPicker/CnAnalyticsReportPicker.vue +2 -1
  303. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +2 -1
  304. package/src/components/CnBoardView/CnBoardView.vue +433 -12
  305. package/src/components/CnCalendarEventPicker/CnCalendarEventPicker.vue +2 -1
  306. package/src/components/CnCalendarWidget/CnCalendarWidget.vue +2 -1
  307. package/src/components/CnChartWidget/CnChartWidget.vue +6 -5
  308. package/src/components/CnCollectivePagePicker/CnCollectivePagePicker.vue +2 -1
  309. package/src/components/CnConversationThread/CnConversationThread.vue +2 -1
  310. package/src/components/CnCountdownWidget/CnCountdownWidget.vue +2 -1
  311. package/src/components/CnDashboardPage/CnDashboardPage.vue +59 -3
  312. package/src/components/CnDataMatrix/CnDataMatrix.vue +2 -1
  313. package/src/components/CnDetailPage/CnDetailHeaderChips.vue +2 -1
  314. package/src/components/CnDetailPage/CnDetailPage.md +1 -1
  315. package/src/components/CnDetailPage/CnDetailPage.vue +23 -4
  316. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +3 -1
  317. package/src/components/CnEmailPicker/CnEmailPicker.vue +2 -1
  318. package/src/components/CnFactsWidget/CnFactsWidget.vue +18 -5
  319. package/src/components/CnFederationStatus/CnFederationStatus.vue +3 -1
  320. package/src/components/CnFileManager/CnFileManager.vue +2 -1
  321. package/src/components/CnFilePreview/CnFilePreview.vue +2 -1
  322. package/src/components/CnFilesBrowser/CnFilesBrowser.vue +54 -6
  323. package/src/components/CnFollowToggle/CnFollowToggle.vue +2 -1
  324. package/src/components/CnIndexPage/CnIndexPage.vue +610 -25
  325. package/src/components/CnIndexPage/useSelfFetchList.js +10 -1
  326. package/src/components/CnNotesCard/CnNotesCard.vue +2 -1
  327. package/src/components/CnObjectCalendar/CnObjectCalendar.vue +3 -2
  328. package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +36 -0
  329. package/src/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue +5 -4
  330. package/src/components/CnObjectSidebar/CnAuditTrailTab.vue +2 -1
  331. package/src/components/CnObjectSidebar/CnFlowTasksPanel.vue +2 -1
  332. package/src/components/CnObjectSidebar/CnNotesTab.vue +2 -1
  333. package/src/components/CnObjectSidebar/CnTasksTab.vue +2 -1
  334. package/src/components/CnPropertySourceField/CnPropertySourceField.vue +2 -1
  335. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +70 -2
  336. package/src/components/CnRegisterMapping/CnRegisterMapping.md +5 -0
  337. package/src/components/CnRegisterMapping/CnRegisterMapping.vue +231 -96
  338. package/src/components/CnRoadmapItem/CnRoadmapItem.vue +2 -1
  339. package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +4 -2
  340. package/src/components/CnSettingsPage/CnSettingsPage.vue +5 -1
  341. package/src/components/CnStatWidget/CnStatWidget.vue +136 -11
  342. package/src/components/CnStatsBlock/CnStatsBlock.vue +2 -1
  343. package/src/components/CnSummaryAggregates/CnSummaryAggregates.vue +2 -1
  344. package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -3
  345. package/src/components/CnTasksCard/CnTasksCard.vue +2 -1
  346. package/src/components/CnTimelineWidget/CnTimelineWidget.vue +2 -1
  347. package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +140 -7
  348. package/src/components/CnTranslatedBadge/CnTranslatedBadge.vue +2 -1
  349. package/src/components/CnVersionHistory/CnVersionHistory.vue +2 -1
  350. package/src/components/CnVersionInfoCard/CnVersionInfoCard.md +2 -1
  351. package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +42 -13
  352. package/src/components/CnWidgetCardGrid/CnWidgetCardGrid.vue +55 -2
  353. package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +135 -0
  354. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +10 -0
  355. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +44 -1
  356. package/src/composables/useListView.js +21 -0
  357. package/src/css/board.css +105 -4
  358. package/src/css/dialog.css +4 -2
  359. package/src/css/index-page.css +49 -0
  360. package/src/css/look-board.css +77 -7
  361. package/src/dialogs/CnNoteHistoryDialog.vue +2 -1
  362. package/src/integrations/builtin/activity/CnActivityCard.vue +3 -2
  363. package/src/integrations/builtin/activity/CnActivityTab.vue +4 -3
  364. package/src/integrations/builtin/analytics/CnAnalyticsTab.vue +3 -2
  365. package/src/integrations/builtin/calendar/CnCalendarCard.vue +2 -1
  366. package/src/integrations/builtin/calendar/CnCalendarTab.vue +6 -5
  367. package/src/integrations/builtin/contactmoment/CnContactmomentCard.vue +2 -1
  368. package/src/integrations/builtin/cospend/CnCospendTab.vue +2 -1
  369. package/src/integrations/builtin/deck/CnDeckTab.vue +2 -1
  370. package/src/integrations/builtin/email/CnEmailCard.vue +2 -1
  371. package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +2 -1
  372. package/src/integrations/builtin/field-inspection/CnFieldInspectionTab.vue +2 -1
  373. package/src/integrations/builtin/photos/CnPhotosTab.vue +2 -1
  374. package/src/schemas/app-manifest-v2.schema.json +116 -5
  375. package/src/store/useObjectStore.js +23 -4
  376. package/src/utils/boardColumns.js +57 -1
  377. package/src/utils/boardReferenceColumns.js +326 -0
  378. package/src/utils/buildManifest.js +4 -1
  379. package/src/utils/schema.js +5 -4
  380. package/src/utils/userLocale.js +26 -0
  381. package/src/utils/validateManifestV2.compiled.js +3 -3
  382. package/src/utils/widgetDispatch.js +8 -2
@@ -1 +1 @@
1
- {"version":3,"file":"CnAdminSettingsShell.vue3.js","sources":["../../../../src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue?vue&type=template&id=2f22ff08&lang.js"],"sourcesContent":["<template>\n\t<div class=\"cn-admin-settings-shell\" :class=\"ownLookClass\">\n\t\t<!-- Names a development, test or acceptance environment; cannot be dismissed. Production shows nothing. -->\n\t\t<CnEnvironmentBanner v-if=\"environmentName\" :environment=\"environmentName\" />\n\n\t\t<!-- Page title header — the uniform \"<App> Settings / Configure your <App> installation\" block.\n\t\t Uses NcSettingsSection directly (not CnSettingsSection) so the description subtitle and\n\t\t doc-url icon render — CnSettingsSection repurposes those props and does not forward them. -->\n\t\t<NcSettingsSection\n\t\t\tv-if=\"!isBoard\"\n\t\t\t:name=\"resolvedTitle\"\n\t\t\t:description=\"resolvedDescription\"\n\t\t\t:docUrl=\"docUrl\" />\n\n\t\t<!-- The board header: an h1 and its description, then the labelled\n\t\t Documentation button and the buildiq square. No documentation icon\n\t\t beside the title. -->\n\t\t<div v-else class=\"cn-admin-settings-shell__header\" data-testid=\"cn-admin-settings-header\">\n\t\t\t<div class=\"cn-admin-settings-shell__heading\">\n\t\t\t\t<h1 class=\"cn-admin-settings-shell__title\">\n\t\t\t\t\t{{ resolvedTitle }}\n\t\t\t\t</h1>\n\t\t\t\t<!-- `breadcrumbs`: the board's path line in place of the\n\t\t\t\t description (\"Beheerinstellingen / Launchpad / Algemeen ·\n\t\t\t\t geldt voor de hele organisatie\"). -->\n\t\t\t\t<div v-if=\"crumbs.length > 0\" class=\"cn-admin-settings-shell__crumbs\" data-testid=\"cn-admin-settings-breadcrumbs\">\n\t\t\t\t\t<nav class=\"cn-admin-settings-shell__crumb-list\" :aria-label=\"breadcrumbLabel\">\n\t\t\t\t\t\t<template v-for=\"(crumb, index) in crumbs\" :key=\"index\">\n\t\t\t\t\t\t\t<span v-if=\"index > 0\" aria-hidden=\"true\">/</span>\n\t\t\t\t\t\t\t<a v-if=\"crumb.href\" :href=\"crumb.href\" class=\"cn-admin-settings-shell__crumb-link\">{{ crumb.label }}</a>\n\t\t\t\t\t\t\t<span v-else :aria-current=\"index === crumbs.length - 1 ? 'page' : null\">{{ crumb.label }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</nav>\n\t\t\t\t\t<template v-if=\"breadcrumbNote\">\n\t\t\t\t\t\t<span aria-hidden=\"true\">·</span>\n\t\t\t\t\t\t<span>{{ breadcrumbNote }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t\t<p v-else class=\"cn-admin-settings-shell__description\">\n\t\t\t\t\t{{ resolvedDescription }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div class=\"cn-admin-settings-shell__header-buttons\">\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"docUrl\"\n\t\t\t\t\t:href=\"docUrl\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tdata-testid=\"cn-admin-settings-documentation\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<BookOpenVariant :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ documentationLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<CnBuildiqEditButton />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- `versionCardPosition: \"end\"`: the app's sections come first, and the\n\t\t version card and the credential broker follow them (board DcBeheer\n\t\t starts with the app's own card). The same slot, rendered once. -->\n\t\t<slot v-if=\"versionCardAtEnd\" />\n\n\t\t<!-- Version information card (version, up-to-date check, re-import, support footer) -->\n\t\t<CnVersionInfoCard\n\t\t\tv-if=\"showVersionCard\"\n\t\t\t:appName=\"appName\"\n\t\t\t:appVersion=\"resolvedVersion\"\n\t\t\t:configuredVersion=\"resolvedConfiguredVersion\"\n\t\t\t:isUpToDate=\"resolvedIsUpToDate\"\n\t\t\t:showUpdateButton=\"showUpdateButton\"\n\t\t\t:updating=\"updating\"\n\t\t\t:title=\"versionTitle\"\n\t\t\t:description=\"resolvedVersionDescription\"\n\t\t\t@update=\"onUpdate\">\n\t\t\t<template #actions>\n\t\t\t\t<!-- Canonical \"Re-import configuration\" action (POST /apps/<appId>/api/settings/load) -->\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"showReimport\"\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t:disabled=\"reimporting\"\n\t\t\t\t\t@click=\"reimport\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"reimporting\" :size=\"20\" />\n\t\t\t\t\t\t<Refresh v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ reimporting ? importingLabel : reimportLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<!-- Run the first-time setup wizard on demand (ADR-042). -->\n\t\t\t\t<NcButton v-if=\"showSetup\" data-testid=\"cn-admin-run-setup\" @click=\"setupWizardOpen = true\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AutoFix :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ setupLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<!-- \"Help us / suggest a feature\" — a direct link to the forge's\n\t\t\t\t feature-request issue form (team decision 2026-09-04: the\n\t\t\t\t in-product suggestion modal is gone; the forge is where\n\t\t\t\t the conversation happens, in English). -->\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"showHelp && helpUrl\"\n\t\t\t\t\t:href=\"helpUrl\"\n\t\t\t\t\ttarget=\"_blank\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<HelpCircleOutline :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ helpLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<!-- @slot actions Extra action buttons rendered next to the built-in update / re-import buttons in the version card header. -->\n\t\t\t\t<slot name=\"actions\" />\n\t\t\t</template>\n\n\t\t\t<template #footer>\n\t\t\t\t<!-- @slot footer Replaces the default support/SLA footer inside the version card. -->\n\t\t\t\t<slot name=\"footer\">\n\t\t\t\t\t<div v-if=\"showSupport\" class=\"cn-support-info\">\n\t\t\t\t\t\t<h4>{{ supportTitle }}</h4>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t{{ supportLine }}\n\t\t\t\t\t\t\t<a :href=\"`mailto:${supportEmail}`\">{{ supportEmail }}</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p v-if=\"slaEmail\">\n\t\t\t\t\t\t\t{{ slaLine }}\n\t\t\t\t\t\t\t<a :href=\"`mailto:${slaEmail}`\">{{ slaEmail }}</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\t\t\t</template>\n\n\t\t\t<template #additional-items>\n\t\t\t\t<!-- @slot version-items Extra key/value rows appended inside the version card details. -->\n\t\t\t\t<slot name=\"version-items\" />\n\t\t\t</template>\n\t\t</CnVersionInfoCard>\n\n\t\t<!--\n\t\t\tOrganisation credential broker (ADR-079 Step 2).\n\n\t\t\tThis is the ONE home for org-wide credentials. It used to live in a\n\t\t\tgeneric modal on CnAppRoot, rendered from `manifest.adminSettings[]`\n\t\t\tand gated on app ownership — but no app ever declared that array, so\n\t\t\tthe surface was unreachable in every app in the fleet. It belongs\n\t\t\there: an org-wide secret store is app-level configuration, and\n\t\t\t/settings/admin/<app> is authorized by Nextcloud server-side rather\n\t\t\tthan by a client-side flag.\n\n\t\t\tOpt-in, because only an app that actually brokers credentials should\n\t\t\tshow it — the manifest `credentials[]` declarations drive the\n\t\t\tinformational \"apps requesting credentials\" list inside.\n\t\t-->\n\t\t<CnCredentials\n\t\t\tv-if=\"showOrganisationCredentials\"\n\t\t\tscope=\"organisation\"\n\t\t\t:appId=\"appId\"\n\t\t\t:appName=\"appName\"\n\t\t\t:appCredentials=\"appCredentials\"\n\t\t\tdata-testid=\"cn-admin-organisation-credentials\" />\n\n\t\t<!-- @slot default The app's own settings sections, rendered below the version card, or above it with `versionCardPosition: \"end\"`. -->\n\t\t<slot v-if=\"!versionCardAtEnd\" />\n\n\t\t<!-- First-time setup wizard, opened from the admin page (ADR-042). -->\n\t\t<CnSetupWizard\n\t\t\tv-if=\"showSetup && setupWizardOpen\"\n\t\t\t:appId=\"appId\"\n\t\t\t:steps=\"setupSteps\"\n\t\t\t@complete=\"setupWizardOpen = false\"\n\t\t\t@close=\"setupWizardOpen = false\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcButton, NcLoadingIcon, NcSettingsSection } from '@nextcloud/vue'\nimport { computed } from 'vue'\nimport AutoFix from 'vue-material-design-icons/AutoFix.vue'\nimport BookOpenVariant from 'vue-material-design-icons/BookOpenVariant.vue'\nimport HelpCircleOutline from 'vue-material-design-icons/HelpCircleOutline.vue'\nimport Refresh from 'vue-material-design-icons/Refresh.vue'\nimport CnBuildiqEditButton from '../CnBuildiqEditButton/CnBuildiqEditButton.vue'\nimport CnCredentials from '../CnCredentials/CnCredentials.vue'\nimport CnEnvironmentBanner from '../CnEnvironmentBanner/CnEnvironmentBanner.vue'\nimport CnSetupWizard from '../CnSetupWizard/CnSetupWizard.vue'\nimport { useEnvironment } from '../../composables/useEnvironment.js'\nimport { normalizeLook, useLook } from '../../composables/useLook.js'\nimport { buildFeatureRequestUrl } from '../../utils/forge.js'\nimport { prefixUrl } from '../../utils/headers.js'\nimport { CnVersionInfoCard } from '../CnVersionInfoCard/index.js'\n\n/**\n * CnAdminSettingsShell — the canonical chrome for a Conduction app's Nextcloud\n * admin settings page.\n *\n * Renders, in fleet-standard order:\n * 1. a page title header (\"<App> Settings\" / \"Configure your <App> installation\" + doc-url),\n * 2. a CnVersionInfoCard (version from `loadState`, up-to-date badge, a\n * \"Re-import configuration\" button wired to the AppHost endpoint\n * `POST /apps/<appId>/api/settings/load`, and a support/SLA footer),\n * 3. the app's own settings sections (default slot).\n *\n * Every app's `AdminRoot.vue` collapses to a thin wrapper so the chrome can\n * never drift between apps again.\n *\n * Basic usage\n * ```vue\n * <CnAdminSettingsShell\n * app-id=\"shillinq\"\n * app-name=\"Shillinq\"\n * doc-url=\"https://shillinq.conduction.nl/docs/intro\">\n * <MyRegisterMapping />\n * <MyFeatureSettings />\n * </CnAdminSettingsShell>\n * ```\n *\n * Real up-to-date check (when the backend exposes it)\n * ```vue\n * <CnAdminSettingsShell\n * app-id=\"opencatalogi\" app-name=\"OpenCatalogi\"\n * :app-version=\"running\" :configured-version=\"configured\"\n * :is-up-to-date=\"running === configured\" />\n * ```\n */\nexport default {\n\tname: 'CnAdminSettingsShell',\n\n\tcomponents: {\n\t\tCnEnvironmentBanner,\n\t\tCnBuildiqEditButton,\n\t\tBookOpenVariant,\n\t\tNcSettingsSection,\n\t\tCnCredentials,\n\t\tCnVersionInfoCard,\n\t\tCnSetupWizard,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tRefresh,\n\t\tAutoFix,\n\t\tHelpCircleOutline,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The environment this instance is: `development`, `test`, `acceptance` or\n\t\t * `production`. Wins over the active organisation's `environment` field.\n\t\t * A non-production environment is named in a banner at the top and the tab\n\t\t * title gets a prefix. Production, an unknown value or no value shows nothing.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tenvironment: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Render the organisation credential broker on this admin page\n\t\t * (ADR-079 Step 2). Opt-in: only an app that actually brokers org-wide\n\t\t * secrets should surface it.\n\t\t *\n\t\t * This replaces the generic `manifest.adminSettings[]` modal that used\n\t\t * to live on CnAppRoot. That modal was gated on app OWNERSHIP and on an\n\t\t * array no app in the fleet ever declared, so the broker was\n\t\t * unreachable everywhere. Here it is reachable and the access decision\n\t\t * is Nextcloud's, made server-side for /settings/admin/<app>.\n\t\t */\n\t\tshowOrganisationCredentials: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The app's manifest `credentials[]` declarations, forwarded to the\n\t\t * broker to drive its informational \"apps requesting credentials\"\n\t\t * list. Only read when `showOrganisationCredentials` is true.\n\t\t */\n\t\tappCredentials: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The look the shell is drawn in: `board` or `nextcloud`. Empty follows\n\t\t * the `cnLook` that CnAppRoot provides.\n\t\t *\n\t\t * @spec openspec/changes/screens-chrome-parity/specs/settings-board-look/spec.md#requirement-the-admin-settings-shell-takes-the-board-header\n\t\t */\n\t\tlook: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** The Nextcloud app id (used for the default re-import endpoint + version loadState). */\n\t\tappId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** Human-readable application name shown in the header and version card. */\n\t\tappName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Running app version. When empty, read from\n\t\t * `loadState(appId, 'version', 'Unknown')` (provided by AppHost's\n\t\t * GenericAdminSettings::getForm()).\n\t\t */\n\t\tappVersion: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Page title. Defaults to \"<appName> Settings\". */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Page description. Defaults to \"Configure your <appName> installation\". */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: the path under the title, in place of the description,\n\t\t * as `[{ label, href? }]` (\"Beheerinstellingen\" linking to the admin\n\t\t * settings, then the app and the section). A crumb without `href` is\n\t\t * text; the last one is the current page.\n\t\t *\n\t\t * @spec openspec/changes/screens-admin-settings-board-header/specs/settings-board-look/spec.md\n\t\t */\n\t\tbreadcrumbs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Board look: a note after the path, behind a \"·\" (\"geldt voor de\n\t\t * hele organisatie\").\n\t\t *\n\t\t * @spec openspec/changes/screens-admin-settings-board-header/specs/settings-board-look/spec.md\n\t\t */\n\t\tbreadcrumbNote: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Documentation URL (renders the info icon next to the title). */\n\t\tdocUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Whether to render the version card. */\n\t\tshowVersionCard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Where the version card (and the organisation credential broker) sits:\n\t\t * `start`, above the app's sections (the default), or `end`, after them,\n\t\t * for a page whose board starts with the app's own card. The keyboard\n\t\t * order follows, because the slot moves in the markup.\n\t\t *\n\t\t * @spec openspec/changes/screens-admin-settings-version-card-end/specs/settings-board-look/spec.md#requirement-the-version-card-can-follow-the-apps-sections\n\t\t */\n\t\tversionCardPosition: {\n\t\t\ttype: String,\n\t\t\tdefault: 'start',\n\t\t\tvalidator: (value) => ['start', 'end'].includes(value),\n\t\t},\n\n\t\t/** Version card heading. */\n\t\tversionTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Version information'),\n\t\t},\n\n\t\t/** Version card description. Defaults to \"Information about the current <appName> installation\". */\n\t\tversionDescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Configured version (for apps that track a separate config version).\n\t\t * When omitted, read from `loadState(appId, 'configuredVersion', '')`\n\t\t * (AppHost stamps it on each config import).\n\t\t */\n\t\tconfiguredVersion: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Whether the installation is up to date. Drives the badge/button in the\n\t\t * version card. When left null, the shell reads the REAL value from\n\t\t * `loadState(appId, 'isUpToDate', true)` — AppHost's GenericAdminSettings\n\t\t * provides it by comparing the running version to the imported config\n\t\t * version. Pass an explicit boolean to override; do NOT hardcode true.\n\t\t */\n\t\tisUpToDate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Whether to show the version card's up-to-date / update button. */\n\t\tshowUpdateButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether an app update is in progress (drives the update button spinner). */\n\t\tupdating: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether to show the \"Re-import configuration\" action. */\n\t\tshowReimport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Override the re-import endpoint. Defaults to the canonical AppHost\n\t\t * route `/apps/<appId>/api/settings/load`.\n\t\t */\n\t\treimportUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Whether to render the default support footer. */\n\t\tshowSupport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Support contact email. */\n\t\tsupportEmail: {\n\t\t\ttype: String,\n\t\t\tdefault: 'support@conduction.nl',\n\t\t},\n\n\t\t/** SLA contact email (set to '' to hide the SLA line). */\n\t\tslaEmail: {\n\t\t\ttype: String,\n\t\t\tdefault: 'sales@conduction.nl',\n\t\t},\n\n\t\t/** Show a \"Run setup wizard\" action that opens CnSetupWizard (ADR-042). */\n\t\tshowSetup: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** The `manifest.setup.steps` array passed to CnSetupWizard. */\n\t\tsetupSteps: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Show a \"Help us / suggest a feature\" link to the forge's feature-request form. */\n\t\tshowHelp: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** `<owner>/<repo>` GitHub slug the feature-request link targets. */\n\t\thelpRepo: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: ['update', 'reimported', 'reimport-error'],\n\n\tsetup(props) {\n\t\t// The app's own `environment` setting, else the active organisation's.\n\t\tconst { environment: environmentName } = useEnvironment({ environment: () => props.environment })\n\t\tconst { isBoard } = useLook(props)\n\t\t// A shell told `look: \"board\"` itself draws the board look also on an\n\t\t// admin page that no CnAppRoot wraps, as Nextcloud's settings pages are.\n\t\tconst ownLookClass = computed(() => (normalizeLook(props.look) === 'board' ? 'cn-look-board' : ''))\n\t\treturn { environmentName, isBoard, ownLookClass }\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\treimporting: false,\n\t\t\tsetupWizardOpen: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * Whether the app's sections come before the version card.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/screens-admin-settings-version-card-end/specs/settings-board-look/spec.md#requirement-the-version-card-can-follow-the-apps-sections\n\t\t */\n\t\tversionCardAtEnd() {\n\t\t\treturn this.versionCardPosition === 'end'\n\t\t},\n\n\t\t/**\n\t\t * The crumbs that have a label.\n\t\t *\n\t\t * @return {Array<{label: string, href?: string}>}\n\t\t * @spec openspec/changes/screens-admin-settings-board-header/specs/settings-board-look/spec.md\n\t\t */\n\t\tcrumbs() {\n\t\t\treturn (Array.isArray(this.breadcrumbs) ? this.breadcrumbs : [])\n\t\t\t\t.filter((crumb) => crumb && typeof crumb.label === 'string' && crumb.label !== '')\n\t\t},\n\n\t\t/** @return {string} The accessible name of the breadcrumb navigation. */\n\t\tbreadcrumbLabel() {\n\t\t\treturn t('nextcloud-vue', 'Breadcrumb')\n\t\t},\n\n\t\t/**\n\t\t * The \"Help us\" link target: the forge's feature-request issue form\n\t\t * for `helpRepo`, on the fleet-default forge. Empty (hiding the\n\t\t * button) when no repo is configured.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\thelpUrl() {\n\t\t\tconst repo = String(this.helpRepo || '').trim()\n\t\t\tif (!repo) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn buildFeatureRequestUrl(null, repo)\n\t\t},\n\n\t\t/** @return {string} The running version, falling back to AppHost initial state. */\n\t\tresolvedVersion() {\n\t\t\tif (this.appVersion) {\n\t\t\t\treturn this.appVersion\n\t\t\t}\n\t\t\treturn loadState(this.appId, 'version', 'Unknown')\n\t\t},\n\n\t\t/** @return {string} Configured version, falling back to AppHost initial state. */\n\t\tresolvedConfiguredVersion() {\n\t\t\treturn this.configuredVersion || loadState(this.appId, 'configuredVersion', '')\n\t\t},\n\n\t\t/** @return {boolean} Real up-to-date signal: explicit prop wins, else AppHost initial state. */\n\t\tresolvedIsUpToDate() {\n\t\t\tif (this.isUpToDate !== null) {\n\t\t\t\treturn this.isUpToDate\n\t\t\t}\n\t\t\treturn loadState(this.appId, 'isUpToDate', true)\n\t\t},\n\n\t\t/** @return {string} Page title, defaulting to \"<appName> Settings\". */\n\t\tresolvedTitle() {\n\t\t\treturn this.title || t('nextcloud-vue', '{app} Settings', { app: this.appName })\n\t\t},\n\n\t\t/** @return {string} Page description. */\n\t\tresolvedDescription() {\n\t\t\treturn this.description || t('nextcloud-vue', 'Configure your {app} installation', { app: this.appName })\n\t\t},\n\n\t\t/** @return {string} Version card description. */\n\t\tresolvedVersionDescription() {\n\t\t\treturn this.versionDescription || t('nextcloud-vue', 'Information about the current {app} installation', { app: this.appName })\n\t\t},\n\n\t\t/** @return {string} Re-import endpoint. */\n\t\tresolvedReimportUrl() {\n\t\t\treturn prefixUrl(this.reimportUrl) || generateUrl('/apps/{appId}/api/settings/load', { appId: this.appId })\n\t\t},\n\n\t\t/** @return {string} Re-import button label. */\n\t\treimportLabel() {\n\t\t\treturn t('nextcloud-vue', 'Re-import configuration')\n\t\t},\n\n\t\t/** @return {string} Re-import in-progress label. */\n\t\timportingLabel() {\n\t\t\treturn t('nextcloud-vue', 'Importing…')\n\t\t},\n\n\t\t/** @return {string} Support footer heading. */\n\t\tsupportTitle() {\n\t\t\treturn t('nextcloud-vue', 'Support')\n\t\t},\n\n\t\t/** @return {string} Support footer line. */\n\t\tsupportLine() {\n\t\t\treturn t('nextcloud-vue', 'For support, contact us at')\n\t\t},\n\n\t\t/** @return {string} SLA footer line. */\n\t\tslaLine() {\n\t\t\treturn t('nextcloud-vue', 'For a Service Level Agreement (SLA), contact')\n\t\t},\n\n\t\t/** @return {string} Setup-wizard button label. */\n\t\tsetupLabel() {\n\t\t\treturn t('nextcloud-vue', 'Run setup wizard')\n\t\t},\n\n\t\t/** @return {string} Documentation button label (board header). */\n\t\tdocumentationLabel() {\n\t\t\treturn t('nextcloud-vue', 'Documentation')\n\t\t},\n\n\t\t/** @return {string} Help / suggest-feature button label. */\n\t\thelpLabel() {\n\t\t\treturn t('nextcloud-vue', 'Help us')\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/** Forward the version card's update-button click to the parent. */\n\t\tonUpdate() {\n\t\t\t/**\n\t\t\t * @event update Emitted when the version card's update button is clicked.\n\t\t\t */\n\t\t\tthis.$emit('update')\n\t\t},\n\n\t\t/**\n\t\t * Re-import the app's OpenRegister configuration via the canonical\n\t\t * AppHost endpoint, then emit the result so the parent can refresh.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync reimport() {\n\t\t\tif (this.reimporting) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.reimporting = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(this.resolvedReimportUrl)\n\t\t\t\tconst data = response?.data ?? {}\n\t\t\t\t// AppHost returns { success, message, ... }; a bare 2xx also counts.\n\t\t\t\tif (data.success === false) {\n\t\t\t\t\tthrow new Error(data.message || t('nextcloud-vue', 'Re-import failed'))\n\t\t\t\t}\n\t\t\t\tshowSuccess(data.message || t('nextcloud-vue', 'Configuration re-imported successfully'))\n\t\t\t\t/**\n\t\t\t\t * @event reimported Emitted after a successful configuration re-import.\n\t\t\t\t * @type {object} The AppHost response payload.\n\t\t\t\t */\n\t\t\t\tthis.$emit('reimported', data)\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error?.response?.data?.message || error?.message || t('nextcloud-vue', 'Re-import failed')\n\t\t\t\tshowError(message)\n\t\t\t\t/**\n\t\t\t\t * @event reimport-error Emitted when a configuration re-import fails.\n\t\t\t\t * @type {Error} The error that caused the failure.\n\t\t\t\t */\n\t\t\t\tthis.$emit('reimport-error', error)\n\t\t\t} finally {\n\t\t\t\tthis.reimporting = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-admin-settings-shell {\n\tmax-width: 900px;\n}\n\n/* The board look lifts the width and lays the header and cards on a grid (look-board.css). */\n\n.cn-support-info {\n\tmargin-top: 16px;\n\tpadding-top: 16px;\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-support-info h4 {\n\tmargin: 0 0 8px 0;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\tcolor: var(--color-main-text);\n}\n\n.cn-support-info p {\n\tmargin: 4px 0;\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 14px;\n}\n\n.cn-support-info a {\n\tcolor: var(--color-primary-element);\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","_createBlock","_openBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_createVNode","_createTextVNode","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"CnAdminSettingsShell.vue3.js","sources":["../../../../src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue?vue&type=template&id=3672ca0b&lang.js"],"sourcesContent":["<template>\n\t<div class=\"cn-admin-settings-shell\" :class=\"ownLookClass\">\n\t\t<!-- Names a development, test or acceptance environment; cannot be dismissed. Production shows nothing. -->\n\t\t<CnEnvironmentBanner v-if=\"environmentName\" :environment=\"environmentName\" />\n\n\t\t<!-- Page title header — the uniform \"<App> Settings / Configure your <App> installation\" block.\n\t\t Uses NcSettingsSection directly (not CnSettingsSection) so the description subtitle and\n\t\t doc-url icon render — CnSettingsSection repurposes those props and does not forward them. -->\n\t\t<NcSettingsSection\n\t\t\tv-if=\"!isBoard\"\n\t\t\t:name=\"resolvedTitle\"\n\t\t\t:description=\"resolvedDescription\"\n\t\t\t:docUrl=\"docUrl\" />\n\n\t\t<!-- The board header: an h1 and its description, then the labelled\n\t\t Documentation button and the buildiq square. No documentation icon\n\t\t beside the title. -->\n\t\t<div v-else class=\"cn-admin-settings-shell__header\" data-testid=\"cn-admin-settings-header\">\n\t\t\t<div class=\"cn-admin-settings-shell__heading\">\n\t\t\t\t<h1 class=\"cn-admin-settings-shell__title\">\n\t\t\t\t\t{{ resolvedTitle }}\n\t\t\t\t</h1>\n\t\t\t\t<!-- `breadcrumbs`: the board's path line in place of the\n\t\t\t\t description (\"Beheerinstellingen / Launchpad / Algemeen ·\n\t\t\t\t geldt voor de hele organisatie\"). -->\n\t\t\t\t<div v-if=\"crumbs.length > 0\" class=\"cn-admin-settings-shell__crumbs\" data-testid=\"cn-admin-settings-breadcrumbs\">\n\t\t\t\t\t<nav class=\"cn-admin-settings-shell__crumb-list\" :aria-label=\"breadcrumbLabel\">\n\t\t\t\t\t\t<template v-for=\"(crumb, index) in crumbs\" :key=\"index\">\n\t\t\t\t\t\t\t<span v-if=\"index > 0\" aria-hidden=\"true\">/</span>\n\t\t\t\t\t\t\t<a v-if=\"crumb.href\" :href=\"crumb.href\" class=\"cn-admin-settings-shell__crumb-link\">{{ crumb.label }}</a>\n\t\t\t\t\t\t\t<span v-else :aria-current=\"index === crumbs.length - 1 ? 'page' : null\">{{ crumb.label }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</nav>\n\t\t\t\t\t<template v-if=\"breadcrumbNote\">\n\t\t\t\t\t\t<span aria-hidden=\"true\">·</span>\n\t\t\t\t\t\t<span>{{ breadcrumbNote }}</span>\n\t\t\t\t\t</template>\n\t\t\t\t</div>\n\t\t\t\t<p v-else class=\"cn-admin-settings-shell__description\">\n\t\t\t\t\t{{ resolvedDescription }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<div class=\"cn-admin-settings-shell__header-buttons\">\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"docUrl\"\n\t\t\t\t\t:href=\"docUrl\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\tdata-testid=\"cn-admin-settings-documentation\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<BookOpenVariant :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ documentationLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<CnBuildiqEditButton />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- `tabs`: a strip under the header (boards ShInstellingen,\n\t\t LpBeheerAlgemeen). Each tab's panel holds the `tab-<id>` slot; the\n\t\t version card, the credential broker and the default slot below\n\t\t belong to the first tab and show only while it is open. -->\n\t\t<CnTabs\n\t\t\tv-if=\"tabItems.length > 0\"\n\t\t\tclass=\"cn-admin-settings-shell__tabs\"\n\t\t\t:look=\"isBoard ? 'board' : 'nextcloud'\"\n\t\t\t:ariaLabel=\"resolvedTitle\"\n\t\t\tdata-testid=\"cn-admin-settings-tabs\"\n\t\t\t@update:activeIndex=\"onTabIndex\">\n\t\t\t<CnTab\n\t\t\t\tv-for=\"tab in tabItems\"\n\t\t\t\t:key=\"tab.id\"\n\t\t\t\t:title=\"tab.label\"\n\t\t\t\t:count=\"tab.count\"\n\t\t\t\t:active=\"tab.id === activeTabId\">\n\t\t\t\t<div class=\"cn-admin-settings-shell__panel\" :data-tab=\"tab.id\">\n\t\t\t\t\t<!-- @slot tab-<id> The panel of the tab with that `id` in `tabs`. -->\n\t\t\t\t\t<slot :name=\"`tab-${tab.id}`\" />\n\t\t\t\t</div>\n\t\t\t</CnTab>\n\t\t</CnTabs>\n\n\t\t<!-- `versionCardPosition: \"end\"`: the app's sections come first, and the\n\t\t version card and the credential broker follow them (board DcBeheer\n\t\t starts with the app's own card). The same slot, rendered once. -->\n\t\t<slot v-if=\"versionCardAtEnd && onFirstTab\" />\n\n\t\t<!-- Version information card (version, up-to-date check, re-import, support footer) -->\n\t\t<CnVersionInfoCard\n\t\t\tv-if=\"showVersionCard && onFirstTab\"\n\t\t\t:appName=\"appName\"\n\t\t\t:appVersion=\"resolvedVersion\"\n\t\t\t:configuredVersion=\"resolvedConfiguredVersion\"\n\t\t\t:isUpToDate=\"resolvedIsUpToDate\"\n\t\t\t:showUpdateButton=\"showUpdateButton\"\n\t\t\t:updating=\"updating\"\n\t\t\t:title=\"versionTitle\"\n\t\t\t:description=\"resolvedVersionDescription\"\n\t\t\t:wide=\"versionCardWide\"\n\t\t\t@update=\"onUpdate\">\n\t\t\t<template #actions>\n\t\t\t\t<!-- Canonical \"Re-import configuration\" action (POST /apps/<appId>/api/settings/load) -->\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"showReimport\"\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t:disabled=\"reimporting\"\n\t\t\t\t\t@click=\"reimport\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcLoadingIcon v-if=\"reimporting\" :size=\"20\" />\n\t\t\t\t\t\t<Refresh v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ reimporting ? importingLabel : reimportLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<!-- Run the first-time setup wizard on demand (ADR-042). -->\n\t\t\t\t<NcButton v-if=\"showSetup\" data-testid=\"cn-admin-run-setup\" @click=\"setupWizardOpen = true\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AutoFix :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ setupLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<!-- \"Help us / suggest a feature\" — a direct link to the forge's\n\t\t\t\t feature-request issue form (team decision 2026-09-04: the\n\t\t\t\t in-product suggestion modal is gone; the forge is where\n\t\t\t\t the conversation happens, in English). -->\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"showHelp && helpUrl\"\n\t\t\t\t\t:href=\"helpUrl\"\n\t\t\t\t\ttarget=\"_blank\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<HelpCircleOutline :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ helpLabel }}\n\t\t\t\t</NcButton>\n\t\t\t\t<!-- @slot actions Extra action buttons rendered next to the built-in update / re-import buttons in the version card header. -->\n\t\t\t\t<slot name=\"actions\" />\n\t\t\t</template>\n\n\t\t\t<template #footer>\n\t\t\t\t<!-- @slot footer Replaces the default support/SLA footer inside the version card. -->\n\t\t\t\t<slot name=\"footer\">\n\t\t\t\t\t<div v-if=\"showSupport\" class=\"cn-support-info\">\n\t\t\t\t\t\t<h4>{{ supportTitle }}</h4>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t{{ supportLine }}\n\t\t\t\t\t\t\t<a :href=\"`mailto:${supportEmail}`\">{{ supportEmail }}</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p v-if=\"slaEmail\">\n\t\t\t\t\t\t\t{{ slaLine }}\n\t\t\t\t\t\t\t<a :href=\"`mailto:${slaEmail}`\">{{ slaEmail }}</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</slot>\n\t\t\t</template>\n\n\t\t\t<template #additional-items>\n\t\t\t\t<!-- @slot version-items Extra key/value rows appended inside the version card details. -->\n\t\t\t\t<slot name=\"version-items\" />\n\t\t\t</template>\n\t\t</CnVersionInfoCard>\n\n\t\t<!--\n\t\t\tOrganisation credential broker (ADR-079 Step 2).\n\n\t\t\tThis is the ONE home for org-wide credentials. It used to live in a\n\t\t\tgeneric modal on CnAppRoot, rendered from `manifest.adminSettings[]`\n\t\t\tand gated on app ownership — but no app ever declared that array, so\n\t\t\tthe surface was unreachable in every app in the fleet. It belongs\n\t\t\there: an org-wide secret store is app-level configuration, and\n\t\t\t/settings/admin/<app> is authorized by Nextcloud server-side rather\n\t\t\tthan by a client-side flag.\n\n\t\t\tOpt-in, because only an app that actually brokers credentials should\n\t\t\tshow it — the manifest `credentials[]` declarations drive the\n\t\t\tinformational \"apps requesting credentials\" list inside.\n\t\t-->\n\t\t<CnCredentials\n\t\t\tv-if=\"showOrganisationCredentials && onFirstTab\"\n\t\t\tscope=\"organisation\"\n\t\t\t:appId=\"appId\"\n\t\t\t:appName=\"appName\"\n\t\t\t:appCredentials=\"appCredentials\"\n\t\t\tdata-testid=\"cn-admin-organisation-credentials\" />\n\n\t\t<!-- @slot default The app's own settings sections, rendered below the version card, or above it with `versionCardPosition: \"end\"`. With `tabs`, only while the first tab is open. -->\n\t\t<slot v-if=\"!versionCardAtEnd && onFirstTab\" />\n\n\t\t<!-- First-time setup wizard, opened from the admin page (ADR-042). -->\n\t\t<CnSetupWizard\n\t\t\tv-if=\"showSetup && setupWizardOpen\"\n\t\t\t:appId=\"appId\"\n\t\t\t:steps=\"setupSteps\"\n\t\t\t@complete=\"setupWizardOpen = false\"\n\t\t\t@close=\"setupWizardOpen = false\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { showError, showSuccess } from '@nextcloud/dialogs'\nimport { loadState } from '@nextcloud/initial-state'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcButton, NcLoadingIcon, NcSettingsSection } from '@nextcloud/vue'\nimport { computed, provide } from 'vue'\nimport AutoFix from 'vue-material-design-icons/AutoFix.vue'\nimport BookOpenVariant from 'vue-material-design-icons/BookOpenVariant.vue'\nimport HelpCircleOutline from 'vue-material-design-icons/HelpCircleOutline.vue'\nimport Refresh from 'vue-material-design-icons/Refresh.vue'\nimport CnBuildiqEditButton from '../CnBuildiqEditButton/CnBuildiqEditButton.vue'\nimport CnCredentials from '../CnCredentials/CnCredentials.vue'\nimport CnEnvironmentBanner from '../CnEnvironmentBanner/CnEnvironmentBanner.vue'\nimport CnSetupWizard from '../CnSetupWizard/CnSetupWizard.vue'\nimport { useEnvironment } from '../../composables/useEnvironment.js'\nimport { normalizeLook, useLook } from '../../composables/useLook.js'\nimport { buildFeatureRequestUrl } from '../../utils/forge.js'\nimport { prefixUrl } from '../../utils/headers.js'\nimport { CnTab, CnTabs } from '../CnTabs/index.js'\nimport { CnVersionInfoCard } from '../CnVersionInfoCard/index.js'\n\n/**\n * The tab the address names.\n *\n * @param {string} key The query parameter.\n * @return {string} Its value, or ''.\n */\nfunction readTabFromAddress(key) {\n\tif (typeof window === 'undefined' || !key) {\n\t\treturn ''\n\t}\n\treturn new URLSearchParams(window.location.search).get(key) || ''\n}\n\n/**\n * Put the open tab in the address without a new history entry.\n *\n * @param {string} key The query parameter.\n * @param {string} id The tab's id.\n * @return {void}\n */\nfunction writeTabToAddress(key, id) {\n\tif (typeof window === 'undefined' || !key || !window.history?.replaceState) {\n\t\treturn\n\t}\n\tconst url = new URL(window.location.href)\n\turl.searchParams.set(key, id)\n\twindow.history.replaceState(window.history.state, '', url.toString())\n}\n\n/**\n * CnAdminSettingsShell — the canonical chrome for a Conduction app's Nextcloud\n * admin settings page.\n *\n * Renders, in fleet-standard order:\n * 1. a page title header (\"<App> Settings\" / \"Configure your <App> installation\" + doc-url),\n * 2. a CnVersionInfoCard (version from `loadState`, up-to-date badge, a\n * \"Re-import configuration\" button wired to the AppHost endpoint\n * `POST /apps/<appId>/api/settings/load`, and a support/SLA footer),\n * 3. the app's own settings sections (default slot).\n *\n * Every app's `AdminRoot.vue` collapses to a thin wrapper so the chrome can\n * never drift between apps again.\n *\n * Basic usage\n * ```vue\n * <CnAdminSettingsShell\n * app-id=\"shillinq\"\n * app-name=\"Shillinq\"\n * doc-url=\"https://shillinq.conduction.nl/docs/intro\">\n * <MyRegisterMapping />\n * <MyFeatureSettings />\n * </CnAdminSettingsShell>\n * ```\n *\n * Real up-to-date check (when the backend exposes it)\n * ```vue\n * <CnAdminSettingsShell\n * app-id=\"opencatalogi\" app-name=\"OpenCatalogi\"\n * :app-version=\"running\" :configured-version=\"configured\"\n * :is-up-to-date=\"running === configured\" />\n * ```\n */\nexport default {\n\tname: 'CnAdminSettingsShell',\n\n\tcomponents: {\n\t\tCnEnvironmentBanner,\n\t\tCnBuildiqEditButton,\n\t\tBookOpenVariant,\n\t\tNcSettingsSection,\n\t\tCnCredentials,\n\t\tCnVersionInfoCard,\n\t\tCnSetupWizard,\n\t\tCnTab,\n\t\tCnTabs,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t\tRefresh,\n\t\tAutoFix,\n\t\tHelpCircleOutline,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The environment this instance is: `development`, `test`, `acceptance` or\n\t\t * `production`. Wins over the active organisation's `environment` field.\n\t\t * A non-production environment is named in a banner at the top and the tab\n\t\t * title gets a prefix. Production, an unknown value or no value shows nothing.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tenvironment: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Render the organisation credential broker on this admin page\n\t\t * (ADR-079 Step 2). Opt-in: only an app that actually brokers org-wide\n\t\t * secrets should surface it.\n\t\t *\n\t\t * This replaces the generic `manifest.adminSettings[]` modal that used\n\t\t * to live on CnAppRoot. That modal was gated on app OWNERSHIP and on an\n\t\t * array no app in the fleet ever declared, so the broker was\n\t\t * unreachable everywhere. Here it is reachable and the access decision\n\t\t * is Nextcloud's, made server-side for /settings/admin/<app>.\n\t\t */\n\t\tshowOrganisationCredentials: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The app's manifest `credentials[]` declarations, forwarded to the\n\t\t * broker to drive its informational \"apps requesting credentials\"\n\t\t * list. Only read when `showOrganisationCredentials` is true.\n\t\t */\n\t\tappCredentials: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The look the shell is drawn in: `board` or `nextcloud`. Empty follows\n\t\t * the `cnLook` that CnAppRoot provides.\n\t\t *\n\t\t * @spec openspec/changes/screens-chrome-parity/specs/settings-board-look/spec.md#requirement-the-admin-settings-shell-takes-the-board-header\n\t\t */\n\t\tlook: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** The Nextcloud app id (used for the default re-import endpoint + version loadState). */\n\t\tappId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** Human-readable application name shown in the header and version card. */\n\t\tappName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Running app version. When empty, read from\n\t\t * `loadState(appId, 'version', 'Unknown')` (provided by AppHost's\n\t\t * GenericAdminSettings::getForm()).\n\t\t */\n\t\tappVersion: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Page title. Defaults to \"<appName> Settings\". */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Page description. Defaults to \"Configure your <appName> installation\". */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: the path under the title, in place of the description,\n\t\t * as `[{ label, href? }]` (\"Beheerinstellingen\" linking to the admin\n\t\t * settings, then the app and the section). A crumb without `href` is\n\t\t * text; the last one is the current page.\n\t\t *\n\t\t * @spec openspec/changes/screens-admin-settings-board-header/specs/settings-board-look/spec.md\n\t\t */\n\t\tbreadcrumbs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Board look: a note after the path, behind a \"·\" (\"geldt voor de\n\t\t * hele organisatie\").\n\t\t *\n\t\t * @spec openspec/changes/screens-admin-settings-board-header/specs/settings-board-look/spec.md\n\t\t */\n\t\tbreadcrumbNote: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Documentation URL (renders the info icon next to the title). */\n\t\tdocUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * A tab strip under the header, as `[{ id, label, count? }]`. Each\n\t\t * tab's panel is the `tab-<id>` slot; the version card, the credential\n\t\t * broker and the default slot show only on the first tab. The open tab\n\t\t * is in the address (`?<tabQueryKey>=<id>`), so a link opens it and a\n\t\t * reload keeps it. The strip is keyboard operable (arrow keys, Home,\n\t\t * End). Empty draws no strip.\n\t\t *\n\t\t * @type {Array<{id: string, label: string, count?: number}>}\n\t\t * @spec openspec/changes/admin-settings-tabs/specs/settings-board-look/spec.md#requirement-the-admin-shell-can-draw-a-tab-strip\n\t\t */\n\t\ttabs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The query parameter that holds the open tab's `id`.\n\t\t *\n\t\t * @spec openspec/changes/admin-settings-tabs/specs/settings-board-look/spec.md#requirement-the-admin-shell-can-draw-a-tab-strip\n\t\t */\n\t\ttabQueryKey: {\n\t\t\ttype: String,\n\t\t\tdefault: 'tab',\n\t\t},\n\n\t\t/** Whether to render the version card. */\n\t\tshowVersionCard: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Under the board look the version card spans the whole settings grid.\n\t\t * Set to `false` to keep it one card in the grid.\n\t\t *\n\t\t * @spec openspec/changes/board-version-card-full-width/specs/settings-board-look/spec.md#requirement-the-board-version-card-spans-the-settings-grid\n\t\t */\n\t\tversionCardWide: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Where the version card (and the organisation credential broker) sits:\n\t\t * `start`, above the app's sections (the default), or `end`, after them,\n\t\t * for a page whose board starts with the app's own card. The keyboard\n\t\t * order follows, because the slot moves in the markup.\n\t\t *\n\t\t * @spec openspec/changes/screens-admin-settings-version-card-end/specs/settings-board-look/spec.md#requirement-the-version-card-can-follow-the-apps-sections\n\t\t */\n\t\tversionCardPosition: {\n\t\t\ttype: String,\n\t\t\tdefault: 'start',\n\t\t\tvalidator: (value) => ['start', 'end'].includes(value),\n\t\t},\n\n\t\t/** Version card heading. */\n\t\tversionTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Version information'),\n\t\t},\n\n\t\t/** Version card description. Defaults to \"Information about the current <appName> installation\". */\n\t\tversionDescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Configured version (for apps that track a separate config version).\n\t\t * When omitted, read from `loadState(appId, 'configuredVersion', '')`\n\t\t * (AppHost stamps it on each config import).\n\t\t */\n\t\tconfiguredVersion: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Whether the installation is up to date. Drives the badge/button in the\n\t\t * version card. When left null, the shell reads the REAL value from\n\t\t * `loadState(appId, 'isUpToDate', true)` — AppHost's GenericAdminSettings\n\t\t * provides it by comparing the running version to the imported config\n\t\t * version. Pass an explicit boolean to override; do NOT hardcode true.\n\t\t */\n\t\tisUpToDate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Whether to show the version card's up-to-date / update button. */\n\t\tshowUpdateButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether an app update is in progress (drives the update button spinner). */\n\t\tupdating: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether to show the \"Re-import configuration\" action. */\n\t\tshowReimport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Override the re-import endpoint. Defaults to the canonical AppHost\n\t\t * route `/apps/<appId>/api/settings/load`.\n\t\t */\n\t\treimportUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Whether to render the default support footer. */\n\t\tshowSupport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Support contact email. */\n\t\tsupportEmail: {\n\t\t\ttype: String,\n\t\t\tdefault: 'support@conduction.nl',\n\t\t},\n\n\t\t/** SLA contact email (set to '' to hide the SLA line). */\n\t\tslaEmail: {\n\t\t\ttype: String,\n\t\t\tdefault: 'sales@conduction.nl',\n\t\t},\n\n\t\t/** Show a \"Run setup wizard\" action that opens CnSetupWizard (ADR-042). */\n\t\tshowSetup: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** The `manifest.setup.steps` array passed to CnSetupWizard. */\n\t\tsetupSteps: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Show a \"Help us / suggest a feature\" link to the forge's feature-request form. */\n\t\tshowHelp: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** `<owner>/<repo>` GitHub slug the feature-request link targets. */\n\t\thelpRepo: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: ['update', 'reimported', 'reimport-error', 'tab-change'],\n\n\tsetup(props) {\n\t\t// The app's own `environment` setting, else the active organisation's.\n\t\tconst { environment: environmentName } = useEnvironment({ environment: () => props.environment })\n\t\tconst { look, isBoard } = useLook(props)\n\t\t// A shell told `look: \"board\"` itself draws the board look also on an\n\t\t// admin page that no CnAppRoot wraps, as Nextcloud's settings pages are.\n\t\tconst ownLookClass = computed(() => (normalizeLook(props.look) === 'board' ? 'cn-look-board' : ''))\n\t\t// Everything inside the shell, its own version card and the app's\n\t\t// sections alike, follows the shell's look without the app providing it.\n\t\tprovide('cnLook', look)\n\t\treturn { environmentName, isBoard, ownLookClass }\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\treimporting: false,\n\t\t\tsetupWizardOpen: false,\n\t\t\t// The open tab's id; empty until a tab is picked or the address names one.\n\t\t\tchosenTabId: readTabFromAddress(this.tabQueryKey),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The tabs that have an id and a label.\n\t\t *\n\t\t * @return {Array<{id: string, label: string, count: number|null}>}\n\t\t * @spec openspec/changes/admin-settings-tabs/specs/settings-board-look/spec.md#requirement-the-admin-shell-can-draw-a-tab-strip\n\t\t */\n\t\ttabItems() {\n\t\t\treturn (Array.isArray(this.tabs) ? this.tabs : [])\n\t\t\t\t.filter((tab) => tab && typeof tab.id === 'string' && tab.id !== '' && typeof tab.label === 'string' && tab.label !== '')\n\t\t\t\t.map((tab) => ({ id: tab.id, label: tab.label, count: tab.count ?? null }))\n\t\t},\n\n\t\t/**\n\t\t * The open tab: the one picked or named in the address, else the first.\n\t\t *\n\t\t * @return {string} Its id, or '' without tabs.\n\t\t */\n\t\tactiveTabId() {\n\t\t\tconst ids = this.tabItems.map((tab) => tab.id)\n\t\t\treturn ids.includes(this.chosenTabId) ? this.chosenTabId : (ids[0] || '')\n\t\t},\n\n\t\t/**\n\t\t * Whether the shell's own content shows: always without tabs, else on\n\t\t * the first tab.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tonFirstTab() {\n\t\t\treturn this.tabItems.length === 0 || this.activeTabId === this.tabItems[0].id\n\t\t},\n\n\t\t/**\n\t\t * Whether the app's sections come before the version card.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/screens-admin-settings-version-card-end/specs/settings-board-look/spec.md#requirement-the-version-card-can-follow-the-apps-sections\n\t\t */\n\t\tversionCardAtEnd() {\n\t\t\treturn this.versionCardPosition === 'end'\n\t\t},\n\n\t\t/**\n\t\t * The crumbs that have a label.\n\t\t *\n\t\t * @return {Array<{label: string, href?: string}>}\n\t\t * @spec openspec/changes/screens-admin-settings-board-header/specs/settings-board-look/spec.md\n\t\t */\n\t\tcrumbs() {\n\t\t\treturn (Array.isArray(this.breadcrumbs) ? this.breadcrumbs : [])\n\t\t\t\t.filter((crumb) => crumb && typeof crumb.label === 'string' && crumb.label !== '')\n\t\t},\n\n\t\t/** @return {string} The accessible name of the breadcrumb navigation. */\n\t\tbreadcrumbLabel() {\n\t\t\treturn t('nextcloud-vue', 'Breadcrumb')\n\t\t},\n\n\t\t/**\n\t\t * The \"Help us\" link target: the forge's feature-request issue form\n\t\t * for `helpRepo`, on the fleet-default forge. Empty (hiding the\n\t\t * button) when no repo is configured.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\thelpUrl() {\n\t\t\tconst repo = String(this.helpRepo || '').trim()\n\t\t\tif (!repo) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn buildFeatureRequestUrl(null, repo)\n\t\t},\n\n\t\t/** @return {string} The running version, falling back to AppHost initial state. */\n\t\tresolvedVersion() {\n\t\t\tif (this.appVersion) {\n\t\t\t\treturn this.appVersion\n\t\t\t}\n\t\t\treturn loadState(this.appId, 'version', 'Unknown')\n\t\t},\n\n\t\t/** @return {string} Configured version, falling back to AppHost initial state. */\n\t\tresolvedConfiguredVersion() {\n\t\t\treturn this.configuredVersion || loadState(this.appId, 'configuredVersion', '')\n\t\t},\n\n\t\t/** @return {boolean} Real up-to-date signal: explicit prop wins, else AppHost initial state. */\n\t\tresolvedIsUpToDate() {\n\t\t\tif (this.isUpToDate !== null) {\n\t\t\t\treturn this.isUpToDate\n\t\t\t}\n\t\t\treturn loadState(this.appId, 'isUpToDate', true)\n\t\t},\n\n\t\t/** @return {string} Page title, defaulting to \"<appName> Settings\". */\n\t\tresolvedTitle() {\n\t\t\treturn this.title || t('nextcloud-vue', '{app} Settings', { app: this.appName })\n\t\t},\n\n\t\t/** @return {string} Page description. */\n\t\tresolvedDescription() {\n\t\t\treturn this.description || t('nextcloud-vue', 'Configure your {app} installation', { app: this.appName })\n\t\t},\n\n\t\t/** @return {string} Version card description. */\n\t\tresolvedVersionDescription() {\n\t\t\treturn this.versionDescription || t('nextcloud-vue', 'Information about the current {app} installation', { app: this.appName })\n\t\t},\n\n\t\t/** @return {string} Re-import endpoint. */\n\t\tresolvedReimportUrl() {\n\t\t\treturn prefixUrl(this.reimportUrl) || generateUrl('/apps/{appId}/api/settings/load', { appId: this.appId })\n\t\t},\n\n\t\t/** @return {string} Re-import button label. */\n\t\treimportLabel() {\n\t\t\treturn t('nextcloud-vue', 'Re-import configuration')\n\t\t},\n\n\t\t/** @return {string} Re-import in-progress label. */\n\t\timportingLabel() {\n\t\t\treturn t('nextcloud-vue', 'Importing…')\n\t\t},\n\n\t\t/** @return {string} Support footer heading. */\n\t\tsupportTitle() {\n\t\t\treturn t('nextcloud-vue', 'Support')\n\t\t},\n\n\t\t/** @return {string} Support footer line. */\n\t\tsupportLine() {\n\t\t\treturn t('nextcloud-vue', 'For support, contact us at')\n\t\t},\n\n\t\t/** @return {string} SLA footer line. */\n\t\tslaLine() {\n\t\t\treturn t('nextcloud-vue', 'For a Service Level Agreement (SLA), contact')\n\t\t},\n\n\t\t/** @return {string} Setup-wizard button label. */\n\t\tsetupLabel() {\n\t\t\treturn t('nextcloud-vue', 'Run setup wizard')\n\t\t},\n\n\t\t/** @return {string} Documentation button label (board header). */\n\t\tdocumentationLabel() {\n\t\t\treturn t('nextcloud-vue', 'Documentation')\n\t\t},\n\n\t\t/** @return {string} Help / suggest-feature button label. */\n\t\thelpLabel() {\n\t\t\treturn t('nextcloud-vue', 'Help us')\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * A tab was picked in the strip: remember it, put it in the address\n\t\t * (replacing the entry, so Back leaves the page) and tell the app.\n\t\t *\n\t\t * @param {number} index The picked tab's index.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/admin-settings-tabs/specs/settings-board-look/spec.md#requirement-the-admin-shell-can-draw-a-tab-strip\n\t\t */\n\t\tonTabIndex(index) {\n\t\t\tconst tab = this.tabItems[index]\n\t\t\tif (!tab || tab.id === this.chosenTabId) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.chosenTabId = tab.id\n\t\t\twriteTabToAddress(this.tabQueryKey, tab.id)\n\t\t\t/**\n\t\t\t * @event tab-change Emitted when the reader opens another tab. Payload: its `id`.\n\t\t\t */\n\t\t\tthis.$emit('tab-change', tab.id)\n\t\t},\n\n\t\t/** Forward the version card's update-button click to the parent. */\n\t\tonUpdate() {\n\t\t\t/**\n\t\t\t * @event update Emitted when the version card's update button is clicked.\n\t\t\t */\n\t\t\tthis.$emit('update')\n\t\t},\n\n\t\t/**\n\t\t * Re-import the app's OpenRegister configuration via the canonical\n\t\t * AppHost endpoint, then emit the result so the parent can refresh.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync reimport() {\n\t\t\tif (this.reimporting) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.reimporting = true\n\t\t\ttry {\n\t\t\t\tconst response = await axios.post(this.resolvedReimportUrl)\n\t\t\t\tconst data = response?.data ?? {}\n\t\t\t\t// AppHost returns { success, message, ... }; a bare 2xx also counts.\n\t\t\t\tif (data.success === false) {\n\t\t\t\t\tthrow new Error(data.message || t('nextcloud-vue', 'Re-import failed'))\n\t\t\t\t}\n\t\t\t\tshowSuccess(data.message || t('nextcloud-vue', 'Configuration re-imported successfully'))\n\t\t\t\t/**\n\t\t\t\t * @event reimported Emitted after a successful configuration re-import.\n\t\t\t\t * @type {object} The AppHost response payload.\n\t\t\t\t */\n\t\t\t\tthis.$emit('reimported', data)\n\t\t\t} catch (error) {\n\t\t\t\tconst message = error?.response?.data?.message || error?.message || t('nextcloud-vue', 'Re-import failed')\n\t\t\t\tshowError(message)\n\t\t\t\t/**\n\t\t\t\t * @event reimport-error Emitted when a configuration re-import fails.\n\t\t\t\t * @type {Error} The error that caused the failure.\n\t\t\t\t */\n\t\t\t\tthis.$emit('reimport-error', error)\n\t\t\t} finally {\n\t\t\t\tthis.reimporting = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-admin-settings-shell {\n\tmax-width: 900px;\n}\n\n/* The board look lifts the width and lays the header and cards on a grid (look-board.css). */\n\n.cn-support-info {\n\tmargin-top: 16px;\n\tpadding-top: 16px;\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-support-info h4 {\n\tmargin: 0 0 8px 0;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\tcolor: var(--color-main-text);\n}\n\n.cn-support-info p {\n\tmargin: 4px 0;\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 14px;\n}\n\n.cn-support-info a {\n\tcolor: var(--color-primary-element);\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","_createBlock","_openBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList","_createVNode","_createTextVNode","_renderSlot"],"mappings":";;;;AAiBc,EAAA,KAAK,EAAC;AAAkC,EAAA,aAAW,EAAC,0BAA0B;;AACpF,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,kCAAkC,GAAA;AACxC,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gCAAgC,GAAA;;;AAMZ,EAAA,KAAK,EAAC,iCAAgC;AAAE,EAAA,aAAW,EAAC,+BAA+B;;;;;AAGvF,EAAA,aAAW,EAAC,MAAM;;;;;;AAUlC,EAAA,KAAK,EAAC,sCAAsC;;AAIlD,MAAA,WAAA,GAAA,EAAA,KAAK,EAAC,yCAAyC,GAAA;;;;AAkG1B,EAAA,KAAK,EAAC,iBAAiB;;;;;;;;;;;;;;;;;;;;;;uBA3InDA,kBAgMK,CAAA,KAAA,EAAA;IAhMA,KAAK,EAAAC,cAAA,CAAA,CAAC,yBAAwB,EAAU,MAAY,CAAA,YAAA,CAAA,CAAA;;KAE7B,MAAe,CAAA,eAAA;sBAA1CC,WAA4E,CAAA,8BAAA,EAAA;;AAA/B,UAAA,WAAW,EAAE,MAAe,CAAA,eAAA;;;MAMjE,MAAO,CAAA,OAAA;sBADfA,WAImB,CAAA,4BAAA,EAAA;;AAFjB,UAAA,IAAI,EAAE,QAAa,CAAA,aAAA;AACnB,UAAA,WAAW,EAAE,QAAmB,CAAA,mBAAA;AAChC,UAAA,MAAM,EAAE,MAAM,CAAA,MAAA;;AAKhB,SAAAC,SAAA,EAAA,EAAAH,kBAAA,CAuCK,OAvCL,UAuCK,EAAA;AAtCJ,UAAAI,kBAAA,CAuBK,OAvBL,UAuBK,EAAA;YAtBJA,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA;AAKO,YAAA,CAAA,QAAA,CAAA,MAAM,CAAC,MAAO,GAAA,CAAA;AAAzB,iBAAAF,SAAA,EAAA,EAAAH,kBAAA,CAYK,OAZL,UAYK,EAAA;kBAXJI,kBAMK,CAAA,KAAA,EAAA;AANA,oBAAA,KAAK,EAAC,qCAAoC;AAAG,oBAAA,YAAU,EAAE,QAAe,CAAA,eAAA;;AAC5E,qBAAAD,SAAA,CAAA,IAAA,CAAA,EAAAH,kBAAA,CAIUM,QAJyB,EAAA,IAAA,EAAAC,UAAA,CAAA,QAAA,CAAA,MAAM,EAAvB,CAAA,KAAK,EAAE,KAAK,KAAA;+EAAmB,KAAK,EAAA,EAAA;yBACzC,KAAI,GAAA,CAAA;0CAAhBP,kBAAiD,CAAA,MAAA,EAAjD,UAAiD,EAAP,GAAC,CAAA;;AAClC,wBAAA,CAAA,KAAK,CAAC,IAAI;0CAAnBA,kBAAwG,CAAA,GAAA,EAAA;;8BAAlF,IAAI,EAAE,KAAK,CAAC,IAAI;AAAE,8BAAA,KAAK,EAAC,qCAAqC;AAAI,6BAAA,EAAAK,eAAA,CAAA,KAAK,CAAC;0CAC7FL,kBAAgG,CAAA,MAAA,EAAA;;AAAlF,8BAAA,cAAY,EAAE,KAAI,KAAM,QAAA,CAAA,MAAM,CAAC,MAAK,GAAA,CAAA,GAAA,MAAA,GAAA,IAAA;AAA0B,6BAAA,EAAAK,eAAA,CAAA,KAAK,CAAC,KAAI,CAAA,EAAA,CAAA,oBAAA,UAAA,CAAA,CAAA;;;;mBAGxE,MAAc,CAAA,cAAA;oCAA9BL,kBAGU,CAAAM,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA;AAFT,wBAAA,MAAA,CAAA,CAAA,CAAA,KAAA,MAAA,CAAA,CAAA,CAAA,GAAAF,kBAAA,CAAgC,MAA1B,EAAA,EAAA,aAAW,EAAC,MAAM,IAAC,GAAC,EAAA,CAAA,CAAA,cAAA,CAAA;AAC1B,wBAAAA,kBAAA,CAAgC,8BAAvB,MAAe,CAAA,cAAA,CAAA,EAAA,CAAA,YAAA;;;;8BAG1BJ,kBAEG,CAAA,GAAA,EAFH,UAEG,EAAAK,eAAA,CADC;;AAGL,UAAAD,kBAAA,CAaK,OAbL,WAaK,EAAA;aAXG,MAAM,CAAA,MAAA;8BADbF,WAUU,CAAA,mBAAA,EAAA;;AARR,kBAAA,IAAI,EAAE,MAAM,CAAA,MAAA;AACb,kBAAA,MAAM,EAAC,QAAO;AACd,kBAAA,GAAG,EAAC,qBAAoB;AACxB,kBAAA,aAAW,EAAC,iCAAiC;;AAClC,kBAAA,IAAI,UACd,MAA6B;oBAA7BM,WAA6B,CAAA,0BAAA,EAAA,EAAX,IAAI,EAAE,EAAE,EAAA,CAAA;;mCACjB,MACV;AADU,oBAAAC,eAAA,CAAA,GACV,mBAAG;;;;;YAEJD,WAAsB,CAAA,8BAAA,CAAA;;;AASjB,IAAA,CAAA,QAAA,CAAA,QAAQ,CAAC,MAAO,GAAA,CAAA;sBADvBN,WAkBQ,CAAA,iBAAA,EAAA;;AAhBP,UAAA,KAAK,EAAC,+BAA8B;AACnC,UAAA,IAAI,EAAE,MAAM,CAAA,OAAA,GAAA,OAAA,GAAA,WAAA;AACZ,UAAA,SAAS,EAAE,QAAa,CAAA,aAAA;AACzB,UAAA,aAAW,EAAC,wBAAuB;AAClC,UAAA,sBAAkB,EAAE,QAAU,CAAA,UAAA;;2BAE9B,MAAsB;8BADvBF,kBAUO,CAAAM,QAAA,EAAA,IAAA,EAAAC,UAAA,CATQ,QAAQ,CAAA,QAAA,EAAA,CAAf,GAAE,KAAA;mCADVL,WAUO,CAAA,gBAAA,EAAA;gBARL,GAAG,EAAE,GAAG,CAAC,EAAE;gBACX,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,KAAK,EAAE,GAAG,CAAC,KAAK;AAChB,gBAAA,MAAM,EAAE,GAAG,CAAC,EAAC,KAAM,QAAW,CAAA,WAAA;;iCAC/B,MAGK;kBAHLE,kBAGK,CAAA,KAAA,EAAA;AAHA,oBAAA,KAAK,EAAC,gCAAiC;oBAAC,UAAQ,EAAE,GAAG,CAAC,EAAE;;oBAE5DM,UAA+B,CAAA,IAAA,CAAA,MAAA,EAAA,CAAA,IAAA,EAAX,GAAG,CAAC,EAAE,CAAA,CAAA,CAAA;;;;;;;;;;AAQjB,IAAA,CAAA,QAAA,CAAA,gBAAiB,IAAG,QAAU,CAAA,UAAA;QAA1CA,UAA6C,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;AAItC,IAAA,CAAA,MAAA,CAAA,eAAgB,IAAG,QAAU,CAAA,UAAA;sBADpCR,WAsEmB,CAAA,4BAAA,EAAA;;AApEjB,UAAA,OAAO,EAAE,MAAO,CAAA,OAAA;AAChB,UAAA,UAAU,EAAE,QAAe,CAAA,eAAA;AAC3B,UAAA,iBAAiB,EAAE,QAAyB,CAAA,yBAAA;AAC5C,UAAA,UAAU,EAAE,QAAkB,CAAA,kBAAA;AAC9B,UAAA,gBAAgB,EAAE,MAAgB,CAAA,gBAAA;AAClC,UAAA,QAAQ,EAAE,MAAQ,CAAA,QAAA;AAClB,UAAA,KAAK,EAAE,MAAY,CAAA,YAAA;AACnB,UAAA,WAAW,EAAE,QAA0B,CAAA,0BAAA;AACvC,UAAA,IAAI,EAAE,MAAe,CAAA,eAAA;AACrB,UAAA,QAAM,EAAE,QAAQ,CAAA,QAAA;;AACN,UAAA,OAAO,UAEjB,MAUU;aATH,MAAY,CAAA,YAAA;8BADnBA,WAUU,CAAA,mBAAA,EAAA;;AART,kBAAA,OAAO,EAAC,SAAQ;AACf,kBAAA,QAAQ,EAAE,KAAW,CAAA,WAAA;AACrB,kBAAA,OAAK,EAAE,QAAQ,CAAA,QAAA;;AACL,kBAAA,IAAI,UACd,MAA8C;qBAAzB,KAAW,CAAA,WAAA;sCAAhCA,WAA8C,CAAA,wBAAA,EAAA;;AAAX,0BAAA,IAAI,EAAE,EAAE;;sCAC3CA,WAA4B,CAAA,kBAAA,EAAA;;AAAX,0BAAA,IAAI,EAAE,EAAE;;;mCAChB,MACV;AADU,oBAAAO,eAAA,CAAA,GACV,GAAGJ,eAAA,CAAA,KAAA,CAAA,cAAc,QAAA,CAAA,cAAe,GAAE;;;;;aAGnB,MAAS,CAAA,SAAA;8BAAzBH,WAKU,CAAA,mBAAA,EAAA;;AALiB,kBAAA,aAAW,EAAC;AAAsB,kBAAA,OAAK,uCAAE,KAAgB,CAAA,eAAA,GAAA,IAAA,CAAA,CAAA;;AACxE,kBAAA,IAAI,UACd,MAAqB;oBAArBM,WAAqB,CAAA,kBAAA,EAAA,EAAX,IAAI,EAAE,EAAE,EAAA,CAAA;;mCACT,MACV;AADU,oBAAAC,eAAA,CAAA,GACV,mBAAG,QAAS,CAAA,UAAA,CAAA,EAAA,CAAA,YAAA;;;;;AAON,YAAA,CAAA,MAAA,CAAA,QAAO,IAAK,QAAO,CAAA,OAAA;8BAD1BP,WAQU,CAAA,mBAAA,EAAA;;AANR,kBAAA,IAAI,EAAE,QAAO,CAAA,OAAA;AACd,kBAAA,MAAM,EAAC,QAAQ;;AACJ,kBAAA,IAAI,UACd,MAA+B;oBAA/BM,WAA+B,CAAA,4BAAA,EAAA,EAAX,IAAI,EAAE,EAAE,EAAA,CAAA;;mCACnB,MACV;AADU,oBAAAC,eAAA,CAAA,GACV,mBAAG,QAAQ,CAAA,SAAA,CAAA,EAAA,CAAA,YAAA;;;;;YAGZC,UAAsB,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;;AAGZ,UAAA,MAAM,UAEhB,MAYM;AAZN,YAAAA,UAAA,CAYM,2BAZN,MAYM;eAXM,MAAW,CAAA,WAAA;AAAtB,mBAAAP,SAAA,EAAA,EAAAH,kBAAA,CAUK,OAVL,WAUK,EAAA;AATJ,oBAAAI,kBAAA,CAA0B,4BAAnB,QAAW,CAAA,YAAA,CAAA,EAAA,CAAA,YAAA;oBAClBA,kBAGG,CAAA,GAAA,EAAA,IAAA,EAAA;AAFC,sBAAAK,eAAA,CAAAJ,eAAA,CAAA,QAAA,CAAA,WAAU,IAAG,GAChB,EAAA,CAAA,YAAA;sBAAAD,kBAAyD,CAAA,GAAA,EAAA;AAArD,wBAAA,IAAI,YAAY,MAAY,CAAA,YAAA,CAAA,CAAA;yCAAO;;qBAE/B,MAAQ,CAAA,QAAA;sCAAjBJ,kBAGG,CAAA,GAAA,EAAA,WAAA,EAAA;AAFC,0BAAAS,eAAA,CAAAJ,eAAA,CAAA,QAAA,CAAA,WAAS,GACZ,EAAA,CAAA,YAAA;0BAAAD,kBAAiD,CAAA,GAAA,EAAA;AAA7C,4BAAA,IAAI,YAAY,MAAQ,CAAA,QAAA,CAAA,CAAA;6CAAO,MAAO,CAAA,QAAA,CAAA,EAAA,CAAA,oBAAA,WAAA,CAAA;;;;;;;AAMnC,UAAA,kBAAgB,UAE1B,MAA4B;YAA5BM,UAA4B,CAAA,IAAA,CAAA,MAAA,EAAA,eAAA,CAAA;;;;;AAoBvB,IAAA,CAAA,MAAA,CAAA,2BAA4B,IAAG,QAAU,CAAA,UAAA;sBADhDR,WAMkD,CAAA,wBAAA,EAAA;;AAJjD,UAAA,KAAK,EAAC,cAAa;AAClB,UAAA,KAAK,EAAE,MAAK,CAAA,KAAA;AACZ,UAAA,OAAO,EAAE,MAAO,CAAA,OAAA;AAChB,UAAA,cAAc,EAAE,MAAc,CAAA,cAAA;AAC/B,UAAA,aAAW,EAAC,mCAAkC;;;AAGlC,IAAA,CAAA,CAAA,QAAA,CAAA,gBAAiB,IAAG,QAAU,CAAA,UAAA;QAA3CQ,UAA8C,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,EAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,CAAA;;AAIvC,IAAA,CAAA,MAAA,CAAA,SAAU,IAAG,KAAe,CAAA,eAAA;sBADnCR,WAKmC,CAAA,wBAAA,EAAA;;AAHjC,UAAA,KAAK,EAAE,MAAK,CAAA,KAAA;AACZ,UAAA,KAAK,EAAE,MAAU,CAAA,UAAA;AACjB,UAAA,UAAQ,uCAAE,KAAc,CAAA,eAAA,GAAA,KAAA,CAAA,CAAA;AACxB,UAAA,OAAK,uCAAE,KAAc,CAAA,eAAA,GAAA,KAAA,CAAA,CAAA;;;;;;;;"}
@@ -2,7 +2,7 @@ import script from './CnMetadataTab.vue2.js';
2
2
  import { render } from './CnMetadataTab.vue3.js';
3
3
 
4
4
  script.render = render;
5
- script.__scopeId = "data-v-b99c64aa";
5
+ script.__scopeId = "data-v-88689872";
6
6
  const __sfc_main = script;
7
7
 
8
8
  export { __sfc_main as default };
@@ -1,4 +1,5 @@
1
1
  import { translate } from '@nextcloud/l10n';
2
+ import { userLocale } from '../../utils/userLocale.js';
2
3
 
3
4
  var script = {
4
5
  name: 'CnMetadataTab',
@@ -31,13 +32,13 @@ var script = {
31
32
  metadataCreated() {
32
33
  const o = this.item?.['@self'];
33
34
  const v = o?.created;
34
- return v ? new Date(v).toLocaleString() : '—'
35
+ return v ? new Date(v).toLocaleString(userLocale()) : '—'
35
36
  },
36
37
 
37
38
  metadataUpdated() {
38
39
  const o = this.item?.['@self'];
39
40
  const v = o?.updated;
40
- return v ? new Date(v).toLocaleString() : '—'
41
+ return v ? new Date(v).toLocaleString(userLocale()) : '—'
41
42
  },
42
43
 
43
44
  defaultRows() {
@@ -1 +1 @@
1
- {"version":3,"file":"CnMetadataTab.vue2.js","sources":["../../../../src/components/CnAdvancedFormDialog/CnMetadataTab.vue"],"sourcesContent":["<template>\n\t<div class=\"cn-advanced-form-dialog__table-container\">\n\t\t<table class=\"cn-advanced-form-dialog__table\">\n\t\t\t<thead>\n\t\t\t\t<tr class=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Metadata') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Value') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr\n\t\t\t\t\tv-for=\"[label, value] in resolvedRows\"\n\t\t\t\t\t:key=\"label\"\n\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ value }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\n\nexport default {\n\tname: 'CnMetadataTab',\n\n\tprops: {\n\t\t/** The object instance being created or edited */\n\t\titem: { type: Object, default: null },\n\t\t/* eslint-disable vue/no-unused-properties -- CnAdvancedFormDialog binds it next to `item`, and every default row reads `item` */\n\t\t/** Current form data object */\n\t\tformData: { type: Object, default: () => ({}) },\n\t\t/* eslint-enable vue/no-unused-properties */\n\t\t/**\n\t\t * Additional `[label, value]` rows appended to (or, when `replaceRows` is true,\n\t\t * replacing) the default ID/Created/Updated rows. Use this to surface\n\t\t * domain-specific metadata (version, owner, custom timestamps, etc.).\n\t\t */\n\t\textraRows: { type: Array, default: () => [] },\n\t\t/**\n\t\t * When true, render only `extraRows` and skip the default ID/Created/Updated rows.\n\t\t */\n\t\treplaceRows: { type: Boolean, default: false },\n\t},\n\n\tcomputed: {\n\t\tmetadataId() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\treturn o?.id ?? this.item?.id ?? '—'\n\t\t},\n\n\t\tmetadataCreated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.created\n\t\t\treturn v ? new Date(v).toLocaleString() : '—'\n\t\t},\n\n\t\tmetadataUpdated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.updated\n\t\t\treturn v ? new Date(v).toLocaleString() : '—'\n\t\t},\n\n\t\tdefaultRows() {\n\t\t\treturn [\n\t\t\t\t[this.t('nextcloud-vue', 'ID'), this.metadataId],\n\t\t\t\t[this.t('nextcloud-vue', 'Created'), this.metadataCreated],\n\t\t\t\t[this.t('nextcloud-vue', 'Updated'), this.metadataUpdated],\n\t\t\t]\n\t\t},\n\n\t\tresolvedRows() {\n\t\t\tconst extra = Array.isArray(this.extraRows) ? this.extraRows : []\n\t\t\tif (this.replaceRows) {\n\t\t\t\treturn extra\n\t\t\t}\n\t\t\treturn [...this.defaultRows, ...extra]\n\t\t},\n\t},\n\n\tmethods: { t },\n}\n</script>\n\n<style scoped>\n.cn-advanced-form-dialog__table-container {\n\tbackground: var(--color-main-background);\n\tborder-radius: var(--border-radius);\n\toverflow: hidden;\n\tbox-shadow: 0 2px 4px var(--color-box-shadow);\n\tborder: 1px solid var(--color-border);\n\tmargin-bottom: calc(5 * var(--default-grid-baseline));\n}\n\n.cn-advanced-form-dialog__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table th,\n.cn-advanced-form-dialog__table td {\n\tpadding: calc(3 * var(--default-grid-baseline));\n\ttext-align: left;\n\tborder-bottom: 1px solid var(--color-border);\n\tvertical-align: middle;\n}\n\n.cn-advanced-form-dialog__table th {\n\tbackground: var(--color-background-dark);\n\tfont-weight: 500;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__table-row {\n\tcursor: default;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table-col-constrained {\n\twidth: 150px;\n\tmax-width: 150px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__table-col-expanded {\n\twidth: auto;\n\tmin-width: 200px;\n}\n</style>\n"],"names":["t"],"mappings":";;AAiCA,aAAe;AACd,CAAA,IAAI,EAAE,eAAe;;AAErB,CAAA,KAAK,EAAE;AACN;AACA,EAAA,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;AAGrC,EAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG;AAC/C;AACA;AACC;;;;AAID,EAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI;AAC7C;AACC;;AAED,EAAA,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;EAC9C;;AAED,CAAA,QAAQ,EAAE;EACT,UAAU,GAAG;GACZ,MAAM,CAAA,GAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAA;AAC7B,GAAA,OAAO,CAAC,EAAE,EAAC,IAAK,IAAI,CAAC,IAAI,EAAE,EAAG,IAAG,GAAE;GACnC;;AAED,EAAA,eAAe,GAAG;GACjB,MAAM,CAAA,GAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAA;AAC7B,GAAA,MAAM,IAAI,CAAC,EAAE,QAAM;AACnB,GAAA,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAG,GAAE,GAAE;GAC5C;;AAED,EAAA,eAAe,GAAG;GACjB,MAAM,CAAA,GAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAA;AAC7B,GAAA,MAAM,IAAI,CAAC,EAAE,QAAM;AACnB,GAAA,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAG,GAAE,GAAE;GAC5C;;EAED,WAAW,GAAG;AACb,GAAA,OAAO;IACN,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;IAC1D,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;AAC3D,IAAA;GACA;;AAED,EAAA,YAAY,GAAG;GACd,MAAM,KAAM,GAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAE,GAAE,IAAI,CAAC,SAAU,GAAE,GAAC;AAChE,GAAA,IAAI,IAAI,CAAC,WAAW,EAAE;IACrB,OAAO,KAAI;AACZ,IAAA;AACA,GAAA,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAA;GACrC;EACD;;CAED,OAAO,EAAE,KAAEA,SAAA,EAAG;AACf;;;;"}
1
+ {"version":3,"file":"CnMetadataTab.vue2.js","sources":["../../../../src/components/CnAdvancedFormDialog/CnMetadataTab.vue"],"sourcesContent":["<template>\n\t<div class=\"cn-advanced-form-dialog__table-container\">\n\t\t<table class=\"cn-advanced-form-dialog__table\">\n\t\t\t<thead>\n\t\t\t\t<tr class=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Metadata') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Value') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr\n\t\t\t\t\tv-for=\"[label, value] in resolvedRows\"\n\t\t\t\t\t:key=\"label\"\n\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ value }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { userLocale } from '../../utils/userLocale.js'\n\nexport default {\n\tname: 'CnMetadataTab',\n\n\tprops: {\n\t\t/** The object instance being created or edited */\n\t\titem: { type: Object, default: null },\n\t\t/* eslint-disable vue/no-unused-properties -- CnAdvancedFormDialog binds it next to `item`, and every default row reads `item` */\n\t\t/** Current form data object */\n\t\tformData: { type: Object, default: () => ({}) },\n\t\t/* eslint-enable vue/no-unused-properties */\n\t\t/**\n\t\t * Additional `[label, value]` rows appended to (or, when `replaceRows` is true,\n\t\t * replacing) the default ID/Created/Updated rows. Use this to surface\n\t\t * domain-specific metadata (version, owner, custom timestamps, etc.).\n\t\t */\n\t\textraRows: { type: Array, default: () => [] },\n\t\t/**\n\t\t * When true, render only `extraRows` and skip the default ID/Created/Updated rows.\n\t\t */\n\t\treplaceRows: { type: Boolean, default: false },\n\t},\n\n\tcomputed: {\n\t\tmetadataId() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\treturn o?.id ?? this.item?.id ?? '—'\n\t\t},\n\n\t\tmetadataCreated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.created\n\t\t\treturn v ? new Date(v).toLocaleString(userLocale()) : '—'\n\t\t},\n\n\t\tmetadataUpdated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.updated\n\t\t\treturn v ? new Date(v).toLocaleString(userLocale()) : '—'\n\t\t},\n\n\t\tdefaultRows() {\n\t\t\treturn [\n\t\t\t\t[this.t('nextcloud-vue', 'ID'), this.metadataId],\n\t\t\t\t[this.t('nextcloud-vue', 'Created'), this.metadataCreated],\n\t\t\t\t[this.t('nextcloud-vue', 'Updated'), this.metadataUpdated],\n\t\t\t]\n\t\t},\n\n\t\tresolvedRows() {\n\t\t\tconst extra = Array.isArray(this.extraRows) ? this.extraRows : []\n\t\t\tif (this.replaceRows) {\n\t\t\t\treturn extra\n\t\t\t}\n\t\t\treturn [...this.defaultRows, ...extra]\n\t\t},\n\t},\n\n\tmethods: { t },\n}\n</script>\n\n<style scoped>\n.cn-advanced-form-dialog__table-container {\n\tbackground: var(--color-main-background);\n\tborder-radius: var(--border-radius);\n\toverflow: hidden;\n\tbox-shadow: 0 2px 4px var(--color-box-shadow);\n\tborder: 1px solid var(--color-border);\n\tmargin-bottom: calc(5 * var(--default-grid-baseline));\n}\n\n.cn-advanced-form-dialog__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table th,\n.cn-advanced-form-dialog__table td {\n\tpadding: calc(3 * var(--default-grid-baseline));\n\ttext-align: left;\n\tborder-bottom: 1px solid var(--color-border);\n\tvertical-align: middle;\n}\n\n.cn-advanced-form-dialog__table th {\n\tbackground: var(--color-background-dark);\n\tfont-weight: 500;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__table-row {\n\tcursor: default;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table-col-constrained {\n\twidth: 150px;\n\tmax-width: 150px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__table-col-expanded {\n\twidth: auto;\n\tmin-width: 200px;\n}\n</style>\n"],"names":["t"],"mappings":";;;AAkCA,aAAe;AACd,CAAA,IAAI,EAAE,eAAe;;AAErB,CAAA,KAAK,EAAE;AACN;AACA,EAAA,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;AAGrC,EAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG;AAC/C;AACA;AACC;;;;AAID,EAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,IAAI;AAC7C;AACC;;AAED,EAAA,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;EAC9C;;AAED,CAAA,QAAQ,EAAE;EACT,UAAU,GAAG;GACZ,MAAM,CAAA,GAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAA;AAC7B,GAAA,OAAO,CAAC,EAAE,EAAC,IAAK,IAAI,CAAC,IAAI,EAAE,EAAG,IAAG,GAAE;GACnC;;AAED,EAAA,eAAe,GAAG;GACjB,MAAM,CAAA,GAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAA;AAC7B,GAAA,MAAM,IAAI,CAAC,EAAE,QAAM;GACnB,OAAO,CAAE,GAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA,GAAI,GAAE;GACxD;;AAED,EAAA,eAAe,GAAG;GACjB,MAAM,CAAA,GAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAA;AAC7B,GAAA,MAAM,IAAI,CAAC,EAAE,QAAM;GACnB,OAAO,CAAE,GAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,EAAE,CAAA,GAAI,GAAE;GACxD;;EAED,WAAW,GAAG;AACb,GAAA,OAAO;IACN,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;IAC1D,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;AAC3D,IAAA;GACA;;AAED,EAAA,YAAY,GAAG;GACd,MAAM,KAAM,GAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAE,GAAE,IAAI,CAAC,SAAU,GAAE,GAAC;AAChE,GAAA,IAAI,IAAI,CAAC,WAAW,EAAE;IACrB,OAAO,KAAI;AACZ,IAAA;AACA,GAAA,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,CAAA;GACrC;EACD;;CAED,OAAO,EAAE,KAAEA,SAAA,EAAG;AACf;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CnMetadataTab.vue3.js","sources":["../../../../src/components/CnAdvancedFormDialog/CnMetadataTab.vue?vue&type=template&id=b99c64aa&lang.js"],"sourcesContent":["<template>\n\t<div class=\"cn-advanced-form-dialog__table-container\">\n\t\t<table class=\"cn-advanced-form-dialog__table\">\n\t\t\t<thead>\n\t\t\t\t<tr class=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Metadata') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Value') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr\n\t\t\t\t\tv-for=\"[label, value] in resolvedRows\"\n\t\t\t\t\t:key=\"label\"\n\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ value }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\n\nexport default {\n\tname: 'CnMetadataTab',\n\n\tprops: {\n\t\t/** The object instance being created or edited */\n\t\titem: { type: Object, default: null },\n\t\t/* eslint-disable vue/no-unused-properties -- CnAdvancedFormDialog binds it next to `item`, and every default row reads `item` */\n\t\t/** Current form data object */\n\t\tformData: { type: Object, default: () => ({}) },\n\t\t/* eslint-enable vue/no-unused-properties */\n\t\t/**\n\t\t * Additional `[label, value]` rows appended to (or, when `replaceRows` is true,\n\t\t * replacing) the default ID/Created/Updated rows. Use this to surface\n\t\t * domain-specific metadata (version, owner, custom timestamps, etc.).\n\t\t */\n\t\textraRows: { type: Array, default: () => [] },\n\t\t/**\n\t\t * When true, render only `extraRows` and skip the default ID/Created/Updated rows.\n\t\t */\n\t\treplaceRows: { type: Boolean, default: false },\n\t},\n\n\tcomputed: {\n\t\tmetadataId() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\treturn o?.id ?? this.item?.id ?? '—'\n\t\t},\n\n\t\tmetadataCreated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.created\n\t\t\treturn v ? new Date(v).toLocaleString() : '—'\n\t\t},\n\n\t\tmetadataUpdated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.updated\n\t\t\treturn v ? new Date(v).toLocaleString() : '—'\n\t\t},\n\n\t\tdefaultRows() {\n\t\t\treturn [\n\t\t\t\t[this.t('nextcloud-vue', 'ID'), this.metadataId],\n\t\t\t\t[this.t('nextcloud-vue', 'Created'), this.metadataCreated],\n\t\t\t\t[this.t('nextcloud-vue', 'Updated'), this.metadataUpdated],\n\t\t\t]\n\t\t},\n\n\t\tresolvedRows() {\n\t\t\tconst extra = Array.isArray(this.extraRows) ? this.extraRows : []\n\t\t\tif (this.replaceRows) {\n\t\t\t\treturn extra\n\t\t\t}\n\t\t\treturn [...this.defaultRows, ...extra]\n\t\t},\n\t},\n\n\tmethods: { t },\n}\n</script>\n\n<style scoped>\n.cn-advanced-form-dialog__table-container {\n\tbackground: var(--color-main-background);\n\tborder-radius: var(--border-radius);\n\toverflow: hidden;\n\tbox-shadow: 0 2px 4px var(--color-box-shadow);\n\tborder: 1px solid var(--color-border);\n\tmargin-bottom: calc(5 * var(--default-grid-baseline));\n}\n\n.cn-advanced-form-dialog__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table th,\n.cn-advanced-form-dialog__table td {\n\tpadding: calc(3 * var(--default-grid-baseline));\n\ttext-align: left;\n\tborder-bottom: 1px solid var(--color-border);\n\tvertical-align: middle;\n}\n\n.cn-advanced-form-dialog__table th {\n\tbackground: var(--color-background-dark);\n\tfont-weight: 500;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__table-row {\n\tcursor: default;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table-col-constrained {\n\twidth: 150px;\n\tmax-width: 150px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__table-col-expanded {\n\twidth: auto;\n\tmin-width: 200px;\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList"],"mappings":";;AACM,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,0CAA0C,GAAA;AAC7C,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gCAAgC,GAAA;AAEvC,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,oCAAoC,GAAA;AACzC,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gDAAgD,GAAA;AAGtD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,6CAA6C,GAAA;AAUnD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gDAAgD,GAAA;AAGtD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,6CAA6C,GAAA;;;AApB3D,EAAA,QAAAA,SAAA,EAAA,EAAAC,kBAAA,CA0BK,OA1BL,UA0BK,EAAA;AAzBJ,IAAAC,kBAAA,CAwBO,SAxBP,UAwBO,EAAA;MAvBNA,kBASO,CAAA,OAAA,EAAA,IAAA,EAAA;AARN,QAAAA,kBAAA,CAOI,MAPJ,UAOI,EAAA;UANHA,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,UAAA,CAAA,CAAA,EAAA,CAAA,YAAA;UAELD,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,OAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;MAIPD,kBAYO,CAAA,OAAA,EAAA,IAAA,EAAA;AAXN,SAAAF,SAAA,CAAA,IAAA,CAAA,EAAAC,kBAAA,CAUIG,QATsB,EAAA,IAAA,EAAAC,UAAA,CAAA,QAAA,CAAA,YAAY,EAA7B,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,KAAA;+BADrBJ,kBAUI,CAAA,IAAA,EAAA;AARF,YAAA,GAAG,EAAE,KAAK;AACX,YAAA,KAAK,EAAC,oCAAoC;;YAC1CC,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA;YAEJD,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA;;;;;;;;;;"}
1
+ {"version":3,"file":"CnMetadataTab.vue3.js","sources":["../../../../src/components/CnAdvancedFormDialog/CnMetadataTab.vue?vue&type=template&id=88689872&lang.js"],"sourcesContent":["<template>\n\t<div class=\"cn-advanced-form-dialog__table-container\">\n\t\t<table class=\"cn-advanced-form-dialog__table\">\n\t\t\t<thead>\n\t\t\t\t<tr class=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Metadata') }}\n\t\t\t\t\t</th>\n\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Value') }}\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr\n\t\t\t\t\tv-for=\"[label, value] in resolvedRows\"\n\t\t\t\t\t:key=\"label\"\n\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t{{ label }}\n\t\t\t\t\t</td>\n\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t{{ value }}\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { userLocale } from '../../utils/userLocale.js'\n\nexport default {\n\tname: 'CnMetadataTab',\n\n\tprops: {\n\t\t/** The object instance being created or edited */\n\t\titem: { type: Object, default: null },\n\t\t/* eslint-disable vue/no-unused-properties -- CnAdvancedFormDialog binds it next to `item`, and every default row reads `item` */\n\t\t/** Current form data object */\n\t\tformData: { type: Object, default: () => ({}) },\n\t\t/* eslint-enable vue/no-unused-properties */\n\t\t/**\n\t\t * Additional `[label, value]` rows appended to (or, when `replaceRows` is true,\n\t\t * replacing) the default ID/Created/Updated rows. Use this to surface\n\t\t * domain-specific metadata (version, owner, custom timestamps, etc.).\n\t\t */\n\t\textraRows: { type: Array, default: () => [] },\n\t\t/**\n\t\t * When true, render only `extraRows` and skip the default ID/Created/Updated rows.\n\t\t */\n\t\treplaceRows: { type: Boolean, default: false },\n\t},\n\n\tcomputed: {\n\t\tmetadataId() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\treturn o?.id ?? this.item?.id ?? '—'\n\t\t},\n\n\t\tmetadataCreated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.created\n\t\t\treturn v ? new Date(v).toLocaleString(userLocale()) : '—'\n\t\t},\n\n\t\tmetadataUpdated() {\n\t\t\tconst o = this.item?.['@self']\n\t\t\tconst v = o?.updated\n\t\t\treturn v ? new Date(v).toLocaleString(userLocale()) : '—'\n\t\t},\n\n\t\tdefaultRows() {\n\t\t\treturn [\n\t\t\t\t[this.t('nextcloud-vue', 'ID'), this.metadataId],\n\t\t\t\t[this.t('nextcloud-vue', 'Created'), this.metadataCreated],\n\t\t\t\t[this.t('nextcloud-vue', 'Updated'), this.metadataUpdated],\n\t\t\t]\n\t\t},\n\n\t\tresolvedRows() {\n\t\t\tconst extra = Array.isArray(this.extraRows) ? this.extraRows : []\n\t\t\tif (this.replaceRows) {\n\t\t\t\treturn extra\n\t\t\t}\n\t\t\treturn [...this.defaultRows, ...extra]\n\t\t},\n\t},\n\n\tmethods: { t },\n}\n</script>\n\n<style scoped>\n.cn-advanced-form-dialog__table-container {\n\tbackground: var(--color-main-background);\n\tborder-radius: var(--border-radius);\n\toverflow: hidden;\n\tbox-shadow: 0 2px 4px var(--color-box-shadow);\n\tborder: 1px solid var(--color-border);\n\tmargin-bottom: calc(5 * var(--default-grid-baseline));\n}\n\n.cn-advanced-form-dialog__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table th,\n.cn-advanced-form-dialog__table td {\n\tpadding: calc(3 * var(--default-grid-baseline));\n\ttext-align: left;\n\tborder-bottom: 1px solid var(--color-border);\n\tvertical-align: middle;\n}\n\n.cn-advanced-form-dialog__table th {\n\tbackground: var(--color-background-dark);\n\tfont-weight: 500;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__table-row {\n\tcursor: default;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table-col-constrained {\n\twidth: 150px;\n\tmax-width: 150px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__table-col-expanded {\n\twidth: auto;\n\tmin-width: 200px;\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList"],"mappings":";;AACM,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,0CAA0C,GAAA;AAC7C,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gCAAgC,GAAA;AAEvC,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,oCAAoC,GAAA;AACzC,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gDAAgD,GAAA;AAGtD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,6CAA6C,GAAA;AAUnD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,gDAAgD,GAAA;AAGtD,MAAA,UAAA,GAAA,EAAA,KAAK,EAAC,6CAA6C,GAAA;;;AApB3D,EAAA,QAAAA,SAAA,EAAA,EAAAC,kBAAA,CA0BK,OA1BL,UA0BK,EAAA;AAzBJ,IAAAC,kBAAA,CAwBO,SAxBP,UAwBO,EAAA;MAvBNA,kBASO,CAAA,OAAA,EAAA,IAAA,EAAA;AARN,QAAAA,kBAAA,CAOI,MAPJ,UAOI,EAAA;UANHA,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,UAAA,CAAA,CAAA,EAAA,CAAA,YAAA;UAELD,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,OAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;MAIPD,kBAYO,CAAA,OAAA,EAAA,IAAA,EAAA;AAXN,SAAAF,SAAA,CAAA,IAAA,CAAA,EAAAC,kBAAA,CAUIG,QATsB,EAAA,IAAA,EAAAC,UAAA,CAAA,QAAA,CAAA,YAAY,EAA7B,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,KAAA;+BADrBJ,kBAUI,CAAA,IAAA,EAAA;AARF,YAAA,GAAG,EAAE,KAAK;AACX,YAAA,KAAK,EAAC,oCAAoC;;YAC1CC,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA;YAEJD,kBAEI,CAAA,IAAA,EAFJ,UAEI,EAAAC,eAAA,CADA;;;;;;;;;;"}
@@ -2,7 +2,7 @@ import script from './CnPropertyValueCell.vue2.js';
2
2
  import { render } from './CnPropertyValueCell.vue3.js';
3
3
 
4
4
  script.render = render;
5
- script.__scopeId = "data-v-2d56424c";
5
+ script.__scopeId = "data-v-9ae2b758";
6
6
  const __sfc_main = script;
7
7
 
8
8
  export { __sfc_main as default };
@@ -7,6 +7,7 @@ import Plus from 'vue-material-design-icons/Plus.vue';
7
7
  import __sfc_main$1 from '../CnColorPicker/CnColorPicker.vue.js';
8
8
  import __sfc_main from '../CnJsonViewer/CnJsonViewer.vue.js';
9
9
  import { validateValue, formatValue } from '../../utils/schema.js';
10
+ import { userLocale } from '../../utils/userLocale.js';
10
11
 
11
12
  const SUPPORTED_WIDGETS = ['text', 'number', 'boolean', 'datetime', 'textarea', 'array', 'select', 'object', 'objectArray', 'color'];
12
13
 
@@ -550,19 +551,19 @@ var script = {
550
551
  // Same local-midnight parse as datetimeValue to avoid UTC-shift in display.
551
552
  if (fmt === 'date' && typeof v === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(v)) {
552
553
  const [year, month, day] = v.split('-').map(Number);
553
- return new Date(year, month - 1, day).toLocaleDateString()
554
+ return new Date(year, month - 1, day).toLocaleDateString(userLocale())
554
555
  }
555
556
  const d = new Date(v);
556
557
  if (Number.isNaN(d.getTime())) {
557
558
  return String(v)
558
559
  }
559
560
  if (fmt === 'date') {
560
- return d.toLocaleDateString()
561
+ return d.toLocaleDateString(userLocale())
561
562
  }
562
563
  if (fmt === 'time') {
563
- return d.toLocaleTimeString()
564
+ return d.toLocaleTimeString(userLocale())
564
565
  }
565
- return d.toLocaleString()
566
+ return d.toLocaleString(userLocale())
566
567
  },
567
568
  },
568
569