@conduction/nextcloud-vue 2.144.0 → 2.146.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +1 -0
- package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue2.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiChatPanel.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js +55 -2
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailCard/CnAuditTrailCard.vue3.js.map +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue.js +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js +16 -0
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js +3 -1
- package/dist/esm/components/CnAuditTrailWidget/CnAuditTrailWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue.js +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChecklistRunWidget/CnChecklistRunWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +12 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +42 -30
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +22 -0
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +2 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js +3 -3
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +46 -8
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +3 -3
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +2 -2
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +6 -3
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnMailTab/CnMailTab.vue.js +1 -1
- package/dist/esm/components/CnMailTab/CnMailTab.vue2.js.map +1 -1
- package/dist/esm/components/CnMailTab/CnMailTab.vue3.js +2 -2
- package/dist/esm/components/CnMailTab/CnMailTab.vue3.js.map +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue.js +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue2.js.map +1 -1
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js +1 -0
- package/dist/esm/components/CnNotesCard/CnNotesCard.vue3.js.map +1 -1
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue.js +1 -1
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue2.js +21 -2
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue2.js.map +1 -1
- package/dist/esm/components/CnNotificationMatrix/CnNotificationMatrix.vue3.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +73 -12
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +165 -126
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue.js +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRetentionWidget/CnRetentionWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue.js +1 -1
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js +14 -0
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue2.js.map +1 -1
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js +2 -1
- package/dist/esm/components/CnSettingsField/CnSettingsField.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue.js +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -8
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue.js +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +10 -2
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
- package/dist/esm/composables/indexSources.js +35 -9
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +2 -0
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +1204 -467
- package/dist/esm/utils/builtInFormatters.js +18 -1
- package/dist/esm/utils/builtInFormatters.js.map +1 -1
- package/dist/esm/utils/detailObjectContext.js +7 -2
- package/dist/esm/utils/detailObjectContext.js.map +1 -1
- package/dist/esm/utils/localHeaderRows.js +95 -0
- package/dist/esm/utils/localHeaderRows.js.map +1 -0
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/visibleWhen.js +6 -0
- package/dist/esm/utils/visibleWhen.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +686 -239
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +1204 -467
- package/l10n/nl.json +2 -0
- package/package.json +1 -1
- package/src/components/CnActionDialog/CnActionDialog.vue +8 -1
- package/src/components/CnAiCompanion/CnAiChatPanel.vue +3 -0
- package/src/components/CnAuditTrailCard/CnAuditTrailCard.vue +55 -2
- package/src/components/CnAuditTrailWidget/CnAuditTrailWidget.vue +18 -0
- package/src/components/CnChecklistRunWidget/CnChecklistRunWidget.vue +4 -2
- package/src/components/CnDataTable/CnDataTable.vue +19 -2
- package/src/components/CnDetailPage/CnDetailPage.md +1 -0
- package/src/components/CnDetailPage/CnDetailPage.vue +23 -0
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHeaderItems.vue +3 -1
- package/src/components/CnFactsWidget/CnFactsWidget.vue +74 -9
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +2 -2
- package/src/components/CnIndexPage/CnIndexPage.vue +6 -3
- package/src/components/CnMailTab/CnMailTab.vue +6 -4
- package/src/components/CnNotesCard/CnNotesCard.vue +7 -2
- package/src/components/CnNotificationMatrix/CnNotificationMatrix.vue +25 -3
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +132 -20
- package/src/components/CnRetentionWidget/CnRetentionWidget.vue +2 -0
- package/src/components/CnSettingsField/CnSettingsField.vue +15 -0
- package/src/components/CnTabsWidget/CnTabsWidget.vue +6 -1
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -8
- package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +10 -2
- package/src/composables/indexSources.js +35 -9
- package/src/css/dialog.css +25 -9
- package/src/css/look-board-detail.css +370 -30
- package/src/css/look-board-index.css +116 -4
- package/src/css/look-board.css +168 -8
- package/src/css/table.css +17 -1
- package/src/schemas/app-manifest-v2.schema.json +2 -2
- package/src/utils/builtInFormatters.js +17 -0
- package/src/utils/detailObjectContext.js +7 -2
- package/src/utils/localHeaderRows.js +91 -0
- package/src/utils/validateManifestV2.compiled.js +2 -2
- package/src/utils/visibleWhen.js +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CnFieldListWidget.vue2.js","sources":["../../../../src/components/CnFieldListWidget/CnFieldListWidget.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div class=\"cn-field-list-widget\" data-testid=\"cn-field-list-widget\">\n\t\t<div v-if=\"canAdd && addTrigger && addPlacement === 'header'\" class=\"cn-field-list-widget__toolbar\">\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-open-add\"\n\t\t\t\t@click=\"adding = !adding\">\n\t\t\t\t+ {{ addLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<form\n\t\t\tv-if=\"canAdd && addTrigger && addAtTop && adding\"\n\t\t\tclass=\"cn-field-list-widget__add\"\n\t\t\tdata-testid=\"cn-field-list-add\"\n\t\t\t@submit.prevent=\"add\">\n\t\t\t<div\n\t\t\t\tv-for=\"field in addFields\"\n\t\t\t\t:key=\"field.key\"\n\t\t\t\tclass=\"cn-field-list-widget__field\"\n\t\t\t\t:data-testid=\"`cn-field-list-input-${field.key}`\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"field.type === 'multiselect'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:keepOpen=\"true\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-else-if=\"field.type === 'select'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-else-if=\"field.type === 'checkbox'\"\n\t\t\t\t\tv-model=\"draft[field.key]\">\n\t\t\t\t\t{{ field.label }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-else\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:error=\"Boolean(errors[field.key])\"\n\t\t\t\t\t:helperText=\"errors[field.key] || ''\" />\n\t\t\t</div>\n\t\t\t<NcButton type=\"submit\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-submit\">\n\t\t\t\t{{ editingKey !== null ? saveLabel : addLabel }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"editingKey !== null\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\tdata-testid=\"cn-field-list-cancel-edit\"\n\t\t\t\t@click=\"cancelEdit\">\n\t\t\t\t{{ tr('Cancel') }}\n\t\t\t</NcButton>\n\t\t</form>\n\t\t<p v-if=\"lead\" class=\"cn-field-list-widget__lead\" data-testid=\"cn-field-list-lead\">\n\t\t\t{{ lead }}\n\t\t</p>\n\t\t<p v-if=\"rows.length === 0\" class=\"cn-field-list-widget__empty\" data-testid=\"cn-field-list-empty\">\n\t\t\t{{ emptyLabel }}\n\t\t</p>\n\t\t<div v-else-if=\"isTable\" class=\"cn-field-list-widget__table-wrap\">\n\t\t\t<table class=\"cn-field-list-widget__table\" data-testid=\"cn-field-list-table\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tv-for=\"column in tableColumns\"\n\t\t\t\t\t\t\t:key=\"column.key\"\n\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__th\">\n\t\t\t\t\t\t\t{{ column.header }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th v-if=\"hasMenu\" scope=\"col\" class=\"cn-field-list-widget__th cn-field-list-widget__th--menu\">\n\t\t\t\t\t\t\t<span class=\"cn-field-list-widget__sr\">{{ tr('Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr\n\t\t\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t\t\t:key=\"row.key\"\n\t\t\t\t\t\tclass=\"cn-field-list-widget__tr\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-row-${row.key}`\">\n\t\t\t\t\t\t<td\n\t\t\t\t\t\t\tv-for=\"(column, index) in tableColumns\"\n\t\t\t\t\t\t\t:key=\"column.key\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__td\">\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-if=\"column.pill && row.cells[index].pill\"\n\t\t\t\t\t\t\t\t:label=\"row.cells[index].pill.label\"\n\t\t\t\t\t\t\t\t:variant=\"row.cells[index].pill.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t\t<strong v-else-if=\"column.strong\">{{ row.cells[index].text }}</strong>\n\t\t\t\t\t\t\t<code v-else-if=\"column.code\" class=\"cn-field-list-widget__code\">{{ row.cells[index].text }}</code>\n\t\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t\t{{ row.cells[index].text }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td v-if=\"hasMenu\" class=\"cn-field-list-widget__td cn-field-list-widget__td--menu\">\n\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\tv-for=\"action in inlineActions(row)\"\n\t\t\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t\t\t:aria-label=\"action.ariaLabel || undefined\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-action-${action.id}-${row.key}`\"\n\t\t\t\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t\t\t\t{{ action.label }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\tv-if=\"menuItems(row).length > 0\"\n\t\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t\t\t:ariaLabel=\"`${tr('More actions')}: ${row.title}`\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-menu-${row.key}`\">\n\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\tv-for=\"item in menuItems(row)\"\n\t\t\t\t\t\t\t\t\t:key=\"item.id\"\n\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-menu-${item.id}-${row.key}`\"\n\t\t\t\t\t\t\t\t\t@click=\"item.run\">\n\t\t\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<div\n\t\t\t\tv-for=\"row in bandRows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-field-list-widget__band\"\n\t\t\t\trole=\"note\"\n\t\t\t\t:data-testid=\"`cn-field-list-band-${row.key}`\">\n\t\t\t\t<span class=\"cn-field-list-widget__band-text\">{{ row.detail }}</span>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-for=\"copy in row.copies\"\n\t\t\t\t\t:key=\"`copy-${copy.path}`\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:data-testid=\"`cn-field-list-copy-${copy.path}-${row.key}`\"\n\t\t\t\t\t@click=\"copyValue(copy)\">\n\t\t\t\t\t{{ copy.label }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-for=\"action in row.bandActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t:data-testid=\"`cn-field-list-band-action-${action.id}-${row.key}`\"\n\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t{{ action.label }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t\t<ul v-else class=\"cn-field-list-widget__rows\">\n\t\t\t<li\n\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-field-list-widget__row\"\n\t\t\t\t:data-testid=\"`cn-field-list-row-${row.key}`\">\n\t\t\t\t<div class=\"cn-field-list-widget__line\">\n\t\t\t\t\t<span v-if=\"row.initials\" class=\"cn-field-list-widget__avatar\" aria-hidden=\"true\">{{ row.initials }}</span>\n\t\t\t\t\t<span class=\"cn-field-list-widget__main\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"row.href\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__title\"\n\t\t\t\t\t\t\t:href=\"row.href\"\n\t\t\t\t\t\t\tv-bind=\"row.external ? { target: '_blank', rel: 'noopener noreferrer' } : {}\">{{ row.title }}</a>\n\t\t\t\t\t\t<span v-else class=\"cn-field-list-widget__title\">{{ row.title }}</span>\n\t\t\t\t\t\t<span v-if=\"row.meta\" class=\"cn-field-list-widget__meta\">{{ row.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\tv-if=\"row.pill\"\n\t\t\t\t\t\t:label=\"row.pill.label\"\n\t\t\t\t\t\t:variant=\"row.pill.variant\"\n\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t<span v-if=\"row.aside\" class=\"cn-field-list-widget__aside\">{{ row.aside }}</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-for=\"action in row.actions\"\n\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-action-${action.id}-${row.key}`\"\n\t\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t\t{{ action.label }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"canEdit\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:aria-label=\"`${editLabel}: ${row.title}`\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-edit-${row.index}`\"\n\t\t\t\t\t\t@click=\"startEdit(row)\">\n\t\t\t\t\t\t{{ editLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"canRemove\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:aria-label=\"removeAriaLabel(row)\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-remove-${row.key}`\"\n\t\t\t\t\t\t@click=\"remove(row)\">\n\t\t\t\t\t\t{{ removeLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<p v-if=\"row.detail\" class=\"cn-field-list-widget__detail\">\n\t\t\t\t\t{{ row.detail }}\n\t\t\t\t</p>\n\t\t\t\t<div v-if=\"row.detail && row.copies.length > 0\" class=\"cn-field-list-widget__copies\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-for=\"copy in row.copies\"\n\t\t\t\t\t\t:key=\"`copy-${copy.path}`\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-copy-${copy.path}-${row.key}`\"\n\t\t\t\t\t\t@click=\"copyValue(copy)\">\n\t\t\t\t\t\t{{ copy.label }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<p v-if=\"hint\" class=\"cn-field-list-widget__hint\">\n\t\t\t{{ hint }}\n\t\t</p>\n\n\t\t<div v-if=\"canAdd && addTrigger && addPlacement === 'footer' && !adding\" class=\"cn-field-list-widget__toolbar\">\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-open-add\"\n\t\t\t\t@click=\"adding = true\">\n\t\t\t\t+ {{ addLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<form\n\t\t\tv-if=\"canAdd && !(addTrigger && addAtTop) && (!addTrigger || adding)\"\n\t\t\tclass=\"cn-field-list-widget__add\"\n\t\t\tdata-testid=\"cn-field-list-add\"\n\t\t\t@submit.prevent=\"add\">\n\t\t\t<div\n\t\t\t\tv-for=\"field in addFields\"\n\t\t\t\t:key=\"field.key\"\n\t\t\t\tclass=\"cn-field-list-widget__field\"\n\t\t\t\t:data-testid=\"`cn-field-list-input-${field.key}`\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"field.type === 'multiselect'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:keepOpen=\"true\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-else-if=\"field.type === 'select'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-else-if=\"field.type === 'checkbox'\"\n\t\t\t\t\tv-model=\"draft[field.key]\">\n\t\t\t\t\t{{ field.label }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-else\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:error=\"Boolean(errors[field.key])\"\n\t\t\t\t\t:helperText=\"errors[field.key] || ''\" />\n\t\t\t</div>\n\t\t\t<NcButton type=\"submit\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-submit\">\n\t\t\t\t{{ editingKey !== null ? saveLabel : addLabel }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"editingKey !== null\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\tdata-testid=\"cn-field-list-cancel-edit\"\n\t\t\t\t@click=\"cancelEdit\">\n\t\t\t\t{{ tr('Cancel') }}\n\t\t\t</NcButton>\n\t\t</form>\n\n\t\t<span class=\"cn-field-list-widget__sr\" aria-live=\"polite\" data-testid=\"cn-field-list-copied\">{{ copied }}</span>\n\t\t<NcNoteCard v-if=\"notice\" :type=\"noticeType\" data-testid=\"cn-field-list-notice\">\n\t\t\t{{ notice }}\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { NcActionButton, NcActions, NcButton, NcCheckboxRadioSwitch, NcNoteCard, NcSelect, NcTextField } from '@nextcloud/vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport { isBadgeVariant } from '../../utils/badgeVariants.js'\nimport { formatBoardDate } from '../../utils/boardDate.js'\nimport { parseDateValue } from '../../utils/dateVariant.js'\nimport { prefixUrl } from '../../utils/headers.js'\nimport { readPath } from '../../utils/readPath.js'\nimport { serverErrorMessage } from '../../utils/serverErrorMessage.js'\n\n/**\n * CnFieldListWidget — the `field-list` widget: a list stored INSIDE one field\n * of the current object (a portal's `domains[]`, its `editors[]`), shown as\n * rows and edited in place.\n *\n * Rows are drawn from configuration (title, meta line, pill, aside, a detail\n * line); a small form adds an entry, a button removes one, and each change is\n * saved as ONE PATCH of that field on the object, after re-reading the stored\n * value so a concurrent change to the same list is not overwritten with a\n * stale copy. Optional row actions call a configured endpoint (a \"check\n * again\"), and an optional `rowSource` merges live per-row state read from an\n * endpoint by key without writing it back.\n *\n * The server decides who may write: a refused PATCH shows the server's words\n * and leaves the list as stored.\n *\n * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md\n */\n/**\n * A link a row title may carry: http(s) or root-relative, '' otherwise.\n *\n * @param {unknown} value The candidate.\n * @return {string} The link.\n */\nfunction safeRowHref(value) {\n\tconst text = typeof value === 'string' ? value.trim() : ''\n\treturn /^(\\/(?!\\/)|https?:\\/\\/)/i.test(text) ? text : ''\n}\n\n/**\n * The link of a row title: a path to a safe link, or `{ path, scheme }` for\n * a `mailto:` or `tel:` link to the value.\n *\n * @param {object} entry The row entry.\n * @param {string|{path: string, scheme: string}} spec The `row.href` config.\n * @return {string} The link, '' for none.\n */\nfunction rowHref(entry, spec) {\n\tif (spec && typeof spec === 'object') {\n\t\tconst value = readPath(entry, spec.path)\n\t\tconst text = typeof value === 'string' ? value.trim() : ''\n\t\tif (text === '' || !['mailto', 'tel'].includes(spec.scheme)) {\n\t\t\treturn ''\n\t\t}\n\t\treturn `${spec.scheme}:${spec.scheme === 'tel' ? text.replace(/[^\\d+]/g, '') : encodeURIComponent(text).replace(/%40/g, '@')}`\n\t}\n\treturn safeRowHref(readPath(entry, spec))\n}\n\nexport default {\n\tname: 'CnFieldListWidget',\n\n\tcomponents: { CnStatusBadge, NcActionButton, NcActions, NcButton, NcCheckboxRadioSwitch, NcNoteCard, NcSelect, NcTextField },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/** Opens a registered modal (CnAppRoot), for a row action with `dialog`. */\n\t\tcnOpenModal: { default: null },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The widget configuration.\n\t\t *\n\t\t * - `field` (required) — the object field holding the array.\n\t\t * - `key` — the item field that identifies an entry (default: the item itself for strings).\n\t\t * - `row` — `{ title, titleFallback?, avatar?, meta?: [paths|{ path, map?, format? }], pill?: { path, map?, variantMap? }, aside?: { path, format?, prefix?, fallback? }, detail?: { template, when?, copy?: [{ path, label }] } }`. `detail.copy` puts a copy button beside the detail line for each named value of the row (an empty value gets none), such as a DNS record's name and value.\n\t\t * - `add` — `{ label?, fields: [{ key, label, type?: 'text'|'select'|'multiselect'|'checkbox', options?, optionsSource?, required?, pattern?, patternMessage? }], unique?, defaults? }`. A `multiselect` field holds a list of values. `optionsSource` — `{ url, path?, valuePath?, labelPath? }` (default `id` and `name`) — adds options read from an endpoint after the static ones, each value once (tokens `@objectId`, `@object.<field>`), for choices that live in other records such as a case type's statuses.\n\t\t * - `remove` — `{ label? }`; omitted = no remove.\n\t\t * - `rowActions` — `[{ id, label, ariaLabel?, when?, placement?: 'band'|'inline', request: { method?, url, payload? } }]`, or `{ id, label, dialog, props }` to open a modal registered in the app registry with filled props (shown in `readOnly` too, since it writes nothing, and only when every token in `props` fills); tokens `@object.<field>`, `@objectId`, `@row.<field>`, `@index`. In the table variant `placement: 'inline'` draws the action as a button in the row instead of in the \"...\" menu; `ariaLabel` is a template filled from the row.\n\t\t * - `when` (row actions, `detail`) — `{ field: value }`, every field equal; or per field `{ eq?, neq?, set? }`, where a value `@row.<field>` (or `@<field>`) is another field of the same row: `{ deliveredRef: { set: true, neq: '@originalRef' } }`.\n\t\t * - `rowSource` — `{ url, path?, key }`: live per-row state merged by key.\n\t\t * - `variant: 'table'` + `columns` — `[{ header, path, map?, format?, strong?, pill?, variantMap?, labelsFrom? }]` (a list value reads as its items joined; `labelsFrom` names an add field whose option labels word the values): rows as a table; a per-row \"...\" menu holds the row actions and remove; `detail` lines become a warning band under the table, with the row actions that have `placement: 'band'`.\n\t\t * - `add.trigger: 'button'`, `add.placement: 'header' | 'title' | 'footer'` — the add form opens from a button; `title` reports the button for the card's title row on the `header` event.\n\t\t * - `readOnly`, `hint`, `emptyText`.\n\t\t * - `row.href` — the path of a link for the row title; only http(s) and root-relative links, an absolute one opens in a new tab.\n\t\t * - `lead` — a line above the rows, translated, with `{path}` filled from the object.\n\t\t * - `edit` — `true` or `{ label?, saveLabel? }`: an Edit button per row opens the form prefilled and saves the entry in place.\n\t\t * - `add.fields[].type: 'checkbox'`; `add.exclusive` — flags only one entry holds; `add.requireOneOf` (+ `requireOneOfMessage`) — keys of which one must be filled.\n\t\t * - `row.href` may be `{ path, scheme: 'mailto'|'tel' }`.\n\t\t * - `afterSave` — `{ url, method?, body?, failureText? }`: called after every save that went through, with `@objectId` / `@object.<field>` tokens; when it fails the save stands and `failureText` shows.\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 detail-page object. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current object id. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** OpenRegister register slug of the surface. */\n\t\tregister: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** OpenRegister schema slug of the surface. */\n\t\tschema: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: ['saved', 'header'],\n\n\tdata() {\n\t\treturn {\n\t\t\t/** The list as last saved by this widget; null = read it off objectData. */\n\t\t\tsaved: null,\n\t\t\t/** Live per-row state from `rowSource`, by key. */\n\t\t\tlive: {},\n\t\t\tdraft: {},\n\t\t\t/** Whether the add form is open (only with `add.trigger: 'button'`). */\n\t\t\tadding: false,\n\t\t\t/** The key of the entry the form edits; null while it adds. */\n\t\t\teditingKey: null,\n\t\t\terrors: {},\n\t\t\tbusy: '',\n\t\t\tnotice: '',\n\t\t\tnoticeType: 'error',\n\t\t\t// What the last copy button put on the clipboard, said to a screen reader.\n\t\t\tcopied: '',\n\t\t\t/** Options read through each add field's `optionsSource`, by field key. */\n\t\t\tsourcedOptions: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The stored list.\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\titems() {\n\t\t\tconst list = this.saved !== null ? this.saved : readPath(this.objectData || {}, this.content.field)\n\t\t\treturn Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The rows to draw.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-draws-the-entries-of-one-object-field\n\t\t */\n\t\trows() {\n\t\t\tconst spec = this.content.row || {}\n\t\t\treturn this.items.map((item, index) => {\n\t\t\t\tconst key = this.keyOf(item, index)\n\t\t\t\tconst entry = item && typeof item === 'object'\n\t\t\t\t\t? { ...item, ...(this.live[key] || {}) }\n\t\t\t\t\t: { value: item, ...(this.live[key] || {}) }\n\t\t\t\tconst title = this.text(entry, spec.title) || this.text(entry, spec.titleFallback) || (typeof item === 'string' ? item : key)\n\t\t\t\tconst meta = (Array.isArray(spec.meta) ? spec.meta : [])\n\t\t\t\t\t.map((part) => this.text(entry, part))\n\t\t\t\t\t.filter((part) => part !== '')\n\t\t\t\t\t.join(' · ')\n\t\t\t\tconst href = spec.href ? rowHref(entry, spec.href) : ''\n\t\t\t\treturn {\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\titem,\n\t\t\t\t\tentry,\n\t\t\t\t\ttitle,\n\t\t\t\t\thref,\n\t\t\t\t\texternal: /^https?:\\/\\//i.test(href),\n\t\t\t\t\tinitials: spec.avatar ? this.initials(title) : '',\n\t\t\t\t\tmeta,\n\t\t\t\t\tpill: this.pillOf(entry, spec.pill),\n\t\t\t\t\taside: spec.aside ? this.asideOf(entry, spec.aside) : '',\n\t\t\t\t\tdetail: spec.detail && this.matches(entry, spec.detail.when) ? this.fill(spec.detail.template, entry) : '',\n\t\t\t\t\tcopies: spec.detail && this.matches(entry, spec.detail.when) ? this.copiesOf(entry, spec.detail.copy) : [],\n\t\t\t\t\tactions: this.actionsFor(entry, index),\n\t\t\t\t\tcells: this.isTable ? this.cellsOf(entry) : [],\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/** Whether the list is read-only. */\n\t\treadOnly() {\n\t\t\treturn this.content.readOnly === true\n\t\t},\n\n\t\t/** Whether entries can be added. */\n\t\tcanAdd() {\n\t\t\treturn !this.readOnly && this.addFields.length > 0 && Boolean(this.content.field)\n\t\t},\n\n\t\t/** Whether entries can be edited in place (`edit`). */\n\t\tcanEdit() {\n\t\t\treturn !this.readOnly && Boolean(this.content.edit) && Boolean(this.content.field) && this.addFields.length > 0\n\t\t},\n\n\t\t/** @return {string} The edit button's label. */\n\t\teditLabel() {\n\t\t\tconst edit = this.content.edit\n\t\t\treturn this.tr((edit && typeof edit === 'object' && edit.label) || 'Edit')\n\t\t},\n\n\t\t/** @return {string} The submit label while editing. */\n\t\tsaveLabel() {\n\t\t\tconst edit = this.content.edit\n\t\t\treturn this.tr((edit && typeof edit === 'object' && edit.saveLabel) || 'Save')\n\t\t},\n\n\t\t/** Whether entries can be removed. */\n\t\tcanRemove() {\n\t\t\treturn !this.readOnly && Boolean(this.content.remove) && Boolean(this.content.field)\n\t\t},\n\n\t\t/**\n\t\t * The add form's fields, labels translated, select options translated.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\taddFields() {\n\t\t\tconst fields = this.content.add && Array.isArray(this.content.add.fields) ? this.content.add.fields : []\n\t\t\treturn fields\n\t\t\t\t.filter((field) => field && field.key)\n\t\t\t\t.map((field) => ({\n\t\t\t\t\t...field,\n\t\t\t\t\tlabel: this.tr(field.label || field.key),\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t...(Array.isArray(field.options) ? field.options : []).map((option) => (\n\t\t\t\t\t\t\ttypeof option === 'object' ? { value: option.value, label: this.tr(option.label || String(option.value)) } : { value: option, label: this.tr(String(option)) }\n\t\t\t\t\t\t)),\n\t\t\t\t\t\t...(this.sourcedOptions[field.key] || []),\n\t\t\t\t\t],\n\t\t\t\t}))\n\t\t},\n\n\t\t/** Whether the rows are drawn as a table (`variant: 'table'`). */\n\t\tisTable() {\n\t\t\treturn this.content.variant === 'table' && this.tableColumns.length > 0\n\t\t},\n\n\t\t/**\n\t\t * The table columns, headers translated.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\ttableColumns() {\n\t\t\treturn (Array.isArray(this.content.columns) ? this.content.columns : [])\n\t\t\t\t.filter((column) => column && column.path)\n\t\t\t\t.map((column, index) => ({ ...column, key: `${column.path}-${index}`, header: this.tr(column.header || '') }))\n\t\t},\n\n\t\t/** Whether each row has an actions cell: inline row actions, or a \"more actions\" menu (row actions not placed in the band, and remove). */\n\t\thasMenu() {\n\t\t\treturn this.isTable && (this.canRemove || this.rows.some((row) => this.menuItems(row).length > 0 || this.inlineActions(row).length > 0))\n\t\t},\n\n\t\t/** Rows with a detail line: in the table variant it is a warning band under the table. */\n\t\tbandRows() {\n\t\t\treturn this.rows\n\t\t\t\t.filter((row) => row.detail !== '')\n\t\t\t\t.map((row) => ({ ...row, bandActions: row.actions.filter((action) => action.placement === 'band') }))\n\t\t},\n\n\t\t/** Whether the add form opens from a button (`add.trigger: 'button'`). */\n\t\taddTrigger() {\n\t\t\treturn Boolean(this.content.add && this.content.add.trigger === 'button')\n\t\t},\n\n\t\t/**\n\t\t * Where the add button sits: `header` (above the rows), `title` (the\n\t\t * card's title row, reported on the `header` event) or `footer` (default).\n\t\t */\n\t\taddPlacement() {\n\t\t\tconst placement = this.content.add && this.content.add.placement\n\t\t\treturn placement === 'header' || placement === 'title' ? placement : 'footer'\n\t\t},\n\n\t\t/** Whether the add form opens above the rows. */\n\t\taddAtTop() {\n\t\t\treturn this.addPlacement === 'header' || this.addPlacement === 'title'\n\t\t},\n\n\t\t/**\n\t\t * The card title row's actions: the add button with `add.placement: \"title\"`.\n\t\t *\n\t\t * @return {Array<{label: string, icon: string, run: () => void}>} The actions.\n\t\t */\n\t\ttitleActions() {\n\t\t\tif (!(this.canAdd && this.addTrigger && this.addPlacement === 'title')) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst run = () => {\n\t\t\t\tthis.adding = !this.adding\n\t\t\t}\n\t\t\treturn [{ label: this.addLabel, icon: 'Plus', run }]\n\t\t},\n\n\t\taddLabel() {\n\t\t\treturn this.tr((this.content.add && this.content.add.label) || 'Add')\n\t\t},\n\n\t\tremoveLabel() {\n\t\t\treturn this.tr((this.content.remove && this.content.remove.label) || 'Remove')\n\t\t},\n\n\t\t/**\n\t\t * The line above the rows, filled from the object.\n\t\t *\n\t\t * @spec openspec/changes/field-list-links-lead-after-save/specs/field-list/spec.md#requirement-a-field-list-links-its-rows-leads-with-the-object-and-calls-after-a-save\n\t\t * @return {string}\n\t\t */\n\t\tlead() {\n\t\t\tif (!this.content.lead) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.tr(this.content.lead).replace(/\\{([\\w.]+)\\}/g, (m, path) => {\n\t\t\t\tconst value = readPath(this.objectData || {}, path)\n\t\t\t\treturn value === undefined || value === null ? '' : String(value)\n\t\t\t})\n\t\t},\n\n\t\thint() {\n\t\t\treturn this.tr(this.content.hint || '')\n\t\t},\n\n\t\temptyLabel() {\n\t\t\treturn this.tr(this.content.emptyText || 'Nothing listed yet')\n\t\t},\n\n\t\t/** The object URL the list is saved to, or '' when it is not known. */\n\t\tobjectUrl() {\n\t\t\tconst id = this.objectId || (this.objectData && this.objectData.id)\n\t\t\tif (!this.register || !this.schema || !id || typeof this.register !== 'string' || typeof this.schema !== 'string') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn `/apps/openregister/api/objects/${encodeURIComponent(this.register)}/${encodeURIComponent(this.schema)}/${encodeURIComponent(String(id))}`\n\t\t},\n\t},\n\n\twatch: {\n\t\ttitleActions: {\n\t\t\timmediate: true,\n\t\t\thandler(actions) {\n\t\t\t\t/**\n\t\t\t\t * @event header The card's title-row actions, `{ actions }`, for the host to draw.\n\t\t\t\t */\n\t\t\t\tthis.$emit('header', { actions })\n\t\t\t},\n\t\t},\n\n\t\tobjectData() {\n\t\t\tthis.saved = null\n\t\t\tthis.loadLive()\n\t\t\tthis.loadOptions()\n\t\t},\n\t},\n\n\tcreated() {\n\t\tthis.resetDraft()\n\t\tthis.loadLive()\n\t\tthis.loadOptions()\n\t},\n\n\tmethods: {\n\t\ttr(text) {\n\t\t\tif (typeof text !== 'string' || text === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The cells of one table row, one per column.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @return {Array<{text: string, pill: object|null}>}\n\t\t */\n\t\tcellsOf(entry) {\n\t\t\treturn this.tableColumns.map((column) => ({\n\t\t\t\ttext: this.text(entry, column),\n\t\t\t\tpill: column.pill ? this.pillOf(entry, column) : null,\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * The items of a row's menu in the table variant: the row actions not\n\t\t * placed in the band, then remove.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{id: string, label: string, run: Function}>}\n\t\t */\n\t\tmenuItems(row) {\n\t\t\tconst items = row.actions\n\t\t\t\t.filter((action) => action.placement !== 'band' && action.placement !== 'inline')\n\t\t\t\t.map((action) => ({ id: action.id, label: action.label, run: () => this.runAction(action, row) }))\n\t\t\tif (this.canRemove) {\n\t\t\t\titems.push({ id: 'remove', label: this.removeLabel, run: () => this.remove(row) })\n\t\t\t}\n\t\t\treturn items\n\t\t},\n\n\t\t/**\n\t\t * The row actions drawn as buttons in a table row (`placement: 'inline'`).\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<object>}\n\t\t */\n\t\tinlineActions(row) {\n\t\t\treturn row.actions.filter((action) => action.placement === 'inline')\n\t\t},\n\n\t\t/**\n\t\t * The identity of an entry.\n\t\t *\n\t\t * @param {unknown} item The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {string}\n\t\t */\n\t\tkeyOf(item, index) {\n\t\t\tif (item === null || typeof item !== 'object') {\n\t\t\t\treturn String(item)\n\t\t\t}\n\t\t\tconst key = this.content.key ? readPath(item, this.content.key) : undefined\n\t\t\treturn key === undefined || key === null || key === '' ? `item-${index}` : String(key)\n\t\t},\n\n\t\t/**\n\t\t * A display text off an entry: a path, or `{ path, map?, format? }`.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {string|object} spec The spec.\n\t\t * @return {string}\n\t\t */\n\t\ttext(entry, spec) {\n\t\t\tif (!spec) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst def = typeof spec === 'string' ? { path: spec } : spec\n\t\t\tconst raw = readPath(entry, def.path)\n\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (def.format === 'date' || def.format === 'date-long') {\n\t\t\t\tconst date = parseDateValue(raw)\n\t\t\t\tif (date === null) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn def.format === 'date-long' ? formatBoardDate(date, new Date(date.getFullYear() + 1, 0, 1)) : formatBoardDate(date)\n\t\t\t}\n\t\t\tif (Array.isArray(raw)) {\n\t\t\t\treturn raw.map((item) => this.wordOf(item, def)).filter((word) => word !== '').join(', ')\n\t\t\t}\n\t\t\treturn this.wordOf(raw, def)\n\t\t},\n\n\t\t/**\n\t\t * One value in words: through the column's `map`, then the option labels\n\t\t * of the add field it names in `labelsFrom`, else the value itself.\n\t\t *\n\t\t * @param {string|number|boolean|object} raw The value.\n\t\t * @param {object} def The column.\n\t\t * @return {string}\n\t\t */\n\t\twordOf(raw, def) {\n\t\t\tif (def.map && Object.hasOwn(def.map, String(raw))) {\n\t\t\t\treturn this.tr(def.map[String(raw)])\n\t\t\t}\n\t\t\tif (def.labelsFrom) {\n\t\t\t\tconst field = this.addFields.find((candidate) => candidate.key === def.labelsFrom)\n\t\t\t\tconst option = field && field.options.find((candidate) => String(candidate.value) === String(raw))\n\t\t\t\tif (option) {\n\t\t\t\t\treturn option.label\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn typeof raw === 'object' ? '' : String(raw)\n\t\t},\n\n\t\t/**\n\t\t * The empty value of an add field: false for a checkbox, a list for a multiselect.\n\t\t *\n\t\t * @param {object} field The add field.\n\t\t * @return {boolean|Array|string}\n\t\t */\n\t\temptyValue(field) {\n\t\t\tif (field.type === 'checkbox') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn field.type === 'multiselect' ? [] : ''\n\t\t},\n\n\t\t/**\n\t\t * Read the options of every add field that names an `optionsSource`.\n\t\t *\n\t\t * A source that cannot be read leaves the static options alone.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadOptions() {\n\t\t\tconst fields = this.content.add && Array.isArray(this.content.add.fields) ? this.content.add.fields : []\n\t\t\tfor (const field of fields) {\n\t\t\t\tconst source = field && field.optionsSource\n\t\t\t\tif (!source || !source.url || !field.key) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst { axios } = await this.http()\n\t\t\t\t\tconst response = await axios.get(prefixUrl(this.resolve(source.url, {})))\n\t\t\t\t\tconst list = source.path ? readPath(response && response.data, source.path) : response && response.data\n\t\t\t\t\tconst options = (Array.isArray(list) ? list : [])\n\t\t\t\t\t\t.map((item) => ({ value: readPath(item, source.valuePath || 'id'), label: String(readPath(item, source.labelPath || 'name') ?? '') }))\n\t\t\t\t\t\t.filter((option, index, all) => option.value !== undefined && option.value !== null && option.value !== ''\n\t\t\t\t\t\t\t&& all.findIndex((other) => String(other.value) === String(option.value)) === index)\n\t\t\t\t\tthis.sourcedOptions = { ...this.sourcedOptions, [field.key]: options }\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn('[CnFieldListWidget] optionsSource could not be read:', e?.message || e)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpillOf(entry, spec) {\n\t\t\tif (!spec || !spec.path) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst raw = readPath(entry, spec.path)\n\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst label = this.text(entry, spec)\n\t\t\tconst variant = spec.variantMap && spec.variantMap[String(raw)]\n\t\t\treturn { label, variant: isBadgeVariant(variant) ? variant : 'default' }\n\t\t},\n\n\t\tasideOf(entry, spec) {\n\t\t\tconst value = this.text(entry, spec)\n\t\t\tif (value === '') {\n\t\t\t\t// No value: the optional `fallback` label, translated, instead of an empty aside.\n\t\t\t\treturn this.tr(spec.fallback)\n\t\t\t}\n\t\t\treturn spec.prefix ? `${this.tr(spec.prefix)} ${value}` : value\n\t\t},\n\n\t\t/**\n\t\t * Whether an entry matches a `{ field: value }` condition (every field equal).\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {object|undefined} when The condition.\n\t\t * @return {boolean}\n\t\t */\n\t\tmatches(entry, when) {\n\t\t\tif (!when || typeof when !== 'object') {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Object.entries(when).every(([field, expected]) => {\n\t\t\t\tconst actual = readPath(entry, field)\n\t\t\t\tif (expected && typeof expected === 'object' && !Array.isArray(expected)) {\n\t\t\t\t\treturn this.matchesOperators(entry, actual, expected)\n\t\t\t\t}\n\t\t\t\tif (expected === false) {\n\t\t\t\t\treturn actual === false || actual === undefined || actual === null || actual === ''\n\t\t\t\t}\n\t\t\t\treturn String(actual) === String(expected)\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Whether a value passes `{ eq?, neq?, set? }`. An operand `@row.<field>`\n\t\t * or `@<field>` is that field of the same entry.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {unknown} actual The value tested.\n\t\t * @param {object} ops The operators.\n\t\t * @return {boolean}\n\t\t */\n\t\tmatchesOperators(entry, actual, ops) {\n\t\t\tconst empty = (v) => v === undefined || v === null || v === ''\n\t\t\tconst operand = (v) => {\n\t\t\t\tif (typeof v === 'string' && v.startsWith('@')) {\n\t\t\t\t\tconst path = v.startsWith('@row.') ? v.slice('@row.'.length) : v.slice(1)\n\t\t\t\t\treturn readPath(entry, path)\n\t\t\t\t}\n\t\t\t\treturn v\n\t\t\t}\n\t\t\tconst same = (a, b) => (empty(a) && empty(b)) || (!empty(a) && !empty(b) && String(a) === String(b))\n\t\t\tif (ops.set !== undefined && Boolean(ops.set) !== !empty(actual)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (Object.hasOwn(ops, 'eq') && !same(actual, operand(ops.eq))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (Object.hasOwn(ops, 'neq') && same(actual, operand(ops.neq))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Fill `{path}` placeholders from an entry; '' when one stays empty.\n\t\t *\n\t\t * @param {string} template The template, translated first.\n\t\t * @param {object} entry The entry.\n\t\t * @return {string}\n\t\t */\n\t\tfill(template, entry) {\n\t\t\tif (typeof template !== 'string') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tlet missing = false\n\t\t\tconst out = this.tr(template).replace(/\\{([\\w.@]+)\\}/g, (match, path) => {\n\t\t\t\tconst value = readPath(entry, path)\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tmissing = true\n\t\t\t\t\treturn match\n\t\t\t\t}\n\t\t\t\treturn String(value)\n\t\t\t})\n\t\t\treturn missing ? '' : out\n\t\t},\n\n\t\t/**\n\t\t * The row actions an entry offers: request actions unless the list is\n\t\t * read-only, and dialog actions always, when their props all fill.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {Array<object>}\n\t\t */\n\t\tactionsFor(entry, index) {\n\t\t\tconst actions = Array.isArray(this.content.rowActions) ? this.content.rowActions : []\n\t\t\treturn actions\n\t\t\t\t.filter((action) => action && action.id && this.matches(entry, action.when))\n\t\t\t\t.filter((action) => (action.dialog\n\t\t\t\t\t? this.dialogPropsOf(action, entry, index) !== null\n\t\t\t\t\t: !this.readOnly && action.request && action.request.url))\n\t\t\t\t.map((action) => ({\n\t\t\t\t\t...action,\n\t\t\t\t\tlabel: this.tr(action.label || action.id),\n\t\t\t\t\tariaLabel: action.ariaLabel ? this.fill(action.ariaLabel, entry) : '',\n\t\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * A dialog action's props with their tokens filled, `/apps/` paths made\n\t\t * absolute; null when a token stays empty, so the dialog is not offered\n\t\t * with half an address.\n\t\t *\n\t\t * @param {object} action The action.\n\t\t * @param {object} entry The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {object|null}\n\t\t */\n\t\tdialogPropsOf(action, entry, index) {\n\t\t\tconst out = {}\n\t\t\tfor (const [name, value] of Object.entries(action.props || {})) {\n\t\t\t\tif (typeof value !== 'string') {\n\t\t\t\t\tout[name] = value\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tlet missing = false\n\t\t\t\tconst object = this.objectData || {}\n\t\t\t\tconst filled = value\n\t\t\t\t\t.replace(/@index\\b/g, () => String(index))\n\t\t\t\t\t.replace(/@objectId\\b/g, () => {\n\t\t\t\t\t\tconst id = String(this.objectId || object.id || '')\n\t\t\t\t\t\tmissing = missing || id === ''\n\t\t\t\t\t\treturn encodeURIComponent(id)\n\t\t\t\t\t})\n\t\t\t\t\t.replace(/@(row|object)\\.([\\w.@]+)/g, (m, scope, path) => {\n\t\t\t\t\t\tconst v = readPath((scope === 'row' ? entry : object) || {}, path)\n\t\t\t\t\t\tmissing = missing || v === undefined || v === null || v === ''\n\t\t\t\t\t\treturn encodeURIComponent(String(v ?? ''))\n\t\t\t\t\t})\n\t\t\t\tif (missing) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tout[name] = filled.startsWith('/apps/') ? prefixUrl(filled) : filled\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\tinitials(name) {\n\t\t\treturn String(name || '').split(/[\\s@._-]+/).filter(Boolean).slice(0, 2).map((part) => part.charAt(0).toUpperCase()).join('')\n\t\t},\n\n\t\tremoveAriaLabel(row) {\n\t\t\treturn `${this.removeLabel}: ${row.title}`\n\t\t},\n\n\t\tresetDraft() {\n\t\t\tconst draft = {}\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst empty = this.emptyValue(field)\n\t\t\t\tconst first = field.type === 'select' && field.options.length > 0 ? field.options[0].value : empty\n\t\t\t\tdraft[field.key] = field.default !== undefined ? field.default : first\n\t\t\t}\n\t\t\tthis.draft = draft\n\t\t\tthis.errors = {}\n\t\t},\n\n\t\t/**\n\t\t * Resolve `@objectId`, `@object.<field>` and `@row.<field>` inside a string or a payload.\n\t\t *\n\t\t * @param {unknown} value The value.\n\t\t * @param {object} entry The row entry.\n\t\t * @return {unknown}\n\t\t */\n\t\tresolve(value, entry) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.map((v) => this.resolve(v, entry))\n\t\t\t}\n\t\t\tif (value && typeof value === 'object') {\n\t\t\t\treturn Object.fromEntries(Object.entries(value).map(([k, v]) => [k, this.resolve(v, entry)]))\n\t\t\t}\n\t\t\tif (typeof value !== 'string') {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tconst object = this.objectData || {}\n\t\t\tconst read = (source, path) => {\n\t\t\t\tconst v = readPath(source || {}, path)\n\t\t\t\treturn v === undefined || v === null ? '' : v\n\t\t\t}\n\t\t\tconst whole = value.match(/^@(row|object)\\.([\\w.@]+)$/)\n\t\t\tif (whole) {\n\t\t\t\treturn read(whole[1] === 'row' ? entry : object, whole[2])\n\t\t\t}\n\t\t\treturn value\n\t\t\t\t.replace(/@objectId/g, () => encodeURIComponent(String(this.objectId || object.id || '')))\n\t\t\t\t.replace(/@(row|object)\\.([\\w.@]+)/g, (m, scope, path) => encodeURIComponent(String(read(scope === 'row' ? entry : object, path))))\n\t\t},\n\n\t\tasync http() {\n\t\t\tconst { default: axios } = await import('@nextcloud/axios')\n\t\t\treturn { axios }\n\t\t},\n\n\t\t/**\n\t\t * Read live per-row state from `rowSource` and keep it by key.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadLive() {\n\t\t\tconst source = this.content.rowSource\n\t\t\tif (!source || !source.url || !source.key || !this.objectData) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst response = await axios.get(prefixUrl(this.resolve(source.url, {})))\n\t\t\t\tconst data = response && response.data\n\t\t\t\tconst list = source.path ? readPath(data, source.path) : data\n\t\t\t\tconst live = {}\n\t\t\t\tfor (const item of Array.isArray(list) ? list : []) {\n\t\t\t\t\tconst key = item && readPath(item, source.key)\n\t\t\t\t\tif (key !== undefined && key !== null) {\n\t\t\t\t\t\tlive[String(key)] = item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.live = live\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn('[CnFieldListWidget] rowSource could not be read:', e?.message || e)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Save a new list: re-read the stored value, apply the change to it, and\n\t\t * PATCH that one field.\n\t\t *\n\t\t * @param {(stored: Array) => Array} change Builds the next list from the stored one, or throws an Error with a `userMessage`.\n\t\t * @param {string} busyKey What is busy.\n\t\t * @return {Promise<boolean>} Whether it saved.\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-saves-one-field-with-one-patch\n\t\t */\n\t\tasync save(change, busyKey) {\n\t\t\tif (!this.objectUrl) {\n\t\t\t\tthis.notify(this.tr('This list cannot be saved here.'))\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.busy = busyKey\n\t\t\tthis.notice = ''\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst { data: stored } = await axios.get(prefixUrl(this.objectUrl))\n\t\t\t\tconst current = readPath(stored || {}, this.content.field)\n\t\t\t\tconst next = change(Array.isArray(current) ? current : [])\n\t\t\t\tconst { data } = await axios.patch(prefixUrl(this.objectUrl), { [this.content.field]: next })\n\t\t\t\tconst written = readPath(data || {}, this.content.field)\n\t\t\t\tthis.saved = Array.isArray(written) ? written : next\n\t\t\t\t/**\n\t\t\t\t * @event saved The list was saved: one PATCH of the field succeeded.\n\t\t\t\t * @type {{field: string, value: Array}}\n\t\t\t\t */\n\t\t\t\tthis.$emit('saved', { field: this.content.field, value: this.saved })\n\t\t\t\tawait this.runAfterSave(axios)\n\t\t\t\treturn true\n\t\t\t} catch (e) {\n\t\t\t\tthis.notify(e && e.userMessage ? e.userMessage : serverErrorMessage(e))\n\t\t\t\treturn false\n\t\t\t} finally {\n\t\t\t\tthis.busy = ''\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Call `afterSave` once a save went through. A failure leaves the save\n\t\t * standing and shows `failureText`.\n\t\t *\n\t\t * @spec openspec/changes/field-list-links-lead-after-save/specs/field-list/spec.md#requirement-a-field-list-links-its-rows-leads-with-the-object-and-calls-after-a-save\n\t\t * @param {object} axios The HTTP client.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync runAfterSave(axios) {\n\t\t\tconst after = this.content.afterSave\n\t\t\tif (!after || typeof after.url !== 'string' || after.url === '') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst method = String(after.method || 'POST').toLowerCase()\n\t\t\t\tconst url = prefixUrl(this.resolve(after.url, {}))\n\t\t\t\tif (method === 'get') {\n\t\t\t\t\tawait axios.get(url)\n\t\t\t\t} else {\n\t\t\t\t\tawait axios[method](url, this.resolve(after.body || {}, {}))\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (after.failureText) {\n\t\t\t\t\tthis.notify(this.tr(after.failureText), 'warning')\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnotify(message, type = 'error') {\n\t\t\tthis.notice = message\n\t\t\tthis.noticeType = type\n\t\t},\n\n\t\t/**\n\t\t * Validate the draft and add it.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-adds-and-removes-entries\n\t\t */\n\t\tasync add() {\n\t\t\tconst errors = {}\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst value = this.draft[field.key]\n\t\t\t\tconst empty = value === undefined || value === null || (Array.isArray(value) ? value.length === 0 : String(value).trim() === '')\n\t\t\t\tif (field.required && empty) {\n\t\t\t\t\terrors[field.key] = this.tr('Fill this in.')\n\t\t\t\t} else if (!empty && field.pattern && !Array.isArray(value) && !new RegExp(field.pattern).test(String(value).trim())) {\n\t\t\t\t\terrors[field.key] = this.tr(field.patternMessage || 'This value is not valid.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst oneOf = Array.isArray(this.content.add?.requireOneOf) ? this.content.add.requireOneOf : []\n\t\t\tif (oneOf.length > 0 && oneOf.every((key) => String(this.draft[key] ?? '').trim() === '')) {\n\t\t\t\terrors[oneOf[0]] = this.tr(this.content.add.requireOneOfMessage || 'Fill this in.')\n\t\t\t}\n\t\t\tthis.errors = errors\n\t\t\tif (Object.keys(errors).length > 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst entry = this.newEntry()\n\t\t\tconst scalar = typeof entry !== 'object'\n\t\t\tconst unique = this.content.add && this.content.add.unique\n\t\t\tconst editing = this.editingKey\n\t\t\tconst saved = await this.save((stored) => {\n\t\t\t\tconst others = stored.filter((item, index) => editing === null || this.keyOf(item, index) !== editing)\n\t\t\t\tconst duplicate = scalar\n\t\t\t\t\t? (unique && others.some((item) => String(item) === String(entry)))\n\t\t\t\t\t: (unique && others.some((item) => item && String(readPath(item, unique)) === String(entry[unique])))\n\t\t\t\tif (duplicate) {\n\t\t\t\t\tconst error = new Error('duplicate')\n\t\t\t\t\terror.userMessage = this.tr('This is already in the list.')\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t\tconst next = editing === null\n\t\t\t\t\t? [...stored, entry]\n\t\t\t\t\t: stored.map((item, index) => (this.keyOf(item, index) === editing ? (scalar ? entry : { ...item, ...entry }) : item))\n\t\t\t\treturn this.withExclusive(next, editing === null ? next.length - 1 : next.findIndex((item, index) => this.keyOf(stored[index], index) === editing))\n\t\t\t}, '*')\n\t\t\tif (saved) {\n\t\t\t\tthis.resetDraft()\n\t\t\t\tthis.adding = false\n\t\t\t\tthis.editingKey = null\n\t\t\t\tthis.loadLive()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Keep an `add.exclusive` flag on one entry: when the entry at `index`\n\t\t * has it, every other entry loses it (one primary address).\n\t\t *\n\t\t * @param {Array<object>} list The list to save.\n\t\t * @param {number} index The entry just added or edited.\n\t\t * @return {Array<object>} The list.\n\t\t * @spec openspec/changes/field-list-edit/specs/field-list/spec.md#requirement-a-field-list-entry-can-be-edited-and-one-entry-can-be-the-primary\n\t\t */\n\t\twithExclusive(list, index) {\n\t\t\tconst flags = Array.isArray(this.content.add?.exclusive) ? this.content.add.exclusive : []\n\t\t\tconst chosen = list[index]\n\t\t\tif (!chosen || typeof chosen !== 'object') {\n\t\t\t\treturn list\n\t\t\t}\n\t\t\treturn list.map((item, i) => {\n\t\t\t\tif (i === index || !item || typeof item !== 'object') {\n\t\t\t\t\treturn item\n\t\t\t\t}\n\t\t\t\tconst cleared = { ...item }\n\t\t\t\tfor (const flag of flags) {\n\t\t\t\t\tif (chosen[flag] === true && cleared[flag] === true) {\n\t\t\t\t\t\tcleared[flag] = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn cleared\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open an entry in the form, prefilled.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/field-list-edit/specs/field-list/spec.md#requirement-a-field-list-entry-can-be-edited-and-one-entry-can-be-the-primary\n\t\t */\n\t\tstartEdit(row) {\n\t\t\tconst draft = {}\n\t\t\tfor (const [index, field] of this.addFields.entries()) {\n\t\t\t\tconst scalarValue = this.content.add?.scalar === true && index === 0 ? row.item : undefined\n\t\t\t\tconst value = row.item && typeof row.item === 'object' ? readPath(row.item, field.key) : scalarValue\n\t\t\t\tdraft[field.key] = value === undefined || value === null ? this.emptyValue(field) : value\n\t\t\t}\n\t\t\tthis.draft = draft\n\t\t\tthis.errors = {}\n\t\t\tthis.editingKey = row.key\n\t\t\tthis.adding = true\n\t\t},\n\n\t\t/** Close the form without saving the edit. */\n\t\tcancelEdit() {\n\t\t\tthis.editingKey = null\n\t\t\tthis.adding = false\n\t\t\tthis.resetDraft()\n\t\t},\n\n\t\t/**\n\t\t * The entry the add form describes: an object of the filled add fields\n\t\t * over `add.defaults`, or, with `add.scalar`, the trimmed value of the\n\t\t * first add field itself (a list of strings such as `enumValues`).\n\t\t *\n\t\t * @return {object|string} The entry.\n\t\t * @spec openspec/changes/side-card-follows-row/specs/side-card-follows-row/spec.md#requirement-a-field-list-adds-plain-values\n\t\t */\n\t\tnewEntry() {\n\t\t\tconst add = this.content.add || {}\n\t\t\tconst trimmed = (value) => (typeof value === 'string' ? value.trim() : value)\n\t\t\tif (add.scalar === true) {\n\t\t\t\tconst first = this.addFields[0]\n\t\t\t\treturn first ? trimmed(this.draft[first.key]) : ''\n\t\t\t}\n\t\t\tconst entry = { ...(add.defaults || {}) }\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst value = this.draft[field.key]\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t// An emptied list is written as empty, so an edit can clear it.\n\t\t\t\t\tentry[field.key] = value\n\t\t\t\t} else if (value !== undefined && value !== null && String(value).trim() !== '') {\n\t\t\t\t\tentry[field.key] = trimmed(value)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn entry\n\t\t},\n\n\t\t/**\n\t\t * Remove an entry by its key.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync remove(row) {\n\t\t\tawait this.save((stored) => stored.filter((item, index) => this.keyOf(item, index) !== row.key), row.key)\n\t\t},\n\n\t\t/**\n\t\t * Run a row action's request, then re-read the live state.\n\t\t *\n\t\t * @param {object} action The action.\n\t\t * @param {object} row The row.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-row-can-run-a-configured-request\n\t\t */\n\t\t/**\n\t\t * The copy buttons of a row's detail line: one per named value that is not empty.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {Array<{path: string, label?: string}>|undefined} declared The `detail.copy` list.\n\t\t * @return {Array<{path: string, label: string, value: string}>}\n\t\t */\n\t\tcopiesOf(entry, declared) {\n\t\t\treturn (Array.isArray(declared) ? declared : [])\n\t\t\t\t.filter((copy) => copy && typeof copy.path === 'string' && copy.path !== '')\n\t\t\t\t.map((copy) => ({\n\t\t\t\t\tpath: copy.path,\n\t\t\t\t\tlabel: this.tr(copy.label || 'Copy'),\n\t\t\t\t\tvalue: String(readPath(entry, copy.path) ?? ''),\n\t\t\t\t}))\n\t\t\t\t.filter((copy) => copy.value !== '')\n\t\t},\n\n\t\t/**\n\t\t * Put one value on the clipboard and say so; a browser that refuses says that instead.\n\t\t *\n\t\t * @param {{label: string, value: string}} copy The copy button.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync copyValue(copy) {\n\t\t\tthis.copied = ''\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(copy.value)\n\t\t\t\tthis.copied = `${this.tr('Copied')}: ${copy.label}`\n\t\t\t} catch {\n\t\t\t\tthis.notify(this.tr('Copying did not work. Select the text and copy it yourself.'))\n\t\t\t}\n\t\t},\n\n\t\tasync runAction(action, row) {\n\t\t\tif (action.dialog) {\n\t\t\t\tconst props = this.dialogPropsOf(action, row.entry, row.index)\n\t\t\t\tif (props !== null && typeof this.cnOpenModal === 'function') {\n\t\t\t\t\tthis.cnOpenModal(action.dialog, props)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.busy = row.key\n\t\t\tthis.notice = ''\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst method = String(action.request.method || 'POST').toLowerCase()\n\t\t\t\tconst payload = this.resolve(action.request.payload || {}, row.entry)\n\t\t\t\tconst response = method === 'get'\n\t\t\t\t\t? await axios.get(prefixUrl(this.resolve(action.request.url, row.entry)))\n\t\t\t\t\t: await axios[method](prefixUrl(this.resolve(action.request.url, row.entry)), payload)\n\t\t\t\tconst message = response && response.data && typeof response.data.message === 'string' ? response.data.message : ''\n\t\t\t\tif (message) {\n\t\t\t\t\tthis.notify(message, 'info')\n\t\t\t\t}\n\t\t\t\tawait this.loadLive()\n\t\t\t} catch (e) {\n\t\t\t\tthis.notify(serverErrorMessage(e))\n\t\t\t} finally {\n\t\t\t\tthis.busy = ''\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-field-list-widget {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__lead {\n\tmargin: 0;\n\tfont-weight: bold;\n}\n\n.cn-field-list-widget__rows {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.cn-field-list-widget__row {\n\tpadding: 10px 0;\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-field-list-widget__row:first-child {\n\tborder-top: none;\n\tpadding-top: 0;\n}\n\n.cn-field-list-widget__line {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__avatar {\n\tflex: 0 0 auto;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder-radius: 50%;\n\tbackground: var(--color-primary-element-light);\n\tcolor: var(--color-primary-element-light-text, var(--color-main-text));\n\tfont-size: 12px;\n\tfont-weight: 700;\n}\n\n.cn-field-list-widget__main {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1 1 auto;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__title {\n\tfont-weight: 600;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__meta,\n.cn-field-list-widget__aside,\n.cn-field-list-widget__detail,\n.cn-field-list-widget__hint,\n.cn-field-list-widget__empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-field-list-widget__meta,\n.cn-field-list-widget__aside,\n.cn-field-list-widget__copies {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 4px;\n}\n\n.cn-field-list-widget__detail {\n\tfont-size: 13px;\n}\n\n.cn-field-list-widget__aside {\n\twhite-space: nowrap;\n}\n\n.cn-field-list-widget__detail,\n.cn-field-list-widget__hint,\n.cn-field-list-widget__empty {\n\tmargin: 4px 0 0;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__add {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: flex-end;\n\tgap: 8px 12px;\n}\n\n.cn-field-list-widget__add > * {\n\tflex: 1 1 180px;\n}\n\n.cn-field-list-widget__add > button {\n\tflex: 0 0 auto;\n}\n\n.cn-field-list-widget__toolbar {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.cn-field-list-widget__table-wrap {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\toverflow-x: auto;\n}\n\n.cn-field-list-widget__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n}\n\n.cn-field-list-widget__th {\n\tpadding: 8px 12px;\n\ttext-align: start;\n\tfont-size: 13px;\n\tfont-weight: 600;\n\twhite-space: nowrap;\n\tcolor: var(--color-text-maxcontrast);\n\tbackground: var(--color-background-hover);\n}\n\n.cn-field-list-widget__th--menu,\n.cn-field-list-widget__code {\n\tfont-size: 0.85em;\n\tword-break: break-all;\n}\n\n.cn-field-list-widget__td--menu {\n\twidth: 1%;\n\ttext-align: end;\n}\n\n.cn-field-list-widget__tr {\n\tborder-top: 1px solid var(--cn-board-hairline, var(--color-border));\n}\n\n.cn-field-list-widget__td {\n\tpadding: 10px 12px;\n\tvertical-align: middle;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__sr {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\toverflow: hidden;\n\tclip-path: inset(50%);\n}\n\n.cn-field-list-widget__band {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 8px 12px;\n\tpadding: 12px 14px;\n\tborder: 1px solid var(--color-warning);\n\tborder-radius: 10px;\n\tbackground: color-mix(in srgb, var(--color-warning) 14%, var(--color-main-background));\n\tfont-size: 14px;\n}\n</style>\n"],"names":["CnStatusBadge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CnFieldListWidget.vue2.js","sources":["../../../../src/components/CnFieldListWidget/CnFieldListWidget.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div class=\"cn-field-list-widget\" data-testid=\"cn-field-list-widget\">\n\t\t<div v-if=\"canAdd && addTrigger && addPlacement === 'header'\" class=\"cn-field-list-widget__toolbar\">\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-open-add\"\n\t\t\t\t@click=\"adding = !adding\">\n\t\t\t\t+ {{ addLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<form\n\t\t\tv-if=\"canAdd && addTrigger && addAtTop && adding\"\n\t\t\tclass=\"cn-field-list-widget__add\"\n\t\t\tdata-testid=\"cn-field-list-add\"\n\t\t\t@submit.prevent=\"add\">\n\t\t\t<div\n\t\t\t\tv-for=\"field in addFields\"\n\t\t\t\t:key=\"field.key\"\n\t\t\t\tclass=\"cn-field-list-widget__field\"\n\t\t\t\t:data-testid=\"`cn-field-list-input-${field.key}`\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"field.type === 'multiselect'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:keepOpen=\"true\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-else-if=\"field.type === 'select'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-else-if=\"field.type === 'checkbox'\"\n\t\t\t\t\tv-model=\"draft[field.key]\">\n\t\t\t\t\t{{ field.label }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-else\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:error=\"Boolean(errors[field.key])\"\n\t\t\t\t\t:helperText=\"errors[field.key] || ''\" />\n\t\t\t</div>\n\t\t\t<NcButton type=\"submit\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-submit\">\n\t\t\t\t{{ editingKey !== null ? saveLabel : addLabel }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"editingKey !== null\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\tdata-testid=\"cn-field-list-cancel-edit\"\n\t\t\t\t@click=\"cancelEdit\">\n\t\t\t\t{{ tr('Cancel') }}\n\t\t\t</NcButton>\n\t\t</form>\n\t\t<p v-if=\"lead\" class=\"cn-field-list-widget__lead\" data-testid=\"cn-field-list-lead\">\n\t\t\t{{ lead }}\n\t\t</p>\n\t\t<p v-if=\"rows.length === 0\" class=\"cn-field-list-widget__empty\" data-testid=\"cn-field-list-empty\">\n\t\t\t{{ emptyLabel }}\n\t\t</p>\n\t\t<div v-else-if=\"isTable\" class=\"cn-field-list-widget__table-wrap\">\n\t\t\t<table class=\"cn-field-list-widget__table\" data-testid=\"cn-field-list-table\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tv-for=\"column in tableColumns\"\n\t\t\t\t\t\t\t:key=\"column.key\"\n\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__th\">\n\t\t\t\t\t\t\t{{ column.header }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th v-if=\"hasMenu\" scope=\"col\" class=\"cn-field-list-widget__th cn-field-list-widget__th--menu\">\n\t\t\t\t\t\t\t<span class=\"cn-field-list-widget__sr\">{{ tr('Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr\n\t\t\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t\t\t:key=\"row.key\"\n\t\t\t\t\t\tclass=\"cn-field-list-widget__tr\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-row-${row.key}`\">\n\t\t\t\t\t\t<td\n\t\t\t\t\t\t\tv-for=\"(column, index) in tableColumns\"\n\t\t\t\t\t\t\t:key=\"column.key\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__td\">\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-if=\"column.pill && row.cells[index].pill\"\n\t\t\t\t\t\t\t\t:label=\"row.cells[index].pill.label\"\n\t\t\t\t\t\t\t\t:variant=\"row.cells[index].pill.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t\t<strong v-else-if=\"column.strong\">{{ row.cells[index].text }}</strong>\n\t\t\t\t\t\t\t<code v-else-if=\"column.code\" class=\"cn-field-list-widget__code\">{{ row.cells[index].text }}</code>\n\t\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t\t{{ row.cells[index].text }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td v-if=\"hasMenu\" class=\"cn-field-list-widget__td cn-field-list-widget__td--menu\">\n\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\tv-for=\"action in inlineActions(row)\"\n\t\t\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t\t\t:aria-label=\"action.ariaLabel || undefined\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-action-${action.id}-${row.key}`\"\n\t\t\t\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t\t\t\t{{ action.label }}\n\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\tv-if=\"menuItems(row).length > 0\"\n\t\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t\t\t:ariaLabel=\"`${tr('More actions')}: ${row.title}`\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-menu-${row.key}`\">\n\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\tv-for=\"item in menuItems(row)\"\n\t\t\t\t\t\t\t\t\t:key=\"item.id\"\n\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-menu-${item.id}-${row.key}`\"\n\t\t\t\t\t\t\t\t\t@click=\"item.run\">\n\t\t\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<div\n\t\t\t\tv-for=\"row in bandRows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-field-list-widget__band\"\n\t\t\t\trole=\"note\"\n\t\t\t\t:data-testid=\"`cn-field-list-band-${row.key}`\">\n\t\t\t\t<span class=\"cn-field-list-widget__band-text\">{{ row.detail }}</span>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-for=\"copy in row.copies\"\n\t\t\t\t\t:key=\"`copy-${copy.path}`\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:data-testid=\"`cn-field-list-copy-${copy.path}-${row.key}`\"\n\t\t\t\t\t@click=\"copyValue(copy)\">\n\t\t\t\t\t{{ copy.label }}\n\t\t\t\t</NcButton>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-for=\"action in row.bandActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t:data-testid=\"`cn-field-list-band-action-${action.id}-${row.key}`\"\n\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t{{ action.label }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t\t<ul v-else class=\"cn-field-list-widget__rows\">\n\t\t\t<li\n\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-field-list-widget__row\"\n\t\t\t\t:data-testid=\"`cn-field-list-row-${row.key}`\">\n\t\t\t\t<div class=\"cn-field-list-widget__line\">\n\t\t\t\t\t<span v-if=\"row.initials\" class=\"cn-field-list-widget__avatar\" aria-hidden=\"true\">{{ row.initials }}</span>\n\t\t\t\t\t<span class=\"cn-field-list-widget__main\">\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tv-if=\"row.href\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__title\"\n\t\t\t\t\t\t\t:href=\"row.href\"\n\t\t\t\t\t\t\tv-bind=\"row.external ? { target: '_blank', rel: 'noopener noreferrer' } : {}\">{{ row.title }}</a>\n\t\t\t\t\t\t<span v-else class=\"cn-field-list-widget__title\">{{ row.title }}</span>\n\t\t\t\t\t\t<span v-if=\"row.meta\" class=\"cn-field-list-widget__meta\">{{ row.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\tv-if=\"row.pill\"\n\t\t\t\t\t\t:label=\"row.pill.label\"\n\t\t\t\t\t\t:variant=\"row.pill.variant\"\n\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t<span v-if=\"row.aside\" class=\"cn-field-list-widget__aside\">{{ row.aside }}</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-for=\"action in row.actions\"\n\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-action-${action.id}-${row.key}`\"\n\t\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t\t{{ action.label }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"canEdit\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:aria-label=\"`${editLabel}: ${row.title}`\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-edit-${row.index}`\"\n\t\t\t\t\t\t@click=\"startEdit(row)\">\n\t\t\t\t\t\t{{ editLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"canRemove\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:aria-label=\"removeAriaLabel(row)\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-remove-${row.key}`\"\n\t\t\t\t\t\t@click=\"remove(row)\">\n\t\t\t\t\t\t{{ removeLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<p v-if=\"row.detail\" class=\"cn-field-list-widget__detail\">\n\t\t\t\t\t{{ row.detail }}\n\t\t\t\t</p>\n\t\t\t\t<div v-if=\"row.detail && row.copies.length > 0\" class=\"cn-field-list-widget__copies\">\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-for=\"copy in row.copies\"\n\t\t\t\t\t\t:key=\"`copy-${copy.path}`\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-copy-${copy.path}-${row.key}`\"\n\t\t\t\t\t\t@click=\"copyValue(copy)\">\n\t\t\t\t\t\t{{ copy.label }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<p v-if=\"hint\" class=\"cn-field-list-widget__hint\">\n\t\t\t{{ hint }}\n\t\t</p>\n\n\t\t<div v-if=\"canAdd && addTrigger && addPlacement === 'footer' && !adding\" class=\"cn-field-list-widget__toolbar\">\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-open-add\"\n\t\t\t\t@click=\"adding = true\">\n\t\t\t\t+ {{ addLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<form\n\t\t\tv-if=\"canAdd && !(addTrigger && addAtTop) && (!addTrigger || adding)\"\n\t\t\tclass=\"cn-field-list-widget__add\"\n\t\t\tdata-testid=\"cn-field-list-add\"\n\t\t\t@submit.prevent=\"add\">\n\t\t\t<div\n\t\t\t\tv-for=\"field in addFields\"\n\t\t\t\t:key=\"field.key\"\n\t\t\t\tclass=\"cn-field-list-widget__field\"\n\t\t\t\t:data-testid=\"`cn-field-list-input-${field.key}`\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"field.type === 'multiselect'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:keepOpen=\"true\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-else-if=\"field.type === 'select'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-else-if=\"field.type === 'checkbox'\"\n\t\t\t\t\tv-model=\"draft[field.key]\">\n\t\t\t\t\t{{ field.label }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-else\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:error=\"Boolean(errors[field.key])\"\n\t\t\t\t\t:helperText=\"errors[field.key] || ''\" />\n\t\t\t</div>\n\t\t\t<NcButton type=\"submit\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-submit\">\n\t\t\t\t{{ editingKey !== null ? saveLabel : addLabel }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tv-if=\"editingKey !== null\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\tdata-testid=\"cn-field-list-cancel-edit\"\n\t\t\t\t@click=\"cancelEdit\">\n\t\t\t\t{{ tr('Cancel') }}\n\t\t\t</NcButton>\n\t\t</form>\n\n\t\t<span class=\"cn-field-list-widget__sr\" aria-live=\"polite\" data-testid=\"cn-field-list-copied\">{{ copied }}</span>\n\t\t<NcNoteCard v-if=\"notice\" :type=\"noticeType\" data-testid=\"cn-field-list-notice\">\n\t\t\t{{ notice }}\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { NcActionButton, NcActions, NcButton, NcCheckboxRadioSwitch, NcNoteCard, NcSelect, NcTextField } from '@nextcloud/vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport { isBadgeVariant } from '../../utils/badgeVariants.js'\nimport { formatBoardDate } from '../../utils/boardDate.js'\nimport { parseDateValue } from '../../utils/dateVariant.js'\nimport { prefixUrl } from '../../utils/headers.js'\nimport { readPath } from '../../utils/readPath.js'\nimport { serverErrorMessage } from '../../utils/serverErrorMessage.js'\n\n/**\n * CnFieldListWidget — the `field-list` widget: a list stored INSIDE one field\n * of the current object (a portal's `domains[]`, its `editors[]`), shown as\n * rows and edited in place.\n *\n * Rows are drawn from configuration (title, meta line, pill, aside, a detail\n * line); a small form adds an entry, a button removes one, and each change is\n * saved as ONE PATCH of that field on the object, after re-reading the stored\n * value so a concurrent change to the same list is not overwritten with a\n * stale copy. Optional row actions call a configured endpoint (a \"check\n * again\"), and an optional `rowSource` merges live per-row state read from an\n * endpoint by key without writing it back.\n *\n * The server decides who may write: a refused PATCH shows the server's words\n * and leaves the list as stored.\n *\n * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md\n */\n/**\n * A link a row title may carry: http(s) or root-relative, '' otherwise.\n *\n * @param {unknown} value The candidate.\n * @return {string} The link.\n */\nfunction safeRowHref(value) {\n\tconst text = typeof value === 'string' ? value.trim() : ''\n\treturn /^(\\/(?!\\/)|https?:\\/\\/)/i.test(text) ? text : ''\n}\n\n/**\n * The link of a row title: a path to a safe link, or `{ path, scheme }` for\n * a `mailto:` or `tel:` link to the value.\n *\n * @param {object} entry The row entry.\n * @param {string|{path: string, scheme: string}} spec The `row.href` config.\n * @return {string} The link, '' for none.\n */\nfunction rowHref(entry, spec) {\n\tif (spec && typeof spec === 'object') {\n\t\tconst value = readPath(entry, spec.path)\n\t\tconst text = typeof value === 'string' ? value.trim() : ''\n\t\tif (text === '' || !['mailto', 'tel'].includes(spec.scheme)) {\n\t\t\treturn ''\n\t\t}\n\t\treturn `${spec.scheme}:${spec.scheme === 'tel' ? text.replace(/[^\\d+]/g, '') : encodeURIComponent(text).replace(/%40/g, '@')}`\n\t}\n\treturn safeRowHref(readPath(entry, spec))\n}\n\nexport default {\n\tname: 'CnFieldListWidget',\n\n\tcomponents: { CnStatusBadge, NcActionButton, NcActions, NcButton, NcCheckboxRadioSwitch, NcNoteCard, NcSelect, NcTextField },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/** Opens a registered modal (CnAppRoot), for a row action with `dialog`. */\n\t\tcnOpenModal: { default: null },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The widget configuration.\n\t\t *\n\t\t * - `field` (required) — the object field holding the array.\n\t\t * - `key` — the item field that identifies an entry (default: the item itself for strings).\n\t\t * - `row` — `{ title, titleFallback?, avatar?, meta?: [paths|{ path, map?, format? }], pill?: { path, map?, variantMap? }, aside?: { path, format?, prefix?, fallback? }, detail?: { template, when?, copy?: [{ path, label }] } }`. `detail.copy` puts a copy button beside the detail line for each named value of the row (an empty value gets none), such as a DNS record's name and value.\n\t\t * - `add` — `{ label?, fields: [{ key, label, type?: 'text'|'select'|'multiselect'|'checkbox', options?, optionsSource?, required?, pattern?, patternMessage? }], unique?, defaults? }`. A `multiselect` field holds a list of values. `optionsSource` — `{ url, path?, valuePath?, labelPath? }` (default `id` and `name`) — adds options read from an endpoint after the static ones, each value once (tokens `@objectId`, `@object.<field>`), for choices that live in other records such as a case type's statuses.\n\t\t * - `remove` — `{ label? }`; omitted = no remove.\n\t\t * - `rowActions` — `[{ id, label, ariaLabel?, when?, placement?: 'band'|'inline', request: { method?, url, payload? } }]`, or `{ id, label, dialog, props }` to open a modal registered in the app registry with filled props (shown in `readOnly` too, since it writes nothing, and only when every token in `props` fills); tokens `@object.<field>`, `@objectId`, `@row.<field>`, `@index`. In the table variant `placement: 'inline'` draws the action as a button in the row instead of in the \"...\" menu; `ariaLabel` is a template filled from the row.\n\t\t * - `when` (row actions, `detail`) — `{ field: value }`, every field equal; or per field `{ eq?, neq?, set? }`, where a value `@row.<field>` (or `@<field>`) is another field of the same row: `{ deliveredRef: { set: true, neq: '@originalRef' } }`.\n\t\t * - `rowSource` — `{ url, path?, key }`: live per-row state merged by key.\n\t\t * - `variant: 'table'` + `columns` — `[{ header, path, map?, format?, strong?, pill?, variantMap?, labelsFrom? }]` (a list value reads as its items joined; `labelsFrom` names an add field whose option labels word the values): rows as a table; a per-row \"...\" menu holds the row actions and remove; `detail` lines become a warning band under the table, with the row actions that have `placement: 'band'`.\n\t\t * - `add.trigger: 'button'`, `add.placement: 'header' | 'title' | 'footer'` — the add form opens from a button; `title` reports the button for the card's title row on the `header` event.\n\t\t * - `readOnly`, `hint`, `emptyText`.\n\t\t * - `row.href` — the path of a link for the row title; only http(s) and root-relative links, an absolute one opens in a new tab.\n\t\t * - `lead` — a line above the rows, translated, with `{path}` filled from the object.\n\t\t * - `edit` — `true` or `{ label?, saveLabel? }`: an Edit button per row opens the form prefilled and saves the entry in place.\n\t\t * - `add.fields[].type: 'checkbox'`; `add.exclusive` — flags only one entry holds; `add.requireOneOf` (+ `requireOneOfMessage`) — keys of which one must be filled.\n\t\t * - `row.href` may be `{ path, scheme: 'mailto'|'tel' }`.\n\t\t * - `afterSave` — `{ url, method?, body?, failureText? }`: called after every save that went through, with `@objectId` / `@object.<field>` tokens; when it fails the save stands and `failureText` shows.\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 detail-page object. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current object id. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** OpenRegister register slug of the surface. */\n\t\tregister: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** OpenRegister schema slug of the surface. */\n\t\tschema: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: ['saved', 'header'],\n\n\tdata() {\n\t\treturn {\n\t\t\t/** The list as last saved by this widget; null = read it off objectData. */\n\t\t\tsaved: null,\n\t\t\t/** Live per-row state from `rowSource`, by key. */\n\t\t\tlive: {},\n\t\t\tdraft: {},\n\t\t\t/** Whether the add form is open (only with `add.trigger: 'button'`). */\n\t\t\tadding: false,\n\t\t\t/** The key of the entry the form edits; null while it adds. */\n\t\t\teditingKey: null,\n\t\t\terrors: {},\n\t\t\tbusy: '',\n\t\t\tnotice: '',\n\t\t\tnoticeType: 'error',\n\t\t\t// What the last copy button put on the clipboard, said to a screen reader.\n\t\t\tcopied: '',\n\t\t\t/** Options read through each add field's `optionsSource`, by field key. */\n\t\t\tsourcedOptions: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The stored list.\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\titems() {\n\t\t\tconst list = this.saved !== null ? this.saved : readPath(this.objectData || {}, this.content.field)\n\t\t\treturn Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The rows to draw.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-draws-the-entries-of-one-object-field\n\t\t */\n\t\trows() {\n\t\t\tconst spec = this.content.row || {}\n\t\t\treturn this.items.map((item, index) => {\n\t\t\t\tconst key = this.keyOf(item, index)\n\t\t\t\tconst entry = item && typeof item === 'object'\n\t\t\t\t\t? { ...item, ...(this.live[key] || {}) }\n\t\t\t\t\t: { value: item, ...(this.live[key] || {}) }\n\t\t\t\tconst title = this.text(entry, spec.title) || this.text(entry, spec.titleFallback) || (typeof item === 'string' ? item : key)\n\t\t\t\tconst meta = (Array.isArray(spec.meta) ? spec.meta : [])\n\t\t\t\t\t.map((part) => this.text(entry, part))\n\t\t\t\t\t.filter((part) => part !== '')\n\t\t\t\t\t.join(' · ')\n\t\t\t\tconst href = spec.href ? rowHref(entry, spec.href) : ''\n\t\t\t\treturn {\n\t\t\t\t\tkey,\n\t\t\t\t\tindex,\n\t\t\t\t\titem,\n\t\t\t\t\tentry,\n\t\t\t\t\ttitle,\n\t\t\t\t\thref,\n\t\t\t\t\texternal: /^https?:\\/\\//i.test(href),\n\t\t\t\t\tinitials: spec.avatar ? this.initials(title) : '',\n\t\t\t\t\tmeta,\n\t\t\t\t\tpill: this.pillOf(entry, spec.pill),\n\t\t\t\t\taside: spec.aside ? this.asideOf(entry, spec.aside) : '',\n\t\t\t\t\tdetail: spec.detail && this.matches(entry, spec.detail.when) ? this.fill(spec.detail.template, entry) : '',\n\t\t\t\t\tcopies: spec.detail && this.matches(entry, spec.detail.when) ? this.copiesOf(entry, spec.detail.copy) : [],\n\t\t\t\t\tactions: this.actionsFor(entry, index),\n\t\t\t\t\tcells: this.isTable ? this.cellsOf(entry) : [],\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/** Whether the list is read-only. */\n\t\treadOnly() {\n\t\t\treturn this.content.readOnly === true\n\t\t},\n\n\t\t/** Whether entries can be added. */\n\t\tcanAdd() {\n\t\t\treturn !this.readOnly && this.addFields.length > 0 && Boolean(this.content.field)\n\t\t},\n\n\t\t/** Whether entries can be edited in place (`edit`). */\n\t\tcanEdit() {\n\t\t\treturn !this.readOnly && Boolean(this.content.edit) && Boolean(this.content.field) && this.addFields.length > 0\n\t\t},\n\n\t\t/** @return {string} The edit button's label. */\n\t\teditLabel() {\n\t\t\tconst edit = this.content.edit\n\t\t\treturn this.tr((edit && typeof edit === 'object' && edit.label) || 'Edit')\n\t\t},\n\n\t\t/** @return {string} The submit label while editing. */\n\t\tsaveLabel() {\n\t\t\tconst edit = this.content.edit\n\t\t\treturn this.tr((edit && typeof edit === 'object' && edit.saveLabel) || 'Save')\n\t\t},\n\n\t\t/** Whether entries can be removed. */\n\t\tcanRemove() {\n\t\t\treturn !this.readOnly && Boolean(this.content.remove) && Boolean(this.content.field)\n\t\t},\n\n\t\t/**\n\t\t * The add form's fields, labels translated, select options translated.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\taddFields() {\n\t\t\tconst fields = this.content.add && Array.isArray(this.content.add.fields) ? this.content.add.fields : []\n\t\t\treturn fields\n\t\t\t\t.filter((field) => field && field.key)\n\t\t\t\t.map((field) => ({\n\t\t\t\t\t...field,\n\t\t\t\t\tlabel: this.tr(field.label || field.key),\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t...(Array.isArray(field.options) ? field.options : []).map((option) => (\n\t\t\t\t\t\t\ttypeof option === 'object' ? { value: option.value, label: this.tr(option.label || String(option.value)) } : { value: option, label: this.tr(String(option)) }\n\t\t\t\t\t\t)),\n\t\t\t\t\t\t...(this.sourcedOptions[field.key] || []),\n\t\t\t\t\t],\n\t\t\t\t}))\n\t\t},\n\n\t\t/** Whether the rows are drawn as a table (`variant: 'table'`). */\n\t\tisTable() {\n\t\t\treturn this.content.variant === 'table' && this.tableColumns.length > 0\n\t\t},\n\n\t\t/**\n\t\t * The table columns, headers translated.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\ttableColumns() {\n\t\t\treturn (Array.isArray(this.content.columns) ? this.content.columns : [])\n\t\t\t\t.filter((column) => column && column.path)\n\t\t\t\t.map((column, index) => ({ ...column, key: `${column.path}-${index}`, header: this.tr(column.header || '') }))\n\t\t},\n\n\t\t/** Whether each row has an actions cell: inline row actions, or a \"more actions\" menu (row actions not placed in the band, and remove). */\n\t\thasMenu() {\n\t\t\treturn this.isTable && (this.canRemove || this.rows.some((row) => this.menuItems(row).length > 0 || this.inlineActions(row).length > 0))\n\t\t},\n\n\t\t/** Rows with a detail line: in the table variant it is a warning band under the table. */\n\t\tbandRows() {\n\t\t\treturn this.rows\n\t\t\t\t.filter((row) => row.detail !== '')\n\t\t\t\t.map((row) => ({ ...row, bandActions: row.actions.filter((action) => action.placement === 'band') }))\n\t\t},\n\n\t\t/** Whether the add form opens from a button (`add.trigger: 'button'`). */\n\t\taddTrigger() {\n\t\t\treturn Boolean(this.content.add && this.content.add.trigger === 'button')\n\t\t},\n\n\t\t/**\n\t\t * Where the add button sits: `header` (above the rows), `title` (the\n\t\t * card's title row, reported on the `header` event) or `footer` (default).\n\t\t */\n\t\taddPlacement() {\n\t\t\tconst placement = this.content.add && this.content.add.placement\n\t\t\treturn placement === 'header' || placement === 'title' ? placement : 'footer'\n\t\t},\n\n\t\t/** Whether the add form opens above the rows. */\n\t\taddAtTop() {\n\t\t\treturn this.addPlacement === 'header' || this.addPlacement === 'title'\n\t\t},\n\n\t\t/**\n\t\t * The card title row's actions: the add button with `add.placement: \"title\"`.\n\t\t *\n\t\t * @return {Array<{label: string, icon: string, add: boolean, run: () => void}>} The actions.\n\t\t */\n\t\ttitleActions() {\n\t\t\tif (!(this.canAdd && this.addTrigger && this.addPlacement === 'title')) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst run = () => {\n\t\t\t\tthis.adding = !this.adding\n\t\t\t}\n\t\t\treturn [{ label: this.addLabel, icon: 'Plus', add: true, run }]\n\t\t},\n\n\t\taddLabel() {\n\t\t\treturn this.tr((this.content.add && this.content.add.label) || 'Add')\n\t\t},\n\n\t\tremoveLabel() {\n\t\t\treturn this.tr((this.content.remove && this.content.remove.label) || 'Remove')\n\t\t},\n\n\t\t/**\n\t\t * The line above the rows, filled from the object.\n\t\t *\n\t\t * @spec openspec/changes/field-list-links-lead-after-save/specs/field-list/spec.md#requirement-a-field-list-links-its-rows-leads-with-the-object-and-calls-after-a-save\n\t\t * @return {string}\n\t\t */\n\t\tlead() {\n\t\t\tif (!this.content.lead) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.tr(this.content.lead).replace(/\\{([\\w.]+)\\}/g, (m, path) => {\n\t\t\t\tconst value = readPath(this.objectData || {}, path)\n\t\t\t\treturn value === undefined || value === null ? '' : String(value)\n\t\t\t})\n\t\t},\n\n\t\thint() {\n\t\t\treturn this.tr(this.content.hint || '')\n\t\t},\n\n\t\temptyLabel() {\n\t\t\treturn this.tr(this.content.emptyText || 'Nothing listed yet')\n\t\t},\n\n\t\t/** The object URL the list is saved to, or '' when it is not known. */\n\t\tobjectUrl() {\n\t\t\tconst id = this.objectId || (this.objectData && this.objectData.id)\n\t\t\tif (!this.register || !this.schema || !id || typeof this.register !== 'string' || typeof this.schema !== 'string') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn `/apps/openregister/api/objects/${encodeURIComponent(this.register)}/${encodeURIComponent(this.schema)}/${encodeURIComponent(String(id))}`\n\t\t},\n\t},\n\n\twatch: {\n\t\ttitleActions: {\n\t\t\timmediate: true,\n\t\t\thandler(actions) {\n\t\t\t\t/**\n\t\t\t\t * @event header The card's title-row actions, `{ actions }`, for the host to draw.\n\t\t\t\t */\n\t\t\t\tthis.$emit('header', { actions })\n\t\t\t},\n\t\t},\n\n\t\tobjectData() {\n\t\t\tthis.saved = null\n\t\t\tthis.loadLive()\n\t\t\tthis.loadOptions()\n\t\t},\n\t},\n\n\tcreated() {\n\t\tthis.resetDraft()\n\t\tthis.loadLive()\n\t\tthis.loadOptions()\n\t},\n\n\tmethods: {\n\t\ttr(text) {\n\t\t\tif (typeof text !== 'string' || text === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The cells of one table row, one per column.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @return {Array<{text: string, pill: object|null}>}\n\t\t */\n\t\tcellsOf(entry) {\n\t\t\treturn this.tableColumns.map((column) => ({\n\t\t\t\ttext: this.text(entry, column),\n\t\t\t\tpill: column.pill ? this.pillOf(entry, column) : null,\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * The items of a row's menu in the table variant: the row actions not\n\t\t * placed in the band, then remove.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{id: string, label: string, run: Function}>}\n\t\t */\n\t\tmenuItems(row) {\n\t\t\tconst items = row.actions\n\t\t\t\t.filter((action) => action.placement !== 'band' && action.placement !== 'inline')\n\t\t\t\t.map((action) => ({ id: action.id, label: action.label, run: () => this.runAction(action, row) }))\n\t\t\tif (this.canRemove) {\n\t\t\t\titems.push({ id: 'remove', label: this.removeLabel, run: () => this.remove(row) })\n\t\t\t}\n\t\t\treturn items\n\t\t},\n\n\t\t/**\n\t\t * The row actions drawn as buttons in a table row (`placement: 'inline'`).\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<object>}\n\t\t */\n\t\tinlineActions(row) {\n\t\t\treturn row.actions.filter((action) => action.placement === 'inline')\n\t\t},\n\n\t\t/**\n\t\t * The identity of an entry.\n\t\t *\n\t\t * @param {unknown} item The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {string}\n\t\t */\n\t\tkeyOf(item, index) {\n\t\t\tif (item === null || typeof item !== 'object') {\n\t\t\t\treturn String(item)\n\t\t\t}\n\t\t\tconst key = this.content.key ? readPath(item, this.content.key) : undefined\n\t\t\treturn key === undefined || key === null || key === '' ? `item-${index}` : String(key)\n\t\t},\n\n\t\t/**\n\t\t * A display text off an entry: a path, or `{ path, map?, format? }`.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {string|object} spec The spec.\n\t\t * @return {string}\n\t\t */\n\t\ttext(entry, spec) {\n\t\t\tif (!spec) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst def = typeof spec === 'string' ? { path: spec } : spec\n\t\t\tconst raw = readPath(entry, def.path)\n\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (def.format === 'date' || def.format === 'date-long') {\n\t\t\t\tconst date = parseDateValue(raw)\n\t\t\t\tif (date === null) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn def.format === 'date-long' ? formatBoardDate(date, new Date(date.getFullYear() + 1, 0, 1)) : formatBoardDate(date)\n\t\t\t}\n\t\t\tif (Array.isArray(raw)) {\n\t\t\t\treturn raw.map((item) => this.wordOf(item, def)).filter((word) => word !== '').join(', ')\n\t\t\t}\n\t\t\treturn this.wordOf(raw, def)\n\t\t},\n\n\t\t/**\n\t\t * One value in words: through the column's `map`, then the option labels\n\t\t * of the add field it names in `labelsFrom`, else the value itself.\n\t\t *\n\t\t * @param {string|number|boolean|object} raw The value.\n\t\t * @param {object} def The column.\n\t\t * @return {string}\n\t\t */\n\t\twordOf(raw, def) {\n\t\t\tif (def.map && Object.hasOwn(def.map, String(raw))) {\n\t\t\t\treturn this.tr(def.map[String(raw)])\n\t\t\t}\n\t\t\tif (def.labelsFrom) {\n\t\t\t\tconst field = this.addFields.find((candidate) => candidate.key === def.labelsFrom)\n\t\t\t\tconst option = field && field.options.find((candidate) => String(candidate.value) === String(raw))\n\t\t\t\tif (option) {\n\t\t\t\t\treturn option.label\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn typeof raw === 'object' ? '' : String(raw)\n\t\t},\n\n\t\t/**\n\t\t * The empty value of an add field: false for a checkbox, a list for a multiselect.\n\t\t *\n\t\t * @param {object} field The add field.\n\t\t * @return {boolean|Array|string}\n\t\t */\n\t\temptyValue(field) {\n\t\t\tif (field.type === 'checkbox') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn field.type === 'multiselect' ? [] : ''\n\t\t},\n\n\t\t/**\n\t\t * Read the options of every add field that names an `optionsSource`.\n\t\t *\n\t\t * A source that cannot be read leaves the static options alone.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadOptions() {\n\t\t\tconst fields = this.content.add && Array.isArray(this.content.add.fields) ? this.content.add.fields : []\n\t\t\tfor (const field of fields) {\n\t\t\t\tconst source = field && field.optionsSource\n\t\t\t\tif (!source || !source.url || !field.key) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst { axios } = await this.http()\n\t\t\t\t\tconst response = await axios.get(prefixUrl(this.resolve(source.url, {})))\n\t\t\t\t\tconst list = source.path ? readPath(response && response.data, source.path) : response && response.data\n\t\t\t\t\tconst options = (Array.isArray(list) ? list : [])\n\t\t\t\t\t\t.map((item) => ({ value: readPath(item, source.valuePath || 'id'), label: String(readPath(item, source.labelPath || 'name') ?? '') }))\n\t\t\t\t\t\t.filter((option, index, all) => option.value !== undefined && option.value !== null && option.value !== ''\n\t\t\t\t\t\t\t&& all.findIndex((other) => String(other.value) === String(option.value)) === index)\n\t\t\t\t\tthis.sourcedOptions = { ...this.sourcedOptions, [field.key]: options }\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.warn('[CnFieldListWidget] optionsSource could not be read:', e?.message || e)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tpillOf(entry, spec) {\n\t\t\tif (!spec || !spec.path) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst raw = readPath(entry, spec.path)\n\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst label = this.text(entry, spec)\n\t\t\tconst variant = spec.variantMap && spec.variantMap[String(raw)]\n\t\t\treturn { label, variant: isBadgeVariant(variant) ? variant : 'default' }\n\t\t},\n\n\t\tasideOf(entry, spec) {\n\t\t\tconst value = this.text(entry, spec)\n\t\t\tif (value === '') {\n\t\t\t\t// No value: the optional `fallback` label, translated, instead of an empty aside.\n\t\t\t\treturn this.tr(spec.fallback)\n\t\t\t}\n\t\t\treturn spec.prefix ? `${this.tr(spec.prefix)} ${value}` : value\n\t\t},\n\n\t\t/**\n\t\t * Whether an entry matches a `{ field: value }` condition (every field equal).\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {object|undefined} when The condition.\n\t\t * @return {boolean}\n\t\t */\n\t\tmatches(entry, when) {\n\t\t\tif (!when || typeof when !== 'object') {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Object.entries(when).every(([field, expected]) => {\n\t\t\t\tconst actual = readPath(entry, field)\n\t\t\t\tif (expected && typeof expected === 'object' && !Array.isArray(expected)) {\n\t\t\t\t\treturn this.matchesOperators(entry, actual, expected)\n\t\t\t\t}\n\t\t\t\tif (expected === false) {\n\t\t\t\t\treturn actual === false || actual === undefined || actual === null || actual === ''\n\t\t\t\t}\n\t\t\t\treturn String(actual) === String(expected)\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Whether a value passes `{ eq?, neq?, set? }`. An operand `@row.<field>`\n\t\t * or `@<field>` is that field of the same entry.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {unknown} actual The value tested.\n\t\t * @param {object} ops The operators.\n\t\t * @return {boolean}\n\t\t */\n\t\tmatchesOperators(entry, actual, ops) {\n\t\t\tconst empty = (v) => v === undefined || v === null || v === ''\n\t\t\tconst operand = (v) => {\n\t\t\t\tif (typeof v === 'string' && v.startsWith('@')) {\n\t\t\t\t\tconst path = v.startsWith('@row.') ? v.slice('@row.'.length) : v.slice(1)\n\t\t\t\t\treturn readPath(entry, path)\n\t\t\t\t}\n\t\t\t\treturn v\n\t\t\t}\n\t\t\tconst same = (a, b) => (empty(a) && empty(b)) || (!empty(a) && !empty(b) && String(a) === String(b))\n\t\t\tif (ops.set !== undefined && Boolean(ops.set) !== !empty(actual)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (Object.hasOwn(ops, 'eq') && !same(actual, operand(ops.eq))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (Object.hasOwn(ops, 'neq') && same(actual, operand(ops.neq))) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\n\t\t/**\n\t\t * Fill `{path}` placeholders from an entry; '' when one stays empty.\n\t\t *\n\t\t * @param {string} template The template, translated first.\n\t\t * @param {object} entry The entry.\n\t\t * @return {string}\n\t\t */\n\t\tfill(template, entry) {\n\t\t\tif (typeof template !== 'string') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tlet missing = false\n\t\t\tconst out = this.tr(template).replace(/\\{([\\w.@]+)\\}/g, (match, path) => {\n\t\t\t\tconst value = readPath(entry, path)\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tmissing = true\n\t\t\t\t\treturn match\n\t\t\t\t}\n\t\t\t\treturn String(value)\n\t\t\t})\n\t\t\treturn missing ? '' : out\n\t\t},\n\n\t\t/**\n\t\t * The row actions an entry offers: request actions unless the list is\n\t\t * read-only, and dialog actions always, when their props all fill.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {Array<object>}\n\t\t */\n\t\tactionsFor(entry, index) {\n\t\t\tconst actions = Array.isArray(this.content.rowActions) ? this.content.rowActions : []\n\t\t\treturn actions\n\t\t\t\t.filter((action) => action && action.id && this.matches(entry, action.when))\n\t\t\t\t.filter((action) => (action.dialog\n\t\t\t\t\t? this.dialogPropsOf(action, entry, index) !== null\n\t\t\t\t\t: !this.readOnly && action.request && action.request.url))\n\t\t\t\t.map((action) => ({\n\t\t\t\t\t...action,\n\t\t\t\t\tlabel: this.tr(action.label || action.id),\n\t\t\t\t\tariaLabel: action.ariaLabel ? this.fill(action.ariaLabel, entry) : '',\n\t\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * A dialog action's props with their tokens filled, `/apps/` paths made\n\t\t * absolute; null when a token stays empty, so the dialog is not offered\n\t\t * with half an address.\n\t\t *\n\t\t * @param {object} action The action.\n\t\t * @param {object} entry The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {object|null}\n\t\t */\n\t\tdialogPropsOf(action, entry, index) {\n\t\t\tconst out = {}\n\t\t\tfor (const [name, value] of Object.entries(action.props || {})) {\n\t\t\t\tif (typeof value !== 'string') {\n\t\t\t\t\tout[name] = value\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tlet missing = false\n\t\t\t\tconst object = this.objectData || {}\n\t\t\t\tconst filled = value\n\t\t\t\t\t.replace(/@index\\b/g, () => String(index))\n\t\t\t\t\t.replace(/@objectId\\b/g, () => {\n\t\t\t\t\t\tconst id = String(this.objectId || object.id || '')\n\t\t\t\t\t\tmissing = missing || id === ''\n\t\t\t\t\t\treturn encodeURIComponent(id)\n\t\t\t\t\t})\n\t\t\t\t\t.replace(/@(row|object)\\.([\\w.@]+)/g, (m, scope, path) => {\n\t\t\t\t\t\tconst v = readPath((scope === 'row' ? entry : object) || {}, path)\n\t\t\t\t\t\tmissing = missing || v === undefined || v === null || v === ''\n\t\t\t\t\t\treturn encodeURIComponent(String(v ?? ''))\n\t\t\t\t\t})\n\t\t\t\tif (missing) {\n\t\t\t\t\treturn null\n\t\t\t\t}\n\t\t\t\tout[name] = filled.startsWith('/apps/') ? prefixUrl(filled) : filled\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\tinitials(name) {\n\t\t\treturn String(name || '').split(/[\\s@._-]+/).filter(Boolean).slice(0, 2).map((part) => part.charAt(0).toUpperCase()).join('')\n\t\t},\n\n\t\tremoveAriaLabel(row) {\n\t\t\treturn `${this.removeLabel}: ${row.title}`\n\t\t},\n\n\t\tresetDraft() {\n\t\t\tconst draft = {}\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst empty = this.emptyValue(field)\n\t\t\t\tconst first = field.type === 'select' && field.options.length > 0 ? field.options[0].value : empty\n\t\t\t\tdraft[field.key] = field.default !== undefined ? field.default : first\n\t\t\t}\n\t\t\tthis.draft = draft\n\t\t\tthis.errors = {}\n\t\t},\n\n\t\t/**\n\t\t * Resolve `@objectId`, `@object.<field>` and `@row.<field>` inside a string or a payload.\n\t\t *\n\t\t * @param {unknown} value The value.\n\t\t * @param {object} entry The row entry.\n\t\t * @return {unknown}\n\t\t */\n\t\tresolve(value, entry) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.map((v) => this.resolve(v, entry))\n\t\t\t}\n\t\t\tif (value && typeof value === 'object') {\n\t\t\t\treturn Object.fromEntries(Object.entries(value).map(([k, v]) => [k, this.resolve(v, entry)]))\n\t\t\t}\n\t\t\tif (typeof value !== 'string') {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tconst object = this.objectData || {}\n\t\t\tconst read = (source, path) => {\n\t\t\t\tconst v = readPath(source || {}, path)\n\t\t\t\treturn v === undefined || v === null ? '' : v\n\t\t\t}\n\t\t\tconst whole = value.match(/^@(row|object)\\.([\\w.@]+)$/)\n\t\t\tif (whole) {\n\t\t\t\treturn read(whole[1] === 'row' ? entry : object, whole[2])\n\t\t\t}\n\t\t\treturn value\n\t\t\t\t.replace(/@objectId/g, () => encodeURIComponent(String(this.objectId || object.id || '')))\n\t\t\t\t.replace(/@(row|object)\\.([\\w.@]+)/g, (m, scope, path) => encodeURIComponent(String(read(scope === 'row' ? entry : object, path))))\n\t\t},\n\n\t\tasync http() {\n\t\t\tconst { default: axios } = await import('@nextcloud/axios')\n\t\t\treturn { axios }\n\t\t},\n\n\t\t/**\n\t\t * Read live per-row state from `rowSource` and keep it by key.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadLive() {\n\t\t\tconst source = this.content.rowSource\n\t\t\tif (!source || !source.url || !source.key || !this.objectData) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst response = await axios.get(prefixUrl(this.resolve(source.url, {})))\n\t\t\t\tconst data = response && response.data\n\t\t\t\tconst list = source.path ? readPath(data, source.path) : data\n\t\t\t\tconst live = {}\n\t\t\t\tfor (const item of Array.isArray(list) ? list : []) {\n\t\t\t\t\tconst key = item && readPath(item, source.key)\n\t\t\t\t\tif (key !== undefined && key !== null) {\n\t\t\t\t\t\tlive[String(key)] = item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.live = live\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn('[CnFieldListWidget] rowSource could not be read:', e?.message || e)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Save a new list: re-read the stored value, apply the change to it, and\n\t\t * PATCH that one field.\n\t\t *\n\t\t * @param {(stored: Array) => Array} change Builds the next list from the stored one, or throws an Error with a `userMessage`.\n\t\t * @param {string} busyKey What is busy.\n\t\t * @return {Promise<boolean>} Whether it saved.\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-saves-one-field-with-one-patch\n\t\t */\n\t\tasync save(change, busyKey) {\n\t\t\tif (!this.objectUrl) {\n\t\t\t\tthis.notify(this.tr('This list cannot be saved here.'))\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.busy = busyKey\n\t\t\tthis.notice = ''\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst { data: stored } = await axios.get(prefixUrl(this.objectUrl))\n\t\t\t\tconst current = readPath(stored || {}, this.content.field)\n\t\t\t\tconst next = change(Array.isArray(current) ? current : [])\n\t\t\t\tconst { data } = await axios.patch(prefixUrl(this.objectUrl), { [this.content.field]: next })\n\t\t\t\tconst written = readPath(data || {}, this.content.field)\n\t\t\t\tthis.saved = Array.isArray(written) ? written : next\n\t\t\t\t/**\n\t\t\t\t * @event saved The list was saved: one PATCH of the field succeeded.\n\t\t\t\t * @type {{field: string, value: Array}}\n\t\t\t\t */\n\t\t\t\tthis.$emit('saved', { field: this.content.field, value: this.saved })\n\t\t\t\tawait this.runAfterSave(axios)\n\t\t\t\treturn true\n\t\t\t} catch (e) {\n\t\t\t\tthis.notify(e && e.userMessage ? e.userMessage : serverErrorMessage(e))\n\t\t\t\treturn false\n\t\t\t} finally {\n\t\t\t\tthis.busy = ''\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Call `afterSave` once a save went through. A failure leaves the save\n\t\t * standing and shows `failureText`.\n\t\t *\n\t\t * @spec openspec/changes/field-list-links-lead-after-save/specs/field-list/spec.md#requirement-a-field-list-links-its-rows-leads-with-the-object-and-calls-after-a-save\n\t\t * @param {object} axios The HTTP client.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync runAfterSave(axios) {\n\t\t\tconst after = this.content.afterSave\n\t\t\tif (!after || typeof after.url !== 'string' || after.url === '') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst method = String(after.method || 'POST').toLowerCase()\n\t\t\t\tconst url = prefixUrl(this.resolve(after.url, {}))\n\t\t\t\tif (method === 'get') {\n\t\t\t\t\tawait axios.get(url)\n\t\t\t\t} else {\n\t\t\t\t\tawait axios[method](url, this.resolve(after.body || {}, {}))\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tif (after.failureText) {\n\t\t\t\t\tthis.notify(this.tr(after.failureText), 'warning')\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tnotify(message, type = 'error') {\n\t\t\tthis.notice = message\n\t\t\tthis.noticeType = type\n\t\t},\n\n\t\t/**\n\t\t * Validate the draft and add it.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-adds-and-removes-entries\n\t\t */\n\t\tasync add() {\n\t\t\tconst errors = {}\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst value = this.draft[field.key]\n\t\t\t\tconst empty = value === undefined || value === null || (Array.isArray(value) ? value.length === 0 : String(value).trim() === '')\n\t\t\t\tif (field.required && empty) {\n\t\t\t\t\terrors[field.key] = this.tr('Fill this in.')\n\t\t\t\t} else if (!empty && field.pattern && !Array.isArray(value) && !new RegExp(field.pattern).test(String(value).trim())) {\n\t\t\t\t\terrors[field.key] = this.tr(field.patternMessage || 'This value is not valid.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst oneOf = Array.isArray(this.content.add?.requireOneOf) ? this.content.add.requireOneOf : []\n\t\t\tif (oneOf.length > 0 && oneOf.every((key) => String(this.draft[key] ?? '').trim() === '')) {\n\t\t\t\terrors[oneOf[0]] = this.tr(this.content.add.requireOneOfMessage || 'Fill this in.')\n\t\t\t}\n\t\t\tthis.errors = errors\n\t\t\tif (Object.keys(errors).length > 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst entry = this.newEntry()\n\t\t\tconst scalar = typeof entry !== 'object'\n\t\t\tconst unique = this.content.add && this.content.add.unique\n\t\t\tconst editing = this.editingKey\n\t\t\tconst saved = await this.save((stored) => {\n\t\t\t\tconst others = stored.filter((item, index) => editing === null || this.keyOf(item, index) !== editing)\n\t\t\t\tconst duplicate = scalar\n\t\t\t\t\t? (unique && others.some((item) => String(item) === String(entry)))\n\t\t\t\t\t: (unique && others.some((item) => item && String(readPath(item, unique)) === String(entry[unique])))\n\t\t\t\tif (duplicate) {\n\t\t\t\t\tconst error = new Error('duplicate')\n\t\t\t\t\terror.userMessage = this.tr('This is already in the list.')\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t\tconst next = editing === null\n\t\t\t\t\t? [...stored, entry]\n\t\t\t\t\t: stored.map((item, index) => (this.keyOf(item, index) === editing ? (scalar ? entry : { ...item, ...entry }) : item))\n\t\t\t\treturn this.withExclusive(next, editing === null ? next.length - 1 : next.findIndex((item, index) => this.keyOf(stored[index], index) === editing))\n\t\t\t}, '*')\n\t\t\tif (saved) {\n\t\t\t\tthis.resetDraft()\n\t\t\t\tthis.adding = false\n\t\t\t\tthis.editingKey = null\n\t\t\t\tthis.loadLive()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Keep an `add.exclusive` flag on one entry: when the entry at `index`\n\t\t * has it, every other entry loses it (one primary address).\n\t\t *\n\t\t * @param {Array<object>} list The list to save.\n\t\t * @param {number} index The entry just added or edited.\n\t\t * @return {Array<object>} The list.\n\t\t * @spec openspec/changes/field-list-edit/specs/field-list/spec.md#requirement-a-field-list-entry-can-be-edited-and-one-entry-can-be-the-primary\n\t\t */\n\t\twithExclusive(list, index) {\n\t\t\tconst flags = Array.isArray(this.content.add?.exclusive) ? this.content.add.exclusive : []\n\t\t\tconst chosen = list[index]\n\t\t\tif (!chosen || typeof chosen !== 'object') {\n\t\t\t\treturn list\n\t\t\t}\n\t\t\treturn list.map((item, i) => {\n\t\t\t\tif (i === index || !item || typeof item !== 'object') {\n\t\t\t\t\treturn item\n\t\t\t\t}\n\t\t\t\tconst cleared = { ...item }\n\t\t\t\tfor (const flag of flags) {\n\t\t\t\t\tif (chosen[flag] === true && cleared[flag] === true) {\n\t\t\t\t\t\tcleared[flag] = false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn cleared\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open an entry in the form, prefilled.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {void}\n\t\t * @spec openspec/changes/field-list-edit/specs/field-list/spec.md#requirement-a-field-list-entry-can-be-edited-and-one-entry-can-be-the-primary\n\t\t */\n\t\tstartEdit(row) {\n\t\t\tconst draft = {}\n\t\t\tfor (const [index, field] of this.addFields.entries()) {\n\t\t\t\tconst scalarValue = this.content.add?.scalar === true && index === 0 ? row.item : undefined\n\t\t\t\tconst value = row.item && typeof row.item === 'object' ? readPath(row.item, field.key) : scalarValue\n\t\t\t\tdraft[field.key] = value === undefined || value === null ? this.emptyValue(field) : value\n\t\t\t}\n\t\t\tthis.draft = draft\n\t\t\tthis.errors = {}\n\t\t\tthis.editingKey = row.key\n\t\t\tthis.adding = true\n\t\t},\n\n\t\t/** Close the form without saving the edit. */\n\t\tcancelEdit() {\n\t\t\tthis.editingKey = null\n\t\t\tthis.adding = false\n\t\t\tthis.resetDraft()\n\t\t},\n\n\t\t/**\n\t\t * The entry the add form describes: an object of the filled add fields\n\t\t * over `add.defaults`, or, with `add.scalar`, the trimmed value of the\n\t\t * first add field itself (a list of strings such as `enumValues`).\n\t\t *\n\t\t * @return {object|string} The entry.\n\t\t * @spec openspec/changes/side-card-follows-row/specs/side-card-follows-row/spec.md#requirement-a-field-list-adds-plain-values\n\t\t */\n\t\tnewEntry() {\n\t\t\tconst add = this.content.add || {}\n\t\t\tconst trimmed = (value) => (typeof value === 'string' ? value.trim() : value)\n\t\t\tif (add.scalar === true) {\n\t\t\t\tconst first = this.addFields[0]\n\t\t\t\treturn first ? trimmed(this.draft[first.key]) : ''\n\t\t\t}\n\t\t\tconst entry = { ...(add.defaults || {}) }\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst value = this.draft[field.key]\n\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t// An emptied list is written as empty, so an edit can clear it.\n\t\t\t\t\tentry[field.key] = value\n\t\t\t\t} else if (value !== undefined && value !== null && String(value).trim() !== '') {\n\t\t\t\t\tentry[field.key] = trimmed(value)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn entry\n\t\t},\n\n\t\t/**\n\t\t * Remove an entry by its key.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync remove(row) {\n\t\t\tawait this.save((stored) => stored.filter((item, index) => this.keyOf(item, index) !== row.key), row.key)\n\t\t},\n\n\t\t/**\n\t\t * Run a row action's request, then re-read the live state.\n\t\t *\n\t\t * @param {object} action The action.\n\t\t * @param {object} row The row.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-row-can-run-a-configured-request\n\t\t */\n\t\t/**\n\t\t * The copy buttons of a row's detail line: one per named value that is not empty.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {Array<{path: string, label?: string}>|undefined} declared The `detail.copy` list.\n\t\t * @return {Array<{path: string, label: string, value: string}>}\n\t\t */\n\t\tcopiesOf(entry, declared) {\n\t\t\treturn (Array.isArray(declared) ? declared : [])\n\t\t\t\t.filter((copy) => copy && typeof copy.path === 'string' && copy.path !== '')\n\t\t\t\t.map((copy) => ({\n\t\t\t\t\tpath: copy.path,\n\t\t\t\t\tlabel: this.tr(copy.label || 'Copy'),\n\t\t\t\t\tvalue: String(readPath(entry, copy.path) ?? ''),\n\t\t\t\t}))\n\t\t\t\t.filter((copy) => copy.value !== '')\n\t\t},\n\n\t\t/**\n\t\t * Put one value on the clipboard and say so; a browser that refuses says that instead.\n\t\t *\n\t\t * @param {{label: string, value: string}} copy The copy button.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync copyValue(copy) {\n\t\t\tthis.copied = ''\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(copy.value)\n\t\t\t\tthis.copied = `${this.tr('Copied')}: ${copy.label}`\n\t\t\t} catch {\n\t\t\t\tthis.notify(this.tr('Copying did not work. Select the text and copy it yourself.'))\n\t\t\t}\n\t\t},\n\n\t\tasync runAction(action, row) {\n\t\t\tif (action.dialog) {\n\t\t\t\tconst props = this.dialogPropsOf(action, row.entry, row.index)\n\t\t\t\tif (props !== null && typeof this.cnOpenModal === 'function') {\n\t\t\t\t\tthis.cnOpenModal(action.dialog, props)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.busy = row.key\n\t\t\tthis.notice = ''\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst method = String(action.request.method || 'POST').toLowerCase()\n\t\t\t\tconst payload = this.resolve(action.request.payload || {}, row.entry)\n\t\t\t\tconst response = method === 'get'\n\t\t\t\t\t? await axios.get(prefixUrl(this.resolve(action.request.url, row.entry)))\n\t\t\t\t\t: await axios[method](prefixUrl(this.resolve(action.request.url, row.entry)), payload)\n\t\t\t\tconst message = response && response.data && typeof response.data.message === 'string' ? response.data.message : ''\n\t\t\t\tif (message) {\n\t\t\t\t\tthis.notify(message, 'info')\n\t\t\t\t}\n\t\t\t\tawait this.loadLive()\n\t\t\t} catch (e) {\n\t\t\t\tthis.notify(serverErrorMessage(e))\n\t\t\t} finally {\n\t\t\t\tthis.busy = ''\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-field-list-widget {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__lead {\n\tmargin: 0;\n\tfont-weight: bold;\n}\n\n.cn-field-list-widget__rows {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.cn-field-list-widget__row {\n\tpadding: 10px 0;\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-field-list-widget__row:first-child {\n\tborder-top: none;\n\tpadding-top: 0;\n}\n\n.cn-field-list-widget__line {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__avatar {\n\tflex: 0 0 auto;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder-radius: 50%;\n\tbackground: var(--color-primary-element-light);\n\tcolor: var(--color-primary-element-light-text, var(--color-main-text));\n\tfont-size: 12px;\n\tfont-weight: 700;\n}\n\n.cn-field-list-widget__main {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1 1 auto;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__title {\n\tfont-weight: 600;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__meta,\n.cn-field-list-widget__aside,\n.cn-field-list-widget__detail,\n.cn-field-list-widget__hint,\n.cn-field-list-widget__empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-field-list-widget__meta,\n.cn-field-list-widget__aside,\n.cn-field-list-widget__copies {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 4px;\n}\n\n.cn-field-list-widget__detail {\n\tfont-size: 13px;\n}\n\n.cn-field-list-widget__aside {\n\twhite-space: nowrap;\n}\n\n.cn-field-list-widget__detail,\n.cn-field-list-widget__hint,\n.cn-field-list-widget__empty {\n\tmargin: 4px 0 0;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__add {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: flex-end;\n\tgap: 8px 12px;\n}\n\n.cn-field-list-widget__add > * {\n\tflex: 1 1 180px;\n}\n\n.cn-field-list-widget__add > button {\n\tflex: 0 0 auto;\n}\n\n.cn-field-list-widget__toolbar {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.cn-field-list-widget__table-wrap {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\toverflow-x: auto;\n}\n\n.cn-field-list-widget__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n}\n\n.cn-field-list-widget__th {\n\tpadding: 8px 12px;\n\ttext-align: start;\n\tfont-size: 13px;\n\tfont-weight: 600;\n\twhite-space: nowrap;\n\tcolor: var(--color-text-maxcontrast);\n\tbackground: var(--color-background-hover);\n}\n\n.cn-field-list-widget__th--menu,\n.cn-field-list-widget__code {\n\tfont-size: 0.85em;\n\tword-break: break-all;\n}\n\n.cn-field-list-widget__td--menu {\n\twidth: 1%;\n\ttext-align: end;\n}\n\n.cn-field-list-widget__tr {\n\tborder-top: 1px solid var(--cn-board-hairline, var(--color-border));\n}\n\n.cn-field-list-widget__td {\n\tpadding: 10px 12px;\n\tvertical-align: middle;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__sr {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\toverflow: hidden;\n\tclip-path: inset(50%);\n}\n\n.cn-field-list-widget__band {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 8px 12px;\n\tpadding: 12px 14px;\n\tborder: 1px solid var(--color-warning);\n\tborder-radius: 10px;\n\tbackground: color-mix(in srgb, var(--color-warning) 14%, var(--color-main-background));\n\tfont-size: 14px;\n}\n</style>\n"],"names":["CnStatusBadge"],"mappings":"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"}
|