@conduction/nextcloud-vue 2.132.0 → 2.133.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/dist/esm/components/CnActionButtons/CnActionButtons.vue.js +1 -1
  2. package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js +14 -0
  3. package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
  4. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +5 -4
  5. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
  6. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue.js +9 -0
  7. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue.js.map +1 -0
  8. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue2.js +237 -0
  9. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue2.js.map +1 -0
  10. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue3.js +103 -0
  11. package/dist/esm/components/CnConditionListEditor/CnConditionListEditor.vue3.js.map +1 -0
  12. package/dist/esm/components/CnConditionListEditor/conditionOperators.js +121 -0
  13. package/dist/esm/components/CnConditionListEditor/conditionOperators.js.map +1 -0
  14. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +12 -0
  15. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  16. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +1 -1
  17. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  18. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +8 -1
  19. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  20. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  21. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue.js +1 -1
  22. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js +46 -7
  23. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js.map +1 -1
  24. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js +1 -1
  25. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js.map +1 -1
  26. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue.js +1 -1
  27. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js +59 -3
  28. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js.map +1 -1
  29. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js +197 -127
  30. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js.map +1 -1
  31. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  32. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +42 -2
  33. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  34. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  36. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +1 -1
  37. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  39. package/dist/esm/index.js +2 -0
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/l10n/en.json.js +17 -1
  42. package/dist/esm/l10n/en.json.js.map +1 -1
  43. package/dist/esm/l10n/nl.json.js +17 -1
  44. package/dist/esm/l10n/nl.json.js.map +1 -1
  45. package/dist/esm/library-style.js +1 -1
  46. package/dist/esm/nextcloud-vue.css +277 -166
  47. package/dist/esm/store/plugins/liveUpdates.js +13 -4
  48. package/dist/esm/store/plugins/liveUpdates.js.map +1 -1
  49. package/dist/esm/store/useObjectStore.js +28 -5
  50. package/dist/esm/store/useObjectStore.js.map +1 -1
  51. package/dist/esm/utils/detailActionModel.js +6 -0
  52. package/dist/esm/utils/detailActionModel.js.map +1 -1
  53. package/dist/esm/utils/listLenses.js +20 -1
  54. package/dist/esm/utils/listLenses.js.map +1 -1
  55. package/dist/esm/utils/objectRows.js +59 -0
  56. package/dist/esm/utils/objectRows.js.map +1 -0
  57. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  58. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  59. package/dist/nextcloud-vue.cjs.js +5961 -5127
  60. package/dist/nextcloud-vue.cjs.js.map +2 -2
  61. package/dist/nextcloud-vue.css +277 -166
  62. package/l10n/en.json +17 -1
  63. package/l10n/nl.json +17 -1
  64. package/package.json +1 -1
  65. package/src/components/CnActionButtons/CnActionButtons.vue +15 -0
  66. package/src/components/CnConditionListEditor/CnConditionListEditor.vue +346 -0
  67. package/src/components/CnConditionListEditor/conditionOperators.js +126 -0
  68. package/src/components/CnConditionListEditor/index.js +17 -0
  69. package/src/components/CnDetailPage/CnDetailPage.md +1 -0
  70. package/src/components/CnDetailPage/CnDetailPage.vue +13 -1
  71. package/src/components/CnIndexPage/CnIndexPage.vue +8 -1
  72. package/src/components/CnNcWidgetWidget/CnNcWidgetWidget.vue +47 -8
  73. package/src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue +139 -2
  74. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +42 -2
  75. package/src/components/CnTabsWidget/CnTabsWidget.vue +1 -1
  76. package/src/components/index.js +1 -0
  77. package/src/css/look-board-index.css +6 -0
  78. package/src/css/look-board.css +35 -7
  79. package/src/index.js +2 -0
  80. package/src/schemas/app-manifest-v2.schema.json +17 -1
  81. package/src/store/plugins/liveUpdates.js +13 -4
  82. package/src/store/useObjectStore.js +28 -5
  83. package/src/utils/detailActionModel.js +6 -0
  84. package/src/utils/listLenses.js +20 -1
  85. package/src/utils/objectRows.js +55 -0
  86. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"CnObjectPartiesWidget.vue2.js","sources":["../../../../src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.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-object-parties\" data-testid=\"cn-object-parties\">\n\t\t<NcLoadingIcon v-if=\"loading\" :size=\"24\" />\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"failed\"\n\t\t\t:name=\"label('failed')\"\n\t\t\t:description=\"label('failedDetail')\"\n\t\t\tdata-testid=\"cn-object-parties-failed\" />\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"groups.length === 0\"\n\t\t\t:name=\"label('empty')\"\n\t\t\t:description=\"label('emptyDetail')\"\n\t\t\tdata-testid=\"cn-object-parties-empty\" />\n\n\t\t<template v-else>\n\t\t\t<div\n\t\t\t\tv-if=\"kinds\"\n\t\t\t\tclass=\"cn-object-parties__accepted\"\n\t\t\t\t:data-source=\"kinds.source\"\n\t\t\t\tdata-testid=\"cn-object-parties-accepted\">\n\t\t\t\t<span class=\"cn-object-parties__accepted-label\">{{ label('accepted') }}</span>\n\t\t\t\t<span\n\t\t\t\t\tv-for=\"(kind, index) in kinds.kinds\"\n\t\t\t\t\t:key=\"kindCode(kind)\"\n\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--default cn-object-parties__accepted-kind\"\n\t\t\t\t\tdata-testid=\"cn-object-parties-accepted-kind\">{{ index + 1 }}. {{ kind.label || kindCode(kind) }}</span>\n\t\t\t\t<span v-if=\"kindsSourceText\" class=\"cn-object-parties__muted\">{{ kindsSourceText }}</span>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"verdicts.length > 0\"\n\t\t\t\tclass=\"cn-object-parties__verdicts\"\n\t\t\t\tdata-testid=\"cn-object-parties-verdicts\">\n\t\t\t\t<NcNoteCard\n\t\t\t\t\tv-for=\"verdict in verdicts\"\n\t\t\t\t\t:key=\"`${verdict.party}-${verdict.key}`\"\n\t\t\t\t\t:type=\"verdict.severity\"\n\t\t\t\t\t:data-effect=\"verdict.effect\"\n\t\t\t\t\tdata-testid=\"cn-object-parties-verdict\">\n\t\t\t\t\t<strong>{{ verdict.label }}</strong>\n\t\t\t\t\t<span>{{ verdict.sentence }}</span>\n\t\t\t\t</NcNoteCard>\n\t\t\t</div>\n\n\t\t\t<section\n\t\t\t\tv-for=\"group in groups\"\n\t\t\t\t:key=\"group.key\"\n\t\t\t\tclass=\"cn-object-parties__role\"\n\t\t\t\t:data-role=\"group.key\"\n\t\t\t\t:aria-labelledby=\"`${idPrefix}-${group.key}`\"\n\t\t\t\tdata-testid=\"cn-object-parties-role\">\n\t\t\t\t<component :is=\"innerHeadingTag\" :id=\"`${idPrefix}-${group.key}`\" class=\"cn-object-parties__role-label cn-inner-heading\">\n\t\t\t\t\t{{ group.label }}\n\t\t\t\t</component>\n\t\t\t\t<ul class=\"cn-object-parties__list\">\n\t\t\t\t\t<li\n\t\t\t\t\t\tv-for=\"party in group.parties\"\n\t\t\t\t\t\t:key=\"`${group.key}-${party.partyUuid || party.contactUid}`\"\n\t\t\t\t\t\tclass=\"cn-object-parties__party\"\n\t\t\t\t\t\t:data-party=\"party.partyUuid || party.contactUid\"\n\t\t\t\t\t\tdata-testid=\"cn-object-parties-party\">\n\t\t\t\t\t\t<span class=\"cn-object-parties__name\">{{ nameOf(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"primary && party.partyUuid === primary\"\n\t\t\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--primary\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-primary\">{{ label('primary') }}</span>\n\t\t\t\t\t\t<span v-if=\"kindOf(party)\" class=\"cn-object-parties__muted\">{{ kindOf(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"notAccepted(party)\"\n\t\t\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--warning\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-not-accepted\">{{ label('notAccepted') }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-for=\"(line, index) in extraLinesOf(party)\"\n\t\t\t\t\t\t\t:key=\"`line-${index}`\"\n\t\t\t\t\t\t\tclass=\"cn-object-parties__muted\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-extra-line\">{{ line }}</span>\n\t\t\t\t\t\t<span v-if=\"party.email\" class=\"cn-object-parties__muted\">{{ party.email }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"representedBy(party)\"\n\t\t\t\t\t\t\tclass=\"cn-object-parties__muted\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-represented\">{{ label('representedBy') }}: {{ representedBy(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"correspondenceOf(party)\"\n\t\t\t\t\t\t\tclass=\"cn-object-parties__muted\"\n\t\t\t\t\t\t\t:data-party-documents=\"party.partyUuid || party.contactUid\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-documents\">{{ correspondenceOf(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-for=\"indicator in indicatorsFor(party)\"\n\t\t\t\t\t\t\t:key=\"`${party.partyUuid}-${indicator.key}`\"\n\t\t\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--default\"\n\t\t\t\t\t\t\t:class=\"`cn-object-parties__indicator--${indicator.severity}`\"\n\t\t\t\t\t\t\t:data-effect=\"indicator.effect\"\n\t\t\t\t\t\t\t:title=\"indicator.verdict\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-indicator\">{{ indicator.label }} · {{ indicator.verdict }}</span>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</section>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { translatePlural as n, translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcEmptyContent, NcLoadingIcon, NcNoteCard } from '@nextcloud/vue'\nimport { interpolateUrlTokens } from '../../composables/useEndpointSource.js'\nimport innerHeading from '../../mixins/innerHeading.js'\nimport { conditionalLine } from '../../utils/conditionalLine.js'\nimport {\n\tdocumentsOfParty,\n\tindicatorsOf,\n\tindicatorVerdict,\n\tkindCode,\n\trepresentedByMap,\n\trolesInOrder,\n} from '../../utils/objectParties.js'\nimport { readPath } from '../../utils/readPath.js'\n\nlet uid = 0\n\n/**\n * The default words, keyed as `content.labels` overrides them.\n *\n * @return {object} The labels.\n */\nfunction defaultLabels() {\n\treturn {\n\t\tfailed: t('nextcloud-vue', 'The parties could not be read'),\n\t\tfailedDetail: t('nextcloud-vue', 'OpenRegister did not answer. Nothing has been removed.'),\n\t\tempty: t('nextcloud-vue', 'No parties yet'),\n\t\temptyDetail: t('nextcloud-vue', 'Add a party to record who this is for and who acts on it.'),\n\t\taccepted: t('nextcloud-vue', 'Accepted kinds'),\n\t\tprimary: t('nextcloud-vue', 'Primary party'),\n\t\tnotAccepted: t('nextcloud-vue', 'Kind not accepted here'),\n\t\trepresentedBy: t('nextcloud-vue', 'Represented by'),\n\t}\n}\n\n/**\n * CnObjectPartiesWidget — the `parties` widget: a record's parties as\n * OpenRegister's party model answers them, grouped by role with the primary\n * party first. Each party shows its kind, its representative and the\n * indicators on it, each with its verdict. A blocking verdict is also a note\n * above the list, so nobody publishes or sends past it.\n *\n * ```json\n * {\n * \"type\": \"parties\",\n * \"content\": {\n * \"rolesObjects\": { \"register\": \"myapp\", \"schema\": \"role\", \"field\": \"item\" },\n * \"roleLabels\": { \"applicant\": \"Applicant\" },\n * \"kindsSource\": { \"url\": \"/apps/myapp/api/items/@objectId/party-kinds\", \"enforce\": \"crm\" },\n * \"extraLines\": [{ \"endpoint\": \"/apps/myapp/api/items/@objectId/parties/{party}/language\", \"lines\": [\"Language: {language}\"] }],\n * \"correspondence\": { \"endpoint\": \"/apps/myapp/api/items/@objectId/documents\", \"path\": \"documents\" }\n * }\n * }\n * ```\n *\n * A failed read says so and is never shown as \"no parties\".\n *\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport default {\n\tname: 'CnObjectPartiesWidget',\n\n\tcomponents: { NcEmptyContent, NcLoadingIcon, NcNoteCard },\n\n\tmixins: [innerHeading],\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The configuration: `rolesSource` (the listing URL, default\n\t\t * OpenRegister's `/parties` of this record), `partySource` (one\n\t\t * party, `{uuid}` filled in), `rolesObjects` (`{ register, schema,\n\t\t * field }`, the role rows that say who represents whom), `roleLabels`,\n\t\t * `kindsSource` (`{ url, enforce?, sourceText? }`), `extraLines`\n\t\t * (`[{ endpoint, path?, valueLabels?, lines }]`, one request per\n\t\t * party, `{party}` filled in), `correspondence` (`{ endpoint, path?,\n\t\t * senderField?, recipientsField? }`) and `labels`.\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The record's id, bound by the detail host. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** The record's register slug. */\n\t\tregister: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** The record's schema slug. */\n\t\tschema: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\tuid += 1\n\t\treturn {\n\t\t\tidPrefix: `cn-object-parties-${uid}`,\n\t\t\tloading: true,\n\t\t\tfailed: false,\n\t\t\tlisting: null,\n\t\t\tpartyRecords: {},\n\t\t\trepresented: {},\n\t\t\tkinds: null,\n\t\t\textra: {},\n\t\t\tdocuments: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {Array<object>} The role groups, primary first. */\n\t\tgroups() {\n\t\t\treturn rolesInOrder(this.listing, this.translatedMap(this.content?.roleLabels))\n\t\t},\n\n\t\t/** @return {string|null} The primary party's uuid. */\n\t\tprimary() {\n\t\t\treturn this.listing?.primary || null\n\t\t},\n\n\t\t/** @return {object} The verdict words, translated. */\n\t\tverdictLabels() {\n\t\t\tconst own = this.content?.labels || {}\n\t\t\tconst out = {}\n\t\t\tfor (const key of ['verdictPublication', 'verdictSend', 'verdictWarn']) {\n\t\t\t\tif (typeof own[key] === 'string' && own[key] !== '') {\n\t\t\t\t\tout[key] = this.cnTranslate(own[key])\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/** @return {Array<object>} The blocking verdicts, as notes above the list. */\n\t\tverdicts() {\n\t\t\treturn indicatorsOf(Object.values(this.partyRecords))\n\t\t\t\t.map((indicator) => ({\n\t\t\t\t\t...indicatorVerdict(indicator, this.verdictLabels),\n\t\t\t\t\tparty: indicator.party,\n\t\t\t\t\tkey: indicator.key,\n\t\t\t\t\tsentence: this.sentenceFor(indicator),\n\t\t\t\t}))\n\t\t\t\t.filter((verdict) => verdict.severity === 'error')\n\t\t},\n\n\t\t/** @return {string} Where the accepted kinds come from. */\n\t\tkindsSourceText() {\n\t\t\tconst texts = this.content?.kindsSource?.sourceText\n\t\t\tif (!this.kinds || !texts || typeof texts !== 'object') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst text = texts[this.kinds.source] || texts.default || ''\n\t\t\treturn text ? this.cnTranslate(text) : ''\n\t\t},\n\n\t\t/** @return {Record<string, string>} The kind labels the listing declares. */\n\t\tkindLabels() {\n\t\t\tconst labels = {}\n\t\t\tfor (const kind of this.listing?.kinds || []) {\n\t\t\t\tif (kind && kind.key) {\n\t\t\t\t\tlabels[kind.key] = kind.label || kind.key\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn labels\n\t\t},\n\n\t\t/** @return {string} A key that changes when the record does. */\n\t\trecordKey() {\n\t\t\treturn `${this.register}|${this.schema}|${this.objectId}`\n\t\t},\n\t},\n\n\twatch: {\n\t\trecordKey: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.load()\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tkindCode,\n\n\t\t/**\n\t\t * A label: the content's own (translated), else the default.\n\t\t *\n\t\t * @param {string} key The label key.\n\t\t * @return {string}\n\t\t */\n\t\tlabel(key) {\n\t\t\tconst own = this.content?.labels && typeof this.content.labels[key] === 'string' ? this.content.labels[key] : ''\n\t\t\treturn own !== '' ? this.cnTranslate(own) : defaultLabels()[key]\n\t\t},\n\n\t\t/**\n\t\t * A map of manifest words, translated.\n\t\t *\n\t\t * @param {object} map The map.\n\t\t * @return {Record<string, string>}\n\t\t */\n\t\ttranslatedMap(map) {\n\t\t\tconst out = {}\n\t\t\tfor (const [key, value] of Object.entries(map && typeof map === 'object' ? map : {})) {\n\t\t\t\tout[key] = typeof value === 'string' ? this.cnTranslate(value) : value\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * An app path with the record's tokens and `{party}` filled in.\n\t\t *\n\t\t * @param {string} template The path.\n\t\t * @param {string} [party] A party uuid.\n\t\t * @return {string}\n\t\t */\n\t\turlOf(template, party = '') {\n\t\t\tconst withSlugs = String(template)\n\t\t\t\t.replaceAll('@register', String(this.register || ''))\n\t\t\t\t.replaceAll('@schema', String(this.schema || ''))\n\t\t\treturn interpolateUrlTokens(withSlugs, { objectId: this.objectId }).replaceAll('{party}', encodeURIComponent(party)).replaceAll('{uuid}', encodeURIComponent(party))\n\t\t},\n\n\t\t/**\n\t\t * GET an app path; null when it fails.\n\t\t *\n\t\t * @param {string} path The app path.\n\t\t * @param {object} [params] Query parameters.\n\t\t * @return {Promise<unknown>}\n\t\t */\n\t\tasync read(path, params) {\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl(path), params ? { params } : undefined)\n\t\t\t\treturn data ?? null\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read the listing, then each party, the representation, the kinds,\n\t\t * the extra lines and the correspondence.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync load() {\n\t\t\tif (!this.objectId) {\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.failed = false\n\t\t\tthis.partyRecords = {}\n\t\t\tthis.represented = {}\n\t\t\tthis.extra = {}\n\t\t\tthis.documents = []\n\t\t\tconst listing = await this.read(this.urlOf(this.content?.rolesSource || '/apps/openregister/api/objects/@register/@schema/@objectId/parties'))\n\t\t\tif (!listing || typeof listing !== 'object') {\n\t\t\t\tthis.failed = true\n\t\t\t\tthis.listing = null\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.listing = listing\n\t\t\tconst uuids = [...new Set((listing.results || []).map((row) => row && row.partyUuid).filter(Boolean))]\n\t\t\tconst partyUrl = this.content?.partySource || '/apps/openregister/api/parties/{uuid}'\n\t\t\tconst records = await Promise.all(uuids.map((uuid) => this.read(this.urlOf(partyUrl, uuid))))\n\t\t\tconst byUuid = {}\n\t\t\tuuids.forEach((uuid, index) => {\n\t\t\t\tif (records[index] && typeof records[index] === 'object') {\n\t\t\t\t\tbyUuid[uuid] = records[index]\n\t\t\t\t}\n\t\t\t})\n\t\t\tthis.partyRecords = byUuid\n\t\t\tawait Promise.all([this.loadRepresentation(), this.loadKinds(), this.loadExtraLines(uuids), this.loadCorrespondence()])\n\t\t\tthis.loading = false\n\t\t},\n\n\t\t/** @return {Promise<void>} Who represents whom, from the role rows. */\n\t\tasync loadRepresentation() {\n\t\t\tconst source = this.content?.rolesObjects\n\t\t\tif (!source || !source.register || !source.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst data = await this.read(`/apps/openregister/api/objects/${encodeURIComponent(source.register)}/${encodeURIComponent(source.schema)}`, { [source.field || 'object']: String(this.objectId), _limit: 200 })\n\t\t\tconst rows = Array.isArray(data?.results) ? data.results : (Array.isArray(data) ? data : [])\n\t\t\tthis.represented = representedByMap(rows)\n\t\t},\n\n\t\t/** @return {Promise<void>} The kinds this record accepts. */\n\t\tasync loadKinds() {\n\t\t\tconst source = this.content?.kindsSource\n\t\t\tthis.kinds = null\n\t\t\tif (!source || !source.url) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst data = await this.read(this.urlOf(source.url))\n\t\t\tthis.kinds = data && Array.isArray(data.kinds) ? data : null\n\t\t},\n\n\t\t/**\n\t\t * One answer per party per extra line.\n\t\t *\n\t\t * @param {Array<string>} uuids The parties.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadExtraLines(uuids) {\n\t\t\tconst lines = Array.isArray(this.content?.extraLines) ? this.content.extraLines : []\n\t\t\tconst extra = {}\n\t\t\tawait Promise.all(lines.map(async (spec, index) => {\n\t\t\t\tif (!spec || !spec.endpoint) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst answers = await Promise.all(uuids.map((uuid) => this.read(this.urlOf(spec.endpoint, uuid))))\n\t\t\t\tuuids.forEach((uuid, i) => {\n\t\t\t\t\tconst answer = spec.path ? readPath(answers[i], spec.path) : answers[i]\n\t\t\t\t\tif (answer && typeof answer === 'object') {\n\t\t\t\t\t\textra[`${index}|${uuid}`] = answer\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}))\n\t\t\tthis.extra = extra\n\t\t},\n\n\t\t/** @return {Promise<void>} The documents the correspondence counts read. */\n\t\tasync loadCorrespondence() {\n\t\t\tconst spec = this.content?.correspondence\n\t\t\tif (!spec || !spec.endpoint) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst data = await this.read(this.urlOf(spec.endpoint))\n\t\t\tconst list = spec.path ? readPath(data, spec.path) : data\n\t\t\tthis.documents = Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The extra lines for a party, each the first of its `lines` that applies.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {Array<string>}\n\t\t */\n\t\textraLinesOf(party) {\n\t\t\tconst specs = Array.isArray(this.content?.extraLines) ? this.content.extraLines : []\n\t\t\treturn specs.map((spec, index) => {\n\t\t\t\tconst answer = this.extra[`${index}|${party.partyUuid}`]\n\t\t\t\tif (!answer) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn conditionalLine(spec.lines || [], this.labelled(answer, spec.valueLabels), (text) => this.cnTranslate(text))\n\t\t\t}).filter((line) => line !== '')\n\t\t},\n\n\t\t/**\n\t\t * An answer with its coded values replaced by their labels\n\t\t * (`valueLabels: { language: { nl: \"Dutch\" } }`; `nl-NL` reads as `nl`).\n\t\t *\n\t\t * @param {object} answer The answer.\n\t\t * @param {object} valueLabels The labels by field and value.\n\t\t * @return {object}\n\t\t */\n\t\tlabelled(answer, valueLabels) {\n\t\t\tif (!valueLabels || typeof valueLabels !== 'object') {\n\t\t\t\treturn answer\n\t\t\t}\n\t\t\tconst out = { ...answer }\n\t\t\tfor (const [field, map] of Object.entries(valueLabels)) {\n\t\t\t\tconst raw = answer[field]\n\t\t\t\tif (typeof raw !== 'string' || !map) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst hit = map[raw] ?? map[raw.toLowerCase().split('-')[0]]\n\t\t\t\tif (typeof hit === 'string') {\n\t\t\t\t\tout[field] = this.cnTranslate(hit)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Whether a party's kind is one this record does not accept. Only when\n\t\t * the kinds come from the source named by `kindsSource.enforce`.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {boolean}\n\t\t */\n\t\tnotAccepted(party) {\n\t\t\tconst enforce = this.content?.kindsSource?.enforce\n\t\t\tif (!party?.partyKind || !this.kinds || (enforce && this.kinds.source !== enforce)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn !this.kinds.kinds.some((kind) => kindCode(kind) === party.partyKind)\n\t\t},\n\n\t\t/**\n\t\t * A party's kind: the accepted kind's label, else the listing's, else the code.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\tkindOf(party) {\n\t\t\tif (!party.partyKind) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst offered = (this.kinds?.kinds || []).find((kind) => kindCode(kind) === party.partyKind)\n\t\t\treturn offered?.label || this.kindLabels[party.partyKind] || party.partyKind\n\t\t},\n\n\t\t/**\n\t\t * Who represents this party, by name.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\trepresentedBy(party) {\n\t\t\tconst uuid = this.represented[party.partyUuid || party.contactUid || ''] || ''\n\t\t\tif (uuid === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst row = (this.listing?.results || []).find((candidate) => candidate?.partyUuid === uuid)\n\t\t\treturn row ? this.nameOf(row) : (this.partyRecords[uuid]?.name || uuid)\n\t\t},\n\n\t\t/**\n\t\t * A party's name: the listing's, else the party record's, else its id.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\tnameOf(party) {\n\t\t\treturn party.displayName || this.partyRecords[party.partyUuid]?.name || party.contactUid || party.partyUuid || ''\n\t\t},\n\n\t\t/**\n\t\t * How many documents a party sent and received.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\tcorrespondenceOf(party) {\n\t\t\tconst spec = this.content?.correspondence || {}\n\t\t\tconst { sent, received } = documentsOfParty(this.documents, party.partyUuid || party.contactUid || '', spec)\n\t\t\tif (sent.length === 0 && received.length === 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (received.length === 0) {\n\t\t\t\treturn n('nextcloud-vue', '%n document sent', '%n documents sent', sent.length)\n\t\t\t}\n\t\t\tif (sent.length === 0) {\n\t\t\t\treturn n('nextcloud-vue', '%n document received', '%n documents received', received.length)\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', '{sent} sent, {received} received', { sent: sent.length, received: received.length })\n\t\t},\n\n\t\t/**\n\t\t * The indicators on a party, each with its verdict.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {Array<object>}\n\t\t */\n\t\tindicatorsFor(party) {\n\t\t\tconst record = this.partyRecords[party.partyUuid]\n\t\t\tif (!record) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn (record.indicators || []).filter(Boolean).map((indicator) => ({ ...indicatorVerdict(indicator, this.verdictLabels), key: indicator.key }))\n\t\t},\n\n\t\t/**\n\t\t * The sentence of a blocking verdict, naming the party.\n\t\t *\n\t\t * @param {object} indicator The indicator with `partyName`.\n\t\t * @return {string}\n\t\t */\n\t\tsentenceFor(indicator) {\n\t\t\tconst name = indicator.partyName || indicator.party\n\t\t\tconst own = this.content?.labels || {}\n\t\t\tif (indicatorVerdict(indicator).effect === 'refuse-publication') {\n\t\t\t\treturn own.sentencePublication\n\t\t\t\t\t? this.cnTranslate(own.sentencePublication).replaceAll('{party}', name)\n\t\t\t\t\t: t('nextcloud-vue', 'Publishing a file on this record is refused, because of {party}.', { party: name }, undefined, { escape: false })\n\t\t\t}\n\t\t\treturn own.sentenceSend\n\t\t\t\t? this.cnTranslate(own.sentenceSend).replaceAll('{party}', name)\n\t\t\t\t: t('nextcloud-vue', 'A message to {party} is refused.', { party: name }, undefined, { escape: false })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-object-parties {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.cn-object-parties__verdicts {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline, 4px);\n}\n\n.cn-object-parties__role-label {\n\tmargin: 0 0 var(--default-grid-baseline, 4px) 0;\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 0.9em;\n}\n\n.cn-object-parties__list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline, 4px);\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.cn-object-parties__party {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline, 4px) * 2);\n\tpadding: var(--default-grid-baseline, 4px);\n\tborder-radius: var(--border-radius, 4px);\n}\n\n.cn-object-parties__party:hover {\n\tbackground-color: var(--color-background-hover);\n}\n\n.cn-object-parties__name {\n\tfont-weight: bold;\n}\n\n.cn-object-parties__muted {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-object-parties__accepted {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline, 4px) * 2);\n\tpadding: calc(var(--default-grid-baseline, 4px) * 2) calc(var(--default-grid-baseline, 4px) * 3);\n\tborder-radius: var(--border-radius-large, 10px);\n\tbackground-color: var(--color-background-hover);\n}\n\n.cn-object-parties__accepted-label {\n\tfont-weight: 600;\n}\n\n.cn-object-parties__accepted-kind {\n\tborder: 1px solid var(--color-border-dark);\n}\n</style>\n"],"names":["t","axios","n"],"mappings":"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"}
