@conduction/nextcloud-vue 2.110.0 → 2.111.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 (33) hide show
  1. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +2 -1
  2. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  3. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  4. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +20 -0
  5. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  6. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +68 -61
  7. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  8. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +37 -12
  9. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  10. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  11. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  12. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +1 -1
  13. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  14. package/dist/esm/library-style.js +1 -1
  15. package/dist/esm/nextcloud-vue.css +98 -31
  16. package/dist/esm/utils/savedViewHelpers.js +40 -3
  17. package/dist/esm/utils/savedViewHelpers.js.map +1 -1
  18. package/dist/nextcloud-vue.cjs.js +198 -109
  19. package/dist/nextcloud-vue.cjs.js.map +2 -2
  20. package/dist/nextcloud-vue.css +98 -31
  21. package/package.json +1 -1
  22. package/src/components/CnAppRoot/CnAppRoot.vue +2 -1
  23. package/src/components/CnDetailPage/CnDetailPage.vue +35 -11
  24. package/src/components/CnIndexPage/CnIndexPage.md +1 -1
  25. package/src/components/CnIndexPage/CnIndexPage.vue +37 -12
  26. package/src/components/CnIndexSidebar/CnIndexSidebar.md +1 -1
  27. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +2 -2
  28. package/src/css/board.css +5 -2
  29. package/src/css/look-board-detail.css +19 -7
  30. package/src/css/look-board-index.css +14 -10
  31. package/src/css/look-board-reports.css +1 -1
  32. package/src/css/look-board.css +54 -9
  33. package/src/utils/savedViewHelpers.js +39 -2
@@ -26639,8 +26639,8 @@ const _hoisted_40$c = {
26639
26639
  class: "cn-cell-renderer__icon-label",
26640
26640
  "data-testid": "cn-cell-icon-label"
26641
26641
  };
26642
- const _hoisted_41$9 = { key: 2 };
26643
- const _hoisted_42$8 = {
26642
+ const _hoisted_41$a = { key: 2 };
26643
+ const _hoisted_42$9 = {
26644
26644
  key: 3,
26645
26645
  class: "cn-cell-renderer__dash"
26646
26646
  };
@@ -26991,8 +26991,8 @@ function render$7z(_ctx, _cache, $props, $setup, $data, $options) {
26991
26991
  }))
26992
26992
  : vue$1.createCommentVNode("v-if", true),
26993
26993
  ($options.hasValue)
26994
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_41$9, vue$1.toDisplayString($options.labelledValue), 1 /* TEXT */))
26995
- : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_42$8, "—"))
26994
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_41$a, vue$1.toDisplayString($options.labelledValue), 1 /* TEXT */))
26995
+ : (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_42$9, "—"))
26996
26996
  ]))
26997
26997
  : ($options.hasFormatter)
26998
26998
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", {
@@ -65583,7 +65583,7 @@ const _hoisted_40$b = {
65583
65583
  class: "cn-icon-browser-panel__error",
65584
65584
  role: "alert"
65585
65585
  };
65586
- const _hoisted_41$8 = ["id", "aria-labelledby"];
65586
+ const _hoisted_41$9 = ["id", "aria-labelledby"];
65587
65587
 
65588
65588
  function render$7l(_ctx, _cache, $props, $setup, $data, $options) {
65589
65589
  const _component_Cancel = vue$1.resolveComponent("Cancel");
@@ -65864,7 +65864,7 @@ function render$7l(_ctx, _cache, $props, $setup, $data, $options) {
65864
65864
  class: "cn-icon-browser-panel__format",
65865
65865
  onClick: _cache[5] || (_cache[5] = (...args) => ($options.formatCustomSvg && $options.formatCustomSvg(...args)))
65866
65866
  }, vue$1.toDisplayString($options.t('nextcloud-vue', 'Format SVG')), 1 /* TEXT */)
65867
- ], 8 /* PROPS */, _hoisted_41$8)), [
65867
+ ], 8 /* PROPS */, _hoisted_41$9)), [
65868
65868
  [vue$1.vShow, $data.mode === 'svg']
65869
65869
  ])
65870
65870
  : vue$1.createCommentVNode("v-if", true)
@@ -77862,11 +77862,11 @@ const _hoisted_40$a = {
77862
77862
  key: 6,
77863
77863
  class: "cn-activity-tab__timeline cn-activity-tab__timeline--rail"
77864
77864
  };
77865
- const _hoisted_41$7 = {
77865
+ const _hoisted_41$8 = {
77866
77866
  class: "cn-activity-tab__rail",
77867
77867
  "data-testid": "cn-activity-rail"
77868
77868
  };
77869
- const _hoisted_42$7 = {
77869
+ const _hoisted_42$8 = {
77870
77870
  class: "cn-activity-tab__event-icon",
77871
77871
  "aria-hidden": "true"
77872
77872
  };
@@ -78123,14 +78123,14 @@ function render$7c(_ctx, _cache, $props, $setup, $data, $options) {
78123
78123
  ]))
78124
78124
  : ($options.isBoard)
