@conduction/nextcloud-vue 2.74.0 → 2.76.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 (126) hide show
  1. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +19 -14
  2. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +2 -2
  4. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  5. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +77 -26
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +22 -14
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  9. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +23 -4
  10. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  11. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  12. package/dist/esm/components/CnBrandBar/CnBrandBar.vue.js +9 -0
  13. package/dist/esm/components/CnBrandBar/CnBrandBar.vue.js.map +1 -0
  14. package/dist/esm/components/CnBrandBar/CnBrandBar.vue2.js +107 -0
  15. package/dist/esm/components/CnBrandBar/CnBrandBar.vue2.js.map +1 -0
  16. package/dist/esm/components/CnBrandBar/CnBrandBar.vue3.js +79 -0
  17. package/dist/esm/components/CnBrandBar/CnBrandBar.vue3.js.map +1 -0
  18. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +6 -0
  19. package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
  20. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js +3 -2
  21. package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
  22. package/dist/esm/components/CnCredentials/CnCredentials.vue2.js +11 -10
  23. package/dist/esm/components/CnCredentials/CnCredentials.vue2.js.map +1 -1
  24. package/dist/esm/components/CnCredentials/CnCredentials.vue3.js.map +1 -1
  25. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +8 -5
  26. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  27. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  28. package/dist/esm/components/CnEnvironmentBanner/CnEnvironmentBanner.vue2.js +4 -1
  29. package/dist/esm/components/CnEnvironmentBanner/CnEnvironmentBanner.vue2.js.map +1 -1
  30. package/dist/esm/components/CnEnvironmentBanner/CnEnvironmentBanner.vue3.js.map +1 -1
  31. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +7 -0
  32. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  33. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +14 -7
  34. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  35. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +32 -0
  36. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
  37. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js +6 -3
  38. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
  39. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +144 -6
  40. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  41. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +14 -13
  42. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  43. package/dist/esm/components/CnIndexPage/selfModeActions.js +90 -14
  44. package/dist/esm/components/CnIndexPage/selfModeActions.js.map +1 -1
  45. package/dist/esm/components/CnIndexPage/useSelfFetchList.js +15 -3
  46. package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
  47. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +26 -0
  48. package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
  49. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +26 -9
  50. package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
  51. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +19 -3
  52. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  53. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  54. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +18 -2
  55. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
  56. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js +2 -2
  57. package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
  58. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js +153 -38
  59. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js.map +1 -1
  60. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js +74 -56
  61. package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js.map +1 -1
  62. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js +16 -0
  63. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue2.js.map +1 -1
  64. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js +2 -2
  65. package/dist/esm/components/CnStatsBlock/CnStatsBlock.vue3.js.map +1 -1
  66. package/dist/esm/composables/useObjectLock.js +41 -10
  67. package/dist/esm/composables/useObjectLock.js.map +1 -1
  68. package/dist/esm/directives/cnSelectAria.js +55 -0
  69. package/dist/esm/directives/cnSelectAria.js.map +1 -0
  70. package/dist/esm/index.js +1 -0
  71. package/dist/esm/index.js.map +1 -1
  72. package/dist/esm/l10n/en.json.js +7 -1
  73. package/dist/esm/l10n/en.json.js.map +1 -1
  74. package/dist/esm/l10n/nl.json.js +8 -2
  75. package/dist/esm/l10n/nl.json.js.map +1 -1
  76. package/dist/esm/nextcloud-vue.css +154 -2
  77. package/dist/esm/store/useObjectStore.js +37 -9
  78. package/dist/esm/store/useObjectStore.js.map +1 -1
  79. package/dist/esm/utils/cnFetch.js +17 -2
  80. package/dist/esm/utils/cnFetch.js.map +1 -1
  81. package/dist/esm/utils/objectSignals.js +44 -0
  82. package/dist/esm/utils/objectSignals.js.map +1 -0
  83. package/dist/esm/utils/resolveBrand.js +38 -0
  84. package/dist/esm/utils/resolveBrand.js.map +1 -0
  85. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  86. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  87. package/dist/nextcloud-vue.cjs.js +9640 -8649
  88. package/dist/nextcloud-vue.cjs.js.map +2 -2
  89. package/dist/nextcloud-vue.css +154 -2
  90. package/l10n/en.json +7 -1
  91. package/l10n/nl.json +8 -2
  92. package/package.json +1 -1
  93. package/src/components/CnAppNav/CnAppNav.vue +21 -16
  94. package/src/components/CnAppRoot/CnAppRoot.vue +53 -0
  95. package/src/components/CnBannerWidget/CnBannerWidget.vue +23 -4
  96. package/src/components/CnBrandBar/CnBrandBar.vue +230 -0
  97. package/src/components/CnCardGrid/CnCardGrid.md +1 -0
  98. package/src/components/CnCardGrid/CnCardGrid.vue +7 -0
  99. package/src/components/CnCredentials/CnCredentials.vue +17 -16
  100. package/src/components/CnDetailPage/CnDetailPage.vue +8 -5
  101. package/src/components/CnEnvironmentBanner/CnEnvironmentBanner.vue +4 -1
  102. package/src/components/CnFormDialog/CnFormDialog.vue +10 -0
  103. package/src/components/CnFormPage/CnFormPage.vue +33 -0
  104. package/src/components/CnIndexPage/CnIndexPage.md +15 -0
  105. package/src/components/CnIndexPage/CnIndexPage.vue +157 -18
  106. package/src/components/CnIndexPage/selfModeActions.js +89 -13
  107. package/src/components/CnIndexPage/useSelfFetchList.js +15 -3
  108. package/src/components/CnObjectCard/CnObjectCard.md +1 -0
  109. package/src/components/CnObjectCard/CnObjectCard.vue +89 -1
  110. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +19 -3
  111. package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +20 -4
  112. package/src/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue +181 -38
  113. package/src/components/CnStatsBlock/CnStatsBlock.vue +18 -2
  114. package/src/composables/__tests__/useObjectLock.endpoints.spec.js +83 -0
  115. package/src/composables/useObjectLock.js +41 -10
  116. package/src/css/form-field.css +1 -1
  117. package/src/css/look-board-index.css +35 -1
  118. package/src/directives/cnSelectAria.js +54 -0
  119. package/src/index.js +1 -0
  120. package/src/schemas/app-manifest-v2.schema.json +6 -1
  121. package/src/store/useObjectStore.js +37 -9
  122. package/src/utils/cnFetch.js +16 -1
  123. package/src/utils/index.js +1 -0
  124. package/src/utils/objectSignals.js +41 -0
  125. package/src/utils/resolveBrand.js +37 -0
  126. package/src/utils/validateManifestV2.compiled.js +2 -2