1
+ {"version":3,"file":"CnObjectPartiesWidget.vue2.js","sources":["../../../../src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.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-object-parties\" data-testid=\"cn-object-parties\">\n\t\t<NcLoadingIcon v-if=\"loading\" :size=\"24\" />\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"failed\"\n\t\t\t:name=\"label('failed')\"\n\t\t\t:description=\"label('failedDetail')\"\n\t\t\tdata-testid=\"cn-object-parties-failed\" />\n\n\t\t<div\n\t\t\tv-else-if=\"isPrimaryPresentation\"\n\t\t\tclass=\"cn-object-parties__main-card\"\n\t\t\tdata-testid=\"cn-object-parties-main-card\">\n\t\t\t<div\n\t\t\t\tv-if=\"mainParty\"\n\t\t\t\tclass=\"cn-object-parties__main\"\n\t\t\t\t:data-party=\"mainParty.partyUuid\"\n\t\t\t\tdata-testid=\"cn-object-parties-main\">\n\t\t\t\t<span class=\"cn-object-parties__main-initials\" aria-hidden=\"true\" data-testid=\"cn-object-parties-main-initials\">{{ initialsOf(nameOf(mainParty)) }}</span>\n\t\t\t\t<span class=\"cn-object-parties__main-text\">\n\t\t\t\t\t<strong class=\"cn-object-parties__main-name\" data-testid=\"cn-object-parties-main-name\">{{ nameOf(mainParty) }}</strong>\n\t\t\t\t\t<span v-if=\"mainRole\" class=\"cn-object-parties__muted cn-object-parties__main-role\" data-testid=\"cn-object-parties-main-role\">{{ mainRole }}</span>\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t\t<span v-else class=\"cn-object-parties__muted\" data-testid=\"cn-object-parties-main-none\">{{ label('noPrimary') }}</span>\n\t\t\t<a\n\t\t\t\tv-if=\"mainParty && mainParty.email\"\n\t\t\t\tclass=\"cn-object-parties__main-email\"\n\t\t\t\t:href=\"`mailto:${mainParty.email}`\"\n\t\t\t\tdata-testid=\"cn-object-parties-main-email\">\n\t\t\t\t<EmailOutline :size=\"16\" aria-hidden=\"true\" />{{ mainParty.email }}</a>\n\t\t\t<a\n\t\t\t\tv-if=\"footLink\"\n\t\t\t\tclass=\"cn-object-parties__main-link\"\n\t\t\t\t:href=\"footLink.href\"\n\t\t\t\tdata-testid=\"cn-object-parties-main-link\">{{ footLink.label }}</a>\n\t\t</div>\n\n\t\t<NcEmptyContent\n\t\t\tv-else-if=\"groups.length === 0\"\n\t\t\t:name=\"label('empty')\"\n\t\t\t:description=\"label('emptyDetail')\"\n\t\t\tdata-testid=\"cn-object-parties-empty\" />\n\n\t\t<template v-else>\n\t\t\t<div\n\t\t\t\tv-if=\"kinds\"\n\t\t\t\tclass=\"cn-object-parties__accepted\"\n\t\t\t\t:data-source=\"kinds.source\"\n\t\t\t\tdata-testid=\"cn-object-parties-accepted\">\n\t\t\t\t<span class=\"cn-object-parties__accepted-label\">{{ label('accepted') }}</span>\n\t\t\t\t<span\n\t\t\t\t\tv-for=\"(kind, index) in kinds.kinds\"\n\t\t\t\t\t:key=\"kindCode(kind)\"\n\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--default cn-object-parties__accepted-kind\"\n\t\t\t\t\tdata-testid=\"cn-object-parties-accepted-kind\">{{ index + 1 }}. {{ kind.label || kindCode(kind) }}</span>\n\t\t\t\t<span v-if=\"kindsSourceText\" class=\"cn-object-parties__muted\">{{ kindsSourceText }}</span>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\tv-if=\"verdicts.length > 0\"\n\t\t\t\tclass=\"cn-object-parties__verdicts\"\n\t\t\t\tdata-testid=\"cn-object-parties-verdicts\">\n\t\t\t\t<NcNoteCard\n\t\t\t\t\tv-for=\"verdict in verdicts\"\n\t\t\t\t\t:key=\"`${verdict.party}-${verdict.key}`\"\n\t\t\t\t\t:type=\"verdict.severity\"\n\t\t\t\t\t:data-effect=\"verdict.effect\"\n\t\t\t\t\tdata-testid=\"cn-object-parties-verdict\">\n\t\t\t\t\t<strong>{{ verdict.label }}</strong>\n\t\t\t\t\t<span>{{ verdict.sentence }}</span>\n\t\t\t\t</NcNoteCard>\n\t\t\t</div>\n\n\t\t\t<section\n\t\t\t\tv-for=\"group in groups\"\n\t\t\t\t:key=\"group.key\"\n\t\t\t\tclass=\"cn-object-parties__role\"\n\t\t\t\t:data-role=\"group.key\"\n\t\t\t\t:aria-labelledby=\"`${idPrefix}-${group.key}`\"\n\t\t\t\tdata-testid=\"cn-object-parties-role\">\n\t\t\t\t<component :is=\"innerHeadingTag\" :id=\"`${idPrefix}-${group.key}`\" class=\"cn-object-parties__role-label cn-inner-heading\">\n\t\t\t\t\t{{ group.label }}\n\t\t\t\t</component>\n\t\t\t\t<ul class=\"cn-object-parties__list\">\n\t\t\t\t\t<li\n\t\t\t\t\t\tv-for=\"party in group.parties\"\n\t\t\t\t\t\t:key=\"`${group.key}-${party.partyUuid || party.contactUid}`\"\n\t\t\t\t\t\tclass=\"cn-object-parties__party\"\n\t\t\t\t\t\t:data-party=\"party.partyUuid || party.contactUid\"\n\t\t\t\t\t\tdata-testid=\"cn-object-parties-party\">\n\t\t\t\t\t\t<span class=\"cn-object-parties__name\">{{ nameOf(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"primary && party.partyUuid === primary\"\n\t\t\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--primary\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-primary\">{{ label('primary') }}</span>\n\t\t\t\t\t\t<span v-if=\"kindOf(party)\" class=\"cn-object-parties__muted\">{{ kindOf(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"notAccepted(party)\"\n\t\t\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--warning\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-not-accepted\">{{ label('notAccepted') }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-for=\"(line, index) in extraLinesOf(party)\"\n\t\t\t\t\t\t\t:key=\"`line-${index}`\"\n\t\t\t\t\t\t\tclass=\"cn-object-parties__muted\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-extra-line\">{{ line }}</span>\n\t\t\t\t\t\t<span v-if=\"party.email\" class=\"cn-object-parties__muted\">{{ party.email }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"representedBy(party)\"\n\t\t\t\t\t\t\tclass=\"cn-object-parties__muted\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-represented\">{{ label('representedBy') }}: {{ representedBy(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-if=\"correspondenceOf(party)\"\n\t\t\t\t\t\t\tclass=\"cn-object-parties__muted\"\n\t\t\t\t\t\t\t:data-party-documents=\"party.partyUuid || party.contactUid\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-documents\">{{ correspondenceOf(party) }}</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tv-for=\"indicator in indicatorsFor(party)\"\n\t\t\t\t\t\t\t:key=\"`${party.partyUuid}-${indicator.key}`\"\n\t\t\t\t\t\t\tclass=\"cn-status-badge cn-status-badge--default\"\n\t\t\t\t\t\t\t:class=\"`cn-object-parties__indicator--${indicator.severity}`\"\n\t\t\t\t\t\t\t:data-effect=\"indicator.effect\"\n\t\t\t\t\t\t\t:title=\"indicator.verdict\"\n\t\t\t\t\t\t\tdata-testid=\"cn-object-parties-indicator\">{{ indicator.label }} · {{ indicator.verdict }}</span>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</section>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { translatePlural as n, translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcEmptyContent, NcLoadingIcon, NcNoteCard } from '@nextcloud/vue'\nimport EmailOutline from 'vue-material-design-icons/EmailOutline.vue'\nimport { interpolateUrlTokens } from '../../composables/useEndpointSource.js'\nimport innerHeading from '../../mixins/innerHeading.js'\nimport { conditionalLine } from '../../utils/conditionalLine.js'\nimport { initialsOf } from '../../utils/initials.js'\nimport {\n\tdocumentsOfParty,\n\tindicatorsOf,\n\tindicatorVerdict,\n\tkindCode,\n\trepresentedByMap,\n\troleLabel,\n\trolesInOrder,\n} from '../../utils/objectParties.js'\nimport { readPath } from '../../utils/readPath.js'\n\nlet uid = 0\n\n/**\n * The default words, keyed as `content.labels` overrides them.\n *\n * @return {object} The labels.\n */\nfunction defaultLabels() {\n\treturn {\n\t\tfailed: t('nextcloud-vue', 'The parties could not be read'),\n\t\tfailedDetail: t('nextcloud-vue', 'OpenRegister did not answer. Nothing has been removed.'),\n\t\tempty: t('nextcloud-vue', 'No parties yet'),\n\t\temptyDetail: t('nextcloud-vue', 'Add a party to record who this is for and who acts on it.'),\n\t\taccepted: t('nextcloud-vue', 'Accepted kinds'),\n\t\tprimary: t('nextcloud-vue', 'Primary party'),\n\t\tnotAccepted: t('nextcloud-vue', 'Kind not accepted here'),\n\t\trepresentedBy: t('nextcloud-vue', 'Represented by'),\n\t\tnoPrimary: t('nextcloud-vue', 'No main contact yet'),\n\t}\n}\n\n/**\n * CnObjectPartiesWidget — the `parties` widget: a record's parties as\n * OpenRegister's party model answers them, grouped by role with the primary\n * party first. Each party shows its kind, its representative and the\n * indicators on it, each with its verdict. A blocking verdict is also a note\n * above the list, so nobody publishes or sends past it.\n *\n * ```json\n * {\n * \"type\": \"parties\",\n * \"content\": {\n * \"rolesObjects\": { \"register\": \"myapp\", \"schema\": \"role\", \"field\": \"item\" },\n * \"roleLabels\": { \"applicant\": \"Applicant\" },\n * \"kindsSource\": { \"url\": \"/apps/myapp/api/items/@objectId/party-kinds\", \"enforce\": \"crm\" },\n * \"extraLines\": [{ \"endpoint\": \"/apps/myapp/api/items/@objectId/parties/{party}/language\", \"lines\": [\"Language: {language}\"] }],\n * \"correspondence\": { \"endpoint\": \"/apps/myapp/api/items/@objectId/documents\", \"path\": \"documents\" }\n * }\n * }\n * ```\n *\n * `presentation: \"primary\"` draws only the primary party, as a side card\n * does: initials, name and role label, its correspondence e-mail, and\n * `link` (`{ label, href? | tab? }`, `{total}` = the number of parties) at\n * the foot; `tab` opens that tab of the page through the route hash. It\n * reads the listing only.\n *\n * A failed read says so and is never shown as \"no parties\".\n *\n * @spec openspec/changes/dq-abstract-record-widgets/specs/record-widgets/spec.md#requirement-a-record-shows-its-parties-by-role\n */\nexport default {\n\tname: 'CnObjectPartiesWidget',\n\n\tcomponents: { EmailOutline, NcEmptyContent, NcLoadingIcon, NcNoteCard },\n\n\tmixins: [innerHeading],\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The configuration: `rolesSource` (the listing URL, default\n\t\t * OpenRegister's `/parties` of this record), `partySource` (one\n\t\t * party, `{uuid}` filled in), `rolesObjects` (`{ register, schema,\n\t\t * field }`, the role rows that say who represents whom), `roleLabels`,\n\t\t * `kindsSource` (`{ url, enforce?, sourceText? }`), `extraLines`\n\t\t * (`[{ endpoint, path?, valueLabels?, lines }]`, one request per\n\t\t * party, `{party}` filled in), `correspondence` (`{ endpoint, path?,\n\t\t * senderField?, recipientsField? }`), `labels`, `presentation`\n\t\t * (`\"primary\"`: only the primary party) and `link` (`{ label,\n\t\t * href? | tab? }`, the primary presentation's foot link).\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The record's id, bound by the detail host. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** The record's register slug. */\n\t\tregister: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** The record's schema slug. */\n\t\tschema: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\tuid += 1\n\t\treturn {\n\t\t\tidPrefix: `cn-object-parties-${uid}`,\n\t\t\tloading: true,\n\t\t\tfailed: false,\n\t\t\tlisting: null,\n\t\t\tpartyRecords: {},\n\t\t\trepresented: {},\n\t\t\tkinds: null,\n\t\t\textra: {},\n\t\t\tdocuments: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {Array<object>} The role groups, primary first. */\n\t\tgroups() {\n\t\t\treturn rolesInOrder(this.listing, this.translatedMap(this.content?.roleLabels))\n\t\t},\n\n\t\t/** @return {boolean} Whether only the primary party is drawn. */\n\t\tisPrimaryPresentation() {\n\t\t\treturn this.content?.presentation === 'primary'\n\t\t},\n\n\t\t/** @return {object|null} The primary party's listing row. */\n\t\tmainParty() {\n\t\t\tif (!this.primary) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn (this.listing?.results || []).find((row) => row && row.partyUuid === this.primary) || null\n\t\t},\n\n\t\t/** @return {string} The primary party's role, in the app's words. */\n\t\tmainRole() {\n\t\t\tconst key = this.mainParty?.role\n\t\t\tif (!key) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst own = this.translatedMap(this.content?.roleLabels)\n\t\t\tif (typeof own[key] === 'string' && own[key] !== '') {\n\t\t\t\treturn own[key]\n\t\t\t}\n\t\t\treturn this.cnTranslate(roleLabel(key, this.listing?.roles, {}))\n\t\t},\n\n\t\t/** @return {{label: string, href: string}|null} The primary presentation's foot link; none without parties. */\n\t\tfootLink() {\n\t\t\tconst link = this.content?.link\n\t\t\tconst total = Number(this.listing?.total ?? (this.listing?.results || []).length)\n\t\t\tif (!link || typeof link !== 'object' || !link.label || !(total > 0)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst href = link.tab ? `#${encodeURIComponent(link.tab)}` : (link.href || '')\n\t\t\tif (href === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn { label: this.cnTranslate(link.label).replaceAll('{total}', String(total)), href }\n\t\t},\n\n\t\t/** @return {string|null} The primary party's uuid. */\n\t\tprimary() {\n\t\t\treturn this.listing?.primary || null\n\t\t},\n\n\t\t/** @return {object} The verdict words, translated. */\n\t\tverdictLabels() {\n\t\t\tconst own = this.content?.labels || {}\n\t\t\tconst out = {}\n\t\t\tfor (const key of ['verdictPublication', 'verdictSend', 'verdictWarn']) {\n\t\t\t\tif (typeof own[key] === 'string' && own[key] !== '') {\n\t\t\t\t\tout[key] = this.cnTranslate(own[key])\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/** @return {Array<object>} The blocking verdicts, as notes above the list. */\n\t\tverdicts() {\n\t\t\treturn indicatorsOf(Object.values(this.partyRecords))\n\t\t\t\t.map((indicator) => ({\n\t\t\t\t\t...indicatorVerdict(indicator, this.verdictLabels),\n\t\t\t\t\tparty: indicator.party,\n\t\t\t\t\tkey: indicator.key,\n\t\t\t\t\tsentence: this.sentenceFor(indicator),\n\t\t\t\t}))\n\t\t\t\t.filter((verdict) => verdict.severity === 'error')\n\t\t},\n\n\t\t/** @return {string} Where the accepted kinds come from. */\n\t\tkindsSourceText() {\n\t\t\tconst texts = this.content?.kindsSource?.sourceText\n\t\t\tif (!this.kinds || !texts || typeof texts !== 'object') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst text = texts[this.kinds.source] || texts.default || ''\n\t\t\treturn text ? this.cnTranslate(text) : ''\n\t\t},\n\n\t\t/** @return {Record<string, string>} The kind labels the listing declares. */\n\t\tkindLabels() {\n\t\t\tconst labels = {}\n\t\t\tfor (const kind of this.listing?.kinds || []) {\n\t\t\t\tif (kind && kind.key) {\n\t\t\t\t\tlabels[kind.key] = kind.label || kind.key\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn labels\n\t\t},\n\n\t\t/** @return {string} A key that changes when the record does. */\n\t\trecordKey() {\n\t\t\treturn `${this.register}|${this.schema}|${this.objectId}`\n\t\t},\n\t},\n\n\twatch: {\n\t\trecordKey: {\n\t\t\timmediate: true,\n\t\t\thandler() {\n\t\t\t\tthis.load()\n\t\t\t},\n\t\t},\n\t},\n\n\tmethods: {\n\t\tinitialsOf,\n\t\tkindCode,\n\n\t\t/**\n\t\t * A label: the content's own (translated), else the default.\n\t\t *\n\t\t * @param {string} key The label key.\n\t\t * @return {string}\n\t\t */\n\t\tlabel(key) {\n\t\t\tconst own = this.content?.labels && typeof this.content.labels[key] === 'string' ? this.content.labels[key] : ''\n\t\t\treturn own !== '' ? this.cnTranslate(own) : defaultLabels()[key]\n\t\t},\n\n\t\t/**\n\t\t * A map of manifest words, translated.\n\t\t *\n\t\t * @param {object} map The map.\n\t\t * @return {Record<string, string>}\n\t\t */\n\t\ttranslatedMap(map) {\n\t\t\tconst out = {}\n\t\t\tfor (const [key, value] of Object.entries(map && typeof map === 'object' ? map : {})) {\n\t\t\t\tout[key] = typeof value === 'string' ? this.cnTranslate(value) : value\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * An app path with the record's tokens and `{party}` filled in.\n\t\t *\n\t\t * @param {string} template The path.\n\t\t * @param {string} [party] A party uuid.\n\t\t * @return {string}\n\t\t */\n\t\turlOf(template, party = '') {\n\t\t\tconst withSlugs = String(template)\n\t\t\t\t.replaceAll('@register', String(this.register || ''))\n\t\t\t\t.replaceAll('@schema', String(this.schema || ''))\n\t\t\treturn interpolateUrlTokens(withSlugs, { objectId: this.objectId }).replaceAll('{party}', encodeURIComponent(party)).replaceAll('{uuid}', encodeURIComponent(party))\n\t\t},\n\n\t\t/**\n\t\t * GET an app path; null when it fails.\n\t\t *\n\t\t * @param {string} path The app path.\n\t\t * @param {object} [params] Query parameters.\n\t\t * @return {Promise<unknown>}\n\t\t */\n\t\tasync read(path, params) {\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateUrl(path), params ? { params } : undefined)\n\t\t\t\treturn data ?? null\n\t\t\t} catch {\n\t\t\t\treturn null\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Read the listing, then each party, the representation, the kinds,\n\t\t * the extra lines and the correspondence.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync load() {\n\t\t\tif (!this.objectId) {\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.failed = false\n\t\t\tthis.partyRecords = {}\n\t\t\tthis.represented = {}\n\t\t\tthis.extra = {}\n\t\t\tthis.documents = []\n\t\t\tconst listing = await this.read(this.urlOf(this.content?.rolesSource || '/apps/openregister/api/objects/@register/@schema/@objectId/parties'))\n\t\t\tif (!listing || typeof listing !== 'object') {\n\t\t\t\tthis.failed = true\n\t\t\t\tthis.listing = null\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.listing = listing\n\t\t\tif (this.isPrimaryPresentation) {\n\t\t\t\tthis.loading = false\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst uuids = [...new Set((listing.results || []).map((row) => row && row.partyUuid).filter(Boolean))]\n\t\t\tconst partyUrl = this.content?.partySource || '/apps/openregister/api/parties/{uuid}'\n\t\t\tconst records = await Promise.all(uuids.map((uuid) => this.read(this.urlOf(partyUrl, uuid))))\n\t\t\tconst byUuid = {}\n\t\t\tuuids.forEach((uuid, index) => {\n\t\t\t\tif (records[index] && typeof records[index] === 'object') {\n\t\t\t\t\tbyUuid[uuid] = records[index]\n\t\t\t\t}\n\t\t\t})\n\t\t\tthis.partyRecords = byUuid\n\t\t\tawait Promise.all([this.loadRepresentation(), this.loadKinds(), this.loadExtraLines(uuids), this.loadCorrespondence()])\n\t\t\tthis.loading = false\n\t\t},\n\n\t\t/** @return {Promise<void>} Who represents whom, from the role rows. */\n\t\tasync loadRepresentation() {\n\t\t\tconst source = this.content?.rolesObjects\n\t\t\tif (!source || !source.register || !source.schema) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst data = await this.read(`/apps/openregister/api/objects/${encodeURIComponent(source.register)}/${encodeURIComponent(source.schema)}`, { [source.field || 'object']: String(this.objectId), _limit: 200 })\n\t\t\tconst rows = Array.isArray(data?.results) ? data.results : (Array.isArray(data) ? data : [])\n\t\t\tthis.represented = representedByMap(rows)\n\t\t},\n\n\t\t/** @return {Promise<void>} The kinds this record accepts. */\n\t\tasync loadKinds() {\n\t\t\tconst source = this.content?.kindsSource\n\t\t\tthis.kinds = null\n\t\t\tif (!source || !source.url) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst data = await this.read(this.urlOf(source.url))\n\t\t\tthis.kinds = data && Array.isArray(data.kinds) ? data : null\n\t\t},\n\n\t\t/**\n\t\t * One answer per party per extra line.\n\t\t *\n\t\t * @param {Array<string>} uuids The parties.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadExtraLines(uuids) {\n\t\t\tconst lines = Array.isArray(this.content?.extraLines) ? this.content.extraLines : []\n\t\t\tconst extra = {}\n\t\t\tawait Promise.all(lines.map(async (spec, index) => {\n\t\t\t\tif (!spec || !spec.endpoint) {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst answers = await Promise.all(uuids.map((uuid) => this.read(this.urlOf(spec.endpoint, uuid))))\n\t\t\t\tuuids.forEach((uuid, i) => {\n\t\t\t\t\tconst answer = spec.path ? readPath(answers[i], spec.path) : answers[i]\n\t\t\t\t\tif (answer && typeof answer === 'object') {\n\t\t\t\t\t\textra[`${index}|${uuid}`] = answer\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}))\n\t\t\tthis.extra = extra\n\t\t},\n\n\t\t/** @return {Promise<void>} The documents the correspondence counts read. */\n\t\tasync loadCorrespondence() {\n\t\t\tconst spec = this.content?.correspondence\n\t\t\tif (!spec || !spec.endpoint) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst data = await this.read(this.urlOf(spec.endpoint))\n\t\t\tconst list = spec.path ? readPath(data, spec.path) : data\n\t\t\tthis.documents = Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The extra lines for a party, each the first of its `lines` that applies.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {Array<string>}\n\t\t */\n\t\textraLinesOf(party) {\n\t\t\tconst specs = Array.isArray(this.content?.extraLines) ? this.content.extraLines : []\n\t\t\treturn specs.map((spec, index) => {\n\t\t\t\tconst answer = this.extra[`${index}|${party.partyUuid}`]\n\t\t\t\tif (!answer) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn conditionalLine(spec.lines || [], this.labelled(answer, spec.valueLabels), (text) => this.cnTranslate(text))\n\t\t\t}).filter((line) => line !== '')\n\t\t},\n\n\t\t/**\n\t\t * An answer with its coded values replaced by their labels\n\t\t * (`valueLabels: { language: { nl: \"Dutch\" } }`; `nl-NL` reads as `nl`).\n\t\t *\n\t\t * @param {object} answer The answer.\n\t\t * @param {object} valueLabels The labels by field and value.\n\t\t * @return {object}\n\t\t */\n\t\tlabelled(answer, valueLabels) {\n\t\t\tif (!valueLabels || typeof valueLabels !== 'object') {\n\t\t\t\treturn answer\n\t\t\t}\n\t\t\tconst out = { ...answer }\n\t\t\tfor (const [field, map] of Object.entries(valueLabels)) {\n\t\t\t\tconst raw = answer[field]\n\t\t\t\tif (typeof raw !== 'string' || !map) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst hit = map[raw] ?? map[raw.toLowerCase().split('-')[0]]\n\t\t\t\tif (typeof hit === 'string') {\n\t\t\t\t\tout[field] = this.cnTranslate(hit)\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn out\n\t\t},\n\n\t\t/**\n\t\t * Whether a party's kind is one this record does not accept. Only when\n\t\t * the kinds come from the source named by `kindsSource.enforce`.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {boolean}\n\t\t */\n\t\tnotAccepted(party) {\n\t\t\tconst enforce = this.content?.kindsSource?.enforce\n\t\t\tif (!party?.partyKind || !this.kinds || (enforce && this.kinds.source !== enforce)) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn !this.kinds.kinds.some((kind) => kindCode(kind) === party.partyKind)\n\t\t},\n\n\t\t/**\n\t\t * A party's kind: the accepted kind's label, else the listing's, else the code.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\tkindOf(party) {\n\t\t\tif (!party.partyKind) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst offered = (this.kinds?.kinds || []).find((kind) => kindCode(kind) === party.partyKind)\n\t\t\treturn offered?.label || this.kindLabels[party.partyKind] || party.partyKind\n\t\t},\n\n\t\t/**\n\t\t * Who represents this party, by name.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\trepresentedBy(party) {\n\t\t\tconst uuid = this.represented[party.partyUuid || party.contactUid || ''] || ''\n\t\t\tif (uuid === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst row = (this.listing?.results || []).find((candidate) => candidate?.partyUuid === uuid)\n\t\t\treturn row ? this.nameOf(row) : (this.partyRecords[uuid]?.name || uuid)\n\t\t},\n\n\t\t/**\n\t\t * A party's name: the listing's, else the party record's, else its id.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\tnameOf(party) {\n\t\t\treturn party.displayName || this.partyRecords[party.partyUuid]?.name || party.contactUid || party.partyUuid || ''\n\t\t},\n\n\t\t/**\n\t\t * How many documents a party sent and received.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {string}\n\t\t */\n\t\tcorrespondenceOf(party) {\n\t\t\tconst spec = this.content?.correspondence || {}\n\t\t\tconst { sent, received } = documentsOfParty(this.documents, party.partyUuid || party.contactUid || '', spec)\n\t\t\tif (sent.length === 0 && received.length === 0) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (received.length === 0) {\n\t\t\t\treturn n('nextcloud-vue', '%n document sent', '%n documents sent', sent.length)\n\t\t\t}\n\t\t\tif (sent.length === 0) {\n\t\t\t\treturn n('nextcloud-vue', '%n document received', '%n documents received', received.length)\n\t\t\t}\n\t\t\treturn t('nextcloud-vue', '{sent} sent, {received} received', { sent: sent.length, received: received.length })\n\t\t},\n\n\t\t/**\n\t\t * The indicators on a party, each with its verdict.\n\t\t *\n\t\t * @param {object} party The listing row.\n\t\t * @return {Array<object>}\n\t\t */\n\t\tindicatorsFor(party) {\n\t\t\tconst record = this.partyRecords[party.partyUuid]\n\t\t\tif (!record) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn (record.indicators || []).filter(Boolean).map((indicator) => ({ ...indicatorVerdict(indicator, this.verdictLabels), key: indicator.key }))\n\t\t},\n\n\t\t/**\n\t\t * The sentence of a blocking verdict, naming the party.\n\t\t *\n\t\t * @param {object} indicator The indicator with `partyName`.\n\t\t * @return {string}\n\t\t */\n\t\tsentenceFor(indicator) {\n\t\t\tconst name = indicator.partyName || indicator.party\n\t\t\tconst own = this.content?.labels || {}\n\t\t\tif (indicatorVerdict(indicator).effect === 'refuse-publication') {\n\t\t\t\treturn own.sentencePublication\n\t\t\t\t\t? this.cnTranslate(own.sentencePublication).replaceAll('{party}', name)\n\t\t\t\t\t: t('nextcloud-vue', 'Publishing a file on this record is refused, because of {party}.', { party: name }, undefined, { escape: false })\n\t\t\t}\n\t\t\treturn own.sentenceSend\n\t\t\t\t? this.cnTranslate(own.sentenceSend).replaceAll('{party}', name)\n\t\t\t\t: t('nextcloud-vue', 'A message to {party} is refused.', { party: name }, undefined, { escape: false })\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-object-parties {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.cn-object-parties__verdicts {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline, 4px);\n}\n\n.cn-object-parties__role-label {\n\tmargin: 0 0 var(--default-grid-baseline, 4px) 0;\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 0.9em;\n}\n\n.cn-object-parties__list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--default-grid-baseline, 4px);\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.cn-object-parties__party {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline, 4px) * 2);\n\tpadding: var(--default-grid-baseline, 4px);\n\tborder-radius: var(--border-radius, 4px);\n}\n\n.cn-object-parties__party:hover {\n\tbackground-color: var(--color-background-hover);\n}\n\n.cn-object-parties__name {\n\tfont-weight: bold;\n}\n\n.cn-object-parties__muted {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-object-parties__main-card {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.cn-object-parties__main {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.cn-object-parties__main-initials {\n\tdisplay: flex;\n\tflex: none;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 40px;\n\theight: 40px;\n\tborder-radius: 50%;\n\tbackground-color: var(--color-background-dark);\n\tcolor: var(--color-main-text);\n\tfont-weight: 700;\n}\n\n.cn-object-parties__main-text {\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.cn-object-parties__main-name {\n\tfont-size: 15px;\n}\n\n.cn-object-parties__main-role {\n\tfont-size: 13px;\n}\n\n.cn-object-parties__main-email {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline, 4px) * 2.5);\n\tcolor: var(--color-main-text);\n\toverflow-wrap: anywhere;\n}\n\n.cn-object-parties__main-link {\n\tcolor: var(--color-primary-element);\n\tfont-weight: 600;\n}\n\n.cn-object-parties__accepted {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: calc(var(--default-grid-baseline, 4px) * 2);\n\tpadding: calc(var(--default-grid-baseline, 4px) * 2) calc(var(--default-grid-baseline, 4px) * 3);\n\tborder-radius: var(--border-radius-large, 10px);\n\tbackground-color: var(--color-background-hover);\n}\n\n.cn-object-parties__accepted-label {\n\tfont-weight: 600;\n}\n\n.cn-object-parties__accepted-kind {\n\tborder: 1px solid var(--color-border-dark);\n}\n</style>\n"],"names":["t","axios","n"],"mappings":"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"}
@@ -1,53 +1,82 @@
1
- import { resolveComponent, openBlock, createElementBlock, createBlock, Fragment, createElementVNode, toDisplayString, renderList, createCommentVNode, withCtx, resolveDynamicComponent, createTextVNode, normalizeClass } from 'vue';
1
+ import { resolveComponent, openBlock, createElementBlock, createBlock, createElementVNode, toDisplayString, createCommentVNode, createVNode, createTextVNode, Fragment, renderList, withCtx, resolveDynamicComponent, normalizeClass } from 'vue';
2
2
 