78125
78125
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_40$a, [
78126
- vue$1.createElementVNode("ol", _hoisted_41$7, [
78126
+ vue$1.createElementVNode("ol", _hoisted_41$8, [
78127
78127
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($options.visibleEntries, (entry) => {
78128
78128
  return (vue$1.openBlock(), vue$1.createElementBlock("li", {
78129
78129
  key: $options.entryKey(entry),
78130
78130
  class: vue$1.normalizeClass(["cn-activity-tab__event", `cn-activity-tab__event--${entry.kind || 'activity'}`]),
78131
78131
  "data-testid": "cn-activity-event"
78132
78132
  }, [
78133
- vue$1.createElementVNode("span", _hoisted_42$7, [
78133
+ vue$1.createElementVNode("span", _hoisted_42$8, [
78134
78134
  (vue$1.openBlock(), vue$1.createBlock(vue$1.resolveDynamicComponent($options.iconFor(entry)), { size: 18 }))
78135
78135
  ]),
78136
78136
  vue$1.createElementVNode("div", _hoisted_43$6, [
@@ -100099,11 +100099,11 @@ const _hoisted_37$b = { class: "cn-files-browser__col-icon" };
100099
100099
  const _hoisted_38$b = ["src", "onError"];
100100
100100
  const _hoisted_39$9 = ["src"];
100101
100101
  const _hoisted_40$9 = ["data-testid"];
100102
- const _hoisted_41$6 = {
100102
+ const _hoisted_41$7 = {
100103
100103
  key: 0,
100104
100104
  class: "cn-files-browser__name"
100105
100105
  };
100106
- const _hoisted_42$6 = {
100106
+ const _hoisted_42$7 = {
100107
100107
  key: 1,
100108
100108
  class: "cn-files-browser__name-secondary",
100109
100109
  "data-testid": "cn-files-browser-name-secondary"
@@ -100692,10 +100692,10 @@ function render$6v(_ctx, _cache, $props, $setup, $data, $options) {
100692
100692
  "data-testid": `cn-files-browser-cell-${column.key}`
100693
100693
  }, [
100694
100694
  (column.key === 'name')
100695
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_41$6, vue$1.toDisplayString(node.basename), 1 /* TEXT */))
100695
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_41$7, vue$1.toDisplayString(node.basename), 1 /* TEXT */))
100696
100696
  : vue$1.createCommentVNode("v-if", true),
100697
100697
  (column.key === 'name' && $options.nameSecondaryOf(node))
100698
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_42$6, vue$1.toDisplayString($options.nameSecondaryOf(node)), 1 /* TEXT */))
100698
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_42$7, vue$1.toDisplayString($options.nameSecondaryOf(node)), 1 /* TEXT */))
100699
100699
  : (column.key === 'size')
100700
100700
  ? (vue$1.openBlock(), vue$1.createElementBlock(vue$1.Fragment, { key: 2 }, [
100701
100701
  vue$1.createTextVNode(vue$1.toDisplayString($options.isFolder(node) ? '' : $options.formatSize(node.size)), 1 /* TEXT */)
@@ -135520,11 +135520,11 @@ const _hoisted_40$8 = {
135520
135520
  key: 18,
135521
135521
  class: "cn-form-dialog__property-source-wrapper"
135522
135522
  };
135523
- const _hoisted_41$5 = {
135523
+ const _hoisted_41$6 = {
135524
135524
  key: 19,
135525
135525
  class: "cn-form-dialog__icon-wrapper"
135526
135526
  };
135527
- const _hoisted_42$5 = ["for"];
135527
+ const _hoisted_42$6 = ["for"];
135528
135528
  const _hoisted_43$4 = {
135529
135529
  key: 21,
135530
135530
  class: "cn-form-dialog__assigned",
@@ -136486,13 +136486,13 @@ function render$5H(_ctx, _cache, $props, $setup, $data, $options) {
136486
136486
  }, null, 8 /* PROPS */, ["id", "text", "more", "help", "label", "error"])
136487
136487
  ]))
136488
136488
  : (field.widget === 'icon')
136489
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_41$5, [
136489
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_41$6, [
136490
136490
  (!$options.showsOuterLabel(field))
136491
136491
  ? (vue$1.openBlock(), vue$1.createElementBlock("label", {
136492
136492
  key: 0,
136493
136493
  for: 'cn-form-' + field.key,
136494
136494
  class: "cn-form-dialog__label"
136495
- }, vue$1.toDisplayString(field.label) + vue$1.toDisplayString($options.requiredSuffix(field)), 9 /* TEXT, PROPS */, _hoisted_42$5))
136495
+ }, vue$1.toDisplayString(field.label) + vue$1.toDisplayString($options.requiredSuffix(field)), 9 /* TEXT, PROPS */, _hoisted_42$6))
136496
136496
  : vue$1.createCommentVNode("v-if", true),
136497
136497
  vue$1.createVNode(_component_CnIconBrowser, {
136498
136498
  value: $data.formData[field.key] != null ? String($data.formData[field.key]) : null,
@@ -144459,8 +144459,8 @@ const _hoisted_37$9 = {
144459
144459
  const _hoisted_38$9 = { class: "cn-related-objects-widget__group-title" };
144460
144460
  const _hoisted_39$7 = { class: "cn-related-objects-widget__count" };
144461
144461
  const _hoisted_40$7 = { class: "cn-related-objects-widget__list" };
144462
- const _hoisted_41$4 = ["onClick", "onKeydown"];
144463
- const _hoisted_42$4 = { class: "cn-related-objects-widget__label" };
144462
+ const _hoisted_41$5 = ["onClick", "onKeydown"];
144463
+ const _hoisted_42$5 = { class: "cn-related-objects-widget__label" };
144464
144464
  const _hoisted_43$3 = {
144465
144465
  key: 0,
144466
144466
  class: "cn-related-objects-widget__meta"
@@ -144751,11 +144751,11 @@ function render$5z(_ctx, _cache, $props, $setup, $data, $options) {
144751
144751
  class: "cn-related-objects-widget__icon",
144752
144752
  size: 20
144753
144753
  }),
144754
- vue$1.createElementVNode("span", _hoisted_42$4, vue$1.toDisplayString(item.label), 1 /* TEXT */),
144754
+ vue$1.createElementVNode("span", _hoisted_42$5, vue$1.toDisplayString(item.label), 1 /* TEXT */),
144755
144755
  (item.meta)
144756
144756
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_43$3, vue$1.toDisplayString(item.meta), 1 /* TEXT */))
144757
144757
  : vue$1.createCommentVNode("v-if", true)
144758
- ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_41$4))
144758
+ ], 40 /* PROPS, NEED_HYDRATION */, _hoisted_41$5))
144759
144759
  }), 128 /* KEYED_FRAGMENT */))
144760
144760
  ])
