@conduction/nextcloud-vue 2.132.0 → 2.134.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 (107) 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/CnFieldListWidget/CnFieldListWidget.vue.js +1 -1
  19. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +85 -10
  20. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -1
  21. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +60 -36
  22. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -1
  23. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +8 -1
  24. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  25. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  26. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue.js +1 -1
  27. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue2.js +10 -0
  28. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue2.js.map +1 -1
  29. package/dist/esm/components/CnIntegrationWidget/CnIntegrationWidget.vue3.js.map +1 -1
  30. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue.js +1 -1
  31. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js +46 -7
  32. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue2.js.map +1 -1
  33. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js +1 -1
  34. package/dist/esm/components/CnNcWidgetWidget/CnNcWidgetWidget.vue3.js.map +1 -1
  35. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue.js +1 -1
  36. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js +258 -6
  37. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue2.js.map +1 -1
  38. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js +283 -131
  39. package/dist/esm/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue3.js.map +1 -1
  40. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +1 -1
  41. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +42 -2
  42. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -1
  43. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -1
  44. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue.js +1 -1
  45. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +1 -1
  46. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  47. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  48. package/dist/esm/dialogs/CnPartyAddDialog.vue.js +9 -0
  49. package/dist/esm/dialogs/CnPartyAddDialog.vue.js.map +1 -0
  50. package/dist/esm/dialogs/CnPartyAddDialog.vue2.js +184 -0
  51. package/dist/esm/dialogs/CnPartyAddDialog.vue2.js.map +1 -0
  52. package/dist/esm/dialogs/CnPartyAddDialog.vue3.js +168 -0
  53. package/dist/esm/dialogs/CnPartyAddDialog.vue3.js.map +1 -0
  54. package/dist/esm/index.js +2 -0
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/l10n/en.json.js +27 -1
  57. package/dist/esm/l10n/en.json.js.map +1 -1
  58. package/dist/esm/l10n/nl.json.js +27 -1
  59. package/dist/esm/l10n/nl.json.js.map +1 -1
  60. package/dist/esm/library-style.js +1 -1
  61. package/dist/esm/nextcloud-vue.css +353 -217
  62. package/dist/esm/store/plugins/liveUpdates.js +13 -4
  63. package/dist/esm/store/plugins/liveUpdates.js.map +1 -1
  64. package/dist/esm/store/useObjectStore.js +28 -5
  65. package/dist/esm/store/useObjectStore.js.map +1 -1
  66. package/dist/esm/utils/detailActionModel.js +6 -0
  67. package/dist/esm/utils/detailActionModel.js.map +1 -1
  68. package/dist/esm/utils/listLenses.js +20 -1
  69. package/dist/esm/utils/listLenses.js.map +1 -1
  70. package/dist/esm/utils/objectParties.js +79 -1
  71. package/dist/esm/utils/objectParties.js.map +1 -1
  72. package/dist/esm/utils/objectRows.js +59 -0
  73. package/dist/esm/utils/objectRows.js.map +1 -0
  74. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  75. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  76. package/dist/nextcloud-vue.cjs.js +7460 -5803
  77. package/dist/nextcloud-vue.cjs.js.map +2 -2
  78. package/dist/nextcloud-vue.css +353 -217
  79. package/l10n/en.json +27 -1
  80. package/l10n/nl.json +27 -1
  81. package/package.json +1 -1
  82. package/src/components/CnActionButtons/CnActionButtons.vue +15 -0
  83. package/src/components/CnConditionListEditor/CnConditionListEditor.vue +346 -0
  84. package/src/components/CnConditionListEditor/conditionOperators.js +126 -0
  85. package/src/components/CnConditionListEditor/index.js +17 -0
  86. package/src/components/CnDetailPage/CnDetailPage.md +1 -0
  87. package/src/components/CnDetailPage/CnDetailPage.vue +13 -1
  88. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +105 -12
  89. package/src/components/CnIndexPage/CnIndexPage.vue +8 -1
  90. package/src/components/CnIntegrationWidget/CnIntegrationWidget.vue +10 -0
  91. package/src/components/CnNcWidgetWidget/CnNcWidgetWidget.vue +47 -8
  92. package/src/components/CnObjectPartiesWidget/CnObjectPartiesWidget.vue +401 -3
  93. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +42 -2
  94. package/src/components/CnTabsWidget/CnTabsWidget.vue +1 -1
  95. package/src/components/index.js +1 -0
  96. package/src/css/look-board-index.css +6 -0
  97. package/src/css/look-board.css +35 -7
  98. package/src/dialogs/CnPartyAddDialog.vue +309 -0
  99. package/src/index.js +2 -0
  100. package/src/schemas/app-manifest-v2.schema.json +17 -1
  101. package/src/store/plugins/liveUpdates.js +13 -4
  102. package/src/store/useObjectStore.js +28 -5
  103. package/src/utils/detailActionModel.js +6 -0
  104. package/src/utils/listLenses.js +20 -1
  105. package/src/utils/objectParties.js +78 -0
  106. package/src/utils/objectRows.js +55 -0
  107. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CnPartyAddDialog.vue2.js","sources":["../../../src/dialogs/CnPartyAddDialog.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<CnDialog\n\t\t:look=\"look\"\n\t\t:width=\"width\"\n\t\tdefaultWidth=\"form\"\n\t\t:eyebrow=\"eyebrow\"\n\t\t:subtitle=\"subtitle\"\n\t\t:name=\"dialogTitle\"\n\t\tsize=\"normal\"\n\t\t:noClose=\"loading\"\n\t\t@closing=\"$emit('close')\">\n\t\t<div class=\"cn-party-add\" data-testid=\"cn-party-add-dialog\">\n\t\t\t<fieldset v-if=\"canCreate\" class=\"cn-party-add__mode\">\n\t\t\t\t<legend class=\"cn-party-add__legend\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Who') }}\n\t\t\t\t</legend>\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-model=\"mode\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t:name=\"`${idPrefix}-mode`\"\n\t\t\t\t\tvalue=\"existing\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\tdata-testid=\"cn-party-add-mode-existing\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Someone already known') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-model=\"mode\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t:name=\"`${idPrefix}-mode`\"\n\t\t\t\t\tvalue=\"new\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\tdata-testid=\"cn-party-add-mode-new\">\n\t\t\t\t\t{{ createLabel }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t</fieldset>\n\n\t\t\t<CnPartyPicker\n\t\t\t\tv-if=\"mode === 'existing'\"\n\t\t\t\tv-model=\"partyUuid\"\n\t\t\t\t:sources=\"sources\"\n\t\t\t\t:inputLabel=\"t('nextcloud-vue', 'Person')\"\n\t\t\t\tlabelOutside\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tdata-testid=\"cn-party-add-picker\" />\n\n\t\t\t<template v-else>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-for=\"field in createFields\"\n\t\t\t\t\t:key=\"field.key\"\n\t\t\t\t\t:modelValue=\"values[field.key] || ''\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:type=\"inputType(field)\"\n\t\t\t\t\t:required=\"field.required === true\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t:data-testid=\"`cn-party-add-field-${field.key}`\"\n\t\t\t\t\t@update:modelValue=\"setValue(field.key, $event)\" />\n\t\t\t</template>\n\n\t\t\t<NcSelect\n\t\t\t\t:modelValue=\"roleOption\"\n\t\t\t\t:options=\"roleOptions\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t:inputLabel=\"t('nextcloud-vue', 'Role')\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tdata-testid=\"cn-party-add-role\"\n\t\t\t\t@update:modelValue=\"role = $event ? $event.key : ''\" />\n\n\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\tv-if=\"allowPrimary\"\n\t\t\t\tv-model=\"primary\"\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tdata-testid=\"cn-party-add-primary\">\n\t\t\t\t{{ primaryLabel }}\n\t\t\t</NcCheckboxRadioSwitch>\n\n\t\t\t<NcNoteCard v-if=\"error\" type=\"error\" data-testid=\"cn-party-add-error\">\n\t\t\t\t{{ error }}\n\t\t\t</NcNoteCard>\n\t\t</div>\n\n\t\t<template #actions>\n\t\t\t<NcButton :disabled=\"loading\" data-testid=\"cn-party-add-cancel\" @click=\"$emit('close')\">\n\t\t\t\t{{ t('nextcloud-vue', 'Cancel') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"loading || !complete\"\n\t\t\t\tdata-testid=\"cn-party-add-confirm\"\n\t\t\t\t@click=\"confirm\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" :size=\"20\" :name=\"t('nextcloud-vue', 'Loading …')\" />\n\t\t\t\t</template>\n\t\t\t\t{{ confirmLabel }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</CnDialog>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard, NcSelect, NcTextField } from '@nextcloud/vue'\nimport CnDialog from '../components/CnDialog/CnDialog.vue'\nimport CnPartyPicker from '../components/CnPartyPicker/CnPartyPicker.vue'\nimport { dialogBoardMixin } from '../mixins/dialogBoard.js'\n\nlet uid = 0\n\n/**\n * CnPartyAddDialog — give a party a role on a record: pick somebody already\n * known (CnPartyPicker over `sources`), or describe a new person with the\n * `create.fields` the host declares (no identifier needed: a name and an\n * address are enough). Then a role from `roles`, and optionally \"make this the\n * primary party\".\n *\n * The dialog writes nothing. `confirm` emits `{ mode, partyUuid, values, role,\n * primary }`; the host creates the person when `mode` is `new`, links the\n * party, then closes the dialog or calls `fail(message)` to show the refusal\n * (a 403 when the reader may not update the record) and let them try again.\n *\n * @spec openspec/changes/object-parties-manage/specs/record-widgets/spec.md#requirement-the-parties-widget-can-add-and-remove-parties\n */\nexport default {\n\tname: 'CnPartyAddDialog',\n\n\tcomponents: { CnDialog, CnPartyPicker, NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard, NcSelect, NcTextField },\n\n\tmixins: [dialogBoardMixin],\n\n\tprops: {\n\t\t/** The dialog's title (\"Add contact person\"). */\n\t\tdialogTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Add a party'),\n\t\t},\n\n\t\t/** The roles to choose from, `[{ key, label }]`, already in the reader's words. */\n\t\troles: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** CnPartyPicker sources for somebody already known. */\n\t\tsources: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The fields of a new person, `[{ key, label, type? (text, email, integer), required? }]`,\n\t\t * labels already translated. None: only existing parties can be picked.\n\t\t */\n\t\tcreateFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** The choice that opens the new-person fields. */\n\t\tcreateLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Someone new'),\n\t\t},\n\n\t\t/** Offer \"make this the primary party\". */\n\t\tallowPrimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** The primary choice's words (\"Main contact\"). */\n\t\tprimaryLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Primary party'),\n\t\t},\n\n\t\t/** The confirm button's words. */\n\t\tconfirmLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Add'),\n\t\t},\n\t},\n\n\temits: ['close', 'confirm'],\n\n\tdata() {\n\t\tuid += 1\n\t\treturn {\n\t\t\tidPrefix: `cn-party-add-${uid}`,\n\t\t\tmode: 'existing',\n\t\t\tpartyUuid: null,\n\t\t\tvalues: {},\n\t\t\trole: this.roles.length === 1 ? this.roles[0].key : '',\n\t\t\tprimary: false,\n\t\t\tloading: false,\n\t\t\terror: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {boolean} Whether a new person can be described here. */\n\t\tcanCreate() {\n\t\t\treturn this.createFields.length > 0\n\t\t},\n\n\t\t/** @return {Array<{key: string, label: string}>} The role choices. */\n\t\troleOptions() {\n\t\t\treturn this.roles.filter((role) => role && role.key).map((role) => ({ key: role.key, label: role.label || role.key }))\n\t\t},\n\n\t\t/** @return {object|null} The chosen role's option. */\n\t\troleOption() {\n\t\t\treturn this.roleOptions.find((option) => option.key === this.role) || null\n\t\t},\n\n\t\t/** @return {boolean} Whether the choice is complete enough to send. */\n\t\tcomplete() {\n\t\t\tif (this.role === '') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.mode === 'existing') {\n\t\t\t\treturn Boolean(this.partyUuid)\n\t\t\t}\n\t\t\treturn this.createFields.every((field) => field.required !== true || String(this.values[field.key] || '').trim() !== '')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * The input type of a new-person field.\n\t\t *\n\t\t * @param {{type?: string}} field The field.\n\t\t * @return {string} `email`, `number` or `text`.\n\t\t */\n\t\tinputType(field) {\n\t\t\tif (field.type === 'email') {\n\t\t\t\treturn 'email'\n\t\t\t}\n\t\t\treturn field.type === 'integer' ? 'number' : 'text'\n\t\t},\n\n\t\t/**\n\t\t * Set one new-person field.\n\t\t *\n\t\t * @param {string} key The field key.\n\t\t * @param {string} value The value.\n\t\t * @return {void}\n\t\t */\n\t\tsetValue(key, value) {\n\t\t\tthis.values = { ...this.values, [key]: value }\n\t\t},\n\n\t\t/** @return {void} Hand the choice to the host. */\n\t\tconfirm() {\n\t\t\tif (!this.complete) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.error = ''\n\t\t\tthis.$emit('confirm', {\n\t\t\t\tmode: this.mode,\n\t\t\t\tpartyUuid: this.mode === 'existing' ? String(this.partyUuid) : null,\n\t\t\t\tvalues: this.mode === 'new' ? { ...this.values } : {},\n\t\t\t\trole: this.role,\n\t\t\t\tprimary: this.allowPrimary && this.primary === true,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The host could not write: show why and let the reader try again.\n\t\t *\n\t\t * @param {string} message The refusal.\n\t\t * @return {void}\n\t\t */\n\t\tfail(message) {\n\t\t\tthis.loading = false\n\t\t\tthis.error = message || t('nextcloud-vue', 'The party could not be added.')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-party-add {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.cn-party-add__mode {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n}\n\n.cn-party-add__legend {\n\tmargin-bottom: var(--default-grid-baseline, 4px);\n\tfont-weight: 600;\n}\n</style>\n"],"names":["CnDialog","CnPartyPicker","t"],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ import { resolveComponent, openBlock, createBlock, withCtx, createVNode, createTextVNode, toDisplayString, createCommentVNode, createElementVNode, createElementBlock, Fragment, renderList } from 'vue';
