@conduction/nextcloud-vue 2.94.0 → 2.95.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/CnAppRoot/CnAppRoot.vue2.js +46 -28
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +17 -10
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBrandBar/CnBrandBar.vue2.js.map +1 -1
- package/dist/esm/components/CnBrandBar/CnBrandBar.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +56 -16
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue.js +9 -0
- package/dist/esm/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue.js.map +1 -0
- package/dist/esm/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue2.js +240 -0
- package/dist/esm/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue3.js +65 -0
- package/dist/esm/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnDeviceFramesWidget/index.js +30 -0
- package/dist/esm/components/CnDeviceFramesWidget/index.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +17 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +30 -31
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnHeaderSearchLabel/CnHeaderSearchLabel.vue.js +6 -0
- package/dist/esm/components/CnHeaderSearchLabel/CnHeaderSearchLabel.vue.js.map +1 -0
- package/dist/esm/components/CnHeaderSearchLabel/CnHeaderSearchLabel.vue2.js +90 -0
- package/dist/esm/components/CnHeaderSearchLabel/CnHeaderSearchLabel.vue2.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +48 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +20 -2
- 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 +230 -25
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue2.js.map +1 -1
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js +447 -221
- package/dist/esm/components/CnRegisterMapping/CnRegisterMapping.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +18 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +18 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +356 -114
- package/dist/esm/utils/libraryWidgetKeys.js +1 -0
- package/dist/esm/utils/libraryWidgetKeys.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/nextcloud-vue.cjs.js +6964 -5943
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +356 -114
- package/l10n/en.json +18 -1
- package/l10n/nl.json +18 -1
- package/package.json +1 -1
- package/src/components/CnAppRoot/CnAppRoot.vue +20 -0
- package/src/components/CnBrandBar/CnBrandBar.vue +5 -4
- package/src/components/CnDetailPage/CnDetailPage.vue +55 -15
- package/src/components/CnDeviceFramesWidget/CnDeviceFramesWidget.vue +360 -0
- package/src/components/CnDeviceFramesWidget/index.js +29 -0
- package/src/components/CnFactsWidget/CnFactsWidget.vue +46 -2
- package/src/components/CnHeaderSearchLabel/CnHeaderSearchLabel.vue +107 -0
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +81 -1
- package/src/components/CnRegisterMapping/CnRegisterMapping.md +10 -0
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +511 -28
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +1 -0
- package/src/components/index.js +1 -0
- package/src/index.js +1 -0
- package/src/schemas/app-manifest-v2.schema.json +6 -1
- package/src/utils/libraryWidgetKeys.js +1 -0
- package/src/utils/validateManifestV2.compiled.js +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CnRecordListWidget.vue2.js","sources":["../../../../src/components/CnRecordListWidget/CnRecordListWidget.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div\n\t\tclass=\"cn-record-list\"\n\t\t:class=\"`cn-record-list--${presentation}`\"\n\t\tdata-testid=\"cn-record-list\">\n\t\t<p v-if=\"error\" class=\"cn-record-list__error\" data-testid=\"cn-record-list-error\">\n\t\t\t{{ errorLabel }}\n\t\t</p>\n\t\t<div v-else-if=\"loading && rows.length === 0\" class=\"cn-record-list__loading\">\n\t\t\t<NcLoadingIcon :size=\"20\" :name=\"loadingLabel\" />\n\t\t</div>\n\t\t<p v-else-if=\"rows.length === 0\" class=\"cn-record-list__empty\" data-testid=\"cn-record-list-empty\">\n\t\t\t{{ emptyLabel }}\n\t\t</p>\n\t\t<ul v-else class=\"cn-record-list__list\">\n\t\t\t<li\n\t\t\t\tv-for=\"item in items\"\n\t\t\t\t:key=\"item.key\"\n\t\t\t\tclass=\"cn-record-list__item\"\n\t\t\t\tdata-testid=\"cn-record-list-item\">\n\t\t\t\t<!-- rows with `rowAction`: the title is the link, and one action\n\t\t\t\t ends the row instead of the chevron (\"Beoordelen\"). -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"presentation === 'rows' && item.action\"\n\t\t\t\t\tclass=\"cn-record-list__row cn-record-list__row--action\">\n\t\t\t\t\t<span v-if=\"item.initials\"\n\t\t\t\t\t\tclass=\"cn-record-list__avatar\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-avatar\">{{ item.initials }}</span>\n\t\t\t\t\t<span class=\"cn-record-list__main\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"item.tag\"\n\t\t\t\t\t\t\tv-if=\"item.title\"\n\t\t\t\t\t\t\tclass=\"cn-record-list__title\"\n\t\t\t\t\t\t\t:class=\"{ 'cn-record-list__title--link': item.tag !== 'div' }\"\n\t\t\t\t\t\t\tv-bind=\"item.attrs\">\n\t\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t\t</component>\n\t\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span v-if=\"item.pill || item.badges.length > 0\" class=\"cn-record-list__pills\">\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-if=\"item.pill\"\n\t\t\t\t\t\t\t:label=\"item.pill.label\"\n\t\t\t\t\t\t\t:variant=\"item.pill.variant\"\n\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-for=\"badge in item.badges\"\n\t\t\t\t\t\t\t:key=\"badge.key\"\n\t\t\t\t\t\t\t:label=\"badge.label\"\n\t\t\t\t\t\t\t:variant=\"badge.variant\"\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t:data-testid=\"`cn-record-list-badge-${badge.kind}`\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-if=\"item.due\"\n\t\t\t\t\t\tclass=\"cn-record-list__due cn-record-list__due--column\"\n\t\t\t\t\t\t:class=\"`cn-record-list__due--${item.due.tone}`\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-due\">{{ item.due.text }}</span>\n\t\t\t\t\t<span v-if=\"item.trailing\" class=\"cn-record-list__trailing\">{{ item.trailing }}</span>\n\t\t\t\t\t<component\n\t\t\t\t\t\t:is=\"item.action.tag\"\n\t\t\t\t\t\tclass=\"cn-record-list__action\"\n\t\t\t\t\t\tv-bind=\"item.action.attrs\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-action\"\n\t\t\t\t\t\tv-on=\"item.action.tag === 'button' ? { click: () => runRowAction(item.row) } : {}\">\n\t\t\t\t\t\t{{ item.action.label }}\n\t\t\t\t\t</component>\n\t\t\t\t</div>\n\t\t\t\t<!-- rows: title and meta, then the pill, the date and a chevron. -->\n\t\t\t\t<component\n\t\t\t\t\t:is=\"item.tag\"\n\t\t\t\t\tv-else-if=\"presentation === 'rows'\"\n\t\t\t\t\tclass=\"cn-record-list__row\"\n\t\t\t\t\t:class=\"{ 'cn-record-list__row--link': item.tag !== 'div' }\"\n\t\t\t\t\tv-bind=\"item.attrs\">\n\t\t\t\t\t<span v-if=\"item.initials\"\n\t\t\t\t\t\tclass=\"cn-record-list__avatar\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-avatar\">{{ item.initials }}</span>\n\t\t\t\t\t<span class=\"cn-record-list__main\">\n\t\t\t\t\t\t<span v-if=\"item.title\" class=\"cn-record-list__title\">{{ item.title }}</span>\n\t\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span v-if=\"item.pill || item.badges.length > 0 || item.due || item.trailing\" class=\"cn-record-list__aside\">\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-if=\"item.pill\"\n\t\t\t\t\t\t\t:label=\"item.pill.label\"\n\t\t\t\t\t\t\t:variant=\"item.pill.variant\"\n\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-for=\"badge in item.badges\"\n\t\t\t\t\t\t\t:key=\"badge.key\"\n\t\t\t\t\t\t\t:label=\"badge.label\"\n\t\t\t\t\t\t\t:variant=\"badge.variant\"\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t:data-testid=\"`cn-record-list-badge-${badge.kind}`\" />\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"item.due\"\n\t\t\t\t\t\t\tclass=\"cn-record-list__due\"\n\t\t\t\t\t\t\t:class=\"`cn-record-list__due--${item.due.tone}`\"\n\t\t\t\t\t\t\tdata-testid=\"cn-record-list-due\">{{ item.due.text }}</span>\n\t\t\t\t\t\t<span v-if=\"item.trailing\" class=\"cn-record-list__trailing\">{{ item.trailing }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\tv-if=\"item.tag !== 'div'\"\n\t\t\t\t\t\tclass=\"cn-record-list__chevron\"\n\t\t\t\t\t\t:size=\"18\"\n\t\t\t\t\t\taria-hidden=\"true\" />\n\t\t\t\t</component>\n\n\t\t\t\t<!-- cards: a framed card per row, the icon and title with the pill\n\t\t\t\t beside them, the meta line, and `trailing` as the large figure. -->\n\t\t\t\t<component\n\t\t\t\t\t:is=\"item.tag\"\n\t\t\t\t\tv-else-if=\"presentation === 'cards'\"\n\t\t\t\t\tclass=\"cn-record-list__card\"\n\t\t\t\t\t:class=\"{ 'cn-record-list__card--link': item.tag !== 'div' }\"\n\t\t\t\t\tv-bind=\"item.attrs\"\n\t\t\t\t\tdata-testid=\"cn-record-list-card\">\n\t\t\t\t\t<span class=\"cn-record-list__card-head\">\n\t\t\t\t\t\t<span class=\"cn-record-list__card-title\">\n\t\t\t\t\t\t\t<CnIcon\n\t\t\t\t\t\t\t\tv-if=\"cardIcons\"\n\t\t\t\t\t\t\t\tclass=\"cn-record-list__card-icon\"\n\t\t\t\t\t\t\t\t:name=\"item.icon\"\n\t\t\t\t\t\t\t\t:size=\"18\" />\n\t\t\t\t\t\t\t<span v-if=\"item.title\" class=\"cn-record-list__title\">{{ item.title }}</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span v-if=\"item.pill || item.badges.length > 0\" class=\"cn-record-list__card-pills\">\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-if=\"item.pill\"\n\t\t\t\t\t\t\t\t:label=\"item.pill.label\"\n\t\t\t\t\t\t\t\t:variant=\"item.pill.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-for=\"badge in item.badges\"\n\t\t\t\t\t\t\t\t:key=\"badge.key\"\n\t\t\t\t\t\t\t\t:label=\"badge.label\"\n\t\t\t\t\t\t\t\t:variant=\"badge.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-record-list-badge-${badge.kind}`\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t<span v-if=\"item.trailing\" class=\"cn-record-list__card-value\" data-testid=\"cn-record-list-card-value\">{{ item.trailing }}</span>\n\t\t\t\t</component>\n\n\t\t\t\t<!-- feed: a round icon, a meta line and the text. -->\n\t\t\t\t<div v-else-if=\"presentation === 'feed'\" class=\"cn-record-list__feed-row\">\n\t\t\t\t\t<span class=\"cn-record-list__feed-icon\" aria-hidden=\"true\">\n\t\t\t\t\t\t<CnIcon :name=\"item.icon\" :size=\"18\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<component :is=\"item.tag\" class=\"cn-record-list__main\" v-bind=\"item.attrs\">\n\t\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t\t<span v-if=\"item.text\" class=\"cn-record-list__text\">{{ item.text }}</span>\n\t\t\t\t\t</component>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- inline: a label and the title, the title a link. -->\n\t\t\t\t<div v-else class=\"cn-record-list__inline-row\">\n\t\t\t\t\t<span v-if=\"item.label\" class=\"cn-record-list__label\">{{ item.label }}</span>\n\t\t\t\t\t<component :is=\"item.tag\" class=\"cn-record-list__inline-title\" v-bind=\"item.attrs\">\n\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t</component>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcLoadingIcon } from '@nextcloud/vue'\nimport { inject, ref } from 'vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport CnIcon from '../CnIcon/CnIcon.vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport { useEndpointSource } from '../../composables/useEndpointSource.js'\nimport { actionLink, dispatchAction, interpolateActionTarget } from '../../utils/actionsDispatcher.js'\nimport { isBadgeVariant } from '../../utils/badgeVariants.js'\nimport { ageInDays } from '../../utils/boardDate.js'\nimport { resolveDue } from '../../utils/dueText.js'\nimport { fillTemplate, firstFilled } from '../../utils/fillTemplate.js'\nimport { unwrapAppConfig } from '../../utils/formatMetric.js'\nimport { initialsOf } from '../../utils/initials.js'\nimport { lensUnavailableText, readLensReports } from '../../utils/lensAvailability.js'\nimport { pageFilter, pageSort } from '../../utils/pageControls.js'\nimport { readPath } from '../../utils/readPath.js'\nimport { dropOptionalUnresolved, hasUnresolvedTokens, resolveFilterTokens } from '../../utils/resolveFilterTokens.js'\n\nconst PAGE_REFRESH_CHANNEL = 'cn:page:refresh'\nconst PRESENTATIONS = ['rows', 'feed', 'inline', 'cards']\n\n/**\n * Unwrap a value that may be a ref.\n *\n * @param {unknown} value The value.\n * @return {unknown} The plain value.\n */\nfunction unwrap(value) {\n\treturn value && typeof value === 'object' && 'value' in value ? value.value : value\n}\n\n/**\n * CnRecordListWidget — the objects of another schema that point at this\n * record, drawn as the boards draw them (screens-relation-pages).\n *\n * A person page lists its open cases (\"Verlichting fietspad Lindelaan,\n * 2026-0082 · Woo-verzoek, In behandeling, Termijn 1 nov\"), its latest contact\n * moments (an icon by channel, a meta line, the summary) and its relations\n * (\"Secretaris van Buurtvereniging Oost\"). Each is a list of another schema's\n * objects filtered on a reference to this record. The source keys are those of\n * `object-list` (`register`, `schema`, `filter` with the `@objectId` /\n * `@object.<field>` / `@workspace.<key>` tokens, `sort`, `limit`, `extend`,\n * `rowRoute`, `pageControls`), or `endpointSource` (an app endpoint whose\n * payload, after `responsePath`, is the array of rows, as on the object table); `avatar` puts a circle with the initials of a name\n * template before the title; what differs is the drawing: `presentation` is `rows`, `feed`\n * or `inline`, and each line is a template (`\"{identifier} · {caseTypeName}\"`,\n * `\"Termijn {deadline|date}\"`). `cards` draws a framed card per row in a\n * grid, with `trailing` as the large figure (board ShBank's accounts).\n *\n * A content-only catalog type: on a card surface the detail host or the\n * dashboard page draws the titled card. The widget emits `header` with `{ link, note }` (the\n * `headerLink` and `headerNote` with `{total}` filled in) for that card's\n * header.\n */\nexport default {\n\tname: 'CnRecordListWidget',\n\n\tcomponents: { ChevronRight, CnIcon, CnStatusBadge, NcLoadingIcon },\n\n\tinject: {\n\t\t/** Detail-page object context (`{ objectId, object, register, schema }`). */\n\t\tcnObjectContext: { default: null },\n\t\t/** Page workspace bag, for `@workspace.<key>` tokens. */\n\t\tcnWorkspaceContext: { default: null },\n\t\t/** The host app's translate function. */\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/** The page's app config map; its `currency` is the reporting currency of a money token. */\n\t\tcnAppConfig: { default: () => ({}) },\n\t\t/** The page's pre-bound action dispatcher (CnPageRenderer), for `rowAction`. */\n\t\tcnDispatchAction: { default: null },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The list config: `{ register, schema, filter?, sort?, limit?, extend?,\n\t\t * presentation?, title?, meta?, text?, label?, pill?, trailing?, icon?,\n\t\t * rowRoute?, rowIdField?, headerLink?, headerNote?, emptyText?, errorText?,\n\t\t * valueLabels?, endpointSource? }`. `endpointSource` (`{ url, method?,\n\t\t * params?, responsePath? }`) reads the rows from an app endpoint instead\n\t\t * of `register` / `schema`. `valueLabels` maps a field's stored values to the labels\n\t\t * the templates show.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The current record's id, for the `@objectId` token. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current record, for `@object.<field>` tokens. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['header'],\n\n\tsetup(props) {\n\t\tconst objectCtxRaw = inject('cnObjectContext', null)\n\t\tconst workspaceRaw = inject('cnWorkspaceContext', null)\n\t\tconst appConfigRaw = inject('cnAppConfig', ref({}))\n\t\tconst { data, loading, error } = useEndpointSource(\n\t\t\t() => props.content?.endpointSource || null,\n\t\t\t{\n\t\t\t\tctx: () => {\n\t\t\t\t\tconst injected = unwrap(objectCtxRaw) || {}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...injected,\n\t\t\t\t\t\tobjectId: props.objectId ?? injected.objectId ?? props.objectData?.id ?? null,\n\t\t\t\t\t\tobject: props.objectData || injected.object || null,\n\t\t\t\t\t\tworkspace: unwrap(workspaceRaw) || {},\n\t\t\t\t\t\tconfig: unwrapAppConfig(appConfigRaw) || {},\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\treturn { epData: data, epLoading: loading, epError: error }\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\trows: [],\n\t\t\ttotal: 0,\n\t\t\tloading: false,\n\t\t\terror: false,\n\t\t\t/** Personal-lens reports (`@self.lenses`) of the latest response. */\n\t\t\tlenses: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {string} `rows`, `feed`, `inline` or `cards`. */\n\t\tpresentation() {\n\t\t\tconst value = this.content?.presentation\n\t\t\treturn PRESENTATIONS.includes(value) ? value : 'rows'\n\t\t},\n\n\t\t/**\n\t\t * Whether a `cards` card leads its title with an icon: only when the\n\t\t * list declares `icon`, so a card without one has no placeholder.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/record-list-cards/specs/record-list-cards/spec.md#requirement-a-record-list-can-draw-its-rows-as-cards\n\t\t */\n\t\tcardIcons() {\n\t\t\tconst icon = this.content?.icon\n\t\t\treturn (typeof icon === 'string' && icon !== '') || (Boolean(icon) && typeof icon === 'object')\n\t\t},\n\n\t\t/** @return {object} The token context: record, id and workspace. */\n\t\ttokenCtx() {\n\t\t\tconst injected = unwrap(this.cnObjectContext) || {}\n\t\t\treturn {\n\t\t\t\t...injected,\n\t\t\t\tobjectId: this.objectId ?? injected.objectId ?? this.objectData?.id ?? null,\n\t\t\t\tobject: this.objectData || injected.object || null,\n\t\t\t\tworkspace: unwrap(this.cnWorkspaceContext) || {},\n\t\t\t}\n\t\t},\n\n\t\t/** @return {object} The filter with its tokens resolved. */\n\t\tresolvedFilter() {\n\t\t\tconst filter = pageFilter(this.content?.pageControls, this.tokenCtx.workspace, this.content?.filter)\n\t\t\treturn dropOptionalUnresolved(resolveFilterTokens(filter, this.tokenCtx))\n\t\t},\n\n\t\t/** @return {boolean} A required token (the record id, say) has no value yet. */\n\t\twaiting() {\n\t\t\treturn hasUnresolvedTokens(this.resolvedFilter)\n\t\t},\n\n\t\t/** @return {object|null} The sort: the page's sort control when the widget listens to one, else its own. */\n\t\teffectiveSort() {\n\t\t\treturn pageSort(this.content?.pageControls, this.tokenCtx.workspace, this.content?.sort)\n\t\t},\n\n\t\t/**\n\t\t * What a template may read beside the row: the app config, whose\n\t\t * `currency` is the reporting currency of a `{path|currency}` token.\n\t\t *\n\t\t * @return {{config: object}} The template context.\n\t\t * @spec openspec/changes/screens-currency-format/specs/currency-format/spec.md#requirement-a-money-value-reads-in-its-currency\n\t\t */\n\t\ttemplateContext() {\n\t\t\treturn { config: unwrapAppConfig(this.cnAppConfig) }\n\t\t},\n\n\t\t/**\n\t\t * Whether the rows come from `endpointSource` rather than OpenRegister.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/endpoint-source-card-grid-record-list/specs/dashboard-page/spec.md#requirement-a-record-list-and-a-card-grid-can-read-an-endpoint\n\t\t */\n\t\tendpointActive() {\n\t\t\tconst source = this.content?.endpointSource\n\t\t\treturn Boolean(source && typeof source === 'object' && source.url)\n\t\t},\n\n\t\t/** @return {string} The endpoint read's state, to copy into the list when it changes. */\n\t\tendpointKey() {\n\t\t\treturn this.endpointActive ? JSON.stringify([this.epData, this.epLoading, this.epError]) : ''\n\t\t},\n\n\t\t/** @return {number} The fetch cap. */\n\t\tlimit() {\n\t\t\tconst value = Number(this.content?.limit)\n\t\t\treturn Number.isFinite(value) && value > 0 ? Math.floor(value) : 5\n\t\t},\n\n\t\t/** @return {string} What a fetch depends on; a change fetches again. */\n\t\trequestKey() {\n\t\t\tconst c = this.content || {}\n\t\t\treturn JSON.stringify([c.register, c.schema, this.resolvedFilter, this.effectiveSort, this.limit, c.extend, this.waiting])\n\t\t},\n\n\t\t/** @return {Array<object>} The rows ready to draw. */\n\t\titems() {\n\t\t\tconst c = this.content || {}\n\t\t\treturn this.rows.slice(0, this.limit).map((row, index) => {\n\t\t\t\tconst link = this.rowLink(row)\n\t\t\t\treturn {\n\t\t\t\t\tkey: (row && (row.id || row['@self']?.id)) || `row-${index}`,\n\t\t\t\t\trow,\n\t\t\t\t\taction: this.rowActionOf(row),\n\t\t\t\t\ttag: link ? 'router-link' : 'div',\n\t\t\t\t\tattrs: link ? { to: link } : {},\n\t\t\t\t\tinitials: this.initialsFor(row),\n\t\t\t\t\ttitle: this.fill(c.title, row),\n\t\t\t\t\tmeta: this.metaOf(row),\n\t\t\t\t\ttext: this.fill(c.text, row),\n\t\t\t\t\tlabel: this.fill(c.label, row),\n\t\t\t\t\ttrailing: c.trailing ? firstFilled(c.trailing, row, this.translate, new Date(), this.templateContext) : '',\n\t\t\t\t\tpill: this.pillOf(row),\n\t\t\t\t\tbadges: this.badgesOf(row),\n\t\t\t\t\tdue: this.dueOf(row),\n\t\t\t\t\ticon: this.iconOf(row),\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/** @return {object|null} The header link with `{total}` filled and tokens resolved. */\n\t\theaderLink() {\n\t\t\tconst link = this.content?.headerLink\n\t\t\tif (!link || typeof link !== 'object' || typeof link.label !== 'string' || link.label === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst resolved = { label: this.withTotal(link.label) }\n\t\t\tif (link.route) {\n\t\t\t\tresolved.route = link.route\n\t\t\t\tif (link.params && typeof link.params === 'object') {\n\t\t\t\t\tresolved.params = resolveFilterTokens(link.params, this.tokenCtx)\n\t\t\t\t}\n\t\t\t\tif (link.query && typeof link.query === 'object') {\n\t\t\t\t\tresolved.query = resolveFilterTokens(link.query, this.tokenCtx)\n\t\t\t\t}\n\t\t\t} else if (typeof link.href === 'string') {\n\t\t\t\tresolved.href = link.href\n\t\t\t}\n\t\t\treturn resolved\n\t\t},\n\n\t\t/** @return {string} The header note with `{total}` filled. */\n\t\theaderNote() {\n\t\t\tconst note = this.content?.headerNote\n\t\t\treturn typeof note === 'string' && note !== '' ? this.withTotal(note) : ''\n\t\t},\n\n\t\t/**\n\t\t * Why the list is empty when a personal lens could not answer\n\t\t * (`@self.lenses.<lens>.available: false`, as for `filter: { _recent: true }`),\n\t\t * or '' to keep `emptyText`. `lensReasonTexts` holds the app's wording,\n\t\t * keyed `<lens>.<reason>` or `<reason>`.\n\t\t *\n\t\t * @return {string} The explanation, or ''.\n\t\t * @spec openspec/changes/screens-record-list-lens-reason/specs/record-list-lens-reason/spec.md#requirement-a-record-list-says-why-a-lens-is-empty\n\t\t */\n\t\tlensReasonText() {\n\t\t\tif (this.rows.length > 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst text = lensUnavailableText(this.lenses, this.content?.lensReasonTexts)\n\t\t\treturn text ? this.translate(text) : ''\n\t\t},\n\n\t\t/** @return {string} The empty line. */\n\t\temptyLabel() {\n\t\t\tif (this.lensReasonText !== '') {\n\t\t\t\treturn this.lensReasonText\n\t\t\t}\n\t\t\treturn this.content?.emptyText ? this.translate(this.content.emptyText) : t('nextcloud-vue', 'Nothing here yet')\n\t\t},\n\n\t\t/** @return {string} The error line. */\n\t\terrorLabel() {\n\t\t\treturn this.content?.errorText ? this.translate(this.content.errorText) : t('nextcloud-vue', 'This list could not be loaded.')\n\t\t},\n\n\t\t/** @return {string} The spinner's accessible name. */\n\t\tloadingLabel() {\n\t\t\treturn t('nextcloud-vue', 'Loading …')\n\t\t},\n\t},\n\n\twatch: {\n\t\trequestKey() {\n\t\t\tthis.fetchRows()\n\t\t},\n\n\t\tendpointKey() {\n\t\t\tthis.fetchRows()\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.onRefresh = () => this.fetchRows()\n\t\tsubscribe(PAGE_REFRESH_CHANNEL, this.onRefresh)\n\t\tthis.fetchRows()\n\t},\n\n\tbeforeUnmount() {\n\t\tunsubscribe(PAGE_REFRESH_CHANNEL, this.onRefresh)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Translate a manifest string through the host app.\n\t\t *\n\t\t * @param {string} text The text.\n\t\t * @return {string} The translation.\n\t\t */\n\t\ttranslate(text) {\n\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The initials of the row's avatar (`avatar`: a name template such as\n\t\t * `\"{client.name}\"`, or `{ text }`), or '' without one.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} One or two letters.\n\t\t * @spec openspec/changes/screens-record-list-avatar/specs/record-list-avatar/spec.md#requirement-a-record-list-row-can-carry-an-avatar\n\t\t */\n\t\tinitialsFor(row) {\n\t\t\tconst avatar = this.content?.avatar\n\t\t\tconst template = typeof avatar === 'string' ? avatar : (avatar && typeof avatar === 'object' ? avatar.text : '')\n\t\t\treturn initialsOf(this.fill(template, row))\n\t\t},\n\n\t\t/**\n\t\t * Fill a template from a row, after translating it.\n\t\t *\n\t\t * @param {string} template The template.\n\t\t * @param {object} row The row.\n\t\t * @return {string} The text, '' when a token is empty.\n\t\t */\n\t\tfill(template, row) {\n\t\t\treturn typeof template === 'string' && template !== '' ? fillTemplate(this.translate(template), this.labelledRow(row), new Date(), this.templateContext) : ''\n\t\t},\n\n\t\t/**\n\t\t * The row as the templates read it: a field named in `valueLabels`\n\t\t * (`{ channel: { phone: \"Phone\", telefoon: \"Phone\" } }`) shows the\n\t\t * translated label of its stored value, so \"{channel}\" reads \"Telefoon\"\n\t\t * for both spellings the data holds. A value without a label stays as\n\t\t * stored. The pill, the badges and the sort read the stored value.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {object} The row, or a shallow copy with labelled fields.\n\t\t * @spec openspec/changes/screens-record-list-value-labels/specs/record-list-value-labels/spec.md#requirement-a-record-list-template-can-show-a-label-for-a-stored-value\n\t\t */\n\t\tlabelledRow(row) {\n\t\t\tconst map = this.content?.valueLabels\n\t\t\tif (!row || typeof row !== 'object' || !map || typeof map !== 'object') {\n\t\t\t\treturn row\n\t\t\t}\n\t\t\tlet out = row\n\t\t\tfor (const [field, labels] of Object.entries(map)) {\n\t\t\t\tconst raw = row[field]\n\t\t\t\tif (!labels || typeof labels !== 'object' || (typeof raw !== 'string' && typeof raw !== 'number')) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst label = labels[String(raw)]\n\t\t\t\tif (typeof label === 'string' && label !== '') {\n\t\t\t\t\tif (out === row) {\n\t\t\t\t\t\tout = { ...row }\n\t\t\t\t\t}\n\t\t\t\t\tout[field] = this.translate(label)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Replace `{total}` in a translated label.\n\t\t *\n\t\t * @param {string} label The label.\n\t\t * @return {string} The text.\n\t\t */\n\t\twithTotal(label) {\n\t\t\treturn this.translate(label).replace(/\\{total\\}/g, String(this.total))\n\t\t},\n\n\t\t/**\n\t\t * The route a row opens: `rowRoute` with the id at `rowIdField`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {object|null} The router location, or null.\n\t\t */\n\t\t/**\n\t\t * The one action that ends a row (`rowAction`): its label (from\n\t\t * `labels.map` by the row's `labels.field`, else `label`), and how it\n\t\t * renders: a link when it only navigates, else a button that\n\t\t * dispatches. Null without the key or a label.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {{label: string, tag: string, attrs: object}|null}\n\t\t * @spec openspec/changes/screens-record-list-row-action/specs/record-list/spec.md\n\t\t */\n\t\trowActionOf(row) {\n\t\t\tconst action = this.content?.rowAction\n\t\t\tif (!action || typeof action !== 'object' || !row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tlet label = typeof action.label === 'string' ? action.label : ''\n\t\t\tconst by = action.labels\n\t\t\tif (by && typeof by === 'object' && typeof by.field === 'string' && by.map && typeof by.map === 'object') {\n\t\t\t\tconst raw = readPath(row, by.field)\n\t\t\t\tif (raw !== null && raw !== undefined && typeof by.map[String(raw)] === 'string') {\n\t\t\t\t\tlabel = by.map[String(raw)]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (label === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tlabel = this.translate(label)\n\t\t\tconst link = this.rowActionLink(action, row)\n\t\t\tif (link) {\n\t\t\t\treturn link.external\n\t\t\t\t\t? { label, tag: 'a', attrs: { href: link.href, target: '_blank', rel: 'noopener' } }\n\t\t\t\t\t: { label, tag: 'router-link', attrs: { to: link.to } }\n\t\t\t}\n\t\t\treturn { label, tag: 'button', attrs: { type: 'button' } }\n\t\t},\n\n\t\t/**\n\t\t * The link a `rowAction` that only navigates renders as: `open-page`\n\t\t * opens that page for the row's id, `navigate` reads its\n\t\t * `@object.<field>` / `@objectId` tokens off the row. Null for any\n\t\t * other action, which is dispatched on click.\n\t\t *\n\t\t * @param {object} action The declared row action.\n\t\t * @param {object} row The row.\n\t\t * @return {{href: string, to: (string|object|null), external: boolean}|null}\n\t\t * @spec openspec/changes/screens-record-list-row-action/specs/record-list/spec.md\n\t\t */\n\t\trowActionLink(action, row) {\n\t\t\tif (action.confirm) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tif (action.type === 'open-page') {\n\t\t\t\tconst id = this.rowIdOf(row)\n\t\t\t\tif (!this.$router || id === null || typeof action.target !== 'string' || action.target === '') {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst to = { name: action.target, params: { id } }\n\t\t\t\ttry {\n\t\t\t\t\tconst href = this.$router.resolve(to).href\n\t\t\t\t\treturn href ? { href, to, external: false } : null\n\t\t\t\t} catch {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (action.type !== 'navigate') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst target = interpolateActionTarget(action.target, this.rowTokenCtx(row))\n\t\t\t// An external target needs no router; an in-app one does.\n\t\t\treturn actionLink({ ...action, target }, { router: this.$router || null })\n\t\t},\n\n\t\t/**\n\t\t * The token context of a row: the row is `@object`, its id `@objectId`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {object} The token context.\n\t\t */\n\t\trowTokenCtx(row) {\n\t\t\treturn { ...this.tokenCtx, objectId: this.rowIdOf(row), object: row }\n\t\t},\n\n\t\t/**\n\t\t * The id of a row (`rowIdField`, else `id`, else `@self.id`), or null.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string|null} The id.\n\t\t */\n\t\trowIdOf(row) {\n\t\t\tconst field = this.content?.rowIdField\n\t\t\tconst id = field ? readPath(row, field) : (row && (row.id || row['@self']?.id))\n\t\t\treturn (id === null || id === undefined || id === '' || typeof id === 'object') ? null : String(id)\n\t\t},\n\n\t\t/**\n\t\t * Run a `rowAction` that is not a plain link through the page's\n\t\t * dispatcher: a `handler` gets the row as its last argument, an\n\t\t * `open-modal` gets it as the `row` prop, an `object-op` acts on it.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {unknown} What the dispatcher returns.\n\t\t * @spec openspec/changes/screens-record-list-row-action/specs/record-list/spec.md\n\t\t */\n\t\trunRowAction(row) {\n\t\t\tconst action = this.content?.rowAction\n\t\t\tif (!action || typeof action !== 'object') {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst type = action.type || 'handler'\n\t\t\tlet wrapped = action\n\t\t\tif (type === 'handler') {\n\t\t\t\twrapped = { ...action, args: [...(action.args || []), row] }\n\t\t\t} else if (type === 'open-modal') {\n\t\t\t\twrapped = { ...action, props: { ...(action.props || {}), row } }\n\t\t\t}\n\t\t\tif (typeof this.cnDispatchAction === 'function') {\n\t\t\t\treturn this.cnDispatchAction(wrapped)\n\t\t\t}\n\t\t\treturn dispatchAction(wrapped, { router: this.$router || null, row, tokenCtx: this.rowTokenCtx(row), source: { register: this.content?.register, schema: this.content?.schema } })\n\t\t},\n\n\t\trowLink(row) {\n\t\t\tconst route = this.content?.rowRoute\n\t\t\tif (!route || !this.$router || !row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst field = this.content?.rowIdField\n\t\t\tconst id = field ? readPath(row, field) : (row.id || row['@self']?.id)\n\t\t\tif (id === null || id === undefined || id === '' || typeof id === 'object') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn { name: route, params: { id: String(id) } }\n\t\t},\n\n\t\t/**\n\t\t * The row's due text (`due`: `{ field, todayLabel?, overdueLabel?, upcomingLabel?, upcomingWeeksLabel?, upcomingWeeksFrom?, emptyText? }`):\n\t\t * \"3 dagen te laat\" in the danger tone, \"Vandaag\", the date or the time\n\t\t * left (\"nog 4 dagen\") otherwise, `emptyText` when the field is empty.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {{text: string, tone: string}|null} The text and tone, or null.\n\t\t * @spec openspec/changes/screens-due-text/specs/due-text/spec.md#requirement-a-due-date-reads-as-text-with-a-tone\n\t\t */\n\t\tdueOf(row) {\n\t\t\tconst due = this.content?.due\n\t\t\tif (!due || typeof due !== 'object' || !due.field) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolveDue(readPath(row, due.field), due, (text) => this.translate(text))\n\t\t},\n\n\t\t/**\n\t\t * The row's extra badges (`badges`): a coloured badge from a field\n\t\t * (`{ field, labels?, colorMap?, variant?, hideValues? }`, the value\n\t\t * shown unless `hideValues` lists it) and an age badge\n\t\t * (`{ kind: \"stale\", field, afterDays, label?, variant? }`, shown when the\n\t\t * date field is older than `afterDays` whole days; `{days}` in the\n\t\t * label is the age).\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{key: string, kind: string, label: string, variant: string}>} The badges that apply.\n\t\t * @spec openspec/changes/screens-record-list-badges/specs/record-list-badges/spec.md#requirement-a-record-list-row-can-carry-badges\n\t\t */\n\t\tbadgesOf(row) {\n\t\t\tconst declared = Array.isArray(this.content?.badges) ? this.content.badges : []\n\t\t\tconst out = []\n\t\t\tdeclared.forEach((badge, index) => {\n\t\t\t\tif (!badge || typeof badge !== 'object' || !badge.field) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (badge.kind === 'stale') {\n\t\t\t\t\tconst days = ageInDays(readPath(row, badge.field))\n\t\t\t\t\tconst after = Number(badge.afterDays)\n\t\t\t\t\tif (days === null || !Number.isFinite(after) || days <= after) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconst template = this.translate(badge.label || 'Stale')\n\t\t\t\t\tout.push({\n\t\t\t\t\t\tkey: `stale-${index}`,\n\t\t\t\t\t\tkind: 'stale',\n\t\t\t\t\t\tlabel: template.replace(/\\{days\\}/g, String(days)),\n\t\t\t\t\t\tvariant: isBadgeVariant(badge.variant) ? badge.variant : 'warning',\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst made = this.pillOf(row, badge)\n\t\t\t\tif (made) {\n\t\t\t\t\tout.push({ key: `field-${index}`, kind: 'field', ...made })\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The row's meta line. A string is one template, and one empty token\n\t\t * empties it. `{ parts: [\"{identifier}\", \"{caseTypeName}\", \"{handler}\"],\n\t\t * separator? }` fills each part on its own, drops the empty ones and\n\t\t * joins the rest (default \" · \"), so a row without a handler still\n\t\t * reads \"2026-0082 · Woo-verzoek\".\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} The meta line, '' when nothing fills.\n\t\t * @spec openspec/changes/screens-record-list-meta-parts/specs/record-list-meta-parts/spec.md#requirement-a-meta-line-of-parts-skips-the-empty-ones\n\t\t */\n\t\tmetaOf(row) {\n\t\t\tconst meta = this.content?.meta\n\t\t\tif (!meta || typeof meta !== 'object' || !Array.isArray(meta.parts)) {\n\t\t\t\treturn this.fill(meta, row)\n\t\t\t}\n\t\t\tconst separator = typeof meta.separator === 'string' ? meta.separator : ' · '\n\t\t\treturn meta.parts\n\t\t\t\t.map((part) => this.fill(part, row))\n\t\t\t\t.filter((text) => text !== '')\n\t\t\t\t.join(separator)\n\t\t},\n\n\t\t/**\n\t\t * The row's pill: `{ field, labels?, colorMap?, variant?, hideValues? }`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {object} [config] A pill config; the widget's `pill` by default.\n\t\t * @return {{label: string, variant: string}|null} The pill, or null.\n\t\t */\n\t\tpillOf(row, config) {\n\t\t\tconst pill = config || this.content?.pill\n\t\t\tif (!pill || typeof pill !== 'object' || !pill.field) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst raw = readPath(row, pill.field)\n\t\t\tif (raw === null || raw === undefined || raw === '' || typeof raw === 'object') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst key = String(raw)\n\t\t\tif (Array.isArray(pill.hideValues) && pill.hideValues.map(String).includes(key)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst labels = pill.labels && typeof pill.labels === 'object' ? pill.labels : {}\n\t\t\tconst map = pill.colorMap && typeof pill.colorMap === 'object' ? pill.colorMap : {}\n\t\t\tconst found = Object.keys(map).find((k) => k.toLowerCase() === key.toLowerCase())\n\t\t\tconst variant = found ? map[found] : pill.variant\n\t\t\treturn {\n\t\t\t\tlabel: labels[key] ? this.translate(labels[key]) : key,\n\t\t\t\tvariant: isBadgeVariant(variant) ? variant : 'default',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The feed icon: an icon name, or `{ field, map, default }`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} The MDI icon name.\n\t\t */\n\t\ticonOf(row) {\n\t\t\tconst icon = this.content?.icon\n\t\t\tif (typeof icon === 'string' && icon !== '') {\n\t\t\t\treturn icon\n\t\t\t}\n\t\t\tif (icon && typeof icon === 'object') {\n\t\t\t\tconst raw = icon.field ? readPath(row, icon.field) : undefined\n\t\t\t\tconst map = icon.map && typeof icon.map === 'object' ? icon.map : {}\n\t\t\t\tif (raw !== null && raw !== undefined && map[String(raw)]) {\n\t\t\t\t\treturn map[String(raw)]\n\t\t\t\t}\n\t\t\t\tif (typeof icon.default === 'string' && icon.default !== '') {\n\t\t\t\t\treturn icon.default\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 'CircleSmall'\n\t\t},\n\n\t\t/** Tell the card around this list what its header shows. */\n\t\temitHeader() {\n\t\t\tconst header = { link: this.headerLink, note: this.headerNote }\n\t\t\t// `headerCount: true`: the card draws the total as a chip after its title.\n\t\t\tif (this.content?.headerCount === true && !this.error) {\n\t\t\t\theader.count = this.total\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event header Emitted after every read with the card header's parts.\n\t\t\t * @type {{link: (object|null), note: string, count: (number|undefined)}} The header link (resolved, with `{total}` filled), the note, and with `headerCount` the total.\n\t\t\t */\n\t\t\tthis.$emit('header', header)\n\t\t},\n\n\t\t/**\n\t\t * The rank list of a sort (`{ field, rank: [\"urgent\", \"high\", \"normal\", \"low\"], then? }`),\n\t\t * or null when the sort has none or the list's own filter already fixes the field.\n\t\t *\n\t\t * @param {object|null} sort The effective sort.\n\t\t * @return {Array<string>|null} The values in rank order.\n\t\t * @spec openspec/changes/screens-enum-rank-sort/specs/enum-rank-sort/spec.md#requirement-a-record-list-can-sort-by-the-rank-of-an-enum-value\n\t\t */\n\t\trankOf(sort) {\n\t\t\tif (!sort || typeof sort !== 'object' || !sort.field || !Array.isArray(sort.rank)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst rank = sort.rank.filter((value) => typeof value === 'string' && value !== '')\n\t\t\tif (rank.length === 0 || Object.hasOwn(this.resolvedFilter || {}, sort.field)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn rank\n\t\t},\n\n\t\t/**\n\t\t * Read a list in the rank of an enum field. The list endpoint orders a\n\t\t * text field alphabetically (\"high\", \"low\", \"normal\", \"urgent\"), so the\n\t\t * rows are read one rank at a time, best first, each with the rest of the\n\t\t * sort (`then`) inside it, until the page is full; the rows with a value\n\t\t * outside the rank (or none) follow. The result is exact, not a client-side\n\t\t * sort of a partial page. It costs one request for the total, one per rank\n\t\t * value read and one for the remainder.\n\t\t *\n\t\t * @param {(params: object) => Promise<object>} get Reads the list with the given params.\n\t\t * @param {object} base The params without any order.\n\t\t * @param {{field: string, then?: {field: string, dir?: string}}} sort The sort.\n\t\t * @param {Array<string>} rank The values in rank order.\n\t\t * @return {Promise<{rows: Array<object>, total: number}>} The page and the total.\n\t\t * @spec openspec/changes/screens-enum-rank-sort/specs/enum-rank-sort/spec.md#requirement-a-record-list-can-sort-by-the-rank-of-an-enum-value\n\t\t */\n\t\tasync fetchRanked(get, base, sort, rank) {\n\t\t\tconst order = {}\n\t\t\tif (sort.then && typeof sort.then === 'object' && sort.then.field) {\n\t\t\t\torder[`_order[${sort.then.field}]`] = sort.then.dir === 'desc' ? 'desc' : 'asc'\n\t\t\t}\n\t\t\tconst read = async (extra) => {\n\t\t\t\tconst response = await get({ ...base, ...order, ...extra })\n\t\t\t\tconst data = response && response.data ? response.data : {}\n\t\t\t\treturn { results: Array.isArray(data.results) ? data.results : [], total: data.total }\n\t\t\t}\n\t\t\tconst head = await read({ _limit: 1 })\n\t\t\tconst rows = []\n\t\t\tconst seen = new Set()\n\t\t\tconst idOf = (row) => (row && (row.id || row['@self']?.id)) || null\n\t\t\tconst take = (list) => {\n\t\t\t\tfor (const row of list) {\n\t\t\t\t\tconst id = idOf(row)\n\t\t\t\t\tif (id !== null && seen.has(id)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (id !== null) {\n\t\t\t\t\t\tseen.add(id)\n\t\t\t\t\t}\n\t\t\t\t\tif (rows.length < this.limit) {\n\t\t\t\t\t\trows.push(row)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const value of rank) {\n\t\t\t\tif (rows.length >= this.limit) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\ttake((await read({ [sort.field]: value, _limit: this.limit - rows.length })).results)\n\t\t\t}\n\t\t\tif (rows.length < this.limit) {\n\t\t\t\ttake((await read({ _limit: this.limit + rows.length })).results)\n\t\t\t}\n\t\t\treturn { rows, total: typeof head.total === 'number' ? head.total : rows.length }\n\t\t},\n\n\t\t/**\n\t\t * Copy the endpoint read into the list: its payload must be an array of\n\t\t * rows (anything else is an empty list), and a failed read is an error.\n\t\t *\n\t\t * @spec openspec/changes/endpoint-source-card-grid-record-list/specs/dashboard-page/spec.md#requirement-a-record-list-and-a-card-grid-can-read-an-endpoint\n\t\t */\n\t\ttakeEndpointRows() {\n\t\t\tthis.rows = Array.isArray(this.epData) ? this.epData : []\n\t\t\tthis.total = this.rows.length\n\t\t\tthis.loading = this.epLoading === true\n\t\t\tthis.error = Boolean(this.epError)\n\t\t\tthis.lenses = {}\n\t\t\tif (!this.loading) {\n\t\t\t\tthis.emitHeader()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch the list. Sends nothing while a required token is unresolved\n\t\t * or the source is incomplete.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync fetchRows() {\n\t\t\tconst c = this.content || {}\n\t\t\tif (this.endpointActive) {\n\t\t\t\tthis.takeEndpointRows()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!c.register || !c.schema || this.waiting) {\n\t\t\t\tthis.rows = []\n\t\t\t\tthis.total = 0\n\t\t\t\tthis.error = false\n\t\t\t\tthis.emitHeader()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tconst run = this.fetchRun = (this.fetchRun || 0) + 1\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: c.register, schema: c.schema })\n\t\t\t\tconst sort = this.effectiveSort\n\t\t\t\tconst params = { _limit: this.limit }\n\t\t\t\t// A rank sort (`sort.rank`) cannot be one `_order`: the list endpoint\n\t\t\t\t// orders a text field alphabetically. It is read group by group below.\n\t\t\t\tconst rank = this.rankOf(sort)\n\t\t\t\tif (!rank && sort && typeof sort === 'object' && sort.field) {\n\t\t\t\t\tparams[`_order[${sort.field}]`] = sort.dir === 'desc' ? 'desc' : 'asc'\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(c.extend)) {\n\t\t\t\t\tconst extend = c.extend.filter((e) => typeof e === 'string' && e !== '')\n\t\t\t\t\tif (extend.length > 0) {\n\t\t\t\t\t\tparams._extend = extend\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const [key, value] of Object.entries(this.resolvedFilter)) {\n\t\t\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\t\t\tfor (const [op, operand] of Object.entries(value)) {\n\t\t\t\t\t\t\tparams[`${key}[${op}]`] = operand\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== '' && value !== null && value !== undefined) {\n\t\t\t\t\t\tparams[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (rank) {\n\t\t\t\t\t// Several requests: a fetch started later (the sort changed\n\t\t\t\t\t// meanwhile) must not be overwritten by this one.\n\t\t\t\t\tconst ranked = await this.fetchRanked((query) => axios.get(url, { params: query }), params, sort, rank)\n\t\t\t\t\tif (run !== this.fetchRun) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tthis.rows = ranked.rows\n\t\t\t\t\tthis.total = ranked.total\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst response = await axios.get(url, { params })\n\t\t\t\tconst data = response && response.data ? response.data : {}\n\t\t\t\tthis.rows = Array.isArray(data.results) ? data.results : []\n\t\t\t\tthis.total = typeof data.total === 'number' ? data.total : this.rows.length\n\t\t\t\tthis.lenses = readLensReports(data)\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn('[CnRecordListWidget] failed to load objects:', e)\n\t\t\t\tthis.lenses = {}\n\t\t\t\tthis.rows = []\n\t\t\t\tthis.total = 0\n\t\t\t\tthis.error = true\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t\tthis.emitHeader()\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-record-list__list {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.cn-record-list__empty,\n.cn-record-list__error {\n\tcolor: var(--color-text-maxcontrast);\n\tmargin: 0;\n}\n\n.cn-record-list__loading {\n\tdisplay: flex;\n\tjustify-content: center;\n\tpadding: 8px 0;\n}\n\n/* rows */\n.cn-record-list--rows .cn-record-list__item + .cn-record-list__item {\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-record-list__row {\n\talign-items: center;\n\tcolor: var(--color-main-text);\n\tdisplay: flex;\n\tgap: 16px;\n\tpadding: 12px 0;\n\ttext-decoration: none;\n}\n\n.cn-record-list__row--link:hover .cn-record-list__title,\n.cn-record-list__row--link:focus-visible .cn-record-list__title {\n\ttext-decoration: underline;\n}\n\n.cn-record-list__avatar {\n\talign-items: center;\n\tbackground: var(--color-background-hover);\n\tborder-radius: 50%;\n\tcolor: var(--color-main-text);\n\tdisplay: flex;\n\tflex: none;\n\tfont-size: 12px;\n\tfont-weight: 700;\n\theight: 36px;\n\tjustify-content: center;\n\twidth: 36px;\n}\n\n.cn-record-list__main {\n\tdisplay: flex;\n\tflex: 1 1 auto;\n\tflex-direction: column;\n\tgap: 2px;\n\tmin-width: 0;\n}\n\n.cn-record-list__title {\n\tfont-size: 15px;\n\tfont-weight: 700;\n}\n\n.cn-record-list__meta {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-record-list__aside {\n\talign-items: center;\n\tdisplay: flex;\n\tflex: none;\n\tgap: 16px;\n}\n\n.cn-record-list__trailing {\n\tfont-size: 14px;\n\twhite-space: nowrap;\n}\n\n.cn-record-list__due {\n\tfont-size: 14px;\n\twhite-space: nowrap;\n}\n\n.cn-record-list__due--danger {\n\tcolor: var(--color-text-error, var(--color-error-text));\n\tfont-weight: 600;\n}\n\n.cn-record-list__due--empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-record-list__row--action {\n\tflex-wrap: wrap;\n\tgap: 8px 16px;\n\tpadding: 14px 0;\n}\n\n.cn-record-list__row--action .cn-record-list__main {\n\tflex: 1 1 280px;\n\tgap: 3px;\n}\n\n.cn-record-list__title--link {\n\tcolor: var(--color-main-text);\n\ttext-decoration: underline;\n}\n\n.cn-record-list__pills {\n\tdisplay: flex;\n\tflex: 0 0 120px;\n\tgap: 6px;\n\tjustify-content: flex-end;\n}\n\n.cn-record-list__due--column {\n\tflex: 0 0 96px;\n\tfont-size: 13px;\n\ttext-align: end;\n}\n\n.cn-record-list__action {\n\talign-items: center;\n\tbackground: var(--color-primary-element-light);\n\tborder: 0;\n\tborder-radius: 17px;\n\tbox-sizing: border-box;\n\tcolor: var(--color-primary-element-light-text, var(--color-primary-element));\n\tcursor: pointer;\n\tdisplay: inline-flex;\n\tflex: 0 0 150px;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\theight: 34px;\n\tjustify-content: center;\n\tpadding: 0 14px;\n\ttext-decoration: none;\n}\n\n.cn-record-list__action:hover,\n.cn-record-list__action:focus-visible {\n\tbackground: var(--color-primary-element-light-hover, var(--color-primary-element-light));\n}\n\n.cn-record-list__chevron {\n\tcolor: var(--color-text-maxcontrast);\n\tflex: none;\n}\n\n/* cards (board ShBank): a grid of framed cards, 240px at the least. */\n.cn-record-list--cards .cn-record-list__list {\n\talign-items: start;\n\tdisplay: grid;\n\tgap: 16px;\n\tgrid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n}\n\n.cn-record-list__card {\n\tbackground: var(--color-main-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: 12px;\n\tbox-sizing: border-box;\n\tcolor: var(--color-main-text);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\tpadding: 16px 18px;\n\ttext-decoration: none;\n}\n\n.cn-record-list__card--link:hover,\n.cn-record-list__card--link:focus-visible {\n\tborder-color: var(--color-border-dark, var(--color-border));\n}\n\n.cn-record-list__card--link:hover .cn-record-list__title,\n.cn-record-list__card--link:focus-visible .cn-record-list__title {\n\ttext-decoration: underline;\n}\n\n.cn-record-list__card-head {\n\talign-items: center;\n\tdisplay: flex;\n\tgap: 8px;\n\tjustify-content: space-between;\n}\n\n.cn-record-list__card-title {\n\talign-items: center;\n\tdisplay: flex;\n\tgap: 8px;\n\tmin-width: 0;\n}\n\n.cn-record-list__card-icon {\n\tcolor: var(--color-primary-element);\n\tflex: none;\n}\n\n.cn-record-list__card-pills {\n\tdisplay: flex;\n\tflex: none;\n\tgap: 6px;\n}\n\n.cn-record-list__card-value {\n\tfont-size: 24px;\n\tfont-weight: 700;\n}\n\n/* feed */\n.cn-record-list--feed .cn-record-list__item + .cn-record-list__item {\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-record-list__feed-row {\n\talign-items: flex-start;\n\tdisplay: flex;\n\tgap: 14px;\n\tpadding: 12px 0;\n}\n\n.cn-record-list__feed-icon {\n\talign-items: center;\n\tbackground: var(--color-primary-element-light);\n\tborder-radius: 50%;\n\tcolor: var(--color-primary-element-light-text, var(--color-primary-element));\n\tdisplay: flex;\n\tflex: none;\n\theight: 36px;\n\tjustify-content: center;\n\twidth: 36px;\n}\n\n.cn-record-list__text {\n\tfont-size: 15px;\n}\n\n.cn-record-list--feed .cn-record-list__main {\n\tcolor: var(--color-main-text);\n\ttext-decoration: none;\n}\n\n/* inline */\n.cn-record-list__inline-row {\n\tpadding: 4px 0;\n}\n\n.cn-record-list__label {\n\tmargin-inline-end: 4px;\n}\n\n.cn-record-list__inline-title {\n\tcolor: var(--color-main-text);\n}\n\na.cn-record-list__inline-title {\n\tcolor: var(--color-primary-element);\n\ttext-decoration: underline;\n}\n</style>\n\n<style>\n/* In a narrow side column a row stacks: title, meta, then pill and date. */\n.cn-detail-page__side .cn-record-list__row {\n\talign-items: flex-start;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.cn-detail-page__side .cn-record-list__row .cn-record-list__title {\n\tcolor: var(--color-primary-element);\n\ttext-decoration: underline;\n}\n\n.cn-detail-page__side .cn-record-list__chevron {\n\tdisplay: none;\n}\n\n/* A row is a touch target of at least 44px on a phone. */\n@media (max-width: 640px) {\n\t.cn-record-list__row {\n\t\tmin-height: 44px;\n\t}\n}\n</style>\n"],"names":["CnIcon","CnStatusBadge","t"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CnRecordListWidget.vue2.js","sources":["../../../../src/components/CnRecordListWidget/CnRecordListWidget.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div\n\t\tclass=\"cn-record-list\"\n\t\t:class=\"`cn-record-list--${presentation}`\"\n\t\tdata-testid=\"cn-record-list\">\n\t\t<p v-if=\"error\" class=\"cn-record-list__error\" data-testid=\"cn-record-list-error\">\n\t\t\t{{ errorLabel }}\n\t\t</p>\n\t\t<div v-else-if=\"loading && rows.length === 0\" class=\"cn-record-list__loading\">\n\t\t\t<NcLoadingIcon :size=\"20\" :name=\"loadingLabel\" />\n\t\t</div>\n\t\t<p v-else-if=\"rows.length === 0\" class=\"cn-record-list__empty\" data-testid=\"cn-record-list-empty\">\n\t\t\t{{ emptyLabel }}\n\t\t</p>\n\t\t<ul v-else class=\"cn-record-list__list\">\n\t\t\t<li\n\t\t\t\tv-for=\"item in items\"\n\t\t\t\t:key=\"item.key\"\n\t\t\t\tclass=\"cn-record-list__item\"\n\t\t\t\tdata-testid=\"cn-record-list-item\">\n\t\t\t\t<!-- rows with `rowAction`: the title is the link, and one action\n\t\t\t\t ends the row instead of the chevron (\"Beoordelen\"). -->\n\t\t\t\t<div\n\t\t\t\t\tv-if=\"presentation === 'rows' && item.action\"\n\t\t\t\t\tclass=\"cn-record-list__row cn-record-list__row--action\">\n\t\t\t\t\t<span v-if=\"item.initials\"\n\t\t\t\t\t\tclass=\"cn-record-list__avatar\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-avatar\">{{ item.initials }}</span>\n\t\t\t\t\t<span class=\"cn-record-list__main\">\n\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t:is=\"item.tag\"\n\t\t\t\t\t\t\tv-if=\"item.title\"\n\t\t\t\t\t\t\tclass=\"cn-record-list__title\"\n\t\t\t\t\t\t\t:class=\"{ 'cn-record-list__title--link': item.tag !== 'div' }\"\n\t\t\t\t\t\t\tv-bind=\"item.attrs\">\n\t\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t\t</component>\n\t\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span v-if=\"item.pill || item.badges.length > 0\" class=\"cn-record-list__pills\">\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-if=\"item.pill\"\n\t\t\t\t\t\t\t:label=\"item.pill.label\"\n\t\t\t\t\t\t\t:variant=\"item.pill.variant\"\n\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-for=\"badge in item.badges\"\n\t\t\t\t\t\t\t:key=\"badge.key\"\n\t\t\t\t\t\t\t:label=\"badge.label\"\n\t\t\t\t\t\t\t:variant=\"badge.variant\"\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t:data-testid=\"`cn-record-list-badge-${badge.kind}`\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tv-if=\"item.due\"\n\t\t\t\t\t\tclass=\"cn-record-list__due cn-record-list__due--column\"\n\t\t\t\t\t\t:class=\"`cn-record-list__due--${item.due.tone}`\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-due\">{{ item.due.text }}</span>\n\t\t\t\t\t<span v-if=\"item.trailing\" class=\"cn-record-list__trailing\">{{ item.trailing }}</span>\n\t\t\t\t\t<component\n\t\t\t\t\t\t:is=\"item.action.tag\"\n\t\t\t\t\t\tclass=\"cn-record-list__action\"\n\t\t\t\t\t\tv-bind=\"item.action.attrs\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-action\"\n\t\t\t\t\t\tv-on=\"item.action.tag === 'button' ? { click: () => runRowAction(item.row) } : {}\">\n\t\t\t\t\t\t{{ item.action.label }}\n\t\t\t\t\t</component>\n\t\t\t\t</div>\n\t\t\t\t<!-- rows: title and meta, then the pill, the date and a chevron. -->\n\t\t\t\t<component\n\t\t\t\t\t:is=\"item.tag\"\n\t\t\t\t\tv-else-if=\"presentation === 'rows'\"\n\t\t\t\t\tclass=\"cn-record-list__row\"\n\t\t\t\t\t:class=\"{ 'cn-record-list__row--link': item.tag !== 'div' }\"\n\t\t\t\t\tv-bind=\"item.attrs\">\n\t\t\t\t\t<span v-if=\"item.initials\"\n\t\t\t\t\t\tclass=\"cn-record-list__avatar\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tdata-testid=\"cn-record-list-avatar\">{{ item.initials }}</span>\n\t\t\t\t\t<span class=\"cn-record-list__main\">\n\t\t\t\t\t\t<span v-if=\"item.title\" class=\"cn-record-list__title\">{{ item.title }}</span>\n\t\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span v-if=\"item.pill || item.badges.length > 0 || item.due || item.trailing\" class=\"cn-record-list__aside\">\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-if=\"item.pill\"\n\t\t\t\t\t\t\t:label=\"item.pill.label\"\n\t\t\t\t\t\t\t:variant=\"item.pill.variant\"\n\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\tv-for=\"badge in item.badges\"\n\t\t\t\t\t\t\t:key=\"badge.key\"\n\t\t\t\t\t\t\t:label=\"badge.label\"\n\t\t\t\t\t\t\t:variant=\"badge.variant\"\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t:data-testid=\"`cn-record-list-badge-${badge.kind}`\" />\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"item.due\"\n\t\t\t\t\t\t\tclass=\"cn-record-list__due\"\n\t\t\t\t\t\t\t:class=\"`cn-record-list__due--${item.due.tone}`\"\n\t\t\t\t\t\t\tdata-testid=\"cn-record-list-due\">{{ item.due.text }}</span>\n\t\t\t\t\t\t<span v-if=\"item.trailing\" class=\"cn-record-list__trailing\">{{ item.trailing }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronRight\n\t\t\t\t\t\tv-if=\"item.tag !== 'div'\"\n\t\t\t\t\t\tclass=\"cn-record-list__chevron\"\n\t\t\t\t\t\t:size=\"18\"\n\t\t\t\t\t\taria-hidden=\"true\" />\n\t\t\t\t</component>\n\n\t\t\t\t<!-- cards: a framed card per row, the icon and title with the pill\n\t\t\t\t beside them, the meta line, and `trailing` as the large figure. -->\n\t\t\t\t<component\n\t\t\t\t\t:is=\"item.tag\"\n\t\t\t\t\tv-else-if=\"presentation === 'cards'\"\n\t\t\t\t\tclass=\"cn-record-list__card\"\n\t\t\t\t\t:class=\"{ 'cn-record-list__card--link': item.tag !== 'div' }\"\n\t\t\t\t\tv-bind=\"item.attrs\"\n\t\t\t\t\tdata-testid=\"cn-record-list-card\">\n\t\t\t\t\t<span class=\"cn-record-list__card-head\">\n\t\t\t\t\t\t<span class=\"cn-record-list__card-title\">\n\t\t\t\t\t\t\t<CnIcon\n\t\t\t\t\t\t\t\tv-if=\"cardIcons\"\n\t\t\t\t\t\t\t\tclass=\"cn-record-list__card-icon\"\n\t\t\t\t\t\t\t\t:name=\"item.icon\"\n\t\t\t\t\t\t\t\t:size=\"18\" />\n\t\t\t\t\t\t\t<span v-if=\"item.title\" class=\"cn-record-list__title\">{{ item.title }}</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span v-if=\"item.pill || item.badges.length > 0\" class=\"cn-record-list__card-pills\">\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-if=\"item.pill\"\n\t\t\t\t\t\t\t\t:label=\"item.pill.label\"\n\t\t\t\t\t\t\t\t:variant=\"item.pill.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-for=\"badge in item.badges\"\n\t\t\t\t\t\t\t\t:key=\"badge.key\"\n\t\t\t\t\t\t\t\t:label=\"badge.label\"\n\t\t\t\t\t\t\t\t:variant=\"badge.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-record-list-badge-${badge.kind}`\" />\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t<span v-if=\"item.trailing\" class=\"cn-record-list__card-value\" data-testid=\"cn-record-list-card-value\">{{ item.trailing }}</span>\n\t\t\t\t</component>\n\n\t\t\t\t<!-- feed: a round icon, a meta line and the text. -->\n\t\t\t\t<div v-else-if=\"presentation === 'feed'\" class=\"cn-record-list__feed-row\">\n\t\t\t\t\t<span class=\"cn-record-list__feed-icon\" aria-hidden=\"true\">\n\t\t\t\t\t\t<CnIcon :name=\"item.icon\" :size=\"18\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<component :is=\"item.tag\" class=\"cn-record-list__main\" v-bind=\"item.attrs\">\n\t\t\t\t\t\t<span v-if=\"item.meta\" class=\"cn-record-list__meta\">{{ item.meta }}</span>\n\t\t\t\t\t\t<span v-if=\"item.text\" class=\"cn-record-list__text\">{{ item.text }}</span>\n\t\t\t\t\t</component>\n\t\t\t\t</div>\n\n\t\t\t\t<!-- inline: a label and the title, the title a link. -->\n\t\t\t\t<div v-else class=\"cn-record-list__inline-row\">\n\t\t\t\t\t<span v-if=\"item.label\" class=\"cn-record-list__label\">{{ item.label }}</span>\n\t\t\t\t\t<component :is=\"item.tag\" class=\"cn-record-list__inline-title\" v-bind=\"item.attrs\">\n\t\t\t\t\t\t{{ item.title }}\n\t\t\t\t\t</component>\n\t\t\t\t</div>\n\t\t\t\t<!-- `bar`: a thin track under the row, filled to the row's value\n\t\t\t\t against its own maximum or against the largest row. -->\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"presentation === 'rows' && item.bar\"\n\t\t\t\t\tclass=\"cn-record-list__bar\"\n\t\t\t\t\t:class=\"{ 'cn-record-list__bar--over': item.bar.over }\"\n\t\t\t\t\trole=\"meter\"\n\t\t\t\t\t:aria-label=\"item.title || null\"\n\t\t\t\t\t:aria-valuenow=\"item.bar.value\"\n\t\t\t\t\taria-valuemin=\"0\"\n\t\t\t\t\t:aria-valuemax=\"item.bar.max\"\n\t\t\t\t\tdata-testid=\"cn-record-list-bar\">\n\t\t\t\t\t<span class=\"cn-record-list__bar-fill\" :style=\"{ width: `${item.bar.share}%` }\" />\n\t\t\t\t</span>\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcLoadingIcon } from '@nextcloud/vue'\nimport { inject, ref } from 'vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport CnIcon from '../CnIcon/CnIcon.vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport { useEndpointSource } from '../../composables/useEndpointSource.js'\nimport { actionLink, dispatchAction, interpolateActionTarget } from '../../utils/actionsDispatcher.js'\nimport { isBadgeVariant } from '../../utils/badgeVariants.js'\nimport { ageInDays } from '../../utils/boardDate.js'\nimport { resolveDue } from '../../utils/dueText.js'\nimport { fillTemplate, firstFilled } from '../../utils/fillTemplate.js'\nimport { unwrapAppConfig } from '../../utils/formatMetric.js'\nimport { initialsOf } from '../../utils/initials.js'\nimport { lensUnavailableText, readLensReports } from '../../utils/lensAvailability.js'\nimport { pageFilter, pageSort } from '../../utils/pageControls.js'\nimport { readPath } from '../../utils/readPath.js'\nimport { dropOptionalUnresolved, hasUnresolvedTokens, resolveFilterTokens } from '../../utils/resolveFilterTokens.js'\n\nconst PAGE_REFRESH_CHANNEL = 'cn:page:refresh'\nconst PRESENTATIONS = ['rows', 'feed', 'inline', 'cards']\n\n/**\n * Unwrap a value that may be a ref.\n *\n * @param {unknown} value The value.\n * @return {unknown} The plain value.\n */\nfunction unwrap(value) {\n\treturn value && typeof value === 'object' && 'value' in value ? value.value : value\n}\n\n/**\n * CnRecordListWidget — the objects of another schema that point at this\n * record, drawn as the boards draw them (screens-relation-pages).\n *\n * A person page lists its open cases (\"Verlichting fietspad Lindelaan,\n * 2026-0082 · Woo-verzoek, In behandeling, Termijn 1 nov\"), its latest contact\n * moments (an icon by channel, a meta line, the summary) and its relations\n * (\"Secretaris van Buurtvereniging Oost\"). Each is a list of another schema's\n * objects filtered on a reference to this record. The source keys are those of\n * `object-list` (`register`, `schema`, `filter` with the `@objectId` /\n * `@object.<field>` / `@workspace.<key>` tokens, `sort`, `limit`, `extend`,\n * `rowRoute`, `pageControls`), or `endpointSource` (an app endpoint whose\n * payload, after `responsePath`, is the array of rows, as on the object table); `avatar` puts a circle with the initials of a name\n * template before the title; what differs is the drawing: `presentation` is `rows`, `feed`\n * or `inline`, and each line is a template (`\"{identifier} · {caseTypeName}\"`,\n * `\"Termijn {deadline|date}\"`). `cards` draws a framed card per row in a\n * grid, with `trailing` as the large figure (board ShBank's accounts).\n *\n * A content-only catalog type: on a card surface the detail host or the\n * dashboard page draws the titled card. The widget emits `header` with `{ link, note }` (the\n * `headerLink` and `headerNote` with `{total}` filled in) for that card's\n * header.\n */\nexport default {\n\tname: 'CnRecordListWidget',\n\n\tcomponents: { ChevronRight, CnIcon, CnStatusBadge, NcLoadingIcon },\n\n\tinject: {\n\t\t/** Detail-page object context (`{ objectId, object, register, schema }`). */\n\t\tcnObjectContext: { default: null },\n\t\t/** Page workspace bag, for `@workspace.<key>` tokens. */\n\t\tcnWorkspaceContext: { default: null },\n\t\t/** The host app's translate function. */\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/** The page's app config map; its `currency` is the reporting currency of a money token. */\n\t\tcnAppConfig: { default: () => ({}) },\n\t\t/** The page's pre-bound action dispatcher (CnPageRenderer), for `rowAction`. */\n\t\tcnDispatchAction: { default: null },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The list config: `{ register, schema, filter?, sort?, limit?, extend?,\n\t\t * presentation?, title?, meta?, text?, label?, pill?, trailing?, icon?,\n\t\t * rowRoute?, rowIdField?, headerLink?, headerNote?, emptyText?, errorText?,\n\t\t * valueLabels?, endpointSource?, bar? }`. `bar` (`{ valueField, maxField?,\n\t\t * overVariant? }`) draws a thin track under each row: filled to\n\t\t * `valueField` against `maxField` (drawn in the error colour past it\n\t\t * with `overVariant: \"error\"`), or without `maxField` against the\n\t\t * largest row. `endpointSource` (`{ url, method?,\n\t\t * params?, responsePath? }`) reads the rows from an app endpoint instead\n\t\t * of `register` / `schema`. `valueLabels` maps a field's stored values to the labels\n\t\t * the templates show.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The current record's id, for the `@objectId` token. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current record, for `@object.<field>` tokens. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['header'],\n\n\tsetup(props) {\n\t\tconst objectCtxRaw = inject('cnObjectContext', null)\n\t\tconst workspaceRaw = inject('cnWorkspaceContext', null)\n\t\tconst appConfigRaw = inject('cnAppConfig', ref({}))\n\t\tconst { data, loading, error } = useEndpointSource(\n\t\t\t() => props.content?.endpointSource || null,\n\t\t\t{\n\t\t\t\tctx: () => {\n\t\t\t\t\tconst injected = unwrap(objectCtxRaw) || {}\n\t\t\t\t\treturn {\n\t\t\t\t\t\t...injected,\n\t\t\t\t\t\tobjectId: props.objectId ?? injected.objectId ?? props.objectData?.id ?? null,\n\t\t\t\t\t\tobject: props.objectData || injected.object || null,\n\t\t\t\t\t\tworkspace: unwrap(workspaceRaw) || {},\n\t\t\t\t\t\tconfig: unwrapAppConfig(appConfigRaw) || {},\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\t\treturn { epData: data, epLoading: loading, epError: error }\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\trows: [],\n\t\t\ttotal: 0,\n\t\t\tloading: false,\n\t\t\terror: false,\n\t\t\t/** Personal-lens reports (`@self.lenses`) of the latest response. */\n\t\t\tlenses: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {string} `rows`, `feed`, `inline` or `cards`. */\n\t\tpresentation() {\n\t\t\tconst value = this.content?.presentation\n\t\t\treturn PRESENTATIONS.includes(value) ? value : 'rows'\n\t\t},\n\n\t\t/**\n\t\t * Whether a `cards` card leads its title with an icon: only when the\n\t\t * list declares `icon`, so a card without one has no placeholder.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/record-list-cards/specs/record-list-cards/spec.md#requirement-a-record-list-can-draw-its-rows-as-cards\n\t\t */\n\t\tcardIcons() {\n\t\t\tconst icon = this.content?.icon\n\t\t\treturn (typeof icon === 'string' && icon !== '') || (Boolean(icon) && typeof icon === 'object')\n\t\t},\n\n\t\t/** @return {object} The token context: record, id and workspace. */\n\t\ttokenCtx() {\n\t\t\tconst injected = unwrap(this.cnObjectContext) || {}\n\t\t\treturn {\n\t\t\t\t...injected,\n\t\t\t\tobjectId: this.objectId ?? injected.objectId ?? this.objectData?.id ?? null,\n\t\t\t\tobject: this.objectData || injected.object || null,\n\t\t\t\tworkspace: unwrap(this.cnWorkspaceContext) || {},\n\t\t\t}\n\t\t},\n\n\t\t/** @return {object} The filter with its tokens resolved. */\n\t\tresolvedFilter() {\n\t\t\tconst filter = pageFilter(this.content?.pageControls, this.tokenCtx.workspace, this.content?.filter)\n\t\t\treturn dropOptionalUnresolved(resolveFilterTokens(filter, this.tokenCtx))\n\t\t},\n\n\t\t/** @return {boolean} A required token (the record id, say) has no value yet. */\n\t\twaiting() {\n\t\t\treturn hasUnresolvedTokens(this.resolvedFilter)\n\t\t},\n\n\t\t/** @return {object|null} The sort: the page's sort control when the widget listens to one, else its own. */\n\t\teffectiveSort() {\n\t\t\treturn pageSort(this.content?.pageControls, this.tokenCtx.workspace, this.content?.sort)\n\t\t},\n\n\t\t/**\n\t\t * What a template may read beside the row: the app config, whose\n\t\t * `currency` is the reporting currency of a `{path|currency}` token.\n\t\t *\n\t\t * @return {{config: object}} The template context.\n\t\t * @spec openspec/changes/screens-currency-format/specs/currency-format/spec.md#requirement-a-money-value-reads-in-its-currency\n\t\t */\n\t\ttemplateContext() {\n\t\t\treturn { config: unwrapAppConfig(this.cnAppConfig) }\n\t\t},\n\n\t\t/**\n\t\t * Whether the rows come from `endpointSource` rather than OpenRegister.\n\t\t *\n\t\t * @return {boolean}\n\t\t * @spec openspec/changes/endpoint-source-card-grid-record-list/specs/dashboard-page/spec.md#requirement-a-record-list-and-a-card-grid-can-read-an-endpoint\n\t\t */\n\t\tendpointActive() {\n\t\t\tconst source = this.content?.endpointSource\n\t\t\treturn Boolean(source && typeof source === 'object' && source.url)\n\t\t},\n\n\t\t/** @return {string} The endpoint read's state, to copy into the list when it changes. */\n\t\tendpointKey() {\n\t\t\treturn this.endpointActive ? JSON.stringify([this.epData, this.epLoading, this.epError]) : ''\n\t\t},\n\n\t\t/** @return {number} The fetch cap. */\n\t\tlimit() {\n\t\t\tconst value = Number(this.content?.limit)\n\t\t\treturn Number.isFinite(value) && value > 0 ? Math.floor(value) : 5\n\t\t},\n\n\t\t/** @return {string} What a fetch depends on; a change fetches again. */\n\t\trequestKey() {\n\t\t\tconst c = this.content || {}\n\t\t\treturn JSON.stringify([c.register, c.schema, this.resolvedFilter, this.effectiveSort, this.limit, c.extend, this.waiting])\n\t\t},\n\n\t\t/** @return {Array<object>} The rows ready to draw. */\n\t\titems() {\n\t\t\tconst c = this.content || {}\n\t\t\tconst barScale = this.barScale\n\t\t\treturn this.rows.slice(0, this.limit).map((row, index) => {\n\t\t\t\tconst link = this.rowLink(row)\n\t\t\t\treturn {\n\t\t\t\t\tkey: (row && (row.id || row['@self']?.id)) || `row-${index}`,\n\t\t\t\t\trow,\n\t\t\t\t\taction: this.rowActionOf(row),\n\t\t\t\t\ttag: link ? 'router-link' : 'div',\n\t\t\t\t\tattrs: link ? { to: link } : {},\n\t\t\t\t\tinitials: this.initialsFor(row),\n\t\t\t\t\ttitle: this.fill(c.title, row),\n\t\t\t\t\tmeta: this.metaOf(row),\n\t\t\t\t\ttext: this.fill(c.text, row),\n\t\t\t\t\tlabel: this.fill(c.label, row),\n\t\t\t\t\ttrailing: c.trailing ? firstFilled(c.trailing, row, this.translate, new Date(), this.templateContext) : '',\n\t\t\t\t\tpill: this.pillOf(row),\n\t\t\t\t\tbadges: this.badgesOf(row),\n\t\t\t\t\tdue: this.dueOf(row),\n\t\t\t\t\ticon: this.iconOf(row),\n\t\t\t\t\tbar: this.barOf(row, barScale),\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The largest `bar.valueField` over the rows shown, the scale of a\n\t\t * `bar` without `maxField`. 0 without a `bar`.\n\t\t *\n\t\t * @return {number} The largest value.\n\t\t * @spec openspec/changes/record-list-row-bar/specs/record-list-row-bar/spec.md#requirement-a-record-list-row-can-carry-a-bar\n\t\t */\n\t\tbarScale() {\n\t\t\tconst field = this.content?.bar?.valueField\n\t\t\tif (!field) {\n\t\t\t\treturn 0\n\t\t\t}\n\t\t\treturn Math.max(0, ...this.rows.slice(0, this.limit).map((row) => Number(readPath(row, field)) || 0))\n\t\t},\n\n\t\t/** @return {object|null} The header link with `{total}` filled and tokens resolved. */\n\t\theaderLink() {\n\t\t\tconst link = this.content?.headerLink\n\t\t\tif (!link || typeof link !== 'object' || typeof link.label !== 'string' || link.label === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst resolved = { label: this.withTotal(link.label) }\n\t\t\tif (link.route) {\n\t\t\t\tresolved.route = link.route\n\t\t\t\tif (link.params && typeof link.params === 'object') {\n\t\t\t\t\tresolved.params = resolveFilterTokens(link.params, this.tokenCtx)\n\t\t\t\t}\n\t\t\t\tif (link.query && typeof link.query === 'object') {\n\t\t\t\t\tresolved.query = resolveFilterTokens(link.query, this.tokenCtx)\n\t\t\t\t}\n\t\t\t} else if (typeof link.href === 'string') {\n\t\t\t\tresolved.href = link.href\n\t\t\t}\n\t\t\treturn resolved\n\t\t},\n\n\t\t/** @return {string} The header note with `{total}` filled. */\n\t\theaderNote() {\n\t\t\tconst note = this.content?.headerNote\n\t\t\treturn typeof note === 'string' && note !== '' ? this.withTotal(note) : ''\n\t\t},\n\n\t\t/**\n\t\t * Why the list is empty when a personal lens could not answer\n\t\t * (`@self.lenses.<lens>.available: false`, as for `filter: { _recent: true }`),\n\t\t * or '' to keep `emptyText`. `lensReasonTexts` holds the app's wording,\n\t\t * keyed `<lens>.<reason>` or `<reason>`.\n\t\t *\n\t\t * @return {string} The explanation, or ''.\n\t\t * @spec openspec/changes/screens-record-list-lens-reason/specs/record-list-lens-reason/spec.md#requirement-a-record-list-says-why-a-lens-is-empty\n\t\t */\n\t\tlensReasonText() {\n\t\t\tif (this.rows.length > 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst text = lensUnavailableText(this.lenses, this.content?.lensReasonTexts)\n\t\t\treturn text ? this.translate(text) : ''\n\t\t},\n\n\t\t/** @return {string} The empty line. */\n\t\temptyLabel() {\n\t\t\tif (this.lensReasonText !== '') {\n\t\t\t\treturn this.lensReasonText\n\t\t\t}\n\t\t\treturn this.content?.emptyText ? this.translate(this.content.emptyText) : t('nextcloud-vue', 'Nothing here yet')\n\t\t},\n\n\t\t/** @return {string} The error line. */\n\t\terrorLabel() {\n\t\t\treturn this.content?.errorText ? this.translate(this.content.errorText) : t('nextcloud-vue', 'This list could not be loaded.')\n\t\t},\n\n\t\t/** @return {string} The spinner's accessible name. */\n\t\tloadingLabel() {\n\t\t\treturn t('nextcloud-vue', 'Loading …')\n\t\t},\n\t},\n\n\twatch: {\n\t\trequestKey() {\n\t\t\tthis.fetchRows()\n\t\t},\n\n\t\tendpointKey() {\n\t\t\tthis.fetchRows()\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.onRefresh = () => this.fetchRows()\n\t\tsubscribe(PAGE_REFRESH_CHANNEL, this.onRefresh)\n\t\tthis.fetchRows()\n\t},\n\n\tbeforeUnmount() {\n\t\tunsubscribe(PAGE_REFRESH_CHANNEL, this.onRefresh)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Translate a manifest string through the host app.\n\t\t *\n\t\t * @param {string} text The text.\n\t\t * @return {string} The translation.\n\t\t */\n\t\ttranslate(text) {\n\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * A row's `bar`: its value, the maximum it is measured against (the\n\t\t * row's `maxField`, else the largest row), the filled share and\n\t\t * whether it is over that maximum. Null without `bar` or a value.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {number} scale The largest value over the rows shown.\n\t\t * @return {{value: number, max: number, share: number, over: boolean}|null} The bar.\n\t\t * @spec openspec/changes/record-list-row-bar/specs/record-list-row-bar/spec.md#requirement-a-record-list-row-can-carry-a-bar\n\t\t */\n\t\tbarOf(row, scale) {\n\t\t\tconst bar = this.content?.bar\n\t\t\tif (!bar || typeof bar !== 'object' || !bar.valueField) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst value = Number(readPath(row, bar.valueField))\n\t\t\tif (!Number.isFinite(value)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst ownMax = bar.maxField ? Number(readPath(row, bar.maxField)) : NaN\n\t\t\tconst max = bar.maxField ? (Number.isFinite(ownMax) && ownMax > 0 ? ownMax : 0) : scale\n\t\t\tconst share = max > 0 ? Math.min(100, Math.max(0, (value / max) * 100)) : 0\n\t\t\tconst over = Boolean(bar.maxField) && bar.overVariant === 'error' && max > 0 && value > max\n\t\t\treturn { value, max, share, over }\n\t\t},\n\n\t\t/**\n\t\t * The initials of the row's avatar (`avatar`: a name template such as\n\t\t * `\"{client.name}\"`, or `{ text }`), or '' without one.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} One or two letters.\n\t\t * @spec openspec/changes/screens-record-list-avatar/specs/record-list-avatar/spec.md#requirement-a-record-list-row-can-carry-an-avatar\n\t\t */\n\t\tinitialsFor(row) {\n\t\t\tconst avatar = this.content?.avatar\n\t\t\tconst template = typeof avatar === 'string' ? avatar : (avatar && typeof avatar === 'object' ? avatar.text : '')\n\t\t\treturn initialsOf(this.fill(template, row))\n\t\t},\n\n\t\t/**\n\t\t * Fill a template from a row, after translating it.\n\t\t *\n\t\t * @param {string} template The template.\n\t\t * @param {object} row The row.\n\t\t * @return {string} The text, '' when a token is empty.\n\t\t */\n\t\tfill(template, row) {\n\t\t\treturn typeof template === 'string' && template !== '' ? fillTemplate(this.translate(template), this.labelledRow(row), new Date(), this.templateContext) : ''\n\t\t},\n\n\t\t/**\n\t\t * The row as the templates read it: a field named in `valueLabels`\n\t\t * (`{ channel: { phone: \"Phone\", telefoon: \"Phone\" } }`) shows the\n\t\t * translated label of its stored value, so \"{channel}\" reads \"Telefoon\"\n\t\t * for both spellings the data holds. A value without a label stays as\n\t\t * stored. The pill, the badges and the sort read the stored value.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {object} The row, or a shallow copy with labelled fields.\n\t\t * @spec openspec/changes/screens-record-list-value-labels/specs/record-list-value-labels/spec.md#requirement-a-record-list-template-can-show-a-label-for-a-stored-value\n\t\t */\n\t\tlabelledRow(row) {\n\t\t\tconst map = this.content?.valueLabels\n\t\t\tif (!row || typeof row !== 'object' || !map || typeof map !== 'object') {\n\t\t\t\treturn row\n\t\t\t}\n\t\t\tlet out = row\n\t\t\tfor (const [field, labels] of Object.entries(map)) {\n\t\t\t\tconst raw = row[field]\n\t\t\t\tif (!labels || typeof labels !== 'object' || (typeof raw !== 'string' && typeof raw !== 'number')) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst label = labels[String(raw)]\n\t\t\t\tif (typeof label === 'string' && label !== '') {\n\t\t\t\t\tif (out === row) {\n\t\t\t\t\t\tout = { ...row }\n\t\t\t\t\t}\n\t\t\t\t\tout[field] = this.translate(label)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Replace `{total}` in a translated label.\n\t\t *\n\t\t * @param {string} label The label.\n\t\t * @return {string} The text.\n\t\t */\n\t\twithTotal(label) {\n\t\t\treturn this.translate(label).replace(/\\{total\\}/g, String(this.total))\n\t\t},\n\n\t\t/**\n\t\t * The route a row opens: `rowRoute` with the id at `rowIdField`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {object|null} The router location, or null.\n\t\t */\n\t\t/**\n\t\t * The one action that ends a row (`rowAction`): its label (from\n\t\t * `labels.map` by the row's `labels.field`, else `label`), and how it\n\t\t * renders: a link when it only navigates, else a button that\n\t\t * dispatches. Null without the key or a label.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {{label: string, tag: string, attrs: object}|null}\n\t\t * @spec openspec/changes/screens-record-list-row-action/specs/record-list/spec.md\n\t\t */\n\t\trowActionOf(row) {\n\t\t\tconst action = this.content?.rowAction\n\t\t\tif (!action || typeof action !== 'object' || !row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tlet label = typeof action.label === 'string' ? action.label : ''\n\t\t\tconst by = action.labels\n\t\t\tif (by && typeof by === 'object' && typeof by.field === 'string' && by.map && typeof by.map === 'object') {\n\t\t\t\tconst raw = readPath(row, by.field)\n\t\t\t\tif (raw !== null && raw !== undefined && typeof by.map[String(raw)] === 'string') {\n\t\t\t\t\tlabel = by.map[String(raw)]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (label === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tlabel = this.translate(label)\n\t\t\tconst link = this.rowActionLink(action, row)\n\t\t\tif (link) {\n\t\t\t\treturn link.external\n\t\t\t\t\t? { label, tag: 'a', attrs: { href: link.href, target: '_blank', rel: 'noopener' } }\n\t\t\t\t\t: { label, tag: 'router-link', attrs: { to: link.to } }\n\t\t\t}\n\t\t\treturn { label, tag: 'button', attrs: { type: 'button' } }\n\t\t},\n\n\t\t/**\n\t\t * The link a `rowAction` that only navigates renders as: `open-page`\n\t\t * opens that page for the row's id, `navigate` reads its\n\t\t * `@object.<field>` / `@objectId` tokens off the row. Null for any\n\t\t * other action, which is dispatched on click.\n\t\t *\n\t\t * @param {object} action The declared row action.\n\t\t * @param {object} row The row.\n\t\t * @return {{href: string, to: (string|object|null), external: boolean}|null}\n\t\t * @spec openspec/changes/screens-record-list-row-action/specs/record-list/spec.md\n\t\t */\n\t\trowActionLink(action, row) {\n\t\t\tif (action.confirm) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tif (action.type === 'open-page') {\n\t\t\t\tconst id = this.rowIdOf(row)\n\t\t\t\tif (!this.$router || id === null || typeof action.target !== 'string' || action.target === '') {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tconst to = { name: action.target, params: { id } }\n\t\t\t\ttry {\n\t\t\t\t\tconst href = this.$router.resolve(to).href\n\t\t\t\t\treturn href ? { href, to, external: false } : null\n\t\t\t\t} catch {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (action.type !== 'navigate') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst target = interpolateActionTarget(action.target, this.rowTokenCtx(row))\n\t\t\t// An external target needs no router; an in-app one does.\n\t\t\treturn actionLink({ ...action, target }, { router: this.$router || null })\n\t\t},\n\n\t\t/**\n\t\t * The token context of a row: the row is `@object`, its id `@objectId`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {object} The token context.\n\t\t */\n\t\trowTokenCtx(row) {\n\t\t\treturn { ...this.tokenCtx, objectId: this.rowIdOf(row), object: row }\n\t\t},\n\n\t\t/**\n\t\t * The id of a row (`rowIdField`, else `id`, else `@self.id`), or null.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string|null} The id.\n\t\t */\n\t\trowIdOf(row) {\n\t\t\tconst field = this.content?.rowIdField\n\t\t\tconst id = field ? readPath(row, field) : (row && (row.id || row['@self']?.id))\n\t\t\treturn (id === null || id === undefined || id === '' || typeof id === 'object') ? null : String(id)\n\t\t},\n\n\t\t/**\n\t\t * Run a `rowAction` that is not a plain link through the page's\n\t\t * dispatcher: a `handler` gets the row as its last argument, an\n\t\t * `open-modal` gets it as the `row` prop, an `object-op` acts on it.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {unknown} What the dispatcher returns.\n\t\t * @spec openspec/changes/screens-record-list-row-action/specs/record-list/spec.md\n\t\t */\n\t\trunRowAction(row) {\n\t\t\tconst action = this.content?.rowAction\n\t\t\tif (!action || typeof action !== 'object') {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst type = action.type || 'handler'\n\t\t\tlet wrapped = action\n\t\t\tif (type === 'handler') {\n\t\t\t\twrapped = { ...action, args: [...(action.args || []), row] }\n\t\t\t} else if (type === 'open-modal') {\n\t\t\t\twrapped = { ...action, props: { ...(action.props || {}), row } }\n\t\t\t}\n\t\t\tif (typeof this.cnDispatchAction === 'function') {\n\t\t\t\treturn this.cnDispatchAction(wrapped)\n\t\t\t}\n\t\t\treturn dispatchAction(wrapped, { router: this.$router || null, row, tokenCtx: this.rowTokenCtx(row), source: { register: this.content?.register, schema: this.content?.schema } })\n\t\t},\n\n\t\trowLink(row) {\n\t\t\tconst route = this.content?.rowRoute\n\t\t\tif (!route || !this.$router || !row) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst field = this.content?.rowIdField\n\t\t\tconst id = field ? readPath(row, field) : (row.id || row['@self']?.id)\n\t\t\tif (id === null || id === undefined || id === '' || typeof id === 'object') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn { name: route, params: { id: String(id) } }\n\t\t},\n\n\t\t/**\n\t\t * The row's due text (`due`: `{ field, todayLabel?, overdueLabel?, upcomingLabel?, upcomingWeeksLabel?, upcomingWeeksFrom?, emptyText? }`):\n\t\t * \"3 dagen te laat\" in the danger tone, \"Vandaag\", the date or the time\n\t\t * left (\"nog 4 dagen\") otherwise, `emptyText` when the field is empty.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {{text: string, tone: string}|null} The text and tone, or null.\n\t\t * @spec openspec/changes/screens-due-text/specs/due-text/spec.md#requirement-a-due-date-reads-as-text-with-a-tone\n\t\t */\n\t\tdueOf(row) {\n\t\t\tconst due = this.content?.due\n\t\t\tif (!due || typeof due !== 'object' || !due.field) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn resolveDue(readPath(row, due.field), due, (text) => this.translate(text))\n\t\t},\n\n\t\t/**\n\t\t * The row's extra badges (`badges`): a coloured badge from a field\n\t\t * (`{ field, labels?, colorMap?, variant?, hideValues? }`, the value\n\t\t * shown unless `hideValues` lists it) and an age badge\n\t\t * (`{ kind: \"stale\", field, afterDays, label?, variant? }`, shown when the\n\t\t * date field is older than `afterDays` whole days; `{days}` in the\n\t\t * label is the age).\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{key: string, kind: string, label: string, variant: string}>} The badges that apply.\n\t\t * @spec openspec/changes/screens-record-list-badges/specs/record-list-badges/spec.md#requirement-a-record-list-row-can-carry-badges\n\t\t */\n\t\tbadgesOf(row) {\n\t\t\tconst declared = Array.isArray(this.content?.badges) ? this.content.badges : []\n\t\t\tconst out = []\n\t\t\tdeclared.forEach((badge, index) => {\n\t\t\t\tif (!badge || typeof badge !== 'object' || !badge.field) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (badge.kind === 'stale') {\n\t\t\t\t\tconst days = ageInDays(readPath(row, badge.field))\n\t\t\t\t\tconst after = Number(badge.afterDays)\n\t\t\t\t\tif (days === null || !Number.isFinite(after) || days <= after) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconst template = this.translate(badge.label || 'Stale')\n\t\t\t\t\tout.push({\n\t\t\t\t\t\tkey: `stale-${index}`,\n\t\t\t\t\t\tkind: 'stale',\n\t\t\t\t\t\tlabel: template.replace(/\\{days\\}/g, String(days)),\n\t\t\t\t\t\tvariant: isBadgeVariant(badge.variant) ? badge.variant : 'warning',\n\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst made = this.pillOf(row, badge)\n\t\t\t\tif (made) {\n\t\t\t\t\tout.push({ key: `field-${index}`, kind: 'field', ...made })\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * The row's meta line. A string is one template, and one empty token\n\t\t * empties it. `{ parts: [\"{identifier}\", \"{caseTypeName}\", \"{handler}\"],\n\t\t * separator? }` fills each part on its own, drops the empty ones and\n\t\t * joins the rest (default \" · \"), so a row without a handler still\n\t\t * reads \"2026-0082 · Woo-verzoek\".\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} The meta line, '' when nothing fills.\n\t\t * @spec openspec/changes/screens-record-list-meta-parts/specs/record-list-meta-parts/spec.md#requirement-a-meta-line-of-parts-skips-the-empty-ones\n\t\t */\n\t\tmetaOf(row) {\n\t\t\tconst meta = this.content?.meta\n\t\t\tif (!meta || typeof meta !== 'object' || !Array.isArray(meta.parts)) {\n\t\t\t\treturn this.fill(meta, row)\n\t\t\t}\n\t\t\tconst separator = typeof meta.separator === 'string' ? meta.separator : ' · '\n\t\t\treturn meta.parts\n\t\t\t\t.map((part) => this.fill(part, row))\n\t\t\t\t.filter((text) => text !== '')\n\t\t\t\t.join(separator)\n\t\t},\n\n\t\t/**\n\t\t * The row's pill: `{ field, labels?, colorMap?, variant?, hideValues? }`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @param {object} [config] A pill config; the widget's `pill` by default.\n\t\t * @return {{label: string, variant: string}|null} The pill, or null.\n\t\t */\n\t\tpillOf(row, config) {\n\t\t\tconst pill = config || this.content?.pill\n\t\t\tif (!pill || typeof pill !== 'object' || !pill.field) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst raw = readPath(row, pill.field)\n\t\t\tif (raw === null || raw === undefined || raw === '' || typeof raw === 'object') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst key = String(raw)\n\t\t\tif (Array.isArray(pill.hideValues) && pill.hideValues.map(String).includes(key)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst labels = pill.labels && typeof pill.labels === 'object' ? pill.labels : {}\n\t\t\tconst map = pill.colorMap && typeof pill.colorMap === 'object' ? pill.colorMap : {}\n\t\t\tconst found = Object.keys(map).find((k) => k.toLowerCase() === key.toLowerCase())\n\t\t\tconst variant = found ? map[found] : pill.variant\n\t\t\treturn {\n\t\t\t\tlabel: labels[key] ? this.translate(labels[key]) : key,\n\t\t\t\tvariant: isBadgeVariant(variant) ? variant : 'default',\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The feed icon: an icon name, or `{ field, map, default }`.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {string} The MDI icon name.\n\t\t */\n\t\ticonOf(row) {\n\t\t\tconst icon = this.content?.icon\n\t\t\tif (typeof icon === 'string' && icon !== '') {\n\t\t\t\treturn icon\n\t\t\t}\n\t\t\tif (icon && typeof icon === 'object') {\n\t\t\t\tconst raw = icon.field ? readPath(row, icon.field) : undefined\n\t\t\t\tconst map = icon.map && typeof icon.map === 'object' ? icon.map : {}\n\t\t\t\tif (raw !== null && raw !== undefined && map[String(raw)]) {\n\t\t\t\t\treturn map[String(raw)]\n\t\t\t\t}\n\t\t\t\tif (typeof icon.default === 'string' && icon.default !== '') {\n\t\t\t\t\treturn icon.default\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn 'CircleSmall'\n\t\t},\n\n\t\t/** Tell the card around this list what its header shows. */\n\t\temitHeader() {\n\t\t\tconst header = { link: this.headerLink, note: this.headerNote }\n\t\t\t// `headerCount: true`: the card draws the total as a chip after its title.\n\t\t\tif (this.content?.headerCount === true && !this.error) {\n\t\t\t\theader.count = this.total\n\t\t\t}\n\t\t\t/**\n\t\t\t * @event header Emitted after every read with the card header's parts.\n\t\t\t * @type {{link: (object|null), note: string, count: (number|undefined)}} The header link (resolved, with `{total}` filled), the note, and with `headerCount` the total.\n\t\t\t */\n\t\t\tthis.$emit('header', header)\n\t\t},\n\n\t\t/**\n\t\t * The rank list of a sort (`{ field, rank: [\"urgent\", \"high\", \"normal\", \"low\"], then? }`),\n\t\t * or null when the sort has none or the list's own filter already fixes the field.\n\t\t *\n\t\t * @param {object|null} sort The effective sort.\n\t\t * @return {Array<string>|null} The values in rank order.\n\t\t * @spec openspec/changes/screens-enum-rank-sort/specs/enum-rank-sort/spec.md#requirement-a-record-list-can-sort-by-the-rank-of-an-enum-value\n\t\t */\n\t\trankOf(sort) {\n\t\t\tif (!sort || typeof sort !== 'object' || !sort.field || !Array.isArray(sort.rank)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst rank = sort.rank.filter((value) => typeof value === 'string' && value !== '')\n\t\t\tif (rank.length === 0 || Object.hasOwn(this.resolvedFilter || {}, sort.field)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn rank\n\t\t},\n\n\t\t/**\n\t\t * Read a list in the rank of an enum field. The list endpoint orders a\n\t\t * text field alphabetically (\"high\", \"low\", \"normal\", \"urgent\"), so the\n\t\t * rows are read one rank at a time, best first, each with the rest of the\n\t\t * sort (`then`) inside it, until the page is full; the rows with a value\n\t\t * outside the rank (or none) follow. The result is exact, not a client-side\n\t\t * sort of a partial page. It costs one request for the total, one per rank\n\t\t * value read and one for the remainder.\n\t\t *\n\t\t * @param {(params: object) => Promise<object>} get Reads the list with the given params.\n\t\t * @param {object} base The params without any order.\n\t\t * @param {{field: string, then?: {field: string, dir?: string}}} sort The sort.\n\t\t * @param {Array<string>} rank The values in rank order.\n\t\t * @return {Promise<{rows: Array<object>, total: number}>} The page and the total.\n\t\t * @spec openspec/changes/screens-enum-rank-sort/specs/enum-rank-sort/spec.md#requirement-a-record-list-can-sort-by-the-rank-of-an-enum-value\n\t\t */\n\t\tasync fetchRanked(get, base, sort, rank) {\n\t\t\tconst order = {}\n\t\t\tif (sort.then && typeof sort.then === 'object' && sort.then.field) {\n\t\t\t\torder[`_order[${sort.then.field}]`] = sort.then.dir === 'desc' ? 'desc' : 'asc'\n\t\t\t}\n\t\t\tconst read = async (extra) => {\n\t\t\t\tconst response = await get({ ...base, ...order, ...extra })\n\t\t\t\tconst data = response && response.data ? response.data : {}\n\t\t\t\treturn { results: Array.isArray(data.results) ? data.results : [], total: data.total }\n\t\t\t}\n\t\t\tconst head = await read({ _limit: 1 })\n\t\t\tconst rows = []\n\t\t\tconst seen = new Set()\n\t\t\tconst idOf = (row) => (row && (row.id || row['@self']?.id)) || null\n\t\t\tconst take = (list) => {\n\t\t\t\tfor (const row of list) {\n\t\t\t\t\tconst id = idOf(row)\n\t\t\t\t\tif (id !== null && seen.has(id)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tif (id !== null) {\n\t\t\t\t\t\tseen.add(id)\n\t\t\t\t\t}\n\t\t\t\t\tif (rows.length < this.limit) {\n\t\t\t\t\t\trows.push(row)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const value of rank) {\n\t\t\t\tif (rows.length >= this.limit) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\ttake((await read({ [sort.field]: value, _limit: this.limit - rows.length })).results)\n\t\t\t}\n\t\t\tif (rows.length < this.limit) {\n\t\t\t\ttake((await read({ _limit: this.limit + rows.length })).results)\n\t\t\t}\n\t\t\treturn { rows, total: typeof head.total === 'number' ? head.total : rows.length }\n\t\t},\n\n\t\t/**\n\t\t * Copy the endpoint read into the list: its payload must be an array of\n\t\t * rows (anything else is an empty list), and a failed read is an error.\n\t\t *\n\t\t * @spec openspec/changes/endpoint-source-card-grid-record-list/specs/dashboard-page/spec.md#requirement-a-record-list-and-a-card-grid-can-read-an-endpoint\n\t\t */\n\t\ttakeEndpointRows() {\n\t\t\tthis.rows = Array.isArray(this.epData) ? this.epData : []\n\t\t\tthis.total = this.rows.length\n\t\t\tthis.loading = this.epLoading === true\n\t\t\tthis.error = Boolean(this.epError)\n\t\t\tthis.lenses = {}\n\t\t\tif (!this.loading) {\n\t\t\t\tthis.emitHeader()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Fetch the list. Sends nothing while a required token is unresolved\n\t\t * or the source is incomplete.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync fetchRows() {\n\t\t\tconst c = this.content || {}\n\t\t\tif (this.endpointActive) {\n\t\t\t\tthis.takeEndpointRows()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!c.register || !c.schema || this.waiting) {\n\t\t\t\tthis.rows = []\n\t\t\t\tthis.total = 0\n\t\t\t\tthis.error = false\n\t\t\t\tthis.emitHeader()\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.error = false\n\t\t\tconst run = this.fetchRun = (this.fetchRun || 0) + 1\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: c.register, schema: c.schema })\n\t\t\t\tconst sort = this.effectiveSort\n\t\t\t\tconst params = { _limit: this.limit }\n\t\t\t\t// A rank sort (`sort.rank`) cannot be one `_order`: the list endpoint\n\t\t\t\t// orders a text field alphabetically. It is read group by group below.\n\t\t\t\tconst rank = this.rankOf(sort)\n\t\t\t\tif (!rank && sort && typeof sort === 'object' && sort.field) {\n\t\t\t\t\tparams[`_order[${sort.field}]`] = sort.dir === 'desc' ? 'desc' : 'asc'\n\t\t\t\t}\n\t\t\t\tif (Array.isArray(c.extend)) {\n\t\t\t\t\tconst extend = c.extend.filter((e) => typeof e === 'string' && e !== '')\n\t\t\t\t\tif (extend.length > 0) {\n\t\t\t\t\t\tparams._extend = extend\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const [key, value] of Object.entries(this.resolvedFilter)) {\n\t\t\t\t\tif (value && typeof value === 'object' && !Array.isArray(value)) {\n\t\t\t\t\t\tfor (const [op, operand] of Object.entries(value)) {\n\t\t\t\t\t\t\tparams[`${key}[${op}]`] = operand\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (value !== '' && value !== null && value !== undefined) {\n\t\t\t\t\t\tparams[key] = value\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (rank) {\n\t\t\t\t\t// Several requests: a fetch started later (the sort changed\n\t\t\t\t\t// meanwhile) must not be overwritten by this one.\n\t\t\t\t\tconst ranked = await this.fetchRanked((query) => axios.get(url, { params: query }), params, sort, rank)\n\t\t\t\t\tif (run !== this.fetchRun) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tthis.rows = ranked.rows\n\t\t\t\t\tthis.total = ranked.total\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst response = await axios.get(url, { params })\n\t\t\t\tconst data = response && response.data ? response.data : {}\n\t\t\t\tthis.rows = Array.isArray(data.results) ? data.results : []\n\t\t\t\tthis.total = typeof data.total === 'number' ? data.total : this.rows.length\n\t\t\t\tthis.lenses = readLensReports(data)\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn('[CnRecordListWidget] failed to load objects:', e)\n\t\t\t\tthis.lenses = {}\n\t\t\t\tthis.rows = []\n\t\t\t\tthis.total = 0\n\t\t\t\tthis.error = true\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t\tthis.emitHeader()\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-record-list__list {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n.cn-record-list__empty,\n.cn-record-list__error {\n\tcolor: var(--color-text-maxcontrast);\n\tmargin: 0;\n}\n\n.cn-record-list__loading {\n\tdisplay: flex;\n\tjustify-content: center;\n\tpadding: 8px 0;\n}\n\n/* rows */\n.cn-record-list--rows .cn-record-list__item + .cn-record-list__item {\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-record-list__bar {\n\tbackground: var(--color-border);\n\tborder-radius: 3px;\n\tdisplay: block;\n\theight: 6px;\n\tmargin: -6px 0 12px;\n\toverflow: hidden;\n}\n\n.cn-record-list__bar-fill {\n\tbackground: var(--color-primary-element);\n\tdisplay: block;\n\theight: 100%;\n}\n\n.cn-record-list__bar--over .cn-record-list__bar-fill {\n\tbackground: var(--color-error);\n}\n\n.cn-record-list__row {\n\talign-items: center;\n\tcolor: var(--color-main-text);\n\tdisplay: flex;\n\tgap: 16px;\n\tpadding: 12px 0;\n\ttext-decoration: none;\n}\n\n.cn-record-list__row--link:hover .cn-record-list__title,\n.cn-record-list__row--link:focus-visible .cn-record-list__title {\n\ttext-decoration: underline;\n}\n\n.cn-record-list__avatar {\n\talign-items: center;\n\tbackground: var(--color-background-hover);\n\tborder-radius: 50%;\n\tcolor: var(--color-main-text);\n\tdisplay: flex;\n\tflex: none;\n\tfont-size: 12px;\n\tfont-weight: 700;\n\theight: 36px;\n\tjustify-content: center;\n\twidth: 36px;\n}\n\n.cn-record-list__main {\n\tdisplay: flex;\n\tflex: 1 1 auto;\n\tflex-direction: column;\n\tgap: 2px;\n\tmin-width: 0;\n}\n\n.cn-record-list__title {\n\tfont-size: 15px;\n\tfont-weight: 700;\n}\n\n.cn-record-list__meta {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-record-list__aside {\n\talign-items: center;\n\tdisplay: flex;\n\tflex: none;\n\tgap: 16px;\n}\n\n.cn-record-list__trailing {\n\tfont-size: 14px;\n\twhite-space: nowrap;\n}\n\n.cn-record-list__due {\n\tfont-size: 14px;\n\twhite-space: nowrap;\n}\n\n.cn-record-list__due--danger {\n\tcolor: var(--color-text-error, var(--color-error-text));\n\tfont-weight: 600;\n}\n\n.cn-record-list__due--empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-record-list__row--action {\n\tflex-wrap: wrap;\n\tgap: 8px 16px;\n\tpadding: 14px 0;\n}\n\n.cn-record-list__row--action .cn-record-list__main {\n\tflex: 1 1 280px;\n\tgap: 3px;\n}\n\n.cn-record-list__title--link {\n\tcolor: var(--color-main-text);\n\ttext-decoration: underline;\n}\n\n.cn-record-list__pills {\n\tdisplay: flex;\n\tflex: 0 0 120px;\n\tgap: 6px;\n\tjustify-content: flex-end;\n}\n\n.cn-record-list__due--column {\n\tflex: 0 0 96px;\n\tfont-size: 13px;\n\ttext-align: end;\n}\n\n.cn-record-list__action {\n\talign-items: center;\n\tbackground: var(--color-primary-element-light);\n\tborder: 0;\n\tborder-radius: 17px;\n\tbox-sizing: border-box;\n\tcolor: var(--color-primary-element-light-text, var(--color-primary-element));\n\tcursor: pointer;\n\tdisplay: inline-flex;\n\tflex: 0 0 150px;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\theight: 34px;\n\tjustify-content: center;\n\tpadding: 0 14px;\n\ttext-decoration: none;\n}\n\n.cn-record-list__action:hover,\n.cn-record-list__action:focus-visible {\n\tbackground: var(--color-primary-element-light-hover, var(--color-primary-element-light));\n}\n\n.cn-record-list__chevron {\n\tcolor: var(--color-text-maxcontrast);\n\tflex: none;\n}\n\n/* cards (board ShBank): a grid of framed cards, 240px at the least. */\n.cn-record-list--cards .cn-record-list__list {\n\talign-items: start;\n\tdisplay: grid;\n\tgap: 16px;\n\tgrid-template-columns: repeat(auto-fit, minmax(240px, 1fr));\n}\n\n.cn-record-list__card {\n\tbackground: var(--color-main-background);\n\tborder: 1px solid var(--color-border);\n\tborder-radius: 12px;\n\tbox-sizing: border-box;\n\tcolor: var(--color-main-text);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\tpadding: 16px 18px;\n\ttext-decoration: none;\n}\n\n.cn-record-list__card--link:hover,\n.cn-record-list__card--link:focus-visible {\n\tborder-color: var(--color-border-dark, var(--color-border));\n}\n\n.cn-record-list__card--link:hover .cn-record-list__title,\n.cn-record-list__card--link:focus-visible .cn-record-list__title {\n\ttext-decoration: underline;\n}\n\n.cn-record-list__card-head {\n\talign-items: center;\n\tdisplay: flex;\n\tgap: 8px;\n\tjustify-content: space-between;\n}\n\n.cn-record-list__card-title {\n\talign-items: center;\n\tdisplay: flex;\n\tgap: 8px;\n\tmin-width: 0;\n}\n\n.cn-record-list__card-icon {\n\tcolor: var(--color-primary-element);\n\tflex: none;\n}\n\n.cn-record-list__card-pills {\n\tdisplay: flex;\n\tflex: none;\n\tgap: 6px;\n}\n\n.cn-record-list__card-value {\n\tfont-size: 24px;\n\tfont-weight: 700;\n}\n\n/* feed */\n.cn-record-list--feed .cn-record-list__item + .cn-record-list__item {\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-record-list__feed-row {\n\talign-items: flex-start;\n\tdisplay: flex;\n\tgap: 14px;\n\tpadding: 12px 0;\n}\n\n.cn-record-list__feed-icon {\n\talign-items: center;\n\tbackground: var(--color-primary-element-light);\n\tborder-radius: 50%;\n\tcolor: var(--color-primary-element-light-text, var(--color-primary-element));\n\tdisplay: flex;\n\tflex: none;\n\theight: 36px;\n\tjustify-content: center;\n\twidth: 36px;\n}\n\n.cn-record-list__text {\n\tfont-size: 15px;\n}\n\n.cn-record-list--feed .cn-record-list__main {\n\tcolor: var(--color-main-text);\n\ttext-decoration: none;\n}\n\n/* inline */\n.cn-record-list__inline-row {\n\tpadding: 4px 0;\n}\n\n.cn-record-list__label {\n\tmargin-inline-end: 4px;\n}\n\n.cn-record-list__inline-title {\n\tcolor: var(--color-main-text);\n}\n\na.cn-record-list__inline-title {\n\tcolor: var(--color-primary-element);\n\ttext-decoration: underline;\n}\n</style>\n\n<style>\n/* In a narrow side column a row stacks: title, meta, then pill and date. */\n.cn-detail-page__side .cn-record-list__row {\n\talign-items: flex-start;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.cn-detail-page__side .cn-record-list__row .cn-record-list__title {\n\tcolor: var(--color-primary-element);\n\ttext-decoration: underline;\n}\n\n.cn-detail-page__side .cn-record-list__chevron {\n\tdisplay: none;\n}\n\n/* A row is a touch target of at least 44px on a phone. */\n@media (max-width: 640px) {\n\t.cn-record-list__row {\n\t\tmin-height: 44px;\n\t}\n}\n</style>\n"],"names":["CnIcon","CnStatusBadge","t"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { resolveComponent, openBlock, createElementBlock, normalizeClass, toDisplayString, createVNode, Fragment, renderList, createCommentVNode, createElementVNode, createBlock, resolveDynamicComponent, mergeProps, withCtx, createTextVNode, toHandlers } from 'vue';
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, normalizeClass, toDisplayString, createVNode, Fragment, renderList, createCommentVNode, createElementVNode, createBlock, resolveDynamicComponent, mergeProps, withCtx, createTextVNode, toHandlers, normalizeStyle } from 'vue';
|
|
2
2
|
|
|
3
3
|
const _hoisted_1 = {
|
|
4
4
|
key: 0,
|
|
@@ -107,6 +107,7 @@ const _hoisted_28 = {
|
|
|
107
107
|
key: 0,
|
|
108
108
|
class: "cn-record-list__label"
|
|
109
109
|
};
|
|
110
|
+
const _hoisted_29 = ["aria-label", "aria-valuenow", "aria-valuemax"];
|
|
110
111
|
|
|
111
112
|
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
112
113
|
const _component_NcLoadingIcon = resolveComponent("NcLoadingIcon");
|
|
@@ -335,7 +336,24 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
335
336
|
]),
|
|
336
337
|
_: 2 /* DYNAMIC */
|
|
337
338
|
}, 1040 /* FULL_PROPS, DYNAMIC_SLOTS */))
|
|
338
|
-
]))
|
|
339
|
+
])),
|
|
340
|
+
($options.presentation === 'rows' && item.bar)
|
|
341
|
+
? (openBlock(), createElementBlock("span", {
|
|
342
|
+
key: 5,
|
|
343
|
+
class: normalizeClass(["cn-record-list__bar", { 'cn-record-list__bar--over': item.bar.over }]),
|
|
344
|
+
role: "meter",
|
|
345
|
+
"aria-label": item.title || null,
|
|
346
|
+
"aria-valuenow": item.bar.value,
|
|
347
|
+
"aria-valuemin": "0",
|
|
348
|
+
"aria-valuemax": item.bar.max,
|
|
349
|
+
"data-testid": "cn-record-list-bar"
|
|
350
|
+
}, [
|
|
351
|
+
createElementVNode("span", {
|
|
352
|
+
class: "cn-record-list__bar-fill",
|
|
353
|
+
style: normalizeStyle({ width: `${item.bar.share}%` })
|
|
354
|
+
}, null, 4 /* STYLE */)
|
|
355
|
+
], 10 /* CLASS, PROPS */, _hoisted_29))
|
|
356
|
+
: createCommentVNode("v-if", true)
|
|
339
357
|
]))
|
|
340
358
|
}), 128 /* KEYED_FRAGMENT */))
|
|
341
359
|
]))
|