144761
144761
  ]))
@@ -146124,15 +146124,18 @@ function schemaSlug(schema) {
146124
146124
  * it: three case indexes share their views, the organisations index does
146125
146125
  * not. `savedViewsScope` on a page overrides that, for pages that should
146126
146126
  * share views although they read different sources, or keep them apart
146127
- * although they read the same one.
146127
+ * although they read the same one. A page over a named source
146128
+ * (`entitySource`) and no schema shares its views with the pages over that
146129
+ * source.
146128
146130
  *
146129
146131
  * @param {object} page The page.
146130
146132
  * @param {string} [page.scope] The explicit `savedViewsScope`, when set.
146131
146133
  * @param {string} [page.register] The page's register.
146132
146134
  * @param {object|string} [page.schema] The page's schema, slug or object.
146135
+ * @param {string} [page.source] The page's `entitySource`, when it reads one.
146133
146136
  * @return {string} The scope key, or the empty string for a page with no source.
146134
146137
  */
146135
- function savedViewScope({ scope, register, schema } = {}) {
146138
+ function savedViewScope({ scope, register, schema, source } = {}) {
146136
146139
  if (typeof scope === 'string' && scope !== '') {
146137
146140
  return scope
146138
146141
  }
@@ -146140,9 +146143,43 @@ function savedViewScope({ scope, register, schema } = {}) {
146140
146143
  if (typeof register === 'string' && register !== '' && slug !== '') {
146141
146144
  return `${register}/${slug}`
146142
146145
  }
146146
+ if (typeof source === 'string' && source !== '') {
146147
+ return `source:${source}`
146148
+ }
146143
146149
  return ''
146144
146150
  }
146145
146151
 
146152
+ /**
146153
+ * Whether an index page offers saved views in its sidebar.
146154
+ *
146155
+ * `allowSavedViews` decides when it is set. Unset, every index page that has
146156
+ * a sidebar and a source a view can be scoped to (a register and schema, a
146157
+ * named source, or `savedViewsScope`) offers them, so managing views is
146158
+ * there on every list without each page opting in.
146159
+ *
146160
+ * @param {object} config The page's index config, or CnIndexPage's props.
146161
+ * @param {boolean|null} [config.allowSavedViews] The explicit choice, when made.
146162
+ * @param {object} [config.sidebar] The sidebar config.
146163
+ * @param {string} [config.savedViewsScope] The explicit scope.
146164
+ * @param {string} [config.register] The register.
146165
+ * @param {object|string} [config.schema] The schema.
146166
+ * @param {string} [config.entitySource] The named source.
146167
+ * @return {boolean}
146168
+ */
146169
+ function pageOffersSavedViews(config) {
146170
+ if (!config || typeof config !== 'object') {
146171
+ return false
146172
+ }
146173
+ if (typeof config.allowSavedViews === 'boolean') {
146174
+ return config.allowSavedViews
146175
+ }
146176
+ const sidebar = config.sidebar;
146177
+ if (!sidebar || typeof sidebar !== 'object' || sidebar.enabled !== true || sidebar.show === false) {
146178
+ return false
146179
+ }
146180
+ return savedViewScope({ scope: config.savedViewsScope, register: config.register, schema: config.schema, source: config.entitySource }) !== ''
146181
+ }
146182
+
146146
146183
  /**
146147
146184
  * Whether a saved view belongs on a page.
146148
146185
  *
@@ -283389,12 +283426,12 @@ const _hoisted_37$7 = {
283389
283426
  const _hoisted_38$7 = { class: "cn-board-view__move-label" };
283390
283427
  const _hoisted_39$6 = ["data-card-id", "value", "onChange"];
283391
283428
  const _hoisted_40$6 = ["value"];
283392
- const _hoisted_41$3 = {
283429
+ const _hoisted_41$4 = {
283393
283430
  key: 4,
283394
283431
  class: "cn-board-view__empty",
283395
283432
  "data-testid": "cn-board-column-empty"
283396
283433
  };
283397
- const _hoisted_42$3 = ["onClick"];
283434
+ const _hoisted_42$4 = ["onClick"];
283398
283435
  const _hoisted_43$2 = {
283399
283436
  key: 2,
283400
283437
  class: "cn-board-view__refusal",
@@ -283691,7 +283728,7 @@ function render$2q(_ctx, _cache, $props, $setup, $data, $options) {
283691
283728
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_16$B))
283692
283729
  }), 128 /* KEYED_FRAGMENT */))
283693
283730
  ], 8 /* PROPS */, _hoisted_15$E))
283694
- : (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_41$3, vue$1.toDisplayString($options.emptyColumnText), 1 /* TEXT */)),
283731
+ : (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_41$4, vue$1.toDisplayString($options.emptyColumnText), 1 /* TEXT */)),
283695
283732
  ($options.hiddenCount(lane, column) > 0)
283696
283733
  ? (vue$1.openBlock(), vue$1.createElementBlock("button", {
283697
283734
  key: 5,
@@ -283699,7 +283736,7 @@ function render$2q(_ctx, _cache, $props, $setup, $data, $options) {
283699
283736
  class: "cn-board-view__show-more",
283700
283737
  "data-testid": "cn-board-show-more",
283701
283738
  onClick: $event => ($options.showMore(lane, column))
283702
- }, vue$1.toDisplayString($options.showMoreLabel($options.hiddenCount(lane, column))), 9 /* TEXT, PROPS */, _hoisted_42$3))
283739
+ }, vue$1.toDisplayString($options.showMoreLabel($options.hiddenCount(lane, column))), 9 /* TEXT, PROPS */, _hoisted_42$4))
283703
283740
  : vue$1.createCommentVNode("v-if", true)
283704
283741
  ], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_5$1C))
