@conduction/nextcloud-vue 2.135.0 → 2.137.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.
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +2 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +65 -50
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue.js +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js +9 -0
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue2.js.map +1 -1
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js +4 -3
- package/dist/esm/components/CnAdminSettingsShell/CnAdminSettingsShell.vue3.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js +4 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +61 -28
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +6 -0
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js +9 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js +4 -11
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +32 -0
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +34 -26
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +24 -0
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -2
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +2 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +39 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +6 -5
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue.js +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +11 -0
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +10 -2
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +18 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +38 -23
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue.js +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +1 -0
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue.js +1 -1
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue2.js +14 -4
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue2.js.map +1 -1
- package/dist/esm/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue3.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js +10 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +29 -13
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js +3 -1
- package/dist/esm/components/CnTimelineWidget/dashboardRegistration.js.map +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue.js +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue3.js.map +1 -1
- package/dist/esm/composables/indexSources.js +69 -3
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/l10n/en.json.js +20 -20
- package/dist/esm/l10n/nl.json.js +21 -21
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +580 -324
- package/dist/esm/utils/contentHeaderLink.js +7 -1
- package/dist/esm/utils/contentHeaderLink.js.map +1 -1
- package/dist/esm/utils/savedViewMenu.js +4 -1
- package/dist/esm/utils/savedViewMenu.js.map +1 -1
- package/dist/esm/utils/savedViewSummary.js +11 -4
- package/dist/esm/utils/savedViewSummary.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +3 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +1159 -812
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +580 -324
- package/l10n/en.json +20 -20
- package/l10n/nl.json +21 -21
- package/package.json +1 -1
- package/src/components/CnActionDialog/CnActionDialog.vue +45 -4
- package/src/components/CnAdminSettingsShell/CnAdminSettingsShell.vue +13 -1
- package/src/components/CnAppNav/CnAppNav.vue +28 -3
- package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +15 -0
- package/src/components/CnAuditTrailWidget/CnAuditTrailWidget.vue +2 -10
- package/src/components/CnDataTable/CnDataTable.md +1 -0
- package/src/components/CnDataTable/CnDataTable.vue +38 -1
- package/src/components/CnDetailPage/CnDetailPage.md +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +26 -2
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +1 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +44 -6
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.md +1 -0
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +21 -0
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +38 -2
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +7 -0
- package/src/components/CnRetentionWidget/CnRetentionWidget.vue +13 -0
- package/src/components/CnSavedViewMenuSettings/CnSavedViewMenuSettings.vue +14 -4
- package/src/components/CnTimelineWidget/CnTimelineManage.vue +23 -0
- package/src/components/CnTimelineWidget/dashboardRegistration.js +3 -1
- package/src/components/CnWorkingCalendarWidget/CnWorkingCalendarWidget.vue +7 -0
- package/src/composables/indexSources.js +69 -3
- package/src/css/look-board-detail.css +57 -1
- package/src/css/look-board-index.css +76 -1
- package/src/css/look-board.css +51 -4
- package/src/css/table.css +5 -0
- package/src/schemas/app-manifest-v2.schema.json +4 -2
- package/src/utils/contentHeaderLink.js +7 -1
- package/src/utils/savedViewMenu.js +4 -1
- package/src/utils/savedViewSummary.js +11 -4
- package/src/utils/validateManifestV2.compiled.js +2 -2
- package/src/utils/widgetDispatch.js +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CnIndexPage.vue2.js","sources":["../../../../src/components/CnIndexPage/CnIndexPage.vue"],"sourcesContent":["<template>\n\t<div class=\"cn-index-page\"\n\t\t:class=\"[lookClass, { 'cn-index-page--with-side-panel': hasSidePanel, 'cn-index-page--quick-filters-toolbar': effectiveQuickFilterPlacement === 'toolbar' }]\"\n\t\tdata-testid=\"cn-index-page\"\n\t\t@keydown=\"onListKeydown\">\n\t\t<!-- Header — overridable via #header slot. CnPageHeader ALWAYS renders:\n\t\t with showTitle it is the full visual header (icon, title,\n\t\t description); without it, `visuallyHidden` clips everything but the\n\t\t <h1> out of the layout. The page therefore looks identical either\n\t\t way, but the <main> landmark always carries a heading — the sidebar\n\t\t title this component used to rely on lives outside <main>, so\n\t\t screen-reader users and \"skip to main content\" got an unlabelled\n\t\t region (WCAG 2.4.6 / 1.3.1). -->\n\t\t<slot\n\t\t\tname=\"header\"\n\t\t\t:title=\"shownTitle\"\n\t\t\t:description=\"headerDescription\"\n\t\t\t:icon=\"resolvedIcon\"\n\t\t\t:showTitle=\"showTitle\">\n\t\t\t<CnPageHeader\n\t\t\t\t:title=\"shownTitle\"\n\t\t\t\t:description=\"headerDescription\"\n\t\t\t\t:icon=\"showTitleIcon && !isBoardLook ? resolvedIcon : ''\"\n\t\t\t\t:breadcrumb=\"presented('breadcrumb')\"\n\t\t\t\t:meta=\"headerMetaText\"\n\t\t\t\t:visuallyHidden=\"!showTitle\">\n\t\t\t\t<!-- The board's header buttons (`headerButtons`), beside the\n\t\t\t\t title. Declaring them takes the Views and Actions menus\n\t\t\t\t (and the Add / Export controls a button takes over) out of\n\t\t\t\t the actions bar. -->\n\t\t\t\t<template v-if=\"headerButtonsShown || buildiqInHeader\" #extra>\n\t\t\t\t\t<div class=\"cn-index-page__header-buttons\" data-testid=\"cn-index-header-buttons\">\n\t\t\t\t\t\t<template v-for=\"button in (headerButtonsShown ? orderedHeaderButtons : [])\" :key=\"button.key\">\n\t\t\t\t\t\t\t<!-- The buildiq square (the in-app edit button), between the secondary buttons and the primary one. -->\n\t\t\t\t\t\t\t<CnBuildiqEditButton v-if=\"button.action === '__buildiq'\" />\n\t\t\t\t\t\t\t<!-- `actions-menu`: the page's header actions as one labelled menu. -->\n\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\tv-else-if=\"button.action === 'actions-menu'\"\n\t\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t\t:forceName=\"true\"\n\t\t\t\t\t\t\t\t:menuName=\"button.label\"\n\t\t\t\t\t\t\t\t:aria-label=\"button.label\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-button-${button.key}`\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<DotsHorizontal :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<!-- The menu's entries (`items` on the button; the page's header\n\t\t\t\t\t\t\t\t actions when it names none): a header action, a built-in by\n\t\t\t\t\t\t\t\t name, or a link (an entry with `href`, the documentation). -->\n\t\t\t\t\t\t\t\t<template v-for=\"entry in headerMenuEntries(button)\" :key=\"entry.key\">\n\t\t\t\t\t\t\t\t\t<!-- A group heading and a separator (`{ heading }` and\n\t\t\t\t\t\t\t\t\t `separator` in items), as the board's \"Ga naar\" and\n\t\t\t\t\t\t\t\t\t \"Selectie\" groups. -->\n\t\t\t\t\t\t\t\t\t<NcActionCaption\n\t\t\t\t\t\t\t\t\t\tv-if=\"entry.kind === 'heading'\"\n\t\t\t\t\t\t\t\t\t\tclass=\"cn-index-header-menu__heading\"\n\t\t\t\t\t\t\t\t\t\t:name=\"entry.label\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\" />\n\t\t\t\t\t\t\t\t\t<NcActionSeparator\n\t\t\t\t\t\t\t\t\t\tv-else-if=\"entry.kind === 'separator'\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\" />\n\t\t\t\t\t\t\t\t\t<NcActionLink\n\t\t\t\t\t\t\t\t\t\tv-else-if=\"entry.href\"\n\t\t\t\t\t\t\t\t\t\t:href=\"entry.href\"\n\t\t\t\t\t\t\t\t\t\t:target=\"entry.linkTarget || '_blank'\"\n\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\">\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"entry.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<CnIcon :name=\"entry.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ entry.label }}\n\t\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t\t\t<NcActionLink\n\t\t\t\t\t\t\t\t\t\tv-else-if=\"entry.link\"\n\t\t\t\t\t\t\t\t\t\t:href=\"entry.link.href\"\n\t\t\t\t\t\t\t\t\t\t:closeAfterClick=\"true\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\"\n\t\t\t\t\t\t\t\t\t\t@click=\"onHeaderMenuLinkClick(entry, $event)\">\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"entry.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<CnIcon :name=\"entry.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ entry.label }}\n\t\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t\t\t:disabled=\"entry.disabled\"\n\t\t\t\t\t\t\t\t\t\t:title=\"entry.title || null\"\n\t\t\t\t\t\t\t\t\t\t:closeAfterClick=\"true\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\"\n\t\t\t\t\t\t\t\t\t\t@click=\"entry.run()\">\n\t\t\t\t\t\t\t\t\t\t<!-- A built-in ships its own icon (`iconComponent`), so it\n\t\t\t\t\t\t\t\t\t\t never falls back to the \"?\" when the app has not\n\t\t\t\t\t\t\t\t\t\t registered that icon name. -->\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"entry.iconComponent || entry.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<component :is=\"entry.iconComponent\" v-if=\"entry.iconComponent\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t\t<CnIcon v-else :name=\"entry.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ entry.label }}\n\t\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t:variant=\"button.variant\"\n\t\t\t\t\t\t\t\t:href=\"button.link ? button.link.href : undefined\"\n\t\t\t\t\t\t\t\t:target=\"button.link ? button.link.target : undefined\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-button-${button.key}`\"\n\t\t\t\t\t\t\t\t@click=\"onHeaderButton(button)\">\n\t\t\t\t\t\t\t\t<template v-if=\"button.icon\" #icon>\n\t\t\t\t\t\t\t\t\t<CnIcon :name=\"button.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ button.label }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<CnBuildiqEditButton v-if=\"buildiqInHeader && !headerButtonsShown\" />\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</CnPageHeader>\n\t\t</slot>\n\n\t\t<!-- Optional content below header, above actions bar -->\n\t\t<div v-if=\"$slots['below-header']\" class=\"cn-index-page__below-header\">\n\t\t\t<slot name=\"below-header\" />\n\t\t</div>\n\n\t\t<!-- Page tabs a named source declares (`pageTabs()`): sibling lists\n\t\t of the same thing, such as a flow list and its runs this week.\n\t\t Links, not tabs: each one is its own page. -->\n\t\t<nav v-if=\"effectivePageTabs.length > 0\"\n\t\t\tclass=\"cn-index-page__page-tabs\"\n\t\t\t:aria-label=\"title || t('nextcloud-vue', 'Pages')\"\n\t\t\tdata-testid=\"cn-index-page-tabs\">\n\t\t\t<a v-for=\"tab in effectivePageTabs\"\n\t\t\t\t:key=\"tab.id || tab.to\"\n\t\t\t\tclass=\"cn-index-page__page-tab\"\n\t\t\t\t:class=\"{ 'cn-index-page__page-tab--active': isActivePageTab(tab) }\"\n\t\t\t\t:href=\"pageTabHref(tab)\"\n\t\t\t\t:aria-current=\"isActivePageTab(tab) ? 'page' : undefined\"\n\t\t\t\t:data-testid=\"`cn-index-page-tab-${tab.id || tab.to}`\"\n\t\t\t\t@click=\"onPageTabClick(tab, $event)\">\n\t\t\t\t{{ tab.label }}\n\t\t\t\t<span v-if=\"typeof tab.count === 'number'\" class=\"cn-index-page__page-tab-count\">{{ tab.count }}</span>\n\t\t\t</a>\n\t\t</nav>\n\n\t\t<!-- KPI tiles above the list (`statRow`) and cards beside it\n\t\t (`sidePanel`), as DqTeamwachtrij and PqContracten\n\t\t (screens-index-stat-row). -->\n\t\t<CnIndexPageWidgets\n\t\t\tv-if=\"statRow && statRow.length > 0\"\n\t\t\tclass=\"cn-index-page__stat-row\"\n\t\t\tvariant=\"stat-row\"\n\t\t\t:widgets=\"statRow\" />\n\t\t<CnIndexPageWidgets\n\t\t\tv-if=\"hasSidePanel\"\n\t\t\tclass=\"cn-index-page__side-panel\"\n\t\t\tvariant=\"side-panel\"\n\t\t\t:widgets=\"sidePanel\" />\n\n\t\t<!-- Actions bar -->\n\t\t<!-- `quickFilterPlacement: \"row\"`: the chips on a row of their own above\n\t\t the toolbar, wrapping onto more lines (DqTeamwachtrij). -->\n\t\t<div\n\t\t\tv-if=\"effectiveQuickFilterPlacement === 'row' && tabStripEntries && tabStripEntries.length > 0\"\n\t\t\tclass=\"cn-index-page__quick-filter-row\"\n\t\t\tdata-testid=\"cn-index-page-quick-filter-row\">\n\t\t\t<CnQuickFilterBar\n\t\t\t\tinline\n\t\t\t\t:tabs=\"tabStripEntries\"\n\t\t\t\t:mode=\"quickFilterMode\"\n\t\t\t\t:maxVisible=\"quickFilterMaxVisible\"\n\t\t\t\t:fit=\"false\"\n\t\t\t\t:multiple=\"quickFilterMultiple\"\n\t\t\t\t:activeIndex=\"activeQuickFilterIndex\"\n\t\t\t\t:selectedIndices=\"selectedQuickFilterIndices\"\n\t\t\t\t:counts=\"effectiveTabCounts\"\n\t\t\t\t@update:activeIndex=\"onQuickFilterChange\"\n\t\t\t\t@update:selectedIndices=\"onQuickFilterMultiChange\" />\n\t\t</div>\n\t\t<CnActionsBar\n\t\t\t:layout=\"isBoardLook ? 'board' : 'nextcloud'\"\n\t\t\t:activeFilterChips=\"activeFilterChips\"\n\t\t\t:showBuildiqButton=\"!buildiqInHeader\"\n\t\t\t:bulkNoun=\"boardBulkNoun\"\n\t\t\t:bulkHint=\"viewBulkBand && viewBulkBand.hint !== true ? '' : (bulkHint ? cnTranslate(bulkHint) : bulkHint)\"\n\t\t\t:bulkBandAlways=\"bulkBandIdleShown && !viewBulkBand\"\n\t\t\t:bulkLead=\"viewBulkBandLead\"\n\t\t\t:bulkCancel=\"Boolean(viewBulkBand && viewBulkBand.cancel === true)\"\n\t\t\t:pagination=\"effectivePagination\"\n\t\t\t:objectCount=\"effectiveObjects.length\"\n\t\t\t:selectable=\"selectable\"\n\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t:addLabel=\"resolvedAddLabel\"\n\t\t\t:addIcon=\"resolvedIcon\"\n\t\t\t:inlineActionCount=\"inlineActionCount\"\n\t\t\t:showMassImport=\"showMassImport\"\n\t\t\t:showMassExport=\"showMassExport\"\n\t\t\t:showMassCopy=\"showMassCopy && !viewBulkBand\"\n\t\t\t:showMassDelete=\"showMassDelete && !viewBulkBand\"\n\t\t\t:viewMode=\"currentViewMode\"\n\t\t\t:showViewToggle=\"showViewToggle\"\n\t\t\t:availableViewModes=\"effectiveToggleModes\"\n\t\t\t:disabledViewModes=\"viewSwitchDisabledModes\"\n\t\t\t:viewSwitch=\"isBoardLook ? presented('viewSwitch') : null\"\n\t\t\t:viewModeLinks=\"viewSwitchLinkTargets\"\n\t\t\t:cardsLabel=\"cardsLabel\"\n\t\t\t:tableLabel=\"tableLabel\"\n\t\t\t:listLabel=\"listLabel\"\n\t\t\t:cardsIcon=\"cardsIcon\"\n\t\t\t:tableIcon=\"tableIcon\"\n\t\t\t:showMap=\"showMapSegment\"\n\t\t\t:mapLabel=\"mapLabel\"\n\t\t\t:mapIcon=\"mapIcon\"\n\t\t\t:listIcon=\"listIcon\"\n\t\t\t:showSearch=\"search !== false && (inlineSearch || isBoardLook) && !sourceRefusal\"\n\t\t\t:searchPlacement=\"searchPlacement\"\n\t\t\t:searchValue=\"effectiveSearchValue\"\n\t\t\t:searchPlaceholder=\"shownSearchPlaceholder\"\n\t\t\t:showCountWithSearch=\"showCountWithSearch\"\n\t\t\t:refreshing=\"effectiveRefreshing\"\n\t\t\t:refreshDisabled=\"refreshDisabled\"\n\t\t\t:addDisabled=\"addDisabled\"\n\t\t\t:addTo=\"addLinkTo\"\n\t\t\t:showAdd=\"effectiveShowAdd && !headerButtonTakes('add')\"\n\t\t\t:showCount=\"showCount && !isBoardLook\"\n\t\t\t:showActionsMenu=\"actionsMenuShown\"\n\t\t\t:showSidebarToggle=\"hasSidebar\"\n\t\t\t:sidebarOpen=\"sidebarOpen\"\n\t\t\t:headerActions=\"mergedHeaderActions\"\n\t\t\t:bulkActions=\"viewBulkActions\"\n\t\t\t:documentationUrl=\"documentationUrl\"\n\t\t\t:documentationLabel=\"documentationLabel || undefined\"\n\t\t\t@add=\"onAddClick\"\n\t\t\t@clearSelection=\"onSelect([])\"\n\t\t\t@removeFilter=\"onRemoveActiveFilter\"\n\t\t\t@clearFilters=\"onClearFilters\"\n\t\t\t@toggleSidebar=\"sidebarOpen = !sidebarOpen\"\n\t\t\t@refresh=\"onRefreshEvent\"\n\t\t\t@headerAction=\"onHeaderAction\"\n\t\t\t@bulkAction=\"onBulkAction\"\n\t\t\t@showImport=\"showImportDialog = true\"\n\t\t\t@showExport=\"showExportDialog = true\"\n\t\t\t@showCopy=\"showMassCopyDialog = true\"\n\t\t\t@showDelete=\"showMassDeleteDialog = true\"\n\t\t\t@search=\"onSearchEvent\"\n\t\t\t@viewModeChange=\"onViewModeChange\">\n\t\t\t<template v-if=\"$slots['mass-actions']\" #mass-actions=\"{ count, selectedIds: ids }\">\n\t\t\t\t<slot name=\"mass-actions\" :count=\"count\" :selectedIds=\"ids\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"$slots['action-items']\" #action-items>\n\t\t\t\t<slot name=\"action-items\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"$slots['after-search'] || searchInFiles || boardControlsShown || relatedFieldFilters || sourceFacetControls.length > 0\" #after-search>\n\t\t\t\t<!-- The values an endpoint source counts in its answer\n\t\t\t\t (`sourceConfig.facets`), as pickers: \"Kanaal: alle\". -->\n\t\t\t\t<label\n\t\t\t\t\tv-for=\"facet in sourceFacetControls\"\n\t\t\t\t\t:key=\"`source-facet-${facet.field}`\"\n\t\t\t\t\tclass=\"cn-index-page__board-control\"\n\t\t\t\t\t:data-testid=\"`cn-source-facet-${facet.field}`\">\n\t\t\t\t\t<span class=\"cn-index-page__board-control-label\">{{ facet.label }}</span>\n\t\t\t\t\t<select\n\t\t\t\t\t\tclass=\"cn-index-page__board-select\"\n\t\t\t\t\t\t:value=\"facet.value\"\n\t\t\t\t\t\t@change=\"onSourceFacetChange(facet.field, $event.target.value)\">\n\t\t\t\t\t\t<option value=\"\">{{ facet.allLabel }}</option>\n\t\t\t\t\t\t<option\n\t\t\t\t\t\t\tv-for=\"option in facet.options\"\n\t\t\t\t\t\t\t:key=\"`source-facet-${facet.field}-${option.value}`\"\n\t\t\t\t\t\t\t:value=\"option.value\">\n\t\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t</select>\n\t\t\t\t</label>\n\t\t\t\t<!-- Board view controls, after the search (screens-board-reference-columns):\n\t\t\t\t the narrowing select (\"Case type:\"), the column switch (\"Columns:\n\t\t\t\t status | type | assignee\") and the board's hint sentence. -->\n\t\t\t\t<template v-if=\"boardControlsShown\">\n\t\t\t\t\t<label\n\t\t\t\t\t\tv-if=\"boardNarrow\"\n\t\t\t\t\t\tclass=\"cn-index-page__board-control\"\n\t\t\t\t\t\tdata-testid=\"cn-board-narrow\">\n\t\t\t\t\t\t<span class=\"cn-index-page__board-control-label\">{{ boardNarrowLabel }}</span>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclass=\"cn-index-page__board-select cn-index-page__board-select--fit\"\n\t\t\t\t\t\t\tdata-testid=\"cn-board-narrow-select\"\n\t\t\t\t\t\t\t:value=\"boardNarrowValue\"\n\t\t\t\t\t\t\t@change=\"onBoardNarrowChange($event.target.value)\">\n\t\t\t\t\t\t\t<option value=\"\">{{ boardNarrowAllLabel }}</option>\n\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\tv-for=\"option in boardNarrowOptions\"\n\t\t\t\t\t\t\t\t:key=\"`narrow-${option.value}`\"\n\t\t\t\t\t\t\t\t:value=\"option.value\">\n\t\t\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</label>\n\t\t\t\t\t<label\n\t\t\t\t\t\tv-if=\"boardColumnFields.length > 1\"\n\t\t\t\t\t\tclass=\"cn-index-page__board-control\"\n\t\t\t\t\t\tdata-testid=\"cn-board-column-switch\">\n\t\t\t\t\t\t<span class=\"cn-index-page__board-control-label\">{{ boardColumnSwitchLabel }}</span>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclass=\"cn-index-page__board-select cn-index-page__board-select--strong\"\n\t\t\t\t\t\t\tdata-testid=\"cn-board-column-switch-select\"\n\t\t\t\t\t\t\t:value=\"boardColumnField\"\n\t\t\t\t\t\t\t@change=\"onBoardColumnFieldChange($event.target.value)\">\n\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\tv-for=\"entry in boardColumnFields\"\n\t\t\t\t\t\t\t\t:key=\"`colfield-${entry.field}`\"\n\t\t\t\t\t\t\t\t:value=\"entry.field\">\n\t\t\t\t\t\t\t\t{{ cnTranslate(entry.label) }}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</label>\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-if=\"board.hint\"\n\t\t\t\t\t\tclass=\"cn-index-page__board-hint\"\n\t\t\t\t\t\tdata-testid=\"cn-board-hint\">{{ cnTranslate(board.hint) }}</span>\n\t\t\t\t</template>\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-if=\"searchInFiles\"\n\t\t\t\t\t:modelValue=\"contentSearch\"\n\t\t\t\t\ttype=\"switch\"\n\t\t\t\t\tclass=\"cn-index-page__content-search\"\n\t\t\t\t\tdata-testid=\"cn-index-content-search\"\n\t\t\t\t\t@update:modelValue=\"onContentSearchToggle\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Also search inside files') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<CnRelatedFieldFilters\n\t\t\t\t\tv-if=\"relatedFieldFilters\"\n\t\t\t\t\t:definitions=\"relatedFieldFilters.definitions || {}\"\n\t\t\t\t\t:related=\"relatedFieldFilters.related || {}\"\n\t\t\t\t\t:storeKey=\"objectType || selfObjectType || ''\" />\n\t\t\t\t<slot name=\"after-search\" />\n\t\t\t</template>\n\t\t\t<template\n\t\t\t\tv-if=\"$slots['selection-actions']\"\n\t\t\t\t#selection-actions=\"{ count, selectedIds: ids }\">\n\t\t\t\t<slot name=\"selection-actions\" :count=\"count\" :selectedIds=\"ids\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"$slots['header-actions'] || $slots['actions']\" #actions>\n\t\t\t\t<!--\n\t\t\t\t\t@slot header-actions\n\t\t\t\t\t@description Extra buttons in the page header, inline next to the Add button. Documented since the beginning but wired up only later — consumers passing it (hermiq's flow list's \"New flow\" button) rendered nothing while the page looked fine.\n\t\t\t\t-->\n\t\t\t\t<slot name=\"header-actions\" />\n\t\t\t\t<slot name=\"actions\" />\n\t\t\t</template>\n\t\t\t<!-- Rendered AFTER the primary Add button (CnActionsBar's `actions-end`\n\t\t\t slot), not before it: these are \"browse/manage\" controls — saved\n\t\t\t views, export, page config — grouped together and kept apart from\n\t\t\t the app-specific buttons in `#actions`, with Add sitting between\n\t\t\t the two groups rather than before both (dossiq Cases/Queue). -->\n\t\t\t<template v-if=\"isEditMode || barShowsExportMenu || barShowsSavedViews\" #actions-end>\n\t\t\t\t<!-- Saved views (opt-in via `allowSavedViews`): the toolbar keeps\n\t\t\t\t \"Save view\" and, under the board look, the chips. The list\n\t\t\t\t and every per-view action live in the sidebar's Filters tab. -->\n\t\t\t\t<CnSavedViewsControl\n\t\t\t\t\tv-if=\"barShowsSavedViews\"\n\t\t\t\t\t:views=\"viewsForControl\"\n\t\t\t\t\t:loading=\"savedViewsLoading\"\n\t\t\t\t\t:currentUserId=\"currentSavedViewsUserId\"\n\t\t\t\t\t:counts=\"savedViewCounts\"\n\t\t\t\t\t:selectedViewId=\"appliedSavedViewId\"\n\t\t\t\t\t:save=\"toolbarSavesView\"\n\t\t\t\t\t:chips=\"savedViewChips\"\n\t\t\t\t\t@apply=\"onApplySavedView\"\n\t\t\t\t\t@saveRequest=\"showSaveViewDialog = true\" />\n\t\t\t\t<!-- Native Export menu (opt-in via `allowExport` + schema.exportable):\n\t\t\t\t CSV/Excel entries navigate to OR's export-leaf URL, passing the\n\t\t\t\t current route's query params through as filters. -->\n\t\t\t\t<NcActions\n\t\t\t\t\tv-if=\"barShowsExportMenu\"\n\t\t\t\t\t:forceName=\"true\"\n\t\t\t\t\t:menuName=\"t('nextcloud-vue', 'Export')\"\n\t\t\t\t\tdata-testid=\"cn-index-export-menu\"\n\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Export')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Export :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton data-testid=\"cn-index-export-csv\" @click=\"onExportClick('csv')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Export :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Export as CSV') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton data-testid=\"cn-index-export-excel\" @click=\"onExportClick('excel')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Export :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Export as Excel') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t\t<!-- Edit-mode config cog: opens the page's full config editor\n\t\t\t\t (CnPageRenderer wires @configure to CnPageConfigModal). -->\n\t\t\t\t<NcButton v-if=\"isEditMode\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Configure page')\"\n\t\t\t\t\t@click=\"$emit('configure')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Cog :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t\t<!-- Quick-filter tabs (REQ-MIPFU-1) rendered INSIDE the action bar\n\t\t\t (between the view toggle and the actions) when the manifest\n\t\t\t declares `config.quickFilters`. Switching tabs re-fetches with\n\t\t\t the merged filter; @event quick-filter-change. -->\n\t\t\t<template v-if=\"$slots['toolbar-start'] || quickFilterTabsInToolbar\" #filters>\n\t\t\t\t<!-- @slot toolbar-start The page's own controls at the start of the toolbar row, before the quick-filter chips (DqAanMijToegewezen: the team's name chips). -->\n\t\t\t\t<slot name=\"toolbar-start\" />\n\t\t\t\t<CnQuickFilterBar\n\t\t\t\t\tv-if=\"quickFilterTabsInToolbar\"\n\t\t\t\t\tinline\n\t\t\t\t\t:tabs=\"tabStripEntries\"\n\t\t\t\t\t:mode=\"quickFilterMode\"\n\t\t\t\t\t:maxVisible=\"quickFilterMaxVisible\"\n\t\t\t\t\t:fit=\"effectiveQuickFilterPlacement === 'toolbar'\"\n\t\t\t\t\t:multiple=\"quickFilterMultiple\"\n\t\t\t\t\t:activeIndex=\"shownQuickFilterIndex\"\n\t\t\t\t\t:selectedIndices=\"selectedQuickFilterIndices\"\n\t\t\t\t\t:counts=\"effectiveTabCounts\"\n\t\t\t\t\t@update:activeIndex=\"onQuickFilterChange\"\n\t\t\t\t\t@update:selectedIndices=\"onQuickFilterMultiChange\" />\n\t\t\t</template>\n\t\t\t<!-- Board look, `filterMenu` on a page with no filter sidebar: the\n\t\t\t board's Filter button, a menu of each enum column's values as\n\t\t\t toggleable filters. -->\n\t\t\t<template v-if=\"boardFilterMenu\" #filter-menu>\n\t\t\t\t<NcActions\n\t\t\t\t\tclass=\"cn-actions-bar__filter-menu\"\n\t\t\t\t\t:class=\"{ 'cn-actions-bar__filter-menu--counted': activeFilterChips.length > 0 }\"\n\t\t\t\t\t:style=\"filterMenuCountStyle\"\n\t\t\t\t\t:data-count=\"activeFilterChips.length > 0 ? activeFilterChips.length : null\"\n\t\t\t\t\t:aria-label=\"filterMenuLabel\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t:menuName=\"t('nextcloud-vue', 'Filter')\"\n\t\t\t\t\tdata-testid=\"cn-index-filter-menu\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Tune :size=\"16\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-for=\"field in filterableFields\" :key=\"field.key\">\n\t\t\t\t\t\t<NcActionCaption :name=\"field.label\" />\n\t\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t\tv-for=\"val in field.values\"\n\t\t\t\t\t\t\t:key=\"`${field.key}-${val}`\"\n\t\t\t\t\t\t\t:modelValue=\"isFilterActive(field.key, val)\"\n\t\t\t\t\t\t\t@update:modelValue=\"toggleFilter(field.key, val)\">\n\t\t\t\t\t\t\t{{ val }}\n\t\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t</template>\n\t\t\t\t</NcActions>\n\t\t\t</template>\n\t\t</CnActionsBar>\n\n\t\t<!-- A second filter strip on one field (`filterStrip`), under the\n\t\t toolbar: \"All\" and one pill per value, each with its count within\n\t\t the active quick filter (board PqWachtrij: \"Soort, dan kanaal\"). -->\n\t\t<div\n\t\t\tv-if=\"filterStripEntries.length > 0\"\n\t\t\tclass=\"cn-index-page__filter-strip\"\n\t\t\trole=\"group\"\n\t\t\t:aria-label=\"filterStripLabel\"\n\t\t\tdata-testid=\"cn-index-filter-strip\">\n\t\t\t<button\n\t\t\t\tv-for=\"entry in filterStripEntries\"\n\t\t\t\t:key=\"entry.key\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"cn-index-page__filter-strip-pill\"\n\t\t\t\t:class=\"{ 'cn-index-page__filter-strip-pill--active': entry.active }\"\n\t\t\t\t:aria-pressed=\"entry.active ? 'true' : 'false'\"\n\t\t\t\t:data-testid=\"`cn-index-filter-strip-${entry.key}`\"\n\t\t\t\t@click=\"onFilterStripPick(entry.value)\">\n\t\t\t\t<span>{{ entry.label }}</span> <span v-if=\"entry.count !== null\" class=\"cn-index-page__filter-strip-count\">{{ entry.count }}</span>\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- Header actions of `type: \"open-form\"` or `\"open-modal\"`: this\n\t\t instance draws nothing and owns the create dialog, as on a detail\n\t\t page, so a header button or menu entry naming one opens it. -->\n\t\t<CnActionButtons\n\t\t\tv-if=\"dialogHeaderActions.length > 0\"\n\t\t\t:actions=\"dialogHeaderActions\"\n\t\t\tdisplay=\"menu\"\n\t\t\tdata-testid=\"cn-index-header-dialog-actions\"\n\t\t\t@entries=\"dialogHeaderRuns = $event\"\n\t\t\t@created=\"onHeaderActionCreated\" />\n\n\t\t<!-- Quick edit: a few fields of one row, over the list, with the list\n\t\t keeping its place. -->\n\t\t<CnQuickEditDialog\n\t\t\tv-if=\"quickEditRow !== null\"\n\t\t\t:object=\"quickEditRow\"\n\t\t\t:schema=\"effectiveSchema\"\n\t\t\t:register=\"register\"\n\t\t\t:fields=\"quickEditFields\"\n\t\t\t:writableField=\"writableField\"\n\t\t\t:serverObject=\"quickEditServerRow\"\n\t\t\t@save=\"onQuickEditSave\"\n\t\t\t@keepTheirs=\"onQuickEditKeepTheirs\"\n\t\t\t@close=\"quickEditRow = null\" />\n\n\t\t<!-- The help key's sheet. Every shortcut the list offers is here and in\n\t\t the command palette: one that only the handler knows about is one\n\t\t nobody can find. -->\n\t\t<CnConfirmDialog\n\t\t\tv-if=\"showShortcutHelp\"\n\t\t\t:name=\"shortcutHelpTitle\"\n\t\t\t:confirmLabel=\"closeLabel\"\n\t\t\tdata-testid=\"cn-list-shortcuts-help\"\n\t\t\t@confirm=\"showShortcutHelp = false\"\n\t\t\t@cancel=\"showShortcutHelp = false\">\n\t\t\t<dl class=\"cn-index-page__shortcuts\">\n\t\t\t\t<template v-for=\"entry in shortcutHelpEntries\" :key=\"entry.id\">\n\t\t\t\t\t<dt><kbd>{{ entry.keys }}</kbd></dt>\n\t\t\t\t\t<dd>{{ entry.description }}</dd>\n\t\t\t\t</template>\n\t\t\t</dl>\n\t\t</CnConfirmDialog>\n\n\t\t<!-- Mass delete dialog -->\n\t\t<CnMassDeleteDialog\n\t\t\tv-if=\"showMassDeleteDialog\"\n\t\t\tref=\"massDeleteDialog\"\n\t\t\t:items=\"selectedObjects\"\n\t\t\t:nameField=\"massActionNameField\"\n\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t@confirm=\"onMassDeleteConfirm\"\n\t\t\t@close=\"showMassDeleteDialog = false\" />\n\n\t\t<!-- Mass copy dialog -->\n\t\t<CnMassCopyDialog\n\t\t\tv-if=\"showMassCopyDialog\"\n\t\t\tref=\"massCopyDialog\"\n\t\t\t:items=\"selectedObjects\"\n\t\t\t:nameField=\"massActionNameField\"\n\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t:include=\"copyIncludeKinds\"\n\t\t\t:register=\"copyRegisterSlug\"\n\t\t\t:schema=\"copySchemaSlug\"\n\t\t\t@confirm=\"onMassCopyConfirm\"\n\t\t\t@close=\"showMassCopyDialog = false\" />\n\n\t\t<!-- Mass export dialog -->\n\t\t<CnMassExportDialog\n\t\t\tv-if=\"showExportDialog\"\n\t\t\tref=\"exportDialog\"\n\t\t\t:formats=\"exportFormats\"\n\t\t\t:scopeText=\"massExportScopeText\"\n\t\t\t@confirm=\"onMassExportConfirm\"\n\t\t\t@close=\"showExportDialog = false\" />\n\n\t\t<!-- Mass import dialog -->\n\t\t<CnMassImportDialog\n\t\t\tv-if=\"showImportDialog\"\n\t\t\tref=\"importDialog\"\n\t\t\t:options=\"importOptions\"\n\t\t\t@confirm=\"onMassImportConfirm\"\n\t\t\t@close=\"showImportDialog = false\">\n\t\t\t<template v-if=\"$slots['import-fields']\" #fields=\"{ file }\">\n\t\t\t\t<slot name=\"import-fields\" :file=\"file\" />\n\t\t\t</template>\n\t\t</CnMassImportDialog>\n\n\t\t<!-- Save-current-view dialog (saved-views-ui) -->\n\t\t<CnSaveViewDialog\n\t\t\tv-if=\"showSaveViewDialog\"\n\t\t\tref=\"saveViewDialog\"\n\t\t\t:schema=\"viewPresentationSchema\"\n\t\t\t@confirm=\"onSaveViewConfirm\"\n\t\t\t@close=\"showSaveViewDialog = false\" />\n\n\t\t<!-- How-a-saved-view-shows dialog (view-presentation-picker) -->\n\t\t<CnSavedViewPresentationDialog\n\t\t\tv-if=\"viewPendingPresentation\"\n\t\t\tref=\"presentationViewDialog\"\n\t\t\t:view=\"viewPendingPresentation\"\n\t\t\t:schema=\"viewPresentationSchema\"\n\t\t\t@confirm=\"onPresentationViewConfirm\"\n\t\t\t@close=\"viewPendingPresentation = null\" />\n\n\t\t<!-- Edit-a-saved-view dialog (saved-views-manage-and-defaults) -->\n\t\t<CnSavedViewEditDialog\n\t\t\tv-if=\"viewPendingEdit\"\n\t\t\tref=\"editViewDialog\"\n\t\t\t:view=\"viewPendingEdit\"\n\t\t\t:savedSummary=\"criteriaSummaryOf(savedViewState(viewPendingEdit))\"\n\t\t\t:currentSummary=\"list ? criteriaSummaryOf(currentViewState()) : ''\"\n\t\t\t@confirm=\"onEditViewConfirm\"\n\t\t\t@close=\"viewPendingEdit = null\" />\n\n\t\t<!-- Share-a-saved-view dialog (saved-views-shared-by-role) -->\n\t\t<CnSavedViewShareDialog\n\t\t\tv-if=\"viewPendingShare\"\n\t\t\tref=\"shareViewDialog\"\n\t\t\t:view=\"viewPendingShare\"\n\t\t\t@confirm=\"onShareViewConfirm\"\n\t\t\t@close=\"viewPendingShare = null\" />\n\n\t\t<!-- Confirmation of an api-call header action that asks for one. -->\n\t\t<CnConfirmDialog\n\t\t\tv-if=\"headerApiCallPending\"\n\t\t\tref=\"headerApiCallConfirmDialog\"\n\t\t\t:dialogTitle=\"cnTranslate(headerApiCallPending.confirmTitle || headerApiCallPending.label || '')\"\n\t\t\t:message=\"headerApiCallPending.confirmMessage ? cnTranslate(headerApiCallPending.confirmMessage) : t('nextcloud-vue', 'Are you sure you want to continue?')\"\n\t\t\t:confirmLabel=\"cnTranslate(headerApiCallPending.label || '')\"\n\t\t\tdata-testid=\"cn-index-header-api-call-confirm\"\n\t\t\t@confirm=\"onHeaderApiCallConfirm\"\n\t\t\t@close=\"headerApiCallPending = null\" />\n\n\t\t<!-- Delete-saved-view confirm (saved-views-ui) -->\n\t\t<CnConfirmDialog\n\t\t\tv-if=\"viewPendingDelete\"\n\t\t\tref=\"deleteViewConfirmDialog\"\n\t\t\tvariant=\"error\"\n\t\t\t:dialogTitle=\"t('nextcloud-vue', 'Delete view?')\"\n\t\t\t:eyebrow=\"deleteViewEyebrow\"\n\t\t\t:subtitle=\"deleteViewSubtitle\"\n\t\t\t:message=\"deleteViewMessage\"\n\t\t\t:confirmLabel=\"t('nextcloud-vue', 'Delete view')\"\n\t\t\tconfirmIcon=\"DeleteOutline\"\n\t\t\t@confirm=\"onDeleteViewConfirm\"\n\t\t\t@close=\"viewPendingDelete = null\" />\n\n\t\t<!-- @slot delete-dialog Replace the single-item delete dialog. -->\n\t\t<!-- @binding {boolean} show Whether the delete dialog is currently visible. -->\n\t\t<!-- @binding {object} item The item targeted for deletion. -->\n\t\t<!-- @binding {Function} confirm Performs the delete — the same path the default dialog's `@confirm` runs. -->\n\t\t<!-- @binding {Function} close Closes the delete dialog. -->\n\t\t<!-- `show` and `confirm` are props for the same reason as `form-dialog`\n\t\t above: a manifest-mounted replacement receives props only. -->\n\t\t<slot\n\t\t\tname=\"delete-dialog\"\n\t\t\t:show=\"showSingleDeleteDialog\"\n\t\t\t:item=\"actionTargetItem\"\n\t\t\t:confirm=\"onSingleDeleteConfirm\"\n\t\t\t:close=\"closeSingleDelete\">\n\t\t\t<CnDeleteDialog\n\t\t\t\tv-if=\"showSingleDeleteDialog && actionTargetItem\"\n\t\t\t\tref=\"singleDeleteDialog\"\n\t\t\t\t:item=\"actionTargetItem\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t\t@confirm=\"onSingleDeleteConfirm\"\n\t\t\t\t@close=\"closeSingleDelete\" />\n\t\t</slot>\n\n\t\t<!-- @slot copy-dialog Replace the single-item copy dialog. -->\n\t\t<!-- @binding {boolean} show Whether the copy dialog is currently visible. -->\n\t\t<!-- @binding {object} item The item targeted for copy. -->\n\t\t<!-- @binding {Function} confirm Performs the copy — the same path the default dialog's `@confirm` runs. -->\n\t\t<!-- @binding {Function} close Closes the copy dialog. -->\n\t\t<!-- `show` and `confirm` are props for the same reason as `form-dialog`\n\t\t above: a manifest-mounted replacement receives props only. -->\n\t\t<slot\n\t\t\tname=\"copy-dialog\"\n\t\t\t:show=\"showSingleCopyDialog\"\n\t\t\t:item=\"actionTargetItem\"\n\t\t\t:confirm=\"onSingleCopyConfirm\"\n\t\t\t:close=\"closeSingleCopy\">\n\t\t\t<CnCopyDialog\n\t\t\t\tv-if=\"showSingleCopyDialog && actionTargetItem\"\n\t\t\t\tref=\"singleCopyDialog\"\n\t\t\t\t:item=\"actionTargetItem\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t\t:include=\"copyIncludeKinds\"\n\t\t\t\t:register=\"copyRegisterSlug\"\n\t\t\t\t:schema=\"copySchemaSlug\"\n\t\t\t\t@confirm=\"onSingleCopyConfirm\"\n\t\t\t\t@close=\"closeSingleCopy\" />\n\t\t</slot>\n\n\t\t<!-- @slot form-dialog Replace the create/edit form dialog (use CnFormDialog or CnAdvancedFormDialog). -->\n\t\t<!-- @binding {boolean} show Whether the form dialog is currently visible. -->\n\t\t<!-- @binding {?object} item The item being edited, or null in create mode. -->\n\t\t<!-- @binding {object} schema The effective JSON schema driving the form. -->\n\t\t<!-- @binding {Function} confirm Persists the form data through the page's own save path (store / self-store / createOverride) and emits `create`/`edit`. Call this instead of saving in the replacement dialog, so a create or edit made there behaves exactly like one made in the built-in dialog. Takes the complete object to save. List refresh is automatic on the self-fetch and `createOverride` paths; with the `store` prop, refresh is driven by the consumer's `create`/`edit` handler as usual. -->\n\t\t<!-- @binding {Function} close Closes the form dialog. -->\n\t\t<!-- @binding {Function} refresh Re-reads the list. For a replacement dialog that saves through its own endpoint rather than `confirm`, so the list still shows what it saved. -->\n\t\t<!--\n\t\t `confirm` is bound as a PROP, not left as an `@confirm` listener on\n\t\t the default child. A manifest-declared replacement is mounted by\n\t\t CnPageRenderer as `<component :is=… v-bind=\"slotProps\" />`, which\n\t\t binds props only — so a listener is unreachable from a manifest\n\t\t even in principle, and a replacement dialog could render and close\n\t\t but never save (openconnector#1150).\n\t\t-->\n\t\t<slot\n\t\t\tname=\"form-dialog\"\n\t\t\t:show=\"showFormDialogVisible\"\n\t\t\t:item=\"editItem\"\n\t\t\t:schema=\"formSchema\"\n\t\t\t:confirm=\"onFormConfirm\"\n\t\t\t:close=\"closeFormDialog\"\n\t\t\t:refresh=\"onRefreshEvent\">\n\t\t\t<CnFormDialog\n\t\t\t\tv-if=\"showFormDialogVisible && !useAdvancedFormDialog\"\n\t\t\t\tref=\"formDialog\"\n\t\t\t\t:schema=\"formSchema\"\n\t\t\t\t:item=\"editItem\"\n\t\t\t\t:register=\"formRegister\"\n\t\t\t\t:excludeFields=\"rowFormTarget ? [] : excludeFields\"\n\t\t\t\t:includeFields=\"rowFormTarget ? null : includeFields\"\n\t\t\t\t:fieldOverrides=\"rowFormTarget ? {} : fieldOverrides\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:size=\"formSize\"\n\t\t\t\t:columns=\"formColumns\"\n\t\t\t\t:initialData=\"resolvedCreateDefaults\"\n\t\t\t\t@confirm=\"onFormConfirm\"\n\t\t\t\t@close=\"closeFormDialog\">\n\t\t\t\t<template v-if=\"$slots['form-fields']\" #form=\"scope\">\n\t\t\t\t\t<slot name=\"form-fields\" v-bind=\"scope\" />\n\t\t\t\t</template>\n\t\t\t</CnFormDialog>\n\t\t\t<CnAdvancedFormDialog\n\t\t\t\tv-if=\"showFormDialogVisible && useAdvancedFormDialog\"\n\t\t\t\tref=\"formDialog\"\n\t\t\t\t:schema=\"formSchema\"\n\t\t\t\t:item=\"editItem\"\n\t\t\t\t:excludeFields=\"rowFormTarget ? [] : excludeFields\"\n\t\t\t\t:includeFields=\"rowFormTarget ? null : includeFields\"\n\t\t\t\t:fieldOverrides=\"rowFormTarget ? {} : fieldOverrides\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:initialValues=\"resolvedCreateDefaults\"\n\t\t\t\t@confirm=\"onFormConfirm\"\n\t\t\t\t@close=\"closeFormDialog\" />\n\t\t</slot>\n\n\t\t<!-- Body -->\n\t\t<div class=\"cn-index-page__body\" :class=\"{ 'cn-index-page__body--with-folders': showsFolderPane }\">\n\t\t\t<!-- Optional folder navigation pane (opt-in via the `folderSidebar`\n\t\t\t config). Selecting a folder filters the list by the config's\n\t\t\t `filterField`; \"All\" clears it. `pane: false` keeps the scope\n\t\t\t from the deep link and draws no pane. -->\n\t\t\t<div v-if=\"showsFolderPane\" class=\"cn-index-page__folder-pane\">\n\t\t\t\t<CnFolderSidebar\n\t\t\t\t\t:source=\"folderSidebarSource\"\n\t\t\t\t\t:folders=\"folderSidebarFolders\"\n\t\t\t\t\t:objects=\"effectiveObjects\"\n\t\t\t\t\t:groupBy=\"folderSidebar.groupBy || folderSidebar.field || ''\"\n\t\t\t\t\t:facetValues=\"folderSidebarFacetValues\"\n\t\t\t\t\t:partial=\"folderSidebarPartial\"\n\t\t\t\t\t:filesPath=\"folderSidebar.filesPath || '/'\"\n\t\t\t\t\t:selectedId=\"selectedFolderId\"\n\t\t\t\t\t:allLabel=\"folderSidebar.allLabel ? cnTranslate(folderSidebar.allLabel) : undefined\"\n\t\t\t\t\t:title=\"folderSidebar.title ? cnTranslate(folderSidebar.title) : ''\"\n\t\t\t\t\t:idField=\"folderPassthroughIdField\"\n\t\t\t\t\t:nameField=\"folderPassthroughNameField\"\n\t\t\t\t\t:allowCreate=\"Boolean(folderSidebar.allowCreate)\"\n\t\t\t\t\t@select=\"onFolderSelect\"\n\t\t\t\t\t@create=\"$emit('folder-create', $event)\" />\n\t\t\t</div>\n\n\t\t\t<!-- The list. `v-show`, never `v-if`: the narrow layout hides it\n\t\t\t but must not unmount it, because unmounting throws away the\n\t\t\t scroll position, the selection and the loaded page, which is\n\t\t\t the whole thing the split view exists to keep. -->\n\t\t\t<div\n\t\t\t\tv-show=\"splitLayout !== 'detail'\"\n\t\t\t\tref=\"listScroll\"\n\t\t\t\tclass=\"cn-index-page__main\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'cn-index-page__main--map': currentViewMode === 'map',\n\t\t\t\t\t'cn-index-page__main--list': currentViewMode === 'list',\n\t\t\t\t\t'cn-index-page__main--table': currentViewMode === 'table',\n\t\t\t\t\t'cn-index-page__main--split': splitLayout === 'split',\n\t\t\t\t}\"\n\t\t\t\t@scroll=\"onListScroll\">\n\t\t\t\t<!-- @slot before-collection Content rendered above the collection in EVERY view mode (table, cards, list, map) — e.g. a folder/group strip that must stay visually separate from the objects instead of masquerading as rows or cards. -->\n\t\t\t\t<slot name=\"before-collection\" />\n\n\t\t\t\t<!-- A sort option whose endpoint could not answer: the list fell\n\t\t\t\t back to the option's own order, and says so. -->\n\t\t\t\t<p v-if=\"sortSourceFellBack && sortSourceFailedNote\"\n\t\t\t\t\tclass=\"cn-index-page__sort-source-note\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-sort-source-note\">\n\t\t\t\t\t{{ sortSourceFailedNote }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- The selected folder as a heading above the list (a group on\n\t\t\t\t DqAfdelingen: its name, then its parent and member count). -->\n\t\t\t\t<div v-if=\"scopeHeading\" class=\"cn-index-page__scope-heading\" data-testid=\"cn-index-page-scope-heading\">\n\t\t\t\t\t<h2 class=\"cn-index-page__scope-title\">\n\t\t\t\t\t\t{{ scopeHeading.name }}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<span v-if=\"scopeHeading.subtitle\" class=\"cn-index-page__scope-subtitle\" data-testid=\"cn-index-page-scope-subtitle\">{{ scopeHeading.subtitle }}</span>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- A note the named source read off its answer (\"Filters run in\n\t\t\t\t this order: ...\"). -->\n\t\t\t\t<p v-if=\"sourceNote && !sourceRefusal\"\n\t\t\t\t\tclass=\"cn-index-page__source-note\"\n\t\t\t\t\tdata-testid=\"cn-index-page-source-note\">\n\t\t\t\t\t{{ sourceNote }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- Loading state — initial fetch only; a background refresh keeps the table visible -->\n\t\t\t\t<div v-if=\"showInitialLoader\" class=\"cn-index-page__loading\">\n\t\t\t\t\t<!-- name gives NcLoadingIcon a non-empty aria-label (WCAG role-img-alt); empty name ships an unlabeled role=\"img\" -->\n\t\t\t\t\t<NcLoadingIcon :size=\"32\" :name=\"loadingText\" />\n\t\t\t\t</div>\n\n\t\t\t\t<!-- The named source's server refused this reader: its sentence\n\t\t\t\t instead of the rows, never an empty list. -->\n\t\t\t\t<div v-else-if=\"sourceRefusal\"\n\t\t\t\t\tclass=\"cn-index-page__source-refusal\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-page-source-refusal\">\n\t\t\t\t\t<NcNoteCard type=\"error\">\n\t\t\t\t\t\t{{ sourceRefusal }}\n\t\t\t\t\t</NcNoteCard>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- A search the server refused for its grammar: the term with the\n\t\t\t\t character it stopped at, the server's reason, and what to do. -->\n\t\t\t\t<div v-else-if=\"searchRefusal\"\n\t\t\t\t\tclass=\"cn-index-page__search-refusal\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-page-search-refusal\">\n\t\t\t\t\t<NcNoteCard type=\"warning\">\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-headline\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'This search could not be read from character {position}.', { position: searchRefusal.position }) }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-term\" data-testid=\"cn-index-page-search-refusal-term\">\n\t\t\t\t\t\t\t<span>{{ searchRefusal.before }}</span><mark v-if=\"searchRefusal.at\">{{ searchRefusal.at }}</mark><span>{{ searchRefusal.after }}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-muted\">\n\t\t\t\t\t\t\t{{ searchRefusal.message }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-muted\">\n\t\t\t\t\t\t\t{{ searchRefusalHintText }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</NcNoteCard>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Error state: the latest self-fetch failed (e.g. a search term the server rejects) -->\n\t\t\t\t<div v-else-if=\"selfFetchFailed || sourceFailed\"\n\t\t\t\t\tclass=\"cn-index-page__empty\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-page-fetch-error\">\n\t\t\t\t\t<CnEmptyContent error\n\t\t\t\t\t\t:name=\"t('nextcloud-vue', 'An error occurred')\"\n\t\t\t\t\t\t:description=\"effectiveSearchValue\n\t\t\t\t\t\t\t? t('nextcloud-vue', 'Change the search or try again.')\n\t\t\t\t\t\t\t: t('nextcloud-vue', 'Try again later.')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<AlertCircleOutline :size=\"64\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</CnEmptyContent>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Empty state -->\n\t\t\t\t<div v-else-if=\"effectiveObjects.length === 0\" class=\"cn-index-page__empty\">\n\t\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t\t<CnEmptyContent :name=\"lensReasonText || resolvedEmptyText\"\n\t\t\t\t\t\t\t:data-lens-unavailable=\"lensReasonText ? 'true' : null\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<CnIcon v-if=\"resolvedIcon\" :name=\"resolvedIcon\" :size=\"64\" />\n\t\t\t\t\t\t\t\t<DatabaseSearch v-else :size=\"64\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</CnEmptyContent>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Table view -->\n\t\t\t\t<CnDataTable\n\t\t\t\t\tv-else-if=\"currentViewMode === 'table'\"\n\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t:columns=\"renderedColumns\"\n\t\t\t\t\t:pinnedCount=\"pinnedColumnCount\"\n\t\t\t\t\t:rowIcon=\"rowIcon\"\n\t\t\t\t\t:rowIndicators=\"rowIndicators\"\n\t\t\t\t\t:rowIndicatorCap=\"rowIndicatorCap\"\n\t\t\t\t\t:rows=\"displayObjects\"\n\t\t\t\t\t:sortKey=\"effectiveSortKey\"\n\t\t\t\t\t:sortOrder=\"effectiveSortOrder\"\n\t\t\t\t\t:sortKeys=\"effectiveSortKeys\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:hideHeader=\"hideTableHeader\"\n\t\t\t\t\t:rowClickToView=\"rowClickOpens\"\n\t\t\t\t\t:rowClickRoute=\"rowLinkRoute\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:emptyText=\"emptyText\"\n\t\t\t\t\t:excludeColumns=\"excludeColumns\"\n\t\t\t\t\t:includeColumns=\"includeColumns\"\n\t\t\t\t\t:columnOverrides=\"columnOverrides\"\n\t\t\t\t\t:rowClass=\"compiledRowClass\"\n\t\t\t\t\t:rowTitle=\"rowTitle\"\n\t\t\t\t\t:showUnread=\"marksUnreadRows\"\n\t\t\t\t\t:filterable=\"tableHeaderFilters\"\n\t\t\t\t\t:filterSchema=\"headerFilterSchema\"\n\t\t\t\t\t:activeFilters=\"tableActiveFilters\"\n\t\t\t\t\t:filterRegister=\"typeof register === 'string' ? register : ''\"\n\t\t\t\t\t@columnFilter=\"onColumnFilterEvent\"\n\t\t\t\t\t@sort=\"onSortEvent\"\n\t\t\t\t\t@select=\"onSelect\"\n\t\t\t\t\t@rowClick=\"onRowClick\"\n\t\t\t\t\t@rowAuxClick=\"onRowAuxClick\"\n\t\t\t\t\t@rowContextMenu=\"onRowContextMenu\">\n\t\t\t\t\t<!-- Follow column (showFollowColumn, or the deprecated showFavouriteColumn) -->\n\t\t\t\t\t<template v-if=\"followColumnOn\" #column-__follow=\"{ row }\">\n\t\t\t\t\t\t<CnFollowToggle\n\t\t\t\t\t\t\tv-if=\"row && row['@self'] && typeof row['@self'].watching === 'boolean'\"\n\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t:register=\"typeof register === 'string' ? register : ''\"\n\t\t\t\t\t\t\t:schema=\"favouriteSchemaSlug\"\n\t\t\t\t\t\t\t:objectId=\"String(row['@self'].id || row.id || '')\"\n\t\t\t\t\t\t\t:watching=\"row['@self'].watching === true\" />\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Pass through column slots -->\n\t\t\t\t\t<template\n\t\t\t\t\t\tv-for=\"col in slotColumns\"\n\t\t\t\t\t\t#[`column-${col}`]=\"{ row, value }\">\n\t\t\t\t\t\t<slot :name=\"'column-' + col\" :row=\"row\" :value=\"value\" />\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Row actions -->\n\t\t\t\t\t<template v-if=\"hasRowActions\" #row-actions=\"{ row }\">\n\t\t\t\t\t\t<slot name=\"row-actions\" :row=\"row\">\n\t\t\t\t\t\t\t<CnRowActions\n\t\t\t\t\t\t\t\t:actions=\"rowActionsFor(row)\"\n\t\t\t\t\t\t\t\t:row=\"row\"\n\t\t\t\t\t\t\t\t:rowLabel=\"rowTitleFor(row)\"\n\t\t\t\t\t\t\t\t@action=\"onRowAction\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Table-header filter + column menus (both opt-in): funnel and\n\t\t\t\t\t columns buttons above the row-actions column. The filter menu\n\t\t\t\t\t lists each enum column's values as toggleable facet filters;\n\t\t\t\t\t the column menu lists every governed column as a visibility\n\t\t\t\t\t checkbox — compact, in-table alternatives to the sidebar. -->\n\t\t\t\t\t<template\n\t\t\t\t\t\tv-if=\"(showHeaderFilterMenu) || (columnMenu && governedColumns.length)\"\n\t\t\t\t\t\t#actions-header>\n\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\tv-if=\"showHeaderFilterMenu\"\n\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Filter')\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<FilterOutline :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<template v-for=\"field in filterableFields\" :key=\"field.key\">\n\t\t\t\t\t\t\t\t<NcActionCaption :name=\"field.label\" />\n\t\t\t\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t\t\t\tv-for=\"val in field.values\"\n\t\t\t\t\t\t\t\t\t:key=\"`${field.key}-${val}`\"\n\t\t\t\t\t\t\t\t\t:modelValue=\"isFilterActive(field.key, val)\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleFilter(field.key, val)\">\n\t\t\t\t\t\t\t\t\t{{ val }}\n\t\t\t\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\tv-if=\"columnMenu && governedColumns.length\"\n\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Columns')\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<ViewColumnOutline :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<NcActionCaption :name=\"t('nextcloud-vue', 'Columns')\" />\n\t\t\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t\t\tv-for=\"col in governedColumns\"\n\t\t\t\t\t\t\t\t:key=\"`col-${col.key}`\"\n\t\t\t\t\t\t\t\t:modelValue=\"isColumnVisible(col.key)\"\n\t\t\t\t\t\t\t\t@update:modelValue=\"toggleColumn(col.key)\">\n\t\t\t\t\t\t\t\t{{ cnTranslate(col.label || col.key) }}\n\t\t\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t</template>\n\t\t\t\t</CnDataTable>\n\n\t\t\t\t<!-- Map view — plots the CURRENT filtered rows (displayObjects) as\n\t\t\t\t inline markers; no separate fetch path, so it reuses the same\n\t\t\t\t filter / sidebar / quick-filter machinery as table and cards.\n\t\t\t\t A marker click routes back through onRowClick for identical\n\t\t\t\t detail-page navigation. -->\n\t\t\t\t<!-- Map with a numbered list beside it (`mapConfig.list`,\n\t\t\t\t DqZakenKaart): one framed card, the list numbered as the pins\n\t\t\t\t are, the row under the pointer marked on both sides, and the\n\t\t\t\t rows without a place counted under the list with a way to\n\t\t\t\t the table. -->\n\t\t\t\t<div v-else-if=\"currentViewMode === 'map' && mapListEnabled\"\n\t\t\t\t\tclass=\"cn-index-page__map-card\"\n\t\t\t\t\tdata-testid=\"cn-index-map-card\">\n\t\t\t\t\t<CnMapWidget\n\t\t\t\t\t\tclass=\"cn-index-page__map\"\n\t\t\t\t\t\t:center=\"mapCenter\"\n\t\t\t\t\t\t:zoom=\"mapZoom\"\n\t\t\t\t\t\t:layers=\"mapLayers\"\n\t\t\t\t\t\t:basemaps=\"mapBasemaps\"\n\t\t\t\t\t\t:markers=\"mapMarkers\"\n\t\t\t\t\t\t:clustering=\"mapClustering\"\n\t\t\t\t\t\t:autoFit=\"true\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t@markerClick=\"onMarkerClick\" />\n\t\t\t\t\t<div class=\"cn-index-page__map-side\">\n\t\t\t\t\t\t<ol class=\"cn-index-page__map-list\" :aria-label=\"mapListLabel\" data-testid=\"cn-index-map-list\">\n\t\t\t\t\t\t\t<li v-for=\"item in mapList.items\"\n\t\t\t\t\t\t\t\t:key=\"item.key\"\n\t\t\t\t\t\t\t\tclass=\"cn-index-page__map-item\"\n\t\t\t\t\t\t\t\t:class=\"{ 'cn-index-page__map-item--active': activeMapKey === item.key }\"\n\t\t\t\t\t\t\t\tdata-testid=\"cn-index-map-item\"\n\t\t\t\t\t\t\t\t@mouseenter=\"activeMapKey = item.key\"\n\t\t\t\t\t\t\t\t@mouseleave=\"activeMapKey = ''\"\n\t\t\t\t\t\t\t\t@focusin=\"activeMapKey = item.key\">\n\t\t\t\t\t\t\t\t<span class=\"cn-index-page__map-number\" aria-hidden=\"true\">{{ item.n }}</span>\n\t\t\t\t\t\t\t\t<div class=\"cn-index-page__map-text\">\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"cn-index-page__map-title\" @click=\"onRowClick(item.row)\">\n\t\t\t\t\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<span v-if=\"item.sub\" class=\"cn-index-page__map-sub\">{{ item.sub }}</span>\n\t\t\t\t\t\t\t\t\t<span v-if=\"item.pills.length > 0 || item.due\" class=\"cn-index-page__map-pills\">\n\t\t\t\t\t\t\t\t\t\t<CnStatusBadge v-for=\"(pill, index) in item.pills\"\n\t\t\t\t\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\t\t\t\t\t:label=\"pill.label\"\n\t\t\t\t\t\t\t\t\t\t\t:variant=\"pill.variant\">\n\t\t\t\t\t\t\t\t\t\t\t<template v-if=\"pill.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t\t<CnIcon :name=\"pill.icon\" :size=\"14\" />\n\t\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t</CnStatusBadge>\n\t\t\t\t\t\t\t\t\t\t<span v-if=\"item.due\" class=\"cn-index-page__map-due\"><ClockOutline v-if=\"isBoardLook\" :size=\"14\" aria-hidden=\"true\" />{{ item.due }}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t<div v-if=\"mapList.missing.length > 0\" class=\"cn-index-page__map-missing\" data-testid=\"cn-index-map-missing\">\n\t\t\t\t\t\t\t<strong>{{ mapMissingTitle }}</strong>\n\t\t\t\t\t\t\t<NcButton variant=\"tertiary-no-background\" data-testid=\"cn-index-map-missing-table\" @click=\"onViewModeChange('table')\">\n\t\t\t\t\t\t\t\t{{ mapMissingLink }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<CnMapWidget\n\t\t\t\t\tv-else-if=\"currentViewMode === 'map'\"\n\t\t\t\t\tclass=\"cn-index-page__map\"\n\t\t\t\t\t:zoom=\"mapZoom\"\n\t\t\t\t\t:center=\"mapCenter\"\n\t\t\t\t\t:layers=\"mapLayers\"\n\t\t\t\t\t:basemaps=\"mapBasemaps\"\n\t\t\t\t\t:markers=\"mapMarkers\"\n\t\t\t\t\t:clustering=\"mapClustering\"\n\t\t\t\t\t:autoFit=\"true\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t@markerClick=\"onMarkerClick\" />\n\n\t\t\t\t<!--\n\t\t\t\t\tBoard view. The columns are the schema's stages and a move\n\t\t\t\t\tgoes through the host's transition; CnBoardView never\n\t\t\t\t\twrites the status field, so with no runTransition it is\n\t\t\t\t\tread-only rather than broken.\n\t\t\t\t-->\n\t\t\t\t<CnBoardView\n\t\t\t\t\tv-else-if=\"currentViewMode === 'board'\"\n\t\t\t\t\t:rows=\"displayObjects\"\n\t\t\t\t\t:statusFieldSchema=\"boardFieldSchema\"\n\t\t\t\t\t:statusField=\"boardColumnField\"\n\t\t\t\t\t:columnKeyOf=\"boardColumnKeyOf\"\n\t\t\t\t\t:wrapColumns=\"board.wrap === true\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:allowedMoves=\"boardAllowedMoves\"\n\t\t\t\t\t:cardFields=\"board.cardFields || []\"\n\t\t\t\t\t:cardCells=\"board.cardCells || null\"\n\t\t\t\t\t:cardActions=\"boardCardActions\"\n\t\t\t\t\t:swimlaneField=\"board.swimlaneField || ''\"\n\t\t\t\t\t:dueRule=\"board.dueRule || null\"\n\t\t\t\t\t:cardRoles=\"board.card || null\"\n\t\t\t\t\t:pillLooks=\"refLooks\"\n\t\t\t\t\t:colorField=\"board.colorField || ''\"\n\t\t\t\t\t:sumField=\"board.sumField || ''\"\n\t\t\t\t\t:sumFormat=\"boardSumFormat\"\n\t\t\t\t\t:columnLimit=\"board.columnLimit || 0\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:runTransition=\"boardRunTransition\"\n\t\t\t\t\t:paged=\"isPaged\"\n\t\t\t\t\t@select=\"onSelect\"\n\t\t\t\t\t@loadMore=\"onBoardLoadMore\"\n\t\t\t\t\t@cardClick=\"onRowClick\"\n\t\t\t\t\t@cardAuxClick=\"onRowAuxClick\"\n\t\t\t\t\t@moved=\"onBoardMoved\"\n\t\t\t\t\t@cardAction=\"onRowAction\" />\n\n\t\t\t\t<!--\n\t\t\t\t\tDate axis. Reads only: nothing here reschedules, because a\n\t\t\t\t\tview that moved a bar on drag would be changing statutory\n\t\t\t\t\tdates from a picture.\n\t\t\t\t-->\n\t\t\t\t<CnDateAxisView\n\t\t\t\t\tv-else-if=\"currentViewMode === 'dateAxis'\"\n\t\t\t\t\t:rows=\"displayObjects\"\n\t\t\t\t\t:startField=\"dateAxis.startField || ''\"\n\t\t\t\t\t:endField=\"dateAxis.endField || ''\"\n\t\t\t\t\t:laneField=\"dateAxis.laneField || ''\"\n\t\t\t\t\t:labelField=\"dateAxis.labelField || ''\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t@rowClick=\"onRowClick\"\n\t\t\t\t\t@rowAuxClick=\"onRowAuxClick\" />\n\n\t\t\t\t<!--\n\t\t\t\t\tCalendar. The current filtered rows on a month by their date\n\t\t\t\t\tfield. The month is added to the list query (see\n\t\t\t\t\tcalendarRangeFilter), so only that month is fetched. Reads\n\t\t\t\t\tonly: nothing here reschedules a record.\n\t\t\t\t-->\n\t\t\t\t<CnObjectCalendar\n\t\t\t\t\tv-else-if=\"currentViewMode === 'calendar'\"\n\t\t\t\t\t:objects=\"displayObjects\"\n\t\t\t\t\t:dateField=\"calendar.dateField || ''\"\n\t\t\t\t\t:endDateField=\"calendar.endDateField || null\"\n\t\t\t\t\t:titleField=\"calendar.titleField || null\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:loading=\"effectiveLoading\"\n\t\t\t\t\t@rangeChange=\"onCalendarRange\"\n\t\t\t\t\t@objectClick=\"onRowClick\"\n\t\t\t\t\t@daySelect=\"onCalendarDaySelect\" />\n\n\t\t\t\t<!-- List view -->\n\t\t\t\t<CnObjectList\n\t\t\t\t\tv-else-if=\"currentViewMode === 'list'\"\n\t\t\t\t\t:objects=\"displayObjects\"\n\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t:config=\"renderedListConfig\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:emptyText=\"emptyText\"\n\t\t\t\t\t@click=\"onRowClick\"\n\t\t\t\t\t@auxClick=\"onRowAuxClick\"\n\t\t\t\t\t@select=\"onSelect\">\n\t\t\t\t\t<!--\n\t\t\t\t\t\tList-item slot resolution priority (highest first):\n\t\t\t\t\t\t1. Parent-provided `#list-item` scoped slot — App.vue overrides win.\n\t\t\t\t\t\t2. `listComponent` prop (or manifest `pages[].config.listComponent`)\n\t\t\t\t\t\t resolved against the customComponents registry.\n\t\t\t\t\t\t3. CnObjectList's default CnObjectRow.\n\t\t\t\t\t-->\n\t\t\t\t\t<template v-if=\"$slots['list-item']\" #list-item=\"{ object, selected }\">\n\t\t\t\t\t\t<slot name=\"list-item\" :object=\"object\" :selected=\"selected\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if=\"resolvedListComponent\" #list-item=\"{ object, selected }\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"resolvedListComponent\"\n\t\t\t\t\t\t\t:item=\"object\"\n\t\t\t\t\t\t\t:object=\"object\"\n\t\t\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t\t\t:register=\"register\"\n\t\t\t\t\t\t\t:selected=\"selected\"\n\t\t\t\t\t\t\t@click=\"(...args) => onRowClick(object, args.find(isDomEvent))\"\n\t\t\t\t\t\t\t@mousedown=\"onCustomItemMouseDown\"\n\t\t\t\t\t\t\t@auxclick=\"onCustomItemAuxClick(object, $event)\"\n\t\t\t\t\t\t\t@select=\"onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<!-- Per-part row slots (list view only): forwarded to CnObjectRow\n\t\t\t\t\t so an app can override just the leading icon or the badge\n\t\t\t\t\t while keeping the config-driven title/subtitle. -->\n\t\t\t\t\t<template v-if=\"$slots['row-icon']\" #row-icon=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-icon\" :object=\"object\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"$slots['row-badges']\" #row-badges=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-badges\" :object=\"object\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"hasRowActions || $slots['row-actions']\" #row-actions=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-actions\" :row=\"object\">\n\t\t\t\t\t\t\t<CnRowActions\n\t\t\t\t\t\t\t\t:actions=\"rowActionsFor(object)\"\n\t\t\t\t\t\t\t\t:row=\"object\"\n\t\t\t\t\t\t\t\t:rowLabel=\"rowTitleFor(object)\"\n\t\t\t\t\t\t\t\t@action=\"onRowAction\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</template>\n\t\t\t\t</CnObjectList>\n\n\t\t\t\t<!-- Card view -->\n\t\t\t\t<CnCardGrid\n\t\t\t\t\tv-else\n\t\t\t\t\t:objects=\"displayObjects\"\n\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:clickToView=\"rowClickOpens\"\n\t\t\t\t\t:cardFields=\"resolvedCardFields\"\n\t\t\t\t\t:cardLayout=\"cardLayout\"\n\t\t\t\t\t:pillLooks=\"refLooks\"\n\t\t\t\t\t:cardFieldColumns=\"cardFieldColumns\"\n\t\t\t\t\t:accentOf=\"cardAccent\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:emptyText=\"emptyText\"\n\t\t\t\t\t@click=\"onRowClick\"\n\t\t\t\t\t@auxClick=\"onRowAuxClick\"\n\t\t\t\t\t@select=\"onSelect\">\n\t\t\t\t\t<!--\n\t\t\t\t\t\tCard slot resolution priority (highest first):\n\t\t\t\t\t\t1. Parent-provided `#card` scoped slot — App.vue overrides win.\n\t\t\t\t\t\t2. `cardComponent` prop (or manifest `pages[].config.cardComponent`)\n\t\t\t\t\t\t resolved against the customComponents registry.\n\t\t\t\t\t\t3. CnCardGrid's default CnObjectCard.\n\t\t\t\t\t-->\n\t\t\t\t\t<template v-if=\"$slots.card\" #card=\"{ object, selected }\">\n\t\t\t\t\t\t<slot name=\"card\" :object=\"object\" :selected=\"selected\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if=\"resolvedCardComponent\" #card=\"{ object, selected }\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"resolvedCardComponent\"\n\t\t\t\t\t\t\t:item=\"object\"\n\t\t\t\t\t\t\t:object=\"object\"\n\t\t\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t\t\t:register=\"register\"\n\t\t\t\t\t\t\t:selected=\"selected\"\n\t\t\t\t\t\t\t@click=\"(...args) => onRowClick(object, args.find(isDomEvent))\"\n\t\t\t\t\t\t\t@mousedown=\"onCustomItemMouseDown\"\n\t\t\t\t\t\t\t@auxclick=\"onCustomItemAuxClick(object, $event)\"\n\t\t\t\t\t\t\t@select=\"onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"hasRowActions\" #card-actions=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-actions\" :row=\"object\">\n\t\t\t\t\t\t\t<CnRowActions\n\t\t\t\t\t\t\t\t:actions=\"rowActionsFor(object)\"\n\t\t\t\t\t\t\t\t:row=\"object\"\n\t\t\t\t\t\t\t\t:rowLabel=\"rowTitleFor(object)\"\n\t\t\t\t\t\t\t\t:triggerLabel=\"isBoardLook ? t('nextcloud-vue', 'More actions for {name}', { name: rowTitleFor(object) }) : ''\"\n\t\t\t\t\t\t\t\t@action=\"onRowAction\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</template>\n\t\t\t\t</CnCardGrid>\n\n\t\t\t\t<!-- Right-click context menu (positioned at cursor via CSS). Same per-row list as the row actions menu, so the two never drift. -->\n\t\t\t\t<CnContextMenu\n\t\t\t\t\tv-model:open=\"contextMenuOpen\"\n\t\t\t\t\t:actions=\"rowActionsFor(contextMenuShownRow)\"\n\t\t\t\t\t:targetItem=\"contextMenuShownRow\"\n\t\t\t\t\t@action=\"onRowAction\"\n\t\t\t\t\t@close=\"closeContextMenu\" />\n\n\t\t\t\t<p\n\t\t\t\t\tv-if=\"searchInFiles && contentSearch\"\n\t\t\t\t\tclass=\"cn-index-page__content-search-note\"\n\t\t\t\t\tdata-testid=\"cn-index-content-search-note\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'File matches are limited to the best 50.') }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- The map's count line (`mapConfig.count`) and the note when a map\n\t\t\t\t that plots every row reached its limit. -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"mapCountLine || mapCapNote\"\n\t\t\t\t\tclass=\"cn-index-page__map-count\"\n\t\t\t\t\tdata-testid=\"cn-index-map-count\">\n\t\t\t\t\t<span v-if=\"mapCountLine\" data-testid=\"cn-index-map-count-line\">{{ mapCountLine }}</span>\n\t\t\t\t\t<span v-if=\"mapCapNote\" class=\"cn-index-page__map-cap\" data-testid=\"cn-index-map-cap\">{{ mapCapNote }}</span>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- The board view's footer: it holds every row it loaded, so it\n\t\t\t\t counts them and offers the next batch instead of pages. -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"boardLoadsAll && boardLoadCounts.total > 0\"\n\t\t\t\t\tclass=\"cn-index-page__board-load\"\n\t\t\t\t\tdata-testid=\"cn-index-board-load\">\n\t\t\t\t\t<span class=\"cn-index-page__board-load-count\" data-testid=\"cn-index-board-load-count\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Showing {count} of {total}', { count: boardLoadCounts.shown, total: boardLoadCounts.total }) }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"isPaged\"\n\t\t\t\t\t\t:disabled=\"effectiveLoading\"\n\t\t\t\t\t\tdata-testid=\"cn-index-board-load-more\"\n\t\t\t\t\t\t@click=\"onBoardLoadMore\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Load more') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Pagination -->\n\t\t\t\t<CnPagination\n\t\t\t\t\tv-else-if=\"effectivePagination && (effectivePagination.pages > 1 || (isBoardLook && effectivePagination.total > 0))\"\n\t\t\t\t\t:variant=\"isBoardLook ? 'board' : ''\"\n\t\t\t\t\t:footerNote=\"effectiveFooterNote\"\n\t\t\t\t\t:currentPage=\"effectivePagination.page || 1\"\n\t\t\t\t\t:totalPages=\"effectivePagination.pages || 1\"\n\t\t\t\t\t:totalItems=\"effectivePagination.total || 0\"\n\t\t\t\t\t:currentPageSize=\"effectivePagination.limit || 20\"\n\t\t\t\t\tclass=\"cn-index-page__pagination\"\n\t\t\t\t\t@pageChanged=\"onPageEvent\"\n\t\t\t\t\t@pageSizeChanged=\"onPageSizeEvent\" />\n\n\t\t\t\t<!-- A notice under the list (`notice`): DqPrivacy's \"Een\n\t\t\t\t AVG-verzoek is een zaak met ...\" band. -->\n\t\t\t\t<NcNoteCard\n\t\t\t\t\tv-if=\"notice && notice.text && !noticeOnPage\"\n\t\t\t\t\tclass=\"cn-index-page__notice\"\n\t\t\t\t\t:type=\"noticeType\"\n\t\t\t\t\tdata-testid=\"cn-index-page-notice\">\n\t\t\t\t\t{{ cnTranslate(notice.text) }}\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- Cards after the list (`afterList`), stacked in order (PqSocial). -->\n\t\t\t\t<CnIndexPageWidgets\n\t\t\t\t\tv-if=\"presentedAfterList.length > 0\"\n\t\t\t\t\tclass=\"cn-index-page__after-list\"\n\t\t\t\t\tvariant=\"after-list\"\n\t\t\t\t\t:widgets=\"presentedAfterList\" />\n\t\t\t</div>\n\n\t\t\t<!-- The open record, beside the list on a wide screen and instead\n\t\t\t of it on a narrow one. Same slot either way, and the host\n\t\t\t mounts the same detail component in it that the full route\n\t\t\t mounts: two detail implementations drift within a month. -->\n\t\t\t<div\n\t\t\t\tv-if=\"splitLayout !== 'list'\"\n\t\t\t\tclass=\"cn-index-page__split-pane\"\n\t\t\t\t:class=\"{ 'cn-index-page__split-pane--full': splitLayout === 'detail' }\"\n\t\t\t\t:style=\"splitLayout === 'split' ? { width: splitPaneWidth } : null\"\n\t\t\t\tdata-testid=\"cn-index-page-split-pane\"\n\t\t\t\t:data-split-layout=\"splitLayout\">\n\t\t\t\t<!-- An <a>, not a button: closing the pane pushes the list's\n\t\t\t\t route, so the browser supplies middle-click and open-in-new-tab\n\t\t\t\t while `.prevent` keeps the plain click in-app. -->\n\t\t\t\t<a\n\t\t\t\t\tv-if=\"splitCloseVisible\"\n\t\t\t\t\tclass=\"cn-index-page__split-close\"\n\t\t\t\t\t:href=\"splitCloseHref\"\n\t\t\t\t\t:title=\"splitCloseTitle\"\n\t\t\t\t\tdata-testid=\"cn-index-page-split-close\"\n\t\t\t\t\t@click.prevent=\"closeSplitPane\">\n\t\t\t\t\t<Close :size=\"16\" />\n\t\t\t\t\t<span>{{ splitCloseTitle }}</span>\n\t\t\t\t</a>\n\t\t\t\t<!-- @slot split-pane The open record, rendered beside the list. Mount the SAME detail component the full route mounts. -->\n\t\t\t\t<!-- @binding {string} id The record the address names. -->\n\t\t\t\t<!-- @binding {string} layout Either `split` (beside the list) or `detail` (the full page, below the breakpoint). -->\n\t\t\t\t<!-- @binding {Function} close Closes the pane and returns to the list, at the list's own address. -->\n\t\t\t\t<!-- @binding {Function} saved Call with the saved record to replace its row in the list without refetching the page. -->\n\t\t\t\t<slot\n\t\t\t\t\t:id=\"splitId\"\n\t\t\t\t\tname=\"split-pane\"\n\t\t\t\t\t:layout=\"splitLayout\"\n\t\t\t\t\t:close=\"closeSplitPane\"\n\t\t\t\t\t:saved=\"onSplitPaneSaved\" />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- The notice under the list card, on the page ground\n\t\t (`notice.placement: 'page'`, DqContracten). -->\n\t\t<NcNoteCard\n\t\t\tv-if=\"notice && notice.text && noticeOnPage\"\n\t\t\tclass=\"cn-index-page__notice cn-index-page__notice--page\"\n\t\t\t:type=\"noticeType\"\n\t\t\tdata-testid=\"cn-index-page-notice\">\n\t\t\t{{ cnTranslate(notice.text) }}\n\t\t</NcNoteCard>\n\n\t\t<!-- Manifest-driven sidebar — auto-mounted when sidebar.enabled\n\t\t AND sidebar.show !== false.\n\n\t\t When CnAppRoot is the host, the sidebar config is\n\t\t PUBLISHED to the `cnIndexSidebarConfig` provide (see\n\t\t mounted/beforeDestroy), and CnAppRoot mounts the\n\t\t CnIndexSidebar at NcContent level — the only place where\n\t\t Nextcloud's NcAppSidebar slides correctly from the right.\n\n\t\t When no CnAppRoot ancestor exists (legacy apps mounting\n\t\t CnIndexPage standalone), the inject default is the no-op\n\t\t `{ value: null }` and we fall back to inline rendering\n\t\t here so the legacy contract still works. -->\n\t\t<CnIndexSidebar\n\t\t\tv-if=\"shouldRenderInlineSidebar\"\n\t\t\t:open=\"sidebarOpen\"\n\t\t\t:schema=\"effectiveSchema\"\n\t\t\t:title=\"shownTitle\"\n\t\t\t:subtitle=\"sidebarSubtitle\"\n\t\t\t:icon=\"resolvedIcon\"\n\t\t\t:searchValue=\"effectiveSearchValue\"\n\t\t\t:visibleColumns=\"effectiveVisibleColumns\"\n\t\t\t:activeFilters=\"effectiveActiveFilters\"\n\t\t\t:columnGroups=\"resolvedSidebar.columnGroups || []\"\n\t\t\t:filterFields=\"resolvedSidebar.fields || null\"\n\t\t\t:facetData=\"effectiveFacetData\"\n\t\t\t:showMetadata=\"resolvedSidebar.showMetadata !== false\"\n\t\t\t:personalColumns=\"personalColumns\"\n\t\t\t:pinnedCount=\"pinnedColumnCount\"\n\t\t\t:sortOptions=\"sidebarSortOptions\"\n\t\t\t:currentSort=\"currentSortKeys\"\n\t\t\t:currentSortValue=\"sortSource.value\"\n\t\t\t:savedViews=\"savedViewsForSidebar\"\n\t\t\t:activeTab=\"sidebarActiveTab\"\n\t\t\tv-bind=\"sidebarSearchProps\"\n\t\t\t@update:open=\"sidebarOpen = $event\"\n\t\t\t@tabChange=\"sidebarActiveTab = $event\"\n\t\t\t@savedView=\"onSavedViewAction\"\n\t\t\t@search=\"onSearchEvent\"\n\t\t\t@columnsChange=\"onColumnsEvent\"\n\t\t\t@columnsReorder=\"onColumnsReorder\"\n\t\t\t@pinChange=\"onPinChange\"\n\t\t\t@columnsReset=\"onColumnsReset\"\n\t\t\t@filterChange=\"onFilterEvent\"\n\t\t\t@clearFilters=\"onClearFilters\"\n\t\t\t@sortChange=\"onSidebarSortChange\" />\n\t</div>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getCanonicalLocale, translatePlural as n, translate as t } from '@nextcloud/l10n'\nimport { NcActionButton, NcActionCaption, NcActionCheckbox, NcActionLink, NcActions, NcActionSeparator, NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard } from '@nextcloud/vue'\nimport { getCurrentInstance, inject, markRaw, ref } from 'vue'\nimport AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport ClockOutline from 'vue-material-design-icons/ClockOutline.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport DatabaseSearch from 'vue-material-design-icons/DatabaseSearch.vue'\nimport DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'\nimport Export from 'vue-material-design-icons/Export.vue'\nimport Eye from 'vue-material-design-icons/Eye.vue'\nimport FilterOutline from 'vue-material-design-icons/FilterOutline.vue'\nimport ImportIcon from 'vue-material-design-icons/Import.vue'\nimport TrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport Tune from 'vue-material-design-icons/Tune.vue'\nimport ViewColumnOutline from 'vue-material-design-icons/ViewColumnOutline.vue'\nimport CnConfirmDialog from '../../dialogs/CnConfirmDialog.vue'\nimport CnQuickEditDialog from '../../dialogs/CnQuickEditDialog.vue'\nimport CnBuildiqEditButton from '../CnBuildiqEditButton/CnBuildiqEditButton.vue'\nimport CnEmptyContent from '../CnEmptyContent/CnEmptyContent.vue'\nimport CnFollowToggle from '../CnFollowToggle/CnFollowToggle.vue'\nimport CnRelatedFieldFilters from '../CnRelatedFieldFilters/CnRelatedFieldFilters.vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport CnIndexPageWidgets from './CnIndexPageWidgets.vue'\nimport { useContextMenu } from '../../composables/index.js'\nimport { useLook } from '../../composables/useLook.js'\nimport { copyKindsOf } from '../../composables/useObjectCopy.js'\nimport { createRefLabelResolver } from '../../composables/useRefLabels.js'\nimport { useSavedViewsApi } from '../../composables/useSavedViewsApi.js'\nimport { METADATA_COLUMNS } from '../../constants/metadata.js'\nimport { useObjectStore } from '../../store/useObjectStore.js'\nimport { followItemActionLink, headerActionAsLink, resolveItemActionLink, routeHref } from '../../utils/actionLink.js'\nimport { buildOnSuccessRoute, dispatchAction as dispatchSharedAction, isExternalActionTarget, resolveRegisteredHandler } from '../../utils/actionsDispatcher.js'\nimport {\n\tbuildReferenceStages,\n\tbuildValueStages,\n\tcolumnFieldsOf,\n\tcolumnKeyOfRow,\n\tdeclaredStatesOf,\n\tfetchReferenceObjects,\n\tflattenItemRefs,\n\tfullTargetOf,\n\treferenceTargetOf,\n\trefIdOf,\n\tresolveDropValue,\n} from '../../utils/boardReferenceColumns.js'\nimport { cnFetchJson } from '../../utils/cnFetch.js'\nimport { isColumnSortable } from '../../utils/columnFilters.js'\nimport { countLine } from '../../utils/countLine.js'\nimport { reportBindingProblems } from '../../utils/diagnostics.js'\nimport { fetchGroupedCounts } from '../../utils/fetchAggregate.js'\nimport { fetchFilterCounts, fetchListTotal } from '../../utils/fetchFilterCounts.js'\nimport { listText, rangeChipText, rangeEnds, relativeRangeText } from '../../utils/filterRangeLabel.js'\nimport { unwrapAppConfig } from '../../utils/formatMetric.js'\nimport { groupDisplayName, loadGroupDisplayName } from '../../utils/groupAutocomplete.js'\nimport { HEADING_LEVEL } from '../../utils/headingLevel.js'\nimport { buildExportUrl } from '../../utils/indexExportHelpers.js'\nimport { labelsByField } from '../../utils/labelsByField.js'\nimport { lensUnavailableText } from '../../utils/lensAvailability.js'\nimport { isModifiedClick, openRowTarget } from '../../utils/linkNavigation.js'\nimport { resolveClaimedTeams, resolveClaimTokens, splitViewsIntoTabs, viewAsTab, viewIdOf } from '../../utils/listLenses.js'\nimport { LIST_SHORTCUTS, listPaletteCommands, shortcutFor } from '../../utils/listShortcuts.js'\nimport { mapListItems } from '../../utils/mapList.js'\nimport { markerColorOf, normalizeMarkerColor, resolveCssColor } from '../../utils/mapMarkerColor.js'\nimport { multiKeySort } from '../../utils/multiKeySort.js'\nimport { fillMyTeamToken, loadMyTeam, peekMyTeam, peekMyTeamName } from '../../utils/myTeam.js'\nimport { fetchGroups } from '../../utils/nextcloudDirectory.js'\nimport { OBJECTS_CHANGED_EVENT } from '../../utils/objectSignals.js'\nimport { objectUrlOf, patchObject } from '../../utils/objectWrite.js'\nimport { withPersonalLenses } from '../../utils/personalLenses.js'\nimport { getDotted } from '../../utils/propertySourceFill.js'\nimport { dropOptionalUnresolved, MY_TEAM_TOKEN, resolveDeepTokens, resolveFilterTokens, resolveFilterValue } from '../../utils/resolveFilterTokens.js'\nimport { resolveRowActions } from '../../utils/resolveRowActions.js'\nimport { resolveFilterMap } from '../../utils/routeFilters.js'\nimport { availableRowActions, DEFAULT_ROW_ACTION_FIELD, refusalReasonFor, undeclaredRowActions, withoutViewWhenRowOpensDetail } from '../../utils/rowActionAvailability.js'\nimport { isRowActionVisible, rowActionPayload } from '../../utils/rowActionItem.js'\nimport { isNewTabClick, isNewTabHandled, isRowMiddleClick, markNewTabHandled, preventMiddleClickAutoscroll } from '../../utils/rowAuxClick.js'\nimport { compileRowClass } from '../../utils/rowClassRules.js'\nimport { DEFAULT_ROW_INDICATOR_CAP } from '../../utils/rowIndicators.js'\nimport { buildRouteQueryFromViewState, buildViewCreatePayload, defaultFilterViews, extractViewState, extractViewStateFromRouteQuery, normalizeSharedWith, pageOffersSavedViews, savedViewScope, schemaSlug, viewAccess, viewMatchesScope } from '../../utils/savedViewHelpers.js'\nimport { savedViewIcon } from '../../utils/savedViewMenu.js'\nimport { savedViewBadge, savedViewOverrides } from '../../utils/savedViewOverrides.js'\nimport { viewCriteriaSummary } from '../../utils/savedViewSummary.js'\nimport { columnsFromSchema, fieldsFromSchema, isGroupProp } from '../../utils/schema.js'\nimport { resolveScopeLayout, resolveScopePresentation } from '../../utils/scopeListLayout.js'\nimport { readSearchRefusal } from '../../utils/searchRefusal.js'\nimport { orderToSortKeys } from '../../utils/sortOrder.js'\nimport { annotateRows, filterSourceRows, pageSourceRows, rowsFromSourceBody } from '../../utils/sortSourceRows.js'\nimport { userDisplayName } from '../../utils/userDisplayName.js'\nimport { dispatchObjectCreated } from '../../utils/walkthroughSignals.js'\nimport { CnActionButtons } from '../CnActionButtons/index.js'\nimport { CnActionsBar } from '../CnActionsBar/index.js'\nimport { CnAdvancedFormDialog } from '../CnAdvancedFormDialog/index.js'\nimport { CnBoardView } from '../CnBoardView/index.js'\nimport { CnCardGrid } from '../CnCardGrid/index.js'\nimport { CnContextMenu } from '../CnContextMenu/index.js'\nimport { CnCopyDialog } from '../CnCopyDialog/index.js'\nimport { CnDataTable } from '../CnDataTable/index.js'\nimport { CnDateAxisView } from '../CnDateAxisView/index.js'\nimport { CnDeleteDialog } from '../CnDeleteDialog/index.js'\nimport { CnFolderSidebar } from '../CnFolderSidebar/index.js'\nimport { CnFormDialog } from '../CnFormDialog/index.js'\nimport { CnIcon } from '../CnIcon/index.js'\nimport { CnIndexSidebar } from '../CnIndexSidebar/index.js'\nimport { CnMapWidget } from '../CnMapWidget/index.js'\nimport { CnMassCopyDialog } from '../CnMassCopyDialog/index.js'\nimport { CnMassDeleteDialog } from '../CnMassDeleteDialog/index.js'\nimport { CnMassExportDialog } from '../CnMassExportDialog/index.js'\nimport { CnMassImportDialog } from '../CnMassImportDialog/index.js'\nimport { CnObjectCalendar } from '../CnObjectCalendar/index.js'\nimport { CnObjectList } from '../CnObjectList/index.js'\nimport { CnPageHeader } from '../CnPageHeader/index.js'\nimport { CnPagination } from '../CnPagination/index.js'\nimport { CnQuickFilterBar } from '../CnQuickFilterBar/index.js'\nimport { CnRowActions } from '../CnRowActions/index.js'\nimport { CnSavedViewEditDialog } from '../CnSavedViewEditDialog/index.js'\nimport { CnSavedViewPresentationDialog } from '../CnSavedViewPresentationDialog/index.js'\nimport { CnSavedViewsControl } from '../CnSavedViewsControl/index.js'\nimport { CnSavedViewShareDialog } from '../CnSavedViewShareDialog/index.js'\nimport { CnSaveViewDialog } from '../CnSaveViewDialog/index.js'\nimport { applyAiContext } from './aiContext.js'\nimport { buildDefaultActions } from './defaultActions.js'\nimport { dispatchAction } from './manifestActionDispatch.js'\nimport { applyManualOrder, dropInOrder, manualOrderKey, moveInOrder, visibleIdsOf } from './manualOrder.js'\nimport { orderColumns, personalColumnsKey, reconcilePersonalColumns } from './personalColumns.js'\nimport { rowsToCsv } from './rowsToCsv.js'\nimport { createSelfModeActions, resolveRowTarget } from './selfModeActions.js'\nimport { applyRowPatches, normalisePaneWidth, rowIdOf, splitLayoutFor } from './splitView.js'\nimport { declaredSearchFields, useNamedSource } from './useNamedSource.js'\nimport { BOARD_PAGE_SIZE, mapPlotAllLimitOf, resolveInitialQuickFilterIndex, useSelfFetchList } from './useSelfFetchList.js'\n\n/** Rows fetched for one month in calendar mode. */\nconst CALENDAR_PAGE_SIZE = 200\n\n/**\n * The separator a date-range filter uses in the URL: `2026-09-21..2026-09-25`.\n *\n * One query parameter per FIELD, not per bound, so the link reads as the\n * question the person asked and an open-ended window still round-trips\n * (`..2026-09-25` is \"due before Friday\").\n *\n * @type {string}\n */\nconst RANGE_SEPARATOR = '..'\n\n/**\n * Whether a filter map names the `@myTeam` token anywhere.\n *\n * @param {object} filters A view's filters.\n * @return {boolean}\n */\nfunction usesMyTeam(filters) {\n\treturn JSON.stringify(filters || {}).includes(`\"${MY_TEAM_TOKEN}\"`)\n}\n\n/** Key of the synthetic follow column (`showFollowColumn`). */\nconst FOLLOW_COLUMN_KEY = '__follow'\n\n/**\n * Whether a declared column starts hidden (`{ key, hidden: true }`): it stays\n * off until the visible-column set names it, which the person does from the\n * Columns tab.\n *\n * @param {string|object} column A declared column.\n * @return {boolean} True for a column object with `hidden: true`.\n * @spec openspec/changes/screens-column-hidden-by-default/specs/index-page/spec.md\n */\nfunction isHiddenByDefault(column) {\n\treturn Boolean(column && typeof column === 'object' && column.hidden === true)\n}\n\n/**\n * Whether a schema property wants a from/to pair rather than a value list.\n *\n * @param {object} prop The schema property.\n *\n * @return {boolean} True for a range control.\n */\nfunction isRangeControl(prop) {\n\tconst control = String((prop && prop.inputControl) || '')\n\treturn control === 'date-range' || control === 'range'\n}\n\n/**\n * The filter declarations a page carries on its sidebar config.\n *\n * `sidebar.fields` and not `config.schema`: the schema key names the\n * OpenRegister schema a page self-fetches from, and a named source has no\n * register or schema to point at. The manifest schema types it as a string\n * for exactly that reason.\n *\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} `{ propertyName: declaration }`, empty when none.\n */\nfunction declaredFilterFields(props) {\n\tconst fields = props.sidebar && props.sidebar.fields\n\tconst declared = (fields && typeof fields === 'object') ? { ...fields } : {}\n\t// An endpoint source's facet pickers are filters the address carries too.\n\tconst facets = props.sourceConfig && Array.isArray(props.sourceConfig.facets) ? props.sourceConfig.facets : []\n\tfor (const facet of facets) {\n\t\tif (facet && typeof facet.field === 'string' && facet.field !== '' && !declared[facet.field]) {\n\t\t\tdeclared[facet.field] = { facetable: true }\n\t\t}\n\t}\n\treturn declared\n}\n\n/**\n * Read a named-source page's sidebar filters back out of `$route.query`.\n *\n * Only properties the page's own schema declares `facetable` are read, so an\n * unrelated query parameter (`?action=create`, a saved-view key) never\n * becomes a filter, and a hand-edited link cannot invent a field the source\n * has no argument for.\n *\n * @param {import('vue').ComponentInternalInstance|null} instance The instance, for `$route`.\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} The `{ fieldKey: values }` map, empty when the link carries none.\n */\nfunction namedFiltersFromRoute(instance, props) {\n\tconst route = instance && instance.proxy && instance.proxy.$route\n\treturn namedFiltersFromQuery((route && route.query) || {}, props)\n}\n\n/**\n * The named-source filters the page opens with: the ones the address carries,\n * else the page's `defaultFilters` with their tokens resolved (`@monthStart`,\n * `@myGroups`), unless the address names a saved view.\n *\n * @param {import('vue').ComponentInternalInstance|null} instance The instance, for `$route`.\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} The `{ fieldKey: values | { from, to } }` map.\n * @spec openspec/changes/named-source-default-filters/specs/index-page/spec.md#requirement-a-named-source-page-can-open-with-removable-default-filters\n */\nfunction namedFiltersWithDefaults(instance, props) {\n\tconst fromRoute = namedFiltersFromRoute(instance, props)\n\tconst query = (instance && instance.proxy && instance.proxy.$route && instance.proxy.$route.query) || {}\n\tconst defaults = props.defaultFilters\n\tif (!props.entitySource || Object.keys(fromRoute).length > 0 || query.savedView || !defaults || typeof defaults !== 'object') {\n\t\treturn fromRoute\n\t}\n\treturn resolveFilterTokens(defaults)\n}\n\n/**\n * The named-source filters a query carries, as `namedFiltersFromRoute` reads them.\n *\n * @param {object} query The route query.\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} The `{ fieldKey: values }` map.\n */\nfunction namedFiltersFromQuery(query, props) {\n\tif (!props.entitySource) {\n\t\treturn {}\n\t}\n\tconst properties = declaredFilterFields(props)\n\tconst out = {}\n\n\tfor (const [key, prop] of Object.entries(properties)) {\n\t\tif (!prop || prop.facetable !== true) {\n\t\t\tcontinue\n\t\t}\n\t\tconst raw = query[key]\n\t\tif (raw === undefined || raw === null || raw === '') {\n\t\t\tcontinue\n\t\t}\n\t\tconst value = Array.isArray(raw) ? raw.join(',') : String(raw)\n\n\t\tif (isRangeControl(prop)) {\n\t\t\tconst [from, to] = value.split(RANGE_SEPARATOR)\n\t\t\tconst range = {}\n\t\t\tif (from) {\n\t\t\t\trange.from = from\n\t\t\t}\n\t\t\tif (to) {\n\t\t\t\trange.to = to\n\t\t\t}\n\t\t\tif (Object.keys(range).length > 0) {\n\t\t\t\tout[key] = range\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tconst values = value.split(',').filter((entry) => entry !== '')\n\t\tif (values.length > 0) {\n\t\t\tout[key] = values\n\t\t}\n\t}\n\n\treturn out\n}\n\n/**\n * The query-parameter spelling of one named-source filter value.\n *\n * @param {unknown} values The chosen values, or a `{ from, to }` range.\n *\n * @return {string} The parameter value, or '' when nothing is chosen.\n */\nfunction namedFilterToQuery(values) {\n\tif (values && typeof values === 'object' && !Array.isArray(values)) {\n\t\tconst from = values.from || ''\n\t\tconst to = values.to || ''\n\t\treturn (from === '' && to === '') ? '' : `${from}${RANGE_SEPARATOR}${to}`\n\t}\n\tconst list = (Array.isArray(values) ? values : [values])\n\t\t.map((entry) => ((entry && typeof entry === 'object' && 'id' in entry) ? entry.id : entry))\n\t\t.filter((entry) => entry !== undefined && entry !== null && String(entry) !== '')\n\treturn list.join(',')\n}\n\n/**\n * Active filters with each `{ from, to }` window spelled as the header range\n * keys `<key>[gte]` and `<key>[lte]`.\n *\n * @param {object} filters The active filters.\n * @return {object} The filters as a header filter reads them.\n * @spec openspec/changes/named-source-header-filters/specs/index-page/spec.md#requirement-a-named-source-can-filter-from-its-column-headers-through-its-search-fields\n */\nfunction rangesAsBounds(filters) {\n\tconst out = {}\n\tfor (const [key, value] of Object.entries(filters || {})) {\n\t\tif (value && typeof value === 'object' && !Array.isArray(value) && ('from' in value || 'to' in value)) {\n\t\t\tif (value.from) {\n\t\t\t\tout[`${key}[gte]`] = value.from\n\t\t\t}\n\t\t\tif (value.to) {\n\t\t\t\tout[`${key}[lte]`] = value.to\n\t\t\t}\n\t\t} else {\n\t\t\tout[key] = value\n\t\t}\n\t}\n\treturn out\n}\n\n/**\n * Header filter params with each `<key>[gte]` / `<key>[lte]` pair folded into\n * one `{ from, to }` window (an empty list clears the window, `[]` for others).\n *\n * @param {object} params The header filter's params, `{ key: values[] }`.\n * @return {object} `{ key: values[] | { from, to } }`.\n * @spec openspec/changes/named-source-header-filters/specs/index-page/spec.md#requirement-a-named-source-can-filter-from-its-column-headers-through-its-search-fields\n */\nfunction boundsAsRanges(params) {\n\tconst out = {}\n\tfor (const [key, values] of Object.entries(params || {})) {\n\t\tconst list = Array.isArray(values) ? values : []\n\t\tconst bound = key.match(/^(.+)\\[(gte|lte)\\]$/)\n\t\tif (!bound) {\n\t\t\tout[key] = list\n\t\t\tcontinue\n\t\t}\n\t\tconst window = (out[bound[1]] && typeof out[bound[1]] === 'object' && !Array.isArray(out[bound[1]])) ? out[bound[1]] : { from: '', to: '' }\n\t\tconst value = list.length > 0 ? String(list[0]).slice(0, 10) : ''\n\t\twindow[bound[2] === 'gte' ? 'from' : 'to'] = value\n\t\tout[bound[1]] = window\n\t}\n\treturn out\n}\n\n/**\n * CnIndexPage — Top-level schema-driven index page component.\n *\n * Assembles sub-components (CnPageHeader, CnActionsBar, table, cards,\n * pagination, mass actions, single-object dialogs) into a single\n * zero-config page.\n *\n * Dialogs are overridable via named slots:\n * - `#form-dialog` — Replace the create/edit dialog entirely\n * - `#delete-dialog` — Replace the single-item delete dialog\n * - `#copy-dialog` — Replace the single-item copy dialog\n * - `#form-fields` — Replace only the form content inside the built-in form dialog (CnFormDialog only)\n *\n * Use the `useAdvancedFormDialog` prop to use CnAdvancedFormDialog for create/edit (properties table, JSON tab, optional metadata).\n *\n * Multi-column sort (self-fetch mode: `register` + `schema`, no external\n * `objects`): shift+click a second/third sortable header in the embedded\n * CnDataTable to build a priority-ordered sort. The active key list is\n * translated into OpenRegister's `_order` query param (`{field: 'asc'|\n * 'desc', ...}`, key order = priority — the exact shape `ObjectsController::\n * normalizeOrderParameter` / `MagicMapper` consume) and persisted in\n * `$route.query._order` (JSON-encoded), so a reload or a shared link\n * restores the same sort. Host-controlled (non-self-fetch) pages pass their\n * own `sortKeys` prop instead.\n *\n * Minimal usage (auto-generated dialogs from schema)\n * ```vue\n * <CnIndexPage\n * title=\"Clients\"\n * :schema=\"effectiveSchema\"\n * :objects=\"clients\"\n * :pagination=\"effectivePagination\"\n * :loading=\"loading\"\n * @create=\"onCreate\"\n * @edit=\"onEdit\"\n * @delete=\"onDelete\"\n * @refresh=\"fetchClients\"\n * @row-click=\"openClient\"\n * @page-changed=\"onPage\" />\n * ```\n *\n * With custom form dialog\n * ```vue\n * <CnIndexPage ...>\n * <template #form-dialog=\"{ item, schema, confirm, close }\">\n * <MyCustomFormDialog :item=\"item\" @save=\"confirm\" @close=\"close\" />\n * </template>\n * </CnIndexPage>\n * ```\n *\n * @event {void} add — Add button clicked (backward compat, only if listener attached)\n * @event {object} create — Form dialog create confirmed. Payload: formData object\n * @event {object} edit — Form dialog edit confirmed. Payload: formData object (includes id)\n * @event {string} delete — Single delete confirmed. Payload: item ID\n * @event {{ id: string, newName: string }} copy — Single copy confirmed\n * @event {string[]} mass-delete — Mass delete confirmed. Payload: array of IDs\n * @event {object} mass-copy — Mass copy confirmed. Payload: { ids, pattern }\n * @event {object} mass-export — Mass export confirmed. Payload: { ids, format }\n * @event {object} mass-import — Mass import confirmed. Payload: import data\n * @event {void} refresh — Refresh button clicked\n * @event {object} row-click — Table row or card clicked. Payload: (row, event) — the row object and the native click event\n * @event {object} row-aux-click — Table row or card middle-clicked. Payload: (row, event) — the row object and the native auxclick event\n * @event {{ key: string, order: string }} sort — Column sort changed\n * @event {number} page-changed — Pagination page changed\n * @event {number} page-size-changed — Pagination page size changed. In self-fetch mode the list refetches page 1 at the new size first.\n * @event {string[]} select — Selection changed. Payload: array of selected IDs\n * @event {object} action — Row action triggered. Payload: { action, row }\n * @event {{ action: string, id: string, selectedIds: Array, count: number }} bulk-action — A declarative bulk action was triggered from the selection strip. The SELECTION travels with it: an action that has to go and find out what was selected is one re-render away from acting on a different set than the user saw highlighted.\n * @event {{ target: string, props: object }} open-modal — A bulk action of type `open-modal` asks the host to open a registered modal. `props` carries `selectedIds` and `count` merged under the action's own props.\n * @event {object} apply-view — A saved view was applied (saved-views-ui). Payload: the View API object. Only emitted when `allowSavedViews`.\n * @event {string} search — Search input changed in the embedded sidebar. Only emitted when `sidebar.enabled`.\n * @event {string[]} columns-change — Visible columns changed in the embedded sidebar. Only emitted when `sidebar.enabled`.\n * @event {{ key: string, values: Array<unknown> }} filter-change — Facet filter changed in the embedded sidebar. Only emitted when `sidebar.enabled`.\n * @event {void} clear-filters — \"Clear all\" clicked in the embedded sidebar. Search, every active filter and the folder-sidebar selection are reset (self-fetch mode); a consumer-managed page gets the bare event to handle itself.\n *\n * @slot mass-actions — Extra mass action buttons (shown when items are selected)\n * @slot action-items — Extra action bar buttons\n * @slot after-search — Refinement controls beside the search field on the bar's left side (e.g. a filter menu button)\n * @slot before-collection — Content above the collection in every view mode (e.g. a folder/group strip)\n * @slot selection-actions — Bulk-action buttons in the contextual selection strip shown while a selection is active. Scope: `{ count, selectedIds }`\n * @slot header-actions — Extra buttons in the page header\n * @slot delete-dialog — Replace the single-item delete dialog. Scope: `{ show, item, confirm, close }`. Call `confirm()` to perform the delete.\n * @slot copy-dialog — Replace the single-item copy dialog. Scope: `{ show, item, confirm, close }`. Call `confirm(payload)` to perform the copy.\n * @slot form-dialog — Replace the create/edit form dialog. Scope: `{ show, item, schema, confirm, close }`. Call `confirm(formData)` to save through the host's normal persistence path.\n * @slot form-fields — Replace form content inside the built-in CnFormDialog. Scope: `{ fields, formData, errors, updateField }`\n * @slot import-fields — Extra fields in the import dialog\n * @slot empty — Custom empty state content\n * @slot card — Custom card template for card view. Scope: `{ row }`\n * @slot row-actions — Custom row actions. Scope: `{ row }`\n * @slot column-{key} — Custom cell renderer for a specific column. Scope: `{ row, value }`\n */\n\n/**\n * Whether a page's named source orders its rows itself: on the page\n * (`sortsRows`) or on the server (`sortParam`).\n *\n * @param {object} vm The index page.\n * @return {boolean}\n * @spec openspec/changes/tasks-source-sorts-on-server/specs/index-sources/spec.md#requirement-a-named-source-can-sort-on-the-server\n */\nfunction namedSourceSorts(vm) {\n\treturn Boolean(vm.isNamedSource && vm.namedSource\n\t\t&& (vm.namedSource.sortsRows === true || typeof vm.namedSource.sortParam === 'function'))\n}\nexport default {\n\tname: 'CnIndexPage',\n\n\tcomponents: {\n\t\tCnIndexPageWidgets,\n\t\tCnRelatedFieldFilters,\n\t\tCnStatusBadge,\n\t\tNcNoteCard,\n\t\tCnBuildiqEditButton,\n\t\tCnFollowToggle,\n\t\tNcLoadingIcon,\n\t\tCnEmptyContent,\n\t\tNcActions,\n\t\tNcActionLink,\n\t\tNcActionButton,\n\t\tNcActionCaption,\n\t\tNcActionSeparator,\n\t\tNcActionCheckbox,\n\t\tNcButton,\n\t\tAlertCircleOutline,\n\t\tClockOutline,\n\t\tClose,\n\t\tCog,\n\t\tDatabaseSearch,\n\t\tExport,\n\t\tFilterOutline,\n\t\tTune,\n\t\tViewColumnOutline,\n\t\tNcCheckboxRadioSwitch,\n\t\tCnPageHeader,\n\t\tCnQuickFilterBar,\n\t\tCnActionButtons,\n\t\tCnActionsBar,\n\t\tDotsHorizontal,\n\t\tCnIcon,\n\t\tCnDataTable,\n\t\tCnCardGrid,\n\t\tCnBoardView,\n\t\tCnDateAxisView,\n\t\tCnObjectCalendar,\n\t\tCnMapWidget,\n\t\tCnObjectList,\n\t\tCnFolderSidebar,\n\t\tCnPagination,\n\t\tCnRowActions,\n\t\tCnMassDeleteDialog,\n\t\tCnMassCopyDialog,\n\t\tCnMassExportDialog,\n\t\tCnMassImportDialog,\n\t\tCnDeleteDialog,\n\t\tCnCopyDialog,\n\t\tCnFormDialog,\n\t\tCnAdvancedFormDialog,\n\t\tCnContextMenu,\n\t\tCnIndexSidebar,\n\t\tCnSavedViewsControl,\n\t\tCnSavedViewPresentationDialog,\n\t\tCnSavedViewEditDialog,\n\t\tCnSavedViewShareDialog,\n\t\tCnSaveViewDialog,\n\t\tCnConfirmDialog,\n\t\tCnQuickEditDialog,\n\t},\n\n\t/**\n\t * Inject the customComponents registry from a CnAppRoot ancestor.\n\t * Used by:\n\t * - REQ-MAD-3 / REQ-MAD-8 (manifest-actions-dispatch): resolves\n\t * `actions[].handler` registry names to functions called on\n\t * row-action click.\n\t * - The cardComponent + form-dialog override paths: when set, the\n\t * prop-level `customComponents` wins, but the inject is the\n\t * default. See `effectiveCustomComponents`.\n\t *\n\t * Falls back to an empty object so `CnIndexPage` works standalone\n\t * (unit tests, isolated mount) without `CnAppRoot`.\n\t */\n\t/**\n\t * The list a side-panel widget reads (`cnIndexList`): the applied saved\n\t * view, the list's total, and a way to hand back a view that changed\n\t * (the saved-view alert widget). Getters, so a widget follows the page.\n\t *\n\t * @return {object}\n\t */\n\tprovide() {\n\t\treturn {\n\t\t\t// Widgets beside the list sit directly under the page's h1 in the\n\t\t\t// board look; the Nextcloud look keeps its h3 widget titles.\n\t\t\t[HEADING_LEVEL]: () => (this.isBoardLook ? 2 : 3),\n\t\t\tcnIndexList: Object.defineProperties({}, {\n\t\t\t\tappliedView: { enumerable: true, get: () => this.appliedSavedView },\n\t\t\t\ttotal: {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\tconst total = this.effectivePagination && this.effectivePagination.total\n\t\t\t\t\t\treturn typeof total === 'number' ? total : undefined\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\treplaceSavedView: { enumerable: true, value: (view) => this.replaceSavedView(view) },\n\t\t\t}),\n\t\t}\n\t},\n\n\tinject: {\n\t\tcnCustomComponents: { default: () => ({}) },\n\t\t/** The app's named formatters, provided by CnAppRoot, for the map list's pills and template tokens. */\n\t\tcnFormatters: { default: () => ({}) },\n\t\t/** The permissions the user holds, provided by CnAppRoot; for gated page tabs. */\n\t\tcnPermissions: { default: () => [] },\n\t\t/** The app config an ancestor provides, for `@config.<key>` in quick-filter labels. */\n\t\tcnAppConfig: { default: null },\n\t\t/** The app id CnAppRoot provides, for the plural form of `countSubtitle`. */\n\t\tcnAppId: { default: '' },\n\t\t/**\n\t\t * The app manifest, provided by CnAppRoot. A column with `labelField`\n\t\t * and `link: true` finds the referenced schema's detail page here.\n\t\t */\n\t\tcnManifest: { default: null },\n\t\t/**\n\t\t * The v2 component registry, provided by CnAppRoot. Named handlers\n\t\t * (`actions[].handler`, `bulkActions[].handler`,\n\t\t * `headerActions[].handler`) resolve here first and fall back to\n\t\t * `cnCustomComponents`, so an app can register a `kind: 'handler'`\n\t\t * entry instead of a bare function in the legacy map.\n\t\t */\n\t\tcnRegistry: { default: () => ({}) },\n\t\t/**\n\t\t * The per-user preference reader and writer, provided by CnAppRoot.\n\t\t * Used for the manual row order, which belongs to the person and the\n\t\t * list rather than to the records. The default is null, and every read\n\t\t * and write is guarded, so a page mounted with no CnAppRoot ancestor\n\t\t * simply has no held order instead of failing to render.\n\t\t */\n\t\tcnUserPreferences: { default: null },\n\t\t/**\n\t\t * The saved views this user put in the app menu, held by CnAppRoot:\n\t\t * `{ entries, toggle(entry) }`. Absent without the shell, and then\n\t\t * the sidebar offers no Add to menu.\n\t\t */\n\t\tcnSavedViewMenu: { default: null },\n\t\t/**\n\t\t * Consumer translation function, provided by CnAppRoot as\n\t\t * `cnTranslate: this.translate` (bound to the host app's id). Column and\n\t\t * filter labels come from schema property titles, authored in English as\n\t\t * the canonical source; the visible label is resolved through this\n\t\t * function so it follows the user's language. Defaults to identity when\n\t\t * used standalone (no CnAppRoot ancestor). The embedded CnDataTable\n\t\t * resolves its own header labels through the same injection.\n\t\t */\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/**\n\t\t * Reactive edit-mode flag from CnAppRoot's manifest editor. When truthy\n\t\t * the page shows a config cog in its actions bar (emits `configure`).\n\t\t */\n\t\tcnEditingBody: { default: false },\n\t\t/** Opens a registry modal, provided by CnAppRoot. Used by `createModal`. */\n\t\tcnOpenModal: { default: null },\n\t\t/**\n\t\t * Reactive holder provided by CnAppRoot for hoisting the\n\t\t * embedded CnIndexSidebar to NcContent level. The default\n\t\t * `{ value: null }` is what we get when no CnAppRoot\n\t\t * ancestor exists; in that case we fall back to inline\n\t\t * rendering inside the cn-index-page wrapper. See\n\t\t * `shouldRenderInlineSidebar` and the mounted/beforeDestroy\n\t\t * hooks below.\n\t\t */\n\t\tcnIndexSidebarConfig: { default: () => ({ value: null }) },\n\t\t/**\n\t\t * Sentinel set to `true` when a CnAppRoot ancestor exists.\n\t\t * The default `false` is used for legacy apps that mount\n\t\t * CnIndexPage standalone — those keep the inline sidebar\n\t\t * render. See `shouldRenderInlineSidebar` for the gate.\n\t\t */\n\t\tcnHostsIndexSidebar: { default: false },\n\t\t/**\n\t\t * Reactive AI context holder provided by CnAppRoot. This page\n\t\t * component writes pageKind, registerSlug, schemaSlug in\n\t\t * created() and watches props for subsequent changes. On\n\t\t * beforeUnmount(), fields are reset to avoid stale context on\n\t\t * subsequent custom pages.\n\t\t */\n\t\tcnAiContext: { default: null },\n\t},\n\n\tprops: {\n\t\t/** Page title */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * A breadcrumb under the title (manifest `config.breadcrumb`): one\n\t\t * crumb `{ label, route?, params?, href?, icon?, separator? }` or a\n\t\t * list; the title follows as the current crumb. Drawn as the detail\n\t\t * header's breadcrumb row. Null (the default) draws none.\n\t\t *\n\t\t * @type {object|Array<object>|null}\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tbreadcrumb: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * A note after the breadcrumb and a middle dot (manifest `config.headerMeta`),\n\t\t * such as \"{total} open\": `{total}` and `{shown}` are the list's counts,\n\t\t * and `{count:<name>}` the count of a list named in `headerMetaCounts`\n\t\t * (\"{total} contracten bij {count:suppliers} leveranciers\").\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\theaderMeta: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The other lists `headerMeta` counts (manifest `config.headerMetaCounts`):\n\t\t * `{ <name>: { register, schema, filter? } }`, each read as one list\n\t\t * total and filled in for `{count:<name>}`. While a count loads, or when\n\t\t * it fails, the note is left out rather than shown with a gap.\n\t\t *\n\t\t * @type {Record<string, {register: string, schema: string, filter?: object}>|null}\n\t\t */\n\t\theaderMetaCounts: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Tabs to sibling pages above the toolbar (manifest `config.pageTabs`),\n\t\t * each `{ id?, label, route?, params?, query?, href?, countFrom?: {\n\t\t * register, schema, filter? }, adminOnly?, permission? }`: DqPrivacy's\n\t\t * \"AVG-verzoeken | Datalekken\". The current page's tab is marked;\n\t\t * `countFrom` adds the count of that list. A tab with `adminOnly` shows\n\t\t * only to an instance admin, one with `permission` only to a user who\n\t\t * holds it. That hides the tab and nothing more: the page it points to\n\t\t * must still refuse the user on the server. Wins over a named source's\n\t\t * own page tabs.\n\t\t *\n\t\t * @type {Array<object>|null}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\tpageTabs: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * A notice under the list (manifest `config.notice`): `{ text,\n\t\t * variant?: 'info' | 'success' | 'warning' }`, a band that explains\n\t\t * the list, such as who decides what. The text goes through the host\n\t\t * translate.\n\t\t *\n\t\t * `placement: 'page'` draws it under the list card, on the page\n\t\t * ground, instead of inside the list under its rows.\n\t\t *\n\t\t * @type {{text: string, variant?: string, placement?: string}|null}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-show-a-notice-under-its-list\n\t\t * @spec openspec/changes/index-notice-below-card/specs/index-page/spec.md#requirement-an-index-page-notice-can-sit-under-the-list-card\n\t\t */\n\t\tnotice: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Optional description shown below the title */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * A description that carries the collection's total: `{total}` in\n\t\t * the text is replaced by the current pagination total (\"{total}\n\t\t * open cases\" reads \"48 open cases\"). Rendered in place of\n\t\t * `description` once a total is known; before that, `description`\n\t\t * shows. Manifest key `config.countSubtitle`. Goes through the host\n\t\t * translate function.\n\t\t *\n\t\t * `{ singular, plural }` picks the form by the total (\"1 invoice\",\n\t\t * \"12 invoices\") through the app's plural translation\n\t\t * (`translatePlural` with the app id CnAppRoot provides), so a\n\t\t * language with other plural rules gets its own forms.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-an-index-page-title-is-a-manifest-key\n\t\t * @spec openspec/changes/index-count-plural/specs/index-header/spec.md#requirement-the-count-line-takes-a-singular-and-a-plural-form\n\t\t * @type {string|{singular: string, plural: string}}\n\t\t */\n\t\tcountSubtitle: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Whether to show the page header (icon, title, description) inline.\n\t\t * When false (default), only the sidebar header shows the title\n\t\t * visually — but the `<h1>` is still rendered visually-hidden inside\n\t\t * the page, so the `<main>` landmark always has an accessible heading.\n\t\t * This prop controls VISIBILITY only; it can no longer remove the\n\t\t * heading from the accessibility tree.\n\t\t */\n\t\tshowTitle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Whether the page header draws its icon before the title. `false`\n\t\t * (manifest `config.showTitleIcon: false`) drops it, for a title that\n\t\t * stands alone as the board draws it. True by default.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t */\n\t\tshowTitleIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether the actions bar shows its \"Showing 20 of 258\" line.\n\t\t * `false` (manifest `config.showCount: false`) drops it, for a page\n\t\t * whose title line already gives the total (`countSubtitle`). True by\n\t\t * default.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t */\n\t\tshowCount: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Draw this page in the `board` look (or `nextcloud`) whatever the app\n\t\t * does. Empty follows the `cnLook` CnAppRoot provides. Manifest key\n\t\t * `config.look`.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md\n\t\t * @type {('' | 'board' | 'nextcloud')}\n\t\t *\n\t\t * Read through `useLook(props)` in setup, which the unused-properties rule cannot see.\n\t\t */\n\t\tlook: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the count line under the title, a template with `{shown}`\n\t\t * (rows on this page) and `{total}` (all rows) and free text. Manifest\n\t\t * key `config.countText`. Without it the page's `countSubtitle`, else\n\t\t * \"{shown} of {total}\".\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-index-header-reads-title-count-and-the-board-buttons\n\t\t */\n\t\tcountText: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: a count line per view (manifest `config.countTextByView`),\n\t\t * `{ table?, cards?, list?, board?, map? }`, each a template as\n\t\t * `countText`: the board view says \"bordweergave per status\" where the\n\t\t * table says \"gesorteerd op termijn\" (DqWerkbord, DqZaken). A view it\n\t\t * does not name keeps `countText`; a scope's own `countText` comes first.\n\t\t *\n\t\t * @spec openspec/changes/count-text-per-view/specs/index-page/spec.md#requirement-the-count-line-can-differ-per-view\n\t\t */\n\t\tcountTextByView: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The property keys the card's facts list shows, in order (manifest key\n\t\t * `config.cardFields`). Without it the board look shows the first four\n\t\t * list columns.\n\t\t *\n\t\t * @spec openspec/changes/screens-card-parity/specs/card-board-look/spec.md#requirement-a-record-card-has-a-head-facts-and-one-action\n\t\t * @type {Array<string>}\n\t\t */\n\t\tcardFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the record layout of each card in the cards view\n\t\t * (manifest key `config.cardLayout`): `{ headPill, number, title,\n\t\t * meta, footerPill, footerDate }`, each part naming a field. See\n\t\t * CnObjectCard `layout`.\n\t\t *\n\t\t * @type {object}\n\t\t * @spec openspec/changes/board-record-card-layout/specs/board-record-card-layout/spec.md#requirement-a-board-card-can-draw-the-record-layout-from-config\n\t\t */\n\t\tcardLayout: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Gives each card in the card view a status accent: a colored start\n\t\t * border and icon. See CnObjectCard `accent`.\n\t\t *\n\t\t * @type {((object: object) => ({variant: string, icon: string, label: string}|null))|null}\n\t\t */\n\t\tcardAccent: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: free text after the footer's count (\"8 of 48 · click a\n\t\t * column header to sort\"). Manifest key `config.footerNote`.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-footer-sits-inside-the-card\n\t\t */\n\t\tfooterNote: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: draw the bulk band before anything is selected too, its\n\t\t * buttons disabled until there is a selection (DqZaken, DqWerkbord).\n\t\t * Manifest key `config.bulkBandAlways`. Only when the band has an\n\t\t * action to offer.\n\t\t */\n\t\tbulkBandAlways: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the 13px hint after the bulk band's buttons (\"See what\n\t\t * changes first, then run it\"). Manifest key `config.bulkHint`.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-bulk-band-is-its-own-row\n\t\t */\n\t\tbulkHint: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: another shape of the bulk band per view mode, keyed by\n\t\t * the view (`board`, `cards`, ...). `{ lead?: { one, other }, actions?:\n\t\t * Array<id|{ id, label? }>, cancel?: boolean, hint?: boolean }`: the\n\t\t * lead counts the selection (`{count}`, through the app's translate),\n\t\t * `actions` picks and relabels bulk actions, `cancel` adds a Cancel\n\t\t * button that clears the selection, `hint: true` keeps `bulkHint`. In\n\t\t * such a view the band shows only with a selection and without the\n\t\t * built-in copy and delete (DqWerkbord: \"1 zaak geselecteerd · Status\n\t\t * wijzigen · Annuleren\"). Manifest key `config.bulkBandViews`.\n\t\t */\n\t\tbulkBandViews: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the plural the bulk band names (\"With the selected\n\t\t * cases\"), through the app's translate and lower-cased. Wins over the\n\t\t * schema's plural. Manifest key `config.bulkNoun`.\n\t\t */\n\t\tbulkNoun: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Buttons beside the page title, as the board's \"Export\" and \"New\n\t\t * case\" (manifest `config.headerButtons`). Each is `{ label?, action,\n\t\t * variant?, icon?, format?, id? }`: `action` is `add` (the Add flow;\n\t\t * its label defaults to the Add label), `export` (the export leaf in\n\t\t * `format`, `csv` by default, else the export dialog; with `run` the\n\t\t * `headerActions` entry of that id; on an `entitySource` page without\n\t\t * `run` and without a `@mass-export` listener it is not drawn),\n\t\t * `import`,\n\t\t * `refresh`, `save-view` (the save-current-view dialog: the board's\n\t\t * \"Zoekopdracht opslaan\", label \"Save view\" by default), or the id of a\n\t\t * `headerActions` entry; `variant` is\n\t\t * `primary` or `secondary` (the default). Shown only with\n\t\t * `showTitle`. When they show, the actions bar drops its Views and\n\t\t * Actions menus, and the Add button and Export menu when a button\n\t\t * takes their action. Empty (the default) changes nothing.\n\t\t * `action: \"actions-menu\"` is one labelled menu: the page's header\n\t\t * actions, or what its `items` name (`header-actions`, a header action\n\t\t * id, `import`, `export`, `refresh`, `copy-selected`, `delete-selected`,\n\t\t * `documentation`), so the entries the bar's menu loses have a place.\n\t\t * `items` can group them: `{ heading }` draws a group heading (an i18n\n\t\t * key) and `separator` a rule, each only when an entry follows.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @type {Array<{label?: string, action: string, variant?: ('primary'|'secondary'), icon?: string, format?: ('csv'|'excel'), id?: string, items?: Array<(string|{heading: string})>}>}\n\t\t */\n\t\theaderButtons: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws the Actions menu (manifest\n\t\t * `config.showActionsMenu`): `true` keeps it beside header buttons\n\t\t * (DqAfdelingen: Downloaden beside the title, Acties above the\n\t\t * search), `false` leaves it out. Null derives it: drawn unless the\n\t\t * header carries buttons.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-with-header-buttons/specs/index-actions-menu-with-header-buttons/spec.md#requirement-an-index-page-decides-its-toolbar-actions-menu\n\t\t */\n\t\tshowActionsMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * How the board look draws the table's title column (manifest\n\t\t * `config.rowTitle`): `link` (the default) underlines the title,\n\t\t * `plain` draws it as bold text without an underline over a 13px muted\n\t\t * secondary line. The row stays clickable. The Nextcloud look ignores\n\t\t * it. Maps to CnDataTable `rowTitle`.\n\t\t *\n\t\t * @spec openspec/changes/screens-table-rows-parity/specs/index-list-board-look/spec.md#requirement-a-row-title-can-be-plain-text\n\t\t */\n\t\trowTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: 'link',\n\t\t\tvalidator: (value) => ['link', 'plain'].includes(value),\n\t\t},\n\n\t\t/** Optional MDI icon name. Defaults to schema.icon when a schema is provided. */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Schema. Either a resolved schema object (consumer-managed path) OR a\n\t\t * schema-slug string — when a string is given together with `register`\n\t\t * and no `objects` prop, the page enters self-fetch mode: it drives the\n\t\t * list via `useListView('${register}-${schema}', …)` and the column\n\t\t * generation uses the schema object that composable loads. Backwards-\n\t\t * compatible: `[Object, String]` still accepts an object.\n\t\t */\n\t\tschema: {\n\t\t\ttype: [Object, String],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Base filter for the self-fetch path. String values of the form\n\t\t * `\"@route.<name>\"` / `\":<name>\"` are interpolated from `$route.params`.\n\t\t */\n\t\tfilter: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Self-fetch mode only — an array of clickable filter tabs rendered as\n\t\t * a strip above the table. Each entry is `{label, filter, default?, icon?}`;\n\t\t * clicking a tab merges its `filter` into the fetch — spread AFTER\n\t\t * `filter` (so the active tab wins) and BEFORE the user's `activeFilters`\n\t\t * (so user facets still narrow within the active tab). String values\n\t\t * in a tab's `filter` resolve `@route.<name>` / `:<name>` from\n\t\t * `$route.params` just like the `filter` prop. The first tab with\n\t\t * `default:true` (else index 0) is active on mount; changing tabs\n\t\t * re-fetches at page 1. Omit (or `null`) → no tab strip, behaviour\n\t\t * unchanged. Under the board look a tab with `activeLabel` (\"Pipeline:\n\t\t * Sales\") adds a removable chip with that text to the Active line and\n\t\t * counts on the Filter badge while it is selected; removing the chip\n\t\t * goes back to the default tab. A tab can say `empty: \"field\"` (or a\n\t\t * list of fields) for the rows where the field has no value, and\n\t\t * `notEmpty` for the rows where it has one: it reads as the filter\n\t\t * `{ field: { isnull: true } }`. A tab can set its own order with\n\t\t * `sort: { key, order }` (or a list of those): selecting it sorts the\n\t\t * list that way, and selecting a tab without `sort` goes back to the\n\t\t * page's `sortKey`/`sortOrder`. A column the person sorts by still wins\n\t\t * until the next tab switch.\n\t\t */\n\t\tquickFilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Quick filters made from the values a field holds in this list\n\t\t * (manifest `config.quickFiltersFrom`): `{ field, register?, schema?,\n\t\t * valueField?, labelField?, allLabel? }`. The page asks OpenRegister for the\n\t\t * distinct values of `field` with their counts (within `filter`) and\n\t\t * draws \"All\" plus one tab per value, the most frequent first, each\n\t\t * with its count. With `register` and `schema` the values are ids of\n\t\t * records of that schema and each tab shows the record's `labelField`\n\t\t * (else its title or name). With `valueField` as well, the values are\n\t\t * matched on that field of those records instead of their id (a slug).\n\t\t * Ignored when `quickFilters` is set.\n\t\t *\n\t\t * @type {{field: string, register?: string, schema?: string, valueField?: string, labelField?: string, allLabel?: string}|null}\n\t\t * @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values\n\t\t */\n\t\tquickFiltersFrom: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Personal lenses appended to the quick filters: any of `watching`\n\t\t * (`_watching`, labelled Following), `recent` (`_recent`) and `unread`\n\t\t * (`_unread`). `favourite` is a deprecated alias of `watching`: a\n\t\t * favourite is a follow now, and asking for both gives one tab.\n\t\t * They combine with every other filter. While Recent is active column\n\t\t * sorting is off, because the lens owns the order. Manifest\n\t\t * `config.personalLenses`.\n\t\t *\n\t\t * @type {Array<'favourite'|'recent'|'watching'|'unread'>}\n\t\t */\n\t\tpersonalLenses: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Whether the table marks unread rows (`@self.unread`) in bold with the\n\t\t * unread marker: `true` in every look, `false` never. Unset (null)\n\t\t * keeps the look's default (see `marksUnreadRows`). Manifest\n\t\t * `config.showUnreadRows`.\n\t\t *\n\t\t * @spec openspec/changes/cell-config-growth/specs/cell-config-growth/spec.md#requirement-a-page-can-ask-for-its-unread-rows\n\t\t */\n\t\tshowUnreadRows: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Add a first column with a follow toggle per row (`CnFollowToggle`,\n\t\t * compact), bound to each row's `@self.watching`. Clicking it does not\n\t\t * open the row. Manifest `config.showFollowColumn`.\n\t\t */\n\t\tshowFollowColumn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Deprecated alias of `showFollowColumn`: the star column became the\n\t\t * follow column (OpenRegister `merge-follow-and-favourites`).\n\t\t *\n\t\t * @deprecated Use `showFollowColumn`.\n\t\t */\n\t\tshowFavouriteColumn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * A second filter strip under the toolbar, on one field (manifest\n\t\t * `config.filterStrip`): `{ field, label?, allLabel?, options?:\n\t\t * [{ value, label }], showCount? }`. It draws \"All\" and one pill per\n\t\t * value (the options, else the field's schema enum); picking one sets\n\t\t * the page's filter on that field, \"All\" clears it. With `showCount`\n\t\t * each pill counts the rows it would show within the active quick\n\t\t * filter. Absent (the default) draws nothing.\n\t\t *\n\t\t * @type {{field: string, label?: string, allLabel?: string, options?: Array<{value: string, label?: string}>, showCount?: boolean}|null}\n\t\t * @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip\n\t\t */\n\t\tfilterStrip: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Whether the board look draws the saved views as chips in the toolbar\n\t\t * (manifest `config.savedViewChips`). `false` keeps only Save view,\n\t\t * for a page whose views live in the side panel's Weergaven tab\n\t\t * (DqZaken, DqZakenSorteren, DqZakenKaart, DqWerkbord, DqFilterBeheren).\n\t\t *\n\t\t * @spec openspec/changes/saved-view-chips-switch/specs/saved-views/spec.md#requirement-an-index-page-can-leave-the-saved-view-chips-out-of-the-toolbar\n\t\t */\n\t\tsavedViewChips: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws Save view (manifest `config.savedViewSave`).\n\t\t * `false` leaves it out for a page whose board draws none (DqTaken,\n\t\t * DqOrganisaties); the views stay in the side panel.\n\t\t */\n\t\tsavedViewSave: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether an applied saved view names the page and its side panel\n\t\t * (manifest `config.savedViewTitle`): a view opened from the menu or\n\t\t * the panel heads the list with its own name (DqFilterInMenu \"Termijn\n\t\t * deze week\"). Off, the page keeps its title.\n\t\t *\n\t\t * @spec openspec/changes/saved-view-names-the-page/specs/saved-view-names-the-page/spec.md#requirement-an-applied-saved-view-can-name-the-page\n\t\t */\n\t\tsavedViewTitle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Where the quick-filter chips sit (manifest `config.quickFilterPlacement`).\n\t\t * `''` (the default) as before. `'toolbar'` keeps them on one row with\n\t\t * the Filter button and the view switch, in whatever width that row has\n\t\t * beside a side panel (DqTeamwachtrij): the chips take the room the\n\t\t * buttons leave, and those that do not fit move into the overflow chip.\n\t\t * `'row'` puts them on a row of their own above the toolbar, wrapping\n\t\t * onto more lines instead of folding into the overflow chip.\n\t\t * `'active'` draws no tabs: a chosen tab with an `activeLabel` shows\n\t\t * only on the Active line, where it can be removed\n\t\t * (DqAanMijToegewezen).\n\t\t *\n\t\t * @type {''|'toolbar'|'row'|'active'}\n\t\t */\n\t\tquickFilterPlacement: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator: (v) => ['', 'toolbar', 'row', 'active'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * The quick-filter placement per view mode (manifest\n\t\t * `config.quickFilterPlacementByView`): `{ table?, cards?, board?, map? }`,\n\t\t * each `''`, `'toolbar'`, `'row'` or `'active'`. A view it does not name keeps\n\t\t * `quickFilterPlacement` (dossiq's case list: the chips beside Filter in\n\t\t * its board and map views, on their own row in its table view).\n\t\t *\n\t\t * @spec openspec/changes/index-quick-filter-placement-per-view/specs/index-page/spec.md#requirement-the-quick-filter-placement-can-differ-per-view\n\t\t */\n\t\tquickFilterPlacementByView: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Where the board look's search field sits (manifest\n\t\t * `config.searchPlacement`): `''` (the default) opens row 2 with it,\n\t\t * `'toolbar'` puts it on row 1 before the Filter button and the view\n\t\t * switch (DqTeamwachtrij).\n\t\t *\n\t\t * @type {''|'toolbar'}\n\t\t */\n\t\tsearchPlacement: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator: (v) => ['', 'toolbar'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * How the quick filters render: `'chips'` (pill strip, default) or\n\t\t * `'dropdown'` (a single `NcSelect`). Sourced from the manifest as\n\t\t * `pages[].config.quickFilterMode`.\n\t\t *\n\t\t * @type {'chips'|'dropdown'}\n\t\t */\n\t\tquickFilterMode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'chips',\n\t\t\tvalidator: (v) => ['chips', 'dropdown'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * Allow several quick filters active at once. Selected tabs' filters\n\t\t * are OR-ed together into the fetch (same field → array value →\n\t\t * `field[]=` IN query). Sourced from `pages[].config.quickFilterMultiple`.\n\t\t */\n\t\tquickFilterMultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Chips mode only: how many quick-filter pills render inline before the\n\t\t * rest move into an overflow menu. `0` (the default) renders every tab.\n\t\t * A long strip wraps the actions bar onto a second line and squeezes the\n\t\t * \"Showing X of Y\" count, so a page with many lenses caps this and keeps\n\t\t * the everyday few in view. Sourced from\n\t\t * `pages[].config.quickFilterMaxVisible`.\n\t\t */\n\t\tquickFilterMaxVisible: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/**\n\t\t * How the Active line names a filter: per filter key an optional\n\t\t * `label` for the field and `values` naming each value, both through\n\t\t * the app's translate. Wins over the schema and sidebar names.\n\t\t * Sourced from `pages[].config.filterLabels`.\n\t\t *\n\t\t * A range filter's entry may set `relative: true`, naming a range\n\t\t * from today in words (\"within 7 days\"). An entry with\n\t\t * `hidden: true` is a working-list rule every view carries: the line\n\t\t * that says what a saved view shows leaves it out.\n\t\t *\n\t\t * @example { isFinalStatus: { label: 'Status', values: { false: 'Ongoing', true: 'Finished' } } }\n\t\t */\n\t\tfilterLabels: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Manual column definitions (used instead of schema when provided) */\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * OpenRegister `_extend[]` values forwarded on the fetch, e.g.\n\t\t * `[\"calculations\"]`. Sourced from `pages[].config.extend`.\n\t\t *\n\t\t * A schema's `x-openregister-calculations` entries declared\n\t\t * `materialise: false` are VIRTUAL: RenderObject evaluates them only\n\t\t * when the caller asks for them through `_extend`, so without this a\n\t\t * declared calculation is simply absent from every row and its column\n\t\t * renders empty. The same contract `objectTableSource.extend` already\n\t\t * carries for dashboard widgets, which is where it shipped first;\n\t\t * index pages could not ask for it at all.\n\t\t */\n\t\textend: { // eslint-disable-line vue/no-unused-properties -- read by useSelfFetchList.js off the props object, which this rule does not follow.\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Self-fetch only: list from this endpoint instead of\n\t\t * `/api/objects/{register}/{schema}`, e.g. an app endpoint that searches\n\t\t * several register/schema pairs at once. `register` and `schema` stay the\n\t\t * page's own pair (columns, create, export, import). Rows of another pair,\n\t\t * read from their `@self.register` / `@self.schema`, are edited, copied and\n\t\t * deleted against that pair, with its own form. The endpoint takes\n\t\t * `_page`, `_limit`, `_search` and `_order[key]=dir` and answers\n\t\t * `{ results, total, page, pages }`.\n\t\t */\n\t\tcollectionUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Offer an \"Also search inside files\" switch beside the search box. On,\n\t\t * a search also matches words inside attached files (OpenRegister\n\t\t * `_content_search`), and a row found that way says which file matched.\n\t\t * Manifest: `config.searchInFiles`.\n\t\t */\n\t\tsearchInFiles: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Filters over a type's own declared fields, beside the search\n\t\t * (CnRelatedFieldFilters): `{ definitions: { register, schema, filter },\n\t\t * related: { schema, backref, definitionKey?, valueKey? } }`.\n\t\t * Manifest: `config.relatedFieldFilters`.\n\t\t */\n\t\trelatedFieldFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Object/row data array */\n\t\tobjects: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Name of a registered NON-OBJECT entity collection to list (e.g. `flows`).\n\t\t *\n\t\t * The third data mode. `register` + `schema` fetches OpenRegister\n\t\t * objects; `:objects` renders rows a parent already holds; `entitySource`\n\t\t * names a list that is neither — a flow definition is deliberately not\n\t\t * an OpenRegister object, so an index had nothing to point at and such\n\t\t * lists became bespoke `type: \"custom\"` pages instead.\n\t\t *\n\t\t * Non-empty `:objects` still wins, and an entity source wins over\n\t\t * register/schema. See `src/composables/indexSources.js`.\n\t\t */\n\t\tentitySource: { type: String, default: '' },\n\n\t\t/**\n\t\t * Route name a clicked row opens, overriding a named source's own\n\t\t * navigation.\n\t\t *\n\t\t * An entity source knows where its rows live and navigates itself, and\n\t\t * for a source whose detail page belongs to ANOTHER app that is right:\n\t\t * `tasks` sends a click to openregister's task page, because pushing\n\t\t * on this app's router could not reach it.\n\t\t *\n\t\t * It is wrong for an app that HAS its own page for those rows. Dossiq\n\t\t * keeps a task detail page on purpose, so its handlers see a task in\n\t\t * dossiq's vocabulary beside the case it belongs to. Without this prop\n\t\t * adopting `entitySource: \"tasks\"` would send every click out of the\n\t\t * app, and the `row-click` event cannot recover it: `openRow` calls\n\t\t * `window.location.assign()`, so a host's push never lands.\n\t\t *\n\t\t * Set it and the row pushes `{ name: rowRoute, params: { id } }` on\n\t\t * this app's router instead. Leave it unset and the source's own\n\t\t * navigation is unchanged, which is what every current consumer gets.\n\t\t */\n\t\trowRoute: { type: String, default: '' },\n\n\t\t/**\n\t\t * Config handed to the named source's loader (e.g. `{ app: 'dossiq' }`).\n\t\t */\n\t\tsourceConfig: { type: Object, default: null },\n\n\t\t/** Pagination state: { page, pages, total, limit } */\n\t\tpagination: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Whether data is loading */\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether rows/cards can be selected */\n\t\tselectable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Draw the table without its column-header row (manifest\n\t\t * `config.hideTableHeader`), for a list the board draws as plain rows\n\t\t * (DqTeamwachtrij). Pair it with `selectable: false` for no checkboxes.\n\t\t */\n\t\thideTableHeader: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * When true, a row/card click emits `row-click` (to open/navigate) even\n\t\t * while `selectable` — selection then happens via the checkbox only.\n\t\t * Manifest-driven index pages set this when a matching detail page\n\t\t * exists, so clicking a row opens its detail. Default false preserves\n\t\t * the legacy select-on-click behaviour.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\trowClickToView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The page's `splitView` declaration: `{ enabled, breakpoint, paneWidth }`.\n\t\t * With `enabled`, opening a row renders it beside the list in the\n\t\t * `#split-pane` slot instead of navigating away, and the list keeps its\n\t\t * scroll position, its selection and its loaded page. Omit it and the\n\t\t * page renders exactly as it does today.\n\t\t *\n\t\t * @type {{ enabled?: boolean, breakpoint?: number, paneWidth?: string }}\n\t\t */\n\t\tsplitView: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The record the split pane is showing, taken from the split address.\n\t\t * Empty closes the pane. Ignored unless `splitView.enabled`.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tsplitId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Route name the pane's close button returns to. Defaults to the\n\t\t * current route's own list address when omitted.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tsplitCloseRoute: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Whether the pane draws its own close link. Set false when the\n\t\t * `#split-pane` slot draws one from the slot's `close`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tsplitCloseButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Accessible name and tooltip for the pane's close button.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tsplitCloseLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Lets this person order and pin the table columns from the sidebar's\n\t\t * Columns tab, and keeps the visible columns, their order and the pinned\n\t\t * count per user and per list in their Nextcloud preferences. `false`\n\t\t * keeps show and hide only, stored nowhere (for a page whose column set is\n\t\t * a contract, such as an export preview).\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tpersonalColumns: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Lets this person drag the rows into an order of their own, held\n\t\t * against them and this list and never written onto the records. The\n\t\t * order stands down while a sort is active, because a sort the person\n\t\t * just chose is them asking for a different order.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tmanualOrder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Stable id this list's manual order is held under. Defaults to the\n\t\t * object type or the schema, so two lists of one schema on different\n\t\t * pages share an order only when the host says they should.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tmanualOrderId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Currently selected IDs */\n\t\tselectedIds: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * View mode: 'table', 'cards', 'list', 'map', 'board', 'dateAxis' or 'calendar'.\n\t\t * Default 'table'. List is opted in via `availableViewModes`; map via\n\t\t * `mapConfig` / `config.viewModes`; board and dateAxis via\n\t\t * `config.viewModes` and their own config blocks.\n\t\t */\n\t\tviewMode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'table',\n\t\t\tvalidator: (v) => ['table', 'cards', 'list', 'map', 'board', 'dateAxis', 'calendar'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * Marker geometry mapping for the opt-in `map` view mode, mirroring the\n\t\t * manifest `config.map` block 1:1. When non-empty (and not excluded by an\n\t\t * explicit `config.viewModes`), a third \"Map\" segment appears in the view\n\t\t * toggle and the current filtered rows are plotted on a CnMapWidget.\n\t\t *\n\t\t * - `latField` / `lngField` — object (or `@self`) property paths holding the\n\t\t * marker's latitude / longitude. Dotted paths are supported (e.g.\n\t\t * `@self.geo.lat`).\n\t\t * - `geoField` — alternative single property holding a GeoJSON Point\n\t\t * geometry (`{ type: 'Point', coordinates: [lng, lat] }`); takes\n\t\t * precedence over lat/lngField when present and resolvable.\n\t\t * - `popupField` — object property rendered in the marker popup.\n\t\t * - `center` — optional `[lat, lng]` fallback centre when the filtered set\n\t\t * has no plottable rows.\n\t\t * - `zoom` — the map's initial zoom level.\n\t\t * - `list` — a numbered list beside the map, map and list in one card\n\t\t * (DqZakenKaart): `{ title, sub?, pills?: [{ path?, text?, map?,\n\t\t * colorMap? }], due? }`, field templates read per row. The pins carry the\n\t\t * list's numbers, the row under the pointer is marked on both, the rows\n\t\t * without a place are counted under the list with a link to the table,\n\t\t * and the page's count line adds how many are on the map.\n\t\t *\n\t\t * @type {{ latField?: string, lngField?: string, geoField?: string, popupField?: string, center?: [number, number], zoom?: number, list?: object }}\n\t\t */\n\t\tmapConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Label for the map view-toggle segment (defaults to \"Map\"). */\n\t\tmapLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the map view-toggle segment (defaults to the built-in map-marker icon). */\n\t\tmapIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Explicit whitelist of view-toggle segments to offer, e.g.\n\t\t * `['table', 'cards', 'map']`. Fed from the manifest as\n\t\t * `pages[].config.viewModes`. When set it takes precedence over the\n\t\t * inferred availability (map otherwise appears iff `mapConfig` is\n\t\t * non-empty). Cards/table always render regardless of this list.\n\t\t *\n\t\t * @type {Array<'table' | 'cards' | 'list' | 'map' | 'board' | 'dateAxis' | 'calendar'>}\n\t\t */\n\t\tviewModes: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the segments the view switch draws, e.g. `['table',\n\t\t * 'cards', 'board', 'map']` as the boards do. A listed mode the page\n\t\t * can open is an ordinary segment; one it cannot (no board columns, no\n\t\t * map configured) is drawn disabled, named \"<mode>: not available on\n\t\t * this list\". Fed from `pages[].config.viewSwitch`. Ignored without the\n\t\t * board look; absent, the board look draws all four.\n\t\t *\n\t\t * @type {Array<'table' | 'cards' | 'board' | 'map'>}\n\t\t * @spec openspec/changes/screens-view-switch-parity/specs/view-switch-board-look/spec.md#requirement-the-manifest-can-draw-segments-the-page-cannot-open\n\t\t */\n\t\tviewSwitch: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: view switch segments that open another PAGE, by mode\n\t\t * (`table`, `cards`, `board`, `map`): `{ board: { route: 'CaseBoard',\n\t\t * params?, query? } }` or `{ map: { href: '/apps/x/map' } }`. The\n\t\t * segment sits in its place in the switch as a link, for a board or a\n\t\t * map that is a page of its own. A mode this page opens in place stays\n\t\t * a button. Fed from `pages[].config.viewSwitchLinks`. Ignored without\n\t\t * the board look.\n\t\t *\n\t\t * @type {{[mode: string]: {route?: string, params?: object, query?: object, href?: string}}}\n\t\t * @spec openspec/changes/screens-view-switch-links/specs/view-switch/spec.md#requirement-a-view-switch-segment-can-open-another-page\n\t\t */\n\t\tviewSwitchLinks: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The board's configuration, mirroring the manifest `config.board`\n\t\t * block: `{ statusField, cardFields, swimlaneField }`. The board is\n\t\t * offered only when this names a `statusField` AND `viewModes` lists\n\t\t * `board`: a segment that opens a board saying it cannot be one is\n\t\t * worse than no segment.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tboard: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The date axis's configuration, mirroring the manifest\n\t\t * `config.dateAxis` block: `{ startField, endField, laneField,\n\t\t * labelField }`. Offered only when both date fields are named.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tdateAxis: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The calendar's configuration, mirroring the manifest\n\t\t * `config.calendar` block: `{ dateField, endDateField?, titleField? }`.\n\t\t * Offered only when `dateField` is named and `viewModes` lists\n\t\t * `calendar`. Only the visible month is fetched.\n\t\t *\n\t\t * @type {{dateField?: string, endDateField?: string, titleField?: string}}\n\t\t */\n\t\tcalendar: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The host's transition, handed to the board. Absent, the board is\n\t\t * read-only: it never writes the status field itself, so with no\n\t\t * transition there is nothing it can do.\n\t\t *\n\t\t * @type {((move: { card: object, toKey: string }) => Promise<object>)|null}\n\t\t */\n\t\trunTransition: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Which view-mode toggle segments to expose (cards/table/list), in order.\n\t\t * Defaults to the historical Cards/Table pair; include `'list'` to offer the\n\t\t * list view. Fed from the manifest as `pages[].config.availableViewModes`.\n\t\t * Map is added separately via `mapConfig` / `viewModes`.\n\t\t *\n\t\t * @type {Array<'cards' | 'table' | 'list' | 'map' | 'board' | 'dateAxis' | 'calendar'>}\n\t\t */\n\t\tavailableViewModes: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => ['cards', 'table'],\n\t\t\tvalidator: (modes) => modes.every((m) => ['cards', 'table', 'list', 'map', 'board', 'dateAxis', 'calendar'].includes(m)),\n\t\t},\n\n\t\t/** Current sort key */\n\t\tsortKey: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Current sort order */\n\t\tsortOrder: {\n\t\t\ttype: String,\n\t\t\tdefault: 'asc',\n\t\t},\n\n\t\t/**\n\t\t * Ordered multi-column sort state (host-controlled / non-self-fetch\n\t\t * mode): `[{ key, order }, ...]`, mirroring the `sortKey`/`sortOrder`\n\t\t * pair but for more than one active key. Ignored in self-fetch mode\n\t\t * (register + schema), which manages its own multi-sort state via\n\t\t * `useSelfFetchList`/`useListView` and persists it in the route query.\n\t\t *\n\t\t * @type {Array<{key: string, order: 'asc'|'desc'}>}\n\t\t */\n\t\tsortKeys: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Optional declarative DEFAULT multi-key client-side sort, applied to the\n\t\t * already-loaded rows whenever no explicit column sort is active (no\n\t\t * `sortKey` selected by the user / passed in). Each entry is\n\t\t * `{ field, order }` with `order` one of `'asc'` / `'desc'` (default\n\t\t * `'asc'`); rows are compared by the first field, ties broken by the\n\t\t * next, and so on. Comparison is type-aware (numbers numerically, dates\n\t\t * by timestamp, strings via `localeCompare`). Clicking a sortable header\n\t\t * takes over and suppresses this default. Useful for a fixed presentation\n\t\t * order such as \"group by type, then name\".\n\t\t *\n\t\t * @type {Array<{field: string, order?: 'asc'|'desc'}>}\n\t\t */\n\t\tdefaultSort: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Unique row identifier property */\n\t\trowKey: {\n\t\t\ttype: String,\n\t\t\tdefault: 'id',\n\t\t},\n\n\t\t/**\n\t\t * Optional leading icon for every table row — a static MDI icon name or\n\t\t * a `(row) => iconName` function. Forwarded to CnDataTable. Fed from the\n\t\t * manifest as `pages[].config.rowIcon`. Unset = no icon column.\n\t\t *\n\t\t * @type {string | ((row: object) => string) | null}\n\t\t */\n\t\trowIcon: {\n\t\t\ttype: [String, Function],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Columns to exclude in schema mode */\n\t\texcludeColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Columns to include in schema mode (whitelist) */\n\t\tincludeColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Per-column overrides in schema mode */\n\t\tcolumnOverrides: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Row action definitions, merged with the built-in View / Edit / Copy / Delete.\n\t\t * Objects are app actions.\n\t\t * A `\"builtin:view\"`, `\"builtin:edit\"`, `\"builtin:copy\"` or `\"builtin:delete\"` string places that built-in at its position when its `show*Action` toggle is on; enabled built-ins not placed are appended in that order.\n\t\t */\n\t\tactions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Text shown when no items found. The default is the library's own\n\t\t * string, so it reads in the user's language; a page's own text goes\n\t\t * through the app's translate function.\n\t\t */\n\t\temptyText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'No items found'),\n\t\t},\n\n\t\t/**\n\t\t * Personal-lens report of the list on screen, for a host that fetches\n\t\t * itself: the response's `@self.lenses` (`{ recent: { available,\n\t\t * reason } }`). In self-fetch mode the page reads it from the store\n\t\t * and this prop is ignored. When a lens reports `available: false`\n\t\t * the empty state explains why instead of showing `emptyText`.\n\t\t *\n\t\t * @type {object|null}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-an-unavailable-lens-explains-its-empty-page\n\t\t */\n\t\tlenses: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * App wording for an unavailable lens, keyed `<lens>.<reason>`\n\t\t * (`recent.audit-trail-disabled`) or `<reason>`; the specific key\n\t\t * wins, and both win over the library's object-neutral text.\n\t\t *\n\t\t * @type {{[key: string]: string}|null}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-an-unavailable-lens-explains-its-empty-page\n\t\t */\n\t\tlensReasonTexts: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * What to do after a refused search, through the app's translate. The\n\t\t * default explains AND, OR, NOT and quotes.\n\t\t *\n\t\t * @spec openspec/changes/index-search-refusal/specs/index-search-refusal/spec.md#requirement-a-refused-search-is-said-where-it-was-typed\n\t\t */\n\t\tsearchRefusalHint: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Accessible label for the loading spinner (NcLoadingIcon aria-label) */\n\t\tloadingText: {\n\t\t\ttype: String,\n\t\t\tdefault: 'Loading…',\n\t\t},\n\n\t\t/**\n\t\t * Object types whose live changes this list follows (manifest\n\t\t * `config.live`): it subscribes to them through the object store and\n\t\t * reads the list again shortly after a change, so a card a colleague\n\t\t * moved moves here too. Empty (the default) subscribes to nothing.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tlive: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * CSS class(es) for a row: a function `(row) => string`, or (manifest\n\t\t * `config.rowClass`) rules `[{ when: { field, op?, value }, class }]`,\n\t\t * each adding its class to a row whose field compares to the value\n\t\t * (the `visibleWhen` operators, `@today` included). DqTaken marks an\n\t\t * overdue task: `{ when: { field: \"dueAt\", op: \"lt\", value: \"@today\" },\n\t\t * class: \"cn-row--overdue\" }`.\n\t\t *\n\t\t * @type {((row: object) => string)|Array<{when: {field: string, op?: string, value: unknown}, class: string}>|null}\n\t\t */\n\t\trowClass: {\n\t\t\ttype: [Function, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Override label for the Add button. Defaults to \"Add {schema.title}\" */\n\t\taddLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** How many action buttons to show inline (rest go in overflow dropdown) */\n\t\tinlineActionCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Import action */\n\t\tshowMassImport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Export action */\n\t\tshowMassExport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Copy settings from the manifest's `config.copy`. `include` lists the link\n\t\t * kinds a copy may take along (`relationRows`, `incoming`, `files`); the copy\n\t\t * dialogs then list them, ticked, and the copy is one request to\n\t\t * OpenRegister's copy endpoint. Without it a copy carries the fields only,\n\t\t * as before. A server without the endpoint shows the list read-only.\n\t\t *\n\t\t * @type {{include?: Array<'relationRows'|'incoming'|'files'>}|null}\n\t\t */\n\t\tcopy: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Copy button */\n\t\tshowMassCopy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Delete button */\n\t\tshowMassDelete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Opt-in flag for the native Export menu (CSV/Excel) rendered in the\n\t\t * toolbar next to the Add button. Defaults to `false` — an app must\n\t\t * explicitly enable it per page. The menu only renders when this is\n\t\t * `true` AND the resolved schema is flagged `exportable: true`; it\n\t\t * navigates the browser to OpenRegister's export leaf\n\t\t * (`GET /apps/openregister/api/objects/{register}/{schema}/export`),\n\t\t * passing the current route's query params through as filters. This\n\t\t * is distinct from the `showMassExport` mass-action, which exports\n\t\t * only the fetched/selected rows via a blob download.\n\t\t */\n\t\tallowExport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Saved views (saved-views-ui). Unset, the sidebar's Views tab is on\n\t\t * for every page with a sidebar and a source a view can be scoped to\n\t\t * (register and schema, `entitySource` or `savedViewsScope`); `false`\n\t\t * turns it off. `true` also forces the sidebar and adds the toolbar\n\t\t * control, where a Views dropdown lists the\n\t\t * current user's OpenRegister saved-search views\n\t\t * (`GET /apps/openregister/api/views`); applying one writes its\n\t\t * stored filters/search/sort into the route query (reusing the\n\t\t * existing deep-link contract — non-underscore keys are filters,\n\t\t * `_search` and `_order` are reserved), \"Save current view…\"\n\t\t * persists the current route-query state via POST and toasts either\n\t\t * way naming the view (a failure also keeps the dialog open with the\n\t\t * reason), and own views can be deleted after confirmation.\n\t\t */\n\t\tallowSavedViews: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Which pages share this page's saved views. By default a view is\n\t\t * shared by every page over the same register and schema and by no\n\t\t * other page, because a view is filters over one schema's fields. Set\n\t\t * this to share views across pages over different sources, or to\n\t\t * keep two pages over the same source apart. Written into the saved\n\t\t * view's `query.scope`; views saved before scoping stay visible\n\t\t * everywhere.\n\t\t */\n\t\tsavedViewsScope: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Views the app ships for this page (`config.defaultSavedViews`), each\n\t\t * `{ slug, name, filters, search?, sort?, label? }`. Listed read-only\n\t\t * above the user's own saved views, never stored; a user may apply one\n\t\t * or save a copy. `@`-tokens in `filters` resolve when it is applied.\n\t\t */\n\t\tdefaultSavedViews: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Property name used to display item names in dialogs */\n\t\tmassActionNameField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'title',\n\t\t},\n\n\t\t/** Optional function to format item names in dialogs. Receives the item, returns a string. Overrides massActionNameField when provided. */\n\t\tnameFormatter: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Available export formats for the export dialog */\n\t\texportFormats: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [\n\t\t\t\t{ id: 'excel', label: 'Excel (.xlsx)' },\n\t\t\t\t{ id: 'csv', label: 'CSV (.csv)' },\n\t\t\t],\n\t\t},\n\n\t\t/** Import option definitions for the import dialog */\n\t\timportOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether to show the built-in form dialog for Add/Edit */\n\t\tshowFormDialog: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Registry key of a `kind: 'modal'` entry that Add (and `?action=create`)\n\t\t * opens instead of the built-in form dialog. Edits keep the form dialog.\n\t\t */\n\t\tcreateModal: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Use CnAdvancedFormDialog (properties table, JSON tab, optional metadata) instead of CnFormDialog for Add/Edit */\n\t\tuseAdvancedFormDialog: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * NcDialog size for the built-in Add/Edit form dialog.\n\t\t *\n\t\t * The dialog itself has taken a `size` since it shipped, but this page\n\t\t * never passed one, so an index page's Add form was stuck at `normal`\n\t\t * however many properties its schema declared. A manifest-declared\n\t\t * `open-form` header action, which reaches CnFormDialog through\n\t\t * CnActionButtons, could already ask for `large` — which is why the\n\t\t * same app could have a roomy create form on a detail page and a\n\t\t * cramped one on its index.\n\t\t */\n\t\tformSize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'normal',\n\t\t},\n\n\t\t/**\n\t\t * How many columns the built-in Add/Edit form flows its fields into.\n\t\t *\n\t\t * Pair `2` with `formSize: 'large'`, or the two columns are merely two\n\t\t * narrow ones. Worth it once the schema asks more questions than fit on\n\t\t * a screen; below 700px CnFormDialog collapses back to one column on\n\t\t * its own, so this is safe on a narrow viewport.\n\t\t */\n\t\tformColumns: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t\tvalidator: (value) => value === 1 || value === 2,\n\t\t},\n\n\t\t/**\n\t\t * Seed values for the built-in create dialog. Never applied on edit:\n\t\t * both dialogs consult `initialData` / `initialValues` only when there\n\t\t * is no item. Values resolve `@me` / `@now` / `@today` at any depth;\n\t\t * `@object.*` / `@workspace.*` / `@config.*` need a context this page\n\t\t * does not carry, so they pass through unresolved.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tcreateDefaults: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Where to go after a successful create from the built-in Add dialog.\n\t\t * A route name, or `{ name, paramField?, objectParam? }`; the created\n\t\t * object's id is merged into the params. Empty stays on the list.\n\t\t *\n\t\t * @type {string|object|null}\n\t\t */\n\t\tcreateSuccessRoute: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Toast shown after a successful create from the built-in Add dialog,\n\t\t * run through the host `cnTranslate`. Empty shows none.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tcreateSuccessMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Opt-in async create hook. When provided, a **create** (not edit)\n\t\t * confirmed from the built-in form dialog calls\n\t\t * `await createOverride(formData, ctx)` INSTEAD of persisting via the\n\t\t * store / self-store `saveObject`. The override owns persistence\n\t\t * (e.g. an app posting through a contact-aware endpoint that fills a\n\t\t * required FK before saving to OpenRegister) and MUST return the\n\t\t * created object (a truthy value) on success; return a falsy value to\n\t\t * signal failure. The returned object is used as the created result\n\t\t * (`@create` payload + dialog success). Throwing rejects with the\n\t\t * error surfaced in the form dialog. Edits are never routed here.\n\t\t *\n\t\t * `ctx` carries `{ register, schema, objectType, effectiveSchema }`\n\t\t * so a single handler can branch per schema.\n\t\t *\n\t\t * When absent, create behaviour is unchanged (store / self-store save).\n\t\t *\n\t\t * @type {((formData: object, ctx: { register: string, schema: (object|string), objectType: string, effectiveSchema: object }) => Promise<object>)|null}\n\t\t */\n\t\tcreateOverride: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add a View action to row actions. The action emits a\n\t\t * dedicated `view` event — independent of `row-click`. Bind `@view`\n\t\t * to handle \"open detail\" and `@row-click` to handle row click\n\t\t * (selection, expand, etc.); they may share a handler when the app\n\t\t * wants click-to-view, but they are conceptually distinct.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is FALSE: the\n\t\t * source's own open action navigates to the detail page, which is the\n\t\t * view. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowViewAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Where the View row action points, as `(row) => location | null`.\n\t\t * When it returns a location, View renders as a link to it (middle\n\t\t * click, copy link) and does not emit `view`; when it returns null,\n\t\t * View stays a button that emits `view`. CnPageRenderer sets it to\n\t\t * where a row click opens.\n\t\t */\n\t\tviewTo: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add an Edit action to row actions.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is FALSE: a\n\t\t * source has no schema, so the form modal this action opens could only\n\t\t * ever render empty — the source declares its own Edit, which\n\t\t * navigates. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowEditAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Send the Edit row action to the record's detail page instead of\n\t\t * opening the edit modal, by emitting `edit-open` rather than showing\n\t\t * the form dialog.\n\t\t *\n\t\t * OFF by default, and `CnPageRenderer` no longer derives it: the host\n\t\t * binds `@edit-open` to the same navigation as a row click, so an Edit\n\t\t * that routes is an Edit that does what clicking the row does — the\n\t\t * split pane, or the detail page — while the form it names becomes\n\t\t * unreachable from the list.\n\t\t *\n\t\t * Set it when the modal genuinely cannot express the record and you\n\t\t * accept the duplication: it renders the schema's flat scalars only, so\n\t\t * related rows, sub-resources and tabs stay uneditable there.\n\t\t */\n\t\teditOpensDetail: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add a Copy action to row actions.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is whether the\n\t\t * source implements `copyRow` — without it, the copy dialog's confirm\n\t\t * has nowhere to go. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowCopyAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add a Delete action to row actions.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is whether the\n\t\t * source implements `deleteRow` — without it, the delete dialog's\n\t\t * confirm has nowhere to go. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowDeleteAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Field keys to exclude from the form dialog */\n\t\texcludeFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Field keys to include in the form dialog (whitelist mode) */\n\t\tincludeFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Per-field overrides passed to CnFormDialog */\n\t\tfieldOverrides: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Whether to show the Cards/Table view toggle in the actions bar */\n\t\tshowViewToggle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Show an inline search field in the actions bar (in addition to / instead\n\t\t * of the sidebar search). Fed from the manifest as `pages[].config.inlineSearch`.\n\t\t */\n\t\tinlineSearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * `false` draws no inline search in the actions bar, also in the board\n\t\t * look, which otherwise draws one on every index page. Fed from the\n\t\t * manifest as `pages[].config.search`.\n\t\t */\n\t\tsearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * The app config `@config.<key>` tokens resolve against, in quick-filter\n\t\t * filters and labels (`\"Residence @config.municipality\"`), as on the\n\t\t * dashboard and detail pages. Merged over a config an ancestor provides\n\t\t * on `cnAppConfig`. Manifest: `config.appConfig`.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tappConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Keep the \"Showing X of Y\" counter visible beside the inline search field,\n\t\t * after any `#after-search` controls (only relevant with `inlineSearch`,\n\t\t * which otherwise takes the counter's place). Fed from the manifest as\n\t\t * `pages[].config.showCountWithSearch`.\n\t\t */\n\t\tshowCountWithSearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Placeholder for the inline search field (manifest `config.searchPlaceholder`) */\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * A search placeholder per view (manifest `config.searchPlaceholderByView`),\n\t\t * `{ table?, cards?, board?, map? }`, through the app's translate: the\n\t\t * board view asks \"Zoek op zaak of verzoeker\", the map \"Filter op zaak of\n\t\t * aanvrager\" (DqWerkbord, DqZakenKaart). A view it does not name keeps\n\t\t * `searchPlaceholder`.\n\t\t *\n\t\t * @spec openspec/changes/search-placeholder-per-view/specs/index-page/spec.md#requirement-the-search-placeholder-can-differ-per-view\n\t\t */\n\t\tsearchPlaceholderByView: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Label for the cards view-toggle option (manifest `config.cardsLabel`, e.g. \"Tiles\") */\n\t\tcardsLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label for the table view-toggle option (manifest `config.tableLabel`, e.g. \"List\") */\n\t\ttableLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the cards view-toggle option (manifest `config.cardsIcon`) */\n\t\tcardsIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the table view-toggle option (manifest `config.tableIcon`) */\n\t\ttableIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label for the list view-toggle option (manifest `config.listLabel`, e.g. \"Rows\") */\n\t\tlistLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Deprecated, without effect: the toolbar draws no sort select. The\n\t\t * table sorts by its column headers, the list, card and map views by\n\t\t * the Sort section in the index sidebar.\n\t\t *\n\t\t * @deprecated\n\t\t */\n\t\tshowSortSelect: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The orders the index sidebar's Sort section offers in the list, card\n\t\t * and map views (manifest `config.sortSelectOptions`): `{ value, label,\n\t\t * order?, default?, source? }`, the order its `order` (an\n\t\t * `orderToSortKeys` form) or its `value` read as one. Without them the\n\t\t * section offers the sortable columns.\n\t\t *\n\t\t * An option may name an endpoint `source` (`{ url, params?, rowsPath?,\n\t\t * rowPath?, carry?, idPath?, annotate?, searchFields?, failedNote? }`)\n\t\t * for an order the server cannot sort by: choosing it lists that\n\t\t * endpoint's rows in their order, and the page's search, sidebar\n\t\t * filters and pager run over them in the browser. `default: true` opens\n\t\t * the page on it unless the address carries an order; a column header\n\t\t * click in the table view leaves it for that column's order. When the\n\t\t * endpoint fails the list falls back to the option's `order` and shows\n\t\t * `failedNote`. `carry` copies entry fields onto each row (a tier a\n\t\t * card's head pill reads); with `annotate` they also reach the rows of\n\t\t * every other order, matched on `idPath` (`id` by default). The option\n\t\t * is chosen by its value (`selectSortOption`), as a saved view's\n\t\t * `sortOption` does.\n\t\t *\n\t\t * @type {Array<{ value: string, label: string, order?: (string|object|Array), default?: boolean, source?: object }>}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tsortSelectOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Deprecated, without effect: the toolbar sort select is gone; the\n\t\t * Sort section in the index sidebar shows the current order.\n\t\t *\n\t\t * @deprecated\n\t\t */\n\t\tsortSelectValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The order a self-fetch page opens on when neither the address nor\n\t\t * `sortKeys`/`sortKey` gives one (manifest `config.defaultOrder`):\n\t\t * `\"-createdAt\"`, `\"priority:desc,title\"`, an `_order` map or a\n\t\t * `[{ key, order }]` list.\n\t\t *\n\t\t * @type {string|object|Array}\n\t\t */\n\t\tdefaultOrder: {\n\t\t\ttype: [String, Object, Array],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the list view-toggle option (manifest `config.listIcon`) */\n\t\tlistIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Field mapping for the default list-view rows (CnObjectRow). Overrides\n\t\t * the schema-configuration defaults. Fed from the manifest as\n\t\t * `pages[].config.listConfig`.\n\t\t *\n\t\t * @type {{ titleField?: string, subtitleField?: string, imageField?: string, iconField?: string, iconName?: string, badgeField?: string, badgeVariantField?: string, badgeVariant?: string, badgeColorMap?: object }}\n\t\t */\n\t\tlistConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Opt-in folder navigation pane (rendered left of the list). Selecting a\n\t\t * folder filters the list by `filterField` (via the self-fetch filter);\n\t\t * \"All\" clears it. Fed from the manifest as `pages[].config.folderSidebar`.\n\t\t *\n\t\t * - `source` — `'register'` (fetch the folder list from an OpenRegister\n\t\t * register/schema), `'field'` (distinct values of the current rows'\n\t\t * `field`), `'custom'` (use `folders`), or `'files'` (NC folders).\n\t\t * - `register` / `schema` — the OR source for `source:'register'`.\n\t\t * - `idField` / `nameField` — which folder object props map to the folder\n\t\t * id (the filter value) and display name. Dotted paths supported.\n\t\t * - `field` / `filterField` — the row field to group/filter by (filterField\n\t\t * defaults to `field`).\n\t\t * - `folders` — explicit folder list for `source:'custom'`.\n\t\t * - `allLabel` / `title` / `allowCreate` — passed to CnFolderSidebar.\n\t\t * - `scopeViews` — the view modes the scope's look (columns, title,\n\t\t * count line and the other scope keys) applies in, e.g. `[\"table\",\n\t\t * \"list\"]`; other views keep the page's own look. Default: every view.\n\t\t * - `pane` — `false` draws no pane: the scope still comes from the\n\t\t * deep-link filter (`?caseType=<id>`) and still applies its look, as\n\t\t * a list narrowed to one case type does without a folder column.\n\t\t *\n\t\t * A folder entry is also a SCOPE: it may carry `columns`, `defaultSort`\n\t\t * and `searchFields`, and while it is selected the list is shown that\n\t\t * way. `columns` takes the same shapes as the `columns` prop, and the\n\t\t * page's own `columns` still decides which columns this page has, so a\n\t\t * scope naming one the page does not declare is dropped rather than\n\t\t * rendered. A `source: 'register'` folder list reads the same three\n\t\t * keys off each row's `x-index` block, which the folder entry's own\n\t\t * value wins over, key by key.\n\t\t *\n\t\t * A folder entry may also carry `schema` (and optionally `register`,\n\t\t * defaulting to the page's own). While it is selected the page loads that\n\t\t * register and schema instead of its own, with that schema's columns,\n\t\t * fetch and live updates; \"All\", or a folder without `schema`, restores\n\t\t * the page's own. Switching clears the row selection and closes open\n\t\t * dialogs. A folder without `schema` filters the page's schema as before.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tfolderSidebar: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * KPI tiles above the list (manifest `config.statRow`): dashboard\n\t\t * widget definitions `{ id, type, title?, content }`, usually `stat`,\n\t\t * drawn in an auto-fit row (each at least 200px) in the listed order.\n\t\t * Types resolve like dashboard widgets: the app registry, then the\n\t\t * dashboard catalog. Empty by default.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-stat-row-above-the-list\n\t\t * @type {Array<object>}\n\t\t */\n\t\tstatRow: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Cards beside the list (manifest `config.sidePanel`): dashboard\n\t\t * widget definitions `{ id, type, title?, content, headerLink? }`\n\t\t * drawn in a 300px column right of the toolbar and the list. Empty\n\t\t * by default; below 1024px the column moves above the list.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-side-panel-beside-the-list\n\t\t * @type {Array<object>}\n\t\t */\n\t\tsidePanel: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Cards after the list (manifest `config.afterList`): dashboard widget\n\t\t * definitions `{ id, type, title?, content, headerLink? }` stacked\n\t\t * under the list in the listed order, the counterpart of `statRow`\n\t\t * above it. A query preset or a scope can set its own.\n\t\t *\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-an-index-page-can-draw-widgets-after-its-list\n\t\t * @type {Array<object>}\n\t\t */\n\t\tafterList: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The route query pairs that chose this page's query preset, set by\n\t\t * CnPageRenderer. They scope the list, so they show no removable\n\t\t * active-filter chip.\n\t\t *\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-the-query-that-chose-a-preset-is-not-a-removable-filter\n\t\t * @type {object|null}\n\t\t */\n\t\tfixedFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Filters the list opens with (manifest `config.defaultFilters`), as\n\t\t * `{ field: value | [values] }`: applied when the address names no\n\t\t * filter and no saved view, shown on the Active line and removed with\n\t\t * their chip or \"Clear all\" like any other filter. An address that\n\t\t * names a filter wins (DqContracten \"Status: actief en verlopend\").\n\t\t *\n\t\t * @spec openspec/changes/index-default-filters/specs/index-page/spec.md#requirement-an-index-page-can-open-with-removable-default-filters\n\t\t * @type {object|null}\n\t\t */\n\t\tdefaultFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Where a row carries the actions the server says this caller may run\n\t\t * on it: a dotted path, read off the rows the list already fetched, so\n\t\t * ninety rows cost one request rather than ninety.\n\t\t *\n\t\t * A row's menu is then the INTERSECTION of what this page declares and\n\t\t * what the server allows. An action the server allows but this page has\n\t\t * stopped declaring stays out, so a row cannot bring back a button the\n\t\t * page removed. An action the page declares but the server refuses\n\t\t * stays out too, and its reason is available from\n\t\t * `rowActionRefusal(row, action)`.\n\t\t *\n\t\t * An action matches by its id. The built-in View, Edit, Copy and Delete\n\t\t * also match OpenRegister's permission verbs: `read` permits View and\n\t\t * Copy, `update` permits Edit, `delete` permits Delete.\n\t\t *\n\t\t * A row carrying nothing at this path is a server that does not answer\n\t\t * about actions, and the page's declaration stands unchanged.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\trowActionField: {\n\t\t\ttype: String,\n\t\t\tdefault: DEFAULT_ROW_ACTION_FIELD,\n\t\t},\n\n\t\t/**\n\t\t * State indicators this page declares for its rows, handed straight to\n\t\t * CnDataTable. Each entry is `{ id, field, equals?, in?, icon, text,\n\t\t * tooltip? }`. The page declares which indicators exist; a record\n\t\t * cannot add one the page has not declared. A page declaring none\n\t\t * renders its rows as before. Fed from the manifest as\n\t\t * `pages[].config.rowIndicators`.\n\t\t *\n\t\t * @type {Array<object>}\n\t\t */\n\t\trowIndicators: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * How many declared indicators render on the row itself before the\n\t\t * rest move into the row menu. Fed from the manifest as\n\t\t * `pages[].config.rowIndicatorCap`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\trowIndicatorCap: {\n\t\t\ttype: Number,\n\t\t\tdefault: DEFAULT_ROW_INDICATOR_CAP,\n\t\t},\n\n\t\t/**\n\t\t * The fields a quick edit asks for, opened from a row without leaving\n\t\t * the list. Empty means no quick edit. The page names the fields; a\n\t\t * record cannot open a form on one the page did not name. Fed from the\n\t\t * manifest as `pages[].config.quickEditFields`.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tquickEditFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Where a record lists the fields this caller may write. A field the\n\t\t * page named that is not in that list renders read-only rather than\n\t\t * missing, so a person sees the value and learns it is not theirs to\n\t\t * change. A row carrying nothing there leaves every named field\n\t\t * editable.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\twritableField: {\n\t\t\ttype: String,\n\t\t\tdefault: '@self.writableFields',\n\t\t},\n\n\t\t/**\n\t\t * Saved view ids this page renders as tabs instead of as entries in the\n\t\t * views control. A view appears in one place or the other, never both.\n\t\t * An id naming a view that no longer exists produces no tab.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tviewTabs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Which saved views show how many records they match: `true` for all\n\t\t * of them (tabs and the entries in the views control), or a list of\n\t\t * view ids. Off by default, so no count request is made. A quick\n\t\t * filter opts in on its own entry with `showCount: true`.\n\t\t *\n\t\t * @type {boolean|string[]}\n\t\t */\n\t\tviewCounts: {\n\t\t\ttype: [Boolean, Array],\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The teams this person may claim. The instance decides this list; it\n\t\t * is the membership side of `claimedTeams`.\n\t\t *\n\t\t * @type {Array<string|object>}\n\t\t */\n\t\tofferedTeams: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The teams this person stored as claimed, read as a personal\n\t\t * preference alongside the others. It is narrowed to `offeredTeams`, so\n\t\t * a team they claimed before it was taken away is passed over rather\n\t\t * than honoured.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tclaimedTeams: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The field carrying a record's DERIVED priority, and the order its\n\t\t * values rank in, lowest first. The list reads the value and sorts on\n\t\t * it; it never computes one. A record with no priority sorts after\n\t\t * every ranked one, in both directions, and stays in the list.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tpriorityField: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The priority values in rank order, lowest first, e.g.\n\t\t * `['low', 'medium', 'high']`. A value outside this list is unranked.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tpriorityLevels: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Offer the list's keyboard shortcuts. Every one of them is also listed\n\t\t * in the command palette and on the help key, because a shortcut nobody\n\t\t * can find does not count.\n\t\t */\n\t\tlistShortcuts: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Per-column filters in the table header: a filter button on every\n\t\t * column that can filter, opening a small panel that fits the column\n\t\t * (checkboxes, yes/no/any, from and to, a searchable reference list).\n\t\t * On by default; a column opts out with `filterable: false`, a page\n\t\t * with `pages[].config.headerFilters: false`. Filters write into the\n\t\t * same active-filter map as the facet sidebar, so they persist in the\n\t\t * route query and reach the same OpenRegister query parameters.\n\t\t *\n\t\t * @spec openspec/changes/table-header-sort-and-filter/specs/cn-data-table/spec.md#requirement-every-backed-column-filters-from-its-header\n\t\t */\n\t\theaderFilters: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Show a filter menu (funnel button) in the table header, above the\n\t\t * row-actions column. Its menu lists every enum/badge column's values as\n\t\t * toggleable facet filters — a compact alternative to the facet sidebar.\n\t\t * Under the board look, on a page with no filter sidebar, it is the\n\t\t * toolbar's labelled Filter button instead (row 1, before the view switch).\n\t\t * Fed from the manifest as `pages[].config.filterMenu`.\n\t\t */\n\t\tfilterMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Show a column menu (columns button) in the table header, above the\n\t\t * row-actions column. Its menu lists every governed column as a toggleable\n\t\t * checkbox — a compact, in-table alternative to the sidebar's Columns tab,\n\t\t * so the sidebar space can be reclaimed. Fed from the manifest as\n\t\t * `pages[].config.columnMenu`.\n\t\t */\n\t\tcolumnMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether the refresh action is currently in progress */\n\t\trefreshing: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Whether to auto-subscribe to live collection updates in self-fetch\n\t\t * mode. Defaults to true. When `register` + `schema` are set (and no\n\t\t * `objects` prop is passed), the page subscribes to the collection's\n\t\t * `or-collection-{register}-{schema}` scope on mount and refetches\n\t\t * (coalesced — events are hints) when an update event arrives; the\n\t\t * subscription is released on unmount. Set `false` (manifest:\n\t\t * `config.subscribe: false`) for static / read-once views. No-op in\n\t\t * consumer-managed mode (an `objects` prop was passed) and on stores\n\t\t * without live-updates support.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tsubscribe: { // eslint-disable-line vue/no-unused-properties -- read by useSelfFetchList.js off the props object, which this rule does not follow.\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether the refresh action is disabled (e.g. when required selections are missing) */\n\t\trefreshDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether the Add button is disabled (e.g. when required selections are missing) */\n\t\taddDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether to show the Add button in the actions bar */\n\t\tshowAdd: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Store instance for automatic save integration. When provided alongside\n\t\t * objectType, the form dialog saves directly to the store instead of\n\t\t * emitting create/edit events. The object type must already be registered\n\t\t * in the store via registerObjectType() before passing the store here.\n\t\t */\n\t\tstore: { type: Object, default: null },\n\t\t/**\n\t\t * Object type slug for store integration (e.g. `${registerId}-${schemaId}`).\n\t\t * Required when store is set — a console warning is emitted if missing.\n\t\t */\n\t\tobjectType: { type: String, default: '' },\n\t\t/**\n\t\t * Manifest-driven sidebar configuration. When set with\n\t\t * `enabled: true`, CnIndexPage auto-mounts an embedded\n\t\t * CnIndexSidebar wired to the page's schema, search, columns,\n\t\t * and facet props. When unset or `enabled: false`, the\n\t\t * legacy slot-based interface is preserved — consumers\n\t\t * mount their own CnIndexSidebar at the App.vue level.\n\t\t *\n\t\t * Shape:\n\t\t * - `enabled` (boolean) — **existence gate**. Whether the\n\t\t * page configures an embedded sidebar at all. When `false`\n\t\t * or unset, the auto-mount path is bypassed (no\n\t\t * `<CnIndexSidebar>` rendered) and the consumer's slot\n\t\t * pattern stays active.\n\t\t * - `show` (boolean, default `true`) — **visibility gate**.\n\t\t * Even when `enabled: true`, `show: false` SUPPRESSES\n\t\t * rendering for this page so manifest authors can hide\n\t\t * the sidebar declaratively without removing the config.\n\t\t * Distinct from `enabled` so config can be retained\n\t\t * (e.g. for a watcher / responsive layout) while the\n\t\t * visible surface is hidden.\n\t\t * - `columnGroups` (array) — extra column groups beyond schema + Metadata.\n\t\t * - `facets` (object) — live facet data { fieldName: { values: [...] } }.\n\t\t * - `showMetadata` (boolean) — include the built-in Metadata column group (defaults true).\n\t\t * - `search` (object) — search-related label overrides forwarded to CnIndexSidebar.\n\t\t *\n\t\t * @type {{ enabled: boolean, show?: boolean, columnGroups?: Array, facets?: object, showMetadata?: boolean, search?: object }|null}\n\t\t */\n\t\tsidebar: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Current search term (forwarded to the embedded sidebar when sidebar.enabled). */\n\t\tsearchValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Currently visible column keys (forwarded to the embedded sidebar). */\n\t\tvisibleColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Currently active facet filters: { fieldName: [values] } (forwarded to the embedded sidebar). */\n\t\tactiveFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Effective register slug for the page. Forwarded as a prop to\n\t\t * the resolved card component (when `cardComponent` is set) so\n\t\t * bespoke card UIs can match the schema → register pair.\n\t\t *\n\t\t * Manifest-driven path: `pages[].config.register` flows in via\n\t\t * CnPageRenderer's `v-bind=\"resolvedProps\"` spread.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tregister: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Optional name of a consumer-provided card component (registered\n\t\t * in the `customComponents` registry on `CnAppRoot`) to render in\n\t\t * place of the default `CnObjectCard` when the page is in\n\t\t * card-grid view mode.\n\t\t *\n\t\t * Resolution priority (highest first):\n\t\t * 1. The parent's `#card` scoped slot (always wins).\n\t\t * 2. The component resolved from `cardComponent` against the v2\n\t\t * `registry` (any kind carrying a `component`), then the legacy\n\t\t * customComponents map.\n\t\t * 3. The library default (`CnObjectCard`).\n\t\t *\n\t\t * Unknown names log `console.warn` once and fall back to the\n\t\t * default so a misconfigured manifest never blanks the grid.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tcardComponent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Name of a custom row component for list view, resolved against the v2\n\t\t * `registry` and then the legacy customComponents map (manifest\n\t\t * `pages[].config.listComponent`).\n\t\t * Same resolution priority as `cardComponent`: the `#list-item` slot\n\t\t * wins, then this component, then the default `CnObjectRow`. Unknown\n\t\t * names warn once and fall back to the default.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tlistComponent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Optional explicit customComponents registry. When set, this\n\t\t * overrides the registry injected from `CnAppRoot` via\n\t\t * `cnCustomComponents`. Provided primarily so unit tests can\n\t\t * pass a registry without mounting `CnAppRoot`.\n\t\t *\n\t\t * Used by:\n\t\t * - `cardComponent` resolution (REQ-MCI from manifest-card-index)\n\t\t * - `actions[].handler` registry name resolution (REQ-MAD-3 from\n\t\t * manifest-actions-dispatch — handler funcs called on row-action click)\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tcustomComponents: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Manifest-driven page-level actions rendered inside the\n\t\t * NcActions overflow dropdown between Refresh and the\n\t\t * `#action-items` slot. Each entry is\n\t\t * `{ id, label, icon?, handler?, route?, disabled? }`. The\n\t\t * `handler` field mirrors the row-level\n\t\t * `actions[].handler` pattern: a function, the keyword\n\t\t * `'navigate'`, `'emit'`, `'none'`, or a string name looked\n\t\t * up in the v2 `registry` (a `kind: 'handler'` entry) and\n\t\t * then in the legacy `customComponents`. The page\n\t\t * dispatches the resolved handler via `onHeaderAction` AND\n\t\t * (unless the handler is the `'none'` keyword) emits\n\t\t * `@header-action({ action: id, id })`.\n\t\t *\n\t\t * An entry with `href` instead renders as a real link and is never\n\t\t * dispatched or emitted: an absolute `http(s)`, `mailto:`, `tel:` or\n\t\t * `//host/...` URL is used as written, an instance path (leading `/`) goes through\n\t\t * `generateUrl()`. `target: '_blank'` opens it in a new tab.\n\t\t *\n\t\t * Reserved ids (those used by built-ins on the bar — `refresh`,\n\t\t * `import`, `export`, `copy`, `delete`) are dropped from the\n\t\t * merged list with a `console.warn`.\n\t\t *\n\t\t * @type {Array<{ id: string, label: string, icon?: string, handler?: string|(() => void), route?: string, href?: string, target?: ('_blank'|'_self'), disabled?: boolean }>}\n\t\t */\n\t\theaderActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Declarative bulk actions for the contextual selection strip.\n\t\t *\n\t\t * The strip has had a `#selection-actions` slot for a while, but a slot\n\t\t * can only be filled by a hand-written host component — so a page\n\t\t * declared in an app manifest could carry row actions and header\n\t\t * actions and never a bulk one. This prop is the missing vocabulary.\n\t\t *\n\t\t * Handler resolution mirrors `headerActions[]`, with one difference\n\t\t * that is the whole point: the handler is called with the SELECTION.\n\t\t * A bulk handler that has to go and find out what was selected is a\n\t\t * bulk handler waiting to disagree with the strip that invoked it.\n\t\t *\n\t\t * Reserved ids (`copy`, `delete`) are dropped with a warning — the\n\t\t * strip already ships those two as built-ins, and a second button with\n\t\t * the same name doing something else is worse than no button.\n\t\t *\n\t\t * @type {Array<{ id: string, label: string, icon?: string, handler?: string|((scope: { actionId: string, selectedIds: Array<string>, count: number }) => void), target?: string, props?: object, disabled?: boolean }>}\n\t\t */\n\t\tbulkActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Active organisation entity (multi-tenancy-context). When\n\t\t * bound from a tenant-switcher higher in the tree, CnIndexPage\n\t\t * watches it and calls `store.setActiveTenantOrganisation(uuid)`\n\t\t * so the next fetchCollection() stamps the new tenant header\n\t\t * and the in-memory caches are cleared. When the prop is unset\n\t\t * the legacy single-tenant behaviour is preserved exactly.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tactiveOrganisation: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * When set, adds a Documentation entry to the Actions overflow\n\t\t * (after Refresh). Opens the URL in a new tab. Empty hides it.\n\t\t */\n\t\tdocumentationUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label for the Documentation overflow entry. */\n\t\tdocumentationLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: [\n\t\t'action',\n\t\t'add',\n\t\t'apply-view',\n\t\t'board-move',\n\t\t'board-column-field-change',\n\t\t'bulk-action',\n\t\t'clear-filters',\n\t\t'columns-change',\n\t\t'quick-edit-save',\n\t\t'configure',\n\t\t'content-search',\n\t\t'copy',\n\t\t'create',\n\t\t'delete',\n\t\t'edit-open',\n\t\t'filter-change',\n\t\t'folder-change',\n\t\t'folder-create',\n\t\t'header-action',\n\t\t'mass-copy',\n\t\t'open-modal',\n\t\t'mass-delete',\n\t\t'mass-export',\n\t\t'mass-import',\n\t\t'page-changed',\n\t\t'page-size-changed',\n\t\t'quick-filter-change',\n\t\t'refresh',\n\t\t'row-click',\n\t\t'row-aux-click',\n\t\t'search',\n\t\t'select',\n\t\t'sort',\n\t\t'sort-change',\n\t\t'view',\n\t\t'view-mode-change',\n\t\t'view-overrides',\n\t\t'split-close',\n\t\t'split-saved',\n\t\t'manual-order-change',\n\t],\n\n\tsetup(props) {\n\t\t// The look this page is drawn in: its own `look` prop, else the\n\t\t// `cnLook` CnAppRoot (or the page renderer) provides.\n\t\tconst { isBoard: isBoardLook, lookClass } = useLook(props)\n\n\t\tconst {\n\t\t\tisOpen: contextMenuOpen,\n\t\t\ttargetItem: contextMenuRow,\n\t\t\topen: openContextMenu,\n\t\t\tclose: closeContextMenu,\n\t\t} = useContextMenu()\n\n\t\t// The selected folder's own `{ schema, register? }`, or null. Written by\n\t\t// onFolderSelect(); useSelfFetchList turns it into the loaded object type.\n\t\tconst activeFolderSchema = ref(null)\n\n\t\tconst {\n\t\t\tisSelfFetch,\n\t\t\tlist,\n\t\t\tselfObjectStore,\n\t\t\tselfObjectType,\n\t\t\tactiveQuickFilterIndex,\n\t\t\tselectedQuickFilterIndices,\n\t\t\tcontentSearch,\n\t\t\tselfFetchTokenCtx,\n\t\t\tinitialQueryFilterKeys,\n\t\t} = useSelfFetchList(props, getCurrentInstance(), inject, { activeFolderSchema })\n\n\t\t// The sidebar's chosen values on a NAMED-SOURCE page. Self-fetch keeps\n\t\t// its own in `useSelfFetchList`; a named source had nowhere to put\n\t\t// them, so `activeFilters` was a prop only a consumer could fill and a\n\t\t// manifest page's sidebar rendered controls that narrowed nothing.\n\t\t//\n\t\t// Seeded from the route query so a shared link lands filtered, the\n\t\t// same way `_order` and a deep-link filter already do for self-fetch.\n\t\t// The page a paging named source shows: page 1 at the source config's\n\t\t// `limit` (20 by default), moved by the pager.\n\t\tconst namedPageSize = Number(props.sourceConfig && props.sourceConfig.limit) > 0 ? Number(props.sourceConfig.limit) : 20\n\t\tconst namedPaging = ref({ page: 1, limit: namedPageSize })\n\t\tconst namedActiveFilters = ref(namedFiltersWithDefaults(getCurrentInstance(), props))\n\t\t// The search term on a named source that searches (`searchParam`).\n\t\tconst namedSearchTerm = ref('')\n\t\t// The order a named source shows its rows in: sorted on the page\n\t\t// (`sortsRows`) or asked of the server (`sortParam`), starting from\n\t\t// the page's `sortKey` / `sortOrder`.\n\t\tconst namedSort = ref({ key: props.sortKey || '', order: props.sortOrder === 'desc' ? 'desc' : 'asc' })\n\n\t\tconst {\n\t\t\tisNamedSource,\n\t\t\tnamedSource,\n\t\t\tnamedRows,\n\t\t\tnamedLoading,\n\t\t\tnamedQuickFilters,\n\t\t\tnamedReload,\n\t\t} = useNamedSource(props, { activeQuickFilterIndex, activeFilters: namedActiveFilters, paging: namedPaging, searchTerm: namedSearchTerm, sort: namedSort })\n\n\t\treturn {\n\t\t\tisBoard: isBoardLook,\n\t\t\tisBoardLook,\n\t\t\tlookClass,\n\t\t\tisNamedSource,\n\t\t\tnamedSource,\n\t\t\tnamedRows,\n\t\t\tnamedLoading,\n\t\t\tnamedQuickFilters,\n\t\t\tnamedReload,\n\t\t\tnamedActiveFilters,\n\t\t\tnamedPaging,\n\t\t\tnamedSearchTerm,\n\t\t\tnamedSort,\n\t\t\tcontextMenuOpen,\n\t\t\tcontextMenuRow,\n\t\t\topenContextMenu,\n\t\t\tcloseContextMenu,\n\t\t\tisSelfFetch,\n\t\t\tlist,\n\t\t\tselfObjectStore,\n\t\t\tselfObjectType,\n\t\t\tactiveQuickFilterIndex,\n\t\t\tselectedQuickFilterIndices,\n\t\t\tcontentSearch,\n\t\t\tactiveFolderSchema,\n\t\t\tselfFetchTokenCtx,\n\t\t\tinitialQueryFilterKeys,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * The chosen sort option that names an endpoint `source`, its rows,\n\t\t\t * their state ('idle' | 'loading' | 'ready' | 'failed') and the page\n\t\t\t * shown. The value is '' while an ordinary order is chosen.\n\t\t\t */\n\t\t\tsortSource: { value: '', rows: [], state: 'idle', page: 1 },\n\t\t\tcurrentViewMode: this.viewMode,\n\t\t\t/** Whether `?_view=` names a mode the page did not offer yet, to open once it does. */\n\t\t\trouteViewPending: false,\n\t\t\t/** The column field the reader picked in the board's column switch; '' = the default. */\n\t\t\tboardColumnFieldChoice: '',\n\t\t\t/** The rows a reference column field is built from, by field. */\n\t\t\tboardRefs: {},\n\t\t\tliveHandles: [],\n\t\t\tliveTimer: null,\n\t\t\tliveUnwatch: null,\n\t\t\t/** The options of the board's narrowing select (`board.narrow`). */\n\t\t\tboardNarrowOptions: [],\n\t\t\t/** The menu entries CnActionButtons reports for the dialog header actions, each with its `run()`. */\n\t\t\tdialogHeaderRuns: [],\n\t\t\t/** The visible calendar window `{ rangeStart, rangeEnd }` (ISO dates), or null outside calendar mode. */\n\t\t\tcalendarRange: null,\n\t\t\t/** The page size to restore when leaving calendar mode. */\n\t\t\tcalendarPrevPageSize: null,\n\t\t\t// The table's page size while the board view holds the list at\n\t\t\t// BOARD_PAGE_SIZE; restored on leaving the board.\n\t\t\tboardPrevPageSize: this.viewMode === 'board' ? ((this.pagination && this.pagination.limit) || 20) : null,\n\t\t\t/** Resolved labels of reference columns: `{ [columnKey]: { [id]: label|null } }`. */\n\t\t\trefLabels: {},\n\t\t\t/** Colour and icon names of the records badge columns point at: `{ [columnKey]: { [id]: { color, icon } } }`. */\n\t\t\trefLooks: {},\n\t\t\t/** Count per tab-strip index, for the entries that asked for one; null = none. */\n\t\t\ttabCounts: null,\n\t\t\t// The counts of the `filterStrip` pills, by pill key ('all', 'v0', ...).\n\t\t\tfilterStripCounts: null,\n\t\t\t/** The `countFrom` counts of the manifest page tabs, by index. */\n\t\t\tpageTabCounts: {},\n\t\t\t/** The `headerMetaCounts` totals, by name; a failed one is null. */\n\t\t\theaderMetaCountValues: {},\n\t\t\t/** The row the pointer is on in the map list, by key; '' for none. */\n\t\t\tactiveMapKey: '',\n\t\t\t/** The rows `mapConfig.markerColor.source` points at, or null before they load. */\n\t\t\tmapColorRefs: null,\n\t\t\t/** The page size to restore when leaving a map that plots every row. */\n\t\t\tmapPrevPageSize: this.viewMode === 'map' && mapPlotAllLimitOf(this.mapConfig) > 0 ? ((this.pagination && this.pagination.limit) || 20) : null,\n\t\t\t/** The tabs `quickFiltersFrom` produced, or null before they load. */\n\t\t\tgeneratedQuickFilters: null,\n\t\t\t/** Count per saved-view id, for the views control; null = none. */\n\t\t\tsavedViewCounts: null,\n\t\t\t// The id (or slug) of the saved view that is applied; its chip shows selected under the board look.\n\t\t\tappliedSavedViewId: '',\n\t\t\t// The sort option the applied view's `overrides.sortOption` selected, so leaving the view can undo it.\n\t\t\tviewSortOption: '',\n\t\t\t// The applied view's filters as one comparable key, so the address keeps naming the view until they change.\n\t\t\tappliedViewFiltersKey: '',\n\t\t\t/**\n\t\t\t * The non-`_` query keys this page owns, i.e. may clear on the next\n\t\t\t * persist. Seeded with what it adopted from the query on load, and\n\t\t\t * replaced by what it writes; a key it never claimed is somebody\n\t\t\t * else's and is left in the address bar untouched.\n\t\t\t *\n\t\t\t * @type {Array<string>}\n\t\t\t */\n\t\t\tpersistedFilterKeys: [...(this.initialQueryFilterKeys || [])],\n\t\t\tinternalSelectedIds: [...this.selectedIds],\n\t\t\t// Rows seen in a collectionUrl list, so a selection kept across pages still resolves its own pair.\n\t\t\tcollectionRowsById: markRaw(new Map()),\n\t\t\t// Folder-sidebar state: selected folder id + the register-fetched list.\n\t\t\tselectedFolderId: null,\n\t\t\t/**\n\t\t\t * The grouping field's facet as last seen with NO folder selected:\n\t\t\t * the whole set of folders, kept on screen while one is selected.\n\t\t\t *\n\t\t\t * @type {Array<object>}\n\t\t\t */\n\t\t\tfolderSidebarAllValues: [],\n\t\t\tfolderRegisterList: [],\n\t\t\t/** The Nextcloud groups a `folderSidebar.source: 'groups'` pane lists. */\n\t\t\tfolderGroupList: [],\n\t\t\t// `x-index` blocks read off the schema rows a `source: 'register'`\n\t\t\t// folder list was built from, keyed by folder id. The layout a case\n\t\t\t// type carries travels with the record rather than being restated\n\t\t\t// in every manifest that lists it.\n\t\t\tfolderRowLayouts: {},\n\t\t\t/** The row the keyboard is on, or -1. */\n\t\t\tfocusedRowIndex: -1,\n\t\t\t// The row the context menu shows: set on open, never cleared on close, so a closing menu keeps its entries and a late close cannot null a reopened one.\n\t\t\tcontextMenuShownRow: null,\n\t\t\t/** The row a quick edit is open on, or null. */\n\t\t\tquickEditRow: null,\n\t\t\t/** The row as the server holds it, after a stale save. */\n\t\t\tquickEditServerRow: null,\n\t\t\t/** Whether the shortcut help sheet is open. */\n\t\t\tshowShortcutHelp: false,\n\t\t\t// Mass action dialogs\n\t\t\tshowMassDeleteDialog: false,\n\t\t\tshowMassCopyDialog: false,\n\t\t\tshowExportDialog: false,\n\t\t\tshowImportDialog: false,\n\t\t\t// Single-object dialogs\n\t\t\tshowSingleDeleteDialog: false,\n\t\t\tshowSingleCopyDialog: false,\n\t\t\tshowFormDialogVisible: false,\n\t\t\t// Dialog targets\n\t\t\tactionTargetItem: null,\n\t\t\teditItem: null,\n\t\t\t// The pair and schema of a row edited outside the page's own pair (collectionUrl).\n\t\t\trowFormTarget: null,\n\t\t\trowFormSchema: null,\n\t\t\t// Drives the Actions-menu Refresh spinner during a self-fetch\n\t\t\t// refresh, where the host has no promise to bind `:refreshing` to.\n\t\t\tinternalRefreshing: false,\n\t\t\t// Search/Columns sidebar open state. Defaults closed so the page\n\t\t\t// content (table / cards) starts at the top and fills the width;\n\t\t\t// opened on demand via the actions-bar toggle.\n\t\t\tsidebarOpen: false,\n\t\t\t/** The sidebar tab to show; follows the user's own tab changes. */\n\t\t\tsidebarActiveTab: '',\n\t\t\t// Saved views (saved-views-ui): the fetched view list, its\n\t\t\t// loading flag, the save-dialog toggle, and the view awaiting\n\t\t\t// delete confirmation.\n\t\t\tsavedViews: [],\n\t\t\tsavedViewsLoading: false,\n\t\t\tshowSaveViewDialog: false,\n\t\t\tviewPendingDelete: null,\n\t\t\t/** An `api-call` header action waiting on its confirmation, or null. */\n\t\t\theaderApiCallPending: null,\n\t\t\t/** The own view whose audience is being changed (CnSavedViewShareDialog), or null. */\n\t\t\tviewPendingShare: null,\n\t\t\t/** The own view being renamed or re-filtered (CnSavedViewEditDialog), or null. */\n\t\t\tviewPendingEdit: null,\n\t\t\t/** The view whose presentation is being changed (CnSavedViewPresentationDialog), or null. */\n\t\t\tviewPendingPresentation: null,\n\t\t\t// Split view (case-page-and-list-as-a-place). `splitRowPatches` holds\n\t\t\t// records saved in the pane, keyed by row id, so a save lands on the\n\t\t\t// row without refetching the page and losing the scroll position.\n\t\t\t// `splitViewportWidth` is measured rather than guessed, so the narrow\n\t\t\t// fallback follows a window resize and not only a reload.\n\t\t\tsplitRowPatches: {},\n\t\t\t// Measured here rather than in `mounted`, so the FIRST render is\n\t\t\t// already the right layout. Measuring after the mount rendered\n\t\t\t// the split pane once on a phone and then swapped it for the full\n\t\t\t// page, which reads as the page flickering on every open.\n\t\t\tsplitViewportWidth: (typeof window !== 'undefined' && Number.isFinite(window.innerWidth)) ? window.innerWidth : 0,\n\t\t\tsplitScrollTop: 0,\n\t\t\t// Manual order: the row ids this person dragged into an order, read\n\t\t\t// from and written to their own preferences. Never on the records.\n\t\t\tmanualOrderIds: [],\n\t\t\t// Personal column layout: `{ columns, pinned }` read from preferences\n\t\t\t// or set by the sidebar, and the columns of an applied saved view.\n\t\t\tpersonalLayout: null,\n\t\t\tappliedViewColumns: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The quick-filter placement in the current view: its entry in\n\t\t * `quickFilterPlacementByView`, else `quickFilterPlacement`.\n\t\t *\n\t\t * @spec openspec/changes/index-quick-filter-placement-per-view/specs/index-page/spec.md#requirement-the-quick-filter-placement-can-differ-per-view\n\t\t * @return {''|'toolbar'|'row'|'active'} The placement.\n\t\t */\n\t\teffectiveQuickFilterPlacement() {\n\t\t\tconst byView = this.quickFilterPlacementByView\n\t\t\tconst own = byView && typeof byView === 'object' ? byView[this.currentViewMode] : undefined\n\t\t\treturn ['', 'toolbar', 'row', 'active'].includes(own) ? own : this.quickFilterPlacement\n\t\t},\n\n\t\t/**\n\t\t * Whether the quick-filter tabs are drawn in the toolbar row: there are\n\t\t * tabs, and the placement is neither a row of their own nor the Active\n\t\t * line only.\n\t\t *\n\t\t * @spec openspec/changes/index-toolbar-start-and-active-only-quick-filters/specs/index-page/spec.md#requirement-quick-filters-can-show-only-on-the-active-line\n\t\t * @return {boolean} True when the toolbar draws the tabs.\n\t\t */\n\t\tquickFilterTabsInToolbar() {\n\t\t\treturn Boolean(this.tabStripEntries && this.tabStripEntries.length > 0) && !['row', 'active'].includes(this.effectiveQuickFilterPlacement)\n\t\t},\n\n\t\t/**\n\t\t * Whether the page draws cards beside its list (`sidePanel`).\n\t\t *\n\t\t * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-side-panel-beside-the-list\n\t\t * @return {boolean}\n\t\t */\n\t\thasSidePanel() {\n\t\t\treturn Array.isArray(this.sidePanel) && this.sidePanel.length > 0\n\t\t},\n\n\t\t/**\n\t\t * The empty-state copy run through the host translate function\n\t\t * (the injected `cnTranslate`, identity by default). Only this\n\t\t * component's OWN `NcEmptyContent` uses it — the raw `emptyText`\n\t\t * keeps flowing to CnDataTable / CnObjectList / CnCardGrid, which\n\t\t * translate at their own render boundary, so the string is never\n\t\t * run through the translator twice.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tresolvedEmptyText() {\n\t\t\tconst fn = typeof this.cnTranslate === 'function' ? this.cnTranslate : (k) => k\n\t\t\treturn this.emptyText ? fn(this.emptyText) : this.emptyText\n\t\t},\n\n\t\t/**\n\t\t * The personal-lens reports of the list on screen: the store's copy\n\t\t * of the latest response in self-fetch mode, else the `lenses` prop.\n\t\t *\n\t\t * @return {object}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-a-list-response-carries-the-report-of-the-lenses-it-was-asked-for\n\t\t */\n\t\teffectiveLenses() {\n\t\t\tif (this.isNamedSource) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\treturn (this.list.lenses && this.list.lenses.value) || {}\n\t\t\t}\n\t\t\treturn this.lenses || {}\n\t\t},\n\n\t\t/**\n\t\t * Why the list is empty when a personal lens could not answer (the\n\t\t * audit trail is off, nobody is logged in, the history could not be\n\t\t * read), or `''` to keep the generic empty text.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-an-unavailable-lens-explains-its-empty-page\n\t\t */\n\t\tlensReasonText() {\n\t\t\tconst text = lensUnavailableText(this.effectiveLenses, this.lensReasonTexts)\n\t\t\tif (!text) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst fn = typeof this.cnTranslate === 'function' ? this.cnTranslate : (k) => k\n\t\t\treturn fn(text)\n\t\t},\n\n\t\t/**\n\t\t * Whether the host manifest editor is in edit mode (unwraps the injected\n\t\t * `cnEditingBody`, which may be a Vue ref or a plain boolean). Drives the\n\t\t * in-header config cog.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEditMode() {\n\t\t\tconst e = this.cnEditingBody\n\t\t\treturn !!(e && typeof e === 'object' && 'value' in e ? e.value : e)\n\t\t},\n\n\t\t/**\n\t\t * The same map as `effectiveCustomComponents`, under the name the\n\t\t * header-action and bulk-action paths have always used. One of the two\n\t\t * computeds has to be the other, or a change to the resolution order\n\t\t * lands on half the surfaces.\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tresolvedCustomComponents() {\n\t\t\treturn this.effectiveCustomComponents\n\t\t},\n\n\t\t/**\n\t\t * Whether a row click opens the row rather than selecting it:\n\t\t * `rowClickToView` is set AND something can open it (a `row-click`\n\t\t * listener, or a named source that routes its own rows). Otherwise a\n\t\t * click on a selectable page selects, so it is never dead.\n\t\t *\n\t\t * `$.vnode.props` is not reactive, so a `row-click` listener attached\n\t\t * or removed after mount does not re-evaluate this.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\trowClickOpens() {\n\t\t\tif (!this.rowClickToView) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.isNamedSource && (this.rowRoute\n\t\t\t\t|| typeof this.namedSource?.openRow === 'function'\n\t\t\t\t|| this.namedSource?.detailRoute)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn !!this.$.vnode.props?.onRowClick\n\t\t},\n\n\t\t/**\n\t\t * Where a table row links to, so the row is a real link (Tab, screen\n\t\t * reader, new tab): the `viewTo` target, when a row click opens it.\n\t\t *\n\t\t * @return {((row: object) => (object|null))|null} The row link target, or null.\n\t\t */\n\t\trowLinkRoute() {\n\t\t\tif (!this.rowClickOpens || typeof this.viewTo !== 'function') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (row) => this.viewTo(row) || null\n\t\t},\n\n\t\t/**\n\t\t * Merged page-level header actions: drops reserved ids and\n\t\t * resolves declarative `handler` keywords (`navigate` / `emit`\n\t\t * / `none` / registry name) to either a function or\n\t\t * no-handler (emit-only) entries. Function-typed handlers are\n\t\t * passed through untouched. The `none` keyword sets\n\t\t * `_dispatchSuppress: true` and provides a no-op function so\n\t\t * the bar still shows a clickable item.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\t/**\n\t\t * The header actions that open a dialog: `type: \"open-form\"` (the\n\t\t * schema-driven create form, as the navigation's primary action opens\n\t\t * it) or `type: \"open-modal\"`, without a `handler` or `href` of their own.\n\t\t * Reserved ids are left out, as in `mergedHeaderActions`. A modal\n\t\t * opened from here also gets the list's active filters as\n\t\t * `activeFilters`, so it knows what the list shows (the pipeline a\n\t\t * board is narrowed to); the action's own props win.\n\t\t *\n\t\t * @spec openspec/changes/index-header-open-form/specs/index-header/spec.md#requirement-an-index-header-action-can-open-the-create-form\n\t\t * @spec openspec/changes/pl4-board-card-actions/specs/pl4-board-card-actions/spec.md#requirement-a-header-modal-knows-the-lists-filters\n\t\t * @return {Array<object>}\n\t\t */\n\t\tdialogHeaderActions() {\n\t\t\tconst reserved = new Set(['refresh', 'import', 'export', 'copy', 'delete'])\n\t\t\treturn (this.headerActions || []).filter((entry) => entry\n\t\t\t\t&& typeof entry.id === 'string'\n\t\t\t\t&& !reserved.has(entry.id)\n\t\t\t\t&& (entry.handler === undefined || entry.handler === null || entry.handler === '')\n\t\t\t\t&& !entry.href\n\t\t\t\t&& (entry.type === 'open-form' || entry.type === 'open-modal'))\n\t\t\t\t.map((entry) => (entry.type === 'open-modal'\n\t\t\t\t\t? { ...entry, props: { activeFilters: { ...this.effectiveActiveFilters }, ...(entry.props || {}) } }\n\t\t\t\t\t: entry))\n\t\t},\n\n\t\t/**\n\t\t * The header actions without reserved ids, and without an `adminOnly`\n\t\t * one for a viewer who is not an administrator, each through\n\t\t * `resolveHeaderHandler` (a manifest `href` entry becomes a link with\n\t\t * `_dispatchSuppress`, so the page neither runs nor emits it).\n\t\t *\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-a-header-action-can-be-offered-to-administrators-only\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmergedHeaderActions() {\n\t\t\tconst reserved = new Set(['refresh', 'import', 'export', 'copy', 'delete'])\n\t\t\tconst merged = []\n\t\t\tfor (const entry of this.headerActions || []) {\n\t\t\t\t// Only what is drawn: the endpoint behind the action checks access itself.\n\t\t\t\tif (entry && entry.adminOnly === true && !this.viewerIsAdmin()) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (entry && reserved.has(entry.id)) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`CnIndexPage: headerActions[].id \"${entry.id}\" is reserved by the built-in bar; dropping entry`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tmerged.push(this.resolveHeaderHandler(entry))\n\t\t\t}\n\t\t\treturn merged\n\t\t},\n\n\t\t/**\n\t\t * Where the Add button links to: the named source's `addRoute`, when\n\t\t * that is what Add does (no host `@add` listener) and the router can\n\t\t * resolve it. The bar then renders Add as a real link; null otherwise.\n\t\t *\n\t\t * `$.vnode.props` is not reactive, so an `add` listener attached or\n\t\t * removed after mount does not re-evaluate this.\n\t\t *\n\t\t * @return {string|object|null}\n\t\t */\n\t\taddLinkTo() {\n\t\t\tif (\n\t\t\t\tthis.$.vnode.props?.onAdd\n\t\t\t\t|| !this.isNamedSource\n\t\t\t\t|| !this.namedSource\n\t\t\t\t|| !this.namedSource.addRoute\n\t\t\t) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn routeHref(this.namedSource.addRoute, this.$router) ? this.namedSource.addRoute : null\n\t\t},\n\n\t\t/**\n\t\t * Declarative bulk actions, validated and normalised.\n\t\t *\n\t\t * `copy` and `delete` are reserved: the selection strip already ships\n\t\t * both as built-ins, so a declared action of the same name would put a\n\t\t * second button with the same word next to one that does something\n\t\t * else.\n\t\t *\n\t\t * Unlike `mergedHeaderActions` this does NOT pre-bind the handler.\n\t\t * A bulk handler needs the selection, and the selection is only known\n\t\t * at click time — binding it here would capture whatever was selected\n\t\t * when the list last re-rendered.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmergedBulkActions() {\n\t\t\tconst reserved = new Set(['copy', 'delete'])\n\t\t\tconst merged = []\n\t\t\tfor (const entry of this.bulkActions || []) {\n\t\t\t\tif (!entry || typeof entry !== 'object' || !entry.id || !entry.label) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`[CnIndexPage] Ignoring bulkActions entry ${JSON.stringify(entry)}: a bulk action needs an id and a label.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (reserved.has(entry.id)) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].id \"${entry.id}\" is reserved by the built-in selection strip; dropping entry`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tmerged.push(entry)\n\t\t\t}\n\t\t\treturn merged\n\t\t},\n\n\t\t// ── Self-fetch ↔ consumer-managed: the \"effective\" source of each\n\t\t// list datum is the useListView instance in self-fetch mode, the\n\t\t// prop otherwise. The template binds to these.\n\t\t/** True when self-fetch mode is active and the useListView instance exists. */\n\t\tisSelfFetchMode() {\n\t\t\treturn this.isSelfFetch && !!this.list\n\t\t},\n\n\t\t/**\n\t\t * Whether the latest self-fetch failed. The store keeps the previous\n\t\t * rows and pagination on a failed fetch, so while this holds the page\n\t\t * shows its error state instead of results for an earlier query.\n\t\t */\n\t\tselfFetchFailed() {\n\t\t\treturn this.isSelfFetchMode && !!this.list.error?.value\n\t\t},\n\n\t\t/**\n\t\t * The failed fetch as a refused search, or null when it is not one.\n\t\t *\n\t\t * @spec openspec/changes/index-search-refusal/specs/index-search-refusal/spec.md#requirement-a-refused-search-is-said-where-it-was-typed\n\t\t * @return {object|null}\n\t\t */\n\t\tsearchRefusal() {\n\t\t\treturn this.selfFetchFailed ? readSearchRefusal(this.list.error.value, this.effectiveSearchValue) : null\n\t\t},\n\n\t\t/**\n\t\t * Whether the named source sends the search term to its server.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tnamedSourceSearches() {\n\t\t\treturn this.isNamedSource && !!this.namedSource && typeof this.namedSource.searchParam === 'string' && this.namedSource.searchParam !== ''\n\t\t},\n\n\t\t/**\n\t\t * The sentence the named source's server refused this reader with, or ''.\n\t\t * While it holds the page shows it instead of the rows, the search and\n\t\t * the tabs: a list nobody may read is not an empty list.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-endpoint-source-states/specs/index-page/spec.md\n\t\t */\n\t\tsourceRefusal() {\n\t\t\treturn this.isNamedSource && this.namedSource && typeof this.namedSource.refusal === 'function' ? (this.namedSource.refusal() || '') : ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the named source's last load failed (not refused).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsourceFailed() {\n\t\t\treturn this.isNamedSource && !!this.namedSource && typeof this.namedSource.failed === 'function' && this.namedSource.failed() === true\n\t\t},\n\n\t\t/**\n\t\t * The note the named source read off its last answer, or ''.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-endpoint-source-states/specs/index-page/spec.md\n\t\t */\n\t\t/**\n\t\t * The endpoint source's facets as pickers: per declared facet its\n\t\t * label, the All choice, the counted values (\"E-mail (11)\") and the\n\t\t * value chosen now. A chosen value the narrowed answer no longer\n\t\t * counts stays offered, so the picker still shows it. A facet that\n\t\t * declares `picker: false` draws no picker: its field is filtered in\n\t\t * the side panel instead (DqPostvak's channel).\n\t\t *\n\t\t * @return {Array<{field: string, label: string, allLabel: string, value: string, options: Array<{value: string, label: string}>}>}\n\t\t * @spec openspec/changes/index-endpoint-source-states/specs/index-page/spec.md\n\t\t * @spec openspec/changes/source-facet-picker-off/specs/source-facet-picker-off/spec.md#requirement-a-source-facet-can-leave-its-picker-out\n\t\t */\n\t\tsourceFacetControls() {\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\tconst declared = source && Array.isArray(source.facetDeclarations) ? source.facetDeclarations.filter((facet) => facet.picker !== false) : []\n\t\t\tif (declared.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst counted = typeof source.facets === 'function' ? (source.facets() || {}) : {}\n\t\t\treturn declared.map((facet) => {\n\t\t\t\tconst labels = facet.labels && typeof facet.labels === 'object' ? facet.labels : {}\n\t\t\t\tconst nameOf = (value) => (labels[value] ? this.cnTranslate(labels[value]) : value)\n\t\t\t\tconst chosenRaw = (this.namedActiveFilters || {})[facet.field]\n\t\t\t\tconst chosen = Array.isArray(chosenRaw) ? String(chosenRaw[0] ?? '') : String(chosenRaw ?? '')\n\t\t\t\tconst options = (counted[facet.field] || []).map((entry) => ({ value: entry.value, label: `${nameOf(entry.value)} (${entry.count})` }))\n\t\t\t\tif (chosen !== '' && !options.some((option) => option.value === chosen)) {\n\t\t\t\t\toptions.push({ value: chosen, label: nameOf(chosen) })\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tfield: facet.field,\n\t\t\t\t\tlabel: facet.label ? this.cnTranslate(facet.label) : facet.field,\n\t\t\t\t\tallLabel: facet.allLabel ? this.cnTranslate(facet.allLabel) : t('nextcloud-vue', 'All'),\n\t\t\t\t\tvalue: chosen,\n\t\t\t\t\toptions,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tsourceNote() {\n\t\t\treturn this.isNamedSource && this.namedSource && typeof this.namedSource.note === 'function' ? (this.namedSource.note() || '') : ''\n\t\t},\n\n\t\t/** @return {string} What to do after a refused search. */\n\t\tsearchRefusalHintText() {\n\t\t\tif (this.searchRefusalHint) {\n\t\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(this.searchRefusalHint) : this.searchRefusalHint\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'Correct that character, or search for plain words. AND, OR and NOT work in capitals, and quotes make a phrase.')\n\t\t},\n\n\t\t/** Rows: store collection in self-fetch mode, else the `objects` prop. */\n\t\teffectiveObjects() {\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tconst sortsRows = !!(this.namedSource && this.namedSource.sortsRows === true)\n\t\t\t\tconst key = sortsRows && this.namedSort ? this.namedSort.key : ''\n\t\t\t\tif (!key) {\n\t\t\t\t\treturn this.namedRows\n\t\t\t\t}\n\t\t\t\tconst direction = this.namedSort.order === 'desc' ? -1 : 1\n\t\t\t\tconst text = (row) => String(row && row[key] !== undefined && row[key] !== null ? row[key] : '')\n\t\t\t\treturn [...(this.namedRows || [])].sort((a, b) => direction * text(a).localeCompare(text(b), undefined, { numeric: true, sensitivity: 'base' }))\n\t\t\t}\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\treturn this.sortSourceView.rows\n\t\t\t}\n\t\t\tif (this.selfFetchFailed) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst rows = this.isSelfFetchMode ? (this.list.objects.value || []) : this.objects\n\t\t\treturn this.annotatingSource ? annotateRows(rows, this.sortSource.rows, this.annotatingSource) : rows\n\t\t},\n\n\t\t/**\n\t\t * The sort options that name an endpoint `source`.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tsourceSortOptions() {\n\t\t\treturn (this.sortSelectOptions || []).filter((o) => o && o.value !== undefined && o.source && typeof o.source.url === 'string' && o.source.url !== '')\n\t\t},\n\n\t\t/**\n\t\t * What the selected lenses ask a sort source for: the `sourceParams` of\n\t\t * each selected quick filter, merged. A lens that changes WHICH rows an\n\t\t * endpoint answers (\"Including work you cover\") cannot say so through its\n\t\t * `filter`, which only narrows the object fetch and the rows already\n\t\t * loaded.\n\t\t *\n\t\t * @return {object} The parameters.\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tlensSourceParams() {\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tconst indices = this.quickFilterMultiple\n\t\t\t\t? (this.selectedQuickFilterIndices || [])\n\t\t\t\t: [this.activeQuickFilterIndex]\n\t\t\tconst params = {}\n\t\t\tfor (const index of indices) {\n\t\t\t\tconst tab = typeof index === 'number' ? tabs[index] : null\n\t\t\t\tif (tab && tab.sourceParams && typeof tab.sourceParams === 'object' && !Array.isArray(tab.sourceParams)) {\n\t\t\t\t\tObject.assign(params, tab.sourceParams)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn params\n\t\t},\n\n\t\t/**\n\t\t * The sort option whose endpoint lists the rows now, or null.\n\t\t *\n\t\t * @return {object|null}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tactiveSortSource() {\n\t\t\tif (!this.sortSource.value) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.sourceSortOptions.find((o) => String(o.value) === this.sortSource.value) || null\n\t\t},\n\n\t\t/**\n\t\t * Whether the rows on screen are the sort source's: a self-fetch page\n\t\t * with a source option chosen whose endpoint did not fail.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsortSourceShown() {\n\t\t\treturn !!this.activeSortSource && this.isSelfFetchMode && this.sortSource.state !== 'failed'\n\t\t},\n\n\t\t/**\n\t\t * Whether a chosen source option fell back to its own order.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsortSourceFellBack() {\n\t\t\treturn !!this.activeSortSource && this.sortSource.state === 'failed'\n\t\t},\n\n\t\t/**\n\t\t * The translated note for a fallen-back source option, or ''.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsortSourceFailedNote() {\n\t\t\tconst note = this.activeSortSource && this.activeSortSource.source.failedNote\n\t\t\treturn typeof note === 'string' && note !== '' ? this.cnTranslate(note) : ''\n\t\t},\n\n\t\t/**\n\t\t * The source rows after the page's search and sidebar filters, one\n\t\t * page of them at the list's page size.\n\t\t *\n\t\t * @return {{rows: Array<object>, pagination: object}}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tsortSourceView() {\n\t\t\tconst limit = (this.list && this.list.pagination && this.list.pagination.value && this.list.pagination.value.limit) || 20\n\t\t\treturn pageSourceRows(this.sortSourceFilteredRows, this.sortSource.page, limit)\n\t\t},\n\n\t\t/**\n\t\t * The source rows after the page's search and sidebar filters, every page.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tsortSourceFilteredRows() {\n\t\t\tconst source = this.activeSortSource ? this.activeSortSource.source : {}\n\t\t\treturn filterSourceRows(this.sortSource.rows, {\n\t\t\t\tsearch: this.list && this.list.searchTerm ? this.list.searchTerm.value : '',\n\t\t\t\tfilters: this.list && this.list.activeFilters ? this.list.activeFilters.value : {},\n\t\t\t\tsearchFields: source.searchFields,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The rows `{rows:<field>}` in the header note counts: every row of a\n\t\t * sort source's list, else the rows on screen.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\theaderMetaRows() {\n\t\t\treturn this.sortSourceShown ? this.sortSourceFilteredRows : (this.effectiveObjects || [])\n\t\t},\n\n\t\t/**\n\t\t * The source whose carried fields reach every order's rows\n\t\t * (`source.annotate`), once its rows are read, or null.\n\t\t *\n\t\t * @return {object|null} The option's source.\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-row-field-the-source-supplies-reaches-every-order\n\t\t */\n\t\tannotatingSource() {\n\t\t\tconst option = this.sourceSortOptions.find((o) => o.source.annotate === true)\n\t\t\treturn option && this.sortSource.rows.length > 0 ? option.source : null\n\t\t},\n\n\t\t/**\n\t\t * The month window as list-query conditions, only in calendar mode.\n\t\t * With an end field an entry counts when it overlaps the window;\n\t\t * without one, when its date falls inside it. Read by\n\t\t * `useSelfFetchList`'s fixed-filter getter, and empty outside calendar\n\t\t * mode so the table is never narrowed after leaving.\n\t\t *\n\t\t * @return {object} The filter conditions, or an empty object.\n\t\t */\n\t\tcalendarRangeFilter() {\n\t\t\tconst cal = this.calendar || {}\n\t\t\tif (this.currentViewMode !== 'calendar' || !cal.dateField || !this.calendarRange) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tconst { rangeStart, rangeEnd } = this.calendarRange\n\t\t\tif (cal.endDateField) {\n\t\t\t\treturn { [`${cal.dateField}[lte]`]: rangeEnd, [`${cal.endDateField}[gte]`]: rangeStart }\n\t\t\t}\n\t\t\treturn { [`${cal.dateField}[gte]`]: rangeStart, [`${cal.dateField}[lte]`]: rangeEnd }\n\t\t},\n\n\t\t/**\n\t\t * Rows handed to the table / card grid — `effectiveObjects` re-sorted by\n\t\t * the declarative `defaultSort` spec whenever no explicit user column\n\t\t * sort is active. A live `sortKey` (user clicked a header, or one was\n\t\t * passed in) takes over and this falls through to the unsorted rows so\n\t\t * the server / prop order wins. No-op when `defaultSort` is empty.\n\t\t *\n\t\t * @return {object[]}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tdisplayObjects() {\n\t\t\t// The pane's saves and this person's own order are applied over\n\t\t\t// the loaded rows, in that order, so neither needs a refetch and\n\t\t\t// neither writes anything onto the records.\n\t\t\tconst patched = applyRowPatches(this.sortedObjects, this.splitRowPatches, this.rowKey)\n\t\t\treturn this.manualOrderActive\n\t\t\t\t? applyManualOrder(patched, this.manualOrderIds, this.rowKey)\n\t\t\t\t: patched\n\t\t},\n\n\t\t/**\n\t\t * The rows in the order the server, the props or `defaultSort` put\n\t\t * them. Split out of `displayObjects` so the pane's patches and this\n\t\t * person's manual order stack on top of one sorted list rather than\n\t\t * each re-deriving it.\n\t\t *\n\t\t * @return {object[]}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsortedObjects() {\n\t\t\tconst spec = this.effectiveDefaultSort\n\t\t\t// A sort source's rows arrive in the order they stand for.\n\t\t\tif (this.sortSourceShown || !spec || spec.length === 0) {\n\t\t\t\treturn this.effectiveObjects\n\t\t\t}\n\t\t\tif (this.effectiveSortKey) {\n\t\t\t\treturn this.effectiveObjects\n\t\t\t}\n\t\t\treturn multiKeySort(this.effectiveObjects, spec)\n\t\t},\n\n\t\t/**\n\t\t * Whether this page declares a working split view.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitViewEnabled() {\n\t\t\treturn this.splitView?.enabled === true\n\t\t},\n\n\t\t/**\n\t\t * Which of the three layouts the page is in: the plain list, the list\n\t\t * with the pane beside it, or the record on its own below the\n\t\t * breakpoint.\n\t\t *\n\t\t * @return {'list'|'split'|'detail'}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitLayout() {\n\t\t\treturn splitLayoutFor({\n\t\t\t\tenabled: this.splitViewEnabled,\n\t\t\t\tsplitId: this.splitId || null,\n\t\t\t\tviewportWidth: this.splitViewportWidth,\n\t\t\t\tbreakpoint: this.splitView?.breakpoint,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The pane's CSS width, falling back when the page declared something\n\t\t * the browser would drop.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitPaneWidth() {\n\t\t\treturn normalisePaneWidth(this.splitView?.paneWidth)\n\t\t},\n\n\t\t/**\n\t\t * Whether to draw the pane's close link. Needs a router: closing pushes\n\t\t * the list route, so without one it would do nothing.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitCloseVisible() {\n\t\t\treturn this.splitCloseButton && Boolean(this.$router)\n\t\t},\n\n\t\t/**\n\t\t * Accessible name and tooltip for the pane's close link.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsplitCloseTitle() {\n\t\t\treturn this.splitCloseLabel || t('nextcloud-vue', 'Close')\n\t\t},\n\n\t\t/**\n\t\t * The list's own address. Falls back to `#` rather than no href: an\n\t\t * `<a>` without one is not focusable.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsplitCloseHref() {\n\t\t\tconst target = this.splitCloseRoute || this.$route?.meta?.cnPageId || null\n\t\t\tif (!target || typeof this.$router?.resolve !== 'function') {\n\t\t\t\treturn '#'\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn this.$router.resolve({ name: target, query: this.$route?.query || {} }).href || '#'\n\t\t\t} catch {\n\t\t\t\t// An unknown route name throws rather than answering.\n\t\t\t\treturn '#'\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a manual row order applies right now. A search, a filter or\n\t\t * a sort the person just chose all mean they asked for a different\n\t\t * order, and a held order that quietly overruled it would read as the\n\t\t * list ignoring them.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmanualOrderActive() {\n\t\t\treturn this.manualOrder === true\n\t\t\t\t&& this.manualOrderIds.length > 0\n\t\t\t\t&& !this.effectiveSortKey\n\t\t},\n\n\t\t/**\n\t\t * Whether the `map` segment is offered in the view toggle. An explicit\n\t\t * `viewModes` whitelist wins; otherwise map is available iff `mapConfig`\n\t\t * carries at least one field. Cards/table are always available.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tshowMapSegment() {\n\t\t\tif (Array.isArray(this.viewModes)) {\n\t\t\t\treturn this.viewModes.includes('map')\n\t\t\t}\n\t\t\treturn Object.keys(this.mapConfig || {}).length > 0\n\t\t},\n\n\t\t/**\n\t\t * Board look: where the linked view switch segments go\n\t\t * (`viewSwitchLinks`), as `{ mode: { href, to? } }`. A route the router\n\t\t * cannot resolve, and an entry with neither route nor href, is left out.\n\t\t *\n\t\t * @return {{[mode: string]: {href: string, to?: object}}}\n\t\t * @spec openspec/changes/screens-view-switch-links/specs/view-switch/spec.md#requirement-a-view-switch-segment-can-open-another-page\n\t\t */\n\t\tviewSwitchLinkTargets() {\n\t\t\tconst declared = this.viewSwitchLinks\n\t\t\tif (!this.isBoardLook || !declared || typeof declared !== 'object') {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tconst targets = {}\n\t\t\tfor (const [mode, link] of Object.entries(declared)) {\n\t\t\t\tif (!['table', 'cards', 'board', 'map'].includes(mode) || !link || typeof link !== 'object') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (typeof link.route === 'string' && link.route !== '') {\n\t\t\t\t\tconst to = { name: link.route }\n\t\t\t\t\tif (link.params && typeof link.params === 'object') {\n\t\t\t\t\t\tto.params = link.params\n\t\t\t\t\t}\n\t\t\t\t\tif (link.query && typeof link.query === 'object') {\n\t\t\t\t\t\tto.query = link.query\n\t\t\t\t\t}\n\t\t\t\t\tconst href = routeHref(to, this.$router)\n\t\t\t\t\tif (href) {\n\t\t\t\t\t\ttargets[mode] = { href, to }\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof link.href === 'string' && link.href !== '') {\n\t\t\t\t\ttargets[mode] = { href: link.href }\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn targets\n\t\t},\n\n\t\t/**\n\t\t * Board look: the modes `viewSwitch` lists that this page cannot open,\n\t\t * drawn as disabled segments.\n\t\t *\n\t\t * @return {Array<string>} The disabled modes.\n\t\t * @spec openspec/changes/screens-view-switch-parity/specs/view-switch-board-look/spec.md#requirement-the-manifest-can-draw-segments-the-page-cannot-open\n\t\t */\n\t\tviewSwitchDisabledModes() {\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\t// The index boards draw all four segments, so the board look does\n\t\t\t// too unless the manifest names its own list.\n\t\t\tconst viewSwitch = this.presented('viewSwitch')\n\t\t\tconst listed = Array.isArray(viewSwitch) ? viewSwitch : ['table', 'cards', 'board', 'map']\n\t\t\tconst offered = [...this.effectiveToggleModes, ...(this.showMapSegment ? ['map'] : [])]\n\t\t\treturn listed.filter((mode) => ['table', 'cards', 'board', 'map'].includes(mode) && !offered.includes(mode))\n\t\t},\n\n\t\t/**\n\t\t * The base view-toggle segments (cards/table/list) passed to CnActionsBar.\n\t\t * Beta's explicit `viewModes` whitelist wins when set; otherwise the\n\t\t * `availableViewModes` list. Map is excluded here — it's added by the\n\t\t * actions bar via the `showMap` bridge driven by `showMapSegment`.\n\t\t *\n\t\t * @return {Array<string>} The ordered toggle segments minus 'map'.\n\t\t */\n\t\teffectiveToggleModes() {\n\t\t\tconst list = (Array.isArray(this.viewModes) && this.viewModes.length)\n\t\t\t\t? this.viewModes\n\t\t\t\t: this.availableViewModes\n\n\t\t\t// 🔴 A SEGMENT ONLY WHEN THE MODE CAN ACTUALLY WORK. A board needs\n\t\t\t// a status field to build its columns from and a date axis needs\n\t\t\t// both dates; offering a segment that opens a view saying it\n\t\t\t// cannot be one is worse than not offering it, because the reader\n\t\t\t// has to click it to find out.\n\t\t\treturn list.filter((mode) => {\n\t\t\t\tif (mode === 'map') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (mode === 'board') {\n\t\t\t\t\treturn Boolean(this.board?.statusField)\n\t\t\t\t}\n\t\t\t\tif (mode === 'dateAxis') {\n\t\t\t\t\treturn Boolean(this.dateAxis?.startField) && Boolean(this.dateAxis?.endField)\n\t\t\t\t}\n\t\t\t\tif (mode === 'calendar') {\n\t\t\t\t\treturn Boolean(this.calendar?.dateField)\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The modes `?_view=` can open: the toggle's modes plus the map when\n\t\t * the page offers it.\n\t\t *\n\t\t * @return {Array<string>} The modes.\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-the-address-opens-a-view-mode-that-arrives-later\n\t\t */\n\t\trouteViewModes() {\n\t\t\treturn [...this.effectiveToggleModes, ...(this.showMapSegment ? ['map'] : [])]\n\t\t},\n\n\t\t/**\n\t\t * The column fields the board offers (`board.columnFields`), for the\n\t\t * column switch (screens-board-reference-columns).\n\t\t *\n\t\t * @return {Array<object>} The normalised fields; empty for a board on `statusField` only.\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-board-can-switch-the-field-its-columns-come-from\n\t\t */\n\t\tboardColumnFields() {\n\t\t\treturn columnFieldsOf(this.board)\n\t\t},\n\n\t\t/**\n\t\t * The column field in use: the reader's pick, else the one on\n\t\t * `statusField`, else the first. Null on a board without `columnFields`.\n\t\t *\n\t\t * @return {object|null} The normalised column field.\n\t\t */\n\t\tboardActiveColumnField() {\n\t\t\tconst fields = this.boardColumnFields\n\t\t\tif (fields.length === 0) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn fields.find((entry) => entry.field === this.boardColumnFieldChoice)\n\t\t\t\t|| fields.find((entry) => entry.field === this.board?.statusField)\n\t\t\t\t|| fields[0]\n\t\t},\n\n\t\t/** @return {string} The row field the columns come from. */\n\t\tboardColumnField() {\n\t\t\treturn this.boardActiveColumnField?.field || this.board?.statusField || 'status'\n\t\t},\n\n\t\t/**\n\t\t * The parent the board is narrowed to: the single value of the page\n\t\t * filter on the reference's `narrowBy.rowField`, '' when none or several.\n\t\t *\n\t\t * @return {string} The parent id.\n\t\t */\n\t\tboardNarrowValue() {\n\t\t\tconst field = this.board?.narrow?.field || this.boardActiveColumnField?.source?.narrowBy?.rowField\n\t\t\tif (!field) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst current = this.effectiveActiveFilters?.[field]\n\t\t\tconst values = Array.isArray(current) ? current : (current === undefined || current === null || current === '' ? [] : [current])\n\t\t\treturn values.length === 1 ? refIdOf(values[0]) : ''\n\t\t},\n\n\t\t/**\n\t\t * The stages of a reference or values column field, or null for a\n\t\t * field the schema's enum or lifecycle states back.\n\t\t *\n\t\t * @return {object|null} `{ states, keyByValue, refsByKey }`.\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references\n\t\t */\n\t\tboardStages() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tif (!active) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tif (active.kind === 'values') {\n\t\t\t\treturn buildValueStages({\n\t\t\t\t\trows: this.displayObjects,\n\t\t\t\t\tfield: active.field,\n\t\t\t\t\tvalueLabels: active.valueLabels,\n\t\t\t\t\temptyLabel: active.emptyLabel ? this.cnTranslate(active.emptyLabel) : t('nextcloud-vue', 'Nobody'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (active.kind !== 'reference') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst source = active.source || {}\n\t\t\tconst narrowBy = source.narrowBy && typeof source.narrowBy === 'object' ? source.narrowBy : null\n\t\t\treturn buildReferenceStages({\n\t\t\t\trefs: this.boardRefs[active.field] || [],\n\t\t\t\tlabelField: source.labelField || '',\n\t\t\t\torderField: source.orderField || '',\n\t\t\t\tcolorField: source.colorField || '',\n\t\t\t\tmergeBy: source.mergeBy || '',\n\t\t\t\tnarrowBy,\n\t\t\t\tnarrowValue: narrowBy ? this.boardNarrowValue : '',\n\t\t\t\tcapacityField: source.capacityField || '',\n\t\t\t\tneutralColor: typeof source.neutralColor === 'string' ? source.neutralColor : '',\n\t\t\t\tcolorMap: source.colorMap && typeof source.colorMap === 'object' ? source.colorMap : null,\n\t\t\t\tclosedField: source.closedField || '',\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The row actions the board's cards offer, by the ids in\n\t\t * `board.cardActions`, in that order.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/pl4-board-card-actions/specs/pl4-board-card-actions/spec.md#requirement-a-card-carries-the-row-actions\n\t\t */\n\t\tboardCardActions() {\n\t\t\tconst ids = Array.isArray(this.board?.cardActions) ? this.board.cardActions : []\n\t\t\treturn ids.map((id) => this.mergedActions.find((action) => action && action.id === id)).filter(Boolean)\n\t\t},\n\n\t\t/**\n\t\t * The field schema the board reads its columns from: the stages of a\n\t\t * reference or values field as lifecycle `states`, else the schema's\n\t\t * own property.\n\t\t *\n\t\t * @return {?object} The field schema, or null.\n\t\t */\n\t\tboardFieldSchema() {\n\t\t\tif (this.boardStages) {\n\t\t\t\treturn { states: this.boardStages.states }\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\tconst property = this.effectiveSchema?.properties?.[field] || null\n\t\t\tconst declared = declaredStatesOf(this.board, this.boardActiveColumnField, field)\n\t\t\tif (declared !== null) {\n\t\t\t\treturn {\n\t\t\t\t\t...(property || {}),\n\t\t\t\t\tstates: declared.map((state) => ({ ...state, label: this.cnTranslate(state.label) })),\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn property\n\t\t},\n\n\t\t/**\n\t\t * The column a card sits in, for a reference or values field.\n\t\t *\n\t\t * @return {((row: object) => string)|null} The mapper, or null.\n\t\t */\n\t\tboardColumnKeyOf() {\n\t\t\tconst stages = this.boardStages\n\t\t\tif (!stages) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\treturn (row) => columnKeyOfRow(row, field, stages.keyByValue)\n\t\t},\n\n\t\t/**\n\t\t * The move the board runs on a drop or a menu pick.\n\t\t *\n\t\t * A named handler (`moveHandler`, from the app's registry) gets\n\t\t * `{ card, toKey, field, value, target }` and owns the write; the\n\t\t * status of a case goes through the app's transition this way. A\n\t\t * reference or values field without one has its value written on the\n\t\t * row (PATCH). `readOnly` gives no move. A board on `statusField` with\n\t\t * neither keeps the `runTransition` prop.\n\t\t *\n\t\t * With `source.capacityField`, a drop that would fill the referenced\n\t\t * row past its limit is refused before the handler or the PATCH runs.\n\t\t * The server still guards; this only spares the round trip.\n\t\t *\n\t\t * @return {((move: {card: object, toKey: string}) => Promise<object>)|null} The move, or null for a read-only board.\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-drop-writes-the-reference\n\t\t */\n\t\tboardRunTransition() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tif (active?.readOnly) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst onStatusField = !active || active.field === this.board?.statusField\n\t\t\tconst name = active?.moveHandler || (onStatusField ? (this.board?.moveHandler || '') : '')\n\t\t\tconst handler = name ? resolveRegisteredHandler(name, this.effectiveRegistry, this.resolvedCustomComponents) : null\n\t\t\tif (name && typeof handler !== 'function') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst stages = this.boardStages\n\t\t\tif (!handler && !stages) {\n\t\t\t\treturn this.runTransition\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\tconst kind = active?.kind || 'schema'\n\t\t\tconst narrowBy = active?.source?.narrowBy || null\n\t\t\tconst capacityField = active?.source?.capacityField || ''\n\t\t\treturn async ({ card, toKey }) => {\n\t\t\t\tconst drop = stages\n\t\t\t\t\t? resolveDropValue({ card, toKey, kind, refsByKey: stages.refsByKey, narrowBy })\n\t\t\t\t\t: { value: toKey, target: null }\n\t\t\t\tif (drop === null) {\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'This card cannot move to that column.'))\n\t\t\t\t}\n\t\t\t\tconst full = capacityField && drop.target\n\t\t\t\t\t? fullTargetOf({ target: drop.target, card, rows: this.displayObjects, field, capacityField, rowKey: this.rowKey })\n\t\t\t\t\t: null\n\t\t\t\tif (full) {\n\t\t\t\t\tconst column = stages.states.find((state) => state.key === String(toKey))?.label || String(toKey)\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', '{column} is full: {count} of {capacity}.', { column, count: full.count, capacity: full.capacity }))\n\t\t\t\t}\n\t\t\t\tif (handler) {\n\t\t\t\t\treturn handler({ card, toKey, field, value: drop.value, target: drop.target })\n\t\t\t\t}\n\t\t\t\tconst id = card?.id ?? card?.['@self']?.id ?? card?.[this.rowKey]\n\t\t\t\tconst url = objectUrlOf(this.register, this.exportSchemaSlug, id)\n\t\t\t\tif (url === '') {\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'This card cannot move to that column.'))\n\t\t\t\t}\n\t\t\t\treturn patchObject(url, { [field]: drop.value })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Where a card may go, from the app's `moveTargetsHandler`: it gets\n\t\t * `{ card, field }` and answers the values (referenced ids) the card\n\t\t * can reach; the board maps them to its columns. An entry may also be\n\t\t * `{ key, allowed, reason }`: a target that is offered but blocked,\n\t\t * with the sentence that says why.\n\t\t *\n\t\t * @return {((card: object) => Promise<Array<string|{key: string, allowed: boolean, reason: string}>|null>)|null} The question, or null.\n\t\t * @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-board-shows-where-a-card-can-go\n\t\t */\n\t\tboardAllowedMoves() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tconst onStatusField = !active || active.field === this.board?.statusField\n\t\t\tconst name = active?.moveTargetsHandler || (onStatusField ? (this.board?.moveTargetsHandler || '') : '')\n\t\t\tconst handler = name ? resolveRegisteredHandler(name, this.effectiveRegistry, this.resolvedCustomComponents) : null\n\t\t\tif (typeof handler !== 'function' || this.boardRunTransition === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\tconst stages = this.boardStages\n\t\t\treturn async (card) => {\n\t\t\t\tconst values = await handler({ card, field })\n\t\t\t\tif (!Array.isArray(values)) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst columnOf = (id) => (stages && stages.keyByValue.has(id) ? stages.keyByValue.get(id) : id)\n\t\t\t\treturn values.map((value) => {\n\t\t\t\t\tif (value && typeof value === 'object' && Object.hasOwn(value, 'key')) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkey: columnOf(refIdOf(value.key)),\n\t\t\t\t\t\t\tallowed: value.allowed !== false,\n\t\t\t\t\t\t\treason: typeof value.reason === 'string' ? value.reason : '',\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn columnOf(refIdOf(value))\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\t/** @return {object|null} The board's narrowing select (`board.narrow`). */\n\t\tboardNarrow() {\n\t\t\tconst narrow = this.board?.narrow\n\t\t\treturn narrow && typeof narrow === 'object' && typeof narrow.field === 'string' && narrow.field !== '' ? narrow : null\n\t\t},\n\n\t\t/** @return {string} The narrowing select's label, with its colon. */\n\t\tboardNarrowLabel() {\n\t\t\tconst narrow = this.boardNarrow || {}\n\t\t\tconst prop = (this.effectiveSchema?.properties || {})[narrow.field] || {}\n\t\t\treturn t('nextcloud-vue', '{label}:', { label: this.cnTranslate(narrow.label || prop.title || narrow.field || '') })\n\t\t},\n\n\t\t/** @return {string} The narrowing select's \"all\" option. */\n\t\tboardNarrowAllLabel() {\n\t\t\treturn this.boardNarrow?.allLabel ? this.cnTranslate(this.boardNarrow.allLabel) : t('nextcloud-vue', 'All')\n\t\t},\n\n\t\t/** @return {string} The column switch's label, with its colon. */\n\t\tboardColumnSwitchLabel() {\n\t\t\tconst label = this.board?.columnSwitchLabel ? this.cnTranslate(this.board.columnSwitchLabel) : t('nextcloud-vue', 'Columns')\n\t\t\treturn t('nextcloud-vue', '{label}:', { label })\n\t\t},\n\n\t\t/** @return {boolean} Whether the board view draws its controls row. */\n\t\tboardControlsShown() {\n\t\t\treturn this.currentViewMode === 'board'\n\t\t\t\t&& (this.boardColumnFields.length > 1 || this.boardNarrow !== null || Boolean(this.board?.hint))\n\t\t},\n\n\t\t/**\n\t\t * What the board needs fetched, as one key the watcher reacts to.\n\t\t *\n\t\t * @return {string} The key, '' outside the board view.\n\t\t */\n\t\tboardFetchKey() {\n\t\t\tif (this.currentViewMode !== 'board') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn [this.boardColumnField, this.boardActiveColumnField?.kind || '', this.effectiveSchema ? 1 : 0, this.boardNarrow ? this.boardNarrow.field : ''].join('|')\n\t\t},\n\n\t\t/**\n\t\t * The status field's schema, for the board's columns.\n\t\t *\n\t\t * Read from the schema this page already holds rather than fetched: the\n\t\t * stages are a property of the type, and a second read of them could\n\t\t * disagree with the one the table is rendering from.\n\t\t *\n\t\t * @return {?object} The field schema, or null.\n\t\t */\n\t\tboardStatusFieldSchema() {\n\t\t\tconst field = this.board?.statusField\n\t\t\tif (!field) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.effectiveSchema?.properties?.[field] || null\n\t\t},\n\n\t\t/**\n\t\t * How the board's column sums are formatted: `board.sumFormat`, else\n\t\t * what the sum field's schema declares (`format: \"currency\"` or\n\t\t * `\"percent\"`), else a plain number.\n\t\t *\n\t\t * @return {object|null} A metric format, or null for the plain default.\n\t\t * @spec openspec/changes/screens-kanban-parity/specs/board-view/spec.md#requirement-the-board-column-header\n\t\t */\n\t\tboardSumFormat() {\n\t\t\tif (this.board?.sumFormat && typeof this.board.sumFormat === 'object') {\n\t\t\t\treturn this.board.sumFormat\n\t\t\t}\n\t\t\tconst field = this.board?.sumField\n\t\t\tconst property = field ? this.effectiveSchema?.properties?.[field] : null\n\t\t\tif (property && (property.format === 'currency' || property.format === 'percent')) {\n\t\t\t\treturn { style: property.format, currency: property.currency, decimals: property.format === 'currency' ? 2 : 0 }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Whether the list holds one page of more.\n\t\t *\n\t\t * The board says so beside its counts: a count of a page shown as\n\t\t * though it were the total is a number somebody quotes in a meeting.\n\t\t *\n\t\t * @return {boolean} True when there is more than this page.\n\t\t */\n\t\tisPaged() {\n\t\t\tif (this.boardLoadsAll) {\n\t\t\t\tconst loaded = this.effectivePagination || {}\n\t\t\t\treturn Number(loaded.page || 1) < Number(loaded.pages || 1)\n\t\t\t}\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {\n\t\t\t\treturn Number(this.effectivePagination?.pages || 1) > 1\n\t\t\t}\n\t\t\treturn Number(this.pagination?.pages || 1) > 1\n\t\t},\n\n\t\t/**\n\t\t * Whether the board view gathers every row itself: in self-fetch mode\n\t\t * it adds page after page (`list.loadMore`) instead of paging, and\n\t\t * draws its own footer in place of the pagination.\n\t\t *\n\t\t * @return {boolean} True for a self-fetching page in board view.\n\t\t * @spec openspec/changes/board-loads-every-row/specs/board-view/spec.md#requirement-the-index-board-shows-every-matching-row\n\t\t */\n\t\tboardLoadsAll() {\n\t\t\treturn this.currentViewMode === 'board' && this.isSelfFetchMode && !this.isNamedSource && typeof this.list.loadMore === 'function'\n\t\t},\n\n\t\t/**\n\t\t * The rows the board holds against the rows that match, for the\n\t\t * board's footer.\n\t\t *\n\t\t * @return {{shown: number, total: number}} The counts.\n\t\t */\n\t\tboardLoadCounts() {\n\t\t\tconst shown = this.effectiveObjects.length\n\t\t\treturn { shown, total: Math.max(shown, Number(this.effectivePagination?.total || 0)) }\n\t\t},\n\n\t\t/**\n\t\t * Whether the folder pane is drawn: a `folderSidebar` without\n\t\t * `pane: false`.\n\t\t *\n\t\t * @spec openspec/changes/folder-sidebar-pane-off/specs/index-page/spec.md#requirement-a-folder-scope-without-a-pane\n\t\t * @return {boolean}\n\t\t */\n\t\tshowsFolderPane() {\n\t\t\treturn Boolean(this.folderSidebar) && this.folderSidebar.pane !== false\n\t\t},\n\n\t\t/**\n\t\t * The CnFolderSidebar source. A `register` source is fetched by this\n\t\t * component and handed to CnFolderSidebar as a `custom` folder list.\n\t\t *\n\t\t * @return {string} The resolved CnFolderSidebar source.\n\t\t */\n\t\tfolderSidebarSource() {\n\t\t\tconst s = this.folderSidebar && this.folderSidebar.source\n\t\t\treturn (s === 'register' || s === 'groups' || !s) ? 'custom' : s\n\t\t},\n\n\t\t/**\n\t\t * The folder list for CnFolderSidebar's custom source: register-fetched\n\t\t * objects (source:'register') or the explicit `folders` (source:'custom').\n\t\t * Empty for the field/files sources, which derive their own list.\n\t\t *\n\t\t * @return {Array<object>} The folder list.\n\t\t */\n\t\tfolderSidebarFolders() {\n\t\t\tif (!this.folderSidebar) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.folderSidebar.source === 'register') {\n\t\t\t\treturn this.folderRegisterList\n\t\t\t}\n\t\t\tif (this.folderSidebar.source === 'groups') {\n\t\t\t\treturn this.folderGroupList\n\t\t\t}\n\t\t\treturn this.folderSidebar.folders || []\n\t\t},\n\n\t\t/**\n\t\t * The folder entry for the folder currently selected in the sidebar,\n\t\t * or null while \"All\" is selected.\n\t\t *\n\t\t * @return {(object|null)} The active scope's folder entry.\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScope() {\n\t\t\tif (this.selectedFolderId === null || this.selectedFolderId === undefined) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst idField = this.folderPassthroughIdField\n\t\t\tconst match = this.folderSidebarFolders\n\t\t\t\t.find((f) => f && String(this.getByPath(f, idField)) === String(this.selectedFolderId))\n\t\t\treturn match || null\n\t\t},\n\n\t\t/**\n\t\t * The heading above the list for the selected folder: on a `groups`\n\t\t * pane (or with `folderSidebar.heading: true`), its name and, under\n\t\t * it, its parent folder and its count. The count reads\n\t\t * `folderSidebar.countText` (`{count}`, through the app's translate),\n\t\t * else \"{count} members\" on a groups pane. `folderSidebar.headingParts`\n\t\t * (`[{ field, text, format? }]`) adds a part per field the selected\n\t\t * group's record carries (`parentsFrom`): `text` with `{value}`, through\n\t\t * the app's translate; `format: \"user\"` names a user id by its display\n\t\t * name (\"team lead Lars de Koning\", DqAfdelingen). An empty field adds\n\t\t * nothing.\n\t\t *\n\t\t * @return {{name: string, subtitle: string}|null} The heading, or null on All.\n\t\t * @spec openspec/changes/folder-heading-parts/specs/index-page/spec.md#requirement-a-group-heading-can-name-what-its-record-carries\n\t\t */\n\t\tscopeHeading() {\n\t\t\tconst cfg = this.folderSidebar\n\t\t\tconst scope = this.activeScope\n\t\t\tif (!cfg || !scope || !(cfg.source === 'groups' || cfg.heading === true)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst idField = this.folderPassthroughIdField\n\t\t\tconst name = String(this.getByPath(scope, this.folderPassthroughNameField) ?? this.selectedFolderId)\n\t\t\tconst parentId = scope.parentId ?? scope.parent ?? null\n\t\t\tconst parent = parentId === null || parentId === undefined\n\t\t\t\t? null\n\t\t\t\t: this.folderSidebarFolders.find((f) => f && String(this.getByPath(f, idField)) === String(parentId))\n\t\t\tconst parts = []\n\t\t\tif (parent) {\n\t\t\t\tparts.push(String(this.getByPath(parent, this.folderPassthroughNameField) ?? parentId))\n\t\t\t}\n\t\t\tif (typeof scope.count === 'number') {\n\t\t\t\tif (cfg.countText) {\n\t\t\t\t\tparts.push(this.cnTranslate(cfg.countText).replace('{count}', String(scope.count)))\n\t\t\t\t} else if (cfg.source === 'groups') {\n\t\t\t\t\tparts.push(n('nextcloud-vue', '{count} member', '{count} members', scope.count, { count: scope.count }))\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst record = scope.record && typeof scope.record === 'object' ? scope.record : {}\n\t\t\tfor (const part of (Array.isArray(cfg.headingParts) ? cfg.headingParts : [])) {\n\t\t\t\tconst raw = part && part.field ? this.getByPath(record, part.field) : null\n\t\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst value = part.format === 'user' ? userDisplayName(raw) : String(raw)\n\t\t\t\tif (value === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tparts.push(part.text ? this.cnTranslate(part.text).replace('{value}', value) : value)\n\t\t\t}\n\t\t\treturn { name, subtitle: parts.join(' · ') }\n\t\t},\n\n\t\t/**\n\t\t * The list's current order, `[{ key, order }]`: the self-fetched list's,\n\t\t * else the `sortKeys` / `sortKey` props.\n\t\t *\n\t\t * @return {Array<{key: string, order: string}>} The order.\n\t\t */\n\t\tcurrentSortKeys() {\n\t\t\tif (this.isSelfFetchMode && this.list && this.list.sortKeys) {\n\t\t\t\treturn this.list.sortKeys.value || []\n\t\t\t}\n\t\t\tif (Array.isArray(this.sortKeys) && this.sortKeys.length > 0) {\n\t\t\t\treturn this.sortKeys\n\t\t\t}\n\t\t\treturn this.sortKey ? [{ key: this.sortKey, order: this.sortOrder || 'asc' }] : []\n\t\t},\n\n\t\t/**\n\t\t * The orders the index sidebar's Sort section offers: none in the table\n\t\t * view, which sorts by its column headers; else `sortSelectOptions`,\n\t\t * or else the sortable columns, ascending.\n\t\t *\n\t\t * @return {Array<{value: string, label: string, keys: Array<{key: string, order: string}>}>} The options.\n\t\t */\n\t\tsidebarSortOptions() {\n\t\t\tif (this.currentViewMode === 'table') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (Array.isArray(this.sortSelectOptions) && this.sortSelectOptions.length > 0) {\n\t\t\t\treturn this.sortSelectOptions\n\t\t\t\t\t.filter((o) => o && o.value !== undefined && o.value !== null)\n\t\t\t\t\t.map((o) => {\n\t\t\t\t\t\tconst fixed = this.isSelfFetchMode && !!(o.source && typeof o.source.url === 'string' && o.source.url !== '')\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: String(o.value),\n\t\t\t\t\t\t\tlabel: this.cnTranslate(o.label || String(o.value)),\n\t\t\t\t\t\t\t// An endpoint-ranked order is chosen by its value; its\n\t\t\t\t\t\t\t// `order` is only the fallback.\n\t\t\t\t\t\t\tkeys: fixed ? [] : orderToSortKeys(o.order !== undefined ? o.order : o.value),\n\t\t\t\t\t\t\t...(fixed ? { fixed: true } : {}),\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((o) => o.fixed === true || o.keys.length > 0)\n\t\t\t}\n\t\t\treturn (this.tableColumns || [])\n\t\t\t\t.filter((c) => c && typeof c === 'object' && c.key && isColumnSortable(c, this.effectiveSchema))\n\t\t\t\t.map((c) => ({ value: c.key, label: this.cnTranslate(c.label || c.key), keys: [{ key: c.key, order: 'asc' }] }))\n\t\t},\n\n\t\t/**\n\t\t * The `x-index` block the active scope's own schema row carries, for a\n\t\t * folder list derived from a register. Empty for every other source:\n\t\t * a folder that is a distinct field value, or one written into the\n\t\t * manifest by hand, has no record behind it to read.\n\t\t *\n\t\t * @return {(object|null)} A row-shaped object carrying `x-index`, or null.\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScopeRow() {\n\t\t\tif (this.selectedFolderId === null || this.selectedFolderId === undefined) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst carried = this.folderRowLayouts[String(this.selectedFolderId)]\n\t\t\treturn carried ? { 'x-index': carried } : null\n\t\t},\n\n\t\t/**\n\t\t * The list layout the active scope asks for. Two declarations meet\n\t\t * here and they decide different things: this page's `columns` prop\n\t\t * decides which columns the page HAS, and the scope decides which of\n\t\t * them it shows, in what order, sorted by what and searched over what.\n\t\t * A scope naming a column this page does not declare is dropped, so a\n\t\t * scope written before a column was taken out cannot bring it back.\n\t\t *\n\t\t * @return {{columns: (Array|null), sortKeys: Array, searchFields: string[]}}\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScopeLayout() {\n\t\t\tif (!this.folderSidebar || !this.scopeShapesView) {\n\t\t\t\treturn { columns: null, sortKeys: [], searchFields: [] }\n\t\t\t}\n\t\t\treturn resolveScopeLayout({\n\t\t\t\tscope: this.activeScope,\n\t\t\t\trow: this.activeScopeRow,\n\t\t\t\tpageColumns: this.declaredColumns,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Whether the active scope's look applies in the current view mode:\n\t\t * always, unless `folderSidebar.scopeViews` names the view modes it is\n\t\t * for (`[\"table\", \"list\"]`), so the board keeps the page's generic\n\t\t * look (DqWerkbord). The scope's filter applies in every view.\n\t\t *\n\t\t * @spec openspec/changes/index-scope-views/specs/index-page/spec.md#requirement-a-scope-look-can-be-limited-to-view-modes\n\t\t * @return {boolean}\n\t\t */\n\t\tscopeShapesView() {\n\t\t\tconst views = this.folderSidebar && this.folderSidebar.scopeViews\n\t\t\tif (!Array.isArray(views) || views.length === 0) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn views.includes(this.currentViewMode)\n\t\t},\n\n\t\t/**\n\t\t * This page's own value of each presentation key, which a query preset\n\t\t * may have set: what `presented()` falls back to without a scope.\n\t\t *\n\t\t * @return {object}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation\n\t\t */\n\t\townPresentation() {\n\t\t\treturn {\n\t\t\t\ttitle: this.title,\n\t\t\t\tquickFilters: this.quickFilters,\n\t\t\t\tcardFields: this.cardFields,\n\t\t\t\tcountText: this.countText,\n\t\t\t\tsearchPlaceholder: this.searchPlaceholder,\n\t\t\t\tfooterNote: this.footerNote,\n\t\t\t\tviewSwitch: this.viewSwitch,\n\t\t\t\taddLabel: this.addLabel,\n\t\t\t\theaderButtons: this.headerButtons,\n\t\t\t\tbreadcrumb: this.breadcrumb,\n\t\t\t\theaderMeta: this.headerMeta,\n\t\t\t\tafterList: this.afterList,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The presentation the active scope declares (`title`, `countText`,\n\t\t * `quickFilters`, `addLabel`, `afterList` and the other query preset\n\t\t * keys), from its folder entry or its row's `x-index`. Empty without a\n\t\t * scope, so the page's own values stand.\n\t\t *\n\t\t * @return {object}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation\n\t\t */\n\t\tactiveScopePresentation() {\n\t\t\tif (!this.folderSidebar || !this.scopeShapesView) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\treturn resolveScopePresentation({ scope: this.activeScope, row: this.activeScopeRow })\n\t\t},\n\n\t\t/**\n\t\t * The widgets drawn after the list: the active scope's `afterList`,\n\t\t * else the page's.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-an-index-page-can-draw-widgets-after-its-list\n\t\t */\n\t\tpresentedAfterList() {\n\t\t\tconst list = this.presented('afterList')\n\t\t\treturn Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The fields the search box searches over while a scope declaring\n\t\t * `searchFields` is active. Read by `useSelfFetchList`'s fixed-filter\n\t\t * getter off this instance, so a scope change re-scopes the next fetch\n\t\t * without a second search path.\n\t\t *\n\t\t * @return {string[]} The scope's search fields, or [].\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScopeSearchFields() {\n\t\t\treturn this.activeScopeLayout.searchFields\n\t\t},\n\n\t\t/**\n\t\t * The teams this person is treated as having claimed: what they stored,\n\t\t * narrowed to what the instance offers them now.\n\t\t *\n\t\t * @return {string[]} The claimed team ids.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tclaimedTeamIds() {\n\t\t\treturn resolveClaimedTeams(this.offeredTeams, this.claimedTeams)\n\t\t},\n\n\t\t/**\n\t\t * The saved views this page renders as tabs, and the ones that stay in\n\t\t * the views control. A view is in one or the other, never both.\n\t\t *\n\t\t * Split out of the SCOPED views, not the fetched ones: a view made on\n\t\t * another page names fields this schema does not have, and is no more\n\t\t * use as a tab than it is as a dropdown entry.\n\t\t *\n\t\t * @return {{tabs: Array<object>, control: Array<object>}}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tsplitSavedViews() {\n\t\t\treturn splitViewsIntoTabs(this.visibleSavedViews, this.viewTabs)\n\t\t},\n\n\t\t/**\n\t\t * The lens tabs, as the tab strip this page already has understands\n\t\t * them, with each lens's claim tokens resolved against this person.\n\t\t *\n\t\t * @return {Array<object>} The tabs.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tlensTabs() {\n\t\t\treturn this.splitSavedViews.tabs.map((view) => {\n\t\t\t\tconst tab = viewAsTab(view)\n\t\t\t\tconst { filter, narrowsToNothing } = resolveClaimTokens(tab.filter, { teams: this.claimedTeamIds })\n\t\t\t\treturn { ...tab, filter, narrowsToNothing }\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The views the control lists: every saved view this page did not name\n\t\t * as a tab.\n\t\t *\n\t\t * @return {Array<object>} The views.\n\t\t */\n\t\tviewsForControl() {\n\t\t\treturn [...this.defaultFilterViews, ...this.splitSavedViews.control]\n\t\t},\n\n\t\t/**\n\t\t * The page config overrides of the applied view (`overrides`), or null\n\t\t * when no view is applied or it carries none. CnPageRenderer lays them\n\t\t * over the page config while the view is active (`view-overrides`).\n\t\t *\n\t\t * @return {object|null}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-can-override-the-page-config-while-it-is-active\n\t\t */\n\t\tactiveSavedViewOverrides() {\n\t\t\tconst id = this.appliedSavedViewId\n\t\t\tif (!id) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst views = [...this.defaultFilterViews, ...(this.savedViews || [])]\n\t\t\tconst view = views.find((v) => v && (String(v.id) === id || String(v.slug) === id))\n\t\t\treturn savedViewOverrides(view)\n\t\t},\n\n\t\t/**\n\t\t * `activeSavedViewOverrides` as one comparable key.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tactiveSavedViewOverridesKey() {\n\t\t\treturn JSON.stringify(this.activeSavedViewOverrides)\n\t\t},\n\n\t\t/**\n\t\t * What the sidebar's saved-views panel shows, or null when the page\n\t\t * does not offer saved views.\n\t\t *\n\t\t * @return {object|null}\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-6\n\t\t */\n\t\tsavedViewsForSidebar() {\n\t\t\tif (!this.savedViewsOffered) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tviews: this.viewsForControl,\n\t\t\t\tloading: this.savedViewsLoading,\n\t\t\t\tcurrentUserId: this.currentSavedViewsUserId,\n\t\t\t\tcounts: this.savedViewCounts,\n\t\t\t\tselectedViewId: this.appliedSavedViewId,\n\t\t\t\tmenuIds: this.savedViewMenuIds,\n\t\t\t\tsummaries: Object.fromEntries(this.viewsForControl.map((view) => [viewIdOf(view), this.viewFilterSummary(view)])),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The route name this page's menu entries point at.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsavedViewPage() {\n\t\t\treturn (this.$route && typeof this.$route.name === 'string') ? this.$route.name : ''\n\t\t},\n\n\t\t/**\n\t\t * The ids of this page's views in the app menu, or null when there is\n\t\t * no menu to add to.\n\t\t *\n\t\t * @return {Array<string>|null}\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tsavedViewMenuIds() {\n\t\t\tconst menu = this.cnSavedViewMenu\n\t\t\tif (!menu || typeof menu.toggle !== 'function' || this.savedViewPage === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (menu.entries || []).filter((e) => e.page === this.savedViewPage).map((e) => String(e.id))\n\t\t},\n\n\t\t/**\n\t\t * The page's `defaultSavedViews` as read-only views.\n\t\t *\n\t\t * @return {Array<object>} The views.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-4\n\t\t */\n\t\tdefaultFilterViews() {\n\t\t\tconst defaults = (Array.isArray(this.defaultSavedViews) ? this.defaultSavedViews : []).map((entry) => (entry && typeof entry.name === 'string'\n\t\t\t\t? { ...entry, name: this.cnTranslate(entry.name), ...(typeof entry.description === 'string' && entry.description !== '' ? { description: this.cnTranslate(entry.description) } : {}) }\n\t\t\t\t: entry))\n\t\t\treturn defaultFilterViews(defaults, this.savedViewsPage)\n\t\t},\n\n\t\t/**\n\t\t * The values the `filterStrip` offers: its options, else the field's\n\t\t * schema enum, each `{ value, label }`.\n\t\t *\n\t\t * @return {Array<{value: string, label: string}>}\n\t\t */\n\t\tfilterStripValues() {\n\t\t\tconst strip = this.filterStrip\n\t\t\tif (!strip || typeof strip !== 'object' || typeof strip.field !== 'string' || strip.field === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst declared = Array.isArray(strip.options) ? strip.options : null\n\t\t\tconst prop = (this.effectiveSchema?.properties || {})[strip.field] || {}\n\t\t\tconst raw = declared || (Array.isArray(prop.enum) ? prop.enum.map((value) => ({ value })) : [])\n\t\t\treturn raw\n\t\t\t\t.map((option) => (option && typeof option === 'object' ? option : { value: option }))\n\t\t\t\t.filter((option) => option.value !== undefined && option.value !== null && option.value !== '')\n\t\t\t\t.map((option) => ({ value: String(option.value), label: this.cnTranslate(String(option.label ?? option.value)) }))\n\t\t},\n\n\t\t/**\n\t\t * The pills of the `filterStrip`: All, then one per value, with the\n\t\t * active one marked and its count when `showCount` is on.\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip\n\t\t * @return {Array<{key: string, value: string, label: string, active: boolean, count: (number|null)}>}\n\t\t */\n\t\tfilterStripEntries() {\n\t\t\tconst values = this.filterStripValues\n\t\t\tif (values.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst current = this.effectiveActiveFilters[this.filterStrip.field]\n\t\t\tconst picked = Array.isArray(current) ? current.map(String) : (current === undefined || current === null || current === '' ? [] : [String(current)])\n\t\t\tconst counts = this.filterStripCounts || {}\n\t\t\tconst countOf = (key) => (Object.hasOwn(counts, key) && typeof counts[key] === 'number' ? counts[key] : null)\n\t\t\tconst allLabel = this.filterStrip.allLabel ? this.cnTranslate(this.filterStrip.allLabel) : t('nextcloud-vue', 'All')\n\t\t\treturn [\n\t\t\t\t{ key: 'all', value: '', label: allLabel, active: picked.length === 0, count: countOf('all') },\n\t\t\t\t...values.map((option, index) => ({ key: `v${index}`, value: option.value, label: option.label, active: picked.length === 1 && picked[0] === option.value, count: countOf(`v${index}`) })),\n\t\t\t]\n\t\t},\n\n\t\t/** @return {string} The accessible name of the filter strip. */\n\t\tfilterStripLabel() {\n\t\t\tconst strip = this.filterStrip || {}\n\t\t\tif (strip.label) {\n\t\t\t\treturn this.cnTranslate(strip.label)\n\t\t\t}\n\t\t\tconst prop = (this.effectiveSchema?.properties || {})[strip.field] || {}\n\t\t\treturn this.cnTranslate(prop.title || strip.field || '')\n\t\t},\n\n\t\t/**\n\t\t * The filter of the active quick filter tab, which the strip's counts\n\t\t * are narrowed by (\"Soort, dan kanaal\").\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tfilterStripTabFilter() {\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tconst index = this.activeQuickFilterIndex\n\t\t\tconst tab = index !== null && index !== undefined ? tabs[index] : null\n\t\t\treturn tab && tab.filter && typeof tab.filter === 'object' ? tab.filter : {}\n\t\t},\n\n\t\t/**\n\t\t * Changes whenever the strip's counts have to be read again: another\n\t\t * quick filter, another page filter, or a list whose total moved.\n\t\t *\n\t\t * @return {string} The signature, '' when the strip counts nothing.\n\t\t */\n\t\t/**\n\t\t * What the `quickFiltersFrom` tabs depend on, as one key: a change\n\t\t * asks again. Empty without the prop, or with `quickFilters` holding tabs.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values\n\t\t */\n\t\tquickFiltersFromKey() {\n\t\t\tconst from = this.quickFiltersFrom\n\t\t\tconst declared = Array.isArray(this.quickFilters) && this.quickFilters.length > 0\n\t\t\tif (declared || !from || typeof from.field !== 'string' || from.field === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn JSON.stringify({ r: this.register, s: this.exportSchemaSlug, f: this.filter || null, q: from })\n\t\t},\n\n\t\tfilterStripCountKey() {\n\t\t\tif (!this.filterStrip || this.filterStrip.showCount !== true || this.filterStripValues.length === 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn JSON.stringify({\n\t\t\t\tr: this.register,\n\t\t\t\ts: this.exportSchemaSlug,\n\t\t\t\tf: this.filter || null,\n\t\t\t\tq: this.filterStripTabFilter,\n\t\t\t\tv: this.filterStripValues.map((option) => option.value),\n\t\t\t\tt: Number((this.isSelfFetchMode ? this.list.pagination.value : this.effectivePagination)?.total ?? 0),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The filters whose record count this page shows: quick filters that\n\t\t * set `showCount`, and the saved views `viewCounts` names. Empty when\n\t\t * nothing opted in, which is what keeps the page from making a count\n\t\t * request nobody asked for.\n\t\t *\n\t\t * @return {Array<{key: string, filter: object}>} The filters to count.\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tcountEntries() {\n\t\t\tconst entries = []\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tconst lens = this.lensTabs.length > 0\n\t\t\ttabs.forEach((tab, index) => {\n\t\t\t\tconst wants = lens ? this.viewWantsCount(tab.id) : (tab && tab.showCount === true)\n\t\t\t\tif (wants && tab.narrowsToNothing !== true) {\n\t\t\t\t\tentries.push({ key: `tab:${index}`, filter: tab.filter || {} })\n\t\t\t\t}\n\t\t\t})\n\t\t\tfor (const view of this.viewsForControl) {\n\t\t\t\tconst id = viewIdOf(view)\n\t\t\t\tif (this.viewWantsCount(id)) {\n\t\t\t\t\tentries.push({ key: `view:${id}`, filter: viewAsTab(view).filter })\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn entries\n\t\t},\n\n\t\t/**\n\t\t * Changes whenever the counts have to be fetched again: another set\n\t\t * of filters, another register or schema, or a list whose total moved\n\t\t * (a record was added, removed, or left a filter).\n\t\t *\n\t\t * @return {string} The signature.\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tcountRequestKey() {\n\t\t\tif (this.countEntries.length === 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn JSON.stringify({\n\t\t\t\tr: this.register,\n\t\t\t\ts: this.exportSchemaSlug,\n\t\t\t\tf: this.filter || null,\n\t\t\t\te: this.countEntries,\n\t\t\t\t// The store's total, not the error override in effectivePagination,\n\t\t\t\t// so a failed fetch and its recovery do not refetch the counts.\n\t\t\t\tt: Number((this.isSelfFetchMode ? this.list.pagination.value : this.effectivePagination)?.total ?? 0),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * What the tab strip shows: the page's lens tabs when it named any,\n\t\t * else its quick filters. One strip, never two, so a person is not\n\t\t * offered the same narrowing twice under two names.\n\t\t *\n\t\t * @return {(Array<object>|null)} The tabs.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\t/**\n\t\t * The chip the strip lights: the active tab, else the default tab of\n\t\t * tabs that arrived after setup (`quickFiltersFrom`), which is the\n\t\t * one the fetch applies.\n\t\t *\n\t\t * @return {number|null} The tab index, or null without tabs.\n\t\t */\n\t\tshownQuickFilterIndex() {\n\t\t\tif (this.activeQuickFilterIndex !== null && this.activeQuickFilterIndex !== undefined) {\n\t\t\t\treturn this.activeQuickFilterIndex\n\t\t\t}\n\t\t\treturn this.quickFilterMultiple ? null : resolveInitialQuickFilterIndex(this.tabStripEntries)\n\t\t},\n\n\t\ttabStripEntries() {\n\t\t\tif (this.sourceRefusal) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.lensTabs.length > 0) {\n\t\t\t\treturn this.lensTabs\n\t\t\t}\n\t\t\treturn this.effectiveQuickFilters\n\t\t},\n\n\t\t/** @return {Array<object>} The shortcuts the help sheet lists. */\n\t\tshortcutHelpEntries() {\n\t\t\treturn LIST_SHORTCUTS.filter((entry) => typeof this.listShortcutHandlers[entry.id] === 'function')\n\t\t},\n\n\t\t/** @return {string} Heading of the shortcut help sheet. */\n\t\tshortcutHelpTitle() {\n\t\t\treturn t('nextcloud-vue', 'Keyboard shortcuts')\n\t\t},\n\n\t\t/** @return {string} Label of the help sheet's close button. */\n\t\tcloseLabel() {\n\t\t\treturn t('nextcloud-vue', 'Close')\n\t\t},\n\n\t\t/**\n\t\t * Whether the active lens narrowed to nothing because this person has\n\t\t * claimed no teams. The page says that, rather than showing an empty\n\t\t * list under a heading that claims to be filtering by their teams.\n\t\t *\n\t\t * @return {boolean} True when the active lens has nothing to match.\n\t\t */\n\t\tactiveLensNarrowsToNothing() {\n\t\t\tconst index = this.activeQuickFilterIndex\n\t\t\tif (index === null || index === undefined || this.lensTabs.length === 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn Boolean(this.lensTabs[index] && this.lensTabs[index].narrowsToNothing)\n\t\t},\n\n\t\t/**\n\t\t * The declarative sort this page applies, with the priority sort folded\n\t\t * in when the page names a priority field. The value is READ off the\n\t\t * record; nothing here derives one.\n\t\t *\n\t\t * @return {Array<object>} The sort spec.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\teffectiveDefaultSort() {\n\t\t\tconst declared = Array.isArray(this.defaultSort) ? this.defaultSort : []\n\t\t\tif (this.priorityField === '') {\n\t\t\t\treturn declared\n\t\t\t}\n\t\t\tif (declared.some((entry) => entry && entry.field === this.priorityField)) {\n\t\t\t\treturn declared.map((entry) => (entry && entry.field === this.priorityField\n\t\t\t\t\t? { ...entry, levels: this.priorityLevels }\n\t\t\t\t\t: entry))\n\t\t\t}\n\t\t\treturn [{ field: this.priorityField, order: 'desc', levels: this.priorityLevels }, ...declared]\n\t\t},\n\n\t\t/**\n\t\t * The list's keyboard shortcuts, bound to what this page can do. A\n\t\t * shortcut with nothing behind it is left out rather than listed.\n\t\t *\n\t\t * @return {object} Handlers by shortcut id.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tlistShortcutHandlers() {\n\t\t\tconst handlers = {\n\t\t\t\t'row-next': () => this.moveFocusedRow(1),\n\t\t\t\t'row-previous': () => this.moveFocusedRow(-1),\n\t\t\t\t'row-open': () => this.focusedRow && this.onRowClick(this.focusedRow),\n\t\t\t\t'row-select': () => this.toggleFocusedRowSelection(),\n\t\t\t\t'list-help': () => { this.showShortcutHelp = true },\n\t\t\t}\n\t\t\tif (this.quickEditFields.length > 0) {\n\t\t\t\thandlers['row-quick-edit'] = () => this.focusedRow && this.openQuickEdit(this.focusedRow)\n\t\t\t}\n\t\t\tif (this.focusedRow && this.primaryRowActionFor(this.focusedRow)) {\n\t\t\t\thandlers['row-primary'] = () => this.runPrimaryRowAction()\n\t\t\t}\n\t\t\treturn handlers\n\t\t},\n\n\t\t/**\n\t\t * The shortcuts as command-palette entries, so someone who has never\n\t\t * used this list can find every one of them.\n\t\t *\n\t\t * @return {Array<object>} The palette entries.\n\t\t */\n\t\tlistPaletteEntries() {\n\t\t\treturn listPaletteCommands(this.listShortcutHandlers)\n\t\t},\n\n\t\t/**\n\t\t * The row the keyboard is on, or null.\n\t\t *\n\t\t * @return {(object|null)} The focused row.\n\t\t */\n\t\tfocusedRow() {\n\t\t\tconst rows = this.displayObjects || []\n\t\t\tif (this.focusedRowIndex < 0 || this.focusedRowIndex >= rows.length) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn rows[this.focusedRowIndex]\n\t\t},\n\n\t\t/**\n\t\t * The grouping field for a `field`-source folder sidebar.\n\t\t *\n\t\t * @return {string} The property the folders group by, or ''.\n\t\t */\n\t\tfolderSidebarGroupBy() {\n\t\t\tif (!this.folderSidebar) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.folderSidebar.groupBy || this.folderSidebar.field || ''\n\t\t},\n\n\t\t/**\n\t\t * Facet buckets for the folder sidebar's grouping field.\n\t\t *\n\t\t * `:objects` is the current page, so folders derived from it alone list\n\t\t * only the values that happen to have a row on screen. The platform\n\t\t * already answers this properly: OpenRegister computes facets with the\n\t\t * pagination parameters removed, so a facet over the grouping field is\n\t\t * the complete set of distinct values with their true totals. Any\n\t\t * property marked `facetable: true` gets one under `_facets=extend`.\n\t\t *\n\t\t * Read from the live store first, so the folder pane does not depend on\n\t\t * the metadata sidebar being switched on, then from the sidebar config\n\t\t * a consumer-managed page supplies, then from the folder config itself.\n\t\t *\n\t\t * @return {Array<object>} Normalised facet values, or [] when none.\n\t\t */\n\t\tfolderSidebarLiveFacetValues() {\n\t\t\tconst field = this.folderSidebarGroupBy\n\t\t\tif (!field) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst facets = this.storeFacets\n\t\t\t\t|| (this.folderSidebar && this.folderSidebar.facets)\n\t\t\t\t|| this.resolvedSidebar.facets\n\t\t\t\t|| {}\n\n\t\t\treturn facets[field]?.values || []\n\t\t},\n\n\t\t/**\n\t\t * The folders to show: the live facet, except while a folder is\n\t\t * selected. Selecting one filters the query by the grouping field, so\n\t\t * the live facet then holds that one value and every other folder\n\t\t * would vanish, which makes switching folders impossible. The set seen\n\t\t * before the selection stands in until it is cleared.\n\t\t *\n\t\t * @return {Array<object>} Normalised facet values.\n\t\t */\n\t\tfolderSidebarFacetValues() {\n\t\t\tconst selected = this.selectedFolderId !== null && this.selectedFolderId !== undefined\n\t\t\tif (selected && this.folderSidebarAllValues.length > 0) {\n\t\t\t\treturn this.folderSidebarAllValues\n\t\t\t}\n\t\t\treturn this.folderSidebarLiveFacetValues\n\t\t},\n\n\t\t/**\n\t\t * The facet buckets OpenRegister computed for THIS page's query, or\n\t\t * null when this page does not fetch its own rows.\n\t\t *\n\t\t * Only self-fetch mode has them: the store keys facets by object type\n\t\t * and rewrites that entry from the same response the rows came from, so\n\t\t * what this returns always describes the query currently on screen.\n\t\t * Consumer-managed, named-source and entity-source pages never fetch\n\t\t * through the store, so there is nothing here to read and the caller\n\t\t * falls back to whatever the consumer passed in.\n\t\t *\n\t\t * @return {object|null} The live facet map, or null.\n\t\t */\n\t\tstoreFacets() {\n\t\t\treturn this.isSelfFetchMode ? (this.list.facets?.value || null) : null\n\t\t},\n\n\t\t/**\n\t\t * The schema the presentation picker reads: the page's schema object\n\t\t * once it has properties, else null (no picker).\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tviewPresentationSchema() {\n\t\t\tconst schema = this.effectiveSchema\n\t\t\treturn schema && typeof schema === 'object' && schema.properties && Object.keys(schema.properties).length > 0 ? schema : null\n\t\t},\n\n\t\t/**\n\t\t * Reference columns that ask for a label (`labelField`), with the\n\t\t * referenced register and schema read off the page schema's `$ref`.\n\t\t *\n\t\t * @return {Array<{key: string, labelField: string, register: string, schema: string, route: (string|null), sortByLabel: boolean}>}\n\t\t * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2\n\t\t */\n\t\trefLabelSpecs() {\n\t\t\tconst cols = this.tableColumns.filter((c) => c && typeof c === 'object' && typeof c.labelField === 'string' && c.labelField !== '' && !c.widget)\n\t\t\tif (cols.length === 0 || !this.effectiveSchema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst fields = fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true })\n\t\t\tconst specs = []\n\t\t\tfor (const col of cols) {\n\t\t\t\tconst field = fields.find((f) => f.key === col.key)\n\t\t\t\tconst ref = field && field.reference\n\t\t\t\tif (!ref || ref.schema === undefined || ref.schema === null) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst register = ref.register || (typeof this.register === 'string' ? this.register : '')\n\t\t\t\tconst schema = String(ref.schema)\n\t\t\t\tspecs.push({\n\t\t\t\t\tkey: col.key,\n\t\t\t\t\tlabelField: col.labelField,\n\t\t\t\t\tregister,\n\t\t\t\t\tschema,\n\t\t\t\t\troute: typeof col.route === 'string' && col.route !== '' ? col.route : (col.link === true ? this.detailRouteFor(schema) : null),\n\t\t\t\t\tsortByLabel: col.sortByLabel === true,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn specs\n\t\t},\n\n\t\t/**\n\t\t * The rendered columns by key, so a card fact shows what its table\n\t\t * cell shows (label, formatter, widget).\n\t\t *\n\t\t * @return {object} Column definitions keyed by property.\n\t\t */\n\t\tcardFieldColumns() {\n\t\t\tconst byKey = {}\n\t\t\tfor (const col of this.renderedColumns || []) {\n\t\t\t\tif (col && typeof col === 'object' && typeof col.key === 'string') {\n\t\t\t\t\tbyKey[col.key] = col\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn byKey\n\t\t},\n\n\t\t/**\n\t\t * The property keys the board look's card facts show: the page's\n\t\t * `cardFields`, else the first four list columns. Null without the\n\t\t * look and without `cardFields`, so the card keeps its own default.\n\t\t *\n\t\t * @spec openspec/changes/screens-card-parity/specs/card-board-look/spec.md#requirement-a-record-card-has-a-head-facts-and-one-action\n\t\t * @return {?Array<string>}\n\t\t */\n\t\tresolvedCardFields() {\n\t\t\tconst cardFields = this.presented('cardFields')\n\t\t\tif (Array.isArray(cardFields) && cardFields.length > 0) {\n\t\t\t\treturn cardFields\n\t\t\t}\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\t// A page that declares no columns lets the table derive them from the schema; the card does the same.\n\t\t\tconst columns = this.tableColumns.length > 0 ? this.tableColumns : columnsFromSchema(this.effectiveSchema || {})\n\t\t\treturn columns\n\t\t\t\t.map((col) => (typeof col === 'string' ? col : col && col.key))\n\t\t\t\t.filter((key) => typeof key === 'string' && key !== '' && !key.startsWith('__'))\n\t\t\t\t.slice(0, 4)\n\t\t},\n\n\t\t/**\n\t\t * Columns handed to CnDataTable: `tableColumns`, with each reference\n\t\t * column that has a `labelField` rendered through the `refLabel` cell\n\t\t * widget. Such a column is sortable only with `sortByLabel: true`\n\t\t * (sorting by the key would sort by id, not by what the cell shows).\n\t\t *\n\t\t * @return {Array} The columns to render.\n\t\t * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2\n\t\t */\n\t\trenderedColumns() {\n\t\t\tlet cols = this.tableColumns\n\t\t\tif (this.refLookSpecs.length > 0) {\n\t\t\t\tconst lookKeys = new Set(this.refLookSpecs.map((spec) => spec.key))\n\t\t\t\tcols = cols.map((col) => (col && typeof col === 'object' && lookKeys.has(col.key)\n\t\t\t\t\t? { ...col, widgetProps: { ...(col.widgetProps || {}), looks: this.refLooks[col.key] || {} } }\n\t\t\t\t\t: col))\n\t\t\t}\n\t\t\tif (this.refLabelSpecs.length > 0) {\n\t\t\t\tconst byKey = new Map(this.refLabelSpecs.map((s) => [s.key, s]))\n\t\t\t\tcols = cols.map((col) => {\n\t\t\t\t\tconst spec = col && typeof col === 'object' ? byKey.get(col.key) : null\n\t\t\t\t\tif (!spec) {\n\t\t\t\t\t\treturn col\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...col,\n\t\t\t\t\t\twidget: 'refLabel',\n\t\t\t\t\t\twidgetProps: { ...(col.widgetProps || {}), labels: this.refLabels[spec.key] || {}, route: spec.route },\n\t\t\t\t\t\tsortable: spec.sortByLabel,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\t// An `actions` column: the page's row actions it names, as buttons.\n\t\t\tcols = cols.map((col) => (col && typeof col === 'object' && col.widget === 'actions'\n\t\t\t\t? { ...col, sortable: false, widgetProps: { ...(col.widgetProps || {}), items: (row) => this.actionColumnItems(col, row), run: this.runColumnAction } }\n\t\t\t\t: col))\n\t\t\t// The Recent lens owns the order: no column sorts while it is on.\n\t\t\tif (this.recentLensActive) {\n\t\t\t\tcols = cols.map((col) => (col && typeof col === 'object' ? { ...col, sortable: false } : col))\n\t\t\t}\n\t\t\tif (this.followColumnOn && this.favouriteSchemaSlug !== '') {\n\t\t\t\tcols = [{ key: FOLLOW_COLUMN_KEY, label: '', sortable: false, width: '48px' }, ...cols]\n\t\t\t}\n\t\t\t// Filtering through search fields: a column with no field behind it\n\t\t\t// draws no funnel, because nothing could answer it.\n\t\t\tconst filterFields = this.headerFilterSchema && this.headerFilterSchema.properties\n\t\t\tif (filterFields) {\n\t\t\t\tcols = cols.map((col) => {\n\t\t\t\t\tif (!col || typeof col !== 'object') {\n\t\t\t\t\t\treturn col\n\t\t\t\t\t}\n\t\t\t\t\tconst field = typeof col.filterField === 'string' && col.filterField !== '' ? col.filterField : col.key\n\t\t\t\t\treturn Object.hasOwn(filterFields, field) ? col : { ...col, filterable: false }\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn cols\n\t\t},\n\n\t\t/**\n\t\t * The schema the column header filters read on a named source that\n\t\t * filters through its search fields (`headerFilters: \"searchFields\"`):\n\t\t * the sidebar fields the source declares as search fields, a reference\n\t\t * field pointed at its `optionsSource`. Null otherwise.\n\t\t *\n\t\t * @return {{properties: object}|null}\n\t\t * @spec openspec/changes/named-source-header-filters/specs/index-page/spec.md#requirement-a-named-source-can-filter-from-its-column-headers-through-its-search-fields\n\t\t */\n\t\theaderFilterSchema() {\n\t\t\tif (!this.isNamedSource || !this.namedSource || this.namedSource.headerFilters !== 'searchFields') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst sidebarFields = (this.resolvedSidebar && this.resolvedSidebar.fields) || {}\n\t\t\tconst declared = declaredSearchFields(this.namedSource, this.sourceConfig && this.sourceConfig.searchFields) || {}\n\t\t\tconst properties = {}\n\t\t\tfor (const [key, field] of Object.entries(sidebarFields)) {\n\t\t\t\tif (!field || typeof field !== 'object' || !Object.hasOwn(declared, key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst options = field.optionsSource\n\t\t\t\tproperties[key] = (field.inputControl === 'reference' && options && typeof options.schema === 'string')\n\t\t\t\t\t? { ...field, $ref: options.schema, 'x-external-register': options.register || '' }\n\t\t\t\t\t: field\n\t\t\t}\n\t\t\treturn { properties }\n\t\t},\n\n\t\t/**\n\t\t * Whether the follow column renders (`showFollowColumn`, or the deprecated `showFavouriteColumn`).\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/one-follow-control/specs/record-follow/spec.md#requirement-index-pages-offer-one-following-lens-and-a-follow-column\n\t\t */\n\t\tfollowColumnOn() {\n\t\t\treturn this.showFollowColumn || this.showFavouriteColumn\n\t\t},\n\n\t\t/**\n\t\t * Whether the active quick filter is the Recent lens.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/record-favourite-and-follow/tasks.md#task-3\n\t\t */\n\t\trecentLensActive() {\n\t\t\tconst tabs = this.effectiveQuickFilters || []\n\t\t\tconst index = this.activeQuickFilterIndex\n\t\t\tconst active = (index !== null && index !== undefined) ? tabs[index] : null\n\t\t\treturn !!(active && active.filter && active.filter._recent)\n\t\t},\n\n\t\t/**\n\t\t * Schema slug the follow column calls with: the page's own slug in self-fetch\n\t\t * mode, else the schema object's `slug`. Empty when neither is known.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tfavouriteSchemaSlug() {\n\t\t\tif (typeof this.schema === 'string') {\n\t\t\t\treturn this.schema\n\t\t\t}\n\t\t\treturn (this.effectiveSchema && typeof this.effectiveSchema.slug === 'string') ? this.effectiveSchema.slug : ''\n\t\t},\n\n\t\t/**\n\t\t * The ids each reference label column needs, from the rows and the facet buckets.\n\t\t *\n\t\t * @return {Object<string, string[]>} Distinct ids per column key.\n\t\t */\n\t\t/**\n\t\t * The pills that take their tone and icon from the record they point at\n\t\t * (`resolve: { colorField?, iconField?, register?, schema? }`): badge\n\t\t * columns and the list view's leading and trailing cells\n\t\t * (`widgetProps.resolve`), the board card's pill (`board.card.resolve`)\n\t\t * and the record card's pills (`cardLayout` headPill, footerPill, chips).\n\t\t * Register and schema default to the field's reference in the schema.\n\t\t *\n\t\t * @return {Array<{key: string, register: string, schema: string, colorField: string, iconField: string}>} The specs.\n\t\t * @spec openspec/changes/pill-color-field/specs/pill-color-field/spec.md#requirement-a-badge-cell-takes-its-tone-and-icon-from-the-referenced-record\n\t\t */\n\t\trefLookSpecs() {\n\t\t\tconst list = this.listConfig || {}\n\t\t\tconst listCells = [list.leading, ...(Array.isArray(list.trailing) ? list.trailing : [list.trailing])]\n\t\t\tconst badgeSources = [...this.tableColumns, ...listCells]\n\t\t\t\t.filter((c) => c && typeof c === 'object' && c.widget === 'badge' && c.widgetProps)\n\t\t\t\t.map((c) => ({ key: c.key, resolve: c.widgetProps.resolve }))\n\t\t\t// The board card's pill (`board.card.pill` with `board.card.resolve`)\n\t\t\t// and the record card's pills (`cardLayout` headPill, footerPill,\n\t\t\t// chips, each with its own `resolve`).\n\t\t\tconst card = this.board && this.board.card && typeof this.board.card === 'object' ? this.board.card : {}\n\t\t\tconst layout = this.cardLayout && typeof this.cardLayout === 'object' ? this.cardLayout : {}\n\t\t\tconst layoutPills = [layout.headPill, layout.footerPill, ...(Array.isArray(layout.chips) ? layout.chips : [])]\n\t\t\t\t.filter((def) => def && typeof def === 'object')\n\t\t\t\t.map((def) => ({ key: def.field, resolve: def.resolve }))\n\t\t\t// The map list's pills (`mapConfig.list.pills`, each with its own `resolve`).\n\t\t\tconst mapListPills = (this.mapListEnabled && Array.isArray(this.mapConfig.list.pills) ? this.mapConfig.list.pills : [])\n\t\t\t\t.filter((def) => def && typeof def === 'object')\n\t\t\t\t.map((def) => ({ key: def.path, resolve: def.resolve }))\n\t\t\tconst seen = new Set()\n\t\t\tconst cols = [...badgeSources, { key: card.pill, resolve: card.resolve }, ...layoutPills, ...mapListPills].filter((c) => {\n\t\t\t\tconst wanted = typeof c.key === 'string' && c.key !== '' && c.resolve && typeof c.resolve === 'object'\n\t\t\t\t\t&& (c.resolve.colorField || c.resolve.iconField) && !seen.has(c.key)\n\t\t\t\tif (wanted) {\n\t\t\t\t\tseen.add(c.key)\n\t\t\t\t}\n\t\t\t\treturn wanted\n\t\t\t})\n\t\t\tif (cols.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst fields = this.effectiveSchema ? fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true }) : []\n\t\t\tconst specs = []\n\t\t\tfor (const col of cols) {\n\t\t\t\tconst resolve = col.resolve\n\t\t\t\tconst field = fields.find((f) => f.key === col.key)\n\t\t\t\tconst ref = (field && field.reference) || {}\n\t\t\t\tconst register = resolve.register || ref.register || (typeof this.register === 'string' ? this.register : '')\n\t\t\t\tconst schema = resolve.schema || (ref.schema !== undefined && ref.schema !== null ? String(ref.schema) : '')\n\t\t\t\tif (!register || !schema) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tspecs.push({ key: col.key, register, schema, colorField: resolve.colorField || '', iconField: resolve.iconField || '' })\n\t\t\t}\n\t\t\treturn specs\n\t\t},\n\n\t\t/**\n\t\t * `listConfig` with the referenced records' looks on its badge cells,\n\t\t * as `renderedColumns` does for the table.\n\t\t *\n\t\t * @return {object} The list view's config.\n\t\t * @spec openspec/changes/pill-color-field/specs/pill-color-field/spec.md#requirement-a-badge-cell-takes-its-tone-and-icon-from-the-referenced-record\n\t\t */\n\t\trenderedListConfig() {\n\t\t\tconst list = this.listConfig\n\t\t\tif (!list || this.refLookSpecs.length === 0) {\n\t\t\t\treturn list\n\t\t\t}\n\t\t\tconst lookKeys = new Set(this.refLookSpecs.map((spec) => spec.key))\n\t\t\tconst withLooks = (cell) => (cell && typeof cell === 'object' && lookKeys.has(cell.key)\n\t\t\t\t? { ...cell, widgetProps: { ...(cell.widgetProps || {}), looks: this.refLooks[cell.key] || {} } }\n\t\t\t\t: cell)\n\t\t\treturn {\n\t\t\t\t...list,\n\t\t\t\t...(list.leading ? { leading: withLooks(list.leading) } : {}),\n\t\t\t\t...(list.trailing ? { trailing: Array.isArray(list.trailing) ? list.trailing.map(withLooks) : withLooks(list.trailing) } : {}),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The ids each `refLookSpecs` column shows on screen.\n\t\t *\n\t\t * @return {{[key: string]: Array<string>}} Sorted ids by column key.\n\t\t */\n\t\trefLookIds() {\n\t\t\tconst out = {}\n\t\t\tfor (const spec of this.refLookSpecs) {\n\t\t\t\tconst ids = new Set()\n\t\t\t\tfor (const row of this.displayObjects) {\n\t\t\t\t\tconst v = row ? row[spec.key] : undefined\n\t\t\t\t\t;(Array.isArray(v) ? v : [v]).forEach((id) => {\n\t\t\t\t\t\tif (id !== null && id !== undefined && id !== '' && typeof id !== 'object') {\n\t\t\t\t\t\t\tids.add(String(id))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tout[spec.key] = [...ids].sort()\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\trefLabelIds() {\n\t\t\tconst out = {}\n\t\t\tconst facets = this.storeFacets || this.resolvedSidebar.facets || {}\n\t\t\tfor (const spec of this.refLabelSpecs) {\n\t\t\t\tconst ids = new Set()\n\t\t\t\tfor (const row of this.displayObjects) {\n\t\t\t\t\tconst v = row ? row[spec.key] : undefined\n\t\t\t\t\t;(Array.isArray(v) ? v : [v]).forEach((id) => {\n\t\t\t\t\t\tif (id !== null && id !== undefined && id !== '' && typeof id !== 'object') {\n\t\t\t\t\t\t\tids.add(String(id))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst values = facets[spec.key] && Array.isArray(facets[spec.key].values) ? facets[spec.key].values : []\n\t\t\t\tvalues.forEach((fv) => {\n\t\t\t\t\tconst id = fv && typeof fv === 'object' ? fv.value : fv\n\t\t\t\t\tif (id !== null && id !== undefined && id !== '') {\n\t\t\t\t\t\tids.add(String(id))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tout[spec.key] = [...ids].sort()\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Facet data for the index sidebar.\n\t\t *\n\t\t * The `sidebar.facets` key is a DATA channel, not a declaration of\n\t\t * which facets exist: its docblock calls it \"live facet data\" and it\n\t\t * feeds CnIndexSidebar's `facetData` prop unchanged. Which filters the\n\t\t * sidebar offers comes from the schema (`filtersFromSchema` over the\n\t\t * facetable properties), and a filter with no bucket falls back to its\n\t\t * own declarative `options`. So there is nothing to merge here — the\n\t\t * two sources answer the same question, and the fresher one wins.\n\t\t *\n\t\t * A manifest-driven page has no consumer to fill `sidebar.facets`, so\n\t\t * before this read the sidebar was handed the manifest's sidebar config\n\t\t * and every facet rendered \"No results\" while the response body carried\n\t\t * the buckets.\n\t\t *\n\t\t * Note the store wins even when it is empty (`{}` is truthy), which is\n\t\t * deliberate and the conservative direction: until the first response\n\t\t * lands, offering no options is right, and offering options left over\n\t\t * from a config that never described this query would be worse. Same\n\t\t * precedence `folderSidebarFacetValues` has always used.\n\t\t *\n\t\t * @return {object} `{ fieldName: { values: [...] } }`, possibly empty.\n\t\t */\n\t\teffectiveFacetData() {\n\t\t\tconst data = this.storeFacets || this.resolvedSidebar.facets || {}\n\t\t\tif (this.refLabelSpecs.length === 0) {\n\t\t\t\treturn data\n\t\t\t}\n\t\t\t// A facet over a reference column lists labels; the value stays the id.\n\t\t\tconst out = { ...data }\n\t\t\tfor (const spec of this.refLabelSpecs) {\n\t\t\t\tconst facet = data[spec.key]\n\t\t\t\tconst labels = this.refLabels[spec.key] || {}\n\t\t\t\tif (facet && Array.isArray(facet.values)) {\n\t\t\t\t\tout[spec.key] = {\n\t\t\t\t\t\t...facet,\n\t\t\t\t\t\tvalues: facet.values.map((fv) => {\n\t\t\t\t\t\t\tconst id = fv && typeof fv === 'object' ? fv.value : fv\n\t\t\t\t\t\t\tconst label = labels[String(id)]\n\t\t\t\t\t\t\tconst base = fv && typeof fv === 'object' ? fv : { value: fv }\n\t\t\t\t\t\t\treturn label ? { ...base, label } : base\n\t\t\t\t\t\t}),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Whether the rows handed to the folder sidebar are only part of the\n\t\t * result set. True when the list is paged beyond what is loaded and no\n\t\t * facet is available to complete the picture, which is exactly when\n\t\t * folders can be missing and a per-page count would read as a total.\n\t\t *\n\t\t * @return {boolean} True when the folder list is knowingly incomplete.\n\t\t */\n\t\tfolderSidebarPartial() {\n\t\t\tif (this.folderSidebarFacetValues.length > 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst total = Number(this.effectivePagination?.total ?? 0)\n\t\t\treturn total > this.effectiveObjects.length\n\t\t},\n\n\t\t/**\n\t\t * id/name field names passed to CnFolderSidebar for the custom folder\n\t\t * list. The `register` source is pre-mapped to `{ id, name }` by\n\t\t * `loadFolderRegister`, so it uses the plain keys; a `custom` source\n\t\t * passes the objects through untouched and honours the config's fields.\n\t\t *\n\t\t * @return {string} The id field key.\n\t\t */\n\t\tfolderPassthroughIdField() {\n\t\t\tif (this.folderSidebar && (this.folderSidebar.source === 'register' || this.folderSidebar.source === 'groups')) {\n\t\t\t\treturn 'id'\n\t\t\t}\n\t\t\treturn (this.folderSidebar && this.folderSidebar.idField) || 'id'\n\t\t},\n\n\t\t/**\n\t\t * @return {string} The name field key for CnFolderSidebar's custom list.\n\t\t */\n\t\tfolderPassthroughNameField() {\n\t\t\tif (this.folderSidebar && (this.folderSidebar.source === 'register' || this.folderSidebar.source === 'groups')) {\n\t\t\t\treturn 'name'\n\t\t\t}\n\t\t\treturn (this.folderSidebar && this.folderSidebar.nameField) || 'name'\n\t\t},\n\n\t\t/**\n\t\t * Inline GeoJSON markers for the map view, built from the CURRENT filtered\n\t\t * `displayObjects` using `mapConfig`. Each feature stashes the row's\n\t\t * `rowKey` in `properties` so a marker click can resolve back to its source\n\t\t * row. Rows without finite, resolvable geometry are skipped silently.\n\t\t *\n\t\t * @return {{ features: object[], popupField: (string|undefined) }}\n\t\t */\n\t\tmapMarkers() {\n\t\t\tconst features = []\n\t\t\t// With the list beside the map, a pin carries the row's number there.\n\t\t\tconst numbers = this.mapListEnabled ? new Map(this.mapList.items.map((item) => [item.row, item.n])) : null\n\t\t\tfor (const row of this.displayObjects) {\n\t\t\t\tconst geometry = this.resolveRowGeometry(row)\n\t\t\t\tif (!geometry) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst markerColor = resolveCssColor(markerColorOf(row, this.mapMarkerColor, this.mapColorRefsById))\n\t\t\t\tfeatures.push({\n\t\t\t\t\ttype: 'Feature',\n\t\t\t\t\tgeometry,\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\t[this.rowKey]: row[this.rowKey],\n\t\t\t\t\t\t...(markerColor ? { markerColor } : {}),\n\t\t\t\t\t\t...(this.mapConfig.popupField ? { [this.mapConfig.popupField]: row[this.mapConfig.popupField] } : {}),\n\t\t\t\t\t\t...(numbers && numbers.has(row) ? { markerNumber: numbers.get(row), markerActive: this.activeMapKey === String(row[this.rowKey]) } : {}),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn { features, popupField: this.mapConfig.popupField }\n\t\t},\n\n\t\t/**\n\t\t * Whether to cluster the plotted markers. ON unless `mapConfig.clustering`\n\t\t * says otherwise, which is the opposite of `CnMapWidget`'s own default.\n\t\t *\n\t\t * An index map plots the whole filtered result set, and rows sharing one\n\t\t * address is the normal case here, not an edge case — several permits on a\n\t\t * building, a street of complaints. Unclustered, those markers stack at\n\t\t * identical pixels: the topmost swallows every click and the rest are\n\t\t * unreachable with nothing on screen saying they exist. Clustering shows the\n\t\t * count and, since all children stay in one cluster down to max zoom,\n\t\t * markercluster spiderfies them into a fan on click instead of zooming\n\t\t * uselessly. Non-point geometry skips the cluster group entirely, so areas\n\t\t * are unaffected.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tmapClustering() {\n\t\t\treturn this.mapConfig.clustering !== false\n\t\t},\n\n\t\t/**\n\t\t * The marker colour rule (`mapConfig.markerColor`), or null.\n\t\t *\n\t\t * @return {object|null} The normalised rule.\n\t\t * @spec openspec/changes/index-map-parity/specs/index-page/spec.md#requirement-a-marker-can-take-its-colour-from-a-field\n\t\t */\n\t\tmapMarkerColor() {\n\t\t\treturn normalizeMarkerColor(this.mapConfig && this.mapConfig.markerColor)\n\t\t},\n\n\t\t/** @return {Map<string, object>} The marker colour source rows by id. */\n\t\tmapColorRefsById() {\n\t\t\treturn new Map((this.mapColorRefs || []).map((row) => [refIdOf(row), row]))\n\t\t},\n\n\t\t/** @return {string} Changes when the marker colour source must be read. */\n\t\tmapColorFetchKey() {\n\t\t\tconst source = this.mapMarkerColor && this.mapMarkerColor.source\n\t\t\tif (this.currentViewMode !== 'map' || !source) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn [this.mapMarkerColor.field, source.register || '', source.schema || '', this.effectiveSchema ? 1 : 0].join('|')\n\t\t},\n\n\t\t/**\n\t\t * How many rows the map plots when it plots every matching row\n\t\t * (`mapConfig.plotAll`: `true` for 500, or a\n\t\t * number), 0 when it plots the current page.\n\t\t *\n\t\t * @return {number} The limit.\n\t\t * @spec openspec/changes/index-map-parity/specs/index-page/spec.md#requirement-the-map-can-plot-every-matching-row\n\t\t */\n\t\tmapPlotAllLimit() {\n\t\t\treturn mapPlotAllLimitOf(this.mapConfig)\n\t\t},\n\n\t\t/** @return {number} The rows that match the filters. */\n\t\tmapMatchTotal() {\n\t\t\treturn Math.max(this.displayObjects.length, Number(this.effectivePagination?.total || 0))\n\t\t},\n\n\t\t/**\n\t\t * The count line under the map (`mapConfig.count`): `true` for \"Showing\n\t\t * {located} of {total} located\", or a template with `{located}` and\n\t\t * `{total}` through the host's translate. '' when not asked for.\n\t\t *\n\t\t * @return {string} The line.\n\t\t * @spec openspec/changes/index-map-parity/specs/index-page/spec.md#requirement-the-map-can-say-how-many-rows-it-placed\n\t\t */\n\t\tmapCountLine() {\n\t\t\tconst count = this.mapConfig && this.mapConfig.count\n\t\t\tif (this.currentViewMode !== 'map' || !count) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst vars = { located: this.mapMarkers.features.length, total: this.mapMatchTotal }\n\t\t\tif (typeof count === 'string' && count !== '') {\n\t\t\t\treturn this.cnTranslate(count).replace(/\\{(located|total)\\}/g, (_, key) => String(vars[key]))\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'Showing {located} of {total} located', vars)\n\t\t},\n\n\t\t/**\n\t\t * The note when a map that plots every row hit its limit.\n\t\t *\n\t\t * @return {string} The note, or ''.\n\t\t */\n\t\tmapCapNote() {\n\t\t\tconst limit = this.mapPlotAllLimit\n\t\t\tif (this.currentViewMode !== 'map' || limit === 0 || this.mapMatchTotal <= this.displayObjects.length) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'The map shows the first {limit} of {total}. Narrow the filters to see the rest.', { limit: this.displayObjects.length, total: this.mapMatchTotal })\n\t\t},\n\n\t\t/** @return {number|undefined} The map's initial zoom (`mapConfig.zoom`), when a number. */\n\t\tmapZoom() {\n\t\t\tconst zoom = this.mapConfig && this.mapConfig.zoom\n\t\t\treturn typeof zoom === 'number' && Number.isFinite(zoom) ? zoom : undefined\n\t\t},\n\n\t\t/** @return {boolean} Whether the map draws its numbered list (`mapConfig.list`). */\n\t\tmapListEnabled() {\n\t\t\tconst list = this.mapConfig && this.mapConfig.list\n\t\t\treturn Boolean(list && typeof list === 'object' && typeof list.title === 'string' && list.title !== '')\n\t\t},\n\n\t\t/**\n\t\t * The map list's entries, numbered as the pins, and the rows without a\n\t\t * place. Templates go through the host's translate first.\n\t\t *\n\t\t * @return {{items: Array<object>, missing: Array<object>}}\n\t\t */\n\t\tmapList() {\n\t\t\tif (!this.mapListEnabled) {\n\t\t\t\treturn { items: [], missing: [] }\n\t\t\t}\n\t\t\tconst list = this.mapConfig.list\n\t\t\tconst translated = {\n\t\t\t\t...list,\n\t\t\t\ttitle: this.cnTranslate(list.title),\n\t\t\t\tsub: Array.isArray(list.sub) ? list.sub.map((s) => this.cnTranslate(s)) : (list.sub ? this.cnTranslate(list.sub) : ''),\n\t\t\t\tdue: list.due ? this.cnTranslate(list.due) : '',\n\t\t\t}\n\t\t\treturn mapListItems(this.displayObjects, translated, {\n\t\t\t\trowKey: this.rowKey,\n\t\t\t\tlocated: (row) => Boolean(this.resolveRowGeometry(row)),\n\t\t\t\ttranslate: (text) => this.cnTranslate(text),\n\t\t\t\tformatters: this.cnFormatters,\n\t\t\t\tlooks: this.refLooks,\n\t\t\t})\n\t\t},\n\n\t\t/** @return {string} The list's accessible name. */\n\t\tmapListLabel() {\n\t\t\treturn t('nextcloud-vue', 'On the map')\n\t\t},\n\n\t\t/** @return {string} The card under the list, for the rows without a place. */\n\t\tmapMissingTitle() {\n\t\t\treturn n('nextcloud-vue', '%n without an address', '%n without an address', this.mapList.missing.length)\n\t\t},\n\n\t\t/** @return {string} The link from that card to the table. */\n\t\tmapMissingLink() {\n\t\t\treturn t('nextcloud-vue', 'Show them in the table')\n\t\t},\n\n\t\t/**\n\t\t * Extra (non-background) map layers — WMS / WFS / GeoJSON overlays declared in\n\t\t * `mapConfig.layers`. The background map comes from `mapBasemaps` instead, so\n\t\t * this is empty unless the consumer configured overlays.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmapLayers() {\n\t\t\tif (Array.isArray(this.mapConfig.layers) && this.mapConfig.layers.length > 0) {\n\t\t\t\treturn this.mapConfig.layers\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\t/**\n\t\t * Switchable background maps.\n\t\t *\n\t\t * Defaults to OpenStreetMap standard ONLY. Every extra basemap is an `<img>`\n\t\t * load from a third-party host, which a Nextcloud app's Content-Security-Policy\n\t\t * (`img-src`) blocks unless that app explicitly allowlists the host — so a\n\t\t * richer default would ship dead options to consumers that never widened their\n\t\t * CSP. Apps that want a switcher declare the set in `mapConfig.basemaps` AND\n\t\t * allowlist those hosts (see Dossiq's `relaxCspForMapTiles()`).\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmapBasemaps() {\n\t\t\tif (Array.isArray(this.mapConfig.basemaps) && this.mapConfig.basemaps.length > 0) {\n\t\t\t\treturn this.mapConfig.basemaps\n\t\t\t}\n\t\t\treturn [{\n\t\t\t\tname: t('nextcloud-vue', 'Standard'),\n\t\t\t\turl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\t\tattribution: '© OpenStreetMap contributors',\n\t\t\t}]\n\t\t},\n\n\t\t/**\n\t\t * Initial map centre `[lat, lng]`. Uses the centroid of the plotted markers\n\t\t * when any exist (CnMapWidget's autoFit then tightens to the bounds); falls\n\t\t * back to `mapConfig.center`, then a neutral world view when the set is empty.\n\t\t *\n\t\t * @return {[number, number]}\n\t\t */\n\t\tmapCenter() {\n\t\t\tconst feats = this.mapMarkers.features\n\t\t\tif (feats.length > 0) {\n\t\t\t\tlet sumLat = 0\n\t\t\t\tlet sumLng = 0\n\t\t\t\tfor (const f of feats) {\n\t\t\t\t\tconst _p = this.firstLatLng(f.geometry)\n\t\t\t\t\tif (!_p) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tsumLng += _p.lng\n\t\t\t\t\tsumLat += _p.lat\n\t\t\t\t}\n\t\t\t\treturn [sumLat / feats.length, sumLng / feats.length]\n\t\t\t}\n\t\t\tif (Array.isArray(this.mapConfig.center) && this.mapConfig.center.length === 2) {\n\t\t\t\treturn this.mapConfig.center\n\t\t\t}\n\t\t\treturn [0, 0]\n\t\t},\n\n\t\t/** Loading flag: store loading in self-fetch mode, else the `loading` prop. */\n\t\teffectiveLoading() {\n\t\t\tif (this.isNamedSource) {\n\t\t\t\treturn this.namedLoading\n\t\t\t}\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\treturn this.sortSource.state === 'loading'\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? !!this.list.loading.value : this.loading\n\t\t},\n\n\t\t/**\n\t\t * Whether to replace the page with the full loading spinner. Only on an\n\t\t * INITIAL fetch — i.e. while loading AND there is no data to show yet.\n\t\t * A background refresh (e.g. the on-visibility refetch) keeps the\n\t\t * existing rows on screen and updates them in place instead of flashing\n\t\t * the spinner over already-rendered content (fetchCollection preserves\n\t\t * the prior collection until the new results arrive).\n\t\t */\n\t\tshowInitialLoader() {\n\t\t\treturn this.effectiveLoading && this.effectiveObjects.length === 0\n\t\t},\n\n\t\t/**\n\t\t * Refresh-spinner flag for the Actions menu: the `refreshing` prop\n\t\t * OR (self-fetch mode) the internally-tracked refresh. Lets manifest\n\t\t * and self-fetch pages spin the Refresh action without the host\n\t\t * wiring `:refreshing` (it has no fetch promise to await).\n\t\t */\n\t\teffectiveRefreshing() {\n\t\t\treturn this.refreshing || this.internalRefreshing\n\t\t},\n\n\t\t/** Pagination: store pagination in self-fetch mode, else the `pagination` prop. */\n\t\teffectivePagination() {\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\treturn this.sortSourceView.pagination\n\t\t\t}\n\t\t\tif (this.selfFetchFailed) {\n\t\t\t\treturn { ...this.list.pagination.value, total: 0, page: 1, pages: 1 }\n\t\t\t}\n\t\t\t// A named source that reports its own total (the search source)\n\t\t\t// gives the count line its number.\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.total === 'function') {\n\t\t\t\tconst total = this.namedSource.total()\n\t\t\t\t// A source with `pages: true` gets the pager the self-fetched lists draw.\n\t\t\t\tif (this.namedSource.pages === true) {\n\t\t\t\t\tconst { page, limit } = this.namedPaging\n\t\t\t\t\treturn { page, limit, total, pages: Math.max(1, Math.ceil(total / limit)) }\n\t\t\t\t}\n\t\t\t\treturn { ...(this.pagination || {}), total }\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.pagination.value : this.pagination\n\t\t},\n\n\t\t/**\n\t\t * The saved view the page has applied, or null.\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tappliedSavedView() {\n\t\t\tconst id = this.appliedSavedViewId\n\t\t\tif (!id) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (this.savedViews || []).find((view) => view && (String(view.id) === id || String(view.slug) === id || String(view.uuid) === id)) || null\n\t\t},\n\n\t\t/**\n\t\t * The search field's placeholder: the open view's own\n\t\t * (`searchPlaceholderByView`), else the page's or its preset's.\n\t\t *\n\t\t * @spec openspec/changes/search-placeholder-per-view/specs/index-page/spec.md#requirement-the-search-placeholder-can-differ-per-view\n\t\t * @return {string}\n\t\t */\n\t\tshownSearchPlaceholder() {\n\t\t\tconst byView = this.searchPlaceholderByView\n\t\t\tconst own = byView && typeof byView === 'object' ? byView[this.currentViewMode] : ''\n\t\t\tconst text = typeof own === 'string' && own !== '' ? own : this.presented('searchPlaceholder')\n\t\t\treturn text ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The term a named source searched for, for `{term}` in the title and\n\t\t * the count line (\"Zoeken: Lindelaan\"), or ''.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsourceTerm() {\n\t\t\treturn this.isNamedSource && this.namedSource && typeof this.namedSource.term === 'function' ? String(this.namedSource.term() || '') : ''\n\t\t},\n\n\t\t/**\n\t\t * The page title with `{term}` filled in, or the applied saved view's\n\t\t * name when `savedViewTitle` is on.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tshownTitle() {\n\t\t\tconst view = this.savedViewTitle ? this.appliedSavedView : null\n\t\t\tif (view && typeof view.name === 'string' && view.name !== '') {\n\t\t\t\treturn this.cnTranslate(view.name)\n\t\t\t}\n\t\t\tconst title = this.presented('title')\n\t\t\t// A title with the term is translated here, before the term goes in,\n\t\t\t// so its catalogue entry is found (\"Zoeken: {term}\").\n\t\t\treturn typeof title === 'string' && title.includes('{term}')\n\t\t\t\t? this.cnTranslate(title).replace(/\\{term\\}/g, this.sourceTerm)\n\t\t\t\t: title\n\t\t},\n\n\t\t/**\n\t\t * Whether the table marks unread rows. `showUnreadRows` decides when\n\t\t * the page sets it. Otherwise the boards draw every row alike, so under\n\t\t * the board look only a page that offers the Unread lens\n\t\t * (`personalLenses`) marks them; the Nextcloud look always does.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-unread-rows-are-marked-only-where-the-reader-asked-for-them\n\t\t * @spec openspec/changes/cell-config-growth/specs/cell-config-growth/spec.md#requirement-a-page-can-ask-for-its-unread-rows\n\t\t * @return {boolean} True when unread rows read in bold with the dot.\n\t\t */\n\t\tmarksUnreadRows() {\n\t\t\tif (typeof this.showUnreadRows === 'boolean') {\n\t\t\t\treturn this.showUnreadRows\n\t\t\t}\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Array.isArray(this.personalLenses) && this.personalLenses.includes('unread')\n\t\t},\n\n\t\t/** Resolved schema OBJECT (for column generation / icons / labels). */\n\t\t/**\n\t\t * Whether the table shows its header filters. A self-fetching page\n\t\t * applies them itself, with or without a resolved schema (the columns\n\t\t * then say how each one filters, else a text filter on contains). A\n\t\t * host-fed table shows them when a schema came along, as before, or\n\t\t * when the host listens for `filter-change`; a filter nobody applies\n\t\t * would be a control that does nothing.\n\t\t *\n\t\t * @spec openspec/changes/audit-round-lib-fixes/specs/cn-data-table/spec.md\n\t\t * @return {boolean} True when header filters show.\n\t\t */\n\t\ttableHeaderFilters() {\n\t\t\tif (!this.headerFilters) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// A named source that narrows its own rows asks for the buttons, and\n\t\t\t// one that filters through its search fields gets them where a field\n\t\t\t// stands behind the column.\n\t\t\tif (this.isNamedSource && this.namedSource && (this.namedSource.headerFilters === true || Boolean(this.headerFilterSchema))) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (this.effectiveSchema || this.isSelfFetchMode) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst vnodeProps = (this.$ && this.$.vnode && this.$.vnode.props) || {}\n\t\t\treturn typeof vnodeProps.onFilterChange === 'function' || Array.isArray(vnodeProps.onFilterChange)\n\t\t},\n\n\t\teffectiveSchema() {\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\treturn this.list.schema.value\n\t\t\t}\n\t\t\treturn (this.schema && typeof this.schema === 'object') ? this.schema : null\n\t\t},\n\n\t\t/** The form dialog's schema: the edited row's own when it is of another pair. */\n\t\tformSchema() {\n\t\t\treturn this.rowFormTarget ? this.rowFormSchema : this.effectiveSchema\n\t\t},\n\n\t\t/** The form dialog's register, following `formSchema`. */\n\t\tformRegister() {\n\t\t\treturn this.rowFormTarget ? this.rowFormTarget.register : this.register\n\t\t},\n\n\t\t/**\n\t\t * Schema slug for the export-leaf URL — the `schema` prop directly\n\t\t * when it's a string (self-fetch mode's precondition), else the\n\t\t * resolved schema object's `slug`/`name`.\n\t\t */\n\t\texportSchemaSlug() {\n\t\t\tif (typeof this.schema === 'string') {\n\t\t\t\treturn this.schema\n\t\t\t}\n\t\t\treturn this.effectiveSchema?.slug || this.effectiveSchema?.name || ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the native Export menu renders in the toolbar: opt-in via\n\t\t * `allowExport` AND the resolved schema flagged `exportable: true`.\n\t\t * Default-safe — false unless both hold.\n\t\t */\n\t\tshowExportMenu() {\n\t\t\treturn Boolean(this.allowExport) && this.schemaExportable && Boolean(this.register) && Boolean(this.exportSchemaSlug)\n\t\t},\n\n\t\t/**\n\t\t * Whether the schema is flagged exportable, in either place\n\t\t * OpenRegister could keep the flag: the top-level `exportable`, or\n\t\t * `configuration.exportable`. The top-level field wins when both are\n\t\t * set.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tschemaExportable() {\n\t\t\tconst schema = this.effectiveSchema\n\t\t\tif (schema && schema.exportable !== undefined && schema.exportable !== null) {\n\t\t\t\treturn Boolean(schema.exportable)\n\t\t\t}\n\t\t\treturn Boolean(schema && schema.configuration && schema.configuration.exportable)\n\t\t},\n\n\t\t/**\n\t\t * The sentence the mass-export dialog opens with: which rows it will\n\t\t * export, and how many.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tmassExportScopeText() {\n\t\t\tconst selected = this.internalSelectedIds.length\n\t\t\tif (selected > 0) {\n\t\t\t\treturn selected === 1\n\t\t\t\t\t? t('nextcloud-vue', 'Export 1 selected row')\n\t\t\t\t\t: t('nextcloud-vue', 'Export {count} selected rows', { count: selected })\n\t\t\t}\n\t\t\tconst total = this.effectivePagination && this.effectivePagination.total\n\t\t\treturn typeof total === 'number'\n\t\t\t\t? t('nextcloud-vue', 'Export {count} rows matching the current filter', { count: total })\n\t\t\t\t: t('nextcloud-vue', 'Export the rows matching the current filter')\n\t\t},\n\n\t\t/**\n\t\t * The signed-in NC user id — passed to CnSavedViewsControl to gate\n\t\t * the per-view delete affordance (saved-views-ui).\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\t/**\n\t\t * The page as `savedViewScope` and `viewMatchesScope` take it.\n\t\t *\n\t\t * @return {{ scope: string, register: string, schema: object|string|null }} The page's source.\n\t\t */\n\t\tsavedViewsPage() {\n\t\t\treturn { scope: this.savedViewsScope, register: this.register, schema: this.schema, source: this.entitySource }\n\t\t},\n\n\t\t/**\n\t\t * Whether this page offers saved views in its sidebar.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsavedViewsOffered() {\n\t\t\treturn pageOffersSavedViews(this)\n\t\t},\n\n\t\t/**\n\t\t * The fetched views that belong on this page.\n\t\t *\n\t\t * @return {Array<object>} The views to offer.\n\t\t */\n\t\tvisibleSavedViews() {\n\t\t\treturn this.savedViews.filter((view) => viewMatchesScope(view, this.savedViewsPage))\n\t\t},\n\n\t\tcurrentSavedViewsUserId() {\n\t\t\tconst user = getCurrentUser()\n\t\t\treturn (user && user.uid) || ''\n\t\t},\n\n\t\t/**\n\t\t * The line above the delete-saved-view confirm's title: \"Saved view\"\n\t\t * in the board look, as on the view's edit and share dialogs.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/board-delete-view-confirm-header/specs/board-delete-view-confirm-header/spec.md#requirement-the-board-delete-view-confirm-names-the-saved-view\n\t\t */\n\t\tdeleteViewEyebrow() {\n\t\t\treturn this.isBoardLook ? t('nextcloud-vue', 'Saved view') : ''\n\t\t},\n\n\t\t/**\n\t\t * The line under the delete-saved-view confirm's title: the view's\n\t\t * name, in the board look.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/board-delete-view-confirm-header/specs/board-delete-view-confirm-header/spec.md#requirement-the-board-delete-view-confirm-names-the-saved-view\n\t\t */\n\t\tdeleteViewSubtitle() {\n\t\t\treturn this.isBoardLook && this.viewPendingDelete ? String(this.viewPendingDelete.name || '') : ''\n\t\t},\n\n\t\t/**\n\t\t * Confirmation message for the delete-saved-view dialog.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tdeleteViewMessage() {\n\t\t\tif (!this.viewPendingDelete) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst view = this.viewPendingDelete\n\t\t\tconst parts = [t('nextcloud-vue', 'The view \"{name}\" leaves your list and the menu on the left.', { name: view.name })]\n\t\t\tconst audience = normalizeSharedWith(view.sharedWith).map((e) => e.user || e.group)\n\t\t\tif (audience.length > 0) {\n\t\t\t\tparts.push(t('nextcloud-vue', 'It is shared with {names}; it leaves their lists too.', { names: audience.join(', ') }))\n\t\t\t}\n\t\t\tparts.push(t('nextcloud-vue', 'The items themselves stay. This cannot be undone.'))\n\t\t\treturn parts.join(' ')\n\t\t},\n\n\t\t/** Sort key / order: list state in self-fetch mode, else the props. */\n\t\teffectiveSortKey() {\n\t\t\tif (namedSourceSorts(this)) {\n\t\t\t\treturn this.namedSort.key || null\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.sortKey.value : this.sortKey\n\t\t},\n\n\t\teffectiveSortOrder() {\n\t\t\tif (namedSourceSorts(this)) {\n\t\t\t\treturn this.namedSort.order || 'asc'\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.sortOrder.value : this.sortOrder\n\t\t},\n\n\t\t/**\n\t\t * Ordered multi-column sort state fed to CnDataTable: the self-fetch\n\t\t * list's `sortKeys` in self-fetch mode, else the host-controlled\n\t\t * `sortKeys` prop.\n\t\t *\n\t\t * @return {Array<{key: string, order: 'asc'|'desc'}>}\n\t\t */\n\t\teffectiveSortKeys() {\n\t\t\treturn this.isSelfFetchMode ? (this.list.sortKeys.value || []) : this.sortKeys\n\t\t},\n\n\t\t/** Search term / visible columns / active facet filters for the embedded sidebar. */\n\t\teffectiveSearchValue() {\n\t\t\tif (this.namedSourceSearches) {\n\t\t\t\treturn this.namedSearchTerm || ''\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? (this.list.searchTerm.value || '') : (this.searchValue || '')\n\t\t},\n\n\t\teffectiveVisibleColumns() {\n\t\t\t// A saved view that carries columns wins while applied, then the person's\n\t\t\t// own layout, then the page's columns.\n\t\t\tif (Array.isArray(this.appliedViewColumns)) {\n\t\t\t\treturn this.appliedViewColumns\n\t\t\t}\n\t\t\tif (this.personalColumns && this.personalLayout && Array.isArray(this.personalLayout.columns)) {\n\t\t\t\tconst known = [...this.governedColumns.map((c) => c.key), ...this.declaredColumns.map((c) => (typeof c === 'string' ? c : c.key))]\n\t\t\t\tconst layout = reconcilePersonalColumns(this.personalLayout, known)\n\t\t\t\tif (layout) {\n\t\t\t\t\treturn layout.columns\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.visibleColumns.value : this.visibleColumns\n\t\t},\n\n\t\t/** @return {string[]} The link kinds a copy may take along (`copy.include`, known kinds only). */\n\t\tcopyIncludeKinds() {\n\t\t\treturn copyKindsOf(this.copy && this.copy.include)\n\t\t},\n\n\t\t/** @return {string} The register as a slug, for the copy endpoint. */\n\t\tcopyRegisterSlug() {\n\t\t\treturn typeof this.register === 'string' ? this.register : ''\n\t\t},\n\n\t\t/** @return {string} The schema as a slug, for the copy endpoint. */\n\t\tcopySchemaSlug() {\n\t\t\tif (typeof this.schema === 'string') {\n\t\t\t\treturn this.schema\n\t\t\t}\n\t\t\treturn (this.effectiveSchema && this.effectiveSchema.slug) || ''\n\t\t},\n\n\t\t/**\n\t\t * The row-class function the table takes: a function as given, or the\n\t\t * manifest's rules compiled.\n\t\t *\n\t\t * @return {?(row: object) => string}\n\t\t */\n\t\tcompiledRowClass() {\n\t\t\treturn compileRowClass(this.rowClass)\n\t\t},\n\n\t\t/** @return {number} How many leading columns the person pinned (0 while a saved view's columns are applied). */\n\t\tpinnedColumnCount() {\n\t\t\tif (!this.personalColumns || Array.isArray(this.appliedViewColumns) || !this.personalLayout) {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn Math.max(0, Math.min(Number(this.personalLayout.pinned) || 0, this.tableColumns.length))\n\t\t},\n\n\t\teffectiveActiveFilters() {\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\treturn this.list.activeFilters.value || {}\n\t\t\t}\n\t\t\t// A named source's own state wins over the prop, and only once it\n\t\t\t// holds something: a consumer-managed page that ALSO names a\n\t\t\t// source keeps its `activeFilters` until the sidebar is used.\n\t\t\tif (this.isNamedSource && Object.keys(this.namedActiveFilters || {}).length > 0) {\n\t\t\t\treturn this.namedActiveFilters\n\t\t\t}\n\t\t\treturn this.activeFilters || {}\n\t\t},\n\n\t\t/**\n\t\t * Enum schema columns offered in the header filter menu: one entry per\n\t\t * visible column whose schema property declares an `enum`, with its\n\t\t * values. Empty (so the menu hides) when there is no schema or no enum\n\t\t * column. Drives the `showFilterMenu` funnel button.\n\t\t *\n\t\t * @return {Array<{ key: string, label: string, values: string[] }>}\n\t\t */\n\t\tfilterableFields() {\n\t\t\tconst props = this.effectiveSchema?.properties || {}\n\t\t\tconst out = []\n\t\t\tfor (const col of this.tableColumns) {\n\t\t\t\tconst key = typeof col === 'string' ? col : col.key\n\t\t\t\tconst def = props[key] || {}\n\t\t\t\tconst colObj = typeof col === 'object' ? col : {}\n\t\t\t\t// Source the filter values, in priority order: schema enum, a\n\t\t\t\t// column `enum` hint, or a badge column's colorMap keys (so a\n\t\t\t\t// status column stays filterable even when the runtime schema\n\t\t\t\t// doesn't carry the enum).\n\t\t\t\tlet values = null\n\t\t\t\tif (Array.isArray(def.enum) && def.enum.length) {\n\t\t\t\t\tvalues = def.enum\n\t\t\t\t} else if (Array.isArray(colObj.enum) && colObj.enum.length) {\n\t\t\t\t\tvalues = colObj.enum\n\t\t\t\t} else if (colObj.widget === 'badge' && colObj.widgetProps && colObj.widgetProps.colorMap) {\n\t\t\t\t\tvalues = Object.keys(colObj.widgetProps.colorMap)\n\t\t\t\t}\n\t\t\t\tif (values && values.length) {\n\t\t\t\t\tout.push({ key, label: this.cnTranslate(colObj.label || def.title || key), values: values.map((v) => String(v)) })\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Ordered column definitions the sidebar's Columns tab governs:\n\t\t * schema-derived columns, the built-in Metadata group (when shown),\n\t\t * and any external columnGroups. Mirrors CnIndexSidebar's column\n\t\t * universe, and doubles as the source of definitions for columns the\n\t\t * user enables that aren't in the configured `columns` list (metadata\n\t\t * fields, schema properties beyond the default set).\n\t\t */\n\t\tgovernedColumns() {\n\t\t\tconst defs = []\n\t\t\tif (this.effectiveSchema) {\n\t\t\t\t// English labels here: `governedColumns` feeds `tableColumns`,\n\t\t\t\t// which CnDataTable render-translates via its own `cnTranslate`\n\t\t\t\t// injection. Translating here too would double-translate. The\n\t\t\t\t// column-picker menu that renders these labels directly applies\n\t\t\t\t// `cnTranslate` at render instead.\n\t\t\t\tdefs.push(...columnsFromSchema(this.effectiveSchema, {}))\n\t\t\t\tif (this.resolvedSidebar.showMetadata !== false) {\n\t\t\t\t\tdefs.push(...METADATA_COLUMNS)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst groups = this.resolvedSidebar.columnGroups || []\n\t\t\tgroups.forEach((g) => defs.push(...(g.columns || [])))\n\t\t\treturn defs\n\t\t},\n\n\t\t/**\n\t\t * Set of keys the sidebar governs (see `governedColumns`). Used so\n\t\t * tableColumns only hides columns the user can actually toggle back\n\t\t * on — custom columns outside this set are never silently dropped.\n\t\t */\n\t\tsidebarGovernedColumnKeys() {\n\t\t\treturn new Set(this.governedColumns.map((c) => c.key))\n\t\t},\n\n\t\t/**\n\t\t * The columns this page DECLARES it has: the `columns` prop, or a named\n\t\t * source's own list when the manifest set none. This is the membership\n\t\t * list, separate from `tableColumns`, which is what ends up rendered\n\t\t * after the sidebar scope and the user's visible-column set have had\n\t\t * their say over it.\n\t\t *\n\t\t * @return {Array} The declared column list.\n\t\t */\n\t\tdeclaredColumns() {\n\t\t\t// A NAMED SOURCE SUPPLIES ITS OWN COLUMNS when the manifest does not.\n\t\t\t// Without this the adapter's `columns` were defined and never read:\n\t\t\t// an `entitySource` page with no explicit `columns` fell through to\n\t\t\t// `governedColumns`, which derives from a SCHEMA — and a named\n\t\t\t// source has none. The table then rendered its rows with no columns\n\t\t\t// at all, which looks like an empty list rather than a missing\n\t\t\t// config. A manifest that DOES set columns still wins, which is\n\t\t\t// what makes the source a default rather than a constraint.\n\t\t\treturn (this.columns && this.columns.length > 0)\n\t\t\t\t? this.columns\n\t\t\t\t: ((this.isNamedSource && this.namedSource && this.namedSource.columns) || [])\n\t\t},\n\n\t\t/**\n\t\t * Columns handed to CnDataTable. Starts from `declaredColumns`, or from\n\t\t * the active folder-sidebar scope's selection of them (with any\n\t\t * `aggregate` block lacking a `register` defaulted to this page's\n\t\t * `register` slug, so manifests can omit `aggregate.register`). When a\n\t\t * visible-column set exists, governed columns the user toggled off are\n\t\t * hidden, and governed columns the user toggled on that aren't already\n\t\t * in the list (metadata fields, extra schema properties) are appended\n\t\t * using their sidebar definitions. Custom columns outside the sidebar's\n\t\t * universe are untouched.\n\t\t */\n\t\ttableColumns() {\n\t\t\tconst reg = typeof this.register === 'string' && this.register ? this.register : undefined\n\t\t\t// The active sidebar scope may narrow and reorder the page's\n\t\t\t// declared columns; it cannot add to them.\n\t\t\tlet cols = this.activeScopeLayout.columns || this.declaredColumns\n\t\t\tif (reg) {\n\t\t\t\tcols = cols.map((c) => (\n\t\t\t\t\tc && c.aggregate && !c.aggregate.register\n\t\t\t\t\t\t? { ...c, aggregate: { ...c.aggregate, register: reg } }\n\t\t\t\t\t\t: c\n\t\t\t\t))\n\t\t\t}\n\t\t\tconst visible = this.effectiveVisibleColumns\n\t\t\tif (!Array.isArray(visible)) {\n\t\t\t\t// No visible set at all: a column marked `hidden: true` still\n\t\t\t\t// starts hidden.\n\t\t\t\treturn cols.filter((c) => !isHiddenByDefault(c))\n\t\t\t}\n\n\t\t\tconst governed = this.sidebarGovernedColumnKeys\n\t\t\tcols = cols.filter((c) => {\n\t\t\t\tconst key = typeof c === 'string' ? c : c.key\n\t\t\t\t// A column marked `hidden: true` shows only once the visible set\n\t\t\t\t// names it, also when the sidebar does not govern it.\n\t\t\t\tif (isHiddenByDefault(c)) {\n\t\t\t\t\treturn visible.includes(key)\n\t\t\t\t}\n\t\t\t\treturn !governed.has(key) || visible.includes(key)\n\t\t\t})\n\n\t\t\tconst present = new Set(cols.map((c) => (typeof c === 'string' ? c : c.key)))\n\t\t\tconst byKey = new Map(this.governedColumns.map((c) => [c.key, c]))\n\t\t\t// A scope that sets its own columns does not get its folder field back:\n\t\t\t// every row of the scope holds the same value there.\n\t\t\tconst scopeField = this.activeScopeLayout.columns ? this.folderFilterKey : ''\n\t\t\tvisible.forEach((key) => {\n\t\t\t\tif (present.has(key) || key === scopeField) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst def = byKey.get(key)\n\t\t\t\tif (def) {\n\t\t\t\t\tcols.push({ ...def })\n\t\t\t\t\tpresent.add(key)\n\t\t\t\t}\n\t\t\t})\n\t\t\t// The person's order (or an applied view's) reads the table left to right.\n\t\t\tif (this.personalColumns && (this.personalLayout || Array.isArray(this.appliedViewColumns))) {\n\t\t\t\tcols = orderColumns(cols, visible)\n\t\t\t}\n\t\t\treturn cols\n\t\t},\n\n\t\t/** Resolved icon — explicit prop overrides schema.icon */\n\t\tresolvedIcon() {\n\t\t\tif (this.icon) {\n\t\t\t\treturn this.icon\n\t\t\t}\n\t\t\treturn this.effectiveSchema?.icon || ''\n\t\t},\n\n\t\t/**\n\t\t * Built-in row actions based on show*Action props.\n\t\t *\n\t\t * A NAMED SOURCE changes the defaults, as a contract rather than a\n\t\t * page-by-page opt-out (observed on the fleet's flows pages, where the\n\t\t * menu carried FIVE actions and three of them were broken):\n\t\t *\n\t\t * - View and the schema-form Edit are OFF. A source has no schema, so\n\t\t * the form modal can only ever render empty; and the source's own\n\t\t * open/Edit action already navigates to the detail page, which IS\n\t\t * the view. Rendering the built-ins beside it gave every flow list a\n\t\t * dead View and an Edit that opened an empty dialog.\n\t\t * - Copy and Delete render only when the source implements them\n\t\t * (`copyRow` / `deleteRow`): the built-in dialogs' confirm otherwise\n\t\t * emits into a manifest page with nobody listening, a dialog that\n\t\t * looks like it acted and did not.\n\t\t *\n\t\t * An EXPLICITLY passed show*Action prop always wins, both ways.\n\t\t */\n\t\tdefaultActions() {\n\t\t\treturn buildDefaultActions({\n\t\t\t\tflags: this.isNamedSource && this.namedSource\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tview: this.hasExplicitProp('showViewAction') && this.showViewAction,\n\t\t\t\t\t\t\tedit: this.hasExplicitProp('showEditAction') && this.showEditAction,\n\t\t\t\t\t\t\tcopy: this.hasExplicitProp('showCopyAction')\n\t\t\t\t\t\t\t\t? this.showCopyAction\n\t\t\t\t\t\t\t\t: typeof this.namedSource.copyRow === 'function',\n\t\t\t\t\t\t\tdel: this.hasExplicitProp('showDeleteAction')\n\t\t\t\t\t\t\t\t? this.showDeleteAction\n\t\t\t\t\t\t\t\t: typeof this.namedSource.deleteRow === 'function',\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tview: this.showViewAction,\n\t\t\t\t\t\t\tedit: this.showEditAction,\n\t\t\t\t\t\t\tcopy: this.showCopyAction,\n\t\t\t\t\t\t\tdel: this.showDeleteAction,\n\t\t\t\t\t\t},\n\t\t\t\t// The View action is always an eye — a universal \"view\" affordance,\n\t\t\t\t// independent of the object's schema icon (which is the header icon).\n\t\t\t\tviewIcon: Eye,\n\t\t\t\tviewTo: this.viewTo,\n\t\t\t\thandlers: {\n\t\t\t\t\tonView: (row) => this.onView(row),\n\t\t\t\t\tonEdit: (row) => {\n\t\t\t\t\t\tif (this.editOpensDetail) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @event edit-open Emitted instead of opening the edit modal when\n\t\t\t\t\t\t\t * `editOpensDetail` is set — the host navigates to the record's\n\t\t\t\t\t\t\t * detail page, where the full record (not just its scalars) is\n\t\t\t\t\t\t\t * editable.\n\t\t\t\t\t\t\t * @type {object} The row to open.\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tthis.$emit('edit-open', row)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.openFormFor(row)\n\t\t\t\t\t},\n\t\t\t\t\tonCopy: (row) => {\n\t\t\t\t\t\tthis.actionTargetItem = row\n\t\t\t\t\t\tthis.showSingleCopyDialog = true\n\t\t\t\t\t},\n\t\t\t\t\tonDelete: (row) => {\n\t\t\t\t\t\tthis.actionTargetItem = row\n\t\t\t\t\t\tthis.showSingleDeleteDialog = true\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Effective customComponents registry — explicit prop wins over\n\t\t * the injected ancestor registry. Used to:\n\t\t * - Resolve `actions[].handler` registry names (REQ-MAD-3,\n\t\t * manifest-actions-dispatch).\n\t\t * - Resolve the `cardComponent` name for card-grid view (REQ-MCI,\n\t\t * manifest-card-index).\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\teffectiveCustomComponents() {\n\t\t\treturn this.customComponents ?? this.cnCustomComponents ?? {}\n\t\t},\n\n\t\t/**\n\t\t * The v2 registry a named handler resolves against before the legacy\n\t\t * customComponents map.\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\teffectiveRegistry() {\n\t\t\treturn this.cnRegistry ?? {}\n\t\t},\n\n\t\t/**\n\t\t * Merged actions: the declared entries in order, each `\"builtin:<id>\"` placeholder replaced by that built-in when its toggle is on, then the enabled built-ins not placed.\n\t\t * See `resolveRowActions`.\n\t\t *\n\t\t * REQ-MAD-3 / REQ-MAD-4 / REQ-MAD-5 / REQ-MAD-6 / REQ-MAD-7\n\t\t * (manifest-actions-dispatch) — for any action whose `handler`\n\t\t * is a string, resolve it through `resolveHandler()` so\n\t\t * `CnRowActions` sees the same `{ handler: fn }` shape it does\n\t\t * for built-in defaults. Function-typed handlers (the existing\n\t\t * runtime path) pass through untouched.\n\t\t */\n\t\tmergedActions() {\n\t\t\tconst ctx = {\n\t\t\t\trouter: this.$router,\n\t\t\t\trowKey: this.rowKey,\n\t\t\t\tregistry: this.effectiveRegistry,\n\t\t\t\tcustomComponents: this.effectiveCustomComponents,\n\t\t\t\t// So a row action's toasts translate like the labels around it.\n\t\t\t\ttranslate: this.cnTranslate,\n\t\t\t\t// A row action of `type: \"open-modal\"` opens its modal here.\n\t\t\t\topenModal: typeof this.cnOpenModal === 'function' ? this.cnOpenModal : null,\n\t\t\t\t// A row action of `type: \"api-call\"` reads the list again after it.\n\t\t\t\trefresh: () => this.onRefreshEvent(),\n\t\t\t}\n\t\t\t// A named source may supply its own row actions, on the same\n\t\t\t// precedence as its columns: what the manifest declares wins, and the\n\t\t\t// source is the DEFAULT for a page that declares none.\n\t\t\t// Either list may place built-ins with `\"builtin:<id>\"`; turning one on or off stays the `show*Action` toggles' job.\n\t\t\tconst manifestDeclared = this.actions && this.actions.length > 0\n\t\t\tconst declaredActions = manifestDeclared\n\t\t\t\t? this.actions\n\t\t\t\t: ((this.isNamedSource && this.namedSource && this.namedSource.rowActions) || [])\n\n\t\t\tconst { actions, warnings } = resolveRowActions(declaredActions, this.defaultActions, {\n\t\t\t\tprepare: (a) => {\n\t\t\t\t\t// A SOURCE action may say `action: 'open'`: open this row the\n\t\t\t\t\t// way a row click does — the source's own navigation\n\t\t\t\t\t// (`openRow`/`detailRoute`), with `edit-open` emitted so a\n\t\t\t\t\t// host that configured a row target (`config.rowRoute`) wins.\n\t\t\t\t\t// Resolved here because a source is a composable with no router.\n\t\t\t\t\t// Source-declared actions only: the manifest grammar for navigation is `type`/`handler`, and stays so.\n\t\t\t\t\tif (!manifestDeclared && a.action === 'open' && typeof a.handler !== 'function') {\n\t\t\t\t\t\treturn { ...a, handler: (row) => this.openSourceRow(row) }\n\t\t\t\t\t}\n\t\t\t\t\treturn dispatchAction(a, ctx)\n\t\t\t\t},\n\t\t\t})\n\t\t\tfor (const warning of warnings) {\n\t\t\t\t// A toggle turned off at runtime (permissions, readOnly) legitimately silences a placeholder; the validator flags a statically-off one.\n\t\t\t\tif (warning.code === 'disabled-placeholder') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// A dropped entry is always named; the placement hints are dev-only.\n\t\t\t\tif (warning.code === 'invalid-entry' || process.env.NODE_ENV !== 'production') {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`[CnIndexPage] \"${this.title}\": ${warning.message}`)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn actions\n\t\t},\n\n\t\thasRowActions() {\n\t\t\treturn this.$slots['row-actions'] || this.mergedActions.length > 0\n\t\t},\n\n\t\t/**\n\t\t * The page tabs a named source declares, each `{id, label, to, count?}`.\n\t\t *\n\t\t * @return {Array<object>} The tabs, empty without a source that has them.\n\t\t */\n\t\tsourcePageTabs() {\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\tif (!source || typeof source.pageTabs !== 'function') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn (source.pageTabs() || []).filter((tab) => tab && tab.to && tab.label)\n\t\t},\n\n\t\t/**\n\t\t * The page tabs to draw: the manifest's `pageTabs`, each with its\n\t\t * `countFrom` count once known, else a named source's own.\n\t\t *\n\t\t * @return {Array<object>} The tabs, `{ id, label, to, count? }`.\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\t/**\n\t\t * Whether the notice sits under the list card rather than inside it.\n\t\t *\n\t\t * @spec openspec/changes/index-notice-below-card/specs/index-page/spec.md#requirement-an-index-page-notice-can-sit-under-the-list-card\n\t\t * @return {boolean}\n\t\t */\n\t\tnoticeOnPage() {\n\t\t\treturn Boolean(this.notice && this.notice.placement === 'page')\n\t\t},\n\n\t\t/**\n\t\t * The notice band's NcNoteCard type: its `variant`, else info.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-show-a-notice-under-its-list\n\t\t */\n\t\tnoticeType() {\n\t\t\tconst variant = this.notice && this.notice.variant\n\t\t\treturn ['success', 'warning', 'error'].includes(variant) ? variant : 'info'\n\t\t},\n\n\t\teffectivePageTabs() {\n\t\t\tif (!Array.isArray(this.pageTabs) || this.pageTabs.length === 0) {\n\t\t\t\treturn this.sourcePageTabs\n\t\t\t}\n\t\t\t// The index is the tab's place in `pageTabs`, which is how its count\n\t\t\t// is keyed, so the tabs are numbered before any is left out.\n\t\t\treturn this.pageTabs\n\t\t\t\t.map((tab, index) => ({ tab, index }))\n\t\t\t\t.filter(({ tab }) => tab && typeof tab.label === 'string' && tab.label !== '' && (tab.route || tab.to || tab.href))\n\t\t\t\t.filter(({ tab }) => this.pageTabVisible(tab))\n\t\t\t\t.map(({ tab, index }) => {\n\t\t\t\t\tconst to = tab.route\n\t\t\t\t\t\t? { name: tab.route, ...(tab.params ? { params: tab.params } : {}), ...(tab.query ? { query: tab.query } : {}) }\n\t\t\t\t\t\t: (tab.to || tab.href)\n\t\t\t\t\tconst count = this.pageTabCounts[index]\n\t\t\t\t\treturn { id: tab.id || `page-tab-${index}`, label: this.cnTranslate(tab.label), to, ...(typeof count === 'number' ? { count } : {}) }\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * What the page tab counts depend on, as one key.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\tpageTabCountKey() {\n\t\t\tconst tabs = Array.isArray(this.pageTabs) ? this.pageTabs : []\n\t\t\tconst sources = tabs.map((tab) => (tab && tab.countFrom && tab.countFrom.register && tab.countFrom.schema ? tab.countFrom : null))\n\t\t\treturn sources.some(Boolean) ? JSON.stringify(sources) : ''\n\t\t},\n\n\t\t/**\n\t\t * The numbers on the quick filters: a named source counts its own\n\t\t * tabs (`tabCounts()`), a self-fetching page asks OpenRegister.\n\t\t *\n\t\t * @return {Record<number, number>|null} Counts by tab index.\n\t\t */\n\t\teffectiveTabCounts() {\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\tif (source && typeof source.tabCounts === 'function' && !(Array.isArray(this.quickFilters) && this.quickFilters.length > 0)) {\n\t\t\t\treturn source.tabCounts()\n\t\t\t}\n\t\t\treturn this.tabCounts\n\t\t},\n\n\t\t/**\n\t\t * The footer's free text: the manifest's `footerNote`, else a named\n\t\t * source's own.\n\t\t *\n\t\t * @return {string} The note, translated, or ''.\n\t\t */\n\t\teffectiveFooterNote() {\n\t\t\t// The scope's note, else the page's (a preset may have set it),\n\t\t\t// else the named source's.\n\t\t\tconst scoped = this.activeScopePresentation ? this.activeScopePresentation.footerNote : undefined\n\t\t\tconst footerNote = scoped !== undefined ? scoped : this.footerNote\n\t\t\tif (footerNote) {\n\t\t\t\treturn this.fillConfigTokens(this.cnTranslate(footerNote))\n\t\t\t}\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\treturn (source && source.footerNote) || footerNote\n\t\t},\n\n\t\t/**\n\t\t * The quick-filter tabs to render: the `quickFilters` prop when it\n\t\t * holds tabs, else the tabs `quickFiltersFrom` made (an empty\n\t\t * `quickFilters` gives way to them, so a saved view can swap a page's\n\t\t * lenses for its own, DqTeamwachtrij), else a named source's own tabs\n\t\t * (`useNamedSource` resolved the same precedence for the LOAD side, so\n\t\t * strip and fetch cannot disagree).\n\t\t *\n\t\t * @return {Array<object>|null} The tabs, or null when there are none.\n\t\t */\n\t\teffectiveQuickFilters() {\n\t\t\tconst declared = this.presented('quickFilters')\n\t\t\tconst tabs = Array.isArray(declared) && declared.length > 0 ? declared : (this.generatedQuickFilters || declared)\n\t\t\tconst own = withPersonalLenses(tabs, this.personalLenses)\n\t\t\tif (own && own.length > 0) {\n\t\t\t\treturn own.map((tab) => this.withConfigLabels(tab))\n\t\t\t}\n\t\t\treturn (this.isNamedSource && this.namedQuickFilters) || null\n\t\t},\n\n\t\t/**\n\t\t * The app config `@config.<key>` tokens resolve against: the `appConfig`\n\t\t * prop over a config an ancestor provides.\n\t\t *\n\t\t * @return {object} The config.\n\t\t */\n\t\teffectiveAppConfig() {\n\t\t\treturn { ...unwrapAppConfig(this.cnAppConfig), ...(this.appConfig || {}) }\n\t\t},\n\n\t\t/**\n\t\t * Whether the Add button renders. A named source that declares\n\t\t * `showAdd: false` suppresses it (a task is created by a flow, never\n\t\t * by a person clicking Add); the source cannot force the button ON,\n\t\t * so an explicit `:show-add=\"false\"` prop always still wins.\n\t\t *\n\t\t * @return {boolean} True when the Add button should render.\n\t\t */\n\t\teffectiveShowAdd() {\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.showAdd === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.showAdd\n\t\t},\n\n\t\t/** Whether all visible items are selected */\n\t\tallSelected() {\n\t\t\tif (this.effectiveObjects.length === 0 || this.internalSelectedIds.length === 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.effectiveObjects.every((o) => this.internalSelectedIds.includes(o[this.rowKey]))\n\t\t},\n\n\t\t/** Full objects for the selected IDs (used by mass action dialogs) */\n\t\tselectedObjects() {\n\t\t\treturn this.effectiveObjects.filter((o) => this.internalSelectedIds.includes(o[this.rowKey]))\n\t\t},\n\n\t\t/** Column slot names that the parent has provided (for pass-through) */\n\t\tslotColumns() {\n\t\t\treturn Object.keys(this.$slots)\n\t\t\t\t.filter((name) => name.startsWith('column-'))\n\t\t\t\t.map((name) => name.replace('column-', ''))\n\t\t},\n\n\t\t/**\n\t\t * `createDefaults`, token-resolved. `resolveDeepTokens` rather than the\n\t\t * shallow filter-map resolver: a seed record is arbitrary JSON, so a\n\t\t * token can sit inside a nested object or an array of them.\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tresolvedCreateDefaults() {\n\t\t\tconst seed = this.createDefaults\n\t\t\tif (!seed || typeof seed !== 'object' || Array.isArray(seed)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolveDeepTokens(seed, {})\n\t\t},\n\n\t\t/**\n\t\t * The declared header buttons with a label, translated, each with a\n\t\t * stable key and a variant.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @spec openspec/changes/screens-index-header-buttons-parity/specs/index-list-board-look/spec.md#requirement-the-add-header-button-carries-a-plus\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @return {Array<{key: string, label: string, action: string, variant: string, icon: string, format: string, link: ({href: string, target: (string|undefined)}|null)}>}\n\t\t */\n\t\tresolvedHeaderButtons() {\n\t\t\tconst headerButtons = this.presented('headerButtons')\n\t\t\tconst declared = Array.isArray(headerButtons) ? headerButtons : []\n\t\t\tconst builtInActions = new Set(['add', 'export', 'import', 'refresh', 'save-view', 'actions-menu'])\n\t\t\treturn declared\n\t\t\t\t.filter((button) => button && typeof button === 'object' && typeof button.action === 'string' && button.action !== '')\n\t\t\t\t// A button that runs an `adminOnly` header action is drawn for an\n\t\t\t\t// administrator only, as the action is in the Actions menu.\n\t\t\t\t.filter((button) => {\n\t\t\t\t\tconst target = button.action === 'export' ? button.run : button.action\n\t\t\t\t\tconst entry = (this.headerActions || []).find((action) => action && action.id === target)\n\t\t\t\t\treturn !(entry && entry.adminOnly === true && !this.viewerIsAdmin())\n\t\t\t\t})\n\t\t\t\t.map((button, index) => {\n\t\t\t\t\tlet label = typeof button.label === 'string' && button.label !== '' ? this.cnTranslate(button.label) : ''\n\t\t\t\t\tlet icon = typeof button.icon === 'string' ? button.icon : ''\n\t\t\t\t\tif (label === '' && button.action === 'add') {\n\t\t\t\t\t\tlabel = this.resolvedAddLabel\n\t\t\t\t\t}\n\t\t\t\t\t// The board's primary button reads \"+ New request\": the Add\n\t\t\t\t\t// button takes the plus unless the manifest names an icon.\n\t\t\t\t\tif (this.isBoardLook && button.action === 'add' && icon === '') {\n\t\t\t\t\t\ticon = 'Plus'\n\t\t\t\t\t}\n\t\t\t\t\t// The board's header: Export reads \"Download\" with its icon and\n\t\t\t\t\t// the Actions menu reads \"Actions\", without the manifest saying so.\n\t\t\t\t\t// A labelled Export keeps the icon too, unless it names its own.\n\t\t\t\t\tif (this.isBoardLook && button.action === 'export') {\n\t\t\t\t\t\tlabel = label || t('nextcloud-vue', 'Download')\n\t\t\t\t\t\ticon = icon || 'Download'\n\t\t\t\t\t}\n\t\t\t\t\tif (label === '' && button.action === 'actions-menu') {\n\t\t\t\t\t\tlabel = t('nextcloud-vue', 'Actions')\n\t\t\t\t\t}\n\t\t\t\t\tif (label === '' && button.action === 'save-view') {\n\t\t\t\t\t\tlabel = t('nextcloud-vue', 'Save view')\n\t\t\t\t\t}\n\t\t\t\t\tconst run = typeof button.run === 'string' ? button.run : ''\n\t\t\t\t\t// A button that runs a manifest `href` header action is that link;\n\t\t\t\t\t// a `type: \"navigate\"` or function-handler entry keeps dispatching.\n\t\t\t\t\tconst actionId = button.action === 'export' ? run : (builtInActions.has(button.action) ? '' : button.action)\n\t\t\t\t\tconst linked = actionId\n\t\t\t\t\t\t? this.mergedHeaderActions.find((entry) => entry && entry.id === actionId && entry.href && entry._dispatchSuppress && (!entry.type || entry.type === 'handler'))\n\t\t\t\t\t\t: null\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey: String(button.id || button.action || index),\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\taction: button.action,\n\t\t\t\t\t\tvariant: button.variant === 'primary' ? 'primary' : 'secondary',\n\t\t\t\t\t\ticon,\n\t\t\t\t\t\tformat: button.format === 'excel' ? 'excel' : 'csv',\n\t\t\t\t\t\trun,\n\t\t\t\t\t\tlink: linked ? { href: linked.href, target: linked.linkTarget || undefined } : null,\n\t\t\t\t\t\titems: Array.isArray(button.items)\n\t\t\t\t\t\t\t? button.items.filter((item) => (typeof item === 'string' && item !== '')\n\t\t\t\t\t\t\t\t|| (item && typeof item === 'object' && typeof item.heading === 'string' && item.heading !== ''))\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter((button) => button.label !== '')\n\t\t\t\t// An Export with nothing to export through is not drawn: a\n\t\t\t\t// named or endpoint source with no `run` and no `@mass-export`\n\t\t\t\t// listener.\n\t\t\t\t.filter((button) => button.action !== 'export' || this.headerExportAvailable(button))\n\t\t\t\t// The Actions menu lists the page's header actions (or the\n\t\t\t\t// entries its `items` name), so a menu with nothing to list\n\t\t\t\t// is not drawn.\n\t\t\t\t.filter((button) => button.action !== 'actions-menu' || this.headerMenuEntries(button).length > 0)\n\t\t},\n\n\t\t/**\n\t\t * The header buttons in the order they render. Under the board look\n\t\t * the order is fixed whatever the manifest declares: export (Download),\n\t\t * the Actions menu, any other secondary button, the buildiq square,\n\t\t * then the primary button. Without the look it is the declared order.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-index-header-reads-title-count-and-the-board-buttons\n\t\t * @return {Array<object>} The buttons; the buildiq square is `{ key: '__buildiq', action: '__buildiq' }`.\n\t\t */\n\t\torderedHeaderButtons() {\n\t\t\tconst buttons = this.resolvedHeaderButtons\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn buttons\n\t\t\t}\n\t\t\tconst rank = (button) => {\n\t\t\t\tif (button.variant === 'primary') {\n\t\t\t\t\treturn 4\n\t\t\t\t}\n\t\t\t\tif (button.action === 'export') {\n\t\t\t\t\treturn 0\n\t\t\t\t}\n\t\t\t\tif (button.action === 'actions-menu') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 2\n\t\t\t}\n\t\t\tconst sorted = buttons\n\t\t\t\t.map((button, index) => ({ button, index }))\n\t\t\t\t.sort((a, b) => (rank(a.button) - rank(b.button)) || (a.index - b.index))\n\t\t\t\t.map((entry) => entry.button)\n\t\t\tconst firstPrimary = sorted.findIndex((button) => button.variant === 'primary')\n\t\t\tconst square = { key: '__buildiq', action: '__buildiq', variant: 'secondary', label: '', icon: '' }\n\t\t\tif (firstPrimary === -1) {\n\t\t\t\treturn [...sorted, square]\n\t\t\t}\n\t\t\treturn [...sorted.slice(0, firstPrimary), square, ...sorted.slice(firstPrimary)]\n\t\t},\n\n\t\t/**\n\t\t * The count the board's Filter menu button carries, as the CSS string its\n\t\t * badge draws (`content: var(--cn-filter-menu-count)`). NcActions has no\n\t\t * slot beside its menu name, so the badge is a pseudo-element; nothing is\n\t\t * set while no filter is active, and no badge is drawn then.\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-menu-count/specs/index-toolbar/spec.md#requirement-the-filter-menu-button-counts-the-active-filters\n\t\t * @return {object|null}\n\t\t */\n\t\tfilterMenuCountStyle() {\n\t\t\tconst count = this.activeFilterChips.length\n\t\t\treturn count > 0 ? { '--cn-filter-menu-count': `\"${count}\"` } : null\n\t\t},\n\n\t\t/**\n\t\t * The accessible name of the Filter menu button: \"Filter\" plus the count\n\t\t * while filters are active (the badge itself is decoration).\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-menu-count/specs/index-toolbar/spec.md#requirement-the-filter-menu-button-counts-the-active-filters\n\t\t * @return {string}\n\t\t */\n\t\tfilterMenuLabel() {\n\t\t\tconst count = this.activeFilterChips.length\n\t\t\tconst name = t('nextcloud-vue', 'Filter')\n\t\t\treturn count > 0 ? `${name}, ${t('nextcloud-vue', '{count} active', { count })}` : name\n\t\t},\n\n\t\t/** @return {string} The field the folder sidebar filters by, or ''. */\n\t\tfolderFilterKey() {\n\t\t\treturn (this.folderSidebar && (this.folderSidebar.filterField || this.folderSidebar.field)) || ''\n\t\t},\n\n\t\t/**\n\t\t * The filters the table's header filters show: every active filter but\n\t\t * the selected folder's own, which the Active chip already names, so\n\t\t * the table draws no summary chip for it.\n\t\t *\n\t\t * @return {object} The filters.\n\t\t */\n\t\ttableActiveFilters() {\n\t\t\tlet filters = this.effectiveActiveFilters || {}\n\t\t\t// A window held as one `{ from, to }` value reads as the header's range.\n\t\t\tif (this.headerFilterSchema) {\n\t\t\t\tfilters = rangesAsBounds(filters)\n\t\t\t}\n\t\t\tconst key = this.folderFilterKey\n\t\t\tif (!key || this.selectedFolderId === null || this.selectedFolderId === undefined || !Object.hasOwn(filters, key)) {\n\t\t\t\treturn filters\n\t\t\t}\n\t\t\tconst { [key]: _folder, ...rest } = filters\n\t\t\treturn rest\n\t\t},\n\n\t\t/**\n\t\t * The active filters as chips for the board toolbar's second row, one\n\t\t * per filter: \"Team: Woo\". A filter with no value is not active. A\n\t\t * range, as one `{from, to}` value or as `key[gte]`/`key[lte]` keys, is\n\t\t * one chip; `keys` lists the filter keys it stands for. Several values\n\t\t * of one filter read as a list in the locale (\"A en B\").\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-toolbar-sits-on-the-ground-in-two-rows\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-range-is-one-chip\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-several-values-read-as-a-list\n\t\t * @return {Array<{key: string, label: string, keys?: string[]}>}\n\t\t */\n\t\tactiveFilterChips() {\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\t// An applied saved view names itself; its own filters are not chips\n\t\t\t// (DqFilterBeheren draws \"Wacht op inwoner\" with no chip for it).\n\t\t\tconst view = this.appliedSavedView\n\t\t\tconst viewFilters = view && view.query && view.query.filters && typeof view.query.filters === 'object' ? view.query.filters : {}\n\t\t\tconst ownToView = (key, value) => Object.hasOwn(viewFilters, key)\n\t\t\t\t&& (Array.isArray(viewFilters[key]) ? viewFilters[key].map(String) : [String(viewFilters[key])]).includes(String(value))\n\t\t\treturn [\n\t\t\t\t...this.searchTermChips,\n\t\t\t\t...this.quickFilterActiveChips,\n\t\t\t\t...this.filterChipsOf(this.effectiveActiveFilters, (key, value) => this.isFixedFilter(key, value) || ownToView(key, value)),\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * The Active line's chip for the search term, on a named source that\n\t\t * asks for one (`searchChip`, the search source): \"Search term: Lindelaan\".\n\t\t *\n\t\t * @spec openspec/changes/search-source-term-in-box/specs/index-page/spec.md#requirement-the-search-page-keeps-its-term-in-the-search-box\n\t\t * @return {Array<{key: string, label: string, searchTerm: true}>}\n\t\t */\n\t\tsearchTermChips() {\n\t\t\tconst term = String(this.namedSearchTerm || '').trim()\n\t\t\tif (!this.namedSourceSearches || this.namedSource.searchChip !== true || term === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn [{ key: 'search-term', label: t('nextcloud-vue', 'Search term: {term}', { term }), searchTerm: true }]\n\t\t},\n\n\t\t/**\n\t\t * The Active line's chips for the selected quick filters: one per\n\t\t * selected tab that declares an `activeLabel` (\"Pipeline: Sales\"), run\n\t\t * through the app's translate. A tab without one (an \"All\" tab) adds no\n\t\t * chip. The chip carries the tab's index so removing it can deselect it.\n\t\t *\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-a-quick-filter-with-an-active-label-joins-the-active-line\n\t\t * @return {Array<{key: string, label: string, quickFilterIndex: number}>}\n\t\t */\n\t\tquickFilterActiveChips() {\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tif (tabs.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst indices = this.quickFilterMultiple\n\t\t\t\t? (this.selectedQuickFilterIndices || [])\n\t\t\t\t: [this.activeQuickFilterIndex]\n\t\t\treturn indices\n\t\t\t\t.filter((index) => typeof index === 'number' && tabs[index] && typeof tabs[index].activeLabel === 'string' && tabs[index].activeLabel !== '')\n\t\t\t\t.map((index) => ({ key: `quick-filter:${index}`, label: this.cnTranslate(tabs[index].activeLabel), quickFilterIndex: index }))\n\t\t},\n\n\t\t/**\n\t\t * Filter keys over a reference property that the Active line must name,\n\t\t * and that no reference column resolves already: one spec each, with the\n\t\t * referenced register and schema off the page schema's `$ref`.\n\t\t *\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-an-active-chip-names-the-value-not-its-id\n\t\t * @return {Array<{key: string, labelField: string, register: string, schema: string}>}\n\t\t */\n\t\tactiveFilterRefSpecs() {\n\t\t\tif (!this.isBoardLook || !this.effectiveSchema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst keys = Object.keys(this.effectiveActiveFilters || {})\n\t\t\tif (keys.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst covered = new Set(this.refLabelSpecs.map((spec) => spec.key))\n\t\t\tconst fields = fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true })\n\t\t\tconst specs = []\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (covered.has(key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst field = fields.find((f) => f.key === key)\n\t\t\t\tconst ref = field && field.reference\n\t\t\t\tif (!ref || ref.schema === undefined || ref.schema === null) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tspecs.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tlabelField: '',\n\t\t\t\t\tregister: ref.register || (typeof this.register === 'string' ? this.register : ''),\n\t\t\t\t\tschema: String(ref.schema),\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn specs\n\t\t},\n\n\t\t/**\n\t\t * The ids each active reference filter holds, per filter key, for the\n\t\t * label lookup of the Active line.\n\t\t *\n\t\t * @return {{[key: string]: string[]}} Distinct ids per filter key.\n\t\t */\n\t\tactiveFilterRefIds() {\n\t\t\tconst out = {}\n\t\t\tconst keys = new Set([...this.refLabelSpecs, ...this.activeFilterRefSpecs].map((spec) => spec.key))\n\t\t\tfor (const [key, raw] of Object.entries(this.effectiveActiveFilters || {})) {\n\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tout[key] = (Array.isArray(raw) ? raw : [raw])\n\t\t\t\t\t.filter((id) => id !== null && id !== undefined && id !== '' && typeof id !== 'object')\n\t\t\t\t\t.map((id) => String(id))\n\t\t\t\t\t.sort()\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The bulk band shape `bulkBandViews` gives the current view, or null.\n\t\t *\n\t\t * @return {?{lead?: {one?: string, other?: string}, actions?: Array<string|{id: string, label?: string}>, cancel?: boolean, hint?: boolean}}\n\t\t */\n\t\tviewBulkBand() {\n\t\t\tconst views = this.bulkBandViews\n\t\t\tconst shape = views && typeof views === 'object' ? views[this.currentViewMode] : null\n\t\t\treturn shape && typeof shape === 'object' ? shape : null\n\t\t},\n\n\t\t/**\n\t\t * The bulk actions the band offers: the view's pick and labels, else all.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tviewBulkActions() {\n\t\t\tconst shape = this.viewBulkBand\n\t\t\tif (!shape || !Array.isArray(shape.actions)) {\n\t\t\t\treturn this.mergedBulkActions\n\t\t\t}\n\t\t\treturn shape.actions\n\t\t\t\t.map((pick) => {\n\t\t\t\t\tconst id = typeof pick === 'string' ? pick : (pick && pick.id)\n\t\t\t\t\tconst action = this.mergedBulkActions.find((entry) => entry && entry.id === id)\n\t\t\t\t\tif (!action) {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t\treturn pick && typeof pick === 'object' && typeof pick.label === 'string' && pick.label !== '' ? { ...action, label: pick.label } : action\n\t\t\t\t})\n\t\t\t\t.filter(Boolean)\n\t\t},\n\n\t\t/**\n\t\t * The view's lead line counting the selection (\"1 zaak geselecteerd\"),\n\t\t * or '' for the band's own lead.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tviewBulkBandLead() {\n\t\t\tconst lead = this.viewBulkBand ? this.viewBulkBand.lead : null\n\t\t\tif (!lead || typeof lead !== 'object') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst count = this.internalSelectedIds.length\n\t\t\tconst template = count === 1 ? lead.one : (lead.other || lead.one)\n\t\t\treturn typeof template === 'string' && template !== '' ? this.cnTranslate(template).replace(/\\{count\\}/g, String(count)) : ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the bulk band shows before a selection: `bulkBandAlways`, in\n\t\t * a view that selects rows (table, cards, list, board). The map and\n\t\t * the date views select nothing (DqZakenKaart).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tbulkBandIdleShown() {\n\t\t\treturn this.bulkBandAlways && ['table', 'cards', 'list', 'board'].includes(this.currentViewMode)\n\t\t},\n\n\t\t/**\n\t\t * The plural the board bulk band names: \"With the selected cases\".\n\t\t * The page's `bulkNoun`, else the schema's `titlePlural` (or\n\t\t * `plural`), else nothing (the band says \"items\").\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tboardBulkNoun() {\n\t\t\tconst schema = this.effectiveSchema || {}\n\t\t\tconst plural = this.bulkNoun || schema.titlePlural || schema.pluralTitle || schema.plural\n\t\t\tif (typeof plural === 'string' && plural !== '') {\n\t\t\t\treturn this.cnTranslate(plural).toLowerCase()\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the buildiq square sits in the page header instead of the\n\t\t * actions bar: under the board look, when the header shows (a hidden\n\t\t * header or a `#header` slot keeps the square in the bar).\n\t\t *\n\t\t * @spec openspec/changes/screens-chrome-parity/specs/layout-components/spec.md#requirement-the-buildiq-square-is-one-square-everywhere\n\t\t * @return {boolean}\n\t\t */\n\t\tbuildiqInHeader() {\n\t\t\treturn this.isBoard && this.showTitle && !this.$slots.header\n\t\t},\n\n\t\t/**\n\t\t * Index of the header button the buildiq square sits directly before:\n\t\t * the first primary one. -1 puts it after the last button.\n\t\t *\n\t\t * @spec openspec/changes/screens-chrome-parity/specs/layout-components/spec.md#requirement-the-buildiq-square-is-one-square-everywhere\n\t\t * @return {number}\n\t\t */\n\t\tbuildiqBeforeIndex() {\n\t\t\tif (!this.headerButtonsShown) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn this.resolvedHeaderButtons.findIndex((button) => button.variant === 'primary')\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws Save view: not when the page switches it\n\t\t * off (`savedViewSave: false`) or its header carries one.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\ttoolbarSavesView() {\n\t\t\treturn this.savedViewSave !== false && !this.headerSavesView\n\t\t},\n\n\t\t/**\n\t\t * Whether the page header carries a save-view button, so the toolbar\n\t\t * leaves its own Save view out.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/saved-views-hide-toolbar-save/specs/saved-views/spec.md\n\t\t */\n\t\theaderSavesView() {\n\t\t\treturn this.headerButtonsShown && (this.resolvedHeaderButtons || []).some((button) => button && button.action === 'save-view')\n\t\t},\n\n\t\t/**\n\t\t * Whether the header buttons render: there are some, the title shows\n\t\t * (they sit beside it) and no `#header` slot replaces the header.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @return {boolean}\n\t\t */\n\t\theaderButtonsShown() {\n\t\t\treturn this.showTitle && !this.$slots.header && this.resolvedHeaderButtons.length > 0\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws the Actions menu: `showActionsMenu` when\n\t\t * set, else unless the header carries buttons.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-with-header-buttons/specs/index-actions-menu-with-header-buttons/spec.md#requirement-an-index-page-decides-its-toolbar-actions-menu\n\t\t * @return {boolean}\n\t\t */\n\t\tactionsMenuShown() {\n\t\t\treturn typeof this.showActionsMenu === 'boolean' ? this.showActionsMenu : !this.headerButtonsShown\n\t\t},\n\n\t\t/**\n\t\t * Whether the actions bar shows the saved-views control: opted in\n\t\t * with `allowSavedViews` and not given up for header buttons.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @return {boolean}\n\t\t */\n\t\tbarShowsSavedViews() {\n\t\t\t// Under the board look the saved views stay in the toolbar as chips\n\t\t\t// even when the header carries the buttons.\n\t\t\treturn Boolean(this.allowSavedViews) && (!this.headerButtonsShown || this.isBoardLook)\n\t\t},\n\n\t\t/**\n\t\t * Whether the actions bar shows the Export menu: `showExportMenu`,\n\t\t * unless a header button, or an Actions menu listing `export`, took\n\t\t * the export over (DqAanMijToegewezen).\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @return {boolean}\n\t\t */\n\t\tbarShowsExportMenu() {\n\t\t\tconst menuExports = this.headerButtonsShown && this.resolvedHeaderButtons\n\t\t\t\t.some((button) => button.action === 'actions-menu' && Array.isArray(button.items) && button.items.includes('export'))\n\t\t\treturn this.showExportMenu && !this.headerButtonTakes('export') && !menuExports\n\t\t},\n\n\t\t/**\n\t\t * The header's description line: `countSubtitle` with the total\n\t\t * filled in when one is known, else `description`.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-an-index-page-title-is-a-manifest-key\n\t\t * @spec openspec/changes/screens-table-footer-and-system-dates-parity/specs/index-list-board-look/spec.md#requirement-the-count-reads-in-the-users-language\n\t\t * @return {string}\n\t\t */\n\t\t/**\n\t\t * The header meta note with the list's counts filled in. `{rows:<field>}`\n\t\t * counts the rows whose field is set (\"waarvan {rows:coveredFor} als\n\t\t * waarnemer\"), and a part in square brackets is left out while a count\n\t\t * in it is zero.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t * @return {string}\n\t\t */\n\t\theaderMetaText() {\n\t\t\tconst headerMeta = this.presented('headerMeta')\n\t\t\tif (!headerMeta) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst total = this.effectivePagination?.total\n\t\t\tlet missing = false\n\t\t\tconst rows = Array.isArray(this.headerMetaRows) ? this.headerMetaRows : []\n\t\t\tconst isSet = (value) => value !== undefined && value !== null && value !== '' && value !== false && !(Array.isArray(value) && value.length === 0)\n\t\t\tconst fill = (part, onCount) => part\n\t\t\t\t.replace('{shown}', () => onCount(this.effectiveObjects.length))\n\t\t\t\t.replace('{total}', () => (typeof total === 'number' ? onCount(total) : ''))\n\t\t\t\t.replace(/\\{rows:([\\w.-]+)\\}/g, (match, field) => onCount(rows.filter((row) => isSet(field.split('.').reduce((at, key) => (at && typeof at === 'object' ? at[key] : undefined), row))).length))\n\t\t\t\t.replace(/\\{count:([\\w-]+)\\}/g, (match, name) => {\n\t\t\t\t\tconst value = this.headerMetaCountValues[name]\n\t\t\t\t\tif (typeof value !== 'number') {\n\t\t\t\t\t\tmissing = true\n\t\t\t\t\t\treturn ''\n\t\t\t\t\t}\n\t\t\t\t\treturn onCount(value)\n\t\t\t\t})\n\t\t\tconst text = fill(\n\t\t\t\tthis.cnTranslate(headerMeta).replace(/\\[([^\\]]*)\\]/g, (match, part) => {\n\t\t\t\t\tlet zero = false\n\t\t\t\t\tconst filled = fill(part, (count) => {\n\t\t\t\t\t\tzero = zero || count === 0\n\t\t\t\t\t\treturn String(count)\n\t\t\t\t\t})\n\t\t\t\t\treturn zero ? '' : filled\n\t\t\t\t}),\n\t\t\t\tString,\n\t\t\t)\n\t\t\treturn missing ? '' : text\n\t\t},\n\n\t\t/**\n\t\t * Whether the header note carries a count, so the board leaves out its\n\t\t * own \"{shown} of {total}\" line (DqPrivacy, DqContracten).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\theaderMetaCarriesCount() {\n\t\t\tconst headerMeta = this.presented('headerMeta')\n\t\t\treturn typeof headerMeta === 'string' && /\\{(shown|total|count:[\\w-]+|rows:[\\w.-]+)\\}/.test(headerMeta)\n\t\t},\n\n\t\t/**\n\t\t * What the header note's other counts depend on, as one key.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\theaderMetaCountKey() {\n\t\t\tconst sources = this.headerMetaCounts && typeof this.headerMetaCounts === 'object' ? this.headerMetaCounts : {}\n\t\t\tconst valid = Object.entries(sources).filter(([, from]) => from && from.register && from.schema)\n\t\t\treturn valid.length > 0 ? JSON.stringify(valid) : ''\n\t\t},\n\n\t\t/**\n\t\t * The header's description line, and on the map with its list the\n\t\t * number of rows on the map after a middle dot (\"· 5 met een adres op\n\t\t * de kaart\", DqZakenKaart).\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\theaderDescription() {\n\t\t\tconst base = this.headerDescriptionBase\n\t\t\tif (this.currentViewMode !== 'map' || !this.mapListEnabled) {\n\t\t\t\treturn base\n\t\t\t}\n\t\t\tconst onMap = n('nextcloud-vue', '%n with an address on the map', '%n with an address on the map', this.mapList.items.length)\n\t\t\treturn base ? `${base} · ${onMap}` : onMap\n\t\t},\n\n\t\t/**\n\t\t * The count line template: a scope's own, else the open view's\n\t\t * (`countTextByView`), else the page's `countText`.\n\t\t *\n\t\t * @spec openspec/changes/count-text-per-view/specs/index-page/spec.md#requirement-the-count-line-can-differ-per-view\n\t\t * @return {string}\n\t\t */\n\t\tpresentedCountText() {\n\t\t\tif (this.activeScopePresentation.countText === undefined) {\n\t\t\t\tconst byView = this.countTextByView\n\t\t\t\tconst own = byView && typeof byView === 'object' ? byView[this.currentViewMode] : undefined\n\t\t\t\tif (typeof own === 'string' && own !== '') {\n\t\t\t\t\treturn own\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.presented('countText')\n\t\t},\n\n\t\theaderDescriptionBase() {\n\t\t\tconst total = this.effectivePagination?.total\n\t\t\t// Board look: the count line is a template over the rows on this page\n\t\t\t// and all rows, \"{shown} of {total}\" unless the page says otherwise.\n\t\t\tif (this.isBoardLook && typeof total === 'number' && total >= 0) {\n\t\t\t\tconst shown = this.effectiveObjects.length\n\t\t\t\t// The default count line is the library's own string, so it\n\t\t\t\t// reads \"14 van 14\" in Dutch; a page's own template goes\n\t\t\t\t// through the app's label lookup.\n\t\t\t\tconst countText = this.presentedCountText\n\t\t\t\t// The note after the breadcrumb already says how many there are.\n\t\t\t\tif (!countText && !this.countSubtitle && this.headerMetaCarriesCount) {\n\t\t\t\t\treturn this.description\n\t\t\t\t}\n\t\t\t\tif (!countText && !this.countSubtitle) {\n\t\t\t\t\treturn t('nextcloud-vue', '{shown} of {total}', { shown, total })\n\t\t\t\t}\n\t\t\t\tif (countText) {\n\t\t\t\t\tconst translated = this.cnTranslate(countText)\n\t\t\t\t\treturn fillMyTeamToken(translated, translated.includes('{myTeam}') ? (peekMyTeamName() || '') : '')\n\t\t\t\t\t\t.replace('{shown}', String(shown))\n\t\t\t\t\t\t.replace('{total}', String(total))\n\t\t\t\t\t\t.replace(/\\{term\\}/g, this.sourceTerm)\n\t\t\t\t}\n\t\t\t\treturn this.countLine(this.countSubtitle, total, shown)\n\t\t\t}\n\t\t\tif (this.countSubtitle && typeof total === 'number' && total >= 0) {\n\t\t\t\treturn this.countLine(this.countSubtitle, total, null)\n\t\t\t}\n\t\t\treturn this.description\n\t\t},\n\n\t\t/** Add button label — derived from schema.title if not explicitly set */\n\t\tresolvedAddLabel() {\n\t\t\tconst scoped = this.activeScopePresentation ? this.activeScopePresentation.addLabel : undefined\n\t\t\tconst addLabel = scoped !== undefined ? scoped : this.addLabel\n\t\t\tif (addLabel) {\n\t\t\t\treturn this.cnTranslate(addLabel)\n\t\t\t}\n\t\t\t// A named source names its own create action. Without this the button\n\t\t\t// falls back to a schema-derived noun, and a named source has no\n\t\t\t// schema — so the control the migration was supposed to preserve\n\t\t\t// simply is not there.\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.addLabel) {\n\t\t\t\treturn this.namedSource.addLabel\n\t\t\t}\n\t\t\t// Two catalogues, deliberately. The NOUN comes from the consumer's\n\t\t\t// schema, so it resolves against the consumer's catalogue via the\n\t\t\t// injected `cnTranslate`; the SENTENCE around it is library chrome, so\n\t\t\t// it resolves against the library's own — exactly the split\n\t\t\t// CnFormDialog already makes for \"Create {title}\".\n\t\t\t//\n\t\t\t// Getting that wrong is visible rather than subtle: routing the\n\t\t\t// sentence through the host catalogue too produced \"Add Urenboeking\"\n\t\t\t// on a Dutch instance, because no app catalogue carries a key that\n\t\t\t// belongs to the library.\n\t\t\tconst type = this.cnTranslate(this.effectiveSchema?.title || 'Item')\n\t\t\treturn t('nextcloud-vue', 'Add {type}', { type })\n\t\t},\n\n\t\t/**\n\t\t * Effective sidebar configuration. Returns the sidebar config object\n\t\t * when `sidebar.enabled === true`, otherwise an `{ enabled: false }`\n\t\t * stub so the embedded CnIndexSidebar is not mounted. A page that\n\t\t * offers saved views gets the sidebar unless it switched it off\n\t\t * with `enabled: false`: the saved views live in its Search tab.\n\t\t */\n\t\tresolvedSidebar() {\n\t\t\tif (this.sidebar && this.sidebar.enabled !== false && (this.sidebar.enabled || !this.allowSavedViews)) {\n\t\t\t\treturn this.sidebar\n\t\t\t}\n\t\t\tif (this.allowSavedViews && !(this.sidebar && this.sidebar.enabled === false)) {\n\t\t\t\treturn { ...(this.sidebar || {}), enabled: true }\n\t\t\t}\n\t\t\treturn { enabled: false }\n\t\t},\n\n\t\t/**\n\t\t * Whether a Search/Columns sidebar is configured for this page (mirrors\n\t\t * the mount gate used by `shouldRenderInlineSidebar` /\n\t\t * `publishHoistedSidebar`). Drives the actions-bar toggle visibility.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasSidebar() {\n\t\t\treturn !!this.resolvedSidebar.enabled && this.resolvedSidebar.show !== false\n\t\t},\n\n\t\t/**\n\t\t * Whether the board toolbar draws the Filter button as a menu: the\n\t\t * board look, `filterMenu` on, something to filter by, and no filter\n\t\t * sidebar (whose toggle is that button otherwise).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tboardFilterMenu() {\n\t\t\treturn this.isBoardLook && this.filterMenu && !this.hasSidebar && this.filterableFields.length > 0\n\t\t},\n\n\t\t/**\n\t\t * Whether the funnel menu sits in the table header: `filterMenu` with\n\t\t * values to offer, unless the toolbar's Filter button is that menu.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tshowHeaderFilterMenu() {\n\t\t\treturn this.filterMenu && this.filterableFields.length > 0 && !this.boardFilterMenu\n\t\t},\n\n\t\t/**\n\t\t * The side panel's line under its title: the page's `sidebar.subtitle`\n\t\t * (a string, or `{ singular, plural }`) with `{total}` and `{shown}`\n\t\t * filled (\"48 zaken, 8 op deze pagina\", DqFilterBeheren), or '' to keep\n\t\t * the schema's description.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-sidebar-count-subtitle/specs/index-sidebar-count-subtitle/spec.md\n\t\t */\n\t\tsidebarSubtitle() {\n\t\t\tconst declared = this.sidebar && this.sidebar.subtitle\n\t\t\tconst total = this.effectivePagination && this.effectivePagination.total\n\t\t\tif (!declared || typeof total !== 'number' || total < 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst shown = Array.isArray(this.effectiveObjects) ? this.effectiveObjects.length : null\n\t\t\treturn countLine(declared, total, { shown, translate: this.cnTranslate, appId: this.cnAppId })\n\t\t},\n\n\t\t/** Search props forwarded to the embedded CnIndexSidebar (defaults applied per CnIndexSidebar). */\n\t\tsidebarSearchProps() {\n\t\t\treturn (this.sidebar && this.sidebar.search) || {}\n\t\t},\n\n\t\t/**\n\t\t * Whether the embedded sidebar should render inline inside the\n\t\t * cn-index-page wrapper. False when CnAppRoot has provided a\n\t\t * real `cnIndexSidebarConfig` holder — in that case CnAppRoot\n\t\t * mounts the sidebar at NcContent level (correct NcAppSidebar\n\t\t * parent). True when no CnAppRoot ancestor exists (legacy\n\t\t * apps), so the embedded sidebar still renders even though\n\t\t * its visual position is sub-optimal.\n\t\t */\n\t\tshouldRenderInlineSidebar() {\n\t\t\tif (!this.resolvedSidebar.enabled || this.resolvedSidebar.show === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// CnAppRoot ancestor present → hoist takes over.\n\t\t\treturn !this.cnHostsIndexSidebar\n\t\t},\n\n\t\t/**\n\t\t * Snapshot of every prop the hoisted CnIndexSidebar needs.\n\t\t * Reactive — the sidebar in CnAppRoot re-renders whenever\n\t\t * any of these change.\n\t\t */\n\t\thoistedSidebarProps() {\n\t\t\treturn {\n\t\t\t\topen: this.sidebarOpen,\n\t\t\t\tschema: this.effectiveSchema,\n\t\t\t\ttitle: this.shownTitle,\n\t\t\t\tsubtitle: this.sidebarSubtitle,\n\t\t\t\ticon: this.resolvedIcon,\n\t\t\t\tsearchValue: this.effectiveSearchValue,\n\t\t\t\tvisibleColumns: this.effectiveVisibleColumns,\n\t\t\t\tactiveFilters: this.effectiveActiveFilters,\n\t\t\t\tcolumnGroups: this.resolvedSidebar.columnGroups || [],\n\t\t\t\tfilterFields: this.resolvedSidebar.fields || null,\n\t\t\t\tfacetData: this.effectiveFacetData,\n\t\t\t\tshowMetadata: this.resolvedSidebar.showMetadata !== false,\n\t\t\t\tpersonalColumns: this.personalColumns,\n\t\t\t\tpinnedCount: this.pinnedColumnCount,\n\t\t\t\tsortOptions: this.sidebarSortOptions,\n\t\t\t\tcurrentSort: this.currentSortKeys,\n\t\t\t\tcurrentSortValue: this.sortSource.value,\n\t\t\t\tsavedViews: this.savedViewsForSidebar,\n\t\t\t\tactiveTab: this.sidebarActiveTab,\n\t\t\t\t...this.sidebarSearchProps,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Resolved card component for card-grid view mode. Returns\n\t\t * `null` when `cardComponent` is empty OR when the name is not\n\t\t * in the registry (the latter also logs `console.warn`).\n\t\t *\n\t\t * `null` makes the template fall through to `CnCardGrid`'s\n\t\t * default `CnObjectCard` rendering — exactly the legacy path.\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tresolvedCardComponent() {\n\t\t\tif (!this.cardComponent) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst resolved = this.resolveNamedComponent(this.cardComponent)\n\t\t\tif (!resolved) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`[CnIndexPage] cardComponent \"${this.cardComponent}\" not found in the registry or customComponents. Falling back to CnObjectCard.`)\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolved\n\t\t},\n\n\t\t/**\n\t\t * Custom list-row component resolved against the customComponents\n\t\t * registry, or `null` when `listComponent` is empty / unknown (default\n\t\t * `CnObjectRow` is used). Mirrors `resolvedCardComponent`.\n\t\t *\n\t\t * @return {?object} The resolved component, or null.\n\t\t */\n\t\tresolvedListComponent() {\n\t\t\tif (!this.listComponent) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst resolved = this.resolveNamedComponent(this.listComponent)\n\t\t\tif (!resolved) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`[CnIndexPage] listComponent \"${this.listComponent}\" not found in the registry or customComponents. Falling back to CnObjectRow.`)\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolved\n\t\t},\n\t},\n\n\twatch: {\n\t\t// A group filter's chip names the group: ask for each id's display\n\t\t// name (cached, once per id per page).\n\t\teffectiveActiveFilters: {\n\t\t\timmediate: true,\n\t\t\thandler(filters) {\n\t\t\t\tfor (const [key, raw] of Object.entries(filters || {})) {\n\t\t\t\t\tif (!this.isGroupFilter(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor (const value of (Array.isArray(raw) ? raw : [raw])) {\n\t\t\t\t\t\tif (typeof value === 'string' && value !== '' && value.charAt(0) !== '@') {\n\t\t\t\t\t\t\tloadGroupDisplayName(value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A lens that asks the source for other rows reads the source again.\n\t\tlensSourceParams(now, before) {\n\t\t\tif (JSON.stringify(now) === JSON.stringify(before) || !this.isSelfFetchMode) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst option = this.activeSortSource || this.sourceSortOptions.find((o) => o.source.annotate === true)\n\t\t\tif (option) {\n\t\t\t\tthis.resetSortSourcePage()\n\t\t\t\tthis.loadSortSource(option)\n\t\t\t}\n\t\t},\n\n\t\t// A new search or filter starts the source rows at page 1.\n\t\t'list.searchTerm.value': function() {\n\t\t\tthis.resetSortSourcePage()\n\t\t},\n\n\t\t'list.activeFilters.value': {\n\t\t\thandler() {\n\t\t\t\tthis.resetSortSourcePage()\n\t\t\t},\n\n\t\t\tdeep: true,\n\t\t},\n\n\t\t'$route.query._view': function(now, before) {\n\t\t\t// Leaving the mode's address (a plain link to the page) leaves the\n\t\t\t// mode it opened, unless the person picked another one since.\n\t\t\tif ((typeof now !== 'string' || now === '') && typeof before === 'string' && before !== '' && before === this.currentViewMode) {\n\t\t\t\tthis.routeViewPending = false\n\t\t\t\tthis.currentViewMode = this.viewMode\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.applyViewModeFromRoute()\n\t\t},\n\n\t\t'$route.query.savedView': function(now, before) {\n\t\t\t// Leaving a view's address (a plain link to the page) leaves the view.\n\t\t\tif ((typeof now !== 'string' || now === '') && typeof before === 'string' && before !== '' && before === this.appliedSavedViewId) {\n\t\t\t\tthis.leaveSavedView()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.applySavedViewFromRoute()\n\t\t},\n\n\t\tactiveSavedViewOverridesKey() {\n\t\t\t/**\n\t\t\t * The applied view's page config overrides changed: a view with\n\t\t\t * overrides was applied (payload: the overrides) or left (`null`).\n\t\t\t *\n\t\t\t * @event view-overrides\n\t\t\t */\n\t\t\tthis.$emit('view-overrides', this.activeSavedViewOverrides)\n\t\t},\n\n\t\trouteViewModes() {\n\t\t\tif (this.routeViewPending) {\n\t\t\t\tthis.applyViewModeFromRoute()\n\t\t\t}\n\t\t},\n\n\t\tmapColorFetchKey: {\n\t\t\timmediate: true,\n\t\t\thandler(key) {\n\t\t\t\tif (key !== '') {\n\t\t\t\t\tthis.loadMapColorSource()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tboardFetchKey: {\n\t\t\timmediate: true,\n\t\t\thandler(key) {\n\t\t\t\tif (key !== '') {\n\t\t\t\t\tthis.loadBoardSources()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\teffectiveObjects: {\n\t\t\timmediate: true,\n\t\t\thandler(rows) {\n\t\t\t\tif (!this.collectionUrl || !this.isSelfFetchMode || !Array.isArray(rows)) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tconst id = row?.id ?? row?.['@self']?.id\n\t\t\t\t\tif (id !== undefined && id !== null) {\n\t\t\t\t\t\tthis.collectionRowsById.set(id, row)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A column or form field bound to a property the schema lacks is told to the host once.\n\t\teffectiveSchema: {\n\t\t\timmediate: true,\n\t\t\thandler(schema) {\n\t\t\t\treportBindingProblems(schema, { register: this.register, columns: this.declaredColumns, includeFields: this.includeFields })\n\t\t\t},\n\t\t},\n\n\t\t// Resolve the labels of reference columns in one batch per schema.\n\t\trefLabelIds: {\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadRefLabels()\n\t\t\t},\n\t\t},\n\n\t\t// Read the colour and icon of the records badge columns point at.\n\t\trefLookIds: {\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadRefLooks()\n\t\t\t},\n\t\t},\n\n\t\t// The Active line names a referenced value, not its id.\n\t\tactiveFilterRefIds: {\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadRefLabels()\n\t\t\t},\n\t\t},\n\n\t\tquickFiltersFromKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values */\n\t\t\thandler() {\n\t\t\t\tthis.loadGeneratedQuickFilters()\n\t\t\t},\n\t\t},\n\n\t\theaderMetaCountKey: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadHeaderMetaCounts()\n\t\t\t},\n\t\t},\n\n\t\tpageTabCountKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs */\n\t\t\thandler() {\n\t\t\t\tthis.loadPageTabCounts()\n\t\t\t},\n\t\t},\n\n\t\tfilterStripCountKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip */\n\t\t\thandler() {\n\t\t\t\tthis.loadFilterStripCounts()\n\t\t\t},\n\t\t},\n\n\t\tcountRequestKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views */\n\t\t\thandler() {\n\t\t\t\tthis.loadFilterCounts()\n\t\t\t},\n\t\t},\n\n\t\t// Remember the whole folder set whenever no folder narrows the query.\n\t\tfolderSidebarLiveFacetValues: {\n\t\t\timmediate: true,\n\t\t\thandler(values) {\n\t\t\t\tif (this.selectedFolderId === null || this.selectedFolderId === undefined) {\n\t\t\t\t\tthis.folderSidebarAllValues = values\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tviewMode(val) {\n\t\t\tthis.currentViewMode = val\n\t\t},\n\n\t\t// Entering calendar mode fetches one page sized to the month; leaving\n\t\t// removes the month range and restores the page size, so the table is\n\t\t// never left narrowed.\n\t\t// The board does the same at BOARD_PAGE_SIZE, so it shows every row\n\t\t// rather than the table's first page.\n\t\tcurrentViewMode(mode, previous) {\n\t\t\tif (!this.isSelfFetchMode) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlet listSize = this.list.pageSize.value\n\t\t\tif (previous === 'calendar') {\n\t\t\t\tthis.calendarRange = null\n\t\t\t\tlistSize = this.calendarPrevPageSize || 20\n\t\t\t\tthis.calendarPrevPageSize = null\n\t\t\t} else if (previous === 'board') {\n\t\t\t\tlistSize = this.boardPrevPageSize || 20\n\t\t\t\tthis.boardPrevPageSize = null\n\t\t\t}\n\t\t\tconst leftMapPlotAll = previous === 'map' && this.mapPrevPageSize !== null\n\t\t\tif (leftMapPlotAll) {\n\t\t\t\tlistSize = this.mapPrevPageSize\n\t\t\t\tthis.mapPrevPageSize = null\n\t\t\t}\n\t\t\tlet size = null\n\t\t\tif (mode === 'calendar') {\n\t\t\t\tthis.calendarPrevPageSize = listSize\n\t\t\t\tsize = CALENDAR_PAGE_SIZE\n\t\t\t} else if (mode === 'board') {\n\t\t\t\tthis.boardPrevPageSize = listSize\n\t\t\t\tsize = BOARD_PAGE_SIZE\n\t\t\t} else if (mode === 'map' && this.mapPlotAllLimit > 0 && !this.isNamedSource) {\n\t\t\t\tthis.mapPrevPageSize = listSize\n\t\t\t\tsize = this.mapPlotAllLimit\n\t\t\t} else if (previous === 'calendar' || previous === 'board' || leftMapPlotAll) {\n\t\t\t\tsize = listSize\n\t\t\t}\n\t\t\tif (size !== null && typeof this.list.onPageSizeChange === 'function') {\n\t\t\t\tthis.list.onPageSizeChange(size)\n\t\t\t}\n\t\t},\n\n\t\tselectedIds(val) {\n\t\t\tthis.internalSelectedIds = [...val]\n\t\t},\n\n\t\t/**\n\t\t * Tenant change pipeline (multi-tenancy-context).\n\t\t * When the bound `activeOrganisation` prop changes, push the\n\t\t * new UUID into the bound object store (when there is one)\n\t\t * AND into the shared `useTenantContext()` context so every\n\t\t * other tenant-aware surface stays consistent.\n\t\t */\n\t\tactiveOrganisation: {\n\t\t\thandler(next) {\n\t\t\t\tif (!next) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst uuid = next.uuid || null\n\t\t\t\t// Update the object store when one is bound — sub-store\n\t\t\t\t// methods may not exist on non-OR stores; guard with typeof.\n\t\t\t\tconst store = this.list?.store ?? this.selfObjectStore ?? null\n\t\t\t\tif (store && typeof store.setActiveTenantOrganisation === 'function') {\n\t\t\t\t\tstore.setActiveTenantOrganisation(uuid)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdeep: false,\n\t\t},\n\n\t\t/**\n\t\t * Keep the hoisted sidebar in sync with reactive props.\n\t\t * The watcher fires whenever any of the props snapshot\n\t\t * (`hoistedSidebarProps`) changes; we re-write the entire\n\t\t * config so Vue's NcAppSidebar in CnAppRoot picks up the\n\t\t * new values. Cheap because it's just an object swap.\n\t\t */\n\t\thoistedSidebarProps: {\n\t\t\thandler() {\n\t\t\t\tthis.publishHoistedSidebar()\n\t\t\t},\n\n\t\t\tdeep: false,\n\t\t},\n\n\t\tshouldRenderInlineSidebar() {\n\t\t\t// When the gate flips (e.g. sidebar.show toggled), keep\n\t\t\t// the hoist in sync.\n\t\t\tthis.publishHoistedSidebar()\n\t\t},\n\n\t\t// The gate itself, which neither watcher above catches: under a\n\t\t// CnAppRoot host `shouldRenderInlineSidebar` is false in BOTH states,\n\t\t// and `hoistedSidebarProps` carries none of `enabled` / `show`. So\n\t\t// toggling the sidebar on or off in CnEditSidebarModal — which mutates\n\t\t// `config.sidebar` in place — left the hoisted panel exactly as it was\n\t\t// until the page was reloaded.\n\t\thasSidebar() {\n\t\t\tthis.publishHoistedSidebar()\n\t\t},\n\n\t\t// Re-push AI context when relevant props change\n\t\tregister() {\n\t\t\tthis.pushAiContext()\n\t\t},\n\n\t\tschema() {\n\t\t\tthis.pushAiContext()\n\t\t},\n\n\t\t// In self-fetch mode, a same-component route-param change (e.g. the\n\t\t// `:id` of `/forms/:id/submissions`) must re-resolve `config.filter`\n\t\t// and re-fetch. useListView's `fixedFilters` getter re-reads $route on\n\t\t// each fetch; this watcher triggers the re-fetch.\n\t\t'$route.params': {\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\t\tthis.list.refresh(1)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A same-path `$route.query` change (e.g. a dashboard deep-link\n\t\t// `/cases?caseType=X`) must also re-fetch — `fixedFilters` merges the\n\t\t// query into the fetch (see useSelfFetchList.resolveQueryFilters).\n\t\t'$route.query': {\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\t\tthis.list.refresh(1)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Leaving the narrow full-detail layout puts the list back where it\n\t\t * was. The element was hidden, so the browser kept no scroll height\n\t\t * for it and would otherwise return the handler to row 1 of 400.\n\t\t *\n\t\t * @param {string} next The layout now.\n\t\t * @param {string} previous The layout before it.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitLayout(next, previous) {\n\t\t\tif (previous === 'detail' && next !== 'detail') {\n\t\t\t\tthis.restoreListScroll()\n\t\t\t}\n\t\t},\n\n\t\t// When `?action=create` is injected into the query via router navigation\n\t\t// (e.g. a \"New Case\" button on another page), auto-open the create dialog\n\t\t// so the user lands on the index page with the form already open.\n\t\t'$route.query.action': {\n\t\t\thandler(val) {\n\t\t\t\tif (val === 'create') {\n\t\t\t\t\tthis.maybeOpenCreateFromQuery()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\n\t/**\n\t * Measure the viewport, follow a resize, and read this person's own\n\t * row order for this list.\n\t *\n\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t */\n\tmounted() {\n\t\tthis.openSortSource()\n\t\tthis.measureSplitViewport()\n\t\tif (this.splitViewEnabled && typeof window !== 'undefined') {\n\t\t\twindow.addEventListener('resize', this.measureSplitViewport)\n\t\t}\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.addEventListener(OBJECTS_CHANGED_EVENT, this.onObjectsChanged)\n\t\t}\n\t\tthis.loadManualOrder()\n\t\tthis.startLive()\n\t\tthis.loadPersonalColumns()\n\t\tthis.publishHoistedSidebar()\n\t\tthis.pushAiContext()\n\t\tthis.maybeOpenCreateFromQuery()\n\t\tif (this.folderSidebar) {\n\t\t\tthis.loadFolderRegister()\n\t\t\tthis.loadFolderGroups()\n\t\t\t// Reflect a deep-link filter (e.g. ?caseType=<id>) as the active folder.\n\t\t\tconst key = this.folderSidebar.filterField || this.folderSidebar.field\n\t\t\tconst active = key && this.effectiveActiveFilters[key]\n\t\t\tif (active) {\n\t\t\t\tthis.selectedFolderId = Array.isArray(active) ? active[0] : active\n\t\t\t}\n\t\t}\n\t},\n\n\tcreated() {\n\t\tthis.applyViewModeFromRoute()\n\t\tthis.pushAiContext()\n\t\tif (this.savedViewsOffered) {\n\t\t\tthis.fetchSavedViews()\n\t\t}\n\t\tthis.selfActions = createSelfModeActions({\n\t\t\tisSelfFetchMode: () => this.isSelfFetchMode,\n\t\t\tselfObjectStore: () => this.selfObjectStore,\n\t\t\trowTarget: (row) => this.rowTypeTarget(row),\n\t\t\tknownRow: (id) => this.collectionRowsById.get(id),\n\t\t\tselfObjectType: () => this.selfObjectType,\n\t\t\tlist: () => this.list,\n\t\t\tselectedIds: () => this.internalSelectedIds,\n\t\t\tregister: () => this.register,\n\t\t\tschema: () => this.schema,\n\t\t\teffectiveObjects: () => this.effectiveObjects,\n\t\t\teffectiveSchema: () => this.effectiveSchema,\n\t\t\tmassActionNameField: () => this.massActionNameField,\n\t\t\teditItem: () => this.editItem,\n\t\t\temit: (event, payload) => this.$emit(event, payload),\n\t\t\tafterCreateSuccess: (saved) => this.afterCreateSuccess(saved),\n\t\t\tsetResults: {\n\t\t\t\tsingleDelete: (r) => this.setSingleDeleteResult(r),\n\t\t\t\tmassDelete: (r) => this.setMassDeleteResult(r),\n\t\t\t\tsingleCopy: (r) => this.setSingleCopyResult(r),\n\t\t\t\tmassCopy: (r) => this.setMassCopyResult(r),\n\t\t\t\tmassImport: (r) => this.setImportResult(r),\n\t\t\t\tmassExport: (r) => this.setExportResult(r),\n\t\t\t\tform: (r) => this.setFormResult(r),\n\t\t\t\tformValidation: (fieldErrors, message) => this.setFormValidationErrors(fieldErrors, message),\n\t\t\t},\n\t\t})\n\t},\n\n\t/**\n\t * Drop the window listeners and the hoisted sidebar.\n\t *\n\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t */\n\tbeforeUnmount() {\n\t\tthis.stopLive()\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.removeEventListener('resize', this.measureSplitViewport)\n\t\t\twindow.removeEventListener(OBJECTS_CHANGED_EVENT, this.onObjectsChanged)\n\t\t}\n\t\t// Clear the holder so the hoisted sidebar disappears when\n\t\t// the user navigates away from the index page.\n\t\tif (this.cnHostsIndexSidebar && this.cnIndexSidebarConfig) {\n\t\t\tthis.cnIndexSidebarConfig.value = null\n\t\t}\n\t\tapplyAiContext(this.cnAiContext, 'custom')\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * On mount: open on a source option the page defaults to\n\t\t * (`default: true`, unless the address carries an order of its own),\n\t\t * and read an annotating source's rows for the other orders.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\topenSortSource() {\n\t\t\tif (!this.isSelfFetchMode || this.sourceSortOptions.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst query = (this.$route && this.$route.query) || {}\n\t\t\tconst preferred = this.sourceSortOptions.find((o) => o.default === true)\n\t\t\tif (preferred && !query._order) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: String(preferred.value), page: 1 }\n\t\t\t\tthis.loadSortSource(preferred)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst annotating = this.sourceSortOptions.find((o) => o.source.annotate === true)\n\t\t\tif (annotating) {\n\t\t\t\tthis.loadSortSource(annotating)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read a source option's rows. A failure while that option is chosen\n\t\t * orders the self-fetched list by the option's `order` instead.\n\t\t *\n\t\t * @param {object} option The sort option.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tasync loadSortSource(option) {\n\t\t\tconst source = option.source\n\t\t\tthis.sortSource = { ...this.sortSource, state: 'loading' }\n\t\t\ttry {\n\t\t\t\tconst [{ default: axios }, { generateUrl }] = await Promise.all([\n\t\t\t\t\timport('@nextcloud/axios'),\n\t\t\t\t\timport('@nextcloud/router'),\n\t\t\t\t])\n\t\t\t\tconst res = await axios.get(generateUrl(source.url), { params: { ...(source.params || {}), ...this.lensSourceParams } })\n\t\t\t\tthis.sortSource = { ...this.sortSource, rows: rowsFromSourceBody(res ? res.data : null, source), state: 'ready' }\n\t\t\t} catch (error) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, rows: [], state: 'failed' }\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(`[CnIndexPage] the sort option \"${option.value}\" could not load ${source.url}`, error)\n\t\t\t\tif (this.sortSource.value === String(option.value)) {\n\t\t\t\t\tconst keys = orderToSortKeys(option.order)\n\t\t\t\t\tif (keys.length > 0 && typeof this.list.onSort === 'function') {\n\t\t\t\t\t\tthis.list.onSort({ key: keys[0].key, order: keys[0].order, keys })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Back to the first page of the source rows, after a new search or filter.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tresetSortSourcePage() {\n\t\t\tif (this.sortSource.page !== 1) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, page: 1 }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * A presentation value: the active scope's when it declares the key,\n\t\t * else this page's own prop (which a query preset may have set).\n\t\t *\n\t\t * @param {string} key One of the query preset keys.\n\t\t * @return {unknown} The value.\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation\n\t\t */\n\t\tpresented(key) {\n\t\t\tconst scoped = this.activeScopePresentation\n\t\t\treturn scoped[key] !== undefined ? scoped[key] : this.ownPresentation[key]\n\t\t},\n\n\t\t/**\n\t\t * Whether a filter value is one of the query pairs that chose the\n\t\t * preset, so it shows no removable chip.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {unknown} value One filter value.\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-the-query-that-chose-a-preset-is-not-a-removable-filter\n\t\t */\n\t\tisFixedFilter(key, value) {\n\t\t\tconst fixed = this.fixedFilters\n\t\t\tif (!fixed || !Object.hasOwn(fixed, key)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// A range (`{ from, to }`) is compared whole: String() would make every object equal.\n\t\t\tif (value !== null && typeof value === 'object') {\n\t\t\t\treturn JSON.stringify(fixed[key]) === JSON.stringify(value)\n\t\t\t}\n\t\t\treturn String(fixed[key]) === String(value)\n\t\t},\n\n\t\t/**\n\t\t * The manifest page that shows one object of a schema, for a linked\n\t\t * label. Null without a manifest or a matching detail page.\n\t\t *\n\t\t * @param {string} schema Schema slug of the referenced objects.\n\t\t * @return {string|null} The page id.\n\t\t */\n\t\tdetailRouteFor(schema) {\n\t\t\tconst pages = this.cnManifest && Array.isArray(this.cnManifest.pages) ? this.cnManifest.pages : []\n\t\t\tconst page = pages.find((p) => p && p.type === 'detail' && p.config && String(p.config.schema) === String(schema))\n\t\t\treturn page ? page.id : null\n\t\t},\n\n\t\t/**\n\t\t * Fetch the labels the reference columns need: one request per\n\t\t * referenced schema, for the rows on screen. A failure leaves ids as is.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2\n\t\t */\n\t\tasync loadRefLabels() {\n\t\t\tconst specs = [...this.refLabelSpecs, ...this.activeFilterRefSpecs]\n\t\t\tif (specs.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this._refLabelResolver) {\n\t\t\t\tthis._refLabelResolver = createRefLabelResolver(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tawait Promise.all(specs.map(async (spec) => {\n\t\t\t\tconst known = this.refLabels[spec.key] || {}\n\t\t\t\tconst wanted = new Set([...(this.refLabelIds[spec.key] || []), ...(this.activeFilterRefIds[spec.key] || [])])\n\t\t\t\tconst ids = [...wanted].filter((id) => !Object.hasOwn(known, id))\n\t\t\t\tif (ids.length === 0) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst found = await this._refLabelResolver.resolve(spec.register, spec.schema, ids, spec.labelField)\n\t\t\t\tthis.refLabels = { ...this.refLabels, [spec.key]: { ...(this.refLabels[spec.key] || {}), ...found } }\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Read the colour and icon names `refLookSpecs` columns need, for the\n\t\t * rows on screen, with the same resolver as the labels. A failure\n\t\t * leaves the badge as declared.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/pill-color-field/specs/pill-color-field/spec.md#requirement-a-badge-cell-takes-its-tone-and-icon-from-the-referenced-record\n\t\t */\n\t\tasync loadRefLooks() {\n\t\t\tif (this.refLookSpecs.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this._refLabelResolver) {\n\t\t\t\tthis._refLabelResolver = createRefLabelResolver(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst read = (spec, ids, name) => (name\n\t\t\t\t? this._refLabelResolver.resolve(spec.register, spec.schema, ids, name, { strict: true }).catch(() => ({}))\n\t\t\t\t: Promise.resolve({}))\n\t\t\tawait Promise.all(this.refLookSpecs.map(async (spec) => {\n\t\t\t\tconst known = this.refLooks[spec.key] || {}\n\t\t\t\tconst ids = (this.refLookIds[spec.key] || []).filter((id) => !Object.hasOwn(known, id))\n\t\t\t\tif (ids.length === 0) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst [colors, icons] = await Promise.all([read(spec, ids, spec.colorField), read(spec, ids, spec.iconField)])\n\t\t\t\tconst found = {}\n\t\t\t\tids.forEach((id) => {\n\t\t\t\t\tfound[id] = { color: (colors && colors[id]) || null, icon: (icons && icons[id]) || null }\n\t\t\t\t})\n\t\t\t\tthis.refLooks = { ...this.refLooks, [spec.key]: { ...(this.refLooks[spec.key] || {}), ...found } }\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Whether a saved view shows its record count (`viewCounts`).\n\t\t *\n\t\t * @param {string} id The view id.\n\t\t * @return {boolean} True when the view opted in.\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tviewWantsCount(id) {\n\t\t\tif (this.viewCounts === true) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Array.isArray(this.viewCounts) && this.viewCounts.map(String).includes(String(id))\n\t\t},\n\n\t\t/**\n\t\t * Build the `quickFiltersFrom` tabs: the field's distinct values with\n\t\t * their counts in one grouped request, labelled through the\n\t\t * reference-label resolver when the values are record ids. A failed\n\t\t * request draws no tabs.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values\n\t\t */\n\t\tasync loadGeneratedQuickFilters() {\n\t\t\tconst key = this.quickFiltersFromKey\n\t\t\tconst schema = this.exportSchemaSlug\n\t\t\tif (key === '' || !this.register || !schema) {\n\t\t\t\tthis.generatedQuickFilters = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst from = this.quickFiltersFrom\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tlet groups\n\t\t\ttry {\n\t\t\t\tgroups = await fetchGroupedCounts({ register: this.register, schema, groupBy: from.field, filter: resolveFilterMap(this.filter, params, ctx) }, ctx)\n\t\t\t} catch {\n\t\t\t\tgroups = []\n\t\t\t}\n\t\t\tlet labels = {}\n\t\t\tif (from.register && from.schema && from.valueField && groups.length > 0) {\n\t\t\t\tlabels = await labelsByField({ register: from.register, schema: from.schema, field: from.valueField, values: groups.map((g) => g.key), labelField: from.labelField || '' }).catch(() => ({}))\n\t\t\t} else if (from.register && from.schema && groups.length > 0) {\n\t\t\t\tif (!this._quickFilterLabelResolver) {\n\t\t\t\t\tthis._quickFilterLabelResolver = createRefLabelResolver(() => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tlabels = await this._quickFilterLabelResolver.resolve(from.register, from.schema, groups.map((g) => g.key), from.labelField || '').catch(() => ({}))\n\t\t\t}\n\t\t\tif (key !== this.quickFiltersFromKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (groups.length === 0) {\n\t\t\t\tthis.generatedQuickFilters = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst sorted = [...groups].sort((a, b) => b.count - a.count)\n\t\t\tconst total = sorted.reduce((sum, g) => sum + g.count, 0)\n\t\t\tthis.generatedQuickFilters = [\n\t\t\t\t{ label: from.allLabel || t('nextcloud-vue', 'All'), filter: {}, default: true, count: total },\n\t\t\t\t...sorted.map((g) => ({ label: (labels && labels[g.key]) || g.key, filter: { [from.field]: g.key }, count: g.count })),\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * Whether Nextcloud says the user administers this instance; false\n\t\t * when the user cannot be read.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tviewerIsAdmin() {\n\t\t\ttry {\n\t\t\t\treturn getCurrentUser()?.isAdmin === true\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a manifest page tab shows to this user: an `adminOnly` tab to\n\t\t * an instance admin, a tab with a `permission` to a user who holds it\n\t\t * (as a menu entry: with no permissions known, it shows). This only\n\t\t * decides whether the tab is drawn. It is not access control; the\n\t\t * page behind the tab must enforce its own access on the server.\n\t\t *\n\t\t * @param {object} tab The tab declaration.\n\t\t * @return {boolean} True when the tab is drawn.\n\t\t */\n\t\tpageTabVisible(tab) {\n\t\t\tif (tab.adminOnly === true && !this.viewerIsAdmin()) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (tab.permission) {\n\t\t\t\tconst held = Array.isArray(this.cnPermissions) ? this.cnPermissions : []\n\t\t\t\tif (held.length > 0 && !held.includes(tab.permission)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Read the totals of the lists `headerMetaCounts` names, one list\n\t\t * request each. A failed count is null and leaves the note out.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadHeaderMetaCounts() {\n\t\t\tconst key = this.headerMetaCountKey\n\t\t\tif (key === '') {\n\t\t\t\tthis.headerMetaCountValues = {}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst values = {}\n\t\t\tawait Promise.all(JSON.parse(key).map(async ([name, from]) => {\n\t\t\t\tvalues[name] = await fetchListTotal(from.register, from.schema, from.filter || {}, ctx).catch(() => null)\n\t\t\t}))\n\t\t\tif (key === this.headerMetaCountKey) {\n\t\t\t\tthis.headerMetaCountValues = values\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Count the lists behind the manifest page tabs (`countFrom`), one list\n\t\t * request each. A failed count shows no number.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\tasync loadPageTabCounts() {\n\t\t\tconst key = this.pageTabCountKey\n\t\t\tif (key === '') {\n\t\t\t\tthis.pageTabCounts = {}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst counts = {}\n\t\t\tawait Promise.all(this.pageTabs.map(async (tab, index) => {\n\t\t\t\tconst from = tab && tab.countFrom\n\t\t\t\tif (from && from.register && from.schema) {\n\t\t\t\t\tcounts[index] = await fetchListTotal(from.register, from.schema, from.filter || {}, ctx).catch(() => null)\n\t\t\t\t}\n\t\t\t}))\n\t\t\tif (key === this.pageTabCountKey) {\n\t\t\t\tthis.pageTabCounts = counts\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read the counts of the `filterStrip` pills in one grouped request,\n\t\t * narrowed by the page filter and the active quick filter. A failed\n\t\t * count leaves that pill without a number.\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadFilterStripCounts() {\n\t\t\tconst requestKey = this.filterStripCountKey\n\t\t\tconst schema = this.exportSchemaSlug\n\t\t\tif (requestKey === '' || !this.register || !schema) {\n\t\t\t\tthis.filterStripCounts = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst field = this.filterStrip.field\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst base = { ...resolveFilterMap(this.filter, params, ctx), ...resolveFilterMap(this.filterStripTabFilter, params, ctx) }\n\t\t\tconst entries = [\n\t\t\t\t{ key: 'all', filter: {} },\n\t\t\t\t...this.filterStripValues.map((option, index) => ({ key: `v${index}`, filter: { [field]: option.value } })),\n\t\t\t]\n\t\t\tlet counts\n\t\t\ttry {\n\t\t\t\tcounts = await fetchFilterCounts({ register: this.register, schema, entries, baseFilter: base, ctx })\n\t\t\t} catch {\n\t\t\t\tcounts = {}\n\t\t\t}\n\t\t\tif (requestKey !== this.filterStripCountKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.filterStripCounts = counts\n\t\t},\n\n\t\t/**\n\t\t * A pill of the `filterStrip` was picked: filter the list on that value,\n\t\t * or clear the field's filter for All.\n\t\t *\n\t\t * @param {string} value The value, '' for All.\n\t\t * @return {void}\n\t\t */\n\t\tonFilterStripPick(value) {\n\t\t\tthis.onFilterEvent({ key: this.filterStrip.field, values: value === '' ? [] : [value] })\n\t\t},\n\n\t\t/**\n\t\t * Fetch the record counts for the filters and views that asked for\n\t\t * one. Filters that narrow the same single field share one grouped\n\t\t * request. A failed count leaves that entry without a number.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tasync loadFilterCounts() {\n\t\t\tconst requestKey = this.countRequestKey\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tawait this.loadNamedSourceCounts(requestKey)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst schema = this.exportSchemaSlug\n\t\t\tif (requestKey === '' || !this.register || !schema) {\n\t\t\t\tthis.tabCounts = null\n\t\t\t\tthis.savedViewCounts = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst counts = await fetchFilterCounts({\n\t\t\t\tregister: this.register,\n\t\t\t\tschema,\n\t\t\t\tentries: this.countEntries.map((entry) => ({ key: entry.key, filter: resolveFilterMap(entry.filter, params, ctx) })),\n\t\t\t\tbaseFilter: resolveFilterMap(this.filter, params, ctx),\n\t\t\t\tctx,\n\t\t\t})\n\t\t\tif (requestKey !== this.countRequestKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst tabCounts = {}\n\t\t\tconst viewCounts = {}\n\t\t\tfor (const [key, value] of Object.entries(counts)) {\n\t\t\t\tif (key.startsWith('tab:')) {\n\t\t\t\t\ttabCounts[Number(key.slice(4))] = value\n\t\t\t\t} else {\n\t\t\t\t\tviewCounts[key.slice(5)] = value\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.tabCounts = tabCounts\n\t\t\tthis.savedViewCounts = viewCounts\n\t\t},\n\n\t\t/**\n\t\t * The quick-filter counts of a named source (`entitySource`): each tab\n\t\t * that asks is counted by the source's own `count(config)`, with the\n\t\t * tab's filter over `sourceConfig`. A source without `count` shows\n\t\t * none; a failed count leaves that tab without a number.\n\t\t *\n\t\t * @param {string} requestKey The `countRequestKey` this load answers.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-a-named-source-counts-its-quick-filters\n\t\t */\n\t\tasync loadNamedSourceCounts(requestKey) {\n\t\t\tconst count = this.namedSource ? this.namedSource.count : null\n\t\t\tif (requestKey === '' || typeof count !== 'function') {\n\t\t\t\tthis.tabCounts = null\n\t\t\t\tthis.savedViewCounts = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst tabCounts = {}\n\t\t\tawait Promise.all(this.countEntries\n\t\t\t\t.filter((entry) => entry.key.startsWith('tab:'))\n\t\t\t\t.map(async (entry) => {\n\t\t\t\t\tconst config = resolveFilterMap({ ...(this.sourceConfig || {}), ...(entry.filter || {}) }, params, ctx)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst total = await count(config)\n\t\t\t\t\t\tif (Number.isFinite(total)) {\n\t\t\t\t\t\t\ttabCounts[Number(entry.key.slice(4))] = total\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// No number for this tab.\n\t\t\t\t\t}\n\t\t\t\t}))\n\t\t\tif (requestKey !== this.countRequestKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.tabCounts = tabCounts\n\t\t\tthis.savedViewCounts = null\n\t\t},\n\n\t\t// ── Split view (case-page-and-list-as-a-place) ──────────────────\n\n\t\t/**\n\t\t * Measure the viewport so the narrow fallback follows a resize and\n\t\t * not only a reload. Measured rather than read off a media query\n\t\t * because the breakpoint is the page's own declaration, not a global.\n\t\t *\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmeasureSplitViewport() {\n\t\t\tif (typeof window !== 'undefined' && Number.isFinite(window.innerWidth)) {\n\t\t\t\tthis.splitViewportWidth = window.innerWidth\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remember where the list is scrolled to.\n\t\t *\n\t\t * The list never unmounts, so the browser keeps the scroll on its\n\t\t * own in the split layout. It does NOT keep it across the narrow\n\t\t * layout, where the element is hidden and has no scroll height at\n\t\t * all, so the position is held here and put back on the way out.\n\t\t *\n\t\t * @param {Event} [event] The scroll event.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tonListScroll(event) {\n\t\t\tconst top = event?.target?.scrollTop\n\t\t\tif (Number.isFinite(top)) {\n\t\t\t\tthis.splitScrollTop = top\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Put the list back where it was.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tasync restoreListScroll() {\n\t\t\tawait this.$nextTick()\n\t\t\tconst el = this.$refs.listScroll\n\t\t\tif (el && Number.isFinite(this.splitScrollTop) && this.splitScrollTop > 0) {\n\t\t\t\tel.scrollTop = this.splitScrollTop\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Close the pane and go back to the list's own address.\n\t\t *\n\t\t * The list is already mounted and already at row 180, so this is a\n\t\t * route change and nothing else: no refetch, no remount, no reset.\n\t\t *\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tcloseSplitPane() {\n\t\t\t/**\n\t\t\t * @event split-close Emitted when the split pane is closed. The host returns to the list address.\n\t\t\t */\n\t\t\tthis.$emit('split-close')\n\t\t\tconst router = this.$router\n\t\t\tconst target = this.splitCloseRoute || this.$route?.meta?.cnPageId || null\n\t\t\tif (router && target) {\n\t\t\t\trouter.push({ name: target, query: this.$route?.query || {} }).catch(() => {})\n\t\t\t}\n\t\t\tthis.restoreListScroll()\n\t\t},\n\n\t\t/**\n\t\t * A record was saved in the pane: replace its row where it sits.\n\t\t *\n\t\t * Deliberately not a refetch. Refetching the page would be correct\n\t\t * and would also scroll the handler back to the top of four hundred\n\t\t * cases, which is the failure the split view was built to end.\n\t\t *\n\t\t * @param {object} saved The saved record.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tonSplitPaneSaved(saved) {\n\t\t\tconst id = rowIdOf(saved, this.rowKey) ?? (this.splitId || null)\n\t\t\tif (id === null || !saved || typeof saved !== 'object') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.splitRowPatches = { ...this.splitRowPatches, [id]: saved }\n\t\t\t/**\n\t\t\t * @event split-saved Emitted after a record saved in the pane was written onto its row in the list.\n\t\t\t * @type {object}\n\t\t\t */\n\t\t\tthis.$emit('split-saved', saved)\n\t\t},\n\n\t\t// ── Manual order (case-page-and-list-as-a-place) ────────────────\n\n\t\t/**\n\t\t * The key this list's manual order is held under.\n\t\t *\n\t\t * @return {string} The preference key.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmanualOrderPreferenceKey() {\n\t\t\treturn manualOrderKey(this.manualOrderId || this.objectType || this.schema || 'default')\n\t\t},\n\n\t\t/**\n\t\t * Read this person's order for this list out of their preferences.\n\t\t *\n\t\t * A read that fails leaves the list in its loaded order rather than\n\t\t * blocking it: an order nobody can read is a nicety, and a list that\n\t\t * refuses to render because of one is not.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tasync loadManualOrder() {\n\t\t\tif (!this.manualOrder) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst read = this.cnUserPreferences?.read\n\t\t\tif (typeof read !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst stored = await read(this.manualOrderPreferenceKey(), [])\n\t\t\t\tthis.manualOrderIds = Array.isArray(stored) ? stored.map(String) : []\n\t\t\t} catch {\n\t\t\t\tthis.manualOrderIds = []\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Write this person's order back, and tell the host.\n\t\t *\n\t\t * @param {Array<string>} ids The new order.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tasync persistManualOrder(ids) {\n\t\t\tthis.manualOrderIds = ids\n\t\t\t/**\n\t\t\t * @event manual-order-change Emitted when this person reorders the list by hand. Payload is the row ids in their order.\n\t\t\t * @type {Array<string>}\n\t\t\t */\n\t\t\tthis.$emit('manual-order-change', ids)\n\t\t\tconst write = this.cnUserPreferences?.write\n\t\t\tif (typeof write === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait write(this.manualOrderPreferenceKey(), ids)\n\t\t\t\t} catch {\n\t\t\t\t\t// A preference that could not be written is a preference\n\t\t\t\t\t// that will not survive the reload. The list is still in\n\t\t\t\t\t// the order the person just chose, so nothing is said.\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Move a row one place up or down. The keyboard half of the drag, and\n\t\t * the one the drag itself calls, so the two cannot disagree.\n\t\t *\n\t\t * @param {string} id The row being moved.\n\t\t * @param {number} delta -1 for up, 1 for down.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmoveRowByHand(id, delta) {\n\t\t\treturn this.persistManualOrder(moveInOrder(visibleIdsOf(this.displayObjects, this.rowKey), id, delta))\n\t\t},\n\n\t\t/**\n\t\t * Place a dragged row at an index.\n\t\t *\n\t\t * @param {string} id The row being dragged.\n\t\t * @param {number} toIndex The index it was dropped at.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tdropRowByHand(id, toIndex) {\n\t\t\treturn this.persistManualOrder(dropInOrder(visibleIdsOf(this.displayObjects, this.rowKey), id, toIndex))\n\t\t},\n\n\t\t/**\n\t\t * Resolve a component the page config names — `cardComponent`,\n\t\t * `listComponent` — out of the v2 registry (any kind carrying a\n\t\t * `component`, as a slot lookup does) and then the legacy\n\t\t * customComponents map.\n\t\t *\n\t\t * @param {string} name The registered component name.\n\t\t * @return {object|null} The component, or null when nothing answers.\n\t\t */\n\t\tresolveNamedComponent(name) {\n\t\t\tconst entry = this.effectiveRegistry[name]\n\t\t\tif (entry && entry.component) {\n\t\t\t\treturn entry.component\n\t\t\t}\n\t\t\treturn this.effectiveCustomComponents[name] || null\n\t\t},\n\n\t\t/**\n\t\t * Whether a handler name matches something registered that is not\n\t\t * callable — a named component where a function belongs. Tells a\n\t\t * typo (silent emit-only) apart from a mis-registration (warned).\n\t\t *\n\t\t * @param {string} name The handler name from the manifest.\n\t\t * @return {boolean}\n\t\t */\n\t\tnamesSomethingUnusable(name) {\n\t\t\tconst candidates = [this.effectiveRegistry[name], this.resolvedCustomComponents[name]]\n\t\t\treturn candidates.some((v) => v !== undefined && v !== null)\n\t\t},\n\n\t\t/**\n\t\t * Resolve a declarative `headerActions[]` entry's `handler`\n\t\t * field into the final dispatchable shape. Mirrors the\n\t\t * row-level `actions[].handler` keyword set used by\n\t\t * manifest-actions-dispatch — `navigate`, `emit`, `none`, or a\n\t\t * registry name (resolved through `resolveRegisteredHandler`).\n\t\t *\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @param {object} entry Raw headerActions entry.\n\t\t * @return {object} Possibly-mutated copy: an `href` becomes a\n\t\t * resolved link with `linkTarget`, no handler (a function one\n\t\t * included) and `_dispatchSuppress: true`; function-typed\n\t\t * handlers untouched; `'emit'` and unknown registry names\n\t\t * strip the `handler` (emit-only fall-through); `'navigate'`\n\t\t * becomes a `$router.push` thunk (with the entry's literal\n\t\t * `params` map when present); `'none'` becomes a no-op +\n\t\t * `_dispatchSuppress: true`; a registry name resolves to a\n\t\t * `fn({ actionId })` thunk.\n\t\t */\n\t\tresolveHeaderHandler(entry) {\n\t\t\tif (!entry) {\n\t\t\t\treturn entry\n\t\t\t}\n\t\t\t// An `href` makes the entry a link, which only navigates: it\n\t\t\t// carries no handler, and the page emits nothing for it.\n\t\t\tif (typeof entry.href === 'string' && entry.href !== '') {\n\t\t\t\tconst link = headerActionAsLink(entry)\n\t\t\t\treturn link.href ? { ...link, linkTarget: link.target, _dispatchSuppress: true } : link\n\t\t\t}\n\t\t\tconst handler = entry.handler\n\t\t\tif (typeof handler === 'function') {\n\t\t\t\treturn { ...entry }\n\t\t\t}\n\t\t\t// `type: \"navigate\"` with a `target` URL is a link: the bar and the\n\t\t\t// header's Actions menu render it as a real anchor, an external URL\n\t\t\t// in a new tab.\n\t\t\tif (typeof handler !== 'string' && entry.type === 'navigate' && typeof entry.target === 'string' && entry.target !== '' && !entry.href) {\n\t\t\t\treturn isExternalActionTarget(entry.target)\n\t\t\t\t\t? { ...entry, href: entry.target, linkTarget: '_blank' }\n\t\t\t\t\t: { ...entry, href: entry.target }\n\t\t\t}\n\t\t\tif (typeof handler !== 'string') {\n\t\t\t\t// No handler declared — emit-only fall-through.\n\t\t\t\treturn { ...entry }\n\t\t\t}\n\t\t\tif (handler === 'navigate') {\n\t\t\t\tif (!entry.route) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`CnIndexPage: headerActions[].id \"${entry.id}\" handler:\"navigate\" requires \"route\"; falling back to emit-only`)\n\t\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\t\treturn { ...rest }\n\t\t\t\t}\n\t\t\t\tconst route = entry.route\n\t\t\t\tconst router = this.$router\n\t\t\t\t// Literal params let a header action navigate to a detail route\n\t\t\t\t// with fixed params, e.g. a \"New X\" button → `{ id: \"new\" }`.\n\t\t\t\tconst params = (entry.params && typeof entry.params === 'object') ? entry.params : null\n\t\t\t\tconst location = params ? { name: route, params } : { name: route }\n\t\t\t\t// A resolvable route renders as a real link in the bar, which does\n\t\t\t\t// the navigating; the entry then carries no handler to push again.\n\t\t\t\tif (routeHref(location, router)) {\n\t\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\t\treturn { ...rest, to: location }\n\t\t\t\t}\n\t\t\t\tconst out = { ...entry }\n\t\t\t\tout.handler = () => {\n\t\t\t\t\tif (router && typeof router.push === 'function') {\n\t\t\t\t\t\trouter.push(location)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn out\n\t\t\t}\n\t\t\tif (handler === 'emit') {\n\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\treturn { ...rest }\n\t\t\t}\n\t\t\tif (handler === 'none') {\n\t\t\t\treturn { ...entry, handler: () => {}, _dispatchSuppress: true }\n\t\t\t}\n\t\t\t// Registry name lookup.\n\t\t\tconst resolved = resolveRegisteredHandler(handler, this.effectiveRegistry, this.resolvedCustomComponents)\n\t\t\tif (typeof resolved === 'function') {\n\t\t\t\tconst id = entry.id\n\t\t\t\treturn { ...entry, handler: () => resolved({ actionId: id }) }\n\t\t\t}\n\t\t\tif (this.namesSomethingUnusable(handler)) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`CnIndexPage: headerActions[].handler \"${handler}\" resolved to a non-function in the registry or customComponents; falling back to emit-only`)\n\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\treturn { ...rest }\n\t\t\t}\n\t\t\t// Unknown registry name — silent emit-only fall-through.\n\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\treturn { ...rest }\n\t\t},\n\n\t\t/**\n\t\t * Click dispatch from CnActionsBar's `@bulk-action`.\n\t\t *\n\t\t * 🔴 THE SELECTION IS PASSED, NEVER LOOKED UP. Everything a bulk\n\t\t * action does is defined by which rows were selected, and the strip\n\t\t * that raised the event is the thing that knows. A handler that reads\n\t\t * the selection from somewhere else is one re-render away from acting\n\t\t * on a different set than the user saw highlighted.\n\t\t *\n\t\t * Resolution mirrors `headerActions[]`:\n\t\t * - a function handler is called with `{ actionId, selectedIds, count }`\n\t\t * - `open-modal` (with `target`) opens the registered modal, with the\n\t\t * selection merged into its props\n\t\t * - a registry name resolves through the v2 registry, then the\n\t\t * legacy `customComponents`\n\t\t * - anything else falls through to emit-only\n\t\t *\n\t\t * `bulk-action` is emitted either way, so a host can listen instead of\n\t\t * declaring a handler.\n\t\t *\n\t\t * @param {{id: string, action: string, selectedIds: Array, count: number}} payload Bar payload.\n\t\t */\n\t\tonBulkAction(payload) {\n\t\t\tconst id = payload && (payload.id ?? payload.action)\n\t\t\tconst selectedIds = (payload && Array.isArray(payload.selectedIds)) ? payload.selectedIds : []\n\t\t\tconst count = selectedIds.length\n\t\t\tconst entry = this.mergedBulkActions.find((e) => e.id === id)\n\n\t\t\tif (entry) {\n\t\t\t\tconst handler = entry.handler\n\t\t\t\tconst scope = { actionId: id, selectedIds, count }\n\n\t\t\t\tif (typeof handler === 'function') {\n\t\t\t\t\thandler(scope)\n\t\t\t\t} else if (handler === 'open-modal' || (!handler && entry.target)) {\n\t\t\t\t\tthis.openBulkModal(entry, selectedIds, count)\n\t\t\t\t} else if (typeof handler === 'string' && handler !== 'emit' && handler !== 'none') {\n\t\t\t\t\tconst resolved = resolveRegisteredHandler(handler, this.effectiveRegistry, this.resolvedCustomComponents)\n\t\t\t\t\tif (typeof resolved === 'function') {\n\t\t\t\t\t\tresolved(scope)\n\t\t\t\t\t} else if (this.namesSomethingUnusable(handler)) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].handler \"${handler}\" resolved to a non-function in the registry or customComponents; falling back to emit-only`)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (entry._dispatchSuppress || entry.handler === 'none') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @event bulk-action A declarative bulk action was triggered from the selection strip. Payload: `{ action, id, selectedIds, count }`. The SELECTION travels with it, because an action that has to go and find out what was selected is one re-render away from acting on a different set than the user saw highlighted.\n\t\t\t */\n\t\t\tthis.$emit('bulk-action', { action: id, id, selectedIds, count })\n\t\t},\n\n\t\t/**\n\t\t * Open a bulk action's modal with the selection in its props.\n\t\t *\n\t\t * The selection is merged UNDER the entry's own props, so a manifest\n\t\t * that names a `selectedIds` prop of its own still wins — but it also\n\t\t * means such a manifest silently stops receiving the live selection,\n\t\t * which is why the collision is warned about rather than allowed\n\t\t * quietly.\n\t\t *\n\t\t * @param {object} entry The bulk action entry.\n\t\t * @param {Array} selectedIds The current selection.\n\t\t * @param {number} count Its length.\n\t\t */\n\t\topenBulkModal(entry, selectedIds, count) {\n\t\t\tconst target = entry.target\n\t\t\tif (!target) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].id \"${entry.id}\" handler:\"open-modal\" requires \"target\"; falling back to emit-only`)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst own = (entry.props && typeof entry.props === 'object') ? entry.props : {}\n\t\t\tif (Object.hasOwn(own, 'selectedIds')) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].id \"${entry.id}\" declares its own \"selectedIds\" prop, which shadows the live selection; the modal will not see what the user selected.`)\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event open-modal A bulk action of type `open-modal` asks the host to open a registered modal. Payload: `{ target, props }`, where `props` carries `selectedIds` and `count` merged UNDER the action's own props.\n\t\t\t */\n\t\t\tthis.$emit('open-modal', { target, props: { selectedIds, count, ...own } })\n\t\t},\n\n\t\t/**\n\t\t * Whether a shown header button takes `action` over from the bar.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @param {string} action The action, e.g. `add`.\n\t\t * @return {boolean}\n\t\t */\n\t\theaderButtonTakes(action) {\n\t\t\treturn this.headerButtonsShown && this.resolvedHeaderButtons.some((button) => button.action === action)\n\t\t},\n\n\t\t/**\n\t\t * The entries of the header's Actions menu (`headerButtons[]` with\n\t\t * `action: \"actions-menu\"`). Without `items` they are the page's header\n\t\t * actions, as before. `items` names them, in order: `header-actions`\n\t\t * (all of them), the id of one header action, or a built-in of the\n\t\t * actions bar's own menu, which the bar drops while header buttons show:\n\t\t * `import`, `export`, `refresh`, `copy-selected`, `export-selected`,\n\t\t * `delete-selected` (the three disabled until a row is selected) and `documentation` (a link to\n\t\t * `documentationUrl`, left out when the page has none). An unknown name\n\t\t * is left out. `{ heading }` and `separator` group the entries: an\n\t\t * entry of `kind` `heading` or `separator`, drawn only when an entry\n\t\t * follows it.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-header-actions-menu/specs/index-header/spec.md#requirement-the-header-actions-menu-lists-what-its-items-name\n\t\t * @spec openspec/changes/screens-index-header-menu-headings/specs/index-header/spec.md#requirement-the-header-actions-menu-can-draw-group-headings-and-separators\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @param {{items?: Array<(string|{heading: string})>|null, format?: string}} button The resolved header button.\n\t\t * @return {Array<{key: string, label: string, kind?: ('heading'|'separator'), icon?: string, href?: string, linkTarget?: string, disabled?: boolean, title?: string, iconComponent?: object, run?: () => void}>}\n\t\t */\n\t\theaderMenuEntries(button) {\n\t\t\tconst fromAction = (entry) => ({\n\t\t\t\tkey: String(entry.id),\n\t\t\t\tlabel: entry.label ? this.cnTranslate(entry.label) : '',\n\t\t\t\ticon: entry.icon && typeof entry.icon === 'string' && !entry.icon.startsWith('icon-') ? entry.icon : '',\n\t\t\t\thref: typeof entry.href === 'string' && entry.href !== '' ? entry.href : '',\n\t\t\t\tlinkTarget: entry.linkTarget || '',\n\t\t\t\t// A `handler: \"navigate\"` entry whose route resolves carries `to`\n\t\t\t\t// (resolveHeaderHandler drops its handler): the menu draws it as\n\t\t\t\t// an in-app link, as the actions bar does, so it navigates.\n\t\t\t\tlink: !entry.href && entry.to && !entry.disabled ? resolveItemActionLink({ to: entry.to }, null, this.$router) : null,\n\t\t\t\tdisabled: Boolean(entry.disabled),\n\t\t\t\trun: () => this.onHeaderAction({ action: entry.id, id: entry.id }),\n\t\t\t})\n\t\t\tconst names = button && Array.isArray(button.items) ? button.items : ['header-actions']\n\t\t\tconst noSelection = this.internalSelectedIds.length < 1\n\t\t\tconst builtIns = {\n\t\t\t\timport: () => ({ key: 'import', label: t('nextcloud-vue', 'Import'), icon: 'Import', iconComponent: ImportIcon, run: () => { this.showImportDialog = true } }),\n\t\t\t\texport: () => ({ key: 'export', label: t('nextcloud-vue', 'Export'), icon: 'Export', iconComponent: Export, run: () => this.onHeaderButton({ action: 'export', format: button.format }) }),\n\t\t\t\trefresh: () => ({ key: 'refresh', label: t('nextcloud-vue', 'Refresh'), icon: 'Refresh', run: () => this.onRefreshEvent() }),\n\t\t\t\t'copy-selected': () => ({\n\t\t\t\t\tkey: 'copy-selected',\n\t\t\t\t\tlabel: t('nextcloud-vue', 'Copy selected'),\n\t\t\t\t\ticon: 'ContentCopy',\n\t\t\t\t\tdisabled: noSelection,\n\t\t\t\t\ttitle: noSelection ? t('nextcloud-vue', 'Select 1 or more items to copy') : '',\n\t\t\t\t\trun: () => { this.showMassCopyDialog = true },\n\t\t\t\t}),\n\n\t\t\t\t// Offered only where the list's own export is: `allowExport`, an\n\t\t\t\t// exportable schema, and a register and schema to export from.\n\t\t\t\t'export-selected': () => {\n\t\t\t\t\tif (!this.showExportMenu) {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey: 'export-selected',\n\t\t\t\t\t\tlabel: t('nextcloud-vue', 'Export selection as JSON'),\n\t\t\t\t\t\ticon: 'Export',\n\t\t\t\t\t\ticonComponent: Export,\n\t\t\t\t\t\tdisabled: noSelection,\n\t\t\t\t\t\ttitle: noSelection ? t('nextcloud-vue', 'Select 1 or more items to export') : '',\n\t\t\t\t\t\trun: () => this.onExportSelected(),\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t'delete-selected': () => ({\n\t\t\t\t\tkey: 'delete-selected',\n\t\t\t\t\tlabel: t('nextcloud-vue', 'Delete selected'),\n\t\t\t\t\ticon: 'TrashCanOutline',\n\t\t\t\t\ticonComponent: TrashCanOutline,\n\t\t\t\t\tdisabled: noSelection,\n\t\t\t\t\ttitle: noSelection ? t('nextcloud-vue', 'Select 1 or more items to delete') : '',\n\t\t\t\t\trun: () => { this.showMassDeleteDialog = true },\n\t\t\t\t}),\n\n\t\t\t\tdocumentation: () => (this.documentationUrl\n\t\t\t\t\t? { key: 'documentation', label: this.documentationLabel || t('nextcloud-vue', 'Documentation'), icon: 'BookOpenVariantOutline', href: this.documentationUrl, linkTarget: '_blank' }\n\t\t\t\t\t: null),\n\t\t\t}\n\t\t\tconst entries = []\n\t\t\tconst seen = new Set()\n\t\t\tconst push = (entry) => {\n\t\t\t\tif (entry && entry.label !== '' && !seen.has(entry.key)) {\n\t\t\t\t\tseen.add(entry.key)\n\t\t\t\t\tentries.push(entry)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// A group heading (`{ heading }`) or a `separator` is kept as a mark\n\t\t\t// and only drawn when an entry follows it (see groupMenuEntries).\n\t\t\tlet mark = 0\n\t\t\tfor (const name of names) {\n\t\t\t\tif (name && typeof name === 'object') {\n\t\t\t\t\tmark += 1\n\t\t\t\t\tentries.push({ key: `__heading-${mark}`, kind: 'heading', label: this.cnTranslate(name.heading) })\n\t\t\t\t} else if (name === 'separator') {\n\t\t\t\t\tmark += 1\n\t\t\t\t\tentries.push({ key: `__separator-${mark}`, kind: 'separator', label: '' })\n\t\t\t\t} else if (name === 'header-actions') {\n\t\t\t\t\tthis.mergedHeaderActions.forEach((entry) => push(fromAction(entry)))\n\t\t\t\t} else if (Object.hasOwn(builtIns, name)) {\n\t\t\t\t\tpush(builtIns[name]())\n\t\t\t\t} else {\n\t\t\t\t\tconst entry = this.mergedHeaderActions.find((candidate) => candidate.id === name)\n\t\t\t\t\tif (entry) {\n\t\t\t\t\t\tpush(fromAction(entry))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.groupMenuEntries(entries)\n\t\t},\n\n\t\t/**\n\t\t * Tidy the marks of the header's Actions menu: a heading or separator\n\t\t * with no entry after it (before the next mark or the end) is dropped,\n\t\t * a separator never opens the menu, two separators in a row are one,\n\t\t * and a heading followed by a separator before any entry is dropped. So a group whose entries are all left out (no documentation\n\t\t * URL, an unknown id) leaves no empty heading or double rule behind,\n\t\t * and a menu of marks only has no entries and is not drawn.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-header-menu-headings/specs/index-header/spec.md#requirement-the-header-actions-menu-can-draw-group-headings-and-separators\n\t\t * @param {Array<{key: string, kind?: string}>} entries The entries with their marks, in order.\n\t\t * @return {Array<{key: string, kind?: string}>} The entries to draw.\n\t\t */\n\t\tgroupMenuEntries(entries) {\n\t\t\tconst out = []\n\t\t\tlet separator = null\n\t\t\tlet heading = null\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.kind === 'separator') {\n\t\t\t\t\t// A rule ends the group before it: a heading not yet followed\n\t\t\t\t\t// by an entry is dropped with it.\n\t\t\t\t\tseparator = entry\n\t\t\t\t\theading = null\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (entry.kind === 'heading') {\n\t\t\t\t\theading = entry\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (separator && out.length > 0) {\n\t\t\t\t\tout.push(separator)\n\t\t\t\t}\n\t\t\t\tif (heading) {\n\t\t\t\t\tout.push(heading)\n\t\t\t\t}\n\t\t\t\tseparator = null\n\t\t\t\theading = null\n\t\t\t\tout.push(entry)\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * An in-app link of the header's Actions menu was clicked: a plain click\n\t\t * goes through the router (a modified click is left to the browser),\n\t\t * and the entry is reported as a header action, as the actions bar does.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-header-actions-menu/specs/index-header/spec.md#requirement-the-header-actions-menu-lists-what-its-items-name\n\t\t * @param {{key: string, link: object}} entry The menu entry.\n\t\t * @param {MouseEvent} event The click.\n\t\t * @return {void}\n\t\t */\n\t\tonHeaderMenuLinkClick(entry, event) {\n\t\t\tif (isModifiedClick(event)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfollowItemActionLink(event, entry.link, this.$router)\n\t\t\tthis.$emit('header-action', { action: entry.key, id: entry.key })\n\t\t},\n\n\t\t/**\n\t\t * A header button was clicked: run its built-in action, or dispatch\n\t\t * it as the `headerActions` entry with that id. A button that is a\n\t\t * link is left to the browser.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @param {{action: string, format: string, link?: object}} button The resolved button.\n\t\t * @return {void}\n\t\t */\n\t\tonHeaderButton(button) {\n\t\t\tif (button.link) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (button.action === 'add') {\n\t\t\t\tthis.onAddClick()\n\t\t\t} else if (button.action === 'export') {\n\t\t\t\tif (button.run) {\n\t\t\t\t\tthis.onHeaderAction({ action: button.run, id: button.run })\n\t\t\t\t} else if (this.register && this.exportSchemaSlug) {\n\t\t\t\t\tthis.onExportClick(button.format)\n\t\t\t\t} else if (this.isNamedSource && !this.hasMassExportListener()) {\n\t\t\t\t\tthis.downloadNamedRows()\n\t\t\t\t} else {\n\t\t\t\t\tthis.showExportDialog = true\n\t\t\t\t}\n\t\t\t} else if (button.action === 'import') {\n\t\t\t\tthis.showImportDialog = true\n\t\t\t} else if (button.action === 'refresh') {\n\t\t\t\tthis.onRefreshEvent()\n\t\t\t} else if (button.action === 'save-view') {\n\t\t\t\tthis.showSaveViewDialog = true\n\t\t\t} else {\n\t\t\t\tthis.onHeaderAction({ action: button.action, id: button.action })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a header Export has something to export through. Any page\n\t\t * listing OpenRegister objects (self-fetch or the consumer's\n\t\t * `objects`) keeps it; a named or endpoint source (`entitySource`)\n\t\t * needs a `run` naming one of the page's header actions, or a\n\t\t * `@mass-export` listener.\n\t\t *\n\t\t * @spec openspec/changes/index-header-export-source/specs/index-page/spec.md#requirement-a-header-export-is-drawn-only-when-it-can-export\n\t\t * @param {{run?: string}} button The resolved header button.\n\t\t * @return {boolean}\n\t\t */\n\t\theaderExportAvailable(button) {\n\t\t\tif (!this.isNamedSource || (button && button.run) || this.hasMassExportListener()) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// A named source exports the rows it holds as CSV (downloadNamedRows).\n\t\t\treturn this.renderedColumns.some((col) => col && typeof col.key === 'string' && col.key !== '')\n\t\t},\n\n\t\t/**\n\t\t * Whether the consumer listens to `@mass-export`.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasMassExportListener() {\n\t\t\tconst props = this.$ && this.$.vnode && this.$.vnode.props\n\t\t\treturn Boolean(props && typeof props.onMassExport === 'function')\n\t\t},\n\n\t\t/**\n\t\t * Download the rows of a named or endpoint source as CSV: every row the\n\t\t * source holds for the current query, with the table's columns. Such a\n\t\t * source has no server export, and a Download that does nothing is\n\t\t * worse than none.\n\t\t *\n\t\t * @spec openspec/changes/index-named-source-export/specs/index-named-source-export/spec.md#requirement-a-named-source-list-downloads-its-rows\n\t\t * @return {void}\n\t\t */\n\t\tdownloadNamedRows() {\n\t\t\tconst csv = rowsToCsv(this.namedRows, this.renderedColumns)\n\t\t\tconst blob = new Blob(['\\uFEFF' + csv], { type: 'text/csv;charset=utf-8' })\n\t\t\tconst url = URL.createObjectURL(blob)\n\t\t\tconst link = document.createElement('a')\n\t\t\tconst name = String(this.title || this.entitySource || 'export').trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'export'\n\t\t\tlink.href = url\n\t\t\tlink.download = `${name}.csv`\n\t\t\tdocument.body.appendChild(link)\n\t\t\tlink.click()\n\t\t\tlink.remove()\n\t\t\tURL.revokeObjectURL(url)\n\t\t},\n\n\t\t/**\n\t\t * Click dispatch from CnActionsBar's `@header-action`. Looks\n\t\t * up the resolved entry by id. An `api-call` entry runs here, after\n\t\t * its confirmation when it sets `confirm`; any other invokes its\n\t\t * handler if any and (unless the entry is `'none'`-suppressed) emits\n\t\t * `@header-action({ action: id, id })` upward.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-an-index-page-runs-an-api-call-header-action\n\t\t * @param {{action: string, id: string}} payload Bar payload.\n\t\t * @return {Promise<void>|undefined} The call, for an api-call entry that runs now.\n\t\t */\n\t\tonHeaderAction(payload) {\n\t\t\tconst id = payload && (payload.id ?? payload.action)\n\t\t\tconst entry = this.mergedHeaderActions.find((e) => e.id === id)\n\t\t\tif (entry && entry.type === 'api-call') {\n\t\t\t\tif (entry.confirm === true) {\n\t\t\t\t\tthis.headerApiCallPending = entry\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\treturn this.runHeaderApiCall(entry)\n\t\t\t}\n\t\t\tif (entry && typeof entry.handler === 'function') {\n\t\t\t\tentry.handler()\n\t\t\t} else {\n\t\t\t\tconst dialogRun = this.dialogHeaderRuns.find((e) => e.id === id)\n\t\t\t\tif (dialogRun && typeof dialogRun.run === 'function') {\n\t\t\t\t\tdialogRun.run()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entry && entry._dispatchSuppress) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('header-action', { action: id, id })\n\t\t},\n\n\t\t/**\n\t\t * Run an `api-call` header action through the shared dispatcher, the\n\t\t * one detail and dashboard pages use: it calls the endpoint and shows\n\t\t * the action's success or error message, run through the app's\n\t\t * translate. A call that went through reloads the list, unless the\n\t\t * action sets `refresh: false`.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-an-index-page-runs-an-api-call-header-action\n\t\t * @param {object} entry The header action.\n\t\t * @return {Promise<{ok: boolean}>} The dispatcher's outcome.\n\t\t */\n\t\tasync runHeaderApiCall(entry) {\n\t\t\tconst outcome = (await dispatchSharedAction(entry, {\n\t\t\t\trouter: this.$router || null,\n\t\t\t\ttranslate: (text) => this.cnTranslate(text),\n\t\t\t\ttokenCtx: {},\n\t\t\t})) || { ok: false }\n\t\t\tif (outcome.ok === true && entry.refresh !== false) {\n\t\t\t\tthis.onRefreshEvent()\n\t\t\t}\n\t\t\treturn outcome\n\t\t},\n\n\t\t/**\n\t\t * The confirmation of an `api-call` header action was given: run it and\n\t\t * report the outcome to the dialog.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-an-index-page-runs-an-api-call-header-action\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync onHeaderApiCallConfirm() {\n\t\t\tconst entry = this.headerApiCallPending\n\t\t\tif (!entry) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst outcome = await this.runHeaderApiCall(entry)\n\t\t\tconst dialog = this.$refs.headerApiCallConfirmDialog\n\t\t\tif (dialog && typeof dialog.setResult === 'function') {\n\t\t\t\tdialog.setResult(outcome.ok === true\n\t\t\t\t\t? { success: true }\n\t\t\t\t\t: { error: (outcome.error && outcome.error.message) || t('nextcloud-vue', 'Action failed.') })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The `countSubtitle` line for a total. A string goes through the host\n\t\t * translate; `{ singular, plural }` takes the form for the total\n\t\t * through the app's plural translation, or by `total === 1` when no app\n\t\t * id is provided. `{total}` (and `{shown}` when given) are filled in.\n\t\t *\n\t\t * @spec openspec/changes/index-count-plural/specs/index-header/spec.md#requirement-the-count-line-takes-a-singular-and-a-plural-form\n\t\t * @param {string|{singular: string, plural: string}} subtitle The declared line.\n\t\t * @param {number} total The collection's total.\n\t\t * @param {number|null} shown The rows on this page, or null to leave `{shown}` alone.\n\t\t * @return {string} The line, '' for a declaration without both forms.\n\t\t */\n\t\tcountLine(subtitle, total, shown) {\n\t\t\treturn countLine(subtitle, total, { shown, translate: this.cnTranslate, appId: this.cnAppId })\n\t\t},\n\n\t\t/**\n\t\t * An `open-form` header action saved a record: the list reloads so the\n\t\t * new row shows.\n\t\t *\n\t\t * @spec openspec/changes/index-header-open-form/specs/index-header/spec.md#requirement-an-index-header-action-can-open-the-create-form\n\t\t * @return {void}\n\t\t */\n\t\tonHeaderActionCreated() {\n\t\t\tthis.onRefreshEvent()\n\t\t},\n\n\t\tpushAiContext() {\n\t\t\tapplyAiContext(this.cnAiContext, 'index', {\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t\teffectiveSchema: this.effectiveSchema,\n\t\t\t})\n\t\t},\n\n\t\t// ── List-event handlers ──────────────────────────────────────────────\n\t\t// In self-fetch mode each routes to the useListView instance (re-fetch);\n\t\t// in every mode the event still bubbles via $emit so a host that wants\n\t\t// to observe (or take over) keeps working — unchanged for consumers.\n\t\t/**\n\t\t * @param {string} value Search term from the sidebar / header.\n\t\t * @return {void}\n\t\t */\n\t\tonSearchEvent(value) {\n\t\t\tif (this.namedSourceSearches) {\n\t\t\t\tthis.namedSearchTerm = value || ''\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onSearch === 'function') {\n\t\t\t\tthis.list.onSearch(value)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\tthis.$emit('search', value)\n\t\t},\n\n\t\t/**\n\t\t * Quick-filter tab change. Updates the active index — the `setup()`\n\t\t * watcher then triggers `list.refresh(1)` so the new tab's filter\n\t\t * flows into the next fetch.\n\t\t *\n\t\t * @param {number} index Zero-based tab index (from CnQuickFilterBar).\n\t\t * @return {void}\n\t\t */\n\t\tonQuickFilterChange(index) {\n\t\t\t// `activeQuickFilterIndex` is a setup-returned ref; the\n\t\t\t// Vue 2 ref-unwrap proxy makes plain assignment work.\n\t\t\tthis.activeQuickFilterIndex = index\n\t\t\tthis.$emit('quick-filter-change', index)\n\t\t},\n\n\t\t/**\n\t\t * Multi-select quick-filter change (`quickFilterMultiple`). Updates the\n\t\t * selected-index array; the `setup()` watcher re-fetches with the\n\t\t * OR-ed union of the selected tabs' filters.\n\t\t *\n\t\t * @param {number[]} indices Selected tab indices (from CnQuickFilterBar).\n\t\t * @return {void}\n\t\t */\n\t\tonQuickFilterMultiChange(indices) {\n\t\t\tthis.selectedQuickFilterIndices = Array.isArray(indices) ? indices : []\n\t\t\tthis.$emit('quick-filter-change', this.selectedQuickFilterIndices)\n\t\t},\n\n\t\t/**\n\t\t * An order chosen in the index sidebar's Sort section. An option with\n\t\t * an endpoint `source` is chosen by its value; any other goes the way a\n\t\t * header click goes: the self-fetched list sorts (`_order`, kept in the\n\t\t * address), and `sort` is emitted for a host that sorts itself.\n\t\t *\n\t\t * @param {Array<{key: string, order: string}>} keys The chosen order.\n\t\t * @param {string} [value] The chosen option's value.\n\t\t * @return {void}\n\t\t */\n\t\tonSidebarSortChange(keys, value) {\n\t\t\tif (value !== undefined && this.selectSortOption(value)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!Array.isArray(keys) || keys.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onSortEvent({ key: keys[0].key, order: keys[0].order, keys })\n\t\t},\n\n\t\t/**\n\t\t * Choose a sort option by its value: an option with an endpoint\n\t\t * `source` lists the endpoint's rows; any other applies its order. A\n\t\t * saved view's `sortOption` selects through here.\n\t\t *\n\t\t * @param {string} value The option's value.\n\t\t * @return {boolean} Whether an option of that value was chosen.\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tselectSortOption(value) {\n\t\t\tconst option = (this.sortSelectOptions || []).find((o) => o && o.value !== undefined && String(o.value) === String(value))\n\t\t\tif (!option) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.sourceSortOptions.includes(option) && this.isSelfFetchMode) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: String(option.value), page: 1 }\n\t\t\t\tthis.loadSortSource(option)\n\t\t\t\tthis.$emit('sort-change', String(option.value))\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst keys = orderToSortKeys(option.order !== undefined ? option.order : option.value)\n\t\t\tif (keys.length === 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.onSortEvent({ key: keys[0].key, order: keys[0].order, keys })\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * A quick filter with `@config.<key>` in its `label` or `activeLabel`\n\t\t * (`\"Residence @config.municipality\"`): the label translated first, then\n\t\t * each token replaced by its configured value. A key the config does\n\t\t * not hold leaves its token in place. Other tabs pass unchanged.\n\t\t *\n\t\t * @param {object} tab A quick-filter tab.\n\t\t * @return {object} The tab, with its labels resolved.\n\t\t */\n\t\twithConfigLabels(tab) {\n\t\t\tif (!tab || typeof tab !== 'object') {\n\t\t\t\treturn tab\n\t\t\t}\n\t\t\tconst hasToken = (value) => typeof value === 'string' && value.includes('@config.')\n\t\t\tif (!hasToken(tab.label) && !hasToken(tab.activeLabel)) {\n\t\t\t\treturn tab\n\t\t\t}\n\t\t\tconst fill = (value) => (hasToken(value) ? this.fillConfigTokens(this.cnTranslate(value)) : value)\n\t\t\treturn { ...tab, label: fill(tab.label), activeLabel: fill(tab.activeLabel) }\n\t\t},\n\n\t\t/**\n\t\t * A text with each `@config.<key>` replaced by the app config's value;\n\t\t * a key the config does not hold leaves its token in place.\n\t\t *\n\t\t * @param {string} text The text, already translated.\n\t\t * @return {string} The text with the config values in.\n\t\t * @spec openspec/changes/pl4-cell-rules/specs/pl4-cell-rules/spec.md#requirement-a-token-can-take-a-config-value\n\t\t */\n\t\tfillConfigTokens(text) {\n\t\t\tconst config = this.effectiveAppConfig\n\t\t\treturn String(text).replace(/@config\\.([A-Za-z0-9_.-]*[A-Za-z0-9_])/g, (token, key) => {\n\t\t\t\tconst found = this.getByPath(config, key)\n\t\t\t\treturn found === undefined || found === null || found === '' ? token : String(found)\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * @param {{key: string, order: string, keys?: Array<{key: string, order: string}>}} payload Sort change from CnDataTable.\n\t\t * @return {void}\n\t\t */\n\t\tonSortEvent(payload) {\n\t\t\t// An order by keys (a column header, a field in the Sort section)\n\t\t\t// leaves an endpoint-ranked order.\n\t\t\tif (this.sortSource.value) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: '', page: 1 }\n\t\t\t}\n\t\t\tif (namedSourceSorts(this)) {\n\t\t\t\tthis.namedSort = { key: (payload && payload.key) || '', order: (payload && payload.order) || 'asc' }\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onSort === 'function') {\n\t\t\t\tthis.list.onSort(payload)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\tthis.$emit('sort', payload)\n\t\t},\n\n\t\t/**\n\t\t * Self-fetch mode's current filters/search/sort, straight from\n\t\t * useListView's own reactive state — the shape `persistViewStateToRoute`\n\t\t * and the saved-views helpers (`buildViewCreatePayload`,\n\t\t * `extractViewState`) all share.\n\t\t *\n\t\t * @return {{filters: object, search: string, sortKey: ?string, sortOrder: string, sortKeys: Array<{key: string, order: string}>}}\n\t\t */\n\t\t/**\n\t\t * A view's state as the edit dialog shows it under a criteria choice:\n\t\t * its filters, search term and sort in sentences, read against the\n\t\t * page schema's titles.\n\t\t *\n\t\t * @param {object} state A view state (`extractViewState` or `currentViewState`).\n\t\t * @return {string} The sentences.\n\t\t * @spec openspec/changes/saved-view-edit-board-form/specs/saved-views/spec.md\n\t\t */\n\t\tcriteriaSummaryOf(state) {\n\t\t\tconst schema = this.effectiveSchema\n\t\t\treturn viewCriteriaSummary(state, {\n\t\t\t\tproperties: (schema && schema.properties) || {},\n\t\t\t\ttranslate: (text) => this.cnTranslate(text),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * A saved view's state, as `extractViewState` reads it.\n\t\t *\n\t\t * @param {object} view The saved view.\n\t\t * @return {object} Its state.\n\t\t */\n\t\tsavedViewState(view) {\n\t\t\treturn extractViewState(view)\n\t\t},\n\n\t\tcurrentViewState() {\n\t\t\treturn {\n\t\t\t\tfilters: this.list.activeFilters.value,\n\t\t\t\tsearch: this.list.searchTerm.value,\n\t\t\t\tsortKeys: this.list.sortKeys?.value || [],\n\t\t\t\tsortKey: this.list.sortKey.value,\n\t\t\t\tsortOrder: this.list.sortOrder.value,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The spelling a filter goes back into the query as. A value that arrived\n\t\t * as an `@`-token keeps the TOKEN for as long as it still resolves to\n\t\t * what is active — otherwise a shared `?assignee=@me` link would be\n\t\t * rewritten to one named uid on the first filter change and stop meaning\n\t\t * \"me\" for whoever opens it next.\n\t\t *\n\t\t * @param {string} key The filter key, as it sits in the query.\n\t\t * @param {unknown} value The resolved value now active.\n\t\t * @return {unknown} The token, or the value.\n\t\t */\n\t\tfilterQuerySpelling(key, value) {\n\t\t\tconst raw = this.$route.query[key]\n\t\t\tif (typeof raw !== 'string' || raw.charAt(0) !== '@') {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\treturn String(resolveFilterValue(raw, ctx)) === String(value) ? raw : value\n\t\t},\n\n\t\t/**\n\t\t * The \"Also search inside files\" switch was toggled: refetch (via the\n\t\t * watcher in self-fetch mode), keep the state in the route, and tell a\n\t\t * consumer-managed host.\n\t\t *\n\t\t * @param {boolean} value The switch's new state.\n\t\t * @return {void}\n\t\t */\n\t\tonContentSearchToggle(value) {\n\t\t\tthis.contentSearch = !!value\n\t\t\t/**\n\t\t\t * @event content-search Emitted when the \"Also search inside files\" switch changes, so a consumer-managed page can add `_content_search` to its own query.\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('content-search', this.contentSearch)\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Persist filters + search + sort into `$route.query` in one replace,\n\t\t * so a reload or a shared/bookmarked link reproduces the exact same\n\t\t * view. Self-fetch mode only. The page's own filter keys are cleared and\n\t\t * re-applied wholesale each call rather than merged (otherwise a cleared\n\t\t * filter would never leave the query); a non-reserved key it never\n\t\t * claimed is left alone. Best-effort: a duplicate-navigation rejection\n\t\t * (same resulting path/query) is swallowed.\n\t\t *\n\t\t * @param {{filters?: object, search?: string, sortKey?: ?string, sortOrder?: string, sortKeys?: Array<{key: string, order: string}>}} state Current view state.\n\t\t * Without `savedView` the address keeps the applied view it names while\n\t\t * the filters are still the view's: a sort, a search or the view's own\n\t\t * sort option shows the same view's records.\n\t\t *\n\t\t * @param {{savedView?: string}} [options] The saved view the address keeps naming, or `''` for none.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/saved-view-kept-in-route/specs/saved-view-kept-in-route/spec.md#requirement-the-address-keeps-naming-the-applied-view\n\t\t */\n\t\tpersistViewStateToRoute(state, { savedView } = {}) {\n\t\t\tif (!this.$router || !this.$route) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst query = { ...this.$route.query }\n\t\t\tif (savedView === undefined) {\n\t\t\t\tconst named = this.appliedSavedViewId !== '' && query.savedView === this.appliedSavedViewId\n\t\t\t\tsavedView = named && this.viewFiltersKey(state.filters) === this.appliedViewFiltersKey ? this.appliedSavedViewId : ''\n\t\t\t}\n\t\t\t// The menu entry of a saved view is active while the address names\n\t\t\t// it; any other change to the filters is no longer that view.\n\t\t\tif (savedView !== '') {\n\t\t\t\tquery.savedView = savedView\n\t\t\t} else {\n\t\t\t\tdelete query.savedView\n\t\t\t}\n\t\t\tfor (const key of this.persistedFilterKeys) {\n\t\t\t\tdelete query[key]\n\t\t\t}\n\t\t\tconst written = []\n\t\t\tfor (const [key, value] of Object.entries(state.filters || {})) {\n\t\t\t\tif (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tquery[key] = this.filterQuerySpelling(key, value)\n\t\t\t\twritten.push(key)\n\t\t\t}\n\t\t\tthis.persistedFilterKeys = written\n\t\t\tif (state.search) {\n\t\t\t\tquery._search = state.search\n\t\t\t} else {\n\t\t\t\tdelete query._search\n\t\t\t}\n\t\t\tif (this.searchInFiles && this.contentSearch) {\n\t\t\t\tquery.contentSearch = '1'\n\t\t\t} else {\n\t\t\t\tdelete query.contentSearch\n\t\t\t}\n\t\t\tconst sortKeys = Array.isArray(state.sortKeys) && state.sortKeys.length\n\t\t\t\t? state.sortKeys\n\t\t\t\t: (state.sortKey ? [{ key: state.sortKey, order: state.sortOrder || 'asc' }] : [])\n\t\t\tif (sortKeys.length) {\n\t\t\t\tquery._order = JSON.stringify(sortKeys.map((k) => ({ key: k.key, order: k.order || 'asc' })))\n\t\t\t} else {\n\t\t\t\tdelete query._order\n\t\t\t}\n\t\t\tthis.$router.replace({ query }).catch(() => {})\n\t\t},\n\n\t\t/**\n\t\t * Filters as one comparable key: empty values dropped, every value a\n\t\t * sorted list of strings, the keys sorted.\n\t\t *\n\t\t * @param {object} filters The filters.\n\t\t * @return {string}\n\t\t * @spec openspec/changes/saved-view-kept-in-route/specs/saved-view-kept-in-route/spec.md#requirement-the-address-keeps-naming-the-applied-view\n\t\t */\n\t\tviewFiltersKey(filters) {\n\t\t\tconst out = {}\n\t\t\tfor (const key of Object.keys(filters || {}).sort()) {\n\t\t\t\tconst value = filters[key]\n\t\t\t\tconst values = (Array.isArray(value) ? value : [value]).filter((v) => v !== undefined && v !== null && v !== '').map(String).sort()\n\t\t\t\tif (values.length > 0) {\n\t\t\t\t\tout[key] = values\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn JSON.stringify(out)\n\t\t},\n\n\t\t/**\n\t\t * \"Clear all\" from the sidebar: reset search, every active filter, the\n\t\t * sort and the folder-sidebar selection in one fetch + one route\n\t\t * replace, rather than one of each per field. Self-fetch mode only; a\n\t\t * consumer-managed page gets the bare event to handle itself.\n\t\t *\n\t\t * The SORT goes too, and that is the whole point: applying a saved view\n\t\t * sets a sort the reader never chose and cannot see the origin of, so a\n\t\t * clear that left it behind left the list in a state with no control\n\t\t * anywhere on the page to undo it.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonClearFilters() {\n\t\t\t// \"Clear all\" on the Active line also undoes the quick filters it\n\t\t\t// listed (a tab without an `activeLabel` is not a filter there).\n\t\t\tfor (const chip of this.quickFilterActiveChips) {\n\t\t\t\tthis.deselectQuickFilterChip(chip.quickFilterIndex)\n\t\t\t}\n\t\t\t// Clearing the view brings the person's own columns back.\n\t\t\tthis.appliedViewColumns = null\n\t\t\tthis.appliedSavedViewId = ''\n\t\t\tthis.applyViewSortOption(null)\n\t\t\tif (this.isNamedSource && Object.keys(this.namedActiveFilters || {}).length > 0) {\n\t\t\t\tthis.namedActiveFilters = {}\n\t\t\t\tthis.persistNamedFiltersToRoute({})\n\t\t\t}\n\t\t\tif (this.searchTermChips.length > 0) {\n\t\t\t\tthis.namedSearchTerm = ''\n\t\t\t}\n\t\t\tif (!this.isSelfFetchMode) {\n\t\t\t\tthis.$emit('clear-filters')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.list.activeFilters.value = {}\n\t\t\tthis.list.searchTerm.value = ''\n\t\t\tthis.list.sortKeys.value = []\n\t\t\tthis.list.sortKey.value = null\n\t\t\tthis.list.sortOrder.value = 'asc'\n\t\t\tif (this.folderSidebar) {\n\t\t\t\tthis.selectedFolderId = null\n\t\t\t}\n\t\t\tthis.list.refresh(1)\n\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\tthis.$emit('clear-filters')\n\t\t},\n\n\t\t/**\n\t\t * Read the rows `mapConfig.markerColor.source` points at, once.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadMapColorSource() {\n\t\t\tconst rule = this.mapMarkerColor\n\t\t\tif (!rule || !rule.source || this.mapColorRefs !== null) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst property = this.effectiveSchema?.properties?.[rule.field] || null\n\t\t\tconst target = referenceTargetOf(rule.source, { register: this.register, property })\n\t\t\tif (!target.register || !target.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlet rows\n\t\t\ttry {\n\t\t\t\trows = await fetchReferenceObjects({ ...target, filter: rule.source.filter || {} })\n\t\t\t} catch {\n\t\t\t\trows = []\n\t\t\t}\n\t\t\tthis.mapColorRefs = Array.isArray(rows) ? rows : []\n\t\t},\n\n\t\t/**\n\t\t * Fetch what the board view needs: the rows of a reference column\n\t\t * field (once per field) and the narrowing select's options.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references\n\t\t */\n\t\tasync loadBoardSources() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tif (active && active.kind === 'reference' && !Object.hasOwn(this.boardRefs, active.field)) {\n\t\t\t\tconst property = this.effectiveSchema?.properties?.[active.field] || null\n\t\t\t\tconst target = referenceTargetOf(active.source, { register: this.register, property })\n\t\t\t\tif (target.register && target.schema) {\n\t\t\t\t\tlet rows\n\t\t\t\t\ttry {\n\t\t\t\t\t\trows = await fetchReferenceObjects({ ...target, filter: active.source?.filter || {} })\n\t\t\t\t\t} catch {\n\t\t\t\t\t\trows = []\n\t\t\t\t\t}\n\t\t\t\t\tif (active.source?.itemsPath) {\n\t\t\t\t\t\trows = flattenItemRefs(rows, { itemsPath: active.source.itemsPath, keyField: active.source.keyField || 'name' })\n\t\t\t\t\t}\n\t\t\t\t\tthis.boardRefs = { ...this.boardRefs, [active.field]: rows }\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst narrow = this.boardNarrow\n\t\t\tif (narrow && this.boardNarrowOptions.length === 0) {\n\t\t\t\tconst property = this.effectiveSchema?.properties?.[narrow.field] || null\n\t\t\t\tconst target = referenceTargetOf(narrow.source || {}, { register: this.register, property })\n\t\t\t\tlet rows\n\t\t\t\ttry {\n\t\t\t\t\trows = await fetchReferenceObjects({ ...target, filter: narrow.source?.filter || {} })\n\t\t\t\t} catch {\n\t\t\t\t\trows = []\n\t\t\t\t}\n\t\t\t\tconst labelField = narrow.source?.labelField || 'title'\n\t\t\t\tthis.boardNarrowOptions = rows\n\t\t\t\t\t.map((row) => ({ value: refIdOf(row), label: String(row?.[labelField] ?? row?.name ?? row?.title ?? refIdOf(row)) }))\n\t\t\t\t\t.filter((option) => option.value !== '')\n\t\t\t\t\t.sort((a, b) => a.label.localeCompare(b.label))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The column switch changed.\n\t\t *\n\t\t * @param {string} field The column field picked.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-board-can-switch-the-field-its-columns-come-from\n\t\t */\n\t\tonBoardColumnFieldChange(field) {\n\t\t\tthis.boardColumnFieldChoice = field\n\t\t\t/**\n\t\t\t * @event board-column-field-change The board's column switch picked another field. Payload: the field name.\n\t\t\t */\n\t\t\tthis.$emit('board-column-field-change', field)\n\t\t},\n\n\t\t/**\n\t\t * The narrowing select changed: it sets the page filter on its field,\n\t\t * so the cards narrow with the columns and the active filter shows.\n\t\t *\n\t\t * @param {string} value The parent id, '' for all.\n\t\t * @return {void}\n\t\t */\n\t\tonBoardNarrowChange(value) {\n\t\t\tthis.onFilterEvent({ key: this.boardNarrow.field, values: value === '' ? [] : [value] })\n\t\t},\n\n\t\t/**\n\t\t * A paged board's \"Show N more\": ask for the next page.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-kanban-parity/specs/board-view/spec.md#requirement-a-long-column-is-cut-with-a-show-more-button\n\t\t */\n\t\tonBoardLoadMore() {\n\t\t\tif (this.boardLoadsAll) {\n\t\t\t\tthis.list.loadMore()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst page = Number(this.pagination?.page || 1)\n\t\t\tif (page < Number(this.pagination?.pages || 1)) {\n\t\t\t\tthis.onPageEvent(page + 1)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {number} page Requested page from CnPagination.\n\t\t * @return {void}\n\t\t */\n\t\tonPageEvent(page) {\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, page: Number(page) || 1 }\n\t\t\t\tthis.$emit('page-changed', page)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onPageChange === 'function') {\n\t\t\t\tthis.list.onPageChange(page)\n\t\t\t}\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {\n\t\t\t\tthis.namedPaging = { ...this.namedPaging, page }\n\t\t\t}\n\t\t\tthis.$emit('page-changed', page)\n\t\t},\n\n\t\t/**\n\t\t * Page-size pick from CnPagination. In self-fetch mode the list refetches\n\t\t * page 1 at the new size — the event alone left the select changing and\n\t\t * the table not, since a manifest page has no host listening.\n\t\t *\n\t\t * @param {number} size Requested page size.\n\t\t * @return {void}\n\t\t */\n\t\tonPageSizeEvent(size) {\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onPageSizeChange === 'function') {\n\t\t\t\tthis.list.onPageSizeChange(size)\n\t\t\t}\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {\n\t\t\t\tthis.namedPaging = { page: 1, limit: size }\n\t\t\t}\n\t\t\tthis.$emit('page-size-changed', size)\n\t\t},\n\n\t\t/**\n\t\t * @param {{key: string, values: Array}} payload Facet-filter change from the sidebar.\n\t\t * @return {void}\n\t\t */\n\t\tonFilterEvent(payload) {\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onFilterChange === 'function') {\n\t\t\t\tthis.list.onFilterChange(payload.key, payload.values)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\t// A named source keeps its own filter state: nothing else holds it,\n\t\t\t// and the `activeFilters` PROP only reaches pages with a consumer\n\t\t\t// component behind them. A manifest page has none, which is why\n\t\t\t// its sidebar used to render controls that narrowed nothing.\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tthis.setNamedFilter(payload.key, payload.values)\n\t\t\t}\n\t\t\tthis.$emit('filter-change', payload)\n\t\t},\n\n\t\t/**\n\t\t * The board toolbar's filter chip was removed: clear that one filter.\n\t\t *\n\t\t * @param {{key: string}} chip The chip from `activeFilterChips`.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-toolbar-sits-on-the-ground-in-two-rows\n\t\t */\n\t\tonRemoveActiveFilter(chip) {\n\t\t\tif (chip && chip.searchTerm === true) {\n\t\t\t\tthis.onSearchEvent('')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (chip && typeof chip.quickFilterIndex === 'number') {\n\t\t\t\tthis.deselectQuickFilterChip(chip.quickFilterIndex)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (chip && Array.isArray(chip.keys) && chip.keys.length > 0) {\n\t\t\t\tfor (const key of chip.keys) {\n\t\t\t\t\tthis.onFilterEvent({ key, values: [] })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (chip && typeof chip.key === 'string') {\n\t\t\t\tthis.onFilterEvent({ key: chip.key, values: [] })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The field an Active chip names: the page's `filterLabels` label, the\n\t\t * schema property's title, the sidebar field's title, else the key.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @return {string} The translated field name.\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-page-names-its-filters\n\t\t */\n\t\tactiveFilterFieldLabel(key) {\n\t\t\tconst named = this.filterLabels && this.filterLabels[key]\n\t\t\tif (named && typeof named.label === 'string' && named.label !== '') {\n\t\t\t\treturn this.cnTranslate(named.label)\n\t\t\t}\n\t\t\tconst prop = this.effectiveSchema?.properties?.[key]\n\t\t\tif (prop && typeof prop.title === 'string' && prop.title !== '') {\n\t\t\t\treturn this.cnTranslate(prop.title)\n\t\t\t}\n\t\t\tconst field = declaredFilterFields({ sidebar: this.sidebar, sourceConfig: this.sourceConfig })[key]\n\t\t\tif (field && typeof field.title === 'string' && field.title !== '') {\n\t\t\t\treturn this.cnTranslate(field.title)\n\t\t\t}\n\t\t\treturn this.cnTranslate(key)\n\t\t},\n\n\t\t/**\n\t\t * Filters as chips in the Active line's words, one per filter: \"Team:\n\t\t * Woo\". A filter with no value gives none. A range, as one `{from, to}`\n\t\t * value or as `key[gte]`/`key[lte]` keys, is one chip; `keys` lists the\n\t\t * filter keys it stands for. Several values of one filter read as a list\n\t\t * in the locale (\"A en B\").\n\t\t *\n\t\t * @param {object} filters The filters, by key.\n\t\t * @param {Function} [isFixed] `(key, value) => boolean`: a value that gets no chip.\n\t\t * @return {Array<{key: string, label: string, keys?: string[]}>}\n\t\t */\n\t\tfilterChipsOf(filters, isFixed = () => false) {\n\t\t\tconst chips = []\n\t\t\tconst ranges = new Map()\n\t\t\tfor (const [key, raw] of Object.entries(filters || {})) {\n\t\t\t\tconst bound = /^(.+)\\[(gte|gt|lte|lt)\\]$/.exec(key)\n\t\t\t\tif (bound) {\n\t\t\t\t\tconst value = Array.isArray(raw) ? raw[0] : raw\n\t\t\t\t\tif (value === null || value === undefined || value === '' || isFixed(key, value)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (!ranges.has(bound[1])) {\n\t\t\t\t\t\tranges.set(bound[1], { from: null, to: null, keys: [] })\n\t\t\t\t\t\tchips.push({ key: bound[1], rangeOf: bound[1] })\n\t\t\t\t\t}\n\t\t\t\t\tconst range = ranges.get(bound[1])\n\t\t\t\t\trange[bound[2].startsWith('g') ? 'from' : 'to'] = value\n\t\t\t\t\trange.keys.push(key)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst ends = rangeEnds(raw)\n\t\t\t\tif (ends) {\n\t\t\t\t\tif (isFixed(key, raw)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tchips.push({ key, label: `${this.activeFilterFieldLabel(key)}: ${this.activeFilterRangeText(ends.from, ends.to, key)}` })\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n\t\t\t\t\tconst text = this.activeFilterOperatorText(key, raw)\n\t\t\t\t\tif (text !== '' && !isFixed(key, raw)) {\n\t\t\t\t\t\tchips.push({ key, label: `${this.activeFilterFieldLabel(key)}: ${text}` })\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst values = (Array.isArray(raw) ? raw : [raw])\n\t\t\t\t\t.filter((value) => value !== null && value !== undefined && value !== '')\n\t\t\t\t\t.filter((value) => !isFixed(key, value))\n\t\t\t\t\t.map((value) => this.activeFilterValueLabel(key, value))\n\t\t\t\tif (values.length === 0) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tchips.push({ key, label: `${this.activeFilterFieldLabel(key)}: ${listText(values, getCanonicalLocale() || undefined)}` })\n\t\t\t}\n\t\t\treturn chips.map((chip) => {\n\t\t\t\tif (!chip.rangeOf) {\n\t\t\t\t\treturn chip\n\t\t\t\t}\n\t\t\t\tconst range = ranges.get(chip.rangeOf)\n\t\t\t\treturn { key: chip.key, keys: range.keys, label: `${this.activeFilterFieldLabel(chip.rangeOf)}: ${this.activeFilterRangeText(range.from, range.to, chip.rangeOf)}` }\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * What a saved view filters on, in the Active line's words, for the\n\t\t * line under its name in the side panel: its search term, then each\n\t\t * filter (\"Search term: Lindelaan, Status: Open\"). A filter the page's\n\t\t * `filterLabels` marks `hidden` (a working-list rule every view\n\t\t * carries) is left out. '' when it filters on nothing else.\n\t\t *\n\t\t * @param {object} view The saved view.\n\t\t * @return {string}\n\t\t */\n\t\tviewFilterSummary(view) {\n\t\t\tconst query = (view && view.query) || {}\n\t\t\tconst filters = query.filters || (view && (view.filters || view.filter)) || {}\n\t\t\tconst parts = []\n\t\t\tconst term = typeof query.search === 'string' ? query.search.trim() : ''\n\t\t\tif (term !== '') {\n\t\t\t\tparts.push(t('nextcloud-vue', 'Search term: {term}', { term }))\n\t\t\t}\n\t\t\tconst hidden = (key) => Boolean(this.filterLabels && this.filterLabels[key] && this.filterLabels[key].hidden === true)\n\t\t\tfor (const chip of this.filterChipsOf(filters)) {\n\t\t\t\tif (!hidden(chip.key)) {\n\t\t\t\t\tparts.push(chip.label)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parts.join(', ')\n\t\t},\n\n\t\t/**\n\t\t * The text of a filter whose value is an operator object that is not a\n\t\t * range: a test for no value reads \"not set\" or \"set\", any other\n\t\t * operator its operands, named as a value would be.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {object} value The operator object (`{ isnull: true }`, `{ in: [...] }`).\n\t\t * @return {string} The text, or '' when it names nothing.\n\t\t */\n\t\tactiveFilterOperatorText(key, value) {\n\t\t\tif (Object.hasOwn(value, 'isnull')) {\n\t\t\t\tconst empty = value.isnull === true || value.isnull === 'true'\n\t\t\t\treturn empty ? t('nextcloud-vue', 'not set') : t('nextcloud-vue', 'set')\n\t\t\t}\n\t\t\tconst operands = Object.values(value)\n\t\t\t\t.flatMap((operand) => (Array.isArray(operand) ? operand : [operand]))\n\t\t\t\t.filter((operand) => operand !== null && operand !== undefined && operand !== '' && typeof operand !== 'object')\n\t\t\t\t.map((operand) => this.activeFilterValueLabel(key, operand))\n\t\t\treturn listText(operands, getCanonicalLocale() || undefined)\n\t\t},\n\n\t\t/**\n\t\t * The text of a range chip: in words for a range from today when the\n\t\t * page's `filterLabels` entry sets `relative`, else its date ends in\n\t\t * the person's locale.\n\t\t *\n\t\t * @param {unknown} from The lower end, or null.\n\t\t * @param {unknown} to The upper end, or null.\n\t\t * @param {string} key The filter key the range is on.\n\t\t * @return {string} The text.\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-range-is-one-chip\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-range-from-today-is-named-in-words\n\t\t */\n\t\tactiveFilterRangeText(from, to, key) {\n\t\t\tconst named = this.filterLabels && this.filterLabels[key]\n\t\t\tif (named && named.relative === true) {\n\t\t\t\tconst words = relativeRangeText(from, to, {\n\t\t\t\t\ttranslate: (text) => t('nextcloud-vue', text),\n\t\t\t\t\ttranslatePlural: (one, many, count) => n('nextcloud-vue', one, many, count),\n\t\t\t\t})\n\t\t\t\tif (words !== null) {\n\t\t\t\t\treturn words\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rangeChipText(from, to, {\n\t\t\t\ttranslate: (text, vars) => t('nextcloud-vue', text, vars),\n\t\t\t\tlocale: getCanonicalLocale() || undefined,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Undo a quick filter from the Active line. With several tabs selectable\n\t\t * the tab leaves the selection; with one, the page goes back to its\n\t\t * default tab when that tab names no active filter itself, and else to no\n\t\t * tab at all, so the chip does not come straight back.\n\t\t *\n\t\t * @param {number} index The tab index the chip stands for.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-a-quick-filter-with-an-active-label-joins-the-active-line\n\t\t */\n\t\tdeselectQuickFilterChip(index) {\n\t\t\tif (this.quickFilterMultiple) {\n\t\t\t\tthis.onQuickFilterMultiChange((this.selectedQuickFilterIndices || []).filter((i) => i !== index))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.activeQuickFilterIndex !== index) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tlet fallback = tabs.findIndex((tab) => tab && tab.default === true)\n\t\t\tif (fallback < 0 && tabs.length > 0) {\n\t\t\t\tfallback = 0\n\t\t\t}\n\t\t\tconst fallbackNamed = fallback >= 0 && typeof tabs[fallback].activeLabel === 'string' && tabs[fallback].activeLabel !== ''\n\t\t\tthis.onQuickFilterChange(fallback >= 0 && fallback !== index && !fallbackNamed ? fallback : null)\n\t\t},\n\n\t\t/**\n\t\t * The text an Active chip shows for one filter value: the page's\n\t\t * `filterLabels` value, the referenced object's label, the facet\n\t\t * bucket's label, the schema's `oneOf` title, a group's display name,\n\t\t * the sidebar field's `enumLabels`, else the value itself.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {unknown} value One value of that filter.\n\t\t * @return {string} The label.\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-an-active-chip-names-the-value-not-its-id\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-page-names-its-filters\n\t\t */\n\t\t/**\n\t\t * Whether a filter holds Nextcloud group ids: its column draws the\n\t\t * group cell, or its schema property marks a group.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-group-filter-is-named-by-the-groups-display-name\n\t\t */\n\t\tisGroupFilter(key) {\n\t\t\tconst column = (Array.isArray(this.columns) ? this.columns : []).find((c) => c && typeof c === 'object' && c.key === key)\n\t\t\tif (column && column.widget === 'group') {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn isGroupProp(this.effectiveSchema?.properties?.[key])\n\t\t},\n\n\t\tactiveFilterValueLabel(key, value) {\n\t\t\tconst id = String(value)\n\t\t\tconst named = this.filterLabels && this.filterLabels[key] && this.filterLabels[key].values\n\t\t\tif (named && typeof named[id] === 'string' && named[id] !== '') {\n\t\t\t\treturn this.cnTranslate(named[id])\n\t\t\t}\n\t\t\tconst refs = this.refLabels[key]\n\t\t\tif (refs && typeof refs[id] === 'string' && refs[id] !== '') {\n\t\t\t\treturn refs[id]\n\t\t\t}\n\t\t\tconst facet = this.effectiveFacetData && this.effectiveFacetData[key]\n\t\t\tconst bucket = facet && Array.isArray(facet.values)\n\t\t\t\t? facet.values.find((fv) => fv && typeof fv === 'object' && String(fv.value) === id)\n\t\t\t\t: null\n\t\t\tif (bucket && typeof bucket.label === 'string' && bucket.label !== '') {\n\t\t\t\treturn this.cnTranslate(bucket.label)\n\t\t\t}\n\t\t\tconst prop = this.effectiveSchema?.properties?.[key]\n\t\t\tif (prop && prop.referenceType === 'nextcloud-group') {\n\t\t\t\tconst name = groupDisplayName(id)\n\t\t\t\tif (name === null) {\n\t\t\t\t\tloadGroupDisplayName(id)\n\t\t\t\t}\n\t\t\t\treturn name || id\n\t\t\t}\n\t\t\tconst options = prop && Array.isArray(prop.oneOf) ? prop.oneOf : []\n\t\t\tconst option = options.find((o) => o && String(o.const) === id && typeof o.title === 'string')\n\t\t\tif (option) {\n\t\t\t\treturn this.cnTranslate(option.title)\n\t\t\t}\n\t\t\tif (this.isGroupFilter(key)) {\n\t\t\t\tconst name = groupDisplayName(id)\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst field = declaredFilterFields({ sidebar: this.sidebar, sourceConfig: this.sourceConfig })[key]\n\t\t\tconst enumLabel = field && field.enumLabels && field.enumLabels[id]\n\t\t\tif (typeof enumLabel === 'string' && enumLabel !== '') {\n\t\t\t\treturn this.cnTranslate(enumLabel)\n\t\t\t}\n\t\t\treturn id\n\t\t},\n\n\t\t/**\n\t\t * A header filter was applied or cleared. One column can own several\n\t\t * query parameters (a range is `key[gte]` and `key[lte]`), so they are\n\t\t * applied together: one fetch, one route update.\n\t\t *\n\t\t * @param {{key: string, params: object}} payload From CnDataTable's `column-filter`.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/table-header-sort-and-filter/specs/cn-data-table/spec.md#requirement-a-header-filter-speaks-the-sidebars-query-language\n\t\t */\n\t\tonColumnFilterEvent(payload) {\n\t\t\tconst params = (payload && payload.params) || {}\n\t\t\tif (this.headerFilterSchema) {\n\t\t\t\t// The header's range is the sidebar's window: one `{ from, to }` value.\n\t\t\t\tfor (const [key, value] of Object.entries(boundsAsRanges(params))) {\n\t\t\t\t\tthis.setNamedFilter(key, value)\n\t\t\t\t\tthis.$emit('filter-change', { key, values: value })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst entries = Object.entries(params).map(([key, values]) => [key, Array.isArray(values) ? values : []])\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\tconst next = { ...this.list.activeFilters.value }\n\t\t\t\tfor (const [key, values] of entries) {\n\t\t\t\t\tif (values.length === 0) {\n\t\t\t\t\t\tdelete next[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext[key] = values\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.list.activeFilters.value = next\n\t\t\t\tthis.list.refresh(1)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\tfor (const [key, values] of entries) {\n\t\t\t\tif (this.isNamedSource) {\n\t\t\t\t\tthis.setNamedFilter(key, values)\n\t\t\t\t}\n\t\t\t\tthis.$emit('filter-change', { key, values })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * A picker of the endpoint's facets changed: filter on the value, or\n\t\t * take the filter off for the All choice.\n\t\t *\n\t\t * @param {string} field The facet's field.\n\t\t * @param {string} value The chosen value, '' for All.\n\t\t * @return {void}\n\t\t */\n\t\tonSourceFacetChange(field, value) {\n\t\t\tthis.setNamedFilter(field, value === '' ? [] : [value])\n\t\t},\n\n\t\t/**\n\t\t * Record one sidebar choice on a named-source page and mirror it into\n\t\t * the URL.\n\t\t *\n\t\t * The ref is REPLACED rather than mutated in place so the watcher in\n\t\t * `useNamedSource` fires on the first change too, and the reload it\n\t\t * triggers is the only place the new query is built.\n\t\t *\n\t\t * @param {string} key The sidebar field key.\n\t\t * @param {Array|object|null} values The chosen values, or a `{ from, to }` range.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tsetNamedFilter(key, values) {\n\t\t\tconst next = { ...(this.namedActiveFilters || {}) }\n\t\t\tconst asQuery = namedFilterToQuery(values)\n\t\t\tif (asQuery === '') {\n\t\t\t\tdelete next[key]\n\t\t\t} else {\n\t\t\t\tnext[key] = values\n\t\t\t}\n\t\t\tthis.namedActiveFilters = next\n\t\t\tthis.persistNamedFiltersToRoute(next)\n\t\t},\n\n\t\t/**\n\t\t * Write the active named-source filters into `$route.query`.\n\t\t *\n\t\t * So a filtered view can be SHARED, which is half of what a search\n\t\t * field is for: the colleague who opens the link sees the same list,\n\t\t * because `namedFiltersFromRoute` reads it back on mount.\n\t\t *\n\t\t * `replace`, not `push`: narrowing a list is not a place in the\n\t\t * history, and a back button that steps through six filter choices\n\t\t * never reaches the page before them. A rejected navigation (the same\n\t\t * path and query) is swallowed, matching `persistSortToRoute`.\n\t\t *\n\t\t * @param {object} filters The active `{ key: values }` map.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tpersistNamedFiltersToRoute(filters) {\n\t\t\tif (!this.$router || !this.$route) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst properties = declaredFilterFields(this)\n\t\t\tconst query = { ...this.$route.query }\n\t\t\tfor (const key of Object.keys(properties)) {\n\t\t\t\tif (properties[key] && properties[key].facetable === true) {\n\t\t\t\t\tdelete query[key]\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [key, values] of Object.entries(filters || {})) {\n\t\t\t\tconst value = namedFilterToQuery(values)\n\t\t\t\tif (value !== '') {\n\t\t\t\t\tquery[key] = value\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$router.replace({ query }).catch(() => {})\n\t\t},\n\n\t\t/**\n\t\t * Folder selection from the opt-in folder sidebar: filter the list by the\n\t\t * config's `filterField` (or `field`); a null id clears it.\n\t\t *\n\t\t * @param {(string|number|null)} folderId The selected folder id (null = All).\n\t\t * @return {void}\n\t\t */\n\t\t/**\n\t\t * The actions one row offers: this page's declared actions narrowed to\n\t\t * the ones the server says this caller may run on that record. The\n\t\t * order, label and icon stay the page's.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<object>} The actions to render for that row.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\t/**\n\t\t * Move the keyboard's focus one row, staying inside the list.\n\t\t *\n\t\t * @param {number} delta 1 for the next row, -1 for the previous one.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tmoveFocusedRow(delta) {\n\t\t\tconst rows = this.displayObjects || []\n\t\t\tif (rows.length === 0) {\n\t\t\t\tthis.focusedRowIndex = -1\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst next = this.focusedRowIndex + delta\n\t\t\tthis.focusedRowIndex = Math.min(Math.max(next, 0), rows.length - 1)\n\t\t},\n\n\t\t/**\n\t\t * Select or deselect the focused row.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\ttoggleFocusedRowSelection() {\n\t\t\tconst row = this.focusedRow\n\t\t\tif (!row) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst id = row[this.rowKey]\n\t\t\tconst selected = this.internalSelectedIds.includes(id)\n\t\t\tthis.onSelect(selected\n\t\t\t\t? this.internalSelectedIds.filter((other) => other !== id)\n\t\t\t\t: [...this.internalSelectedIds, id])\n\t\t},\n\n\t\t/**\n\t\t * The first action a row's menu shows and enables: the page's order, narrowed by what the server allows, by `visible` / `visibleWhen`, and by `disabled`.\n\t\t * The keyboard therefore never runs what the menu hides or greys out.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {(object|null)} The action, or null.\n\t\t * @spec openspec/changes/row-action-builtin-placement/specs/index-page/spec.md\n\t\t */\n\t\tprimaryRowActionFor(row) {\n\t\t\treturn this.rowActionsFor(row).find((action) => isRowActionVisible(action, row)\n\t\t\t\t&& !(typeof action.disabled === 'function' ? action.disabled(row) : action.disabled)) || null\n\t\t},\n\n\t\t/**\n\t\t * Run the focused row's primary action (see `primaryRowActionFor`).\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\trunPrimaryRowAction() {\n\t\t\tconst row = this.focusedRow\n\t\t\tif (!row) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst first = this.primaryRowActionFor(row)\n\t\t\tif (!first) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (typeof first.handler === 'function') {\n\t\t\t\tfirst.handler(row)\n\t\t\t}\n\t\t\tthis.onRowAction(rowActionPayload(first, row))\n\t\t},\n\n\t\t/**\n\t\t * Handle a key pressed on the list.\n\t\t *\n\t\t * @param {KeyboardEvent} event The event.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tonListKeydown(event) {\n\t\t\tif (!this.listShortcuts) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst shortcut = shortcutFor(event)\n\t\t\tif (!shortcut) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst run = this.listShortcutHandlers[shortcut.id]\n\t\t\tif (typeof run !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tevent.preventDefault()\n\t\t\trun()\n\t\t},\n\n\t\t/**\n\t\t * Open the quick edit on one row.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\topenQuickEdit(row) {\n\t\t\tif (this.quickEditFields.length === 0 || !row) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.quickEditServerRow = null\n\t\t\tthis.quickEditRow = row\n\t\t},\n\n\t\t/**\n\t\t * Write a quick edit's patch onto its row in the list.\n\t\t *\n\t\t * The patch goes through the same row-patch map a record saved in the\n\t\t * split pane goes through, so the list keeps its scroll, its selection\n\t\t * and its page for the same reason it already did: nothing about the\n\t\t * list changed, one row's fields did.\n\t\t *\n\t\t * @param {object} payload The dialog's payload.\n\t\t * @param {(string|number)} payload.id The row id.\n\t\t * @param {object} payload.patch The fields to write.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tonQuickEditSave({ id, patch }) {\n\t\t\tif (id === undefined || id === null || !patch || Object.keys(patch).length === 0) {\n\t\t\t\tthis.quickEditRow = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst current = this.splitRowPatches[id] || {}\n\t\t\tthis.splitRowPatches = { ...this.splitRowPatches, [id]: { ...current, ...patch } }\n\t\t\tthis.quickEditRow = null\n\t\t\t/**\n\t\t\t * @event quick-edit-save Emitted with the fields a quick edit wrote onto a row.\n\t\t\t * @type {{id: (string|number), patch: object}}\n\t\t\t */\n\t\t\tthis.$emit('quick-edit-save', { id, patch })\n\t\t},\n\n\t\t/**\n\t\t * The buttons an `actions` column shows on a row: the row actions its\n\t\t * `widgetProps.actions` names (by id, else by label), in that order,\n\t\t * that are visible for the row.\n\t\t *\n\t\t * @param {object} col The column.\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{key: string, label: string, variant: string, disabled: boolean}>}\n\t\t * @spec openspec/changes/table-actions-column/specs/index-page/spec.md#requirement-a-column-can-show-row-actions-as-buttons\n\t\t */\n\t\tactionColumnItems(col, row) {\n\t\t\tconst wanted = Array.isArray(col.widgetProps && col.widgetProps.actions) ? col.widgetProps.actions : []\n\t\t\tconst available = this.rowActionsFor(row)\n\t\t\treturn wanted\n\t\t\t\t.map((ref) => available.find((action) => action.id === ref) || available.find((action) => action.label === ref))\n\t\t\t\t.filter((action) => action && isRowActionVisible(action, row))\n\t\t\t\t.map((action, index) => ({\n\t\t\t\t\tkey: action.id || action.label,\n\t\t\t\t\tlabel: this.cnTranslate(action.label),\n\t\t\t\t\tvariant: action.variant || (index === 0 ? 'secondary' : 'tertiary'),\n\t\t\t\t\tdisabled: typeof action.disabled === 'function' ? !!action.disabled(row) : action.disabled === true,\n\t\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Run one `actions` column button: its handler, then the same `action`\n\t\t * event a row menu entry emits.\n\t\t *\n\t\t * @param {string} key The action's id, else its label.\n\t\t * @param {object} row The row.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/table-actions-column/specs/index-page/spec.md#requirement-a-column-can-show-row-actions-as-buttons\n\t\t */\n\t\trunColumnAction(key, row) {\n\t\t\tconst action = this.rowActionsFor(row).find((entry) => (entry.id || entry.label) === key)\n\t\t\tif (!action) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (typeof action.handler === 'function') {\n\t\t\t\taction.handler(row)\n\t\t\t}\n\t\t\tthis.onRowAction(rowActionPayload(action, row))\n\t\t},\n\n\t\t/**\n\t\t * Take the server's version of a row after a conflict. Nothing of this\n\t\t * person's edit is written, and the row in the list is refreshed to\n\t\t * what the server holds, so the screen and the record agree.\n\t\t *\n\t\t * @param {object} saved The record as the server holds it.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tonQuickEditKeepTheirs(saved) {\n\t\t\tconst id = saved && saved[this.rowKey]\n\t\t\tif (id !== undefined && id !== null) {\n\t\t\t\tthis.splitRowPatches = { ...this.splitRowPatches, [id]: saved }\n\t\t\t}\n\t\t\tthis.quickEditRow = null\n\t\t\tthis.quickEditServerRow = null\n\t\t},\n\n\t\trowActionsFor(row) {\n\t\t\treturn withoutViewWhenRowOpensDetail(\n\t\t\t\tavailableRowActions(this.mergedActions, row, this.rowActionField),\n\t\t\t\tthis.rowOpensDetailFor(row),\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * The row's own name, for the row menu button's accessible name\n\t\t * (\"Actions for <title>\"): the `nameFormatter`, else the\n\t\t * `massActionNameField`, else the row's title or name, the record's\n\t\t * resolved display name, the title column's value, or the schema's\n\t\t * title property. The first plain text wins.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} The name, or ''.\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-table-is-a-white-card-with-one-row-menu\n\t\t */\n\t\trowTitleFor(row) {\n\t\t\tif (!row) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst named = typeof this.nameFormatter === 'function' ? this.nameFormatter(row) : row[this.massActionNameField]\n\t\t\tconst titleKey = this.renderedColumns?.[0]?.key\n\t\t\tconst nameField = this.effectiveSchema?.configuration?.objectNameField\n\t\t\tconst candidates = [\n\t\t\t\tnamed,\n\t\t\t\trow.title,\n\t\t\t\trow.name,\n\t\t\t\trow['@self']?.name,\n\t\t\t\ttitleKey ? getDotted(row, titleKey) : undefined,\n\t\t\t\tnameField ? getDotted(row, nameField) : undefined,\n\t\t\t]\n\t\t\tconst value = candidates.find((candidate) => (typeof candidate === 'string' && candidate.trim() !== '') || typeof candidate === 'number')\n\t\t\treturn value === undefined ? '' : String(value)\n\t\t},\n\n\t\t/**\n\t\t * Whether a click on this row navigates to the record's detail page.\n\t\t * When it does, the row menu offers Edit and not View (viewing is what\n\t\t * the click already does). A `viewTo` that answers null for the row\n\t\t * means this record has no detail page, so it keeps View.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {boolean} True when the row opens a detail page.\n\t\t * @spec openspec/changes/row-menu-edits-when-the-row-opens-the-detail/specs/index-page/spec.md\n\t\t */\n\t\trowOpensDetailFor(row) {\n\t\t\tif (!this.rowClickOpens) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (typeof this.viewTo === 'function') {\n\t\t\t\treturn Boolean(row) && this.viewTo(row) !== null && this.viewTo(row) !== undefined\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Why the server refused an action on a row, when it said. Available on\n\t\t * request rather than rendered, because a menu that lists what you may\n\t\t * not do is a menu that takes longer to read.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {object} action The declared action.\n\t\t * @return {string} The refusal reason, or ''.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\trowActionRefusal(row, action) {\n\t\t\treturn refusalReasonFor(action, row, this.rowActionField)\n\t\t},\n\n\t\t/**\n\t\t * The actions the server allowed on a row that this page does not\n\t\t * declare. Nothing renders them. They are here so a page can see what\n\t\t * it is ignoring without the menu growing a button nobody wrote.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string[]} The undeclared action ids.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\trowActionsNotDeclared(row) {\n\t\t\treturn undeclaredRowActions(this.mergedActions, row, this.rowActionField)\n\t\t},\n\n\t\tonFolderSelect(folderId) {\n\t\t\tthis.selectedFolderId = folderId\n\t\t\tconst key = (this.folderSidebar && (this.folderSidebar.filterField || this.folderSidebar.field)) || ''\n\t\t\tconst folder = this.activeScope\n\t\t\tconst target = (folder && typeof folder.schema === 'string' && folder.schema !== '')\n\t\t\t\t? { schema: folder.schema, register: (typeof folder.register === 'string' && folder.register !== '') ? folder.register : '' }\n\t\t\t\t: null\n\t\t\tconst previous = this.activeFolderSchema\n\t\t\tconst switched = (target ? `${target.register}|${target.schema}` : '') !== (previous ? `${previous.register}|${previous.schema}` : '')\n\t\t\tif (switched) {\n\t\t\t\t// A row or dialog from the old schema means nothing under the new one.\n\t\t\t\tthis.resetSelectionAndDialogs()\n\t\t\t}\n\t\t\tthis.activeFolderSchema = target\n\t\t\tif (target) {\n\t\t\t\t// The folder picks a schema, not a value of the page's own field; the\n\t\t\t\t// object-type change refetches, so only drop a leftover folder filter.\n\t\t\t\tif (key && this.list && this.list.activeFilters.value[key] !== undefined) {\n\t\t\t\t\tconst { [key]: _dropped, ...rest } = this.list.activeFilters.value\n\t\t\t\t\tthis.list.activeFilters.value = rest\n\t\t\t\t}\n\t\t\t} else if (key) {\n\t\t\t\tthis.onFilterEvent({ key, values: (folderId === null || folderId === undefined) ? [] : [folderId] })\n\t\t\t}\n\t\t\tthis.applyScopeSort()\n\t\t\t/**\n\t\t\t * @event folder-change Emitted when a folder is selected in the sidebar.\n\t\t\t * @type {(string|number|null)} The selected folder id (null = All).\n\t\t\t */\n\t\t\tthis.$emit('folder-change', folderId)\n\t\t},\n\n\t\t/**\n\t\t * Clear the row selection and close any form, delete or copy dialog.\n\t\t * Used when the loaded schema changes under them.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/cnindexpage-folder-schema/tasks.md#task-3\n\t\t */\n\t\tresetSelectionAndDialogs() {\n\t\t\tthis.onSelect([])\n\t\t\tthis.showSingleDeleteDialog = false\n\t\t\tthis.showSingleCopyDialog = false\n\t\t\tthis.showFormDialogVisible = false\n\t\t\tthis.actionTargetItem = null\n\t\t},\n\n\t\t/**\n\t\t * Put the active scope's `defaultSort` on the list and refetch with it.\n\t\t *\n\t\t * The scope's sort is applied through the list's own `sortKeys`, the\n\t\t * same state a header click writes, rather than through a second sort\n\t\t * path — so the fetch carries it and the header shows it as sorted.\n\t\t * A scope declaring no sort leaves whatever is active alone: that is a\n\t\t * scope with nothing to say about sorting, not a scope asking for the\n\t\t * sort to be cleared.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tapplyScopeSort() {\n\t\t\tconst sortKeys = this.activeScopeLayout.sortKeys\n\t\t\tif (!sortKeys.length || !this.isSelfFetchMode || !this.list) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.list.sortKeys) {\n\t\t\t\tthis.list.sortKeys.value = sortKeys.map((entry) => ({ ...entry }))\n\t\t\t}\n\t\t\tif (typeof this.list.refresh === 'function') {\n\t\t\t\tthis.list.refresh(1)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Load the Nextcloud groups for `folderSidebar.source: 'groups'`, each\n\t\t * with its member count. `folderSidebar.groups` (`[{ id, parent? }]`)\n\t\t * picks and orders them and nests a group under its `parent`;\n\t\t * `folderSidebar.parentsFrom` reads that list from records instead.\n\t\t * Without either every group shows, by name. A refused request lists none.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-groups-users-source/specs/index-page/spec.md#requirement-an-index-page-can-list-nextcloud-groups-and-their-members\n\t\t * @spec openspec/changes/group-parents-from-records/specs/index-page/spec.md#requirement-a-groups-pane-can-read-its-tree-from-records\n\t\t */\n\t\tasync loadFolderGroups() {\n\t\t\tconst cfg = this.folderSidebar\n\t\t\tif (!cfg || cfg.source !== 'groups') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { default: axios } = await import('@nextcloud/axios')\n\t\t\t\tconst groups = await fetchGroups(axios, { search: cfg.search || '', limit: cfg.limit || 200 })\n\t\t\t\tconst declared = Array.isArray(cfg.groups)\n\t\t\t\t\t? cfg.groups.filter((entry) => entry && entry.id)\n\t\t\t\t\t: await this.groupParentsFromRecords(cfg.parentsFrom)\n\t\t\t\tif (!declared) {\n\t\t\t\t\tthis.folderGroupList = [...groups].sort((a, b) => a.name.localeCompare(b.name))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst byId = new Map(groups.map((group) => [group.id, group]))\n\t\t\t\tthis.folderGroupList = declared\n\t\t\t\t\t.filter((entry) => byId.has(String(entry.id)))\n\t\t\t\t\t.map((entry) => ({ ...byId.get(String(entry.id)), parentId: entry.parent ? String(entry.parent) : null, record: entry.record || null }))\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('[CnIndexPage] failed to load the Nextcloud groups', e)\n\t\t\t\tthis.folderGroupList = []\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The groups pane's tree read from records (`folderSidebar.parentsFrom`:\n\t\t * `{ register, schema, groupField?, parentField? }`): each record names a\n\t\t * group (`groupField`, default `group`) and the group above it\n\t\t * (`parentField`, default `parent`): a group id, or the id of another\n\t\t * record, read as that record's group. In the `groups` shape. Null without\n\t\t * the option, when the records cannot be read or when none names a\n\t\t * group, so the pane lists every group flat.\n\t\t *\n\t\t * @param {object|undefined} from The `parentsFrom` config.\n\t\t * @return {Promise<Array<{id: string, parent: string|null}>|null>} The entries, or null.\n\t\t * @spec openspec/changes/group-parents-from-records/specs/index-page/spec.md#requirement-a-groups-pane-can-read-its-tree-from-records\n\t\t */\n\t\tasync groupParentsFromRecords(from) {\n\t\t\tif (!from || !from.register || !from.schema) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst groupField = from.groupField || 'group'\n\t\t\tconst parentField = from.parentField || 'parent'\n\t\t\ttry {\n\t\t\t\tconst body = await cnFetchJson(\n\t\t\t\t\t`/apps/openregister/api/objects/${encodeURIComponent(from.register)}/${encodeURIComponent(from.schema)}`,\n\t\t\t\t\t{ query: { _limit: from.limit || 500 } },\n\t\t\t\t)\n\t\t\t\tconst records = (Array.isArray(body?.results) ? body.results : []).filter((record) => record && record[groupField])\n\t\t\t\tif (records.length === 0) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst groupOfRecord = new Map(records.map((record) => [String(record.id ?? record['@self']?.id ?? ''), String(record[groupField])]))\n\t\t\t\treturn records.map((record) => {\n\t\t\t\t\tconst parent = record[parentField] ? String(record[parentField]) : null\n\t\t\t\t\treturn { id: String(record[groupField]), parent: parent === null ? null : (groupOfRecord.get(parent) ?? parent), record }\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Load the folder list from an OpenRegister register/schema for a\n\t\t * `folderSidebar.source === 'register'` config. Maps each object to\n\t\t * `{ id: <idField|@self.uuid>, name: <nameField|title> }`.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadFolderRegister() {\n\t\t\tconst cfg = this.folderSidebar\n\t\t\tif (!cfg || cfg.source !== 'register' || !cfg.register || !cfg.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst [{ default: axios }, { generateUrl }] = await Promise.all([\n\t\t\t\t\timport('@nextcloud/axios'),\n\t\t\t\t\timport('@nextcloud/router'),\n\t\t\t\t])\n\t\t\t\tconst url = generateUrl('/apps/openregister/api/objects/{register}/{schema}', { register: cfg.register, schema: cfg.schema })\n\t\t\t\tconst res = await axios.get(url, { params: { _limit: cfg.limit || 200 } })\n\t\t\t\tconst body = (res && res.data && (res.data.results || res.data)) || []\n\t\t\t\t// A response that is not a list is an empty folder list, not a\n\t\t\t\t// crash: the pane then shows only \"All\" rather than logging a\n\t\t\t\t// TypeError that names this component for the server's shape.\n\t\t\t\tconst rows = Array.isArray(body) ? body : []\n\t\t\t\tconst idField = cfg.idField || '@self.uuid'\n\t\t\t\tconst nameField = cfg.nameField || 'title'\n\t\t\t\tconst layouts = {}\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tconst id = this.getByPath(row, idField)\n\t\t\t\t\tconst carried = row && row['x-index']\n\t\t\t\t\tif (id !== null && id !== undefined && carried && typeof carried === 'object') {\n\t\t\t\t\t\tlayouts[String(id)] = carried\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.folderRowLayouts = layouts\n\t\t\t\tthis.folderRegisterList = rows\n\t\t\t\t\t.map((row) => ({ id: this.getByPath(row, idField), name: this.getByPath(row, nameField) || this.getByPath(row, idField) }))\n\t\t\t\t\t.filter((f) => f.id !== null && f.id !== undefined)\n\t\t\t\t\t.sort((a, b) => String(a.name).localeCompare(String(b.name)))\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('[CnIndexPage] failed to load folder register', e)\n\t\t\t\tthis.folderRegisterList = []\n\t\t\t\tthis.folderRowLayouts = {}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a given value is currently an active facet filter for a field.\n\t\t *\n\t\t * @param {string} key The schema field key.\n\t\t * @param {string} val The enum value.\n\t\t * @return {boolean} True when the value is in the active filter set.\n\t\t */\n\t\tisFilterActive(key, val) {\n\t\t\tconst current = this.effectiveActiveFilters[key]\n\t\t\treturn Array.isArray(current) && current.includes(val)\n\t\t},\n\n\t\t/**\n\t\t * Toggle one enum value in a field's facet filter, then apply it through\n\t\t * the standard filter path (`onFilterEvent`).\n\t\t *\n\t\t * @param {string} key The schema field key.\n\t\t * @param {string} val The enum value to toggle.\n\t\t * @return {void}\n\t\t */\n\t\ttoggleFilter(key, val) {\n\t\t\tconst current = Array.isArray(this.effectiveActiveFilters[key]) ? this.effectiveActiveFilters[key] : []\n\t\t\tconst values = current.includes(val) ? current.filter((v) => v !== val) : [...current, val]\n\t\t\tthis.onFilterEvent({ key, values })\n\t\t},\n\n\t\t/**\n\t\t * Whether a governed column is currently visible. A null visible-column set\n\t\t * means \"all governed columns visible\" (the initial state).\n\t\t *\n\t\t * @param {string} key The column key.\n\t\t * @return {boolean} True when the column is shown in the table.\n\t\t */\n\t\tisColumnVisible(key) {\n\t\t\tconst visible = this.effectiveVisibleColumns\n\t\t\treturn Array.isArray(visible) ? visible.includes(key) : true\n\t\t},\n\n\t\t/**\n\t\t * Toggle a governed column on/off from the table-header column menu, then\n\t\t * apply it through the same path as the sidebar (`onColumnsEvent`).\n\t\t *\n\t\t * @param {string} key The column key to toggle.\n\t\t * @return {void}\n\t\t */\n\t\ttoggleColumn(key) {\n\t\t\tconst base = Array.isArray(this.effectiveVisibleColumns)\n\t\t\t\t? this.effectiveVisibleColumns\n\t\t\t\t: this.governedColumns.map((c) => c.key)\n\t\t\tconst next = base.includes(key) ? base.filter((k) => k !== key) : [...base, key]\n\t\t\tthis.onColumnsEvent(next)\n\t\t},\n\n\t\t/**\n\t\t * @param {Array} columns Visible-column change from the sidebar.\n\t\t * @return {void}\n\t\t */\n\t\tonColumnsEvent(columns) {\n\t\t\tif (this.isSelfFetchMode && this.list.visibleColumns) {\n\t\t\t\tthis.list.visibleColumns.value = columns\n\t\t\t}\n\t\t\tthis.keepPersonalColumns(columns, this.pinnedColumnCount)\n\t\t\tthis.$emit('columns-change', columns)\n\t\t},\n\n\t\t/**\n\t\t * The preference key this list's column layout is held under. The list id\n\t\t * is the manual-order id, else the page's route name (the manifest page id),\n\t\t * else the object type or schema.\n\t\t *\n\t\t * @return {string} The key, `columns.<list id>`.\n\t\t */\n\t\tpersonalColumnsPreferenceKey() {\n\t\t\tconst route = this.$route && typeof this.$route.name === 'string' ? this.$route.name : ''\n\t\t\treturn personalColumnsKey(this.manualOrderId || route || this.objectType || this.schema || 'default')\n\t\t},\n\n\t\t/**\n\t\t * Keep the person's column layout: held while a view's columns are applied\n\t\t * (the view is a lens, not a preference), otherwise stored in their preferences.\n\t\t *\n\t\t * @param {string[]} columns The visible columns in their order.\n\t\t * @param {number} pinned How many leading columns are pinned.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/index-column-order-and-pinning/tasks.md#task-4\n\t\t */\n\t\tkeepPersonalColumns(columns, pinned) {\n\t\t\tif (!this.personalColumns || !Array.isArray(columns)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (Array.isArray(this.appliedViewColumns)) {\n\t\t\t\tthis.appliedViewColumns = columns\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.personalLayout = { columns, pinned }\n\t\t\tthis.persistPersonalColumns()\n\t\t},\n\n\t\t/**\n\t\t * The person moved a column in the sidebar's Order and pin list.\n\t\t *\n\t\t * @param {string[]} columns The visible columns in their new order.\n\t\t * @return {void}\n\t\t */\n\t\tonColumnsReorder(columns) {\n\t\t\tthis.onColumnsEvent(columns)\n\t\t},\n\n\t\t/**\n\t\t * The person pinned or unpinned a column.\n\t\t *\n\t\t * @param {number} count How many leading columns are pinned now.\n\t\t * @return {void}\n\t\t */\n\t\tonPinChange(count) {\n\t\t\tif (!this.personalColumns || Array.isArray(this.appliedViewColumns)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst columns = this.personalLayout ? this.personalLayout.columns : (Array.isArray(this.effectiveVisibleColumns) ? this.effectiveVisibleColumns : this.tableColumns.map((c) => (typeof c === 'string' ? c : c.key)))\n\t\t\tthis.keepPersonalColumns(columns, count)\n\t\t},\n\n\t\t/**\n\t\t * Reset columns: forget the person's layout and show the page's own columns.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonColumnsReset() {\n\t\t\tthis.personalLayout = null\n\t\t\tthis.appliedViewColumns = null\n\t\t\tif (this.isSelfFetchMode && this.list.visibleColumns) {\n\t\t\t\tthis.list.visibleColumns.value = null\n\t\t\t}\n\t\t\tconst write = this.cnUserPreferences?.write\n\t\t\tif (this.personalColumns && typeof write === 'function') {\n\t\t\t\tPromise.resolve(write(this.personalColumnsPreferenceKey(), null)).catch(() => {})\n\t\t\t}\n\t\t\tthis.$emit('columns-change', null)\n\t\t},\n\n\t\t/**\n\t\t * Write the layout to the person's preferences. A failed write leaves the\n\t\t * layout in place for this session and says nothing.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync persistPersonalColumns() {\n\t\t\tconst write = this.cnUserPreferences?.write\n\t\t\tif (typeof write !== 'function' || !this.personalLayout) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait write(this.personalColumnsPreferenceKey(), {\n\t\t\t\t\tcolumns: this.personalLayout.columns,\n\t\t\t\t\tpinned: this.personalLayout.pinned,\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\t// Not stored; the layout still stands until the page reloads.\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read the person's column layout for this list on mount.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadPersonalColumns() {\n\t\t\tconst read = this.cnUserPreferences?.read\n\t\t\tif (!this.personalColumns || typeof read !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst stored = await read(this.personalColumnsPreferenceKey(), null)\n\t\t\t\tif (stored && Array.isArray(stored.columns) && !this.personalLayout) {\n\t\t\t\t\tthis.personalLayout = { columns: stored.columns.map(String), pinned: Number(stored.pinned) || 0 }\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// An unreadable preference leaves the page's own columns.\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Refresh the list when `dispatchObjectsChanged` names this page's\n\t\t * register and schema, by slug or id. A part missing on either side matches.\n\t\t *\n\t\t * @param {CustomEvent} event The objects-changed event.\n\t\t * @return {void}\n\t\t */\n\t\tonObjectsChanged(event) {\n\t\t\t// A collection list can hold rows of any pair, so any change may show in it.\n\t\t\tif (this.isSelfFetchMode && this.collectionUrl) {\n\t\t\t\tthis.onRefreshEvent()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst detail = (event && event.detail) || {}\n\t\t\tconst schema = this.effectiveSchema\n\t\t\tconst schemaIds = [this.schema, schema && schema.id, schema && schema.slug]\n\t\t\t\t.filter((v) => v !== undefined && v !== null && v !== '' && typeof v !== 'object')\n\t\t\t\t.map(String)\n\t\t\tif (detail.register && this.register && detail.register !== String(this.register)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (detail.schema && schemaIds.length > 0 && !schemaIds.includes(detail.schema)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onRefreshEvent()\n\t\t},\n\n\t\t/**\n\t\t * The object store live updates come through.\n\t\t *\n\t\t * @return {object} The store.\n\t\t */\n\t\tliveStore() {\n\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t},\n\n\t\t/**\n\t\t * Subscribe to the `live` object types and read the list again after a change.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/pl4-index-live/specs/pl4-index-live/spec.md#requirement-an-index-page-follows-live-changes\n\t\t */\n\t\tasync startLive() {\n\t\t\tconst types = Array.isArray(this.live) ? this.live.filter((type) => typeof type === 'string' && type !== '') : []\n\t\t\tconst store = types.length > 0 ? this.liveStore() : null\n\t\t\tif (!store || typeof store.subscribe !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst handles = []\n\t\t\tfor (const type of types) {\n\t\t\t\ttry {\n\t\t\t\t\thandles.push(await store.subscribe(type))\n\t\t\t\t} catch {\n\t\t\t\t\t// A type the store cannot follow; the list still reads on refresh.\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.liveHandles = handles\n\t\t\tthis.liveUnwatch = this.$watch(() => store.liveLastEventAt, () => this.onLiveEvent())\n\t\t},\n\n\t\t/**\n\t\t * Read the list again once changes stop arriving for half a second.\n\t\t */\n\t\tonLiveEvent() {\n\t\t\tclearTimeout(this.liveTimer)\n\t\t\tthis.liveTimer = setTimeout(() => this.onRefreshEvent(), 500)\n\t\t},\n\n\t\t/**\n\t\t * Let go of the live subscriptions.\n\t\t */\n\t\tstopLive() {\n\t\t\tclearTimeout(this.liveTimer)\n\t\t\tif (typeof this.liveUnwatch === 'function') {\n\t\t\t\tthis.liveUnwatch()\n\t\t\t}\n\t\t\tconst store = this.liveHandles.length > 0 ? this.liveStore() : null\n\t\t\tif (store && typeof store.unsubscribe === 'function') {\n\t\t\t\tthis.liveHandles.forEach((handle) => store.unsubscribe(handle))\n\t\t\t}\n\t\t\tthis.liveHandles = []\n\t\t},\n\n\t\t/** @return {Promise<void>} */\n\t\tasync onRefreshEvent() {\n\t\t\tthis.$emit('refresh')\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tthis.internalRefreshing = true\n\t\t\t\ttry {\n\t\t\t\t\tawait this.namedReload()\n\t\t\t\t} finally {\n\t\t\t\t\tthis.internalRefreshing = false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\tthis.internalRefreshing = true\n\t\t\t\ttry {\n\t\t\t\t\tawait this.list.refresh()\n\t\t\t\t} finally {\n\t\t\t\t\tthis.internalRefreshing = false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Publish (or clear) the embedded CnIndexSidebar config to\n\t\t * the `cnIndexSidebarConfig` holder so CnAppRoot can mount\n\t\t * it at NcContent level. No-op when no CnAppRoot ancestor\n\t\t * exists — in that case `shouldRenderInlineSidebar` keeps\n\t\t * the inline render alive.\n\t\t */\n\t\tpublishHoistedSidebar() {\n\t\t\tif (!this.cnHostsIndexSidebar || !this.cnIndexSidebarConfig) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.resolvedSidebar.enabled || this.resolvedSidebar.show === false) {\n\t\t\t\tthis.cnIndexSidebarConfig.value = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.cnIndexSidebarConfig.value = {\n\t\t\t\t// markRaw: the holder is CnAppRoot `data()`, so it is deeply\n\t\t\t\t// reactive and would proxy the component definition itself.\n\t\t\t\tcomponent: markRaw(CnIndexSidebar),\n\t\t\t\tprops: this.hoistedSidebarProps,\n\t\t\t\tlisteners: {\n\t\t\t\t\t'update:open': (val) => {\n\t\t\t\t\t\tthis.sidebarOpen = val\n\t\t\t\t\t},\n\n\t\t\t\t\tsearch: (event) => this.onSearchEvent(event),\n\t\t\t\t\t'columns-change': (event) => this.onColumnsEvent(event),\n\t\t\t\t\t'columns-reorder': (event) => this.onColumnsReorder(event),\n\t\t\t\t\t'pin-change': (event) => this.onPinChange(event),\n\t\t\t\t\t'columns-reset': () => this.onColumnsReset(),\n\t\t\t\t\t'filter-change': (event) => this.onFilterEvent(event),\n\t\t\t\t\t'clear-filters': () => this.onClearFilters(),\n\t\t\t\t\t'sort-change': (keys, value) => this.onSidebarSortChange(keys, value),\n\t\t\t\t\t'saved-view': (event) => this.onSavedViewAction(event),\n\t\t\t\t\t'tab-change': (tab) => {\n\t\t\t\t\t\tthis.sidebarActiveTab = tab\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Intercepts CnRowActions' and CnContextMenu's bubbled `@action` so `handler: \"none\"` actions are dropped before re-emit.\n\t\t * A built-in is matched by its id, an app action by its label.\n\t\t *\n\t\t * @param {{action: string, row: object, id?: string, builtin?: boolean}} payload The bubbled action payload.\n\t\t */\n\t\tonRowAction(payload) {\n\t\t\tconst matched = payload.builtin === true\n\t\t\t\t? this.mergedActions.find((a) => a.builtin === true && a.id === payload.id)\n\t\t\t\t: this.mergedActions.find((a) => a.builtin !== true && a.label === payload.action)\n\t\t\tif (matched && matched._dispatchSuppress) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event action A row action was chosen from a row's actions menu, its right-click menu or the keyboard primary action. Payload: `action` (the label), the row, the action's `id` when it has one, and `builtin: true` for a built-in View / Edit / Copy / Delete. Its handler has already run.\n\t\t\t * @type {{ action: string, row: object, id?: string, builtin?: boolean }}\n\t\t\t */\n\t\t\tthis.$emit('action', payload)\n\t\t},\n\n\t\t/**\n\t\t * A card moved on the board.\n\t\t *\n\t\t * The list is refreshed rather than patched in place: the transition\n\t\t * may have changed more than the status (a date armed, an assignee\n\t\t * cleared), and a board that only moved the card would show a row that\n\t\t * disagrees with the table beside it.\n\t\t *\n\t\t * @param {object} move The `{ card, toKey }` the board emitted.\n\t\t * @return {Promise<void>} Nothing.\n\t\t */\n\t\tasync onBoardMoved(move) {\n\t\t\t/**\n\t\t\t * @event board-move A card moved through the host's transition.\n\t\t\t * @type {object}\n\t\t\t */\n\t\t\tthis.$emit('board-move', move)\n\t\t\tawait this.onRefreshEvent()\n\t\t},\n\n\t\t/**\n\t\t * Row/card click: toggles selection when `selectable` (covers the custom\n\t\t * `cardComponent` path), otherwise emits `row-click` for navigation. A\n\t\t * ctrl/cmd/shift click opens a named source's row in a new tab.\n\t\t *\n\t\t * The `@event` block below sits directly against its `$emit`, and must\n\t\t * stay there. vue-docgen binds an event's description to the emit it\n\t\t * IMMEDIATELY precedes.\n\t\t *\n\t\t * @param {object} row The clicked row object\n\t\t * @param {MouseEvent|KeyboardEvent} [event] The originating click event.\n\t\t */\n\t\tonRowClick(row, event) {\n\t\t\tif (!this.routeClickedRow(row, event)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event row-click Emitted on a row/card click for navigation. Fires when `selectable` is false, OR when `rowClickToView` is set and something can open the row (selection then happens via the checkbox). Payload: `(row, event)` — the clicked row and the native click event (absent for a keyboard shortcut or map marker), so a host can open the row in a new tab on a ctrl/cmd/shift click with `openRowTarget`. A middle click emits `row-aux-click` instead.\n\t\t\t * @type {object} The clicked row object.\n\t\t\t */\n\t\t\tthis.$emit('row-click', ...(event ? [row, event] : [row]))\n\t\t},\n\n\t\t/**\n\t\t * Row/card middle click: opens a named source's row in a new tab and\n\t\t * emits `row-aux-click`, not `row-click`, so a host whose `row-click`\n\t\t * listener navigates never moves the current tab away.\n\t\t *\n\t\t * @param {object} row The clicked row object\n\t\t * @param {MouseEvent} event The originating auxclick event.\n\t\t */\n\t\tonRowAuxClick(row, event) {\n\t\t\tif (!this.routeClickedRow(row, event)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event row-aux-click Emitted on a row/card middle click, under the same conditions as `row-click`, so a host can open the row in a new tab with `openRowTarget`. Payload: `(row, event)` — the clicked row and the native auxclick event.\n\t\t\t * @type {object} The clicked row object.\n\t\t\t */\n\t\t\tthis.$emit('row-aux-click', row, event)\n\t\t},\n\n\t\t/**\n\t\t * The shared part of a row click and a middle click: on a selectable\n\t\t * page a plain click toggles selection instead, and a named source opens\n\t\t * its own row.\n\t\t *\n\t\t * @param {object} row The clicked row object\n\t\t * @param {MouseEvent|KeyboardEvent} [event] The originating event.\n\t\t * @return {boolean} Whether the click navigates, so the caller emits.\n\t\t */\n\t\trouteClickedRow(row, event) {\n\t\t\tif (this.selectable && !this.rowClickOpens) {\n\t\t\t\tif (!event || event.button === undefined || event.button === 0) {\n\t\t\t\t\tthis.onSelect(this.toggleIdInArray(this.internalSelectedIds, row[this.rowKey]))\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// A named source knows where its rows live. Emitting only would leave\n\t\t\t// the click inert on a manifest page, which has no listener to bind —\n\t\t\t// the very shape that left three apps with a dead `@rowClick`.\n\t\t\t//\n\t\t\t// `rowRoute` wins over everything: an app that declares its own\n\t\t\t// page for these rows means it. The source's `openRow` is the\n\t\t\t// right default precisely because a task's page is usually\n\t\t\t// openregister's, and it is wrong for an app that ships one of\n\t\t\t// its own. This cannot be done by listening to `row-click`,\n\t\t\t// because `openRow` calls `window.location.assign()` and the\n\t\t\t// host's push never lands.\n\t\t\t//\n\t\t\t// A ctrl/cmd/shift or middle click opens a new tab instead, from\n\t\t\t// `rowRoute`, the source's `rowTarget(row)` or `detailRoute`. A source\n\t\t\t// with only `openRow` opens the row in place on a ctrl/cmd/shift\n\t\t\t// click and ignores a middle click. The event is marked so the host\n\t\t\t// hearing `row-click` does not open a second tab.\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tconst id = row?.id || row?.uuid\n\t\t\t\tconst source = this.namedSource\n\t\t\t\tconst newTab = isNewTabClick(event)\n\t\t\t\tconst openTarget = (target) => markNewTabHandled(event, openRowTarget(event, target, this.$router))\n\t\t\t\tif (this.rowRoute) {\n\t\t\t\t\tif (id && newTab) {\n\t\t\t\t\t\topenTarget({ name: this.rowRoute, params: { id: String(id) } })\n\t\t\t\t\t} else if (id) {\n\t\t\t\t\t\tthis.$router.push({ name: this.rowRoute, params: { id: String(id) } })\n\t\t\t\t\t}\n\t\t\t\t} else if (source && typeof source.openRow === 'function' && !newTab) {\n\t\t\t\t\tsource.openRow(row)\n\t\t\t\t} else if (source && typeof source.rowTarget === 'function') {\n\t\t\t\t\topenTarget(source.rowTarget(row))\n\t\t\t\t} else if (source && typeof source.openRow === 'function') {\n\t\t\t\t\t// No new-tab target: a modified click still opens the row in place.\n\t\t\t\t\tif (event?.button !== 1) {\n\t\t\t\t\t\tsource.openRow(row)\n\t\t\t\t\t}\n\t\t\t\t} else if (source && source.detailRoute && id) {\n\t\t\t\t\tif (newTab) {\n\t\t\t\t\t\topenTarget({ path: `${source.detailRoute}/${id}` })\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$router.push(`${source.detailRoute}/${id}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Whether a value is a DOM event. A custom list/card component's\n\t\t * `click` may carry the item, the native event, or both.\n\t\t *\n\t\t * @param {unknown} value A `click` listener argument.\n\t\t * @return {boolean}\n\t\t */\n\t\tisDomEvent(value) {\n\t\t\treturn typeof Event !== 'undefined' && value instanceof Event\n\t\t},\n\n\t\t/**\n\t\t * Mousedown on a custom list/card component's root: when a middle click\n\t\t * opens the row, keep the browser from starting autoscroll.\n\t\t *\n\t\t * @param {MouseEvent} event The mousedown event.\n\t\t * @return {void}\n\t\t */\n\t\tonCustomItemMouseDown(event) {\n\t\t\tif (!this.selectable || this.rowClickOpens) {\n\t\t\t\tpreventMiddleClickAutoscroll(event)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Middle click on a custom list/card component's root: open the row\n\t\t * like a middle click on a built-in card would. Skipped when something\n\t\t * inside the component already opened it in a new tab.\n\t\t *\n\t\t * @param {object} row The component's row.\n\t\t * @param {MouseEvent} event The auxclick event.\n\t\t * @return {void}\n\t\t */\n\t\tonCustomItemAuxClick(row, event) {\n\t\t\tif (isRowMiddleClick(event) && !isNewTabHandled(event)) {\n\t\t\t\tthis.onRowAuxClick(row, event)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Resolve a marker click on the map back to its source row and route it\n\t\t * through `onRowClick`, so `@row-click` fires with the identical payload a\n\t\t * table/card click would emit — giving uniform detail-page navigation\n\t\t * across all three view modes.\n\t\t *\n\t\t * @param {{ feature: object }} payload CnMapWidget marker-click payload.\n\t\t */\n\t\tonMarkerClick(payload) {\n\t\t\tconst feature = payload && payload.feature\n\t\t\tconst key = feature && feature.properties ? feature.properties[this.rowKey] : undefined\n\t\t\tif (key === undefined || key === null) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst row = this.displayObjects.find((o) => o[this.rowKey] === key)\n\t\t\tif (row) {\n\t\t\t\tthis.onRowClick(row)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extract a `{ lat, lng }` pair from a row using `mapConfig`. Prefers a\n\t\t * GeoJSON Point on `geoField` (`coordinates: [lng, lat]`), else reads the\n\t\t * dotted `latField` / `lngField` paths. Returns null when the geometry is\n\t\t * missing or non-finite, so callers can skip the row.\n\t\t *\n\t\t * @param {object} row The source object.\n\t\t * @return {{ lat: number, lng: number } | null}\n\t\t */\n\t\tresolveRowLatLng(row) {\n\t\t\tif (!row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst cfg = this.mapConfig || {}\n\t\t\tif (cfg.geoField) {\n\t\t\t\tlet geo = this.getByPath(row, cfg.geoField)\n\t\t\t\t// OpenRegister often stores geometry as a JSON-encoded string on\n\t\t\t\t// object metadata; parse it before reading `coordinates`.\n\t\t\t\tif (typeof geo === 'string') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tgeo = JSON.parse(geo)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tgeo = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst coords = geo && Array.isArray(geo.coordinates) ? geo.coordinates : null\n\t\t\t\tif (coords && Number.isFinite(coords[0]) && Number.isFinite(coords[1])) {\n\t\t\t\t\treturn { lat: Number(coords[1]), lng: Number(coords[0]) }\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lat = Number(this.getByPath(row, cfg.latField))\n\t\t\tconst lng = Number(this.getByPath(row, cfg.lngField))\n\t\t\tif (Number.isFinite(lat) && Number.isFinite(lng)) {\n\t\t\t\treturn { lat, lng }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Resolve a row's GeoJSON geometry for the map view. Prefers a full\n\t\t * geometry on `geoField`: a Point renders as a marker, a Polygon /\n\t\t * MultiPolygon / LineString renders as an area/line — so location cases\n\t\t * plot as both points AND areas. `geoField` is parsed from a JSON string\n\t\t * when OpenRegister stores it encoded. Falls back to a Point built from\n\t\t * `latField` / `lngField`. Returns null when nothing resolvable is present.\n\t\t *\n\t\t * @param {object} row The source object.\n\t\t * @return {object|null} A GeoJSON geometry object, or null.\n\t\t */\n\t\tresolveRowGeometry(row) {\n\t\t\tif (!row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst cfg = this.mapConfig || {}\n\t\t\tconst GEO_TYPES = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon', 'GeometryCollection']\n\t\t\tif (cfg.geoField) {\n\t\t\t\tlet geo = this.getByPath(row, cfg.geoField)\n\t\t\t\tif (typeof geo === 'string') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tgeo = JSON.parse(geo)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tgeo = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (geo && GEO_TYPES.includes(geo.type)) {\n\t\t\t\t\tconst hasShape = geo.type === 'GeometryCollection'\n\t\t\t\t\t\t? Array.isArray(geo.geometries)\n\t\t\t\t\t\t: Array.isArray(geo.coordinates)\n\t\t\t\t\tif (hasShape) {\n\t\t\t\t\t\treturn geo\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lat = Number(this.getByPath(row, cfg.latField))\n\t\t\tconst lng = Number(this.getByPath(row, cfg.lngField))\n\t\t\tif (Number.isFinite(lat) && Number.isFinite(lng)) {\n\t\t\t\treturn { type: 'Point', coordinates: [lng, lat] }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Dig out the first `[lng, lat]` coordinate pair from any GeoJSON geometry\n\t\t * (Point, Polygon ring, GeometryCollection, …) for a rough centroid.\n\t\t *\n\t\t * @param {object} geometry A GeoJSON geometry.\n\t\t * @return {{lat: number, lng: number}|null}\n\t\t */\n\t\tfirstLatLng(geometry) {\n\t\t\tif (!geometry) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tif (geometry.type === 'GeometryCollection') {\n\t\t\t\tfor (const g of (geometry.geometries || [])) {\n\t\t\t\t\tconst p = this.firstLatLng(g)\n\t\t\t\t\tif (p) {\n\t\t\t\t\t\treturn p\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tlet c = geometry.coordinates\n\t\t\twhile (Array.isArray(c) && Array.isArray(c[0])) {\n\t\t\t\tc = c[0]\n\t\t\t}\n\t\t\tif (Array.isArray(c) && Number.isFinite(c[0]) && Number.isFinite(c[1])) {\n\t\t\t\treturn { lat: Number(c[1]), lng: Number(c[0]) }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Read a possibly-dotted property path off an object (e.g. `@self.geo.lat`).\n\t\t * Returns undefined on any missing segment. No path = undefined.\n\t\t *\n\t\t * @param {object} obj The object to read from.\n\t\t * @param {string} path Dot-separated property path.\n\t\t * @return {unknown} The resolved value or undefined.\n\t\t */\n\t\tgetByPath(obj, path) {\n\t\t\tif (!obj || !path) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (Object.hasOwn(obj, path)) {\n\t\t\t\treturn obj[path]\n\t\t\t}\n\t\t\treturn path.split('.').reduce((acc, seg) => (acc === null || acc === undefined ? undefined : acc[seg]), obj)\n\t\t},\n\n\t\t/**\n\t\t * Whether the consumer explicitly passed a prop, in either spelling.\n\t\t *\n\t\t * Needed where a named source changes a prop's EFFECTIVE default: the\n\t\t * declared default is unchanged (the prop interface must not break),\n\t\t * so the value alone cannot distinguish \"left to default\" from\n\t\t * \"explicitly asked for the default\".\n\t\t *\n\t\t * @param {string} name The camelCase prop name.\n\t\t * @return {boolean} True when the prop was passed explicitly.\n\t\t */\n\t\thasExplicitProp(name) {\n\t\t\tconst props = this.$.vnode.props || {}\n\t\t\tconst kebab = name.replace(/[A-Z]/g, (letter) => '-' + letter.toLowerCase())\n\t\t\treturn (name in props) || (kebab in props)\n\t\t},\n\n\t\t/**\n\t\t * Open a named-source row: the source's own navigation, then\n\t\t * `edit-open` for the host.\n\t\t *\n\t\t * This is what the source-action grammar `action: 'open'` resolves to\n\t\t * (see `mergedActions`). Navigation order is deliberate: the source's\n\t\t * `openRow`/`detailRoute` push happens FIRST, so when the host also\n\t\t * navigates (CnPageRenderer binds `@edit-open` → `onRowOpen`, which\n\t\t * honours `config.rowRoute`), the host's push lands last and wins —\n\t\t * the configured target beats the source's default, and a page with\n\t\t * no host listener still navigates.\n\t\t *\n\t\t * @param {object} row The row to open.\n\t\t * @return {void}\n\t\t */\n\t\topenSourceRow(row) {\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.openRow === 'function') {\n\t\t\t\tthis.namedSource.openRow(row)\n\t\t\t} else if (this.isNamedSource && this.namedSource && this.namedSource.detailRoute) {\n\t\t\t\tconst id = row?.id || row?.uuid\n\t\t\t\tif (id && this.$router) {\n\t\t\t\t\tthis.$router.push(`${this.namedSource.detailRoute}/${id}`)\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('edit-open', row)\n\t\t},\n\n\t\t/**\n\t\t * Whether a page tab is the page being shown.\n\t\t *\n\t\t * @param {object} tab The page tab.\n\t\t * @return {boolean} True for the current page.\n\t\t */\n\t\tisActivePageTab(tab) {\n\t\t\tif (tab.to && typeof tab.to === 'object') {\n\t\t\t\treturn !!this.$route && tab.to.name !== undefined && this.$route.name === tab.to.name\n\t\t\t}\n\t\t\tconst path = this.$route && this.$route.path\n\t\t\treturn !!path && String(path).replace(/\\/+$/, '') === String(tab.to).replace(/\\/+$/, '')\n\t\t},\n\n\t\t/**\n\t\t * The href of a page tab, resolved through the router when there is one.\n\t\t *\n\t\t * @param {object} tab The page tab.\n\t\t * @return {string} The href.\n\t\t */\n\t\tpageTabHref(tab) {\n\t\t\tif (this.$router && typeof this.$router.resolve === 'function') {\n\t\t\t\tconst resolved = this.$router.resolve(tab.to)\n\t\t\t\tif (resolved && resolved.href) {\n\t\t\t\t\treturn resolved.href\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tab.to\n\t\t},\n\n\t\t/**\n\t\t * Follow a page tab on the app's router. A ctrl/cmd/shift or middle\n\t\t * click keeps the browser's own new-tab behaviour.\n\t\t *\n\t\t * @param {object} tab The page tab.\n\t\t * @param {MouseEvent} event The click.\n\t\t * @return {void}\n\t\t */\n\t\tonPageTabClick(tab, event) {\n\t\t\tif (!this.$router || isNewTabClick(event) || this.isActivePageTab(tab)) {\n\t\t\t\tif (this.isActivePageTab(tab)) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tevent.preventDefault()\n\t\t\tthis.$router.push(tab.to).catch(() => {})\n\t\t},\n\n\t\t/**\n\t\t * Handle the built-in View action — emits a dedicated `view` event.\n\t\t * Kept distinct from `row-click` because the two are conceptually\n\t\t * different: a row click might mean select/expand/drilldown, while\n\t\t * View always means \"open the detail view of this row\".\n\t\t *\n\t\t * @param {object} row The row whose View action was triggered\n\t\t */\n\t\tonView(row) {\n\t\t\tthis.$emit('view', row)\n\t\t},\n\n\t\t/**\n\t\t * Handle the Add button click. If the consumer listens to `@add`,\n\t\t * emit the event (backward compatible). Otherwise open the form dialog.\n\t\t */\n\t\tonAddClick() {\n\t\t\t// A NAMED SOURCE CREATES BY NAVIGATING, not by the form dialog. That\n\t\t\t// dialog builds an OpenRegister object from a schema; a flow is not\n\t\t\t// one, which is why the page it replaces set `show-add=\"false\"` and\n\t\t\t// rendered its own button. An explicit @add listener still wins.\n\t\t\tif (\n\t\t\t\t!this.$.vnode.props?.onAdd\n\t\t\t\t&& this.isNamedSource\n\t\t\t\t&& this.namedSource\n\t\t\t\t&& this.namedSource.addRoute\n\t\t\t) {\n\t\t\t\t// With `addLinkTo` set, Add is a link that already navigated.\n\t\t\t\tif (!this.addLinkTo) {\n\t\t\t\t\tthis.$router.push(this.namedSource.addRoute)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// `$.vnode.props`, not `$attrs`: `add` is a declared emit, and Vue\n\t\t\t// keeps declared emits out of `$attrs`.\n\t\t\tif (this.$.vnode.props?.onAdd) {\n\t\t\t\tthis.$emit('add')\n\t\t\t} else if (!this.openCreateModal() && this.showFormDialog) {\n\t\t\t\tthis.editItem = null\n\t\t\t\tthis.showFormDialogVisible = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the built-in create dialog when the route carries `?action=create`.\n\t\t * Called on `mounted()` and whenever `$route.query.action` changes, so it\n\t\t * works both on initial navigation and on same-page deep-links (e.g. a\n\t\t * \"New Case\" button on a sibling page that routes here with the query).\n\t\t *\n\t\t * After opening the dialog the query param is cleared via\n\t\t * `$router.replace` so a page refresh does not re-open it and browser\n\t\t * history stays clean. No-op when there is no router, when `showFormDialog`\n\t\t * is false (consumer manages its own dialog), or when the query param is\n\t\t * absent / not `'create'`.\n\t\t */\n\t\tmaybeOpenCreateFromQuery() {\n\t\t\tif (!this.$route || !this.$route.query || this.$route.query.action !== 'create') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.openCreateModal()) {\n\t\t\t\tif (!this.showFormDialog) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.openFormDialog(null)\n\t\t\t}\n\t\t\t// Clear the query param; guard against redundant navigation errors.\n\t\t\tif (this.$router) {\n\t\t\t\tconst query = { ...this.$route.query }\n\t\t\t\tdelete query.action\n\t\t\t\tconst nav = this.$router.replace({ query })\n\t\t\t\t// $router.replace returns a Promise in Vue Router 3 but may\n\t\t\t\t// return undefined in mocked / legacy environments — guard.\n\t\t\t\tif (nav && typeof nav.catch === 'function') {\n\t\t\t\t\tnav.catch(() => {})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The calendar moved to another month: ask for that window.\n\t\t *\n\t\t * @param {{rangeStart: string, rangeEnd: string}} range The visible grid window as ISO dates.\n\t\t */\n\t\tonCalendarRange(range) {\n\t\t\tthis.calendarRange = range\n\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\tthis.list.refresh(1)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * \"+N\" on a busy day: show that day's records in the table.\n\t\t *\n\t\t * @param {string} iso The day, `YYYY-MM-DD`.\n\t\t */\n\t\tonCalendarDaySelect(iso) {\n\t\t\tconst cal = this.calendar || {}\n\t\t\tif (this.isSelfFetchMode && cal.dateField) {\n\t\t\t\tconst next = { ...this.list.activeFilters.value }\n\t\t\t\tif (cal.endDateField) {\n\t\t\t\t\tnext[`${cal.dateField}[lte]`] = [iso]\n\t\t\t\t\tnext[`${cal.endDateField}[gte]`] = [iso]\n\t\t\t\t} else {\n\t\t\t\t\tnext[`${cal.dateField}[gte]`] = [iso]\n\t\t\t\t\tnext[`${cal.dateField}[lte]`] = [iso]\n\t\t\t\t}\n\t\t\t\tthis.list.activeFilters.value = next\n\t\t\t}\n\t\t\tthis.onViewModeChange('table')\n\t\t},\n\n\t\t/**\n\t\t * Handle view mode toggle.\n\t\t *\n\t\t * @param {string} mode 'table' or 'cards'\n\t\t */\n\t\tonViewModeChange(mode) {\n\t\t\tthis.routeViewPending = false\n\t\t\tthis.currentViewMode = mode\n\t\t\tthis.$emit('view-mode-change', mode)\n\t\t},\n\n\t\t/**\n\t\t * Open in the mode the address names (`?_view=board`), when the page\n\t\t * offers it. The key starts with `_`, like `_search` and `_page`, so it\n\t\t * is never read as a list filter. A menu entry's `query` can so open a\n\t\t * list as its board, on the one page that lists the schema\n\t\t * (screens-board-reference-columns). A mode the page offers only later\n\t\t * (the map, once rows with a geometry are in) opens when it arrives,\n\t\t * unless the reader picked a view first.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-address-can-open-a-list-in-a-view-mode\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-the-address-opens-a-view-mode-that-arrives-later\n\t\t */\n\t\tapplyViewModeFromRoute() {\n\t\t\tconst wanted = this.$route?.query?._view\n\t\t\tif (typeof wanted !== 'string' || wanted === '' || wanted === this.currentViewMode) {\n\t\t\t\tthis.routeViewPending = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.routeViewModes.includes(wanted)) {\n\t\t\t\tthis.currentViewMode = wanted\n\t\t\t\tthis.routeViewPending = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.routeViewPending = true\n\t\t},\n\n\t\t/**\n\t\t * Handle selection changes from CnDataTable/CnCardGrid.\n\t\t * Updates internal state and re-emits for parent.\n\t\t *\n\t\t * @param {Array} ids Array of selected row IDs\n\t\t */\n\t\tonSelect(ids) {\n\t\t\tthis.internalSelectedIds = ids\n\t\t\tthis.$emit('select', ids)\n\t\t},\n\n\t\t// --- Mass action handlers ---\n\n\t\tasync onMassDeleteConfirm(ids) {\n\t\t\tif (await this.selfActions.handleMassDelete(ids)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-delete', ids)\n\t\t},\n\n\t\tasync onMassCopyConfirm(payload) {\n\t\t\tif (await this.selfActions.handleMassCopy(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-copy', payload)\n\t\t},\n\n\t\tasync onMassExportConfirm(payload) {\n\t\t\tif (await this.selfActions.handleMassExport(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-export', payload)\n\t\t},\n\n\t\t/**\n\t\t * Native Export menu entry click (`allowExport` + `schema.exportable`).\n\t\t * Navigates the browser to OpenRegister's export leaf, passing the\n\t\t * list's own query (without paging) so the file holds the rows the\n\t\t * table is filtered to.\n\t\t *\n\t\t * @param {'csv'|'excel'} format The requested export format.\n\t\t */\n\t\tonExportClick(format) {\n\t\t\t// The query the list itself sends, so the file follows the table:\n\t\t\t// search, sort, facet filters, the page filter and the quick filter.\n\t\t\t// A host-managed list has no such query, so it keeps the route's.\n\t\t\tconst query = this.isSelfFetchMode && typeof this.list.buildParams === 'function'\n\t\t\t\t? this.list.buildParams(1)\n\t\t\t\t: ((this.$route && this.$route.query) || {})\n\t\t\tconst url = buildExportUrl(this.register, this.exportSchemaSlug, query, format)\n\t\t\twindow.location.assign(url)\n\t\t},\n\n\t\t/**\n\t\t * Download OpenRegister's JSON export of the selected rows: the page's\n\t\t * register and schema, with the selected ids as `_ids`.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-the-actions-menu-exports-the-selection\n\t\t */\n\t\tonExportSelected() {\n\t\t\tconst ids = this.internalSelectedIds.map((id) => String(id))\n\t\t\tif (ids.length === 0 || !this.showExportMenu) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\twindow.location.assign(buildExportUrl(this.register, this.exportSchemaSlug, { _ids: ids }, 'json'))\n\t\t},\n\n\t\t// ── Saved views (saved-views-ui) ─────────────────────────────────────\n\n\t\t/**\n\t\t * Fetch the current user's saved views (own + public) from\n\t\t * OpenRegister's views API. Called from created() when the page\n\t\t * offers saved views.\n\t\t */\n\t\tasync fetchSavedViews() {\n\t\t\tthis.savedViewsLoading = true\n\t\t\ttry {\n\t\t\t\tthis.savedViews = await useSavedViewsApi().fetchViews()\n\t\t\t\t// An empty answer is also what a misread response gives, so it\n\t\t\t\t// never empties the menu: entries are dropped only against a\n\t\t\t\t// list that came back with views in it.\n\t\t\t\tif (this.savedViews.length > 0) {\n\t\t\t\t\tthis.syncSavedViewMenu()\n\t\t\t\t}\n\t\t\t\tthis.applySavedViewFromRoute()\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('CnIndexPage: failed to fetch saved views', error)\n\t\t\t} finally {\n\t\t\t\tthis.savedViewsLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Apply a saved view. Self-fetch mode's facet/folder filters and\n\t\t * search/sort live in useListView's own reactive state, not the route\n\t\t * query, so apply them there directly. Otherwise (consumer-managed\n\t\t * store mode) fall back to `$router.replace` — same precedent as the\n\t\t * `?action=create` query cleanup, and dropping the whole previous\n\t\t * query implicitly resets `_page` to 1.\n\t\t *\n\t\t * @param {object} view The View API object to apply.\n\t\t * @param {{keepSavedViewKey?: boolean}} [options] Keep `?savedView=<id>` in the address, as a menu entry's link does.\n\t\t */\n\t\tonApplySavedView(view, { keepSavedViewKey = false } = {}) {\n\t\t\tthis.appliedSavedViewId = view && (view.id || view.slug) ? String(view.id || view.slug) : ''\n\t\t\tconst state = extractViewState(view)\n\t\t\t// A view's filters may carry tokens (`@me`, `@myTeam`): resolved here,\n\t\t\t// and an optional one that answers nothing (no team) is dropped. A\n\t\t\t// `@myTeam` still being read applies the view once it is known.\n\t\t\tif (usesMyTeam(state.filters) && peekMyTeam() === null) {\n\t\t\t\tloadMyTeam().then(() => this.onApplySavedView(view, { keepSavedViewKey }))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tstate.filters = dropOptionalUnresolved(resolveFilterTokens(state.filters, ctx))\n\t\t\tthis.appliedViewFiltersKey = this.viewFiltersKey(state.filters)\n\t\t\t// A view that carries columns wins while it is applied; one without leaves the person's own layout.\n\t\t\tconst viewColumns = view && view.query && Array.isArray(view.query.columns) ? view.query.columns.map(String) : []\n\t\t\tthis.appliedViewColumns = viewColumns.length > 0 ? viewColumns : null\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\t// Set state directly (not via onFilterEvent/onSearchEvent per key)\n\t\t\t\t// so applying a view is one fetch + one route replace, not one\n\t\t\t\t// of each per changed field — and a filter the view doesn't\n\t\t\t\t// carry is actually cleared, not left over from before.\n\t\t\t\tthis.list.activeFilters.value = { ...state.filters }\n\t\t\t\tthis.list.searchTerm.value = state.search || ''\n\t\t\t\tconst keys = state.sortKeys\n\t\t\t\tthis.list.sortKeys.value = keys\n\t\t\t\tthis.list.sortKey.value = keys[0]?.key ?? null\n\t\t\t\tthis.list.sortOrder.value = keys[0]?.order ?? 'asc'\n\t\t\t\tthis.list.refresh(1)\n\t\t\t\t// Through `persistViewStateToRoute` rather than a raw replace,\n\t\t\t\t// because it is what records the keys this view wrote — without\n\t\t\t\t// that, a later \"clear all\" has nothing to delete them by.\n\t\t\t\tthis.persistViewStateToRoute(state, { savedView: keepSavedViewKey ? this.appliedSavedViewId : '' })\n\t\t\t\tthis.applyViewSortOption(savedViewOverrides(view))\n\t\t\t\tthis.$emit('apply-view', view)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.$router) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst query = buildRouteQueryFromViewState(state)\n\t\t\tif (keepSavedViewKey) {\n\t\t\t\tquery.savedView = this.appliedSavedViewId\n\t\t\t}\n\t\t\tconst nav = this.$router.replace({ query })\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tthis.namedActiveFilters = namedFiltersFromQuery(query, this)\n\t\t\t}\n\t\t\t// Swallow the duplicate-navigation rejection (Vue Router 3)\n\t\t\t// when the applied view matches the current query.\n\t\t\tif (nav && typeof nav.catch === 'function') {\n\t\t\t\tnav.catch(() => {})\n\t\t\t}\n\t\t\tthis.applyViewSortOption(savedViewOverrides(view))\n\t\t\tthis.$emit('apply-view', view)\n\t\t},\n\n\t\t/**\n\t\t * Persist the current state as a named view via OpenRegister's views\n\t\t * API (CnSaveViewDialog `@confirm`). Self-fetch mode reads its active\n\t\t * filters/search/sort straight from useListView's own state (they\n\t\t * never reach the route query); otherwise falls back to the route\n\t\t * query. On success the new view joins the list and the dialog\n\t\t * closes; on failure the dialog stays open with the error surfaced.\n\t\t *\n\t\t * @param {{ name: string, isPublic: boolean }} payload Dialog payload.\n\t\t */\n\t\t/**\n\t\t * Toast, without letting the toast fail the thing it reports on.\n\t\t *\n\t\t * The import is dynamic so a page that never toasts does not carry the\n\t\t * chunk, and everything is swallowed: a chunk that will not load must\n\t\t * not turn a save that worked into an error, nor add an unhandled\n\t\t * rejection on top of one that already failed.\n\t\t *\n\t\t * @param {'success'|'error'} kind Which toast to show.\n\t\t * @param {string} message The message, already translated.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync toastSavedView(kind, message) {\n\t\t\ttry {\n\t\t\t\tconst dialogs = await import('@nextcloud/dialogs')\n\t\t\t\tconst show = kind === 'error' ? dialogs.showError : dialogs.showSuccess\n\t\t\t\tif (typeof show === 'function') {\n\t\t\t\t\tshow(message)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// No toast. What it was reporting on happened either way.\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Put a saved view that changed elsewhere (its alert) back in the list,\n\t\t * matched on its id or uuid.\n\t\t *\n\t\t * @param {object} view The saved view as the server returned it.\n\t\t * @return {void}\n\t\t */\n\t\treplaceSavedView(view) {\n\t\t\tif (!view || typeof view !== 'object') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst same = (other) => other && ((view.id !== undefined && other.id === view.id) || (view.uuid && other.uuid === view.uuid))\n\t\t\tthis.savedViews = (this.savedViews || []).map((other) => (same(other) ? view : other))\n\t\t},\n\n\t\tasync onSaveViewConfirm({ name, isPublic, sharedWith, presentation, description = '', icon = '' }) {\n\t\t\tconst state = this.isSelfFetchMode\n\t\t\t\t? this.currentViewState()\n\t\t\t\t: extractViewStateFromRouteQuery((this.$route && this.$route.query) || {})\n\t\t\tconst payload = buildViewCreatePayload({\n\t\t\t\tname,\n\t\t\t\tdescription,\n\t\t\t\tisPublic,\n\t\t\t\tisDefault: false,\n\t\t\t\tstate,\n\t\t\t\tscope: savedViewScope(this.savedViewsPage),\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t\tsharedWith,\n\t\t\t\tpresentation,\n\t\t\t})\n\t\t\tif (icon) {\n\t\t\t\tpayload.query.icon = icon\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst view = await useSavedViewsApi().createView(payload)\n\t\t\t\tif (!view) {\n\t\t\t\t\t// A 2xx carrying no view. Axios has thrown on every real error\n\t\t\t\t\t// by now, so nothing else marks this one, and the list below is\n\t\t\t\t\t// not appended to: claiming success sends the person looking\n\t\t\t\t\t// for a view that is not in it.\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'The server did not return the saved view'))\n\t\t\t\t}\n\t\t\t\tthis.savedViews = [...this.savedViews, view]\n\t\t\t\tthis.showSaveViewDialog = false\n\t\t\t\tthis.sidebarActiveTab = 'filters-tab'\n\t\t\t\tthis.sidebarOpen = true\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" saved', { name }))\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('CnIndexPage: failed to save view', error)\n\t\t\t\t// Both, and they say different things: the dialog stays open\n\t\t\t\t// carrying the reason, because that is where the name and the\n\t\t\t\t// toggle still are to correct and retry; the toast says the save\n\t\t\t\t// did not happen, because a dialog that simply stayed open reads\n\t\t\t\t// as one that has not been submitted yet.\n\t\t\t\tthis.$refs.saveViewDialog?.setError(error?.response?.data?.error || error?.message)\n\t\t\t\tthis.toastSavedView('error', t('nextcloud-vue', 'Could not save the view \"{name}\"', { name }))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the presentation dialog for a view the user may edit\n\t\t * (CnSavedViewsControl `@presentation-request`).\n\t\t *\n\t\t * @param {object} view The View API object.\n\t\t * @spec openspec/changes/view-presentation-picker/tasks.md#task-3\n\t\t */\n\t\tonPresentationViewRequest(view) {\n\t\t\tthis.viewPendingPresentation = view\n\t\t},\n\n\t\t/**\n\t\t * Save a changed presentation (CnSavedViewPresentationDialog `@confirm`).\n\t\t * The body carries `presentation` only, so a writer never sends\n\t\t * `sharedWith` or `owner`. A refusal keeps the dialog open.\n\t\t *\n\t\t * @param {object} presentation The presentation in OpenRegister's shape.\n\t\t * @spec openspec/changes/view-presentation-picker/tasks.md#task-3\n\t\t */\n\t\tasync onPresentationViewConfirm(presentation) {\n\t\t\tconst view = this.viewPendingPresentation\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().patchView(view.id, { presentation })\n\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? { ...v, ...(saved || { presentation }) } : v))\n\t\t\t\tthis.viewPendingPresentation = null\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" updated', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tconst data = error?.response?.data\n\t\t\t\tthis.$refs.presentationViewDialog?.setError((data && (data.error || data.message)) || error?.message)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * One saved-view intent from the sidebar's Search tab.\n\t\t *\n\t\t * @param {{action: string, view: (object|null)}} event The intent.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-6\n\t\t */\n\t\tonSavedViewAction({ action, view } = {}) {\n\t\t\tconst handlers = {\n\t\t\t\tapply: () => this.onApplySavedView(view),\n\t\t\t\tsave: () => { this.showSaveViewDialog = true },\n\t\t\t\tedit: () => this.onEditViewRequest(view),\n\t\t\t\tshare: () => this.onShareViewRequest(view),\n\t\t\t\tpresentation: () => this.onPresentationViewRequest(view),\n\t\t\t\tupdate: () => this.onUpdateViewRequest(view),\n\t\t\t\tcopy: () => this.onCopyViewRequest(view),\n\t\t\t\tmenu: () => this.onToggleSavedViewInMenu(view),\n\t\t\t\tdelete: () => this.onDeleteViewRequest(view),\n\t\t\t}\n\t\t\tif (handlers[action]) {\n\t\t\t\thandlers[action]()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add a saved view to the app menu, or take it out. Stored per user\n\t\t * by CnAppRoot; the view itself is not touched, so a view shared\n\t\t * with this user can be added as well as an own one.\n\t\t *\n\t\t * @param {object} view The view.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tonToggleSavedViewInMenu(view) {\n\t\t\tconst menu = this.cnSavedViewMenu\n\t\t\tif (!view || !menu || typeof menu.toggle !== 'function' || this.savedViewPage === '') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst badge = this.savedViewMenuBadge(view)\n\t\t\tconst icon = savedViewIcon(view)\n\t\t\tconst description = typeof view.description === 'string' ? view.description : ''\n\t\t\tmenu.toggle({ id: String(view.id || view.slug), page: this.savedViewPage, name: view.name, ...(icon ? { icon } : {}), ...(description ? { description } : {}), ...(badge ? { badge } : {}) })\n\t\t},\n\n\t\t/**\n\t\t * The count a view's menu entry shows: the objects its criteria match,\n\t\t * on this page's register and schema, or what its `overrides.badge`\n\t\t * says. `overrides.badge: false` shows none.\n\t\t * `{ count: { register, schema, filter }, counterVariant? }`, or null.\n\t\t *\n\t\t * @param {object} view The view.\n\t\t * @return {{count: object, counterVariant?: string}|null}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-in-the-menu-can-show-a-count\n\t\t * @spec openspec/changes/saved-view-icon-description-count/specs/saved-view-icon-description-count/spec.md#requirement-a-saved-view-in-the-menu-shows-its-count\n\t\t */\n\t\tsavedViewMenuBadge(view) {\n\t\t\tconst overrides = savedViewOverrides(view)\n\t\t\tconst declared = overrides ? overrides.badge : undefined\n\t\t\tconst badge = declared === undefined || declared === null ? true : declared\n\t\t\tconst filters = view && view.query && typeof view.query.filters === 'object' ? view.query.filters : {}\n\t\t\tconst locked = overrides && overrides.lockedFilters && typeof overrides.lockedFilters === 'object' ? overrides.lockedFilters : {}\n\t\t\treturn savedViewBadge(badge, { register: this.register, schema: schemaSlug(this.schema), filter: this.filter }, { ...locked, ...filters })\n\t\t},\n\n\t\t/**\n\t\t * Select the sort option a view names (`overrides.sortOption`), or,\n\t\t * given none, undo the one the previous view selected.\n\t\t *\n\t\t * @param {object|null} overrides The view's overrides.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-can-select-a-sort-option\n\t\t */\n\t\tapplyViewSortOption(overrides) {\n\t\t\tconst wanted = overrides && typeof overrides.sortOption === 'string' ? overrides.sortOption : ''\n\t\t\tif (wanted !== '' && this.selectSortOption(wanted)) {\n\t\t\t\tthis.viewSortOption = wanted\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.viewSortOption !== '' && this.sortSource && this.sortSource.value === this.viewSortOption) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: '', page: 1 }\n\t\t\t}\n\t\t\tthis.viewSortOption = ''\n\t\t},\n\n\t\t/**\n\t\t * Leave the applied view: the page's own config comes back. The filters\n\t\t * stay as they are, as after any other change to them.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-can-override-the-page-config-while-it-is-active\n\t\t */\n\t\tleaveSavedView() {\n\t\t\tthis.appliedSavedViewId = ''\n\t\t\tthis.appliedViewColumns = null\n\t\t\tthis.applyViewSortOption(null)\n\t\t},\n\n\t\t/**\n\t\t * Bring this page's menu entries in line with the views it can show:\n\t\t * current names, and none for a view deleted or no longer shared.\n\t\t *\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tsyncSavedViewMenu() {\n\t\t\tconst menu = this.cnSavedViewMenu\n\t\t\tif (!menu || typeof menu.sync !== 'function' || this.savedViewPage === '') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tmenu.sync(this.savedViewPage, [...this.defaultFilterViews, ...this.visibleSavedViews].map((view) => ({ ...view, menuBadge: this.savedViewMenuBadge(view) })))\n\t\t},\n\n\t\t/**\n\t\t * Apply the saved view the address names (`?savedView=<id>`, what a\n\t\t * menu entry links to), once the list holding it has loaded.\n\t\t *\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tapplySavedViewFromRoute() {\n\t\t\tconst id = this.$route && this.$route.query ? this.$route.query.savedView : undefined\n\t\t\tif (typeof id !== 'string' || id === '' || id === this.appliedSavedViewId) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// OpenRegister answers a view with a numeric `id` and its `uuid`; a\n\t\t\t// menu entry or a shared link may name either.\n\t\t\tconst view = this.viewsForControl.find((v) => String(v.id) === id || String(v.slug) === id || (v.uuid !== undefined && String(v.uuid) === id))\n\t\t\tif (view) {\n\t\t\t\tthis.onApplySavedView(view, { keepSavedViewKey: true })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the edit dialog for an own view (CnSavedViewsControl `@edit-request`).\n\t\t *\n\t\t * @param {object} view The View API object.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-3\n\t\t */\n\t\tonEditViewRequest(view) {\n\t\t\tthis.viewPendingEdit = view\n\t\t},\n\n\t\t/**\n\t\t * Save a rename, and the current filters when asked\n\t\t * (CnSavedViewEditDialog `@confirm`). The PATCH carries `name`, plus\n\t\t * `query` only when the criteria are replaced, so nothing else on the\n\t\t * view is rewritten from this tab's copy. A refusal keeps the dialog open.\n\t\t *\n\t\t * @param {{ name: string, replaceCriteria: boolean }} payload The dialog payload.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-3\n\t\t */\n\t\tasync onEditViewConfirm({ name, replaceCriteria, description, icon }) {\n\t\t\tconst view = this.viewPendingEdit\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst body = { name }\n\t\t\tif (typeof description === 'string' && description !== (typeof view.description === 'string' ? view.description : '')) {\n\t\t\t\tbody.description = description\n\t\t\t}\n\t\t\tif (replaceCriteria === true) {\n\t\t\t\tconst state = this.isSelfFetchMode\n\t\t\t\t\t? this.currentViewState()\n\t\t\t\t\t: extractViewStateFromRouteQuery((this.$route && this.$route.query) || {})\n\t\t\t\tbody.query = buildViewCreatePayload({\n\t\t\t\t\tname,\n\t\t\t\t\tstate,\n\t\t\t\t\tscope: savedViewScope(this.savedViewsPage),\n\t\t\t\t\tregister: this.register,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t}).query\n\t\t\t\t// New criteria keep the view's page config overrides.\n\t\t\t\tif (view.query && view.query.overrides) {\n\t\t\t\t\tbody.query.overrides = view.query.overrides\n\t\t\t\t}\n\t\t\t}\n\t\t\t// The icon rides in the query: OpenRegister keeps a view's query whole.\n\t\t\tif (typeof icon === 'string' && icon !== savedViewIcon(view)) {\n\t\t\t\tconst query = { ...(body.query || view.query || {}) }\n\t\t\t\tif (icon === '') {\n\t\t\t\t\tdelete query.icon\n\t\t\t\t} else {\n\t\t\t\t\tquery.icon = icon\n\t\t\t\t}\n\t\t\t\tbody.query = query\n\t\t\t} else if (body.query && savedViewIcon(view)) {\n\t\t\t\tbody.query.icon = savedViewIcon(view)\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().patchView(view.id, body)\n\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? { ...v, ...(saved || body) } : v))\n\t\t\t\tthis.syncSavedViewMenu()\n\t\t\t\tthis.viewPendingEdit = null\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" saved', { name }))\n\t\t\t} catch (error) {\n\t\t\t\tconst data = error?.response?.data\n\t\t\t\tthis.$refs.editViewDialog?.setError((data && (data.error || data.message)) || error?.message)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the share dialog for an own view (CnSavedViewsControl `@share-request`).\n\t\t *\n\t\t * @param {object} view The View API object to share.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-2\n\t\t */\n\t\tonShareViewRequest(view) {\n\t\t\tthis.viewPendingShare = view\n\t\t},\n\n\t\t/**\n\t\t * Save a changed audience (CnSavedViewShareDialog `@confirm`). A failure\n\t\t * keeps the dialog open with the server's message.\n\t\t *\n\t\t * @param {Array<{group: string, mode: string}>} sharedWith The audience, `[]` to stop sharing.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-2\n\t\t */\n\t\tasync onShareViewConfirm(sharedWith) {\n\t\t\tconst view = this.viewPendingShare\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().patchView(view.id, { sharedWith: normalizeSharedWith(sharedWith) })\n\t\t\t\tconst next = saved || { ...view, sharedWith: normalizeSharedWith(sharedWith) }\n\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? { ...v, ...next } : v))\n\t\t\t\tthis.viewPendingShare = null\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'Sharing of \"{name}\" saved', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tthis.$refs.shareViewDialog?.setError(error?.response?.data?.error || error?.response?.data?.message || error?.message)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Save the current state to a view shared with write access\n\t\t * (CnSavedViewsControl `@update-request`). The body carries the query\n\t\t * and presentation only: never `sharedWith` or `owner`, so the\n\t\t * audience cannot be changed from here.\n\t\t *\n\t\t * @param {object} view The shared View API object.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-3\n\t\t */\n\t\tasync onUpdateViewRequest(view) {\n\t\t\tconst state = this.isSelfFetchMode\n\t\t\t\t? this.currentViewState()\n\t\t\t\t: extractViewStateFromRouteQuery((this.$route && this.$route.query) || {})\n\t\t\tconst payload = buildViewCreatePayload({\n\t\t\t\tname: view.name,\n\t\t\t\tdescription: view.description || '',\n\t\t\t\tisPublic: view.isPublic === true,\n\t\t\t\tisDefault: false,\n\t\t\t\tstate,\n\t\t\t\tscope: savedViewScope(this.savedViewsPage),\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t})\n\t\t\tif (view.query && view.query.overrides) {\n\t\t\t\tpayload.query.overrides = view.query.overrides\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().updateView(view.id, payload)\n\t\t\t\tif (saved) {\n\t\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? saved : v))\n\t\t\t\t}\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" updated', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tthis.toastSavedView('error', error?.response?.data?.error || error?.response?.data?.message || t('nextcloud-vue', 'Could not update the view \"{name}\"', { name: view.name }))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * \"Save a copy\" of a view (CnSavedViewsControl `@copy-request`): a\n\t\t * personal copy with the same query. A copy of a view shared with the\n\t\t * reader or shipped with the app keeps its name; a copy of the reader's\n\t\t * own view is named \"{name} (copy)\". The original stays untouched.\n\t\t *\n\t\t * @param {object} view The View API object.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-3\n\t\t * @spec openspec/changes/board-saved-view-manage-menu/specs/board-saved-view-manage-menu/spec.md#requirement-an-own-view-can-be-copied\n\t\t */\n\t\tasync onCopyViewRequest(view) {\n\t\t\tconst own = viewAccess(view, this.currentSavedViewsUserId) === 'owner'\n\t\t\tconst payload = {\n\t\t\t\tname: own ? t('nextcloud-vue', '{name} (copy)', { name: view.name }) : view.name,\n\t\t\t\tdescription: view.description || '',\n\t\t\t\tisPublic: false,\n\t\t\t\tisDefault: false,\n\t\t\t\tquery: view.query && typeof view.query === 'object' ? view.query : {},\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst copy = await useSavedViewsApi().createView(payload)\n\t\t\t\tif (!copy) {\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'The server did not return the saved view'))\n\t\t\t\t}\n\t\t\t\tthis.savedViews = [...this.savedViews, copy]\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" saved', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tthis.toastSavedView('error', error?.response?.data?.error || error?.message || t('nextcloud-vue', 'Could not save the view \"{name}\"', { name: view.name }))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the delete-confirmation dialog for a saved view\n\t\t * (CnSavedViewsControl `@delete-request`).\n\t\t *\n\t\t * @param {object} view The View API object to delete.\n\t\t */\n\t\tonDeleteViewRequest(view) {\n\t\t\tthis.viewPendingDelete = view\n\t\t},\n\n\t\t/**\n\t\t * Delete the pending view after confirmation (CnConfirmDialog\n\t\t * `@confirm`), then report back via the dialog's setResult()\n\t\t * contract and remove it from the local list.\n\t\t */\n\t\tasync onDeleteViewConfirm() {\n\t\t\tconst view = this.viewPendingDelete\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait useSavedViewsApi().deleteView(view.id)\n\t\t\t\tthis.savedViews = this.savedViews.filter((v) => v.id !== view.id)\n\t\t\t\tthis.syncSavedViewMenu()\n\t\t\t\tthis.$refs.deleteViewConfirmDialog?.setResult({ success: true })\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('CnIndexPage: failed to delete view', error)\n\t\t\t\tthis.$refs.deleteViewConfirmDialog?.setResult({ error: error?.response?.data?.error || error?.message || 'Failed to delete view' })\n\t\t\t}\n\t\t},\n\n\t\tasync onMassImportConfirm(payload) {\n\t\t\tif (await this.selfActions.handleMassImport(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-import', payload)\n\t\t},\n\n\t\t_setResult(refName, resultData) {\n\t\t\tthis.$refs[refName]?.setResult(resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetMassDeleteResult(resultData) {\n\t\t\tthis._setResult('massDeleteDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetMassCopyResult(resultData) {\n\t\t\tthis._setResult('massCopyDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetExportResult(resultData) {\n\t\t\tthis._setResult('exportDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetImportResult(resultData) {\n\t\t\tthis._setResult('importDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetDeleteResult(resultData) {\n\t\t\tthis._setResult('massDeleteDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetCopyResult(resultData) {\n\t\t\tthis._setResult('massCopyDialog', resultData)\n\t\t},\n\n\t\t// --- Single-object dialog handlers ---\n\n\t\tasync onSingleDeleteConfirm(id) {\n\t\t\t// A named source deletes through its own hook. Emit-only would\n\t\t\t// leave the confirm inert on a manifest page (nobody listens),\n\t\t\t// which is why the Delete action only renders when the hook\n\t\t\t// exists — see `defaultActions`.\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.deleteRow === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.namedSource.deleteRow(this.actionTargetItem || { id }, this.sourceConfig || {})\n\t\t\t\t\tthis.setSingleDeleteResult({ success: true })\n\t\t\t\t\tthis.$emit('delete', id)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis.setSingleDeleteResult({ error: (err && err.message) || 'Delete failed' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (await this.selfActions.handleSingleDelete(id)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('delete', id)\n\t\t},\n\n\t\tasync onSingleCopyConfirm(payload) {\n\t\t\t// Same contract as delete: the source owns the copy, or there is\n\t\t\t// no Copy action to confirm.\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.copyRow === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.namedSource.copyRow(\n\t\t\t\t\t\tthis.actionTargetItem || { id: payload && payload.id },\n\t\t\t\t\t\tpayload && payload.newName,\n\t\t\t\t\t\tthis.sourceConfig || {},\n\t\t\t\t\t)\n\t\t\t\t\tthis.setSingleCopyResult({ success: true })\n\t\t\t\t\tthis.$emit('copy', payload)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis.setSingleCopyResult({ error: (err && err.message) || 'Copy failed' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (await this.selfActions.handleSingleCopy(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('copy', payload)\n\t\t},\n\n\t\t// Lets an `advanceOn: \"object-created\"` walkthrough step auto-advance.\n\t\t// No dispatch site existed anywhere before this, so that advanceOn\n\t\t// type could never fire. `@self.register`/`@self.schema` are numeric\n\t\t// DB ids, not the slugs a manifest's advanceOn declares, so override\n\t\t// them with this page's own slug props before dispatching.\n\t\tnotifyWalkthroughObjectCreated(created) {\n\t\t\tif (typeof window === 'undefined' || !created) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdispatchObjectCreated({ register: this.register, schema: this.exportSchemaSlug, object: created })\n\t\t},\n\n\t\t/**\n\t\t * Toast and navigate after a create the built-in dialog confirmed, per\n\t\t * `createSuccessMessage` / `createSuccessRoute`. Both default off, so a\n\t\t * page that declares neither behaves exactly as before.\n\t\t *\n\t\t * Runs on every create path (store, self-store, `createOverride`), which\n\t\t * is what makes the built-in Add button a peer of a manifest\n\t\t * `open-form` header action: that action has always toasted and\n\t\t * navigated, so the same create reached two different endings depending\n\t\t * on which button opened it.\n\t\t *\n\t\t * @param {object} saved The created object, as the save path returned it.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync afterCreateSuccess(saved) {\n\t\t\t// Callers do not await this — a toast and a navigation are not the\n\t\t\t// save — so nothing here may reject: an unhandled rejection from a\n\t\t\t// failed chunk load would surface as an error on a create that\n\t\t\t// actually succeeded.\n\t\t\tif (this.createSuccessMessage) {\n\t\t\t\ttry {\n\t\t\t\t\tconst { showSuccess } = await import('@nextcloud/dialogs')\n\t\t\t\t\tif (typeof showSuccess === 'function') {\n\t\t\t\t\t\tshowSuccess(this.cnTranslate(this.createSuccessMessage))\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// No toast; the record is saved either way.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.createSuccessRoute) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t// `buildOnSuccessRoute` reads the id through `savedObjectId`, so a\n\t\t\t\t// response that carries it as `uuid` or `@self.id` still deep-links.\n\t\t\t\tconst location = buildOnSuccessRoute(this.createSuccessRoute, saved)\n\t\t\t\tif (location && this.$router) {\n\t\t\t\t\tthis.$router.push(location).catch(() => {})\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// The record is saved; staying on the list beats an error toast.\n\t\t\t}\n\t\t},\n\n\t\tasync onFormConfirm(formData) {\n\t\t\t// Opt-in create-override hook: an app supplies a custom async create\n\t\t\t// handler (e.g. a contact-aware endpoint that fills a required FK)\n\t\t\t// that owns persistence instead of saveObject. Create-only; edits\n\t\t\t// always fall through to the normal store / self-store path.\n\t\t\tif (!this.editItem && typeof this.createOverride === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tconst created = await this.createOverride(formData, {\n\t\t\t\t\t\tregister: this.register,\n\t\t\t\t\t\tschema: this.schema,\n\t\t\t\t\t\tobjectType: this.objectType || this.selfObjectType,\n\t\t\t\t\t\teffectiveSchema: this.effectiveSchema,\n\t\t\t\t\t})\n\t\t\t\t\tif (created) {\n\t\t\t\t\t\tthis.setFormResult({ success: true })\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @event create Emitted after a create is confirmed (store, self-store, or createOverride).\n\t\t\t\t\t\t * @type {object} The created object.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tthis.$emit('create', created)\n\t\t\t\t\t\tthis.notifyWalkthroughObjectCreated(created)\n\t\t\t\t\t\tif (this.list && typeof this.list.refresh === 'function') {\n\t\t\t\t\t\t\tthis.list.refresh()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.afterCreateSuccess(created)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setFormResult({ error: 'Save failed' })\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis.setFormResult({ error: (err && err.message) || 'Save failed' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.store) {\n\t\t\t\tif (!this.objectType) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn('[CnIndexPage] store prop is set but objectType is missing. Cannot save to store.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst saved = await this.store.saveObject(this.objectType, formData)\n\t\t\t\tif (saved) {\n\t\t\t\t\tconst wasCreate = !this.editItem\n\t\t\t\t\tthis.setFormResult({ success: true })\n\t\t\t\t\tthis.$emit(wasCreate ? 'create' : 'edit', saved)\n\t\t\t\t\tif (wasCreate) {\n\t\t\t\t\t\tthis.notifyWalkthroughObjectCreated(saved)\n\t\t\t\t\t\tthis.afterCreateSuccess(saved)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst err = this.store.getError?.(this.objectType)\n\t\t\t\t\tif (err && err.isValidation) {\n\t\t\t\t\t\t// Keep the form visible so the user can fix the invalid data.\n\t\t\t\t\t\tthis.setFormValidationErrors(err.fields, err.message || 'Validation failed')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setFormResult({ error: (err && err.message) || 'Save failed' })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (await this.selfActions.handleFormSave(formData)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit(this.editItem ? 'edit' : 'create', formData)\n\t\t},\n\n\t\tcloseSingleDelete() {\n\t\t\tthis.showSingleDeleteDialog = false\n\t\t\tthis.actionTargetItem = null\n\t\t},\n\n\t\tcloseSingleCopy() {\n\t\t\tthis.showSingleCopyDialog = false\n\t\t\tthis.actionTargetItem = null\n\t\t},\n\n\t\tcloseFormDialog() {\n\t\t\tthis.showFormDialogVisible = false\n\t\t\tthis.editItem = null\n\t\t\tthis.rowFormTarget = null\n\t\t\tthis.rowFormSchema = null\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetSingleDeleteResult(resultData) {\n\t\t\tthis._setResult('singleDeleteDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetSingleCopyResult(resultData) {\n\t\t\tthis._setResult('singleCopyDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetFormResult(resultData) {\n\t\t\tthis._setResult('formDialog', resultData)\n\t\t\t// A saved write may change a label a reference column shows.\n\t\t\tif (resultData && resultData.success && this._refLabelResolver) {\n\t\t\t\tthis._refLabelResolver.invalidate()\n\t\t\t\tthis.refLabels = {}\n\t\t\t\tthis.refLooks = {}\n\t\t\t\tthis.loadRefLabels()\n\t\t\t\tthis.loadRefLooks()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Show a validation error in the form dialog while keeping the form\n\t\t * visible (so the user can fix the data), instead of replacing it with\n\t\t * a result note. Use this for 400/422 responses; use setFormResult for\n\t\t * terminal success/failure.\n\t\t *\n\t\t * @param {object} [fieldErrors] Per-field error messages keyed by field key\n\t\t * @param {string} [message] Form-level message shown above the fields\n\t\t * @public\n\t\t */\n\t\tsetFormValidationErrors(fieldErrors, message) {\n\t\t\tthis.$refs.formDialog?.setValidationErrors(fieldErrors || {}, message)\n\t\t},\n\n\t\t// --- Context menu handlers ---\n\n\t\tonRowContextMenu({ row, event }) {\n\t\t\tthis.contextMenuShownRow = row\n\t\t\tthis.openContextMenu({ item: row, event })\n\t\t},\n\n\t\t/**\n\t\t * Programmatically open the form dialog.\n\t\t *\n\t\t * @param {object|null} item Pass null for create mode, or an object for edit mode\n\t\t * @public\n\t\t */\n\t\topenFormDialog(item = null) {\n\t\t\treturn this.openFormFor(item)\n\t\t},\n\n\t\t/**\n\t\t * Open the form dialog for an item. A row of another pair (collectionUrl)\n\t\t * opens with its own schema; everything else opens at once, as before.\n\t\t *\n\t\t * @param {object|null} item The row to edit, or null to create.\n\t\t * @return {Promise<void>|void}\n\t\t */\n\t\topenFormFor(item) {\n\t\t\tconst target = item ? this.rowTypeTarget(item) : null\n\t\t\tif (!target) {\n\t\t\t\tthis.rowFormTarget = null\n\t\t\t\tthis.rowFormSchema = null\n\t\t\t\tthis.editItem = item\n\t\t\t\tthis.showFormDialogVisible = true\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst store = this.selfObjectStore\n\t\t\treturn Promise.resolve(store.getSchema?.(target.type) || store.fetchSchema?.(target.type))\n\t\t\t\t.catch(() => null)\n\t\t\t\t.then((schema) => {\n\t\t\t\t\tif (!schema) {\n\t\t\t\t\t\tthis.toastSavedView('error', t('nextcloud-vue', 'Could not load the form for this item.'))\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tthis.rowFormTarget = target\n\t\t\t\t\tthis.rowFormSchema = schema\n\t\t\t\t\tthis.editItem = item\n\t\t\t\t\tthis.showFormDialogVisible = true\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The row's own pair when it differs from the page's in a collectionUrl list.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {{register: string, schema: string, type: string}|null} The pair, or null.\n\t\t */\n\t\trowTypeTarget(row) {\n\t\t\treturn resolveRowTarget({\n\t\t\t\tcollectionUrl: this.isSelfFetchMode ? this.collectionUrl : '',\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t\tprimarySchema: this.effectiveSchema,\n\t\t\t\tprimaryRegister: this.selfObjectStore?.getRegister?.(this.selfObjectType) || null,\n\t\t\t\tstore: this.selfObjectStore,\n\t\t\t}, row)\n\t\t},\n\n\t\t/**\n\t\t * Open the `createModal` registry modal, when one is set and a CnAppRoot\n\t\t * ancestor can mount it.\n\t\t *\n\t\t * @return {boolean} Whether the modal was opened.\n\t\t */\n\t\topenCreateModal() {\n\t\t\tif (!this.createModal || typeof this.cnOpenModal !== 'function') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.cnOpenModal(this.createModal)\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Programmatically open the single-item delete dialog.\n\t\t *\n\t\t * @param {object} item The item to delete\n\t\t * @public\n\t\t */\n\t\topenDeleteDialog(item) {\n\t\t\tthis.actionTargetItem = item\n\t\t\tthis.showSingleDeleteDialog = true\n\t\t},\n\n\t\t/**\n\t\t * Pure helper used by the cardComponent dispatch path to toggle\n\t\t * an id in the selected-ids array. Kept inline rather than\n\t\t * pulled into a util because the only call site is the\n\t\t * cardComponent `@select` listener template above.\n\t\t *\n\t\t * @param {Array} ids Current selection\n\t\t * @param {string|number} id The id to toggle\n\t\t * @return {Array} New array with `id` toggled in/out\n\t\t */\n\t\ttoggleIdInArray(ids, id) {\n\t\t\tif (ids.includes(id)) {\n\t\t\t\treturn ids.filter((existing) => existing !== id)\n\t\t\t}\n\t\t\treturn [...ids, id]\n\t\t},\n\t},\n}\n</script>\n\n<!-- Styles in css/index-page.css -->\n"],"names":["CnIndexPageWidgets","CnRelatedFieldFilters","CnStatusBadge","CnBuildiqEditButton","CnFollowToggle","CnEmptyContent","CnPageHeader","CnQuickFilterBar","CnActionButtons","CnActionsBar","CnIcon","CnDataTable","CnCardGrid","CnBoardView","CnDateAxisView","CnObjectCalendar","CnMapWidget","CnObjectList","CnFolderSidebar","CnPagination","CnRowActions","CnMassDeleteDialog","CnMassCopyDialog","CnMassExportDialog","CnMassImportDialog","CnDeleteDialog","CnCopyDialog","CnFormDialog","CnAdvancedFormDialog","CnContextMenu","CnIndexSidebar","CnSavedViewsControl","CnSavedViewPresentationDialog","CnSavedViewEditDialog","CnSavedViewShareDialog","CnSaveViewDialog","CnConfirmDialog","CnQuickEditDialog","t","n","dispatchAction","dispatchSharedAction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CnIndexPage.vue2.js","sources":["../../../../src/components/CnIndexPage/CnIndexPage.vue"],"sourcesContent":["<template>\n\t<div class=\"cn-index-page\"\n\t\t:class=\"[lookClass, { 'cn-index-page--with-side-panel': hasSidePanel, 'cn-index-page--quick-filters-toolbar': effectiveQuickFilterPlacement === 'toolbar' }]\"\n\t\tdata-testid=\"cn-index-page\"\n\t\t@keydown=\"onListKeydown\">\n\t\t<!-- Header — overridable via #header slot. CnPageHeader ALWAYS renders:\n\t\t with showTitle it is the full visual header (icon, title,\n\t\t description); without it, `visuallyHidden` clips everything but the\n\t\t <h1> out of the layout. The page therefore looks identical either\n\t\t way, but the <main> landmark always carries a heading — the sidebar\n\t\t title this component used to rely on lives outside <main>, so\n\t\t screen-reader users and \"skip to main content\" got an unlabelled\n\t\t region (WCAG 2.4.6 / 1.3.1). -->\n\t\t<slot\n\t\t\tname=\"header\"\n\t\t\t:title=\"shownTitle\"\n\t\t\t:description=\"headerDescription\"\n\t\t\t:icon=\"resolvedIcon\"\n\t\t\t:showTitle=\"showTitle\">\n\t\t\t<CnPageHeader\n\t\t\t\t:title=\"shownTitle\"\n\t\t\t\t:description=\"headerDescription\"\n\t\t\t\t:icon=\"showTitleIcon && !isBoardLook ? resolvedIcon : ''\"\n\t\t\t\t:breadcrumb=\"presented('breadcrumb')\"\n\t\t\t\t:meta=\"headerMetaText\"\n\t\t\t\t:visuallyHidden=\"!showTitle\">\n\t\t\t\t<!-- The board's header buttons (`headerButtons`), beside the\n\t\t\t\t title. Declaring them takes the Views and Actions menus\n\t\t\t\t (and the Add / Export controls a button takes over) out of\n\t\t\t\t the actions bar. -->\n\t\t\t\t<template v-if=\"headerButtonsShown || buildiqInHeader\" #extra>\n\t\t\t\t\t<div class=\"cn-index-page__header-buttons\" data-testid=\"cn-index-header-buttons\">\n\t\t\t\t\t\t<template v-for=\"button in (headerButtonsShown ? orderedHeaderButtons : [])\" :key=\"button.key\">\n\t\t\t\t\t\t\t<!-- The buildiq square (the in-app edit button), between the secondary buttons and the primary one. -->\n\t\t\t\t\t\t\t<CnBuildiqEditButton v-if=\"button.action === '__buildiq'\" />\n\t\t\t\t\t\t\t<!-- `actions-menu`: the page's header actions as one labelled menu. -->\n\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\tv-else-if=\"button.action === 'actions-menu'\"\n\t\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t\t:forceName=\"true\"\n\t\t\t\t\t\t\t\t:menuName=\"button.label\"\n\t\t\t\t\t\t\t\t:aria-label=\"button.label\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-button-${button.key}`\">\n\t\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t\t<DotsHorizontal :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t<!-- The menu's entries (`items` on the button; the page's header\n\t\t\t\t\t\t\t\t actions when it names none): a header action, a built-in by\n\t\t\t\t\t\t\t\t name, or a link (an entry with `href`, the documentation). -->\n\t\t\t\t\t\t\t\t<template v-for=\"entry in headerMenuEntries(button)\" :key=\"entry.key\">\n\t\t\t\t\t\t\t\t\t<!-- A group heading and a separator (`{ heading }` and\n\t\t\t\t\t\t\t\t\t `separator` in items), as the board's \"Ga naar\" and\n\t\t\t\t\t\t\t\t\t \"Selectie\" groups. -->\n\t\t\t\t\t\t\t\t\t<NcActionCaption\n\t\t\t\t\t\t\t\t\t\tv-if=\"entry.kind === 'heading'\"\n\t\t\t\t\t\t\t\t\t\tclass=\"cn-index-header-menu__heading\"\n\t\t\t\t\t\t\t\t\t\t:name=\"entry.label\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\" />\n\t\t\t\t\t\t\t\t\t<NcActionSeparator\n\t\t\t\t\t\t\t\t\t\tv-else-if=\"entry.kind === 'separator'\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\" />\n\t\t\t\t\t\t\t\t\t<NcActionLink\n\t\t\t\t\t\t\t\t\t\tv-else-if=\"entry.href\"\n\t\t\t\t\t\t\t\t\t\t:href=\"entry.href\"\n\t\t\t\t\t\t\t\t\t\t:target=\"entry.linkTarget || '_blank'\"\n\t\t\t\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\">\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"entry.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<CnIcon :name=\"entry.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ entry.label }}\n\t\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t\t\t<NcActionLink\n\t\t\t\t\t\t\t\t\t\tv-else-if=\"entry.link\"\n\t\t\t\t\t\t\t\t\t\t:href=\"entry.link.href\"\n\t\t\t\t\t\t\t\t\t\t:closeAfterClick=\"true\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\"\n\t\t\t\t\t\t\t\t\t\t@click=\"onHeaderMenuLinkClick(entry, $event)\">\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"entry.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<CnIcon :name=\"entry.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ entry.label }}\n\t\t\t\t\t\t\t\t\t</NcActionLink>\n\t\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t\t\t:disabled=\"entry.disabled\"\n\t\t\t\t\t\t\t\t\t\t:title=\"entry.title || null\"\n\t\t\t\t\t\t\t\t\t\t:closeAfterClick=\"true\"\n\t\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-menu-${entry.key}`\"\n\t\t\t\t\t\t\t\t\t\t@click=\"entry.run()\">\n\t\t\t\t\t\t\t\t\t\t<!-- A built-in ships its own icon (`iconComponent`), so it\n\t\t\t\t\t\t\t\t\t\t never falls back to the \"?\" when the app has not\n\t\t\t\t\t\t\t\t\t\t registered that icon name. -->\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"entry.iconComponent || entry.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<component :is=\"entry.iconComponent\" v-if=\"entry.iconComponent\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t\t<CnIcon v-else :name=\"entry.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ entry.label }}\n\t\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t:variant=\"button.variant\"\n\t\t\t\t\t\t\t\t:href=\"button.link ? button.link.href : undefined\"\n\t\t\t\t\t\t\t\t:target=\"button.link ? button.link.target : undefined\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-index-header-button-${button.key}`\"\n\t\t\t\t\t\t\t\t@click=\"onHeaderButton(button)\">\n\t\t\t\t\t\t\t\t<template v-if=\"button.icon\" #icon>\n\t\t\t\t\t\t\t\t\t<CnIcon :name=\"button.icon\" :size=\"20\" />\n\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t{{ button.label }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<CnBuildiqEditButton v-if=\"buildiqInHeader && !headerButtonsShown\" />\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\t\t\t</CnPageHeader>\n\t\t</slot>\n\n\t\t<!-- Optional content below header, above actions bar -->\n\t\t<div v-if=\"$slots['below-header']\" class=\"cn-index-page__below-header\">\n\t\t\t<slot name=\"below-header\" />\n\t\t</div>\n\n\t\t<!-- Page tabs a named source declares (`pageTabs()`): sibling lists\n\t\t of the same thing, such as a flow list and its runs this week.\n\t\t Links, not tabs: each one is its own page. -->\n\t\t<nav v-if=\"effectivePageTabs.length > 0\"\n\t\t\tclass=\"cn-index-page__page-tabs\"\n\t\t\t:aria-label=\"title || t('nextcloud-vue', 'Pages')\"\n\t\t\tdata-testid=\"cn-index-page-tabs\">\n\t\t\t<a v-for=\"tab in effectivePageTabs\"\n\t\t\t\t:key=\"tab.id || tab.to\"\n\t\t\t\tclass=\"cn-index-page__page-tab\"\n\t\t\t\t:class=\"{ 'cn-index-page__page-tab--active': isActivePageTab(tab) }\"\n\t\t\t\t:href=\"pageTabHref(tab)\"\n\t\t\t\t:aria-current=\"isActivePageTab(tab) ? 'page' : undefined\"\n\t\t\t\t:data-testid=\"`cn-index-page-tab-${tab.id || tab.to}`\"\n\t\t\t\t@click=\"onPageTabClick(tab, $event)\">\n\t\t\t\t{{ tab.label }}\n\t\t\t\t<span v-if=\"typeof tab.count === 'number'\" class=\"cn-index-page__page-tab-count\">{{ tab.count }}</span>\n\t\t\t</a>\n\t\t</nav>\n\n\t\t<!-- KPI tiles above the list (`statRow`) and cards beside it\n\t\t (`sidePanel`), as DqTeamwachtrij and PqContracten\n\t\t (screens-index-stat-row). -->\n\t\t<CnIndexPageWidgets\n\t\t\tv-if=\"statRow && statRow.length > 0\"\n\t\t\tclass=\"cn-index-page__stat-row\"\n\t\t\tvariant=\"stat-row\"\n\t\t\t:widgets=\"statRow\" />\n\t\t<CnIndexPageWidgets\n\t\t\tv-if=\"hasSidePanel\"\n\t\t\tclass=\"cn-index-page__side-panel\"\n\t\t\tvariant=\"side-panel\"\n\t\t\t:widgets=\"sidePanel\" />\n\n\t\t<!-- Actions bar -->\n\t\t<!-- `quickFilterPlacement: \"row\"`: the chips on a row of their own above\n\t\t the toolbar, wrapping onto more lines (DqTeamwachtrij). -->\n\t\t<div\n\t\t\tv-if=\"effectiveQuickFilterPlacement === 'row' && tabStripEntries && tabStripEntries.length > 0\"\n\t\t\tclass=\"cn-index-page__quick-filter-row\"\n\t\t\tdata-testid=\"cn-index-page-quick-filter-row\">\n\t\t\t<CnQuickFilterBar\n\t\t\t\tinline\n\t\t\t\t:tabs=\"tabStripEntries\"\n\t\t\t\t:mode=\"quickFilterMode\"\n\t\t\t\t:maxVisible=\"quickFilterMaxVisible\"\n\t\t\t\t:fit=\"false\"\n\t\t\t\t:multiple=\"quickFilterMultiple\"\n\t\t\t\t:activeIndex=\"activeQuickFilterIndex\"\n\t\t\t\t:selectedIndices=\"selectedQuickFilterIndices\"\n\t\t\t\t:counts=\"effectiveTabCounts\"\n\t\t\t\t@update:activeIndex=\"onQuickFilterChange\"\n\t\t\t\t@update:selectedIndices=\"onQuickFilterMultiChange\" />\n\t\t</div>\n\t\t<CnActionsBar\n\t\t\t:layout=\"isBoardLook ? 'board' : 'nextcloud'\"\n\t\t\t:activeFilterChips=\"activeFilterChips\"\n\t\t\t:showBuildiqButton=\"!buildiqInHeader\"\n\t\t\t:bulkNoun=\"boardBulkNoun\"\n\t\t\t:bulkHint=\"viewBulkBand && viewBulkBand.hint !== true ? '' : (bulkHint ? cnTranslate(bulkHint) : bulkHint)\"\n\t\t\t:bulkBandAlways=\"bulkBandIdleShown && !viewBulkBand\"\n\t\t\t:bulkLead=\"viewBulkBandLead\"\n\t\t\t:bulkCancel=\"Boolean(viewBulkBand && viewBulkBand.cancel === true)\"\n\t\t\t:pagination=\"effectivePagination\"\n\t\t\t:objectCount=\"effectiveObjects.length\"\n\t\t\t:selectable=\"selectable\"\n\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t:addLabel=\"resolvedAddLabel\"\n\t\t\t:addIcon=\"resolvedIcon\"\n\t\t\t:inlineActionCount=\"inlineActionCount\"\n\t\t\t:showMassImport=\"showMassImport\"\n\t\t\t:showMassExport=\"showMassExport\"\n\t\t\t:showMassCopy=\"showMassCopy && !viewBulkBand\"\n\t\t\t:showMassDelete=\"showMassDelete && !viewBulkBand\"\n\t\t\t:viewMode=\"currentViewMode\"\n\t\t\t:showViewToggle=\"showViewToggle\"\n\t\t\t:availableViewModes=\"effectiveToggleModes\"\n\t\t\t:disabledViewModes=\"viewSwitchDisabledModes\"\n\t\t\t:viewSwitch=\"isBoardLook ? presented('viewSwitch') : null\"\n\t\t\t:viewModeLinks=\"viewSwitchLinkTargets\"\n\t\t\t:cardsLabel=\"cardsLabel\"\n\t\t\t:tableLabel=\"tableLabel\"\n\t\t\t:listLabel=\"listLabel\"\n\t\t\t:cardsIcon=\"cardsIcon\"\n\t\t\t:tableIcon=\"tableIcon\"\n\t\t\t:showMap=\"showMapSegment\"\n\t\t\t:mapLabel=\"mapLabel\"\n\t\t\t:mapIcon=\"mapIcon\"\n\t\t\t:listIcon=\"listIcon\"\n\t\t\t:showSearch=\"search !== false && (inlineSearch || isBoardLook) && !sourceRefusal\"\n\t\t\t:searchPlacement=\"searchPlacement\"\n\t\t\t:searchValue=\"effectiveSearchValue\"\n\t\t\t:searchPlaceholder=\"shownSearchPlaceholder\"\n\t\t\t:showCountWithSearch=\"showCountWithSearch\"\n\t\t\t:refreshing=\"effectiveRefreshing\"\n\t\t\t:refreshDisabled=\"refreshDisabled\"\n\t\t\t:addDisabled=\"addDisabled\"\n\t\t\t:addTo=\"addLinkTo\"\n\t\t\t:showAdd=\"effectiveShowAdd && !headerButtonTakes('add')\"\n\t\t\t:showCount=\"showCount && !isBoardLook\"\n\t\t\t:showActionsMenu=\"actionsMenuShown\"\n\t\t\t:showSidebarToggle=\"hasSidebar\"\n\t\t\t:sidebarOpen=\"sidebarOpen\"\n\t\t\t:headerActions=\"mergedHeaderActions\"\n\t\t\t:bulkActions=\"viewBulkActions\"\n\t\t\t:documentationUrl=\"documentationUrl\"\n\t\t\t:documentationLabel=\"documentationLabel || undefined\"\n\t\t\t@add=\"onAddClick\"\n\t\t\t@clearSelection=\"onSelect([])\"\n\t\t\t@removeFilter=\"onRemoveActiveFilter\"\n\t\t\t@clearFilters=\"onClearFilters\"\n\t\t\t@toggleSidebar=\"sidebarOpen = !sidebarOpen\"\n\t\t\t@refresh=\"onRefreshEvent\"\n\t\t\t@headerAction=\"onHeaderAction\"\n\t\t\t@bulkAction=\"onBulkAction\"\n\t\t\t@showImport=\"showImportDialog = true\"\n\t\t\t@showExport=\"showExportDialog = true\"\n\t\t\t@showCopy=\"showMassCopyDialog = true\"\n\t\t\t@showDelete=\"showMassDeleteDialog = true\"\n\t\t\t@search=\"onSearchEvent\"\n\t\t\t@viewModeChange=\"onViewModeChange\">\n\t\t\t<template v-if=\"$slots['mass-actions']\" #mass-actions=\"{ count, selectedIds: ids }\">\n\t\t\t\t<slot name=\"mass-actions\" :count=\"count\" :selectedIds=\"ids\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"$slots['action-items']\" #action-items>\n\t\t\t\t<slot name=\"action-items\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"$slots['after-search'] || searchInFiles || boardControlsShown || relatedFieldFilters || sourceFacetControls.length > 0\" #after-search>\n\t\t\t\t<!-- The values an endpoint source counts in its answer\n\t\t\t\t (`sourceConfig.facets`), as pickers: \"Kanaal: alle\". -->\n\t\t\t\t<label\n\t\t\t\t\tv-for=\"facet in sourceFacetControls\"\n\t\t\t\t\t:key=\"`source-facet-${facet.field}`\"\n\t\t\t\t\tclass=\"cn-index-page__board-control\"\n\t\t\t\t\t:data-testid=\"`cn-source-facet-${facet.field}`\">\n\t\t\t\t\t<span class=\"cn-index-page__board-control-label\">{{ facet.label }}</span>\n\t\t\t\t\t<select\n\t\t\t\t\t\tclass=\"cn-index-page__board-select\"\n\t\t\t\t\t\t:value=\"facet.value\"\n\t\t\t\t\t\t@change=\"onSourceFacetChange(facet.field, $event.target.value)\">\n\t\t\t\t\t\t<option value=\"\">{{ facet.allLabel }}</option>\n\t\t\t\t\t\t<option\n\t\t\t\t\t\t\tv-for=\"option in facet.options\"\n\t\t\t\t\t\t\t:key=\"`source-facet-${facet.field}-${option.value}`\"\n\t\t\t\t\t\t\t:value=\"option.value\">\n\t\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t\t</option>\n\t\t\t\t\t</select>\n\t\t\t\t</label>\n\t\t\t\t<!-- Board view controls, after the search (screens-board-reference-columns):\n\t\t\t\t the narrowing select (\"Case type:\"), the column switch (\"Columns:\n\t\t\t\t status | type | assignee\") and the board's hint sentence. -->\n\t\t\t\t<template v-if=\"boardControlsShown\">\n\t\t\t\t\t<label\n\t\t\t\t\t\tv-if=\"boardNarrow\"\n\t\t\t\t\t\tclass=\"cn-index-page__board-control\"\n\t\t\t\t\t\tdata-testid=\"cn-board-narrow\">\n\t\t\t\t\t\t<span class=\"cn-index-page__board-control-label\">{{ boardNarrowLabel }}</span>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclass=\"cn-index-page__board-select cn-index-page__board-select--fit\"\n\t\t\t\t\t\t\tdata-testid=\"cn-board-narrow-select\"\n\t\t\t\t\t\t\t:value=\"boardNarrowValue\"\n\t\t\t\t\t\t\t@change=\"onBoardNarrowChange($event.target.value)\">\n\t\t\t\t\t\t\t<option value=\"\">{{ boardNarrowAllLabel }}</option>\n\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\tv-for=\"option in boardNarrowOptions\"\n\t\t\t\t\t\t\t\t:key=\"`narrow-${option.value}`\"\n\t\t\t\t\t\t\t\t:value=\"option.value\">\n\t\t\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</label>\n\t\t\t\t\t<label\n\t\t\t\t\t\tv-if=\"boardColumnFields.length > 1\"\n\t\t\t\t\t\tclass=\"cn-index-page__board-control\"\n\t\t\t\t\t\tdata-testid=\"cn-board-column-switch\">\n\t\t\t\t\t\t<span class=\"cn-index-page__board-control-label\">{{ boardColumnSwitchLabel }}</span>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\tclass=\"cn-index-page__board-select cn-index-page__board-select--strong\"\n\t\t\t\t\t\t\tdata-testid=\"cn-board-column-switch-select\"\n\t\t\t\t\t\t\t:value=\"boardColumnField\"\n\t\t\t\t\t\t\t@change=\"onBoardColumnFieldChange($event.target.value)\">\n\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\tv-for=\"entry in boardColumnFields\"\n\t\t\t\t\t\t\t\t:key=\"`colfield-${entry.field}`\"\n\t\t\t\t\t\t\t\t:value=\"entry.field\">\n\t\t\t\t\t\t\t\t{{ cnTranslate(entry.label) }}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</label>\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-if=\"board.hint\"\n\t\t\t\t\t\tclass=\"cn-index-page__board-hint\"\n\t\t\t\t\t\tdata-testid=\"cn-board-hint\">{{ cnTranslate(board.hint) }}</span>\n\t\t\t\t</template>\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-if=\"searchInFiles\"\n\t\t\t\t\t:modelValue=\"contentSearch\"\n\t\t\t\t\ttype=\"switch\"\n\t\t\t\t\tclass=\"cn-index-page__content-search\"\n\t\t\t\t\tdata-testid=\"cn-index-content-search\"\n\t\t\t\t\t@update:modelValue=\"onContentSearchToggle\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Also search inside files') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<CnRelatedFieldFilters\n\t\t\t\t\tv-if=\"relatedFieldFilters\"\n\t\t\t\t\t:definitions=\"relatedFieldFilters.definitions || {}\"\n\t\t\t\t\t:related=\"relatedFieldFilters.related || {}\"\n\t\t\t\t\t:storeKey=\"objectType || selfObjectType || ''\" />\n\t\t\t\t<slot name=\"after-search\" />\n\t\t\t</template>\n\t\t\t<template\n\t\t\t\tv-if=\"$slots['selection-actions']\"\n\t\t\t\t#selection-actions=\"{ count, selectedIds: ids }\">\n\t\t\t\t<slot name=\"selection-actions\" :count=\"count\" :selectedIds=\"ids\" />\n\t\t\t</template>\n\t\t\t<template v-if=\"$slots['header-actions'] || $slots['actions']\" #actions>\n\t\t\t\t<!--\n\t\t\t\t\t@slot header-actions\n\t\t\t\t\t@description Extra buttons in the page header, inline next to the Add button. Documented since the beginning but wired up only later — consumers passing it (hermiq's flow list's \"New flow\" button) rendered nothing while the page looked fine.\n\t\t\t\t-->\n\t\t\t\t<slot name=\"header-actions\" />\n\t\t\t\t<slot name=\"actions\" />\n\t\t\t</template>\n\t\t\t<!-- Rendered AFTER the primary Add button (CnActionsBar's `actions-end`\n\t\t\t slot), not before it: these are \"browse/manage\" controls — saved\n\t\t\t views, export, page config — grouped together and kept apart from\n\t\t\t the app-specific buttons in `#actions`, with Add sitting between\n\t\t\t the two groups rather than before both (dossiq Cases/Queue). -->\n\t\t\t<template v-if=\"isEditMode || barShowsExportMenu || barShowsSavedViews\" #actions-end>\n\t\t\t\t<!-- Saved views (opt-in via `allowSavedViews`): the toolbar keeps\n\t\t\t\t \"Save view\" and, under the board look, the chips. The list\n\t\t\t\t and every per-view action live in the sidebar's Filters tab. -->\n\t\t\t\t<CnSavedViewsControl\n\t\t\t\t\tv-if=\"barShowsSavedViews\"\n\t\t\t\t\t:views=\"viewsForControl\"\n\t\t\t\t\t:loading=\"savedViewsLoading\"\n\t\t\t\t\t:currentUserId=\"currentSavedViewsUserId\"\n\t\t\t\t\t:counts=\"savedViewCounts\"\n\t\t\t\t\t:selectedViewId=\"appliedSavedViewId\"\n\t\t\t\t\t:save=\"toolbarSavesView\"\n\t\t\t\t\t:chips=\"savedViewChips\"\n\t\t\t\t\t@apply=\"onApplySavedView\"\n\t\t\t\t\t@saveRequest=\"showSaveViewDialog = true\" />\n\t\t\t\t<!-- Native Export menu (opt-in via `allowExport` + schema.exportable):\n\t\t\t\t CSV/Excel entries navigate to OR's export-leaf URL, passing the\n\t\t\t\t current route's query params through as filters. -->\n\t\t\t\t<NcActions\n\t\t\t\t\tv-if=\"barShowsExportMenu\"\n\t\t\t\t\t:forceName=\"true\"\n\t\t\t\t\t:menuName=\"t('nextcloud-vue', 'Export')\"\n\t\t\t\t\tdata-testid=\"cn-index-export-menu\"\n\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Export')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Export :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcActionButton data-testid=\"cn-index-export-csv\" @click=\"onExportClick('csv')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Export :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Export as CSV') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton data-testid=\"cn-index-export-excel\" @click=\"onExportClick('excel')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Export :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Export as Excel') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t\t<!-- Edit-mode config cog: opens the page's full config editor\n\t\t\t\t (CnPageRenderer wires @configure to CnPageConfigModal). -->\n\t\t\t\t<NcButton v-if=\"isEditMode\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Configure page')\"\n\t\t\t\t\t@click=\"$emit('configure')\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Cog :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t\t<!-- Quick-filter tabs (REQ-MIPFU-1) rendered INSIDE the action bar\n\t\t\t (between the view toggle and the actions) when the manifest\n\t\t\t declares `config.quickFilters`. Switching tabs re-fetches with\n\t\t\t the merged filter; @event quick-filter-change. -->\n\t\t\t<template v-if=\"$slots['toolbar-start'] || quickFilterTabsInToolbar\" #filters>\n\t\t\t\t<!-- @slot toolbar-start The page's own controls at the start of the toolbar row, before the quick-filter chips (DqAanMijToegewezen: the team's name chips). -->\n\t\t\t\t<slot name=\"toolbar-start\" />\n\t\t\t\t<CnQuickFilterBar\n\t\t\t\t\tv-if=\"quickFilterTabsInToolbar\"\n\t\t\t\t\tinline\n\t\t\t\t\t:tabs=\"tabStripEntries\"\n\t\t\t\t\t:mode=\"quickFilterMode\"\n\t\t\t\t\t:maxVisible=\"quickFilterMaxVisible\"\n\t\t\t\t\t:fit=\"effectiveQuickFilterPlacement === 'toolbar'\"\n\t\t\t\t\t:multiple=\"quickFilterMultiple\"\n\t\t\t\t\t:activeIndex=\"shownQuickFilterIndex\"\n\t\t\t\t\t:selectedIndices=\"selectedQuickFilterIndices\"\n\t\t\t\t\t:counts=\"effectiveTabCounts\"\n\t\t\t\t\t@update:activeIndex=\"onQuickFilterChange\"\n\t\t\t\t\t@update:selectedIndices=\"onQuickFilterMultiChange\" />\n\t\t\t</template>\n\t\t\t<!-- Board look, `filterMenu` on a page with no filter sidebar: the\n\t\t\t board's Filter button, a menu of each enum column's values as\n\t\t\t toggleable filters. -->\n\t\t\t<template v-if=\"boardFilterMenu\" #filter-menu>\n\t\t\t\t<NcActions\n\t\t\t\t\tclass=\"cn-actions-bar__filter-menu\"\n\t\t\t\t\t:class=\"{ 'cn-actions-bar__filter-menu--counted': activeFilterChips.length > 0 }\"\n\t\t\t\t\t:style=\"filterMenuCountStyle\"\n\t\t\t\t\t:data-count=\"activeFilterChips.length > 0 ? activeFilterChips.length : null\"\n\t\t\t\t\t:aria-label=\"filterMenuLabel\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t:menuName=\"t('nextcloud-vue', 'Filter')\"\n\t\t\t\t\tdata-testid=\"cn-index-filter-menu\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Tune :size=\"16\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-for=\"field in filterableFields\" :key=\"field.key\">\n\t\t\t\t\t\t<NcActionCaption :name=\"field.label\" />\n\t\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t\tv-for=\"val in field.values\"\n\t\t\t\t\t\t\t:key=\"`${field.key}-${val}`\"\n\t\t\t\t\t\t\t:modelValue=\"isFilterActive(field.key, val)\"\n\t\t\t\t\t\t\t@update:modelValue=\"toggleFilter(field.key, val)\">\n\t\t\t\t\t\t\t{{ val }}\n\t\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t</template>\n\t\t\t\t</NcActions>\n\t\t\t</template>\n\t\t</CnActionsBar>\n\n\t\t<!-- A second filter strip on one field (`filterStrip`), under the\n\t\t toolbar: \"All\" and one pill per value, each with its count within\n\t\t the active quick filter (board PqWachtrij: \"Soort, dan kanaal\"). -->\n\t\t<div\n\t\t\tv-if=\"filterStripEntries.length > 0\"\n\t\t\tclass=\"cn-index-page__filter-strip\"\n\t\t\trole=\"group\"\n\t\t\t:aria-label=\"filterStripLabel\"\n\t\t\tdata-testid=\"cn-index-filter-strip\">\n\t\t\t<button\n\t\t\t\tv-for=\"entry in filterStripEntries\"\n\t\t\t\t:key=\"entry.key\"\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"cn-index-page__filter-strip-pill\"\n\t\t\t\t:class=\"{ 'cn-index-page__filter-strip-pill--active': entry.active }\"\n\t\t\t\t:aria-pressed=\"entry.active ? 'true' : 'false'\"\n\t\t\t\t:data-testid=\"`cn-index-filter-strip-${entry.key}`\"\n\t\t\t\t@click=\"onFilterStripPick(entry.value)\">\n\t\t\t\t<span>{{ entry.label }}</span> <span v-if=\"entry.count !== null\" class=\"cn-index-page__filter-strip-count\">{{ entry.count }}</span>\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- Header actions of `type: \"open-form\"` or `\"open-modal\"`: this\n\t\t instance draws nothing and owns the create dialog, as on a detail\n\t\t page, so a header button or menu entry naming one opens it. -->\n\t\t<CnActionButtons\n\t\t\tv-if=\"dialogHeaderActions.length > 0\"\n\t\t\t:actions=\"dialogHeaderActions\"\n\t\t\tdisplay=\"menu\"\n\t\t\tdata-testid=\"cn-index-header-dialog-actions\"\n\t\t\t@entries=\"dialogHeaderRuns = $event\"\n\t\t\t@created=\"onHeaderActionCreated\" />\n\n\t\t<!-- Quick edit: a few fields of one row, over the list, with the list\n\t\t keeping its place. -->\n\t\t<CnQuickEditDialog\n\t\t\tv-if=\"quickEditRow !== null\"\n\t\t\t:object=\"quickEditRow\"\n\t\t\t:schema=\"effectiveSchema\"\n\t\t\t:register=\"register\"\n\t\t\t:fields=\"quickEditFields\"\n\t\t\t:writableField=\"writableField\"\n\t\t\t:serverObject=\"quickEditServerRow\"\n\t\t\t@save=\"onQuickEditSave\"\n\t\t\t@keepTheirs=\"onQuickEditKeepTheirs\"\n\t\t\t@close=\"quickEditRow = null\" />\n\n\t\t<!-- The help key's sheet. Every shortcut the list offers is here and in\n\t\t the command palette: one that only the handler knows about is one\n\t\t nobody can find. -->\n\t\t<CnConfirmDialog\n\t\t\tv-if=\"showShortcutHelp\"\n\t\t\t:name=\"shortcutHelpTitle\"\n\t\t\t:confirmLabel=\"closeLabel\"\n\t\t\tdata-testid=\"cn-list-shortcuts-help\"\n\t\t\t@confirm=\"showShortcutHelp = false\"\n\t\t\t@cancel=\"showShortcutHelp = false\">\n\t\t\t<dl class=\"cn-index-page__shortcuts\">\n\t\t\t\t<template v-for=\"entry in shortcutHelpEntries\" :key=\"entry.id\">\n\t\t\t\t\t<dt><kbd>{{ entry.keys }}</kbd></dt>\n\t\t\t\t\t<dd>{{ entry.description }}</dd>\n\t\t\t\t</template>\n\t\t\t</dl>\n\t\t</CnConfirmDialog>\n\n\t\t<!-- Mass delete dialog -->\n\t\t<CnMassDeleteDialog\n\t\t\tv-if=\"showMassDeleteDialog\"\n\t\t\tref=\"massDeleteDialog\"\n\t\t\t:items=\"selectedObjects\"\n\t\t\t:nameField=\"massActionNameField\"\n\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t@confirm=\"onMassDeleteConfirm\"\n\t\t\t@close=\"showMassDeleteDialog = false\" />\n\n\t\t<!-- Mass copy dialog -->\n\t\t<CnMassCopyDialog\n\t\t\tv-if=\"showMassCopyDialog\"\n\t\t\tref=\"massCopyDialog\"\n\t\t\t:items=\"selectedObjects\"\n\t\t\t:nameField=\"massActionNameField\"\n\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t:include=\"copyIncludeKinds\"\n\t\t\t:register=\"copyRegisterSlug\"\n\t\t\t:schema=\"copySchemaSlug\"\n\t\t\t@confirm=\"onMassCopyConfirm\"\n\t\t\t@close=\"showMassCopyDialog = false\" />\n\n\t\t<!-- Mass export dialog -->\n\t\t<CnMassExportDialog\n\t\t\tv-if=\"showExportDialog\"\n\t\t\tref=\"exportDialog\"\n\t\t\t:formats=\"exportFormats\"\n\t\t\t:scopeText=\"massExportScopeText\"\n\t\t\t@confirm=\"onMassExportConfirm\"\n\t\t\t@close=\"showExportDialog = false\" />\n\n\t\t<!-- Mass import dialog -->\n\t\t<CnMassImportDialog\n\t\t\tv-if=\"showImportDialog\"\n\t\t\tref=\"importDialog\"\n\t\t\t:options=\"importOptions\"\n\t\t\t@confirm=\"onMassImportConfirm\"\n\t\t\t@close=\"showImportDialog = false\">\n\t\t\t<template v-if=\"$slots['import-fields']\" #fields=\"{ file }\">\n\t\t\t\t<slot name=\"import-fields\" :file=\"file\" />\n\t\t\t</template>\n\t\t</CnMassImportDialog>\n\n\t\t<!-- Save-current-view dialog (saved-views-ui) -->\n\t\t<CnSaveViewDialog\n\t\t\tv-if=\"showSaveViewDialog\"\n\t\t\tref=\"saveViewDialog\"\n\t\t\t:schema=\"viewPresentationSchema\"\n\t\t\t@confirm=\"onSaveViewConfirm\"\n\t\t\t@close=\"showSaveViewDialog = false\" />\n\n\t\t<!-- How-a-saved-view-shows dialog (view-presentation-picker) -->\n\t\t<CnSavedViewPresentationDialog\n\t\t\tv-if=\"viewPendingPresentation\"\n\t\t\tref=\"presentationViewDialog\"\n\t\t\t:view=\"viewPendingPresentation\"\n\t\t\t:schema=\"viewPresentationSchema\"\n\t\t\t@confirm=\"onPresentationViewConfirm\"\n\t\t\t@close=\"viewPendingPresentation = null\" />\n\n\t\t<!-- Edit-a-saved-view dialog (saved-views-manage-and-defaults) -->\n\t\t<CnSavedViewEditDialog\n\t\t\tv-if=\"viewPendingEdit\"\n\t\t\tref=\"editViewDialog\"\n\t\t\t:view=\"viewPendingEdit\"\n\t\t\t:savedSummary=\"criteriaSummaryOf(savedViewState(viewPendingEdit))\"\n\t\t\t:currentSummary=\"list ? criteriaSummaryOf(currentViewState()) : ''\"\n\t\t\t@confirm=\"onEditViewConfirm\"\n\t\t\t@close=\"viewPendingEdit = null\" />\n\n\t\t<!-- Share-a-saved-view dialog (saved-views-shared-by-role) -->\n\t\t<CnSavedViewShareDialog\n\t\t\tv-if=\"viewPendingShare\"\n\t\t\tref=\"shareViewDialog\"\n\t\t\t:view=\"viewPendingShare\"\n\t\t\t@confirm=\"onShareViewConfirm\"\n\t\t\t@close=\"viewPendingShare = null\" />\n\n\t\t<!-- Confirmation of an api-call header action that asks for one. -->\n\t\t<CnConfirmDialog\n\t\t\tv-if=\"headerApiCallPending\"\n\t\t\tref=\"headerApiCallConfirmDialog\"\n\t\t\t:dialogTitle=\"cnTranslate(headerApiCallPending.confirmTitle || headerApiCallPending.label || '')\"\n\t\t\t:message=\"headerApiCallPending.confirmMessage ? cnTranslate(headerApiCallPending.confirmMessage) : t('nextcloud-vue', 'Are you sure you want to continue?')\"\n\t\t\t:confirmLabel=\"cnTranslate(headerApiCallPending.label || '')\"\n\t\t\tdata-testid=\"cn-index-header-api-call-confirm\"\n\t\t\t@confirm=\"onHeaderApiCallConfirm\"\n\t\t\t@close=\"headerApiCallPending = null\" />\n\n\t\t<!-- Delete-saved-view confirm (saved-views-ui) -->\n\t\t<CnConfirmDialog\n\t\t\tv-if=\"viewPendingDelete\"\n\t\t\tref=\"deleteViewConfirmDialog\"\n\t\t\tvariant=\"error\"\n\t\t\t:dialogTitle=\"t('nextcloud-vue', 'Delete view?')\"\n\t\t\t:eyebrow=\"deleteViewEyebrow\"\n\t\t\t:subtitle=\"deleteViewSubtitle\"\n\t\t\t:message=\"deleteViewMessage\"\n\t\t\t:confirmLabel=\"t('nextcloud-vue', 'Delete view')\"\n\t\t\tconfirmIcon=\"DeleteOutline\"\n\t\t\t@confirm=\"onDeleteViewConfirm\"\n\t\t\t@close=\"viewPendingDelete = null\" />\n\n\t\t<!-- @slot delete-dialog Replace the single-item delete dialog. -->\n\t\t<!-- @binding {boolean} show Whether the delete dialog is currently visible. -->\n\t\t<!-- @binding {object} item The item targeted for deletion. -->\n\t\t<!-- @binding {Function} confirm Performs the delete — the same path the default dialog's `@confirm` runs. -->\n\t\t<!-- @binding {Function} close Closes the delete dialog. -->\n\t\t<!-- `show` and `confirm` are props for the same reason as `form-dialog`\n\t\t above: a manifest-mounted replacement receives props only. -->\n\t\t<slot\n\t\t\tname=\"delete-dialog\"\n\t\t\t:show=\"showSingleDeleteDialog\"\n\t\t\t:item=\"actionTargetItem\"\n\t\t\t:confirm=\"onSingleDeleteConfirm\"\n\t\t\t:close=\"closeSingleDelete\">\n\t\t\t<CnDeleteDialog\n\t\t\t\tv-if=\"showSingleDeleteDialog && actionTargetItem\"\n\t\t\t\tref=\"singleDeleteDialog\"\n\t\t\t\t:item=\"actionTargetItem\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t\t@confirm=\"onSingleDeleteConfirm\"\n\t\t\t\t@close=\"closeSingleDelete\" />\n\t\t</slot>\n\n\t\t<!-- @slot copy-dialog Replace the single-item copy dialog. -->\n\t\t<!-- @binding {boolean} show Whether the copy dialog is currently visible. -->\n\t\t<!-- @binding {object} item The item targeted for copy. -->\n\t\t<!-- @binding {Function} confirm Performs the copy — the same path the default dialog's `@confirm` runs. -->\n\t\t<!-- @binding {Function} close Closes the copy dialog. -->\n\t\t<!-- `show` and `confirm` are props for the same reason as `form-dialog`\n\t\t above: a manifest-mounted replacement receives props only. -->\n\t\t<slot\n\t\t\tname=\"copy-dialog\"\n\t\t\t:show=\"showSingleCopyDialog\"\n\t\t\t:item=\"actionTargetItem\"\n\t\t\t:confirm=\"onSingleCopyConfirm\"\n\t\t\t:close=\"closeSingleCopy\">\n\t\t\t<CnCopyDialog\n\t\t\t\tv-if=\"showSingleCopyDialog && actionTargetItem\"\n\t\t\t\tref=\"singleCopyDialog\"\n\t\t\t\t:item=\"actionTargetItem\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:nameFormatter=\"nameFormatter\"\n\t\t\t\t:include=\"copyIncludeKinds\"\n\t\t\t\t:register=\"copyRegisterSlug\"\n\t\t\t\t:schema=\"copySchemaSlug\"\n\t\t\t\t@confirm=\"onSingleCopyConfirm\"\n\t\t\t\t@close=\"closeSingleCopy\" />\n\t\t</slot>\n\n\t\t<!-- @slot form-dialog Replace the create/edit form dialog (use CnFormDialog or CnAdvancedFormDialog). -->\n\t\t<!-- @binding {boolean} show Whether the form dialog is currently visible. -->\n\t\t<!-- @binding {?object} item The item being edited, or null in create mode. -->\n\t\t<!-- @binding {object} schema The effective JSON schema driving the form. -->\n\t\t<!-- @binding {Function} confirm Persists the form data through the page's own save path (store / self-store / createOverride) and emits `create`/`edit`. Call this instead of saving in the replacement dialog, so a create or edit made there behaves exactly like one made in the built-in dialog. Takes the complete object to save. List refresh is automatic on the self-fetch and `createOverride` paths; with the `store` prop, refresh is driven by the consumer's `create`/`edit` handler as usual. -->\n\t\t<!-- @binding {Function} close Closes the form dialog. -->\n\t\t<!-- @binding {Function} refresh Re-reads the list. For a replacement dialog that saves through its own endpoint rather than `confirm`, so the list still shows what it saved. -->\n\t\t<!--\n\t\t `confirm` is bound as a PROP, not left as an `@confirm` listener on\n\t\t the default child. A manifest-declared replacement is mounted by\n\t\t CnPageRenderer as `<component :is=… v-bind=\"slotProps\" />`, which\n\t\t binds props only — so a listener is unreachable from a manifest\n\t\t even in principle, and a replacement dialog could render and close\n\t\t but never save (openconnector#1150).\n\t\t-->\n\t\t<slot\n\t\t\tname=\"form-dialog\"\n\t\t\t:show=\"showFormDialogVisible\"\n\t\t\t:item=\"editItem\"\n\t\t\t:schema=\"formSchema\"\n\t\t\t:confirm=\"onFormConfirm\"\n\t\t\t:close=\"closeFormDialog\"\n\t\t\t:refresh=\"onRefreshEvent\">\n\t\t\t<CnFormDialog\n\t\t\t\tv-if=\"showFormDialogVisible && !useAdvancedFormDialog\"\n\t\t\t\tref=\"formDialog\"\n\t\t\t\t:schema=\"formSchema\"\n\t\t\t\t:item=\"editItem\"\n\t\t\t\t:register=\"formRegister\"\n\t\t\t\t:excludeFields=\"rowFormTarget ? [] : excludeFields\"\n\t\t\t\t:includeFields=\"rowFormTarget ? null : includeFields\"\n\t\t\t\t:fieldOverrides=\"rowFormTarget ? {} : fieldOverrides\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:size=\"formSize\"\n\t\t\t\t:columns=\"formColumns\"\n\t\t\t\t:initialData=\"resolvedCreateDefaults\"\n\t\t\t\t@confirm=\"onFormConfirm\"\n\t\t\t\t@close=\"closeFormDialog\">\n\t\t\t\t<template v-if=\"$slots['form-fields']\" #form=\"scope\">\n\t\t\t\t\t<slot name=\"form-fields\" v-bind=\"scope\" />\n\t\t\t\t</template>\n\t\t\t</CnFormDialog>\n\t\t\t<CnAdvancedFormDialog\n\t\t\t\tv-if=\"showFormDialogVisible && useAdvancedFormDialog\"\n\t\t\t\tref=\"formDialog\"\n\t\t\t\t:schema=\"formSchema\"\n\t\t\t\t:item=\"editItem\"\n\t\t\t\t:excludeFields=\"rowFormTarget ? [] : excludeFields\"\n\t\t\t\t:includeFields=\"rowFormTarget ? null : includeFields\"\n\t\t\t\t:fieldOverrides=\"rowFormTarget ? {} : fieldOverrides\"\n\t\t\t\t:nameField=\"massActionNameField\"\n\t\t\t\t:initialValues=\"resolvedCreateDefaults\"\n\t\t\t\t@confirm=\"onFormConfirm\"\n\t\t\t\t@close=\"closeFormDialog\" />\n\t\t</slot>\n\n\t\t<!-- Body -->\n\t\t<div class=\"cn-index-page__body\" :class=\"{ 'cn-index-page__body--with-folders': showsFolderPane }\">\n\t\t\t<!-- Optional folder navigation pane (opt-in via the `folderSidebar`\n\t\t\t config). Selecting a folder filters the list by the config's\n\t\t\t `filterField`; \"All\" clears it. `pane: false` keeps the scope\n\t\t\t from the deep link and draws no pane. -->\n\t\t\t<div v-if=\"showsFolderPane\" class=\"cn-index-page__folder-pane\">\n\t\t\t\t<CnFolderSidebar\n\t\t\t\t\t:source=\"folderSidebarSource\"\n\t\t\t\t\t:folders=\"folderSidebarFolders\"\n\t\t\t\t\t:objects=\"effectiveObjects\"\n\t\t\t\t\t:groupBy=\"folderSidebar.groupBy || folderSidebar.field || ''\"\n\t\t\t\t\t:facetValues=\"folderSidebarFacetValues\"\n\t\t\t\t\t:partial=\"folderSidebarPartial\"\n\t\t\t\t\t:filesPath=\"folderSidebar.filesPath || '/'\"\n\t\t\t\t\t:selectedId=\"selectedFolderId\"\n\t\t\t\t\t:allLabel=\"folderSidebar.allLabel ? cnTranslate(folderSidebar.allLabel) : undefined\"\n\t\t\t\t\t:title=\"folderSidebar.title ? cnTranslate(folderSidebar.title) : ''\"\n\t\t\t\t\t:idField=\"folderPassthroughIdField\"\n\t\t\t\t\t:nameField=\"folderPassthroughNameField\"\n\t\t\t\t\t:allowCreate=\"Boolean(folderSidebar.allowCreate)\"\n\t\t\t\t\t@select=\"onFolderSelect\"\n\t\t\t\t\t@create=\"$emit('folder-create', $event)\" />\n\t\t\t</div>\n\n\t\t\t<!-- The list. `v-show`, never `v-if`: the narrow layout hides it\n\t\t\t but must not unmount it, because unmounting throws away the\n\t\t\t scroll position, the selection and the loaded page, which is\n\t\t\t the whole thing the split view exists to keep. -->\n\t\t\t<div\n\t\t\t\tv-show=\"splitLayout !== 'detail'\"\n\t\t\t\tref=\"listScroll\"\n\t\t\t\tclass=\"cn-index-page__main\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'cn-index-page__main--map': currentViewMode === 'map',\n\t\t\t\t\t'cn-index-page__main--list': currentViewMode === 'list',\n\t\t\t\t\t'cn-index-page__main--table': currentViewMode === 'table',\n\t\t\t\t\t'cn-index-page__main--split': splitLayout === 'split',\n\t\t\t\t}\"\n\t\t\t\t@scroll=\"onListScroll\">\n\t\t\t\t<!-- @slot before-collection Content rendered above the collection in EVERY view mode (table, cards, list, map) — e.g. a folder/group strip that must stay visually separate from the objects instead of masquerading as rows or cards. -->\n\t\t\t\t<slot name=\"before-collection\" />\n\n\t\t\t\t<!-- A sort option whose endpoint could not answer: the list fell\n\t\t\t\t back to the option's own order, and says so. -->\n\t\t\t\t<p v-if=\"sortSourceFellBack && sortSourceFailedNote\"\n\t\t\t\t\tclass=\"cn-index-page__sort-source-note\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-sort-source-note\">\n\t\t\t\t\t{{ sortSourceFailedNote }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- The selected folder as a heading above the list (a group on\n\t\t\t\t DqAfdelingen: its name, then its parent and member count). -->\n\t\t\t\t<div v-if=\"scopeHeading\" class=\"cn-index-page__scope-heading\" data-testid=\"cn-index-page-scope-heading\">\n\t\t\t\t\t<h2 class=\"cn-index-page__scope-title\">\n\t\t\t\t\t\t{{ scopeHeading.name }}\n\t\t\t\t\t</h2>\n\t\t\t\t\t<span v-if=\"scopeHeading.subtitle\" class=\"cn-index-page__scope-subtitle\" data-testid=\"cn-index-page-scope-subtitle\">{{ scopeHeading.subtitle }}</span>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- A note the named source read off its answer (\"Filters run in\n\t\t\t\t this order: ...\"). -->\n\t\t\t\t<p v-if=\"sourceNote && !sourceRefusal\"\n\t\t\t\t\tclass=\"cn-index-page__source-note\"\n\t\t\t\t\tdata-testid=\"cn-index-page-source-note\">\n\t\t\t\t\t{{ sourceNote }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- Loading state — initial fetch only; a background refresh keeps the table visible -->\n\t\t\t\t<div v-if=\"showInitialLoader\" class=\"cn-index-page__loading\">\n\t\t\t\t\t<!-- name gives NcLoadingIcon a non-empty aria-label (WCAG role-img-alt); empty name ships an unlabeled role=\"img\" -->\n\t\t\t\t\t<NcLoadingIcon :size=\"32\" :name=\"loadingText\" />\n\t\t\t\t</div>\n\n\t\t\t\t<!-- The named source's server refused this reader: its sentence\n\t\t\t\t instead of the rows, never an empty list. -->\n\t\t\t\t<div v-else-if=\"sourceRefusal\"\n\t\t\t\t\tclass=\"cn-index-page__source-refusal\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-page-source-refusal\">\n\t\t\t\t\t<NcNoteCard type=\"error\">\n\t\t\t\t\t\t{{ sourceRefusal }}\n\t\t\t\t\t</NcNoteCard>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- A search the server refused for its grammar: the term with the\n\t\t\t\t character it stopped at, the server's reason, and what to do. -->\n\t\t\t\t<div v-else-if=\"searchRefusal\"\n\t\t\t\t\tclass=\"cn-index-page__search-refusal\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-page-search-refusal\">\n\t\t\t\t\t<NcNoteCard type=\"warning\">\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-headline\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'This search could not be read from character {position}.', { position: searchRefusal.position }) }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-term\" data-testid=\"cn-index-page-search-refusal-term\">\n\t\t\t\t\t\t\t<span>{{ searchRefusal.before }}</span><mark v-if=\"searchRefusal.at\">{{ searchRefusal.at }}</mark><span>{{ searchRefusal.after }}</span>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-muted\">\n\t\t\t\t\t\t\t{{ searchRefusal.message }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t\t<p class=\"cn-index-page__search-refusal-muted\">\n\t\t\t\t\t\t\t{{ searchRefusalHintText }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</NcNoteCard>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Error state: the latest self-fetch failed (e.g. a search term the server rejects) -->\n\t\t\t\t<div v-else-if=\"selfFetchFailed || sourceFailed\"\n\t\t\t\t\tclass=\"cn-index-page__empty\"\n\t\t\t\t\trole=\"status\"\n\t\t\t\t\tdata-testid=\"cn-index-page-fetch-error\">\n\t\t\t\t\t<CnEmptyContent error\n\t\t\t\t\t\t:name=\"t('nextcloud-vue', 'An error occurred')\"\n\t\t\t\t\t\t:description=\"effectiveSearchValue\n\t\t\t\t\t\t\t? t('nextcloud-vue', 'Change the search or try again.')\n\t\t\t\t\t\t\t: t('nextcloud-vue', 'Try again later.')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<AlertCircleOutline :size=\"64\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</CnEmptyContent>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Empty state -->\n\t\t\t\t<div v-else-if=\"effectiveObjects.length === 0\" class=\"cn-index-page__empty\">\n\t\t\t\t\t<slot name=\"empty\">\n\t\t\t\t\t\t<CnEmptyContent :name=\"lensReasonText || resolvedEmptyText\"\n\t\t\t\t\t\t\t:data-lens-unavailable=\"lensReasonText ? 'true' : null\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<CnIcon v-if=\"resolvedIcon\" :name=\"resolvedIcon\" :size=\"64\" />\n\t\t\t\t\t\t\t\t<DatabaseSearch v-else :size=\"64\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</CnEmptyContent>\n\t\t\t\t\t</slot>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Table view -->\n\t\t\t\t<CnDataTable\n\t\t\t\t\tv-else-if=\"currentViewMode === 'table'\"\n\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t:filterChips=\"!isBoardLook\"\n\t\t\t\t\t:columns=\"renderedColumns\"\n\t\t\t\t\t:pinnedCount=\"pinnedColumnCount\"\n\t\t\t\t\t:rowIcon=\"rowIcon\"\n\t\t\t\t\t:rowIndicators=\"rowIndicators\"\n\t\t\t\t\t:rowIndicatorCap=\"rowIndicatorCap\"\n\t\t\t\t\t:rows=\"displayObjects\"\n\t\t\t\t\t:sortKey=\"effectiveSortKey\"\n\t\t\t\t\t:sortOrder=\"effectiveSortOrder\"\n\t\t\t\t\t:sortKeys=\"effectiveSortKeys\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:hideHeader=\"hideTableHeader\"\n\t\t\t\t\t:rowClickToView=\"rowClickOpens\"\n\t\t\t\t\t:rowClickRoute=\"rowLinkRoute\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:emptyText=\"emptyText\"\n\t\t\t\t\t:excludeColumns=\"excludeColumns\"\n\t\t\t\t\t:includeColumns=\"includeColumns\"\n\t\t\t\t\t:columnOverrides=\"columnOverrides\"\n\t\t\t\t\t:rowClass=\"compiledRowClass\"\n\t\t\t\t\t:rowTitle=\"rowTitle\"\n\t\t\t\t\t:showUnread=\"marksUnreadRows\"\n\t\t\t\t\t:filterable=\"tableHeaderFilters\"\n\t\t\t\t\t:filterSchema=\"headerFilterSchema\"\n\t\t\t\t\t:activeFilters=\"tableActiveFilters\"\n\t\t\t\t\t:filterRegister=\"typeof register === 'string' ? register : ''\"\n\t\t\t\t\t@columnFilter=\"onColumnFilterEvent\"\n\t\t\t\t\t@sort=\"onSortEvent\"\n\t\t\t\t\t@select=\"onSelect\"\n\t\t\t\t\t@rowClick=\"onRowClick\"\n\t\t\t\t\t@rowAuxClick=\"onRowAuxClick\"\n\t\t\t\t\t@rowContextMenu=\"onRowContextMenu\">\n\t\t\t\t\t<!-- Follow column (showFollowColumn, or the deprecated showFavouriteColumn) -->\n\t\t\t\t\t<template v-if=\"followColumnOn\" #column-__follow=\"{ row }\">\n\t\t\t\t\t\t<CnFollowToggle\n\t\t\t\t\t\t\tv-if=\"row && row['@self'] && typeof row['@self'].watching === 'boolean'\"\n\t\t\t\t\t\t\tcompact\n\t\t\t\t\t\t\t:register=\"typeof register === 'string' ? register : ''\"\n\t\t\t\t\t\t\t:schema=\"favouriteSchemaSlug\"\n\t\t\t\t\t\t\t:objectId=\"String(row['@self'].id || row.id || '')\"\n\t\t\t\t\t\t\t:watching=\"row['@self'].watching === true\" />\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Pass through column slots -->\n\t\t\t\t\t<template\n\t\t\t\t\t\tv-for=\"col in slotColumns\"\n\t\t\t\t\t\t#[`column-${col}`]=\"{ row, value }\">\n\t\t\t\t\t\t<slot :name=\"'column-' + col\" :row=\"row\" :value=\"value\" />\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Row actions -->\n\t\t\t\t\t<template v-if=\"hasRowActions\" #row-actions=\"{ row }\">\n\t\t\t\t\t\t<slot name=\"row-actions\" :row=\"row\">\n\t\t\t\t\t\t\t<CnRowActions\n\t\t\t\t\t\t\t\t:actions=\"rowMenuActionsFor(row)\"\n\t\t\t\t\t\t\t\t:row=\"row\"\n\t\t\t\t\t\t\t\t:rowLabel=\"rowTitleFor(row)\"\n\t\t\t\t\t\t\t\t@action=\"onRowAction\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<!-- Table-header filter + column menus (both opt-in): funnel and\n\t\t\t\t\t columns buttons above the row-actions column. The filter menu\n\t\t\t\t\t lists each enum column's values as toggleable facet filters;\n\t\t\t\t\t the column menu lists every governed column as a visibility\n\t\t\t\t\t checkbox — compact, in-table alternatives to the sidebar. -->\n\t\t\t\t\t<template\n\t\t\t\t\t\tv-if=\"(showHeaderFilterMenu) || (columnMenu && governedColumns.length)\"\n\t\t\t\t\t\t#actions-header>\n\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\tv-if=\"showHeaderFilterMenu\"\n\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Filter')\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<FilterOutline :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<template v-for=\"field in filterableFields\" :key=\"field.key\">\n\t\t\t\t\t\t\t\t<NcActionCaption :name=\"field.label\" />\n\t\t\t\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t\t\t\tv-for=\"val in field.values\"\n\t\t\t\t\t\t\t\t\t:key=\"`${field.key}-${val}`\"\n\t\t\t\t\t\t\t\t\t:modelValue=\"isFilterActive(field.key, val)\"\n\t\t\t\t\t\t\t\t\t@update:modelValue=\"toggleFilter(field.key, val)\">\n\t\t\t\t\t\t\t\t\t{{ val }}\n\t\t\t\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\tv-if=\"columnMenu && governedColumns.length\"\n\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t:aria-label=\"t('nextcloud-vue', 'Columns')\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<ViewColumnOutline :size=\"20\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t<NcActionCaption :name=\"t('nextcloud-vue', 'Columns')\" />\n\t\t\t\t\t\t\t<NcActionCheckbox\n\t\t\t\t\t\t\t\tv-for=\"col in governedColumns\"\n\t\t\t\t\t\t\t\t:key=\"`col-${col.key}`\"\n\t\t\t\t\t\t\t\t:modelValue=\"isColumnVisible(col.key)\"\n\t\t\t\t\t\t\t\t@update:modelValue=\"toggleColumn(col.key)\">\n\t\t\t\t\t\t\t\t{{ cnTranslate(col.label || col.key) }}\n\t\t\t\t\t\t\t</NcActionCheckbox>\n\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t</template>\n\t\t\t\t</CnDataTable>\n\n\t\t\t\t<!-- Map view — plots the CURRENT filtered rows (displayObjects) as\n\t\t\t\t inline markers; no separate fetch path, so it reuses the same\n\t\t\t\t filter / sidebar / quick-filter machinery as table and cards.\n\t\t\t\t A marker click routes back through onRowClick for identical\n\t\t\t\t detail-page navigation. -->\n\t\t\t\t<!-- Map with a numbered list beside it (`mapConfig.list`,\n\t\t\t\t DqZakenKaart): one framed card, the list numbered as the pins\n\t\t\t\t are, the row under the pointer marked on both sides, and the\n\t\t\t\t rows without a place counted under the list with a way to\n\t\t\t\t the table. -->\n\t\t\t\t<div v-else-if=\"currentViewMode === 'map' && mapListEnabled\"\n\t\t\t\t\tclass=\"cn-index-page__map-card\"\n\t\t\t\t\tdata-testid=\"cn-index-map-card\">\n\t\t\t\t\t<CnMapWidget\n\t\t\t\t\t\tclass=\"cn-index-page__map\"\n\t\t\t\t\t\t:center=\"mapCenter\"\n\t\t\t\t\t\t:zoom=\"mapZoom\"\n\t\t\t\t\t\t:layers=\"mapLayers\"\n\t\t\t\t\t\t:basemaps=\"mapBasemaps\"\n\t\t\t\t\t\t:markers=\"mapMarkers\"\n\t\t\t\t\t\t:clustering=\"mapClustering\"\n\t\t\t\t\t\t:autoFit=\"true\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\t@markerClick=\"onMarkerClick\" />\n\t\t\t\t\t<div class=\"cn-index-page__map-side\">\n\t\t\t\t\t\t<ol class=\"cn-index-page__map-list\" :aria-label=\"mapListLabel\" data-testid=\"cn-index-map-list\">\n\t\t\t\t\t\t\t<li v-for=\"item in mapList.items\"\n\t\t\t\t\t\t\t\t:key=\"item.key\"\n\t\t\t\t\t\t\t\tclass=\"cn-index-page__map-item\"\n\t\t\t\t\t\t\t\t:class=\"{ 'cn-index-page__map-item--active': activeMapKey === item.key }\"\n\t\t\t\t\t\t\t\tdata-testid=\"cn-index-map-item\"\n\t\t\t\t\t\t\t\t@mouseenter=\"activeMapKey = item.key\"\n\t\t\t\t\t\t\t\t@mouseleave=\"activeMapKey = ''\"\n\t\t\t\t\t\t\t\t@focusin=\"activeMapKey = item.key\">\n\t\t\t\t\t\t\t\t<span class=\"cn-index-page__map-number\" aria-hidden=\"true\">{{ item.n }}</span>\n\t\t\t\t\t\t\t\t<div class=\"cn-index-page__map-text\">\n\t\t\t\t\t\t\t\t\t<button type=\"button\" class=\"cn-index-page__map-title\" @click=\"onRowClick(item.row)\">\n\t\t\t\t\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t\t<span v-if=\"item.sub\" class=\"cn-index-page__map-sub\">{{ item.sub }}</span>\n\t\t\t\t\t\t\t\t\t<span v-if=\"item.pills.length > 0 || item.due\" class=\"cn-index-page__map-pills\">\n\t\t\t\t\t\t\t\t\t\t<CnStatusBadge v-for=\"(pill, index) in item.pills\"\n\t\t\t\t\t\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t\t\t\t\t\t:label=\"pill.label\"\n\t\t\t\t\t\t\t\t\t\t\t:variant=\"pill.variant\">\n\t\t\t\t\t\t\t\t\t\t\t<template v-if=\"pill.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t\t<CnIcon :name=\"pill.icon\" :size=\"14\" />\n\t\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t</CnStatusBadge>\n\t\t\t\t\t\t\t\t\t\t<span v-if=\"item.due\" class=\"cn-index-page__map-due\"><ClockOutline v-if=\"isBoardLook\" :size=\"14\" aria-hidden=\"true\" />{{ item.due }}</span>\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</li>\n\t\t\t\t\t\t</ol>\n\t\t\t\t\t\t<div v-if=\"mapList.missing.length > 0\" class=\"cn-index-page__map-missing\" data-testid=\"cn-index-map-missing\">\n\t\t\t\t\t\t\t<strong>{{ mapMissingTitle }}</strong>\n\t\t\t\t\t\t\t<NcButton variant=\"tertiary-no-background\" data-testid=\"cn-index-map-missing-table\" @click=\"onViewModeChange('table')\">\n\t\t\t\t\t\t\t\t{{ mapMissingLink }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<CnMapWidget\n\t\t\t\t\tv-else-if=\"currentViewMode === 'map'\"\n\t\t\t\t\tclass=\"cn-index-page__map\"\n\t\t\t\t\t:zoom=\"mapZoom\"\n\t\t\t\t\t:center=\"mapCenter\"\n\t\t\t\t\t:layers=\"mapLayers\"\n\t\t\t\t\t:basemaps=\"mapBasemaps\"\n\t\t\t\t\t:markers=\"mapMarkers\"\n\t\t\t\t\t:clustering=\"mapClustering\"\n\t\t\t\t\t:autoFit=\"true\"\n\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t@markerClick=\"onMarkerClick\" />\n\n\t\t\t\t<!--\n\t\t\t\t\tBoard view. The columns are the schema's stages and a move\n\t\t\t\t\tgoes through the host's transition; CnBoardView never\n\t\t\t\t\twrites the status field, so with no runTransition it is\n\t\t\t\t\tread-only rather than broken.\n\t\t\t\t-->\n\t\t\t\t<CnBoardView\n\t\t\t\t\tv-else-if=\"currentViewMode === 'board'\"\n\t\t\t\t\t:rows=\"displayObjects\"\n\t\t\t\t\t:statusFieldSchema=\"boardFieldSchema\"\n\t\t\t\t\t:statusField=\"boardColumnField\"\n\t\t\t\t\t:columnKeyOf=\"boardColumnKeyOf\"\n\t\t\t\t\t:wrapColumns=\"board.wrap === true\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:allowedMoves=\"boardAllowedMoves\"\n\t\t\t\t\t:cardFields=\"board.cardFields || []\"\n\t\t\t\t\t:cardCells=\"board.cardCells || null\"\n\t\t\t\t\t:cardActions=\"boardCardActions\"\n\t\t\t\t\t:swimlaneField=\"board.swimlaneField || ''\"\n\t\t\t\t\t:dueRule=\"board.dueRule || null\"\n\t\t\t\t\t:cardRoles=\"board.card || null\"\n\t\t\t\t\t:pillLooks=\"refLooks\"\n\t\t\t\t\t:colorField=\"board.colorField || ''\"\n\t\t\t\t\t:sumField=\"board.sumField || ''\"\n\t\t\t\t\t:sumFormat=\"boardSumFormat\"\n\t\t\t\t\t:columnLimit=\"board.columnLimit || 0\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:runTransition=\"boardRunTransition\"\n\t\t\t\t\t:paged=\"isPaged\"\n\t\t\t\t\t@select=\"onSelect\"\n\t\t\t\t\t@loadMore=\"onBoardLoadMore\"\n\t\t\t\t\t@cardClick=\"onRowClick\"\n\t\t\t\t\t@cardAuxClick=\"onRowAuxClick\"\n\t\t\t\t\t@moved=\"onBoardMoved\"\n\t\t\t\t\t@cardAction=\"onRowAction\" />\n\n\t\t\t\t<!--\n\t\t\t\t\tDate axis. Reads only: nothing here reschedules, because a\n\t\t\t\t\tview that moved a bar on drag would be changing statutory\n\t\t\t\t\tdates from a picture.\n\t\t\t\t-->\n\t\t\t\t<CnDateAxisView\n\t\t\t\t\tv-else-if=\"currentViewMode === 'dateAxis'\"\n\t\t\t\t\t:rows=\"displayObjects\"\n\t\t\t\t\t:startField=\"dateAxis.startField || ''\"\n\t\t\t\t\t:endField=\"dateAxis.endField || ''\"\n\t\t\t\t\t:laneField=\"dateAxis.laneField || ''\"\n\t\t\t\t\t:labelField=\"dateAxis.labelField || ''\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t@rowClick=\"onRowClick\"\n\t\t\t\t\t@rowAuxClick=\"onRowAuxClick\" />\n\n\t\t\t\t<!--\n\t\t\t\t\tCalendar. The current filtered rows on a month by their date\n\t\t\t\t\tfield. The month is added to the list query (see\n\t\t\t\t\tcalendarRangeFilter), so only that month is fetched. Reads\n\t\t\t\t\tonly: nothing here reschedules a record.\n\t\t\t\t-->\n\t\t\t\t<CnObjectCalendar\n\t\t\t\t\tv-else-if=\"currentViewMode === 'calendar'\"\n\t\t\t\t\t:objects=\"displayObjects\"\n\t\t\t\t\t:dateField=\"calendar.dateField || ''\"\n\t\t\t\t\t:endDateField=\"calendar.endDateField || null\"\n\t\t\t\t\t:titleField=\"calendar.titleField || null\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:loading=\"effectiveLoading\"\n\t\t\t\t\t@rangeChange=\"onCalendarRange\"\n\t\t\t\t\t@objectClick=\"onRowClick\"\n\t\t\t\t\t@daySelect=\"onCalendarDaySelect\" />\n\n\t\t\t\t<!-- List view -->\n\t\t\t\t<CnObjectList\n\t\t\t\t\tv-else-if=\"currentViewMode === 'list'\"\n\t\t\t\t\t:objects=\"displayObjects\"\n\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t:config=\"renderedListConfig\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:emptyText=\"emptyText\"\n\t\t\t\t\t@click=\"onRowClick\"\n\t\t\t\t\t@auxClick=\"onRowAuxClick\"\n\t\t\t\t\t@select=\"onSelect\">\n\t\t\t\t\t<!--\n\t\t\t\t\t\tList-item slot resolution priority (highest first):\n\t\t\t\t\t\t1. Parent-provided `#list-item` scoped slot — App.vue overrides win.\n\t\t\t\t\t\t2. `listComponent` prop (or manifest `pages[].config.listComponent`)\n\t\t\t\t\t\t resolved against the customComponents registry.\n\t\t\t\t\t\t3. CnObjectList's default CnObjectRow.\n\t\t\t\t\t-->\n\t\t\t\t\t<template v-if=\"$slots['list-item']\" #list-item=\"{ object, selected }\">\n\t\t\t\t\t\t<slot name=\"list-item\" :object=\"object\" :selected=\"selected\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if=\"resolvedListComponent\" #list-item=\"{ object, selected }\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"resolvedListComponent\"\n\t\t\t\t\t\t\t:item=\"object\"\n\t\t\t\t\t\t\t:object=\"object\"\n\t\t\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t\t\t:register=\"register\"\n\t\t\t\t\t\t\t:selected=\"selected\"\n\t\t\t\t\t\t\t@click=\"(...args) => onRowClick(object, args.find(isDomEvent))\"\n\t\t\t\t\t\t\t@mousedown=\"onCustomItemMouseDown\"\n\t\t\t\t\t\t\t@auxclick=\"onCustomItemAuxClick(object, $event)\"\n\t\t\t\t\t\t\t@select=\"onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<!-- Per-part row slots (list view only): forwarded to CnObjectRow\n\t\t\t\t\t so an app can override just the leading icon or the badge\n\t\t\t\t\t while keeping the config-driven title/subtitle. -->\n\t\t\t\t\t<template v-if=\"$slots['row-icon']\" #row-icon=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-icon\" :object=\"object\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"$slots['row-badges']\" #row-badges=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-badges\" :object=\"object\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"hasRowActions || $slots['row-actions']\" #row-actions=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-actions\" :row=\"object\">\n\t\t\t\t\t\t\t<CnRowActions\n\t\t\t\t\t\t\t\t:actions=\"rowMenuActionsFor(object)\"\n\t\t\t\t\t\t\t\t:row=\"object\"\n\t\t\t\t\t\t\t\t:rowLabel=\"rowTitleFor(object)\"\n\t\t\t\t\t\t\t\t@action=\"onRowAction\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</template>\n\t\t\t\t</CnObjectList>\n\n\t\t\t\t<!-- Card view -->\n\t\t\t\t<CnCardGrid\n\t\t\t\t\tv-else\n\t\t\t\t\t:objects=\"displayObjects\"\n\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t:selectable=\"selectable\"\n\t\t\t\t\t:clickToView=\"rowClickOpens\"\n\t\t\t\t\t:cardFields=\"resolvedCardFields\"\n\t\t\t\t\t:cardLayout=\"cardLayout\"\n\t\t\t\t\t:pillLooks=\"refLooks\"\n\t\t\t\t\t:cardFieldColumns=\"cardFieldColumns\"\n\t\t\t\t\t:accentOf=\"cardAccent\"\n\t\t\t\t\t:selectedIds=\"internalSelectedIds\"\n\t\t\t\t\t:rowKey=\"rowKey\"\n\t\t\t\t\t:emptyText=\"emptyText\"\n\t\t\t\t\t@click=\"onRowClick\"\n\t\t\t\t\t@auxClick=\"onRowAuxClick\"\n\t\t\t\t\t@select=\"onSelect\">\n\t\t\t\t\t<!--\n\t\t\t\t\t\tCard slot resolution priority (highest first):\n\t\t\t\t\t\t1. Parent-provided `#card` scoped slot — App.vue overrides win.\n\t\t\t\t\t\t2. `cardComponent` prop (or manifest `pages[].config.cardComponent`)\n\t\t\t\t\t\t resolved against the customComponents registry.\n\t\t\t\t\t\t3. CnCardGrid's default CnObjectCard.\n\t\t\t\t\t-->\n\t\t\t\t\t<template v-if=\"$slots.card\" #card=\"{ object, selected }\">\n\t\t\t\t\t\t<slot name=\"card\" :object=\"object\" :selected=\"selected\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-else-if=\"resolvedCardComponent\" #card=\"{ object, selected }\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"resolvedCardComponent\"\n\t\t\t\t\t\t\t:item=\"object\"\n\t\t\t\t\t\t\t:object=\"object\"\n\t\t\t\t\t\t\t:schema=\"effectiveSchema\"\n\t\t\t\t\t\t\t:register=\"register\"\n\t\t\t\t\t\t\t:selected=\"selected\"\n\t\t\t\t\t\t\t@click=\"(...args) => onRowClick(object, args.find(isDomEvent))\"\n\t\t\t\t\t\t\t@mousedown=\"onCustomItemMouseDown\"\n\t\t\t\t\t\t\t@auxclick=\"onCustomItemAuxClick(object, $event)\"\n\t\t\t\t\t\t\t@select=\"onSelect(toggleIdInArray(internalSelectedIds, object[rowKey]))\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t<template v-if=\"hasRowActions\" #card-actions=\"{ object }\">\n\t\t\t\t\t\t<slot name=\"row-actions\" :row=\"object\">\n\t\t\t\t\t\t\t<CnRowActions\n\t\t\t\t\t\t\t\t:actions=\"rowMenuActionsFor(object)\"\n\t\t\t\t\t\t\t\t:row=\"object\"\n\t\t\t\t\t\t\t\t:rowLabel=\"rowTitleFor(object)\"\n\t\t\t\t\t\t\t\t:triggerLabel=\"isBoardLook ? t('nextcloud-vue', 'More actions for {name}', { name: rowTitleFor(object) }) : ''\"\n\t\t\t\t\t\t\t\t@action=\"onRowAction\" />\n\t\t\t\t\t\t</slot>\n\t\t\t\t\t</template>\n\t\t\t\t</CnCardGrid>\n\n\t\t\t\t<!-- Right-click context menu (positioned at cursor via CSS). Same per-row list as the row actions menu, so the two never drift. -->\n\t\t\t\t<CnContextMenu\n\t\t\t\t\tv-model:open=\"contextMenuOpen\"\n\t\t\t\t\t:actions=\"rowMenuActionsFor(contextMenuShownRow)\"\n\t\t\t\t\t:targetItem=\"contextMenuShownRow\"\n\t\t\t\t\t@action=\"onRowAction\"\n\t\t\t\t\t@close=\"closeContextMenu\" />\n\n\t\t\t\t<p\n\t\t\t\t\tv-if=\"searchInFiles && contentSearch\"\n\t\t\t\t\tclass=\"cn-index-page__content-search-note\"\n\t\t\t\t\tdata-testid=\"cn-index-content-search-note\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'File matches are limited to the best 50.') }}\n\t\t\t\t</p>\n\n\t\t\t\t<!-- The map's count line (`mapConfig.count`) and the note when a map\n\t\t\t\t that plots every row reached its limit. -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"mapCountLine || mapCapNote\"\n\t\t\t\t\tclass=\"cn-index-page__map-count\"\n\t\t\t\t\tdata-testid=\"cn-index-map-count\">\n\t\t\t\t\t<span v-if=\"mapCountLine\" data-testid=\"cn-index-map-count-line\">{{ mapCountLine }}</span>\n\t\t\t\t\t<span v-if=\"mapCapNote\" class=\"cn-index-page__map-cap\" data-testid=\"cn-index-map-cap\">{{ mapCapNote }}</span>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- The board view's footer: it holds every row it loaded, so it\n\t\t\t\t counts them and offers the next batch instead of pages. -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"boardLoadsAll && boardLoadCounts.total > 0\"\n\t\t\t\t\tclass=\"cn-index-page__board-load\"\n\t\t\t\t\tdata-testid=\"cn-index-board-load\">\n\t\t\t\t\t<span class=\"cn-index-page__board-load-count\" data-testid=\"cn-index-board-load-count\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Showing {count} of {total}', { count: boardLoadCounts.shown, total: boardLoadCounts.total }) }}\n\t\t\t\t\t</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"isPaged\"\n\t\t\t\t\t\t:disabled=\"effectiveLoading\"\n\t\t\t\t\t\tdata-testid=\"cn-index-board-load-more\"\n\t\t\t\t\t\t@click=\"onBoardLoadMore\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Load more') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- Pagination -->\n\t\t\t\t<CnPagination\n\t\t\t\t\tv-else-if=\"effectivePagination && (effectivePagination.pages > 1 || (isBoardLook && effectivePagination.total > 0))\"\n\t\t\t\t\t:variant=\"isBoardLook ? 'board' : ''\"\n\t\t\t\t\t:footerNote=\"effectiveFooterNote\"\n\t\t\t\t\t:currentPage=\"effectivePagination.page || 1\"\n\t\t\t\t\t:totalPages=\"effectivePagination.pages || 1\"\n\t\t\t\t\t:totalItems=\"effectivePagination.total || 0\"\n\t\t\t\t\t:currentPageSize=\"effectivePagination.limit || 20\"\n\t\t\t\t\tclass=\"cn-index-page__pagination\"\n\t\t\t\t\t@pageChanged=\"onPageEvent\"\n\t\t\t\t\t@pageSizeChanged=\"onPageSizeEvent\" />\n\n\t\t\t\t<!-- A notice under the list (`notice`): DqPrivacy's \"Een\n\t\t\t\t AVG-verzoek is een zaak met ...\" band. -->\n\t\t\t\t<NcNoteCard\n\t\t\t\t\tv-if=\"notice && notice.text && !noticeOnPage\"\n\t\t\t\t\tclass=\"cn-index-page__notice\"\n\t\t\t\t\t:type=\"noticeType\"\n\t\t\t\t\tdata-testid=\"cn-index-page-notice\">\n\t\t\t\t\t{{ cnTranslate(notice.text) }}\n\t\t\t\t</NcNoteCard>\n\n\t\t\t\t<!-- Cards after the list (`afterList`), stacked in order (PqSocial). -->\n\t\t\t\t<CnIndexPageWidgets\n\t\t\t\t\tv-if=\"presentedAfterList.length > 0\"\n\t\t\t\t\tclass=\"cn-index-page__after-list\"\n\t\t\t\t\tvariant=\"after-list\"\n\t\t\t\t\t:widgets=\"presentedAfterList\" />\n\t\t\t</div>\n\n\t\t\t<!-- The open record, beside the list on a wide screen and instead\n\t\t\t of it on a narrow one. Same slot either way, and the host\n\t\t\t mounts the same detail component in it that the full route\n\t\t\t mounts: two detail implementations drift within a month. -->\n\t\t\t<div\n\t\t\t\tv-if=\"splitLayout !== 'list'\"\n\t\t\t\tclass=\"cn-index-page__split-pane\"\n\t\t\t\t:class=\"{ 'cn-index-page__split-pane--full': splitLayout === 'detail' }\"\n\t\t\t\t:style=\"splitLayout === 'split' ? { width: splitPaneWidth } : null\"\n\t\t\t\tdata-testid=\"cn-index-page-split-pane\"\n\t\t\t\t:data-split-layout=\"splitLayout\">\n\t\t\t\t<!-- An <a>, not a button: closing the pane pushes the list's\n\t\t\t\t route, so the browser supplies middle-click and open-in-new-tab\n\t\t\t\t while `.prevent` keeps the plain click in-app. -->\n\t\t\t\t<a\n\t\t\t\t\tv-if=\"splitCloseVisible\"\n\t\t\t\t\tclass=\"cn-index-page__split-close\"\n\t\t\t\t\t:href=\"splitCloseHref\"\n\t\t\t\t\t:title=\"splitCloseTitle\"\n\t\t\t\t\tdata-testid=\"cn-index-page-split-close\"\n\t\t\t\t\t@click.prevent=\"closeSplitPane\">\n\t\t\t\t\t<Close :size=\"16\" />\n\t\t\t\t\t<span>{{ splitCloseTitle }}</span>\n\t\t\t\t</a>\n\t\t\t\t<!-- @slot split-pane The open record, rendered beside the list. Mount the SAME detail component the full route mounts. -->\n\t\t\t\t<!-- @binding {string} id The record the address names. -->\n\t\t\t\t<!-- @binding {string} layout Either `split` (beside the list) or `detail` (the full page, below the breakpoint). -->\n\t\t\t\t<!-- @binding {Function} close Closes the pane and returns to the list, at the list's own address. -->\n\t\t\t\t<!-- @binding {Function} saved Call with the saved record to replace its row in the list without refetching the page. -->\n\t\t\t\t<slot\n\t\t\t\t\t:id=\"splitId\"\n\t\t\t\t\tname=\"split-pane\"\n\t\t\t\t\t:layout=\"splitLayout\"\n\t\t\t\t\t:close=\"closeSplitPane\"\n\t\t\t\t\t:saved=\"onSplitPaneSaved\" />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- The notice under the list card, on the page ground\n\t\t (`notice.placement: 'page'`, DqContracten). -->\n\t\t<NcNoteCard\n\t\t\tv-if=\"notice && notice.text && noticeOnPage\"\n\t\t\tclass=\"cn-index-page__notice cn-index-page__notice--page\"\n\t\t\t:type=\"noticeType\"\n\t\t\tdata-testid=\"cn-index-page-notice\">\n\t\t\t{{ cnTranslate(notice.text) }}\n\t\t</NcNoteCard>\n\n\t\t<!-- Manifest-driven sidebar — auto-mounted when sidebar.enabled\n\t\t AND sidebar.show !== false.\n\n\t\t When CnAppRoot is the host, the sidebar config is\n\t\t PUBLISHED to the `cnIndexSidebarConfig` provide (see\n\t\t mounted/beforeDestroy), and CnAppRoot mounts the\n\t\t CnIndexSidebar at NcContent level — the only place where\n\t\t Nextcloud's NcAppSidebar slides correctly from the right.\n\n\t\t When no CnAppRoot ancestor exists (legacy apps mounting\n\t\t CnIndexPage standalone), the inject default is the no-op\n\t\t `{ value: null }` and we fall back to inline rendering\n\t\t here so the legacy contract still works. -->\n\t\t<CnIndexSidebar\n\t\t\tv-if=\"shouldRenderInlineSidebar\"\n\t\t\t:open=\"sidebarOpen\"\n\t\t\t:schema=\"effectiveSchema\"\n\t\t\t:title=\"shownTitle\"\n\t\t\t:subtitle=\"sidebarSubtitle\"\n\t\t\t:icon=\"resolvedIcon\"\n\t\t\t:searchValue=\"effectiveSearchValue\"\n\t\t\t:visibleColumns=\"effectiveVisibleColumns\"\n\t\t\t:activeFilters=\"effectiveActiveFilters\"\n\t\t\t:columnGroups=\"resolvedSidebar.columnGroups || []\"\n\t\t\t:filterFields=\"resolvedSidebar.fields || null\"\n\t\t\t:facetData=\"effectiveFacetData\"\n\t\t\t:showMetadata=\"resolvedSidebar.showMetadata !== false\"\n\t\t\t:personalColumns=\"personalColumns\"\n\t\t\t:pinnedCount=\"pinnedColumnCount\"\n\t\t\t:sortOptions=\"sidebarSortOptions\"\n\t\t\t:currentSort=\"currentSortKeys\"\n\t\t\t:currentSortValue=\"sortSource.value\"\n\t\t\t:savedViews=\"savedViewsForSidebar\"\n\t\t\t:activeTab=\"sidebarActiveTab\"\n\t\t\tv-bind=\"sidebarSearchProps\"\n\t\t\t@update:open=\"sidebarOpen = $event\"\n\t\t\t@tabChange=\"sidebarActiveTab = $event\"\n\t\t\t@savedView=\"onSavedViewAction\"\n\t\t\t@search=\"onSearchEvent\"\n\t\t\t@columnsChange=\"onColumnsEvent\"\n\t\t\t@columnsReorder=\"onColumnsReorder\"\n\t\t\t@pinChange=\"onPinChange\"\n\t\t\t@columnsReset=\"onColumnsReset\"\n\t\t\t@filterChange=\"onFilterEvent\"\n\t\t\t@clearFilters=\"onClearFilters\"\n\t\t\t@sortChange=\"onSidebarSortChange\" />\n\t</div>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getCanonicalLocale, translatePlural as n, translate as t } from '@nextcloud/l10n'\nimport { NcActionButton, NcActionCaption, NcActionCheckbox, NcActionLink, NcActions, NcActionSeparator, NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard } from '@nextcloud/vue'\nimport { getCurrentInstance, inject, markRaw, ref } from 'vue'\nimport AlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport ClockOutline from 'vue-material-design-icons/ClockOutline.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\nimport Cog from 'vue-material-design-icons/Cog.vue'\nimport DatabaseSearch from 'vue-material-design-icons/DatabaseSearch.vue'\nimport DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'\nimport Export from 'vue-material-design-icons/Export.vue'\nimport Eye from 'vue-material-design-icons/Eye.vue'\nimport FilterOutline from 'vue-material-design-icons/FilterOutline.vue'\nimport ImportIcon from 'vue-material-design-icons/Import.vue'\nimport TrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport Tune from 'vue-material-design-icons/Tune.vue'\nimport ViewColumnOutline from 'vue-material-design-icons/ViewColumnOutline.vue'\nimport CnConfirmDialog from '../../dialogs/CnConfirmDialog.vue'\nimport CnQuickEditDialog from '../../dialogs/CnQuickEditDialog.vue'\nimport CnBuildiqEditButton from '../CnBuildiqEditButton/CnBuildiqEditButton.vue'\nimport CnEmptyContent from '../CnEmptyContent/CnEmptyContent.vue'\nimport CnFollowToggle from '../CnFollowToggle/CnFollowToggle.vue'\nimport CnRelatedFieldFilters from '../CnRelatedFieldFilters/CnRelatedFieldFilters.vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport CnIndexPageWidgets from './CnIndexPageWidgets.vue'\nimport { useContextMenu } from '../../composables/index.js'\nimport { useLook } from '../../composables/useLook.js'\nimport { copyKindsOf } from '../../composables/useObjectCopy.js'\nimport { createRefLabelResolver } from '../../composables/useRefLabels.js'\nimport { useSavedViewsApi } from '../../composables/useSavedViewsApi.js'\nimport { METADATA_COLUMNS } from '../../constants/metadata.js'\nimport { useObjectStore } from '../../store/useObjectStore.js'\nimport { followItemActionLink, headerActionAsLink, resolveItemActionLink, routeHref } from '../../utils/actionLink.js'\nimport { buildOnSuccessRoute, dispatchAction as dispatchSharedAction, isExternalActionTarget, resolveRegisteredHandler } from '../../utils/actionsDispatcher.js'\nimport {\n\tbuildReferenceStages,\n\tbuildValueStages,\n\tcolumnFieldsOf,\n\tcolumnKeyOfRow,\n\tdeclaredStatesOf,\n\tfetchReferenceObjects,\n\tflattenItemRefs,\n\tfullTargetOf,\n\treferenceTargetOf,\n\trefIdOf,\n\tresolveDropValue,\n} from '../../utils/boardReferenceColumns.js'\nimport { cnFetchJson } from '../../utils/cnFetch.js'\nimport { isColumnSortable } from '../../utils/columnFilters.js'\nimport { countLine } from '../../utils/countLine.js'\nimport { reportBindingProblems } from '../../utils/diagnostics.js'\nimport { fetchGroupedCounts } from '../../utils/fetchAggregate.js'\nimport { fetchFilterCounts, fetchListTotal } from '../../utils/fetchFilterCounts.js'\nimport { listText, rangeChipText, rangeEnds, relativeRangeText } from '../../utils/filterRangeLabel.js'\nimport { unwrapAppConfig } from '../../utils/formatMetric.js'\nimport { groupDisplayName, loadGroupDisplayName } from '../../utils/groupAutocomplete.js'\nimport { HEADING_LEVEL } from '../../utils/headingLevel.js'\nimport { buildExportUrl } from '../../utils/indexExportHelpers.js'\nimport { labelsByField } from '../../utils/labelsByField.js'\nimport { lensUnavailableText } from '../../utils/lensAvailability.js'\nimport { isModifiedClick, openRowTarget } from '../../utils/linkNavigation.js'\nimport { resolveClaimedTeams, resolveClaimTokens, splitViewsIntoTabs, viewAsTab, viewIdOf } from '../../utils/listLenses.js'\nimport { LIST_SHORTCUTS, listPaletteCommands, shortcutFor } from '../../utils/listShortcuts.js'\nimport { mapListItems } from '../../utils/mapList.js'\nimport { markerColorOf, normalizeMarkerColor, resolveCssColor } from '../../utils/mapMarkerColor.js'\nimport { multiKeySort } from '../../utils/multiKeySort.js'\nimport { fillMyTeamToken, loadMyTeam, peekMyTeam, peekMyTeamName } from '../../utils/myTeam.js'\nimport { fetchGroups } from '../../utils/nextcloudDirectory.js'\nimport { OBJECTS_CHANGED_EVENT } from '../../utils/objectSignals.js'\nimport { objectUrlOf, patchObject } from '../../utils/objectWrite.js'\nimport { withPersonalLenses } from '../../utils/personalLenses.js'\nimport { getDotted } from '../../utils/propertySourceFill.js'\nimport { dropOptionalUnresolved, MY_TEAM_TOKEN, resolveDeepTokens, resolveFilterTokens, resolveFilterValue } from '../../utils/resolveFilterTokens.js'\nimport { resolveRowActions } from '../../utils/resolveRowActions.js'\nimport { resolveFilterMap } from '../../utils/routeFilters.js'\nimport { availableRowActions, DEFAULT_ROW_ACTION_FIELD, refusalReasonFor, undeclaredRowActions, withoutViewWhenRowOpensDetail } from '../../utils/rowActionAvailability.js'\nimport { isRowActionVisible, rowActionPayload } from '../../utils/rowActionItem.js'\nimport { isNewTabClick, isNewTabHandled, isRowMiddleClick, markNewTabHandled, preventMiddleClickAutoscroll } from '../../utils/rowAuxClick.js'\nimport { compileRowClass } from '../../utils/rowClassRules.js'\nimport { DEFAULT_ROW_INDICATOR_CAP } from '../../utils/rowIndicators.js'\nimport { buildRouteQueryFromViewState, buildViewCreatePayload, defaultFilterViews, extractViewState, extractViewStateFromRouteQuery, normalizeSharedWith, pageOffersSavedViews, savedViewScope, schemaSlug, viewAccess, viewMatchesScope } from '../../utils/savedViewHelpers.js'\nimport { savedViewIcon } from '../../utils/savedViewMenu.js'\nimport { savedViewBadge, savedViewOverrides } from '../../utils/savedViewOverrides.js'\nimport { viewCriteriaSummary } from '../../utils/savedViewSummary.js'\nimport { columnsFromSchema, fieldsFromSchema, isGroupProp } from '../../utils/schema.js'\nimport { resolveScopeLayout, resolveScopePresentation } from '../../utils/scopeListLayout.js'\nimport { readSearchRefusal } from '../../utils/searchRefusal.js'\nimport { orderToSortKeys } from '../../utils/sortOrder.js'\nimport { annotateRows, filterSourceRows, pageSourceRows, rowsFromSourceBody } from '../../utils/sortSourceRows.js'\nimport { userDisplayName } from '../../utils/userDisplayName.js'\nimport { dispatchObjectCreated } from '../../utils/walkthroughSignals.js'\nimport { CnActionButtons } from '../CnActionButtons/index.js'\nimport { CnActionsBar } from '../CnActionsBar/index.js'\nimport { CnAdvancedFormDialog } from '../CnAdvancedFormDialog/index.js'\nimport { CnBoardView } from '../CnBoardView/index.js'\nimport { CnCardGrid } from '../CnCardGrid/index.js'\nimport { CnContextMenu } from '../CnContextMenu/index.js'\nimport { CnCopyDialog } from '../CnCopyDialog/index.js'\nimport { CnDataTable } from '../CnDataTable/index.js'\nimport { CnDateAxisView } from '../CnDateAxisView/index.js'\nimport { CnDeleteDialog } from '../CnDeleteDialog/index.js'\nimport { CnFolderSidebar } from '../CnFolderSidebar/index.js'\nimport { CnFormDialog } from '../CnFormDialog/index.js'\nimport { CnIcon } from '../CnIcon/index.js'\nimport { CnIndexSidebar } from '../CnIndexSidebar/index.js'\nimport { CnMapWidget } from '../CnMapWidget/index.js'\nimport { CnMassCopyDialog } from '../CnMassCopyDialog/index.js'\nimport { CnMassDeleteDialog } from '../CnMassDeleteDialog/index.js'\nimport { CnMassExportDialog } from '../CnMassExportDialog/index.js'\nimport { CnMassImportDialog } from '../CnMassImportDialog/index.js'\nimport { CnObjectCalendar } from '../CnObjectCalendar/index.js'\nimport { CnObjectList } from '../CnObjectList/index.js'\nimport { CnPageHeader } from '../CnPageHeader/index.js'\nimport { CnPagination } from '../CnPagination/index.js'\nimport { CnQuickFilterBar } from '../CnQuickFilterBar/index.js'\nimport { CnRowActions } from '../CnRowActions/index.js'\nimport { CnSavedViewEditDialog } from '../CnSavedViewEditDialog/index.js'\nimport { CnSavedViewPresentationDialog } from '../CnSavedViewPresentationDialog/index.js'\nimport { CnSavedViewsControl } from '../CnSavedViewsControl/index.js'\nimport { CnSavedViewShareDialog } from '../CnSavedViewShareDialog/index.js'\nimport { CnSaveViewDialog } from '../CnSaveViewDialog/index.js'\nimport { applyAiContext } from './aiContext.js'\nimport { buildDefaultActions } from './defaultActions.js'\nimport { dispatchAction } from './manifestActionDispatch.js'\nimport { applyManualOrder, dropInOrder, manualOrderKey, moveInOrder, visibleIdsOf } from './manualOrder.js'\nimport { orderColumns, personalColumnsKey, reconcilePersonalColumns } from './personalColumns.js'\nimport { rowsToCsv } from './rowsToCsv.js'\nimport { createSelfModeActions, resolveRowTarget } from './selfModeActions.js'\nimport { applyRowPatches, normalisePaneWidth, rowIdOf, splitLayoutFor } from './splitView.js'\nimport { declaredSearchFields, useNamedSource } from './useNamedSource.js'\nimport { BOARD_PAGE_SIZE, mapPlotAllLimitOf, resolveInitialQuickFilterIndex, useSelfFetchList } from './useSelfFetchList.js'\n\n/** Rows fetched for one month in calendar mode. */\nconst CALENDAR_PAGE_SIZE = 200\n\n/**\n * The separator a date-range filter uses in the URL: `2026-09-21..2026-09-25`.\n *\n * One query parameter per FIELD, not per bound, so the link reads as the\n * question the person asked and an open-ended window still round-trips\n * (`..2026-09-25` is \"due before Friday\").\n *\n * @type {string}\n */\nconst RANGE_SEPARATOR = '..'\n\n/**\n * Whether a filter map names the `@myTeam` token anywhere.\n *\n * @param {object} filters A view's filters.\n * @return {boolean}\n */\nfunction usesMyTeam(filters) {\n\treturn JSON.stringify(filters || {}).includes(`\"${MY_TEAM_TOKEN}\"`)\n}\n\n/** Key of the synthetic follow column (`showFollowColumn`). */\nconst FOLLOW_COLUMN_KEY = '__follow'\n\n/**\n * Whether a declared column starts hidden (`{ key, hidden: true }`): it stays\n * off until the visible-column set names it, which the person does from the\n * Columns tab.\n *\n * @param {string|object} column A declared column.\n * @return {boolean} True for a column object with `hidden: true`.\n * @spec openspec/changes/screens-column-hidden-by-default/specs/index-page/spec.md\n */\nfunction isHiddenByDefault(column) {\n\treturn Boolean(column && typeof column === 'object' && column.hidden === true)\n}\n\n/**\n * Whether a schema property wants a from/to pair rather than a value list.\n *\n * @param {object} prop The schema property.\n *\n * @return {boolean} True for a range control.\n */\nfunction isRangeControl(prop) {\n\tconst control = String((prop && prop.inputControl) || '')\n\treturn control === 'date-range' || control === 'range'\n}\n\n/**\n * The filter declarations a page carries on its sidebar config.\n *\n * `sidebar.fields` and not `config.schema`: the schema key names the\n * OpenRegister schema a page self-fetches from, and a named source has no\n * register or schema to point at. The manifest schema types it as a string\n * for exactly that reason.\n *\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} `{ propertyName: declaration }`, empty when none.\n */\nfunction declaredFilterFields(props) {\n\tconst fields = props.sidebar && props.sidebar.fields\n\tconst declared = (fields && typeof fields === 'object') ? { ...fields } : {}\n\t// An endpoint source's facet pickers are filters the address carries too.\n\tconst facets = props.sourceConfig && Array.isArray(props.sourceConfig.facets) ? props.sourceConfig.facets : []\n\tfor (const facet of facets) {\n\t\tif (facet && typeof facet.field === 'string' && facet.field !== '' && !declared[facet.field]) {\n\t\t\tdeclared[facet.field] = { facetable: true }\n\t\t}\n\t}\n\treturn declared\n}\n\n/**\n * Read a named-source page's sidebar filters back out of `$route.query`.\n *\n * Only properties the page's own schema declares `facetable` are read, so an\n * unrelated query parameter (`?action=create`, a saved-view key) never\n * becomes a filter, and a hand-edited link cannot invent a field the source\n * has no argument for.\n *\n * @param {import('vue').ComponentInternalInstance|null} instance The instance, for `$route`.\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} The `{ fieldKey: values }` map, empty when the link carries none.\n */\nfunction namedFiltersFromRoute(instance, props) {\n\tconst route = instance && instance.proxy && instance.proxy.$route\n\treturn namedFiltersFromQuery((route && route.query) || {}, props)\n}\n\n/**\n * The named-source filters the page opens with: the ones the address carries,\n * else the page's `defaultFilters` with their tokens resolved (`@monthStart`,\n * `@myGroups`), unless the address names a saved view.\n *\n * @param {import('vue').ComponentInternalInstance|null} instance The instance, for `$route`.\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} The `{ fieldKey: values | { from, to } }` map.\n * @spec openspec/changes/named-source-default-filters/specs/index-page/spec.md#requirement-a-named-source-page-can-open-with-removable-default-filters\n */\nfunction namedFiltersWithDefaults(instance, props) {\n\tconst fromRoute = namedFiltersFromRoute(instance, props)\n\tconst query = (instance && instance.proxy && instance.proxy.$route && instance.proxy.$route.query) || {}\n\tconst defaults = props.defaultFilters\n\tif (!props.entitySource || Object.keys(fromRoute).length > 0 || query.savedView || !defaults || typeof defaults !== 'object') {\n\t\treturn fromRoute\n\t}\n\treturn resolveFilterTokens(defaults)\n}\n\n/**\n * The named-source filters a query carries, as `namedFiltersFromRoute` reads them.\n *\n * @param {object} query The route query.\n * @param {object} props The CnIndexPage props.\n *\n * @return {object} The `{ fieldKey: values }` map.\n */\nfunction namedFiltersFromQuery(query, props) {\n\tif (!props.entitySource) {\n\t\treturn {}\n\t}\n\tconst properties = declaredFilterFields(props)\n\tconst out = {}\n\n\tfor (const [key, prop] of Object.entries(properties)) {\n\t\tif (!prop || prop.facetable !== true) {\n\t\t\tcontinue\n\t\t}\n\t\tconst raw = query[key]\n\t\tif (raw === undefined || raw === null || raw === '') {\n\t\t\tcontinue\n\t\t}\n\t\tconst value = Array.isArray(raw) ? raw.join(',') : String(raw)\n\n\t\tif (isRangeControl(prop)) {\n\t\t\tconst [from, to] = value.split(RANGE_SEPARATOR)\n\t\t\tconst range = {}\n\t\t\tif (from) {\n\t\t\t\trange.from = from\n\t\t\t}\n\t\t\tif (to) {\n\t\t\t\trange.to = to\n\t\t\t}\n\t\t\tif (Object.keys(range).length > 0) {\n\t\t\t\tout[key] = range\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tconst values = value.split(',').filter((entry) => entry !== '')\n\t\tif (values.length > 0) {\n\t\t\tout[key] = values\n\t\t}\n\t}\n\n\treturn out\n}\n\n/**\n * The query-parameter spelling of one named-source filter value.\n *\n * @param {unknown} values The chosen values, or a `{ from, to }` range.\n *\n * @return {string} The parameter value, or '' when nothing is chosen.\n */\nfunction namedFilterToQuery(values) {\n\tif (values && typeof values === 'object' && !Array.isArray(values)) {\n\t\tconst from = values.from || ''\n\t\tconst to = values.to || ''\n\t\treturn (from === '' && to === '') ? '' : `${from}${RANGE_SEPARATOR}${to}`\n\t}\n\tconst list = (Array.isArray(values) ? values : [values])\n\t\t.map((entry) => ((entry && typeof entry === 'object' && 'id' in entry) ? entry.id : entry))\n\t\t.filter((entry) => entry !== undefined && entry !== null && String(entry) !== '')\n\treturn list.join(',')\n}\n\n/**\n * Active filters with each `{ from, to }` window spelled as the header range\n * keys `<key>[gte]` and `<key>[lte]`.\n *\n * @param {object} filters The active filters.\n * @return {object} The filters as a header filter reads them.\n * @spec openspec/changes/named-source-header-filters/specs/index-page/spec.md#requirement-a-named-source-can-filter-from-its-column-headers-through-its-search-fields\n */\nfunction rangesAsBounds(filters) {\n\tconst out = {}\n\tfor (const [key, value] of Object.entries(filters || {})) {\n\t\tif (value && typeof value === 'object' && !Array.isArray(value) && ('from' in value || 'to' in value)) {\n\t\t\tif (value.from) {\n\t\t\t\tout[`${key}[gte]`] = value.from\n\t\t\t}\n\t\t\tif (value.to) {\n\t\t\t\tout[`${key}[lte]`] = value.to\n\t\t\t}\n\t\t} else {\n\t\t\tout[key] = value\n\t\t}\n\t}\n\treturn out\n}\n\n/**\n * Header filter params with each `<key>[gte]` / `<key>[lte]` pair folded into\n * one `{ from, to }` window (an empty list clears the window, `[]` for others).\n *\n * @param {object} params The header filter's params, `{ key: values[] }`.\n * @return {object} `{ key: values[] | { from, to } }`.\n * @spec openspec/changes/named-source-header-filters/specs/index-page/spec.md#requirement-a-named-source-can-filter-from-its-column-headers-through-its-search-fields\n */\nfunction boundsAsRanges(params) {\n\tconst out = {}\n\tfor (const [key, values] of Object.entries(params || {})) {\n\t\tconst list = Array.isArray(values) ? values : []\n\t\tconst bound = key.match(/^(.+)\\[(gte|lte)\\]$/)\n\t\tif (!bound) {\n\t\t\tout[key] = list\n\t\t\tcontinue\n\t\t}\n\t\tconst window = (out[bound[1]] && typeof out[bound[1]] === 'object' && !Array.isArray(out[bound[1]])) ? out[bound[1]] : { from: '', to: '' }\n\t\tconst value = list.length > 0 ? String(list[0]).slice(0, 10) : ''\n\t\twindow[bound[2] === 'gte' ? 'from' : 'to'] = value\n\t\tout[bound[1]] = window\n\t}\n\treturn out\n}\n\n/**\n * CnIndexPage — Top-level schema-driven index page component.\n *\n * Assembles sub-components (CnPageHeader, CnActionsBar, table, cards,\n * pagination, mass actions, single-object dialogs) into a single\n * zero-config page.\n *\n * Dialogs are overridable via named slots:\n * - `#form-dialog` — Replace the create/edit dialog entirely\n * - `#delete-dialog` — Replace the single-item delete dialog\n * - `#copy-dialog` — Replace the single-item copy dialog\n * - `#form-fields` — Replace only the form content inside the built-in form dialog (CnFormDialog only)\n *\n * Use the `useAdvancedFormDialog` prop to use CnAdvancedFormDialog for create/edit (properties table, JSON tab, optional metadata).\n *\n * Multi-column sort (self-fetch mode: `register` + `schema`, no external\n * `objects`): shift+click a second/third sortable header in the embedded\n * CnDataTable to build a priority-ordered sort. The active key list is\n * translated into OpenRegister's `_order` query param (`{field: 'asc'|\n * 'desc', ...}`, key order = priority — the exact shape `ObjectsController::\n * normalizeOrderParameter` / `MagicMapper` consume) and persisted in\n * `$route.query._order` (JSON-encoded), so a reload or a shared link\n * restores the same sort. Host-controlled (non-self-fetch) pages pass their\n * own `sortKeys` prop instead.\n *\n * Minimal usage (auto-generated dialogs from schema)\n * ```vue\n * <CnIndexPage\n * title=\"Clients\"\n * :schema=\"effectiveSchema\"\n * :objects=\"clients\"\n * :pagination=\"effectivePagination\"\n * :loading=\"loading\"\n * @create=\"onCreate\"\n * @edit=\"onEdit\"\n * @delete=\"onDelete\"\n * @refresh=\"fetchClients\"\n * @row-click=\"openClient\"\n * @page-changed=\"onPage\" />\n * ```\n *\n * With custom form dialog\n * ```vue\n * <CnIndexPage ...>\n * <template #form-dialog=\"{ item, schema, confirm, close }\">\n * <MyCustomFormDialog :item=\"item\" @save=\"confirm\" @close=\"close\" />\n * </template>\n * </CnIndexPage>\n * ```\n *\n * @event {void} add — Add button clicked (backward compat, only if listener attached)\n * @event {object} create — Form dialog create confirmed. Payload: formData object\n * @event {object} edit — Form dialog edit confirmed. Payload: formData object (includes id)\n * @event {string} delete — Single delete confirmed. Payload: item ID\n * @event {{ id: string, newName: string }} copy — Single copy confirmed\n * @event {string[]} mass-delete — Mass delete confirmed. Payload: array of IDs\n * @event {object} mass-copy — Mass copy confirmed. Payload: { ids, pattern }\n * @event {object} mass-export — Mass export confirmed. Payload: { ids, format }\n * @event {object} mass-import — Mass import confirmed. Payload: import data\n * @event {void} refresh — Refresh button clicked\n * @event {object} row-click — Table row or card clicked. Payload: (row, event) — the row object and the native click event\n * @event {object} row-aux-click — Table row or card middle-clicked. Payload: (row, event) — the row object and the native auxclick event\n * @event {{ key: string, order: string }} sort — Column sort changed\n * @event {number} page-changed — Pagination page changed\n * @event {number} page-size-changed — Pagination page size changed. In self-fetch mode the list refetches page 1 at the new size first.\n * @event {string[]} select — Selection changed. Payload: array of selected IDs\n * @event {object} action — Row action triggered. Payload: { action, row }\n * @event {{ action: string, id: string, selectedIds: Array, count: number }} bulk-action — A declarative bulk action was triggered from the selection strip. The SELECTION travels with it: an action that has to go and find out what was selected is one re-render away from acting on a different set than the user saw highlighted.\n * @event {{ target: string, props: object }} open-modal — A bulk action of type `open-modal` asks the host to open a registered modal. `props` carries `selectedIds` and `count` merged under the action's own props.\n * @event {object} apply-view — A saved view was applied (saved-views-ui). Payload: the View API object. Only emitted when `allowSavedViews`.\n * @event {string} search — Search input changed in the embedded sidebar. Only emitted when `sidebar.enabled`.\n * @event {string[]} columns-change — Visible columns changed in the embedded sidebar. Only emitted when `sidebar.enabled`.\n * @event {{ key: string, values: Array<unknown> }} filter-change — Facet filter changed in the embedded sidebar. Only emitted when `sidebar.enabled`.\n * @event {void} clear-filters — \"Clear all\" clicked in the embedded sidebar. Search, every active filter and the folder-sidebar selection are reset (self-fetch mode); a consumer-managed page gets the bare event to handle itself.\n *\n * @slot mass-actions — Extra mass action buttons (shown when items are selected)\n * @slot action-items — Extra action bar buttons\n * @slot after-search — Refinement controls beside the search field on the bar's left side (e.g. a filter menu button)\n * @slot before-collection — Content above the collection in every view mode (e.g. a folder/group strip)\n * @slot selection-actions — Bulk-action buttons in the contextual selection strip shown while a selection is active. Scope: `{ count, selectedIds }`\n * @slot header-actions — Extra buttons in the page header\n * @slot delete-dialog — Replace the single-item delete dialog. Scope: `{ show, item, confirm, close }`. Call `confirm()` to perform the delete.\n * @slot copy-dialog — Replace the single-item copy dialog. Scope: `{ show, item, confirm, close }`. Call `confirm(payload)` to perform the copy.\n * @slot form-dialog — Replace the create/edit form dialog. Scope: `{ show, item, schema, confirm, close }`. Call `confirm(formData)` to save through the host's normal persistence path.\n * @slot form-fields — Replace form content inside the built-in CnFormDialog. Scope: `{ fields, formData, errors, updateField }`\n * @slot import-fields — Extra fields in the import dialog\n * @slot empty — Custom empty state content\n * @slot card — Custom card template for card view. Scope: `{ row }`\n * @slot row-actions — Custom row actions. Scope: `{ row }`\n * @slot column-{key} — Custom cell renderer for a specific column. Scope: `{ row, value }`\n */\n\n/**\n * Whether a page's named source orders its rows itself: on the page\n * (`sortsRows`) or on the server (`sortParam`).\n *\n * @param {object} vm The index page.\n * @return {boolean}\n * @spec openspec/changes/tasks-source-sorts-on-server/specs/index-sources/spec.md#requirement-a-named-source-can-sort-on-the-server\n */\nfunction namedSourceSorts(vm) {\n\treturn Boolean(vm.isNamedSource && vm.namedSource\n\t\t&& (vm.namedSource.sortsRows === true || typeof vm.namedSource.sortParam === 'function'))\n}\nexport default {\n\tname: 'CnIndexPage',\n\n\tcomponents: {\n\t\tCnIndexPageWidgets,\n\t\tCnRelatedFieldFilters,\n\t\tCnStatusBadge,\n\t\tNcNoteCard,\n\t\tCnBuildiqEditButton,\n\t\tCnFollowToggle,\n\t\tNcLoadingIcon,\n\t\tCnEmptyContent,\n\t\tNcActions,\n\t\tNcActionLink,\n\t\tNcActionButton,\n\t\tNcActionCaption,\n\t\tNcActionSeparator,\n\t\tNcActionCheckbox,\n\t\tNcButton,\n\t\tAlertCircleOutline,\n\t\tClockOutline,\n\t\tClose,\n\t\tCog,\n\t\tDatabaseSearch,\n\t\tExport,\n\t\tFilterOutline,\n\t\tTune,\n\t\tViewColumnOutline,\n\t\tNcCheckboxRadioSwitch,\n\t\tCnPageHeader,\n\t\tCnQuickFilterBar,\n\t\tCnActionButtons,\n\t\tCnActionsBar,\n\t\tDotsHorizontal,\n\t\tCnIcon,\n\t\tCnDataTable,\n\t\tCnCardGrid,\n\t\tCnBoardView,\n\t\tCnDateAxisView,\n\t\tCnObjectCalendar,\n\t\tCnMapWidget,\n\t\tCnObjectList,\n\t\tCnFolderSidebar,\n\t\tCnPagination,\n\t\tCnRowActions,\n\t\tCnMassDeleteDialog,\n\t\tCnMassCopyDialog,\n\t\tCnMassExportDialog,\n\t\tCnMassImportDialog,\n\t\tCnDeleteDialog,\n\t\tCnCopyDialog,\n\t\tCnFormDialog,\n\t\tCnAdvancedFormDialog,\n\t\tCnContextMenu,\n\t\tCnIndexSidebar,\n\t\tCnSavedViewsControl,\n\t\tCnSavedViewPresentationDialog,\n\t\tCnSavedViewEditDialog,\n\t\tCnSavedViewShareDialog,\n\t\tCnSaveViewDialog,\n\t\tCnConfirmDialog,\n\t\tCnQuickEditDialog,\n\t},\n\n\t/**\n\t * Inject the customComponents registry from a CnAppRoot ancestor.\n\t * Used by:\n\t * - REQ-MAD-3 / REQ-MAD-8 (manifest-actions-dispatch): resolves\n\t * `actions[].handler` registry names to functions called on\n\t * row-action click.\n\t * - The cardComponent + form-dialog override paths: when set, the\n\t * prop-level `customComponents` wins, but the inject is the\n\t * default. See `effectiveCustomComponents`.\n\t *\n\t * Falls back to an empty object so `CnIndexPage` works standalone\n\t * (unit tests, isolated mount) without `CnAppRoot`.\n\t */\n\t/**\n\t * The list a side-panel widget reads (`cnIndexList`): the applied saved\n\t * view, the list's total, and a way to hand back a view that changed\n\t * (the saved-view alert widget). Getters, so a widget follows the page.\n\t *\n\t * @return {object}\n\t */\n\tprovide() {\n\t\treturn {\n\t\t\t// Widgets beside the list sit directly under the page's h1 in the\n\t\t\t// board look; the Nextcloud look keeps its h3 widget titles.\n\t\t\t[HEADING_LEVEL]: () => (this.isBoardLook ? 2 : 3),\n\t\t\tcnIndexList: Object.defineProperties({}, {\n\t\t\t\tappliedView: { enumerable: true, get: () => this.appliedSavedView },\n\t\t\t\ttotal: {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\tconst total = this.effectivePagination && this.effectivePagination.total\n\t\t\t\t\t\treturn typeof total === 'number' ? total : undefined\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\treplaceSavedView: { enumerable: true, value: (view) => this.replaceSavedView(view) },\n\t\t\t}),\n\t\t}\n\t},\n\n\tinject: {\n\t\tcnCustomComponents: { default: () => ({}) },\n\t\t/** The app's named formatters, provided by CnAppRoot, for the map list's pills and template tokens. */\n\t\tcnFormatters: { default: () => ({}) },\n\t\t/** The permissions the user holds, provided by CnAppRoot; for gated page tabs. */\n\t\tcnPermissions: { default: () => [] },\n\t\t/** The app config an ancestor provides, for `@config.<key>` in quick-filter labels. */\n\t\tcnAppConfig: { default: null },\n\t\t/** The app id CnAppRoot provides, for the plural form of `countSubtitle`. */\n\t\tcnAppId: { default: '' },\n\t\t/**\n\t\t * The app manifest, provided by CnAppRoot. A column with `labelField`\n\t\t * and `link: true` finds the referenced schema's detail page here.\n\t\t */\n\t\tcnManifest: { default: null },\n\t\t/**\n\t\t * The v2 component registry, provided by CnAppRoot. Named handlers\n\t\t * (`actions[].handler`, `bulkActions[].handler`,\n\t\t * `headerActions[].handler`) resolve here first and fall back to\n\t\t * `cnCustomComponents`, so an app can register a `kind: 'handler'`\n\t\t * entry instead of a bare function in the legacy map.\n\t\t */\n\t\tcnRegistry: { default: () => ({}) },\n\t\t/**\n\t\t * The per-user preference reader and writer, provided by CnAppRoot.\n\t\t * Used for the manual row order, which belongs to the person and the\n\t\t * list rather than to the records. The default is null, and every read\n\t\t * and write is guarded, so a page mounted with no CnAppRoot ancestor\n\t\t * simply has no held order instead of failing to render.\n\t\t */\n\t\tcnUserPreferences: { default: null },\n\t\t/**\n\t\t * The saved views this user put in the app menu, held by CnAppRoot:\n\t\t * `{ entries, toggle(entry) }`. Absent without the shell, and then\n\t\t * the sidebar offers no Add to menu.\n\t\t */\n\t\tcnSavedViewMenu: { default: null },\n\t\t/**\n\t\t * Consumer translation function, provided by CnAppRoot as\n\t\t * `cnTranslate: this.translate` (bound to the host app's id). Column and\n\t\t * filter labels come from schema property titles, authored in English as\n\t\t * the canonical source; the visible label is resolved through this\n\t\t * function so it follows the user's language. Defaults to identity when\n\t\t * used standalone (no CnAppRoot ancestor). The embedded CnDataTable\n\t\t * resolves its own header labels through the same injection.\n\t\t */\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/**\n\t\t * Reactive edit-mode flag from CnAppRoot's manifest editor. When truthy\n\t\t * the page shows a config cog in its actions bar (emits `configure`).\n\t\t */\n\t\tcnEditingBody: { default: false },\n\t\t/** Opens a registry modal, provided by CnAppRoot. Used by `createModal`. */\n\t\tcnOpenModal: { default: null },\n\t\t/**\n\t\t * Reactive holder provided by CnAppRoot for hoisting the\n\t\t * embedded CnIndexSidebar to NcContent level. The default\n\t\t * `{ value: null }` is what we get when no CnAppRoot\n\t\t * ancestor exists; in that case we fall back to inline\n\t\t * rendering inside the cn-index-page wrapper. See\n\t\t * `shouldRenderInlineSidebar` and the mounted/beforeDestroy\n\t\t * hooks below.\n\t\t */\n\t\tcnIndexSidebarConfig: { default: () => ({ value: null }) },\n\t\t/**\n\t\t * Sentinel set to `true` when a CnAppRoot ancestor exists.\n\t\t * The default `false` is used for legacy apps that mount\n\t\t * CnIndexPage standalone — those keep the inline sidebar\n\t\t * render. See `shouldRenderInlineSidebar` for the gate.\n\t\t */\n\t\tcnHostsIndexSidebar: { default: false },\n\t\t/**\n\t\t * Reactive AI context holder provided by CnAppRoot. This page\n\t\t * component writes pageKind, registerSlug, schemaSlug in\n\t\t * created() and watches props for subsequent changes. On\n\t\t * beforeUnmount(), fields are reset to avoid stale context on\n\t\t * subsequent custom pages.\n\t\t */\n\t\tcnAiContext: { default: null },\n\t},\n\n\tprops: {\n\t\t/** Page title */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * A breadcrumb under the title (manifest `config.breadcrumb`): one\n\t\t * crumb `{ label, route?, params?, href?, icon?, separator? }` or a\n\t\t * list; the title follows as the current crumb. Drawn as the detail\n\t\t * header's breadcrumb row. Null (the default) draws none.\n\t\t *\n\t\t * @type {object|Array<object>|null}\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\tbreadcrumb: {\n\t\t\ttype: [Object, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * A note after the breadcrumb and a middle dot (manifest `config.headerMeta`),\n\t\t * such as \"{total} open\": `{total}` and `{shown}` are the list's counts,\n\t\t * and `{count:<name>}` the count of a list named in `headerMetaCounts`\n\t\t * (\"{total} contracten bij {count:suppliers} leveranciers\").\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t */\n\t\theaderMeta: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The other lists `headerMeta` counts (manifest `config.headerMetaCounts`):\n\t\t * `{ <name>: { register, schema, filter? } }`, each read as one list\n\t\t * total and filled in for `{count:<name>}`. While a count loads, or when\n\t\t * it fails, the note is left out rather than shown with a gap.\n\t\t *\n\t\t * @type {Record<string, {register: string, schema: string, filter?: object}>|null}\n\t\t */\n\t\theaderMetaCounts: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Tabs to sibling pages above the toolbar (manifest `config.pageTabs`),\n\t\t * each `{ id?, label, route?, params?, query?, href?, countFrom?: {\n\t\t * register, schema, filter? }, adminOnly?, permission? }`: DqPrivacy's\n\t\t * \"AVG-verzoeken | Datalekken\". The current page's tab is marked;\n\t\t * `countFrom` adds the count of that list. A tab with `adminOnly` shows\n\t\t * only to an instance admin, one with `permission` only to a user who\n\t\t * holds it. That hides the tab and nothing more: the page it points to\n\t\t * must still refuse the user on the server. Wins over a named source's\n\t\t * own page tabs.\n\t\t *\n\t\t * @type {Array<object>|null}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\tpageTabs: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * A notice under the list (manifest `config.notice`): `{ text,\n\t\t * variant?: 'info' | 'success' | 'warning' }`, a band that explains\n\t\t * the list, such as who decides what. The text goes through the host\n\t\t * translate.\n\t\t *\n\t\t * `placement: 'page'` draws it under the list card, on the page\n\t\t * ground, instead of inside the list under its rows.\n\t\t *\n\t\t * @type {{text: string, variant?: string, placement?: string}|null}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-show-a-notice-under-its-list\n\t\t * @spec openspec/changes/index-notice-below-card/specs/index-page/spec.md#requirement-an-index-page-notice-can-sit-under-the-list-card\n\t\t */\n\t\tnotice: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Optional description shown below the title */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * A description that carries the collection's total: `{total}` in\n\t\t * the text is replaced by the current pagination total (\"{total}\n\t\t * open cases\" reads \"48 open cases\"). Rendered in place of\n\t\t * `description` once a total is known; before that, `description`\n\t\t * shows. Manifest key `config.countSubtitle`. Goes through the host\n\t\t * translate function.\n\t\t *\n\t\t * `{ singular, plural }` picks the form by the total (\"1 invoice\",\n\t\t * \"12 invoices\") through the app's plural translation\n\t\t * (`translatePlural` with the app id CnAppRoot provides), so a\n\t\t * language with other plural rules gets its own forms.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-an-index-page-title-is-a-manifest-key\n\t\t * @spec openspec/changes/index-count-plural/specs/index-header/spec.md#requirement-the-count-line-takes-a-singular-and-a-plural-form\n\t\t * @type {string|{singular: string, plural: string}}\n\t\t */\n\t\tcountSubtitle: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Whether to show the page header (icon, title, description) inline.\n\t\t * When false (default), only the sidebar header shows the title\n\t\t * visually — but the `<h1>` is still rendered visually-hidden inside\n\t\t * the page, so the `<main>` landmark always has an accessible heading.\n\t\t * This prop controls VISIBILITY only; it can no longer remove the\n\t\t * heading from the accessibility tree.\n\t\t */\n\t\tshowTitle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Whether the page header draws its icon before the title. `false`\n\t\t * (manifest `config.showTitleIcon: false`) drops it, for a title that\n\t\t * stands alone as the board draws it. True by default.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t */\n\t\tshowTitleIcon: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether the actions bar shows its \"Showing 20 of 258\" line.\n\t\t * `false` (manifest `config.showCount: false`) drops it, for a page\n\t\t * whose title line already gives the total (`countSubtitle`). True by\n\t\t * default.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t */\n\t\tshowCount: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Draw this page in the `board` look (or `nextcloud`) whatever the app\n\t\t * does. Empty follows the `cnLook` CnAppRoot provides. Manifest key\n\t\t * `config.look`.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md\n\t\t * @type {('' | 'board' | 'nextcloud')}\n\t\t *\n\t\t * Read through `useLook(props)` in setup, which the unused-properties rule cannot see.\n\t\t */\n\t\tlook: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the count line under the title, a template with `{shown}`\n\t\t * (rows on this page) and `{total}` (all rows) and free text. Manifest\n\t\t * key `config.countText`. Without it the page's `countSubtitle`, else\n\t\t * \"{shown} of {total}\".\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-index-header-reads-title-count-and-the-board-buttons\n\t\t */\n\t\tcountText: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: a count line per view (manifest `config.countTextByView`),\n\t\t * `{ table?, cards?, list?, board?, map? }`, each a template as\n\t\t * `countText`: the board view says \"bordweergave per status\" where the\n\t\t * table says \"gesorteerd op termijn\" (DqWerkbord, DqZaken). A view it\n\t\t * does not name keeps `countText`; a scope's own `countText` comes first.\n\t\t *\n\t\t * @spec openspec/changes/count-text-per-view/specs/index-page/spec.md#requirement-the-count-line-can-differ-per-view\n\t\t */\n\t\tcountTextByView: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The property keys the card's facts list shows, in order (manifest key\n\t\t * `config.cardFields`). Without it the board look shows the first four\n\t\t * list columns.\n\t\t *\n\t\t * @spec openspec/changes/screens-card-parity/specs/card-board-look/spec.md#requirement-a-record-card-has-a-head-facts-and-one-action\n\t\t * @type {Array<string>}\n\t\t */\n\t\tcardFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the record layout of each card in the cards view\n\t\t * (manifest key `config.cardLayout`): `{ headPill, number, title,\n\t\t * meta, footerPill, footerDate }`, each part naming a field. See\n\t\t * CnObjectCard `layout`.\n\t\t *\n\t\t * @type {object}\n\t\t * @spec openspec/changes/board-record-card-layout/specs/board-record-card-layout/spec.md#requirement-a-board-card-can-draw-the-record-layout-from-config\n\t\t */\n\t\tcardLayout: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Gives each card in the card view a status accent: a colored start\n\t\t * border and icon. See CnObjectCard `accent`.\n\t\t *\n\t\t * @type {((object: object) => ({variant: string, icon: string, label: string}|null))|null}\n\t\t */\n\t\tcardAccent: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: free text after the footer's count (\"8 of 48 · click a\n\t\t * column header to sort\"). Manifest key `config.footerNote`.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-footer-sits-inside-the-card\n\t\t */\n\t\tfooterNote: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: draw the bulk band before anything is selected too, its\n\t\t * buttons disabled until there is a selection (DqZaken, DqWerkbord).\n\t\t * Manifest key `config.bulkBandAlways`. Only when the band has an\n\t\t * action to offer.\n\t\t */\n\t\tbulkBandAlways: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the 13px hint after the bulk band's buttons (\"See what\n\t\t * changes first, then run it\"). Manifest key `config.bulkHint`.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-bulk-band-is-its-own-row\n\t\t */\n\t\tbulkHint: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Board look: another shape of the bulk band per view mode, keyed by\n\t\t * the view (`board`, `cards`, ...). `{ lead?: { one, other }, actions?:\n\t\t * Array<id|{ id, label? }>, cancel?: boolean, hint?: boolean }`: the\n\t\t * lead counts the selection (`{count}`, through the app's translate),\n\t\t * `actions` picks and relabels bulk actions, `cancel` adds a Cancel\n\t\t * button that clears the selection, `hint: true` keeps `bulkHint`. In\n\t\t * such a view the band shows only with a selection and without the\n\t\t * built-in copy and delete (DqWerkbord: \"1 zaak geselecteerd · Status\n\t\t * wijzigen · Annuleren\"). Manifest key `config.bulkBandViews`.\n\t\t */\n\t\tbulkBandViews: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the plural the bulk band names (\"With the selected\n\t\t * cases\"), through the app's translate and lower-cased. Wins over the\n\t\t * schema's plural. Manifest key `config.bulkNoun`.\n\t\t */\n\t\tbulkNoun: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Buttons beside the page title, as the board's \"Export\" and \"New\n\t\t * case\" (manifest `config.headerButtons`). Each is `{ label?, action,\n\t\t * variant?, icon?, format?, id? }`: `action` is `add` (the Add flow;\n\t\t * its label defaults to the Add label), `export` (the export leaf in\n\t\t * `format`, `csv` by default, else the export dialog; with `run` the\n\t\t * `headerActions` entry of that id; on an `entitySource` page without\n\t\t * `run` and without a `@mass-export` listener it is not drawn),\n\t\t * `import`,\n\t\t * `refresh`, `save-view` (the save-current-view dialog: the board's\n\t\t * \"Zoekopdracht opslaan\", label \"Save view\" by default), or the id of a\n\t\t * `headerActions` entry; `variant` is\n\t\t * `primary` or `secondary` (the default). Shown only with\n\t\t * `showTitle`. When they show, the actions bar drops its Views and\n\t\t * Actions menus, and the Add button and Export menu when a button\n\t\t * takes their action. Empty (the default) changes nothing.\n\t\t * `action: \"actions-menu\"` is one labelled menu: the page's header\n\t\t * actions, or what its `items` name (`header-actions`, a header action\n\t\t * id, `import`, `export`, `refresh`, `copy-selected`, `delete-selected`,\n\t\t * `documentation`), so the entries the bar's menu loses have a place.\n\t\t * `items` can group them: `{ heading }` draws a group heading (an i18n\n\t\t * key) and `separator` a rule, each only when an entry follows.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @type {Array<{label?: string, action: string, variant?: ('primary'|'secondary'), icon?: string, format?: ('csv'|'excel'), id?: string, items?: Array<(string|{heading: string})>}>}\n\t\t */\n\t\theaderButtons: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws the Actions menu (manifest\n\t\t * `config.showActionsMenu`): `true` keeps it beside header buttons\n\t\t * (DqAfdelingen: Downloaden beside the title, Acties above the\n\t\t * search), `false` leaves it out. Null derives it: drawn unless the\n\t\t * header carries buttons.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-with-header-buttons/specs/index-actions-menu-with-header-buttons/spec.md#requirement-an-index-page-decides-its-toolbar-actions-menu\n\t\t */\n\t\tshowActionsMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * How the board look draws the table's title column (manifest\n\t\t * `config.rowTitle`): `link` (the default) underlines the title,\n\t\t * `plain` draws it as bold text without an underline over a 13px muted\n\t\t * secondary line. The row stays clickable. The Nextcloud look ignores\n\t\t * it. Maps to CnDataTable `rowTitle`.\n\t\t *\n\t\t * @spec openspec/changes/screens-table-rows-parity/specs/index-list-board-look/spec.md#requirement-a-row-title-can-be-plain-text\n\t\t */\n\t\trowTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: 'link',\n\t\t\tvalidator: (value) => ['link', 'plain'].includes(value),\n\t\t},\n\n\t\t/** Optional MDI icon name. Defaults to schema.icon when a schema is provided. */\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Schema. Either a resolved schema object (consumer-managed path) OR a\n\t\t * schema-slug string — when a string is given together with `register`\n\t\t * and no `objects` prop, the page enters self-fetch mode: it drives the\n\t\t * list via `useListView('${register}-${schema}', …)` and the column\n\t\t * generation uses the schema object that composable loads. Backwards-\n\t\t * compatible: `[Object, String]` still accepts an object.\n\t\t */\n\t\tschema: {\n\t\t\ttype: [Object, String],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Base filter for the self-fetch path. String values of the form\n\t\t * `\"@route.<name>\"` / `\":<name>\"` are interpolated from `$route.params`.\n\t\t */\n\t\tfilter: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Self-fetch mode only — an array of clickable filter tabs rendered as\n\t\t * a strip above the table. Each entry is `{label, filter, default?, icon?}`;\n\t\t * clicking a tab merges its `filter` into the fetch — spread AFTER\n\t\t * `filter` (so the active tab wins) and BEFORE the user's `activeFilters`\n\t\t * (so user facets still narrow within the active tab). String values\n\t\t * in a tab's `filter` resolve `@route.<name>` / `:<name>` from\n\t\t * `$route.params` just like the `filter` prop. The first tab with\n\t\t * `default:true` (else index 0) is active on mount; changing tabs\n\t\t * re-fetches at page 1. Omit (or `null`) → no tab strip, behaviour\n\t\t * unchanged. Under the board look a tab with `activeLabel` (\"Pipeline:\n\t\t * Sales\") adds a removable chip with that text to the Active line and\n\t\t * counts on the Filter badge while it is selected; removing the chip\n\t\t * goes back to the default tab. A tab can say `empty: \"field\"` (or a\n\t\t * list of fields) for the rows where the field has no value, and\n\t\t * `notEmpty` for the rows where it has one: it reads as the filter\n\t\t * `{ field: { isnull: true } }`. A tab can set its own order with\n\t\t * `sort: { key, order }` (or a list of those): selecting it sorts the\n\t\t * list that way, and selecting a tab without `sort` goes back to the\n\t\t * page's `sortKey`/`sortOrder`. A column the person sorts by still wins\n\t\t * until the next tab switch.\n\t\t */\n\t\tquickFilters: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Quick filters made from the values a field holds in this list\n\t\t * (manifest `config.quickFiltersFrom`): `{ field, register?, schema?,\n\t\t * valueField?, labelField?, allLabel? }`. The page asks OpenRegister for the\n\t\t * distinct values of `field` with their counts (within `filter`) and\n\t\t * draws \"All\" plus one tab per value, the most frequent first, each\n\t\t * with its count. With `register` and `schema` the values are ids of\n\t\t * records of that schema and each tab shows the record's `labelField`\n\t\t * (else its title or name). With `valueField` as well, the values are\n\t\t * matched on that field of those records instead of their id (a slug).\n\t\t * Ignored when `quickFilters` is set.\n\t\t *\n\t\t * @type {{field: string, register?: string, schema?: string, valueField?: string, labelField?: string, allLabel?: string}|null}\n\t\t * @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values\n\t\t */\n\t\tquickFiltersFrom: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Personal lenses appended to the quick filters: any of `watching`\n\t\t * (`_watching`, labelled Following), `recent` (`_recent`) and `unread`\n\t\t * (`_unread`). `favourite` is a deprecated alias of `watching`: a\n\t\t * favourite is a follow now, and asking for both gives one tab.\n\t\t * They combine with every other filter. While Recent is active column\n\t\t * sorting is off, because the lens owns the order. Manifest\n\t\t * `config.personalLenses`.\n\t\t *\n\t\t * @type {Array<'favourite'|'recent'|'watching'|'unread'>}\n\t\t */\n\t\tpersonalLenses: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Whether the table marks unread rows (`@self.unread`) in bold with the\n\t\t * unread marker: `true` in every look, `false` never. Unset (null)\n\t\t * keeps the look's default (see `marksUnreadRows`). Manifest\n\t\t * `config.showUnreadRows`.\n\t\t *\n\t\t * @spec openspec/changes/cell-config-growth/specs/cell-config-growth/spec.md#requirement-a-page-can-ask-for-its-unread-rows\n\t\t */\n\t\tshowUnreadRows: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Add a first column with a follow toggle per row (`CnFollowToggle`,\n\t\t * compact), bound to each row's `@self.watching`. Clicking it does not\n\t\t * open the row. Manifest `config.showFollowColumn`.\n\t\t */\n\t\tshowFollowColumn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Deprecated alias of `showFollowColumn`: the star column became the\n\t\t * follow column (OpenRegister `merge-follow-and-favourites`).\n\t\t *\n\t\t * @deprecated Use `showFollowColumn`.\n\t\t */\n\t\tshowFavouriteColumn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * A second filter strip under the toolbar, on one field (manifest\n\t\t * `config.filterStrip`): `{ field, label?, allLabel?, options?:\n\t\t * [{ value, label }], showCount? }`. It draws \"All\" and one pill per\n\t\t * value (the options, else the field's schema enum); picking one sets\n\t\t * the page's filter on that field, \"All\" clears it. With `showCount`\n\t\t * each pill counts the rows it would show within the active quick\n\t\t * filter. Absent (the default) draws nothing.\n\t\t *\n\t\t * @type {{field: string, label?: string, allLabel?: string, options?: Array<{value: string, label?: string}>, showCount?: boolean}|null}\n\t\t * @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip\n\t\t */\n\t\tfilterStrip: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Whether the board look draws the saved views as chips in the toolbar\n\t\t * (manifest `config.savedViewChips`). `false` keeps only Save view,\n\t\t * for a page whose views live in the side panel's Weergaven tab\n\t\t * (DqZaken, DqZakenSorteren, DqZakenKaart, DqWerkbord, DqFilterBeheren).\n\t\t *\n\t\t * @spec openspec/changes/saved-view-chips-switch/specs/saved-views/spec.md#requirement-an-index-page-can-leave-the-saved-view-chips-out-of-the-toolbar\n\t\t */\n\t\tsavedViewChips: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws Save view (manifest `config.savedViewSave`).\n\t\t * `false` leaves it out for a page whose board draws none (DqTaken,\n\t\t * DqOrganisaties); the views stay in the side panel.\n\t\t */\n\t\tsavedViewSave: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether an applied saved view names the page and its side panel\n\t\t * (manifest `config.savedViewTitle`): a view opened from the menu or\n\t\t * the panel heads the list with its own name (DqFilterInMenu \"Termijn\n\t\t * deze week\"). Off, the page keeps its title.\n\t\t *\n\t\t * @spec openspec/changes/saved-view-names-the-page/specs/saved-view-names-the-page/spec.md#requirement-an-applied-saved-view-can-name-the-page\n\t\t */\n\t\tsavedViewTitle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Where the quick-filter chips sit (manifest `config.quickFilterPlacement`).\n\t\t * `''` (the default) as before. `'toolbar'` keeps them on one row with\n\t\t * the Filter button and the view switch, in whatever width that row has\n\t\t * beside a side panel (DqTeamwachtrij): the chips take the room the\n\t\t * buttons leave, and those that do not fit move into the overflow chip.\n\t\t * `'row'` puts them on a row of their own above the toolbar, wrapping\n\t\t * onto more lines instead of folding into the overflow chip.\n\t\t * `'active'` draws no tabs: a chosen tab with an `activeLabel` shows\n\t\t * only on the Active line, where it can be removed\n\t\t * (DqAanMijToegewezen).\n\t\t *\n\t\t * @type {''|'toolbar'|'row'|'active'}\n\t\t */\n\t\tquickFilterPlacement: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator: (v) => ['', 'toolbar', 'row', 'active'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * The quick-filter placement per view mode (manifest\n\t\t * `config.quickFilterPlacementByView`): `{ table?, cards?, board?, map? }`,\n\t\t * each `''`, `'toolbar'`, `'row'` or `'active'`. A view it does not name keeps\n\t\t * `quickFilterPlacement` (dossiq's case list: the chips beside Filter in\n\t\t * its board and map views, on their own row in its table view).\n\t\t *\n\t\t * @spec openspec/changes/index-quick-filter-placement-per-view/specs/index-page/spec.md#requirement-the-quick-filter-placement-can-differ-per-view\n\t\t */\n\t\tquickFilterPlacementByView: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Where the board look's search field sits (manifest\n\t\t * `config.searchPlacement`): `''` (the default) opens row 2 with it,\n\t\t * `'toolbar'` puts it on row 1 before the Filter button and the view\n\t\t * switch (DqTeamwachtrij).\n\t\t *\n\t\t * @type {''|'toolbar'}\n\t\t */\n\t\tsearchPlacement: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator: (v) => ['', 'toolbar'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * How the quick filters render: `'chips'` (pill strip, default) or\n\t\t * `'dropdown'` (a single `NcSelect`). Sourced from the manifest as\n\t\t * `pages[].config.quickFilterMode`.\n\t\t *\n\t\t * @type {'chips'|'dropdown'}\n\t\t */\n\t\tquickFilterMode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'chips',\n\t\t\tvalidator: (v) => ['chips', 'dropdown'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * Allow several quick filters active at once. Selected tabs' filters\n\t\t * are OR-ed together into the fetch (same field → array value →\n\t\t * `field[]=` IN query). Sourced from `pages[].config.quickFilterMultiple`.\n\t\t */\n\t\tquickFilterMultiple: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Chips mode only: how many quick-filter pills render inline before the\n\t\t * rest move into an overflow menu. `0` (the default) renders every tab.\n\t\t * A long strip wraps the actions bar onto a second line and squeezes the\n\t\t * \"Showing X of Y\" count, so a page with many lenses caps this and keeps\n\t\t * the everyday few in view. Sourced from\n\t\t * `pages[].config.quickFilterMaxVisible`.\n\t\t */\n\t\tquickFilterMaxVisible: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/**\n\t\t * How the Active line names a filter: per filter key an optional\n\t\t * `label` for the field and `values` naming each value, both through\n\t\t * the app's translate. Wins over the schema and sidebar names.\n\t\t * Sourced from `pages[].config.filterLabels`.\n\t\t *\n\t\t * A range filter's entry may set `relative: true`, naming a range\n\t\t * from today in words (\"within 7 days\"). An entry with\n\t\t * `hidden: true` is a working-list rule every view carries: the line\n\t\t * that says what a saved view shows leaves it out.\n\t\t *\n\t\t * @example { isFinalStatus: { label: 'Status', values: { false: 'Ongoing', true: 'Finished' } } }\n\t\t */\n\t\tfilterLabels: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Manual column definitions (used instead of schema when provided) */\n\t\tcolumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * OpenRegister `_extend[]` values forwarded on the fetch, e.g.\n\t\t * `[\"calculations\"]`. Sourced from `pages[].config.extend`.\n\t\t *\n\t\t * A schema's `x-openregister-calculations` entries declared\n\t\t * `materialise: false` are VIRTUAL: RenderObject evaluates them only\n\t\t * when the caller asks for them through `_extend`, so without this a\n\t\t * declared calculation is simply absent from every row and its column\n\t\t * renders empty. The same contract `objectTableSource.extend` already\n\t\t * carries for dashboard widgets, which is where it shipped first;\n\t\t * index pages could not ask for it at all.\n\t\t */\n\t\textend: { // eslint-disable-line vue/no-unused-properties -- read by useSelfFetchList.js off the props object, which this rule does not follow.\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Self-fetch only: list from this endpoint instead of\n\t\t * `/api/objects/{register}/{schema}`, e.g. an app endpoint that searches\n\t\t * several register/schema pairs at once. `register` and `schema` stay the\n\t\t * page's own pair (columns, create, export, import). Rows of another pair,\n\t\t * read from their `@self.register` / `@self.schema`, are edited, copied and\n\t\t * deleted against that pair, with its own form. The endpoint takes\n\t\t * `_page`, `_limit`, `_search` and `_order[key]=dir` and answers\n\t\t * `{ results, total, page, pages }`.\n\t\t */\n\t\tcollectionUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Offer an \"Also search inside files\" switch beside the search box. On,\n\t\t * a search also matches words inside attached files (OpenRegister\n\t\t * `_content_search`), and a row found that way says which file matched.\n\t\t * Manifest: `config.searchInFiles`.\n\t\t */\n\t\tsearchInFiles: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Filters over a type's own declared fields, beside the search\n\t\t * (CnRelatedFieldFilters): `{ definitions: { register, schema, filter },\n\t\t * related: { schema, backref, definitionKey?, valueKey? } }`.\n\t\t * Manifest: `config.relatedFieldFilters`.\n\t\t */\n\t\trelatedFieldFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Object/row data array */\n\t\tobjects: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Name of a registered NON-OBJECT entity collection to list (e.g. `flows`).\n\t\t *\n\t\t * The third data mode. `register` + `schema` fetches OpenRegister\n\t\t * objects; `:objects` renders rows a parent already holds; `entitySource`\n\t\t * names a list that is neither — a flow definition is deliberately not\n\t\t * an OpenRegister object, so an index had nothing to point at and such\n\t\t * lists became bespoke `type: \"custom\"` pages instead.\n\t\t *\n\t\t * Non-empty `:objects` still wins, and an entity source wins over\n\t\t * register/schema. See `src/composables/indexSources.js`.\n\t\t */\n\t\tentitySource: { type: String, default: '' },\n\n\t\t/**\n\t\t * Route name a clicked row opens, overriding a named source's own\n\t\t * navigation.\n\t\t *\n\t\t * An entity source knows where its rows live and navigates itself, and\n\t\t * for a source whose detail page belongs to ANOTHER app that is right:\n\t\t * `tasks` sends a click to openregister's task page, because pushing\n\t\t * on this app's router could not reach it.\n\t\t *\n\t\t * It is wrong for an app that HAS its own page for those rows. Dossiq\n\t\t * keeps a task detail page on purpose, so its handlers see a task in\n\t\t * dossiq's vocabulary beside the case it belongs to. Without this prop\n\t\t * adopting `entitySource: \"tasks\"` would send every click out of the\n\t\t * app, and the `row-click` event cannot recover it: `openRow` calls\n\t\t * `window.location.assign()`, so a host's push never lands.\n\t\t *\n\t\t * Set it and the row pushes `{ name: rowRoute, params: { id } }` on\n\t\t * this app's router instead. Leave it unset and the source's own\n\t\t * navigation is unchanged, which is what every current consumer gets.\n\t\t */\n\t\trowRoute: { type: String, default: '' },\n\n\t\t/**\n\t\t * Config handed to the named source's loader (e.g. `{ app: 'dossiq' }`).\n\t\t */\n\t\tsourceConfig: { type: Object, default: null },\n\n\t\t/** Pagination state: { page, pages, total, limit } */\n\t\tpagination: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Whether data is loading */\n\t\tloading: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether rows/cards can be selected */\n\t\tselectable: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Draw the table without its column-header row (manifest\n\t\t * `config.hideTableHeader`), for a list the board draws as plain rows\n\t\t * (DqTeamwachtrij). Pair it with `selectable: false` for no checkboxes.\n\t\t */\n\t\thideTableHeader: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * When true, a row/card click emits `row-click` (to open/navigate) even\n\t\t * while `selectable` — selection then happens via the checkbox only.\n\t\t * Manifest-driven index pages set this when a matching detail page\n\t\t * exists, so clicking a row opens its detail. Default false preserves\n\t\t * the legacy select-on-click behaviour.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\trowClickToView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The page's `splitView` declaration: `{ enabled, breakpoint, paneWidth }`.\n\t\t * With `enabled`, opening a row renders it beside the list in the\n\t\t * `#split-pane` slot instead of navigating away, and the list keeps its\n\t\t * scroll position, its selection and its loaded page. Omit it and the\n\t\t * page renders exactly as it does today.\n\t\t *\n\t\t * @type {{ enabled?: boolean, breakpoint?: number, paneWidth?: string }}\n\t\t */\n\t\tsplitView: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The record the split pane is showing, taken from the split address.\n\t\t * Empty closes the pane. Ignored unless `splitView.enabled`.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tsplitId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Route name the pane's close button returns to. Defaults to the\n\t\t * current route's own list address when omitted.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tsplitCloseRoute: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Whether the pane draws its own close link. Set false when the\n\t\t * `#split-pane` slot draws one from the slot's `close`.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tsplitCloseButton: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Accessible name and tooltip for the pane's close button.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tsplitCloseLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Lets this person order and pin the table columns from the sidebar's\n\t\t * Columns tab, and keeps the visible columns, their order and the pinned\n\t\t * count per user and per list in their Nextcloud preferences. `false`\n\t\t * keeps show and hide only, stored nowhere (for a page whose column set is\n\t\t * a contract, such as an export preview).\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tpersonalColumns: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Lets this person drag the rows into an order of their own, held\n\t\t * against them and this list and never written onto the records. The\n\t\t * order stands down while a sort is active, because a sort the person\n\t\t * just chose is them asking for a different order.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tmanualOrder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Stable id this list's manual order is held under. Defaults to the\n\t\t * object type or the schema, so two lists of one schema on different\n\t\t * pages share an order only when the host says they should.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tmanualOrderId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Currently selected IDs */\n\t\tselectedIds: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * View mode: 'table', 'cards', 'list', 'map', 'board', 'dateAxis' or 'calendar'.\n\t\t * Default 'table'. List is opted in via `availableViewModes`; map via\n\t\t * `mapConfig` / `config.viewModes`; board and dateAxis via\n\t\t * `config.viewModes` and their own config blocks.\n\t\t */\n\t\tviewMode: {\n\t\t\ttype: String,\n\t\t\tdefault: 'table',\n\t\t\tvalidator: (v) => ['table', 'cards', 'list', 'map', 'board', 'dateAxis', 'calendar'].includes(v),\n\t\t},\n\n\t\t/**\n\t\t * Marker geometry mapping for the opt-in `map` view mode, mirroring the\n\t\t * manifest `config.map` block 1:1. When non-empty (and not excluded by an\n\t\t * explicit `config.viewModes`), a third \"Map\" segment appears in the view\n\t\t * toggle and the current filtered rows are plotted on a CnMapWidget.\n\t\t *\n\t\t * - `latField` / `lngField` — object (or `@self`) property paths holding the\n\t\t * marker's latitude / longitude. Dotted paths are supported (e.g.\n\t\t * `@self.geo.lat`).\n\t\t * - `geoField` — alternative single property holding a GeoJSON Point\n\t\t * geometry (`{ type: 'Point', coordinates: [lng, lat] }`); takes\n\t\t * precedence over lat/lngField when present and resolvable.\n\t\t * - `popupField` — object property rendered in the marker popup.\n\t\t * - `center` — optional `[lat, lng]` fallback centre when the filtered set\n\t\t * has no plottable rows.\n\t\t * - `zoom` — the map's initial zoom level.\n\t\t * - `list` — a numbered list beside the map, map and list in one card\n\t\t * (DqZakenKaart): `{ title, sub?, pills?: [{ path?, text?, map?,\n\t\t * colorMap? }], due? }`, field templates read per row. The pins carry the\n\t\t * list's numbers, the row under the pointer is marked on both, the rows\n\t\t * without a place are counted under the list with a link to the table,\n\t\t * and the page's count line adds how many are on the map.\n\t\t *\n\t\t * @type {{ latField?: string, lngField?: string, geoField?: string, popupField?: string, center?: [number, number], zoom?: number, list?: object }}\n\t\t */\n\t\tmapConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Label for the map view-toggle segment (defaults to \"Map\"). */\n\t\tmapLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the map view-toggle segment (defaults to the built-in map-marker icon). */\n\t\tmapIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Explicit whitelist of view-toggle segments to offer, e.g.\n\t\t * `['table', 'cards', 'map']`. Fed from the manifest as\n\t\t * `pages[].config.viewModes`. When set it takes precedence over the\n\t\t * inferred availability (map otherwise appears iff `mapConfig` is\n\t\t * non-empty). Cards/table always render regardless of this list.\n\t\t *\n\t\t * @type {Array<'table' | 'cards' | 'list' | 'map' | 'board' | 'dateAxis' | 'calendar'>}\n\t\t */\n\t\tviewModes: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: the segments the view switch draws, e.g. `['table',\n\t\t * 'cards', 'board', 'map']` as the boards do. A listed mode the page\n\t\t * can open is an ordinary segment; one it cannot (no board columns, no\n\t\t * map configured) is drawn disabled, named \"<mode>: not available on\n\t\t * this list\". Fed from `pages[].config.viewSwitch`. Ignored without the\n\t\t * board look; absent, the board look draws all four.\n\t\t *\n\t\t * @type {Array<'table' | 'cards' | 'board' | 'map'>}\n\t\t * @spec openspec/changes/screens-view-switch-parity/specs/view-switch-board-look/spec.md#requirement-the-manifest-can-draw-segments-the-page-cannot-open\n\t\t */\n\t\tviewSwitch: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Board look: view switch segments that open another PAGE, by mode\n\t\t * (`table`, `cards`, `board`, `map`): `{ board: { route: 'CaseBoard',\n\t\t * params?, query? } }` or `{ map: { href: '/apps/x/map' } }`. The\n\t\t * segment sits in its place in the switch as a link, for a board or a\n\t\t * map that is a page of its own. A mode this page opens in place stays\n\t\t * a button. Fed from `pages[].config.viewSwitchLinks`. Ignored without\n\t\t * the board look.\n\t\t *\n\t\t * @type {{[mode: string]: {route?: string, params?: object, query?: object, href?: string}}}\n\t\t * @spec openspec/changes/screens-view-switch-links/specs/view-switch/spec.md#requirement-a-view-switch-segment-can-open-another-page\n\t\t */\n\t\tviewSwitchLinks: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * The board's configuration, mirroring the manifest `config.board`\n\t\t * block: `{ statusField, cardFields, swimlaneField }`. The board is\n\t\t * offered only when this names a `statusField` AND `viewModes` lists\n\t\t * `board`: a segment that opens a board saying it cannot be one is\n\t\t * worse than no segment.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tboard: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The date axis's configuration, mirroring the manifest\n\t\t * `config.dateAxis` block: `{ startField, endField, laneField,\n\t\t * labelField }`. Offered only when both date fields are named.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tdateAxis: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The calendar's configuration, mirroring the manifest\n\t\t * `config.calendar` block: `{ dateField, endDateField?, titleField? }`.\n\t\t * Offered only when `dateField` is named and `viewModes` lists\n\t\t * `calendar`. Only the visible month is fetched.\n\t\t *\n\t\t * @type {{dateField?: string, endDateField?: string, titleField?: string}}\n\t\t */\n\t\tcalendar: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * The host's transition, handed to the board. Absent, the board is\n\t\t * read-only: it never writes the status field itself, so with no\n\t\t * transition there is nothing it can do.\n\t\t *\n\t\t * @type {((move: { card: object, toKey: string }) => Promise<object>)|null}\n\t\t */\n\t\trunTransition: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Which view-mode toggle segments to expose (cards/table/list), in order.\n\t\t * Defaults to the historical Cards/Table pair; include `'list'` to offer the\n\t\t * list view. Fed from the manifest as `pages[].config.availableViewModes`.\n\t\t * Map is added separately via `mapConfig` / `viewModes`.\n\t\t *\n\t\t * @type {Array<'cards' | 'table' | 'list' | 'map' | 'board' | 'dateAxis' | 'calendar'>}\n\t\t */\n\t\tavailableViewModes: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => ['cards', 'table'],\n\t\t\tvalidator: (modes) => modes.every((m) => ['cards', 'table', 'list', 'map', 'board', 'dateAxis', 'calendar'].includes(m)),\n\t\t},\n\n\t\t/** Current sort key */\n\t\tsortKey: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Current sort order */\n\t\tsortOrder: {\n\t\t\ttype: String,\n\t\t\tdefault: 'asc',\n\t\t},\n\n\t\t/**\n\t\t * Ordered multi-column sort state (host-controlled / non-self-fetch\n\t\t * mode): `[{ key, order }, ...]`, mirroring the `sortKey`/`sortOrder`\n\t\t * pair but for more than one active key. Ignored in self-fetch mode\n\t\t * (register + schema), which manages its own multi-sort state via\n\t\t * `useSelfFetchList`/`useListView` and persists it in the route query.\n\t\t *\n\t\t * @type {Array<{key: string, order: 'asc'|'desc'}>}\n\t\t */\n\t\tsortKeys: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Optional declarative DEFAULT multi-key client-side sort, applied to the\n\t\t * already-loaded rows whenever no explicit column sort is active (no\n\t\t * `sortKey` selected by the user / passed in). Each entry is\n\t\t * `{ field, order }` with `order` one of `'asc'` / `'desc'` (default\n\t\t * `'asc'`); rows are compared by the first field, ties broken by the\n\t\t * next, and so on. Comparison is type-aware (numbers numerically, dates\n\t\t * by timestamp, strings via `localeCompare`). Clicking a sortable header\n\t\t * takes over and suppresses this default. Useful for a fixed presentation\n\t\t * order such as \"group by type, then name\".\n\t\t *\n\t\t * @type {Array<{field: string, order?: 'asc'|'desc'}>}\n\t\t */\n\t\tdefaultSort: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Unique row identifier property */\n\t\trowKey: {\n\t\t\ttype: String,\n\t\t\tdefault: 'id',\n\t\t},\n\n\t\t/**\n\t\t * Optional leading icon for every table row — a static MDI icon name or\n\t\t * a `(row) => iconName` function. Forwarded to CnDataTable. Fed from the\n\t\t * manifest as `pages[].config.rowIcon`. Unset = no icon column.\n\t\t *\n\t\t * @type {string | ((row: object) => string) | null}\n\t\t */\n\t\trowIcon: {\n\t\t\ttype: [String, Function],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Columns to exclude in schema mode */\n\t\texcludeColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Columns to include in schema mode (whitelist) */\n\t\tincludeColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Per-column overrides in schema mode */\n\t\tcolumnOverrides: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Row action definitions, merged with the built-in View / Edit / Copy / Delete.\n\t\t * Objects are app actions.\n\t\t * A `\"builtin:view\"`, `\"builtin:edit\"`, `\"builtin:copy\"` or `\"builtin:delete\"` string places that built-in at its position when its `show*Action` toggle is on; enabled built-ins not placed are appended in that order.\n\t\t */\n\t\tactions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Text shown when no items found. The default is the library's own\n\t\t * string, so it reads in the user's language; a page's own text goes\n\t\t * through the app's translate function.\n\t\t */\n\t\temptyText: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'No items found'),\n\t\t},\n\n\t\t/**\n\t\t * Personal-lens report of the list on screen, for a host that fetches\n\t\t * itself: the response's `@self.lenses` (`{ recent: { available,\n\t\t * reason } }`). In self-fetch mode the page reads it from the store\n\t\t * and this prop is ignored. When a lens reports `available: false`\n\t\t * the empty state explains why instead of showing `emptyText`.\n\t\t *\n\t\t * @type {object|null}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-an-unavailable-lens-explains-its-empty-page\n\t\t */\n\t\tlenses: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * App wording for an unavailable lens, keyed `<lens>.<reason>`\n\t\t * (`recent.audit-trail-disabled`) or `<reason>`; the specific key\n\t\t * wins, and both win over the library's object-neutral text.\n\t\t *\n\t\t * @type {{[key: string]: string}|null}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-an-unavailable-lens-explains-its-empty-page\n\t\t */\n\t\tlensReasonTexts: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * What to do after a refused search, through the app's translate. The\n\t\t * default explains AND, OR, NOT and quotes.\n\t\t *\n\t\t * @spec openspec/changes/index-search-refusal/specs/index-search-refusal/spec.md#requirement-a-refused-search-is-said-where-it-was-typed\n\t\t */\n\t\tsearchRefusalHint: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Accessible label for the loading spinner (NcLoadingIcon aria-label) */\n\t\tloadingText: {\n\t\t\ttype: String,\n\t\t\tdefault: 'Loading…',\n\t\t},\n\n\t\t/**\n\t\t * Object types whose live changes this list follows (manifest\n\t\t * `config.live`): it subscribes to them through the object store and\n\t\t * reads the list again shortly after a change, so a card a colleague\n\t\t * moved moves here too. Empty (the default) subscribes to nothing.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tlive: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * CSS class(es) for a row: a function `(row) => string`, or (manifest\n\t\t * `config.rowClass`) rules `[{ when: { field, op?, value }, class }]`,\n\t\t * each adding its class to a row whose field compares to the value\n\t\t * (the `visibleWhen` operators, `@today` included). DqTaken marks an\n\t\t * overdue task: `{ when: { field: \"dueAt\", op: \"lt\", value: \"@today\" },\n\t\t * class: \"cn-row--overdue\" }`.\n\t\t *\n\t\t * @type {((row: object) => string)|Array<{when: {field: string, op?: string, value: unknown}, class: string}>|null}\n\t\t */\n\t\trowClass: {\n\t\t\ttype: [Function, Array],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Override label for the Add button. Defaults to \"Add {schema.title}\" */\n\t\taddLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** How many action buttons to show inline (rest go in overflow dropdown) */\n\t\tinlineActionCount: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Import action */\n\t\tshowMassImport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Export action */\n\t\tshowMassExport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Copy settings from the manifest's `config.copy`. `include` lists the link\n\t\t * kinds a copy may take along (`relationRows`, `incoming`, `files`); the copy\n\t\t * dialogs then list them, ticked, and the copy is one request to\n\t\t * OpenRegister's copy endpoint. Without it a copy carries the fields only,\n\t\t * as before. A server without the endpoint shows the list read-only.\n\t\t *\n\t\t * @type {{include?: Array<'relationRows'|'incoming'|'files'>}|null}\n\t\t */\n\t\tcopy: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Copy button */\n\t\tshowMassCopy: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether to show the built-in mass Delete button */\n\t\tshowMassDelete: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Opt-in flag for the native Export menu (CSV/Excel) rendered in the\n\t\t * toolbar next to the Add button. Defaults to `false` — an app must\n\t\t * explicitly enable it per page. The menu only renders when this is\n\t\t * `true` AND the resolved schema is flagged `exportable: true`; it\n\t\t * navigates the browser to OpenRegister's export leaf\n\t\t * (`GET /apps/openregister/api/objects/{register}/{schema}/export`),\n\t\t * passing the current route's query params through as filters. This\n\t\t * is distinct from the `showMassExport` mass-action, which exports\n\t\t * only the fetched/selected rows via a blob download.\n\t\t */\n\t\tallowExport: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Saved views (saved-views-ui). Unset, the sidebar's Views tab is on\n\t\t * for every page with a sidebar and a source a view can be scoped to\n\t\t * (register and schema, `entitySource` or `savedViewsScope`); `false`\n\t\t * turns it off. `true` also forces the sidebar and adds the toolbar\n\t\t * control, where a Views dropdown lists the\n\t\t * current user's OpenRegister saved-search views\n\t\t * (`GET /apps/openregister/api/views`); applying one writes its\n\t\t * stored filters/search/sort into the route query (reusing the\n\t\t * existing deep-link contract — non-underscore keys are filters,\n\t\t * `_search` and `_order` are reserved), \"Save current view…\"\n\t\t * persists the current route-query state via POST and toasts either\n\t\t * way naming the view (a failure also keeps the dialog open with the\n\t\t * reason), and own views can be deleted after confirmation.\n\t\t */\n\t\tallowSavedViews: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Which pages share this page's saved views. By default a view is\n\t\t * shared by every page over the same register and schema and by no\n\t\t * other page, because a view is filters over one schema's fields. Set\n\t\t * this to share views across pages over different sources, or to\n\t\t * keep two pages over the same source apart. Written into the saved\n\t\t * view's `query.scope`; views saved before scoping stay visible\n\t\t * everywhere.\n\t\t */\n\t\tsavedViewsScope: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Views the app ships for this page (`config.defaultSavedViews`), each\n\t\t * `{ slug, name, filters, search?, sort?, label? }`. Listed read-only\n\t\t * above the user's own saved views, never stored; a user may apply one\n\t\t * or save a copy. `@`-tokens in `filters` resolve when it is applied.\n\t\t */\n\t\tdefaultSavedViews: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Property name used to display item names in dialogs */\n\t\tmassActionNameField: {\n\t\t\ttype: String,\n\t\t\tdefault: 'title',\n\t\t},\n\n\t\t/** Optional function to format item names in dialogs. Receives the item, returns a string. Overrides massActionNameField when provided. */\n\t\tnameFormatter: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Available export formats for the export dialog */\n\t\texportFormats: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [\n\t\t\t\t{ id: 'excel', label: 'Excel (.xlsx)' },\n\t\t\t\t{ id: 'csv', label: 'CSV (.csv)' },\n\t\t\t],\n\t\t},\n\n\t\t/** Import option definitions for the import dialog */\n\t\timportOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether to show the built-in form dialog for Add/Edit */\n\t\tshowFormDialog: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Registry key of a `kind: 'modal'` entry that Add (and `?action=create`)\n\t\t * opens instead of the built-in form dialog. Edits keep the form dialog.\n\t\t */\n\t\tcreateModal: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Use CnAdvancedFormDialog (properties table, JSON tab, optional metadata) instead of CnFormDialog for Add/Edit */\n\t\tuseAdvancedFormDialog: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * NcDialog size for the built-in Add/Edit form dialog.\n\t\t *\n\t\t * The dialog itself has taken a `size` since it shipped, but this page\n\t\t * never passed one, so an index page's Add form was stuck at `normal`\n\t\t * however many properties its schema declared. A manifest-declared\n\t\t * `open-form` header action, which reaches CnFormDialog through\n\t\t * CnActionButtons, could already ask for `large` — which is why the\n\t\t * same app could have a roomy create form on a detail page and a\n\t\t * cramped one on its index.\n\t\t */\n\t\tformSize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'normal',\n\t\t},\n\n\t\t/**\n\t\t * How many columns the built-in Add/Edit form flows its fields into.\n\t\t *\n\t\t * Pair `2` with `formSize: 'large'`, or the two columns are merely two\n\t\t * narrow ones. Worth it once the schema asks more questions than fit on\n\t\t * a screen; below 700px CnFormDialog collapses back to one column on\n\t\t * its own, so this is safe on a narrow viewport.\n\t\t */\n\t\tformColumns: {\n\t\t\ttype: Number,\n\t\t\tdefault: 1,\n\t\t\tvalidator: (value) => value === 1 || value === 2,\n\t\t},\n\n\t\t/**\n\t\t * Seed values for the built-in create dialog. Never applied on edit:\n\t\t * both dialogs consult `initialData` / `initialValues` only when there\n\t\t * is no item. Values resolve `@me` / `@now` / `@today` at any depth;\n\t\t * `@object.*` / `@workspace.*` / `@config.*` need a context this page\n\t\t * does not carry, so they pass through unresolved.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tcreateDefaults: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Where to go after a successful create from the built-in Add dialog.\n\t\t * A route name, or `{ name, paramField?, objectParam? }`; the created\n\t\t * object's id is merged into the params. Empty stays on the list.\n\t\t *\n\t\t * @type {string|object|null}\n\t\t */\n\t\tcreateSuccessRoute: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Toast shown after a successful create from the built-in Add dialog,\n\t\t * run through the host `cnTranslate`. Empty shows none.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tcreateSuccessMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Opt-in async create hook. When provided, a **create** (not edit)\n\t\t * confirmed from the built-in form dialog calls\n\t\t * `await createOverride(formData, ctx)` INSTEAD of persisting via the\n\t\t * store / self-store `saveObject`. The override owns persistence\n\t\t * (e.g. an app posting through a contact-aware endpoint that fills a\n\t\t * required FK before saving to OpenRegister) and MUST return the\n\t\t * created object (a truthy value) on success; return a falsy value to\n\t\t * signal failure. The returned object is used as the created result\n\t\t * (`@create` payload + dialog success). Throwing rejects with the\n\t\t * error surfaced in the form dialog. Edits are never routed here.\n\t\t *\n\t\t * `ctx` carries `{ register, schema, objectType, effectiveSchema }`\n\t\t * so a single handler can branch per schema.\n\t\t *\n\t\t * When absent, create behaviour is unchanged (store / self-store save).\n\t\t *\n\t\t * @type {((formData: object, ctx: { register: string, schema: (object|string), objectType: string, effectiveSchema: object }) => Promise<object>)|null}\n\t\t */\n\t\tcreateOverride: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add a View action to row actions. The action emits a\n\t\t * dedicated `view` event — independent of `row-click`. Bind `@view`\n\t\t * to handle \"open detail\" and `@row-click` to handle row click\n\t\t * (selection, expand, etc.); they may share a handler when the app\n\t\t * wants click-to-view, but they are conceptually distinct.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is FALSE: the\n\t\t * source's own open action navigates to the detail page, which is the\n\t\t * view. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowViewAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Where the View row action points, as `(row) => location | null`.\n\t\t * When it returns a location, View renders as a link to it (middle\n\t\t * click, copy link) and does not emit `view`; when it returns null,\n\t\t * View stays a button that emits `view`. CnPageRenderer sets it to\n\t\t * where a row click opens.\n\t\t */\n\t\tviewTo: {\n\t\t\ttype: Function,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add an Edit action to row actions.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is FALSE: a\n\t\t * source has no schema, so the form modal this action opens could only\n\t\t * ever render empty — the source declares its own Edit, which\n\t\t * navigates. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowEditAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Send the Edit row action to the record's detail page instead of\n\t\t * opening the edit modal, by emitting `edit-open` rather than showing\n\t\t * the form dialog.\n\t\t *\n\t\t * OFF by default, and `CnPageRenderer` no longer derives it: the host\n\t\t * binds `@edit-open` to the same navigation as a row click, so an Edit\n\t\t * that routes is an Edit that does what clicking the row does — the\n\t\t * split pane, or the detail page — while the form it names becomes\n\t\t * unreachable from the list.\n\t\t *\n\t\t * Set it when the modal genuinely cannot express the record and you\n\t\t * accept the duplication: it renders the schema's flat scalars only, so\n\t\t * related rows, sub-resources and tabs stay uneditable there.\n\t\t */\n\t\teditOpensDetail: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add a Copy action to row actions.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is whether the\n\t\t * source implements `copyRow` — without it, the copy dialog's confirm\n\t\t * has nowhere to go. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowCopyAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Whether to add a Delete action to row actions.\n\t\t *\n\t\t * On a named `entitySource` page the effective default is whether the\n\t\t * source implements `deleteRow` — without it, the delete dialog's\n\t\t * confirm has nowhere to go. Passing the prop explicitly still wins.\n\t\t */\n\t\tshowDeleteAction: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Field keys to exclude from the form dialog */\n\t\texcludeFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Field keys to include in the form dialog (whitelist mode) */\n\t\tincludeFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Per-field overrides passed to CnFormDialog */\n\t\tfieldOverrides: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** Whether to show the Cards/Table view toggle in the actions bar */\n\t\tshowViewToggle: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Show an inline search field in the actions bar (in addition to / instead\n\t\t * of the sidebar search). Fed from the manifest as `pages[].config.inlineSearch`.\n\t\t */\n\t\tinlineSearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * `false` draws no inline search in the actions bar, also in the board\n\t\t * look, which otherwise draws one on every index page. Fed from the\n\t\t * manifest as `pages[].config.search`.\n\t\t */\n\t\tsearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * The app config `@config.<key>` tokens resolve against, in quick-filter\n\t\t * filters and labels (`\"Residence @config.municipality\"`), as on the\n\t\t * dashboard and detail pages. Merged over a config an ancestor provides\n\t\t * on `cnAppConfig`. Manifest: `config.appConfig`.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tappConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Keep the \"Showing X of Y\" counter visible beside the inline search field,\n\t\t * after any `#after-search` controls (only relevant with `inlineSearch`,\n\t\t * which otherwise takes the counter's place). Fed from the manifest as\n\t\t * `pages[].config.showCountWithSearch`.\n\t\t */\n\t\tshowCountWithSearch: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Placeholder for the inline search field (manifest `config.searchPlaceholder`) */\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * A search placeholder per view (manifest `config.searchPlaceholderByView`),\n\t\t * `{ table?, cards?, board?, map? }`, through the app's translate: the\n\t\t * board view asks \"Zoek op zaak of verzoeker\", the map \"Filter op zaak of\n\t\t * aanvrager\" (DqWerkbord, DqZakenKaart). A view it does not name keeps\n\t\t * `searchPlaceholder`.\n\t\t *\n\t\t * @spec openspec/changes/search-placeholder-per-view/specs/index-page/spec.md#requirement-the-search-placeholder-can-differ-per-view\n\t\t */\n\t\tsearchPlaceholderByView: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Label for the cards view-toggle option (manifest `config.cardsLabel`, e.g. \"Tiles\") */\n\t\tcardsLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label for the table view-toggle option (manifest `config.tableLabel`, e.g. \"List\") */\n\t\ttableLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the cards view-toggle option (manifest `config.cardsIcon`) */\n\t\tcardsIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the table view-toggle option (manifest `config.tableIcon`) */\n\t\ttableIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label for the list view-toggle option (manifest `config.listLabel`, e.g. \"Rows\") */\n\t\tlistLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Deprecated, without effect: the toolbar draws no sort select. The\n\t\t * table sorts by its column headers, the list, card and map views by\n\t\t * the Sort section in the index sidebar.\n\t\t *\n\t\t * @deprecated\n\t\t */\n\t\tshowSortSelect: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The orders the index sidebar's Sort section offers in the list, card\n\t\t * and map views (manifest `config.sortSelectOptions`): `{ value, label,\n\t\t * order?, default?, source? }`, the order its `order` (an\n\t\t * `orderToSortKeys` form) or its `value` read as one. Without them the\n\t\t * section offers the sortable columns.\n\t\t *\n\t\t * An option may name an endpoint `source` (`{ url, params?, rowsPath?,\n\t\t * rowPath?, carry?, idPath?, annotate?, searchFields?, failedNote? }`)\n\t\t * for an order the server cannot sort by: choosing it lists that\n\t\t * endpoint's rows in their order, and the page's search, sidebar\n\t\t * filters and pager run over them in the browser. `default: true` opens\n\t\t * the page on it unless the address carries an order; a column header\n\t\t * click in the table view leaves it for that column's order. When the\n\t\t * endpoint fails the list falls back to the option's `order` and shows\n\t\t * `failedNote`. `carry` copies entry fields onto each row (a tier a\n\t\t * card's head pill reads); with `annotate` they also reach the rows of\n\t\t * every other order, matched on `idPath` (`id` by default). The option\n\t\t * is chosen by its value (`selectSortOption`), as a saved view's\n\t\t * `sortOption` does.\n\t\t *\n\t\t * @type {Array<{ value: string, label: string, order?: (string|object|Array), default?: boolean, source?: object }>}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tsortSelectOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Deprecated, without effect: the toolbar sort select is gone; the\n\t\t * Sort section in the index sidebar shows the current order.\n\t\t *\n\t\t * @deprecated\n\t\t */\n\t\tsortSelectValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The order a self-fetch page opens on when neither the address nor\n\t\t * `sortKeys`/`sortKey` gives one (manifest `config.defaultOrder`):\n\t\t * `\"-createdAt\"`, `\"priority:desc,title\"`, an `_order` map or a\n\t\t * `[{ key, order }]` list.\n\t\t *\n\t\t * @type {string|object|Array}\n\t\t */\n\t\tdefaultOrder: {\n\t\t\ttype: [String, Object, Array],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** MDI icon name for the list view-toggle option (manifest `config.listIcon`) */\n\t\tlistIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Field mapping for the default list-view rows (CnObjectRow). Overrides\n\t\t * the schema-configuration defaults. Fed from the manifest as\n\t\t * `pages[].config.listConfig`.\n\t\t *\n\t\t * @type {{ titleField?: string, subtitleField?: string, imageField?: string, iconField?: string, iconName?: string, badgeField?: string, badgeVariantField?: string, badgeVariant?: string, badgeColorMap?: object }}\n\t\t */\n\t\tlistConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Opt-in folder navigation pane (rendered left of the list). Selecting a\n\t\t * folder filters the list by `filterField` (via the self-fetch filter);\n\t\t * \"All\" clears it. Fed from the manifest as `pages[].config.folderSidebar`.\n\t\t *\n\t\t * - `source` — `'register'` (fetch the folder list from an OpenRegister\n\t\t * register/schema), `'field'` (distinct values of the current rows'\n\t\t * `field`), `'custom'` (use `folders`), or `'files'` (NC folders).\n\t\t * - `register` / `schema` — the OR source for `source:'register'`.\n\t\t * - `idField` / `nameField` — which folder object props map to the folder\n\t\t * id (the filter value) and display name. Dotted paths supported.\n\t\t * - `field` / `filterField` — the row field to group/filter by (filterField\n\t\t * defaults to `field`).\n\t\t * - `folders` — explicit folder list for `source:'custom'`.\n\t\t * - `allLabel` / `title` / `allowCreate` — passed to CnFolderSidebar.\n\t\t * - `scopeViews` — the view modes the scope's look (columns, title,\n\t\t * count line and the other scope keys) applies in, e.g. `[\"table\",\n\t\t * \"list\"]`; other views keep the page's own look. Default: every view.\n\t\t * - `pane` — `false` draws no pane: the scope still comes from the\n\t\t * deep-link filter (`?caseType=<id>`) and still applies its look, as\n\t\t * a list narrowed to one case type does without a folder column.\n\t\t *\n\t\t * A folder entry is also a SCOPE: it may carry `columns`, `defaultSort`\n\t\t * and `searchFields`, and while it is selected the list is shown that\n\t\t * way. `columns` takes the same shapes as the `columns` prop, and the\n\t\t * page's own `columns` still decides which columns this page has, so a\n\t\t * scope naming one the page does not declare is dropped rather than\n\t\t * rendered. A `source: 'register'` folder list reads the same three\n\t\t * keys off each row's `x-index` block, which the folder entry's own\n\t\t * value wins over, key by key.\n\t\t *\n\t\t * A folder entry may also carry `schema` (and optionally `register`,\n\t\t * defaulting to the page's own). While it is selected the page loads that\n\t\t * register and schema instead of its own, with that schema's columns,\n\t\t * fetch and live updates; \"All\", or a folder without `schema`, restores\n\t\t * the page's own. Switching clears the row selection and closes open\n\t\t * dialogs. A folder without `schema` filters the page's schema as before.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tfolderSidebar: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * KPI tiles above the list (manifest `config.statRow`): dashboard\n\t\t * widget definitions `{ id, type, title?, content }`, usually `stat`,\n\t\t * drawn in an auto-fit row (each at least 200px) in the listed order.\n\t\t * Types resolve like dashboard widgets: the app registry, then the\n\t\t * dashboard catalog. Empty by default.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-stat-row-above-the-list\n\t\t * @type {Array<object>}\n\t\t */\n\t\tstatRow: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Cards beside the list (manifest `config.sidePanel`): dashboard\n\t\t * widget definitions `{ id, type, title?, content, headerLink? }`\n\t\t * drawn in a 300px column right of the toolbar and the list. Empty\n\t\t * by default; below 1024px the column moves above the list.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-side-panel-beside-the-list\n\t\t * @type {Array<object>}\n\t\t */\n\t\tsidePanel: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Cards after the list (manifest `config.afterList`): dashboard widget\n\t\t * definitions `{ id, type, title?, content, headerLink? }` stacked\n\t\t * under the list in the listed order, the counterpart of `statRow`\n\t\t * above it. A query preset or a scope can set its own.\n\t\t *\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-an-index-page-can-draw-widgets-after-its-list\n\t\t * @type {Array<object>}\n\t\t */\n\t\tafterList: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The route query pairs that chose this page's query preset, set by\n\t\t * CnPageRenderer. They scope the list, so they show no removable\n\t\t * active-filter chip.\n\t\t *\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-the-query-that-chose-a-preset-is-not-a-removable-filter\n\t\t * @type {object|null}\n\t\t */\n\t\tfixedFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Filters the list opens with (manifest `config.defaultFilters`), as\n\t\t * `{ field: value | [values] }`: applied when the address names no\n\t\t * filter and no saved view, shown on the Active line and removed with\n\t\t * their chip or \"Clear all\" like any other filter. An address that\n\t\t * names a filter wins (DqContracten \"Status: actief en verlopend\").\n\t\t *\n\t\t * @spec openspec/changes/index-default-filters/specs/index-page/spec.md#requirement-an-index-page-can-open-with-removable-default-filters\n\t\t * @type {object|null}\n\t\t */\n\t\tdefaultFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Where a row carries the actions the server says this caller may run\n\t\t * on it: a dotted path, read off the rows the list already fetched, so\n\t\t * ninety rows cost one request rather than ninety.\n\t\t *\n\t\t * A row's menu is then the INTERSECTION of what this page declares and\n\t\t * what the server allows. An action the server allows but this page has\n\t\t * stopped declaring stays out, so a row cannot bring back a button the\n\t\t * page removed. An action the page declares but the server refuses\n\t\t * stays out too, and its reason is available from\n\t\t * `rowActionRefusal(row, action)`.\n\t\t *\n\t\t * An action matches by its id. The built-in View, Edit, Copy and Delete\n\t\t * also match OpenRegister's permission verbs: `read` permits View and\n\t\t * Copy, `update` permits Edit, `delete` permits Delete.\n\t\t *\n\t\t * A row carrying nothing at this path is a server that does not answer\n\t\t * about actions, and the page's declaration stands unchanged.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\trowActionField: {\n\t\t\ttype: String,\n\t\t\tdefault: DEFAULT_ROW_ACTION_FIELD,\n\t\t},\n\n\t\t/**\n\t\t * State indicators this page declares for its rows, handed straight to\n\t\t * CnDataTable. Each entry is `{ id, field, equals?, in?, icon, text,\n\t\t * tooltip? }`. The page declares which indicators exist; a record\n\t\t * cannot add one the page has not declared. A page declaring none\n\t\t * renders its rows as before. Fed from the manifest as\n\t\t * `pages[].config.rowIndicators`.\n\t\t *\n\t\t * @type {Array<object>}\n\t\t */\n\t\trowIndicators: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * How many declared indicators render on the row itself before the\n\t\t * rest move into the row menu. Fed from the manifest as\n\t\t * `pages[].config.rowIndicatorCap`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\trowIndicatorCap: {\n\t\t\ttype: Number,\n\t\t\tdefault: DEFAULT_ROW_INDICATOR_CAP,\n\t\t},\n\n\t\t/**\n\t\t * The fields a quick edit asks for, opened from a row without leaving\n\t\t * the list. Empty means no quick edit. The page names the fields; a\n\t\t * record cannot open a form on one the page did not name. Fed from the\n\t\t * manifest as `pages[].config.quickEditFields`.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tquickEditFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Where a record lists the fields this caller may write. A field the\n\t\t * page named that is not in that list renders read-only rather than\n\t\t * missing, so a person sees the value and learns it is not theirs to\n\t\t * change. A row carrying nothing there leaves every named field\n\t\t * editable.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\twritableField: {\n\t\t\ttype: String,\n\t\t\tdefault: '@self.writableFields',\n\t\t},\n\n\t\t/**\n\t\t * Saved view ids this page renders as tabs instead of as entries in the\n\t\t * views control. A view appears in one place or the other, never both.\n\t\t * An id naming a view that no longer exists produces no tab.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tviewTabs: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Which saved views show how many records they match: `true` for all\n\t\t * of them (tabs and the entries in the views control), or a list of\n\t\t * view ids. Off by default, so no count request is made. A quick\n\t\t * filter opts in on its own entry with `showCount: true`.\n\t\t *\n\t\t * @type {boolean|string[]}\n\t\t */\n\t\tviewCounts: {\n\t\t\ttype: [Boolean, Array],\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * The teams this person may claim. The instance decides this list; it\n\t\t * is the membership side of `claimedTeams`.\n\t\t *\n\t\t * @type {Array<string|object>}\n\t\t */\n\t\tofferedTeams: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The teams this person stored as claimed, read as a personal\n\t\t * preference alongside the others. It is narrowed to `offeredTeams`, so\n\t\t * a team they claimed before it was taken away is passed over rather\n\t\t * than honoured.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tclaimedTeams: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The field carrying a record's DERIVED priority, and the order its\n\t\t * values rank in, lowest first. The list reads the value and sorts on\n\t\t * it; it never computes one. A record with no priority sorts after\n\t\t * every ranked one, in both directions, and stays in the list.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tpriorityField: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The priority values in rank order, lowest first, e.g.\n\t\t * `['low', 'medium', 'high']`. A value outside this list is unranked.\n\t\t *\n\t\t * @type {string[]}\n\t\t */\n\t\tpriorityLevels: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Offer the list's keyboard shortcuts. Every one of them is also listed\n\t\t * in the command palette and on the help key, because a shortcut nobody\n\t\t * can find does not count.\n\t\t */\n\t\tlistShortcuts: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Per-column filters in the table header: a filter button on every\n\t\t * column that can filter, opening a small panel that fits the column\n\t\t * (checkboxes, yes/no/any, from and to, a searchable reference list).\n\t\t * On by default; a column opts out with `filterable: false`, a page\n\t\t * with `pages[].config.headerFilters: false`. Filters write into the\n\t\t * same active-filter map as the facet sidebar, so they persist in the\n\t\t * route query and reach the same OpenRegister query parameters.\n\t\t *\n\t\t * @spec openspec/changes/table-header-sort-and-filter/specs/cn-data-table/spec.md#requirement-every-backed-column-filters-from-its-header\n\t\t */\n\t\theaderFilters: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Show a filter menu (funnel button) in the table header, above the\n\t\t * row-actions column. Its menu lists every enum/badge column's values as\n\t\t * toggleable facet filters — a compact alternative to the facet sidebar.\n\t\t * Under the board look, on a page with no filter sidebar, it is the\n\t\t * toolbar's labelled Filter button instead (row 1, before the view switch).\n\t\t * Fed from the manifest as `pages[].config.filterMenu`.\n\t\t */\n\t\tfilterMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Show a column menu (columns button) in the table header, above the\n\t\t * row-actions column. Its menu lists every governed column as a toggleable\n\t\t * checkbox — a compact, in-table alternative to the sidebar's Columns tab,\n\t\t * so the sidebar space can be reclaimed. Fed from the manifest as\n\t\t * `pages[].config.columnMenu`.\n\t\t */\n\t\tcolumnMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether the refresh action is currently in progress */\n\t\trefreshing: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Whether to auto-subscribe to live collection updates in self-fetch\n\t\t * mode. Defaults to true. When `register` + `schema` are set (and no\n\t\t * `objects` prop is passed), the page subscribes to the collection's\n\t\t * `or-collection-{register}-{schema}` scope on mount and refetches\n\t\t * (coalesced — events are hints) when an update event arrives; the\n\t\t * subscription is released on unmount. Set `false` (manifest:\n\t\t * `config.subscribe: false`) for static / read-once views. No-op in\n\t\t * consumer-managed mode (an `objects` prop was passed) and on stores\n\t\t * without live-updates support.\n\t\t *\n\t\t * @type {boolean}\n\t\t */\n\t\tsubscribe: { // eslint-disable-line vue/no-unused-properties -- read by useSelfFetchList.js off the props object, which this rule does not follow.\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Whether the refresh action is disabled (e.g. when required selections are missing) */\n\t\trefreshDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether the Add button is disabled (e.g. when required selections are missing) */\n\t\taddDisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Whether to show the Add button in the actions bar */\n\t\tshowAdd: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Store instance for automatic save integration. When provided alongside\n\t\t * objectType, the form dialog saves directly to the store instead of\n\t\t * emitting create/edit events. The object type must already be registered\n\t\t * in the store via registerObjectType() before passing the store here.\n\t\t */\n\t\tstore: { type: Object, default: null },\n\t\t/**\n\t\t * Object type slug for store integration (e.g. `${registerId}-${schemaId}`).\n\t\t * Required when store is set — a console warning is emitted if missing.\n\t\t */\n\t\tobjectType: { type: String, default: '' },\n\t\t/**\n\t\t * Manifest-driven sidebar configuration. When set with\n\t\t * `enabled: true`, CnIndexPage auto-mounts an embedded\n\t\t * CnIndexSidebar wired to the page's schema, search, columns,\n\t\t * and facet props. When unset or `enabled: false`, the\n\t\t * legacy slot-based interface is preserved — consumers\n\t\t * mount their own CnIndexSidebar at the App.vue level.\n\t\t *\n\t\t * Shape:\n\t\t * - `enabled` (boolean) — **existence gate**. Whether the\n\t\t * page configures an embedded sidebar at all. When `false`\n\t\t * or unset, the auto-mount path is bypassed (no\n\t\t * `<CnIndexSidebar>` rendered) and the consumer's slot\n\t\t * pattern stays active.\n\t\t * - `show` (boolean, default `true`) — **visibility gate**.\n\t\t * Even when `enabled: true`, `show: false` SUPPRESSES\n\t\t * rendering for this page so manifest authors can hide\n\t\t * the sidebar declaratively without removing the config.\n\t\t * Distinct from `enabled` so config can be retained\n\t\t * (e.g. for a watcher / responsive layout) while the\n\t\t * visible surface is hidden.\n\t\t * - `columnGroups` (array) — extra column groups beyond schema + Metadata.\n\t\t * - `facets` (object) — live facet data { fieldName: { values: [...] } }.\n\t\t * - `showMetadata` (boolean) — include the built-in Metadata column group (defaults true).\n\t\t * - `search` (object) — search-related label overrides forwarded to CnIndexSidebar.\n\t\t *\n\t\t * @type {{ enabled: boolean, show?: boolean, columnGroups?: Array, facets?: object, showMetadata?: boolean, search?: object }|null}\n\t\t */\n\t\tsidebar: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Current search term (forwarded to the embedded sidebar when sidebar.enabled). */\n\t\tsearchValue: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Currently visible column keys (forwarded to the embedded sidebar). */\n\t\tvisibleColumns: {\n\t\t\ttype: Array,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** Currently active facet filters: { fieldName: [values] } (forwarded to the embedded sidebar). */\n\t\tactiveFilters: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/**\n\t\t * Effective register slug for the page. Forwarded as a prop to\n\t\t * the resolved card component (when `cardComponent` is set) so\n\t\t * bespoke card UIs can match the schema → register pair.\n\t\t *\n\t\t * Manifest-driven path: `pages[].config.register` flows in via\n\t\t * CnPageRenderer's `v-bind=\"resolvedProps\"` spread.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tregister: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Optional name of a consumer-provided card component (registered\n\t\t * in the `customComponents` registry on `CnAppRoot`) to render in\n\t\t * place of the default `CnObjectCard` when the page is in\n\t\t * card-grid view mode.\n\t\t *\n\t\t * Resolution priority (highest first):\n\t\t * 1. The parent's `#card` scoped slot (always wins).\n\t\t * 2. The component resolved from `cardComponent` against the v2\n\t\t * `registry` (any kind carrying a `component`), then the legacy\n\t\t * customComponents map.\n\t\t * 3. The library default (`CnObjectCard`).\n\t\t *\n\t\t * Unknown names log `console.warn` once and fall back to the\n\t\t * default so a misconfigured manifest never blanks the grid.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tcardComponent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Name of a custom row component for list view, resolved against the v2\n\t\t * `registry` and then the legacy customComponents map (manifest\n\t\t * `pages[].config.listComponent`).\n\t\t * Same resolution priority as `cardComponent`: the `#list-item` slot\n\t\t * wins, then this component, then the default `CnObjectRow`. Unknown\n\t\t * names warn once and fall back to the default.\n\t\t *\n\t\t * @type {string}\n\t\t */\n\t\tlistComponent: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Optional explicit customComponents registry. When set, this\n\t\t * overrides the registry injected from `CnAppRoot` via\n\t\t * `cnCustomComponents`. Provided primarily so unit tests can\n\t\t * pass a registry without mounting `CnAppRoot`.\n\t\t *\n\t\t * Used by:\n\t\t * - `cardComponent` resolution (REQ-MCI from manifest-card-index)\n\t\t * - `actions[].handler` registry name resolution (REQ-MAD-3 from\n\t\t * manifest-actions-dispatch — handler funcs called on row-action click)\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tcustomComponents: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Manifest-driven page-level actions rendered inside the\n\t\t * NcActions overflow dropdown between Refresh and the\n\t\t * `#action-items` slot. Each entry is\n\t\t * `{ id, label, icon?, handler?, route?, disabled? }`. The\n\t\t * `handler` field mirrors the row-level\n\t\t * `actions[].handler` pattern: a function, the keyword\n\t\t * `'navigate'`, `'emit'`, `'none'`, or a string name looked\n\t\t * up in the v2 `registry` (a `kind: 'handler'` entry) and\n\t\t * then in the legacy `customComponents`. The page\n\t\t * dispatches the resolved handler via `onHeaderAction` AND\n\t\t * (unless the handler is the `'none'` keyword) emits\n\t\t * `@header-action({ action: id, id })`.\n\t\t *\n\t\t * An entry with `href` instead renders as a real link and is never\n\t\t * dispatched or emitted: an absolute `http(s)`, `mailto:`, `tel:` or\n\t\t * `//host/...` URL is used as written, an instance path (leading `/`) goes through\n\t\t * `generateUrl()`. `target: '_blank'` opens it in a new tab.\n\t\t *\n\t\t * Reserved ids (those used by built-ins on the bar — `refresh`,\n\t\t * `import`, `export`, `copy`, `delete`) are dropped from the\n\t\t * merged list with a `console.warn`.\n\t\t *\n\t\t * @type {Array<{ id: string, label: string, icon?: string, handler?: string|(() => void), route?: string, href?: string, target?: ('_blank'|'_self'), disabled?: boolean }>}\n\t\t */\n\t\theaderActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Declarative bulk actions for the contextual selection strip.\n\t\t *\n\t\t * The strip has had a `#selection-actions` slot for a while, but a slot\n\t\t * can only be filled by a hand-written host component — so a page\n\t\t * declared in an app manifest could carry row actions and header\n\t\t * actions and never a bulk one. This prop is the missing vocabulary.\n\t\t *\n\t\t * Handler resolution mirrors `headerActions[]`, with one difference\n\t\t * that is the whole point: the handler is called with the SELECTION.\n\t\t * A bulk handler that has to go and find out what was selected is a\n\t\t * bulk handler waiting to disagree with the strip that invoked it.\n\t\t *\n\t\t * Reserved ids (`copy`, `delete`) are dropped with a warning — the\n\t\t * strip already ships those two as built-ins, and a second button with\n\t\t * the same name doing something else is worse than no button.\n\t\t *\n\t\t * @type {Array<{ id: string, label: string, icon?: string, handler?: string|((scope: { actionId: string, selectedIds: Array<string>, count: number }) => void), target?: string, props?: object, disabled?: boolean }>}\n\t\t */\n\t\tbulkActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * Active organisation entity (multi-tenancy-context). When\n\t\t * bound from a tenant-switcher higher in the tree, CnIndexPage\n\t\t * watches it and calls `store.setActiveTenantOrganisation(uuid)`\n\t\t * so the next fetchCollection() stamps the new tenant header\n\t\t * and the in-memory caches are cleared. When the prop is unset\n\t\t * the legacy single-tenant behaviour is preserved exactly.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tactiveOrganisation: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * When set, adds a Documentation entry to the Actions overflow\n\t\t * (after Refresh). Opens the URL in a new tab. Empty hides it.\n\t\t */\n\t\tdocumentationUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Label for the Documentation overflow entry. */\n\t\tdocumentationLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: [\n\t\t'action',\n\t\t'add',\n\t\t'apply-view',\n\t\t'board-move',\n\t\t'board-column-field-change',\n\t\t'bulk-action',\n\t\t'clear-filters',\n\t\t'columns-change',\n\t\t'quick-edit-save',\n\t\t'configure',\n\t\t'content-search',\n\t\t'copy',\n\t\t'create',\n\t\t'delete',\n\t\t'edit-open',\n\t\t'filter-change',\n\t\t'folder-change',\n\t\t'folder-create',\n\t\t'header-action',\n\t\t'mass-copy',\n\t\t'open-modal',\n\t\t'mass-delete',\n\t\t'mass-export',\n\t\t'mass-import',\n\t\t'page-changed',\n\t\t'page-size-changed',\n\t\t'quick-filter-change',\n\t\t'refresh',\n\t\t'row-click',\n\t\t'row-aux-click',\n\t\t'search',\n\t\t'select',\n\t\t'sort',\n\t\t'sort-change',\n\t\t'view',\n\t\t'view-mode-change',\n\t\t'view-overrides',\n\t\t'split-close',\n\t\t'split-saved',\n\t\t'manual-order-change',\n\t],\n\n\tsetup(props) {\n\t\t// The look this page is drawn in: its own `look` prop, else the\n\t\t// `cnLook` CnAppRoot (or the page renderer) provides.\n\t\tconst { isBoard: isBoardLook, lookClass } = useLook(props)\n\n\t\tconst {\n\t\t\tisOpen: contextMenuOpen,\n\t\t\ttargetItem: contextMenuRow,\n\t\t\topen: openContextMenu,\n\t\t\tclose: closeContextMenu,\n\t\t} = useContextMenu()\n\n\t\t// The selected folder's own `{ schema, register? }`, or null. Written by\n\t\t// onFolderSelect(); useSelfFetchList turns it into the loaded object type.\n\t\tconst activeFolderSchema = ref(null)\n\n\t\tconst {\n\t\t\tisSelfFetch,\n\t\t\tlist,\n\t\t\tselfObjectStore,\n\t\t\tselfObjectType,\n\t\t\tactiveQuickFilterIndex,\n\t\t\tselectedQuickFilterIndices,\n\t\t\tcontentSearch,\n\t\t\tselfFetchTokenCtx,\n\t\t\tinitialQueryFilterKeys,\n\t\t} = useSelfFetchList(props, getCurrentInstance(), inject, { activeFolderSchema })\n\n\t\t// The sidebar's chosen values on a NAMED-SOURCE page. Self-fetch keeps\n\t\t// its own in `useSelfFetchList`; a named source had nowhere to put\n\t\t// them, so `activeFilters` was a prop only a consumer could fill and a\n\t\t// manifest page's sidebar rendered controls that narrowed nothing.\n\t\t//\n\t\t// Seeded from the route query so a shared link lands filtered, the\n\t\t// same way `_order` and a deep-link filter already do for self-fetch.\n\t\t// The page a paging named source shows: page 1 at the source config's\n\t\t// `limit` (20 by default), moved by the pager.\n\t\tconst namedPageSize = Number(props.sourceConfig && props.sourceConfig.limit) > 0 ? Number(props.sourceConfig.limit) : 20\n\t\tconst namedPaging = ref({ page: 1, limit: namedPageSize })\n\t\tconst namedActiveFilters = ref(namedFiltersWithDefaults(getCurrentInstance(), props))\n\t\t// The search term on a named source that searches (`searchParam`).\n\t\tconst namedSearchTerm = ref('')\n\t\t// The order a named source shows its rows in: sorted on the page\n\t\t// (`sortsRows`) or asked of the server (`sortParam`), starting from\n\t\t// the page's `sortKey` / `sortOrder`.\n\t\tconst namedSort = ref({ key: props.sortKey || '', order: props.sortOrder === 'desc' ? 'desc' : 'asc' })\n\n\t\tconst {\n\t\t\tisNamedSource,\n\t\t\tnamedSource,\n\t\t\tnamedRows,\n\t\t\tnamedLoading,\n\t\t\tnamedQuickFilters,\n\t\t\tnamedReload,\n\t\t} = useNamedSource(props, { activeQuickFilterIndex, activeFilters: namedActiveFilters, paging: namedPaging, searchTerm: namedSearchTerm, sort: namedSort })\n\n\t\treturn {\n\t\t\tisBoard: isBoardLook,\n\t\t\tisBoardLook,\n\t\t\tlookClass,\n\t\t\tisNamedSource,\n\t\t\tnamedSource,\n\t\t\tnamedRows,\n\t\t\tnamedLoading,\n\t\t\tnamedQuickFilters,\n\t\t\tnamedReload,\n\t\t\tnamedActiveFilters,\n\t\t\tnamedPaging,\n\t\t\tnamedSearchTerm,\n\t\t\tnamedSort,\n\t\t\tcontextMenuOpen,\n\t\t\tcontextMenuRow,\n\t\t\topenContextMenu,\n\t\t\tcloseContextMenu,\n\t\t\tisSelfFetch,\n\t\t\tlist,\n\t\t\tselfObjectStore,\n\t\t\tselfObjectType,\n\t\t\tactiveQuickFilterIndex,\n\t\t\tselectedQuickFilterIndices,\n\t\t\tcontentSearch,\n\t\t\tactiveFolderSchema,\n\t\t\tselfFetchTokenCtx,\n\t\t\tinitialQueryFilterKeys,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * The chosen sort option that names an endpoint `source`, its rows,\n\t\t\t * their state ('idle' | 'loading' | 'ready' | 'failed') and the page\n\t\t\t * shown. The value is '' while an ordinary order is chosen.\n\t\t\t */\n\t\t\tsortSource: { value: '', rows: [], state: 'idle', page: 1 },\n\t\t\tcurrentViewMode: this.viewMode,\n\t\t\t/** Whether `?_view=` names a mode the page did not offer yet, to open once it does. */\n\t\t\trouteViewPending: false,\n\t\t\t/** The column field the reader picked in the board's column switch; '' = the default. */\n\t\t\tboardColumnFieldChoice: '',\n\t\t\t/** The rows a reference column field is built from, by field. */\n\t\t\tboardRefs: {},\n\t\t\tliveHandles: [],\n\t\t\tliveTimer: null,\n\t\t\tliveUnwatch: null,\n\t\t\t/** The options of the board's narrowing select (`board.narrow`). */\n\t\t\tboardNarrowOptions: [],\n\t\t\t/** The menu entries CnActionButtons reports for the dialog header actions, each with its `run()`. */\n\t\t\tdialogHeaderRuns: [],\n\t\t\t/** The visible calendar window `{ rangeStart, rangeEnd }` (ISO dates), or null outside calendar mode. */\n\t\t\tcalendarRange: null,\n\t\t\t/** The page size to restore when leaving calendar mode. */\n\t\t\tcalendarPrevPageSize: null,\n\t\t\t// The table's page size while the board view holds the list at\n\t\t\t// BOARD_PAGE_SIZE; restored on leaving the board.\n\t\t\tboardPrevPageSize: this.viewMode === 'board' ? ((this.pagination && this.pagination.limit) || 20) : null,\n\t\t\t/** Resolved labels of reference columns: `{ [columnKey]: { [id]: label|null } }`. */\n\t\t\trefLabels: {},\n\t\t\t/** Colour and icon names of the records badge columns point at: `{ [columnKey]: { [id]: { color, icon } } }`. */\n\t\t\trefLooks: {},\n\t\t\t/** Count per tab-strip index, for the entries that asked for one; null = none. */\n\t\t\ttabCounts: null,\n\t\t\t// The counts of the `filterStrip` pills, by pill key ('all', 'v0', ...).\n\t\t\tfilterStripCounts: null,\n\t\t\t/** The `countFrom` counts of the manifest page tabs, by index. */\n\t\t\tpageTabCounts: {},\n\t\t\t/** The `headerMetaCounts` totals, by name; a failed one is null. */\n\t\t\theaderMetaCountValues: {},\n\t\t\t/** The row the pointer is on in the map list, by key; '' for none. */\n\t\t\tactiveMapKey: '',\n\t\t\t/** The rows `mapConfig.markerColor.source` points at, or null before they load. */\n\t\t\tmapColorRefs: null,\n\t\t\t/** The page size to restore when leaving a map that plots every row. */\n\t\t\tmapPrevPageSize: this.viewMode === 'map' && mapPlotAllLimitOf(this.mapConfig) > 0 ? ((this.pagination && this.pagination.limit) || 20) : null,\n\t\t\t/** The tabs `quickFiltersFrom` produced, or null before they load. */\n\t\t\tgeneratedQuickFilters: null,\n\t\t\t/** Count per saved-view id, for the views control; null = none. */\n\t\t\tsavedViewCounts: null,\n\t\t\t// The id (or slug) of the saved view that is applied; its chip shows selected under the board look.\n\t\t\tappliedSavedViewId: '',\n\t\t\t// The sort option the applied view's `overrides.sortOption` selected, so leaving the view can undo it.\n\t\t\tviewSortOption: '',\n\t\t\t// The applied view's filters as one comparable key, so the address keeps naming the view until they change.\n\t\t\tappliedViewFiltersKey: '',\n\t\t\t/**\n\t\t\t * The non-`_` query keys this page owns, i.e. may clear on the next\n\t\t\t * persist. Seeded with what it adopted from the query on load, and\n\t\t\t * replaced by what it writes; a key it never claimed is somebody\n\t\t\t * else's and is left in the address bar untouched.\n\t\t\t *\n\t\t\t * @type {Array<string>}\n\t\t\t */\n\t\t\tpersistedFilterKeys: [...(this.initialQueryFilterKeys || [])],\n\t\t\tinternalSelectedIds: [...this.selectedIds],\n\t\t\t// Rows seen in a collectionUrl list, so a selection kept across pages still resolves its own pair.\n\t\t\tcollectionRowsById: markRaw(new Map()),\n\t\t\t// Folder-sidebar state: selected folder id + the register-fetched list.\n\t\t\tselectedFolderId: null,\n\t\t\t/**\n\t\t\t * The grouping field's facet as last seen with NO folder selected:\n\t\t\t * the whole set of folders, kept on screen while one is selected.\n\t\t\t *\n\t\t\t * @type {Array<object>}\n\t\t\t */\n\t\t\tfolderSidebarAllValues: [],\n\t\t\tfolderRegisterList: [],\n\t\t\t/** The Nextcloud groups a `folderSidebar.source: 'groups'` pane lists. */\n\t\t\tfolderGroupList: [],\n\t\t\t// `x-index` blocks read off the schema rows a `source: 'register'`\n\t\t\t// folder list was built from, keyed by folder id. The layout a case\n\t\t\t// type carries travels with the record rather than being restated\n\t\t\t// in every manifest that lists it.\n\t\t\tfolderRowLayouts: {},\n\t\t\t/** The row the keyboard is on, or -1. */\n\t\t\tfocusedRowIndex: -1,\n\t\t\t// The row the context menu shows: set on open, never cleared on close, so a closing menu keeps its entries and a late close cannot null a reopened one.\n\t\t\tcontextMenuShownRow: null,\n\t\t\t/** The row a quick edit is open on, or null. */\n\t\t\tquickEditRow: null,\n\t\t\t/** The row as the server holds it, after a stale save. */\n\t\t\tquickEditServerRow: null,\n\t\t\t/** Whether the shortcut help sheet is open. */\n\t\t\tshowShortcutHelp: false,\n\t\t\t// Mass action dialogs\n\t\t\tshowMassDeleteDialog: false,\n\t\t\tshowMassCopyDialog: false,\n\t\t\tshowExportDialog: false,\n\t\t\tshowImportDialog: false,\n\t\t\t// Single-object dialogs\n\t\t\tshowSingleDeleteDialog: false,\n\t\t\tshowSingleCopyDialog: false,\n\t\t\tshowFormDialogVisible: false,\n\t\t\t// Dialog targets\n\t\t\tactionTargetItem: null,\n\t\t\teditItem: null,\n\t\t\t// The pair and schema of a row edited outside the page's own pair (collectionUrl).\n\t\t\trowFormTarget: null,\n\t\t\trowFormSchema: null,\n\t\t\t// Drives the Actions-menu Refresh spinner during a self-fetch\n\t\t\t// refresh, where the host has no promise to bind `:refreshing` to.\n\t\t\tinternalRefreshing: false,\n\t\t\t// Search/Columns sidebar open state. Defaults closed so the page\n\t\t\t// content (table / cards) starts at the top and fills the width;\n\t\t\t// opened on demand via the actions-bar toggle.\n\t\t\tsidebarOpen: false,\n\t\t\t/** The sidebar tab to show; follows the user's own tab changes. */\n\t\t\tsidebarActiveTab: '',\n\t\t\t// Saved views (saved-views-ui): the fetched view list, its\n\t\t\t// loading flag, the save-dialog toggle, and the view awaiting\n\t\t\t// delete confirmation.\n\t\t\tsavedViews: [],\n\t\t\tsavedViewsLoading: false,\n\t\t\tshowSaveViewDialog: false,\n\t\t\tviewPendingDelete: null,\n\t\t\t/** An `api-call` header action waiting on its confirmation, or null. */\n\t\t\theaderApiCallPending: null,\n\t\t\t/** The own view whose audience is being changed (CnSavedViewShareDialog), or null. */\n\t\t\tviewPendingShare: null,\n\t\t\t/** The own view being renamed or re-filtered (CnSavedViewEditDialog), or null. */\n\t\t\tviewPendingEdit: null,\n\t\t\t/** The view whose presentation is being changed (CnSavedViewPresentationDialog), or null. */\n\t\t\tviewPendingPresentation: null,\n\t\t\t// Split view (case-page-and-list-as-a-place). `splitRowPatches` holds\n\t\t\t// records saved in the pane, keyed by row id, so a save lands on the\n\t\t\t// row without refetching the page and losing the scroll position.\n\t\t\t// `splitViewportWidth` is measured rather than guessed, so the narrow\n\t\t\t// fallback follows a window resize and not only a reload.\n\t\t\tsplitRowPatches: {},\n\t\t\t// Measured here rather than in `mounted`, so the FIRST render is\n\t\t\t// already the right layout. Measuring after the mount rendered\n\t\t\t// the split pane once on a phone and then swapped it for the full\n\t\t\t// page, which reads as the page flickering on every open.\n\t\t\tsplitViewportWidth: (typeof window !== 'undefined' && Number.isFinite(window.innerWidth)) ? window.innerWidth : 0,\n\t\t\tsplitScrollTop: 0,\n\t\t\t// Manual order: the row ids this person dragged into an order, read\n\t\t\t// from and written to their own preferences. Never on the records.\n\t\t\tmanualOrderIds: [],\n\t\t\t// Personal column layout: `{ columns, pinned }` read from preferences\n\t\t\t// or set by the sidebar, and the columns of an applied saved view.\n\t\t\tpersonalLayout: null,\n\t\t\tappliedViewColumns: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The quick-filter placement in the current view: its entry in\n\t\t * `quickFilterPlacementByView`, else `quickFilterPlacement`.\n\t\t *\n\t\t * @spec openspec/changes/index-quick-filter-placement-per-view/specs/index-page/spec.md#requirement-the-quick-filter-placement-can-differ-per-view\n\t\t * @return {''|'toolbar'|'row'|'active'} The placement.\n\t\t */\n\t\teffectiveQuickFilterPlacement() {\n\t\t\tconst byView = this.quickFilterPlacementByView\n\t\t\tconst own = byView && typeof byView === 'object' ? byView[this.currentViewMode] : undefined\n\t\t\treturn ['', 'toolbar', 'row', 'active'].includes(own) ? own : this.quickFilterPlacement\n\t\t},\n\n\t\t/**\n\t\t * Whether the quick-filter tabs are drawn in the toolbar row: there are\n\t\t * tabs, and the placement is neither a row of their own nor the Active\n\t\t * line only.\n\t\t *\n\t\t * @spec openspec/changes/index-toolbar-start-and-active-only-quick-filters/specs/index-page/spec.md#requirement-quick-filters-can-show-only-on-the-active-line\n\t\t * @return {boolean} True when the toolbar draws the tabs.\n\t\t */\n\t\tquickFilterTabsInToolbar() {\n\t\t\treturn Boolean(this.tabStripEntries && this.tabStripEntries.length > 0) && !['row', 'active'].includes(this.effectiveQuickFilterPlacement)\n\t\t},\n\n\t\t/**\n\t\t * Whether the page draws cards beside its list (`sidePanel`).\n\t\t *\n\t\t * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-side-panel-beside-the-list\n\t\t * @return {boolean}\n\t\t */\n\t\thasSidePanel() {\n\t\t\treturn Array.isArray(this.sidePanel) && this.sidePanel.length > 0\n\t\t},\n\n\t\t/**\n\t\t * The empty-state copy run through the host translate function\n\t\t * (the injected `cnTranslate`, identity by default). Only this\n\t\t * component's OWN `NcEmptyContent` uses it — the raw `emptyText`\n\t\t * keeps flowing to CnDataTable / CnObjectList / CnCardGrid, which\n\t\t * translate at their own render boundary, so the string is never\n\t\t * run through the translator twice.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tresolvedEmptyText() {\n\t\t\tconst fn = typeof this.cnTranslate === 'function' ? this.cnTranslate : (k) => k\n\t\t\treturn this.emptyText ? fn(this.emptyText) : this.emptyText\n\t\t},\n\n\t\t/**\n\t\t * The personal-lens reports of the list on screen: the store's copy\n\t\t * of the latest response in self-fetch mode, else the `lenses` prop.\n\t\t *\n\t\t * @return {object}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-a-list-response-carries-the-report-of-the-lenses-it-was-asked-for\n\t\t */\n\t\teffectiveLenses() {\n\t\t\tif (this.isNamedSource) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\treturn (this.list.lenses && this.list.lenses.value) || {}\n\t\t\t}\n\t\t\treturn this.lenses || {}\n\t\t},\n\n\t\t/**\n\t\t * Why the list is empty when a personal lens could not answer (the\n\t\t * audit trail is off, nobody is logged in, the history could not be\n\t\t * read), or `''` to keep the generic empty text.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/lens-says-why-it-is-empty/specs/personal-lens-availability/spec.md#requirement-an-unavailable-lens-explains-its-empty-page\n\t\t */\n\t\tlensReasonText() {\n\t\t\tconst text = lensUnavailableText(this.effectiveLenses, this.lensReasonTexts)\n\t\t\tif (!text) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst fn = typeof this.cnTranslate === 'function' ? this.cnTranslate : (k) => k\n\t\t\treturn fn(text)\n\t\t},\n\n\t\t/**\n\t\t * Whether the host manifest editor is in edit mode (unwraps the injected\n\t\t * `cnEditingBody`, which may be a Vue ref or a plain boolean). Drives the\n\t\t * in-header config cog.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisEditMode() {\n\t\t\tconst e = this.cnEditingBody\n\t\t\treturn !!(e && typeof e === 'object' && 'value' in e ? e.value : e)\n\t\t},\n\n\t\t/**\n\t\t * The same map as `effectiveCustomComponents`, under the name the\n\t\t * header-action and bulk-action paths have always used. One of the two\n\t\t * computeds has to be the other, or a change to the resolution order\n\t\t * lands on half the surfaces.\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tresolvedCustomComponents() {\n\t\t\treturn this.effectiveCustomComponents\n\t\t},\n\n\t\t/**\n\t\t * Whether a row click opens the row rather than selecting it:\n\t\t * `rowClickToView` is set AND something can open it (a `row-click`\n\t\t * listener, or a named source that routes its own rows). Otherwise a\n\t\t * click on a selectable page selects, so it is never dead.\n\t\t *\n\t\t * `$.vnode.props` is not reactive, so a `row-click` listener attached\n\t\t * or removed after mount does not re-evaluate this.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\trowClickOpens() {\n\t\t\tif (!this.rowClickToView) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.isNamedSource && (this.rowRoute\n\t\t\t\t|| typeof this.namedSource?.openRow === 'function'\n\t\t\t\t|| this.namedSource?.detailRoute)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn !!this.$.vnode.props?.onRowClick\n\t\t},\n\n\t\t/**\n\t\t * Where a table row links to, so the row is a real link (Tab, screen\n\t\t * reader, new tab): the `viewTo` target, when a row click opens it.\n\t\t *\n\t\t * @return {((row: object) => (object|null))|null} The row link target, or null.\n\t\t */\n\t\trowLinkRoute() {\n\t\t\tif (!this.rowClickOpens || typeof this.viewTo !== 'function') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (row) => this.viewTo(row) || null\n\t\t},\n\n\t\t/**\n\t\t * Merged page-level header actions: drops reserved ids and\n\t\t * resolves declarative `handler` keywords (`navigate` / `emit`\n\t\t * / `none` / registry name) to either a function or\n\t\t * no-handler (emit-only) entries. Function-typed handlers are\n\t\t * passed through untouched. The `none` keyword sets\n\t\t * `_dispatchSuppress: true` and provides a no-op function so\n\t\t * the bar still shows a clickable item.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\t/**\n\t\t * The header actions that open a dialog: `type: \"open-form\"` (the\n\t\t * schema-driven create form, as the navigation's primary action opens\n\t\t * it) or `type: \"open-modal\"`, without a `handler` or `href` of their own.\n\t\t * Reserved ids are left out, as in `mergedHeaderActions`. A modal\n\t\t * opened from here also gets the list's active filters as\n\t\t * `activeFilters`, so it knows what the list shows (the pipeline a\n\t\t * board is narrowed to); the action's own props win.\n\t\t *\n\t\t * @spec openspec/changes/index-header-open-form/specs/index-header/spec.md#requirement-an-index-header-action-can-open-the-create-form\n\t\t * @spec openspec/changes/pl4-board-card-actions/specs/pl4-board-card-actions/spec.md#requirement-a-header-modal-knows-the-lists-filters\n\t\t * @return {Array<object>}\n\t\t */\n\t\tdialogHeaderActions() {\n\t\t\tconst reserved = new Set(['refresh', 'import', 'export', 'copy', 'delete'])\n\t\t\treturn (this.headerActions || []).filter((entry) => entry\n\t\t\t\t&& typeof entry.id === 'string'\n\t\t\t\t&& !reserved.has(entry.id)\n\t\t\t\t&& (entry.handler === undefined || entry.handler === null || entry.handler === '')\n\t\t\t\t&& !entry.href\n\t\t\t\t&& (entry.type === 'open-form' || entry.type === 'open-modal'))\n\t\t\t\t.map((entry) => (entry.type === 'open-modal'\n\t\t\t\t\t? { ...entry, props: { activeFilters: { ...this.effectiveActiveFilters }, ...(entry.props || {}) } }\n\t\t\t\t\t: entry))\n\t\t},\n\n\t\t/**\n\t\t * The header actions without reserved ids, and without an `adminOnly`\n\t\t * one for a viewer who is not an administrator, each through\n\t\t * `resolveHeaderHandler` (a manifest `href` entry becomes a link with\n\t\t * `_dispatchSuppress`, so the page neither runs nor emits it).\n\t\t *\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-a-header-action-can-be-offered-to-administrators-only\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmergedHeaderActions() {\n\t\t\tconst reserved = new Set(['refresh', 'import', 'export', 'copy', 'delete'])\n\t\t\tconst merged = []\n\t\t\tfor (const entry of this.headerActions || []) {\n\t\t\t\t// Only what is drawn: the endpoint behind the action checks access itself.\n\t\t\t\tif (entry && entry.adminOnly === true && !this.viewerIsAdmin()) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (entry && reserved.has(entry.id)) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`CnIndexPage: headerActions[].id \"${entry.id}\" is reserved by the built-in bar; dropping entry`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tmerged.push(this.resolveHeaderHandler(entry))\n\t\t\t}\n\t\t\treturn merged\n\t\t},\n\n\t\t/**\n\t\t * Where the Add button links to: the named source's `addRoute`, when\n\t\t * that is what Add does (no host `@add` listener) and the router can\n\t\t * resolve it. The bar then renders Add as a real link; null otherwise.\n\t\t *\n\t\t * `$.vnode.props` is not reactive, so an `add` listener attached or\n\t\t * removed after mount does not re-evaluate this.\n\t\t *\n\t\t * @return {string|object|null}\n\t\t */\n\t\taddLinkTo() {\n\t\t\tif (\n\t\t\t\tthis.$.vnode.props?.onAdd\n\t\t\t\t|| !this.isNamedSource\n\t\t\t\t|| !this.namedSource\n\t\t\t\t|| !this.namedSource.addRoute\n\t\t\t) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn routeHref(this.namedSource.addRoute, this.$router) ? this.namedSource.addRoute : null\n\t\t},\n\n\t\t/**\n\t\t * Declarative bulk actions, validated and normalised.\n\t\t *\n\t\t * `copy` and `delete` are reserved: the selection strip already ships\n\t\t * both as built-ins, so a declared action of the same name would put a\n\t\t * second button with the same word next to one that does something\n\t\t * else.\n\t\t *\n\t\t * Unlike `mergedHeaderActions` this does NOT pre-bind the handler.\n\t\t * A bulk handler needs the selection, and the selection is only known\n\t\t * at click time — binding it here would capture whatever was selected\n\t\t * when the list last re-rendered.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmergedBulkActions() {\n\t\t\tconst reserved = new Set(['copy', 'delete'])\n\t\t\tconst merged = []\n\t\t\tfor (const entry of this.bulkActions || []) {\n\t\t\t\tif (!entry || typeof entry !== 'object' || !entry.id || !entry.label) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`[CnIndexPage] Ignoring bulkActions entry ${JSON.stringify(entry)}: a bulk action needs an id and a label.`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (reserved.has(entry.id)) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].id \"${entry.id}\" is reserved by the built-in selection strip; dropping entry`)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tmerged.push(entry)\n\t\t\t}\n\t\t\treturn merged\n\t\t},\n\n\t\t// ── Self-fetch ↔ consumer-managed: the \"effective\" source of each\n\t\t// list datum is the useListView instance in self-fetch mode, the\n\t\t// prop otherwise. The template binds to these.\n\t\t/** True when self-fetch mode is active and the useListView instance exists. */\n\t\tisSelfFetchMode() {\n\t\t\treturn this.isSelfFetch && !!this.list\n\t\t},\n\n\t\t/**\n\t\t * Whether the latest self-fetch failed. The store keeps the previous\n\t\t * rows and pagination on a failed fetch, so while this holds the page\n\t\t * shows its error state instead of results for an earlier query.\n\t\t */\n\t\tselfFetchFailed() {\n\t\t\treturn this.isSelfFetchMode && !!this.list.error?.value\n\t\t},\n\n\t\t/**\n\t\t * The failed fetch as a refused search, or null when it is not one.\n\t\t *\n\t\t * @spec openspec/changes/index-search-refusal/specs/index-search-refusal/spec.md#requirement-a-refused-search-is-said-where-it-was-typed\n\t\t * @return {object|null}\n\t\t */\n\t\tsearchRefusal() {\n\t\t\treturn this.selfFetchFailed ? readSearchRefusal(this.list.error.value, this.effectiveSearchValue) : null\n\t\t},\n\n\t\t/**\n\t\t * Whether the named source sends the search term to its server.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tnamedSourceSearches() {\n\t\t\treturn this.isNamedSource && !!this.namedSource && typeof this.namedSource.searchParam === 'string' && this.namedSource.searchParam !== ''\n\t\t},\n\n\t\t/**\n\t\t * The sentence the named source's server refused this reader with, or ''.\n\t\t * While it holds the page shows it instead of the rows, the search and\n\t\t * the tabs: a list nobody may read is not an empty list.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-endpoint-source-states/specs/index-page/spec.md\n\t\t */\n\t\tsourceRefusal() {\n\t\t\treturn this.isNamedSource && this.namedSource && typeof this.namedSource.refusal === 'function' ? (this.namedSource.refusal() || '') : ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the named source's last load failed (not refused).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsourceFailed() {\n\t\t\treturn this.isNamedSource && !!this.namedSource && typeof this.namedSource.failed === 'function' && this.namedSource.failed() === true\n\t\t},\n\n\t\t/**\n\t\t * The note the named source read off its last answer, or ''.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-endpoint-source-states/specs/index-page/spec.md\n\t\t */\n\t\t/**\n\t\t * The endpoint source's facets as pickers: per declared facet its\n\t\t * label, the All choice, the counted values (\"E-mail (11)\") and the\n\t\t * value chosen now. A chosen value the narrowed answer no longer\n\t\t * counts stays offered, so the picker still shows it. A facet that\n\t\t * declares `picker: false` draws no picker: its field is filtered in\n\t\t * the side panel instead (DqPostvak's channel).\n\t\t *\n\t\t * @return {Array<{field: string, label: string, allLabel: string, value: string, options: Array<{value: string, label: string}>}>}\n\t\t * @spec openspec/changes/index-endpoint-source-states/specs/index-page/spec.md\n\t\t * @spec openspec/changes/source-facet-picker-off/specs/source-facet-picker-off/spec.md#requirement-a-source-facet-can-leave-its-picker-out\n\t\t */\n\t\tsourceFacetControls() {\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\tconst declared = source && Array.isArray(source.facetDeclarations) ? source.facetDeclarations.filter((facet) => facet.picker !== false) : []\n\t\t\tif (declared.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst counted = typeof source.facets === 'function' ? (source.facets() || {}) : {}\n\t\t\treturn declared.map((facet) => {\n\t\t\t\tconst labels = facet.labels && typeof facet.labels === 'object' ? facet.labels : {}\n\t\t\t\tconst nameOf = (value) => (labels[value] ? this.cnTranslate(labels[value]) : value)\n\t\t\t\tconst chosenRaw = (this.namedActiveFilters || {})[facet.field]\n\t\t\t\tconst chosen = Array.isArray(chosenRaw) ? String(chosenRaw[0] ?? '') : String(chosenRaw ?? '')\n\t\t\t\tconst options = (counted[facet.field] || []).map((entry) => ({ value: entry.value, label: `${nameOf(entry.value)} (${entry.count})` }))\n\t\t\t\tif (chosen !== '' && !options.some((option) => option.value === chosen)) {\n\t\t\t\t\toptions.push({ value: chosen, label: nameOf(chosen) })\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tfield: facet.field,\n\t\t\t\t\tlabel: facet.label ? this.cnTranslate(facet.label) : facet.field,\n\t\t\t\t\tallLabel: facet.allLabel ? this.cnTranslate(facet.allLabel) : t('nextcloud-vue', 'All'),\n\t\t\t\t\tvalue: chosen,\n\t\t\t\t\toptions,\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tsourceNote() {\n\t\t\treturn this.isNamedSource && this.namedSource && typeof this.namedSource.note === 'function' ? (this.namedSource.note() || '') : ''\n\t\t},\n\n\t\t/** @return {string} What to do after a refused search. */\n\t\tsearchRefusalHintText() {\n\t\t\tif (this.searchRefusalHint) {\n\t\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(this.searchRefusalHint) : this.searchRefusalHint\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'Correct that character, or search for plain words. AND, OR and NOT work in capitals, and quotes make a phrase.')\n\t\t},\n\n\t\t/** Rows: store collection in self-fetch mode, else the `objects` prop. */\n\t\teffectiveObjects() {\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tconst sortsRows = !!(this.namedSource && this.namedSource.sortsRows === true)\n\t\t\t\tconst key = sortsRows && this.namedSort ? this.namedSort.key : ''\n\t\t\t\tif (!key) {\n\t\t\t\t\treturn this.namedRows\n\t\t\t\t}\n\t\t\t\tconst direction = this.namedSort.order === 'desc' ? -1 : 1\n\t\t\t\tconst text = (row) => String(row && row[key] !== undefined && row[key] !== null ? row[key] : '')\n\t\t\t\treturn [...(this.namedRows || [])].sort((a, b) => direction * text(a).localeCompare(text(b), undefined, { numeric: true, sensitivity: 'base' }))\n\t\t\t}\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\treturn this.sortSourceView.rows\n\t\t\t}\n\t\t\tif (this.selfFetchFailed) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst rows = this.isSelfFetchMode ? (this.list.objects.value || []) : this.objects\n\t\t\treturn this.annotatingSource ? annotateRows(rows, this.sortSource.rows, this.annotatingSource) : rows\n\t\t},\n\n\t\t/**\n\t\t * The sort options that name an endpoint `source`.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tsourceSortOptions() {\n\t\t\treturn (this.sortSelectOptions || []).filter((o) => o && o.value !== undefined && o.source && typeof o.source.url === 'string' && o.source.url !== '')\n\t\t},\n\n\t\t/**\n\t\t * What the selected lenses ask a sort source for: the `sourceParams` of\n\t\t * each selected quick filter, merged. A lens that changes WHICH rows an\n\t\t * endpoint answers (\"Including work you cover\") cannot say so through its\n\t\t * `filter`, which only narrows the object fetch and the rows already\n\t\t * loaded.\n\t\t *\n\t\t * @return {object} The parameters.\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tlensSourceParams() {\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tconst indices = this.quickFilterMultiple\n\t\t\t\t? (this.selectedQuickFilterIndices || [])\n\t\t\t\t: [this.activeQuickFilterIndex]\n\t\t\tconst params = {}\n\t\t\tfor (const index of indices) {\n\t\t\t\tconst tab = typeof index === 'number' ? tabs[index] : null\n\t\t\t\tif (tab && tab.sourceParams && typeof tab.sourceParams === 'object' && !Array.isArray(tab.sourceParams)) {\n\t\t\t\t\tObject.assign(params, tab.sourceParams)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn params\n\t\t},\n\n\t\t/**\n\t\t * The sort option whose endpoint lists the rows now, or null.\n\t\t *\n\t\t * @return {object|null}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tactiveSortSource() {\n\t\t\tif (!this.sortSource.value) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.sourceSortOptions.find((o) => String(o.value) === this.sortSource.value) || null\n\t\t},\n\n\t\t/**\n\t\t * Whether the rows on screen are the sort source's: a self-fetch page\n\t\t * with a source option chosen whose endpoint did not fail.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsortSourceShown() {\n\t\t\treturn !!this.activeSortSource && this.isSelfFetchMode && this.sortSource.state !== 'failed'\n\t\t},\n\n\t\t/**\n\t\t * Whether a chosen source option fell back to its own order.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsortSourceFellBack() {\n\t\t\treturn !!this.activeSortSource && this.sortSource.state === 'failed'\n\t\t},\n\n\t\t/**\n\t\t * The translated note for a fallen-back source option, or ''.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsortSourceFailedNote() {\n\t\t\tconst note = this.activeSortSource && this.activeSortSource.source.failedNote\n\t\t\treturn typeof note === 'string' && note !== '' ? this.cnTranslate(note) : ''\n\t\t},\n\n\t\t/**\n\t\t * The source rows after the page's search and sidebar filters, one\n\t\t * page of them at the list's page size.\n\t\t *\n\t\t * @return {{rows: Array<object>, pagination: object}}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tsortSourceView() {\n\t\t\tconst limit = (this.list && this.list.pagination && this.list.pagination.value && this.list.pagination.value.limit) || 20\n\t\t\treturn pageSourceRows(this.sortSourceFilteredRows, this.sortSource.page, limit)\n\t\t},\n\n\t\t/**\n\t\t * The source rows after the page's search and sidebar filters, every page.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tsortSourceFilteredRows() {\n\t\t\tconst source = this.activeSortSource ? this.activeSortSource.source : {}\n\t\t\treturn filterSourceRows(this.sortSource.rows, {\n\t\t\t\tsearch: this.list && this.list.searchTerm ? this.list.searchTerm.value : '',\n\t\t\t\tfilters: this.list && this.list.activeFilters ? this.list.activeFilters.value : {},\n\t\t\t\tsearchFields: source.searchFields,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The rows `{rows:<field>}` in the header note counts: every row of a\n\t\t * sort source's list, else the rows on screen.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\theaderMetaRows() {\n\t\t\treturn this.sortSourceShown ? this.sortSourceFilteredRows : (this.effectiveObjects || [])\n\t\t},\n\n\t\t/**\n\t\t * The source whose carried fields reach every order's rows\n\t\t * (`source.annotate`), once its rows are read, or null.\n\t\t *\n\t\t * @return {object|null} The option's source.\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-row-field-the-source-supplies-reaches-every-order\n\t\t */\n\t\tannotatingSource() {\n\t\t\tconst option = this.sourceSortOptions.find((o) => o.source.annotate === true)\n\t\t\treturn option && this.sortSource.rows.length > 0 ? option.source : null\n\t\t},\n\n\t\t/**\n\t\t * The month window as list-query conditions, only in calendar mode.\n\t\t * With an end field an entry counts when it overlaps the window;\n\t\t * without one, when its date falls inside it. Read by\n\t\t * `useSelfFetchList`'s fixed-filter getter, and empty outside calendar\n\t\t * mode so the table is never narrowed after leaving.\n\t\t *\n\t\t * @return {object} The filter conditions, or an empty object.\n\t\t */\n\t\tcalendarRangeFilter() {\n\t\t\tconst cal = this.calendar || {}\n\t\t\tif (this.currentViewMode !== 'calendar' || !cal.dateField || !this.calendarRange) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tconst { rangeStart, rangeEnd } = this.calendarRange\n\t\t\tif (cal.endDateField) {\n\t\t\t\treturn { [`${cal.dateField}[lte]`]: rangeEnd, [`${cal.endDateField}[gte]`]: rangeStart }\n\t\t\t}\n\t\t\treturn { [`${cal.dateField}[gte]`]: rangeStart, [`${cal.dateField}[lte]`]: rangeEnd }\n\t\t},\n\n\t\t/**\n\t\t * Rows handed to the table / card grid — `effectiveObjects` re-sorted by\n\t\t * the declarative `defaultSort` spec whenever no explicit user column\n\t\t * sort is active. A live `sortKey` (user clicked a header, or one was\n\t\t * passed in) takes over and this falls through to the unsorted rows so\n\t\t * the server / prop order wins. No-op when `defaultSort` is empty.\n\t\t *\n\t\t * @return {object[]}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tdisplayObjects() {\n\t\t\t// The pane's saves and this person's own order are applied over\n\t\t\t// the loaded rows, in that order, so neither needs a refetch and\n\t\t\t// neither writes anything onto the records.\n\t\t\tconst patched = applyRowPatches(this.sortedObjects, this.splitRowPatches, this.rowKey)\n\t\t\treturn this.manualOrderActive\n\t\t\t\t? applyManualOrder(patched, this.manualOrderIds, this.rowKey)\n\t\t\t\t: patched\n\t\t},\n\n\t\t/**\n\t\t * The rows in the order the server, the props or `defaultSort` put\n\t\t * them. Split out of `displayObjects` so the pane's patches and this\n\t\t * person's manual order stack on top of one sorted list rather than\n\t\t * each re-deriving it.\n\t\t *\n\t\t * @return {object[]}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsortedObjects() {\n\t\t\tconst spec = this.effectiveDefaultSort\n\t\t\t// A sort source's rows arrive in the order they stand for.\n\t\t\tif (this.sortSourceShown || !spec || spec.length === 0) {\n\t\t\t\treturn this.effectiveObjects\n\t\t\t}\n\t\t\tif (this.effectiveSortKey) {\n\t\t\t\treturn this.effectiveObjects\n\t\t\t}\n\t\t\treturn multiKeySort(this.effectiveObjects, spec)\n\t\t},\n\n\t\t/**\n\t\t * Whether this page declares a working split view.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitViewEnabled() {\n\t\t\treturn this.splitView?.enabled === true\n\t\t},\n\n\t\t/**\n\t\t * Which of the three layouts the page is in: the plain list, the list\n\t\t * with the pane beside it, or the record on its own below the\n\t\t * breakpoint.\n\t\t *\n\t\t * @return {'list'|'split'|'detail'}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitLayout() {\n\t\t\treturn splitLayoutFor({\n\t\t\t\tenabled: this.splitViewEnabled,\n\t\t\t\tsplitId: this.splitId || null,\n\t\t\t\tviewportWidth: this.splitViewportWidth,\n\t\t\t\tbreakpoint: this.splitView?.breakpoint,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The pane's CSS width, falling back when the page declared something\n\t\t * the browser would drop.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitPaneWidth() {\n\t\t\treturn normalisePaneWidth(this.splitView?.paneWidth)\n\t\t},\n\n\t\t/**\n\t\t * Whether to draw the pane's close link. Needs a router: closing pushes\n\t\t * the list route, so without one it would do nothing.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitCloseVisible() {\n\t\t\treturn this.splitCloseButton && Boolean(this.$router)\n\t\t},\n\n\t\t/**\n\t\t * Accessible name and tooltip for the pane's close link.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsplitCloseTitle() {\n\t\t\treturn this.splitCloseLabel || t('nextcloud-vue', 'Close')\n\t\t},\n\n\t\t/**\n\t\t * The list's own address. Falls back to `#` rather than no href: an\n\t\t * `<a>` without one is not focusable.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsplitCloseHref() {\n\t\t\tconst target = this.splitCloseRoute || this.$route?.meta?.cnPageId || null\n\t\t\tif (!target || typeof this.$router?.resolve !== 'function') {\n\t\t\t\treturn '#'\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn this.$router.resolve({ name: target, query: this.$route?.query || {} }).href || '#'\n\t\t\t} catch {\n\t\t\t\t// An unknown route name throws rather than answering.\n\t\t\t\treturn '#'\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a manual row order applies right now. A search, a filter or\n\t\t * a sort the person just chose all mean they asked for a different\n\t\t * order, and a held order that quietly overruled it would read as the\n\t\t * list ignoring them.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmanualOrderActive() {\n\t\t\treturn this.manualOrder === true\n\t\t\t\t&& this.manualOrderIds.length > 0\n\t\t\t\t&& !this.effectiveSortKey\n\t\t},\n\n\t\t/**\n\t\t * Whether the `map` segment is offered in the view toggle. An explicit\n\t\t * `viewModes` whitelist wins; otherwise map is available iff `mapConfig`\n\t\t * carries at least one field. Cards/table are always available.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tshowMapSegment() {\n\t\t\tif (Array.isArray(this.viewModes)) {\n\t\t\t\treturn this.viewModes.includes('map')\n\t\t\t}\n\t\t\treturn Object.keys(this.mapConfig || {}).length > 0\n\t\t},\n\n\t\t/**\n\t\t * Board look: where the linked view switch segments go\n\t\t * (`viewSwitchLinks`), as `{ mode: { href, to? } }`. A route the router\n\t\t * cannot resolve, and an entry with neither route nor href, is left out.\n\t\t *\n\t\t * @return {{[mode: string]: {href: string, to?: object}}}\n\t\t * @spec openspec/changes/screens-view-switch-links/specs/view-switch/spec.md#requirement-a-view-switch-segment-can-open-another-page\n\t\t */\n\t\tviewSwitchLinkTargets() {\n\t\t\tconst declared = this.viewSwitchLinks\n\t\t\tif (!this.isBoardLook || !declared || typeof declared !== 'object') {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\tconst targets = {}\n\t\t\tfor (const [mode, link] of Object.entries(declared)) {\n\t\t\t\tif (!['table', 'cards', 'board', 'map'].includes(mode) || !link || typeof link !== 'object') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (typeof link.route === 'string' && link.route !== '') {\n\t\t\t\t\tconst to = { name: link.route }\n\t\t\t\t\tif (link.params && typeof link.params === 'object') {\n\t\t\t\t\t\tto.params = link.params\n\t\t\t\t\t}\n\t\t\t\t\tif (link.query && typeof link.query === 'object') {\n\t\t\t\t\t\tto.query = link.query\n\t\t\t\t\t}\n\t\t\t\t\tconst href = routeHref(to, this.$router)\n\t\t\t\t\tif (href) {\n\t\t\t\t\t\ttargets[mode] = { href, to }\n\t\t\t\t\t}\n\t\t\t\t} else if (typeof link.href === 'string' && link.href !== '') {\n\t\t\t\t\ttargets[mode] = { href: link.href }\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn targets\n\t\t},\n\n\t\t/**\n\t\t * Board look: the modes `viewSwitch` lists that this page cannot open,\n\t\t * drawn as disabled segments.\n\t\t *\n\t\t * @return {Array<string>} The disabled modes.\n\t\t * @spec openspec/changes/screens-view-switch-parity/specs/view-switch-board-look/spec.md#requirement-the-manifest-can-draw-segments-the-page-cannot-open\n\t\t */\n\t\tviewSwitchDisabledModes() {\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\t// The index boards draw all four segments, so the board look does\n\t\t\t// too unless the manifest names its own list.\n\t\t\tconst viewSwitch = this.presented('viewSwitch')\n\t\t\tconst listed = Array.isArray(viewSwitch) ? viewSwitch : ['table', 'cards', 'board', 'map']\n\t\t\tconst offered = [...this.effectiveToggleModes, ...(this.showMapSegment ? ['map'] : [])]\n\t\t\treturn listed.filter((mode) => ['table', 'cards', 'board', 'map'].includes(mode) && !offered.includes(mode))\n\t\t},\n\n\t\t/**\n\t\t * The base view-toggle segments (cards/table/list) passed to CnActionsBar.\n\t\t * Beta's explicit `viewModes` whitelist wins when set; otherwise the\n\t\t * `availableViewModes` list. Map is excluded here — it's added by the\n\t\t * actions bar via the `showMap` bridge driven by `showMapSegment`.\n\t\t *\n\t\t * @return {Array<string>} The ordered toggle segments minus 'map'.\n\t\t */\n\t\teffectiveToggleModes() {\n\t\t\tconst list = (Array.isArray(this.viewModes) && this.viewModes.length)\n\t\t\t\t? this.viewModes\n\t\t\t\t: this.availableViewModes\n\n\t\t\t// 🔴 A SEGMENT ONLY WHEN THE MODE CAN ACTUALLY WORK. A board needs\n\t\t\t// a status field to build its columns from and a date axis needs\n\t\t\t// both dates; offering a segment that opens a view saying it\n\t\t\t// cannot be one is worse than not offering it, because the reader\n\t\t\t// has to click it to find out.\n\t\t\treturn list.filter((mode) => {\n\t\t\t\tif (mode === 'map') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (mode === 'board') {\n\t\t\t\t\treturn Boolean(this.board?.statusField)\n\t\t\t\t}\n\t\t\t\tif (mode === 'dateAxis') {\n\t\t\t\t\treturn Boolean(this.dateAxis?.startField) && Boolean(this.dateAxis?.endField)\n\t\t\t\t}\n\t\t\t\tif (mode === 'calendar') {\n\t\t\t\t\treturn Boolean(this.calendar?.dateField)\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The modes `?_view=` can open: the toggle's modes plus the map when\n\t\t * the page offers it.\n\t\t *\n\t\t * @return {Array<string>} The modes.\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-the-address-opens-a-view-mode-that-arrives-later\n\t\t */\n\t\trouteViewModes() {\n\t\t\treturn [...this.effectiveToggleModes, ...(this.showMapSegment ? ['map'] : [])]\n\t\t},\n\n\t\t/**\n\t\t * The column fields the board offers (`board.columnFields`), for the\n\t\t * column switch (screens-board-reference-columns).\n\t\t *\n\t\t * @return {Array<object>} The normalised fields; empty for a board on `statusField` only.\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-board-can-switch-the-field-its-columns-come-from\n\t\t */\n\t\tboardColumnFields() {\n\t\t\treturn columnFieldsOf(this.board)\n\t\t},\n\n\t\t/**\n\t\t * The column field in use: the reader's pick, else the one on\n\t\t * `statusField`, else the first. Null on a board without `columnFields`.\n\t\t *\n\t\t * @return {object|null} The normalised column field.\n\t\t */\n\t\tboardActiveColumnField() {\n\t\t\tconst fields = this.boardColumnFields\n\t\t\tif (fields.length === 0) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn fields.find((entry) => entry.field === this.boardColumnFieldChoice)\n\t\t\t\t|| fields.find((entry) => entry.field === this.board?.statusField)\n\t\t\t\t|| fields[0]\n\t\t},\n\n\t\t/** @return {string} The row field the columns come from. */\n\t\tboardColumnField() {\n\t\t\treturn this.boardActiveColumnField?.field || this.board?.statusField || 'status'\n\t\t},\n\n\t\t/**\n\t\t * The parent the board is narrowed to: the single value of the page\n\t\t * filter on the reference's `narrowBy.rowField`, '' when none or several.\n\t\t *\n\t\t * @return {string} The parent id.\n\t\t */\n\t\tboardNarrowValue() {\n\t\t\tconst field = this.board?.narrow?.field || this.boardActiveColumnField?.source?.narrowBy?.rowField\n\t\t\tif (!field) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst current = this.effectiveActiveFilters?.[field]\n\t\t\tconst values = Array.isArray(current) ? current : (current === undefined || current === null || current === '' ? [] : [current])\n\t\t\treturn values.length === 1 ? refIdOf(values[0]) : ''\n\t\t},\n\n\t\t/**\n\t\t * The stages of a reference or values column field, or null for a\n\t\t * field the schema's enum or lifecycle states back.\n\t\t *\n\t\t * @return {object|null} `{ states, keyByValue, refsByKey }`.\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references\n\t\t */\n\t\tboardStages() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tif (!active) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tif (active.kind === 'values') {\n\t\t\t\treturn buildValueStages({\n\t\t\t\t\trows: this.displayObjects,\n\t\t\t\t\tfield: active.field,\n\t\t\t\t\tvalueLabels: active.valueLabels,\n\t\t\t\t\temptyLabel: active.emptyLabel ? this.cnTranslate(active.emptyLabel) : t('nextcloud-vue', 'Nobody'),\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (active.kind !== 'reference') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst source = active.source || {}\n\t\t\tconst narrowBy = source.narrowBy && typeof source.narrowBy === 'object' ? source.narrowBy : null\n\t\t\treturn buildReferenceStages({\n\t\t\t\trefs: this.boardRefs[active.field] || [],\n\t\t\t\tlabelField: source.labelField || '',\n\t\t\t\torderField: source.orderField || '',\n\t\t\t\tcolorField: source.colorField || '',\n\t\t\t\tmergeBy: source.mergeBy || '',\n\t\t\t\tnarrowBy,\n\t\t\t\tnarrowValue: narrowBy ? this.boardNarrowValue : '',\n\t\t\t\tcapacityField: source.capacityField || '',\n\t\t\t\tneutralColor: typeof source.neutralColor === 'string' ? source.neutralColor : '',\n\t\t\t\tcolorMap: source.colorMap && typeof source.colorMap === 'object' ? source.colorMap : null,\n\t\t\t\tclosedField: source.closedField || '',\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The row actions the board's cards offer, by the ids in\n\t\t * `board.cardActions`, in that order.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/pl4-board-card-actions/specs/pl4-board-card-actions/spec.md#requirement-a-card-carries-the-row-actions\n\t\t */\n\t\tboardCardActions() {\n\t\t\tconst ids = Array.isArray(this.board?.cardActions) ? this.board.cardActions : []\n\t\t\treturn ids.map((id) => this.mergedActions.find((action) => action && action.id === id)).filter(Boolean)\n\t\t},\n\n\t\t/**\n\t\t * The field schema the board reads its columns from: the stages of a\n\t\t * reference or values field as lifecycle `states`, else the schema's\n\t\t * own property.\n\t\t *\n\t\t * @return {?object} The field schema, or null.\n\t\t */\n\t\tboardFieldSchema() {\n\t\t\tif (this.boardStages) {\n\t\t\t\treturn { states: this.boardStages.states }\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\tconst property = this.effectiveSchema?.properties?.[field] || null\n\t\t\tconst declared = declaredStatesOf(this.board, this.boardActiveColumnField, field)\n\t\t\tif (declared !== null) {\n\t\t\t\treturn {\n\t\t\t\t\t...(property || {}),\n\t\t\t\t\tstates: declared.map((state) => ({ ...state, label: this.cnTranslate(state.label) })),\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn property\n\t\t},\n\n\t\t/**\n\t\t * The column a card sits in, for a reference or values field.\n\t\t *\n\t\t * @return {((row: object) => string)|null} The mapper, or null.\n\t\t */\n\t\tboardColumnKeyOf() {\n\t\t\tconst stages = this.boardStages\n\t\t\tif (!stages) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\treturn (row) => columnKeyOfRow(row, field, stages.keyByValue)\n\t\t},\n\n\t\t/**\n\t\t * The move the board runs on a drop or a menu pick.\n\t\t *\n\t\t * A named handler (`moveHandler`, from the app's registry) gets\n\t\t * `{ card, toKey, field, value, target }` and owns the write; the\n\t\t * status of a case goes through the app's transition this way. A\n\t\t * reference or values field without one has its value written on the\n\t\t * row (PATCH). `readOnly` gives no move. A board on `statusField` with\n\t\t * neither keeps the `runTransition` prop.\n\t\t *\n\t\t * With `source.capacityField`, a drop that would fill the referenced\n\t\t * row past its limit is refused before the handler or the PATCH runs.\n\t\t * The server still guards; this only spares the round trip.\n\t\t *\n\t\t * @return {((move: {card: object, toKey: string}) => Promise<object>)|null} The move, or null for a read-only board.\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-drop-writes-the-reference\n\t\t */\n\t\tboardRunTransition() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tif (active?.readOnly) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst onStatusField = !active || active.field === this.board?.statusField\n\t\t\tconst name = active?.moveHandler || (onStatusField ? (this.board?.moveHandler || '') : '')\n\t\t\tconst handler = name ? resolveRegisteredHandler(name, this.effectiveRegistry, this.resolvedCustomComponents) : null\n\t\t\tif (name && typeof handler !== 'function') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst stages = this.boardStages\n\t\t\tif (!handler && !stages) {\n\t\t\t\treturn this.runTransition\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\tconst kind = active?.kind || 'schema'\n\t\t\tconst narrowBy = active?.source?.narrowBy || null\n\t\t\tconst capacityField = active?.source?.capacityField || ''\n\t\t\treturn async ({ card, toKey }) => {\n\t\t\t\tconst drop = stages\n\t\t\t\t\t? resolveDropValue({ card, toKey, kind, refsByKey: stages.refsByKey, narrowBy })\n\t\t\t\t\t: { value: toKey, target: null }\n\t\t\t\tif (drop === null) {\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'This card cannot move to that column.'))\n\t\t\t\t}\n\t\t\t\tconst full = capacityField && drop.target\n\t\t\t\t\t? fullTargetOf({ target: drop.target, card, rows: this.displayObjects, field, capacityField, rowKey: this.rowKey })\n\t\t\t\t\t: null\n\t\t\t\tif (full) {\n\t\t\t\t\tconst column = stages.states.find((state) => state.key === String(toKey))?.label || String(toKey)\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', '{column} is full: {count} of {capacity}.', { column, count: full.count, capacity: full.capacity }))\n\t\t\t\t}\n\t\t\t\tif (handler) {\n\t\t\t\t\treturn handler({ card, toKey, field, value: drop.value, target: drop.target })\n\t\t\t\t}\n\t\t\t\tconst id = card?.id ?? card?.['@self']?.id ?? card?.[this.rowKey]\n\t\t\t\tconst url = objectUrlOf(this.register, this.exportSchemaSlug, id)\n\t\t\t\tif (url === '') {\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'This card cannot move to that column.'))\n\t\t\t\t}\n\t\t\t\treturn patchObject(url, { [field]: drop.value })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Where a card may go, from the app's `moveTargetsHandler`: it gets\n\t\t * `{ card, field }` and answers the values (referenced ids) the card\n\t\t * can reach; the board maps them to its columns. An entry may also be\n\t\t * `{ key, allowed, reason }`: a target that is offered but blocked,\n\t\t * with the sentence that says why.\n\t\t *\n\t\t * @return {((card: object) => Promise<Array<string|{key: string, allowed: boolean, reason: string}>|null>)|null} The question, or null.\n\t\t * @spec openspec/changes/board-move-block-reasons/specs/board-view/spec.md#requirement-a-move-target-can-be-blocked-with-a-reason\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-board-shows-where-a-card-can-go\n\t\t */\n\t\tboardAllowedMoves() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tconst onStatusField = !active || active.field === this.board?.statusField\n\t\t\tconst name = active?.moveTargetsHandler || (onStatusField ? (this.board?.moveTargetsHandler || '') : '')\n\t\t\tconst handler = name ? resolveRegisteredHandler(name, this.effectiveRegistry, this.resolvedCustomComponents) : null\n\t\t\tif (typeof handler !== 'function' || this.boardRunTransition === null) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst field = this.boardColumnField\n\t\t\tconst stages = this.boardStages\n\t\t\treturn async (card) => {\n\t\t\t\tconst values = await handler({ card, field })\n\t\t\t\tif (!Array.isArray(values)) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst columnOf = (id) => (stages && stages.keyByValue.has(id) ? stages.keyByValue.get(id) : id)\n\t\t\t\treturn values.map((value) => {\n\t\t\t\t\tif (value && typeof value === 'object' && Object.hasOwn(value, 'key')) {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tkey: columnOf(refIdOf(value.key)),\n\t\t\t\t\t\t\tallowed: value.allowed !== false,\n\t\t\t\t\t\t\treason: typeof value.reason === 'string' ? value.reason : '',\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn columnOf(refIdOf(value))\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\n\t\t/** @return {object|null} The board's narrowing select (`board.narrow`). */\n\t\tboardNarrow() {\n\t\t\tconst narrow = this.board?.narrow\n\t\t\treturn narrow && typeof narrow === 'object' && typeof narrow.field === 'string' && narrow.field !== '' ? narrow : null\n\t\t},\n\n\t\t/** @return {string} The narrowing select's label, with its colon. */\n\t\tboardNarrowLabel() {\n\t\t\tconst narrow = this.boardNarrow || {}\n\t\t\tconst prop = (this.effectiveSchema?.properties || {})[narrow.field] || {}\n\t\t\treturn t('nextcloud-vue', '{label}:', { label: this.cnTranslate(narrow.label || prop.title || narrow.field || '') })\n\t\t},\n\n\t\t/** @return {string} The narrowing select's \"all\" option. */\n\t\tboardNarrowAllLabel() {\n\t\t\treturn this.boardNarrow?.allLabel ? this.cnTranslate(this.boardNarrow.allLabel) : t('nextcloud-vue', 'All')\n\t\t},\n\n\t\t/** @return {string} The column switch's label, with its colon. */\n\t\tboardColumnSwitchLabel() {\n\t\t\tconst label = this.board?.columnSwitchLabel ? this.cnTranslate(this.board.columnSwitchLabel) : t('nextcloud-vue', 'Columns')\n\t\t\treturn t('nextcloud-vue', '{label}:', { label })\n\t\t},\n\n\t\t/** @return {boolean} Whether the board view draws its controls row. */\n\t\tboardControlsShown() {\n\t\t\treturn this.currentViewMode === 'board'\n\t\t\t\t&& (this.boardColumnFields.length > 1 || this.boardNarrow !== null || Boolean(this.board?.hint))\n\t\t},\n\n\t\t/**\n\t\t * What the board needs fetched, as one key the watcher reacts to.\n\t\t *\n\t\t * @return {string} The key, '' outside the board view.\n\t\t */\n\t\tboardFetchKey() {\n\t\t\tif (this.currentViewMode !== 'board') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn [this.boardColumnField, this.boardActiveColumnField?.kind || '', this.effectiveSchema ? 1 : 0, this.boardNarrow ? this.boardNarrow.field : ''].join('|')\n\t\t},\n\n\t\t/**\n\t\t * The status field's schema, for the board's columns.\n\t\t *\n\t\t * Read from the schema this page already holds rather than fetched: the\n\t\t * stages are a property of the type, and a second read of them could\n\t\t * disagree with the one the table is rendering from.\n\t\t *\n\t\t * @return {?object} The field schema, or null.\n\t\t */\n\t\tboardStatusFieldSchema() {\n\t\t\tconst field = this.board?.statusField\n\t\t\tif (!field) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.effectiveSchema?.properties?.[field] || null\n\t\t},\n\n\t\t/**\n\t\t * How the board's column sums are formatted: `board.sumFormat`, else\n\t\t * what the sum field's schema declares (`format: \"currency\"` or\n\t\t * `\"percent\"`), else a plain number.\n\t\t *\n\t\t * @return {object|null} A metric format, or null for the plain default.\n\t\t * @spec openspec/changes/screens-kanban-parity/specs/board-view/spec.md#requirement-the-board-column-header\n\t\t */\n\t\tboardSumFormat() {\n\t\t\tif (this.board?.sumFormat && typeof this.board.sumFormat === 'object') {\n\t\t\t\treturn this.board.sumFormat\n\t\t\t}\n\t\t\tconst field = this.board?.sumField\n\t\t\tconst property = field ? this.effectiveSchema?.properties?.[field] : null\n\t\t\tif (property && (property.format === 'currency' || property.format === 'percent')) {\n\t\t\t\treturn { style: property.format, currency: property.currency, decimals: property.format === 'currency' ? 2 : 0 }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Whether the list holds one page of more.\n\t\t *\n\t\t * The board says so beside its counts: a count of a page shown as\n\t\t * though it were the total is a number somebody quotes in a meeting.\n\t\t *\n\t\t * @return {boolean} True when there is more than this page.\n\t\t */\n\t\tisPaged() {\n\t\t\tif (this.boardLoadsAll) {\n\t\t\t\tconst loaded = this.effectivePagination || {}\n\t\t\t\treturn Number(loaded.page || 1) < Number(loaded.pages || 1)\n\t\t\t}\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {\n\t\t\t\treturn Number(this.effectivePagination?.pages || 1) > 1\n\t\t\t}\n\t\t\treturn Number(this.pagination?.pages || 1) > 1\n\t\t},\n\n\t\t/**\n\t\t * Whether the board view gathers every row itself: in self-fetch mode\n\t\t * it adds page after page (`list.loadMore`) instead of paging, and\n\t\t * draws its own footer in place of the pagination.\n\t\t *\n\t\t * @return {boolean} True for a self-fetching page in board view.\n\t\t * @spec openspec/changes/board-loads-every-row/specs/board-view/spec.md#requirement-the-index-board-shows-every-matching-row\n\t\t */\n\t\tboardLoadsAll() {\n\t\t\treturn this.currentViewMode === 'board' && this.isSelfFetchMode && !this.isNamedSource && typeof this.list.loadMore === 'function'\n\t\t},\n\n\t\t/**\n\t\t * The rows the board holds against the rows that match, for the\n\t\t * board's footer.\n\t\t *\n\t\t * @return {{shown: number, total: number}} The counts.\n\t\t */\n\t\tboardLoadCounts() {\n\t\t\tconst shown = this.effectiveObjects.length\n\t\t\treturn { shown, total: Math.max(shown, Number(this.effectivePagination?.total || 0)) }\n\t\t},\n\n\t\t/**\n\t\t * Whether the folder pane is drawn: a `folderSidebar` without\n\t\t * `pane: false`.\n\t\t *\n\t\t * @spec openspec/changes/folder-sidebar-pane-off/specs/index-page/spec.md#requirement-a-folder-scope-without-a-pane\n\t\t * @return {boolean}\n\t\t */\n\t\tshowsFolderPane() {\n\t\t\treturn Boolean(this.folderSidebar) && this.folderSidebar.pane !== false\n\t\t},\n\n\t\t/**\n\t\t * The CnFolderSidebar source. A `register` source is fetched by this\n\t\t * component and handed to CnFolderSidebar as a `custom` folder list.\n\t\t *\n\t\t * @return {string} The resolved CnFolderSidebar source.\n\t\t */\n\t\tfolderSidebarSource() {\n\t\t\tconst s = this.folderSidebar && this.folderSidebar.source\n\t\t\treturn (s === 'register' || s === 'groups' || !s) ? 'custom' : s\n\t\t},\n\n\t\t/**\n\t\t * The folder list for CnFolderSidebar's custom source: register-fetched\n\t\t * objects (source:'register') or the explicit `folders` (source:'custom').\n\t\t * Empty for the field/files sources, which derive their own list.\n\t\t *\n\t\t * @return {Array<object>} The folder list.\n\t\t */\n\t\tfolderSidebarFolders() {\n\t\t\tif (!this.folderSidebar) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.folderSidebar.source === 'register') {\n\t\t\t\treturn this.folderRegisterList\n\t\t\t}\n\t\t\tif (this.folderSidebar.source === 'groups') {\n\t\t\t\treturn this.folderGroupList\n\t\t\t}\n\t\t\treturn this.folderSidebar.folders || []\n\t\t},\n\n\t\t/**\n\t\t * The folder entry for the folder currently selected in the sidebar,\n\t\t * or null while \"All\" is selected.\n\t\t *\n\t\t * @return {(object|null)} The active scope's folder entry.\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScope() {\n\t\t\tif (this.selectedFolderId === null || this.selectedFolderId === undefined) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst idField = this.folderPassthroughIdField\n\t\t\tconst match = this.folderSidebarFolders\n\t\t\t\t.find((f) => f && String(this.getByPath(f, idField)) === String(this.selectedFolderId))\n\t\t\treturn match || null\n\t\t},\n\n\t\t/**\n\t\t * The heading above the list for the selected folder: on a `groups`\n\t\t * pane (or with `folderSidebar.heading: true`), its name and, under\n\t\t * it, its parent folder and its count. The count reads\n\t\t * `folderSidebar.countText` (`{count}`, through the app's translate),\n\t\t * else \"{count} members\" on a groups pane. `folderSidebar.headingParts`\n\t\t * (`[{ field, text, format? }]`) adds a part per field the selected\n\t\t * group's record carries (`parentsFrom`): `text` with `{value}`, through\n\t\t * the app's translate; `format: \"user\"` names a user id by its display\n\t\t * name (\"team lead Lars de Koning\", DqAfdelingen). An empty field adds\n\t\t * nothing.\n\t\t *\n\t\t * @return {{name: string, subtitle: string}|null} The heading, or null on All.\n\t\t * @spec openspec/changes/folder-heading-parts/specs/index-page/spec.md#requirement-a-group-heading-can-name-what-its-record-carries\n\t\t */\n\t\tscopeHeading() {\n\t\t\tconst cfg = this.folderSidebar\n\t\t\tconst scope = this.activeScope\n\t\t\tif (!cfg || !scope || !(cfg.source === 'groups' || cfg.heading === true)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst idField = this.folderPassthroughIdField\n\t\t\tconst name = String(this.getByPath(scope, this.folderPassthroughNameField) ?? this.selectedFolderId)\n\t\t\tconst parentId = scope.parentId ?? scope.parent ?? null\n\t\t\tconst parent = parentId === null || parentId === undefined\n\t\t\t\t? null\n\t\t\t\t: this.folderSidebarFolders.find((f) => f && String(this.getByPath(f, idField)) === String(parentId))\n\t\t\tconst parts = []\n\t\t\tif (parent) {\n\t\t\t\tparts.push(String(this.getByPath(parent, this.folderPassthroughNameField) ?? parentId))\n\t\t\t}\n\t\t\tif (typeof scope.count === 'number') {\n\t\t\t\tif (cfg.countText) {\n\t\t\t\t\tparts.push(this.cnTranslate(cfg.countText).replace('{count}', String(scope.count)))\n\t\t\t\t} else if (cfg.source === 'groups') {\n\t\t\t\t\tparts.push(n('nextcloud-vue', '{count} member', '{count} members', scope.count, { count: scope.count }))\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst record = scope.record && typeof scope.record === 'object' ? scope.record : {}\n\t\t\tfor (const part of (Array.isArray(cfg.headingParts) ? cfg.headingParts : [])) {\n\t\t\t\tconst raw = part && part.field ? this.getByPath(record, part.field) : null\n\t\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst value = part.format === 'user' ? userDisplayName(raw) : String(raw)\n\t\t\t\tif (value === '') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tparts.push(part.text ? this.cnTranslate(part.text).replace('{value}', value) : value)\n\t\t\t}\n\t\t\treturn { name, subtitle: parts.join(' · ') }\n\t\t},\n\n\t\t/**\n\t\t * The list's current order, `[{ key, order }]`: the self-fetched list's,\n\t\t * else the `sortKeys` / `sortKey` props.\n\t\t *\n\t\t * @return {Array<{key: string, order: string}>} The order.\n\t\t */\n\t\tcurrentSortKeys() {\n\t\t\tif (this.isSelfFetchMode && this.list && this.list.sortKeys) {\n\t\t\t\treturn this.list.sortKeys.value || []\n\t\t\t}\n\t\t\tif (Array.isArray(this.sortKeys) && this.sortKeys.length > 0) {\n\t\t\t\treturn this.sortKeys\n\t\t\t}\n\t\t\treturn this.sortKey ? [{ key: this.sortKey, order: this.sortOrder || 'asc' }] : []\n\t\t},\n\n\t\t/**\n\t\t * The orders the index sidebar's Sort section offers: none in the table\n\t\t * view, which sorts by its column headers; else `sortSelectOptions`,\n\t\t * or else the sortable columns, ascending.\n\t\t *\n\t\t * @return {Array<{value: string, label: string, keys: Array<{key: string, order: string}>}>} The options.\n\t\t */\n\t\tsidebarSortOptions() {\n\t\t\tif (this.currentViewMode === 'table') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (Array.isArray(this.sortSelectOptions) && this.sortSelectOptions.length > 0) {\n\t\t\t\treturn this.sortSelectOptions\n\t\t\t\t\t.filter((o) => o && o.value !== undefined && o.value !== null)\n\t\t\t\t\t.map((o) => {\n\t\t\t\t\t\tconst fixed = this.isSelfFetchMode && !!(o.source && typeof o.source.url === 'string' && o.source.url !== '')\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: String(o.value),\n\t\t\t\t\t\t\tlabel: this.cnTranslate(o.label || String(o.value)),\n\t\t\t\t\t\t\t// An endpoint-ranked order is chosen by its value; its\n\t\t\t\t\t\t\t// `order` is only the fallback.\n\t\t\t\t\t\t\tkeys: fixed ? [] : orderToSortKeys(o.order !== undefined ? o.order : o.value),\n\t\t\t\t\t\t\t...(fixed ? { fixed: true } : {}),\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.filter((o) => o.fixed === true || o.keys.length > 0)\n\t\t\t}\n\t\t\treturn (this.tableColumns || [])\n\t\t\t\t.filter((c) => c && typeof c === 'object' && c.key && isColumnSortable(c, this.effectiveSchema))\n\t\t\t\t.map((c) => ({ value: c.key, label: this.cnTranslate(c.label || c.key), keys: [{ key: c.key, order: 'asc' }] }))\n\t\t},\n\n\t\t/**\n\t\t * The `x-index` block the active scope's own schema row carries, for a\n\t\t * folder list derived from a register. Empty for every other source:\n\t\t * a folder that is a distinct field value, or one written into the\n\t\t * manifest by hand, has no record behind it to read.\n\t\t *\n\t\t * @return {(object|null)} A row-shaped object carrying `x-index`, or null.\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScopeRow() {\n\t\t\tif (this.selectedFolderId === null || this.selectedFolderId === undefined) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst carried = this.folderRowLayouts[String(this.selectedFolderId)]\n\t\t\treturn carried ? { 'x-index': carried } : null\n\t\t},\n\n\t\t/**\n\t\t * The list layout the active scope asks for. Two declarations meet\n\t\t * here and they decide different things: this page's `columns` prop\n\t\t * decides which columns the page HAS, and the scope decides which of\n\t\t * them it shows, in what order, sorted by what and searched over what.\n\t\t * A scope naming a column this page does not declare is dropped, so a\n\t\t * scope written before a column was taken out cannot bring it back.\n\t\t *\n\t\t * @return {{columns: (Array|null), sortKeys: Array, searchFields: string[]}}\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScopeLayout() {\n\t\t\tif (!this.folderSidebar || !this.scopeShapesView) {\n\t\t\t\treturn { columns: null, sortKeys: [], searchFields: [] }\n\t\t\t}\n\t\t\treturn resolveScopeLayout({\n\t\t\t\tscope: this.activeScope,\n\t\t\t\trow: this.activeScopeRow,\n\t\t\t\tpageColumns: this.declaredColumns,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Whether the active scope's look applies in the current view mode:\n\t\t * always, unless `folderSidebar.scopeViews` names the view modes it is\n\t\t * for (`[\"table\", \"list\"]`), so the board keeps the page's generic\n\t\t * look (DqWerkbord). The scope's filter applies in every view.\n\t\t *\n\t\t * @spec openspec/changes/index-scope-views/specs/index-page/spec.md#requirement-a-scope-look-can-be-limited-to-view-modes\n\t\t * @return {boolean}\n\t\t */\n\t\tscopeShapesView() {\n\t\t\tconst views = this.folderSidebar && this.folderSidebar.scopeViews\n\t\t\tif (!Array.isArray(views) || views.length === 0) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn views.includes(this.currentViewMode)\n\t\t},\n\n\t\t/**\n\t\t * This page's own value of each presentation key, which a query preset\n\t\t * may have set: what `presented()` falls back to without a scope.\n\t\t *\n\t\t * @return {object}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation\n\t\t */\n\t\townPresentation() {\n\t\t\treturn {\n\t\t\t\ttitle: this.title,\n\t\t\t\tquickFilters: this.quickFilters,\n\t\t\t\tcardFields: this.cardFields,\n\t\t\t\tcountText: this.countText,\n\t\t\t\tsearchPlaceholder: this.searchPlaceholder,\n\t\t\t\tfooterNote: this.footerNote,\n\t\t\t\tviewSwitch: this.viewSwitch,\n\t\t\t\taddLabel: this.addLabel,\n\t\t\t\theaderButtons: this.headerButtons,\n\t\t\t\tbreadcrumb: this.breadcrumb,\n\t\t\t\theaderMeta: this.headerMeta,\n\t\t\t\tafterList: this.afterList,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The presentation the active scope declares (`title`, `countText`,\n\t\t * `quickFilters`, `addLabel`, `afterList` and the other query preset\n\t\t * keys), from its folder entry or its row's `x-index`. Empty without a\n\t\t * scope, so the page's own values stand.\n\t\t *\n\t\t * @return {object}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation\n\t\t */\n\t\tactiveScopePresentation() {\n\t\t\tif (!this.folderSidebar || !this.scopeShapesView) {\n\t\t\t\treturn {}\n\t\t\t}\n\t\t\treturn resolveScopePresentation({ scope: this.activeScope, row: this.activeScopeRow })\n\t\t},\n\n\t\t/**\n\t\t * The widgets drawn after the list: the active scope's `afterList`,\n\t\t * else the page's.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-an-index-page-can-draw-widgets-after-its-list\n\t\t */\n\t\tpresentedAfterList() {\n\t\t\tconst list = this.presented('afterList')\n\t\t\treturn Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The fields the search box searches over while a scope declaring\n\t\t * `searchFields` is active. Read by `useSelfFetchList`'s fixed-filter\n\t\t * getter off this instance, so a scope change re-scopes the next fetch\n\t\t * without a second search path.\n\t\t *\n\t\t * @return {string[]} The scope's search fields, or [].\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tactiveScopeSearchFields() {\n\t\t\treturn this.activeScopeLayout.searchFields\n\t\t},\n\n\t\t/**\n\t\t * The teams this person is treated as having claimed: what they stored,\n\t\t * narrowed to what the instance offers them now.\n\t\t *\n\t\t * @return {string[]} The claimed team ids.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tclaimedTeamIds() {\n\t\t\treturn resolveClaimedTeams(this.offeredTeams, this.claimedTeams)\n\t\t},\n\n\t\t/**\n\t\t * The saved views this page renders as tabs, and the ones that stay in\n\t\t * the views control. A view is in one or the other, never both.\n\t\t *\n\t\t * Split out of the SCOPED views, not the fetched ones: a view made on\n\t\t * another page names fields this schema does not have, and is no more\n\t\t * use as a tab than it is as a dropdown entry.\n\t\t *\n\t\t * @return {{tabs: Array<object>, control: Array<object>}}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tsplitSavedViews() {\n\t\t\treturn splitViewsIntoTabs(this.visibleSavedViews, this.viewTabs)\n\t\t},\n\n\t\t/**\n\t\t * The lens tabs, as the tab strip this page already has understands\n\t\t * them, with each lens's claim tokens resolved against this person.\n\t\t *\n\t\t * @return {Array<object>} The tabs.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tlensTabs() {\n\t\t\treturn this.splitSavedViews.tabs.map((view) => {\n\t\t\t\tconst tab = viewAsTab(view)\n\t\t\t\tconst { filter, narrowsToNothing } = resolveClaimTokens(tab.filter, { teams: this.claimedTeamIds })\n\t\t\t\treturn { ...tab, filter, narrowsToNothing }\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The views the control lists: every saved view this page did not name\n\t\t * as a tab.\n\t\t *\n\t\t * @return {Array<object>} The views.\n\t\t */\n\t\tviewsForControl() {\n\t\t\treturn [...this.defaultFilterViews, ...this.splitSavedViews.control]\n\t\t},\n\n\t\t/**\n\t\t * The page config overrides of the applied view (`overrides`), or null\n\t\t * when no view is applied or it carries none. CnPageRenderer lays them\n\t\t * over the page config while the view is active (`view-overrides`).\n\t\t *\n\t\t * @return {object|null}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-can-override-the-page-config-while-it-is-active\n\t\t */\n\t\tactiveSavedViewOverrides() {\n\t\t\tconst id = this.appliedSavedViewId\n\t\t\tif (!id) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst views = [...this.defaultFilterViews, ...(this.savedViews || [])]\n\t\t\tconst view = views.find((v) => v && (String(v.id) === id || String(v.slug) === id))\n\t\t\treturn savedViewOverrides(view)\n\t\t},\n\n\t\t/**\n\t\t * `activeSavedViewOverrides` as one comparable key.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tactiveSavedViewOverridesKey() {\n\t\t\treturn JSON.stringify(this.activeSavedViewOverrides)\n\t\t},\n\n\t\t/**\n\t\t * What the sidebar's saved-views panel shows, or null when the page\n\t\t * does not offer saved views.\n\t\t *\n\t\t * @return {object|null}\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-6\n\t\t */\n\t\tsavedViewsForSidebar() {\n\t\t\tif (!this.savedViewsOffered) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tviews: this.viewsForControl,\n\t\t\t\tloading: this.savedViewsLoading,\n\t\t\t\tcurrentUserId: this.currentSavedViewsUserId,\n\t\t\t\tcounts: this.savedViewCounts,\n\t\t\t\tselectedViewId: this.appliedSavedViewId,\n\t\t\t\tmenuIds: this.savedViewMenuIds,\n\t\t\t\tsummaries: Object.fromEntries(this.viewsForControl.map((view) => [viewIdOf(view), this.viewFilterSummary(view)])),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The route name this page's menu entries point at.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsavedViewPage() {\n\t\t\treturn (this.$route && typeof this.$route.name === 'string') ? this.$route.name : ''\n\t\t},\n\n\t\t/**\n\t\t * The ids of this page's views in the app menu, or null when there is\n\t\t * no menu to add to.\n\t\t *\n\t\t * @return {Array<string>|null}\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tsavedViewMenuIds() {\n\t\t\tconst menu = this.cnSavedViewMenu\n\t\t\tif (!menu || typeof menu.toggle !== 'function' || this.savedViewPage === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (menu.entries || []).filter((e) => e.page === this.savedViewPage).map((e) => String(e.id))\n\t\t},\n\n\t\t/**\n\t\t * The page's `defaultSavedViews` as read-only views.\n\t\t *\n\t\t * @return {Array<object>} The views.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-4\n\t\t */\n\t\tdefaultFilterViews() {\n\t\t\tconst defaults = (Array.isArray(this.defaultSavedViews) ? this.defaultSavedViews : []).map((entry) => (entry && typeof entry.name === 'string'\n\t\t\t\t? { ...entry, name: this.cnTranslate(entry.name), ...(typeof entry.description === 'string' && entry.description !== '' ? { description: this.cnTranslate(entry.description) } : {}) }\n\t\t\t\t: entry))\n\t\t\treturn defaultFilterViews(defaults, this.savedViewsPage)\n\t\t},\n\n\t\t/**\n\t\t * The values the `filterStrip` offers: its options, else the field's\n\t\t * schema enum, each `{ value, label }`.\n\t\t *\n\t\t * @return {Array<{value: string, label: string}>}\n\t\t */\n\t\tfilterStripValues() {\n\t\t\tconst strip = this.filterStrip\n\t\t\tif (!strip || typeof strip !== 'object' || typeof strip.field !== 'string' || strip.field === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst declared = Array.isArray(strip.options) ? strip.options : null\n\t\t\tconst prop = (this.effectiveSchema?.properties || {})[strip.field] || {}\n\t\t\tconst raw = declared || (Array.isArray(prop.enum) ? prop.enum.map((value) => ({ value })) : [])\n\t\t\treturn raw\n\t\t\t\t.map((option) => (option && typeof option === 'object' ? option : { value: option }))\n\t\t\t\t.filter((option) => option.value !== undefined && option.value !== null && option.value !== '')\n\t\t\t\t.map((option) => ({ value: String(option.value), label: this.cnTranslate(String(option.label ?? option.value)) }))\n\t\t},\n\n\t\t/**\n\t\t * The pills of the `filterStrip`: All, then one per value, with the\n\t\t * active one marked and its count when `showCount` is on.\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip\n\t\t * @return {Array<{key: string, value: string, label: string, active: boolean, count: (number|null)}>}\n\t\t */\n\t\tfilterStripEntries() {\n\t\t\tconst values = this.filterStripValues\n\t\t\tif (values.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst current = this.effectiveActiveFilters[this.filterStrip.field]\n\t\t\tconst picked = Array.isArray(current) ? current.map(String) : (current === undefined || current === null || current === '' ? [] : [String(current)])\n\t\t\tconst counts = this.filterStripCounts || {}\n\t\t\tconst countOf = (key) => (Object.hasOwn(counts, key) && typeof counts[key] === 'number' ? counts[key] : null)\n\t\t\tconst allLabel = this.filterStrip.allLabel ? this.cnTranslate(this.filterStrip.allLabel) : t('nextcloud-vue', 'All')\n\t\t\treturn [\n\t\t\t\t{ key: 'all', value: '', label: allLabel, active: picked.length === 0, count: countOf('all') },\n\t\t\t\t...values.map((option, index) => ({ key: `v${index}`, value: option.value, label: option.label, active: picked.length === 1 && picked[0] === option.value, count: countOf(`v${index}`) })),\n\t\t\t]\n\t\t},\n\n\t\t/** @return {string} The accessible name of the filter strip. */\n\t\tfilterStripLabel() {\n\t\t\tconst strip = this.filterStrip || {}\n\t\t\tif (strip.label) {\n\t\t\t\treturn this.cnTranslate(strip.label)\n\t\t\t}\n\t\t\tconst prop = (this.effectiveSchema?.properties || {})[strip.field] || {}\n\t\t\treturn this.cnTranslate(prop.title || strip.field || '')\n\t\t},\n\n\t\t/**\n\t\t * The filter of the active quick filter tab, which the strip's counts\n\t\t * are narrowed by (\"Soort, dan kanaal\").\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\tfilterStripTabFilter() {\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tconst index = this.activeQuickFilterIndex\n\t\t\tconst tab = index !== null && index !== undefined ? tabs[index] : null\n\t\t\treturn tab && tab.filter && typeof tab.filter === 'object' ? tab.filter : {}\n\t\t},\n\n\t\t/**\n\t\t * Changes whenever the strip's counts have to be read again: another\n\t\t * quick filter, another page filter, or a list whose total moved.\n\t\t *\n\t\t * @return {string} The signature, '' when the strip counts nothing.\n\t\t */\n\t\t/**\n\t\t * What the `quickFiltersFrom` tabs depend on, as one key: a change\n\t\t * asks again. Empty without the prop, or with `quickFilters` holding tabs.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values\n\t\t */\n\t\tquickFiltersFromKey() {\n\t\t\tconst from = this.quickFiltersFrom\n\t\t\tconst declared = Array.isArray(this.quickFilters) && this.quickFilters.length > 0\n\t\t\tif (declared || !from || typeof from.field !== 'string' || from.field === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn JSON.stringify({ r: this.register, s: this.exportSchemaSlug, f: this.filter || null, q: from })\n\t\t},\n\n\t\tfilterStripCountKey() {\n\t\t\tif (!this.filterStrip || this.filterStrip.showCount !== true || this.filterStripValues.length === 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn JSON.stringify({\n\t\t\t\tr: this.register,\n\t\t\t\ts: this.exportSchemaSlug,\n\t\t\t\tf: this.filter || null,\n\t\t\t\tq: this.filterStripTabFilter,\n\t\t\t\tv: this.filterStripValues.map((option) => option.value),\n\t\t\t\tt: Number((this.isSelfFetchMode ? this.list.pagination.value : this.effectivePagination)?.total ?? 0),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The filters whose record count this page shows: quick filters that\n\t\t * set `showCount`, and the saved views `viewCounts` names. Empty when\n\t\t * nothing opted in, which is what keeps the page from making a count\n\t\t * request nobody asked for.\n\t\t *\n\t\t * @return {Array<{key: string, filter: object}>} The filters to count.\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tcountEntries() {\n\t\t\tconst entries = []\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tconst lens = this.lensTabs.length > 0\n\t\t\ttabs.forEach((tab, index) => {\n\t\t\t\tconst wants = lens ? this.viewWantsCount(tab.id) : (tab && tab.showCount === true)\n\t\t\t\tif (wants && tab.narrowsToNothing !== true) {\n\t\t\t\t\tentries.push({ key: `tab:${index}`, filter: tab.filter || {} })\n\t\t\t\t}\n\t\t\t})\n\t\t\tfor (const view of this.viewsForControl) {\n\t\t\t\tconst id = viewIdOf(view)\n\t\t\t\tif (this.viewWantsCount(id)) {\n\t\t\t\t\tentries.push({ key: `view:${id}`, filter: viewAsTab(view).filter })\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn entries\n\t\t},\n\n\t\t/**\n\t\t * Changes whenever the counts have to be fetched again: another set\n\t\t * of filters, another register or schema, or a list whose total moved\n\t\t * (a record was added, removed, or left a filter).\n\t\t *\n\t\t * @return {string} The signature.\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tcountRequestKey() {\n\t\t\tif (this.countEntries.length === 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn JSON.stringify({\n\t\t\t\tr: this.register,\n\t\t\t\ts: this.exportSchemaSlug,\n\t\t\t\tf: this.filter || null,\n\t\t\t\te: this.countEntries,\n\t\t\t\t// The store's total, not the error override in effectivePagination,\n\t\t\t\t// so a failed fetch and its recovery do not refetch the counts.\n\t\t\t\tt: Number((this.isSelfFetchMode ? this.list.pagination.value : this.effectivePagination)?.total ?? 0),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * What the tab strip shows: the page's lens tabs when it named any,\n\t\t * else its quick filters. One strip, never two, so a person is not\n\t\t * offered the same narrowing twice under two names.\n\t\t *\n\t\t * @return {(Array<object>|null)} The tabs.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\t/**\n\t\t * The chip the strip lights: the active tab, else the default tab of\n\t\t * tabs that arrived after setup (`quickFiltersFrom`), which is the\n\t\t * one the fetch applies.\n\t\t *\n\t\t * @return {number|null} The tab index, or null without tabs.\n\t\t */\n\t\tshownQuickFilterIndex() {\n\t\t\tif (this.activeQuickFilterIndex !== null && this.activeQuickFilterIndex !== undefined) {\n\t\t\t\treturn this.activeQuickFilterIndex\n\t\t\t}\n\t\t\treturn this.quickFilterMultiple ? null : resolveInitialQuickFilterIndex(this.tabStripEntries)\n\t\t},\n\n\t\ttabStripEntries() {\n\t\t\tif (this.sourceRefusal) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tif (this.lensTabs.length > 0) {\n\t\t\t\treturn this.lensTabs\n\t\t\t}\n\t\t\treturn this.effectiveQuickFilters\n\t\t},\n\n\t\t/** @return {Array<object>} The shortcuts the help sheet lists. */\n\t\tshortcutHelpEntries() {\n\t\t\treturn LIST_SHORTCUTS.filter((entry) => typeof this.listShortcutHandlers[entry.id] === 'function')\n\t\t},\n\n\t\t/** @return {string} Heading of the shortcut help sheet. */\n\t\tshortcutHelpTitle() {\n\t\t\treturn t('nextcloud-vue', 'Keyboard shortcuts')\n\t\t},\n\n\t\t/** @return {string} Label of the help sheet's close button. */\n\t\tcloseLabel() {\n\t\t\treturn t('nextcloud-vue', 'Close')\n\t\t},\n\n\t\t/**\n\t\t * Whether the active lens narrowed to nothing because this person has\n\t\t * claimed no teams. The page says that, rather than showing an empty\n\t\t * list under a heading that claims to be filtering by their teams.\n\t\t *\n\t\t * @return {boolean} True when the active lens has nothing to match.\n\t\t */\n\t\tactiveLensNarrowsToNothing() {\n\t\t\tconst index = this.activeQuickFilterIndex\n\t\t\tif (index === null || index === undefined || this.lensTabs.length === 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn Boolean(this.lensTabs[index] && this.lensTabs[index].narrowsToNothing)\n\t\t},\n\n\t\t/**\n\t\t * The declarative sort this page applies, with the priority sort folded\n\t\t * in when the page names a priority field. The value is READ off the\n\t\t * record; nothing here derives one.\n\t\t *\n\t\t * @return {Array<object>} The sort spec.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\teffectiveDefaultSort() {\n\t\t\tconst declared = Array.isArray(this.defaultSort) ? this.defaultSort : []\n\t\t\tif (this.priorityField === '') {\n\t\t\t\treturn declared\n\t\t\t}\n\t\t\tif (declared.some((entry) => entry && entry.field === this.priorityField)) {\n\t\t\t\treturn declared.map((entry) => (entry && entry.field === this.priorityField\n\t\t\t\t\t? { ...entry, levels: this.priorityLevels }\n\t\t\t\t\t: entry))\n\t\t\t}\n\t\t\treturn [{ field: this.priorityField, order: 'desc', levels: this.priorityLevels }, ...declared]\n\t\t},\n\n\t\t/**\n\t\t * The list's keyboard shortcuts, bound to what this page can do. A\n\t\t * shortcut with nothing behind it is left out rather than listed.\n\t\t *\n\t\t * @return {object} Handlers by shortcut id.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tlistShortcutHandlers() {\n\t\t\tconst handlers = {\n\t\t\t\t'row-next': () => this.moveFocusedRow(1),\n\t\t\t\t'row-previous': () => this.moveFocusedRow(-1),\n\t\t\t\t'row-open': () => this.focusedRow && this.onRowClick(this.focusedRow),\n\t\t\t\t'row-select': () => this.toggleFocusedRowSelection(),\n\t\t\t\t'list-help': () => { this.showShortcutHelp = true },\n\t\t\t}\n\t\t\tif (this.quickEditFields.length > 0) {\n\t\t\t\thandlers['row-quick-edit'] = () => this.focusedRow && this.openQuickEdit(this.focusedRow)\n\t\t\t}\n\t\t\tif (this.focusedRow && this.primaryRowActionFor(this.focusedRow)) {\n\t\t\t\thandlers['row-primary'] = () => this.runPrimaryRowAction()\n\t\t\t}\n\t\t\treturn handlers\n\t\t},\n\n\t\t/**\n\t\t * The shortcuts as command-palette entries, so someone who has never\n\t\t * used this list can find every one of them.\n\t\t *\n\t\t * @return {Array<object>} The palette entries.\n\t\t */\n\t\tlistPaletteEntries() {\n\t\t\treturn listPaletteCommands(this.listShortcutHandlers)\n\t\t},\n\n\t\t/**\n\t\t * The row the keyboard is on, or null.\n\t\t *\n\t\t * @return {(object|null)} The focused row.\n\t\t */\n\t\tfocusedRow() {\n\t\t\tconst rows = this.displayObjects || []\n\t\t\tif (this.focusedRowIndex < 0 || this.focusedRowIndex >= rows.length) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn rows[this.focusedRowIndex]\n\t\t},\n\n\t\t/**\n\t\t * The grouping field for a `field`-source folder sidebar.\n\t\t *\n\t\t * @return {string} The property the folders group by, or ''.\n\t\t */\n\t\tfolderSidebarGroupBy() {\n\t\t\tif (!this.folderSidebar) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.folderSidebar.groupBy || this.folderSidebar.field || ''\n\t\t},\n\n\t\t/**\n\t\t * Facet buckets for the folder sidebar's grouping field.\n\t\t *\n\t\t * `:objects` is the current page, so folders derived from it alone list\n\t\t * only the values that happen to have a row on screen. The platform\n\t\t * already answers this properly: OpenRegister computes facets with the\n\t\t * pagination parameters removed, so a facet over the grouping field is\n\t\t * the complete set of distinct values with their true totals. Any\n\t\t * property marked `facetable: true` gets one under `_facets=extend`.\n\t\t *\n\t\t * Read from the live store first, so the folder pane does not depend on\n\t\t * the metadata sidebar being switched on, then from the sidebar config\n\t\t * a consumer-managed page supplies, then from the folder config itself.\n\t\t *\n\t\t * @return {Array<object>} Normalised facet values, or [] when none.\n\t\t */\n\t\tfolderSidebarLiveFacetValues() {\n\t\t\tconst field = this.folderSidebarGroupBy\n\t\t\tif (!field) {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst facets = this.storeFacets\n\t\t\t\t|| (this.folderSidebar && this.folderSidebar.facets)\n\t\t\t\t|| this.resolvedSidebar.facets\n\t\t\t\t|| {}\n\n\t\t\treturn facets[field]?.values || []\n\t\t},\n\n\t\t/**\n\t\t * The folders to show: the live facet, except while a folder is\n\t\t * selected. Selecting one filters the query by the grouping field, so\n\t\t * the live facet then holds that one value and every other folder\n\t\t * would vanish, which makes switching folders impossible. The set seen\n\t\t * before the selection stands in until it is cleared.\n\t\t *\n\t\t * @return {Array<object>} Normalised facet values.\n\t\t */\n\t\tfolderSidebarFacetValues() {\n\t\t\tconst selected = this.selectedFolderId !== null && this.selectedFolderId !== undefined\n\t\t\tif (selected && this.folderSidebarAllValues.length > 0) {\n\t\t\t\treturn this.folderSidebarAllValues\n\t\t\t}\n\t\t\treturn this.folderSidebarLiveFacetValues\n\t\t},\n\n\t\t/**\n\t\t * The facet buckets OpenRegister computed for THIS page's query, or\n\t\t * null when this page does not fetch its own rows.\n\t\t *\n\t\t * Only self-fetch mode has them: the store keys facets by object type\n\t\t * and rewrites that entry from the same response the rows came from, so\n\t\t * what this returns always describes the query currently on screen.\n\t\t * Consumer-managed, named-source and entity-source pages never fetch\n\t\t * through the store, so there is nothing here to read and the caller\n\t\t * falls back to whatever the consumer passed in.\n\t\t *\n\t\t * @return {object|null} The live facet map, or null.\n\t\t */\n\t\tstoreFacets() {\n\t\t\treturn this.isSelfFetchMode ? (this.list.facets?.value || null) : null\n\t\t},\n\n\t\t/**\n\t\t * The schema the presentation picker reads: the page's schema object\n\t\t * once it has properties, else null (no picker).\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tviewPresentationSchema() {\n\t\t\tconst schema = this.effectiveSchema\n\t\t\treturn schema && typeof schema === 'object' && schema.properties && Object.keys(schema.properties).length > 0 ? schema : null\n\t\t},\n\n\t\t/**\n\t\t * Reference columns that ask for a label (`labelField`), with the\n\t\t * referenced register and schema read off the page schema's `$ref`.\n\t\t *\n\t\t * @return {Array<{key: string, labelField: string, register: string, schema: string, route: (string|null), sortByLabel: boolean}>}\n\t\t * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2\n\t\t */\n\t\trefLabelSpecs() {\n\t\t\tconst cols = this.tableColumns.filter((c) => c && typeof c === 'object' && typeof c.labelField === 'string' && c.labelField !== '' && !c.widget)\n\t\t\tif (cols.length === 0 || !this.effectiveSchema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst fields = fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true })\n\t\t\tconst specs = []\n\t\t\tfor (const col of cols) {\n\t\t\t\tconst field = fields.find((f) => f.key === col.key)\n\t\t\t\tconst ref = field && field.reference\n\t\t\t\tif (!ref || ref.schema === undefined || ref.schema === null) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst register = ref.register || (typeof this.register === 'string' ? this.register : '')\n\t\t\t\tconst schema = String(ref.schema)\n\t\t\t\tspecs.push({\n\t\t\t\t\tkey: col.key,\n\t\t\t\t\tlabelField: col.labelField,\n\t\t\t\t\tregister,\n\t\t\t\t\tschema,\n\t\t\t\t\troute: typeof col.route === 'string' && col.route !== '' ? col.route : (col.link === true ? this.detailRouteFor(schema) : null),\n\t\t\t\t\tsortByLabel: col.sortByLabel === true,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn specs\n\t\t},\n\n\t\t/**\n\t\t * The rendered columns by key, so a card fact shows what its table\n\t\t * cell shows (label, formatter, widget).\n\t\t *\n\t\t * @return {object} Column definitions keyed by property.\n\t\t */\n\t\tcardFieldColumns() {\n\t\t\tconst byKey = {}\n\t\t\tfor (const col of this.renderedColumns || []) {\n\t\t\t\tif (col && typeof col === 'object' && typeof col.key === 'string') {\n\t\t\t\t\tbyKey[col.key] = col\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn byKey\n\t\t},\n\n\t\t/**\n\t\t * The property keys the board look's card facts show: the page's\n\t\t * `cardFields`, else the first four list columns. Null without the\n\t\t * look and without `cardFields`, so the card keeps its own default.\n\t\t *\n\t\t * @spec openspec/changes/screens-card-parity/specs/card-board-look/spec.md#requirement-a-record-card-has-a-head-facts-and-one-action\n\t\t * @return {?Array<string>}\n\t\t */\n\t\tresolvedCardFields() {\n\t\t\tconst cardFields = this.presented('cardFields')\n\t\t\tif (Array.isArray(cardFields) && cardFields.length > 0) {\n\t\t\t\treturn cardFields\n\t\t\t}\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\t// A page that declares no columns lets the table derive them from the schema; the card does the same.\n\t\t\tconst columns = this.tableColumns.length > 0 ? this.tableColumns : columnsFromSchema(this.effectiveSchema || {})\n\t\t\treturn columns\n\t\t\t\t.map((col) => (typeof col === 'string' ? col : col && col.key))\n\t\t\t\t.filter((key) => typeof key === 'string' && key !== '' && !key.startsWith('__'))\n\t\t\t\t.slice(0, 4)\n\t\t},\n\n\t\t/**\n\t\t * Columns handed to CnDataTable: `tableColumns`, with each reference\n\t\t * column that has a `labelField` rendered through the `refLabel` cell\n\t\t * widget. Such a column is sortable only with `sortByLabel: true`\n\t\t * (sorting by the key would sort by id, not by what the cell shows).\n\t\t *\n\t\t * @return {Array} The columns to render.\n\t\t * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2\n\t\t */\n\t\trenderedColumns() {\n\t\t\tlet cols = this.tableColumns\n\t\t\tif (this.refLookSpecs.length > 0) {\n\t\t\t\tconst lookKeys = new Set(this.refLookSpecs.map((spec) => spec.key))\n\t\t\t\tcols = cols.map((col) => (col && typeof col === 'object' && lookKeys.has(col.key)\n\t\t\t\t\t? { ...col, widgetProps: { ...(col.widgetProps || {}), looks: this.refLooks[col.key] || {} } }\n\t\t\t\t\t: col))\n\t\t\t}\n\t\t\tif (this.refLabelSpecs.length > 0) {\n\t\t\t\tconst byKey = new Map(this.refLabelSpecs.map((s) => [s.key, s]))\n\t\t\t\tcols = cols.map((col) => {\n\t\t\t\t\tconst spec = col && typeof col === 'object' ? byKey.get(col.key) : null\n\t\t\t\t\tif (!spec) {\n\t\t\t\t\t\treturn col\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...col,\n\t\t\t\t\t\twidget: 'refLabel',\n\t\t\t\t\t\twidgetProps: { ...(col.widgetProps || {}), labels: this.refLabels[spec.key] || {}, route: spec.route },\n\t\t\t\t\t\tsortable: spec.sortByLabel,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\t// An `actions` column: the page's row actions it names, as buttons.\n\t\t\tcols = cols.map((col) => (col && typeof col === 'object' && col.widget === 'actions'\n\t\t\t\t? { ...col, sortable: false, widgetProps: { ...(col.widgetProps || {}), items: (row) => this.actionColumnItems(col, row), run: this.runColumnAction } }\n\t\t\t\t: col))\n\t\t\t// The Recent lens owns the order: no column sorts while it is on.\n\t\t\tif (this.recentLensActive) {\n\t\t\t\tcols = cols.map((col) => (col && typeof col === 'object' ? { ...col, sortable: false } : col))\n\t\t\t}\n\t\t\tif (this.followColumnOn && this.favouriteSchemaSlug !== '') {\n\t\t\t\tcols = [{ key: FOLLOW_COLUMN_KEY, label: '', sortable: false, width: '48px' }, ...cols]\n\t\t\t}\n\t\t\t// Filtering through search fields: a column with no field behind it\n\t\t\t// draws no funnel, because nothing could answer it.\n\t\t\tconst filterFields = this.headerFilterSchema && this.headerFilterSchema.properties\n\t\t\tif (filterFields) {\n\t\t\t\tcols = cols.map((col) => {\n\t\t\t\t\tif (!col || typeof col !== 'object') {\n\t\t\t\t\t\treturn col\n\t\t\t\t\t}\n\t\t\t\t\tconst field = typeof col.filterField === 'string' && col.filterField !== '' ? col.filterField : col.key\n\t\t\t\t\treturn Object.hasOwn(filterFields, field) ? col : { ...col, filterable: false }\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn cols\n\t\t},\n\n\t\t/**\n\t\t * The schema the column header filters read on a named source that\n\t\t * filters through its search fields (`headerFilters: \"searchFields\"`):\n\t\t * the sidebar fields the source declares as search fields, a reference\n\t\t * field pointed at its `optionsSource`. Null otherwise.\n\t\t *\n\t\t * @return {{properties: object}|null}\n\t\t * @spec openspec/changes/named-source-header-filters/specs/index-page/spec.md#requirement-a-named-source-can-filter-from-its-column-headers-through-its-search-fields\n\t\t */\n\t\theaderFilterSchema() {\n\t\t\tif (!this.isNamedSource || !this.namedSource || this.namedSource.headerFilters !== 'searchFields') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst sidebarFields = (this.resolvedSidebar && this.resolvedSidebar.fields) || {}\n\t\t\tconst declared = declaredSearchFields(this.namedSource, this.sourceConfig && this.sourceConfig.searchFields) || {}\n\t\t\tconst properties = {}\n\t\t\tfor (const [key, field] of Object.entries(sidebarFields)) {\n\t\t\t\tif (!field || typeof field !== 'object' || !Object.hasOwn(declared, key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst options = field.optionsSource\n\t\t\t\tproperties[key] = (field.inputControl === 'reference' && options && typeof options.schema === 'string')\n\t\t\t\t\t? { ...field, $ref: options.schema, 'x-external-register': options.register || '' }\n\t\t\t\t\t: field\n\t\t\t}\n\t\t\treturn { properties }\n\t\t},\n\n\t\t/**\n\t\t * Whether the follow column renders (`showFollowColumn`, or the deprecated `showFavouriteColumn`).\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/one-follow-control/specs/record-follow/spec.md#requirement-index-pages-offer-one-following-lens-and-a-follow-column\n\t\t */\n\t\tfollowColumnOn() {\n\t\t\treturn this.showFollowColumn || this.showFavouriteColumn\n\t\t},\n\n\t\t/**\n\t\t * Whether the active quick filter is the Recent lens.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/record-favourite-and-follow/tasks.md#task-3\n\t\t */\n\t\trecentLensActive() {\n\t\t\tconst tabs = this.effectiveQuickFilters || []\n\t\t\tconst index = this.activeQuickFilterIndex\n\t\t\tconst active = (index !== null && index !== undefined) ? tabs[index] : null\n\t\t\treturn !!(active && active.filter && active.filter._recent)\n\t\t},\n\n\t\t/**\n\t\t * Schema slug the follow column calls with: the page's own slug in self-fetch\n\t\t * mode, else the schema object's `slug`. Empty when neither is known.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tfavouriteSchemaSlug() {\n\t\t\tif (typeof this.schema === 'string') {\n\t\t\t\treturn this.schema\n\t\t\t}\n\t\t\treturn (this.effectiveSchema && typeof this.effectiveSchema.slug === 'string') ? this.effectiveSchema.slug : ''\n\t\t},\n\n\t\t/**\n\t\t * The ids each reference label column needs, from the rows and the facet buckets.\n\t\t *\n\t\t * @return {Object<string, string[]>} Distinct ids per column key.\n\t\t */\n\t\t/**\n\t\t * The pills that take their tone and icon from the record they point at\n\t\t * (`resolve: { colorField?, iconField?, register?, schema? }`): badge\n\t\t * columns and the list view's leading and trailing cells\n\t\t * (`widgetProps.resolve`), the board card's pill (`board.card.resolve`)\n\t\t * and the record card's pills (`cardLayout` headPill, footerPill, chips).\n\t\t * Register and schema default to the field's reference in the schema.\n\t\t *\n\t\t * @return {Array<{key: string, register: string, schema: string, colorField: string, iconField: string}>} The specs.\n\t\t * @spec openspec/changes/pill-color-field/specs/pill-color-field/spec.md#requirement-a-badge-cell-takes-its-tone-and-icon-from-the-referenced-record\n\t\t */\n\t\trefLookSpecs() {\n\t\t\tconst list = this.listConfig || {}\n\t\t\tconst listCells = [list.leading, ...(Array.isArray(list.trailing) ? list.trailing : [list.trailing])]\n\t\t\tconst badgeSources = [...this.tableColumns, ...listCells]\n\t\t\t\t.filter((c) => c && typeof c === 'object' && c.widget === 'badge' && c.widgetProps)\n\t\t\t\t.map((c) => ({ key: c.key, resolve: c.widgetProps.resolve }))\n\t\t\t// The board card's pill (`board.card.pill` with `board.card.resolve`)\n\t\t\t// and the record card's pills (`cardLayout` headPill, footerPill,\n\t\t\t// chips, each with its own `resolve`).\n\t\t\tconst card = this.board && this.board.card && typeof this.board.card === 'object' ? this.board.card : {}\n\t\t\tconst layout = this.cardLayout && typeof this.cardLayout === 'object' ? this.cardLayout : {}\n\t\t\tconst layoutPills = [layout.headPill, layout.footerPill, ...(Array.isArray(layout.chips) ? layout.chips : [])]\n\t\t\t\t.filter((def) => def && typeof def === 'object')\n\t\t\t\t.map((def) => ({ key: def.field, resolve: def.resolve }))\n\t\t\t// The map list's pills (`mapConfig.list.pills`, each with its own `resolve`).\n\t\t\tconst mapListPills = (this.mapListEnabled && Array.isArray(this.mapConfig.list.pills) ? this.mapConfig.list.pills : [])\n\t\t\t\t.filter((def) => def && typeof def === 'object')\n\t\t\t\t.map((def) => ({ key: def.path, resolve: def.resolve }))\n\t\t\tconst seen = new Set()\n\t\t\tconst cols = [...badgeSources, { key: card.pill, resolve: card.resolve }, ...layoutPills, ...mapListPills].filter((c) => {\n\t\t\t\tconst wanted = typeof c.key === 'string' && c.key !== '' && c.resolve && typeof c.resolve === 'object'\n\t\t\t\t\t&& (c.resolve.colorField || c.resolve.iconField) && !seen.has(c.key)\n\t\t\t\tif (wanted) {\n\t\t\t\t\tseen.add(c.key)\n\t\t\t\t}\n\t\t\t\treturn wanted\n\t\t\t})\n\t\t\tif (cols.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst fields = this.effectiveSchema ? fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true }) : []\n\t\t\tconst specs = []\n\t\t\tfor (const col of cols) {\n\t\t\t\tconst resolve = col.resolve\n\t\t\t\tconst field = fields.find((f) => f.key === col.key)\n\t\t\t\tconst ref = (field && field.reference) || {}\n\t\t\t\tconst register = resolve.register || ref.register || (typeof this.register === 'string' ? this.register : '')\n\t\t\t\tconst schema = resolve.schema || (ref.schema !== undefined && ref.schema !== null ? String(ref.schema) : '')\n\t\t\t\tif (!register || !schema) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tspecs.push({ key: col.key, register, schema, colorField: resolve.colorField || '', iconField: resolve.iconField || '' })\n\t\t\t}\n\t\t\treturn specs\n\t\t},\n\n\t\t/**\n\t\t * `listConfig` with the referenced records' looks on its badge cells,\n\t\t * as `renderedColumns` does for the table.\n\t\t *\n\t\t * @return {object} The list view's config.\n\t\t * @spec openspec/changes/pill-color-field/specs/pill-color-field/spec.md#requirement-a-badge-cell-takes-its-tone-and-icon-from-the-referenced-record\n\t\t */\n\t\trenderedListConfig() {\n\t\t\tconst list = this.listConfig\n\t\t\tif (!list || this.refLookSpecs.length === 0) {\n\t\t\t\treturn list\n\t\t\t}\n\t\t\tconst lookKeys = new Set(this.refLookSpecs.map((spec) => spec.key))\n\t\t\tconst withLooks = (cell) => (cell && typeof cell === 'object' && lookKeys.has(cell.key)\n\t\t\t\t? { ...cell, widgetProps: { ...(cell.widgetProps || {}), looks: this.refLooks[cell.key] || {} } }\n\t\t\t\t: cell)\n\t\t\treturn {\n\t\t\t\t...list,\n\t\t\t\t...(list.leading ? { leading: withLooks(list.leading) } : {}),\n\t\t\t\t...(list.trailing ? { trailing: Array.isArray(list.trailing) ? list.trailing.map(withLooks) : withLooks(list.trailing) } : {}),\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The ids each `refLookSpecs` column shows on screen.\n\t\t *\n\t\t * @return {{[key: string]: Array<string>}} Sorted ids by column key.\n\t\t */\n\t\trefLookIds() {\n\t\t\tconst out = {}\n\t\t\tfor (const spec of this.refLookSpecs) {\n\t\t\t\tconst ids = new Set()\n\t\t\t\tfor (const row of this.displayObjects) {\n\t\t\t\t\tconst v = row ? row[spec.key] : undefined\n\t\t\t\t\t;(Array.isArray(v) ? v : [v]).forEach((id) => {\n\t\t\t\t\t\tif (id !== null && id !== undefined && id !== '' && typeof id !== 'object') {\n\t\t\t\t\t\t\tids.add(String(id))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tout[spec.key] = [...ids].sort()\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\trefLabelIds() {\n\t\t\tconst out = {}\n\t\t\tconst facets = this.storeFacets || this.resolvedSidebar.facets || {}\n\t\t\tfor (const spec of this.refLabelSpecs) {\n\t\t\t\tconst ids = new Set()\n\t\t\t\tfor (const row of this.displayObjects) {\n\t\t\t\t\tconst v = row ? row[spec.key] : undefined\n\t\t\t\t\t;(Array.isArray(v) ? v : [v]).forEach((id) => {\n\t\t\t\t\t\tif (id !== null && id !== undefined && id !== '' && typeof id !== 'object') {\n\t\t\t\t\t\t\tids.add(String(id))\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst values = facets[spec.key] && Array.isArray(facets[spec.key].values) ? facets[spec.key].values : []\n\t\t\t\tvalues.forEach((fv) => {\n\t\t\t\t\tconst id = fv && typeof fv === 'object' ? fv.value : fv\n\t\t\t\t\tif (id !== null && id !== undefined && id !== '') {\n\t\t\t\t\t\tids.add(String(id))\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tout[spec.key] = [...ids].sort()\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Facet data for the index sidebar.\n\t\t *\n\t\t * The `sidebar.facets` key is a DATA channel, not a declaration of\n\t\t * which facets exist: its docblock calls it \"live facet data\" and it\n\t\t * feeds CnIndexSidebar's `facetData` prop unchanged. Which filters the\n\t\t * sidebar offers comes from the schema (`filtersFromSchema` over the\n\t\t * facetable properties), and a filter with no bucket falls back to its\n\t\t * own declarative `options`. So there is nothing to merge here — the\n\t\t * two sources answer the same question, and the fresher one wins.\n\t\t *\n\t\t * A manifest-driven page has no consumer to fill `sidebar.facets`, so\n\t\t * before this read the sidebar was handed the manifest's sidebar config\n\t\t * and every facet rendered \"No results\" while the response body carried\n\t\t * the buckets.\n\t\t *\n\t\t * Note the store wins even when it is empty (`{}` is truthy), which is\n\t\t * deliberate and the conservative direction: until the first response\n\t\t * lands, offering no options is right, and offering options left over\n\t\t * from a config that never described this query would be worse. Same\n\t\t * precedence `folderSidebarFacetValues` has always used.\n\t\t *\n\t\t * @return {object} `{ fieldName: { values: [...] } }`, possibly empty.\n\t\t */\n\t\teffectiveFacetData() {\n\t\t\tconst data = this.storeFacets || this.resolvedSidebar.facets || {}\n\t\t\tif (this.refLabelSpecs.length === 0) {\n\t\t\t\treturn data\n\t\t\t}\n\t\t\t// A facet over a reference column lists labels; the value stays the id.\n\t\t\tconst out = { ...data }\n\t\t\tfor (const spec of this.refLabelSpecs) {\n\t\t\t\tconst facet = data[spec.key]\n\t\t\t\tconst labels = this.refLabels[spec.key] || {}\n\t\t\t\tif (facet && Array.isArray(facet.values)) {\n\t\t\t\t\tout[spec.key] = {\n\t\t\t\t\t\t...facet,\n\t\t\t\t\t\tvalues: facet.values.map((fv) => {\n\t\t\t\t\t\t\tconst id = fv && typeof fv === 'object' ? fv.value : fv\n\t\t\t\t\t\t\tconst label = labels[String(id)]\n\t\t\t\t\t\t\tconst base = fv && typeof fv === 'object' ? fv : { value: fv }\n\t\t\t\t\t\t\treturn label ? { ...base, label } : base\n\t\t\t\t\t\t}),\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Whether the rows handed to the folder sidebar are only part of the\n\t\t * result set. True when the list is paged beyond what is loaded and no\n\t\t * facet is available to complete the picture, which is exactly when\n\t\t * folders can be missing and a per-page count would read as a total.\n\t\t *\n\t\t * @return {boolean} True when the folder list is knowingly incomplete.\n\t\t */\n\t\tfolderSidebarPartial() {\n\t\t\tif (this.folderSidebarFacetValues.length > 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst total = Number(this.effectivePagination?.total ?? 0)\n\t\t\treturn total > this.effectiveObjects.length\n\t\t},\n\n\t\t/**\n\t\t * id/name field names passed to CnFolderSidebar for the custom folder\n\t\t * list. The `register` source is pre-mapped to `{ id, name }` by\n\t\t * `loadFolderRegister`, so it uses the plain keys; a `custom` source\n\t\t * passes the objects through untouched and honours the config's fields.\n\t\t *\n\t\t * @return {string} The id field key.\n\t\t */\n\t\tfolderPassthroughIdField() {\n\t\t\tif (this.folderSidebar && (this.folderSidebar.source === 'register' || this.folderSidebar.source === 'groups')) {\n\t\t\t\treturn 'id'\n\t\t\t}\n\t\t\treturn (this.folderSidebar && this.folderSidebar.idField) || 'id'\n\t\t},\n\n\t\t/**\n\t\t * @return {string} The name field key for CnFolderSidebar's custom list.\n\t\t */\n\t\tfolderPassthroughNameField() {\n\t\t\tif (this.folderSidebar && (this.folderSidebar.source === 'register' || this.folderSidebar.source === 'groups')) {\n\t\t\t\treturn 'name'\n\t\t\t}\n\t\t\treturn (this.folderSidebar && this.folderSidebar.nameField) || 'name'\n\t\t},\n\n\t\t/**\n\t\t * Inline GeoJSON markers for the map view, built from the CURRENT filtered\n\t\t * `displayObjects` using `mapConfig`. Each feature stashes the row's\n\t\t * `rowKey` in `properties` so a marker click can resolve back to its source\n\t\t * row. Rows without finite, resolvable geometry are skipped silently.\n\t\t *\n\t\t * @return {{ features: object[], popupField: (string|undefined) }}\n\t\t */\n\t\tmapMarkers() {\n\t\t\tconst features = []\n\t\t\t// With the list beside the map, a pin carries the row's number there.\n\t\t\tconst numbers = this.mapListEnabled ? new Map(this.mapList.items.map((item) => [item.row, item.n])) : null\n\t\t\tfor (const row of this.displayObjects) {\n\t\t\t\tconst geometry = this.resolveRowGeometry(row)\n\t\t\t\tif (!geometry) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst markerColor = resolveCssColor(markerColorOf(row, this.mapMarkerColor, this.mapColorRefsById))\n\t\t\t\tfeatures.push({\n\t\t\t\t\ttype: 'Feature',\n\t\t\t\t\tgeometry,\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\t[this.rowKey]: row[this.rowKey],\n\t\t\t\t\t\t...(markerColor ? { markerColor } : {}),\n\t\t\t\t\t\t...(this.mapConfig.popupField ? { [this.mapConfig.popupField]: row[this.mapConfig.popupField] } : {}),\n\t\t\t\t\t\t...(numbers && numbers.has(row) ? { markerNumber: numbers.get(row), markerActive: this.activeMapKey === String(row[this.rowKey]) } : {}),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn { features, popupField: this.mapConfig.popupField }\n\t\t},\n\n\t\t/**\n\t\t * Whether to cluster the plotted markers. ON unless `mapConfig.clustering`\n\t\t * says otherwise, which is the opposite of `CnMapWidget`'s own default.\n\t\t *\n\t\t * An index map plots the whole filtered result set, and rows sharing one\n\t\t * address is the normal case here, not an edge case — several permits on a\n\t\t * building, a street of complaints. Unclustered, those markers stack at\n\t\t * identical pixels: the topmost swallows every click and the rest are\n\t\t * unreachable with nothing on screen saying they exist. Clustering shows the\n\t\t * count and, since all children stay in one cluster down to max zoom,\n\t\t * markercluster spiderfies them into a fan on click instead of zooming\n\t\t * uselessly. Non-point geometry skips the cluster group entirely, so areas\n\t\t * are unaffected.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tmapClustering() {\n\t\t\treturn this.mapConfig.clustering !== false\n\t\t},\n\n\t\t/**\n\t\t * The marker colour rule (`mapConfig.markerColor`), or null.\n\t\t *\n\t\t * @return {object|null} The normalised rule.\n\t\t * @spec openspec/changes/index-map-parity/specs/index-page/spec.md#requirement-a-marker-can-take-its-colour-from-a-field\n\t\t */\n\t\tmapMarkerColor() {\n\t\t\treturn normalizeMarkerColor(this.mapConfig && this.mapConfig.markerColor)\n\t\t},\n\n\t\t/** @return {Map<string, object>} The marker colour source rows by id. */\n\t\tmapColorRefsById() {\n\t\t\treturn new Map((this.mapColorRefs || []).map((row) => [refIdOf(row), row]))\n\t\t},\n\n\t\t/** @return {string} Changes when the marker colour source must be read. */\n\t\tmapColorFetchKey() {\n\t\t\tconst source = this.mapMarkerColor && this.mapMarkerColor.source\n\t\t\tif (this.currentViewMode !== 'map' || !source) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn [this.mapMarkerColor.field, source.register || '', source.schema || '', this.effectiveSchema ? 1 : 0].join('|')\n\t\t},\n\n\t\t/**\n\t\t * How many rows the map plots when it plots every matching row\n\t\t * (`mapConfig.plotAll`: `true` for 500, or a\n\t\t * number), 0 when it plots the current page.\n\t\t *\n\t\t * @return {number} The limit.\n\t\t * @spec openspec/changes/index-map-parity/specs/index-page/spec.md#requirement-the-map-can-plot-every-matching-row\n\t\t */\n\t\tmapPlotAllLimit() {\n\t\t\treturn mapPlotAllLimitOf(this.mapConfig)\n\t\t},\n\n\t\t/** @return {number} The rows that match the filters. */\n\t\tmapMatchTotal() {\n\t\t\treturn Math.max(this.displayObjects.length, Number(this.effectivePagination?.total || 0))\n\t\t},\n\n\t\t/**\n\t\t * The count line under the map (`mapConfig.count`): `true` for \"Showing\n\t\t * {located} of {total} located\", or a template with `{located}` and\n\t\t * `{total}` through the host's translate. '' when not asked for.\n\t\t *\n\t\t * @return {string} The line.\n\t\t * @spec openspec/changes/index-map-parity/specs/index-page/spec.md#requirement-the-map-can-say-how-many-rows-it-placed\n\t\t */\n\t\tmapCountLine() {\n\t\t\tconst count = this.mapConfig && this.mapConfig.count\n\t\t\tif (this.currentViewMode !== 'map' || !count) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst vars = { located: this.mapMarkers.features.length, total: this.mapMatchTotal }\n\t\t\tif (typeof count === 'string' && count !== '') {\n\t\t\t\treturn this.cnTranslate(count).replace(/\\{(located|total)\\}/g, (_, key) => String(vars[key]))\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'Showing {located} of {total} located', vars)\n\t\t},\n\n\t\t/**\n\t\t * The note when a map that plots every row hit its limit.\n\t\t *\n\t\t * @return {string} The note, or ''.\n\t\t */\n\t\tmapCapNote() {\n\t\t\tconst limit = this.mapPlotAllLimit\n\t\t\tif (this.currentViewMode !== 'map' || limit === 0 || this.mapMatchTotal <= this.displayObjects.length) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', 'The map shows the first {limit} of {total}. Narrow the filters to see the rest.', { limit: this.displayObjects.length, total: this.mapMatchTotal })\n\t\t},\n\n\t\t/** @return {number|undefined} The map's initial zoom (`mapConfig.zoom`), when a number. */\n\t\tmapZoom() {\n\t\t\tconst zoom = this.mapConfig && this.mapConfig.zoom\n\t\t\treturn typeof zoom === 'number' && Number.isFinite(zoom) ? zoom : undefined\n\t\t},\n\n\t\t/** @return {boolean} Whether the map draws its numbered list (`mapConfig.list`). */\n\t\tmapListEnabled() {\n\t\t\tconst list = this.mapConfig && this.mapConfig.list\n\t\t\treturn Boolean(list && typeof list === 'object' && typeof list.title === 'string' && list.title !== '')\n\t\t},\n\n\t\t/**\n\t\t * The map list's entries, numbered as the pins, and the rows without a\n\t\t * place. Templates go through the host's translate first.\n\t\t *\n\t\t * @return {{items: Array<object>, missing: Array<object>}}\n\t\t */\n\t\tmapList() {\n\t\t\tif (!this.mapListEnabled) {\n\t\t\t\treturn { items: [], missing: [] }\n\t\t\t}\n\t\t\tconst list = this.mapConfig.list\n\t\t\tconst translated = {\n\t\t\t\t...list,\n\t\t\t\ttitle: this.cnTranslate(list.title),\n\t\t\t\tsub: Array.isArray(list.sub) ? list.sub.map((s) => this.cnTranslate(s)) : (list.sub ? this.cnTranslate(list.sub) : ''),\n\t\t\t\tdue: list.due ? this.cnTranslate(list.due) : '',\n\t\t\t}\n\t\t\treturn mapListItems(this.displayObjects, translated, {\n\t\t\t\trowKey: this.rowKey,\n\t\t\t\tlocated: (row) => Boolean(this.resolveRowGeometry(row)),\n\t\t\t\ttranslate: (text) => this.cnTranslate(text),\n\t\t\t\tformatters: this.cnFormatters,\n\t\t\t\tlooks: this.refLooks,\n\t\t\t})\n\t\t},\n\n\t\t/** @return {string} The list's accessible name. */\n\t\tmapListLabel() {\n\t\t\treturn t('nextcloud-vue', 'On the map')\n\t\t},\n\n\t\t/** @return {string} The card under the list, for the rows without a place. */\n\t\tmapMissingTitle() {\n\t\t\treturn n('nextcloud-vue', '%n without an address', '%n without an address', this.mapList.missing.length)\n\t\t},\n\n\t\t/** @return {string} The link from that card to the table. */\n\t\tmapMissingLink() {\n\t\t\treturn t('nextcloud-vue', 'Show them in the table')\n\t\t},\n\n\t\t/**\n\t\t * Extra (non-background) map layers — WMS / WFS / GeoJSON overlays declared in\n\t\t * `mapConfig.layers`. The background map comes from `mapBasemaps` instead, so\n\t\t * this is empty unless the consumer configured overlays.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmapLayers() {\n\t\t\tif (Array.isArray(this.mapConfig.layers) && this.mapConfig.layers.length > 0) {\n\t\t\t\treturn this.mapConfig.layers\n\t\t\t}\n\t\t\treturn []\n\t\t},\n\n\t\t/**\n\t\t * Switchable background maps.\n\t\t *\n\t\t * Defaults to OpenStreetMap standard ONLY. Every extra basemap is an `<img>`\n\t\t * load from a third-party host, which a Nextcloud app's Content-Security-Policy\n\t\t * (`img-src`) blocks unless that app explicitly allowlists the host — so a\n\t\t * richer default would ship dead options to consumers that never widened their\n\t\t * CSP. Apps that want a switcher declare the set in `mapConfig.basemaps` AND\n\t\t * allowlist those hosts (see Dossiq's `relaxCspForMapTiles()`).\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tmapBasemaps() {\n\t\t\tif (Array.isArray(this.mapConfig.basemaps) && this.mapConfig.basemaps.length > 0) {\n\t\t\t\treturn this.mapConfig.basemaps\n\t\t\t}\n\t\t\treturn [{\n\t\t\t\tname: t('nextcloud-vue', 'Standard'),\n\t\t\t\turl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n\t\t\t\tattribution: '© OpenStreetMap contributors',\n\t\t\t}]\n\t\t},\n\n\t\t/**\n\t\t * Initial map centre `[lat, lng]`. Uses the centroid of the plotted markers\n\t\t * when any exist (CnMapWidget's autoFit then tightens to the bounds); falls\n\t\t * back to `mapConfig.center`, then a neutral world view when the set is empty.\n\t\t *\n\t\t * @return {[number, number]}\n\t\t */\n\t\tmapCenter() {\n\t\t\tconst feats = this.mapMarkers.features\n\t\t\tif (feats.length > 0) {\n\t\t\t\tlet sumLat = 0\n\t\t\t\tlet sumLng = 0\n\t\t\t\tfor (const f of feats) {\n\t\t\t\t\tconst _p = this.firstLatLng(f.geometry)\n\t\t\t\t\tif (!_p) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tsumLng += _p.lng\n\t\t\t\t\tsumLat += _p.lat\n\t\t\t\t}\n\t\t\t\treturn [sumLat / feats.length, sumLng / feats.length]\n\t\t\t}\n\t\t\tif (Array.isArray(this.mapConfig.center) && this.mapConfig.center.length === 2) {\n\t\t\t\treturn this.mapConfig.center\n\t\t\t}\n\t\t\treturn [0, 0]\n\t\t},\n\n\t\t/** Loading flag: store loading in self-fetch mode, else the `loading` prop. */\n\t\teffectiveLoading() {\n\t\t\tif (this.isNamedSource) {\n\t\t\t\treturn this.namedLoading\n\t\t\t}\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\treturn this.sortSource.state === 'loading'\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? !!this.list.loading.value : this.loading\n\t\t},\n\n\t\t/**\n\t\t * Whether to replace the page with the full loading spinner. Only on an\n\t\t * INITIAL fetch — i.e. while loading AND there is no data to show yet.\n\t\t * A background refresh (e.g. the on-visibility refetch) keeps the\n\t\t * existing rows on screen and updates them in place instead of flashing\n\t\t * the spinner over already-rendered content (fetchCollection preserves\n\t\t * the prior collection until the new results arrive).\n\t\t */\n\t\tshowInitialLoader() {\n\t\t\treturn this.effectiveLoading && this.effectiveObjects.length === 0\n\t\t},\n\n\t\t/**\n\t\t * Refresh-spinner flag for the Actions menu: the `refreshing` prop\n\t\t * OR (self-fetch mode) the internally-tracked refresh. Lets manifest\n\t\t * and self-fetch pages spin the Refresh action without the host\n\t\t * wiring `:refreshing` (it has no fetch promise to await).\n\t\t */\n\t\teffectiveRefreshing() {\n\t\t\treturn this.refreshing || this.internalRefreshing\n\t\t},\n\n\t\t/** Pagination: store pagination in self-fetch mode, else the `pagination` prop. */\n\t\teffectivePagination() {\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\treturn this.sortSourceView.pagination\n\t\t\t}\n\t\t\tif (this.selfFetchFailed) {\n\t\t\t\treturn { ...this.list.pagination.value, total: 0, page: 1, pages: 1 }\n\t\t\t}\n\t\t\t// A named source that reports its own total (the search source)\n\t\t\t// gives the count line its number.\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.total === 'function') {\n\t\t\t\tconst total = this.namedSource.total()\n\t\t\t\t// A source with `pages: true` gets the pager the self-fetched lists draw.\n\t\t\t\tif (this.namedSource.pages === true) {\n\t\t\t\t\tconst { page, limit } = this.namedPaging\n\t\t\t\t\treturn { page, limit, total, pages: Math.max(1, Math.ceil(total / limit)) }\n\t\t\t\t}\n\t\t\t\treturn { ...(this.pagination || {}), total }\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.pagination.value : this.pagination\n\t\t},\n\n\t\t/**\n\t\t * The saved view the page has applied, or null.\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tappliedSavedView() {\n\t\t\tconst id = this.appliedSavedViewId\n\t\t\tif (!id) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (this.savedViews || []).find((view) => view && (String(view.id) === id || String(view.slug) === id || String(view.uuid) === id)) || null\n\t\t},\n\n\t\t/**\n\t\t * The search field's placeholder: the open view's own\n\t\t * (`searchPlaceholderByView`), else the page's or its preset's.\n\t\t *\n\t\t * @spec openspec/changes/search-placeholder-per-view/specs/index-page/spec.md#requirement-the-search-placeholder-can-differ-per-view\n\t\t * @return {string}\n\t\t */\n\t\tshownSearchPlaceholder() {\n\t\t\tconst byView = this.searchPlaceholderByView\n\t\t\tconst own = byView && typeof byView === 'object' ? byView[this.currentViewMode] : ''\n\t\t\tconst text = typeof own === 'string' && own !== '' ? own : this.presented('searchPlaceholder')\n\t\t\treturn text ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The term a named source searched for, for `{term}` in the title and\n\t\t * the count line (\"Zoeken: Lindelaan\"), or ''.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tsourceTerm() {\n\t\t\treturn this.isNamedSource && this.namedSource && typeof this.namedSource.term === 'function' ? String(this.namedSource.term() || '') : ''\n\t\t},\n\n\t\t/**\n\t\t * The page title with `{term}` filled in, or the applied saved view's\n\t\t * name when `savedViewTitle` is on.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tshownTitle() {\n\t\t\tconst view = this.savedViewTitle ? this.appliedSavedView : null\n\t\t\tif (view && typeof view.name === 'string' && view.name !== '') {\n\t\t\t\treturn this.cnTranslate(view.name)\n\t\t\t}\n\t\t\tconst title = this.presented('title')\n\t\t\t// A title with the term is translated here, before the term goes in,\n\t\t\t// so its catalogue entry is found (\"Zoeken: {term}\").\n\t\t\treturn typeof title === 'string' && title.includes('{term}')\n\t\t\t\t? this.cnTranslate(title).replace(/\\{term\\}/g, this.sourceTerm)\n\t\t\t\t: title\n\t\t},\n\n\t\t/**\n\t\t * Whether the table marks unread rows. `showUnreadRows` decides when\n\t\t * the page sets it. Otherwise the boards draw every row alike, so under\n\t\t * the board look only a page that offers the Unread lens\n\t\t * (`personalLenses`) marks them; the Nextcloud look always does.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-unread-rows-are-marked-only-where-the-reader-asked-for-them\n\t\t * @spec openspec/changes/cell-config-growth/specs/cell-config-growth/spec.md#requirement-a-page-can-ask-for-its-unread-rows\n\t\t * @return {boolean} True when unread rows read in bold with the dot.\n\t\t */\n\t\tmarksUnreadRows() {\n\t\t\tif (typeof this.showUnreadRows === 'boolean') {\n\t\t\t\treturn this.showUnreadRows\n\t\t\t}\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Array.isArray(this.personalLenses) && this.personalLenses.includes('unread')\n\t\t},\n\n\t\t/** Resolved schema OBJECT (for column generation / icons / labels). */\n\t\t/**\n\t\t * Whether the table shows its header filters. A self-fetching page\n\t\t * applies them itself, with or without a resolved schema (the columns\n\t\t * then say how each one filters, else a text filter on contains). A\n\t\t * host-fed table shows them when a schema came along, as before, or\n\t\t * when the host listens for `filter-change`; a filter nobody applies\n\t\t * would be a control that does nothing.\n\t\t *\n\t\t * @spec openspec/changes/audit-round-lib-fixes/specs/cn-data-table/spec.md\n\t\t * @return {boolean} True when header filters show.\n\t\t */\n\t\ttableHeaderFilters() {\n\t\t\tif (!this.headerFilters) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// A named source that narrows its own rows asks for the buttons, and\n\t\t\t// one that filters through its search fields gets them where a field\n\t\t\t// stands behind the column.\n\t\t\tif (this.isNamedSource && this.namedSource && (this.namedSource.headerFilters === true || Boolean(this.headerFilterSchema))) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (this.effectiveSchema || this.isSelfFetchMode) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst vnodeProps = (this.$ && this.$.vnode && this.$.vnode.props) || {}\n\t\t\treturn typeof vnodeProps.onFilterChange === 'function' || Array.isArray(vnodeProps.onFilterChange)\n\t\t},\n\n\t\teffectiveSchema() {\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\treturn this.list.schema.value\n\t\t\t}\n\t\t\treturn (this.schema && typeof this.schema === 'object') ? this.schema : null\n\t\t},\n\n\t\t/** The form dialog's schema: the edited row's own when it is of another pair. */\n\t\tformSchema() {\n\t\t\treturn this.rowFormTarget ? this.rowFormSchema : this.effectiveSchema\n\t\t},\n\n\t\t/** The form dialog's register, following `formSchema`. */\n\t\tformRegister() {\n\t\t\treturn this.rowFormTarget ? this.rowFormTarget.register : this.register\n\t\t},\n\n\t\t/**\n\t\t * Schema slug for the export-leaf URL — the `schema` prop directly\n\t\t * when it's a string (self-fetch mode's precondition), else the\n\t\t * resolved schema object's `slug`/`name`.\n\t\t */\n\t\texportSchemaSlug() {\n\t\t\tif (typeof this.schema === 'string') {\n\t\t\t\treturn this.schema\n\t\t\t}\n\t\t\treturn this.effectiveSchema?.slug || this.effectiveSchema?.name || ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the native Export menu renders in the toolbar: opt-in via\n\t\t * `allowExport` AND the resolved schema flagged `exportable: true`.\n\t\t * Default-safe — false unless both hold.\n\t\t */\n\t\tshowExportMenu() {\n\t\t\treturn Boolean(this.allowExport) && this.schemaExportable && Boolean(this.register) && Boolean(this.exportSchemaSlug)\n\t\t},\n\n\t\t/**\n\t\t * Whether the schema is flagged exportable, in either place\n\t\t * OpenRegister could keep the flag: the top-level `exportable`, or\n\t\t * `configuration.exportable`. The top-level field wins when both are\n\t\t * set.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tschemaExportable() {\n\t\t\tconst schema = this.effectiveSchema\n\t\t\tif (schema && schema.exportable !== undefined && schema.exportable !== null) {\n\t\t\t\treturn Boolean(schema.exportable)\n\t\t\t}\n\t\t\treturn Boolean(schema && schema.configuration && schema.configuration.exportable)\n\t\t},\n\n\t\t/**\n\t\t * The sentence the mass-export dialog opens with: which rows it will\n\t\t * export, and how many.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tmassExportScopeText() {\n\t\t\tconst selected = this.internalSelectedIds.length\n\t\t\tif (selected > 0) {\n\t\t\t\treturn selected === 1\n\t\t\t\t\t? t('nextcloud-vue', 'Export 1 selected row')\n\t\t\t\t\t: t('nextcloud-vue', 'Export {count} selected rows', { count: selected })\n\t\t\t}\n\t\t\tconst total = this.effectivePagination && this.effectivePagination.total\n\t\t\treturn typeof total === 'number'\n\t\t\t\t? t('nextcloud-vue', 'Export {count} rows matching the current filter', { count: total })\n\t\t\t\t: t('nextcloud-vue', 'Export the rows matching the current filter')\n\t\t},\n\n\t\t/**\n\t\t * The signed-in NC user id — passed to CnSavedViewsControl to gate\n\t\t * the per-view delete affordance (saved-views-ui).\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\t/**\n\t\t * The page as `savedViewScope` and `viewMatchesScope` take it.\n\t\t *\n\t\t * @return {{ scope: string, register: string, schema: object|string|null }} The page's source.\n\t\t */\n\t\tsavedViewsPage() {\n\t\t\treturn { scope: this.savedViewsScope, register: this.register, schema: this.schema, source: this.entitySource }\n\t\t},\n\n\t\t/**\n\t\t * Whether this page offers saved views in its sidebar.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tsavedViewsOffered() {\n\t\t\treturn pageOffersSavedViews(this)\n\t\t},\n\n\t\t/**\n\t\t * The fetched views that belong on this page.\n\t\t *\n\t\t * @return {Array<object>} The views to offer.\n\t\t */\n\t\tvisibleSavedViews() {\n\t\t\treturn this.savedViews.filter((view) => viewMatchesScope(view, this.savedViewsPage))\n\t\t},\n\n\t\tcurrentSavedViewsUserId() {\n\t\t\tconst user = getCurrentUser()\n\t\t\treturn (user && user.uid) || ''\n\t\t},\n\n\t\t/**\n\t\t * The line above the delete-saved-view confirm's title: \"Saved view\"\n\t\t * in the board look, as on the view's edit and share dialogs.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/board-delete-view-confirm-header/specs/board-delete-view-confirm-header/spec.md#requirement-the-board-delete-view-confirm-names-the-saved-view\n\t\t */\n\t\tdeleteViewEyebrow() {\n\t\t\treturn this.isBoardLook ? t('nextcloud-vue', 'Saved view') : ''\n\t\t},\n\n\t\t/**\n\t\t * The line under the delete-saved-view confirm's title: the view's\n\t\t * name, in the board look.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/board-delete-view-confirm-header/specs/board-delete-view-confirm-header/spec.md#requirement-the-board-delete-view-confirm-names-the-saved-view\n\t\t */\n\t\tdeleteViewSubtitle() {\n\t\t\treturn this.isBoardLook && this.viewPendingDelete ? String(this.viewPendingDelete.name || '') : ''\n\t\t},\n\n\t\t/**\n\t\t * Confirmation message for the delete-saved-view dialog.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tdeleteViewMessage() {\n\t\t\tif (!this.viewPendingDelete) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst view = this.viewPendingDelete\n\t\t\tconst parts = [t('nextcloud-vue', 'The view \"{name}\" leaves your list and the menu on the left.', { name: view.name })]\n\t\t\tconst audience = normalizeSharedWith(view.sharedWith).map((e) => e.user || e.group)\n\t\t\tif (audience.length > 0) {\n\t\t\t\tparts.push(t('nextcloud-vue', 'It is shared with {names}; it leaves their lists too.', { names: audience.join(', ') }))\n\t\t\t}\n\t\t\tparts.push(t('nextcloud-vue', 'The items themselves stay. This cannot be undone.'))\n\t\t\treturn parts.join(' ')\n\t\t},\n\n\t\t/** Sort key / order: list state in self-fetch mode, else the props. */\n\t\teffectiveSortKey() {\n\t\t\tif (namedSourceSorts(this)) {\n\t\t\t\treturn this.namedSort.key || null\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.sortKey.value : this.sortKey\n\t\t},\n\n\t\teffectiveSortOrder() {\n\t\t\tif (namedSourceSorts(this)) {\n\t\t\t\treturn this.namedSort.order || 'asc'\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.sortOrder.value : this.sortOrder\n\t\t},\n\n\t\t/**\n\t\t * Ordered multi-column sort state fed to CnDataTable: the self-fetch\n\t\t * list's `sortKeys` in self-fetch mode, else the host-controlled\n\t\t * `sortKeys` prop.\n\t\t *\n\t\t * @return {Array<{key: string, order: 'asc'|'desc'}>}\n\t\t */\n\t\teffectiveSortKeys() {\n\t\t\treturn this.isSelfFetchMode ? (this.list.sortKeys.value || []) : this.sortKeys\n\t\t},\n\n\t\t/** Search term / visible columns / active facet filters for the embedded sidebar. */\n\t\teffectiveSearchValue() {\n\t\t\tif (this.namedSourceSearches) {\n\t\t\t\treturn this.namedSearchTerm || ''\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? (this.list.searchTerm.value || '') : (this.searchValue || '')\n\t\t},\n\n\t\teffectiveVisibleColumns() {\n\t\t\t// A saved view that carries columns wins while applied, then the person's\n\t\t\t// own layout, then the page's columns.\n\t\t\tif (Array.isArray(this.appliedViewColumns)) {\n\t\t\t\treturn this.appliedViewColumns\n\t\t\t}\n\t\t\tif (this.personalColumns && this.personalLayout && Array.isArray(this.personalLayout.columns)) {\n\t\t\t\tconst known = [...this.governedColumns.map((c) => c.key), ...this.declaredColumns.map((c) => (typeof c === 'string' ? c : c.key))]\n\t\t\t\tconst layout = reconcilePersonalColumns(this.personalLayout, known)\n\t\t\t\tif (layout) {\n\t\t\t\t\treturn layout.columns\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.isSelfFetchMode ? this.list.visibleColumns.value : this.visibleColumns\n\t\t},\n\n\t\t/** @return {string[]} The link kinds a copy may take along (`copy.include`, known kinds only). */\n\t\tcopyIncludeKinds() {\n\t\t\treturn copyKindsOf(this.copy && this.copy.include)\n\t\t},\n\n\t\t/** @return {string} The register as a slug, for the copy endpoint. */\n\t\tcopyRegisterSlug() {\n\t\t\treturn typeof this.register === 'string' ? this.register : ''\n\t\t},\n\n\t\t/** @return {string} The schema as a slug, for the copy endpoint. */\n\t\tcopySchemaSlug() {\n\t\t\tif (typeof this.schema === 'string') {\n\t\t\t\treturn this.schema\n\t\t\t}\n\t\t\treturn (this.effectiveSchema && this.effectiveSchema.slug) || ''\n\t\t},\n\n\t\t/**\n\t\t * The row-class function the table takes: a function as given, or the\n\t\t * manifest's rules compiled.\n\t\t *\n\t\t * @return {?(row: object) => string}\n\t\t */\n\t\tcompiledRowClass() {\n\t\t\treturn compileRowClass(this.rowClass)\n\t\t},\n\n\t\t/** @return {number} How many leading columns the person pinned (0 while a saved view's columns are applied). */\n\t\tpinnedColumnCount() {\n\t\t\tif (!this.personalColumns || Array.isArray(this.appliedViewColumns) || !this.personalLayout) {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn Math.max(0, Math.min(Number(this.personalLayout.pinned) || 0, this.tableColumns.length))\n\t\t},\n\n\t\teffectiveActiveFilters() {\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\treturn this.list.activeFilters.value || {}\n\t\t\t}\n\t\t\t// A named source's own state wins over the prop, and only once it\n\t\t\t// holds something: a consumer-managed page that ALSO names a\n\t\t\t// source keeps its `activeFilters` until the sidebar is used.\n\t\t\tif (this.isNamedSource && Object.keys(this.namedActiveFilters || {}).length > 0) {\n\t\t\t\treturn this.namedActiveFilters\n\t\t\t}\n\t\t\treturn this.activeFilters || {}\n\t\t},\n\n\t\t/**\n\t\t * Enum schema columns offered in the header filter menu: one entry per\n\t\t * visible column whose schema property declares an `enum`, with its\n\t\t * values. Empty (so the menu hides) when there is no schema or no enum\n\t\t * column. Drives the `showFilterMenu` funnel button.\n\t\t *\n\t\t * @return {Array<{ key: string, label: string, values: string[] }>}\n\t\t */\n\t\tfilterableFields() {\n\t\t\tconst props = this.effectiveSchema?.properties || {}\n\t\t\tconst out = []\n\t\t\tfor (const col of this.tableColumns) {\n\t\t\t\tconst key = typeof col === 'string' ? col : col.key\n\t\t\t\tconst def = props[key] || {}\n\t\t\t\tconst colObj = typeof col === 'object' ? col : {}\n\t\t\t\t// Source the filter values, in priority order: schema enum, a\n\t\t\t\t// column `enum` hint, or a badge column's colorMap keys (so a\n\t\t\t\t// status column stays filterable even when the runtime schema\n\t\t\t\t// doesn't carry the enum).\n\t\t\t\tlet values = null\n\t\t\t\tif (Array.isArray(def.enum) && def.enum.length) {\n\t\t\t\t\tvalues = def.enum\n\t\t\t\t} else if (Array.isArray(colObj.enum) && colObj.enum.length) {\n\t\t\t\t\tvalues = colObj.enum\n\t\t\t\t} else if (colObj.widget === 'badge' && colObj.widgetProps && colObj.widgetProps.colorMap) {\n\t\t\t\t\tvalues = Object.keys(colObj.widgetProps.colorMap)\n\t\t\t\t}\n\t\t\t\tif (values && values.length) {\n\t\t\t\t\tout.push({ key, label: this.cnTranslate(colObj.label || def.title || key), values: values.map((v) => String(v)) })\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Ordered column definitions the sidebar's Columns tab governs:\n\t\t * schema-derived columns, the built-in Metadata group (when shown),\n\t\t * and any external columnGroups. Mirrors CnIndexSidebar's column\n\t\t * universe, and doubles as the source of definitions for columns the\n\t\t * user enables that aren't in the configured `columns` list (metadata\n\t\t * fields, schema properties beyond the default set).\n\t\t */\n\t\tgovernedColumns() {\n\t\t\tconst defs = []\n\t\t\tif (this.effectiveSchema) {\n\t\t\t\t// English labels here: `governedColumns` feeds `tableColumns`,\n\t\t\t\t// which CnDataTable render-translates via its own `cnTranslate`\n\t\t\t\t// injection. Translating here too would double-translate. The\n\t\t\t\t// column-picker menu that renders these labels directly applies\n\t\t\t\t// `cnTranslate` at render instead.\n\t\t\t\tdefs.push(...columnsFromSchema(this.effectiveSchema, {}))\n\t\t\t\tif (this.resolvedSidebar.showMetadata !== false) {\n\t\t\t\t\tdefs.push(...METADATA_COLUMNS)\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst groups = this.resolvedSidebar.columnGroups || []\n\t\t\tgroups.forEach((g) => defs.push(...(g.columns || [])))\n\t\t\treturn defs\n\t\t},\n\n\t\t/**\n\t\t * Set of keys the sidebar governs (see `governedColumns`). Used so\n\t\t * tableColumns only hides columns the user can actually toggle back\n\t\t * on — custom columns outside this set are never silently dropped.\n\t\t */\n\t\tsidebarGovernedColumnKeys() {\n\t\t\treturn new Set(this.governedColumns.map((c) => c.key))\n\t\t},\n\n\t\t/**\n\t\t * The columns this page DECLARES it has: the `columns` prop, or a named\n\t\t * source's own list when the manifest set none. This is the membership\n\t\t * list, separate from `tableColumns`, which is what ends up rendered\n\t\t * after the sidebar scope and the user's visible-column set have had\n\t\t * their say over it.\n\t\t *\n\t\t * @return {Array} The declared column list.\n\t\t */\n\t\tdeclaredColumns() {\n\t\t\t// A NAMED SOURCE SUPPLIES ITS OWN COLUMNS when the manifest does not.\n\t\t\t// Without this the adapter's `columns` were defined and never read:\n\t\t\t// an `entitySource` page with no explicit `columns` fell through to\n\t\t\t// `governedColumns`, which derives from a SCHEMA — and a named\n\t\t\t// source has none. The table then rendered its rows with no columns\n\t\t\t// at all, which looks like an empty list rather than a missing\n\t\t\t// config. A manifest that DOES set columns still wins, which is\n\t\t\t// what makes the source a default rather than a constraint.\n\t\t\treturn (this.columns && this.columns.length > 0)\n\t\t\t\t? this.columns\n\t\t\t\t: ((this.isNamedSource && this.namedSource && this.namedSource.columns) || [])\n\t\t},\n\n\t\t/**\n\t\t * Columns handed to CnDataTable. Starts from `declaredColumns`, or from\n\t\t * the active folder-sidebar scope's selection of them (with any\n\t\t * `aggregate` block lacking a `register` defaulted to this page's\n\t\t * `register` slug, so manifests can omit `aggregate.register`). When a\n\t\t * visible-column set exists, governed columns the user toggled off are\n\t\t * hidden, and governed columns the user toggled on that aren't already\n\t\t * in the list (metadata fields, extra schema properties) are appended\n\t\t * using their sidebar definitions. Custom columns outside the sidebar's\n\t\t * universe are untouched.\n\t\t */\n\t\ttableColumns() {\n\t\t\tconst reg = typeof this.register === 'string' && this.register ? this.register : undefined\n\t\t\t// The active sidebar scope may narrow and reorder the page's\n\t\t\t// declared columns; it cannot add to them.\n\t\t\tlet cols = this.activeScopeLayout.columns || this.declaredColumns\n\t\t\tif (reg) {\n\t\t\t\tcols = cols.map((c) => (\n\t\t\t\t\tc && c.aggregate && !c.aggregate.register\n\t\t\t\t\t\t? { ...c, aggregate: { ...c.aggregate, register: reg } }\n\t\t\t\t\t\t: c\n\t\t\t\t))\n\t\t\t}\n\t\t\tconst visible = this.effectiveVisibleColumns\n\t\t\tif (!Array.isArray(visible)) {\n\t\t\t\t// No visible set at all: a column marked `hidden: true` still\n\t\t\t\t// starts hidden.\n\t\t\t\treturn cols.filter((c) => !isHiddenByDefault(c))\n\t\t\t}\n\n\t\t\tconst governed = this.sidebarGovernedColumnKeys\n\t\t\tcols = cols.filter((c) => {\n\t\t\t\tconst key = typeof c === 'string' ? c : c.key\n\t\t\t\t// A column marked `hidden: true` shows only once the visible set\n\t\t\t\t// names it, also when the sidebar does not govern it.\n\t\t\t\tif (isHiddenByDefault(c)) {\n\t\t\t\t\treturn visible.includes(key)\n\t\t\t\t}\n\t\t\t\treturn !governed.has(key) || visible.includes(key)\n\t\t\t})\n\n\t\t\tconst present = new Set(cols.map((c) => (typeof c === 'string' ? c : c.key)))\n\t\t\tconst byKey = new Map(this.governedColumns.map((c) => [c.key, c]))\n\t\t\t// A scope that sets its own columns does not get its folder field back:\n\t\t\t// every row of the scope holds the same value there.\n\t\t\tconst scopeField = this.activeScopeLayout.columns ? this.folderFilterKey : ''\n\t\t\tvisible.forEach((key) => {\n\t\t\t\tif (present.has(key) || key === scopeField) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst def = byKey.get(key)\n\t\t\t\tif (def) {\n\t\t\t\t\tcols.push({ ...def })\n\t\t\t\t\tpresent.add(key)\n\t\t\t\t}\n\t\t\t})\n\t\t\t// The person's order (or an applied view's) reads the table left to right.\n\t\t\tif (this.personalColumns && (this.personalLayout || Array.isArray(this.appliedViewColumns))) {\n\t\t\t\tcols = orderColumns(cols, visible)\n\t\t\t}\n\t\t\treturn cols\n\t\t},\n\n\t\t/** Resolved icon — explicit prop overrides schema.icon */\n\t\tresolvedIcon() {\n\t\t\tif (this.icon) {\n\t\t\t\treturn this.icon\n\t\t\t}\n\t\t\treturn this.effectiveSchema?.icon || ''\n\t\t},\n\n\t\t/**\n\t\t * Built-in row actions based on show*Action props.\n\t\t *\n\t\t * A NAMED SOURCE changes the defaults, as a contract rather than a\n\t\t * page-by-page opt-out (observed on the fleet's flows pages, where the\n\t\t * menu carried FIVE actions and three of them were broken):\n\t\t *\n\t\t * - View and the schema-form Edit are OFF. A source has no schema, so\n\t\t * the form modal can only ever render empty; and the source's own\n\t\t * open/Edit action already navigates to the detail page, which IS\n\t\t * the view. Rendering the built-ins beside it gave every flow list a\n\t\t * dead View and an Edit that opened an empty dialog.\n\t\t * - Copy and Delete render only when the source implements them\n\t\t * (`copyRow` / `deleteRow`): the built-in dialogs' confirm otherwise\n\t\t * emits into a manifest page with nobody listening, a dialog that\n\t\t * looks like it acted and did not.\n\t\t *\n\t\t * An EXPLICITLY passed show*Action prop always wins, both ways.\n\t\t */\n\t\tdefaultActions() {\n\t\t\treturn buildDefaultActions({\n\t\t\t\tflags: this.isNamedSource && this.namedSource\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tview: this.hasExplicitProp('showViewAction') && this.showViewAction,\n\t\t\t\t\t\t\tedit: this.hasExplicitProp('showEditAction') && this.showEditAction,\n\t\t\t\t\t\t\tcopy: this.hasExplicitProp('showCopyAction')\n\t\t\t\t\t\t\t\t? this.showCopyAction\n\t\t\t\t\t\t\t\t: typeof this.namedSource.copyRow === 'function',\n\t\t\t\t\t\t\tdel: this.hasExplicitProp('showDeleteAction')\n\t\t\t\t\t\t\t\t? this.showDeleteAction\n\t\t\t\t\t\t\t\t: typeof this.namedSource.deleteRow === 'function',\n\t\t\t\t\t\t}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tview: this.showViewAction,\n\t\t\t\t\t\t\tedit: this.showEditAction,\n\t\t\t\t\t\t\tcopy: this.showCopyAction,\n\t\t\t\t\t\t\tdel: this.showDeleteAction,\n\t\t\t\t\t\t},\n\t\t\t\t// The View action is always an eye — a universal \"view\" affordance,\n\t\t\t\t// independent of the object's schema icon (which is the header icon).\n\t\t\t\tviewIcon: Eye,\n\t\t\t\tviewTo: this.viewTo,\n\t\t\t\thandlers: {\n\t\t\t\t\tonView: (row) => this.onView(row),\n\t\t\t\t\tonEdit: (row) => {\n\t\t\t\t\t\tif (this.editOpensDetail) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @event edit-open Emitted instead of opening the edit modal when\n\t\t\t\t\t\t\t * `editOpensDetail` is set — the host navigates to the record's\n\t\t\t\t\t\t\t * detail page, where the full record (not just its scalars) is\n\t\t\t\t\t\t\t * editable.\n\t\t\t\t\t\t\t * @type {object} The row to open.\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tthis.$emit('edit-open', row)\n\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.openFormFor(row)\n\t\t\t\t\t},\n\t\t\t\t\tonCopy: (row) => {\n\t\t\t\t\t\tthis.actionTargetItem = row\n\t\t\t\t\t\tthis.showSingleCopyDialog = true\n\t\t\t\t\t},\n\t\t\t\t\tonDelete: (row) => {\n\t\t\t\t\t\tthis.actionTargetItem = row\n\t\t\t\t\t\tthis.showSingleDeleteDialog = true\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Effective customComponents registry — explicit prop wins over\n\t\t * the injected ancestor registry. Used to:\n\t\t * - Resolve `actions[].handler` registry names (REQ-MAD-3,\n\t\t * manifest-actions-dispatch).\n\t\t * - Resolve the `cardComponent` name for card-grid view (REQ-MCI,\n\t\t * manifest-card-index).\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\teffectiveCustomComponents() {\n\t\t\treturn this.customComponents ?? this.cnCustomComponents ?? {}\n\t\t},\n\n\t\t/**\n\t\t * The v2 registry a named handler resolves against before the legacy\n\t\t * customComponents map.\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\teffectiveRegistry() {\n\t\t\treturn this.cnRegistry ?? {}\n\t\t},\n\n\t\t/**\n\t\t * Merged actions: the declared entries in order, each `\"builtin:<id>\"` placeholder replaced by that built-in when its toggle is on, then the enabled built-ins not placed.\n\t\t * See `resolveRowActions`.\n\t\t *\n\t\t * REQ-MAD-3 / REQ-MAD-4 / REQ-MAD-5 / REQ-MAD-6 / REQ-MAD-7\n\t\t * (manifest-actions-dispatch) — for any action whose `handler`\n\t\t * is a string, resolve it through `resolveHandler()` so\n\t\t * `CnRowActions` sees the same `{ handler: fn }` shape it does\n\t\t * for built-in defaults. Function-typed handlers (the existing\n\t\t * runtime path) pass through untouched.\n\t\t */\n\t\tmergedActions() {\n\t\t\tconst ctx = {\n\t\t\t\trouter: this.$router,\n\t\t\t\trowKey: this.rowKey,\n\t\t\t\tregistry: this.effectiveRegistry,\n\t\t\t\tcustomComponents: this.effectiveCustomComponents,\n\t\t\t\t// So a row action's toasts translate like the labels around it.\n\t\t\t\ttranslate: this.cnTranslate,\n\t\t\t\t// A row action of `type: \"open-modal\"` opens its modal here.\n\t\t\t\topenModal: typeof this.cnOpenModal === 'function' ? this.cnOpenModal : null,\n\t\t\t\t// A row action of `type: \"api-call\"` reads the list again after it.\n\t\t\t\trefresh: () => this.onRefreshEvent(),\n\t\t\t}\n\t\t\t// A named source may supply its own row actions, on the same\n\t\t\t// precedence as its columns: what the manifest declares wins, and the\n\t\t\t// source is the DEFAULT for a page that declares none.\n\t\t\t// Either list may place built-ins with `\"builtin:<id>\"`; turning one on or off stays the `show*Action` toggles' job.\n\t\t\tconst manifestDeclared = this.actions && this.actions.length > 0\n\t\t\tconst declaredActions = manifestDeclared\n\t\t\t\t? this.actions\n\t\t\t\t: ((this.isNamedSource && this.namedSource && this.namedSource.rowActions) || [])\n\n\t\t\tconst { actions, warnings } = resolveRowActions(declaredActions, this.defaultActions, {\n\t\t\t\tprepare: (a) => {\n\t\t\t\t\t// A SOURCE action may say `action: 'open'`: open this row the\n\t\t\t\t\t// way a row click does — the source's own navigation\n\t\t\t\t\t// (`openRow`/`detailRoute`), with `edit-open` emitted so a\n\t\t\t\t\t// host that configured a row target (`config.rowRoute`) wins.\n\t\t\t\t\t// Resolved here because a source is a composable with no router.\n\t\t\t\t\t// Source-declared actions only: the manifest grammar for navigation is `type`/`handler`, and stays so.\n\t\t\t\t\tif (!manifestDeclared && a.action === 'open' && typeof a.handler !== 'function') {\n\t\t\t\t\t\treturn { ...a, handler: (row) => this.openSourceRow(row) }\n\t\t\t\t\t}\n\t\t\t\t\treturn dispatchAction(a, ctx)\n\t\t\t\t},\n\t\t\t})\n\t\t\tfor (const warning of warnings) {\n\t\t\t\t// A toggle turned off at runtime (permissions, readOnly) legitimately silences a placeholder; the validator flags a statically-off one.\n\t\t\t\tif (warning.code === 'disabled-placeholder') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\t// A dropped entry is always named; the placement hints are dev-only.\n\t\t\t\tif (warning.code === 'invalid-entry' || process.env.NODE_ENV !== 'production') {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`[CnIndexPage] \"${this.title}\": ${warning.message}`)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn actions\n\t\t},\n\n\t\thasRowActions() {\n\t\t\tconst refs = this.columnActionRefs\n\t\t\treturn this.$slots['row-actions'] || this.mergedActions.some((action) => action && !refs.has(String(action.id || action.label)) && !refs.has(String(action.label)))\n\t\t},\n\n\t\t/**\n\t\t * The row actions an `actions` column already shows as buttons, by the\n\t\t * ids (or labels) its `widgetProps.actions` names. The row menu leaves\n\t\t * them out, so a row does not offer the same action twice (DqPostvak).\n\t\t *\n\t\t * @return {Set<string>}\n\t\t * @spec openspec/changes/column-actions-leave-the-row-menu/specs/column-actions-leave-the-row-menu/spec.md\n\t\t */\n\t\tcolumnActionRefs() {\n\t\t\tconst refs = new Set()\n\t\t\tfor (const col of Array.isArray(this.columns) ? this.columns : []) {\n\t\t\t\tif (col && typeof col === 'object' && col.widget === 'actions' && Array.isArray(col.widgetProps?.actions)) {\n\t\t\t\t\tcol.widgetProps.actions.forEach((ref) => refs.add(String(ref)))\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn refs\n\t\t},\n\n\t\t/**\n\t\t * The page tabs a named source declares, each `{id, label, to, count?}`.\n\t\t *\n\t\t * @return {Array<object>} The tabs, empty without a source that has them.\n\t\t */\n\t\tsourcePageTabs() {\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\tif (!source || typeof source.pageTabs !== 'function') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn (source.pageTabs() || []).filter((tab) => tab && tab.to && tab.label)\n\t\t},\n\n\t\t/**\n\t\t * The page tabs to draw: the manifest's `pageTabs`, each with its\n\t\t * `countFrom` count once known, else a named source's own.\n\t\t *\n\t\t * @return {Array<object>} The tabs, `{ id, label, to, count? }`.\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\t/**\n\t\t * Whether the notice sits under the list card rather than inside it.\n\t\t *\n\t\t * @spec openspec/changes/index-notice-below-card/specs/index-page/spec.md#requirement-an-index-page-notice-can-sit-under-the-list-card\n\t\t * @return {boolean}\n\t\t */\n\t\tnoticeOnPage() {\n\t\t\treturn Boolean(this.notice && this.notice.placement === 'page')\n\t\t},\n\n\t\t/**\n\t\t * The notice band's NcNoteCard type: its `variant`, else info.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-show-a-notice-under-its-list\n\t\t */\n\t\tnoticeType() {\n\t\t\tconst variant = this.notice && this.notice.variant\n\t\t\treturn ['success', 'warning', 'error'].includes(variant) ? variant : 'info'\n\t\t},\n\n\t\teffectivePageTabs() {\n\t\t\tif (!Array.isArray(this.pageTabs) || this.pageTabs.length === 0) {\n\t\t\t\treturn this.sourcePageTabs\n\t\t\t}\n\t\t\t// The index is the tab's place in `pageTabs`, which is how its count\n\t\t\t// is keyed, so the tabs are numbered before any is left out.\n\t\t\treturn this.pageTabs\n\t\t\t\t.map((tab, index) => ({ tab, index }))\n\t\t\t\t.filter(({ tab }) => tab && typeof tab.label === 'string' && tab.label !== '' && (tab.route || tab.to || tab.href))\n\t\t\t\t.filter(({ tab }) => this.pageTabVisible(tab))\n\t\t\t\t.map(({ tab, index }) => {\n\t\t\t\t\tconst to = tab.route\n\t\t\t\t\t\t? { name: tab.route, ...(tab.params ? { params: tab.params } : {}), ...(tab.query ? { query: tab.query } : {}) }\n\t\t\t\t\t\t: (tab.to || tab.href)\n\t\t\t\t\tconst count = this.pageTabCounts[index]\n\t\t\t\t\treturn { id: tab.id || `page-tab-${index}`, label: this.cnTranslate(tab.label), to, ...(typeof count === 'number' ? { count } : {}) }\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * What the page tab counts depend on, as one key.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\tpageTabCountKey() {\n\t\t\tconst tabs = Array.isArray(this.pageTabs) ? this.pageTabs : []\n\t\t\tconst sources = tabs.map((tab) => (tab && tab.countFrom && tab.countFrom.register && tab.countFrom.schema ? tab.countFrom : null))\n\t\t\treturn sources.some(Boolean) ? JSON.stringify(sources) : ''\n\t\t},\n\n\t\t/**\n\t\t * The numbers on the quick filters: a named source counts its own\n\t\t * tabs (`tabCounts()`), a self-fetching page asks OpenRegister.\n\t\t *\n\t\t * @return {Record<number, number>|null} Counts by tab index.\n\t\t */\n\t\teffectiveTabCounts() {\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\tif (source && typeof source.tabCounts === 'function' && !(Array.isArray(this.quickFilters) && this.quickFilters.length > 0)) {\n\t\t\t\treturn source.tabCounts()\n\t\t\t}\n\t\t\treturn this.tabCounts\n\t\t},\n\n\t\t/**\n\t\t * The footer's free text: the manifest's `footerNote`, else a named\n\t\t * source's own.\n\t\t *\n\t\t * @return {string} The note, translated, or ''.\n\t\t */\n\t\teffectiveFooterNote() {\n\t\t\t// The scope's note, else the page's (a preset may have set it),\n\t\t\t// else the named source's.\n\t\t\tconst scoped = this.activeScopePresentation ? this.activeScopePresentation.footerNote : undefined\n\t\t\tconst footerNote = scoped !== undefined ? scoped : this.footerNote\n\t\t\tif (footerNote) {\n\t\t\t\treturn this.fillConfigTokens(this.cnTranslate(footerNote))\n\t\t\t}\n\t\t\tconst source = this.isNamedSource ? this.namedSource : null\n\t\t\treturn (source && source.footerNote) || footerNote\n\t\t},\n\n\t\t/**\n\t\t * The quick-filter tabs to render: the `quickFilters` prop when it\n\t\t * holds tabs, else the tabs `quickFiltersFrom` made (an empty\n\t\t * `quickFilters` gives way to them, so a saved view can swap a page's\n\t\t * lenses for its own, DqTeamwachtrij), else a named source's own tabs\n\t\t * (`useNamedSource` resolved the same precedence for the LOAD side, so\n\t\t * strip and fetch cannot disagree).\n\t\t *\n\t\t * @return {Array<object>|null} The tabs, or null when there are none.\n\t\t */\n\t\teffectiveQuickFilters() {\n\t\t\tconst declared = this.presented('quickFilters')\n\t\t\tconst tabs = Array.isArray(declared) && declared.length > 0 ? declared : (this.generatedQuickFilters || declared)\n\t\t\tconst own = withPersonalLenses(tabs, this.personalLenses)\n\t\t\tif (own && own.length > 0) {\n\t\t\t\treturn own.map((tab) => this.withConfigLabels(tab))\n\t\t\t}\n\t\t\treturn (this.isNamedSource && this.namedQuickFilters) || null\n\t\t},\n\n\t\t/**\n\t\t * The app config `@config.<key>` tokens resolve against: the `appConfig`\n\t\t * prop over a config an ancestor provides.\n\t\t *\n\t\t * @return {object} The config.\n\t\t */\n\t\teffectiveAppConfig() {\n\t\t\treturn { ...unwrapAppConfig(this.cnAppConfig), ...(this.appConfig || {}) }\n\t\t},\n\n\t\t/**\n\t\t * Whether the Add button renders. A named source that declares\n\t\t * `showAdd: false` suppresses it (a task is created by a flow, never\n\t\t * by a person clicking Add); the source cannot force the button ON,\n\t\t * so an explicit `:show-add=\"false\"` prop always still wins.\n\t\t *\n\t\t * @return {boolean} True when the Add button should render.\n\t\t */\n\t\teffectiveShowAdd() {\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.showAdd === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.showAdd\n\t\t},\n\n\t\t/** Whether all visible items are selected */\n\t\tallSelected() {\n\t\t\tif (this.effectiveObjects.length === 0 || this.internalSelectedIds.length === 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.effectiveObjects.every((o) => this.internalSelectedIds.includes(o[this.rowKey]))\n\t\t},\n\n\t\t/** Full objects for the selected IDs (used by mass action dialogs) */\n\t\tselectedObjects() {\n\t\t\treturn this.effectiveObjects.filter((o) => this.internalSelectedIds.includes(o[this.rowKey]))\n\t\t},\n\n\t\t/** Column slot names that the parent has provided (for pass-through) */\n\t\tslotColumns() {\n\t\t\treturn Object.keys(this.$slots)\n\t\t\t\t.filter((name) => name.startsWith('column-'))\n\t\t\t\t.map((name) => name.replace('column-', ''))\n\t\t},\n\n\t\t/**\n\t\t * `createDefaults`, token-resolved. `resolveDeepTokens` rather than the\n\t\t * shallow filter-map resolver: a seed record is arbitrary JSON, so a\n\t\t * token can sit inside a nested object or an array of them.\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tresolvedCreateDefaults() {\n\t\t\tconst seed = this.createDefaults\n\t\t\tif (!seed || typeof seed !== 'object' || Array.isArray(seed)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolveDeepTokens(seed, {})\n\t\t},\n\n\t\t/**\n\t\t * The declared header buttons with a label, translated, each with a\n\t\t * stable key and a variant.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @spec openspec/changes/screens-index-header-buttons-parity/specs/index-list-board-look/spec.md#requirement-the-add-header-button-carries-a-plus\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @return {Array<{key: string, label: string, action: string, variant: string, icon: string, format: string, link: ({href: string, target: (string|undefined)}|null)}>}\n\t\t */\n\t\tresolvedHeaderButtons() {\n\t\t\tconst headerButtons = this.presented('headerButtons')\n\t\t\tconst declared = Array.isArray(headerButtons) ? headerButtons : []\n\t\t\tconst builtInActions = new Set(['add', 'export', 'import', 'refresh', 'save-view', 'actions-menu'])\n\t\t\treturn declared\n\t\t\t\t.filter((button) => button && typeof button === 'object' && typeof button.action === 'string' && button.action !== '')\n\t\t\t\t// A button that runs an `adminOnly` header action is drawn for an\n\t\t\t\t// administrator only, as the action is in the Actions menu.\n\t\t\t\t.filter((button) => {\n\t\t\t\t\tconst target = button.action === 'export' ? button.run : button.action\n\t\t\t\t\tconst entry = (this.headerActions || []).find((action) => action && action.id === target)\n\t\t\t\t\treturn !(entry && entry.adminOnly === true && !this.viewerIsAdmin())\n\t\t\t\t})\n\t\t\t\t.map((button, index) => {\n\t\t\t\t\tlet label = typeof button.label === 'string' && button.label !== '' ? this.cnTranslate(button.label) : ''\n\t\t\t\t\tlet icon = typeof button.icon === 'string' ? button.icon : ''\n\t\t\t\t\tif (label === '' && button.action === 'add') {\n\t\t\t\t\t\tlabel = this.resolvedAddLabel\n\t\t\t\t\t}\n\t\t\t\t\t// The board's primary button reads \"+ New request\": the Add\n\t\t\t\t\t// button takes the plus unless the manifest names an icon.\n\t\t\t\t\tif (this.isBoardLook && button.action === 'add' && icon === '') {\n\t\t\t\t\t\ticon = 'Plus'\n\t\t\t\t\t}\n\t\t\t\t\t// The board's header: Export reads \"Download\" with its icon and\n\t\t\t\t\t// the Actions menu reads \"Actions\", without the manifest saying so.\n\t\t\t\t\t// A labelled Export keeps the icon too, unless it names its own.\n\t\t\t\t\tif (this.isBoardLook && button.action === 'export') {\n\t\t\t\t\t\tlabel = label || t('nextcloud-vue', 'Download')\n\t\t\t\t\t\ticon = icon || 'Download'\n\t\t\t\t\t}\n\t\t\t\t\tif (label === '' && button.action === 'actions-menu') {\n\t\t\t\t\t\tlabel = t('nextcloud-vue', 'Actions')\n\t\t\t\t\t}\n\t\t\t\t\tif (label === '' && button.action === 'save-view') {\n\t\t\t\t\t\tlabel = t('nextcloud-vue', 'Save view')\n\t\t\t\t\t}\n\t\t\t\t\tconst run = typeof button.run === 'string' ? button.run : ''\n\t\t\t\t\t// A button that runs a manifest `href` header action is that link;\n\t\t\t\t\t// a `type: \"navigate\"` or function-handler entry keeps dispatching.\n\t\t\t\t\tconst actionId = button.action === 'export' ? run : (builtInActions.has(button.action) ? '' : button.action)\n\t\t\t\t\tconst linked = actionId\n\t\t\t\t\t\t? this.mergedHeaderActions.find((entry) => entry && entry.id === actionId && entry.href && entry._dispatchSuppress && (!entry.type || entry.type === 'handler'))\n\t\t\t\t\t\t: null\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey: String(button.id || button.action || index),\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\taction: button.action,\n\t\t\t\t\t\tvariant: button.variant === 'primary' ? 'primary' : 'secondary',\n\t\t\t\t\t\ticon,\n\t\t\t\t\t\tformat: button.format === 'excel' ? 'excel' : 'csv',\n\t\t\t\t\t\trun,\n\t\t\t\t\t\tlink: linked ? { href: linked.href, target: linked.linkTarget || undefined } : null,\n\t\t\t\t\t\titems: Array.isArray(button.items)\n\t\t\t\t\t\t\t? button.items.filter((item) => (typeof item === 'string' && item !== '')\n\t\t\t\t\t\t\t\t|| (item && typeof item === 'object' && typeof item.heading === 'string' && item.heading !== ''))\n\t\t\t\t\t\t\t: null,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter((button) => button.label !== '')\n\t\t\t\t// An Export with nothing to export through is not drawn: a\n\t\t\t\t// named or endpoint source with no `run` and no `@mass-export`\n\t\t\t\t// listener.\n\t\t\t\t.filter((button) => button.action !== 'export' || this.headerExportAvailable(button))\n\t\t\t\t// The Actions menu lists the page's header actions (or the\n\t\t\t\t// entries its `items` name), so a menu with nothing to list\n\t\t\t\t// is not drawn.\n\t\t\t\t.filter((button) => button.action !== 'actions-menu' || this.headerMenuEntries(button).length > 0)\n\t\t},\n\n\t\t/**\n\t\t * The header buttons in the order they render. Under the board look\n\t\t * the order is fixed whatever the manifest declares: export (Download),\n\t\t * the Actions menu, any other secondary button, the buildiq square,\n\t\t * then the primary button. Without the look it is the declared order.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-index-header-reads-title-count-and-the-board-buttons\n\t\t * @return {Array<object>} The buttons; the buildiq square is `{ key: '__buildiq', action: '__buildiq' }`.\n\t\t */\n\t\torderedHeaderButtons() {\n\t\t\tconst buttons = this.resolvedHeaderButtons\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn buttons\n\t\t\t}\n\t\t\tconst rank = (button) => {\n\t\t\t\tif (button.variant === 'primary') {\n\t\t\t\t\treturn 4\n\t\t\t\t}\n\t\t\t\tif (button.action === 'export') {\n\t\t\t\t\treturn 0\n\t\t\t\t}\n\t\t\t\tif (button.action === 'actions-menu') {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\t\t\t\treturn 2\n\t\t\t}\n\t\t\tconst sorted = buttons\n\t\t\t\t.map((button, index) => ({ button, index }))\n\t\t\t\t.sort((a, b) => (rank(a.button) - rank(b.button)) || (a.index - b.index))\n\t\t\t\t.map((entry) => entry.button)\n\t\t\tconst firstPrimary = sorted.findIndex((button) => button.variant === 'primary')\n\t\t\tconst square = { key: '__buildiq', action: '__buildiq', variant: 'secondary', label: '', icon: '' }\n\t\t\tif (firstPrimary === -1) {\n\t\t\t\treturn [...sorted, square]\n\t\t\t}\n\t\t\treturn [...sorted.slice(0, firstPrimary), square, ...sorted.slice(firstPrimary)]\n\t\t},\n\n\t\t/**\n\t\t * The count the board's Filter menu button carries, as the CSS string its\n\t\t * badge draws (`content: var(--cn-filter-menu-count)`). NcActions has no\n\t\t * slot beside its menu name, so the badge is a pseudo-element; nothing is\n\t\t * set while no filter is active, and no badge is drawn then.\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-menu-count/specs/index-toolbar/spec.md#requirement-the-filter-menu-button-counts-the-active-filters\n\t\t * @return {object|null}\n\t\t */\n\t\tfilterMenuCountStyle() {\n\t\t\tconst count = this.activeFilterChips.length\n\t\t\treturn count > 0 ? { '--cn-filter-menu-count': `\"${count}\"` } : null\n\t\t},\n\n\t\t/**\n\t\t * The accessible name of the Filter menu button: \"Filter\" plus the count\n\t\t * while filters are active (the badge itself is decoration).\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-menu-count/specs/index-toolbar/spec.md#requirement-the-filter-menu-button-counts-the-active-filters\n\t\t * @return {string}\n\t\t */\n\t\tfilterMenuLabel() {\n\t\t\tconst count = this.activeFilterChips.length\n\t\t\tconst name = t('nextcloud-vue', 'Filter')\n\t\t\treturn count > 0 ? `${name}, ${t('nextcloud-vue', '{count} active', { count })}` : name\n\t\t},\n\n\t\t/** @return {string} The field the folder sidebar filters by, or ''. */\n\t\tfolderFilterKey() {\n\t\t\treturn (this.folderSidebar && (this.folderSidebar.filterField || this.folderSidebar.field)) || ''\n\t\t},\n\n\t\t/**\n\t\t * The filters the table's header filters show: every active filter but\n\t\t * the selected folder's own, which the Active chip already names, so\n\t\t * the table draws no summary chip for it.\n\t\t *\n\t\t * @return {object} The filters.\n\t\t */\n\t\ttableActiveFilters() {\n\t\t\tlet filters = this.effectiveActiveFilters || {}\n\t\t\t// A window held as one `{ from, to }` value reads as the header's range.\n\t\t\tif (this.headerFilterSchema) {\n\t\t\t\tfilters = rangesAsBounds(filters)\n\t\t\t}\n\t\t\tconst key = this.folderFilterKey\n\t\t\tif (!key || this.selectedFolderId === null || this.selectedFolderId === undefined || !Object.hasOwn(filters, key)) {\n\t\t\t\treturn filters\n\t\t\t}\n\t\t\tconst { [key]: _folder, ...rest } = filters\n\t\t\treturn rest\n\t\t},\n\n\t\t/**\n\t\t * The active filters as chips for the board toolbar's second row, one\n\t\t * per filter: \"Team: Woo\". A filter with no value is not active. A\n\t\t * range, as one `{from, to}` value or as `key[gte]`/`key[lte]` keys, is\n\t\t * one chip; `keys` lists the filter keys it stands for. Several values\n\t\t * of one filter read as a list in the locale (\"A en B\").\n\t\t *\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-toolbar-sits-on-the-ground-in-two-rows\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-range-is-one-chip\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-several-values-read-as-a-list\n\t\t * @return {Array<{key: string, label: string, keys?: string[]}>}\n\t\t */\n\t\tactiveFilterChips() {\n\t\t\tif (!this.isBoardLook) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\t// An applied saved view names itself; its own filters are not chips\n\t\t\t// (DqFilterBeheren draws \"Wacht op inwoner\" with no chip for it).\n\t\t\tconst view = this.appliedSavedView\n\t\t\tconst viewFilters = view && view.query && view.query.filters && typeof view.query.filters === 'object' ? view.query.filters : {}\n\t\t\tconst ownToView = (key, value) => Object.hasOwn(viewFilters, key)\n\t\t\t\t&& (Array.isArray(viewFilters[key]) ? viewFilters[key].map(String) : [String(viewFilters[key])]).includes(String(value))\n\t\t\treturn [\n\t\t\t\t...this.searchTermChips,\n\t\t\t\t...this.quickFilterActiveChips,\n\t\t\t\t...this.filterChipsOf(this.effectiveActiveFilters, (key, value) => this.isFixedFilter(key, value) || ownToView(key, value)),\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * The Active line's chip for the search term, on a named source that\n\t\t * asks for one (`searchChip`, the search source): \"Search term: Lindelaan\".\n\t\t *\n\t\t * @spec openspec/changes/search-source-term-in-box/specs/index-page/spec.md#requirement-the-search-page-keeps-its-term-in-the-search-box\n\t\t * @return {Array<{key: string, label: string, searchTerm: true}>}\n\t\t */\n\t\tsearchTermChips() {\n\t\t\tconst term = String(this.namedSearchTerm || '').trim()\n\t\t\tif (!this.namedSourceSearches || this.namedSource.searchChip !== true || term === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn [{ key: 'search-term', label: t('nextcloud-vue', 'Search term: {term}', { term }), searchTerm: true }]\n\t\t},\n\n\t\t/**\n\t\t * The Active line's chips for the selected quick filters: one per\n\t\t * selected tab that declares an `activeLabel` (\"Pipeline: Sales\"), run\n\t\t * through the app's translate. A tab without one (an \"All\" tab) adds no\n\t\t * chip. The chip carries the tab's index so removing it can deselect it.\n\t\t *\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-a-quick-filter-with-an-active-label-joins-the-active-line\n\t\t * @return {Array<{key: string, label: string, quickFilterIndex: number}>}\n\t\t */\n\t\tquickFilterActiveChips() {\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tif (tabs.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst indices = this.quickFilterMultiple\n\t\t\t\t? (this.selectedQuickFilterIndices || [])\n\t\t\t\t: [this.activeQuickFilterIndex]\n\t\t\treturn indices\n\t\t\t\t.filter((index) => typeof index === 'number' && tabs[index] && typeof tabs[index].activeLabel === 'string' && tabs[index].activeLabel !== '')\n\t\t\t\t.map((index) => ({ key: `quick-filter:${index}`, label: this.cnTranslate(tabs[index].activeLabel), quickFilterIndex: index }))\n\t\t},\n\n\t\t/**\n\t\t * Filter keys over a reference property that the Active line must name,\n\t\t * and that no reference column resolves already: one spec each, with the\n\t\t * referenced register and schema off the page schema's `$ref`.\n\t\t *\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-an-active-chip-names-the-value-not-its-id\n\t\t * @return {Array<{key: string, labelField: string, register: string, schema: string}>}\n\t\t */\n\t\tactiveFilterRefSpecs() {\n\t\t\tif (!this.isBoardLook || !this.effectiveSchema) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst keys = Object.keys(this.effectiveActiveFilters || {})\n\t\t\tif (keys.length === 0) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst covered = new Set(this.refLabelSpecs.map((spec) => spec.key))\n\t\t\tconst fields = fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true })\n\t\t\tconst specs = []\n\t\t\tfor (const key of keys) {\n\t\t\t\tif (covered.has(key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst field = fields.find((f) => f.key === key)\n\t\t\t\tconst ref = field && field.reference\n\t\t\t\tif (!ref || ref.schema === undefined || ref.schema === null) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tspecs.push({\n\t\t\t\t\tkey,\n\t\t\t\t\tlabelField: '',\n\t\t\t\t\tregister: ref.register || (typeof this.register === 'string' ? this.register : ''),\n\t\t\t\t\tschema: String(ref.schema),\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn specs\n\t\t},\n\n\t\t/**\n\t\t * The ids each active reference filter holds, per filter key, for the\n\t\t * label lookup of the Active line.\n\t\t *\n\t\t * @return {{[key: string]: string[]}} Distinct ids per filter key.\n\t\t */\n\t\tactiveFilterRefIds() {\n\t\t\tconst out = {}\n\t\t\tconst keys = new Set([...this.refLabelSpecs, ...this.activeFilterRefSpecs].map((spec) => spec.key))\n\t\t\tfor (const [key, raw] of Object.entries(this.effectiveActiveFilters || {})) {\n\t\t\t\tif (!keys.has(key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tout[key] = (Array.isArray(raw) ? raw : [raw])\n\t\t\t\t\t.filter((id) => id !== null && id !== undefined && id !== '' && typeof id !== 'object')\n\t\t\t\t\t.map((id) => String(id))\n\t\t\t\t\t.sort()\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The bulk band shape `bulkBandViews` gives the current view, or null.\n\t\t *\n\t\t * @return {?{lead?: {one?: string, other?: string}, actions?: Array<string|{id: string, label?: string}>, cancel?: boolean, hint?: boolean}}\n\t\t */\n\t\tviewBulkBand() {\n\t\t\tconst views = this.bulkBandViews\n\t\t\tconst shape = views && typeof views === 'object' ? views[this.currentViewMode] : null\n\t\t\treturn shape && typeof shape === 'object' ? shape : null\n\t\t},\n\n\t\t/**\n\t\t * The bulk actions the band offers: the view's pick and labels, else all.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\tviewBulkActions() {\n\t\t\tconst shape = this.viewBulkBand\n\t\t\tif (!shape || !Array.isArray(shape.actions)) {\n\t\t\t\treturn this.mergedBulkActions\n\t\t\t}\n\t\t\treturn shape.actions\n\t\t\t\t.map((pick) => {\n\t\t\t\t\tconst id = typeof pick === 'string' ? pick : (pick && pick.id)\n\t\t\t\t\tconst action = this.mergedBulkActions.find((entry) => entry && entry.id === id)\n\t\t\t\t\tif (!action) {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t\treturn pick && typeof pick === 'object' && typeof pick.label === 'string' && pick.label !== '' ? { ...action, label: pick.label } : action\n\t\t\t\t})\n\t\t\t\t.filter(Boolean)\n\t\t},\n\n\t\t/**\n\t\t * The view's lead line counting the selection (\"1 zaak geselecteerd\"),\n\t\t * or '' for the band's own lead.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tviewBulkBandLead() {\n\t\t\tconst lead = this.viewBulkBand ? this.viewBulkBand.lead : null\n\t\t\tif (!lead || typeof lead !== 'object') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst count = this.internalSelectedIds.length\n\t\t\tconst template = count === 1 ? lead.one : (lead.other || lead.one)\n\t\t\treturn typeof template === 'string' && template !== '' ? this.cnTranslate(template).replace(/\\{count\\}/g, String(count)) : ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the bulk band shows before a selection: `bulkBandAlways`, in\n\t\t * a view that selects rows (table, cards, list, board). The map and\n\t\t * the date views select nothing (DqZakenKaart).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tbulkBandIdleShown() {\n\t\t\treturn this.bulkBandAlways && ['table', 'cards', 'list', 'board'].includes(this.currentViewMode)\n\t\t},\n\n\t\t/**\n\t\t * The plural the board bulk band names: \"With the selected cases\".\n\t\t * The page's `bulkNoun`, else the schema's `titlePlural` (or\n\t\t * `plural`), else nothing (the band says \"items\").\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tboardBulkNoun() {\n\t\t\tconst schema = this.effectiveSchema || {}\n\t\t\tconst plural = this.bulkNoun || schema.titlePlural || schema.pluralTitle || schema.plural\n\t\t\tif (typeof plural === 'string' && plural !== '') {\n\t\t\t\treturn this.cnTranslate(plural).toLowerCase()\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\n\t\t/**\n\t\t * Whether the buildiq square sits in the page header instead of the\n\t\t * actions bar: under the board look, when the header shows (a hidden\n\t\t * header or a `#header` slot keeps the square in the bar).\n\t\t *\n\t\t * @spec openspec/changes/screens-chrome-parity/specs/layout-components/spec.md#requirement-the-buildiq-square-is-one-square-everywhere\n\t\t * @return {boolean}\n\t\t */\n\t\tbuildiqInHeader() {\n\t\t\treturn this.isBoard && this.showTitle && !this.$slots.header\n\t\t},\n\n\t\t/**\n\t\t * Index of the header button the buildiq square sits directly before:\n\t\t * the first primary one. -1 puts it after the last button.\n\t\t *\n\t\t * @spec openspec/changes/screens-chrome-parity/specs/layout-components/spec.md#requirement-the-buildiq-square-is-one-square-everywhere\n\t\t * @return {number}\n\t\t */\n\t\tbuildiqBeforeIndex() {\n\t\t\tif (!this.headerButtonsShown) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn this.resolvedHeaderButtons.findIndex((button) => button.variant === 'primary')\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws Save view: not when the page switches it\n\t\t * off (`savedViewSave: false`) or its header carries one.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\ttoolbarSavesView() {\n\t\t\treturn this.savedViewSave !== false && !this.headerSavesView\n\t\t},\n\n\t\t/**\n\t\t * Whether the page header carries a save-view button, so the toolbar\n\t\t * leaves its own Save view out.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/saved-views-hide-toolbar-save/specs/saved-views/spec.md\n\t\t */\n\t\theaderSavesView() {\n\t\t\treturn this.headerButtonsShown && (this.resolvedHeaderButtons || []).some((button) => button && button.action === 'save-view')\n\t\t},\n\n\t\t/**\n\t\t * Whether the header buttons render: there are some, the title shows\n\t\t * (they sit beside it) and no `#header` slot replaces the header.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @return {boolean}\n\t\t */\n\t\theaderButtonsShown() {\n\t\t\treturn this.showTitle && !this.$slots.header && this.resolvedHeaderButtons.length > 0\n\t\t},\n\n\t\t/**\n\t\t * Whether the toolbar draws the Actions menu: `showActionsMenu` when\n\t\t * set, else unless the header carries buttons.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-with-header-buttons/specs/index-actions-menu-with-header-buttons/spec.md#requirement-an-index-page-decides-its-toolbar-actions-menu\n\t\t * @return {boolean}\n\t\t */\n\t\tactionsMenuShown() {\n\t\t\treturn typeof this.showActionsMenu === 'boolean' ? this.showActionsMenu : !this.headerButtonsShown\n\t\t},\n\n\t\t/**\n\t\t * Whether the actions bar shows the saved-views control: opted in\n\t\t * with `allowSavedViews` and not given up for header buttons.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @return {boolean}\n\t\t */\n\t\tbarShowsSavedViews() {\n\t\t\t// Under the board look the saved views stay in the toolbar as chips\n\t\t\t// even when the header carries the buttons.\n\t\t\treturn Boolean(this.allowSavedViews) && (!this.headerButtonsShown || this.isBoardLook)\n\t\t},\n\n\t\t/**\n\t\t * Whether the actions bar shows the Export menu: `showExportMenu`,\n\t\t * unless a header button, or an Actions menu listing `export`, took\n\t\t * the export over (DqAanMijToegewezen).\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @return {boolean}\n\t\t */\n\t\tbarShowsExportMenu() {\n\t\t\tconst menuExports = this.headerButtonsShown && this.resolvedHeaderButtons\n\t\t\t\t.some((button) => button.action === 'actions-menu' && Array.isArray(button.items) && button.items.includes('export'))\n\t\t\treturn this.showExportMenu && !this.headerButtonTakes('export') && !menuExports\n\t\t},\n\n\t\t/**\n\t\t * The header's description line: `countSubtitle` with the total\n\t\t * filled in when one is known, else `description`.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps/specs/zuiddrecht-pixel-gaps/spec.md#requirement-an-index-page-title-is-a-manifest-key\n\t\t * @spec openspec/changes/screens-table-footer-and-system-dates-parity/specs/index-list-board-look/spec.md#requirement-the-count-reads-in-the-users-language\n\t\t * @return {string}\n\t\t */\n\t\t/**\n\t\t * The header meta note with the list's counts filled in. `{rows:<field>}`\n\t\t * counts the rows whose field is set (\"waarvan {rows:coveredFor} als\n\t\t * waarnemer\"), and a part in square brackets is left out while a count\n\t\t * in it is zero.\n\t\t *\n\t\t * @spec openspec/changes/page-header-breadcrumb/specs/page-header/spec.md#requirement-a-list-dashboard-or-settings-page-can-show-a-breadcrumb-and-a-meta-note\n\t\t * @return {string}\n\t\t */\n\t\theaderMetaText() {\n\t\t\tconst headerMeta = this.presented('headerMeta')\n\t\t\tif (!headerMeta) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst total = this.effectivePagination?.total\n\t\t\tlet missing = false\n\t\t\tconst rows = Array.isArray(this.headerMetaRows) ? this.headerMetaRows : []\n\t\t\tconst isSet = (value) => value !== undefined && value !== null && value !== '' && value !== false && !(Array.isArray(value) && value.length === 0)\n\t\t\tconst fill = (part, onCount) => part\n\t\t\t\t.replace('{shown}', () => onCount(this.effectiveObjects.length))\n\t\t\t\t.replace('{total}', () => (typeof total === 'number' ? onCount(total) : ''))\n\t\t\t\t.replace(/\\{rows:([\\w.-]+)\\}/g, (match, field) => onCount(rows.filter((row) => isSet(field.split('.').reduce((at, key) => (at && typeof at === 'object' ? at[key] : undefined), row))).length))\n\t\t\t\t.replace(/\\{count:([\\w-]+)\\}/g, (match, name) => {\n\t\t\t\t\tconst value = this.headerMetaCountValues[name]\n\t\t\t\t\tif (typeof value !== 'number') {\n\t\t\t\t\t\tmissing = true\n\t\t\t\t\t\treturn ''\n\t\t\t\t\t}\n\t\t\t\t\treturn onCount(value)\n\t\t\t\t})\n\t\t\tconst text = fill(\n\t\t\t\tthis.cnTranslate(headerMeta).replace(/\\[([^\\]]*)\\]/g, (match, part) => {\n\t\t\t\t\tlet zero = false\n\t\t\t\t\tconst filled = fill(part, (count) => {\n\t\t\t\t\t\tzero = zero || count === 0\n\t\t\t\t\t\treturn String(count)\n\t\t\t\t\t})\n\t\t\t\t\treturn zero ? '' : filled\n\t\t\t\t}),\n\t\t\t\tString,\n\t\t\t)\n\t\t\treturn missing ? '' : text\n\t\t},\n\n\t\t/**\n\t\t * Whether the header note carries a count, so the board leaves out its\n\t\t * own \"{shown} of {total}\" line (DqPrivacy, DqContracten).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\theaderMetaCarriesCount() {\n\t\t\tconst headerMeta = this.presented('headerMeta')\n\t\t\treturn typeof headerMeta === 'string' && /\\{(shown|total|count:[\\w-]+|rows:[\\w.-]+)\\}/.test(headerMeta)\n\t\t},\n\n\t\t/**\n\t\t * What the header note's other counts depend on, as one key.\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\theaderMetaCountKey() {\n\t\t\tconst sources = this.headerMetaCounts && typeof this.headerMetaCounts === 'object' ? this.headerMetaCounts : {}\n\t\t\tconst valid = Object.entries(sources).filter(([, from]) => from && from.register && from.schema)\n\t\t\treturn valid.length > 0 ? JSON.stringify(valid) : ''\n\t\t},\n\n\t\t/**\n\t\t * The header's description line, and on the map with its list the\n\t\t * number of rows on the map after a middle dot (\"· 5 met een adres op\n\t\t * de kaart\", DqZakenKaart).\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\theaderDescription() {\n\t\t\tconst base = this.headerDescriptionBase\n\t\t\tif (this.currentViewMode !== 'map' || !this.mapListEnabled) {\n\t\t\t\treturn base\n\t\t\t}\n\t\t\tconst onMap = n('nextcloud-vue', '%n with an address on the map', '%n with an address on the map', this.mapList.items.length)\n\t\t\treturn base ? `${base} · ${onMap}` : onMap\n\t\t},\n\n\t\t/**\n\t\t * The count line template: a scope's own, else the open view's\n\t\t * (`countTextByView`), else the page's `countText`.\n\t\t *\n\t\t * @spec openspec/changes/count-text-per-view/specs/index-page/spec.md#requirement-the-count-line-can-differ-per-view\n\t\t * @return {string}\n\t\t */\n\t\tpresentedCountText() {\n\t\t\tif (this.activeScopePresentation.countText === undefined) {\n\t\t\t\tconst byView = this.countTextByView\n\t\t\t\tconst own = byView && typeof byView === 'object' ? byView[this.currentViewMode] : undefined\n\t\t\t\tif (typeof own === 'string' && own !== '') {\n\t\t\t\t\treturn own\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.presented('countText')\n\t\t},\n\n\t\theaderDescriptionBase() {\n\t\t\tconst total = this.effectivePagination?.total\n\t\t\t// Board look: the count line is a template over the rows on this page\n\t\t\t// and all rows, \"{shown} of {total}\" unless the page says otherwise.\n\t\t\tif (this.isBoardLook && typeof total === 'number' && total >= 0) {\n\t\t\t\tconst shown = this.effectiveObjects.length\n\t\t\t\t// The default count line is the library's own string, so it\n\t\t\t\t// reads \"14 van 14\" in Dutch; a page's own template goes\n\t\t\t\t// through the app's label lookup.\n\t\t\t\tconst countText = this.presentedCountText\n\t\t\t\t// The note after the breadcrumb already says how many there are.\n\t\t\t\tif (!countText && !this.countSubtitle && this.headerMetaCarriesCount) {\n\t\t\t\t\treturn this.description\n\t\t\t\t}\n\t\t\t\tif (!countText && !this.countSubtitle) {\n\t\t\t\t\treturn t('nextcloud-vue', '{shown} of {total}', { shown, total })\n\t\t\t\t}\n\t\t\t\tif (countText) {\n\t\t\t\t\tconst translated = this.cnTranslate(countText)\n\t\t\t\t\treturn fillMyTeamToken(translated, translated.includes('{myTeam}') ? (peekMyTeamName() || '') : '')\n\t\t\t\t\t\t.replace('{shown}', String(shown))\n\t\t\t\t\t\t.replace('{total}', String(total))\n\t\t\t\t\t\t.replace(/\\{term\\}/g, this.sourceTerm)\n\t\t\t\t}\n\t\t\t\treturn this.countLine(this.countSubtitle, total, shown)\n\t\t\t}\n\t\t\tif (this.countSubtitle && typeof total === 'number' && total >= 0) {\n\t\t\t\treturn this.countLine(this.countSubtitle, total, null)\n\t\t\t}\n\t\t\treturn this.description\n\t\t},\n\n\t\t/** Add button label — derived from schema.title if not explicitly set */\n\t\tresolvedAddLabel() {\n\t\t\tconst scoped = this.activeScopePresentation ? this.activeScopePresentation.addLabel : undefined\n\t\t\tconst addLabel = scoped !== undefined ? scoped : this.addLabel\n\t\t\tif (addLabel) {\n\t\t\t\treturn this.cnTranslate(addLabel)\n\t\t\t}\n\t\t\t// A named source names its own create action. Without this the button\n\t\t\t// falls back to a schema-derived noun, and a named source has no\n\t\t\t// schema — so the control the migration was supposed to preserve\n\t\t\t// simply is not there.\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.addLabel) {\n\t\t\t\treturn this.namedSource.addLabel\n\t\t\t}\n\t\t\t// Two catalogues, deliberately. The NOUN comes from the consumer's\n\t\t\t// schema, so it resolves against the consumer's catalogue via the\n\t\t\t// injected `cnTranslate`; the SENTENCE around it is library chrome, so\n\t\t\t// it resolves against the library's own — exactly the split\n\t\t\t// CnFormDialog already makes for \"Create {title}\".\n\t\t\t//\n\t\t\t// Getting that wrong is visible rather than subtle: routing the\n\t\t\t// sentence through the host catalogue too produced \"Add Urenboeking\"\n\t\t\t// on a Dutch instance, because no app catalogue carries a key that\n\t\t\t// belongs to the library.\n\t\t\tconst type = this.cnTranslate(this.effectiveSchema?.title || 'Item')\n\t\t\treturn t('nextcloud-vue', 'Add {type}', { type })\n\t\t},\n\n\t\t/**\n\t\t * Effective sidebar configuration. Returns the sidebar config object\n\t\t * when `sidebar.enabled === true`, otherwise an `{ enabled: false }`\n\t\t * stub so the embedded CnIndexSidebar is not mounted. A page that\n\t\t * offers saved views gets the sidebar unless it switched it off\n\t\t * with `enabled: false`: the saved views live in its Search tab.\n\t\t */\n\t\tresolvedSidebar() {\n\t\t\tif (this.sidebar && this.sidebar.enabled !== false && (this.sidebar.enabled || !this.allowSavedViews)) {\n\t\t\t\treturn this.sidebar\n\t\t\t}\n\t\t\tif (this.allowSavedViews && !(this.sidebar && this.sidebar.enabled === false)) {\n\t\t\t\treturn { ...(this.sidebar || {}), enabled: true }\n\t\t\t}\n\t\t\treturn { enabled: false }\n\t\t},\n\n\t\t/**\n\t\t * Whether a Search/Columns sidebar is configured for this page (mirrors\n\t\t * the mount gate used by `shouldRenderInlineSidebar` /\n\t\t * `publishHoistedSidebar`). Drives the actions-bar toggle visibility.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasSidebar() {\n\t\t\treturn !!this.resolvedSidebar.enabled && this.resolvedSidebar.show !== false\n\t\t},\n\n\t\t/**\n\t\t * Whether the board toolbar draws the Filter button as a menu: the\n\t\t * board look, `filterMenu` on, something to filter by, and no filter\n\t\t * sidebar (whose toggle is that button otherwise).\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tboardFilterMenu() {\n\t\t\treturn this.isBoardLook && this.filterMenu && !this.hasSidebar && this.filterableFields.length > 0\n\t\t},\n\n\t\t/**\n\t\t * Whether the funnel menu sits in the table header: `filterMenu` with\n\t\t * values to offer, unless the toolbar's Filter button is that menu.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tshowHeaderFilterMenu() {\n\t\t\treturn this.filterMenu && this.filterableFields.length > 0 && !this.boardFilterMenu\n\t\t},\n\n\t\t/**\n\t\t * The side panel's line under its title: the page's `sidebar.subtitle`\n\t\t * (a string, or `{ singular, plural }`) with `{total}` and `{shown}`\n\t\t * filled (\"48 zaken, 8 op deze pagina\", DqFilterBeheren), or '' to keep\n\t\t * the schema's description.\n\t\t *\n\t\t * @return {string}\n\t\t * @spec openspec/changes/index-sidebar-count-subtitle/specs/index-sidebar-count-subtitle/spec.md\n\t\t */\n\t\tsidebarSubtitle() {\n\t\t\tconst declared = this.sidebar && this.sidebar.subtitle\n\t\t\tconst total = this.effectivePagination && this.effectivePagination.total\n\t\t\tif (!declared || typeof total !== 'number' || total < 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst shown = Array.isArray(this.effectiveObjects) ? this.effectiveObjects.length : null\n\t\t\treturn countLine(declared, total, { shown, translate: this.cnTranslate, appId: this.cnAppId })\n\t\t},\n\n\t\t/** Search props forwarded to the embedded CnIndexSidebar (defaults applied per CnIndexSidebar). */\n\t\tsidebarSearchProps() {\n\t\t\treturn (this.sidebar && this.sidebar.search) || {}\n\t\t},\n\n\t\t/**\n\t\t * Whether the embedded sidebar should render inline inside the\n\t\t * cn-index-page wrapper. False when CnAppRoot has provided a\n\t\t * real `cnIndexSidebarConfig` holder — in that case CnAppRoot\n\t\t * mounts the sidebar at NcContent level (correct NcAppSidebar\n\t\t * parent). True when no CnAppRoot ancestor exists (legacy\n\t\t * apps), so the embedded sidebar still renders even though\n\t\t * its visual position is sub-optimal.\n\t\t */\n\t\tshouldRenderInlineSidebar() {\n\t\t\tif (!this.resolvedSidebar.enabled || this.resolvedSidebar.show === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// CnAppRoot ancestor present → hoist takes over.\n\t\t\treturn !this.cnHostsIndexSidebar\n\t\t},\n\n\t\t/**\n\t\t * Snapshot of every prop the hoisted CnIndexSidebar needs.\n\t\t * Reactive — the sidebar in CnAppRoot re-renders whenever\n\t\t * any of these change.\n\t\t */\n\t\thoistedSidebarProps() {\n\t\t\treturn {\n\t\t\t\topen: this.sidebarOpen,\n\t\t\t\tschema: this.effectiveSchema,\n\t\t\t\ttitle: this.shownTitle,\n\t\t\t\tsubtitle: this.sidebarSubtitle,\n\t\t\t\ticon: this.resolvedIcon,\n\t\t\t\tsearchValue: this.effectiveSearchValue,\n\t\t\t\tvisibleColumns: this.effectiveVisibleColumns,\n\t\t\t\tactiveFilters: this.effectiveActiveFilters,\n\t\t\t\tcolumnGroups: this.resolvedSidebar.columnGroups || [],\n\t\t\t\tfilterFields: this.resolvedSidebar.fields || null,\n\t\t\t\tfacetData: this.effectiveFacetData,\n\t\t\t\tshowMetadata: this.resolvedSidebar.showMetadata !== false,\n\t\t\t\tpersonalColumns: this.personalColumns,\n\t\t\t\tpinnedCount: this.pinnedColumnCount,\n\t\t\t\tsortOptions: this.sidebarSortOptions,\n\t\t\t\tcurrentSort: this.currentSortKeys,\n\t\t\t\tcurrentSortValue: this.sortSource.value,\n\t\t\t\tsavedViews: this.savedViewsForSidebar,\n\t\t\t\tactiveTab: this.sidebarActiveTab,\n\t\t\t\t...this.sidebarSearchProps,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Resolved card component for card-grid view mode. Returns\n\t\t * `null` when `cardComponent` is empty OR when the name is not\n\t\t * in the registry (the latter also logs `console.warn`).\n\t\t *\n\t\t * `null` makes the template fall through to `CnCardGrid`'s\n\t\t * default `CnObjectCard` rendering — exactly the legacy path.\n\t\t *\n\t\t * @return {object|null}\n\t\t */\n\t\tresolvedCardComponent() {\n\t\t\tif (!this.cardComponent) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst resolved = this.resolveNamedComponent(this.cardComponent)\n\t\t\tif (!resolved) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`[CnIndexPage] cardComponent \"${this.cardComponent}\" not found in the registry or customComponents. Falling back to CnObjectCard.`)\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolved\n\t\t},\n\n\t\t/**\n\t\t * Custom list-row component resolved against the customComponents\n\t\t * registry, or `null` when `listComponent` is empty / unknown (default\n\t\t * `CnObjectRow` is used). Mirrors `resolvedCardComponent`.\n\t\t *\n\t\t * @return {?object} The resolved component, or null.\n\t\t */\n\t\tresolvedListComponent() {\n\t\t\tif (!this.listComponent) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst resolved = this.resolveNamedComponent(this.listComponent)\n\t\t\tif (!resolved) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`[CnIndexPage] listComponent \"${this.listComponent}\" not found in the registry or customComponents. Falling back to CnObjectRow.`)\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolved\n\t\t},\n\t},\n\n\twatch: {\n\t\t// A group filter's chip names the group: ask for each id's display\n\t\t// name (cached, once per id per page).\n\t\teffectiveActiveFilters: {\n\t\t\timmediate: true,\n\t\t\thandler(filters) {\n\t\t\t\tfor (const [key, raw] of Object.entries(filters || {})) {\n\t\t\t\t\tif (!this.isGroupFilter(key)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfor (const value of (Array.isArray(raw) ? raw : [raw])) {\n\t\t\t\t\t\tif (typeof value === 'string' && value !== '' && value.charAt(0) !== '@') {\n\t\t\t\t\t\t\tloadGroupDisplayName(value)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A lens that asks the source for other rows reads the source again.\n\t\tlensSourceParams(now, before) {\n\t\t\tif (JSON.stringify(now) === JSON.stringify(before) || !this.isSelfFetchMode) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst option = this.activeSortSource || this.sourceSortOptions.find((o) => o.source.annotate === true)\n\t\t\tif (option) {\n\t\t\t\tthis.resetSortSourcePage()\n\t\t\t\tthis.loadSortSource(option)\n\t\t\t}\n\t\t},\n\n\t\t// A new search or filter starts the source rows at page 1.\n\t\t'list.searchTerm.value': function() {\n\t\t\tthis.resetSortSourcePage()\n\t\t},\n\n\t\t'list.activeFilters.value': {\n\t\t\thandler() {\n\t\t\t\tthis.resetSortSourcePage()\n\t\t\t},\n\n\t\t\tdeep: true,\n\t\t},\n\n\t\t'$route.query._view': function(now, before) {\n\t\t\t// Leaving the mode's address (a plain link to the page) leaves the\n\t\t\t// mode it opened, unless the person picked another one since.\n\t\t\tif ((typeof now !== 'string' || now === '') && typeof before === 'string' && before !== '' && before === this.currentViewMode) {\n\t\t\t\tthis.routeViewPending = false\n\t\t\t\tthis.currentViewMode = this.viewMode\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.applyViewModeFromRoute()\n\t\t},\n\n\t\t'$route.query.savedView': function(now, before) {\n\t\t\t// Leaving a view's address (a plain link to the page) leaves the view.\n\t\t\tif ((typeof now !== 'string' || now === '') && typeof before === 'string' && before !== '' && before === this.appliedSavedViewId) {\n\t\t\t\tthis.leaveSavedView()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.applySavedViewFromRoute()\n\t\t},\n\n\t\tactiveSavedViewOverridesKey() {\n\t\t\t/**\n\t\t\t * The applied view's page config overrides changed: a view with\n\t\t\t * overrides was applied (payload: the overrides) or left (`null`).\n\t\t\t *\n\t\t\t * @event view-overrides\n\t\t\t */\n\t\t\tthis.$emit('view-overrides', this.activeSavedViewOverrides)\n\t\t},\n\n\t\trouteViewModes() {\n\t\t\tif (this.routeViewPending) {\n\t\t\t\tthis.applyViewModeFromRoute()\n\t\t\t}\n\t\t},\n\n\t\tmapColorFetchKey: {\n\t\t\timmediate: true,\n\t\t\thandler(key) {\n\t\t\t\tif (key !== '') {\n\t\t\t\t\tthis.loadMapColorSource()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tboardFetchKey: {\n\t\t\timmediate: true,\n\t\t\thandler(key) {\n\t\t\t\tif (key !== '') {\n\t\t\t\t\tthis.loadBoardSources()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\teffectiveObjects: {\n\t\t\timmediate: true,\n\t\t\thandler(rows) {\n\t\t\t\tif (!this.collectionUrl || !this.isSelfFetchMode || !Array.isArray(rows)) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tfor (const row of rows) {\n\t\t\t\t\tconst id = row?.id ?? row?.['@self']?.id\n\t\t\t\t\tif (id !== undefined && id !== null) {\n\t\t\t\t\t\tthis.collectionRowsById.set(id, row)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A column or form field bound to a property the schema lacks is told to the host once.\n\t\teffectiveSchema: {\n\t\t\timmediate: true,\n\t\t\thandler(schema) {\n\t\t\t\treportBindingProblems(schema, { register: this.register, columns: this.declaredColumns, includeFields: this.includeFields })\n\t\t\t},\n\t\t},\n\n\t\t// Resolve the labels of reference columns in one batch per schema.\n\t\trefLabelIds: {\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadRefLabels()\n\t\t\t},\n\t\t},\n\n\t\t// Read the colour and icon of the records badge columns point at.\n\t\trefLookIds: {\n\t\t\timmediate: true,\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadRefLooks()\n\t\t\t},\n\t\t},\n\n\t\t// The Active line names a referenced value, not its id.\n\t\tactiveFilterRefIds: {\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadRefLabels()\n\t\t\t},\n\t\t},\n\n\t\tquickFiltersFromKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values */\n\t\t\thandler() {\n\t\t\t\tthis.loadGeneratedQuickFilters()\n\t\t\t},\n\t\t},\n\n\t\theaderMetaCountKey: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.loadHeaderMetaCounts()\n\t\t\t},\n\t\t},\n\n\t\tpageTabCountKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs */\n\t\t\thandler() {\n\t\t\t\tthis.loadPageTabCounts()\n\t\t\t},\n\t\t},\n\n\t\tfilterStripCountKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip */\n\t\t\thandler() {\n\t\t\t\tthis.loadFilterStripCounts()\n\t\t\t},\n\t\t},\n\n\t\tcountRequestKey: {\n\t\t\timmediate: true,\n\t\t\t/** @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views */\n\t\t\thandler() {\n\t\t\t\tthis.loadFilterCounts()\n\t\t\t},\n\t\t},\n\n\t\t// Remember the whole folder set whenever no folder narrows the query.\n\t\tfolderSidebarLiveFacetValues: {\n\t\t\timmediate: true,\n\t\t\thandler(values) {\n\t\t\t\tif (this.selectedFolderId === null || this.selectedFolderId === undefined) {\n\t\t\t\t\tthis.folderSidebarAllValues = values\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tviewMode(val) {\n\t\t\tthis.currentViewMode = val\n\t\t},\n\n\t\t// Entering calendar mode fetches one page sized to the month; leaving\n\t\t// removes the month range and restores the page size, so the table is\n\t\t// never left narrowed.\n\t\t// The board does the same at BOARD_PAGE_SIZE, so it shows every row\n\t\t// rather than the table's first page.\n\t\tcurrentViewMode(mode, previous) {\n\t\t\tif (!this.isSelfFetchMode) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlet listSize = this.list.pageSize.value\n\t\t\tif (previous === 'calendar') {\n\t\t\t\tthis.calendarRange = null\n\t\t\t\tlistSize = this.calendarPrevPageSize || 20\n\t\t\t\tthis.calendarPrevPageSize = null\n\t\t\t} else if (previous === 'board') {\n\t\t\t\tlistSize = this.boardPrevPageSize || 20\n\t\t\t\tthis.boardPrevPageSize = null\n\t\t\t}\n\t\t\tconst leftMapPlotAll = previous === 'map' && this.mapPrevPageSize !== null\n\t\t\tif (leftMapPlotAll) {\n\t\t\t\tlistSize = this.mapPrevPageSize\n\t\t\t\tthis.mapPrevPageSize = null\n\t\t\t}\n\t\t\tlet size = null\n\t\t\tif (mode === 'calendar') {\n\t\t\t\tthis.calendarPrevPageSize = listSize\n\t\t\t\tsize = CALENDAR_PAGE_SIZE\n\t\t\t} else if (mode === 'board') {\n\t\t\t\tthis.boardPrevPageSize = listSize\n\t\t\t\tsize = BOARD_PAGE_SIZE\n\t\t\t} else if (mode === 'map' && this.mapPlotAllLimit > 0 && !this.isNamedSource) {\n\t\t\t\tthis.mapPrevPageSize = listSize\n\t\t\t\tsize = this.mapPlotAllLimit\n\t\t\t} else if (previous === 'calendar' || previous === 'board' || leftMapPlotAll) {\n\t\t\t\tsize = listSize\n\t\t\t}\n\t\t\tif (size !== null && typeof this.list.onPageSizeChange === 'function') {\n\t\t\t\tthis.list.onPageSizeChange(size)\n\t\t\t}\n\t\t},\n\n\t\tselectedIds(val) {\n\t\t\tthis.internalSelectedIds = [...val]\n\t\t},\n\n\t\t/**\n\t\t * Tenant change pipeline (multi-tenancy-context).\n\t\t * When the bound `activeOrganisation` prop changes, push the\n\t\t * new UUID into the bound object store (when there is one)\n\t\t * AND into the shared `useTenantContext()` context so every\n\t\t * other tenant-aware surface stays consistent.\n\t\t */\n\t\tactiveOrganisation: {\n\t\t\thandler(next) {\n\t\t\t\tif (!next) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst uuid = next.uuid || null\n\t\t\t\t// Update the object store when one is bound — sub-store\n\t\t\t\t// methods may not exist on non-OR stores; guard with typeof.\n\t\t\t\tconst store = this.list?.store ?? this.selfObjectStore ?? null\n\t\t\t\tif (store && typeof store.setActiveTenantOrganisation === 'function') {\n\t\t\t\t\tstore.setActiveTenantOrganisation(uuid)\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tdeep: false,\n\t\t},\n\n\t\t/**\n\t\t * Keep the hoisted sidebar in sync with reactive props.\n\t\t * The watcher fires whenever any of the props snapshot\n\t\t * (`hoistedSidebarProps`) changes; we re-write the entire\n\t\t * config so Vue's NcAppSidebar in CnAppRoot picks up the\n\t\t * new values. Cheap because it's just an object swap.\n\t\t */\n\t\thoistedSidebarProps: {\n\t\t\thandler() {\n\t\t\t\tthis.publishHoistedSidebar()\n\t\t\t},\n\n\t\t\tdeep: false,\n\t\t},\n\n\t\tshouldRenderInlineSidebar() {\n\t\t\t// When the gate flips (e.g. sidebar.show toggled), keep\n\t\t\t// the hoist in sync.\n\t\t\tthis.publishHoistedSidebar()\n\t\t},\n\n\t\t// The gate itself, which neither watcher above catches: under a\n\t\t// CnAppRoot host `shouldRenderInlineSidebar` is false in BOTH states,\n\t\t// and `hoistedSidebarProps` carries none of `enabled` / `show`. So\n\t\t// toggling the sidebar on or off in CnEditSidebarModal — which mutates\n\t\t// `config.sidebar` in place — left the hoisted panel exactly as it was\n\t\t// until the page was reloaded.\n\t\thasSidebar() {\n\t\t\tthis.publishHoistedSidebar()\n\t\t},\n\n\t\t// Re-push AI context when relevant props change\n\t\tregister() {\n\t\t\tthis.pushAiContext()\n\t\t},\n\n\t\tschema() {\n\t\t\tthis.pushAiContext()\n\t\t},\n\n\t\t// In self-fetch mode, a same-component route-param change (e.g. the\n\t\t// `:id` of `/forms/:id/submissions`) must re-resolve `config.filter`\n\t\t// and re-fetch. useListView's `fixedFilters` getter re-reads $route on\n\t\t// each fetch; this watcher triggers the re-fetch.\n\t\t'$route.params': {\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\t\tthis.list.refresh(1)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t// A same-path `$route.query` change (e.g. a dashboard deep-link\n\t\t// `/cases?caseType=X`) must also re-fetch — `fixedFilters` merges the\n\t\t// query into the fetch (see useSelfFetchList.resolveQueryFilters).\n\t\t'$route.query': {\n\t\t\tdeep: true,\n\t\t\thandler() {\n\t\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\t\tthis.list.refresh(1)\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Leaving the narrow full-detail layout puts the list back where it\n\t\t * was. The element was hidden, so the browser kept no scroll height\n\t\t * for it and would otherwise return the handler to row 1 of 400.\n\t\t *\n\t\t * @param {string} next The layout now.\n\t\t * @param {string} previous The layout before it.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tsplitLayout(next, previous) {\n\t\t\tif (previous === 'detail' && next !== 'detail') {\n\t\t\t\tthis.restoreListScroll()\n\t\t\t}\n\t\t},\n\n\t\t// When `?action=create` is injected into the query via router navigation\n\t\t// (e.g. a \"New Case\" button on another page), auto-open the create dialog\n\t\t// so the user lands on the index page with the form already open.\n\t\t'$route.query.action': {\n\t\t\thandler(val) {\n\t\t\t\tif (val === 'create') {\n\t\t\t\t\tthis.maybeOpenCreateFromQuery()\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t},\n\n\t/**\n\t * Measure the viewport, follow a resize, and read this person's own\n\t * row order for this list.\n\t *\n\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t */\n\tmounted() {\n\t\tthis.openSortSource()\n\t\tthis.measureSplitViewport()\n\t\tif (this.splitViewEnabled && typeof window !== 'undefined') {\n\t\t\twindow.addEventListener('resize', this.measureSplitViewport)\n\t\t}\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.addEventListener(OBJECTS_CHANGED_EVENT, this.onObjectsChanged)\n\t\t}\n\t\tthis.loadManualOrder()\n\t\tthis.startLive()\n\t\tthis.loadPersonalColumns()\n\t\tthis.publishHoistedSidebar()\n\t\tthis.pushAiContext()\n\t\tthis.maybeOpenCreateFromQuery()\n\t\tif (this.folderSidebar) {\n\t\t\tthis.loadFolderRegister()\n\t\t\tthis.loadFolderGroups()\n\t\t\t// Reflect a deep-link filter (e.g. ?caseType=<id>) as the active folder.\n\t\t\tconst key = this.folderSidebar.filterField || this.folderSidebar.field\n\t\t\tconst active = key && this.effectiveActiveFilters[key]\n\t\t\tif (active) {\n\t\t\t\tthis.selectedFolderId = Array.isArray(active) ? active[0] : active\n\t\t\t}\n\t\t}\n\t},\n\n\tcreated() {\n\t\tthis.applyViewModeFromRoute()\n\t\tthis.pushAiContext()\n\t\tif (this.savedViewsOffered) {\n\t\t\tthis.fetchSavedViews()\n\t\t}\n\t\tthis.selfActions = createSelfModeActions({\n\t\t\tisSelfFetchMode: () => this.isSelfFetchMode,\n\t\t\tselfObjectStore: () => this.selfObjectStore,\n\t\t\trowTarget: (row) => this.rowTypeTarget(row),\n\t\t\tknownRow: (id) => this.collectionRowsById.get(id),\n\t\t\tselfObjectType: () => this.selfObjectType,\n\t\t\tlist: () => this.list,\n\t\t\tselectedIds: () => this.internalSelectedIds,\n\t\t\tregister: () => this.register,\n\t\t\tschema: () => this.schema,\n\t\t\teffectiveObjects: () => this.effectiveObjects,\n\t\t\teffectiveSchema: () => this.effectiveSchema,\n\t\t\tmassActionNameField: () => this.massActionNameField,\n\t\t\teditItem: () => this.editItem,\n\t\t\temit: (event, payload) => this.$emit(event, payload),\n\t\t\tafterCreateSuccess: (saved) => this.afterCreateSuccess(saved),\n\t\t\tsetResults: {\n\t\t\t\tsingleDelete: (r) => this.setSingleDeleteResult(r),\n\t\t\t\tmassDelete: (r) => this.setMassDeleteResult(r),\n\t\t\t\tsingleCopy: (r) => this.setSingleCopyResult(r),\n\t\t\t\tmassCopy: (r) => this.setMassCopyResult(r),\n\t\t\t\tmassImport: (r) => this.setImportResult(r),\n\t\t\t\tmassExport: (r) => this.setExportResult(r),\n\t\t\t\tform: (r) => this.setFormResult(r),\n\t\t\t\tformValidation: (fieldErrors, message) => this.setFormValidationErrors(fieldErrors, message),\n\t\t\t},\n\t\t})\n\t},\n\n\t/**\n\t * Drop the window listeners and the hoisted sidebar.\n\t *\n\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t */\n\tbeforeUnmount() {\n\t\tthis.stopLive()\n\t\tif (typeof window !== 'undefined') {\n\t\t\twindow.removeEventListener('resize', this.measureSplitViewport)\n\t\t\twindow.removeEventListener(OBJECTS_CHANGED_EVENT, this.onObjectsChanged)\n\t\t}\n\t\t// Clear the holder so the hoisted sidebar disappears when\n\t\t// the user navigates away from the index page.\n\t\tif (this.cnHostsIndexSidebar && this.cnIndexSidebarConfig) {\n\t\t\tthis.cnIndexSidebarConfig.value = null\n\t\t}\n\t\tapplyAiContext(this.cnAiContext, 'custom')\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * On mount: open on a source option the page defaults to\n\t\t * (`default: true`, unless the address carries an order of its own),\n\t\t * and read an annotating source's rows for the other orders.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\topenSortSource() {\n\t\t\tif (!this.isSelfFetchMode || this.sourceSortOptions.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst query = (this.$route && this.$route.query) || {}\n\t\t\tconst preferred = this.sourceSortOptions.find((o) => o.default === true)\n\t\t\tif (preferred && !query._order) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: String(preferred.value), page: 1 }\n\t\t\t\tthis.loadSortSource(preferred)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst annotating = this.sourceSortOptions.find((o) => o.source.annotate === true)\n\t\t\tif (annotating) {\n\t\t\t\tthis.loadSortSource(annotating)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read a source option's rows. A failure while that option is chosen\n\t\t * orders the self-fetched list by the option's `order` instead.\n\t\t *\n\t\t * @param {object} option The sort option.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tasync loadSortSource(option) {\n\t\t\tconst source = option.source\n\t\t\tthis.sortSource = { ...this.sortSource, state: 'loading' }\n\t\t\ttry {\n\t\t\t\tconst [{ default: axios }, { generateUrl }] = await Promise.all([\n\t\t\t\t\timport('@nextcloud/axios'),\n\t\t\t\t\timport('@nextcloud/router'),\n\t\t\t\t])\n\t\t\t\tconst res = await axios.get(generateUrl(source.url), { params: { ...(source.params || {}), ...this.lensSourceParams } })\n\t\t\t\tthis.sortSource = { ...this.sortSource, rows: rowsFromSourceBody(res ? res.data : null, source), state: 'ready' }\n\t\t\t} catch (error) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, rows: [], state: 'failed' }\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error(`[CnIndexPage] the sort option \"${option.value}\" could not load ${source.url}`, error)\n\t\t\t\tif (this.sortSource.value === String(option.value)) {\n\t\t\t\t\tconst keys = orderToSortKeys(option.order)\n\t\t\t\t\tif (keys.length > 0 && typeof this.list.onSort === 'function') {\n\t\t\t\t\t\tthis.list.onSort({ key: keys[0].key, order: keys[0].order, keys })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Back to the first page of the source rows, after a new search or filter.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tresetSortSourcePage() {\n\t\t\tif (this.sortSource.page !== 1) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, page: 1 }\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * A presentation value: the active scope's when it declares the key,\n\t\t * else this page's own prop (which a query preset may have set).\n\t\t *\n\t\t * @param {string} key One of the query preset keys.\n\t\t * @return {unknown} The value.\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-a-preset-or-a-scope-sets-the-list-s-presentation\n\t\t */\n\t\tpresented(key) {\n\t\t\tconst scoped = this.activeScopePresentation\n\t\t\treturn scoped[key] !== undefined ? scoped[key] : this.ownPresentation[key]\n\t\t},\n\n\t\t/**\n\t\t * Whether a filter value is one of the query pairs that chose the\n\t\t * preset, so it shows no removable chip.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {unknown} value One filter value.\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/index-scope-presentation/specs/index-page/spec.md#requirement-the-query-that-chose-a-preset-is-not-a-removable-filter\n\t\t */\n\t\tisFixedFilter(key, value) {\n\t\t\tconst fixed = this.fixedFilters\n\t\t\tif (!fixed || !Object.hasOwn(fixed, key)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// A range (`{ from, to }`) is compared whole: String() would make every object equal.\n\t\t\tif (value !== null && typeof value === 'object') {\n\t\t\t\treturn JSON.stringify(fixed[key]) === JSON.stringify(value)\n\t\t\t}\n\t\t\treturn String(fixed[key]) === String(value)\n\t\t},\n\n\t\t/**\n\t\t * The manifest page that shows one object of a schema, for a linked\n\t\t * label. Null without a manifest or a matching detail page.\n\t\t *\n\t\t * @param {string} schema Schema slug of the referenced objects.\n\t\t * @return {string|null} The page id.\n\t\t */\n\t\tdetailRouteFor(schema) {\n\t\t\tconst pages = this.cnManifest && Array.isArray(this.cnManifest.pages) ? this.cnManifest.pages : []\n\t\t\tconst page = pages.find((p) => p && p.type === 'detail' && p.config && String(p.config.schema) === String(schema))\n\t\t\treturn page ? page.id : null\n\t\t},\n\n\t\t/**\n\t\t * Fetch the labels the reference columns need: one request per\n\t\t * referenced schema, for the rows on screen. A failure leaves ids as is.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2\n\t\t */\n\t\tasync loadRefLabels() {\n\t\t\tconst specs = [...this.refLabelSpecs, ...this.activeFilterRefSpecs]\n\t\t\tif (specs.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this._refLabelResolver) {\n\t\t\t\tthis._refLabelResolver = createRefLabelResolver(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tawait Promise.all(specs.map(async (spec) => {\n\t\t\t\tconst known = this.refLabels[spec.key] || {}\n\t\t\t\tconst wanted = new Set([...(this.refLabelIds[spec.key] || []), ...(this.activeFilterRefIds[spec.key] || [])])\n\t\t\t\tconst ids = [...wanted].filter((id) => !Object.hasOwn(known, id))\n\t\t\t\tif (ids.length === 0) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst found = await this._refLabelResolver.resolve(spec.register, spec.schema, ids, spec.labelField)\n\t\t\t\tthis.refLabels = { ...this.refLabels, [spec.key]: { ...(this.refLabels[spec.key] || {}), ...found } }\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Read the colour and icon names `refLookSpecs` columns need, for the\n\t\t * rows on screen, with the same resolver as the labels. A failure\n\t\t * leaves the badge as declared.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/pill-color-field/specs/pill-color-field/spec.md#requirement-a-badge-cell-takes-its-tone-and-icon-from-the-referenced-record\n\t\t */\n\t\tasync loadRefLooks() {\n\t\t\tif (this.refLookSpecs.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this._refLabelResolver) {\n\t\t\t\tthis._refLabelResolver = createRefLabelResolver(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst read = (spec, ids, name) => (name\n\t\t\t\t? this._refLabelResolver.resolve(spec.register, spec.schema, ids, name, { strict: true }).catch(() => ({}))\n\t\t\t\t: Promise.resolve({}))\n\t\t\tawait Promise.all(this.refLookSpecs.map(async (spec) => {\n\t\t\t\tconst known = this.refLooks[spec.key] || {}\n\t\t\t\tconst ids = (this.refLookIds[spec.key] || []).filter((id) => !Object.hasOwn(known, id))\n\t\t\t\tif (ids.length === 0) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst [colors, icons] = await Promise.all([read(spec, ids, spec.colorField), read(spec, ids, spec.iconField)])\n\t\t\t\tconst found = {}\n\t\t\t\tids.forEach((id) => {\n\t\t\t\t\tfound[id] = { color: (colors && colors[id]) || null, icon: (icons && icons[id]) || null }\n\t\t\t\t})\n\t\t\t\tthis.refLooks = { ...this.refLooks, [spec.key]: { ...(this.refLooks[spec.key] || {}), ...found } }\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Whether a saved view shows its record count (`viewCounts`).\n\t\t *\n\t\t * @param {string} id The view id.\n\t\t * @return {boolean} True when the view opted in.\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tviewWantsCount(id) {\n\t\t\tif (this.viewCounts === true) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Array.isArray(this.viewCounts) && this.viewCounts.map(String).includes(String(id))\n\t\t},\n\n\t\t/**\n\t\t * Build the `quickFiltersFrom` tabs: the field's distinct values with\n\t\t * their counts in one grouped request, labelled through the\n\t\t * reference-label resolver when the values are record ids. A failed\n\t\t * request draws no tabs.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-quick-filters-from/specs/index-page/spec.md#requirement-quick-filters-can-come-from-a-field-s-values\n\t\t */\n\t\tasync loadGeneratedQuickFilters() {\n\t\t\tconst key = this.quickFiltersFromKey\n\t\t\tconst schema = this.exportSchemaSlug\n\t\t\tif (key === '' || !this.register || !schema) {\n\t\t\t\tthis.generatedQuickFilters = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst from = this.quickFiltersFrom\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tlet groups\n\t\t\ttry {\n\t\t\t\tgroups = await fetchGroupedCounts({ register: this.register, schema, groupBy: from.field, filter: resolveFilterMap(this.filter, params, ctx) }, ctx)\n\t\t\t} catch {\n\t\t\t\tgroups = []\n\t\t\t}\n\t\t\tlet labels = {}\n\t\t\tif (from.register && from.schema && from.valueField && groups.length > 0) {\n\t\t\t\tlabels = await labelsByField({ register: from.register, schema: from.schema, field: from.valueField, values: groups.map((g) => g.key), labelField: from.labelField || '' }).catch(() => ({}))\n\t\t\t} else if (from.register && from.schema && groups.length > 0) {\n\t\t\t\tif (!this._quickFilterLabelResolver) {\n\t\t\t\t\tthis._quickFilterLabelResolver = createRefLabelResolver(() => {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tlabels = await this._quickFilterLabelResolver.resolve(from.register, from.schema, groups.map((g) => g.key), from.labelField || '').catch(() => ({}))\n\t\t\t}\n\t\t\tif (key !== this.quickFiltersFromKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (groups.length === 0) {\n\t\t\t\tthis.generatedQuickFilters = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst sorted = [...groups].sort((a, b) => b.count - a.count)\n\t\t\tconst total = sorted.reduce((sum, g) => sum + g.count, 0)\n\t\t\tthis.generatedQuickFilters = [\n\t\t\t\t{ label: from.allLabel || t('nextcloud-vue', 'All'), filter: {}, default: true, count: total },\n\t\t\t\t...sorted.map((g) => ({ label: (labels && labels[g.key]) || g.key, filter: { [from.field]: g.key }, count: g.count })),\n\t\t\t]\n\t\t},\n\n\t\t/**\n\t\t * Whether Nextcloud says the user administers this instance; false\n\t\t * when the user cannot be read.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tviewerIsAdmin() {\n\t\t\ttry {\n\t\t\t\treturn getCurrentUser()?.isAdmin === true\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a manifest page tab shows to this user: an `adminOnly` tab to\n\t\t * an instance admin, a tab with a `permission` to a user who holds it\n\t\t * (as a menu entry: with no permissions known, it shows). This only\n\t\t * decides whether the tab is drawn. It is not access control; the\n\t\t * page behind the tab must enforce its own access on the server.\n\t\t *\n\t\t * @param {object} tab The tab declaration.\n\t\t * @return {boolean} True when the tab is drawn.\n\t\t */\n\t\tpageTabVisible(tab) {\n\t\t\tif (tab.adminOnly === true && !this.viewerIsAdmin()) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (tab.permission) {\n\t\t\t\tconst held = Array.isArray(this.cnPermissions) ? this.cnPermissions : []\n\t\t\t\tif (held.length > 0 && !held.includes(tab.permission)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Read the totals of the lists `headerMetaCounts` names, one list\n\t\t * request each. A failed count is null and leaves the note out.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadHeaderMetaCounts() {\n\t\t\tconst key = this.headerMetaCountKey\n\t\t\tif (key === '') {\n\t\t\t\tthis.headerMetaCountValues = {}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst values = {}\n\t\t\tawait Promise.all(JSON.parse(key).map(async ([name, from]) => {\n\t\t\t\tvalues[name] = await fetchListTotal(from.register, from.schema, from.filter || {}, ctx).catch(() => null)\n\t\t\t}))\n\t\t\tif (key === this.headerMetaCountKey) {\n\t\t\t\tthis.headerMetaCountValues = values\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Count the lists behind the manifest page tabs (`countFrom`), one list\n\t\t * request each. A failed count shows no number.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-page-tabs-notice/specs/index-page/spec.md#requirement-an-index-page-can-link-its-sibling-pages-as-tabs\n\t\t */\n\t\tasync loadPageTabCounts() {\n\t\t\tconst key = this.pageTabCountKey\n\t\t\tif (key === '') {\n\t\t\t\tthis.pageTabCounts = {}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst counts = {}\n\t\t\tawait Promise.all(this.pageTabs.map(async (tab, index) => {\n\t\t\t\tconst from = tab && tab.countFrom\n\t\t\t\tif (from && from.register && from.schema) {\n\t\t\t\t\tcounts[index] = await fetchListTotal(from.register, from.schema, from.filter || {}, ctx).catch(() => null)\n\t\t\t\t}\n\t\t\t}))\n\t\t\tif (key === this.pageTabCountKey) {\n\t\t\t\tthis.pageTabCounts = counts\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read the counts of the `filterStrip` pills in one grouped request,\n\t\t * narrowed by the page filter and the active quick filter. A failed\n\t\t * count leaves that pill without a number.\n\t\t *\n\t\t * @spec openspec/changes/screens-filter-strip/specs/index-filter-strip/spec.md#requirement-an-index-page-can-draw-a-second-filter-strip\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadFilterStripCounts() {\n\t\t\tconst requestKey = this.filterStripCountKey\n\t\t\tconst schema = this.exportSchemaSlug\n\t\t\tif (requestKey === '' || !this.register || !schema) {\n\t\t\t\tthis.filterStripCounts = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst field = this.filterStrip.field\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst base = { ...resolveFilterMap(this.filter, params, ctx), ...resolveFilterMap(this.filterStripTabFilter, params, ctx) }\n\t\t\tconst entries = [\n\t\t\t\t{ key: 'all', filter: {} },\n\t\t\t\t...this.filterStripValues.map((option, index) => ({ key: `v${index}`, filter: { [field]: option.value } })),\n\t\t\t]\n\t\t\tlet counts\n\t\t\ttry {\n\t\t\t\tcounts = await fetchFilterCounts({ register: this.register, schema, entries, baseFilter: base, ctx })\n\t\t\t} catch {\n\t\t\t\tcounts = {}\n\t\t\t}\n\t\t\tif (requestKey !== this.filterStripCountKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.filterStripCounts = counts\n\t\t},\n\n\t\t/**\n\t\t * A pill of the `filterStrip` was picked: filter the list on that value,\n\t\t * or clear the field's filter for All.\n\t\t *\n\t\t * @param {string} value The value, '' for All.\n\t\t * @return {void}\n\t\t */\n\t\tonFilterStripPick(value) {\n\t\t\tthis.onFilterEvent({ key: this.filterStrip.field, values: value === '' ? [] : [value] })\n\t\t},\n\n\t\t/**\n\t\t * Fetch the record counts for the filters and views that asked for\n\t\t * one. Filters that narrow the same single field share one grouped\n\t\t * request. A failed count leaves that entry without a number.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views\n\t\t */\n\t\tasync loadFilterCounts() {\n\t\t\tconst requestKey = this.countRequestKey\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tawait this.loadNamedSourceCounts(requestKey)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst schema = this.exportSchemaSlug\n\t\t\tif (requestKey === '' || !this.register || !schema) {\n\t\t\t\tthis.tabCounts = null\n\t\t\t\tthis.savedViewCounts = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst counts = await fetchFilterCounts({\n\t\t\t\tregister: this.register,\n\t\t\t\tschema,\n\t\t\t\tentries: this.countEntries.map((entry) => ({ key: entry.key, filter: resolveFilterMap(entry.filter, params, ctx) })),\n\t\t\t\tbaseFilter: resolveFilterMap(this.filter, params, ctx),\n\t\t\t\tctx,\n\t\t\t})\n\t\t\tif (requestKey !== this.countRequestKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst tabCounts = {}\n\t\t\tconst viewCounts = {}\n\t\t\tfor (const [key, value] of Object.entries(counts)) {\n\t\t\t\tif (key.startsWith('tab:')) {\n\t\t\t\t\ttabCounts[Number(key.slice(4))] = value\n\t\t\t\t} else {\n\t\t\t\t\tviewCounts[key.slice(5)] = value\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.tabCounts = tabCounts\n\t\t\tthis.savedViewCounts = viewCounts\n\t\t},\n\n\t\t/**\n\t\t * The quick-filter counts of a named source (`entitySource`): each tab\n\t\t * that asks is counted by the source's own `count(config)`, with the\n\t\t * tab's filter over `sourceConfig`. A source without `count` shows\n\t\t * none; a failed count leaves that tab without a number.\n\t\t *\n\t\t * @param {string} requestKey The `countRequestKey` this load answers.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-a-named-source-counts-its-quick-filters\n\t\t */\n\t\tasync loadNamedSourceCounts(requestKey) {\n\t\t\tconst count = this.namedSource ? this.namedSource.count : null\n\t\t\tif (requestKey === '' || typeof count !== 'function') {\n\t\t\t\tthis.tabCounts = null\n\t\t\t\tthis.savedViewCounts = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst params = (this.$route && this.$route.params) || {}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tconst tabCounts = {}\n\t\t\tawait Promise.all(this.countEntries\n\t\t\t\t.filter((entry) => entry.key.startsWith('tab:'))\n\t\t\t\t.map(async (entry) => {\n\t\t\t\t\tconst config = resolveFilterMap({ ...(this.sourceConfig || {}), ...(entry.filter || {}) }, params, ctx)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst total = await count(config)\n\t\t\t\t\t\tif (Number.isFinite(total)) {\n\t\t\t\t\t\t\ttabCounts[Number(entry.key.slice(4))] = total\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// No number for this tab.\n\t\t\t\t\t}\n\t\t\t\t}))\n\t\t\tif (requestKey !== this.countRequestKey) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.tabCounts = tabCounts\n\t\t\tthis.savedViewCounts = null\n\t\t},\n\n\t\t// ── Split view (case-page-and-list-as-a-place) ──────────────────\n\n\t\t/**\n\t\t * Measure the viewport so the narrow fallback follows a resize and\n\t\t * not only a reload. Measured rather than read off a media query\n\t\t * because the breakpoint is the page's own declaration, not a global.\n\t\t *\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmeasureSplitViewport() {\n\t\t\tif (typeof window !== 'undefined' && Number.isFinite(window.innerWidth)) {\n\t\t\t\tthis.splitViewportWidth = window.innerWidth\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remember where the list is scrolled to.\n\t\t *\n\t\t * The list never unmounts, so the browser keeps the scroll on its\n\t\t * own in the split layout. It does NOT keep it across the narrow\n\t\t * layout, where the element is hidden and has no scroll height at\n\t\t * all, so the position is held here and put back on the way out.\n\t\t *\n\t\t * @param {Event} [event] The scroll event.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tonListScroll(event) {\n\t\t\tconst top = event?.target?.scrollTop\n\t\t\tif (Number.isFinite(top)) {\n\t\t\t\tthis.splitScrollTop = top\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Put the list back where it was.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tasync restoreListScroll() {\n\t\t\tawait this.$nextTick()\n\t\t\tconst el = this.$refs.listScroll\n\t\t\tif (el && Number.isFinite(this.splitScrollTop) && this.splitScrollTop > 0) {\n\t\t\t\tel.scrollTop = this.splitScrollTop\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Close the pane and go back to the list's own address.\n\t\t *\n\t\t * The list is already mounted and already at row 180, so this is a\n\t\t * route change and nothing else: no refetch, no remount, no reset.\n\t\t *\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tcloseSplitPane() {\n\t\t\t/**\n\t\t\t * @event split-close Emitted when the split pane is closed. The host returns to the list address.\n\t\t\t */\n\t\t\tthis.$emit('split-close')\n\t\t\tconst router = this.$router\n\t\t\tconst target = this.splitCloseRoute || this.$route?.meta?.cnPageId || null\n\t\t\tif (router && target) {\n\t\t\t\trouter.push({ name: target, query: this.$route?.query || {} }).catch(() => {})\n\t\t\t}\n\t\t\tthis.restoreListScroll()\n\t\t},\n\n\t\t/**\n\t\t * A record was saved in the pane: replace its row where it sits.\n\t\t *\n\t\t * Deliberately not a refetch. Refetching the page would be correct\n\t\t * and would also scroll the handler back to the top of four hundred\n\t\t * cases, which is the failure the split view was built to end.\n\t\t *\n\t\t * @param {object} saved The saved record.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tonSplitPaneSaved(saved) {\n\t\t\tconst id = rowIdOf(saved, this.rowKey) ?? (this.splitId || null)\n\t\t\tif (id === null || !saved || typeof saved !== 'object') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.splitRowPatches = { ...this.splitRowPatches, [id]: saved }\n\t\t\t/**\n\t\t\t * @event split-saved Emitted after a record saved in the pane was written onto its row in the list.\n\t\t\t * @type {object}\n\t\t\t */\n\t\t\tthis.$emit('split-saved', saved)\n\t\t},\n\n\t\t// ── Manual order (case-page-and-list-as-a-place) ────────────────\n\n\t\t/**\n\t\t * The key this list's manual order is held under.\n\t\t *\n\t\t * @return {string} The preference key.\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmanualOrderPreferenceKey() {\n\t\t\treturn manualOrderKey(this.manualOrderId || this.objectType || this.schema || 'default')\n\t\t},\n\n\t\t/**\n\t\t * Read this person's order for this list out of their preferences.\n\t\t *\n\t\t * A read that fails leaves the list in its loaded order rather than\n\t\t * blocking it: an order nobody can read is a nicety, and a list that\n\t\t * refuses to render because of one is not.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tasync loadManualOrder() {\n\t\t\tif (!this.manualOrder) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst read = this.cnUserPreferences?.read\n\t\t\tif (typeof read !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst stored = await read(this.manualOrderPreferenceKey(), [])\n\t\t\t\tthis.manualOrderIds = Array.isArray(stored) ? stored.map(String) : []\n\t\t\t} catch {\n\t\t\t\tthis.manualOrderIds = []\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Write this person's order back, and tell the host.\n\t\t *\n\t\t * @param {Array<string>} ids The new order.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tasync persistManualOrder(ids) {\n\t\t\tthis.manualOrderIds = ids\n\t\t\t/**\n\t\t\t * @event manual-order-change Emitted when this person reorders the list by hand. Payload is the row ids in their order.\n\t\t\t * @type {Array<string>}\n\t\t\t */\n\t\t\tthis.$emit('manual-order-change', ids)\n\t\t\tconst write = this.cnUserPreferences?.write\n\t\t\tif (typeof write === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait write(this.manualOrderPreferenceKey(), ids)\n\t\t\t\t} catch {\n\t\t\t\t\t// A preference that could not be written is a preference\n\t\t\t\t\t// that will not survive the reload. The list is still in\n\t\t\t\t\t// the order the person just chose, so nothing is said.\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Move a row one place up or down. The keyboard half of the drag, and\n\t\t * the one the drag itself calls, so the two cannot disagree.\n\t\t *\n\t\t * @param {string} id The row being moved.\n\t\t * @param {number} delta -1 for up, 1 for down.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tmoveRowByHand(id, delta) {\n\t\t\treturn this.persistManualOrder(moveInOrder(visibleIdsOf(this.displayObjects, this.rowKey), id, delta))\n\t\t},\n\n\t\t/**\n\t\t * Place a dragged row at an index.\n\t\t *\n\t\t * @param {string} id The row being dragged.\n\t\t * @param {number} toIndex The index it was dropped at.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/case-page-and-list-as-a-place/specs/index-page/spec.md\n\t\t */\n\t\tdropRowByHand(id, toIndex) {\n\t\t\treturn this.persistManualOrder(dropInOrder(visibleIdsOf(this.displayObjects, this.rowKey), id, toIndex))\n\t\t},\n\n\t\t/**\n\t\t * Resolve a component the page config names — `cardComponent`,\n\t\t * `listComponent` — out of the v2 registry (any kind carrying a\n\t\t * `component`, as a slot lookup does) and then the legacy\n\t\t * customComponents map.\n\t\t *\n\t\t * @param {string} name The registered component name.\n\t\t * @return {object|null} The component, or null when nothing answers.\n\t\t */\n\t\tresolveNamedComponent(name) {\n\t\t\tconst entry = this.effectiveRegistry[name]\n\t\t\tif (entry && entry.component) {\n\t\t\t\treturn entry.component\n\t\t\t}\n\t\t\treturn this.effectiveCustomComponents[name] || null\n\t\t},\n\n\t\t/**\n\t\t * Whether a handler name matches something registered that is not\n\t\t * callable — a named component where a function belongs. Tells a\n\t\t * typo (silent emit-only) apart from a mis-registration (warned).\n\t\t *\n\t\t * @param {string} name The handler name from the manifest.\n\t\t * @return {boolean}\n\t\t */\n\t\tnamesSomethingUnusable(name) {\n\t\t\tconst candidates = [this.effectiveRegistry[name], this.resolvedCustomComponents[name]]\n\t\t\treturn candidates.some((v) => v !== undefined && v !== null)\n\t\t},\n\n\t\t/**\n\t\t * Resolve a declarative `headerActions[]` entry's `handler`\n\t\t * field into the final dispatchable shape. Mirrors the\n\t\t * row-level `actions[].handler` keyword set used by\n\t\t * manifest-actions-dispatch — `navigate`, `emit`, `none`, or a\n\t\t * registry name (resolved through `resolveRegisteredHandler`).\n\t\t *\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @param {object} entry Raw headerActions entry.\n\t\t * @return {object} Possibly-mutated copy: an `href` becomes a\n\t\t * resolved link with `linkTarget`, no handler (a function one\n\t\t * included) and `_dispatchSuppress: true`; function-typed\n\t\t * handlers untouched; `'emit'` and unknown registry names\n\t\t * strip the `handler` (emit-only fall-through); `'navigate'`\n\t\t * becomes a `$router.push` thunk (with the entry's literal\n\t\t * `params` map when present); `'none'` becomes a no-op +\n\t\t * `_dispatchSuppress: true`; a registry name resolves to a\n\t\t * `fn({ actionId })` thunk.\n\t\t */\n\t\tresolveHeaderHandler(entry) {\n\t\t\tif (!entry) {\n\t\t\t\treturn entry\n\t\t\t}\n\t\t\t// An `href` makes the entry a link, which only navigates: it\n\t\t\t// carries no handler, and the page emits nothing for it.\n\t\t\tif (typeof entry.href === 'string' && entry.href !== '') {\n\t\t\t\tconst link = headerActionAsLink(entry)\n\t\t\t\treturn link.href ? { ...link, linkTarget: link.target, _dispatchSuppress: true } : link\n\t\t\t}\n\t\t\tconst handler = entry.handler\n\t\t\tif (typeof handler === 'function') {\n\t\t\t\treturn { ...entry }\n\t\t\t}\n\t\t\t// `type: \"navigate\"` with a `target` URL is a link: the bar and the\n\t\t\t// header's Actions menu render it as a real anchor, an external URL\n\t\t\t// in a new tab.\n\t\t\tif (typeof handler !== 'string' && entry.type === 'navigate' && typeof entry.target === 'string' && entry.target !== '' && !entry.href) {\n\t\t\t\treturn isExternalActionTarget(entry.target)\n\t\t\t\t\t? { ...entry, href: entry.target, linkTarget: '_blank' }\n\t\t\t\t\t: { ...entry, href: entry.target }\n\t\t\t}\n\t\t\tif (typeof handler !== 'string') {\n\t\t\t\t// No handler declared — emit-only fall-through.\n\t\t\t\treturn { ...entry }\n\t\t\t}\n\t\t\tif (handler === 'navigate') {\n\t\t\t\tif (!entry.route) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn(`CnIndexPage: headerActions[].id \"${entry.id}\" handler:\"navigate\" requires \"route\"; falling back to emit-only`)\n\t\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\t\treturn { ...rest }\n\t\t\t\t}\n\t\t\t\tconst route = entry.route\n\t\t\t\tconst router = this.$router\n\t\t\t\t// Literal params let a header action navigate to a detail route\n\t\t\t\t// with fixed params, e.g. a \"New X\" button → `{ id: \"new\" }`.\n\t\t\t\tconst params = (entry.params && typeof entry.params === 'object') ? entry.params : null\n\t\t\t\tconst location = params ? { name: route, params } : { name: route }\n\t\t\t\t// A resolvable route renders as a real link in the bar, which does\n\t\t\t\t// the navigating; the entry then carries no handler to push again.\n\t\t\t\tif (routeHref(location, router)) {\n\t\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\t\treturn { ...rest, to: location }\n\t\t\t\t}\n\t\t\t\tconst out = { ...entry }\n\t\t\t\tout.handler = () => {\n\t\t\t\t\tif (router && typeof router.push === 'function') {\n\t\t\t\t\t\trouter.push(location)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn out\n\t\t\t}\n\t\t\tif (handler === 'emit') {\n\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\treturn { ...rest }\n\t\t\t}\n\t\t\tif (handler === 'none') {\n\t\t\t\treturn { ...entry, handler: () => {}, _dispatchSuppress: true }\n\t\t\t}\n\t\t\t// Registry name lookup.\n\t\t\tconst resolved = resolveRegisteredHandler(handler, this.effectiveRegistry, this.resolvedCustomComponents)\n\t\t\tif (typeof resolved === 'function') {\n\t\t\t\tconst id = entry.id\n\t\t\t\treturn { ...entry, handler: () => resolved({ actionId: id }) }\n\t\t\t}\n\t\t\tif (this.namesSomethingUnusable(handler)) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`CnIndexPage: headerActions[].handler \"${handler}\" resolved to a non-function in the registry or customComponents; falling back to emit-only`)\n\t\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\t\treturn { ...rest }\n\t\t\t}\n\t\t\t// Unknown registry name — silent emit-only fall-through.\n\t\t\tconst { handler: _ignored, ...rest } = entry\n\t\t\treturn { ...rest }\n\t\t},\n\n\t\t/**\n\t\t * Click dispatch from CnActionsBar's `@bulk-action`.\n\t\t *\n\t\t * 🔴 THE SELECTION IS PASSED, NEVER LOOKED UP. Everything a bulk\n\t\t * action does is defined by which rows were selected, and the strip\n\t\t * that raised the event is the thing that knows. A handler that reads\n\t\t * the selection from somewhere else is one re-render away from acting\n\t\t * on a different set than the user saw highlighted.\n\t\t *\n\t\t * Resolution mirrors `headerActions[]`:\n\t\t * - a function handler is called with `{ actionId, selectedIds, count }`\n\t\t * - `open-modal` (with `target`) opens the registered modal, with the\n\t\t * selection merged into its props\n\t\t * - a registry name resolves through the v2 registry, then the\n\t\t * legacy `customComponents`\n\t\t * - anything else falls through to emit-only\n\t\t *\n\t\t * `bulk-action` is emitted either way, so a host can listen instead of\n\t\t * declaring a handler.\n\t\t *\n\t\t * @param {{id: string, action: string, selectedIds: Array, count: number}} payload Bar payload.\n\t\t */\n\t\tonBulkAction(payload) {\n\t\t\tconst id = payload && (payload.id ?? payload.action)\n\t\t\tconst selectedIds = (payload && Array.isArray(payload.selectedIds)) ? payload.selectedIds : []\n\t\t\tconst count = selectedIds.length\n\t\t\tconst entry = this.mergedBulkActions.find((e) => e.id === id)\n\n\t\t\tif (entry) {\n\t\t\t\tconst handler = entry.handler\n\t\t\t\tconst scope = { actionId: id, selectedIds, count }\n\n\t\t\t\tif (typeof handler === 'function') {\n\t\t\t\t\thandler(scope)\n\t\t\t\t} else if (handler === 'open-modal' || (!handler && entry.target)) {\n\t\t\t\t\tthis.openBulkModal(entry, selectedIds, count)\n\t\t\t\t} else if (typeof handler === 'string' && handler !== 'emit' && handler !== 'none') {\n\t\t\t\t\tconst resolved = resolveRegisteredHandler(handler, this.effectiveRegistry, this.resolvedCustomComponents)\n\t\t\t\t\tif (typeof resolved === 'function') {\n\t\t\t\t\t\tresolved(scope)\n\t\t\t\t\t} else if (this.namesSomethingUnusable(handler)) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].handler \"${handler}\" resolved to a non-function in the registry or customComponents; falling back to emit-only`)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (entry._dispatchSuppress || entry.handler === 'none') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * @event bulk-action A declarative bulk action was triggered from the selection strip. Payload: `{ action, id, selectedIds, count }`. The SELECTION travels with it, because an action that has to go and find out what was selected is one re-render away from acting on a different set than the user saw highlighted.\n\t\t\t */\n\t\t\tthis.$emit('bulk-action', { action: id, id, selectedIds, count })\n\t\t},\n\n\t\t/**\n\t\t * Open a bulk action's modal with the selection in its props.\n\t\t *\n\t\t * The selection is merged UNDER the entry's own props, so a manifest\n\t\t * that names a `selectedIds` prop of its own still wins — but it also\n\t\t * means such a manifest silently stops receiving the live selection,\n\t\t * which is why the collision is warned about rather than allowed\n\t\t * quietly.\n\t\t *\n\t\t * @param {object} entry The bulk action entry.\n\t\t * @param {Array} selectedIds The current selection.\n\t\t * @param {number} count Its length.\n\t\t */\n\t\topenBulkModal(entry, selectedIds, count) {\n\t\t\tconst target = entry.target\n\t\t\tif (!target) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].id \"${entry.id}\" handler:\"open-modal\" requires \"target\"; falling back to emit-only`)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst own = (entry.props && typeof entry.props === 'object') ? entry.props : {}\n\t\t\tif (Object.hasOwn(own, 'selectedIds')) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`CnIndexPage: bulkActions[].id \"${entry.id}\" declares its own \"selectedIds\" prop, which shadows the live selection; the modal will not see what the user selected.`)\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event open-modal A bulk action of type `open-modal` asks the host to open a registered modal. Payload: `{ target, props }`, where `props` carries `selectedIds` and `count` merged UNDER the action's own props.\n\t\t\t */\n\t\t\tthis.$emit('open-modal', { target, props: { selectedIds, count, ...own } })\n\t\t},\n\n\t\t/**\n\t\t * Whether a shown header button takes `action` over from the bar.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @param {string} action The action, e.g. `add`.\n\t\t * @return {boolean}\n\t\t */\n\t\theaderButtonTakes(action) {\n\t\t\treturn this.headerButtonsShown && this.resolvedHeaderButtons.some((button) => button.action === action)\n\t\t},\n\n\t\t/**\n\t\t * The entries of the header's Actions menu (`headerButtons[]` with\n\t\t * `action: \"actions-menu\"`). Without `items` they are the page's header\n\t\t * actions, as before. `items` names them, in order: `header-actions`\n\t\t * (all of them), the id of one header action, or a built-in of the\n\t\t * actions bar's own menu, which the bar drops while header buttons show:\n\t\t * `import`, `export`, `refresh`, `copy-selected`, `export-selected`,\n\t\t * `delete-selected` (the three disabled until a row is selected) and `documentation` (a link to\n\t\t * `documentationUrl`, left out when the page has none). An unknown name\n\t\t * is left out. `{ heading }` and `separator` group the entries: an\n\t\t * entry of `kind` `heading` or `separator`, drawn only when an entry\n\t\t * follows it.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-header-actions-menu/specs/index-header/spec.md#requirement-the-header-actions-menu-lists-what-its-items-name\n\t\t * @spec openspec/changes/screens-index-header-menu-headings/specs/index-header/spec.md#requirement-the-header-actions-menu-can-draw-group-headings-and-separators\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @param {{items?: Array<(string|{heading: string})>|null, format?: string}} button The resolved header button.\n\t\t * @return {Array<{key: string, label: string, kind?: ('heading'|'separator'), icon?: string, href?: string, linkTarget?: string, disabled?: boolean, title?: string, iconComponent?: object, run?: () => void}>}\n\t\t */\n\t\theaderMenuEntries(button) {\n\t\t\tconst fromAction = (entry) => ({\n\t\t\t\tkey: String(entry.id),\n\t\t\t\tlabel: entry.label ? this.cnTranslate(entry.label) : '',\n\t\t\t\ticon: entry.icon && typeof entry.icon === 'string' && !entry.icon.startsWith('icon-') ? entry.icon : '',\n\t\t\t\thref: typeof entry.href === 'string' && entry.href !== '' ? entry.href : '',\n\t\t\t\tlinkTarget: entry.linkTarget || '',\n\t\t\t\t// A `handler: \"navigate\"` entry whose route resolves carries `to`\n\t\t\t\t// (resolveHeaderHandler drops its handler): the menu draws it as\n\t\t\t\t// an in-app link, as the actions bar does, so it navigates.\n\t\t\t\tlink: !entry.href && entry.to && !entry.disabled ? resolveItemActionLink({ to: entry.to }, null, this.$router) : null,\n\t\t\t\tdisabled: Boolean(entry.disabled),\n\t\t\t\trun: () => this.onHeaderAction({ action: entry.id, id: entry.id }),\n\t\t\t})\n\t\t\tconst names = button && Array.isArray(button.items) ? button.items : ['header-actions']\n\t\t\tconst noSelection = this.internalSelectedIds.length < 1\n\t\t\tconst builtIns = {\n\t\t\t\timport: () => ({ key: 'import', label: t('nextcloud-vue', 'Import'), icon: 'Import', iconComponent: ImportIcon, run: () => { this.showImportDialog = true } }),\n\t\t\t\texport: () => ({ key: 'export', label: t('nextcloud-vue', 'Export'), icon: 'Export', iconComponent: Export, run: () => this.onHeaderButton({ action: 'export', format: button.format }) }),\n\t\t\t\trefresh: () => ({ key: 'refresh', label: t('nextcloud-vue', 'Refresh'), icon: 'Refresh', run: () => this.onRefreshEvent() }),\n\t\t\t\t'copy-selected': () => ({\n\t\t\t\t\tkey: 'copy-selected',\n\t\t\t\t\tlabel: t('nextcloud-vue', 'Copy selected'),\n\t\t\t\t\ticon: 'ContentCopy',\n\t\t\t\t\tdisabled: noSelection,\n\t\t\t\t\ttitle: noSelection ? t('nextcloud-vue', 'Select 1 or more items to copy') : '',\n\t\t\t\t\trun: () => { this.showMassCopyDialog = true },\n\t\t\t\t}),\n\n\t\t\t\t// Offered only where the list's own export is: `allowExport`, an\n\t\t\t\t// exportable schema, and a register and schema to export from.\n\t\t\t\t'export-selected': () => {\n\t\t\t\t\tif (!this.showExportMenu) {\n\t\t\t\t\t\treturn null\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tkey: 'export-selected',\n\t\t\t\t\t\tlabel: t('nextcloud-vue', 'Export selection as JSON'),\n\t\t\t\t\t\ticon: 'Export',\n\t\t\t\t\t\ticonComponent: Export,\n\t\t\t\t\t\tdisabled: noSelection,\n\t\t\t\t\t\ttitle: noSelection ? t('nextcloud-vue', 'Select 1 or more items to export') : '',\n\t\t\t\t\t\trun: () => this.onExportSelected(),\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t'delete-selected': () => ({\n\t\t\t\t\tkey: 'delete-selected',\n\t\t\t\t\tlabel: t('nextcloud-vue', 'Delete selected'),\n\t\t\t\t\ticon: 'TrashCanOutline',\n\t\t\t\t\ticonComponent: TrashCanOutline,\n\t\t\t\t\tdisabled: noSelection,\n\t\t\t\t\ttitle: noSelection ? t('nextcloud-vue', 'Select 1 or more items to delete') : '',\n\t\t\t\t\trun: () => { this.showMassDeleteDialog = true },\n\t\t\t\t}),\n\n\t\t\t\tdocumentation: () => (this.documentationUrl\n\t\t\t\t\t? { key: 'documentation', label: this.documentationLabel || t('nextcloud-vue', 'Documentation'), icon: 'BookOpenVariantOutline', href: this.documentationUrl, linkTarget: '_blank' }\n\t\t\t\t\t: null),\n\t\t\t}\n\t\t\tconst entries = []\n\t\t\tconst seen = new Set()\n\t\t\tconst push = (entry) => {\n\t\t\t\tif (entry && entry.label !== '' && !seen.has(entry.key)) {\n\t\t\t\t\tseen.add(entry.key)\n\t\t\t\t\tentries.push(entry)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// A group heading (`{ heading }`) or a `separator` is kept as a mark\n\t\t\t// and only drawn when an entry follows it (see groupMenuEntries).\n\t\t\tlet mark = 0\n\t\t\tfor (const name of names) {\n\t\t\t\tif (name && typeof name === 'object') {\n\t\t\t\t\tmark += 1\n\t\t\t\t\tentries.push({ key: `__heading-${mark}`, kind: 'heading', label: this.cnTranslate(name.heading) })\n\t\t\t\t} else if (name === 'separator') {\n\t\t\t\t\tmark += 1\n\t\t\t\t\tentries.push({ key: `__separator-${mark}`, kind: 'separator', label: '' })\n\t\t\t\t} else if (name === 'header-actions') {\n\t\t\t\t\tthis.mergedHeaderActions.forEach((entry) => push(fromAction(entry)))\n\t\t\t\t} else if (Object.hasOwn(builtIns, name)) {\n\t\t\t\t\tpush(builtIns[name]())\n\t\t\t\t} else {\n\t\t\t\t\tconst entry = this.mergedHeaderActions.find((candidate) => candidate.id === name)\n\t\t\t\t\tif (entry) {\n\t\t\t\t\t\tpush(fromAction(entry))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.groupMenuEntries(entries)\n\t\t},\n\n\t\t/**\n\t\t * Tidy the marks of the header's Actions menu: a heading or separator\n\t\t * with no entry after it (before the next mark or the end) is dropped,\n\t\t * a separator never opens the menu, two separators in a row are one,\n\t\t * and a heading followed by a separator before any entry is dropped. So a group whose entries are all left out (no documentation\n\t\t * URL, an unknown id) leaves no empty heading or double rule behind,\n\t\t * and a menu of marks only has no entries and is not drawn.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-header-menu-headings/specs/index-header/spec.md#requirement-the-header-actions-menu-can-draw-group-headings-and-separators\n\t\t * @param {Array<{key: string, kind?: string}>} entries The entries with their marks, in order.\n\t\t * @return {Array<{key: string, kind?: string}>} The entries to draw.\n\t\t */\n\t\tgroupMenuEntries(entries) {\n\t\t\tconst out = []\n\t\t\tlet separator = null\n\t\t\tlet heading = null\n\t\t\tfor (const entry of entries) {\n\t\t\t\tif (entry.kind === 'separator') {\n\t\t\t\t\t// A rule ends the group before it: a heading not yet followed\n\t\t\t\t\t// by an entry is dropped with it.\n\t\t\t\t\tseparator = entry\n\t\t\t\t\theading = null\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (entry.kind === 'heading') {\n\t\t\t\t\theading = entry\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (separator && out.length > 0) {\n\t\t\t\t\tout.push(separator)\n\t\t\t\t}\n\t\t\t\tif (heading) {\n\t\t\t\t\tout.push(heading)\n\t\t\t\t}\n\t\t\t\tseparator = null\n\t\t\t\theading = null\n\t\t\t\tout.push(entry)\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * An in-app link of the header's Actions menu was clicked: a plain click\n\t\t * goes through the router (a modified click is left to the browser),\n\t\t * and the entry is reported as a header action, as the actions bar does.\n\t\t *\n\t\t * @spec openspec/changes/screens-index-header-actions-menu/specs/index-header/spec.md#requirement-the-header-actions-menu-lists-what-its-items-name\n\t\t * @param {{key: string, link: object}} entry The menu entry.\n\t\t * @param {MouseEvent} event The click.\n\t\t * @return {void}\n\t\t */\n\t\tonHeaderMenuLinkClick(entry, event) {\n\t\t\tif (isModifiedClick(event)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfollowItemActionLink(event, entry.link, this.$router)\n\t\t\tthis.$emit('header-action', { action: entry.key, id: entry.key })\n\t\t},\n\n\t\t/**\n\t\t * A header button was clicked: run its built-in action, or dispatch\n\t\t * it as the `headerActions` entry with that id. A button that is a\n\t\t * link is left to the browser.\n\t\t *\n\t\t * @spec openspec/changes/zuiddrecht-pixel-gaps-3/specs/zuiddrecht-pixel-gaps-3/spec.md#requirement-an-index-page-can-take-the-board-header\n\t\t * @spec openspec/changes/header-action-href/specs/header-action-href/spec.md#requirement-a-header-action-with-href-is-a-link-that-runs-and-emits-nothing\n\t\t * @param {{action: string, format: string, link?: object}} button The resolved button.\n\t\t * @return {void}\n\t\t */\n\t\tonHeaderButton(button) {\n\t\t\tif (button.link) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (button.action === 'add') {\n\t\t\t\tthis.onAddClick()\n\t\t\t} else if (button.action === 'export') {\n\t\t\t\tif (button.run) {\n\t\t\t\t\tthis.onHeaderAction({ action: button.run, id: button.run })\n\t\t\t\t} else if (this.register && this.exportSchemaSlug) {\n\t\t\t\t\tthis.onExportClick(button.format)\n\t\t\t\t} else if (this.isNamedSource && !this.hasMassExportListener()) {\n\t\t\t\t\tthis.downloadNamedRows()\n\t\t\t\t} else {\n\t\t\t\t\tthis.showExportDialog = true\n\t\t\t\t}\n\t\t\t} else if (button.action === 'import') {\n\t\t\t\tthis.showImportDialog = true\n\t\t\t} else if (button.action === 'refresh') {\n\t\t\t\tthis.onRefreshEvent()\n\t\t\t} else if (button.action === 'save-view') {\n\t\t\t\tthis.showSaveViewDialog = true\n\t\t\t} else {\n\t\t\t\tthis.onHeaderAction({ action: button.action, id: button.action })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a header Export has something to export through. Any page\n\t\t * listing OpenRegister objects (self-fetch or the consumer's\n\t\t * `objects`) keeps it; a named or endpoint source (`entitySource`)\n\t\t * needs a `run` naming one of the page's header actions, or a\n\t\t * `@mass-export` listener.\n\t\t *\n\t\t * @spec openspec/changes/index-header-export-source/specs/index-page/spec.md#requirement-a-header-export-is-drawn-only-when-it-can-export\n\t\t * @param {{run?: string}} button The resolved header button.\n\t\t * @return {boolean}\n\t\t */\n\t\theaderExportAvailable(button) {\n\t\t\tif (!this.isNamedSource || (button && button.run) || this.hasMassExportListener()) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// A named source exports the rows it holds as CSV (downloadNamedRows).\n\t\t\treturn this.renderedColumns.some((col) => col && typeof col.key === 'string' && col.key !== '')\n\t\t},\n\n\t\t/**\n\t\t * Whether the consumer listens to `@mass-export`.\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasMassExportListener() {\n\t\t\tconst props = this.$ && this.$.vnode && this.$.vnode.props\n\t\t\treturn Boolean(props && typeof props.onMassExport === 'function')\n\t\t},\n\n\t\t/**\n\t\t * Download the rows of a named or endpoint source as CSV: every row the\n\t\t * source holds for the current query, with the table's columns. Such a\n\t\t * source has no server export, and a Download that does nothing is\n\t\t * worse than none.\n\t\t *\n\t\t * @spec openspec/changes/index-named-source-export/specs/index-named-source-export/spec.md#requirement-a-named-source-list-downloads-its-rows\n\t\t * @return {void}\n\t\t */\n\t\tdownloadNamedRows() {\n\t\t\tconst csv = rowsToCsv(this.namedRows, this.renderedColumns)\n\t\t\tconst blob = new Blob(['\\uFEFF' + csv], { type: 'text/csv;charset=utf-8' })\n\t\t\tconst url = URL.createObjectURL(blob)\n\t\t\tconst link = document.createElement('a')\n\t\t\tconst name = String(this.title || this.entitySource || 'export').trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '') || 'export'\n\t\t\tlink.href = url\n\t\t\tlink.download = `${name}.csv`\n\t\t\tdocument.body.appendChild(link)\n\t\t\tlink.click()\n\t\t\tlink.remove()\n\t\t\tURL.revokeObjectURL(url)\n\t\t},\n\n\t\t/**\n\t\t * Click dispatch from CnActionsBar's `@header-action`. Looks\n\t\t * up the resolved entry by id. An `api-call` entry runs here, after\n\t\t * its confirmation when it sets `confirm`; any other invokes its\n\t\t * handler if any and (unless the entry is `'none'`-suppressed) emits\n\t\t * `@header-action({ action: id, id })` upward.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-an-index-page-runs-an-api-call-header-action\n\t\t * @param {{action: string, id: string}} payload Bar payload.\n\t\t * @return {Promise<void>|undefined} The call, for an api-call entry that runs now.\n\t\t */\n\t\tonHeaderAction(payload) {\n\t\t\tconst id = payload && (payload.id ?? payload.action)\n\t\t\tconst entry = this.mergedHeaderActions.find((e) => e.id === id)\n\t\t\tif (entry && entry.type === 'api-call') {\n\t\t\t\tif (entry.confirm === true) {\n\t\t\t\t\tthis.headerApiCallPending = entry\n\t\t\t\t\treturn undefined\n\t\t\t\t}\n\t\t\t\treturn this.runHeaderApiCall(entry)\n\t\t\t}\n\t\t\tif (entry && typeof entry.handler === 'function') {\n\t\t\t\tentry.handler()\n\t\t\t} else {\n\t\t\t\tconst dialogRun = this.dialogHeaderRuns.find((e) => e.id === id)\n\t\t\t\tif (dialogRun && typeof dialogRun.run === 'function') {\n\t\t\t\t\tdialogRun.run()\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (entry && entry._dispatchSuppress) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('header-action', { action: id, id })\n\t\t},\n\n\t\t/**\n\t\t * Run an `api-call` header action through the shared dispatcher, the\n\t\t * one detail and dashboard pages use: it calls the endpoint and shows\n\t\t * the action's success or error message, run through the app's\n\t\t * translate. A call that went through reloads the list, unless the\n\t\t * action sets `refresh: false`.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-an-index-page-runs-an-api-call-header-action\n\t\t * @param {object} entry The header action.\n\t\t * @return {Promise<{ok: boolean}>} The dispatcher's outcome.\n\t\t */\n\t\tasync runHeaderApiCall(entry) {\n\t\t\tconst outcome = (await dispatchSharedAction(entry, {\n\t\t\t\trouter: this.$router || null,\n\t\t\t\ttranslate: (text) => this.cnTranslate(text),\n\t\t\t\ttokenCtx: {},\n\t\t\t})) || { ok: false }\n\t\t\tif (outcome.ok === true && entry.refresh !== false) {\n\t\t\t\tthis.onRefreshEvent()\n\t\t\t}\n\t\t\treturn outcome\n\t\t},\n\n\t\t/**\n\t\t * The confirmation of an `api-call` header action was given: run it and\n\t\t * report the outcome to the dialog.\n\t\t *\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-an-index-page-runs-an-api-call-header-action\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync onHeaderApiCallConfirm() {\n\t\t\tconst entry = this.headerApiCallPending\n\t\t\tif (!entry) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst outcome = await this.runHeaderApiCall(entry)\n\t\t\tconst dialog = this.$refs.headerApiCallConfirmDialog\n\t\t\tif (dialog && typeof dialog.setResult === 'function') {\n\t\t\t\tdialog.setResult(outcome.ok === true\n\t\t\t\t\t? { success: true }\n\t\t\t\t\t: { error: (outcome.error && outcome.error.message) || t('nextcloud-vue', 'Action failed.') })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The `countSubtitle` line for a total. A string goes through the host\n\t\t * translate; `{ singular, plural }` takes the form for the total\n\t\t * through the app's plural translation, or by `total === 1` when no app\n\t\t * id is provided. `{total}` (and `{shown}` when given) are filled in.\n\t\t *\n\t\t * @spec openspec/changes/index-count-plural/specs/index-header/spec.md#requirement-the-count-line-takes-a-singular-and-a-plural-form\n\t\t * @param {string|{singular: string, plural: string}} subtitle The declared line.\n\t\t * @param {number} total The collection's total.\n\t\t * @param {number|null} shown The rows on this page, or null to leave `{shown}` alone.\n\t\t * @return {string} The line, '' for a declaration without both forms.\n\t\t */\n\t\tcountLine(subtitle, total, shown) {\n\t\t\treturn countLine(subtitle, total, { shown, translate: this.cnTranslate, appId: this.cnAppId })\n\t\t},\n\n\t\t/**\n\t\t * An `open-form` header action saved a record: the list reloads so the\n\t\t * new row shows.\n\t\t *\n\t\t * @spec openspec/changes/index-header-open-form/specs/index-header/spec.md#requirement-an-index-header-action-can-open-the-create-form\n\t\t * @return {void}\n\t\t */\n\t\tonHeaderActionCreated() {\n\t\t\tthis.onRefreshEvent()\n\t\t},\n\n\t\tpushAiContext() {\n\t\t\tapplyAiContext(this.cnAiContext, 'index', {\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t\teffectiveSchema: this.effectiveSchema,\n\t\t\t})\n\t\t},\n\n\t\t// ── List-event handlers ──────────────────────────────────────────────\n\t\t// In self-fetch mode each routes to the useListView instance (re-fetch);\n\t\t// in every mode the event still bubbles via $emit so a host that wants\n\t\t// to observe (or take over) keeps working — unchanged for consumers.\n\t\t/**\n\t\t * @param {string} value Search term from the sidebar / header.\n\t\t * @return {void}\n\t\t */\n\t\tonSearchEvent(value) {\n\t\t\tif (this.namedSourceSearches) {\n\t\t\t\tthis.namedSearchTerm = value || ''\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onSearch === 'function') {\n\t\t\t\tthis.list.onSearch(value)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\tthis.$emit('search', value)\n\t\t},\n\n\t\t/**\n\t\t * Quick-filter tab change. Updates the active index — the `setup()`\n\t\t * watcher then triggers `list.refresh(1)` so the new tab's filter\n\t\t * flows into the next fetch.\n\t\t *\n\t\t * @param {number} index Zero-based tab index (from CnQuickFilterBar).\n\t\t * @return {void}\n\t\t */\n\t\tonQuickFilterChange(index) {\n\t\t\t// `activeQuickFilterIndex` is a setup-returned ref; the\n\t\t\t// Vue 2 ref-unwrap proxy makes plain assignment work.\n\t\t\tthis.activeQuickFilterIndex = index\n\t\t\tthis.$emit('quick-filter-change', index)\n\t\t},\n\n\t\t/**\n\t\t * Multi-select quick-filter change (`quickFilterMultiple`). Updates the\n\t\t * selected-index array; the `setup()` watcher re-fetches with the\n\t\t * OR-ed union of the selected tabs' filters.\n\t\t *\n\t\t * @param {number[]} indices Selected tab indices (from CnQuickFilterBar).\n\t\t * @return {void}\n\t\t */\n\t\tonQuickFilterMultiChange(indices) {\n\t\t\tthis.selectedQuickFilterIndices = Array.isArray(indices) ? indices : []\n\t\t\tthis.$emit('quick-filter-change', this.selectedQuickFilterIndices)\n\t\t},\n\n\t\t/**\n\t\t * An order chosen in the index sidebar's Sort section. An option with\n\t\t * an endpoint `source` is chosen by its value; any other goes the way a\n\t\t * header click goes: the self-fetched list sorts (`_order`, kept in the\n\t\t * address), and `sort` is emitted for a host that sorts itself.\n\t\t *\n\t\t * @param {Array<{key: string, order: string}>} keys The chosen order.\n\t\t * @param {string} [value] The chosen option's value.\n\t\t * @return {void}\n\t\t */\n\t\tonSidebarSortChange(keys, value) {\n\t\t\tif (value !== undefined && this.selectSortOption(value)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!Array.isArray(keys) || keys.length === 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onSortEvent({ key: keys[0].key, order: keys[0].order, keys })\n\t\t},\n\n\t\t/**\n\t\t * Choose a sort option by its value: an option with an endpoint\n\t\t * `source` lists the endpoint's rows; any other applies its order. A\n\t\t * saved view's `sortOption` selects through here.\n\t\t *\n\t\t * @param {string} value The option's value.\n\t\t * @return {boolean} Whether an option of that value was chosen.\n\t\t * @spec openspec/changes/sidebar-sort-source/specs/index-page/spec.md#requirement-a-sort-option-can-take-its-rows-from-an-endpoint\n\t\t */\n\t\tselectSortOption(value) {\n\t\t\tconst option = (this.sortSelectOptions || []).find((o) => o && o.value !== undefined && String(o.value) === String(value))\n\t\t\tif (!option) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.sourceSortOptions.includes(option) && this.isSelfFetchMode) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: String(option.value), page: 1 }\n\t\t\t\tthis.loadSortSource(option)\n\t\t\t\tthis.$emit('sort-change', String(option.value))\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst keys = orderToSortKeys(option.order !== undefined ? option.order : option.value)\n\t\t\tif (keys.length === 0) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.onSortEvent({ key: keys[0].key, order: keys[0].order, keys })\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * A quick filter with `@config.<key>` in its `label` or `activeLabel`\n\t\t * (`\"Residence @config.municipality\"`): the label translated first, then\n\t\t * each token replaced by its configured value. A key the config does\n\t\t * not hold leaves its token in place. Other tabs pass unchanged.\n\t\t *\n\t\t * @param {object} tab A quick-filter tab.\n\t\t * @return {object} The tab, with its labels resolved.\n\t\t */\n\t\twithConfigLabels(tab) {\n\t\t\tif (!tab || typeof tab !== 'object') {\n\t\t\t\treturn tab\n\t\t\t}\n\t\t\tconst hasToken = (value) => typeof value === 'string' && value.includes('@config.')\n\t\t\tif (!hasToken(tab.label) && !hasToken(tab.activeLabel)) {\n\t\t\t\treturn tab\n\t\t\t}\n\t\t\tconst fill = (value) => (hasToken(value) ? this.fillConfigTokens(this.cnTranslate(value)) : value)\n\t\t\treturn { ...tab, label: fill(tab.label), activeLabel: fill(tab.activeLabel) }\n\t\t},\n\n\t\t/**\n\t\t * A text with each `@config.<key>` replaced by the app config's value;\n\t\t * a key the config does not hold leaves its token in place.\n\t\t *\n\t\t * @param {string} text The text, already translated.\n\t\t * @return {string} The text with the config values in.\n\t\t * @spec openspec/changes/pl4-cell-rules/specs/pl4-cell-rules/spec.md#requirement-a-token-can-take-a-config-value\n\t\t */\n\t\tfillConfigTokens(text) {\n\t\t\tconst config = this.effectiveAppConfig\n\t\t\treturn String(text).replace(/@config\\.([A-Za-z0-9_.-]*[A-Za-z0-9_])/g, (token, key) => {\n\t\t\t\tconst found = this.getByPath(config, key)\n\t\t\t\treturn found === undefined || found === null || found === '' ? token : String(found)\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * @param {{key: string, order: string, keys?: Array<{key: string, order: string}>}} payload Sort change from CnDataTable.\n\t\t * @return {void}\n\t\t */\n\t\tonSortEvent(payload) {\n\t\t\t// An order by keys (a column header, a field in the Sort section)\n\t\t\t// leaves an endpoint-ranked order.\n\t\t\tif (this.sortSource.value) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: '', page: 1 }\n\t\t\t}\n\t\t\tif (namedSourceSorts(this)) {\n\t\t\t\tthis.namedSort = { key: (payload && payload.key) || '', order: (payload && payload.order) || 'asc' }\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onSort === 'function') {\n\t\t\t\tthis.list.onSort(payload)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\tthis.$emit('sort', payload)\n\t\t},\n\n\t\t/**\n\t\t * Self-fetch mode's current filters/search/sort, straight from\n\t\t * useListView's own reactive state — the shape `persistViewStateToRoute`\n\t\t * and the saved-views helpers (`buildViewCreatePayload`,\n\t\t * `extractViewState`) all share.\n\t\t *\n\t\t * @return {{filters: object, search: string, sortKey: ?string, sortOrder: string, sortKeys: Array<{key: string, order: string}>}}\n\t\t */\n\t\t/**\n\t\t * A view's state as the edit dialog shows it under a criteria choice:\n\t\t * its filters, search term and sort in sentences, read against the\n\t\t * page schema's titles and the page's `filterLabels` (a `hidden`\n\t\t * filter is left out).\n\t\t *\n\t\t * @param {object} state A view state (`extractViewState` or `currentViewState`).\n\t\t * @return {string} The sentences.\n\t\t * @spec openspec/changes/saved-view-edit-board-form/specs/saved-views/spec.md\n\t\t */\n\t\tcriteriaSummaryOf(state) {\n\t\t\tconst schema = this.effectiveSchema\n\t\t\treturn viewCriteriaSummary(state, {\n\t\t\t\tproperties: (schema && schema.properties) || {},\n\t\t\t\tfilterLabels: this.filterLabels || {},\n\t\t\t\ttranslate: (text) => this.cnTranslate(text),\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * A saved view's state, as `extractViewState` reads it.\n\t\t *\n\t\t * @param {object} view The saved view.\n\t\t * @return {object} Its state.\n\t\t */\n\t\tsavedViewState(view) {\n\t\t\treturn extractViewState(view)\n\t\t},\n\n\t\tcurrentViewState() {\n\t\t\treturn {\n\t\t\t\tfilters: this.list.activeFilters.value,\n\t\t\t\tsearch: this.list.searchTerm.value,\n\t\t\t\tsortKeys: this.list.sortKeys?.value || [],\n\t\t\t\tsortKey: this.list.sortKey.value,\n\t\t\t\tsortOrder: this.list.sortOrder.value,\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The spelling a filter goes back into the query as. A value that arrived\n\t\t * as an `@`-token keeps the TOKEN for as long as it still resolves to\n\t\t * what is active — otherwise a shared `?assignee=@me` link would be\n\t\t * rewritten to one named uid on the first filter change and stop meaning\n\t\t * \"me\" for whoever opens it next.\n\t\t *\n\t\t * @param {string} key The filter key, as it sits in the query.\n\t\t * @param {unknown} value The resolved value now active.\n\t\t * @return {unknown} The token, or the value.\n\t\t */\n\t\tfilterQuerySpelling(key, value) {\n\t\t\tconst raw = this.$route.query[key]\n\t\t\tif (typeof raw !== 'string' || raw.charAt(0) !== '@') {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\treturn String(resolveFilterValue(raw, ctx)) === String(value) ? raw : value\n\t\t},\n\n\t\t/**\n\t\t * The \"Also search inside files\" switch was toggled: refetch (via the\n\t\t * watcher in self-fetch mode), keep the state in the route, and tell a\n\t\t * consumer-managed host.\n\t\t *\n\t\t * @param {boolean} value The switch's new state.\n\t\t * @return {void}\n\t\t */\n\t\tonContentSearchToggle(value) {\n\t\t\tthis.contentSearch = !!value\n\t\t\t/**\n\t\t\t * @event content-search Emitted when the \"Also search inside files\" switch changes, so a consumer-managed page can add `_content_search` to its own query.\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('content-search', this.contentSearch)\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Persist filters + search + sort into `$route.query` in one replace,\n\t\t * so a reload or a shared/bookmarked link reproduces the exact same\n\t\t * view. Self-fetch mode only. The page's own filter keys are cleared and\n\t\t * re-applied wholesale each call rather than merged (otherwise a cleared\n\t\t * filter would never leave the query); a non-reserved key it never\n\t\t * claimed is left alone. Best-effort: a duplicate-navigation rejection\n\t\t * (same resulting path/query) is swallowed.\n\t\t *\n\t\t * @param {{filters?: object, search?: string, sortKey?: ?string, sortOrder?: string, sortKeys?: Array<{key: string, order: string}>}} state Current view state.\n\t\t * Without `savedView` the address keeps the applied view it names while\n\t\t * the filters are still the view's: a sort, a search or the view's own\n\t\t * sort option shows the same view's records.\n\t\t *\n\t\t * @param {{savedView?: string}} [options] The saved view the address keeps naming, or `''` for none.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/saved-view-kept-in-route/specs/saved-view-kept-in-route/spec.md#requirement-the-address-keeps-naming-the-applied-view\n\t\t */\n\t\tpersistViewStateToRoute(state, { savedView } = {}) {\n\t\t\tif (!this.$router || !this.$route) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst query = { ...this.$route.query }\n\t\t\tif (savedView === undefined) {\n\t\t\t\tconst named = this.appliedSavedViewId !== '' && query.savedView === this.appliedSavedViewId\n\t\t\t\tsavedView = named && this.viewFiltersKey(state.filters) === this.appliedViewFiltersKey ? this.appliedSavedViewId : ''\n\t\t\t}\n\t\t\t// The menu entry of a saved view is active while the address names\n\t\t\t// it; any other change to the filters is no longer that view.\n\t\t\tif (savedView !== '') {\n\t\t\t\tquery.savedView = savedView\n\t\t\t} else {\n\t\t\t\tdelete query.savedView\n\t\t\t}\n\t\t\tfor (const key of this.persistedFilterKeys) {\n\t\t\t\tdelete query[key]\n\t\t\t}\n\t\t\tconst written = []\n\t\t\tfor (const [key, value] of Object.entries(state.filters || {})) {\n\t\t\t\tif (value === undefined || value === null || value === '' || (Array.isArray(value) && value.length === 0)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tquery[key] = this.filterQuerySpelling(key, value)\n\t\t\t\twritten.push(key)\n\t\t\t}\n\t\t\tthis.persistedFilterKeys = written\n\t\t\tif (state.search) {\n\t\t\t\tquery._search = state.search\n\t\t\t} else {\n\t\t\t\tdelete query._search\n\t\t\t}\n\t\t\tif (this.searchInFiles && this.contentSearch) {\n\t\t\t\tquery.contentSearch = '1'\n\t\t\t} else {\n\t\t\t\tdelete query.contentSearch\n\t\t\t}\n\t\t\tconst sortKeys = Array.isArray(state.sortKeys) && state.sortKeys.length\n\t\t\t\t? state.sortKeys\n\t\t\t\t: (state.sortKey ? [{ key: state.sortKey, order: state.sortOrder || 'asc' }] : [])\n\t\t\tif (sortKeys.length) {\n\t\t\t\tquery._order = JSON.stringify(sortKeys.map((k) => ({ key: k.key, order: k.order || 'asc' })))\n\t\t\t} else {\n\t\t\t\tdelete query._order\n\t\t\t}\n\t\t\tthis.$router.replace({ query }).catch(() => {})\n\t\t},\n\n\t\t/**\n\t\t * Filters as one comparable key: empty values dropped, every value a\n\t\t * sorted list of strings, the keys sorted.\n\t\t *\n\t\t * @param {object} filters The filters.\n\t\t * @return {string}\n\t\t * @spec openspec/changes/saved-view-kept-in-route/specs/saved-view-kept-in-route/spec.md#requirement-the-address-keeps-naming-the-applied-view\n\t\t */\n\t\tviewFiltersKey(filters) {\n\t\t\tconst out = {}\n\t\t\tfor (const key of Object.keys(filters || {}).sort()) {\n\t\t\t\tconst value = filters[key]\n\t\t\t\tconst values = (Array.isArray(value) ? value : [value]).filter((v) => v !== undefined && v !== null && v !== '').map(String).sort()\n\t\t\t\tif (values.length > 0) {\n\t\t\t\t\tout[key] = values\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn JSON.stringify(out)\n\t\t},\n\n\t\t/**\n\t\t * \"Clear all\" from the sidebar: reset search, every active filter, the\n\t\t * sort and the folder-sidebar selection in one fetch + one route\n\t\t * replace, rather than one of each per field. Self-fetch mode only; a\n\t\t * consumer-managed page gets the bare event to handle itself.\n\t\t *\n\t\t * The SORT goes too, and that is the whole point: applying a saved view\n\t\t * sets a sort the reader never chose and cannot see the origin of, so a\n\t\t * clear that left it behind left the list in a state with no control\n\t\t * anywhere on the page to undo it.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonClearFilters() {\n\t\t\t// \"Clear all\" on the Active line also undoes the quick filters it\n\t\t\t// listed (a tab without an `activeLabel` is not a filter there).\n\t\t\tfor (const chip of this.quickFilterActiveChips) {\n\t\t\t\tthis.deselectQuickFilterChip(chip.quickFilterIndex)\n\t\t\t}\n\t\t\t// Clearing the view brings the person's own columns back.\n\t\t\tthis.appliedViewColumns = null\n\t\t\tthis.appliedSavedViewId = ''\n\t\t\tthis.applyViewSortOption(null)\n\t\t\tif (this.isNamedSource && Object.keys(this.namedActiveFilters || {}).length > 0) {\n\t\t\t\tthis.namedActiveFilters = {}\n\t\t\t\tthis.persistNamedFiltersToRoute({})\n\t\t\t}\n\t\t\tif (this.searchTermChips.length > 0) {\n\t\t\t\tthis.namedSearchTerm = ''\n\t\t\t}\n\t\t\tif (!this.isSelfFetchMode) {\n\t\t\t\tthis.$emit('clear-filters')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.list.activeFilters.value = {}\n\t\t\tthis.list.searchTerm.value = ''\n\t\t\tthis.list.sortKeys.value = []\n\t\t\tthis.list.sortKey.value = null\n\t\t\tthis.list.sortOrder.value = 'asc'\n\t\t\tif (this.folderSidebar) {\n\t\t\t\tthis.selectedFolderId = null\n\t\t\t}\n\t\t\tthis.list.refresh(1)\n\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\tthis.$emit('clear-filters')\n\t\t},\n\n\t\t/**\n\t\t * Read the rows `mapConfig.markerColor.source` points at, once.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadMapColorSource() {\n\t\t\tconst rule = this.mapMarkerColor\n\t\t\tif (!rule || !rule.source || this.mapColorRefs !== null) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst property = this.effectiveSchema?.properties?.[rule.field] || null\n\t\t\tconst target = referenceTargetOf(rule.source, { register: this.register, property })\n\t\t\tif (!target.register || !target.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tlet rows\n\t\t\ttry {\n\t\t\t\trows = await fetchReferenceObjects({ ...target, filter: rule.source.filter || {} })\n\t\t\t} catch {\n\t\t\t\trows = []\n\t\t\t}\n\t\t\tthis.mapColorRefs = Array.isArray(rows) ? rows : []\n\t\t},\n\n\t\t/**\n\t\t * Fetch what the board view needs: the rows of a reference column\n\t\t * field (once per field) and the narrowing select's options.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-columns-can-be-the-rows-a-field-references\n\t\t */\n\t\tasync loadBoardSources() {\n\t\t\tconst active = this.boardActiveColumnField\n\t\t\tif (active && active.kind === 'reference' && !Object.hasOwn(this.boardRefs, active.field)) {\n\t\t\t\tconst property = this.effectiveSchema?.properties?.[active.field] || null\n\t\t\t\tconst target = referenceTargetOf(active.source, { register: this.register, property })\n\t\t\t\tif (target.register && target.schema) {\n\t\t\t\t\tlet rows\n\t\t\t\t\ttry {\n\t\t\t\t\t\trows = await fetchReferenceObjects({ ...target, filter: active.source?.filter || {} })\n\t\t\t\t\t} catch {\n\t\t\t\t\t\trows = []\n\t\t\t\t\t}\n\t\t\t\t\tif (active.source?.itemsPath) {\n\t\t\t\t\t\trows = flattenItemRefs(rows, { itemsPath: active.source.itemsPath, keyField: active.source.keyField || 'name' })\n\t\t\t\t\t}\n\t\t\t\t\tthis.boardRefs = { ...this.boardRefs, [active.field]: rows }\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst narrow = this.boardNarrow\n\t\t\tif (narrow && this.boardNarrowOptions.length === 0) {\n\t\t\t\tconst property = this.effectiveSchema?.properties?.[narrow.field] || null\n\t\t\t\tconst target = referenceTargetOf(narrow.source || {}, { register: this.register, property })\n\t\t\t\tlet rows\n\t\t\t\ttry {\n\t\t\t\t\trows = await fetchReferenceObjects({ ...target, filter: narrow.source?.filter || {} })\n\t\t\t\t} catch {\n\t\t\t\t\trows = []\n\t\t\t\t}\n\t\t\t\tconst labelField = narrow.source?.labelField || 'title'\n\t\t\t\tthis.boardNarrowOptions = rows\n\t\t\t\t\t.map((row) => ({ value: refIdOf(row), label: String(row?.[labelField] ?? row?.name ?? row?.title ?? refIdOf(row)) }))\n\t\t\t\t\t.filter((option) => option.value !== '')\n\t\t\t\t\t.sort((a, b) => a.label.localeCompare(b.label))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The column switch changed.\n\t\t *\n\t\t * @param {string} field The column field picked.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-a-board-can-switch-the-field-its-columns-come-from\n\t\t */\n\t\tonBoardColumnFieldChange(field) {\n\t\t\tthis.boardColumnFieldChoice = field\n\t\t\t/**\n\t\t\t * @event board-column-field-change The board's column switch picked another field. Payload: the field name.\n\t\t\t */\n\t\t\tthis.$emit('board-column-field-change', field)\n\t\t},\n\n\t\t/**\n\t\t * The narrowing select changed: it sets the page filter on its field,\n\t\t * so the cards narrow with the columns and the active filter shows.\n\t\t *\n\t\t * @param {string} value The parent id, '' for all.\n\t\t * @return {void}\n\t\t */\n\t\tonBoardNarrowChange(value) {\n\t\t\tthis.onFilterEvent({ key: this.boardNarrow.field, values: value === '' ? [] : [value] })\n\t\t},\n\n\t\t/**\n\t\t * A paged board's \"Show N more\": ask for the next page.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-kanban-parity/specs/board-view/spec.md#requirement-a-long-column-is-cut-with-a-show-more-button\n\t\t */\n\t\tonBoardLoadMore() {\n\t\t\tif (this.boardLoadsAll) {\n\t\t\t\tthis.list.loadMore()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst page = Number(this.pagination?.page || 1)\n\t\t\tif (page < Number(this.pagination?.pages || 1)) {\n\t\t\t\tthis.onPageEvent(page + 1)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {number} page Requested page from CnPagination.\n\t\t * @return {void}\n\t\t */\n\t\tonPageEvent(page) {\n\t\t\tif (this.sortSourceShown) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, page: Number(page) || 1 }\n\t\t\t\tthis.$emit('page-changed', page)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onPageChange === 'function') {\n\t\t\t\tthis.list.onPageChange(page)\n\t\t\t}\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {\n\t\t\t\tthis.namedPaging = { ...this.namedPaging, page }\n\t\t\t}\n\t\t\tthis.$emit('page-changed', page)\n\t\t},\n\n\t\t/**\n\t\t * Page-size pick from CnPagination. In self-fetch mode the list refetches\n\t\t * page 1 at the new size — the event alone left the select changing and\n\t\t * the table not, since a manifest page has no host listening.\n\t\t *\n\t\t * @param {number} size Requested page size.\n\t\t * @return {void}\n\t\t */\n\t\tonPageSizeEvent(size) {\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onPageSizeChange === 'function') {\n\t\t\t\tthis.list.onPageSizeChange(size)\n\t\t\t}\n\t\t\tif (this.isNamedSource && this.namedSource && this.namedSource.pages === true) {\n\t\t\t\tthis.namedPaging = { page: 1, limit: size }\n\t\t\t}\n\t\t\tthis.$emit('page-size-changed', size)\n\t\t},\n\n\t\t/**\n\t\t * @param {{key: string, values: Array}} payload Facet-filter change from the sidebar.\n\t\t * @return {void}\n\t\t */\n\t\tonFilterEvent(payload) {\n\t\t\tif (this.isSelfFetchMode && typeof this.list.onFilterChange === 'function') {\n\t\t\t\tthis.list.onFilterChange(payload.key, payload.values)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\t// A named source keeps its own filter state: nothing else holds it,\n\t\t\t// and the `activeFilters` PROP only reaches pages with a consumer\n\t\t\t// component behind them. A manifest page has none, which is why\n\t\t\t// its sidebar used to render controls that narrowed nothing.\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tthis.setNamedFilter(payload.key, payload.values)\n\t\t\t}\n\t\t\tthis.$emit('filter-change', payload)\n\t\t},\n\n\t\t/**\n\t\t * The board toolbar's filter chip was removed: clear that one filter.\n\t\t *\n\t\t * @param {{key: string}} chip The chip from `activeFilterChips`.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-toolbar-sits-on-the-ground-in-two-rows\n\t\t */\n\t\tonRemoveActiveFilter(chip) {\n\t\t\tif (chip && chip.searchTerm === true) {\n\t\t\t\tthis.onSearchEvent('')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (chip && typeof chip.quickFilterIndex === 'number') {\n\t\t\t\tthis.deselectQuickFilterChip(chip.quickFilterIndex)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (chip && Array.isArray(chip.keys) && chip.keys.length > 0) {\n\t\t\t\tfor (const key of chip.keys) {\n\t\t\t\t\tthis.onFilterEvent({ key, values: [] })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (chip && typeof chip.key === 'string') {\n\t\t\t\tthis.onFilterEvent({ key: chip.key, values: [] })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The field an Active chip names: the page's `filterLabels` label, the\n\t\t * schema property's title, the sidebar field's title, else the key.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @return {string} The translated field name.\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-page-names-its-filters\n\t\t */\n\t\tactiveFilterFieldLabel(key) {\n\t\t\tconst named = this.filterLabels && this.filterLabels[key]\n\t\t\tif (named && typeof named.label === 'string' && named.label !== '') {\n\t\t\t\treturn this.cnTranslate(named.label)\n\t\t\t}\n\t\t\tconst prop = this.effectiveSchema?.properties?.[key]\n\t\t\tif (prop && typeof prop.title === 'string' && prop.title !== '') {\n\t\t\t\treturn this.cnTranslate(prop.title)\n\t\t\t}\n\t\t\tconst field = declaredFilterFields({ sidebar: this.sidebar, sourceConfig: this.sourceConfig })[key]\n\t\t\tif (field && typeof field.title === 'string' && field.title !== '') {\n\t\t\t\treturn this.cnTranslate(field.title)\n\t\t\t}\n\t\t\treturn this.cnTranslate(key)\n\t\t},\n\n\t\t/**\n\t\t * Filters as chips in the Active line's words, one per filter: \"Team:\n\t\t * Woo\". A filter with no value gives none. A range, as one `{from, to}`\n\t\t * value or as `key[gte]`/`key[lte]` keys, is one chip; `keys` lists the\n\t\t * filter keys it stands for. Several values of one filter read as a list\n\t\t * in the locale (\"A en B\").\n\t\t *\n\t\t * @param {object} filters The filters, by key.\n\t\t * @param {Function} [isFixed] `(key, value) => boolean`: a value that gets no chip.\n\t\t * @return {Array<{key: string, label: string, keys?: string[]}>}\n\t\t */\n\t\tfilterChipsOf(filters, isFixed = () => false) {\n\t\t\tconst chips = []\n\t\t\tconst ranges = new Map()\n\t\t\tfor (const [key, raw] of Object.entries(filters || {})) {\n\t\t\t\tconst bound = /^(.+)\\[(gte|gt|lte|lt)\\]$/.exec(key)\n\t\t\t\tif (bound) {\n\t\t\t\t\tconst value = Array.isArray(raw) ? raw[0] : raw\n\t\t\t\t\tif (value === null || value === undefined || value === '' || isFixed(key, value)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (!ranges.has(bound[1])) {\n\t\t\t\t\t\tranges.set(bound[1], { from: null, to: null, keys: [] })\n\t\t\t\t\t\tchips.push({ key: bound[1], rangeOf: bound[1] })\n\t\t\t\t\t}\n\t\t\t\t\tconst range = ranges.get(bound[1])\n\t\t\t\t\trange[bound[2].startsWith('g') ? 'from' : 'to'] = value\n\t\t\t\t\trange.keys.push(key)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst ends = rangeEnds(raw)\n\t\t\t\tif (ends) {\n\t\t\t\t\tif (isFixed(key, raw)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tchips.push({ key, label: `${this.activeFilterFieldLabel(key)}: ${this.activeFilterRangeText(ends.from, ends.to, key)}` })\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (raw && typeof raw === 'object' && !Array.isArray(raw)) {\n\t\t\t\t\tconst text = this.activeFilterOperatorText(key, raw)\n\t\t\t\t\tif (text !== '' && !isFixed(key, raw)) {\n\t\t\t\t\t\tchips.push({ key, label: `${this.activeFilterFieldLabel(key)}: ${text}` })\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst values = (Array.isArray(raw) ? raw : [raw])\n\t\t\t\t\t.filter((value) => value !== null && value !== undefined && value !== '')\n\t\t\t\t\t.filter((value) => !isFixed(key, value))\n\t\t\t\t\t.map((value) => this.activeFilterValueLabel(key, value))\n\t\t\t\tif (values.length === 0) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tchips.push({ key, label: `${this.activeFilterFieldLabel(key)}: ${listText(values, getCanonicalLocale() || undefined)}` })\n\t\t\t}\n\t\t\treturn chips.map((chip) => {\n\t\t\t\tif (!chip.rangeOf) {\n\t\t\t\t\treturn chip\n\t\t\t\t}\n\t\t\t\tconst range = ranges.get(chip.rangeOf)\n\t\t\t\treturn { key: chip.key, keys: range.keys, label: `${this.activeFilterFieldLabel(chip.rangeOf)}: ${this.activeFilterRangeText(range.from, range.to, chip.rangeOf)}` }\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * What a saved view filters on, in the Active line's words, for the\n\t\t * line under its name in the side panel: its search term, then each\n\t\t * filter (\"Search term: Lindelaan, Status: Open\"). A filter the page's\n\t\t * `filterLabels` marks `hidden` (a working-list rule every view\n\t\t * carries) is left out. '' when it filters on nothing else.\n\t\t *\n\t\t * @param {object} view The saved view.\n\t\t * @return {string}\n\t\t */\n\t\tviewFilterSummary(view) {\n\t\t\tconst query = (view && view.query) || {}\n\t\t\tconst filters = query.filters || (view && (view.filters || view.filter)) || {}\n\t\t\tconst parts = []\n\t\t\tconst term = typeof query.search === 'string' ? query.search.trim() : ''\n\t\t\tif (term !== '') {\n\t\t\t\tparts.push(t('nextcloud-vue', 'Search term: {term}', { term }))\n\t\t\t}\n\t\t\tconst hidden = (key) => Boolean(this.filterLabels && this.filterLabels[key] && this.filterLabels[key].hidden === true)\n\t\t\tfor (const chip of this.filterChipsOf(filters)) {\n\t\t\t\tif (!hidden(chip.key)) {\n\t\t\t\t\tparts.push(chip.label)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parts.join(', ')\n\t\t},\n\n\t\t/**\n\t\t * The text of a filter whose value is an operator object that is not a\n\t\t * range: a test for no value reads \"not set\" or \"set\", any other\n\t\t * operator its operands, named as a value would be.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {object} value The operator object (`{ isnull: true }`, `{ in: [...] }`).\n\t\t * @return {string} The text, or '' when it names nothing.\n\t\t */\n\t\tactiveFilterOperatorText(key, value) {\n\t\t\tif (Object.hasOwn(value, 'isnull')) {\n\t\t\t\tconst empty = value.isnull === true || value.isnull === 'true'\n\t\t\t\treturn empty ? t('nextcloud-vue', 'not set') : t('nextcloud-vue', 'set')\n\t\t\t}\n\t\t\tconst operands = Object.values(value)\n\t\t\t\t.flatMap((operand) => (Array.isArray(operand) ? operand : [operand]))\n\t\t\t\t.filter((operand) => operand !== null && operand !== undefined && operand !== '' && typeof operand !== 'object')\n\t\t\t\t.map((operand) => this.activeFilterValueLabel(key, operand))\n\t\t\treturn listText(operands, getCanonicalLocale() || undefined)\n\t\t},\n\n\t\t/**\n\t\t * The text of a range chip: in words for a range from today when the\n\t\t * page's `filterLabels` entry sets `relative`, else its date ends in\n\t\t * the person's locale.\n\t\t *\n\t\t * @param {unknown} from The lower end, or null.\n\t\t * @param {unknown} to The upper end, or null.\n\t\t * @param {string} key The filter key the range is on.\n\t\t * @return {string} The text.\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-range-is-one-chip\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-range-from-today-is-named-in-words\n\t\t */\n\t\tactiveFilterRangeText(from, to, key) {\n\t\t\tconst named = this.filterLabels && this.filterLabels[key]\n\t\t\tif (named && named.relative === true) {\n\t\t\t\tconst words = relativeRangeText(from, to, {\n\t\t\t\t\ttranslate: (text) => t('nextcloud-vue', text),\n\t\t\t\t\ttranslatePlural: (one, many, count) => n('nextcloud-vue', one, many, count),\n\t\t\t\t})\n\t\t\t\tif (words !== null) {\n\t\t\t\t\treturn words\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn rangeChipText(from, to, {\n\t\t\t\ttranslate: (text, vars) => t('nextcloud-vue', text, vars),\n\t\t\t\tlocale: getCanonicalLocale() || undefined,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Undo a quick filter from the Active line. With several tabs selectable\n\t\t * the tab leaves the selection; with one, the page goes back to its\n\t\t * default tab when that tab names no active filter itself, and else to no\n\t\t * tab at all, so the chip does not come straight back.\n\t\t *\n\t\t * @param {number} index The tab index the chip stands for.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-a-quick-filter-with-an-active-label-joins-the-active-line\n\t\t */\n\t\tdeselectQuickFilterChip(index) {\n\t\t\tif (this.quickFilterMultiple) {\n\t\t\t\tthis.onQuickFilterMultiChange((this.selectedQuickFilterIndices || []).filter((i) => i !== index))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.activeQuickFilterIndex !== index) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst tabs = this.tabStripEntries || []\n\t\t\tlet fallback = tabs.findIndex((tab) => tab && tab.default === true)\n\t\t\tif (fallback < 0 && tabs.length > 0) {\n\t\t\t\tfallback = 0\n\t\t\t}\n\t\t\tconst fallbackNamed = fallback >= 0 && typeof tabs[fallback].activeLabel === 'string' && tabs[fallback].activeLabel !== ''\n\t\t\tthis.onQuickFilterChange(fallback >= 0 && fallback !== index && !fallbackNamed ? fallback : null)\n\t\t},\n\n\t\t/**\n\t\t * The text an Active chip shows for one filter value: the page's\n\t\t * `filterLabels` value, the referenced object's label, the facet\n\t\t * bucket's label, the schema's `oneOf` title, a group's display name,\n\t\t * the sidebar field's `enumLabels`, else the value itself.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @param {unknown} value One value of that filter.\n\t\t * @return {string} The label.\n\t\t * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-an-active-chip-names-the-value-not-its-id\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-page-names-its-filters\n\t\t */\n\t\t/**\n\t\t * Whether a filter holds Nextcloud group ids: its column draws the\n\t\t * group cell, or its schema property marks a group.\n\t\t *\n\t\t * @param {string} key The filter key.\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/index-filter-labels/specs/active-filter-line-board-look/spec.md#requirement-a-group-filter-is-named-by-the-groups-display-name\n\t\t */\n\t\tisGroupFilter(key) {\n\t\t\tconst column = (Array.isArray(this.columns) ? this.columns : []).find((c) => c && typeof c === 'object' && c.key === key)\n\t\t\tif (column && column.widget === 'group') {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn isGroupProp(this.effectiveSchema?.properties?.[key])\n\t\t},\n\n\t\tactiveFilterValueLabel(key, value) {\n\t\t\tconst id = String(value)\n\t\t\tconst named = this.filterLabels && this.filterLabels[key] && this.filterLabels[key].values\n\t\t\tif (named && typeof named[id] === 'string' && named[id] !== '') {\n\t\t\t\treturn this.cnTranslate(named[id])\n\t\t\t}\n\t\t\tconst refs = this.refLabels[key]\n\t\t\tif (refs && typeof refs[id] === 'string' && refs[id] !== '') {\n\t\t\t\treturn refs[id]\n\t\t\t}\n\t\t\tconst facet = this.effectiveFacetData && this.effectiveFacetData[key]\n\t\t\tconst bucket = facet && Array.isArray(facet.values)\n\t\t\t\t? facet.values.find((fv) => fv && typeof fv === 'object' && String(fv.value) === id)\n\t\t\t\t: null\n\t\t\tif (bucket && typeof bucket.label === 'string' && bucket.label !== '') {\n\t\t\t\treturn this.cnTranslate(bucket.label)\n\t\t\t}\n\t\t\tconst prop = this.effectiveSchema?.properties?.[key]\n\t\t\tif (prop && prop.referenceType === 'nextcloud-group') {\n\t\t\t\tconst name = groupDisplayName(id)\n\t\t\t\tif (name === null) {\n\t\t\t\t\tloadGroupDisplayName(id)\n\t\t\t\t}\n\t\t\t\treturn name || id\n\t\t\t}\n\t\t\tconst options = prop && Array.isArray(prop.oneOf) ? prop.oneOf : []\n\t\t\tconst option = options.find((o) => o && String(o.const) === id && typeof o.title === 'string')\n\t\t\tif (option) {\n\t\t\t\treturn this.cnTranslate(option.title)\n\t\t\t}\n\t\t\tif (this.isGroupFilter(key)) {\n\t\t\t\tconst name = groupDisplayName(id)\n\t\t\t\tif (name) {\n\t\t\t\t\treturn name\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst field = declaredFilterFields({ sidebar: this.sidebar, sourceConfig: this.sourceConfig })[key]\n\t\t\tconst enumLabel = field && field.enumLabels && field.enumLabels[id]\n\t\t\tif (typeof enumLabel === 'string' && enumLabel !== '') {\n\t\t\t\treturn this.cnTranslate(enumLabel)\n\t\t\t}\n\t\t\treturn id\n\t\t},\n\n\t\t/**\n\t\t * A header filter was applied or cleared. One column can own several\n\t\t * query parameters (a range is `key[gte]` and `key[lte]`), so they are\n\t\t * applied together: one fetch, one route update.\n\t\t *\n\t\t * @param {{key: string, params: object}} payload From CnDataTable's `column-filter`.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/table-header-sort-and-filter/specs/cn-data-table/spec.md#requirement-a-header-filter-speaks-the-sidebars-query-language\n\t\t */\n\t\tonColumnFilterEvent(payload) {\n\t\t\tconst params = (payload && payload.params) || {}\n\t\t\tif (this.headerFilterSchema) {\n\t\t\t\t// The header's range is the sidebar's window: one `{ from, to }` value.\n\t\t\t\tfor (const [key, value] of Object.entries(boundsAsRanges(params))) {\n\t\t\t\t\tthis.setNamedFilter(key, value)\n\t\t\t\t\tthis.$emit('filter-change', { key, values: value })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst entries = Object.entries(params).map(([key, values]) => [key, Array.isArray(values) ? values : []])\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\tconst next = { ...this.list.activeFilters.value }\n\t\t\t\tfor (const [key, values] of entries) {\n\t\t\t\t\tif (values.length === 0) {\n\t\t\t\t\t\tdelete next[key]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnext[key] = values\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.list.activeFilters.value = next\n\t\t\t\tthis.list.refresh(1)\n\t\t\t\tthis.persistViewStateToRoute(this.currentViewState())\n\t\t\t}\n\t\t\tfor (const [key, values] of entries) {\n\t\t\t\tif (this.isNamedSource) {\n\t\t\t\t\tthis.setNamedFilter(key, values)\n\t\t\t\t}\n\t\t\t\tthis.$emit('filter-change', { key, values })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * A picker of the endpoint's facets changed: filter on the value, or\n\t\t * take the filter off for the All choice.\n\t\t *\n\t\t * @param {string} field The facet's field.\n\t\t * @param {string} value The chosen value, '' for All.\n\t\t * @return {void}\n\t\t */\n\t\tonSourceFacetChange(field, value) {\n\t\t\tthis.setNamedFilter(field, value === '' ? [] : [value])\n\t\t},\n\n\t\t/**\n\t\t * Record one sidebar choice on a named-source page and mirror it into\n\t\t * the URL.\n\t\t *\n\t\t * The ref is REPLACED rather than mutated in place so the watcher in\n\t\t * `useNamedSource` fires on the first change too, and the reload it\n\t\t * triggers is the only place the new query is built.\n\t\t *\n\t\t * @param {string} key The sidebar field key.\n\t\t * @param {Array|object|null} values The chosen values, or a `{ from, to }` range.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tsetNamedFilter(key, values) {\n\t\t\tconst next = { ...(this.namedActiveFilters || {}) }\n\t\t\tconst asQuery = namedFilterToQuery(values)\n\t\t\tif (asQuery === '') {\n\t\t\t\tdelete next[key]\n\t\t\t} else {\n\t\t\t\tnext[key] = values\n\t\t\t}\n\t\t\tthis.namedActiveFilters = next\n\t\t\tthis.persistNamedFiltersToRoute(next)\n\t\t},\n\n\t\t/**\n\t\t * Write the active named-source filters into `$route.query`.\n\t\t *\n\t\t * So a filtered view can be SHARED, which is half of what a search\n\t\t * field is for: the colleague who opens the link sees the same list,\n\t\t * because `namedFiltersFromRoute` reads it back on mount.\n\t\t *\n\t\t * `replace`, not `push`: narrowing a list is not a place in the\n\t\t * history, and a back button that steps through six filter choices\n\t\t * never reaches the page before them. A rejected navigation (the same\n\t\t * path and query) is swallowed, matching `persistSortToRoute`.\n\t\t *\n\t\t * @param {object} filters The active `{ key: values }` map.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tpersistNamedFiltersToRoute(filters) {\n\t\t\tif (!this.$router || !this.$route) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst properties = declaredFilterFields(this)\n\t\t\tconst query = { ...this.$route.query }\n\t\t\tfor (const key of Object.keys(properties)) {\n\t\t\t\tif (properties[key] && properties[key].facetable === true) {\n\t\t\t\t\tdelete query[key]\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [key, values] of Object.entries(filters || {})) {\n\t\t\t\tconst value = namedFilterToQuery(values)\n\t\t\t\tif (value !== '') {\n\t\t\t\t\tquery[key] = value\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$router.replace({ query }).catch(() => {})\n\t\t},\n\n\t\t/**\n\t\t * Folder selection from the opt-in folder sidebar: filter the list by the\n\t\t * config's `filterField` (or `field`); a null id clears it.\n\t\t *\n\t\t * @param {(string|number|null)} folderId The selected folder id (null = All).\n\t\t * @return {void}\n\t\t */\n\t\t/**\n\t\t * The actions one row offers: this page's declared actions narrowed to\n\t\t * the ones the server says this caller may run on that record. The\n\t\t * order, label and icon stay the page's.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<object>} The actions to render for that row.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\t/**\n\t\t * Move the keyboard's focus one row, staying inside the list.\n\t\t *\n\t\t * @param {number} delta 1 for the next row, -1 for the previous one.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tmoveFocusedRow(delta) {\n\t\t\tconst rows = this.displayObjects || []\n\t\t\tif (rows.length === 0) {\n\t\t\t\tthis.focusedRowIndex = -1\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst next = this.focusedRowIndex + delta\n\t\t\tthis.focusedRowIndex = Math.min(Math.max(next, 0), rows.length - 1)\n\t\t},\n\n\t\t/**\n\t\t * Select or deselect the focused row.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\ttoggleFocusedRowSelection() {\n\t\t\tconst row = this.focusedRow\n\t\t\tif (!row) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst id = row[this.rowKey]\n\t\t\tconst selected = this.internalSelectedIds.includes(id)\n\t\t\tthis.onSelect(selected\n\t\t\t\t? this.internalSelectedIds.filter((other) => other !== id)\n\t\t\t\t: [...this.internalSelectedIds, id])\n\t\t},\n\n\t\t/**\n\t\t * The first action a row's menu shows and enables: the page's order, narrowed by what the server allows, by `visible` / `visibleWhen`, and by `disabled`.\n\t\t * The keyboard therefore never runs what the menu hides or greys out.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {(object|null)} The action, or null.\n\t\t * @spec openspec/changes/row-action-builtin-placement/specs/index-page/spec.md\n\t\t */\n\t\tprimaryRowActionFor(row) {\n\t\t\treturn this.rowActionsFor(row).find((action) => isRowActionVisible(action, row)\n\t\t\t\t&& !(typeof action.disabled === 'function' ? action.disabled(row) : action.disabled)) || null\n\t\t},\n\n\t\t/**\n\t\t * Run the focused row's primary action (see `primaryRowActionFor`).\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\trunPrimaryRowAction() {\n\t\t\tconst row = this.focusedRow\n\t\t\tif (!row) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst first = this.primaryRowActionFor(row)\n\t\t\tif (!first) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (typeof first.handler === 'function') {\n\t\t\t\tfirst.handler(row)\n\t\t\t}\n\t\t\tthis.onRowAction(rowActionPayload(first, row))\n\t\t},\n\n\t\t/**\n\t\t * Handle a key pressed on the list.\n\t\t *\n\t\t * @param {KeyboardEvent} event The event.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tonListKeydown(event) {\n\t\t\tif (!this.listShortcuts) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst shortcut = shortcutFor(event)\n\t\t\tif (!shortcut) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst run = this.listShortcutHandlers[shortcut.id]\n\t\t\tif (typeof run !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tevent.preventDefault()\n\t\t\trun()\n\t\t},\n\n\t\t/**\n\t\t * Open the quick edit on one row.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\topenQuickEdit(row) {\n\t\t\tif (this.quickEditFields.length === 0 || !row) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.quickEditServerRow = null\n\t\t\tthis.quickEditRow = row\n\t\t},\n\n\t\t/**\n\t\t * Write a quick edit's patch onto its row in the list.\n\t\t *\n\t\t * The patch goes through the same row-patch map a record saved in the\n\t\t * split pane goes through, so the list keeps its scroll, its selection\n\t\t * and its page for the same reason it already did: nothing about the\n\t\t * list changed, one row's fields did.\n\t\t *\n\t\t * @param {object} payload The dialog's payload.\n\t\t * @param {(string|number)} payload.id The row id.\n\t\t * @param {object} payload.patch The fields to write.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tonQuickEditSave({ id, patch }) {\n\t\t\tif (id === undefined || id === null || !patch || Object.keys(patch).length === 0) {\n\t\t\t\tthis.quickEditRow = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst current = this.splitRowPatches[id] || {}\n\t\t\tthis.splitRowPatches = { ...this.splitRowPatches, [id]: { ...current, ...patch } }\n\t\t\tthis.quickEditRow = null\n\t\t\t/**\n\t\t\t * @event quick-edit-save Emitted with the fields a quick edit wrote onto a row.\n\t\t\t * @type {{id: (string|number), patch: object}}\n\t\t\t */\n\t\t\tthis.$emit('quick-edit-save', { id, patch })\n\t\t},\n\n\t\t/**\n\t\t * The buttons an `actions` column shows on a row: the row actions its\n\t\t * `widgetProps.actions` names (by id, else by label), in that order,\n\t\t * that are visible for the row.\n\t\t *\n\t\t * @param {object} col The column.\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{key: string, label: string, variant: string, disabled: boolean}>}\n\t\t * @spec openspec/changes/table-actions-column/specs/index-page/spec.md#requirement-a-column-can-show-row-actions-as-buttons\n\t\t */\n\t\tactionColumnItems(col, row) {\n\t\t\tconst wanted = Array.isArray(col.widgetProps && col.widgetProps.actions) ? col.widgetProps.actions : []\n\t\t\tconst available = this.rowActionsFor(row)\n\t\t\treturn wanted\n\t\t\t\t.map((ref) => available.find((action) => action.id === ref) || available.find((action) => action.label === ref))\n\t\t\t\t.filter((action) => action && isRowActionVisible(action, row))\n\t\t\t\t.map((action, index) => ({\n\t\t\t\t\tkey: action.id || action.label,\n\t\t\t\t\tlabel: this.cnTranslate(action.label),\n\t\t\t\t\tvariant: action.variant || (index === 0 ? 'secondary' : 'tertiary'),\n\t\t\t\t\tdisabled: typeof action.disabled === 'function' ? !!action.disabled(row) : action.disabled === true,\n\t\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * Run one `actions` column button: its handler, then the same `action`\n\t\t * event a row menu entry emits.\n\t\t *\n\t\t * @param {string} key The action's id, else its label.\n\t\t * @param {object} row The row.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/table-actions-column/specs/index-page/spec.md#requirement-a-column-can-show-row-actions-as-buttons\n\t\t */\n\t\trunColumnAction(key, row) {\n\t\t\tconst action = this.rowActionsFor(row).find((entry) => (entry.id || entry.label) === key)\n\t\t\tif (!action) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (typeof action.handler === 'function') {\n\t\t\t\taction.handler(row)\n\t\t\t}\n\t\t\tthis.onRowAction(rowActionPayload(action, row))\n\t\t},\n\n\t\t/**\n\t\t * Take the server's version of a row after a conflict. Nothing of this\n\t\t * person's edit is written, and the row in the list is refreshed to\n\t\t * what the server holds, so the screen and the record agree.\n\t\t *\n\t\t * @param {object} saved The record as the server holds it.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\tonQuickEditKeepTheirs(saved) {\n\t\t\tconst id = saved && saved[this.rowKey]\n\t\t\tif (id !== undefined && id !== null) {\n\t\t\t\tthis.splitRowPatches = { ...this.splitRowPatches, [id]: saved }\n\t\t\t}\n\t\t\tthis.quickEditRow = null\n\t\t\tthis.quickEditServerRow = null\n\t\t},\n\n\t\trowActionsFor(row) {\n\t\t\treturn withoutViewWhenRowOpensDetail(\n\t\t\t\tavailableRowActions(this.mergedActions, row, this.rowActionField),\n\t\t\t\tthis.rowOpensDetailFor(row),\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * The row menu's actions: the row's actions less those an `actions`\n\t\t * column already shows as buttons.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/column-actions-leave-the-row-menu/specs/column-actions-leave-the-row-menu/spec.md\n\t\t */\n\t\trowMenuActionsFor(row) {\n\t\t\tconst refs = this.columnActionRefs\n\t\t\tif (refs.size === 0) {\n\t\t\t\treturn this.rowActionsFor(row)\n\t\t\t}\n\t\t\treturn this.rowActionsFor(row).filter((action) => !refs.has(String(action.id || action.label)) && !refs.has(String(action.label)))\n\t\t},\n\n\t\t/**\n\t\t * The row's own name, for the row menu button's accessible name\n\t\t * (\"Actions for <title>\"): the `nameFormatter`, else the\n\t\t * `massActionNameField`, else the row's title or name, the record's\n\t\t * resolved display name, the title column's value, or the schema's\n\t\t * title property. The first plain text wins.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} The name, or ''.\n\t\t * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-table-is-a-white-card-with-one-row-menu\n\t\t */\n\t\trowTitleFor(row) {\n\t\t\tif (!row) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst named = typeof this.nameFormatter === 'function' ? this.nameFormatter(row) : row[this.massActionNameField]\n\t\t\tconst titleKey = this.renderedColumns?.[0]?.key\n\t\t\tconst nameField = this.effectiveSchema?.configuration?.objectNameField\n\t\t\tconst candidates = [\n\t\t\t\tnamed,\n\t\t\t\trow.title,\n\t\t\t\trow.name,\n\t\t\t\trow['@self']?.name,\n\t\t\t\ttitleKey ? getDotted(row, titleKey) : undefined,\n\t\t\t\tnameField ? getDotted(row, nameField) : undefined,\n\t\t\t]\n\t\t\tconst value = candidates.find((candidate) => (typeof candidate === 'string' && candidate.trim() !== '') || typeof candidate === 'number')\n\t\t\treturn value === undefined ? '' : String(value)\n\t\t},\n\n\t\t/**\n\t\t * Whether a click on this row navigates to the record's detail page.\n\t\t * When it does, the row menu offers Edit and not View (viewing is what\n\t\t * the click already does). A `viewTo` that answers null for the row\n\t\t * means this record has no detail page, so it keeps View.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {boolean} True when the row opens a detail page.\n\t\t * @spec openspec/changes/row-menu-edits-when-the-row-opens-the-detail/specs/index-page/spec.md\n\t\t */\n\t\trowOpensDetailFor(row) {\n\t\t\tif (!this.rowClickOpens) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (typeof this.viewTo === 'function') {\n\t\t\t\treturn Boolean(row) && this.viewTo(row) !== null && this.viewTo(row) !== undefined\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Why the server refused an action on a row, when it said. Available on\n\t\t * request rather than rendered, because a menu that lists what you may\n\t\t * not do is a menu that takes longer to read.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {object} action The declared action.\n\t\t * @return {string} The refusal reason, or ''.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\trowActionRefusal(row, action) {\n\t\t\treturn refusalReasonFor(action, row, this.rowActionField)\n\t\t},\n\n\t\t/**\n\t\t * The actions the server allowed on a row that this page does not\n\t\t * declare. Nothing renders them. They are here so a page can see what\n\t\t * it is ignoring without the menu growing a button nobody wrote.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string[]} The undeclared action ids.\n\t\t * @spec openspec/changes/working-list-row-actions/specs/index-page/spec.md\n\t\t */\n\t\trowActionsNotDeclared(row) {\n\t\t\treturn undeclaredRowActions(this.mergedActions, row, this.rowActionField)\n\t\t},\n\n\t\tonFolderSelect(folderId) {\n\t\t\tthis.selectedFolderId = folderId\n\t\t\tconst key = (this.folderSidebar && (this.folderSidebar.filterField || this.folderSidebar.field)) || ''\n\t\t\tconst folder = this.activeScope\n\t\t\tconst target = (folder && typeof folder.schema === 'string' && folder.schema !== '')\n\t\t\t\t? { schema: folder.schema, register: (typeof folder.register === 'string' && folder.register !== '') ? folder.register : '' }\n\t\t\t\t: null\n\t\t\tconst previous = this.activeFolderSchema\n\t\t\tconst switched = (target ? `${target.register}|${target.schema}` : '') !== (previous ? `${previous.register}|${previous.schema}` : '')\n\t\t\tif (switched) {\n\t\t\t\t// A row or dialog from the old schema means nothing under the new one.\n\t\t\t\tthis.resetSelectionAndDialogs()\n\t\t\t}\n\t\t\tthis.activeFolderSchema = target\n\t\t\tif (target) {\n\t\t\t\t// The folder picks a schema, not a value of the page's own field; the\n\t\t\t\t// object-type change refetches, so only drop a leftover folder filter.\n\t\t\t\tif (key && this.list && this.list.activeFilters.value[key] !== undefined) {\n\t\t\t\t\tconst { [key]: _dropped, ...rest } = this.list.activeFilters.value\n\t\t\t\t\tthis.list.activeFilters.value = rest\n\t\t\t\t}\n\t\t\t} else if (key) {\n\t\t\t\tthis.onFilterEvent({ key, values: (folderId === null || folderId === undefined) ? [] : [folderId] })\n\t\t\t}\n\t\t\tthis.applyScopeSort()\n\t\t\t/**\n\t\t\t * @event folder-change Emitted when a folder is selected in the sidebar.\n\t\t\t * @type {(string|number|null)} The selected folder id (null = All).\n\t\t\t */\n\t\t\tthis.$emit('folder-change', folderId)\n\t\t},\n\n\t\t/**\n\t\t * Clear the row selection and close any form, delete or copy dialog.\n\t\t * Used when the loaded schema changes under them.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/cnindexpage-folder-schema/tasks.md#task-3\n\t\t */\n\t\tresetSelectionAndDialogs() {\n\t\t\tthis.onSelect([])\n\t\t\tthis.showSingleDeleteDialog = false\n\t\t\tthis.showSingleCopyDialog = false\n\t\t\tthis.showFormDialogVisible = false\n\t\t\tthis.actionTargetItem = null\n\t\t},\n\n\t\t/**\n\t\t * Put the active scope's `defaultSort` on the list and refetch with it.\n\t\t *\n\t\t * The scope's sort is applied through the list's own `sortKeys`, the\n\t\t * same state a header click writes, rather than through a second sort\n\t\t * path — so the fetch carries it and the header shows it as sorted.\n\t\t * A scope declaring no sort leaves whatever is active alone: that is a\n\t\t * scope with nothing to say about sorting, not a scope asking for the\n\t\t * sort to be cleared.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/index-columns-per-scope/specs/index-page/spec.md\n\t\t */\n\t\tapplyScopeSort() {\n\t\t\tconst sortKeys = this.activeScopeLayout.sortKeys\n\t\t\tif (!sortKeys.length || !this.isSelfFetchMode || !this.list) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.list.sortKeys) {\n\t\t\t\tthis.list.sortKeys.value = sortKeys.map((entry) => ({ ...entry }))\n\t\t\t}\n\t\t\tif (typeof this.list.refresh === 'function') {\n\t\t\t\tthis.list.refresh(1)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Load the Nextcloud groups for `folderSidebar.source: 'groups'`, each\n\t\t * with its member count. `folderSidebar.groups` (`[{ id, parent? }]`)\n\t\t * picks and orders them and nests a group under its `parent`;\n\t\t * `folderSidebar.parentsFrom` reads that list from records instead.\n\t\t * Without either every group shows, by name. A refused request lists none.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/index-groups-users-source/specs/index-page/spec.md#requirement-an-index-page-can-list-nextcloud-groups-and-their-members\n\t\t * @spec openspec/changes/group-parents-from-records/specs/index-page/spec.md#requirement-a-groups-pane-can-read-its-tree-from-records\n\t\t */\n\t\tasync loadFolderGroups() {\n\t\t\tconst cfg = this.folderSidebar\n\t\t\tif (!cfg || cfg.source !== 'groups') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { default: axios } = await import('@nextcloud/axios')\n\t\t\t\tconst groups = await fetchGroups(axios, { search: cfg.search || '', limit: cfg.limit || 200 })\n\t\t\t\tconst declared = Array.isArray(cfg.groups)\n\t\t\t\t\t? cfg.groups.filter((entry) => entry && entry.id)\n\t\t\t\t\t: await this.groupParentsFromRecords(cfg.parentsFrom)\n\t\t\t\tif (!declared) {\n\t\t\t\t\tthis.folderGroupList = [...groups].sort((a, b) => a.name.localeCompare(b.name))\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst byId = new Map(groups.map((group) => [group.id, group]))\n\t\t\t\tthis.folderGroupList = declared\n\t\t\t\t\t.filter((entry) => byId.has(String(entry.id)))\n\t\t\t\t\t.map((entry) => ({ ...byId.get(String(entry.id)), parentId: entry.parent ? String(entry.parent) : null, record: entry.record || null }))\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('[CnIndexPage] failed to load the Nextcloud groups', e)\n\t\t\t\tthis.folderGroupList = []\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The groups pane's tree read from records (`folderSidebar.parentsFrom`:\n\t\t * `{ register, schema, groupField?, parentField? }`): each record names a\n\t\t * group (`groupField`, default `group`) and the group above it\n\t\t * (`parentField`, default `parent`): a group id, or the id of another\n\t\t * record, read as that record's group. In the `groups` shape. Null without\n\t\t * the option, when the records cannot be read or when none names a\n\t\t * group, so the pane lists every group flat.\n\t\t *\n\t\t * @param {object|undefined} from The `parentsFrom` config.\n\t\t * @return {Promise<Array<{id: string, parent: string|null}>|null>} The entries, or null.\n\t\t * @spec openspec/changes/group-parents-from-records/specs/index-page/spec.md#requirement-a-groups-pane-can-read-its-tree-from-records\n\t\t */\n\t\tasync groupParentsFromRecords(from) {\n\t\t\tif (!from || !from.register || !from.schema) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst groupField = from.groupField || 'group'\n\t\t\tconst parentField = from.parentField || 'parent'\n\t\t\ttry {\n\t\t\t\tconst body = await cnFetchJson(\n\t\t\t\t\t`/apps/openregister/api/objects/${encodeURIComponent(from.register)}/${encodeURIComponent(from.schema)}`,\n\t\t\t\t\t{ query: { _limit: from.limit || 500 } },\n\t\t\t\t)\n\t\t\t\tconst records = (Array.isArray(body?.results) ? body.results : []).filter((record) => record && record[groupField])\n\t\t\t\tif (records.length === 0) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst groupOfRecord = new Map(records.map((record) => [String(record.id ?? record['@self']?.id ?? ''), String(record[groupField])]))\n\t\t\t\treturn records.map((record) => {\n\t\t\t\t\tconst parent = record[parentField] ? String(record[parentField]) : null\n\t\t\t\t\treturn { id: String(record[groupField]), parent: parent === null ? null : (groupOfRecord.get(parent) ?? parent), record }\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Load the folder list from an OpenRegister register/schema for a\n\t\t * `folderSidebar.source === 'register'` config. Maps each object to\n\t\t * `{ id: <idField|@self.uuid>, name: <nameField|title> }`.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadFolderRegister() {\n\t\t\tconst cfg = this.folderSidebar\n\t\t\tif (!cfg || cfg.source !== 'register' || !cfg.register || !cfg.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst [{ default: axios }, { generateUrl }] = await Promise.all([\n\t\t\t\t\timport('@nextcloud/axios'),\n\t\t\t\t\timport('@nextcloud/router'),\n\t\t\t\t])\n\t\t\t\tconst url = generateUrl('/apps/openregister/api/objects/{register}/{schema}', { register: cfg.register, schema: cfg.schema })\n\t\t\t\tconst res = await axios.get(url, { params: { _limit: cfg.limit || 200 } })\n\t\t\t\tconst body = (res && res.data && (res.data.results || res.data)) || []\n\t\t\t\t// A response that is not a list is an empty folder list, not a\n\t\t\t\t// crash: the pane then shows only \"All\" rather than logging a\n\t\t\t\t// TypeError that names this component for the server's shape.\n\t\t\t\tconst rows = Array.isArray(body) ? body : []\n\t\t\t\tconst idField = cfg.idField || '@self.uuid'\n\t\t\t\tconst nameField = cfg.nameField || 'title'\n\t\t\t\tconst layouts = {}\n\t\t\t\trows.forEach((row) => {\n\t\t\t\t\tconst id = this.getByPath(row, idField)\n\t\t\t\t\tconst carried = row && row['x-index']\n\t\t\t\t\tif (id !== null && id !== undefined && carried && typeof carried === 'object') {\n\t\t\t\t\t\tlayouts[String(id)] = carried\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.folderRowLayouts = layouts\n\t\t\t\tthis.folderRegisterList = rows\n\t\t\t\t\t.map((row) => ({ id: this.getByPath(row, idField), name: this.getByPath(row, nameField) || this.getByPath(row, idField) }))\n\t\t\t\t\t.filter((f) => f.id !== null && f.id !== undefined)\n\t\t\t\t\t.sort((a, b) => String(a.name).localeCompare(String(b.name)))\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('[CnIndexPage] failed to load folder register', e)\n\t\t\t\tthis.folderRegisterList = []\n\t\t\t\tthis.folderRowLayouts = {}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Whether a given value is currently an active facet filter for a field.\n\t\t *\n\t\t * @param {string} key The schema field key.\n\t\t * @param {string} val The enum value.\n\t\t * @return {boolean} True when the value is in the active filter set.\n\t\t */\n\t\tisFilterActive(key, val) {\n\t\t\tconst current = this.effectiveActiveFilters[key]\n\t\t\treturn Array.isArray(current) && current.includes(val)\n\t\t},\n\n\t\t/**\n\t\t * Toggle one enum value in a field's facet filter, then apply it through\n\t\t * the standard filter path (`onFilterEvent`).\n\t\t *\n\t\t * @param {string} key The schema field key.\n\t\t * @param {string} val The enum value to toggle.\n\t\t * @return {void}\n\t\t */\n\t\ttoggleFilter(key, val) {\n\t\t\tconst current = Array.isArray(this.effectiveActiveFilters[key]) ? this.effectiveActiveFilters[key] : []\n\t\t\tconst values = current.includes(val) ? current.filter((v) => v !== val) : [...current, val]\n\t\t\tthis.onFilterEvent({ key, values })\n\t\t},\n\n\t\t/**\n\t\t * Whether a governed column is currently visible. A null visible-column set\n\t\t * means \"all governed columns visible\" (the initial state).\n\t\t *\n\t\t * @param {string} key The column key.\n\t\t * @return {boolean} True when the column is shown in the table.\n\t\t */\n\t\tisColumnVisible(key) {\n\t\t\tconst visible = this.effectiveVisibleColumns\n\t\t\treturn Array.isArray(visible) ? visible.includes(key) : true\n\t\t},\n\n\t\t/**\n\t\t * Toggle a governed column on/off from the table-header column menu, then\n\t\t * apply it through the same path as the sidebar (`onColumnsEvent`).\n\t\t *\n\t\t * @param {string} key The column key to toggle.\n\t\t * @return {void}\n\t\t */\n\t\ttoggleColumn(key) {\n\t\t\tconst base = Array.isArray(this.effectiveVisibleColumns)\n\t\t\t\t? this.effectiveVisibleColumns\n\t\t\t\t: this.governedColumns.map((c) => c.key)\n\t\t\tconst next = base.includes(key) ? base.filter((k) => k !== key) : [...base, key]\n\t\t\tthis.onColumnsEvent(next)\n\t\t},\n\n\t\t/**\n\t\t * @param {Array} columns Visible-column change from the sidebar.\n\t\t * @return {void}\n\t\t */\n\t\tonColumnsEvent(columns) {\n\t\t\tif (this.isSelfFetchMode && this.list.visibleColumns) {\n\t\t\t\tthis.list.visibleColumns.value = columns\n\t\t\t}\n\t\t\tthis.keepPersonalColumns(columns, this.pinnedColumnCount)\n\t\t\tthis.$emit('columns-change', columns)\n\t\t},\n\n\t\t/**\n\t\t * The preference key this list's column layout is held under. The list id\n\t\t * is the manual-order id, else the page's route name (the manifest page id),\n\t\t * else the object type or schema.\n\t\t *\n\t\t * @return {string} The key, `columns.<list id>`.\n\t\t */\n\t\tpersonalColumnsPreferenceKey() {\n\t\t\tconst route = this.$route && typeof this.$route.name === 'string' ? this.$route.name : ''\n\t\t\treturn personalColumnsKey(this.manualOrderId || route || this.objectType || this.schema || 'default')\n\t\t},\n\n\t\t/**\n\t\t * Keep the person's column layout: held while a view's columns are applied\n\t\t * (the view is a lens, not a preference), otherwise stored in their preferences.\n\t\t *\n\t\t * @param {string[]} columns The visible columns in their order.\n\t\t * @param {number} pinned How many leading columns are pinned.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/index-column-order-and-pinning/tasks.md#task-4\n\t\t */\n\t\tkeepPersonalColumns(columns, pinned) {\n\t\t\tif (!this.personalColumns || !Array.isArray(columns)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (Array.isArray(this.appliedViewColumns)) {\n\t\t\t\tthis.appliedViewColumns = columns\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.personalLayout = { columns, pinned }\n\t\t\tthis.persistPersonalColumns()\n\t\t},\n\n\t\t/**\n\t\t * The person moved a column in the sidebar's Order and pin list.\n\t\t *\n\t\t * @param {string[]} columns The visible columns in their new order.\n\t\t * @return {void}\n\t\t */\n\t\tonColumnsReorder(columns) {\n\t\t\tthis.onColumnsEvent(columns)\n\t\t},\n\n\t\t/**\n\t\t * The person pinned or unpinned a column.\n\t\t *\n\t\t * @param {number} count How many leading columns are pinned now.\n\t\t * @return {void}\n\t\t */\n\t\tonPinChange(count) {\n\t\t\tif (!this.personalColumns || Array.isArray(this.appliedViewColumns)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst columns = this.personalLayout ? this.personalLayout.columns : (Array.isArray(this.effectiveVisibleColumns) ? this.effectiveVisibleColumns : this.tableColumns.map((c) => (typeof c === 'string' ? c : c.key)))\n\t\t\tthis.keepPersonalColumns(columns, count)\n\t\t},\n\n\t\t/**\n\t\t * Reset columns: forget the person's layout and show the page's own columns.\n\t\t *\n\t\t * @return {void}\n\t\t */\n\t\tonColumnsReset() {\n\t\t\tthis.personalLayout = null\n\t\t\tthis.appliedViewColumns = null\n\t\t\tif (this.isSelfFetchMode && this.list.visibleColumns) {\n\t\t\t\tthis.list.visibleColumns.value = null\n\t\t\t}\n\t\t\tconst write = this.cnUserPreferences?.write\n\t\t\tif (this.personalColumns && typeof write === 'function') {\n\t\t\t\tPromise.resolve(write(this.personalColumnsPreferenceKey(), null)).catch(() => {})\n\t\t\t}\n\t\t\tthis.$emit('columns-change', null)\n\t\t},\n\n\t\t/**\n\t\t * Write the layout to the person's preferences. A failed write leaves the\n\t\t * layout in place for this session and says nothing.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync persistPersonalColumns() {\n\t\t\tconst write = this.cnUserPreferences?.write\n\t\t\tif (typeof write !== 'function' || !this.personalLayout) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait write(this.personalColumnsPreferenceKey(), {\n\t\t\t\t\tcolumns: this.personalLayout.columns,\n\t\t\t\t\tpinned: this.personalLayout.pinned,\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\t// Not stored; the layout still stands until the page reloads.\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read the person's column layout for this list on mount.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadPersonalColumns() {\n\t\t\tconst read = this.cnUserPreferences?.read\n\t\t\tif (!this.personalColumns || typeof read !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst stored = await read(this.personalColumnsPreferenceKey(), null)\n\t\t\t\tif (stored && Array.isArray(stored.columns) && !this.personalLayout) {\n\t\t\t\t\tthis.personalLayout = { columns: stored.columns.map(String), pinned: Number(stored.pinned) || 0 }\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// An unreadable preference leaves the page's own columns.\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Refresh the list when `dispatchObjectsChanged` names this page's\n\t\t * register and schema, by slug or id. A part missing on either side matches.\n\t\t *\n\t\t * @param {CustomEvent} event The objects-changed event.\n\t\t * @return {void}\n\t\t */\n\t\tonObjectsChanged(event) {\n\t\t\t// A collection list can hold rows of any pair, so any change may show in it.\n\t\t\tif (this.isSelfFetchMode && this.collectionUrl) {\n\t\t\t\tthis.onRefreshEvent()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst detail = (event && event.detail) || {}\n\t\t\tconst schema = this.effectiveSchema\n\t\t\tconst schemaIds = [this.schema, schema && schema.id, schema && schema.slug]\n\t\t\t\t.filter((v) => v !== undefined && v !== null && v !== '' && typeof v !== 'object')\n\t\t\t\t.map(String)\n\t\t\tif (detail.register && this.register && detail.register !== String(this.register)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (detail.schema && schemaIds.length > 0 && !schemaIds.includes(detail.schema)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onRefreshEvent()\n\t\t},\n\n\t\t/**\n\t\t * The object store live updates come through.\n\t\t *\n\t\t * @return {object} The store.\n\t\t */\n\t\tliveStore() {\n\t\t\treturn (this.list && this.list.objectStore) || useObjectStore()\n\t\t},\n\n\t\t/**\n\t\t * Subscribe to the `live` object types and read the list again after a change.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/pl4-index-live/specs/pl4-index-live/spec.md#requirement-an-index-page-follows-live-changes\n\t\t */\n\t\tasync startLive() {\n\t\t\tconst types = Array.isArray(this.live) ? this.live.filter((type) => typeof type === 'string' && type !== '') : []\n\t\t\tconst store = types.length > 0 ? this.liveStore() : null\n\t\t\tif (!store || typeof store.subscribe !== 'function') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst handles = []\n\t\t\tfor (const type of types) {\n\t\t\t\ttry {\n\t\t\t\t\thandles.push(await store.subscribe(type))\n\t\t\t\t} catch {\n\t\t\t\t\t// A type the store cannot follow; the list still reads on refresh.\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.liveHandles = handles\n\t\t\tthis.liveUnwatch = this.$watch(() => store.liveLastEventAt, () => this.onLiveEvent())\n\t\t},\n\n\t\t/**\n\t\t * Read the list again once changes stop arriving for half a second.\n\t\t */\n\t\tonLiveEvent() {\n\t\t\tclearTimeout(this.liveTimer)\n\t\t\tthis.liveTimer = setTimeout(() => this.onRefreshEvent(), 500)\n\t\t},\n\n\t\t/**\n\t\t * Let go of the live subscriptions.\n\t\t */\n\t\tstopLive() {\n\t\t\tclearTimeout(this.liveTimer)\n\t\t\tif (typeof this.liveUnwatch === 'function') {\n\t\t\t\tthis.liveUnwatch()\n\t\t\t}\n\t\t\tconst store = this.liveHandles.length > 0 ? this.liveStore() : null\n\t\t\tif (store && typeof store.unsubscribe === 'function') {\n\t\t\t\tthis.liveHandles.forEach((handle) => store.unsubscribe(handle))\n\t\t\t}\n\t\t\tthis.liveHandles = []\n\t\t},\n\n\t\t/** @return {Promise<void>} */\n\t\tasync onRefreshEvent() {\n\t\t\tthis.$emit('refresh')\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tthis.internalRefreshing = true\n\t\t\t\ttry {\n\t\t\t\t\tawait this.namedReload()\n\t\t\t\t} finally {\n\t\t\t\t\tthis.internalRefreshing = false\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\tthis.internalRefreshing = true\n\t\t\t\ttry {\n\t\t\t\t\tawait this.list.refresh()\n\t\t\t\t} finally {\n\t\t\t\t\tthis.internalRefreshing = false\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Publish (or clear) the embedded CnIndexSidebar config to\n\t\t * the `cnIndexSidebarConfig` holder so CnAppRoot can mount\n\t\t * it at NcContent level. No-op when no CnAppRoot ancestor\n\t\t * exists — in that case `shouldRenderInlineSidebar` keeps\n\t\t * the inline render alive.\n\t\t */\n\t\tpublishHoistedSidebar() {\n\t\t\tif (!this.cnHostsIndexSidebar || !this.cnIndexSidebarConfig) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.resolvedSidebar.enabled || this.resolvedSidebar.show === false) {\n\t\t\t\tthis.cnIndexSidebarConfig.value = null\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.cnIndexSidebarConfig.value = {\n\t\t\t\t// markRaw: the holder is CnAppRoot `data()`, so it is deeply\n\t\t\t\t// reactive and would proxy the component definition itself.\n\t\t\t\tcomponent: markRaw(CnIndexSidebar),\n\t\t\t\tprops: this.hoistedSidebarProps,\n\t\t\t\tlisteners: {\n\t\t\t\t\t'update:open': (val) => {\n\t\t\t\t\t\tthis.sidebarOpen = val\n\t\t\t\t\t},\n\n\t\t\t\t\tsearch: (event) => this.onSearchEvent(event),\n\t\t\t\t\t'columns-change': (event) => this.onColumnsEvent(event),\n\t\t\t\t\t'columns-reorder': (event) => this.onColumnsReorder(event),\n\t\t\t\t\t'pin-change': (event) => this.onPinChange(event),\n\t\t\t\t\t'columns-reset': () => this.onColumnsReset(),\n\t\t\t\t\t'filter-change': (event) => this.onFilterEvent(event),\n\t\t\t\t\t'clear-filters': () => this.onClearFilters(),\n\t\t\t\t\t'sort-change': (keys, value) => this.onSidebarSortChange(keys, value),\n\t\t\t\t\t'saved-view': (event) => this.onSavedViewAction(event),\n\t\t\t\t\t'tab-change': (tab) => {\n\t\t\t\t\t\tthis.sidebarActiveTab = tab\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Intercepts CnRowActions' and CnContextMenu's bubbled `@action` so `handler: \"none\"` actions are dropped before re-emit.\n\t\t * A built-in is matched by its id, an app action by its label.\n\t\t *\n\t\t * @param {{action: string, row: object, id?: string, builtin?: boolean}} payload The bubbled action payload.\n\t\t */\n\t\tonRowAction(payload) {\n\t\t\tconst matched = payload.builtin === true\n\t\t\t\t? this.mergedActions.find((a) => a.builtin === true && a.id === payload.id)\n\t\t\t\t: this.mergedActions.find((a) => a.builtin !== true && a.label === payload.action)\n\t\t\tif (matched && matched._dispatchSuppress) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event action A row action was chosen from a row's actions menu, its right-click menu or the keyboard primary action. Payload: `action` (the label), the row, the action's `id` when it has one, and `builtin: true` for a built-in View / Edit / Copy / Delete. Its handler has already run.\n\t\t\t * @type {{ action: string, row: object, id?: string, builtin?: boolean }}\n\t\t\t */\n\t\t\tthis.$emit('action', payload)\n\t\t},\n\n\t\t/**\n\t\t * A card moved on the board.\n\t\t *\n\t\t * The list is refreshed rather than patched in place: the transition\n\t\t * may have changed more than the status (a date armed, an assignee\n\t\t * cleared), and a board that only moved the card would show a row that\n\t\t * disagrees with the table beside it.\n\t\t *\n\t\t * @param {object} move The `{ card, toKey }` the board emitted.\n\t\t * @return {Promise<void>} Nothing.\n\t\t */\n\t\tasync onBoardMoved(move) {\n\t\t\t/**\n\t\t\t * @event board-move A card moved through the host's transition.\n\t\t\t * @type {object}\n\t\t\t */\n\t\t\tthis.$emit('board-move', move)\n\t\t\tawait this.onRefreshEvent()\n\t\t},\n\n\t\t/**\n\t\t * Row/card click: toggles selection when `selectable` (covers the custom\n\t\t * `cardComponent` path), otherwise emits `row-click` for navigation. A\n\t\t * ctrl/cmd/shift click opens a named source's row in a new tab.\n\t\t *\n\t\t * The `@event` block below sits directly against its `$emit`, and must\n\t\t * stay there. vue-docgen binds an event's description to the emit it\n\t\t * IMMEDIATELY precedes.\n\t\t *\n\t\t * @param {object} row The clicked row object\n\t\t * @param {MouseEvent|KeyboardEvent} [event] The originating click event.\n\t\t */\n\t\tonRowClick(row, event) {\n\t\t\tif (!this.routeClickedRow(row, event)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event row-click Emitted on a row/card click for navigation. Fires when `selectable` is false, OR when `rowClickToView` is set and something can open the row (selection then happens via the checkbox). Payload: `(row, event)` — the clicked row and the native click event (absent for a keyboard shortcut or map marker), so a host can open the row in a new tab on a ctrl/cmd/shift click with `openRowTarget`. A middle click emits `row-aux-click` instead.\n\t\t\t * @type {object} The clicked row object.\n\t\t\t */\n\t\t\tthis.$emit('row-click', ...(event ? [row, event] : [row]))\n\t\t},\n\n\t\t/**\n\t\t * Row/card middle click: opens a named source's row in a new tab and\n\t\t * emits `row-aux-click`, not `row-click`, so a host whose `row-click`\n\t\t * listener navigates never moves the current tab away.\n\t\t *\n\t\t * @param {object} row The clicked row object\n\t\t * @param {MouseEvent} event The originating auxclick event.\n\t\t */\n\t\tonRowAuxClick(row, event) {\n\t\t\tif (!this.routeClickedRow(row, event)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event row-aux-click Emitted on a row/card middle click, under the same conditions as `row-click`, so a host can open the row in a new tab with `openRowTarget`. Payload: `(row, event)` — the clicked row and the native auxclick event.\n\t\t\t * @type {object} The clicked row object.\n\t\t\t */\n\t\t\tthis.$emit('row-aux-click', row, event)\n\t\t},\n\n\t\t/**\n\t\t * The shared part of a row click and a middle click: on a selectable\n\t\t * page a plain click toggles selection instead, and a named source opens\n\t\t * its own row.\n\t\t *\n\t\t * @param {object} row The clicked row object\n\t\t * @param {MouseEvent|KeyboardEvent} [event] The originating event.\n\t\t * @return {boolean} Whether the click navigates, so the caller emits.\n\t\t */\n\t\trouteClickedRow(row, event) {\n\t\t\tif (this.selectable && !this.rowClickOpens) {\n\t\t\t\tif (!event || event.button === undefined || event.button === 0) {\n\t\t\t\t\tthis.onSelect(this.toggleIdInArray(this.internalSelectedIds, row[this.rowKey]))\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// A named source knows where its rows live. Emitting only would leave\n\t\t\t// the click inert on a manifest page, which has no listener to bind —\n\t\t\t// the very shape that left three apps with a dead `@rowClick`.\n\t\t\t//\n\t\t\t// `rowRoute` wins over everything: an app that declares its own\n\t\t\t// page for these rows means it. The source's `openRow` is the\n\t\t\t// right default precisely because a task's page is usually\n\t\t\t// openregister's, and it is wrong for an app that ships one of\n\t\t\t// its own. This cannot be done by listening to `row-click`,\n\t\t\t// because `openRow` calls `window.location.assign()` and the\n\t\t\t// host's push never lands.\n\t\t\t//\n\t\t\t// A ctrl/cmd/shift or middle click opens a new tab instead, from\n\t\t\t// `rowRoute`, the source's `rowTarget(row)` or `detailRoute`. A source\n\t\t\t// with only `openRow` opens the row in place on a ctrl/cmd/shift\n\t\t\t// click and ignores a middle click. The event is marked so the host\n\t\t\t// hearing `row-click` does not open a second tab.\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tconst id = row?.id || row?.uuid\n\t\t\t\tconst source = this.namedSource\n\t\t\t\tconst newTab = isNewTabClick(event)\n\t\t\t\tconst openTarget = (target) => markNewTabHandled(event, openRowTarget(event, target, this.$router))\n\t\t\t\tif (this.rowRoute) {\n\t\t\t\t\tif (id && newTab) {\n\t\t\t\t\t\topenTarget({ name: this.rowRoute, params: { id: String(id) } })\n\t\t\t\t\t} else if (id) {\n\t\t\t\t\t\tthis.$router.push({ name: this.rowRoute, params: { id: String(id) } })\n\t\t\t\t\t}\n\t\t\t\t} else if (source && typeof source.openRow === 'function' && !newTab) {\n\t\t\t\t\tsource.openRow(row)\n\t\t\t\t} else if (source && typeof source.rowTarget === 'function') {\n\t\t\t\t\topenTarget(source.rowTarget(row))\n\t\t\t\t} else if (source && typeof source.openRow === 'function') {\n\t\t\t\t\t// No new-tab target: a modified click still opens the row in place.\n\t\t\t\t\tif (event?.button !== 1) {\n\t\t\t\t\t\tsource.openRow(row)\n\t\t\t\t\t}\n\t\t\t\t} else if (source && source.detailRoute && id) {\n\t\t\t\t\tif (newTab) {\n\t\t\t\t\t\topenTarget({ path: `${source.detailRoute}/${id}` })\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.$router.push(`${source.detailRoute}/${id}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Whether a value is a DOM event. A custom list/card component's\n\t\t * `click` may carry the item, the native event, or both.\n\t\t *\n\t\t * @param {unknown} value A `click` listener argument.\n\t\t * @return {boolean}\n\t\t */\n\t\tisDomEvent(value) {\n\t\t\treturn typeof Event !== 'undefined' && value instanceof Event\n\t\t},\n\n\t\t/**\n\t\t * Mousedown on a custom list/card component's root: when a middle click\n\t\t * opens the row, keep the browser from starting autoscroll.\n\t\t *\n\t\t * @param {MouseEvent} event The mousedown event.\n\t\t * @return {void}\n\t\t */\n\t\tonCustomItemMouseDown(event) {\n\t\t\tif (!this.selectable || this.rowClickOpens) {\n\t\t\t\tpreventMiddleClickAutoscroll(event)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Middle click on a custom list/card component's root: open the row\n\t\t * like a middle click on a built-in card would. Skipped when something\n\t\t * inside the component already opened it in a new tab.\n\t\t *\n\t\t * @param {object} row The component's row.\n\t\t * @param {MouseEvent} event The auxclick event.\n\t\t * @return {void}\n\t\t */\n\t\tonCustomItemAuxClick(row, event) {\n\t\t\tif (isRowMiddleClick(event) && !isNewTabHandled(event)) {\n\t\t\t\tthis.onRowAuxClick(row, event)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Resolve a marker click on the map back to its source row and route it\n\t\t * through `onRowClick`, so `@row-click` fires with the identical payload a\n\t\t * table/card click would emit — giving uniform detail-page navigation\n\t\t * across all three view modes.\n\t\t *\n\t\t * @param {{ feature: object }} payload CnMapWidget marker-click payload.\n\t\t */\n\t\tonMarkerClick(payload) {\n\t\t\tconst feature = payload && payload.feature\n\t\t\tconst key = feature && feature.properties ? feature.properties[this.rowKey] : undefined\n\t\t\tif (key === undefined || key === null) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst row = this.displayObjects.find((o) => o[this.rowKey] === key)\n\t\t\tif (row) {\n\t\t\t\tthis.onRowClick(row)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Extract a `{ lat, lng }` pair from a row using `mapConfig`. Prefers a\n\t\t * GeoJSON Point on `geoField` (`coordinates: [lng, lat]`), else reads the\n\t\t * dotted `latField` / `lngField` paths. Returns null when the geometry is\n\t\t * missing or non-finite, so callers can skip the row.\n\t\t *\n\t\t * @param {object} row The source object.\n\t\t * @return {{ lat: number, lng: number } | null}\n\t\t */\n\t\tresolveRowLatLng(row) {\n\t\t\tif (!row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst cfg = this.mapConfig || {}\n\t\t\tif (cfg.geoField) {\n\t\t\t\tlet geo = this.getByPath(row, cfg.geoField)\n\t\t\t\t// OpenRegister often stores geometry as a JSON-encoded string on\n\t\t\t\t// object metadata; parse it before reading `coordinates`.\n\t\t\t\tif (typeof geo === 'string') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tgeo = JSON.parse(geo)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tgeo = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst coords = geo && Array.isArray(geo.coordinates) ? geo.coordinates : null\n\t\t\t\tif (coords && Number.isFinite(coords[0]) && Number.isFinite(coords[1])) {\n\t\t\t\t\treturn { lat: Number(coords[1]), lng: Number(coords[0]) }\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lat = Number(this.getByPath(row, cfg.latField))\n\t\t\tconst lng = Number(this.getByPath(row, cfg.lngField))\n\t\t\tif (Number.isFinite(lat) && Number.isFinite(lng)) {\n\t\t\t\treturn { lat, lng }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Resolve a row's GeoJSON geometry for the map view. Prefers a full\n\t\t * geometry on `geoField`: a Point renders as a marker, a Polygon /\n\t\t * MultiPolygon / LineString renders as an area/line — so location cases\n\t\t * plot as both points AND areas. `geoField` is parsed from a JSON string\n\t\t * when OpenRegister stores it encoded. Falls back to a Point built from\n\t\t * `latField` / `lngField`. Returns null when nothing resolvable is present.\n\t\t *\n\t\t * @param {object} row The source object.\n\t\t * @return {object|null} A GeoJSON geometry object, or null.\n\t\t */\n\t\tresolveRowGeometry(row) {\n\t\t\tif (!row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst cfg = this.mapConfig || {}\n\t\t\tconst GEO_TYPES = ['Point', 'MultiPoint', 'LineString', 'MultiLineString', 'Polygon', 'MultiPolygon', 'GeometryCollection']\n\t\t\tif (cfg.geoField) {\n\t\t\t\tlet geo = this.getByPath(row, cfg.geoField)\n\t\t\t\tif (typeof geo === 'string') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tgeo = JSON.parse(geo)\n\t\t\t\t\t} catch {\n\t\t\t\t\t\tgeo = null\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (geo && GEO_TYPES.includes(geo.type)) {\n\t\t\t\t\tconst hasShape = geo.type === 'GeometryCollection'\n\t\t\t\t\t\t? Array.isArray(geo.geometries)\n\t\t\t\t\t\t: Array.isArray(geo.coordinates)\n\t\t\t\t\tif (hasShape) {\n\t\t\t\t\t\treturn geo\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lat = Number(this.getByPath(row, cfg.latField))\n\t\t\tconst lng = Number(this.getByPath(row, cfg.lngField))\n\t\t\tif (Number.isFinite(lat) && Number.isFinite(lng)) {\n\t\t\t\treturn { type: 'Point', coordinates: [lng, lat] }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Dig out the first `[lng, lat]` coordinate pair from any GeoJSON geometry\n\t\t * (Point, Polygon ring, GeometryCollection, …) for a rough centroid.\n\t\t *\n\t\t * @param {object} geometry A GeoJSON geometry.\n\t\t * @return {{lat: number, lng: number}|null}\n\t\t */\n\t\tfirstLatLng(geometry) {\n\t\t\tif (!geometry) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tif (geometry.type === 'GeometryCollection') {\n\t\t\t\tfor (const g of (geometry.geometries || [])) {\n\t\t\t\t\tconst p = this.firstLatLng(g)\n\t\t\t\t\tif (p) {\n\t\t\t\t\t\treturn p\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tlet c = geometry.coordinates\n\t\t\twhile (Array.isArray(c) && Array.isArray(c[0])) {\n\t\t\t\tc = c[0]\n\t\t\t}\n\t\t\tif (Array.isArray(c) && Number.isFinite(c[0]) && Number.isFinite(c[1])) {\n\t\t\t\treturn { lat: Number(c[1]), lng: Number(c[0]) }\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\t/**\n\t\t * Read a possibly-dotted property path off an object (e.g. `@self.geo.lat`).\n\t\t * Returns undefined on any missing segment. No path = undefined.\n\t\t *\n\t\t * @param {object} obj The object to read from.\n\t\t * @param {string} path Dot-separated property path.\n\t\t * @return {unknown} The resolved value or undefined.\n\t\t */\n\t\tgetByPath(obj, path) {\n\t\t\tif (!obj || !path) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (Object.hasOwn(obj, path)) {\n\t\t\t\treturn obj[path]\n\t\t\t}\n\t\t\treturn path.split('.').reduce((acc, seg) => (acc === null || acc === undefined ? undefined : acc[seg]), obj)\n\t\t},\n\n\t\t/**\n\t\t * Whether the consumer explicitly passed a prop, in either spelling.\n\t\t *\n\t\t * Needed where a named source changes a prop's EFFECTIVE default: the\n\t\t * declared default is unchanged (the prop interface must not break),\n\t\t * so the value alone cannot distinguish \"left to default\" from\n\t\t * \"explicitly asked for the default\".\n\t\t *\n\t\t * @param {string} name The camelCase prop name.\n\t\t * @return {boolean} True when the prop was passed explicitly.\n\t\t */\n\t\thasExplicitProp(name) {\n\t\t\tconst props = this.$.vnode.props || {}\n\t\t\tconst kebab = name.replace(/[A-Z]/g, (letter) => '-' + letter.toLowerCase())\n\t\t\treturn (name in props) || (kebab in props)\n\t\t},\n\n\t\t/**\n\t\t * Open a named-source row: the source's own navigation, then\n\t\t * `edit-open` for the host.\n\t\t *\n\t\t * This is what the source-action grammar `action: 'open'` resolves to\n\t\t * (see `mergedActions`). Navigation order is deliberate: the source's\n\t\t * `openRow`/`detailRoute` push happens FIRST, so when the host also\n\t\t * navigates (CnPageRenderer binds `@edit-open` → `onRowOpen`, which\n\t\t * honours `config.rowRoute`), the host's push lands last and wins —\n\t\t * the configured target beats the source's default, and a page with\n\t\t * no host listener still navigates.\n\t\t *\n\t\t * @param {object} row The row to open.\n\t\t * @return {void}\n\t\t */\n\t\topenSourceRow(row) {\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.openRow === 'function') {\n\t\t\t\tthis.namedSource.openRow(row)\n\t\t\t} else if (this.isNamedSource && this.namedSource && this.namedSource.detailRoute) {\n\t\t\t\tconst id = row?.id || row?.uuid\n\t\t\t\tif (id && this.$router) {\n\t\t\t\t\tthis.$router.push(`${this.namedSource.detailRoute}/${id}`)\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.$emit('edit-open', row)\n\t\t},\n\n\t\t/**\n\t\t * Whether a page tab is the page being shown.\n\t\t *\n\t\t * @param {object} tab The page tab.\n\t\t * @return {boolean} True for the current page.\n\t\t */\n\t\tisActivePageTab(tab) {\n\t\t\tif (tab.to && typeof tab.to === 'object') {\n\t\t\t\treturn !!this.$route && tab.to.name !== undefined && this.$route.name === tab.to.name\n\t\t\t}\n\t\t\tconst path = this.$route && this.$route.path\n\t\t\treturn !!path && String(path).replace(/\\/+$/, '') === String(tab.to).replace(/\\/+$/, '')\n\t\t},\n\n\t\t/**\n\t\t * The href of a page tab, resolved through the router when there is one.\n\t\t *\n\t\t * @param {object} tab The page tab.\n\t\t * @return {string} The href.\n\t\t */\n\t\tpageTabHref(tab) {\n\t\t\tif (this.$router && typeof this.$router.resolve === 'function') {\n\t\t\t\tconst resolved = this.$router.resolve(tab.to)\n\t\t\t\tif (resolved && resolved.href) {\n\t\t\t\t\treturn resolved.href\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tab.to\n\t\t},\n\n\t\t/**\n\t\t * Follow a page tab on the app's router. A ctrl/cmd/shift or middle\n\t\t * click keeps the browser's own new-tab behaviour.\n\t\t *\n\t\t * @param {object} tab The page tab.\n\t\t * @param {MouseEvent} event The click.\n\t\t * @return {void}\n\t\t */\n\t\tonPageTabClick(tab, event) {\n\t\t\tif (!this.$router || isNewTabClick(event) || this.isActivePageTab(tab)) {\n\t\t\t\tif (this.isActivePageTab(tab)) {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tevent.preventDefault()\n\t\t\tthis.$router.push(tab.to).catch(() => {})\n\t\t},\n\n\t\t/**\n\t\t * Handle the built-in View action — emits a dedicated `view` event.\n\t\t * Kept distinct from `row-click` because the two are conceptually\n\t\t * different: a row click might mean select/expand/drilldown, while\n\t\t * View always means \"open the detail view of this row\".\n\t\t *\n\t\t * @param {object} row The row whose View action was triggered\n\t\t */\n\t\tonView(row) {\n\t\t\tthis.$emit('view', row)\n\t\t},\n\n\t\t/**\n\t\t * Handle the Add button click. If the consumer listens to `@add`,\n\t\t * emit the event (backward compatible). Otherwise open the form dialog.\n\t\t */\n\t\tonAddClick() {\n\t\t\t// A NAMED SOURCE CREATES BY NAVIGATING, not by the form dialog. That\n\t\t\t// dialog builds an OpenRegister object from a schema; a flow is not\n\t\t\t// one, which is why the page it replaces set `show-add=\"false\"` and\n\t\t\t// rendered its own button. An explicit @add listener still wins.\n\t\t\tif (\n\t\t\t\t!this.$.vnode.props?.onAdd\n\t\t\t\t&& this.isNamedSource\n\t\t\t\t&& this.namedSource\n\t\t\t\t&& this.namedSource.addRoute\n\t\t\t) {\n\t\t\t\t// With `addLinkTo` set, Add is a link that already navigated.\n\t\t\t\tif (!this.addLinkTo) {\n\t\t\t\t\tthis.$router.push(this.namedSource.addRoute)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// `$.vnode.props`, not `$attrs`: `add` is a declared emit, and Vue\n\t\t\t// keeps declared emits out of `$attrs`.\n\t\t\tif (this.$.vnode.props?.onAdd) {\n\t\t\t\tthis.$emit('add')\n\t\t\t} else if (!this.openCreateModal() && this.showFormDialog) {\n\t\t\t\tthis.editItem = null\n\t\t\t\tthis.showFormDialogVisible = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the built-in create dialog when the route carries `?action=create`.\n\t\t * Called on `mounted()` and whenever `$route.query.action` changes, so it\n\t\t * works both on initial navigation and on same-page deep-links (e.g. a\n\t\t * \"New Case\" button on a sibling page that routes here with the query).\n\t\t *\n\t\t * After opening the dialog the query param is cleared via\n\t\t * `$router.replace` so a page refresh does not re-open it and browser\n\t\t * history stays clean. No-op when there is no router, when `showFormDialog`\n\t\t * is false (consumer manages its own dialog), or when the query param is\n\t\t * absent / not `'create'`.\n\t\t */\n\t\tmaybeOpenCreateFromQuery() {\n\t\t\tif (!this.$route || !this.$route.query || this.$route.query.action !== 'create') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.openCreateModal()) {\n\t\t\t\tif (!this.showFormDialog) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.openFormDialog(null)\n\t\t\t}\n\t\t\t// Clear the query param; guard against redundant navigation errors.\n\t\t\tif (this.$router) {\n\t\t\t\tconst query = { ...this.$route.query }\n\t\t\t\tdelete query.action\n\t\t\t\tconst nav = this.$router.replace({ query })\n\t\t\t\t// $router.replace returns a Promise in Vue Router 3 but may\n\t\t\t\t// return undefined in mocked / legacy environments — guard.\n\t\t\t\tif (nav && typeof nav.catch === 'function') {\n\t\t\t\t\tnav.catch(() => {})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The calendar moved to another month: ask for that window.\n\t\t *\n\t\t * @param {{rangeStart: string, rangeEnd: string}} range The visible grid window as ISO dates.\n\t\t */\n\t\tonCalendarRange(range) {\n\t\t\tthis.calendarRange = range\n\t\t\tif (this.isSelfFetchMode && typeof this.list.refresh === 'function') {\n\t\t\t\tthis.list.refresh(1)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * \"+N\" on a busy day: show that day's records in the table.\n\t\t *\n\t\t * @param {string} iso The day, `YYYY-MM-DD`.\n\t\t */\n\t\tonCalendarDaySelect(iso) {\n\t\t\tconst cal = this.calendar || {}\n\t\t\tif (this.isSelfFetchMode && cal.dateField) {\n\t\t\t\tconst next = { ...this.list.activeFilters.value }\n\t\t\t\tif (cal.endDateField) {\n\t\t\t\t\tnext[`${cal.dateField}[lte]`] = [iso]\n\t\t\t\t\tnext[`${cal.endDateField}[gte]`] = [iso]\n\t\t\t\t} else {\n\t\t\t\t\tnext[`${cal.dateField}[gte]`] = [iso]\n\t\t\t\t\tnext[`${cal.dateField}[lte]`] = [iso]\n\t\t\t\t}\n\t\t\t\tthis.list.activeFilters.value = next\n\t\t\t}\n\t\t\tthis.onViewModeChange('table')\n\t\t},\n\n\t\t/**\n\t\t * Handle view mode toggle.\n\t\t *\n\t\t * @param {string} mode 'table' or 'cards'\n\t\t */\n\t\tonViewModeChange(mode) {\n\t\t\tthis.routeViewPending = false\n\t\t\tthis.currentViewMode = mode\n\t\t\tthis.$emit('view-mode-change', mode)\n\t\t},\n\n\t\t/**\n\t\t * Open in the mode the address names (`?_view=board`), when the page\n\t\t * offers it. The key starts with `_`, like `_search` and `_page`, so it\n\t\t * is never read as a list filter. A menu entry's `query` can so open a\n\t\t * list as its board, on the one page that lists the schema\n\t\t * (screens-board-reference-columns). A mode the page offers only later\n\t\t * (the map, once rows with a geometry are in) opens when it arrives,\n\t\t * unless the reader picked a view first.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/screens-board-reference-columns/specs/board-view/spec.md#requirement-the-address-can-open-a-list-in-a-view-mode\n\t\t * @spec openspec/changes/screens-index-board-gaps/specs/index-list-board-look/spec.md#requirement-the-address-opens-a-view-mode-that-arrives-later\n\t\t */\n\t\tapplyViewModeFromRoute() {\n\t\t\tconst wanted = this.$route?.query?._view\n\t\t\tif (typeof wanted !== 'string' || wanted === '' || wanted === this.currentViewMode) {\n\t\t\t\tthis.routeViewPending = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.routeViewModes.includes(wanted)) {\n\t\t\t\tthis.currentViewMode = wanted\n\t\t\t\tthis.routeViewPending = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.routeViewPending = true\n\t\t},\n\n\t\t/**\n\t\t * Handle selection changes from CnDataTable/CnCardGrid.\n\t\t * Updates internal state and re-emits for parent.\n\t\t *\n\t\t * @param {Array} ids Array of selected row IDs\n\t\t */\n\t\tonSelect(ids) {\n\t\t\tthis.internalSelectedIds = ids\n\t\t\tthis.$emit('select', ids)\n\t\t},\n\n\t\t// --- Mass action handlers ---\n\n\t\tasync onMassDeleteConfirm(ids) {\n\t\t\tif (await this.selfActions.handleMassDelete(ids)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-delete', ids)\n\t\t},\n\n\t\tasync onMassCopyConfirm(payload) {\n\t\t\tif (await this.selfActions.handleMassCopy(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-copy', payload)\n\t\t},\n\n\t\tasync onMassExportConfirm(payload) {\n\t\t\tif (await this.selfActions.handleMassExport(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-export', payload)\n\t\t},\n\n\t\t/**\n\t\t * Native Export menu entry click (`allowExport` + `schema.exportable`).\n\t\t * Navigates the browser to OpenRegister's export leaf, passing the\n\t\t * list's own query (without paging) so the file holds the rows the\n\t\t * table is filtered to.\n\t\t *\n\t\t * @param {'csv'|'excel'} format The requested export format.\n\t\t */\n\t\tonExportClick(format) {\n\t\t\t// The query the list itself sends, so the file follows the table:\n\t\t\t// search, sort, facet filters, the page filter and the quick filter.\n\t\t\t// A host-managed list has no such query, so it keeps the route's.\n\t\t\tconst query = this.isSelfFetchMode && typeof this.list.buildParams === 'function'\n\t\t\t\t? this.list.buildParams(1)\n\t\t\t\t: ((this.$route && this.$route.query) || {})\n\t\t\tconst url = buildExportUrl(this.register, this.exportSchemaSlug, query, format)\n\t\t\twindow.location.assign(url)\n\t\t},\n\n\t\t/**\n\t\t * Download OpenRegister's JSON export of the selected rows: the page's\n\t\t * register and schema, with the selected ids as `_ids`.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/index-actions-menu-selection-export/specs/index-header/spec.md#requirement-the-actions-menu-exports-the-selection\n\t\t */\n\t\tonExportSelected() {\n\t\t\tconst ids = this.internalSelectedIds.map((id) => String(id))\n\t\t\tif (ids.length === 0 || !this.showExportMenu) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\twindow.location.assign(buildExportUrl(this.register, this.exportSchemaSlug, { _ids: ids }, 'json'))\n\t\t},\n\n\t\t// ── Saved views (saved-views-ui) ─────────────────────────────────────\n\n\t\t/**\n\t\t * Fetch the current user's saved views (own + public) from\n\t\t * OpenRegister's views API. Called from created() when the page\n\t\t * offers saved views.\n\t\t */\n\t\tasync fetchSavedViews() {\n\t\t\tthis.savedViewsLoading = true\n\t\t\ttry {\n\t\t\t\tthis.savedViews = await useSavedViewsApi().fetchViews()\n\t\t\t\t// An empty answer is also what a misread response gives, so it\n\t\t\t\t// never empties the menu: entries are dropped only against a\n\t\t\t\t// list that came back with views in it.\n\t\t\t\tif (this.savedViews.length > 0) {\n\t\t\t\t\tthis.syncSavedViewMenu()\n\t\t\t\t}\n\t\t\t\tthis.applySavedViewFromRoute()\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('CnIndexPage: failed to fetch saved views', error)\n\t\t\t} finally {\n\t\t\t\tthis.savedViewsLoading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Apply a saved view. Self-fetch mode's facet/folder filters and\n\t\t * search/sort live in useListView's own reactive state, not the route\n\t\t * query, so apply them there directly. Otherwise (consumer-managed\n\t\t * store mode) fall back to `$router.replace` — same precedent as the\n\t\t * `?action=create` query cleanup, and dropping the whole previous\n\t\t * query implicitly resets `_page` to 1.\n\t\t *\n\t\t * @param {object} view The View API object to apply.\n\t\t * @param {{keepSavedViewKey?: boolean}} [options] Keep `?savedView=<id>` in the address, as a menu entry's link does.\n\t\t */\n\t\tonApplySavedView(view, { keepSavedViewKey = false } = {}) {\n\t\t\tthis.appliedSavedViewId = view && (view.id || view.slug) ? String(view.id || view.slug) : ''\n\t\t\tconst state = extractViewState(view)\n\t\t\t// A view's filters may carry tokens (`@me`, `@myTeam`): resolved here,\n\t\t\t// and an optional one that answers nothing (no team) is dropped. A\n\t\t\t// `@myTeam` still being read applies the view once it is known.\n\t\t\tif (usesMyTeam(state.filters) && peekMyTeam() === null) {\n\t\t\t\tloadMyTeam().then(() => this.onApplySavedView(view, { keepSavedViewKey }))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst ctx = typeof this.selfFetchTokenCtx === 'function' ? this.selfFetchTokenCtx() : {}\n\t\t\tstate.filters = dropOptionalUnresolved(resolveFilterTokens(state.filters, ctx))\n\t\t\tthis.appliedViewFiltersKey = this.viewFiltersKey(state.filters)\n\t\t\t// A view that carries columns wins while it is applied; one without leaves the person's own layout.\n\t\t\tconst viewColumns = view && view.query && Array.isArray(view.query.columns) ? view.query.columns.map(String) : []\n\t\t\tthis.appliedViewColumns = viewColumns.length > 0 ? viewColumns : null\n\t\t\tif (this.isSelfFetchMode) {\n\t\t\t\t// Set state directly (not via onFilterEvent/onSearchEvent per key)\n\t\t\t\t// so applying a view is one fetch + one route replace, not one\n\t\t\t\t// of each per changed field — and a filter the view doesn't\n\t\t\t\t// carry is actually cleared, not left over from before.\n\t\t\t\tthis.list.activeFilters.value = { ...state.filters }\n\t\t\t\tthis.list.searchTerm.value = state.search || ''\n\t\t\t\tconst keys = state.sortKeys\n\t\t\t\tthis.list.sortKeys.value = keys\n\t\t\t\tthis.list.sortKey.value = keys[0]?.key ?? null\n\t\t\t\tthis.list.sortOrder.value = keys[0]?.order ?? 'asc'\n\t\t\t\tthis.list.refresh(1)\n\t\t\t\t// Through `persistViewStateToRoute` rather than a raw replace,\n\t\t\t\t// because it is what records the keys this view wrote — without\n\t\t\t\t// that, a later \"clear all\" has nothing to delete them by.\n\t\t\t\tthis.persistViewStateToRoute(state, { savedView: keepSavedViewKey ? this.appliedSavedViewId : '' })\n\t\t\t\tthis.applyViewSortOption(savedViewOverrides(view))\n\t\t\t\tthis.$emit('apply-view', view)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.$router) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst query = buildRouteQueryFromViewState(state)\n\t\t\tif (keepSavedViewKey) {\n\t\t\t\tquery.savedView = this.appliedSavedViewId\n\t\t\t}\n\t\t\tconst nav = this.$router.replace({ query })\n\t\t\tif (this.isNamedSource) {\n\t\t\t\tthis.namedActiveFilters = namedFiltersFromQuery(query, this)\n\t\t\t}\n\t\t\t// Swallow the duplicate-navigation rejection (Vue Router 3)\n\t\t\t// when the applied view matches the current query.\n\t\t\tif (nav && typeof nav.catch === 'function') {\n\t\t\t\tnav.catch(() => {})\n\t\t\t}\n\t\t\tthis.applyViewSortOption(savedViewOverrides(view))\n\t\t\tthis.$emit('apply-view', view)\n\t\t},\n\n\t\t/**\n\t\t * Persist the current state as a named view via OpenRegister's views\n\t\t * API (CnSaveViewDialog `@confirm`). Self-fetch mode reads its active\n\t\t * filters/search/sort straight from useListView's own state (they\n\t\t * never reach the route query); otherwise falls back to the route\n\t\t * query. On success the new view joins the list and the dialog\n\t\t * closes; on failure the dialog stays open with the error surfaced.\n\t\t *\n\t\t * @param {{ name: string, isPublic: boolean }} payload Dialog payload.\n\t\t */\n\t\t/**\n\t\t * Toast, without letting the toast fail the thing it reports on.\n\t\t *\n\t\t * The import is dynamic so a page that never toasts does not carry the\n\t\t * chunk, and everything is swallowed: a chunk that will not load must\n\t\t * not turn a save that worked into an error, nor add an unhandled\n\t\t * rejection on top of one that already failed.\n\t\t *\n\t\t * @param {'success'|'error'} kind Which toast to show.\n\t\t * @param {string} message The message, already translated.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync toastSavedView(kind, message) {\n\t\t\ttry {\n\t\t\t\tconst dialogs = await import('@nextcloud/dialogs')\n\t\t\t\tconst show = kind === 'error' ? dialogs.showError : dialogs.showSuccess\n\t\t\t\tif (typeof show === 'function') {\n\t\t\t\t\tshow(message)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// No toast. What it was reporting on happened either way.\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Put a saved view that changed elsewhere (its alert) back in the list,\n\t\t * matched on its id or uuid.\n\t\t *\n\t\t * @param {object} view The saved view as the server returned it.\n\t\t * @return {void}\n\t\t */\n\t\treplaceSavedView(view) {\n\t\t\tif (!view || typeof view !== 'object') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst same = (other) => other && ((view.id !== undefined && other.id === view.id) || (view.uuid && other.uuid === view.uuid))\n\t\t\tthis.savedViews = (this.savedViews || []).map((other) => (same(other) ? view : other))\n\t\t},\n\n\t\tasync onSaveViewConfirm({ name, isPublic, sharedWith, presentation, description = '', icon = '' }) {\n\t\t\tconst state = this.isSelfFetchMode\n\t\t\t\t? this.currentViewState()\n\t\t\t\t: extractViewStateFromRouteQuery((this.$route && this.$route.query) || {})\n\t\t\tconst payload = buildViewCreatePayload({\n\t\t\t\tname,\n\t\t\t\tdescription,\n\t\t\t\tisPublic,\n\t\t\t\tisDefault: false,\n\t\t\t\tstate,\n\t\t\t\tscope: savedViewScope(this.savedViewsPage),\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t\tsharedWith,\n\t\t\t\tpresentation,\n\t\t\t})\n\t\t\tif (icon) {\n\t\t\t\tpayload.query.icon = icon\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst view = await useSavedViewsApi().createView(payload)\n\t\t\t\tif (!view) {\n\t\t\t\t\t// A 2xx carrying no view. Axios has thrown on every real error\n\t\t\t\t\t// by now, so nothing else marks this one, and the list below is\n\t\t\t\t\t// not appended to: claiming success sends the person looking\n\t\t\t\t\t// for a view that is not in it.\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'The server did not return the saved view'))\n\t\t\t\t}\n\t\t\t\tthis.savedViews = [...this.savedViews, view]\n\t\t\t\tthis.showSaveViewDialog = false\n\t\t\t\tthis.sidebarActiveTab = 'filters-tab'\n\t\t\t\tthis.sidebarOpen = true\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" saved', { name }))\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('CnIndexPage: failed to save view', error)\n\t\t\t\t// Both, and they say different things: the dialog stays open\n\t\t\t\t// carrying the reason, because that is where the name and the\n\t\t\t\t// toggle still are to correct and retry; the toast says the save\n\t\t\t\t// did not happen, because a dialog that simply stayed open reads\n\t\t\t\t// as one that has not been submitted yet.\n\t\t\t\tthis.$refs.saveViewDialog?.setError(error?.response?.data?.error || error?.message)\n\t\t\t\tthis.toastSavedView('error', t('nextcloud-vue', 'Could not save the view \"{name}\"', { name }))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the presentation dialog for a view the user may edit\n\t\t * (CnSavedViewsControl `@presentation-request`).\n\t\t *\n\t\t * @param {object} view The View API object.\n\t\t * @spec openspec/changes/view-presentation-picker/tasks.md#task-3\n\t\t */\n\t\tonPresentationViewRequest(view) {\n\t\t\tthis.viewPendingPresentation = view\n\t\t},\n\n\t\t/**\n\t\t * Save a changed presentation (CnSavedViewPresentationDialog `@confirm`).\n\t\t * The body carries `presentation` only, so a writer never sends\n\t\t * `sharedWith` or `owner`. A refusal keeps the dialog open.\n\t\t *\n\t\t * @param {object} presentation The presentation in OpenRegister's shape.\n\t\t * @spec openspec/changes/view-presentation-picker/tasks.md#task-3\n\t\t */\n\t\tasync onPresentationViewConfirm(presentation) {\n\t\t\tconst view = this.viewPendingPresentation\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().patchView(view.id, { presentation })\n\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? { ...v, ...(saved || { presentation }) } : v))\n\t\t\t\tthis.viewPendingPresentation = null\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" updated', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tconst data = error?.response?.data\n\t\t\t\tthis.$refs.presentationViewDialog?.setError((data && (data.error || data.message)) || error?.message)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * One saved-view intent from the sidebar's Search tab.\n\t\t *\n\t\t * @param {{action: string, view: (object|null)}} event The intent.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-6\n\t\t */\n\t\tonSavedViewAction({ action, view } = {}) {\n\t\t\tconst handlers = {\n\t\t\t\tapply: () => this.onApplySavedView(view),\n\t\t\t\tsave: () => { this.showSaveViewDialog = true },\n\t\t\t\tedit: () => this.onEditViewRequest(view),\n\t\t\t\tshare: () => this.onShareViewRequest(view),\n\t\t\t\tpresentation: () => this.onPresentationViewRequest(view),\n\t\t\t\tupdate: () => this.onUpdateViewRequest(view),\n\t\t\t\tcopy: () => this.onCopyViewRequest(view),\n\t\t\t\tmenu: () => this.onToggleSavedViewInMenu(view),\n\t\t\t\tdelete: () => this.onDeleteViewRequest(view),\n\t\t\t}\n\t\t\tif (handlers[action]) {\n\t\t\t\thandlers[action]()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add a saved view to the app menu, or take it out. Stored per user\n\t\t * by CnAppRoot; the view itself is not touched, so a view shared\n\t\t * with this user can be added as well as an own one.\n\t\t *\n\t\t * @param {object} view The view.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tonToggleSavedViewInMenu(view) {\n\t\t\tconst menu = this.cnSavedViewMenu\n\t\t\tif (!view || !menu || typeof menu.toggle !== 'function' || this.savedViewPage === '') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst badge = this.savedViewMenuBadge(view)\n\t\t\tconst icon = savedViewIcon(view)\n\t\t\tconst description = typeof view.description === 'string' ? view.description : ''\n\t\t\tmenu.toggle({ id: String(view.id || view.slug), page: this.savedViewPage, name: view.name, ...(icon ? { icon } : {}), ...(description ? { description } : {}), ...(badge ? { badge } : {}) })\n\t\t},\n\n\t\t/**\n\t\t * The count a view's menu entry shows: the objects its criteria match,\n\t\t * on this page's register and schema, or what its `overrides.badge`\n\t\t * says. `overrides.badge: false` shows none.\n\t\t * `{ count: { register, schema, filter }, counterVariant? }`, or null.\n\t\t *\n\t\t * @param {object} view The view.\n\t\t * @return {{count: object, counterVariant?: string}|null}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-in-the-menu-can-show-a-count\n\t\t * @spec openspec/changes/saved-view-icon-description-count/specs/saved-view-icon-description-count/spec.md#requirement-a-saved-view-in-the-menu-shows-its-count\n\t\t */\n\t\tsavedViewMenuBadge(view) {\n\t\t\tconst overrides = savedViewOverrides(view)\n\t\t\tconst declared = overrides ? overrides.badge : undefined\n\t\t\tconst badge = declared === undefined || declared === null ? true : declared\n\t\t\tconst filters = view && view.query && typeof view.query.filters === 'object' ? view.query.filters : {}\n\t\t\tconst locked = overrides && overrides.lockedFilters && typeof overrides.lockedFilters === 'object' ? overrides.lockedFilters : {}\n\t\t\treturn savedViewBadge(badge, { register: this.register, schema: schemaSlug(this.schema), filter: this.filter }, { ...locked, ...filters })\n\t\t},\n\n\t\t/**\n\t\t * Select the sort option a view names (`overrides.sortOption`), or,\n\t\t * given none, undo the one the previous view selected.\n\t\t *\n\t\t * @param {object|null} overrides The view's overrides.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-can-select-a-sort-option\n\t\t */\n\t\tapplyViewSortOption(overrides) {\n\t\t\tconst wanted = overrides && typeof overrides.sortOption === 'string' ? overrides.sortOption : ''\n\t\t\tif (wanted !== '' && this.selectSortOption(wanted)) {\n\t\t\t\tthis.viewSortOption = wanted\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.viewSortOption !== '' && this.sortSource && this.sortSource.value === this.viewSortOption) {\n\t\t\t\tthis.sortSource = { ...this.sortSource, value: '', page: 1 }\n\t\t\t}\n\t\t\tthis.viewSortOption = ''\n\t\t},\n\n\t\t/**\n\t\t * Leave the applied view: the page's own config comes back. The filters\n\t\t * stay as they are, as after any other change to them.\n\t\t *\n\t\t * @return {void}\n\t\t * @spec openspec/changes/saved-view-overrides/specs/saved-views-ui/spec.md#requirement-a-view-can-override-the-page-config-while-it-is-active\n\t\t */\n\t\tleaveSavedView() {\n\t\t\tthis.appliedSavedViewId = ''\n\t\t\tthis.appliedViewColumns = null\n\t\t\tthis.applyViewSortOption(null)\n\t\t},\n\n\t\t/**\n\t\t * Bring this page's menu entries in line with the views it can show:\n\t\t * current names, and none for a view deleted or no longer shared.\n\t\t *\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tsyncSavedViewMenu() {\n\t\t\tconst menu = this.cnSavedViewMenu\n\t\t\tif (!menu || typeof menu.sync !== 'function' || this.savedViewPage === '') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tmenu.sync(this.savedViewPage, [...this.defaultFilterViews, ...this.visibleSavedViews].map((view) => ({ ...view, menuBadge: this.savedViewMenuBadge(view) })))\n\t\t},\n\n\t\t/**\n\t\t * Apply the saved view the address names (`?savedView=<id>`, what a\n\t\t * menu entry links to), once the list holding it has loaded.\n\t\t *\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-7\n\t\t */\n\t\tapplySavedViewFromRoute() {\n\t\t\tconst id = this.$route && this.$route.query ? this.$route.query.savedView : undefined\n\t\t\tif (typeof id !== 'string' || id === '' || id === this.appliedSavedViewId) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// OpenRegister answers a view with a numeric `id` and its `uuid`; a\n\t\t\t// menu entry or a shared link may name either.\n\t\t\tconst view = this.viewsForControl.find((v) => String(v.id) === id || String(v.slug) === id || (v.uuid !== undefined && String(v.uuid) === id))\n\t\t\tif (view) {\n\t\t\t\tthis.onApplySavedView(view, { keepSavedViewKey: true })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the edit dialog for an own view (CnSavedViewsControl `@edit-request`).\n\t\t *\n\t\t * @param {object} view The View API object.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-3\n\t\t */\n\t\tonEditViewRequest(view) {\n\t\t\tthis.viewPendingEdit = view\n\t\t},\n\n\t\t/**\n\t\t * Save a rename, and the current filters when asked\n\t\t * (CnSavedViewEditDialog `@confirm`). The PATCH carries `name`, plus\n\t\t * `query` only when the criteria are replaced, so nothing else on the\n\t\t * view is rewritten from this tab's copy. A refusal keeps the dialog open.\n\t\t *\n\t\t * @param {{ name: string, replaceCriteria: boolean }} payload The dialog payload.\n\t\t * @spec openspec/changes/saved-views-manage-and-defaults/tasks.md#task-3\n\t\t */\n\t\tasync onEditViewConfirm({ name, replaceCriteria, description, icon }) {\n\t\t\tconst view = this.viewPendingEdit\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst body = { name }\n\t\t\tif (typeof description === 'string' && description !== (typeof view.description === 'string' ? view.description : '')) {\n\t\t\t\tbody.description = description\n\t\t\t}\n\t\t\tif (replaceCriteria === true) {\n\t\t\t\tconst state = this.isSelfFetchMode\n\t\t\t\t\t? this.currentViewState()\n\t\t\t\t\t: extractViewStateFromRouteQuery((this.$route && this.$route.query) || {})\n\t\t\t\tbody.query = buildViewCreatePayload({\n\t\t\t\t\tname,\n\t\t\t\t\tstate,\n\t\t\t\t\tscope: savedViewScope(this.savedViewsPage),\n\t\t\t\t\tregister: this.register,\n\t\t\t\t\tschema: this.schema,\n\t\t\t\t}).query\n\t\t\t\t// New criteria keep the view's page config overrides.\n\t\t\t\tif (view.query && view.query.overrides) {\n\t\t\t\t\tbody.query.overrides = view.query.overrides\n\t\t\t\t}\n\t\t\t}\n\t\t\t// The icon rides in the query: OpenRegister keeps a view's query whole.\n\t\t\tif (typeof icon === 'string' && icon !== savedViewIcon(view)) {\n\t\t\t\tconst query = { ...(body.query || view.query || {}) }\n\t\t\t\tif (icon === '') {\n\t\t\t\t\tdelete query.icon\n\t\t\t\t} else {\n\t\t\t\t\tquery.icon = icon\n\t\t\t\t}\n\t\t\t\tbody.query = query\n\t\t\t} else if (body.query && savedViewIcon(view)) {\n\t\t\t\tbody.query.icon = savedViewIcon(view)\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().patchView(view.id, body)\n\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? { ...v, ...(saved || body) } : v))\n\t\t\t\tthis.syncSavedViewMenu()\n\t\t\t\tthis.viewPendingEdit = null\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" saved', { name }))\n\t\t\t} catch (error) {\n\t\t\t\tconst data = error?.response?.data\n\t\t\t\tthis.$refs.editViewDialog?.setError((data && (data.error || data.message)) || error?.message)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the share dialog for an own view (CnSavedViewsControl `@share-request`).\n\t\t *\n\t\t * @param {object} view The View API object to share.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-2\n\t\t */\n\t\tonShareViewRequest(view) {\n\t\t\tthis.viewPendingShare = view\n\t\t},\n\n\t\t/**\n\t\t * Save a changed audience (CnSavedViewShareDialog `@confirm`). A failure\n\t\t * keeps the dialog open with the server's message.\n\t\t *\n\t\t * @param {Array<{group: string, mode: string}>} sharedWith The audience, `[]` to stop sharing.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-2\n\t\t */\n\t\tasync onShareViewConfirm(sharedWith) {\n\t\t\tconst view = this.viewPendingShare\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().patchView(view.id, { sharedWith: normalizeSharedWith(sharedWith) })\n\t\t\t\tconst next = saved || { ...view, sharedWith: normalizeSharedWith(sharedWith) }\n\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? { ...v, ...next } : v))\n\t\t\t\tthis.viewPendingShare = null\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'Sharing of \"{name}\" saved', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tthis.$refs.shareViewDialog?.setError(error?.response?.data?.error || error?.response?.data?.message || error?.message)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Save the current state to a view shared with write access\n\t\t * (CnSavedViewsControl `@update-request`). The body carries the query\n\t\t * and presentation only: never `sharedWith` or `owner`, so the\n\t\t * audience cannot be changed from here.\n\t\t *\n\t\t * @param {object} view The shared View API object.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-3\n\t\t */\n\t\tasync onUpdateViewRequest(view) {\n\t\t\tconst state = this.isSelfFetchMode\n\t\t\t\t? this.currentViewState()\n\t\t\t\t: extractViewStateFromRouteQuery((this.$route && this.$route.query) || {})\n\t\t\tconst payload = buildViewCreatePayload({\n\t\t\t\tname: view.name,\n\t\t\t\tdescription: view.description || '',\n\t\t\t\tisPublic: view.isPublic === true,\n\t\t\t\tisDefault: false,\n\t\t\t\tstate,\n\t\t\t\tscope: savedViewScope(this.savedViewsPage),\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t})\n\t\t\tif (view.query && view.query.overrides) {\n\t\t\t\tpayload.query.overrides = view.query.overrides\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst saved = await useSavedViewsApi().updateView(view.id, payload)\n\t\t\t\tif (saved) {\n\t\t\t\t\tthis.savedViews = this.savedViews.map((v) => (v.id === view.id ? saved : v))\n\t\t\t\t}\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" updated', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tthis.toastSavedView('error', error?.response?.data?.error || error?.response?.data?.message || t('nextcloud-vue', 'Could not update the view \"{name}\"', { name: view.name }))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * \"Save a copy\" of a view (CnSavedViewsControl `@copy-request`): a\n\t\t * personal copy with the same query. A copy of a view shared with the\n\t\t * reader or shipped with the app keeps its name; a copy of the reader's\n\t\t * own view is named \"{name} (copy)\". The original stays untouched.\n\t\t *\n\t\t * @param {object} view The View API object.\n\t\t * @spec openspec/changes/saved-views-shared-by-role/tasks.md#task-3\n\t\t * @spec openspec/changes/board-saved-view-manage-menu/specs/board-saved-view-manage-menu/spec.md#requirement-an-own-view-can-be-copied\n\t\t */\n\t\tasync onCopyViewRequest(view) {\n\t\t\tconst own = viewAccess(view, this.currentSavedViewsUserId) === 'owner'\n\t\t\tconst payload = {\n\t\t\t\tname: own ? t('nextcloud-vue', '{name} (copy)', { name: view.name }) : view.name,\n\t\t\t\tdescription: view.description || '',\n\t\t\t\tisPublic: false,\n\t\t\t\tisDefault: false,\n\t\t\t\tquery: view.query && typeof view.query === 'object' ? view.query : {},\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst copy = await useSavedViewsApi().createView(payload)\n\t\t\t\tif (!copy) {\n\t\t\t\t\tthrow new Error(t('nextcloud-vue', 'The server did not return the saved view'))\n\t\t\t\t}\n\t\t\t\tthis.savedViews = [...this.savedViews, copy]\n\t\t\t\tthis.toastSavedView('success', t('nextcloud-vue', 'View \"{name}\" saved', { name: view.name }))\n\t\t\t} catch (error) {\n\t\t\t\tthis.toastSavedView('error', error?.response?.data?.error || error?.message || t('nextcloud-vue', 'Could not save the view \"{name}\"', { name: view.name }))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Open the delete-confirmation dialog for a saved view\n\t\t * (CnSavedViewsControl `@delete-request`).\n\t\t *\n\t\t * @param {object} view The View API object to delete.\n\t\t */\n\t\tonDeleteViewRequest(view) {\n\t\t\tthis.viewPendingDelete = view\n\t\t},\n\n\t\t/**\n\t\t * Delete the pending view after confirmation (CnConfirmDialog\n\t\t * `@confirm`), then report back via the dialog's setResult()\n\t\t * contract and remove it from the local list.\n\t\t */\n\t\tasync onDeleteViewConfirm() {\n\t\t\tconst view = this.viewPendingDelete\n\t\t\tif (!view) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait useSavedViewsApi().deleteView(view.id)\n\t\t\t\tthis.savedViews = this.savedViews.filter((v) => v.id !== view.id)\n\t\t\t\tthis.syncSavedViewMenu()\n\t\t\t\tthis.$refs.deleteViewConfirmDialog?.setResult({ success: true })\n\t\t\t} catch (error) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error('CnIndexPage: failed to delete view', error)\n\t\t\t\tthis.$refs.deleteViewConfirmDialog?.setResult({ error: error?.response?.data?.error || error?.message || 'Failed to delete view' })\n\t\t\t}\n\t\t},\n\n\t\tasync onMassImportConfirm(payload) {\n\t\t\tif (await this.selfActions.handleMassImport(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('mass-import', payload)\n\t\t},\n\n\t\t_setResult(refName, resultData) {\n\t\t\tthis.$refs[refName]?.setResult(resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetMassDeleteResult(resultData) {\n\t\t\tthis._setResult('massDeleteDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetMassCopyResult(resultData) {\n\t\t\tthis._setResult('massCopyDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetExportResult(resultData) {\n\t\t\tthis._setResult('exportDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetImportResult(resultData) {\n\t\t\tthis._setResult('importDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetDeleteResult(resultData) {\n\t\t\tthis._setResult('massDeleteDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetCopyResult(resultData) {\n\t\t\tthis._setResult('massCopyDialog', resultData)\n\t\t},\n\n\t\t// --- Single-object dialog handlers ---\n\n\t\tasync onSingleDeleteConfirm(id) {\n\t\t\t// A named source deletes through its own hook. Emit-only would\n\t\t\t// leave the confirm inert on a manifest page (nobody listens),\n\t\t\t// which is why the Delete action only renders when the hook\n\t\t\t// exists — see `defaultActions`.\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.deleteRow === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.namedSource.deleteRow(this.actionTargetItem || { id }, this.sourceConfig || {})\n\t\t\t\t\tthis.setSingleDeleteResult({ success: true })\n\t\t\t\t\tthis.$emit('delete', id)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis.setSingleDeleteResult({ error: (err && err.message) || 'Delete failed' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (await this.selfActions.handleSingleDelete(id)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('delete', id)\n\t\t},\n\n\t\tasync onSingleCopyConfirm(payload) {\n\t\t\t// Same contract as delete: the source owns the copy, or there is\n\t\t\t// no Copy action to confirm.\n\t\t\tif (this.isNamedSource && this.namedSource && typeof this.namedSource.copyRow === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.namedSource.copyRow(\n\t\t\t\t\t\tthis.actionTargetItem || { id: payload && payload.id },\n\t\t\t\t\t\tpayload && payload.newName,\n\t\t\t\t\t\tthis.sourceConfig || {},\n\t\t\t\t\t)\n\t\t\t\t\tthis.setSingleCopyResult({ success: true })\n\t\t\t\t\tthis.$emit('copy', payload)\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis.setSingleCopyResult({ error: (err && err.message) || 'Copy failed' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (await this.selfActions.handleSingleCopy(payload)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('copy', payload)\n\t\t},\n\n\t\t// Lets an `advanceOn: \"object-created\"` walkthrough step auto-advance.\n\t\t// No dispatch site existed anywhere before this, so that advanceOn\n\t\t// type could never fire. `@self.register`/`@self.schema` are numeric\n\t\t// DB ids, not the slugs a manifest's advanceOn declares, so override\n\t\t// them with this page's own slug props before dispatching.\n\t\tnotifyWalkthroughObjectCreated(created) {\n\t\t\tif (typeof window === 'undefined' || !created) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tdispatchObjectCreated({ register: this.register, schema: this.exportSchemaSlug, object: created })\n\t\t},\n\n\t\t/**\n\t\t * Toast and navigate after a create the built-in dialog confirmed, per\n\t\t * `createSuccessMessage` / `createSuccessRoute`. Both default off, so a\n\t\t * page that declares neither behaves exactly as before.\n\t\t *\n\t\t * Runs on every create path (store, self-store, `createOverride`), which\n\t\t * is what makes the built-in Add button a peer of a manifest\n\t\t * `open-form` header action: that action has always toasted and\n\t\t * navigated, so the same create reached two different endings depending\n\t\t * on which button opened it.\n\t\t *\n\t\t * @param {object} saved The created object, as the save path returned it.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync afterCreateSuccess(saved) {\n\t\t\t// Callers do not await this — a toast and a navigation are not the\n\t\t\t// save — so nothing here may reject: an unhandled rejection from a\n\t\t\t// failed chunk load would surface as an error on a create that\n\t\t\t// actually succeeded.\n\t\t\tif (this.createSuccessMessage) {\n\t\t\t\ttry {\n\t\t\t\t\tconst { showSuccess } = await import('@nextcloud/dialogs')\n\t\t\t\t\tif (typeof showSuccess === 'function') {\n\t\t\t\t\t\tshowSuccess(this.cnTranslate(this.createSuccessMessage))\n\t\t\t\t\t}\n\t\t\t\t} catch {\n\t\t\t\t\t// No toast; the record is saved either way.\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!this.createSuccessRoute) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t// `buildOnSuccessRoute` reads the id through `savedObjectId`, so a\n\t\t\t\t// response that carries it as `uuid` or `@self.id` still deep-links.\n\t\t\t\tconst location = buildOnSuccessRoute(this.createSuccessRoute, saved)\n\t\t\t\tif (location && this.$router) {\n\t\t\t\t\tthis.$router.push(location).catch(() => {})\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// The record is saved; staying on the list beats an error toast.\n\t\t\t}\n\t\t},\n\n\t\tasync onFormConfirm(formData) {\n\t\t\t// Opt-in create-override hook: an app supplies a custom async create\n\t\t\t// handler (e.g. a contact-aware endpoint that fills a required FK)\n\t\t\t// that owns persistence instead of saveObject. Create-only; edits\n\t\t\t// always fall through to the normal store / self-store path.\n\t\t\tif (!this.editItem && typeof this.createOverride === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tconst created = await this.createOverride(formData, {\n\t\t\t\t\t\tregister: this.register,\n\t\t\t\t\t\tschema: this.schema,\n\t\t\t\t\t\tobjectType: this.objectType || this.selfObjectType,\n\t\t\t\t\t\teffectiveSchema: this.effectiveSchema,\n\t\t\t\t\t})\n\t\t\t\t\tif (created) {\n\t\t\t\t\t\tthis.setFormResult({ success: true })\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @event create Emitted after a create is confirmed (store, self-store, or createOverride).\n\t\t\t\t\t\t * @type {object} The created object.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tthis.$emit('create', created)\n\t\t\t\t\t\tthis.notifyWalkthroughObjectCreated(created)\n\t\t\t\t\t\tif (this.list && typeof this.list.refresh === 'function') {\n\t\t\t\t\t\t\tthis.list.refresh()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.afterCreateSuccess(created)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setFormResult({ error: 'Save failed' })\n\t\t\t\t\t}\n\t\t\t\t} catch (err) {\n\t\t\t\t\tthis.setFormResult({ error: (err && err.message) || 'Save failed' })\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.store) {\n\t\t\t\tif (!this.objectType) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn('[CnIndexPage] store prop is set but objectType is missing. Cannot save to store.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst saved = await this.store.saveObject(this.objectType, formData)\n\t\t\t\tif (saved) {\n\t\t\t\t\tconst wasCreate = !this.editItem\n\t\t\t\t\tthis.setFormResult({ success: true })\n\t\t\t\t\tthis.$emit(wasCreate ? 'create' : 'edit', saved)\n\t\t\t\t\tif (wasCreate) {\n\t\t\t\t\t\tthis.notifyWalkthroughObjectCreated(saved)\n\t\t\t\t\t\tthis.afterCreateSuccess(saved)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst err = this.store.getError?.(this.objectType)\n\t\t\t\t\tif (err && err.isValidation) {\n\t\t\t\t\t\t// Keep the form visible so the user can fix the invalid data.\n\t\t\t\t\t\tthis.setFormValidationErrors(err.fields, err.message || 'Validation failed')\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.setFormResult({ error: (err && err.message) || 'Save failed' })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (await this.selfActions.handleFormSave(formData)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit(this.editItem ? 'edit' : 'create', formData)\n\t\t},\n\n\t\tcloseSingleDelete() {\n\t\t\tthis.showSingleDeleteDialog = false\n\t\t\tthis.actionTargetItem = null\n\t\t},\n\n\t\tcloseSingleCopy() {\n\t\t\tthis.showSingleCopyDialog = false\n\t\t\tthis.actionTargetItem = null\n\t\t},\n\n\t\tcloseFormDialog() {\n\t\t\tthis.showFormDialogVisible = false\n\t\t\tthis.editItem = null\n\t\t\tthis.rowFormTarget = null\n\t\t\tthis.rowFormSchema = null\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetSingleDeleteResult(resultData) {\n\t\t\tthis._setResult('singleDeleteDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetSingleCopyResult(resultData) {\n\t\t\tthis._setResult('singleCopyDialog', resultData)\n\t\t},\n\n\t\t/**\n\t\t * @param {{ success?: boolean, error?: string }} resultData Result data to pass to the dialog\n\t\t * @public\n\t\t */\n\t\tsetFormResult(resultData) {\n\t\t\tthis._setResult('formDialog', resultData)\n\t\t\t// A saved write may change a label a reference column shows.\n\t\t\tif (resultData && resultData.success && this._refLabelResolver) {\n\t\t\t\tthis._refLabelResolver.invalidate()\n\t\t\t\tthis.refLabels = {}\n\t\t\t\tthis.refLooks = {}\n\t\t\t\tthis.loadRefLabels()\n\t\t\t\tthis.loadRefLooks()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Show a validation error in the form dialog while keeping the form\n\t\t * visible (so the user can fix the data), instead of replacing it with\n\t\t * a result note. Use this for 400/422 responses; use setFormResult for\n\t\t * terminal success/failure.\n\t\t *\n\t\t * @param {object} [fieldErrors] Per-field error messages keyed by field key\n\t\t * @param {string} [message] Form-level message shown above the fields\n\t\t * @public\n\t\t */\n\t\tsetFormValidationErrors(fieldErrors, message) {\n\t\t\tthis.$refs.formDialog?.setValidationErrors(fieldErrors || {}, message)\n\t\t},\n\n\t\t// --- Context menu handlers ---\n\n\t\tonRowContextMenu({ row, event }) {\n\t\t\tthis.contextMenuShownRow = row\n\t\t\tthis.openContextMenu({ item: row, event })\n\t\t},\n\n\t\t/**\n\t\t * Programmatically open the form dialog.\n\t\t *\n\t\t * @param {object|null} item Pass null for create mode, or an object for edit mode\n\t\t * @public\n\t\t */\n\t\topenFormDialog(item = null) {\n\t\t\treturn this.openFormFor(item)\n\t\t},\n\n\t\t/**\n\t\t * Open the form dialog for an item. A row of another pair (collectionUrl)\n\t\t * opens with its own schema; everything else opens at once, as before.\n\t\t *\n\t\t * @param {object|null} item The row to edit, or null to create.\n\t\t * @return {Promise<void>|void}\n\t\t */\n\t\topenFormFor(item) {\n\t\t\tconst target = item ? this.rowTypeTarget(item) : null\n\t\t\tif (!target) {\n\t\t\t\tthis.rowFormTarget = null\n\t\t\t\tthis.rowFormSchema = null\n\t\t\t\tthis.editItem = item\n\t\t\t\tthis.showFormDialogVisible = true\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst store = this.selfObjectStore\n\t\t\treturn Promise.resolve(store.getSchema?.(target.type) || store.fetchSchema?.(target.type))\n\t\t\t\t.catch(() => null)\n\t\t\t\t.then((schema) => {\n\t\t\t\t\tif (!schema) {\n\t\t\t\t\t\tthis.toastSavedView('error', t('nextcloud-vue', 'Could not load the form for this item.'))\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tthis.rowFormTarget = target\n\t\t\t\t\tthis.rowFormSchema = schema\n\t\t\t\t\tthis.editItem = item\n\t\t\t\t\tthis.showFormDialogVisible = true\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The row's own pair when it differs from the page's in a collectionUrl list.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {{register: string, schema: string, type: string}|null} The pair, or null.\n\t\t */\n\t\trowTypeTarget(row) {\n\t\t\treturn resolveRowTarget({\n\t\t\t\tcollectionUrl: this.isSelfFetchMode ? this.collectionUrl : '',\n\t\t\t\tregister: this.register,\n\t\t\t\tschema: this.schema,\n\t\t\t\tprimarySchema: this.effectiveSchema,\n\t\t\t\tprimaryRegister: this.selfObjectStore?.getRegister?.(this.selfObjectType) || null,\n\t\t\t\tstore: this.selfObjectStore,\n\t\t\t}, row)\n\t\t},\n\n\t\t/**\n\t\t * Open the `createModal` registry modal, when one is set and a CnAppRoot\n\t\t * ancestor can mount it.\n\t\t *\n\t\t * @return {boolean} Whether the modal was opened.\n\t\t */\n\t\topenCreateModal() {\n\t\t\tif (!this.createModal || typeof this.cnOpenModal !== 'function') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.cnOpenModal(this.createModal)\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Programmatically open the single-item delete dialog.\n\t\t *\n\t\t * @param {object} item The item to delete\n\t\t * @public\n\t\t */\n\t\topenDeleteDialog(item) {\n\t\t\tthis.actionTargetItem = item\n\t\t\tthis.showSingleDeleteDialog = true\n\t\t},\n\n\t\t/**\n\t\t * Pure helper used by the cardComponent dispatch path to toggle\n\t\t * an id in the selected-ids array. Kept inline rather than\n\t\t * pulled into a util because the only call site is the\n\t\t * cardComponent `@select` listener template above.\n\t\t *\n\t\t * @param {Array} ids Current selection\n\t\t * @param {string|number} id The id to toggle\n\t\t * @return {Array} New array with `id` toggled in/out\n\t\t */\n\t\ttoggleIdInArray(ids, id) {\n\t\t\tif (ids.includes(id)) {\n\t\t\t\treturn ids.filter((existing) => existing !== id)\n\t\t\t}\n\t\t\treturn [...ids, id]\n\t\t},\n\t},\n}\n</script>\n\n<!-- Styles in css/index-page.css -->\n"],"names":["CnIndexPageWidgets","CnRelatedFieldFilters","CnStatusBadge","CnBuildiqEditButton","CnFollowToggle","CnEmptyContent","CnPageHeader","CnQuickFilterBar","CnActionButtons","CnActionsBar","CnIcon","CnDataTable","CnCardGrid","CnBoardView","CnDateAxisView","CnObjectCalendar","CnMapWidget","CnObjectList","CnFolderSidebar","CnPagination","CnRowActions","CnMassDeleteDialog","CnMassCopyDialog","CnMassExportDialog","CnMassImportDialog","CnDeleteDialog","CnCopyDialog","CnFormDialog","CnAdvancedFormDialog","CnContextMenu","CnIndexSidebar","CnSavedViewsControl","CnSavedViewPresentationDialog","CnSavedViewEditDialog","CnSavedViewShareDialog","CnSaveViewDialog","CnConfirmDialog","CnQuickEditDialog","t","n","dispatchAction","dispatchSharedAction"],"mappings":"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"}
|