@conduction/nextcloud-vue 2.62.0 → 2.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue.js +10 -0
  2. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue.js.map +1 -0
  3. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue2.js +189 -0
  4. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue2.js.map +1 -0
  5. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue3.js +72 -0
  6. package/dist/esm/components/CnAdminActionCard/CnAdminActionCard.vue3.js.map +1 -0
  7. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +425 -39
  8. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  9. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +119 -42
  10. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  11. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +186 -9
  12. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  13. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +65 -42
  14. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  15. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +61 -16
  16. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  17. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  18. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js +20 -0
  19. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js.map +1 -1
  20. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js +3 -2
  21. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js.map +1 -1
  22. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +33 -2
  23. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  24. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  25. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue2.js.map +1 -1
  26. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js +53 -37
  27. package/dist/esm/components/CnChoiceCards/CnChoiceCards.vue3.js.map +1 -1
  28. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +29 -0
  29. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  30. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +152 -135
  31. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  32. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue.js +10 -0
  33. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue.js.map +1 -0
  34. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue2.js +293 -0
  35. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue2.js.map +1 -0
  36. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue3.js +189 -0
  37. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue3.js.map +1 -0
  38. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +253 -9
  39. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  40. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +126 -50
  41. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  42. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +66 -14
  43. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  44. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +23 -14
  45. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  46. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  47. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +2 -1
  48. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  49. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue2.js +3 -1
  50. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue2.js.map +1 -1
  51. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue3.js +1 -1
  52. package/dist/esm/components/CnFieldHelper/CnFieldHelper.vue3.js.map +1 -1
  53. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +234 -9
  54. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  55. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +96 -57
  56. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  57. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +81 -4
  58. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
  59. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +22 -5
  60. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
  61. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +81 -2
  62. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  63. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +7 -3
  64. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  65. package/dist/esm/components/CnIndexPage/selfModeActions.js +3 -3
  66. package/dist/esm/components/CnIndexPage/selfModeActions.js.map +1 -1
  67. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +41 -2
  68. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  69. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +8 -3
  70. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  71. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue2.js +121 -12
  72. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue2.js.map +1 -1
  73. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue3.js +3 -1
  74. package/dist/esm/components/CnResourceSelect/CnResourceSelect.vue3.js.map +1 -1
  75. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js +326 -1
  76. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue2.js.map +1 -1
  77. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js +112 -26
  78. package/dist/esm/components/CnSetupWizard/CnSetupWizard.vue3.js.map +1 -1
  79. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +63 -2
  80. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  81. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js +96 -37
  82. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  83. package/dist/esm/components/CnStagesWidget/stagesModel.js +5 -2
  84. package/dist/esm/components/CnStagesWidget/stagesModel.js.map +1 -1
  85. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +52 -2
  86. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  87. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +6 -6
  88. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  89. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +14 -2
  90. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  91. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +2 -1
  92. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  93. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +10 -0
  94. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js.map +1 -0
  95. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +337 -0
  96. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -0
  97. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js +102 -0
  98. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -0
  99. package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js +34 -0
  100. package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js.map +1 -0
  101. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js +131 -8
  102. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue2.js.map +1 -1
  103. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js +40 -38
  104. package/dist/esm/components/CnWalkthrough/CnWalkthrough.vue3.js.map +1 -1
  105. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js +8 -6
  106. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js.map +1 -1
  107. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  108. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  109. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +73 -1
  110. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  111. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +14 -2
  112. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  113. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js +19 -0
  114. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue2.js.map +1 -1
  115. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js +1 -1
  116. package/dist/esm/components/CnWizardDialog/CnWizardDialog.vue3.js.map +1 -1
  117. package/dist/esm/composables/useDependencyCheck.js +65 -0
  118. package/dist/esm/composables/useDependencyCheck.js.map +1 -0
  119. package/dist/esm/composables/useWalkthrough.js +218 -6
  120. package/dist/esm/composables/useWalkthrough.js.map +1 -1
  121. package/dist/esm/index.js +2 -0
  122. package/dist/esm/index.js.map +1 -1
  123. package/dist/esm/l10n/en.json.js +45 -1
  124. package/dist/esm/l10n/en.json.js.map +1 -1
  125. package/dist/esm/l10n/nl.json.js +45 -1
  126. package/dist/esm/l10n/nl.json.js.map +1 -1
  127. package/dist/esm/nextcloud-vue.css +780 -81
  128. package/dist/esm/store/useObjectStore.js +8 -0
  129. package/dist/esm/store/useObjectStore.js.map +1 -1
  130. package/dist/esm/utils/columnFilters.js +311 -0
  131. package/dist/esm/utils/columnFilters.js.map +1 -0
  132. package/dist/esm/utils/groupAutocomplete.js +123 -0
  133. package/dist/esm/utils/groupAutocomplete.js.map +1 -0
  134. package/dist/esm/utils/libraryWidgetKeys.js +2 -0
  135. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  136. package/dist/esm/utils/pickerOptions.js +198 -0
  137. package/dist/esm/utils/pickerOptions.js.map +1 -0
  138. package/dist/esm/utils/schema.js +83 -7
  139. package/dist/esm/utils/schema.js.map +1 -1
  140. package/dist/esm/utils/schemaRefSlug.js +19 -3
  141. package/dist/esm/utils/schemaRefSlug.js.map +1 -1
  142. package/dist/esm/utils/timelineEvents.js +174 -0
  143. package/dist/esm/utils/timelineEvents.js.map +1 -0
  144. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  145. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  146. package/dist/esm/utils/walkthroughSignals.js +88 -0
  147. package/dist/esm/utils/walkthroughSignals.js.map +1 -0
  148. package/dist/nextcloud-vue.cjs.js +13088 -7937
  149. package/dist/nextcloud-vue.cjs.js.map +2 -2
  150. package/dist/nextcloud-vue.css +780 -81
  151. package/l10n/en.json +45 -0
  152. package/l10n/nl.json +45 -0
  153. package/package.json +1 -1
  154. package/src/components/CnAdminActionCard/CnAdminActionCard.vue +234 -0
  155. package/src/components/CnAdminActionCard/index.js +4 -0
  156. package/src/components/CnAppNav/CnAppNav.vue +568 -43
  157. package/src/components/CnAppRoot/CnAppRoot.md +4 -0
  158. package/src/components/CnAppRoot/CnAppRoot.vue +223 -16
  159. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +61 -16
  160. package/src/components/CnAuditTrailWidget/CnAuditTrailWidget.vue +22 -1
  161. package/src/components/CnCellRenderer/CnCellRenderer.vue +33 -2
  162. package/src/components/CnChoiceCards/CnChoiceCards.vue +56 -31
  163. package/src/components/CnDashboardPage/CnDashboardPage.vue +45 -4
  164. package/src/components/CnDataTable/CnColumnFilterPopover.vue +524 -0
  165. package/src/components/CnDataTable/CnDataTable.md +3 -0
  166. package/src/components/CnDataTable/CnDataTable.vue +305 -5
  167. package/src/components/CnDetailPage/CnDetailPage.md +4 -0
  168. package/src/components/CnDetailPage/CnDetailPage.vue +60 -1
  169. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +2 -2
  170. package/src/components/CnFieldHelper/CnFieldHelper.vue +4 -2
  171. package/src/components/CnFormDialog/CnFormDialog.vue +290 -31
  172. package/src/components/CnHeaderWidget/CnHeaderWidget.vue +116 -6
  173. package/src/components/CnIndexPage/CnIndexPage.vue +87 -4
  174. package/src/components/CnIndexPage/selfModeActions.js +3 -3
  175. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +46 -2
  176. package/src/components/CnResourceSelect/CnResourceSelect.vue +123 -12
  177. package/src/components/CnSetupWizard/CnSetupWizard.vue +392 -3
  178. package/src/components/CnStagesWidget/CnStagesWidget.vue +180 -2
  179. package/src/components/CnStagesWidget/stagesModel.js +5 -2
  180. package/src/components/CnStatWidget/CnStatWidget.vue +57 -3
  181. package/src/components/CnTabsWidget/CnTabsWidget.vue +15 -2
  182. package/src/components/CnTimelineWidget/CnTimelineWidget.vue +477 -0
  183. package/src/components/CnTimelineWidget/dashboardRegistration.js +32 -0
  184. package/src/components/CnTimelineWidget/index.js +4 -0
  185. package/src/components/CnWalkthrough/CnWalkthrough.vue +143 -10
  186. package/src/components/CnWidgetGrid/builtInWidgets.js +2 -0
  187. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
  188. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +4 -0
  189. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +107 -1
  190. package/src/components/CnWizardDialog/CnWizardDialog.vue +20 -1
  191. package/src/components/index.js +2 -0
  192. package/src/composables/useDependencyCheck.js +61 -0
  193. package/src/composables/useWalkthrough.js +217 -5
  194. package/src/css/dashboard.css +49 -0
  195. package/src/css/detail-page.css +29 -4
  196. package/src/css/kpi-card.css +24 -1
  197. package/src/css/table.css +99 -6
  198. package/src/index.js +2 -0
  199. package/src/schemas/app-manifest-v2.schema.json +135 -3
  200. package/src/store/useObjectStore.js +8 -0
  201. package/src/utils/columnFilters.js +324 -0
  202. package/src/utils/groupAutocomplete.js +119 -0
  203. package/src/utils/libraryWidgetKeys.js +2 -0
  204. package/src/utils/pickerOptions.js +194 -0
  205. package/src/utils/schema.js +83 -7
  206. package/src/utils/schemaRefSlug.js +19 -3
  207. package/src/utils/timelineEvents.js +171 -0
  208. package/src/utils/validateManifestV2.compiled.js +2 -2
  209. package/src/utils/walkthroughSignals.js +94 -0