2
+
3
+ const _hoisted_1 = {
4
+ class: "cn-party-add",
5
+ "data-testid": "cn-party-add-dialog"
6
+ };
7
+ const _hoisted_2 = {
8
+ key: 0,
9
+ class: "cn-party-add__mode"
10
+ };
11
+ const _hoisted_3 = { class: "cn-party-add__legend" };
12
+
13
+ function render(_ctx, _cache, $props, $setup, $data, $options) {
14
+ const _component_NcCheckboxRadioSwitch = resolveComponent("NcCheckboxRadioSwitch");
15
+ const _component_CnPartyPicker = resolveComponent("CnPartyPicker");
16
+ const _component_NcTextField = resolveComponent("NcTextField");
17
+ const _component_NcSelect = resolveComponent("NcSelect");
18
+ const _component_NcNoteCard = resolveComponent("NcNoteCard");
19
+ const _component_NcButton = resolveComponent("NcButton");
20
+ const _component_NcLoadingIcon = resolveComponent("NcLoadingIcon");
21
+ const _component_CnDialog = resolveComponent("CnDialog");
22
+
23
+ return (openBlock(), createBlock(_component_CnDialog, {
24
+ look: _ctx.look,
25
+ width: _ctx.width,
26
+ defaultWidth: "form",
27
+ eyebrow: _ctx.eyebrow,
28
+ subtitle: _ctx.subtitle,
29
+ name: $props.dialogTitle,
30
+ size: "normal",
31
+ noClose: $data.loading,
32
+ onClosing: _cache[6] || (_cache[6] = $event => (_ctx.$emit('close')))
33
+ }, {
34
+ actions: withCtx(() => [
35
+ createVNode(_component_NcButton, {
36
+ disabled: $data.loading,
37
+ "data-testid": "cn-party-add-cancel",
38
+ onClick: _cache[5] || (_cache[5] = $event => (_ctx.$emit('close')))
39
+ }, {
40
+ default: withCtx(() => [
41
+ createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Cancel')), 1 /* TEXT */)
42
+ ]),
43
+ _: 1 /* STABLE */
44
+ }, 8 /* PROPS */, ["disabled"]),
45
+ createVNode(_component_NcButton, {
46
+ variant: "primary",
47
+ disabled: $data.loading || !$options.complete,
48
+ "data-testid": "cn-party-add-confirm",
49
+ onClick: $options.confirm
50
+ }, {
51
+ icon: withCtx(() => [
52
+ ($data.loading)
53
+ ? (openBlock(), createBlock(_component_NcLoadingIcon, {
54
+ key: 0,
55
+ size: 20,
56
+ name: $options.t('nextcloud-vue', 'Loading …')
57
+ }, null, 8 /* PROPS */, ["name"]))
58
+ : createCommentVNode("v-if", true)
59
+ ]),
60
+ default: withCtx(() => [
61
+ createTextVNode(" " + toDisplayString($props.confirmLabel), 1 /* TEXT */)
62
+ ]),
63
+ _: 1 /* STABLE */
64
+ }, 8 /* PROPS */, ["disabled", "onClick"])
65
+ ]),
66
+ default: withCtx(() => [
67
+ createElementVNode("div", _hoisted_1, [
68
+ ($options.canCreate)
69
+ ? (openBlock(), createElementBlock("fieldset", _hoisted_2, [
70
+ createElementVNode("legend", _hoisted_3, toDisplayString($options.t('nextcloud-vue', 'Who')), 1 /* TEXT */),
71
+ createVNode(_component_NcCheckboxRadioSwitch, {
72
+ modelValue: $data.mode,
73
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.mode) = $event)),
74
+ type: "radio",
75
+ name: `${$data.idPrefix}-mode`,
76
+ value: "existing",
77
+ disabled: $data.loading,
78
+ "data-testid": "cn-party-add-mode-existing"
79
+ }, {
80
+ default: withCtx(() => [
81
+ createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Someone already known')), 1 /* TEXT */)
82
+ ]),
83
+ _: 1 /* STABLE */
84
+ }, 8 /* PROPS */, ["modelValue", "name", "disabled"]),
85
+ createVNode(_component_NcCheckboxRadioSwitch, {
86
+ modelValue: $data.mode,
87
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (($data.mode) = $event)),
88
+ type: "radio",
89
+ name: `${$data.idPrefix}-mode`,
90
+ value: "new",
91
+ disabled: $data.loading,
92
+ "data-testid": "cn-party-add-mode-new"
93
+ }, {
94
+ default: withCtx(() => [
95
+ createTextVNode(toDisplayString($props.createLabel), 1 /* TEXT */)
96
+ ]),
97
+ _: 1 /* STABLE */
98
+ }, 8 /* PROPS */, ["modelValue", "name", "disabled"])
99
+ ]))
100
+ : createCommentVNode("v-if", true),
101
+ ($data.mode === 'existing')
102
+ ? (openBlock(), createBlock(_component_CnPartyPicker, {
103
+ key: 1,
104
+ modelValue: $data.partyUuid,
105
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = $event => (($data.partyUuid) = $event)),
106
+ sources: $props.sources,
107
+ inputLabel: $options.t('nextcloud-vue', 'Person'),
108
+ labelOutside: "",
109
+ disabled: $data.loading,
110
+ "data-testid": "cn-party-add-picker"
111
+ }, null, 8 /* PROPS */, ["modelValue", "sources", "inputLabel", "disabled"]))
112
+ : (openBlock(true), createElementBlock(Fragment, { key: 2 }, renderList($props.createFields, (field) => {
113
+ return (openBlock(), createBlock(_component_NcTextField, {
114
+ key: field.key,
115
+ modelValue: $data.values[field.key] || '',
116
+ label: field.label,
117
+ type: $options.inputType(field),
118
+ required: field.required === true,
119
+ disabled: $data.loading,
120
+ "data-testid": `cn-party-add-field-${field.key}`,
121
+ "onUpdate:modelValue": $event => ($options.setValue(field.key, $event))
122
+ }, null, 8 /* PROPS */, ["modelValue", "label", "type", "required", "disabled", "data-testid", "onUpdate:modelValue"]))
123
+ }), 128 /* KEYED_FRAGMENT */)),
124
+ createVNode(_component_NcSelect, {
125
+ modelValue: $options.roleOption,
126
+ options: $options.roleOptions,
127
+ label: "label",
128
+ clearable: false,
129
+ inputLabel: $options.t('nextcloud-vue', 'Role'),
130
+ disabled: $data.loading,
131
+ "data-testid": "cn-party-add-role",
132
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => ($data.role = $event ? $event.key : ''))
133
+ }, null, 8 /* PROPS */, ["modelValue", "options", "inputLabel", "disabled"]),
134
+ ($props.allowPrimary)
135
+ ? (openBlock(), createBlock(_component_NcCheckboxRadioSwitch, {
136
+ key: 3,
137
+ modelValue: $data.primary,
138
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = $event => (($data.primary) = $event)),
139
+ type: "checkbox",
140
+ disabled: $data.loading,
141
+ "data-testid": "cn-party-add-primary"
142
+ }, {
143
+ default: withCtx(() => [
144
+ createTextVNode(toDisplayString($props.primaryLabel), 1 /* TEXT */)
145
+ ]),
146
+ _: 1 /* STABLE */
147
+ }, 8 /* PROPS */, ["modelValue", "disabled"]))
148
+ : createCommentVNode("v-if", true),
149
+ ($data.error)
150
+ ? (openBlock(), createBlock(_component_NcNoteCard, {
151
+ key: 4,
152
+ type: "error",
153
+ "data-testid": "cn-party-add-error"
154
+ }, {
155
+ default: withCtx(() => [
156
+ createTextVNode(toDisplayString($data.error), 1 /* TEXT */)
157
+ ]),
158
+ _: 1 /* STABLE */
159
+ }))
160
+ : createCommentVNode("v-if", true)
161
+ ])
162
+ ]),
163
+ _: 1 /* STABLE */
164
+ }, 8 /* PROPS */, ["look", "width", "eyebrow", "subtitle", "name", "noClose"]))
165
+ }
166
+
167
+ export { render };
168
+ //# sourceMappingURL=CnPartyAddDialog.vue3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CnPartyAddDialog.vue3.js","sources":["../../../src/dialogs/CnPartyAddDialog.vue?vue&type=template&id=4157800c&lang.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<CnDialog\n\t\t:look=\"look\"\n\t\t:width=\"width\"\n\t\tdefaultWidth=\"form\"\n\t\t:eyebrow=\"eyebrow\"\n\t\t:subtitle=\"subtitle\"\n\t\t:name=\"dialogTitle\"\n\t\tsize=\"normal\"\n\t\t:noClose=\"loading\"\n\t\t@closing=\"$emit('close')\">\n\t\t<div class=\"cn-party-add\" data-testid=\"cn-party-add-dialog\">\n\t\t\t<fieldset v-if=\"canCreate\" class=\"cn-party-add__mode\">\n\t\t\t\t<legend class=\"cn-party-add__legend\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Who') }}\n\t\t\t\t</legend>\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-model=\"mode\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t:name=\"`${idPrefix}-mode`\"\n\t\t\t\t\tvalue=\"existing\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\tdata-testid=\"cn-party-add-mode-existing\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Someone already known') }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\t\tv-model=\"mode\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\t:name=\"`${idPrefix}-mode`\"\n\t\t\t\t\tvalue=\"new\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\tdata-testid=\"cn-party-add-mode-new\">\n\t\t\t\t\t{{ createLabel }}\n\t\t\t\t</NcCheckboxRadioSwitch>\n\t\t\t</fieldset>\n\n\t\t\t<CnPartyPicker\n\t\t\t\tv-if=\"mode === 'existing'\"\n\t\t\t\tv-model=\"partyUuid\"\n\t\t\t\t:sources=\"sources\"\n\t\t\t\t:inputLabel=\"t('nextcloud-vue', 'Person')\"\n\t\t\t\tlabelOutside\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tdata-testid=\"cn-party-add-picker\" />\n\n\t\t\t<template v-else>\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-for=\"field in createFields\"\n\t\t\t\t\t:key=\"field.key\"\n\t\t\t\t\t:modelValue=\"values[field.key] || ''\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:type=\"inputType(field)\"\n\t\t\t\t\t:required=\"field.required === true\"\n\t\t\t\t\t:disabled=\"loading\"\n\t\t\t\t\t:data-testid=\"`cn-party-add-field-${field.key}`\"\n\t\t\t\t\t@update:modelValue=\"setValue(field.key, $event)\" />\n\t\t\t</template>\n\n\t\t\t<NcSelect\n\t\t\t\t:modelValue=\"roleOption\"\n\t\t\t\t:options=\"roleOptions\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\t:clearable=\"false\"\n\t\t\t\t:inputLabel=\"t('nextcloud-vue', 'Role')\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tdata-testid=\"cn-party-add-role\"\n\t\t\t\t@update:modelValue=\"role = $event ? $event.key : ''\" />\n\n\t\t\t<NcCheckboxRadioSwitch\n\t\t\t\tv-if=\"allowPrimary\"\n\t\t\t\tv-model=\"primary\"\n\t\t\t\ttype=\"checkbox\"\n\t\t\t\t:disabled=\"loading\"\n\t\t\t\tdata-testid=\"cn-party-add-primary\">\n\t\t\t\t{{ primaryLabel }}\n\t\t\t</NcCheckboxRadioSwitch>\n\n\t\t\t<NcNoteCard v-if=\"error\" type=\"error\" data-testid=\"cn-party-add-error\">\n\t\t\t\t{{ error }}\n\t\t\t</NcNoteCard>\n\t\t</div>\n\n\t\t<template #actions>\n\t\t\t<NcButton :disabled=\"loading\" data-testid=\"cn-party-add-cancel\" @click=\"$emit('close')\">\n\t\t\t\t{{ t('nextcloud-vue', 'Cancel') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"loading || !complete\"\n\t\t\t\tdata-testid=\"cn-party-add-confirm\"\n\t\t\t\t@click=\"confirm\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<NcLoadingIcon v-if=\"loading\" :size=\"20\" :name=\"t('nextcloud-vue', 'Loading …')\" />\n\t\t\t\t</template>\n\t\t\t\t{{ confirmLabel }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</CnDialog>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard, NcSelect, NcTextField } from '@nextcloud/vue'\nimport CnDialog from '../components/CnDialog/CnDialog.vue'\nimport CnPartyPicker from '../components/CnPartyPicker/CnPartyPicker.vue'\nimport { dialogBoardMixin } from '../mixins/dialogBoard.js'\n\nlet uid = 0\n\n/**\n * CnPartyAddDialog — give a party a role on a record: pick somebody already\n * known (CnPartyPicker over `sources`), or describe a new person with the\n * `create.fields` the host declares (no identifier needed: a name and an\n * address are enough). Then a role from `roles`, and optionally \"make this the\n * primary party\".\n *\n * The dialog writes nothing. `confirm` emits `{ mode, partyUuid, values, role,\n * primary }`; the host creates the person when `mode` is `new`, links the\n * party, then closes the dialog or calls `fail(message)` to show the refusal\n * (a 403 when the reader may not update the record) and let them try again.\n *\n * @spec openspec/changes/object-parties-manage/specs/record-widgets/spec.md#requirement-the-parties-widget-can-add-and-remove-parties\n */\nexport default {\n\tname: 'CnPartyAddDialog',\n\n\tcomponents: { CnDialog, CnPartyPicker, NcButton, NcCheckboxRadioSwitch, NcLoadingIcon, NcNoteCard, NcSelect, NcTextField },\n\n\tmixins: [dialogBoardMixin],\n\n\tprops: {\n\t\t/** The dialog's title (\"Add contact person\"). */\n\t\tdialogTitle: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Add a party'),\n\t\t},\n\n\t\t/** The roles to choose from, `[{ key, label }]`, already in the reader's words. */\n\t\troles: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** CnPartyPicker sources for somebody already known. */\n\t\tsources: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/**\n\t\t * The fields of a new person, `[{ key, label, type? (text, email, integer), required? }]`,\n\t\t * labels already translated. None: only existing parties can be picked.\n\t\t */\n\t\tcreateFields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** The choice that opens the new-person fields. */\n\t\tcreateLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Someone new'),\n\t\t},\n\n\t\t/** Offer \"make this the primary party\". */\n\t\tallowPrimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** The primary choice's words (\"Main contact\"). */\n\t\tprimaryLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Primary party'),\n\t\t},\n\n\t\t/** The confirm button's words. */\n\t\tconfirmLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: () => t('nextcloud-vue', 'Add'),\n\t\t},\n\t},\n\n\temits: ['close', 'confirm'],\n\n\tdata() {\n\t\tuid += 1\n\t\treturn {\n\t\t\tidPrefix: `cn-party-add-${uid}`,\n\t\t\tmode: 'existing',\n\t\t\tpartyUuid: null,\n\t\t\tvalues: {},\n\t\t\trole: this.roles.length === 1 ? this.roles[0].key : '',\n\t\t\tprimary: false,\n\t\t\tloading: false,\n\t\t\terror: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {boolean} Whether a new person can be described here. */\n\t\tcanCreate() {\n\t\t\treturn this.createFields.length > 0\n\t\t},\n\n\t\t/** @return {Array<{key: string, label: string}>} The role choices. */\n\t\troleOptions() {\n\t\t\treturn this.roles.filter((role) => role && role.key).map((role) => ({ key: role.key, label: role.label || role.key }))\n\t\t},\n\n\t\t/** @return {object|null} The chosen role's option. */\n\t\troleOption() {\n\t\t\treturn this.roleOptions.find((option) => option.key === this.role) || null\n\t\t},\n\n\t\t/** @return {boolean} Whether the choice is complete enough to send. */\n\t\tcomplete() {\n\t\t\tif (this.role === '') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.mode === 'existing') {\n\t\t\t\treturn Boolean(this.partyUuid)\n\t\t\t}\n\t\t\treturn this.createFields.every((field) => field.required !== true || String(this.values[field.key] || '').trim() !== '')\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * The input type of a new-person field.\n\t\t *\n\t\t * @param {{type?: string}} field The field.\n\t\t * @return {string} `email`, `number` or `text`.\n\t\t */\n\t\tinputType(field) {\n\t\t\tif (field.type === 'email') {\n\t\t\t\treturn 'email'\n\t\t\t}\n\t\t\treturn field.type === 'integer' ? 'number' : 'text'\n\t\t},\n\n\t\t/**\n\t\t * Set one new-person field.\n\t\t *\n\t\t * @param {string} key The field key.\n\t\t * @param {string} value The value.\n\t\t * @return {void}\n\t\t */\n\t\tsetValue(key, value) {\n\t\t\tthis.values = { ...this.values, [key]: value }\n\t\t},\n\n\t\t/** @return {void} Hand the choice to the host. */\n\t\tconfirm() {\n\t\t\tif (!this.complete) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.loading = true\n\t\t\tthis.error = ''\n\t\t\tthis.$emit('confirm', {\n\t\t\t\tmode: this.mode,\n\t\t\t\tpartyUuid: this.mode === 'existing' ? String(this.partyUuid) : null,\n\t\t\t\tvalues: this.mode === 'new' ? { ...this.values } : {},\n\t\t\t\trole: this.role,\n\t\t\t\tprimary: this.allowPrimary && this.primary === true,\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * The host could not write: show why and let the reader try again.\n\t\t *\n\t\t * @param {string} message The refusal.\n\t\t * @return {void}\n\t\t */\n\t\tfail(message) {\n\t\t\tthis.loading = false\n\t\t\tthis.error = message || t('nextcloud-vue', 'The party could not be added.')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-party-add {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.cn-party-add__mode {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n}\n\n.cn-party-add__legend {\n\tmargin-bottom: var(--default-grid-baseline, 4px);\n\tfont-weight: 600;\n}\n</style>\n"],"names":["_createBlock","_createVNode","_createElementVNode","_toDisplayString","_Fragment","_renderList"],"mappings":";;;AAqBO,EAAA,KAAK,EAAC,cAAY;AAAA,EAAA,aAAA,EAAA,qBAAA;;;;AACP,EAAA,KAAA,EAAA,oBAAA;;AACN,MAAA,UAAA,GAAA,EAAA,KAAI,EAAA,sBAAA,GAAA;;;;;;;;;;;;uBAZdA;AACC,IAAA,IAAI,EAAE,IAAI,CAAA,IAAA;AACV,IAAA,KAAK,EAAE,IAAI,CAAA,KAAA;AACZ,IAAA,YAAY,EAAC,MAAI;AAChB,IAAA,OAAO,EAAE,IAAO,CAAA,OAAA;AAChB,IAAA,QAAQ,EAAE,IAAQ,CAAA,QAAA;AAClB,IAAA,IAAI,EAAE,MAAW,CAAA,WAAA;AAChB,IAAA,IAAE,EAAC,QAAQ;WACL,EAAE,KAAO,CAAA,OAAA;AACf,IAAA,SAAM,uCAAE,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA;;AAwEC,IAAA,OAAO,gBAGN;iBAAA,CAAA,mBAAA,EAAA;AAFA,QAAA,QAAO,EAAG,KAAO,CAAA,OAAA;AAAE,QAAA,aAAE,EAAA,qBAAA;AAAA,QAAA,OAAA,uCAAA,IAAA,CAAA,KAAA,CAAA,OAAA,CAAA,CAAA,CAAA;;yBAC/B,MAAiC;0CAA9B,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,QAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;MAEJC;AACC,QAAA,OAAM,EAAC,SAAS;QAChB,QAAQ,EAAC,KAAA,CAAA,OAAA,IAAA,CAAA,QAAA,CAAA,QAAA;AACV,QAAA,aAAW,EAAC,sBAAK;AAChB,QAAA,OAAK,EAAE,QAAC,CAAA,OAAA;;AACD,QAAA,IAAA,UACP,MAAM;WAAA,KAAA,CAAA,OAAA;4BAAND,WAAM,CAAA,wBAAA,EAAA;;AAAA,gBAAA,IAAA,EAAA,EAAA;AAAA,gBAAA,IAAA,EAAA,QAAA,CAAA,CAAA,CAAA,eAAA,EAAA,WAAA,CAAA;;;;;;;;;;qBAjFP,MAqEI;AArEJ,MAAAE,kBAAA,CAqEI,OArEJ,UAqEI,EAAA;SApEU,QAAA,CAAA,SAAA;6CAsBJ,sBAAA,EAAA;gCAnBD,CAAA,QAAA,YAAA,EAAAC,eAAA,CADL,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,KAAA,CAAA,CAAA,EAAA,CAAA,YAAA;cAEJF,WAQU,CAAA,gCAAA,EAAA;4BAPD,KAAI,CAAA,IAAA;6EAAJ,KAAI,CAAA,IAAA,IAAA,MAAA,CAAA,CAAA;AACb,gBAAA,IAAI,EAAC,OAAO;AACX,gBAAA,IAAI,KAAK,KAAQ,CAAA,QAAA,CAAA,KAAA,CAAA;AAClB,gBAAA,KAAK,EAAC,UAAU;AACf,gBAAA,QAAQ,EAAE,KAAE,CAAA,OAAA;AACb,gBAAA,aAAW,EAAA,4BAAA;;iCACX,MAAyB;kDAAtB,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,uBAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;cAEJA,WAQiB,CAAA,gCAAA,EAAA;4BAPR,KAAI,CAAA,IAAA;6EAAJ,KAAI,CAAA,IAAA,IAAA,MAAA,CAAA,CAAA;AACb,gBAAA,IAAI,EAAC,OAAO;AACX,gBAAA,IAAI,KAAK,KAAQ,CAAA,QAAA,CAAA,KAAA,CAAA;AAClB,gBAAA,KAAK,EAAC,KAAE;;AAER,gBAAA,aAAW,EAAA,uBAAA;;iCACX,MAAiB;kDAAd,MAAW,CAAA,WAAA,CAAA,EAAA,CAAA,YAAA;;;;;;SAKT,KAAI,CAAA,IAAA,KAAA,UAAA;qCAMM,CAAA,wBAAA,EAAA;;0BALP,KAAS,CAAA,SAAA;2EAAT,KAAS,CAAA,SAAA,IAAA,MAAA,CAAA,CAAA;;AAEjB,cAAA,UAAU,EAAE,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,QAAA,CAAA;AACd,cAAA,YAAW,EAAX,EAAW;AACV,cAAA,QAAQ,EAAE,KAAO,CAAA,OAAA;AACjB,cAAA,aAAU,EAAC,qBAAI;;gDAYK,CAAAG,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAAC,UAAA,CARJ,MAAY,CAAA,YAAA,EAAA,CAArB,KAAK,KAAA;8CAQQ,CAAA,sBAAA,EAAA;gBAPnB,GAAG,EAAE,KAAK,CAAC,GAAG;AACd,gBAAA,UAAU,EAAE,KAAA,CAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAA,IAAA,EAAA;gBAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,QAAC,CAAA,SAAA,CAAA,KAAA,CAAA;;AAEP,gBAAA,QAAK,EAAA,KAAA,CAAA,OAAA;gBACL,aAAW,EAAA,CAAA,mBAAA,EAAU,KAAA,CAAA,GAAA,CAAA,CAAA;AACrB,gBAAA,qBAAiB,aAAE,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,EAAA,MAAA,CAAA,CAAA;;;QAGrBJ,WAQc,CAAA,mBAAA,EAAA;AAPb,UAAA,UAAU,EAAE,QAAK,CAAA,UAAA;AACjB,UAAA,OAAO,EAAE,QAAW,CAAA,WAAA;AACrB,UAAA,KAAK,EAAC,OAAO;;AAEZ,UAAA,UAAU,EAAE,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,MAAA,CAAA;AACb,UAAA,QAAQ,EAAE,KAAO,CAAA,OAAA;AAClB,UAAA,aAAW,EAAC,mBAAI;AACf,UAAA,qBAAa,uCAAA,KAAA,CAAA,IAAA,GAAA,MAAA,GAAA,MAAA,CAAA,GAAA,GAAA,EAAA,CAAA,CAAA;;SAGR,MAAW,CAAA,YAAA;0BADjBD,WAOG,CAAA,gCAAA,EAAA;;0BALM,KAAO,CAAA,OAAA;2EAAP,KAAO,CAAA,OAAA,IAAA,MAAA,CAAA,CAAA;;AAEf,cAAA,QAAQ,EAAE,KAAO,CAAA,OAAA;AAClB,cAAA,aAAU,EAAA,sBAAA;;+BACV,MAAW;gDAAR,MAAQ,CAAA,YAAA,CAAA,EAAA,CAAA,YAAA;;;;;SAGK,KAAA,CAAA,KAAA;0BAAjBA,WAEa,CAAA,qBAAA,EAAA;;AAFI,cAAA,IAAA,EAAA,OAAA;AAAA,cAAA,aAAA,EAAA,oBAAA;;+BAChB,MAAW;gDAAR,KAAI,CAAA,KAAA,CAAA,EAAA,CAAA,YAAA;;;;;;;;;;;;;"}
package/dist/esm/index.js CHANGED
@@ -24,6 +24,7 @@ export { currentTheme, useCurrentTheme } from './composables/useCurrentTheme.js'
24
24
  export { ROADMAP_LABEL_BLOCKLIST } from './utils/roadmapLabelBlocklist.js';