283705
283742
  }), 128 /* KEYED_FRAGMENT */))
@@ -304608,7 +304645,7 @@ function render$25(_ctx, _cache, $props, $setup, $data, $options) {
304608
304645
  ? (vue$1.openBlock(), vue$1.createBlock(_component_NcAppSidebarTab, {
304609
304646
  key: 0,
304610
304647
  id: "filters-tab",
304611
- name: $options.t('nextcloud-vue', 'Filters'),
304648
+ name: $options.t('nextcloud-vue', 'Views'),
304612
304649
  order: 3
304613
304650
  }, {
304614
304651
  icon: vue$1.withCtx(() => [
@@ -309748,11 +309785,22 @@ function declaredFilterFields(props) {
309748
309785
  * @return {object} The `{ fieldKey: values }` map, empty when the link carries none.
309749
309786
  */
309750
309787
  function namedFiltersFromRoute(instance, props) {
309788
+ const route = instance && instance.proxy && instance.proxy.$route;
309789
+ return namedFiltersFromQuery((route && route.query) || {}, props)
309790
+ }
309791
+
309792
+ /**
309793
+ * The named-source filters a query carries, as `namedFiltersFromRoute` reads them.
309794
+ *
309795
+ * @param {object} query The route query.
309796
+ * @param {object} props The CnIndexPage props.
309797
+ *
309798
+ * @return {object} The `{ fieldKey: values }` map.
309799
+ */
309800
+ function namedFiltersFromQuery(query, props) {
309751
309801
  if (!props.entitySource) {
309752
309802
  return {}
309753
309803
  }
309754
- const route = instance && instance.proxy && instance.proxy.$route;
309755
- const query = (route && route.query) || {};
309756
309804
  const properties = declaredFilterFields(props);
309757
309805
  const out = {};
309758
309806
 
@@ -311195,9 +311243,11 @@ var script$1W = {
311195
311243
  },
311196
311244
 
311197
311245
  /**
311198
- * Opt-in flag for the saved-views control (saved-views-ui) rendered
311199
- * in the toolbar. Defaults to `false` — an app must explicitly
311200
- * enable it per page. When `true`, a Views dropdown lists the
311246
+ * Saved views (saved-views-ui). Unset, the sidebar's Views tab is on
311247
+ * for every page with a sidebar and a source a view can be scoped to
311248
+ * (register and schema, `entitySource` or `savedViewsScope`); `false`
311249
+ * turns it off. `true` also forces the sidebar and adds the toolbar
311250
+ * control, where a Views dropdown lists the
311201
311251
  * current user's OpenRegister saved-search views
311202
311252
  * (`GET /apps/openregister/api/views`); applying one writes its
311203
311253
  * stored filters/search/sort into the route query (reusing the
@@ -311209,7 +311259,7 @@ var script$1W = {
311209
311259
  */
311210
311260
  allowSavedViews: {
311211
311261
  type: Boolean,
311212
- default: false,
311262
+ default: null,
311213
311263
  },
311214
311264
 
311215
311265
  /**
@@ -313771,7 +313821,7 @@ var script$1W = {
313771
313821
  * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-6
313772
313822
  */
313773
313823
  savedViewsForSidebar() {
313774
- if (!this.allowSavedViews) {
313824
+ if (!this.savedViewsOffered) {
313775
313825
  return null
313776
313826
  }
313777
313827
  return {
@@ -314912,7 +314962,16 @@ var script$1W = {
314912
314962
  * @return {{ scope: string, register: string, schema: object|string|null }} The page's source.
314913
314963
  */
314914
314964
  savedViewsPage() {
314915
- return { scope: this.savedViewsScope, register: this.register, schema: this.schema }
314965
+ return { scope: this.savedViewsScope, register: this.register, schema: this.schema, source: this.entitySource }
314966
+ },
314967
+
314968
+ /**
314969
+ * Whether this page offers saved views in its sidebar.
314970
+ *
314971
+ * @return {boolean}
314972
+ */
314973
+ savedViewsOffered() {
314974
+ return pageOffersSavedViews(this)
314916
314975
  },
314917
314976
 
314918
314977
  /**
@@ -316485,7 +316544,7 @@ var script$1W = {
316485
316544
  created() {
316486
316545
  this.applyViewModeFromRoute();
316487
316546
  this.pushAiContext();
316488
- if (this.allowSavedViews) {
316547
+ if (this.savedViewsOffered) {
316489
316548
  this.fetchSavedViews();
316490
316549
  }
316491
316550
  this.selfActions = createSelfModeActions({
@@ -319593,8 +319652,8 @@ var script$1W = {
319593
319652
 
319594
319653
  /**
319595
319654
  * Fetch the current user's saved views (own + public) from
319596
- * OpenRegister's views API. Called from created() when
319597
- * `allowSavedViews` is enabled.
319655
+ * OpenRegister's views API. Called from created() when the page
319656
+ * offers saved views.
319598
319657
  */
319599
319658
  async fetchSavedViews() {
319600
319659
  this.savedViewsLoading = true;
@@ -319664,6 +319723,9 @@ var script$1W = {
319664
319723
  query.savedView = this.appliedSavedViewId;
319665
319724
  }
319666
319725
  const nav = this.$router.replace({ query });
319726
+ if (this.isNamedSource) {
319727
+ this.namedActiveFilters = namedFiltersFromQuery(query, this);
319728
+ }
319667
319729
  // Swallow the duplicate-navigation rejection (Vue Router 3)
319668
319730
  // when the applied view matches the current query.
319669
319731
  if (nav && typeof nav.catch === 'function') {
@@ -320609,8 +320671,8 @@ const _hoisted_39$5 = {
320609
320671
  "aria-hidden": "true"
320610
320672
  };
320611
320673
  const _hoisted_40$5 = { class: "cn-index-page__map-text" };
320612
- const _hoisted_41$2 = ["onClick"];
320613
- const _hoisted_42$2 = {
320674
+ const _hoisted_41$3 = ["onClick"];
320675
+ const _hoisted_42$3 = {
320614
320676
  key: 0,
320615
320677
  class: "cn-index-page__map-sub"
320616
320678
  };
@@ -321846,9 +321908,9 @@ function render$1V(_ctx, _cache, $props, $setup, $data, $options) {
321846
321908
  type: "button",
321847
321909
  class: "cn-index-page__map-title",
321848
321910
  onClick: $event => ($options.onRowClick(item.row))
321849
- }, vue$1.toDisplayString(item.title), 9 /* TEXT, PROPS */, _hoisted_41$2),
321911
+ }, vue$1.toDisplayString(item.title), 9 /* TEXT, PROPS */, _hoisted_41$3),
321850
321912
  (item.sub)
321851
- ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_42$2, vue$1.toDisplayString(item.sub), 1 /* TEXT */))
321913
+ ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_42$3, vue$1.toDisplayString(item.sub), 1 /* TEXT */))
321852
321914
  : vue$1.createCommentVNode("v-if", true),
321853
321915
  (item.pills.length > 0 || item.due)
321854
321916
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_43$1, [
@@ -326770,11 +326832,11 @@ const _hoisted_37$4 = { class: "cn-register-mapping__type-name" };
326770
326832
  const _hoisted_38$4 = { class: "cn-register-mapping__type-schema" };
326771
326833
  const _hoisted_39$3 = { class: "cn-register-mapping__type-status" };
326772
326834
  const _hoisted_40$3 = { class: "cn-register-mapping__type-chevron" };
326773
- const _hoisted_41$1 = {
326835
+ const _hoisted_41$2 = {
326774
326836
  key: 0,
326775
326837
  class: "cn-register-mapping__type-detail"
326776
326838
  };
326777
- const _hoisted_42$1 = {
326839
+ const _hoisted_42$2 = {
326778
326840
  key: 0,
326779
326841
  class: "cn-register-mapping__type-description"
326780
326842
  };
@@ -327083,9 +327145,9 @@ function render$1O(_ctx, _cache, $props, $setup, $data, $options) {
327083
327145
  vue$1.createVNode(vue$1.Transition, { name: "slide" }, {
327084
327146
  default: vue$1.withCtx(() => [
327085
327147
  ($options.isExpanded(groupIdx, type.slug))
327086
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_41$1, [
327148
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_41$2, [
327087
327149
  (type.description)
327088
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_42$1, vue$1.toDisplayString(type.description), 1 /* TEXT */))
327150
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_42$2, vue$1.toDisplayString(type.description), 1 /* TEXT */))
327089
327151
  : vue$1.createCommentVNode("v-if", true),
327090
327152
  vue$1.createVNode(_component_NcSelect, {
327091
327153
  modelValue: $options.selectedSchema(groupIdx, type),
@@ -338365,6 +338427,26 @@ var script$1y = {
338365
338427
  && this.register !== '' && this.schema !== '' && this.objectId !== ''
338366
338428
  },
338367
338429
 
338430
+ /**
338431
+ * The props of the Follow control, wherever the header draws it.
338432
+ *
338433
+ * @return {object} The CnFollowToggle props.
338434
+ * @spec openspec/changes/board-follow-row/specs/board-follow-row/spec.md#requirement-the-board-follow-control-sits-under-the-breadcrumb
338435
+ */
338436
+ followToggleProps() {
338437
+ const self = this.resolvedSelf;
338438
+ return {
338439
+ register: this.register,
338440
+ schema: this.schema,
338441
+ objectId: String(this.objectId),
338442
+ watching: self.watching === true,
338443
+ notify: typeof self.watchNotify === 'boolean' ? self.watchNotify : null,
338444
+ watcherCount: typeof self.watcherCount === 'number' ? self.watcherCount : null,
338445
+ canManage: !!(self.can && self.can.manage === true),
338446
+ notifies: this.followNotifies,
338447
+ }
338448
+ },
338449
+
338368
338450
  /**
338369
338451
  * The `_extend[]` values of the object read: the page's own, plus
338370
338452
  * `@self.can` while the Follow toggle can render (OpenRegister returns
@@ -340985,84 +341067,93 @@ const _hoisted_15$r = {
340985
341067
  };
340986
341068
  const _hoisted_16$p = {
340987
341069
  key: 1,
341070
+ class: "cn-detail-page__header-row3",
341071
+ "data-testid": "cn-detail-page-header-row3"
341072
+ };
341073
+ const _hoisted_17$l = {
341074
+ class: "cn-detail-page__interactions",
341075
+ "data-testid": "cn-detail-page-interactions"
341076
+ };
341077
+ const _hoisted_18$i = {
341078
+ key: 2,
340988
341079
  class: "cn-detail-page__header-widget",
340989
341080
  "data-testid": "cn-detail-page-header-widget"
340990
341081
  };
340991
- const _hoisted_17$l = {
341082
+ const _hoisted_19$g = {
340992
341083
  key: 4,
340993
341084
  class: "cn-detail-page__lock-refusal",
340994
341085
  role: "alert",
340995
341086
  "data-testid": "cn-detail-page-lock-refusal"
340996
341087
  };
340997
- const _hoisted_18$i = {
341088
+ const _hoisted_20$e = {
340998
341089
  key: 6,
340999
341090
  class: "cn-detail-page__not-found",
341000
341091
  "data-testid": "cn-detail-page-not-found"
341001
341092
  };
341002
- const _hoisted_19$g = {
341093
+ const _hoisted_21$d = {
341003
341094
  key: 7,
341004
341095
  class: "cn-detail-page__loading"
341005
341096
  };
341006
- const _hoisted_20$e = {
341097
+ const _hoisted_22$d = {
341007
341098
  key: 8,
341008
341099
  class: "cn-detail-page__error"
341009
341100
  };
341010
- const _hoisted_21$d = {
341101
+ const _hoisted_23$b = {
341011
341102
  key: 9,
341012
341103
  class: "cn-detail-page__empty"
341013
341104
  };
341014
- const _hoisted_22$d = {
341105
+ const _hoisted_24$b = {
341015
341106
  key: 10,
341016
341107
  class: "cn-detail-page__body"
341017
341108
  };
341018
- const _hoisted_23$b = {
341109
+ const _hoisted_25$9 = {
341019
341110
  key: 0,
341020
341111
  class: "cn-detail-page__before-body"
341021
341112
  };
341022
- const _hoisted_24$b = ["aria-labelledby"];
341023
- const _hoisted_25$9 = {
341113
+ const _hoisted_26$7 = ["aria-labelledby"];
341114
+ const _hoisted_27$4 = {
341024
341115
  key: 0,
341025
341116
  class: "cn-detail-page__widget-edit"
341026
341117
  };
341027
- const _hoisted_26$7 = ["id"];
341028
- const _hoisted_27$4 = ["id", "aria-label"];
341029
- const _hoisted_28$4 = {
341118
+ const _hoisted_28$4 = ["id"];
341119
+ const _hoisted_29$4 = ["id", "aria-label"];
341120
+ const _hoisted_30$4 = {
341030
341121
  key: 3,
341031
341122
  class: "cn-detail-page__stats"
341032
341123
  };
341033
- const _hoisted_29$4 = {
341124
+ const _hoisted_31$3 = {
341034
341125
  key: 0,
341035
341126
  class: "cn-detail-page__section-title"
341036
341127
  };
341037
- const _hoisted_30$4 = { class: "cn-detail-page__stats-table" };
341038
- const _hoisted_31$3 = { key: 0 };
341039
- const _hoisted_32$3 = {
341128
+ const _hoisted_32$3 = { class: "cn-detail-page__stats-table" };
341129
+ const _hoisted_33$3 = { key: 0 };
341130
+ const _hoisted_34$3 = {
341040
341131
  key: 4,
341041
341132
  class: "cn-detail-page__content"
341042
341133
  };
341043
- const _hoisted_33$3 = {
341134
+ const _hoisted_35$3 = {
341044
341135
  key: 0,
341045
341136
  class: "cn-detail-page__content"
341046
341137
  };
341047
- const _hoisted_34$3 = {
341138
+ const _hoisted_36$3 = {
341048
341139
  key: 1,
341049
341140
  class: "cn-detail-page__sections"
341050
341141
  };
341051
- const _hoisted_35$3 = {
341142
+ const _hoisted_37$3 = {
341052
341143
  key: 6,
341053
341144
  class: "cn-detail-page__related-collections"
341054
341145
  };
341055
- const _hoisted_36$3 = {
341146
+ const _hoisted_38$3 = {
341056
341147
  key: 0,
341057
341148
  class: "cn-detail-page__relation-links"
341058
341149
  };
341059
- const _hoisted_37$3 = {
341150
+ const _hoisted_39$2 = {
341060
341151
  key: 9,
341061
341152
  class: "cn-detail-page__footer"
341062
341153
  };
341063
- const _hoisted_38$3 = ["aria-label"];
341064
- const _hoisted_39$2 = ["data-testid"];
341065
- const _hoisted_40$2 = {
341154
+ const _hoisted_40$2 = ["aria-label"];
341155
+ const _hoisted_41$1 = ["data-testid"];
341156
+ const _hoisted_42$1 = {
341066
341157
  key: 0,
341067
341158
  class: "cn-detail-page__side-identifier",
341068
341159
  "data-testid": "cn-detail-page-side-identifier"
@@ -341192,18 +341283,9 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341192
341283
  _: 1 /* STABLE */
341193
341284
  }, 8 /* PROPS */, ["title"]))
341194
341285
  : vue$1.createCommentVNode("v-if", true),
341195
- ($options.showFollowToggle)
341286
+ ($options.showFollowToggle && !$options.isBoard)
341196
341287
  ? (vue$1.openBlock(), vue$1.createElementBlock("span", _hoisted_7$U, [
341197
- vue$1.createVNode(_component_CnFollowToggle, {
341198
- register: $props.register,
341199
- schema: $props.schema,
341200
- objectId: String($props.objectId),
341201
- watching: $options.resolvedSelf.watching === true,
341202
- notify: typeof $options.resolvedSelf.watchNotify === 'boolean' ? $options.resolvedSelf.watchNotify : null,
341203
- watcherCount: typeof $options.resolvedSelf.watcherCount === 'number' ? $options.resolvedSelf.watcherCount : null,
341204
- canManage: !!($options.resolvedSelf.can && $options.resolvedSelf.can.manage === true),
341205
- notifies: $props.followNotifies
341206
- }, null, 8 /* PROPS */, ["register", "schema", "objectId", "watching", "notify", "watcherCount", "canManage", "notifies"])
341288
+ vue$1.createVNode(_component_CnFollowToggle, vue$1.normalizeProps(vue$1.guardReactiveProps($options.followToggleProps)), null, 16 /* FULL_PROPS */)
341207
341289
  ]))
341208
341290
  : vue$1.createCommentVNode("v-if", true)
341209
341291
  ]))
@@ -341615,8 +341697,15 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341615
341697
  : vue$1.createCommentVNode("v-if", true)
341616
341698
  ]))
341617
341699
  : vue$1.createCommentVNode("v-if", true),
341618
- ($options.headerWidgetDef !== null)
341700
+ ($options.isBoard && $options.showFollowToggle)
341619
341701
  ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_16$p, [
341702
+ vue$1.createElementVNode("span", _hoisted_17$l, [
341703
+ vue$1.createVNode(_component_CnFollowToggle, vue$1.normalizeProps(vue$1.guardReactiveProps($options.followToggleProps)), null, 16 /* FULL_PROPS */)
341704
+ ])
341705
+ ]))
341706
+ : vue$1.createCommentVNode("v-if", true),
341707
+ ($options.headerWidgetDef !== null)
341708
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_18$i, [
341620
341709
  vue$1.renderSlot(_ctx.$slots, `widget-${$options.headerWidgetDef.id}`, {
341621
341710
  item: { id: $options.headerWidgetDef.id, widgetId: $options.headerWidgetDef.id },
341622
341711
  widget: $options.headerWidgetDef,
@@ -341662,7 +341751,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341662
341751
  }, null, 8 /* PROPS */, ["lockedBy", "lockedByMe", "expiresAt", "unlocking", "onUnlock"]))
341663
341752
  : vue$1.createCommentVNode("v-if", true),
341664
341753
  ($data.editLockRefusal)
341665
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_17$l, vue$1.toDisplayString($data.editLockRefusal), 1 /* TEXT */))
341754
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_19$g, vue$1.toDisplayString($data.editLockRefusal), 1 /* TEXT */))
341666
341755
  : vue$1.createCommentVNode("v-if", true),
341667
341756
  ($options.showsNextStepCard)
341668
341757
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnNextStepCard, {
@@ -341700,7 +341789,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341700
341789
  ]), 1032 /* PROPS, DYNAMIC_SLOTS */, ["title", "items", "after"]))
