@conduction/nextcloud-vue 2.63.0 → 2.65.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 (111) hide show
  1. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +253 -10
  2. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +139 -46
  4. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  5. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +87 -0
  6. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  7. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +26 -24
  8. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  9. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +61 -16
  10. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
  11. package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
  12. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js +20 -0
  13. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js.map +1 -1
  14. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js +3 -2
  15. package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js.map +1 -1
  16. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js +13 -0
  17. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
  18. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +2 -1
  19. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
  20. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +33 -2
  21. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  22. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  23. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +55 -2
  24. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  25. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +153 -133
  26. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  27. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +37 -1
  28. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  29. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +12 -4
  30. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  31. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +125 -14
  32. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  33. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +87 -40
  34. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  35. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +101 -7
  36. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
  37. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +22 -5
  38. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
  39. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +30 -0
  40. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  41. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +2 -2
  42. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  43. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +5 -1
  44. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
  45. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +4 -2
  46. package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
  47. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +63 -2
  48. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  49. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js +96 -37
  50. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  51. package/dist/esm/components/CnStagesWidget/stagesModel.js +5 -2
  52. package/dist/esm/components/CnStagesWidget/stagesModel.js.map +1 -1
  53. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +74 -5
  54. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  55. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +15 -8
  56. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  57. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +14 -2
  58. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  59. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +2 -1
  60. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  61. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js +73 -1
  62. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue2.js.map +1 -1
  63. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js +14 -2
  64. package/dist/esm/components/CnWidgetWrapper/CnWidgetWrapper.vue3.js.map +1 -1
  65. package/dist/esm/l10n/en.json.js +2 -1
  66. package/dist/esm/l10n/en.json.js.map +1 -1
  67. package/dist/esm/l10n/nl.json.js +2 -1
  68. package/dist/esm/l10n/nl.json.js.map +1 -1
  69. package/dist/esm/nextcloud-vue.css +495 -81
  70. package/dist/esm/store/useObjectStore.js +118 -33
  71. package/dist/esm/store/useObjectStore.js.map +1 -1
  72. package/dist/esm/utils/actionsDispatcher.js +14 -0
  73. package/dist/esm/utils/actionsDispatcher.js.map +1 -1
  74. package/dist/esm/utils/schemaRefSlug.js +19 -3
  75. package/dist/esm/utils/schemaRefSlug.js.map +1 -1
  76. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  77. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  78. package/dist/nextcloud-vue.cjs.js +7388 -6021
  79. package/dist/nextcloud-vue.cjs.js.map +2 -2
  80. package/dist/nextcloud-vue.css +495 -81
  81. package/l10n/en.json +2 -0
  82. package/l10n/nl.json +2 -0
  83. package/package.json +1 -1
  84. package/src/components/CnAppNav/CnAppNav.vue +441 -14
  85. package/src/components/CnAppRoot/CnAppRoot.md +4 -0
  86. package/src/components/CnAppRoot/CnAppRoot.vue +94 -1
  87. package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +61 -16
  88. package/src/components/CnAuditTrailWidget/CnAuditTrailWidget.vue +22 -1
  89. package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +14 -0
  90. package/src/components/CnCellRenderer/CnCellRenderer.vue +33 -2
  91. package/src/components/CnDashboardPage/CnDashboardPage.vue +72 -4
  92. package/src/components/CnDataTable/CnDataTable.vue +45 -1
  93. package/src/components/CnDetailPage/CnDetailPage.md +8 -0
  94. package/src/components/CnDetailPage/CnDetailPage.vue +169 -2
  95. package/src/components/CnHeaderWidget/CnHeaderWidget.vue +147 -9
  96. package/src/components/CnIndexPage/CnIndexPage.vue +32 -2
  97. package/src/components/CnObjectListWidget/CnObjectListWidget.vue +7 -1
  98. package/src/components/CnStagesWidget/CnStagesWidget.vue +189 -2
  99. package/src/components/CnStagesWidget/stagesModel.js +5 -2
  100. package/src/components/CnStatWidget/CnStatWidget.vue +89 -7
  101. package/src/components/CnTabsWidget/CnTabsWidget.vue +15 -2
  102. package/src/components/CnWidgetWrapper/CnWidgetWrapper.md +4 -0
  103. package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +107 -1
  104. package/src/css/detail-page.css +32 -4
  105. package/src/css/kpi-card.css +71 -1
  106. package/src/css/table.css +18 -6
  107. package/src/schemas/app-manifest-v2.schema.json +134 -3
  108. package/src/store/useObjectStore.js +118 -33
  109. package/src/utils/actionsDispatcher.js +14 -0
  110. package/src/utils/schemaRefSlug.js +19 -3
  111. package/src/utils/validateManifestV2.compiled.js +2 -2
