@conduction/nextcloud-vue 2.56.0-beta.12 → 2.56.0-beta.13

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 (84) hide show
  1. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +99 -3
  2. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +23 -7
  4. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  5. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js +13 -0
  6. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue2.js.map +1 -1
  7. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js +2 -1
  8. package/dist/esm/components/CnBreadcrumbs/CnBreadcrumbs.vue3.js.map +1 -1
  9. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +125 -4
  10. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  11. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +439 -381
  12. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  13. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue2.js +9 -3
  14. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue2.js.map +1 -1
  15. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue3.js +1 -1
  16. package/dist/esm/components/CnDataTable/CnColumnFilterPopover.vue3.js.map +1 -1
  17. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +142 -26
  18. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  19. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +195 -124
  20. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  21. package/dist/esm/components/CnFkResolveCell/CnFkResolveCell.vue2.js +3 -1
  22. package/dist/esm/components/CnFkResolveCell/CnFkResolveCell.vue2.js.map +1 -1
  23. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +144 -4
  24. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  25. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  26. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js +84 -11
  27. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue2.js.map +1 -1
  28. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js +3 -2
  29. package/dist/esm/components/CnHeaderWidget/CnHeaderWidget.vue3.js.map +1 -1
  30. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js +11 -0
  31. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
  32. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js +2 -1
  33. package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
  34. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  36. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +22 -3
  37. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +10 -3
  39. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  40. package/dist/esm/l10n/en.json.js +3 -0
  41. package/dist/esm/l10n/en.json.js.map +1 -1
  42. package/dist/esm/l10n/nl.json.js +3 -0
  43. package/dist/esm/l10n/nl.json.js.map +1 -1
  44. package/dist/esm/mixins/pageViews.js +400 -0
  45. package/dist/esm/mixins/pageViews.js.map +1 -0
  46. package/dist/esm/nextcloud-vue.css +182 -0
  47. package/dist/esm/store/useObjectStore.js +118 -33
  48. package/dist/esm/store/useObjectStore.js.map +1 -1
  49. package/dist/esm/utils/actionsDispatcher.js +25 -2
  50. package/dist/esm/utils/actionsDispatcher.js.map +1 -1
  51. package/dist/esm/utils/columnFilters.js +27 -3
  52. package/dist/esm/utils/columnFilters.js.map +1 -1
  53. package/dist/esm/utils/schema.js +40 -2
  54. package/dist/esm/utils/schema.js.map +1 -1
  55. package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
  56. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  57. package/dist/nextcloud-vue.cjs.js +2001 -684
  58. package/dist/nextcloud-vue.cjs.js.map +2 -2
  59. package/dist/nextcloud-vue.css +182 -0
  60. package/l10n/en.json +3 -0
  61. package/l10n/nl.json +3 -0
  62. package/package.json +1 -1
  63. package/src/components/CnAppNav/CnAppNav.vue +148 -7
  64. package/src/components/CnBreadcrumbs/CnBreadcrumbs.vue +14 -0
  65. package/src/components/CnDashboardPage/CnDashboardPage.vue +194 -10
  66. package/src/components/CnDataTable/CnColumnFilterPopover.vue +11 -5
  67. package/src/components/CnDetailPage/CnDetailPage.md +5 -1
  68. package/src/components/CnDetailPage/CnDetailPage.vue +208 -11
  69. package/src/components/CnFkResolveCell/CnFkResolveCell.vue +3 -1
  70. package/src/components/CnFormDialog/CnFormDialog.vue +144 -4
  71. package/src/components/CnHeaderWidget/CnHeaderWidget.vue +100 -13
  72. package/src/components/CnSegmentedControl/CnSegmentedControl.md +1 -1
  73. package/src/components/CnSegmentedControl/CnSegmentedControl.vue +12 -0
  74. package/src/components/CnStagesWidget/CnStagesWidget.vue +9 -0
  75. package/src/components/CnStatWidget/CnStatWidget.vue +33 -5
  76. package/src/css/detail-page.css +27 -0
  77. package/src/css/kpi-card.css +47 -0
  78. package/src/mixins/pageViews.js +396 -0
  79. package/src/schemas/app-manifest-v2.schema.json +51 -2
  80. package/src/store/useObjectStore.js +118 -33
  81. package/src/utils/actionsDispatcher.js +25 -2
  82. package/src/utils/columnFilters.js +29 -2
  83. package/src/utils/schema.js +40 -2
  84. package/src/utils/validateManifestV2.compiled.js +2 -2