25
25
  export { humaniseRuleKey, notificationRuleLabel } from './utils/notificationRuleLabel.js';
26
26
  export { readTransitionInputs } from './utils/transitionInputs.js';
27
+ export { conditionSentence, formatConditionValue, operatorLabel, operatorTakesValue, operatorsForType } from './components/CnConditionListEditor/conditionOperators.js';
27
28
  export { humaniseKey } from './utils/humaniseKey.js';
28
29
  export { BSN_ERROR_CHECKSUM, BSN_ERROR_LENGTH, maskBsn, validateBsn } from './utils/validators/bsn.js';
29
30
  export { registerTranslations } from './l10n/index.js';
@@ -98,6 +99,7 @@ export { default as CnChoiceCards } from './components/CnChoiceCards/CnChoiceCar
98
99
  export { default as CnChoicePickerWidget } from './components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js';
99
100
  export { default as CnColorPicker } from './components/CnColorPicker/CnColorPicker.vue.js';
100
101
  export { default as CnCommandPalette } from './components/CnCommandPalette/CnCommandPalette.vue.js';
102
+ export { default as CnConditionListEditor } from './components/CnConditionListEditor/CnConditionListEditor.vue.js';
101
103
  export { default as CnConfigurationCard } from './components/CnConfigurationCard/CnConfigurationCard.vue.js';