@@ -1,4 +1,4 @@
1
- import { resolveComponent, openBlock, createBlock, createSlots, withCtx, createElementBlock, Fragment, renderList, resolveDynamicComponent, createVNode, renderSlot, mergeProps, createTextVNode, toDisplayString, createCommentVNode, createElementVNode } from 'vue';
1
+ import { resolveComponent, openBlock, createBlock, createSlots, withCtx, createElementBlock, Fragment, renderList, resolveDynamicComponent, createVNode, renderSlot, normalizeClass, mergeProps, createTextVNode, toDisplayString, createCommentVNode, createElementVNode } from 'vue';
2
2
 
3
3
  const _hoisted_1 = {
4
4
  key: 0,
@@ -8,24 +8,42 @@ const _hoisted_1 = {
8
8
  const _hoisted_2 = ["src", "alt"];
9
9
  const _hoisted_3 = {
10
10
  key: 1,
11
+ class: "cn-app-nav__brand-emblem cn-app-nav__brand-emblem--theme",
12
+ "data-testid": "cn-nav-brand-emblem",
13
+ "aria-hidden": "true"
14
+ };
15
+ const _hoisted_4 = ["src", "alt"];
16
+ const _hoisted_5 = {
17
+ key: 3,
11
18
  class: "cn-app-nav__brand-text"
12
19
  };
13
- const _hoisted_4 = {
20
+ const _hoisted_6 = {
14
21
  key: 0,
15
22
  class: "cn-app-nav__brand-name"
16
23
  };
17
- const _hoisted_5 = {
24
+ const _hoisted_7 = {
18
25
  key: 1,
19
26
  class: "cn-app-nav__brand-caption"
20
27
  };
21
- const _hoisted_6 = {
28
+ const _hoisted_8 = {
22
29
  key: 0,
23
- class: "app-navigation-new cn-app-nav__primary-action",
30
+ class: "app-navigation-new cn-app-nav__primary-action cn-app-nav__primary-action--solid",
24
31
  "data-testid": "cn-nav-primary-action"
25
32
  };
26
- const _hoisted_7 = { class: "cn-app-nav__settings-list" };
33
+ const _hoisted_9 = {
34
+ key: 0,
35
+ class: "cn-app-nav__card",
36
+ "data-testid": "cn-nav-card"
37
+ };
38
+ const _hoisted_10 = { class: "cn-app-nav__card-title" };
39
+ const _hoisted_11 = {
40
+ key: 0,
41
+ class: "cn-app-nav__card-text"
42
+ };
43
+ const _hoisted_12 = { class: "cn-app-nav__settings-list" };
27
44
 
28
45
  function render(_ctx, _cache, $props, $setup, $data, $options) {
46
+ const _component_CnActionButtons = resolveComponent("CnActionButtons");
29
47
  const _component_NcButton = resolveComponent("NcButton");
30
48
  const _component_NcAppNavigationNew = resolveComponent("NcAppNavigationNew");
31
49
  const _component_NcAppNavigationCaption = resolveComponent("NcAppNavigationCaption");
@@ -174,34 +192,46 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
174
192
  ]),
175
193
  default: withCtx(() => [
176
194
  renderSlot(_ctx.$slots, "primary-action", {}, () => [
177
- ($options.activePrimaryAction && $options.primaryActionLink)
178
- ? (openBlock(), createElementBlock("div", _hoisted_6, [
179
- createVNode(_component_NcButton, mergeProps({
180
- variant: "primary",
181
- wide: ""
182
- }, $options.primaryActionLink, { onClick: $options.onPrimaryActionClick }), {
183
- icon: withCtx(() => [
184
- (openBlock(), createBlock(resolveDynamicComponent($options.primaryActionIconComponent), { size: 20 }))
185
- ]),
186
- default: withCtx(() => [
187
- createTextVNode(" " + toDisplayString($options.resolveLabel($options.activePrimaryAction)), 1 /* TEXT */)
188
- ]),
189
- _: 1 /* STABLE */
190
- }, 16 /* FULL_PROPS */, ["onClick"])
195
+ ($options.activePrimaryAction && $options.primaryDispatchEntry)
196
+ ? (openBlock(), createElementBlock("div", _hoisted_8, [
197
+ createVNode(_component_CnActionButtons, {
198
+ actions: [$options.primaryDispatchEntry],
199
+ "data-testid": "cn-nav-primary-action-dispatch",
200
+ onCreated: $options.onPrimaryActionCreated
201
+ }, null, 8 /* PROPS */, ["actions", "onCreated"])
191
202
  ]))
192
- : ($options.activePrimaryAction)
193
- ? (openBlock(), createBlock(_component_NcAppNavigationNew, {
203
+ : ($options.activePrimaryAction && ($options.primaryActionLink || $options.activePrimaryAction.solid === true))
204
+ ? (openBlock(), createElementBlock("div", {
194
205
  key: 1,
195
- text: $options.resolveLabel($options.activePrimaryAction),
196
- "data-testid": "cn-nav-primary-action",
197
- onClick: $options.onPrimaryActionClick
198
- }, {
199
- icon: withCtx(() => [
200
- (openBlock(), createBlock(resolveDynamicComponent($options.primaryActionIconComponent), { size: 20 }))
201
- ]),
202
- _: 1 /* STABLE */
203
- }, 8 /* PROPS */, ["text", "onClick"]))
204
- : createCommentVNode("v-if", true)
206
+ class: normalizeClass(["app-navigation-new cn-app-nav__primary-action", { 'cn-app-nav__primary-action--solid': $options.activePrimaryAction.solid === true }]),
207
+ "data-testid": "cn-nav-primary-action"
208
+ }, [
209
+ createVNode(_component_NcButton, mergeProps({
210
+ variant: "primary",
211
+ wide: ""
212
+ }, $options.primaryActionLink || {}, { onClick: $options.onPrimaryActionClick }), {
213
+ icon: withCtx(() => [
214
+ (openBlock(), createBlock(resolveDynamicComponent($options.primaryActionIconComponent), { size: 20 }))
215
+ ]),
216
+ default: withCtx(() => [
217
+ createTextVNode(" " + toDisplayString($options.resolveLabel($options.activePrimaryAction)), 1 /* TEXT */)
218
+ ]),
219
+ _: 1 /* STABLE */
220
+ }, 16 /* FULL_PROPS */, ["onClick"])
221
+ ], 2 /* CLASS */))
222
+ : ($options.activePrimaryAction)
223
+ ? (openBlock(), createBlock(_component_NcAppNavigationNew, {
224
+ key: 2,
225
+ text: $options.resolveLabel($options.activePrimaryAction),
226
+ "data-testid": "cn-nav-primary-action",
227
+ onClick: $options.onPrimaryActionClick
228
+ }, {
229
+ icon: withCtx(() => [
230
+ (openBlock(), createBlock(resolveDynamicComponent($options.primaryActionIconComponent), { size: 20 }))
231
+ ]),
232
+ _: 1 /* STABLE */
233
+ }, 8 /* PROPS */, ["text", "onClick"]))
234
+ : createCommentVNode("v-if", true)
205
235
  ])
206
236
  ]),
207
237
  _: 2 /* DYNAMIC */
@@ -213,21 +243,31 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
213
243
  renderSlot(_ctx.$slots, "brand", { brand: $options.resolvedBrand }, () => [
214
244
  ($options.resolvedBrand)
215
245
  ? (openBlock(), createElementBlock("div", _hoisted_1, [
216
- ($options.resolvedBrand.logo)
246
+ (typeof $options.resolvedBrand.emblem === 'string' && $options.resolvedBrand.emblem !== '')
217
247
  ? (openBlock(), createElementBlock("img", {
218
248
  key: 0,
219
- class: "cn-app-nav__brand-logo",
220
- src: $options.resolvedBrand.logo,
249
+ class: "cn-app-nav__brand-emblem",
250
+ "data-testid": "cn-nav-brand-emblem",
251
+ src: $options.resolvedBrand.emblem,
221
252
  alt: $options.resolvedBrand.name ? '' : $options.resolvedBrand.alt
222
253
  }, null, 8 /* PROPS */, _hoisted_2))
223
- : createCommentVNode("v-if", true),
254
+ : ($options.resolvedBrand.emblem === true)
255
+ ? (openBlock(), createElementBlock("span", _hoisted_3))
256
+ : ($options.resolvedBrand.logo)
257
+ ? (openBlock(), createElementBlock("img", {
258
+ key: 2,
259
+ class: "cn-app-nav__brand-logo",
260
+ src: $options.resolvedBrand.logo,
261
+ alt: $options.resolvedBrand.name ? '' : $options.resolvedBrand.alt
262
+ }, null, 8 /* PROPS */, _hoisted_4))
263
+ : createCommentVNode("v-if", true),
224
264
  ($options.resolvedBrand.name || $options.resolvedBrand.caption)
225
- ? (openBlock(), createElementBlock("span", _hoisted_3, [
265
+ ? (openBlock(), createElementBlock("span", _hoisted_5, [
226
266
  ($options.resolvedBrand.name)
227
- ? (openBlock(), createElementBlock("strong", _hoisted_4, toDisplayString($options.resolvedBrand.name), 1 /* TEXT */))
267
+ ? (openBlock(), createElementBlock("strong", _hoisted_6, toDisplayString($options.resolvedBrand.name), 1 /* TEXT */))
228
268
  : createCommentVNode("v-if", true),
229
269
  ($options.resolvedBrand.caption)
230
- ? (openBlock(), createElementBlock("span", _hoisted_5, toDisplayString($options.resolvedBrand.caption), 1 /* TEXT */))
270
+ ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString($options.resolvedBrand.caption), 1 /* TEXT */))
231
271
  : createCommentVNode("v-if", true)
232
272
  ]))
233
273
  : createCommentVNode("v-if", true)
@@ -239,16 +279,53 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
239
279
  key: "0"
240
280
  }
241
281
  : undefined,
242
- ($options.footerItems.length > 0 || $options.showSettingsFoldout)
282
+ ($options.footerItems.length > 0 || $options.showSettingsFoldout || $options.resolvedCard || $options.showsHelp)
243
283
  ? {
244
284
  name: "footer",
245
285
  fn: withCtx(() => [
246
- ($options.footerItems.length > 0)
286
+ renderSlot(_ctx.$slots, "card", { card: $options.resolvedCard }, () => [
287
+ ($options.resolvedCard)
288
+ ? (openBlock(), createElementBlock("div", _hoisted_9, [
289
+ createElementVNode("strong", _hoisted_10, toDisplayString($options.resolvedCard.title), 1 /* TEXT */),
290
+ ($options.resolvedCard.text)
291
+ ? (openBlock(), createElementBlock("span", _hoisted_11, toDisplayString($options.resolvedCard.text), 1 /* TEXT */))
292
+ : createCommentVNode("v-if", true),
293
+ ($options.resolvedCard.linkTag)
294
+ ? (openBlock(), createBlock(resolveDynamicComponent($options.resolvedCard.linkTag), mergeProps({
295
+ key: 1,
296
+ class: "cn-app-nav__card-link",
297
+ "data-testid": "cn-nav-card-link"
298
+ }, $options.resolvedCard.linkAttrs, { onClick: $options.onCardLinkClick }), {
299
+ default: withCtx(() => [
300
+ createTextVNode(toDisplayString($options.resolvedCard.linkLabel), 1 /* TEXT */)
301
+ ]),
302
+ _: 1 /* STABLE */
303
+ }, 16 /* FULL_PROPS */, ["onClick"]))
304
+ : createCommentVNode("v-if", true)
305
+ ]))
306
+ : createCommentVNode("v-if", true)
307
+ ]),
308
+ ($options.footerItems.length > 0 || $options.showsHelp)
247
309
  ? (openBlock(), createBlock(_component_NcAppNavigationList, {
248
310
  key: 0,
249
- class: "cn-app-nav__footer-list"
311
+ class: normalizeClass(["cn-app-nav__footer-list", { 'cn-app-nav__footer-list--after-settings': $options.settingsFirst }])
250
312
  }, {
251
313
  default: withCtx(() => [
314
+ ($options.showsHelp && !$options.helpAfterItems)
315
+ ? (openBlock(), createBlock(_component_NcAppNavigationItem, {
316
+ key: 0,
317
+ name: $options.resolvedHelp.label,
318
+ to: $options.resolvedHelp.to,
319
+ href: $options.resolvedHelp.href,
320
+ target: $options.resolvedHelp.href ? '_blank' : undefined,
321
+ "data-testid": "cn-nav-help"
322
+ }, {
323
+ icon: withCtx(() => [
324
+ createVNode(_component_HelpCircleOutline, { size: 20 })
325
+ ]),
326
+ _: 1 /* STABLE */
327
+ }, 8 /* PROPS */, ["name", "to", "href", "target"]))
328
+ : createCommentVNode("v-if", true),
252
329
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.footerItems, (item) => {
253
330
  return (openBlock(), createBlock(_component_NcAppNavigationItem, {
254
331
  key: item.id,
@@ -297,19 +374,35 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
297
374
  }
298
375
  : undefined
299
376
  ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["name", "to", "href", "icon", "active", "data-testid", "data-cn-route", "onClick"]))
300
- }), 128 /* KEYED_FRAGMENT */))
377
+ }), 128 /* KEYED_FRAGMENT */)),
378
+ ($options.showsHelp && $options.helpAfterItems)
379
+ ? (openBlock(), createBlock(_component_NcAppNavigationItem, {
380
+ key: 1,
381
+ name: $options.resolvedHelp.label,
382
+ to: $options.resolvedHelp.to,
383
+ href: $options.resolvedHelp.href,
384
+ target: $options.resolvedHelp.href ? '_blank' : undefined,
385
+ "data-testid": "cn-nav-help"
386
+ }, {
387
+ icon: withCtx(() => [
388
+ createVNode(_component_HelpCircleOutline, { size: 20 })
389
+ ]),
390
+ _: 1 /* STABLE */
391
+ }, 8 /* PROPS */, ["name", "to", "href", "target"]))
392
+ : createCommentVNode("v-if", true)
301
393
  ]),
302
394
  _: 1 /* STABLE */
303
- }))
395
+ }, 8 /* PROPS */, ["class"]))
304
396
  : createCommentVNode("v-if", true),
305
397
  ($options.showSettingsFoldout)
306
398
  ? (openBlock(), createBlock(_component_NcAppNavigationSettings, {
307
399
  key: 1,
308
400
  name: $options.settingsFoldoutLabel,
401
+ class: normalizeClass({ 'cn-app-nav__settings--first': $options.settingsFirst }),
309
402
  "data-testid": "cn-nav-settings"
310
403
  }, {
311
404
  default: withCtx(() => [
312
- createElementVNode("ul", _hoisted_7, [
405
+ createElementVNode("ul", _hoisted_12, [
313
406
  ($options.includePersonalSettings)
314
407
  ? (openBlock(), createBlock(_component_NcAppNavigationItem, {
315
408
  key: 0,
@@ -431,7 +524,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
431
524
  ])
432
525
  ]),
433
526
  _: 1 /* STABLE */
434
- }, 8 /* PROPS */, ["name"]))
527
+ }, 8 /* PROPS */, ["name", "class"]))
435
528
  : createCommentVNode("v-if", true)
436
529
  ]),
437
530
  key: "1"