@@ -1,38 +1,38 @@
1
- import { resolveComponent, openBlock, createElementBlock, normalizeClass, normalizeStyle, toDisplayString, createCommentVNode, createBlock, renderSlot, createElementVNode, Fragment, renderList, createVNode, withCtx, createTextVNode, createSlots } from 'vue';
1
+ import { resolveComponent, openBlock, createElementBlock, normalizeClass, normalizeStyle, toDisplayString, createCommentVNode, createBlock, renderSlot, createElementVNode, Fragment, renderList, createVNode, withCtx, createTextVNode, createSlots, mergeProps } from 'vue';
2
2
 
3
3
  const _hoisted_1 = ["href"];
4
- const _hoisted_2 = {
5
- key: 2,
6
- class: "cn-detail-page__header",
7
- "data-testid": "cn-detail-page-header"
8
- };
9
- const _hoisted_3 = { class: "cn-detail-page__header-left" };
10
- const _hoisted_4 = { class: "cn-detail-page__header-text" };
11
- const _hoisted_5 = {
4
+ const _hoisted_2 = { class: "cn-detail-page__header-left" };
5
+ const _hoisted_3 = { class: "cn-detail-page__header-text" };
6
+ const _hoisted_4 = {
12
7
  key: 0,
13
8
  class: "cn-detail-page__pills",
14
9
  "data-testid": "cn-detail-page-pills"
15
10
  };
16
- const _hoisted_6 = {
11
+ const _hoisted_5 = {
17
12
  key: 1,
18
13
  class: "cn-detail-page__type-eyebrow",
19
14
  "data-testid": "cn-detail-page-type-eyebrow"
20
15
  };
21
- const _hoisted_7 = ["title"];
22
- const _hoisted_8 = {
16
+ const _hoisted_6 = ["title"];
17
+ const _hoisted_7 = {
23
18
  key: 3,
24
19
  class: "cn-detail-page__description"
25
20
  };
26
- const _hoisted_9 = { class: "cn-detail-page__header-actions" };
27
- const _hoisted_10 = {
28
- key: 0,
21
+ const _hoisted_8 = { class: "cn-detail-page__header-actions" };
22
+ const _hoisted_9 = {
23
+ key: 1,
29
24
  class: "cn-detail-page__list-nav",
30
25
  "data-testid": "cn-detail-page-list-nav"
31
26
  };
32
- const _hoisted_11 = {
27
+ const _hoisted_10 = {
33
28
  class: "cn-detail-page__list-nav-position",
34
29
  "data-testid": "cn-detail-page-list-position"
35
30
  };
31
+ const _hoisted_11 = {
32
+ key: 0,
33
+ class: "cn-detail-page__header-widget",
34
+ "data-testid": "cn-detail-page-header-widget"
35
+ };
36
36
  const _hoisted_12 = {
37
37
  key: 4,
38
38
  class: "cn-detail-page__lock-refusal",
@@ -70,42 +70,43 @@ const _hoisted_20 = {
70
70
  class: "cn-detail-page__widget-edit"
71
71
  };
72
72
  const _hoisted_21 = ["id"];
73
- const _hoisted_22 = {
73
+ const _hoisted_22 = ["id", "aria-label"];
74
+ const _hoisted_23 = {
74
75
  key: 3,
75
76
  class: "cn-detail-page__stats"
76
77
  };
77
- const _hoisted_23 = {
78
+ const _hoisted_24 = {
78
79
  key: 0,
79
80
  class: "cn-detail-page__section-title"
80
81
  };
81
- const _hoisted_24 = { class: "cn-detail-page__stats-table" };
82
- const _hoisted_25 = { key: 0 };
83
- const _hoisted_26 = {
82
+ const _hoisted_25 = { class: "cn-detail-page__stats-table" };
83
+ const _hoisted_26 = { key: 0 };
84
+ const _hoisted_27 = {
84
85
  key: 4,
85
86
  class: "cn-detail-page__content"
86
87
  };
87
- const _hoisted_27 = {
88
+ const _hoisted_28 = {
88
89
  key: 0,
89
90
  class: "cn-detail-page__content"
90
91
  };
91
- const _hoisted_28 = {
92
+ const _hoisted_29 = {
92
93
  key: 1,
93
94
  class: "cn-detail-page__sections"
94
95
  };
95
- const _hoisted_29 = {
96
+ const _hoisted_30 = {
96
97
  key: 6,
97
98
  class: "cn-detail-page__related-collections"
98
99
  };
99
- const _hoisted_30 = {
100
+ const _hoisted_31 = {
100
101
  key: 0,
101
102
  class: "cn-detail-page__relation-links"
102
103
  };
103
- const _hoisted_31 = {
104
+ const _hoisted_32 = {
104
105
  key: 9,
105
106
  class: "cn-detail-page__footer"
106
107
  };
107
- const _hoisted_32 = ["aria-label"];
108
- const _hoisted_33 = ["data-testid"];
108
+ const _hoisted_33 = ["aria-label"];
109
+ const _hoisted_34 = ["data-testid"];
109
110
 
110
111
  function render(_ctx, _cache, $props, $setup, $data, $options) {
111
112
  const _component_CnBreadcrumbs = resolveComponent("CnBreadcrumbs");
@@ -113,6 +114,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
113
114
  const _component_CnStatusBadge = resolveComponent("CnStatusBadge");
114
115
  const _component_CnTranslatedBadge = resolveComponent("CnTranslatedBadge");
115
116
  const _component_CnSummaryAggregates = resolveComponent("CnSummaryAggregates");
117
+ const _component_CnSegmentedControl = resolveComponent("CnSegmentedControl");
116
118
  const _component_ChevronLeft = resolveComponent("ChevronLeft");
117
119
  const _component_NcButton = resolveComponent("NcButton");
118
120
  const _component_ChevronRight = resolveComponent("ChevronRight");
@@ -125,6 +127,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
125
127
  const _component_NcActionLink = resolveComponent("NcActionLink");
126
128
  const _component_NcActionButton = resolveComponent("NcActionButton");
127
129
  const _component_CnActionsMenu = resolveComponent("CnActionsMenu");
130
+ const _component_CnDetailWidgetHost = resolveComponent("CnDetailWidgetHost");
128
131
  const _component_CnLockedBanner = resolveComponent("CnLockedBanner");
129
132
  const _component_CnNextStepCard = resolveComponent("CnNextStepCard");
130
133
  const _component_FileQuestionOutline = resolveComponent("FileQuestionOutline");
@@ -136,8 +139,8 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
136
139
  const _component_InformationOutline = resolveComponent("InformationOutline");
137
140
  const _component_CnBodySections = resolveComponent("CnBodySections");
138
141
  const _component_Cog = resolveComponent("Cog");
139
- const _component_CnDetailWidgetHost = resolveComponent("CnDetailWidgetHost");
140
142
  const _component_CnDashboardGrid = resolveComponent("CnDashboardGrid");
143
+ const _component_ViewDashboardOutline = resolveComponent("ViewDashboardOutline");
141
144
  const _component_Plus = resolveComponent("Plus");
142
145
  const _component_CnRelatedCollections = resolveComponent("CnRelatedCollections");
143
146
  const _component_CnWidgetStyleEditorModal = resolveComponent("CnWidgetStyleEditorModal");
@@ -163,18 +166,23 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
163
166
  key: 1,
164
167
  class: "cn-detail-page__breadcrumbs",
165
168
  crumbs: $options.breadcrumbCrumbs,
169
+ rootText: $options.breadcrumbCrumbs[0].icon === undefined,
166
170
  "data-testid": "cn-detail-page-breadcrumbs"
167
- }, null, 8 /* PROPS */, ["crumbs"]))
171
+ }, null, 8 /* PROPS */, ["crumbs", "rootText"]))
168
172
  : createCommentVNode("v-if", true),
169
173
  (!$data.objectNotFound)
170
- ? (openBlock(), createElementBlock("div", _hoisted_2, [
174
+ ? (openBlock(), createElementBlock("div", {
175
+ key: 2,
176
+ class: normalizeClass(["cn-detail-page__header", { 'cn-detail-page__header--card': $props.headerCard, 'cn-detail-page__header--with-widget': $options.headerWidgetDef !== null }]),
177
+ "data-testid": "cn-detail-page-header"
178
+ }, [
171
179
  renderSlot(_ctx.$slots, "header", {
172
180
  title: $props.title,
173
181
  description: $props.description,
174
182
  icon: $props.icon,
175
183
  iconSize: $props.iconSize
176
184
  }, () => [
177
- createElementVNode("div", _hoisted_3, [
185
+ createElementVNode("div", _hoisted_2, [
178
186
  renderSlot(_ctx.$slots, "icon", {}, () => [
179
187
  ($props.icon)
180
188
  ? (openBlock(), createBlock(_component_CnIcon, {
@@ -185,9 +193,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
185
193
  }, null, 8 /* PROPS */, ["name", "size"]))
186
194
  : createCommentVNode("v-if", true)
187
195
  ]),
188
- createElementVNode("div", _hoisted_4, [
196
+ createElementVNode("div", _hoisted_3, [
189
197
  ($options.headerPills.length > 0)
190
- ? (openBlock(), createElementBlock("div", _hoisted_5, [
198
+ ? (openBlock(), createElementBlock("div", _hoisted_4, [
191
199
  (openBlock(true), createElementBlock(Fragment, null, renderList($options.headerPills, (pill) => {
192
200
  return (openBlock(), createBlock(_component_CnStatusBadge, {
193
201
  key: pill.key,
@@ -201,14 +209,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
201
209
  ]))
202
210
  : createCommentVNode("v-if", true),
203
211
  ($options.typeEyebrow && $props.showTypeEyebrow)
204
- ? (openBlock(), createElementBlock("p", _hoisted_6, toDisplayString($options.typeEyebrow), 1 /* TEXT */))
212
+ ? (openBlock(), createElementBlock("p", _hoisted_5, toDisplayString($options.typeEyebrow), 1 /* TEXT */))
205
213
  : createCommentVNode("v-if", true),
206
214
  ($options.displayTitle)
207
215
  ? (openBlock(), createElementBlock("h2", {
208
216
  key: 2,
209
217
  class: "cn-detail-page__title",
210
218
  title: $options.displayTitle
211
- }, toDisplayString($options.displayTitle), 9 /* TEXT, PROPS */, _hoisted_7))
219
+ }, toDisplayString($options.displayTitle), 9 /* TEXT, PROPS */, _hoisted_6))
212
220
  : createCommentVNode("v-if", true),
213
221
  renderSlot(_ctx.$slots, "translation-badge", { object: $options.resolvedObject }, () => [
214
222
  ($options.resolvedObject)
@@ -219,7 +227,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
219
227
  : createCommentVNode("v-if", true)
220
228
  ]),
221
229
  ($props.description)
222
- ? (openBlock(), createElementBlock("p", _hoisted_8, toDisplayString($options.resolvedDescription), 1 /* TEXT */))
230
+ ? (openBlock(), createElementBlock("p", _hoisted_7, toDisplayString($options.resolvedDescription), 1 /* TEXT */))
223
231
  : createCommentVNode("v-if", true),
224
232
  ($props.summaryAggregates && $props.summaryAggregates.length > 0)
225
233
  ? (openBlock(), createBlock(_component_CnSummaryAggregates, {
@@ -230,9 +238,21 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
230
238
  ])
231
239
  ])
232
240
  ]),
233
- createElementVNode("div", _hoisted_9, [
241
+ createElementVNode("div", _hoisted_8, [
242
+ (_ctx.showsPageViewSwitch)
243
+ ? (openBlock(), createBlock(_component_CnSegmentedControl, {
244
+ key: 0,
245
+ class: "cn-page-view-switch",
246
+ options: _ctx.viewSwitchOptions,
247
+ modelValue: _ctx.activeViewId,
248
+ ariaLabel: _ctx.viewSwitchLabel,
249
+ controls: _ctx.viewRegionId,
250
+ "data-testid": "cn-detail-page-view-switch",
251
+ "onUpdate:modelValue": _ctx.selectView
252
+ }, null, 8 /* PROPS */, ["options", "modelValue", "ariaLabel", "controls", "onUpdate:modelValue"]))
253
+ : createCommentVNode("v-if", true),
234
254
  ($props.listNavigation && $props.listNavigation.available)
235
- ? (openBlock(), createElementBlock("div", _hoisted_10, [
255
+ ? (openBlock(), createElementBlock("div", _hoisted_9, [
236
256
  createVNode(_component_NcButton, {
237
257
  variant: "tertiary",
238
258
  disabled: $props.listNavigation.isFirst,
@@ -247,7 +267,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
247
267
  ]),
248
268
  _: 1 /* STABLE */
249
269
  }, 8 /* PROPS */, ["disabled", "to", "aria-label", "title"]),
250
- createElementVNode("span", _hoisted_11, toDisplayString($options.listPositionLabel), 1 /* TEXT */),
270
+ createElementVNode("span", _hoisted_10, toDisplayString($options.listPositionLabel), 1 /* TEXT */),
251
271
  createVNode(_component_NcButton, {
252
272
  variant: "tertiary",
253
273
  disabled: $props.listNavigation.isLast,
@@ -266,7 +286,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
266
286
  : createCommentVNode("v-if", true),
267
287
  ($options.effectivePrimaryLabel && !$options.showsNextStepCard)
268
288
  ? (openBlock(), createBlock(_component_NcButton, {
269
- key: 1,
289
+ key: 2,
270
290
  id: $options.primaryActionAnchorId,
271
291
  ref: "primaryActionButton",
272
292
  variant: "primary",
@@ -313,7 +333,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
313
333
  }), 128 /* KEYED_FRAGMENT */)),
314
334
  ($options.showsLifecycleActions)
315
335
  ? (openBlock(), createBlock(_component_CnLifecycleActions, {
316
- key: 2,
336
+ key: 3,
317
337
  objectId: $props.objectId,
318
338
  object: $options.currentObject,
319
339
  config: $props.lifecycleActions,
@@ -326,7 +346,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
326
346
  : createCommentVNode("v-if", true),
327
347
  ($options.effectiveHeaderActions.length > 0)
328
348
  ? (openBlock(), createBlock(_component_CnActionButtons, {
329
- key: 3,
349
+ key: 4,
330
350
  actions: $options.effectiveHeaderActions,
331
351
  display: "menu",
332
352
  "data-testid": "cn-detail-page-header-actions",
@@ -345,7 +365,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
345
365
  }),
346
366
  ($options.canEditRecord && !$options.foldsEditIntoActions)
347
367
  ? (openBlock(), createBlock(_component_NcButton, {
348
- key: 4,
368
+ key: 5,
349
369
  variant: "secondary",
350
370
  "data-testid": "cn-detail-page-edit",
351
371
  "aria-label": $options.editActionLabel,
@@ -475,8 +495,41 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
475
495
  }
476
496
  : undefined
477
497
  ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["showRefresh", "refreshing", "showRequestFeature", "showReportBug", "showDocumentation", "actionsMenuLabel", "hasPrimaryItems", "documentationUrl", "docsAnchor", "documentationLabel", "widgetId", "title", "surface", "onRefresh", "onRequestFeature"])
478
- ])
479
- ]))
498
+ ]),
499
+ ($options.headerWidgetDef !== null)
500
+ ? (openBlock(), createElementBlock("div", _hoisted_11, [
501
+ renderSlot(_ctx.$slots, `widget-${$options.headerWidgetDef.id}`, {
502
+ item: { id: $options.headerWidgetDef.id, widgetId: $options.headerWidgetDef.id },
503
+ widget: $options.headerWidgetDef,
504
+ objectId: $props.objectId,
505
+ object: $options.resolvedObject,
506
+ objectData: $options.resolvedObject,
507
+ objectType: $options.resolvedObjectType,
508
+ register: $props.register,
509
+ schema: $props.schema
510
+ }, () => [
511
+ createVNode(_component_CnDetailWidgetHost, {
512
+ widget: $options.headerWidgetDef,
513
+ chrome: "bare",
514
+ objectId: $props.objectId,
515
+ object: $options.currentObject,
516
+ objectType: $options.resolvedObjectType,
517
+ schemaObject: $options.currentSchema,
518
+ register: $props.register,
519
+ schema: $props.schema,
520
+ store: $options.effectiveObjectStore,
521
+ surface: $props.surface,
522
+ integrationContext: $options.effectiveIntegrationContext,
523
+ hideEmpty: $props.hideEmpty,
524
+ cnRegistry: $options.cnRegistry,
525
+ availableWidgets: _ctx.widgets,
526
+ onGeoSaved: $options.onGeoSaved,
527
+ onOpenIntegration: $options.onAutoBodyOpenIntegration
528
+ }, null, 8 /* PROPS */, ["widget", "objectId", "object", "objectType", "schemaObject", "register", "schema", "store", "surface", "integrationContext", "hideEmpty", "cnRegistry", "availableWidgets", "onGeoSaved", "onOpenIntegration"])
529
+ ])
530
+ ]))
531
+ : createCommentVNode("v-if", true)
532
+ ], 2 /* CLASS */))
480
533
  : createCommentVNode("v-if", true),
481
534
  ($setup.lockState && $setup.lockState.locked.value)
482
535
  ? (openBlock(), createBlock(_component_CnLockedBanner, {
@@ -631,87 +684,105 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
631
684
  "data-testid": "cn-detail-body-sections-before-body"
632
685
  }, null, 8 /* PROPS */, ["sections", "context"]))
633
686
  : createCommentVNode("v-if", true),
634
- ($options.hasBodyGrid)
635
- ? (openBlock(), createBlock(_component_CnDashboardGrid, {
636
- key: `cn-detail-grid-${$options.editingBody ? 'editing' : 'live'}`,
637
- layout: $options.bodyGridLayout,
638
- editable: $options.editingBody,
639
- columns: 12,
640
- columnOpts: $props.columnOpts,
641
- class: "cn-detail-page__grid",
642
- onLayoutChange: $options.onBodyLayoutChange
643
- }, {
644
- widget: withCtx(({ item }) => [
645
- createElementVNode("div", {
646
- class: normalizeClass(["cn-detail-page__grid-item", { 'cn-detail-page__grid-item--fit': !!item.sizeToContent }]),
647
- "aria-labelledby": $options.showGridTitle(item) ? `widget-title-${item.id}` : undefined
648
- }, [
649
- ($options.showsCog(item))
650
- ? (openBlock(), createElementBlock("div", _hoisted_20, [
651
- createVNode(_component_NcButton, {
652
- variant: "tertiary",
653
- "aria-label": _ctx.t('nextcloud-vue', 'Configure widget'),
654
- onClick: $event => ($options.configureWidget(item))
655
- }, {
656
- icon: withCtx(() => [
657
- createVNode(_component_Cog, { size: 18 })
658
- ]),
659
- _: 1 /* STABLE */
660
- }, 8 /* PROPS */, ["aria-label", "onClick"])
661
- ]))
662
- : createCommentVNode("v-if", true),
663
- ($options.showGridTitle(item))
664
- ? (openBlock(), createElementBlock("h3", {
665
- key: 1,
666
- id: `widget-title-${item.id}`,
667
- class: "cn-detail-page__widget-title"
668
- }, toDisplayString($options.gridTitle(item)), 9 /* TEXT, PROPS */, _hoisted_21))
669
- : createCommentVNode("v-if", true),
670
- renderSlot(_ctx.$slots, `widget-${item.widgetId}`, {
671
- item: item,
687
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.bodyGridSections, (section) => {
688
+ return (openBlock(), createBlock(_component_CnDashboardGrid, mergeProps({
689
+ key: `cn-detail-grid-${section.key}-${$options.editingBody ? 'editing' : 'live'}`
690
+ }, { ref_for: true }, section.attrs, {
691
+ layout: section.layout,
692
+ editable: $options.editingBody,
693
+ columns: 12,
694
+ columnOpts: $props.columnOpts,
695
+ class: "cn-detail-page__grid",
696
+ onLayoutChange: $event => (section.view ? _ctx.onViewLayoutChange($event) : $options.onBodyLayoutChange($event))
697
+ }), {
698
+ widget: withCtx(({ item }) => [
699
+ createElementVNode("div", {
700
+ class: normalizeClass(["cn-detail-page__grid-item", { 'cn-detail-page__grid-item--fit': !!item.sizeToContent }]),
701
+ "aria-labelledby": $options.showGridTitle(item) ? `widget-title-${item.id}` : undefined
702
+ }, [
703
+ ($options.showsCog(item))
704
+ ? (openBlock(), createElementBlock("div", _hoisted_20, [
705
+ createVNode(_component_NcButton, {
706
+ variant: "tertiary",
707
+ "aria-label": _ctx.t('nextcloud-vue', 'Configure widget'),
708
+ onClick: $event => ($options.configureWidget(item))
709
+ }, {
710
+ icon: withCtx(() => [
711
+ createVNode(_component_Cog, { size: 18 })
712
+ ]),
713
+ _: 1 /* STABLE */
714
+ }, 8 /* PROPS */, ["aria-label", "onClick"])
715
+ ]))
716
+ : createCommentVNode("v-if", true),
717
+ ($options.showGridTitle(item))
718
+ ? (openBlock(), createElementBlock("h3", {
719
+ key: 1,
720
+ id: `widget-title-${item.id}`,
721
+ class: "cn-detail-page__widget-title"
722
+ }, toDisplayString($options.gridTitle(item)), 9 /* TEXT, PROPS */, _hoisted_21))
723
+ : createCommentVNode("v-if", true),
724
+ renderSlot(_ctx.$slots, `widget-${item.widgetId}`, {
725
+ item: item,
726
+ widget: $options.findWidget(item),
727
+ objectId: $props.objectId,
728
+ object: $options.resolvedObject,
729
+ objectData: $options.resolvedObject,
730
+ objectType: $options.resolvedObjectType,
731
+ register: $props.register,
732
+ schema: $props.schema
733
+ }, () => [
734
+ createVNode(_component_CnDetailWidgetHost, {
672
735
  widget: $options.findWidget(item),
736
+ chrome: "card",
737
+ showCardTitle: $options.showCardTitle(item),
673
738
  objectId: $props.objectId,
674
- object: $options.resolvedObject,
675
- objectData: $options.resolvedObject,
739
+ object: $options.currentObject,
676
740
  objectType: $options.resolvedObjectType,
741
+ schemaObject: $options.currentSchema,
677
742
  register: $props.register,
678
- schema: $props.schema
679
- }, () => [
680
- createVNode(_component_CnDetailWidgetHost, {
681
- widget: $options.findWidget(item),
682
- chrome: "card",
683
- showCardTitle: $options.showCardTitle(item),
684
- objectId: $props.objectId,
685
- object: $options.currentObject,
686
- objectType: $options.resolvedObjectType,
687
- schemaObject: $options.currentSchema,
688
- register: $props.register,
689
- schema: $props.schema,
690
- store: $options.effectiveObjectStore,
691
- surface: $props.surface,
692
- integrationContext: $options.effectiveIntegrationContext,
693
- hideEmpty: $props.hideEmpty,
694
- cnRegistry: $options.cnRegistry,
695
- availableWidgets: $options.bodyGridWidgets,
696
- onGeoSaved: $options.onGeoSaved,
697
- onOpenIntegration: $options.onAutoBodyOpenIntegration
698
- }, null, 8 /* PROPS */, ["widget", "showCardTitle", "objectId", "object", "objectType", "schemaObject", "register", "schema", "store", "surface", "integrationContext", "hideEmpty", "cnRegistry", "availableWidgets", "onGeoSaved", "onOpenIntegration"])
699
- ])
700
- ], 10 /* CLASS, PROPS */, _hoisted_19)
701
- ]),
702
- _: 3 /* FORWARDED */
703
- }, 8 /* PROPS */, ["layout", "editable", "columnOpts", "onLayoutChange"]))
743
+ schema: $props.schema,
744
+ store: $options.effectiveObjectStore,
745
+ surface: $props.surface,
746
+ integrationContext: $options.effectiveIntegrationContext,
747
+ hideEmpty: $props.hideEmpty,
748
+ cnRegistry: $options.cnRegistry,
749
+ availableWidgets: $options.bodyGridWidgets,
750
+ onGeoSaved: $options.onGeoSaved,
751
+ onOpenIntegration: $options.onAutoBodyOpenIntegration
752
+ }, null, 8 /* PROPS */, ["widget", "showCardTitle", "objectId", "object", "objectType", "schemaObject", "register", "schema", "store", "surface", "integrationContext", "hideEmpty", "cnRegistry", "availableWidgets", "onGeoSaved", "onOpenIntegration"])
753
+ ])
754
+ ], 10 /* CLASS, PROPS */, _hoisted_19)
755
+ ]),
756
+ _: 3 /* FORWARDED */
757
+ }, 16 /* FULL_PROPS */, ["layout", "editable", "columnOpts", "onLayoutChange"]))
758
+ }), 128 /* KEYED_FRAGMENT */)),
759
+ ($options.viewIsEmpty)
760
+ ? (openBlock(), createElementBlock("div", {
761
+ key: 2,
762
+ id: _ctx.viewRegionId,
763
+ role: "region",
764
+ "aria-label": _ctx.activeView ? _ctx.activeView.label : null,
765
+ class: "cn-page-view-region cn-page-view-region--empty",
766
+ "data-testid": "cn-detail-page-view-empty"
767
+ }, [
768
+ createVNode(_component_NcEmptyContent, { description: _ctx.viewEmptyText }, {
769
+ icon: withCtx(() => [
770
+ createVNode(_component_ViewDashboardOutline, { size: 48 })
771
+ ]),
772
+ _: 1 /* STABLE */
773
+ }, 8 /* PROPS */, ["description"])
774
+ ], 8 /* PROPS */, _hoisted_22))
704
775
  : createCommentVNode("v-if", true),
705
776
  ($options.hasStats)
706
- ? (openBlock(), createElementBlock("div", _hoisted_22, [
777
+ ? (openBlock(), createElementBlock("div", _hoisted_23, [
707
778
  renderSlot(_ctx.$slots, "stats-header", {}, () => [
708
779
  ($props.statsTitle)
709
- ? (openBlock(), createElementBlock("h3", _hoisted_23, toDisplayString($options.resolvedStatsTitle), 1 /* TEXT */))
780
+ ? (openBlock(), createElementBlock("h3", _hoisted_24, toDisplayString($options.resolvedStatsTitle), 1 /* TEXT */))
710
781
  : createCommentVNode("v-if", true)
711
782
  ]),
712
- createElementVNode("table", _hoisted_24, [
783
+ createElementVNode("table", _hoisted_25, [
713
784
  ($props.statsColumns.length > 0)
714
- ? (openBlock(), createElementBlock("thead", _hoisted_25, [
785
+ ? (openBlock(), createElementBlock("thead", _hoisted_26, [
715
786
  createElementVNode("tr", null, [
716
787
  (openBlock(true), createElementBlock(Fragment, null, renderList($props.statsColumns, (col) => {
717
788
  return (openBlock(), createElementBlock("th", {
@@ -742,14 +813,14 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
742
813
  ])
743
814
  ])
744
815
  ]))
745
- : (openBlock(), createElementBlock("div", _hoisted_26, [
816
+ : (openBlock(), createElementBlock("div", _hoisted_27, [
746
817
  (!$options.hasBodyGrid)
747
- ? (openBlock(), createElementBlock("div", _hoisted_27, [
818
+ ? (openBlock(), createElementBlock("div", _hoisted_28, [
748
819
  renderSlot(_ctx.$slots, "default")
749
820
  ]))
750
821
  : createCommentVNode("v-if", true),
751
822
  (_ctx.$slots.sections)
752
- ? (openBlock(), createElementBlock("div", _hoisted_28, [
823
+ ? (openBlock(), createElementBlock("div", _hoisted_29, [
753
824
  renderSlot(_ctx.$slots, "sections")
754
825
  ]))
755
826
  : createCommentVNode("v-if", true)
@@ -764,9 +835,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
764
835
  }, null, 8 /* PROPS */, ["sections", "context"]))
765
836
  : createCommentVNode("v-if", true),
766
837
  (($props.relatedCollections && $props.relatedCollections.length > 0) || ($props.relationLinks && $props.relationLinks.length > 0))
767
- ? (openBlock(), createElementBlock("div", _hoisted_29, [
838
+ ? (openBlock(), createElementBlock("div", _hoisted_30, [
768
839
  ($props.relationLinks && $props.relationLinks.length > 0)
769
- ? (openBlock(), createElementBlock("div", _hoisted_30, [
840
+ ? (openBlock(), createElementBlock("div", _hoisted_31, [
770
841
  (openBlock(true), createElementBlock(Fragment, null, renderList($props.relationLinks, (link, li) => {
771
842
  return (openBlock(), createBlock(_component_NcButton, {
772
843
  key: li,
@@ -813,7 +884,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
813
884
  }, null, 8 /* PROPS */, ["sections", "context"]))
814
885
  : createCommentVNode("v-if", true),
815
886
  (_ctx.$slots.footer)
816
- ? (openBlock(), createElementBlock("div", _hoisted_31, [
887
+ ? (openBlock(), createElementBlock("div", _hoisted_32, [
817
888
  renderSlot(_ctx.$slots, "footer")
818
889
  ]))
819
890
  : createCommentVNode("v-if", true)
@@ -861,9 +932,9 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
861
932
  onOpenIntegration: $options.onAutoBodyOpenIntegration
862
933
  }, null, 8 /* PROPS */, ["widget", "objectId", "object", "objectType", "schemaObject", "register", "schema", "store", "surface", "integrationContext", "hideEmpty", "cnRegistry", "availableWidgets", "onGeoSaved", "onOpenIntegration"])
863
934
  ])
864
- ], 8 /* PROPS */, _hoisted_33))
935
+ ], 8 /* PROPS */, _hoisted_34))
865
936
  }), 128 /* KEYED_FRAGMENT */))
866
- ], 8 /* PROPS */, _hoisted_32))
937
+ ], 8 /* PROPS */, _hoisted_33))
867
938
  : createCommentVNode("v-if", true),
868
939
  ($data.showWidgetConfig)
869
940
  ? (openBlock(), createBlock(_component_CnWidgetStyleEditorModal, {