3
3
  const _hoisted_1 = {
4
4
  class: "cn-object-parties",
5
5
  "data-testid": "cn-object-parties"
6
6
  };
7
- const _hoisted_2 = ["data-source"];
8
- const _hoisted_3 = { class: "cn-object-parties__accepted-label" };
7
+ const _hoisted_2 = {
8
+ key: 2,
9
+ class: "cn-object-parties__main-card",
10
+ "data-testid": "cn-object-parties-main-card"
11
+ };
12
+ const _hoisted_3 = ["data-party"];
9
13
  const _hoisted_4 = {
14
+ class: "cn-object-parties__main-initials",
15
+ "aria-hidden": "true",
16
+ "data-testid": "cn-object-parties-main-initials"
17
+ };
18
+ const _hoisted_5 = { class: "cn-object-parties__main-text" };
19
+ const _hoisted_6 = {
20
+ class: "cn-object-parties__main-name",
21
+ "data-testid": "cn-object-parties-main-name"
22
+ };
23
+ const _hoisted_7 = {
24
+ key: 0,
25
+ class: "cn-object-parties__muted cn-object-parties__main-role",
26
+ "data-testid": "cn-object-parties-main-role"
27
+ };
28
+ const _hoisted_8 = {
29
+ key: 1,
30
+ class: "cn-object-parties__muted",
31
+ "data-testid": "cn-object-parties-main-none"
32
+ };
33
+ const _hoisted_9 = ["href"];
34
+ const _hoisted_10 = ["href"];
35
+ const _hoisted_11 = ["data-source"];
36
+ const _hoisted_12 = { class: "cn-object-parties__accepted-label" };
37
+ const _hoisted_13 = {
10
38
  key: 0,
11
39
  class: "cn-object-parties__muted"
12
40
  };