package/l10n/en.json CHANGED
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "translations": {
3
+ "The item could not be created.": "The item could not be created.",
4
+ "Start over": "Start over",
5
+ "Continue where you left off": "Continue where you left off",
3
6
  "Active": "Active",
4
7
  "Appraisal": "Appraisal",
5
8
  "Archiving": "Archiving",
@@ -45,6 +48,8 @@
45
48
  "No integrations available yet.": "No integrations available yet.",
46
49
  "This integration is not available.": "This integration is not available.",
47
50
  "Integrations": "Integrations",
51
+ "View": "View",
52
+ "current step": "current step",
48
53
  "{app} not available": "{app} not available",
49
54
  "{app} not configured": "{app} not configured",
50
55
  "This integration is not available or not configured yet.": "This integration is not available or not configured yet.",
@@ -379,6 +384,46 @@
379
384
  "Not configured": "Not configured",
380
385
  "Not set": "Not set",
381
386
  "Not run": "Not run",
387
+ "Load": "Load",
388
+ "Load again": "Load again",
389
+ "Load {name}": "Load {name}",
390
+ "Loaded.": "Loaded.",
391
+ "Apps this app needs": "Apps this app needs",
392
+ "Required apps": "Required apps",
393
+ "Setup can start once these apps are installed and enabled: {apps}.": "Setup can start once these apps are installed and enabled: {apps}.",
394
+ "Optional, not installed: {apps}. You can add them later.": "Optional, not installed: {apps}. You can add them later.",
395
+ "Skipped, needs {apps}": "Skipped, needs {apps}",
396
+ "Running\u2026": "Running…",
397
+ "This action is not configured.": "This action is not configured.",
398
+ "Done.": "Done.",
399
+ "Something went wrong.": "Something went wrong.",
400
+ "Filter {column}": "Filter {column}",
401
+ "Filter {column}, active": "Filter {column}, active",
402
+ "{column}: {value}": "{column}: {value}",
403
+ "Remove filter {column}": "Remove filter {column}",
404
+ "Active filters": "Active filters",
405
+ "{from} to {to}": "{from} to {to}",
406
+ "from {value}": "from {value}",
407
+ "up to {value}": "up to {value}",
408
+ "Any": "Any",
409
+ "To": "To",
410
+ "Equals": "Equals",
411
+ "Clear": "Clear",
412
+ "Apply": "Apply",
413
+ "This column cannot list its objects.": "This column cannot list its objects.",
414
+ "The list could not load.": "The list could not load.",
415
+ "Nothing to choose from here.": "Nothing to choose from here.",
416
+ "Part of the timeline could not load: {parts}.": "Part of the timeline could not load: {parts}.",
417
+ "Nothing has happened yet.": "Nothing has happened yet.",
418
+ "Upcoming": "Upcoming",
419
+ "changes": "changes",
420
+ "notes and messages": "notes and messages",
421
+ "dates": "dates",
422
+ "related items": "related items",
423
+ "Deleted": "Deleted",
424
+ "Changed": "Changed",
425
+ "{action} by {actor}": "{action} by {actor}",
426
+ "Note": "Note",
382
427
  "Notes": "Notes",
383
428
  "Number": "Number",
384
429
  "Number configuration": "Number configuration",
package/l10n/nl.json CHANGED
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "translations": {
3
+ "The item could not be created.": "Het item kon niet worden aangemaakt.",
4
+ "Start over": "Opnieuw beginnen",
5
+ "Continue where you left off": "Ga verder waar je was",
3
6
  "Active": "Actief",
4
7
  "Appraisal": "Waardering",
5
8
  "Archiving": "Archivering",
@@ -45,6 +48,8 @@
45
48
  "No integrations available yet.": "Nog geen integraties beschikbaar.",
46
49
  "This integration is not available.": "Deze integratie is niet beschikbaar.",
47
50
  "Integrations": "Integraties",
51
+ "View": "Weergave",
52
+ "current step": "huidige stap",
48
53
  "{app} not available": "{app} niet beschikbaar",
49
54
  "{app} not configured": "{app} niet geconfigureerd",
50
55
  "This integration is not available or not configured yet.": "Deze integratie is nog niet beschikbaar of niet geconfigureerd.",
@@ -379,6 +384,46 @@
379
384
  "Not configured": "Niet geconfigureerd",
380
385
  "Not set": "Niet ingesteld",
381
386
  "Not run": "Niet uitgevoerd",
387
+ "Load": "Laden",
388
+ "Load again": "Opnieuw laden",
389
+ "Load {name}": "{name} laden",
390
+ "Loaded.": "Geladen.",
391
+ "Apps this app needs": "Apps die deze app nodig heeft",
392
+ "Required apps": "Vereiste apps",
393
+ "Setup can start once these apps are installed and enabled: {apps}.": "De installatie kan beginnen zodra deze apps geïnstalleerd en ingeschakeld zijn: {apps}.",
394
+ "Optional, not installed: {apps}. You can add them later.": "Optioneel, niet geïnstalleerd: {apps}. Je kunt ze later toevoegen.",
395
+ "Skipped, needs {apps}": "Overgeslagen, vereist {apps}",
396
+ "Running\u2026": "Bezig…",
397
+ "This action is not configured.": "Deze actie is niet ingesteld.",
398
+ "Done.": "Klaar.",
399
+ "Something went wrong.": "Er ging iets mis.",
400
+ "Filter {column}": "{column} filteren",
401
+ "Filter {column}, active": "{column} filteren, actief",
402
+ "{column}: {value}": "{column}: {value}",
403
+ "Remove filter {column}": "Filter {column} verwijderen",
404
+ "Active filters": "Actieve filters",
405
+ "{from} to {to}": "{from} tot {to}",
406
+ "from {value}": "vanaf {value}",
407
+ "up to {value}": "tot en met {value}",
408
+ "Any": "Alle",
409
+ "To": "Tot",
410
+ "Equals": "Is gelijk aan",
411
+ "Clear": "Wissen",
412
+ "Apply": "Toepassen",
413
+ "This column cannot list its objects.": "Deze kolom kan zijn objecten niet tonen.",
414
+ "The list could not load.": "De lijst kon niet laden.",
415
+ "Nothing to choose from here.": "Er valt hier niets te kiezen.",
416
+ "Part of the timeline could not load: {parts}.": "Een deel van de tijdlijn kon niet laden: {parts}.",
417
+ "Nothing has happened yet.": "Er is nog niets gebeurd.",
418
+ "Upcoming": "Gepland",
419
+ "changes": "wijzigingen",
420
+ "notes and messages": "notities en berichten",
421
+ "dates": "datums",
422
+ "related items": "gekoppelde items",
423
+ "Deleted": "Verwijderd",
424
+ "Changed": "Gewijzigd",
425
+ "{action} by {actor}": "{action} door {actor}",
426
+ "Note": "Notitie",
382
427
  "Notes": "Notities",
383
428
  "Number": "Getal",
384
429
  "Number configuration": "Nummerconfiguratie",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@conduction/nextcloud-vue",
3
- "version": "2.62.0",
3
+ "version": "2.64.0",
4
4
  "description": "Shared Vue component library for Conduction Nextcloud apps — complements @nextcloud/vue with higher-level components, OpenRegister integration, and NL Design System support",
5
5
  "homepage": "https://github.com/ConductionNL/nextcloud-vue#readme",
6
6
  "bugs": {
@@ -0,0 +1,234 @@
1
+ <!-- SPDX-License-Identifier: EUPL-1.2 -->
2
+ <!-- SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl> -->
3
+ <template>
4
+ <CnConfigurationCard class="cn-admin-action-card" :title="title" data-testid="cn-admin-action-card">
5
+ <p v-if="description" class="cn-admin-action-card__description">
6
+ {{ description }}
7
+ </p>
8
+ <!-- @slot default Extra content between the explanation and the button. -->
9
+ <slot />
10
+ <div class="cn-admin-action-card__footer">
11
+ <NcButton
12
+ :variant="buttonVariant"
13
+ :disabled="running || disabled"
14
+ data-testid="cn-admin-action-card-run"
15
+ @click="run">
16
+ <template v-if="running" #icon>
17
+ <NcLoadingIcon :size="20" />
18
+ </template>
19
+ {{ running ? runningLabel : resolvedButtonLabel }}
20
+ </NcButton>
21
+ </div>
22
+ <!-- role=status so a screen reader hears the outcome without moving focus. -->
23
+ <div role="status" aria-live="polite">
24
+ <NcNoteCard
25
+ v-if="result"
26
+ :type="result.success ? 'success' : 'error'"
27
+ data-testid="cn-admin-action-card-result">
28
+ {{ result.message }}
29
+ </NcNoteCard>
30
+ </div>
31
+ </CnConfigurationCard>
32
+ </template>
33
+
34
+ <script>
35
+ import { translate as t } from '@nextcloud/l10n'
36
+ import { NcButton, NcLoadingIcon, NcNoteCard } from '@nextcloud/vue'
37
+ import CnConfigurationCard from '../CnConfigurationCard/CnConfigurationCard.vue'
38
+
39
+ /**
40
+ * CnAdminActionCard — one maintenance action on an admin settings page.
41
+ *
42
+ * A card with a title, a short explanation and one button. The click POSTs
43
+ * an app action, the button spins while it runs, and the server's message
44
+ * shows below it as success or error. Use it for work an admin starts by
45
+ * hand, such as repairing the register or re-importing schemas. That work
46
+ * never belongs in the setup wizard.
47
+ *
48
+ * By default it posts to the app's setup action contract,
49
+ * `/apps/{appId}/api/setup/action/{action}`, the same endpoint the setup
50
+ * wizard uses. Pass `url` to post somewhere else.
51
+ *
52
+ * ```vue
53
+ * <CnAdminActionCard
54
+ * app-id="pipelinq"
55
+ * action="provision"
56
+ * :title="t('pipelinq', 'Repair the register')"
57
+ * :description="t('pipelinq', 'Creates missing schemas again. Your data stays as it is.')"
58
+ * :button-label="t('pipelinq', 'Repair')" />
59
+ * ```
60
+ *
61
+ * @spec openspec/changes/setup-wizard-card-load-and-dependency-gate/specs/cn-setup-wizard/spec.md#requirement-an-admin-action-card-runs-one-server-action
62
+ */
63
+ export default {
64
+ name: 'CnAdminActionCard',
65
+
66
+ components: {
67
+ CnConfigurationCard,
68
+ NcButton,
69
+ NcLoadingIcon,
70
+ NcNoteCard,
71
+ },
72
+
73
+ props: {
74
+ /** Card heading. Pass it translated. */
75
+ title: {
76
+ type: String,
77
+ required: true,
78
+ },
79
+
80
+ /** What the action does, in one or two short sentences. Pass it translated. */
81
+ description: {
82
+ type: String,
83
+ default: '',
84
+ },
85
+
86
+ /** The Nextcloud app id; builds the default action URL. */
87
+ appId: {
88
+ type: String,
89
+ default: '',
90
+ },
91
+
92
+ /** The action id, posted to `/apps/{appId}/api/setup/action/{action}`. */
93
+ action: {
94
+ type: String,
95
+ default: '',
96
+ },
97
+
98
+ /**
99
+ * An app path to POST to instead of the setup action contract, e.g.
100
+ * `/apps/pipelinq/api/settings/repair`. Passed through `generateUrl`.
101
+ */
102
+ url: {
103
+ type: String,
104
+ default: '',
105
+ },
106
+
107
+ /** Request body to send with the POST. */
108
+ payload: {
109
+ type: Object,
110
+ default: () => ({}),
111
+ },
112
+
113
+ /** Button label. Defaults to "Run". */
114
+ buttonLabel: {
115
+ type: String,
116
+ default: '',
117
+ },
118
+
119
+ /** Label next to the spinner while the action runs. */
120
+ runningLabel: {
121
+ type: String,
122
+ default: () => t('nextcloud-vue', 'Running…'),
123
+ },
124
+
125
+ /** NcButton variant for the action button. */
126
+ buttonVariant: {
127
+ type: String,
128
+ default: 'secondary',
129
+ },
130
+
131
+ /** Disable the button, e.g. while a precondition is not met. */
132
+ disabled: {
133
+ type: Boolean,
134
+ default: false,
135
+ },
136
+ },
137
+
138
+ emits: ['result'],
139
+
140
+ data() {
141
+ return {
142
+ running: false,
143
+ /** @type {{ success: boolean, message: string }|null} */
144
+ result: null,
145
+ }
146
+ },
147
+
148
+ computed: {
149
+ resolvedButtonLabel() {
150
+ return this.buttonLabel || t('nextcloud-vue', 'Run')
151
+ },
152
+
153
+ /**
154
+ * The app path the button posts to: `url` when set, else the setup
155
+ * action contract. Empty when neither is configured.
156
+ *
157
+ * @return {string}
158
+ */
159
+ actionPath() {
160
+ if (this.url) {
161
+ return this.url
162
+ }
163
+ if (this.appId && this.action) {
164
+ return `/apps/${this.appId}/api/setup/action/${this.action}`
165
+ }
166
+ return ''
167
+ },
168
+ },
169
+
170
+ methods: {
171
+ /**
172
+ * Run the action: POST, spin while it runs, show the result.
173
+ *
174
+ * @return {Promise<void>}
175
+ * @spec openspec/changes/setup-wizard-card-load-and-dependency-gate/specs/cn-setup-wizard/spec.md#requirement-an-admin-action-card-runs-one-server-action
176
+ */
177
+ async run() {
178
+ if (this.running) {
179
+ return
180
+ }
181
+ if (!this.actionPath) {
182
+ this.result = { success: false, message: t('nextcloud-vue', 'This action is not configured.') }
183
+ return
184
+ }
185
+ this.running = true
186
+ this.result = null
187
+ let data
188
+ try {
189
+ const [{ default: axios }, { generateUrl }] = await Promise.all([
190
+ import('@nextcloud/axios'),
191
+ import('@nextcloud/router'),
192
+ ])
193
+ const response = await axios.post(generateUrl(this.actionPath), this.payload)
194
+ data = response && response.data
195
+ this.result = {
196
+ success: !!data && data.success !== false,
197
+ message: (data && data.message) || t('nextcloud-vue', 'Done.'),
198
+ }
199
+ } catch (err) {
200
+ data = err && err.response ? err.response.data : null
201
+ this.result = { success: false, message: this.errorMessage(err) }
202
+ } finally {
203
+ this.running = false
204
+ }
205
+ /**
206
+ * @event result The action finished.
207
+ * @type {{ success: boolean, message: string, data: object|null }}
208
+ */
209
+ this.$emit('result', { ...this.result, data })
210
+ },
211
+
212
+ errorMessage(err) {
213
+ const data = err && err.response && err.response.data
214
+ if (data && (data.message || data.error)) {
215
+ return data.message || data.error
216
+ }
217
+ return (err && err.message) || t('nextcloud-vue', 'Something went wrong.')
218
+ },
219
+ },
220
+ }
221
+ </script>
222
+
223
+ <style scoped>
224
+ .cn-admin-action-card__description {
225
+ margin: 0 0 12px;
226
+ color: var(--color-text-maxcontrast);
227
+ }
228
+
229
+ .cn-admin-action-card__footer {
230
+ display: flex;
231
+ gap: 8px;
232
+ margin-block: 8px;
233
+ }
234
+ </style>
@@ -0,0 +1,4 @@
1
+ import CnAdminActionCard from './CnAdminActionCard.vue'
2
+
3
+ export default CnAdminActionCard
4
+ export { CnAdminActionCard }