102
104
  export { default as CnContactCreate } from './components/CnContactCreate/CnContactCreate.vue.js';
103
105
  export { default as CnContactPicker } from './components/CnContactPicker/CnContactPicker.vue.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2362,7 +2362,33 @@ var translations = {
2362
2362
  Viewed: "Viewed",
2363
2363
  "w{week}": "w{week}",
2364
2364
  Icon: "Icon",
2365
- "Shown when you point at the view in the menu.": "Shown when you point at the view in the menu."
2365
+ "Shown when you point at the view in the menu.": "Shown when you point at the view in the menu.",
2366
+ "No main contact yet": "No main contact yet",
2367
+ is: "is",
2368
+ "is not": "is not",
2369
+ "greater than": "greater than",
2370
+ "at least": "at least",
2371
+ "less than": "less than",
2372
+ "at most": "at most",
2373
+ "is filled in": "is filled in",
2374
+ "{field} is {value}": "{field} is {value}",
2375
+ "{field} is not {value}": "{field} is not {value}",
2376
+ "{field} is greater than {value}": "{field} is greater than {value}",
2377
+ "{field} is at least {value}": "{field} is at least {value}",
2378
+ "{field} is less than {value}": "{field} is less than {value}",
2379
+ "{field} is at most {value}": "{field} is at most {value}",
2380
+ "{field} is filled in": "{field} is filled in",
2381
+ "No conditions: the rule always applies.": "No conditions: the rule always applies.",
2382
+ "Add a party": "Add a party",
2383
+ "Remove party": "Remove party",
2384
+ "Remove {name} as {role}": "Remove {name} as {role}",
2385
+ "Remove {name} as {role}?": "Remove {name} as {role}?",
2386
+ "Someone already known": "Someone already known",
2387
+ "Someone new": "Someone new",
2388
+ "The change could not be saved. Nothing was changed.": "The change could not be saved. Nothing was changed.",
2389
+ "The new person was not saved.": "The new person was not saved.",
2390
+ "The party could not be added.": "The party could not be added.",
2391
+ "You may not change who is on this record.": "You may not change who is on this record."
2366
2392
  };