341701
341790
  : vue$1.createCommentVNode("v-if", true),
341702
341791
  ($data.objectNotFound)
341703
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_18$i, [
341792
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_20$e, [
341704
341793
  vue$1.renderSlot(_ctx.$slots, "not-found", { target: $options.notFoundTarget }, () => [
341705
341794
  vue$1.createVNode(_component_NcEmptyContent, {
341706
341795
  name: $options.notFoundLabels.name,
@@ -341736,12 +341825,12 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341736
341825
  ])
341737
341826
  ]))
341738
341827
  : ($options.showLoadingState)
341739
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_19$g, [
341828
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_21$d, [
341740
341829
  vue$1.createVNode(_component_NcLoadingIcon, { size: 32 }),
341741
341830
  vue$1.createElementVNode("span", null, vue$1.toDisplayString($props.loadingLabel), 1 /* TEXT */)
341742
341831
  ]))
341743
341832
  : ($props.error)
341744
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_20$e, [
341833
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_22$d, [
341745
341834
  vue$1.renderSlot(_ctx.$slots, "error", {}, () => [
341746
341835
  vue$1.createVNode(_component_NcEmptyContent, { name: $props.errorMessage }, {
341747
341836
  icon: vue$1.withCtx(() => [
@@ -341770,7 +341859,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341770
341859
  ])
341771
341860
  ]))
341772
341861
  : ($props.empty)
341773
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_21$d, [
341862
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_23$b, [
341774
341863
  vue$1.renderSlot(_ctx.$slots, "empty", {}, () => [
341775
341864
  vue$1.createVNode(_component_NcEmptyContent, { name: $props.emptyLabel }, {
341776
341865
  icon: vue$1.withCtx(() => [
@@ -341783,9 +341872,9 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341783
341872
  }, 8 /* PROPS */, ["name"])
341784
341873
  ])
341785
341874
  ]))
341786
- : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_22$d, [
341875
+ : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_24$b, [
341787
341876
  (_ctx.$slots['before-body'] || _ctx.$slots['before-body'])
341788
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_23$b, [
341877
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_25$9, [
341789
341878
  vue$1.renderSlot(_ctx.$slots, "before-body", {
341790
341879
  object: $options.resolvedObject,
341791
341880
  schema: $options.currentSchema,
@@ -341821,7 +341910,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341821
341910
  "aria-labelledby": $options.showGridTitle(item) ? `widget-title-${item.id}` : undefined
341822
341911
  }, [
341823
341912
  ($options.showsCog(item))
341824
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_25$9, [
341913
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_27$4, [
341825
341914
  vue$1.createVNode(_component_NcButton, {
341826
341915
  variant: "tertiary",
341827
341916
  "aria-label": _ctx.t('nextcloud-vue', 'Configure widget'),
@@ -341839,7 +341928,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341839
341928
  key: 1,
341840
341929
  id: `widget-title-${item.id}`,
341841
341930
  class: "cn-detail-page__widget-title"
341842
- }, vue$1.toDisplayString($options.gridTitle(item)), 9 /* TEXT, PROPS */, _hoisted_26$7))
341931
+ }, vue$1.toDisplayString($options.gridTitle(item)), 9 /* TEXT, PROPS */, _hoisted_28$4))
341843
341932
  : vue$1.createCommentVNode("v-if", true),
341844
341933
  vue$1.renderSlot(_ctx.$slots, `widget-${item.widgetId}`, {
341845
341934
  item: item,
@@ -341874,7 +341963,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341874
341963
  onSelectObject: $options.onRelatedObjectSelect
341875
341964
  }, null, 8 /* PROPS */, ["widget", "showCardTitle", "showActions", "objectId", "object", "objectType", "schemaObject", "register", "schema", "store", "surface", "integrationContext", "hideEmpty", "cnRegistry", "availableWidgets", "onGeoSaved", "onOpenIntegration", "onSelectObject"])
341876
341965
  ])
341877
- ], 10 /* CLASS, PROPS */, _hoisted_24$b)
341966
+ ], 10 /* CLASS, PROPS */, _hoisted_26$7)
341878
341967
  ]),