13
- const _hoisted_5 = {
41
+ const _hoisted_14 = {
14
42
  key: 1,
15
43
  class: "cn-object-parties__verdicts",
16
44
  "data-testid": "cn-object-parties-verdicts"
17
45
  };
18
- const _hoisted_6 = ["data-role", "aria-labelledby"];
19
- const _hoisted_7 = { class: "cn-object-parties__list" };
20
- const _hoisted_8 = ["data-party"];
21
- const _hoisted_9 = { class: "cn-object-parties__name" };
22
- const _hoisted_10 = {
46
+ const _hoisted_15 = ["data-role", "aria-labelledby"];
47
+ const _hoisted_16 = { class: "cn-object-parties__list" };
48
+ const _hoisted_17 = ["data-party"];
49
+ const _hoisted_18 = { class: "cn-object-parties__name" };
50
+ const _hoisted_19 = {
23
51
  key: 0,
24
52
  class: "cn-status-badge cn-status-badge--primary",
25
53
  "data-testid": "cn-object-parties-primary"
26
54
  };
27
- const _hoisted_11 = {
55
+ const _hoisted_20 = {
28
56
  key: 1,
29
57
  class: "cn-object-parties__muted"
30
58
  };
31
- const _hoisted_12 = {
59
+ const _hoisted_21 = {
32
60
  key: 2,
33
61
  class: "cn-status-badge cn-status-badge--warning",
34
62
  "data-testid": "cn-object-parties-not-accepted"
35
63
  };
36
- const _hoisted_13 = {
64
+ const _hoisted_22 = {
37
65
  key: 3,
38
66
  class: "cn-object-parties__muted"
39
67
  };
40
- const _hoisted_14 = {
68
+ const _hoisted_23 = {
41
69
  key: 4,
42
70
  class: "cn-object-parties__muted",
43
71
  "data-testid": "cn-object-parties-represented"
44
72
  };
45
- const _hoisted_15 = ["data-party-documents"];
46
- const _hoisted_16 = ["data-effect", "title"];
73
+ const _hoisted_24 = ["data-party-documents"];
74
+ const _hoisted_25 = ["data-effect", "title"];
47
75
 
48
76
  function render(_ctx, _cache, $props, $setup, $data, $options) {
49
77
  const _component_NcLoadingIcon = resolveComponent("NcLoadingIcon");
50
78
  const _component_NcEmptyContent = resolveComponent("NcEmptyContent");
79
+ const _component_EmailOutline = resolveComponent("EmailOutline");
51
80
  const _component_NcNoteCard = resolveComponent("NcNoteCard");
52
81
 
53
82
  return (openBlock(), createElementBlock("div", _hoisted_1, [
@@ -63,123 +92,164 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
63
92
  description: $options.label('failedDetail'),
64
93
  "data-testid": "cn-object-parties-failed"
65
94
  }, null, 8 /* PROPS */, ["name", "description"]))
66
- : ($options.groups.length === 0)
67
- ? (openBlock(), createBlock(_component_NcEmptyContent, {
68
- key: 2,
69
- name: $options.label('empty'),
70
- description: $options.label('emptyDetail'),
71
- "data-testid": "cn-object-parties-empty"
72
- }, null, 8 /* PROPS */, ["name", "description"]))
73
- : (openBlock(), createElementBlock(Fragment, { key: 3 }, [
74
- ($data.kinds)
95
+ : ($options.isPrimaryPresentation)
96
+ ? (openBlock(), createElementBlock("div", _hoisted_2, [
97
+ ($options.mainParty)
75
98
  ? (openBlock(), createElementBlock("div", {
76
99
  key: 0,
77
- class: "cn-object-parties__accepted",
78
- "data-source": $data.kinds.source,
79
- "data-testid": "cn-object-parties-accepted"
100
+ class: "cn-object-parties__main",
101
+ "data-party": $options.mainParty.partyUuid,
102
+ "data-testid": "cn-object-parties-main"
80
103
  }, [
81
- createElementVNode("span", _hoisted_3, toDisplayString($options.label('accepted')), 1 /* TEXT */),
82
- (openBlock(true), createElementBlock(Fragment, null, renderList($data.kinds.kinds, (kind, index) => {
83
- return (openBlock(), createElementBlock("span", {
84
- key: $options.kindCode(kind),
85
- class: "cn-status-badge cn-status-badge--default cn-object-parties__accepted-kind",
86
- "data-testid": "cn-object-parties-accepted-kind"
87
- }, toDisplayString(index + 1) + ". " + toDisplayString(kind.label || $options.kindCode(kind)), 1 /* TEXT */))
88
- }), 128 /* KEYED_FRAGMENT */)),
89
- ($options.kindsSourceText)
90
- ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString($options.kindsSourceText), 1 /* TEXT */))
91
- : createCommentVNode("v-if", true)
92
- ], 8 /* PROPS */, _hoisted_2))
93
- : createCommentVNode("v-if", true),
94
- ($options.verdicts.length > 0)
95
- ? (openBlock(), createElementBlock("div", _hoisted_5, [
96
- (openBlock(true), createElementBlock(Fragment, null, renderList($options.verdicts, (verdict) => {
97
- return (openBlock(), createBlock(_component_NcNoteCard, {
98
- key: `${verdict.party}-${verdict.key}`,
99
- type: verdict.severity,
100
- "data-effect": verdict.effect,
101
- "data-testid": "cn-object-parties-verdict"
102
- }, {
103
- default: withCtx(() => [
104
- createElementVNode("strong", null, toDisplayString(verdict.label), 1 /* TEXT */),
105
- createElementVNode("span", null, toDisplayString(verdict.sentence), 1 /* TEXT */)
106
- ]),
107
- _: 2 /* DYNAMIC */
108
- }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["type", "data-effect"]))
109
- }), 128 /* KEYED_FRAGMENT */))
110
- ]))
104
+ createElementVNode("span", _hoisted_4, toDisplayString($options.initialsOf($options.nameOf($options.mainParty))), 1 /* TEXT */),
105
+ createElementVNode("span", _hoisted_5, [
106
+ createElementVNode("strong", _hoisted_6, toDisplayString($options.nameOf($options.mainParty)), 1 /* TEXT */),
107
+ ($options.mainRole)
108
+ ? (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString($options.mainRole), 1 /* TEXT */))
109
+ : createCommentVNode("v-if", true)
110
+ ])
111
+ ], 8 /* PROPS */, _hoisted_3))
112
+ : (openBlock(), createElementBlock("span", _hoisted_8, toDisplayString($options.label('noPrimary')), 1 /* TEXT */)),
113
+ ($options.mainParty && $options.mainParty.email)
114
+ ? (openBlock(), createElementBlock("a", {
115
+ key: 2,
116
+ class: "cn-object-parties__main-email",
117
+ href: `mailto:${$options.mainParty.email}`,
118
+ "data-testid": "cn-object-parties-main-email"
119
+ }, [
120
+ createVNode(_component_EmailOutline, {
121
+ size: 16,
122
+ "aria-hidden": "true"
123
+ }),
124
+ createTextVNode(toDisplayString($options.mainParty.email), 1 /* TEXT */)
125
+ ], 8 /* PROPS */, _hoisted_9))
111
126
  : createCommentVNode("v-if", true),
112
- (openBlock(true), createElementBlock(Fragment, null, renderList($options.groups, (group) => {
113
- return (openBlock(), createElementBlock("section", {
114
- key: group.key,
115
- class: "cn-object-parties__role",
116
- "data-role": group.key,
117
- "aria-labelledby": `${$data.idPrefix}-${group.key}`,
118
- "data-testid": "cn-object-parties-role"
119
- }, [
120
- (openBlock(), createBlock(resolveDynamicComponent(_ctx.innerHeadingTag), {
121
- id: `${$data.idPrefix}-${group.key}`,
122
- class: "cn-object-parties__role-label cn-inner-heading"
123
- }, {
124
- default: withCtx(() => [
125
- createTextVNode(toDisplayString(group.label), 1 /* TEXT */)
126
- ]),
127
- _: 2 /* DYNAMIC */
128
- }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["id"])),
129
- createElementVNode("ul", _hoisted_7, [
130
- (openBlock(true), createElementBlock(Fragment, null, renderList(group.parties, (party) => {
131
- return (openBlock(), createElementBlock("li", {
132
- key: `${group.key}-${party.partyUuid || party.contactUid}`,
133
- class: "cn-object-parties__party",
134
- "data-party": party.partyUuid || party.contactUid,
135
- "data-testid": "cn-object-parties-party"
136
- }, [
137
- createElementVNode("span", _hoisted_9, toDisplayString($options.nameOf(party)), 1 /* TEXT */),
138
- ($options.primary && party.partyUuid === $options.primary)
139
- ? (openBlock(), createElementBlock("span", _hoisted_10, toDisplayString($options.label('primary')), 1 /* TEXT */))
140
- : createCommentVNode("v-if", true),
141
- ($options.kindOf(party))
142
- ? (openBlock(), createElementBlock("span", _hoisted_11, toDisplayString($options.kindOf(party)), 1 /* TEXT */))
143
- : createCommentVNode("v-if", true),
144
- ($options.notAccepted(party))
145
- ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString($options.label('notAccepted')), 1 /* TEXT */))
146
- : createCommentVNode("v-if", true),
147
- (openBlock(true), createElementBlock(Fragment, null, renderList($options.extraLinesOf(party), (line, index) => {
148
- return (openBlock(), createElementBlock("span", {
149
- key: `line-${index}`,
150
- class: "cn-object-parties__muted",
151
- "data-testid": "cn-object-parties-extra-line"
152
- }, toDisplayString(line), 1 /* TEXT */))
153
- }), 128 /* KEYED_FRAGMENT */)),
154
- (party.email)
155
- ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString(party.email), 1 /* TEXT */))
156
- : createCommentVNode("v-if", true),
157
- ($options.representedBy(party))
158
- ? (openBlock(), createElementBlock("span", _hoisted_14, toDisplayString($options.label('representedBy')) + ": " + toDisplayString($options.representedBy(party)), 1 /* TEXT */))
159
- : createCommentVNode("v-if", true),
160
- ($options.correspondenceOf(party))
161
- ? (openBlock(), createElementBlock("span", {
162
- key: 5,
127
+ ($options.footLink)
128
+ ? (openBlock(), createElementBlock("a", {
129
+ key: 3,
130
+ class: "cn-object-parties__main-link",
131
+ href: $options.footLink.href,
132
+ "data-testid": "cn-object-parties-main-link"
133
+ }, toDisplayString($options.footLink.label), 9 /* TEXT, PROPS */, _hoisted_10))
134
+ : createCommentVNode("v-if", true)
135
+ ]))
136
+ : ($options.groups.length === 0)
137
+ ? (openBlock(), createBlock(_component_NcEmptyContent, {
138
+ key: 3,
139
+ name: $options.label('empty'),
140
+ description: $options.label('emptyDetail'),
141
+ "data-testid": "cn-object-parties-empty"
142
+ }, null, 8 /* PROPS */, ["name", "description"]))
143
+ : (openBlock(), createElementBlock(Fragment, { key: 4 }, [
144
+ ($data.kinds)
145
+ ? (openBlock(), createElementBlock("div", {
146
+ key: 0,
147
+ class: "cn-object-parties__accepted",
148
+ "data-source": $data.kinds.source,
149
+ "data-testid": "cn-object-parties-accepted"
150
+ }, [
151
+ createElementVNode("span", _hoisted_12, toDisplayString($options.label('accepted')), 1 /* TEXT */),
152
+ (openBlock(true), createElementBlock(Fragment, null, renderList($data.kinds.kinds, (kind, index) => {
153
+ return (openBlock(), createElementBlock("span", {
154
+ key: $options.kindCode(kind),
155
+ class: "cn-status-badge cn-status-badge--default cn-object-parties__accepted-kind",
156
+ "data-testid": "cn-object-parties-accepted-kind"
157
+ }, toDisplayString(index + 1) + ". " + toDisplayString(kind.label || $options.kindCode(kind)), 1 /* TEXT */))
158
+ }), 128 /* KEYED_FRAGMENT */)),
159
+ ($options.kindsSourceText)
160
+ ? (openBlock(), createElementBlock("span", _hoisted_13, toDisplayString($options.kindsSourceText), 1 /* TEXT */))
161
+ : createCommentVNode("v-if", true)
162
+ ], 8 /* PROPS */, _hoisted_11))
163
+ : createCommentVNode("v-if", true),
164
+ ($options.verdicts.length > 0)
165
+ ? (openBlock(), createElementBlock("div", _hoisted_14, [
166
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.verdicts, (verdict) => {
167
+ return (openBlock(), createBlock(_component_NcNoteCard, {
168
+ key: `${verdict.party}-${verdict.key}`,
169
+ type: verdict.severity,
170
+ "data-effect": verdict.effect,
171
+ "data-testid": "cn-object-parties-verdict"
172
+ }, {
173
+ default: withCtx(() => [
174
+ createElementVNode("strong", null, toDisplayString(verdict.label), 1 /* TEXT */),
175
+ createElementVNode("span", null, toDisplayString(verdict.sentence), 1 /* TEXT */)
176
+ ]),
177
+ _: 2 /* DYNAMIC */
178
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["type", "data-effect"]))
179
+ }), 128 /* KEYED_FRAGMENT */))
180
+ ]))
181
+ : createCommentVNode("v-if", true),
182
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.groups, (group) => {
183
+ return (openBlock(), createElementBlock("section", {
184
+ key: group.key,
185
+ class: "cn-object-parties__role",
186
+ "data-role": group.key,
187
+ "aria-labelledby": `${$data.idPrefix}-${group.key}`,
188
+ "data-testid": "cn-object-parties-role"
189
+ }, [
190
+ (openBlock(), createBlock(resolveDynamicComponent(_ctx.innerHeadingTag), {
191
+ id: `${$data.idPrefix}-${group.key}`,
192
+ class: "cn-object-parties__role-label cn-inner-heading"
193
+ }, {
194
+ default: withCtx(() => [
195
+ createTextVNode(toDisplayString(group.label), 1 /* TEXT */)
196
+ ]),
197
+ _: 2 /* DYNAMIC */
198
+ }, 1032 /* PROPS, DYNAMIC_SLOTS */, ["id"])),
199
+ createElementVNode("ul", _hoisted_16, [
200
+ (openBlock(true), createElementBlock(Fragment, null, renderList(group.parties, (party) => {
201
+ return (openBlock(), createElementBlock("li", {
202
+ key: `${group.key}-${party.partyUuid || party.contactUid}`,
203
+ class: "cn-object-parties__party",
204
+ "data-party": party.partyUuid || party.contactUid,
205
+ "data-testid": "cn-object-parties-party"
206
+ }, [
207
+ createElementVNode("span", _hoisted_18, toDisplayString($options.nameOf(party)), 1 /* TEXT */),
208
+ ($options.primary && party.partyUuid === $options.primary)
209
+ ? (openBlock(), createElementBlock("span", _hoisted_19, toDisplayString($options.label('primary')), 1 /* TEXT */))
210
+ : createCommentVNode("v-if", true),
211
+ ($options.kindOf(party))
212
+ ? (openBlock(), createElementBlock("span", _hoisted_20, toDisplayString($options.kindOf(party)), 1 /* TEXT */))
213
+ : createCommentVNode("v-if", true),
214
+ ($options.notAccepted(party))
215
+ ? (openBlock(), createElementBlock("span", _hoisted_21, toDisplayString($options.label('notAccepted')), 1 /* TEXT */))
216
+ : createCommentVNode("v-if", true),
217
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.extraLinesOf(party), (line, index) => {
218
+ return (openBlock(), createElementBlock("span", {
219
+ key: `line-${index}`,
163
220
  class: "cn-object-parties__muted",
164
- "data-party-documents": party.partyUuid || party.contactUid,
165
- "data-testid": "cn-object-parties-documents"
166
- }, toDisplayString($options.correspondenceOf(party)), 9 /* TEXT, PROPS */, _hoisted_15))
167
- : createCommentVNode("v-if", true),
168
- (openBlock(true), createElementBlock(Fragment, null, renderList($options.indicatorsFor(party), (indicator) => {
169
- return (openBlock(), createElementBlock("span", {
170
- key: `${party.partyUuid}-${indicator.key}`,
171
- class: normalizeClass(["cn-status-badge cn-status-badge--default", `cn-object-parties__indicator--${indicator.severity}`]),
172
- "data-effect": indicator.effect,
173
- title: indicator.verdict,
174
- "data-testid": "cn-object-parties-indicator"
175
- }, toDisplayString(indicator.label) + " · " + toDisplayString(indicator.verdict), 11 /* TEXT, CLASS, PROPS */, _hoisted_16))
176
- }), 128 /* KEYED_FRAGMENT */))
177
- ], 8 /* PROPS */, _hoisted_8))
178
- }), 128 /* KEYED_FRAGMENT */))
179
- ])
180
- ], 8 /* PROPS */, _hoisted_6))
181
- }), 128 /* KEYED_FRAGMENT */))
182
- ], 64 /* STABLE_FRAGMENT */))
221
+ "data-testid": "cn-object-parties-extra-line"
222
+ }, toDisplayString(line), 1 /* TEXT */))
223
+ }), 128 /* KEYED_FRAGMENT */)),
224
+ (party.email)
225
+ ? (openBlock(), createElementBlock("span", _hoisted_22, toDisplayString(party.email), 1 /* TEXT */))
226
+ : createCommentVNode("v-if", true),
227
+ ($options.representedBy(party))
228
+ ? (openBlock(), createElementBlock("span", _hoisted_23, toDisplayString($options.label('representedBy')) + ": " + toDisplayString($options.representedBy(party)), 1 /* TEXT */))
229
+ : createCommentVNode("v-if", true),
230
+ ($options.correspondenceOf(party))
231
+ ? (openBlock(), createElementBlock("span", {
232
+ key: 5,
233
+ class: "cn-object-parties__muted",
234
+ "data-party-documents": party.partyUuid || party.contactUid,
235
+ "data-testid": "cn-object-parties-documents"
236
+ }, toDisplayString($options.correspondenceOf(party)), 9 /* TEXT, PROPS */, _hoisted_24))
237
+ : createCommentVNode("v-if", true),
238
+ (openBlock(true), createElementBlock(Fragment, null, renderList($options.indicatorsFor(party), (indicator) => {
239
+ return (openBlock(), createElementBlock("span", {
240
+ key: `${party.partyUuid}-${indicator.key}`,
241
+ class: normalizeClass(["cn-status-badge cn-status-badge--default", `cn-object-parties__indicator--${indicator.severity}`]),
242
+ "data-effect": indicator.effect,
243
+ title: indicator.verdict,
244
+ "data-testid": "cn-object-parties-indicator"
245
+ }, toDisplayString(indicator.label) + " · " + toDisplayString(indicator.verdict), 11 /* TEXT, CLASS, PROPS */, _hoisted_25))
246
+ }), 128 /* KEYED_FRAGMENT */))
247
+ ], 8 /* PROPS */, _hoisted_17))
248
+ }), 128 /* KEYED_FRAGMENT */))
249
+ ])
250
+ ], 8 /* PROPS */, _hoisted_15))
251
+ }), 128 /* KEYED_FRAGMENT */))
252
+ ], 64 /* STABLE_FRAGMENT */))
183
253
  ]))
184
254
  }
185
255