@@ -9,19 +9,20 @@ import DatabaseSearchOutline from 'vue-material-design-icons/DatabaseSearchOutli
9
9
  import OpenInNew from 'vue-material-design-icons/OpenInNew.vue';
10
10
  import Play from 'vue-material-design-icons/Play.vue';
11
11
  import Restart from 'vue-material-design-icons/Restart.vue';
12
- import __sfc_main$6 from '../CnAiCompanion/CnAiCompanion.vue.js';
13
- import __sfc_main$1 from '../CnAppLoading/CnAppLoading.vue.js';
14
- import __sfc_main from '../CnAppNav/CnAppNav.vue.js';
15
- import __sfc_main$7 from '../CnCommandPalette/CnCommandPalette.vue.js';
16
- import __sfc_main$b from '../CnCredentials/CnCredentials.vue.js';
17
- import __sfc_main$2 from '../CnDependencyMissing/CnDependencyMissing.vue.js';
18
- import __sfc_main$3 from '../CnEnvironmentBanner/CnEnvironmentBanner.vue.js';
19
- import __sfc_main$a from '../CnNotificationPreferences/CnNotificationPreferences.vue.js';
20
- import __sfc_main$8 from '../CnObjectSidebar/CnObjectSidebar.vue.js';
21
- import __sfc_main$4 from '../CnSetupWizard/CnSetupWizard.vue.js';
22
- import __sfc_main$9 from '../CnSupportDialog/CnSupportDialog.vue.js';
23
- import __sfc_main$c from '../CnTenantBadge/CnTenantBadge.vue.js';
24
- import __sfc_main$5 from '../CnWalkthrough/CnWalkthrough.vue.js';
12
+ import __sfc_main$7 from '../CnAiCompanion/CnAiCompanion.vue.js';
13
+ import __sfc_main$2 from '../CnAppLoading/CnAppLoading.vue.js';
14
+ import __sfc_main$1 from '../CnAppNav/CnAppNav.vue.js';
15
+ import __sfc_main from '../CnBrandBar/CnBrandBar.vue.js';
16
+ import __sfc_main$8 from '../CnCommandPalette/CnCommandPalette.vue.js';
17
+ import __sfc_main$c from '../CnCredentials/CnCredentials.vue.js';
18
+ import __sfc_main$3 from '../CnDependencyMissing/CnDependencyMissing.vue.js';
19
+ import __sfc_main$4 from '../CnEnvironmentBanner/CnEnvironmentBanner.vue.js';
20
+ import __sfc_main$b from '../CnNotificationPreferences/CnNotificationPreferences.vue.js';
21
+ import __sfc_main$9 from '../CnObjectSidebar/CnObjectSidebar.vue.js';
22
+ import __sfc_main$5 from '../CnSetupWizard/CnSetupWizard.vue.js';
23
+ import __sfc_main$a from '../CnSupportDialog/CnSupportDialog.vue.js';
24
+ import __sfc_main$d from '../CnTenantBadge/CnTenantBadge.vue.js';
25
+ import __sfc_main$6 from '../CnWalkthrough/CnWalkthrough.vue.js';
25
26
  import { DEFAULT_CHAT_APP_ID } from '../../composables/aiChatConfig.js';