341879
341968
  _: 3 /* FORWARDED */
341880
341969
  }, 16 /* FULL_PROPS */, ["layout", "editable", "columnOpts", "onLayoutChange"]))
@@ -341894,18 +341983,18 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341894
341983
  ]),
341895
341984
  _: 1 /* STABLE */
341896
341985
  }, 8 /* PROPS */, ["description"])
341897
- ], 8 /* PROPS */, _hoisted_27$4))
341986
+ ], 8 /* PROPS */, _hoisted_29$4))
341898
341987
  : vue$1.createCommentVNode("v-if", true),
341899
341988
  ($options.hasStats)
341900
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_28$4, [
341989
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_30$4, [
341901
341990
  vue$1.renderSlot(_ctx.$slots, "stats-header", {}, () => [
341902
341991
  ($props.statsTitle)
341903
- ? (vue$1.openBlock(), vue$1.createElementBlock("h3", _hoisted_29$4, vue$1.toDisplayString($options.resolvedStatsTitle), 1 /* TEXT */))
341992
+ ? (vue$1.openBlock(), vue$1.createElementBlock("h3", _hoisted_31$3, vue$1.toDisplayString($options.resolvedStatsTitle), 1 /* TEXT */))
341904
341993
  : vue$1.createCommentVNode("v-if", true)
341905
341994
  ]),
341906
- vue$1.createElementVNode("table", _hoisted_30$4, [
341995
+ vue$1.createElementVNode("table", _hoisted_32$3, [
341907
341996
  ($props.statsColumns.length > 0)
341908
- ? (vue$1.openBlock(), vue$1.createElementBlock("thead", _hoisted_31$3, [
341997
+ ? (vue$1.openBlock(), vue$1.createElementBlock("thead", _hoisted_33$3, [
341909
341998
  vue$1.createElementVNode("tr", null, [
341910
341999
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($props.statsColumns, (col) => {
341911
342000
  return (vue$1.openBlock(), vue$1.createElementBlock("th", {
@@ -341936,14 +342025,14 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341936
342025
  ])
341937
342026
  ])
341938
342027
  ]))
341939
- : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_32$3, [
342028
+ : (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_34$3, [
341940
342029
  (!$options.hasBodyGrid)
341941
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_33$3, [
342030
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_35$3, [
341942
342031
  vue$1.renderSlot(_ctx.$slots, "default")
341943
342032
  ]))
341944
342033
  : vue$1.createCommentVNode("v-if", true),
341945
342034
  (_ctx.$slots.sections)
341946
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_34$3, [
342035
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_36$3, [
341947
342036
  vue$1.renderSlot(_ctx.$slots, "sections")
341948
342037
  ]))
341949
342038
  : vue$1.createCommentVNode("v-if", true)
@@ -341958,9 +342047,9 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
341958
342047
  }, null, 8 /* PROPS */, ["sections", "context"]))
341959
342048
  : vue$1.createCommentVNode("v-if", true),
341960
342049
  (($props.relatedCollections && $props.relatedCollections.length > 0) || ($props.relationLinks && $props.relationLinks.length > 0))
341961
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_35$3, [
342050
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_37$3, [
341962
342051
  ($props.relationLinks && $props.relationLinks.length > 0)
341963
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_36$3, [
342052
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_38$3, [
341964
342053
  (vue$1.openBlock(true), vue$1.createElementBlock(vue$1.Fragment, null, vue$1.renderList($props.relationLinks, (link, li) => {
341965
342054
  return (vue$1.openBlock(), vue$1.createBlock(_component_NcButton, {
341966
342055
  key: li,
@@ -342007,7 +342096,7 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
342007
342096
  }, null, 8 /* PROPS */, ["sections", "context"]))
342008
342097
  : vue$1.createCommentVNode("v-if", true),
342009
342098
  (_ctx.$slots.footer)
342010
- ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_37$3, [
342099
+ ? (vue$1.openBlock(), vue$1.createElementBlock("div", _hoisted_39$2, [
342011
342100
  vue$1.renderSlot(_ctx.$slots, "footer")
342012
342101
  ]))
342013
342102
  : vue$1.createCommentVNode("v-if", true)
@@ -342058,11 +342147,11 @@ function render$1x(_ctx, _cache, $props, $setup, $data, $options) {
342058
342147
  }, null, 8 /* PROPS */, ["widget", "showActions", "objectId", "object", "objectType", "schemaObject", "register", "schema", "store", "surface", "integrationContext", "hideEmpty", "cnRegistry", "availableWidgets", "onGeoSaved", "onOpenIntegration", "onSelectObject"])
342059
342148
  ]),
342060
342149
  ($options.isBoard && widget.id === $options.sideHistoryId && $options.identifierLine !== '')
342061
- ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_40$2, vue$1.toDisplayString($options.identifierLine), 1 /* TEXT */))
342150
+ ? (vue$1.openBlock(), vue$1.createElementBlock("p", _hoisted_42$1, vue$1.toDisplayString($options.identifierLine), 1 /* TEXT */))
342062
342151
  : vue$1.createCommentVNode("v-if", true)
342063
- ], 10 /* CLASS, PROPS */, _hoisted_39$2))
342152
+ ], 10 /* CLASS, PROPS */, _hoisted_41$1))
342064
342153
  }), 128 /* KEYED_FRAGMENT */))
342065
- ], 8 /* PROPS */, _hoisted_38$3))
342154
+ ], 8 /* PROPS */, _hoisted_40$2))
342066
342155
  : vue$1.createCommentVNode("v-if", true),
342067
342156
  ($data.showWidgetConfig)
342068
342157
  ? (vue$1.openBlock(), vue$1.createBlock(_component_CnWidgetStyleEditorModal, {
@@ -386656,7 +386745,7 @@ var script$j = {
386656
386745
  */
386657
386746
  offersSavedViews() {
386658
386747
  const pages = this.manifest && Array.isArray(this.manifest.pages) ? this.manifest.pages : [];
386659
- return pages.some((page) => page && page.config && page.config.allowSavedViews === true)
386748
+ return pages.some((page) => page && page.type === 'index' && pageOffersSavedViews(page.config))
386660
386749
  },
386661
386750
 
386662
386751
  /**