2367
2393
  var plurals = {
2368
2394
  "{count} member": [
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2612,7 +2612,33 @@ var translations = {
2612
2612
  Viewed: "Ingezien",
2613
2613
  "w{week}": "w{week}",
2614
2614
  Icon: "Pictogram",
2615
- "Shown when you point at the view in the menu.": "Te zien als u in het menu op de weergave wijst."
2615
+ "Shown when you point at the view in the menu.": "Te zien als u in het menu op de weergave wijst.",
2616
+ "No main contact yet": "Nog geen hoofdcontact",
2617
+ is: "is",
2618
+ "is not": "is niet",
2619
+ "greater than": "groter dan",
2620
+ "at least": "minstens",
2621
+ "less than": "kleiner dan",
2622
+ "at most": "hoogstens",
2623
+ "is filled in": "is ingevuld",
2624
+ "{field} is {value}": "{field} {value} is",
2625
+ "{field} is not {value}": "{field} niet {value} is",
2626
+ "{field} is greater than {value}": "{field} groter is dan {value}",
2627
+ "{field} is at least {value}": "{field} minstens {value} is",
2628
+ "{field} is less than {value}": "{field} kleiner is dan {value}",
2629
+ "{field} is at most {value}": "{field} hoogstens {value} is",
2630
+ "{field} is filled in": "{field} is ingevuld",
2631
+ "No conditions: the rule always applies.": "Geen voorwaarden: de regel geldt altijd.",
2632
+ "Add a party": "Partij toevoegen",
2633
+ "Remove party": "Partij verwijderen",
2634
+ "Remove {name} as {role}": "{name} als {role} verwijderen",
2635
+ "Remove {name} as {role}?": "{name} als {role} verwijderen?",
2636
+ "Someone already known": "Iemand die al bekend is",
2637
+ "Someone new": "Iemand nieuw",
2638
+ "The change could not be saved. Nothing was changed.": "De wijziging kon niet worden opgeslagen. Er is niets veranderd.",
2639
+ "The new person was not saved.": "De nieuwe persoon is niet opgeslagen.",
2640
+ "The party could not be added.": "De partij kon niet worden toegevoegd.",
2641
+ "You may not change who is on this record.": "U mag niet wijzigen wie er bij dit record hoort."
2616
2642
  };
2617
2643
  var plurals = {
2618
2644
  "{count} member": [
@@ -1 +1 @@
1
- {"version":3,"file":"nl.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"nl.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}