26
27
  import { useAppInstaller } from '../../composables/useAppInstaller.js';
27
28
  import { useAppStatus } from '../../composables/useAppStatus.js';
@@ -42,6 +43,7 @@ import { resolveForge, DEFAULT_FORGE } from '../../utils/forge.js';
42
43
  import { BUILT_IN_KB_PROVIDERS } from '../../utils/kbSearchProviders.js';
43
44
  import { createManifestTranslate } from '../../utils/manifestTranslate.js';
44
45
  import { installModalStack, uninstallModalStack } from '../../utils/modalStack.js';
46
+ import { resolveBrand } from '../../utils/resolveBrand.js';
45
47
  import { resolveFilterTokens } from '../../utils/resolveFilterTokens.js';
46
48
  import { passesContextPredicates } from '../../utils/visibleIfContext.js';
47
49
  import { useObjectStore } from '../../store/useObjectStore.js';
@@ -103,6 +105,7 @@ var script = {
103
105
  name: 'CnAppRoot',
104
106
 
105
107
  components: {
108
+ CnBrandBar: __sfc_main,
106
109
  NcAppContent,
107
110
  NcAppSettingsDialog,
108
111
  NcAppSettingsSection,
@@ -115,19 +118,19 @@ var script = {
115
118
  OpenInNew,
116
119
  Play,
117
120
  Restart,
118
- CnAppNav: __sfc_main,
119
- CnAppLoading: __sfc_main$1,
120
- CnDependencyMissing: __sfc_main$2,
121
- CnEnvironmentBanner: __sfc_main$3,
122
- CnSetupWizard: __sfc_main$4,
123
- CnWalkthrough: __sfc_main$5,
124
- CnAiCompanion: __sfc_main$6,
125
- CnCommandPalette: __sfc_main$7,
126
- CnObjectSidebar: __sfc_main$8,
127
- CnSupportDialog: __sfc_main$9,
128
- CnNotificationPreferences: __sfc_main$a,
129
- CnCredentials: __sfc_main$b,
130
- CnTenantBadge: __sfc_main$c,
121
+ CnAppNav: __sfc_main$1,
122
+ CnAppLoading: __sfc_main$2,
123
+ CnDependencyMissing: __sfc_main$3,
124
+ CnEnvironmentBanner: __sfc_main$4,
125
+ CnSetupWizard: __sfc_main$5,
126
+ CnWalkthrough: __sfc_main$6,
127
+ CnAiCompanion: __sfc_main$7,
128
+ CnCommandPalette: __sfc_main$8,
129
+ CnObjectSidebar: __sfc_main$9,
130
+ CnSupportDialog: __sfc_main$a,
131
+ CnNotificationPreferences: __sfc_main$b,
132
+ CnCredentials: __sfc_main$c,
133
+ CnTenantBadge: __sfc_main$d,
131
134
  },
132
135
 
133
136
  /**
@@ -153,6 +156,9 @@ var script = {
153
156
  // value once, so a getter would freeze the look at creation.
154
157
  cnLook: computed(() => self.resolvedLook),
155
158
 
159
+ // True while CnBrandBar draws the block in Nextcloud's header, so CnAppNav skips its own.
160
+ cnBrandInHeader: computed(() => self.brandInHeader),
161
+
156
162
  get cnManifest() {
157
163
  return self.manifestEditor ? self.manifestEditor.source.value : self.manifest
158
164
  },
@@ -913,6 +919,19 @@ var script = {
913
919
  default: '',
914
920
  },
915
921
 
922
+ /**
923
+ * The brand block (`{ logo, emblem, name, caption, alt, placement }`)
924
+ * the board look draws at the start of Nextcloud's header. Empty falls back
925
+ * to the manifest's `nav.brand`. `placement: "nav"` keeps the block
926
+ * in the navigation.
927
+ *
928
+ * @type {object|null}
929
+ */
930
+ brand: {
931
+ type: Object,
932
+ default: null,
933
+ },
934
+
916
935
  /**
917
936
  * Title rendered at the top of the user-settings modal
918
937
  * (NcAppSettingsDialog `name` prop). Defaults to the
@@ -1112,6 +1131,12 @@ var script = {
1112
1131
  data() {
1113
1132
  const willCheck = Array.isArray(this.requiresApps) && this.requiresApps.length > 0;
1114
1133
  return {
1134
+ // Nextcloud's own header, present on a server-rendered page; the
1135
+ // brand block goes into it (CnBrandBar). Read once at creation so
1136
+ // the navigation never draws a block that then moves.
1137
+ headerPresent: typeof document !== 'undefined' && !!document.getElementById('header'),
1138
+ // Set when CnBrandBar finds the header gone: the navigation draws the block.
1139
+ headerMissing: false,
1115
1140
  capabilitiesLoading: willCheck,
1116
1141
  missingApps: [],
1117
1142
  guardError: null,
@@ -1384,6 +1409,32 @@ var script = {
1384
1409
  return (this.look || this.manifest?.look) === 'board' ? 'board' : 'nextcloud'
1385
1410
  },
1386
1411
 
1412
+ /**
1413
+ * The brand CnBrandBar draws in the header: the `brand` prop, else the manifest's
1414
+ * `nav.brand`, read into one shape.
1415
+ *
1416
+ * @return {object|null} The resolved brand, or null.
1417
+ */
1418
+ resolvedBrandBlock() {
1419
+ return resolveBrand(this.brand || this.manifest?.nav?.brand, (text) => this.manifestTranslate(text))
1420
+ },
1421
+
1422
+ /**
1423
+ * Whether CnBrandBar draws the brand block in Nextcloud's header: the
1424
+ * board look, a brand that can be drawn, a placement other than `nav`,
1425
+ * and a `#header` to put it in. Without `#header` the navigation draws it.
1426
+ *
1427
+ * @spec openspec/changes/screens-brand-block-top-bar/specs/layout-components/spec.md#requirement-the-board-look-draws-the-brand-block-in-the-nextcloud-header
1428
+ * @return {boolean}
1429
+ */
1430
+ brandInHeader() {
1431
+ return this.resolvedLook === 'board'
1432
+ && !this.headerMissing
1433
+ && this.headerPresent
1434
+ && !!this.resolvedBrandBlock
1435
+ && this.resolvedBrandBlock.placement !== 'nav'
1436
+ },
1437
+
1387
1438
  /**
1388
1439
  * The label lookup provided as `cnTranslate`: the manifest's own
1389
1440
  * translations for the language first, then the host `translate`, then the