@conduction/nextcloud-vue 2.106.0 → 2.107.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 (135) hide show
  1. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js +9 -0
  2. package/dist/esm/components/CnActionDialog/CnActionDialog.vue.js.map +1 -0
  3. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js +338 -0
  4. package/dist/esm/components/CnActionDialog/CnActionDialog.vue2.js.map +1 -0
  5. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js +249 -0
  6. package/dist/esm/components/CnActionDialog/CnActionDialog.vue3.js.map +1 -0
  7. package/dist/esm/components/CnAdvancedFormDialog/CnPropertiesTab.vue2.js +2 -2
  8. package/dist/esm/components/CnAdvancedFormDialog/CnPropertiesTab.vue2.js.map +1 -1
  9. package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
  10. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +145 -138
  11. package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
  12. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +102 -2
  13. package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
  14. package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
  15. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue.js +1 -1
  16. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +83 -6
  17. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
  18. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +4 -2
  19. package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
  20. package/dist/esm/components/CnIcon/semanticIcons.js +2 -2
  21. package/dist/esm/components/CnIcon/semanticIcons.js.map +1 -1
  22. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +389 -20
  23. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  24. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +68 -35
  25. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  26. package/dist/esm/components/CnIndexPage/useSelfFetchList.js +22 -2
  27. package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
  28. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +69 -5
  29. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
  30. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js +38 -5
  31. package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
  32. package/dist/esm/components/CnMapWidget/CnMapWidget.vue.js +1 -1
  33. package/dist/esm/components/CnMapWidget/CnMapWidget.vue2.js +7 -1
  34. package/dist/esm/components/CnMapWidget/CnMapWidget.vue2.js.map +1 -1
  35. package/dist/esm/components/CnMapWidget/CnMapWidget.vue3.js.map +1 -1
  36. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue.js +8 -0
  37. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue.js.map +1 -0
  38. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue2.js +297 -0
  39. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue2.js.map +1 -0
  40. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue3.js +24 -0
  41. package/dist/esm/components/CnPartyPicker/CnPartyPicker.vue3.js.map +1 -0
  42. package/dist/esm/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue.js +9 -0
  43. package/dist/esm/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue.js.map +1 -0
  44. package/dist/esm/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue2.js +95 -0
  45. package/dist/esm/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue2.js.map +1 -0
  46. package/dist/esm/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue3.js +123 -0
  47. package/dist/esm/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue3.js.map +1 -0
  48. package/dist/esm/components/CnSavedViewShareDialog/CnSavedViewShareDialog.vue.js +1 -1
  49. package/dist/esm/components/CnSavedViewShareDialog/CnSavedViewShareDialog.vue2.js +13 -5
  50. package/dist/esm/components/CnSavedViewShareDialog/CnSavedViewShareDialog.vue2.js.map +1 -1
  51. package/dist/esm/components/CnSavedViewShareDialog/CnSavedViewShareDialog.vue3.js +3 -1
  52. package/dist/esm/components/CnSavedViewShareDialog/CnSavedViewShareDialog.vue3.js.map +1 -1
  53. package/dist/esm/components/CnSavedViewShareFields/CnSavedViewShareFields.vue.js +1 -1
  54. package/dist/esm/components/CnSavedViewShareFields/CnSavedViewShareFields.vue2.js +49 -23
  55. package/dist/esm/components/CnSavedViewShareFields/CnSavedViewShareFields.vue2.js.map +1 -1
  56. package/dist/esm/components/CnSavedViewShareFields/CnSavedViewShareFields.vue3.js +74 -27
  57. package/dist/esm/components/CnSavedViewShareFields/CnSavedViewShareFields.vue3.js.map +1 -1
  58. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue.js +0 -1
  59. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue.js.map +1 -1
  60. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js +18 -413
  61. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
  62. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js +27 -214
  63. package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
  64. package/dist/esm/components/CnSavedViewsPanel/CnSavedViewsPanel.vue.js +9 -0
  65. package/dist/esm/components/CnSavedViewsPanel/CnSavedViewsPanel.vue.js.map +1 -0
  66. package/dist/esm/components/CnSavedViewsPanel/CnSavedViewsPanel.vue2.js +190 -0
  67. package/dist/esm/components/CnSavedViewsPanel/CnSavedViewsPanel.vue2.js.map +1 -0
  68. package/dist/esm/components/CnSavedViewsPanel/CnSavedViewsPanel.vue3.js +270 -0
  69. package/dist/esm/components/CnSavedViewsPanel/CnSavedViewsPanel.vue3.js.map +1 -0
  70. package/dist/esm/index.js +4 -0
  71. package/dist/esm/index.js.map +1 -1
  72. package/dist/esm/l10n/en.json.js +56 -1
  73. package/dist/esm/l10n/en.json.js.map +1 -1
  74. package/dist/esm/l10n/nl.json.js +56 -1
  75. package/dist/esm/l10n/nl.json.js.map +1 -1
  76. package/dist/esm/library-style.js +1 -1
  77. package/dist/esm/mixins/savedViewsList.js +235 -0
  78. package/dist/esm/mixins/savedViewsList.js.map +1 -0
  79. package/dist/esm/nextcloud-vue.css +348 -108
  80. package/dist/esm/utils/actionsDispatcher.js +2 -2
  81. package/dist/esm/utils/actionsDispatcher.js.map +1 -1
  82. package/dist/esm/utils/builtInModals.js +39 -0
  83. package/dist/esm/utils/builtInModals.js.map +1 -0
  84. package/dist/esm/utils/mapMarkerColor.js +121 -0
  85. package/dist/esm/utils/mapMarkerColor.js.map +1 -0
  86. package/dist/esm/utils/mergeManifestDelta.js +4 -0
  87. package/dist/esm/utils/mergeManifestDelta.js.map +1 -1
  88. package/dist/esm/utils/savedViewHelpers.js +59 -7
  89. package/dist/esm/utils/savedViewHelpers.js.map +1 -1
  90. package/dist/esm/utils/savedViewMenu.js +154 -0
  91. package/dist/esm/utils/savedViewMenu.js.map +1 -0
  92. package/dist/esm/utils/searchGroupSharees.js +50 -15
  93. package/dist/esm/utils/searchGroupSharees.js.map +1 -1
  94. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  95. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  96. package/dist/nextcloud-vue.cjs.js +13351 -10855
  97. package/dist/nextcloud-vue.cjs.js.map +2 -2
  98. package/dist/nextcloud-vue.css +348 -108
  99. package/l10n/en.json +56 -1
  100. package/l10n/nl.json +56 -1
  101. package/package.json +1 -1
  102. package/src/components/CnActionDialog/CnActionDialog.vue +545 -0
  103. package/src/components/CnActionDialog/index.js +12 -0
  104. package/src/components/CnAppNav/CnAppNav.vue +17 -0
  105. package/src/components/CnAppRoot/CnAppRoot.vue +102 -2
  106. package/src/components/CnDashboardPage/CnDashboardPage.vue +86 -7
  107. package/src/components/CnIndexPage/CnIndexPage.vue +409 -23
  108. package/src/components/CnIndexPage/useSelfFetchList.js +21 -1
  109. package/src/components/CnIndexSidebar/CnIndexSidebar.md +2 -0
  110. package/src/components/CnIndexSidebar/CnIndexSidebar.vue +91 -1
  111. package/src/components/CnMapWidget/CnMapWidget.vue +16 -1
  112. package/src/components/CnPartyPicker/CnPartyPicker.vue +317 -0
  113. package/src/components/CnPartyPicker/index.js +11 -0
  114. package/src/components/CnSavedViewEditDialog/CnSavedViewEditDialog.vue +192 -0
  115. package/src/components/CnSavedViewEditDialog/index.js +11 -0
  116. package/src/components/CnSavedViewShareDialog/CnSavedViewShareDialog.vue +21 -6
  117. package/src/components/CnSavedViewShareFields/CnSavedViewShareFields.vue +130 -37
  118. package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +36 -599
  119. package/src/components/CnSavedViewsPanel/CnSavedViewsPanel.vue +459 -0
  120. package/src/components/CnSavedViewsPanel/index.js +11 -0
  121. package/src/components/index.js +4 -0
  122. package/src/css/index-page.css +16 -0
  123. package/src/css/look-board-index.css +5 -3
  124. package/src/css/look-board.css +18 -3
  125. package/src/index.js +4 -0
  126. package/src/mixins/savedViewsList.js +231 -0
  127. package/src/schemas/app-manifest-v2.schema.json +98 -3
  128. package/src/utils/actionsDispatcher.js +2 -2
  129. package/src/utils/builtInModals.js +35 -0
  130. package/src/utils/mapMarkerColor.js +117 -0
  131. package/src/utils/mergeManifestDelta.js +4 -0
  132. package/src/utils/savedViewHelpers.js +58 -6
  133. package/src/utils/savedViewMenu.js +150 -0
  134. package/src/utils/searchGroupSharees.js +49 -14
  135. package/src/utils/validateManifestV2.compiled.js +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CnActionDialog.vue3.js","sources":["../../../../src/components/CnActionDialog/CnActionDialog.vue?vue&type=template&id=53fea6f0&lang.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n<template>\n\t<CnDialog\n\t\t:name=\"text(config.title) || t('nextcloud-vue', 'Confirm')\"\n\t\t:eyebrow=\"text(config.eyebrow)\"\n\t\t:subtitle=\"text(config.subtitle)\"\n\t\twidth=\"form\"\n\t\t:noClose=\"busy\"\n\t\tdata-testid=\"cn-action-dialog\"\n\t\t@closing=\"close\">\n\t\t<div v-if=\"!done\" class=\"cn-action-dialog\">\n\t\t\t<!-- The record the action is about: its title, a meta line, a badge. -->\n\t\t\t<div v-if=\"summary\" class=\"cn-action-dialog__summary\" data-testid=\"cn-action-dialog-summary\">\n\t\t\t\t<CnIcon :name=\"config.summary.icon || 'FolderOutline'\" :size=\"20\" class=\"cn-action-dialog__summary-icon\" />\n\t\t\t\t<span class=\"cn-action-dialog__summary-text\">\n\t\t\t\t\t<strong>{{ summary.title }}</strong>\n\t\t\t\t\t<span v-if=\"summary.meta\" class=\"cn-action-dialog__muted\">{{ summary.meta }}</span>\n\t\t\t\t</span>\n\t\t\t\t<span v-if=\"summary.badge\" class=\"cn-action-dialog__badge\">{{ summary.badge }}</span>\n\t\t\t</div>\n\n\t\t\t<!-- Facts about the record, in titled groups (\"Retention under the case type\"). -->\n\t\t\t<section v-for=\"(section, index) in factSections\"\n\t\t\t\t:key=\"`facts-${index}`\"\n\t\t\t\tclass=\"cn-action-dialog__section\"\n\t\t\t\tdata-testid=\"cn-action-dialog-facts\">\n\t\t\t\t<h3 v-if=\"section.title\" class=\"cn-action-dialog__title\">\n\t\t\t\t\t{{ section.title }}\n\t\t\t\t</h3>\n\t\t\t\t<dl class=\"cn-action-dialog__facts\">\n\t\t\t\t\t<div v-for=\"fact in section.facts\" :key=\"fact.label\">\n\t\t\t\t\t\t<dt>{{ fact.label }}</dt>\n\t\t\t\t\t\t<dd>{{ fact.value }}</dd>\n\t\t\t\t\t</div>\n\t\t\t\t</dl>\n\t\t\t</section>\n\n\t\t\t<!-- The checklist, read from an endpoint: each item met, not met or\n\t\t\t unknown. Items named in `required` decide whether the action may\n\t\t\t run; the others inform. -->\n\t\t\t<section v-if=\"config.checklist\" class=\"cn-action-dialog__section\" data-testid=\"cn-action-dialog-checklist\">\n\t\t\t\t<h3 v-if=\"config.checklist.title\" class=\"cn-action-dialog__title\">\n\t\t\t\t\t{{ text(config.checklist.title) }}\n\t\t\t\t</h3>\n\t\t\t\t<p v-if=\"checklistError\" class=\"cn-action-dialog__muted\" role=\"status\">\n\t\t\t\t\t{{ checklistError }}\n\t\t\t\t</p>\n\t\t\t\t<ul class=\"cn-action-dialog__checks\">\n\t\t\t\t\t<li v-for=\"item in checklist\"\n\t\t\t\t\t\t:key=\"item.id\"\n\t\t\t\t\t\tclass=\"cn-action-dialog__check\"\n\t\t\t\t\t\t:data-testid=\"`cn-action-dialog-check-${item.id}`\"\n\t\t\t\t\t\t:data-met=\"String(item.met)\">\n\t\t\t\t\t\t<CheckCircle v-if=\"item.met === true\" :size=\"20\" class=\"cn-action-dialog__check-icon cn-action-dialog__check-icon--met\" />\n\t\t\t\t\t\t<HelpCircleOutline v-else-if=\"item.met === null\" :size=\"20\" class=\"cn-action-dialog__check-icon\" />\n\t\t\t\t\t\t<CircleOutline v-else :size=\"20\" class=\"cn-action-dialog__check-icon\" />\n\t\t\t\t\t\t<strong class=\"cn-action-dialog__check-label\">{{ item.label }}</strong>\n\t\t\t\t\t\t<span v-if=\"item.detail\" class=\"cn-action-dialog__muted\">{{ item.detail }}</span>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</section>\n\n\t\t\t<div v-if=\"config.reason\" class=\"cn-action-dialog__field\">\n\t\t\t\t<NcTextArea\n\t\t\t\t\t:id=\"reasonId\"\n\t\t\t\t\tv-model=\"reason\"\n\t\t\t\t\t:label=\"reasonLabel\"\n\t\t\t\t\t:labelOutside=\"false\"\n\t\t\t\t\tresize=\"vertical\"\n\t\t\t\t\tdata-testid=\"cn-action-dialog-reason\" />\n\t\t\t\t<span v-if=\"config.reason.hint\" class=\"cn-action-dialog__muted\">{{ text(config.reason.hint) }}</span>\n\t\t\t</div>\n\n\t\t\t<NcNoteCard v-if=\"config.note\"\n\t\t\t\t:type=\"noteType\"\n\t\t\t\t:heading=\"text(config.note.title)\"\n\t\t\t\tdata-testid=\"cn-action-dialog-note\">\n\t\t\t\t{{ text(config.note.text) }}\n\t\t\t</NcNoteCard>\n\n\t\t\t<p v-if=\"refusal\"\n\t\t\t\tclass=\"cn-action-dialog__error\"\n\t\t\t\trole=\"alert\"\n\t\t\t\tdata-testid=\"cn-action-dialog-refusal\">\n\t\t\t\t{{ refusal }}\n\t\t\t</p>\n\t\t</div>\n\n\t\t<p v-else role=\"status\" data-testid=\"cn-action-dialog-done\">\n\t\t\t{{ text(config.doneText) || t('nextcloud-vue', 'Done') }}\n\t\t</p>\n\n\t\t<template #actions>\n\t\t\t<NcButton :disabled=\"busy\" data-testid=\"cn-action-dialog-cancel\" @click=\"close\">\n\t\t\t\t{{ done ? t('nextcloud-vue', 'Close') : t('nextcloud-vue', 'Cancel') }}\n\t\t\t</NcButton>\n\t\t\t<NcButton v-if=\"!done\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"!canConfirm\"\n\t\t\t\tdata-testid=\"cn-action-dialog-confirm\"\n\t\t\t\t@click=\"confirm\">\n\t\t\t\t<template v-if=\"confirmConfig.icon\" #icon>\n\t\t\t\t\t<CnIcon :name=\"confirmConfig.icon\" :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ text(confirmConfig.label) || t('nextcloud-vue', 'Confirm') }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</CnDialog>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport { emit } from '@nextcloud/event-bus'\nimport { translate as t } from '@nextcloud/l10n'\nimport { generateUrl } from '@nextcloud/router'\nimport { NcButton, NcNoteCard, NcTextArea } from '@nextcloud/vue'\nimport CheckCircle from 'vue-material-design-icons/CheckCircle.vue'\nimport CircleOutline from 'vue-material-design-icons/CircleOutline.vue'\nimport HelpCircleOutline from 'vue-material-design-icons/HelpCircleOutline.vue'\nimport { fetchEndpointSource, interpolateUrlTokens } from '../../composables/useEndpointSource.js'\nimport { fillTemplate } from '../../utils/fillTemplate.js'\nimport { readPath } from '../../utils/readPath.js'\nimport { CnDialog } from '../CnDialog/index.js'\nimport { CnIcon } from '../CnIcon/index.js'\n\n/** The page refresh channel the built-in widgets listen on. */\nconst PAGE_REFRESH = 'cn:page:refresh'\n\n/** Gives each dialog's reason field its own id. */\nlet reasonSeq = 0\n\n/**\n * CnActionDialog — the generic \"summary, checklist, reason, confirm\" dialog\n * for an act on a record, configured from the manifest (an `open-modal`\n * action's props), so an app does not hand-build each one. dossiq's archive\n * dialog (board DqArchiveren) is the first: the case, what its case type\n * keeps, a readiness checklist read from an endpoint, a reason, a read-only\n * note and Archive it.\n *\n * `config`:\n * - `title`, `eyebrow`, `subtitle`, `doneText`: texts, through the host translate.\n * - `summary`: `{ source?, title, meta?, badge?, icon? }`: templates filled from\n * the record (`source` an endpointSource to read it from, else `object`).\n * - `facts`: `[{ title?, items: [{ label, value }] }]`, `value` a template.\n * - `checklist`: `{ title?, source, itemsPath?, labels?, required? }`: items\n * `{ id, met, label?, detail? }` read from `source`; `labels[id]` gives an\n * item's `{ label, detail?, unmetDetail? }`; the ids in `required` must be\n * met before the action can run. `met: null` reads as unknown.\n * - `permission`: `{ source, allowedPath, reasonPath? }`: the action runs only\n * while `allowedPath` reads true; `reasonPath` says why not.\n * - `reason`: `{ label?, hint?, required?, field? }`: a text area; required by\n * default; sent as `field` (default `reason`).\n * - `note`: `{ variant?, title?, text }`: a read-only note.\n * - `confirm`: `{ label, icon?, request?: { method?, url, body? }, action? }`.\n * `request` posts itself (`body` templates filled with the record and\n * `{reason}`); `action` dispatches a manifest action through the page.\n *\n * Tokens (`@objectId`, `@object.<field>`) resolve in every url.\n */\nexport default {\n\tname: 'CnActionDialog',\n\n\tcomponents: { CheckCircle, CircleOutline, CnDialog, CnIcon, HelpCircleOutline, NcButton, NcNoteCard, NcTextArea },\n\n\tinject: {\n\t\t/** The host app's translate (CnAppRoot `cnTranslate`). */\n\t\tcnTranslate: { default: () => (key) => key },\n\t\t/** The page's pre-bound action dispatcher (CnPageRenderer), for `confirm.action`. */\n\t\tcnDispatchAction: { default: null },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The dialog's configuration (see the component docs).\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tconfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The record's id, for the `@objectId` token. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * The record, when the host has it: the summary and facts read it.\n\t\t *\n\t\t * @type {object|null}\n\t\t */\n\t\tobject: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: ['close', 'done'],\n\n\tdata() {\n\t\treturn {\n\t\t\trecord: this.object,\n\t\t\titems: [],\n\t\t\tchecklistError: '',\n\t\t\tallowed: true,\n\t\t\treason: '',\n\t\t\tbusy: false,\n\t\t\trefusal: '',\n\t\t\tdone: false,\n\t\t\treasonId: `cn-action-dialog-reason-${++reasonSeq}`,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/** @return {object} The token context. */\n\t\ttokenCtx() {\n\t\t\treturn { objectId: this.objectId, object: this.record || {} }\n\t\t},\n\n\t\t/** @return {object} The confirm config. */\n\t\tconfirmConfig() {\n\t\t\treturn this.config.confirm && typeof this.config.confirm === 'object' ? this.config.confirm : {}\n\t\t},\n\n\t\t/**\n\t\t * The summary row, or null without one or before the record is known.\n\t\t *\n\t\t * @spec openspec/changes/action-dialog/specs/action-dialog/spec.md#requirement-a-manifest-configures-an-action-dialog\n\t\t * @return {{title: string, meta: string, badge: string}|null}\n\t\t */\n\t\tsummary() {\n\t\t\tconst def = this.config.summary\n\t\t\tif (!def || !this.record) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst title = this.fill(def.title)\n\t\t\treturn title ? { title, meta: this.fill(def.meta), badge: this.fill(def.badge) } : null\n\t\t},\n\n\t\t/** @return {Array<{title: string, facts: Array<{label: string, value: string}>}>} The fact groups. */\n\t\tfactSections() {\n\t\t\tif (!Array.isArray(this.config.facts) || !this.record) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst empty = t('nextcloud-vue', 'Not set')\n\t\t\treturn this.config.facts.map((section) => ({\n\t\t\t\ttitle: this.text(section.title),\n\t\t\t\tfacts: (Array.isArray(section.items) ? section.items : []).map((fact) => ({ label: this.text(fact.label), value: this.fill(fact.value) || empty })),\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * The checklist rows: label and detail from `labels` by id, else the item's own.\n\t\t *\n\t\t * @spec openspec/changes/action-dialog/specs/action-dialog/spec.md#requirement-a-manifest-configures-an-action-dialog\n\t\t * @return {Array<{id: string, met: (boolean|null), label: string, detail: string}>}\n\t\t */\n\t\tchecklist() {\n\t\t\tconst labels = (this.config.checklist && this.config.checklist.labels) || {}\n\t\t\treturn this.items.map((item) => {\n\t\t\t\tconst met = item.met === null || item.met === undefined ? null : item.met === true\n\t\t\t\tconst own = labels[item.id] || {}\n\t\t\t\tconst detail = met === false && own.unmetDetail ? own.unmetDetail : (own.detail || item.detail || '')\n\t\t\t\treturn {\n\t\t\t\t\tid: String(item.id),\n\t\t\t\t\tmet,\n\t\t\t\t\tlabel: this.fill(own.label || item.label || String(item.id), item),\n\t\t\t\t\tdetail: met === null && !item.detail ? t('nextcloud-vue', 'Could not be read') : this.fill(detail, item),\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/** @return {boolean} Whether every required item is met. */\n\t\trequiredMet() {\n\t\t\tconst required = (this.config.checklist && Array.isArray(this.config.checklist.required)) ? this.config.checklist.required.map(String) : []\n\t\t\treturn required.every((id) => this.items.some((item) => String(item.id) === id && item.met === true))\n\t\t},\n\n\t\t/** @return {boolean} Whether a reason is asked and needed. */\n\t\treasonNeeded() {\n\t\t\treturn Boolean(this.config.reason) && this.config.reason.required !== false\n\t\t},\n\n\t\t/** @return {string} The reason field's label. */\n\t\treasonLabel() {\n\t\t\treturn this.text(this.config.reason && this.config.reason.label) || t('nextcloud-vue', 'Reason')\n\t\t},\n\n\t\t/** @return {string} The note's NcNoteCard type. */\n\t\tnoteType() {\n\t\t\tconst variant = this.config.note && this.config.note.variant\n\t\t\treturn ['info', 'warning', 'error', 'success'].includes(variant) ? variant : 'info'\n\t\t},\n\n\t\t/**\n\t\t * Whether the action may run: allowed, required items met, a reason\n\t\t * when one is needed, and nothing in flight.\n\t\t *\n\t\t * @spec openspec/changes/action-dialog/specs/action-dialog/spec.md#requirement-a-manifest-configures-an-action-dialog\n\t\t * @return {boolean}\n\t\t */\n\t\tcanConfirm() {\n\t\t\treturn !this.busy && this.allowed && this.requiredMet && (!this.reasonNeeded || this.reason.trim() !== '')\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\tawait Promise.all([this.loadRecord(), this.loadChecklist(), this.loadPermission()])\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * A config text through the host translate, '' for anything else.\n\t\t *\n\t\t * @param {unknown} value The text.\n\t\t * @return {string}\n\t\t */\n\t\ttext(value) {\n\t\t\treturn typeof value === 'string' && value !== '' ? this.cnTranslate(value) : ''\n\t\t},\n\n\t\t/**\n\t\t * A template filled from a row (the record by default), translated first.\n\t\t *\n\t\t * @param {unknown} template The template.\n\t\t * @param {object} [row] The row.\n\t\t * @return {string}\n\t\t */\n\t\tfill(template, row) {\n\t\t\tif (typeof template !== 'string' || template === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn fillTemplate(this.cnTranslate(template), row || this.record || {}).trim()\n\t\t},\n\n\t\t/**\n\t\t * Read an endpoint, fresh.\n\t\t *\n\t\t * @param {object} source An endpointSource block.\n\t\t * @return {Promise<unknown>}\n\t\t */\n\t\tread(source) {\n\t\t\treturn fetchEndpointSource(source, this.tokenCtx, { fresh: true })\n\t\t},\n\n\t\t/** @return {Promise<void>} */\n\t\tasync loadRecord() {\n\t\t\tconst source = this.config.summary && this.config.summary.source\n\t\t\tif (!source || !source.url) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst data = await this.read(source)\n\t\t\t\tthis.record = data && typeof data === 'object' ? data : this.record\n\t\t\t} catch {\n\t\t\t\t// The summary stays empty; the checklist and the action still work.\n\t\t\t}\n\t\t},\n\n\t\t/** @return {Promise<void>} */\n\t\tasync loadChecklist() {\n\t\t\tconst def = this.config.checklist\n\t\t\tif (!def || !def.source || !def.source.url) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst data = await this.read(def.source)\n\t\t\t\tconst list = def.itemsPath ? readPath(data, def.itemsPath) : data\n\t\t\t\tthis.items = Array.isArray(list) ? list.filter((item) => item && item.id !== undefined) : []\n\t\t\t} catch {\n\t\t\t\tthis.items = []\n\t\t\t\tthis.checklistError = t('nextcloud-vue', 'Whether this is ready could not be read.')\n\t\t\t}\n\t\t},\n\n\t\t/** @return {Promise<void>} */\n\t\tasync loadPermission() {\n\t\t\tconst def = this.config.permission\n\t\t\tif (!def || !def.source || !def.source.url) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst data = await this.read(def.source)\n\t\t\t\tthis.allowed = readPath(data, def.allowedPath || 'allowed') === true\n\t\t\t\tthis.refusal = this.allowed || !def.reasonPath ? '' : String(readPath(data, def.reasonPath) || '')\n\t\t\t} catch {\n\t\t\t\tthis.allowed = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Run the action once: post `confirm.request`, or dispatch\n\t\t * `confirm.action`, then show the done text and refresh the page.\n\t\t *\n\t\t * @spec openspec/changes/action-dialog/specs/action-dialog/spec.md#requirement-a-manifest-configures-an-action-dialog\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync confirm() {\n\t\t\tif (!this.canConfirm) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.busy = true\n\t\t\tthis.refusal = ''\n\t\t\tconst reason = this.reason.trim()\n\t\t\ttry {\n\t\t\t\tconst request = this.confirmConfig.request\n\t\t\t\tif (request && request.url) {\n\t\t\t\t\tconst url = interpolateUrlTokens(request.url, this.tokenCtx)\n\t\t\t\t\tconst body = {}\n\t\t\t\t\tfor (const [key, value] of Object.entries(request.body || {})) {\n\t\t\t\t\t\tbody[key] = typeof value === 'string' ? fillTemplate(value, { ...(this.record || {}), reason }) : value\n\t\t\t\t\t}\n\t\t\t\t\tif (this.config.reason) {\n\t\t\t\t\t\tbody[this.config.reason.field || 'reason'] = reason\n\t\t\t\t\t}\n\t\t\t\t\tconst method = String(request.method || 'POST').toLowerCase()\n\t\t\t\t\tawait axios[['post', 'put', 'patch', 'delete'].includes(method) ? method : 'post'](/^https?:\\/\\//i.test(url) ? url : generateUrl(url), body)\n\t\t\t\t} else if (this.confirmConfig.action && typeof this.cnDispatchAction === 'function') {\n\t\t\t\t\tawait this.cnDispatchAction({ ...this.confirmConfig.action, args: [...(this.confirmConfig.action.args || []), { reason }] })\n\t\t\t\t}\n\t\t\t\tthis.done = true\n\t\t\t\temit(PAGE_REFRESH, {})\n\t\t\t\t/** @event done The action ran. Payload: `{ reason }`. */\n\t\t\t\tthis.$emit('done', { reason })\n\t\t\t} catch (failure) {\n\t\t\t\tconst data = failure && failure.response && failure.response.data\n\t\t\t\tthis.refusal = String((data && (data.message || data.error)) || t('nextcloud-vue', 'The action could not be completed.'))\n\t\t\t} finally {\n\t\t\t\tthis.busy = false\n\t\t\t}\n\t\t},\n\n\t\t/** Close the dialog, unless the action is running. */\n\t\tclose() {\n\t\t\tif (this.busy) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t/** @event close The dialog was closed. */\n\t\t\tthis.$emit('close')\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-action-dialog {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 16px;\n}\n\n.cn-action-dialog__summary {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 10px;\n\tpadding: 12px 14px;\n\tborder: 1px solid var(--color-border);\n\tborder-radius: var(--border-radius-large, 8px);\n}\n\n.cn-action-dialog__summary-text {\n\tdisplay: flex;\n\tflex: 1 1 auto;\n\tflex-direction: column;\n\tmin-width: 0;\n}\n\n.cn-action-dialog__badge {\n\tpadding: 3px 10px;\n\tborder-radius: 12px;\n\tbackground: var(--color-background-dark);\n\tfont-size: 13px;\n\tfont-weight: 600;\n\twhite-space: nowrap;\n}\n\n.cn-action-dialog__title {\n\tmargin: 0 0 8px;\n\tfont-size: 15px;\n\tfont-weight: 700;\n}\n\n.cn-action-dialog__facts {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n\tgap: 8px 16px;\n\tmargin: 0;\n}\n\n.cn-action-dialog__facts dt {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 13px;\n}\n\n.cn-action-dialog__facts dd {\n\tmargin: 0;\n}\n\n.cn-action-dialog__checks {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n\tmargin: 0;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.cn-action-dialog__check {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tgap: 8px;\n}\n\n.cn-action-dialog__check-icon {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-action-dialog__check-icon--met {\n\tcolor: var(--color-success-text, var(--color-success));\n}\n\n.cn-action-dialog__muted {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 14px;\n}\n\n.cn-action-dialog__field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n}\n\n.cn-action-dialog__error {\n\tmargin: 0;\n\tcolor: var(--color-error-text, var(--color-error));\n}\n</style>\n"],"names":["_createVNode","_createBlock","_createTextVNode","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_Fragment","_renderList"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { NcNoteCard } from '@nextcloud/vue';
3
3
  import Alert from 'vue-material-design-icons/Alert.vue';
4
4
  import AlertCircle from 'vue-material-design-icons/AlertCircle.vue';
5
5
  import LockOutline from 'vue-material-design-icons/LockOutline.vue';
6
- import PencilOutlineIcon from 'vue-material-design-icons/PencilOutline.vue';
6
+ import PencilOutline from 'vue-material-design-icons/PencilOutline.vue';
7
7
  import Plus from 'vue-material-design-icons/Plus.vue';
8
8
  import __sfc_main from './CnPropertyValueCell.vue.js';
9
9
  import { normalizeLook } from '../../composables/useLook.js';
@@ -15,7 +15,7 @@ var script = {
15
15
  NcNoteCard,
16
16
  AlertCircle,
17
17
  Alert,
18
- PencilOutline: PencilOutlineIcon,
18
+ PencilOutline,
19
19
  LockOutline,
20
20
  Plus,
21
21
  CnPropertyValueCell: __sfc_main,
@@ -1 +1 @@
1
- {"version":3,"file":"CnPropertiesTab.vue2.js","sources":["../../../../src/components/CnAdvancedFormDialog/CnPropertiesTab.vue"],"sourcesContent":["<template>\n\t<div>\n\t\t<NcNoteCard\n\t\t\tv-if=\"hasUnsavedChanges\"\n\t\t\tvariant=\"warning\"\n\t\t\tclass=\"cn-advanced-form-dialog__unsaved-note\">\n\t\t\t{{ t('nextcloud-vue', 'You have unsaved changes. Save to apply them.') }}\n\t\t</NcNoteCard>\n\t\t<div class=\"cn-advanced-form-dialog__table-container\">\n\t\t\t<table class=\"cn-advanced-form-dialog__table\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr class=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Property') }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Value') }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tv-if=\"hasRowActionsSlot\"\n\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-col-actions\">\n\t\t\t\t\t\t\t<slot name=\"row-actions-header\" />\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr\n\t\t\t\t\t\tv-for=\"([key, value]) in objectProperties\"\n\t\t\t\t\t\t:key=\"key\"\n\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-row\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'cn-advanced-form-dialog__table-row--selected': selectedProperty === key,\n\t\t\t\t\t\t\t'cn-advanced-form-dialog__table-row--edited': isValueChanged(key),\n\t\t\t\t\t\t\t'cn-advanced-form-dialog__table-row--non-editable': !isPropertyEditable(key, resolvedValue(key, value)),\n\t\t\t\t\t\t\t[getPropertyValidationClass(key, value)]: validationDisplay === 'indicator',\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t@click=\"handleRowClick(key, $event)\">\n\t\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-constrained cn-advanced-form-dialog__prop-cell\"\n\t\t\t\t\t\t\t:style=\"getPropCellStyle(key, value)\">\n\t\t\t\t\t\t\t<div class=\"cn-advanced-form-dialog__prop-cell-content\">\n\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\tv-if=\"validationDisplay === 'indicator' && getPropertyValidationState(key, resolvedValue(key, value)) === 'invalid'\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--error\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getPropertyErrorMessage(key, resolvedValue(key, value))\" />\n\t\t\t\t\t\t\t\t<PencilOutline\n\t\t\t\t\t\t\t\t\tv-else-if=\"validationDisplay === 'indicator' && isValueChanged(key) && getPropertyValidationState(key, resolvedValue(key, value)) !== 'invalid'\"\n\t\t\t\t\t\t\t\t\t:title=\"t('nextcloud-vue', 'This field has been changed — save to apply')\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--edited\"\n\t\t\t\t\t\t\t\t\t:size=\"16\" />\n\t\t\t\t\t\t\t\t<Alert\n\t\t\t\t\t\t\t\t\tv-else-if=\"validationDisplay === 'indicator' && getPropertyValidationState(key, resolvedValue(key, value)) === 'warning'\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--warning\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getPropertyWarningMessage(key, resolvedValue(key, value))\" />\n\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\tv-else-if=\"validationDisplay === 'indicator' && getPropertyValidationState(key, resolvedValue(key, value)) === 'new'\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--new\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getPropertyNewMessage(key)\" />\n\t\t\t\t\t\t\t\t<LockOutline\n\t\t\t\t\t\t\t\t\tv-else-if=\"!isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--lock\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getEditabilityWarning(key, resolvedValue(key, value)) || ''\" />\n\t\t\t\t\t\t\t\t<span :title=\"getPropertyTooltip(key)\">{{ getPropertyDisplayName(key) }}</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"isRequired(key) && !isBoardLook\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__required-indicator\"\n\t\t\t\t\t\t\t\t\t:title=\"t('nextcloud-vue', 'Required')\"\n\t\t\t\t\t\t\t\t\taria-label=\"required\">*</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"isBoardLook && !isRequired(key)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__optional\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-property-optional\">({{ optionalLabel }})</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"isImmutableHint(key)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__immutable-badge\"\n\t\t\t\t\t\t\t\t\t:title=\"t('nextcloud-vue', 'This value can be set on creation but cannot be changed afterwards.')\">\n\t\t\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Set once') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-expanded cn-advanced-form-dialog__value-cell\">\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\tname=\"value-cell\"\n\t\t\t\t\t\t\t\t:propertyKey=\"key\"\n\t\t\t\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t\t\t\t:resolvedValue=\"resolvedValue(key, value)\"\n\t\t\t\t\t\t\t\t:isEditing=\"selectedProperty === key\"\n\t\t\t\t\t\t\t\t:isEditable=\"isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t:displayName=\"getPropertyDisplayName(key)\"\n\t\t\t\t\t\t\t\t:schemaProp=\"schema && schema.properties && schema.properties[key]\"\n\t\t\t\t\t\t\t\t:editabilityWarning=\"getPropertyEditabilityWarning(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t:onUpdate=\"(v) => onPropertyValueUpdate(key, v)\">\n\t\t\t\t\t\t\t\t<CnPropertyValueCell\n\t\t\t\t\t\t\t\t\t:ref=\"'cell-' + key\"\n\t\t\t\t\t\t\t\t\t:propertyKey=\"key\"\n\t\t\t\t\t\t\t\t\t:schema=\"schema\"\n\t\t\t\t\t\t\t\t\t:value=\"resolvedValue(key, value)\"\n\t\t\t\t\t\t\t\t\t:isEditable=\"isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t\t:isEditing=\"selectedProperty === key\"\n\t\t\t\t\t\t\t\t\t:displayName=\"getPropertyDisplayName(key)\"\n\t\t\t\t\t\t\t\t\t:editabilityWarning=\"getPropertyEditabilityWarning(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t\t:widget=\"(propertyOverrides[key] && propertyOverrides[key].widget) || null\"\n\t\t\t\t\t\t\t\t\t:selectOptions=\"(propertyOverrides[key] && propertyOverrides[key].selectOptions) || null\"\n\t\t\t\t\t\t\t\t\t:selectMultiple=\"propertyOverrides[key] ? propertyOverrides[key].selectMultiple !== false : true\"\n\t\t\t\t\t\t\t\t\t:textareaRows=\"(propertyOverrides[key] && propertyOverrides[key].textareaRows) || 4\"\n\t\t\t\t\t\t\t\t\t@update:value=\"onPropertyValueUpdate(key, $event)\" />\n\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td\n\t\t\t\t\t\t\tv-if=\"hasRowActionsSlot\"\n\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-col-actions\"\n\t\t\t\t\t\t\t@click.stop>\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\tname=\"row-actions\"\n\t\t\t\t\t\t\t\t:propertyKey=\"key\"\n\t\t\t\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t\t\t\t:resolvedValue=\"resolvedValue(key, value)\"\n\t\t\t\t\t\t\t\t:isEditable=\"isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t:isSchemaProperty=\"!!(schema && schema.properties && Object.prototype.hasOwnProperty.call(schema.properties, key))\" />\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcNoteCard } from '@nextcloud/vue'\nimport Alert from 'vue-material-design-icons/Alert.vue'\nimport AlertCircle from 'vue-material-design-icons/AlertCircle.vue'\nimport LockOutline from 'vue-material-design-icons/LockOutline.vue'\nimport PencilOutline from 'vue-material-design-icons/PencilOutline.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport CnPropertyValueCell from './CnPropertyValueCell.vue'\nimport { normalizeLook } from '../../composables/useLook.js'\n\nexport default {\n\tname: 'CnPropertiesTab',\n\n\tcomponents: {\n\t\tNcNoteCard,\n\t\tAlertCircle,\n\t\tAlert,\n\t\tPencilOutline,\n\t\tLockOutline,\n\t\tPlus,\n\t\tCnPropertyValueCell,\n\t},\n\n\tinject: {\n\t\t/**\n\t\t * Consumer translation function, provided by CnAppRoot as\n\t\t * `cnTranslate: this.translate` (bound to the host app's id). The\n\t\t * property display name comes from the schema property title, authored\n\t\t * in English as the canonical source; the visible label is resolved\n\t\t * through this function so it follows the user's language. Defaults to\n\t\t * identity when used standalone (no CnAppRoot ancestor).\n\t\t */\n\t\tcnTranslate: { default: () => (key) => key },\n\n\t\t/** The look the dialog is drawn in (provided by CnAdvancedFormDialog, else CnAppRoot). */\n\t\tcnLook: { default: 'nextcloud' },\n\t},\n\n\tprops: {\n\t\t/** The word shown as \"(optional)\" after an optional property in the board look. */\n\t\toptionalLabel: { type: String, default: () => t('nextcloud-vue', 'optional') },\n\n\t\t/** JSON Schema definition for the object */\n\t\tschema: { type: Object, default: null },\n\t\t/** The object instance being created or edited */\n\t\titem: { type: Object, default: null },\n\t\t/** Current form data object */\n\t\tformData: { type: Object, default: () => ({}) },\n\t\t/** Key of the currently selected property */\n\t\tselectedProperty: { type: String, default: null },\n\t\t/** JSON Schema types that can be edited inline */\n\t\teditableTypes: { type: Array, default: () => ['string', 'number', 'integer', 'boolean', 'array', 'object'] },\n\t\t/** How to display validation results: \"indicator\" or \"none\" */\n\t\tvalidationDisplay: { type: String, default: 'indicator' },\n\t\t/** Field keys to hide from the form */\n\t\texcludeFields: { type: Array, default: () => [] },\n\t\t/** When set, only these field keys are shown */\n\t\tincludeFields: { type: Array, default: null },\n\t\t/**\n\t\t * Whether the property's value is fixed by the schema (`const`) and\n\t\t * should be hide-able via the show/hide toggle. Note: `immutable` /\n\t\t * `readOnly` are NOT considered constant — they're set on creation\n\t\t * and locked afterward, but should remain visible in the form.\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\t/**\n\t\t * When false (default), properties whose schema entry has `const`\n\t\t * set are filtered out of the list — the user can't change them so\n\t\t * they only add noise. Set to `true` to render them anyway (e.g. for\n\t\t * debugging or admin views). `immutable` / `readOnly` properties are\n\t\t * always rendered regardless of this flag; they're just non-editable\n\t\t * once they have a value.\n\t\t */\n\t\tshowConstantProperties: { type: Boolean, default: false },\n\t\t/**\n\t\t * Per-property overrides forwarded to CnPropertyValueCell. Keyed by property key.\n\t\t * Each entry may contain: `{ widget, selectOptions, selectMultiple, textareaRows }`.\n\t\t */\n\t\tpropertyOverrides: { type: Object, default: () => ({}) },\n\t\t/**\n\t\t * Override the left-edge indicator color on the property-name cell.\n\t\t * When null (default) the CSS default is used (var(--color-primary)).\n\t\t * Pass \"none\" to remove the indicator and let the per-row validation\n\t\t * colors (green/yellow/red) on the <tr> show through instead.\n\t\t * Any other CSS color string is applied directly.\n\t\t */\n\t\tpropCellColor: { type: String, default: null },\n\t\t/** Whether this is a new item (create mode) */\n\t\tisNew: { type: Boolean, default: false },\n\t},\n\n\temits: ['update:property-value', 'update:selected-property'],\n\n\tcomputed: {\n\t\t/** @return {boolean} Whether the board look is active (no asterisk, \"(optional)\" instead). */\n\t\tisBoardLook() {\n\t\t\tconst injected = this.cnLook && typeof this.cnLook === 'object' && 'value' in this.cnLook ? this.cnLook.value : this.cnLook\n\t\t\treturn normalizeLook(injected) === 'board'\n\t\t},\n\n\t\thasUnsavedChanges() {\n\t\t\tif (this.isNew) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn Object.keys(this.formData).some((key) => this.isValueChanged(key))\n\t\t},\n\n\t\tpropCellStyle() {\n\t\t\tif (this.propCellColor === null) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (this.propCellColor === 'none') {\n\t\t\t\treturn { boxShadow: 'none' }\n\t\t\t}\n\t\t\treturn { boxShadow: `inset 3px 0 0 0 ${this.propCellColor}` }\n\t\t},\n\n\t\tobjectProperties() {\n\t\t\tconst schemaProps = this.schema?.properties || {}\n\t\t\tconst obj = this.item || {}\n\t\t\tconst exclude = this.excludeFields || []\n\t\t\tconst include = this.includeFields\n\t\t\tconst filterKey = (k) => {\n\t\t\t\tif (k === '@self' || k === 'id') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (exclude.includes(k)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (include && !include.includes(k)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (schemaProps[k]?.hideOnForm === true) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst existing = Object.entries(obj).filter(([k]) => filterKey(k))\n\t\t\tconst missing = []\n\t\t\tfor (const [key, prop] of Object.entries(schemaProps)) {\n\t\t\t\tif (!filterKey(key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (!Object.hasOwn(obj, key)) {\n\t\t\t\t\tmissing.push([key, this.defaultForProperty(prop)])\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst all = [...existing, ...missing]\n\t\t\tconst filtered = this.showConstantProperties\n\t\t\t\t? all\n\t\t\t\t: all.filter(([key]) => !this.isConstantOrImmutableKey(key))\n\t\t\t// Sort: schema `order` ascending (0 first), unspecified last; preserve\n\t\t\t// schema/property declaration order as a stable tiebreaker.\n\t\t\tconst indexFor = (key) => {\n\t\t\t\tconst i = Object.keys(schemaProps).indexOf(key)\n\t\t\t\treturn i === -1 ? Number.MAX_SAFE_INTEGER : i\n\t\t\t}\n\t\t\tconst orderFor = (key) => {\n\t\t\t\tconst o = schemaProps[key]?.order\n\t\t\t\treturn typeof o === 'number' ? o : Number.MAX_SAFE_INTEGER\n\t\t\t}\n\t\t\treturn filtered\n\t\t\t\t.map(([k, v], i) => ({ k, v, order: orderFor(k), idx: indexFor(k), insertion: i }))\n\t\t\t\t.sort((a, b) => (a.order - b.order) || (a.idx - b.idx) || (a.insertion - b.insertion))\n\t\t\t\t.map(({ k, v }) => [k, v])\n\t\t},\n\n\t\t/**\n\t\t * True when at least one property in the (unfiltered) list is constant or immutable.\n\t\t * Useful for parents that want to render a show/hide-toggle button only when relevant.\n\t\t */\n\t\thasConstantOrImmutableProperties() {\n\t\t\tconst schemaProps = this.schema?.properties || {}\n\t\t\tconst obj = this.item || {}\n\t\t\tconst exclude = this.excludeFields || []\n\t\t\tconst include = this.includeFields\n\t\t\tconst keys = new Set([\n\t\t\t\t...Object.keys(obj),\n\t\t\t\t...Object.keys(schemaProps),\n\t\t\t])\n\t\t\tfor (const k of keys) {\n\t\t\t\tif (k === '@self' || k === 'id') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (exclude.includes(k)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (include && !include.includes(k)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (schemaProps[k]?.hideOnForm === true) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (this.isConstantOrImmutableKey(k)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\thasRowActionsSlot() {\n\t\t\treturn !!this.$slots['row-actions']\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tgetPropCellStyle(key, value) {\n\t\t\tif (this.validationDisplay !== 'indicator') {\n\t\t\t\treturn this.propCellStyle\n\t\t\t}\n\t\t\tconst resolvedVal = this.resolvedValue(key, value)\n\t\t\tconst state = this.getPropertyValidationState(key, resolvedVal)\n\t\t\tif (state === 'invalid') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-error)' }\n\t\t\t}\n\t\t\tif (this.isValueChanged(key)) {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-primary-element)' }\n\t\t\t}\n\t\t\tif (state === 'valid') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-success)' }\n\t\t\t}\n\t\t\tif (state === 'warning') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-warning)' }\n\t\t\t}\n\t\t\tif (state === 'new') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-new)' }\n\t\t\t}\n\t\t\treturn this.propCellStyle\n\t\t},\n\n\t\tisValueChanged(key) {\n\t\t\tif (this.formData[key] === undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst original = this.item ? this.item[key] : undefined\n\t\t\tconst current = this.formData[key]\n\t\t\tif (typeof current === 'object' || typeof original === 'object') {\n\t\t\t\treturn JSON.stringify(current) !== JSON.stringify(original)\n\t\t\t}\n\t\t\treturn current !== original\n\t\t},\n\n\t\t/**\n\t\t * The effective value for a key: formData override or the object's own value\n\t\t *\n\t\t * @param {string} key - The property key to look up\n\t\t * @param {unknown} objectValue - The fallback value from the object\n\t\t */\n\t\tresolvedValue(key, objectValue) {\n\t\t\treturn this.formData[key] !== undefined ? this.formData[key] : objectValue\n\t\t},\n\n\t\t/**\n\t\t * Initial display value for a schema property that doesn't yet exist on the\n\t\t * object. Honors `default` and `const` first, then falls back to the\n\t\t * type-appropriate empty value.\n\t\t *\n\t\t * @param {object} prop - The schema property entry.\n\t\t */\n\t\tdefaultForProperty(prop) {\n\t\t\tif (!prop) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (prop.default !== undefined) {\n\t\t\t\treturn prop.default\n\t\t\t}\n\t\t\tif (prop.const !== undefined) {\n\t\t\t\treturn prop.const\n\t\t\t}\n\t\t\tswitch (prop.type) {\n\t\t\t\tcase 'string': return ''\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'integer': return 0\n\t\t\t\tcase 'boolean': return false\n\t\t\t\tcase 'array': return []\n\t\t\t\tcase 'object': return {}\n\t\t\t\tdefault: return ''\n\t\t\t}\n\t\t},\n\n\t\tonPropertyValueUpdate(key, value) {\n\t\t\tthis.$emit('update:property-value', { key, value })\n\t\t},\n\n\t\t/**\n\t\t * Whether a property is marked required either via `schema.required: [...]`\n\t\t * (the JSON-Schema-canonical place) or via `prop.required: true` on the\n\t\t * property entry itself (a non-standard but commonly seen variant).\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\tisRequired(key) {\n\t\t\tif ((this.schema?.required || []).includes(key)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\treturn !!(prop && prop.required === true)\n\t\t},\n\n\t\t/**\n\t\t * Whether the property's value is fixed by the schema (`const`) and\n\t\t * should be hide-able via the show/hide toggle. Note: `immutable` /\n\t\t * `readOnly` are NOT considered constant — they're set on creation\n\t\t * and locked afterward, but should remain visible in the form.\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\t/**\n\t\t * True when an \"immutable\" / \"readOnly\" hint badge should be shown\n\t\t * for this property — i.e. the prop is settable on creation but\n\t\t * locks once persisted, AND it isn't already locked. Once locked the\n\t\t * lock icon takes over and the badge would be redundant.\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\tisImmutableHint(key) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (prop.const !== undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst lockOnce = prop.immutable === true || prop.readOnly === true\n\t\t\tif (!lockOnce) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.isPropertyEditable(key, null)\n\t\t},\n\n\t\tisConstantOrImmutableKey(key) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn prop.const !== undefined\n\t\t},\n\n\t\t// `value` is intentionally unused — kept in the signature for callers\n\t\t// that already pass it (slot consumers, the cell, the row click\n\t\t// handler). Editability is now driven by the persisted `item`.\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tisPropertyEditable(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (prop.const !== undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// `immutable` / `readOnly` mean \"settable on creation, locked\n\t\t\t// once persisted\". Use the persisted `item` (not the live value\n\t\t\t// the user is typing) as the source of truth — otherwise the\n\t\t\t// field would lock the moment the first character is entered.\n\t\t\tconst lockOnce = prop.immutable === true || prop.readOnly === true\n\t\t\tif (lockOnce) {\n\t\t\t\tconst persisted = this.item && this.item[key]\n\t\t\t\tif (persisted !== null && persisted !== undefined && persisted !== '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst type = prop.type || 'string'\n\t\t\treturn this.editableTypes.includes(type)\n\t\t},\n\n\t\tgetPropertyDisplayName(key) {\n\t\t\t// The property title is the English canonical source; resolve it\n\t\t\t// through the consumer's translation function for display.\n\t\t\treturn this.cnTranslate((this.schema?.properties?.[key]?.title) || key)\n\t\t},\n\n\t\tgetPropertyTooltip(key) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (prop?.description) {\n\t\t\t\tconst description = this.cnTranslate(prop.description)\n\t\t\t\tif (prop.title && prop.title !== key) {\n\t\t\t\t\treturn `${this.cnTranslate(prop.title)}: ${description}`\n\t\t\t\t}\n\t\t\t\treturn description\n\t\t\t}\n\t\t\treturn `Property: ${key}`\n\t\t},\n\n\t\tgetPropertyValidationClass(key, value) {\n\t\t\tconst state = this.getPropertyValidationState(key, value)\n\t\t\tswitch (state) {\n\t\t\t\tcase 'invalid': return 'cn-advanced-form-dialog__table-row--invalid'\n\t\t\t\tcase 'warning': return 'cn-advanced-form-dialog__table-row--warning'\n\t\t\t\tcase 'new': return 'cn-advanced-form-dialog__table-row--new'\n\t\t\t\tcase 'valid': return 'cn-advanced-form-dialog__table-row--valid'\n\t\t\t\tdefault: return ''\n\t\t\t}\n\t\t},\n\n\t\tgetPropertyValidationState(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tconst existsInObject = this.item ? Object.hasOwn(this.item, key) : false\n\t\t\tif (!prop) {\n\t\t\t\treturn 'warning'\n\t\t\t}\n\t\t\tif (!existsInObject) {\n\t\t\t\treturn 'new'\n\t\t\t}\n\t\t\tif (this.isValidPropertyValue(key, value, prop)) {\n\t\t\t\treturn 'valid'\n\t\t\t}\n\t\t\treturn 'invalid'\n\t\t},\n\n\t\tisValidPropertyValue(key, value, schemaProperty) {\n\t\t\tif (value === null || value === undefined || value === '') {\n\t\t\t\tconst required = (this.schema?.required || []).includes(key) || schemaProperty?.required\n\t\t\t\treturn !required\n\t\t\t}\n\t\t\tconst type = schemaProperty?.type || 'string'\n\t\t\tswitch (type) {\n\t\t\t\tcase 'string':\n\t\t\t\t\tif (typeof value !== 'string') {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.format === 'date-time' && !this.isValidDate(value)) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.format === 'email' && !this.isValidEmail(value)) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.format === 'uri' && !this.isValidUri(value)) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.const && value !== schemaProperty.const) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\tcase 'number':\n\t\t\t\t\treturn typeof value === 'number' && !Number.isNaN(value)\n\t\t\t\tcase 'boolean':\n\t\t\t\t\treturn typeof value === 'boolean'\n\t\t\t\tcase 'array':\n\t\t\t\t\treturn Array.isArray(value)\n\t\t\t\tcase 'object':\n\t\t\t\t\treturn typeof value === 'object' && value !== null && !Array.isArray(value)\n\t\t\t\tdefault:\n\t\t\t\t\treturn true\n\t\t\t}\n\t\t},\n\n\t\tgetPropertyErrorMessage(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn `Property '${key}' is not defined in the current schema. This property exists in the object but is not part of the schema definition.`\n\t\t\t}\n\t\t\tconst isRequired = (this.schema?.required || []).includes(key) || prop.required\n\t\t\tif ((value === null || value === undefined || value === '') && isRequired) {\n\t\t\t\treturn `Required property '${key}' is missing or empty.`\n\t\t\t}\n\t\t\tconst expectedType = prop.type\n\t\t\tconst actualType = Array.isArray(value) ? 'array' : typeof value\n\t\t\tif (expectedType && expectedType !== actualType) {\n\t\t\t\treturn `Property '${key}' should be ${expectedType} but is ${actualType}.`\n\t\t\t}\n\t\t\tif (prop.format === 'date-time' && !this.isValidDate(value)) {\n\t\t\t\treturn `Property '${key}' should be a valid date-time value.`\n\t\t\t}\n\t\t\tif (prop.format === 'email' && !this.isValidEmail(value)) {\n\t\t\t\treturn `Property '${key}' should be a valid email address.`\n\t\t\t}\n\t\t\tif (prop.format === 'uri' && !this.isValidUri(value)) {\n\t\t\t\treturn `Property '${key}' should be a valid URI.`\n\t\t\t}\n\t\t\tif (prop.const && value !== prop.const) {\n\t\t\t\treturn `Property '${key}' should be '${prop.const}' but is '${value}'.`\n\t\t\t}\n\t\t\treturn `Property '${key}' has an invalid value.`\n\t\t},\n\n\t\tgetPropertyWarningMessage(key, value) {\n\t\t\tconst displayValue = String(value).length > 100 ? String(value).slice(0, 100) + '…' : String(value)\n\t\t\treturn `Property '${key}' exists in the object but is not defined in the current schema. This might happen when property names are changed in the schema. Current value: '${displayValue}'.`\n\t\t},\n\n\t\tgetPropertyNewMessage(key) {\n\t\t\treturn `Property '${key}' is defined in the schema but doesn't have a value yet. Click to add a value.`\n\t\t},\n\n\t\tgetPropertyEditabilityWarning(key, value) {\n\t\t\tif (!this.isPropertyEditable(key, value)) {\n\t\t\t\treturn 'This property cannot be edited in the Properties tab. Use the Data tab to modify it.'\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tgetEditabilityWarning(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (prop?.const !== undefined) {\n\t\t\t\treturn `This property is constant and must always be '${prop.const}'. Const properties cannot be modified to maintain data integrity.`\n\t\t\t}\n\t\t\tif (prop?.immutable && (value !== null && value !== undefined && value !== '')) {\n\t\t\t\tconst displayValue = String(value).length > 100 ? String(value).slice(0, 100) + '…' : String(value)\n\t\t\t\treturn `This property is immutable and cannot be changed once it has a value. Current value: '${displayValue}'. Immutable properties preserve data consistency.`\n\t\t\t}\n\t\t\tif (!this.isPropertyEditable(key, value)) {\n\t\t\t\treturn this.getPropertyEditabilityWarning(key, value)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\thandleRowClick(key, event) {\n\t\t\tif (event.target.tagName === 'INPUT' || event.target.tagName === 'BUTTON' || event.target.closest('.cn-advanced-form-dialog__value-input-container')) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst value = this.resolvedValue(key, this.objectProperties.find(([k]) => k === key)?.[1])\n\t\t\tif (!this.isPropertyEditable(key, value)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (prop && !this.editableTypes.includes(prop.type || 'string')) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('update:selected-property', key)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst ref = this.$refs['cell-' + key]\n\t\t\t\tconst cell = ref && (Array.isArray(ref) ? ref[0] : ref)\n\t\t\t\tif (cell && cell.focus) {\n\t\t\t\t\tcell.focus()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tisValidDate(v) {\n\t\t\tif (!v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst d = new Date(v)\n\t\t\treturn d instanceof Date && !Number.isNaN(d.getTime())\n\t\t},\n\n\t\tisValidEmail(v) {\n\t\t\tif (!v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Forbid '.' inside each domain segment to remove the\n\t\t\t// `[^\\s@]+\\.[^\\s@]+` ambiguity that triggers ReDoS\n\t\t\t// (codeql js/redos). Multi-label domains still match via the\n\t\t\t// repeated `(\\.[^\\s@.]+)+` group.\n\t\t\treturn /^[^\\s@]+@[^\\s@.]+(\\.[^\\s@.]+)+$/.test(v)\n\t\t},\n\n\t\tisValidUri(v) {\n\t\t\tif (!v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn !!new URL(v)\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-advanced-form-dialog__table-container {\n\tbackground: var(--color-main-background);\n\tborder-radius: var(--border-radius);\n\tbox-shadow: 0 2px 4px var(--color-box-shadow);\n\tborder: 1px solid var(--color-border);\n\tmargin-bottom: calc(5 * var(--default-grid-baseline));\n}\n\n.cn-advanced-form-dialog__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table th,\n.cn-advanced-form-dialog__table td {\n\tpadding: calc(3 * var(--default-grid-baseline));\n\ttext-align: left;\n\tborder-bottom: 1px solid var(--color-border);\n\tvertical-align: middle;\n}\n\n/* Selected (editing) row: align the constrained label cell to the top of the\n value cell so tall inputs (textarea, JSON editor) do not visually overflow\n into the next row. */\n.cn-advanced-form-dialog__table-row--selected td {\n\tvertical-align: top;\n}\n\n.cn-advanced-form-dialog__table th {\n\tbackground: var(--color-background-dark);\n\tfont-weight: 500;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__table-row {\n\tcursor: pointer;\n\ttransition: background-color 0.2s ease;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table-row:hover {\n\tbackground-color: var(--color-background-hover);\n}\n\n/* Active/selected row: light blue; ensure it wins over validation state classes */\n.cn-advanced-form-dialog__table-row.cn-advanced-form-dialog__table-row--selected,\n.cn-advanced-form-dialog__table-row--selected:hover {\n\tbackground-color: var(--color-primary-light);\n\tbox-shadow: inset 3px 0 0 0 var(--color-primary);\n}\n\n.cn-advanced-form-dialog__table-row--non-editable {\n\tbackground-color: var(--color-background-dark);\n\tcursor: not-allowed;\n\topacity: 0.7;\n}\n\n.cn-advanced-form-dialog__table-row--non-editable * {\n\tcursor: not-allowed !important;\n}\n\n.cn-advanced-form-dialog__table-row--invalid {\n\tbackground-color: var(--color-error-light);\n}\n\n.cn-advanced-form-dialog__table-row--warning {\n\tbackground-color: var(--color-warning-light);\n}\n\n.cn-advanced-form-dialog__table-col-constrained {\n\twidth: 150px;\n\tmax-width: 150px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__table-col-expanded {\n\twidth: auto;\n\tmin-width: 200px;\n}\n\n.cn-advanced-form-dialog__table-col-actions {\n\twidth: 56px;\n\ttext-align: right;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__prop-cell {\n\twidth: 30%;\n\tfont-weight: 600;\n}\n\n.cn-advanced-form-dialog__value-cell {\n\twidth: 70%;\n\toverflow-wrap: anywhere;\n\tborder-radius: 4px;\n}\n\n.cn-advanced-form-dialog__value-cell > * {\n\tmax-width: 100%;\n}\n\n.cn-advanced-form-dialog__prop-cell-content {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n\n.cn-advanced-form-dialog__validation-icon {\n\tflex-shrink: 0;\n}\n\n.cn-advanced-form-dialog__validation-icon--error {\n\tcolor: var(--color-error);\n}\n\n.cn-advanced-form-dialog__validation-icon--edited {\n\tcolor: var(--color-primary-element);\n}\n\n.cn-advanced-form-dialog__validation-icon--warning {\n\tcolor: var(--color-warning);\n}\n\n.cn-advanced-form-dialog__validation-icon--lock {\n\tcolor: var(--color-text-lighter);\n}\n\n.cn-advanced-form-dialog__validation-icon--new {\n\tcolor: var(--color-new);\n}\n\n.cn-advanced-form-dialog__optional {\n\tfont-weight: 400;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__required-indicator {\n\tcolor: var(--color-error-text);\n\tfont-weight: bold;\n\tcursor: help;\n}\n\n.cn-advanced-form-dialog__immutable-badge {\n\tdisplay: inline-block;\n\tpadding: 1px 6px;\n\tborder-radius: 10px;\n\tbackground: var(--color-background-dark);\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 0.75em;\n\tfont-weight: 500;\n\ttext-transform: uppercase;\n\tletter-spacing: 0.02em;\n\tcursor: help;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__unsaved-note {\n\tmargin-bottom: calc(3 * var(--default-grid-baseline));\n}\n</style>\n"],"names":["PencilOutline","CnPropertyValueCell","t"],"mappings":"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"}
1
+ {"version":3,"file":"CnPropertiesTab.vue2.js","sources":["../../../../src/components/CnAdvancedFormDialog/CnPropertiesTab.vue"],"sourcesContent":["<template>\n\t<div>\n\t\t<NcNoteCard\n\t\t\tv-if=\"hasUnsavedChanges\"\n\t\t\tvariant=\"warning\"\n\t\t\tclass=\"cn-advanced-form-dialog__unsaved-note\">\n\t\t\t{{ t('nextcloud-vue', 'You have unsaved changes. Save to apply them.') }}\n\t\t</NcNoteCard>\n\t\t<div class=\"cn-advanced-form-dialog__table-container\">\n\t\t\t<table class=\"cn-advanced-form-dialog__table\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr class=\"cn-advanced-form-dialog__table-row\">\n\t\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-constrained\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Property') }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th class=\"cn-advanced-form-dialog__table-col-expanded\">\n\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Value') }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tv-if=\"hasRowActionsSlot\"\n\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-col-actions\">\n\t\t\t\t\t\t\t<slot name=\"row-actions-header\" />\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr\n\t\t\t\t\t\tv-for=\"([key, value]) in objectProperties\"\n\t\t\t\t\t\t:key=\"key\"\n\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-row\"\n\t\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t\t'cn-advanced-form-dialog__table-row--selected': selectedProperty === key,\n\t\t\t\t\t\t\t'cn-advanced-form-dialog__table-row--edited': isValueChanged(key),\n\t\t\t\t\t\t\t'cn-advanced-form-dialog__table-row--non-editable': !isPropertyEditable(key, resolvedValue(key, value)),\n\t\t\t\t\t\t\t[getPropertyValidationClass(key, value)]: validationDisplay === 'indicator',\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t@click=\"handleRowClick(key, $event)\">\n\t\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-constrained cn-advanced-form-dialog__prop-cell\"\n\t\t\t\t\t\t\t:style=\"getPropCellStyle(key, value)\">\n\t\t\t\t\t\t\t<div class=\"cn-advanced-form-dialog__prop-cell-content\">\n\t\t\t\t\t\t\t\t<AlertCircle\n\t\t\t\t\t\t\t\t\tv-if=\"validationDisplay === 'indicator' && getPropertyValidationState(key, resolvedValue(key, value)) === 'invalid'\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--error\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getPropertyErrorMessage(key, resolvedValue(key, value))\" />\n\t\t\t\t\t\t\t\t<PencilOutline\n\t\t\t\t\t\t\t\t\tv-else-if=\"validationDisplay === 'indicator' && isValueChanged(key) && getPropertyValidationState(key, resolvedValue(key, value)) !== 'invalid'\"\n\t\t\t\t\t\t\t\t\t:title=\"t('nextcloud-vue', 'This field has been changed — save to apply')\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--edited\"\n\t\t\t\t\t\t\t\t\t:size=\"16\" />\n\t\t\t\t\t\t\t\t<Alert\n\t\t\t\t\t\t\t\t\tv-else-if=\"validationDisplay === 'indicator' && getPropertyValidationState(key, resolvedValue(key, value)) === 'warning'\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--warning\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getPropertyWarningMessage(key, resolvedValue(key, value))\" />\n\t\t\t\t\t\t\t\t<Plus\n\t\t\t\t\t\t\t\t\tv-else-if=\"validationDisplay === 'indicator' && getPropertyValidationState(key, resolvedValue(key, value)) === 'new'\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--new\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getPropertyNewMessage(key)\" />\n\t\t\t\t\t\t\t\t<LockOutline\n\t\t\t\t\t\t\t\t\tv-else-if=\"!isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__validation-icon cn-advanced-form-dialog__validation-icon--lock\"\n\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t:title=\"getEditabilityWarning(key, resolvedValue(key, value)) || ''\" />\n\t\t\t\t\t\t\t\t<span :title=\"getPropertyTooltip(key)\">{{ getPropertyDisplayName(key) }}</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"isRequired(key) && !isBoardLook\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__required-indicator\"\n\t\t\t\t\t\t\t\t\t:title=\"t('nextcloud-vue', 'Required')\"\n\t\t\t\t\t\t\t\t\taria-label=\"required\">*</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"isBoardLook && !isRequired(key)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__optional\"\n\t\t\t\t\t\t\t\t\tdata-testid=\"cn-property-optional\">({{ optionalLabel }})</span>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"isImmutableHint(key)\"\n\t\t\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__immutable-badge\"\n\t\t\t\t\t\t\t\t\t:title=\"t('nextcloud-vue', 'This value can be set on creation but cannot be changed afterwards.')\">\n\t\t\t\t\t\t\t\t\t{{ t('nextcloud-vue', 'Set once') }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td class=\"cn-advanced-form-dialog__table-col-expanded cn-advanced-form-dialog__value-cell\">\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\tname=\"value-cell\"\n\t\t\t\t\t\t\t\t:propertyKey=\"key\"\n\t\t\t\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t\t\t\t:resolvedValue=\"resolvedValue(key, value)\"\n\t\t\t\t\t\t\t\t:isEditing=\"selectedProperty === key\"\n\t\t\t\t\t\t\t\t:isEditable=\"isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t:displayName=\"getPropertyDisplayName(key)\"\n\t\t\t\t\t\t\t\t:schemaProp=\"schema && schema.properties && schema.properties[key]\"\n\t\t\t\t\t\t\t\t:editabilityWarning=\"getPropertyEditabilityWarning(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t:onUpdate=\"(v) => onPropertyValueUpdate(key, v)\">\n\t\t\t\t\t\t\t\t<CnPropertyValueCell\n\t\t\t\t\t\t\t\t\t:ref=\"'cell-' + key\"\n\t\t\t\t\t\t\t\t\t:propertyKey=\"key\"\n\t\t\t\t\t\t\t\t\t:schema=\"schema\"\n\t\t\t\t\t\t\t\t\t:value=\"resolvedValue(key, value)\"\n\t\t\t\t\t\t\t\t\t:isEditable=\"isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t\t:isEditing=\"selectedProperty === key\"\n\t\t\t\t\t\t\t\t\t:displayName=\"getPropertyDisplayName(key)\"\n\t\t\t\t\t\t\t\t\t:editabilityWarning=\"getPropertyEditabilityWarning(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t\t:widget=\"(propertyOverrides[key] && propertyOverrides[key].widget) || null\"\n\t\t\t\t\t\t\t\t\t:selectOptions=\"(propertyOverrides[key] && propertyOverrides[key].selectOptions) || null\"\n\t\t\t\t\t\t\t\t\t:selectMultiple=\"propertyOverrides[key] ? propertyOverrides[key].selectMultiple !== false : true\"\n\t\t\t\t\t\t\t\t\t:textareaRows=\"(propertyOverrides[key] && propertyOverrides[key].textareaRows) || 4\"\n\t\t\t\t\t\t\t\t\t@update:value=\"onPropertyValueUpdate(key, $event)\" />\n\t\t\t\t\t\t\t</slot>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td\n\t\t\t\t\t\t\tv-if=\"hasRowActionsSlot\"\n\t\t\t\t\t\t\tclass=\"cn-advanced-form-dialog__table-col-actions\"\n\t\t\t\t\t\t\t@click.stop>\n\t\t\t\t\t\t\t<slot\n\t\t\t\t\t\t\t\tname=\"row-actions\"\n\t\t\t\t\t\t\t\t:propertyKey=\"key\"\n\t\t\t\t\t\t\t\t:value=\"value\"\n\t\t\t\t\t\t\t\t:resolvedValue=\"resolvedValue(key, value)\"\n\t\t\t\t\t\t\t\t:isEditable=\"isPropertyEditable(key, resolvedValue(key, value))\"\n\t\t\t\t\t\t\t\t:isSchemaProperty=\"!!(schema && schema.properties && Object.prototype.hasOwnProperty.call(schema.properties, key))\" />\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcNoteCard } from '@nextcloud/vue'\nimport Alert from 'vue-material-design-icons/Alert.vue'\nimport AlertCircle from 'vue-material-design-icons/AlertCircle.vue'\nimport LockOutline from 'vue-material-design-icons/LockOutline.vue'\nimport PencilOutline from 'vue-material-design-icons/PencilOutline.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport CnPropertyValueCell from './CnPropertyValueCell.vue'\nimport { normalizeLook } from '../../composables/useLook.js'\n\nexport default {\n\tname: 'CnPropertiesTab',\n\n\tcomponents: {\n\t\tNcNoteCard,\n\t\tAlertCircle,\n\t\tAlert,\n\t\tPencilOutline,\n\t\tLockOutline,\n\t\tPlus,\n\t\tCnPropertyValueCell,\n\t},\n\n\tinject: {\n\t\t/**\n\t\t * Consumer translation function, provided by CnAppRoot as\n\t\t * `cnTranslate: this.translate` (bound to the host app's id). The\n\t\t * property display name comes from the schema property title, authored\n\t\t * in English as the canonical source; the visible label is resolved\n\t\t * through this function so it follows the user's language. Defaults to\n\t\t * identity when used standalone (no CnAppRoot ancestor).\n\t\t */\n\t\tcnTranslate: { default: () => (key) => key },\n\n\t\t/** The look the dialog is drawn in (provided by CnAdvancedFormDialog, else CnAppRoot). */\n\t\tcnLook: { default: 'nextcloud' },\n\t},\n\n\tprops: {\n\t\t/** The word shown as \"(optional)\" after an optional property in the board look. */\n\t\toptionalLabel: { type: String, default: () => t('nextcloud-vue', 'optional') },\n\n\t\t/** JSON Schema definition for the object */\n\t\tschema: { type: Object, default: null },\n\t\t/** The object instance being created or edited */\n\t\titem: { type: Object, default: null },\n\t\t/** Current form data object */\n\t\tformData: { type: Object, default: () => ({}) },\n\t\t/** Key of the currently selected property */\n\t\tselectedProperty: { type: String, default: null },\n\t\t/** JSON Schema types that can be edited inline */\n\t\teditableTypes: { type: Array, default: () => ['string', 'number', 'integer', 'boolean', 'array', 'object'] },\n\t\t/** How to display validation results: \"indicator\" or \"none\" */\n\t\tvalidationDisplay: { type: String, default: 'indicator' },\n\t\t/** Field keys to hide from the form */\n\t\texcludeFields: { type: Array, default: () => [] },\n\t\t/** When set, only these field keys are shown */\n\t\tincludeFields: { type: Array, default: null },\n\t\t/**\n\t\t * Whether the property's value is fixed by the schema (`const`) and\n\t\t * should be hide-able via the show/hide toggle. Note: `immutable` /\n\t\t * `readOnly` are NOT considered constant — they're set on creation\n\t\t * and locked afterward, but should remain visible in the form.\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\t/**\n\t\t * When false (default), properties whose schema entry has `const`\n\t\t * set are filtered out of the list — the user can't change them so\n\t\t * they only add noise. Set to `true` to render them anyway (e.g. for\n\t\t * debugging or admin views). `immutable` / `readOnly` properties are\n\t\t * always rendered regardless of this flag; they're just non-editable\n\t\t * once they have a value.\n\t\t */\n\t\tshowConstantProperties: { type: Boolean, default: false },\n\t\t/**\n\t\t * Per-property overrides forwarded to CnPropertyValueCell. Keyed by property key.\n\t\t * Each entry may contain: `{ widget, selectOptions, selectMultiple, textareaRows }`.\n\t\t */\n\t\tpropertyOverrides: { type: Object, default: () => ({}) },\n\t\t/**\n\t\t * Override the left-edge indicator color on the property-name cell.\n\t\t * When null (default) the CSS default is used (var(--color-primary)).\n\t\t * Pass \"none\" to remove the indicator and let the per-row validation\n\t\t * colors (green/yellow/red) on the <tr> show through instead.\n\t\t * Any other CSS color string is applied directly.\n\t\t */\n\t\tpropCellColor: { type: String, default: null },\n\t\t/** Whether this is a new item (create mode) */\n\t\tisNew: { type: Boolean, default: false },\n\t},\n\n\temits: ['update:property-value', 'update:selected-property'],\n\n\tcomputed: {\n\t\t/** @return {boolean} Whether the board look is active (no asterisk, \"(optional)\" instead). */\n\t\tisBoardLook() {\n\t\t\tconst injected = this.cnLook && typeof this.cnLook === 'object' && 'value' in this.cnLook ? this.cnLook.value : this.cnLook\n\t\t\treturn normalizeLook(injected) === 'board'\n\t\t},\n\n\t\thasUnsavedChanges() {\n\t\t\tif (this.isNew) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn Object.keys(this.formData).some((key) => this.isValueChanged(key))\n\t\t},\n\n\t\tpropCellStyle() {\n\t\t\tif (this.propCellColor === null) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tif (this.propCellColor === 'none') {\n\t\t\t\treturn { boxShadow: 'none' }\n\t\t\t}\n\t\t\treturn { boxShadow: `inset 3px 0 0 0 ${this.propCellColor}` }\n\t\t},\n\n\t\tobjectProperties() {\n\t\t\tconst schemaProps = this.schema?.properties || {}\n\t\t\tconst obj = this.item || {}\n\t\t\tconst exclude = this.excludeFields || []\n\t\t\tconst include = this.includeFields\n\t\t\tconst filterKey = (k) => {\n\t\t\t\tif (k === '@self' || k === 'id') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (exclude.includes(k)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (include && !include.includes(k)) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (schemaProps[k]?.hideOnForm === true) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst existing = Object.entries(obj).filter(([k]) => filterKey(k))\n\t\t\tconst missing = []\n\t\t\tfor (const [key, prop] of Object.entries(schemaProps)) {\n\t\t\t\tif (!filterKey(key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (!Object.hasOwn(obj, key)) {\n\t\t\t\t\tmissing.push([key, this.defaultForProperty(prop)])\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst all = [...existing, ...missing]\n\t\t\tconst filtered = this.showConstantProperties\n\t\t\t\t? all\n\t\t\t\t: all.filter(([key]) => !this.isConstantOrImmutableKey(key))\n\t\t\t// Sort: schema `order` ascending (0 first), unspecified last; preserve\n\t\t\t// schema/property declaration order as a stable tiebreaker.\n\t\t\tconst indexFor = (key) => {\n\t\t\t\tconst i = Object.keys(schemaProps).indexOf(key)\n\t\t\t\treturn i === -1 ? Number.MAX_SAFE_INTEGER : i\n\t\t\t}\n\t\t\tconst orderFor = (key) => {\n\t\t\t\tconst o = schemaProps[key]?.order\n\t\t\t\treturn typeof o === 'number' ? o : Number.MAX_SAFE_INTEGER\n\t\t\t}\n\t\t\treturn filtered\n\t\t\t\t.map(([k, v], i) => ({ k, v, order: orderFor(k), idx: indexFor(k), insertion: i }))\n\t\t\t\t.sort((a, b) => (a.order - b.order) || (a.idx - b.idx) || (a.insertion - b.insertion))\n\t\t\t\t.map(({ k, v }) => [k, v])\n\t\t},\n\n\t\t/**\n\t\t * True when at least one property in the (unfiltered) list is constant or immutable.\n\t\t * Useful for parents that want to render a show/hide-toggle button only when relevant.\n\t\t */\n\t\thasConstantOrImmutableProperties() {\n\t\t\tconst schemaProps = this.schema?.properties || {}\n\t\t\tconst obj = this.item || {}\n\t\t\tconst exclude = this.excludeFields || []\n\t\t\tconst include = this.includeFields\n\t\t\tconst keys = new Set([\n\t\t\t\t...Object.keys(obj),\n\t\t\t\t...Object.keys(schemaProps),\n\t\t\t])\n\t\t\tfor (const k of keys) {\n\t\t\t\tif (k === '@self' || k === 'id') {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (exclude.includes(k)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (include && !include.includes(k)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (schemaProps[k]?.hideOnForm === true) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tif (this.isConstantOrImmutableKey(k)) {\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\n\t\thasRowActionsSlot() {\n\t\t\treturn !!this.$slots['row-actions']\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tgetPropCellStyle(key, value) {\n\t\t\tif (this.validationDisplay !== 'indicator') {\n\t\t\t\treturn this.propCellStyle\n\t\t\t}\n\t\t\tconst resolvedVal = this.resolvedValue(key, value)\n\t\t\tconst state = this.getPropertyValidationState(key, resolvedVal)\n\t\t\tif (state === 'invalid') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-error)' }\n\t\t\t}\n\t\t\tif (this.isValueChanged(key)) {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-primary-element)' }\n\t\t\t}\n\t\t\tif (state === 'valid') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-success)' }\n\t\t\t}\n\t\t\tif (state === 'warning') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-warning)' }\n\t\t\t}\n\t\t\tif (state === 'new') {\n\t\t\t\treturn { boxShadow: 'inset 3px 0 0 0 var(--color-new)' }\n\t\t\t}\n\t\t\treturn this.propCellStyle\n\t\t},\n\n\t\tisValueChanged(key) {\n\t\t\tif (this.formData[key] === undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst original = this.item ? this.item[key] : undefined\n\t\t\tconst current = this.formData[key]\n\t\t\tif (typeof current === 'object' || typeof original === 'object') {\n\t\t\t\treturn JSON.stringify(current) !== JSON.stringify(original)\n\t\t\t}\n\t\t\treturn current !== original\n\t\t},\n\n\t\t/**\n\t\t * The effective value for a key: formData override or the object's own value\n\t\t *\n\t\t * @param {string} key - The property key to look up\n\t\t * @param {unknown} objectValue - The fallback value from the object\n\t\t */\n\t\tresolvedValue(key, objectValue) {\n\t\t\treturn this.formData[key] !== undefined ? this.formData[key] : objectValue\n\t\t},\n\n\t\t/**\n\t\t * Initial display value for a schema property that doesn't yet exist on the\n\t\t * object. Honors `default` and `const` first, then falls back to the\n\t\t * type-appropriate empty value.\n\t\t *\n\t\t * @param {object} prop - The schema property entry.\n\t\t */\n\t\tdefaultForProperty(prop) {\n\t\t\tif (!prop) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (prop.default !== undefined) {\n\t\t\t\treturn prop.default\n\t\t\t}\n\t\t\tif (prop.const !== undefined) {\n\t\t\t\treturn prop.const\n\t\t\t}\n\t\t\tswitch (prop.type) {\n\t\t\t\tcase 'string': return ''\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'integer': return 0\n\t\t\t\tcase 'boolean': return false\n\t\t\t\tcase 'array': return []\n\t\t\t\tcase 'object': return {}\n\t\t\t\tdefault: return ''\n\t\t\t}\n\t\t},\n\n\t\tonPropertyValueUpdate(key, value) {\n\t\t\tthis.$emit('update:property-value', { key, value })\n\t\t},\n\n\t\t/**\n\t\t * Whether a property is marked required either via `schema.required: [...]`\n\t\t * (the JSON-Schema-canonical place) or via `prop.required: true` on the\n\t\t * property entry itself (a non-standard but commonly seen variant).\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\tisRequired(key) {\n\t\t\tif ((this.schema?.required || []).includes(key)) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\treturn !!(prop && prop.required === true)\n\t\t},\n\n\t\t/**\n\t\t * Whether the property's value is fixed by the schema (`const`) and\n\t\t * should be hide-able via the show/hide toggle. Note: `immutable` /\n\t\t * `readOnly` are NOT considered constant — they're set on creation\n\t\t * and locked afterward, but should remain visible in the form.\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\t/**\n\t\t * True when an \"immutable\" / \"readOnly\" hint badge should be shown\n\t\t * for this property — i.e. the prop is settable on creation but\n\t\t * locks once persisted, AND it isn't already locked. Once locked the\n\t\t * lock icon takes over and the badge would be redundant.\n\t\t *\n\t\t * @param {string} key - Property key.\n\t\t * @return {boolean}\n\t\t */\n\t\tisImmutableHint(key) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (prop.const !== undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst lockOnce = prop.immutable === true || prop.readOnly === true\n\t\t\tif (!lockOnce) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn this.isPropertyEditable(key, null)\n\t\t},\n\n\t\tisConstantOrImmutableKey(key) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn prop.const !== undefined\n\t\t},\n\n\t\t// `value` is intentionally unused — kept in the signature for callers\n\t\t// that already pass it (slot consumers, the cell, the row click\n\t\t// handler). Editability is now driven by the persisted `item`.\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tisPropertyEditable(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\tif (prop.const !== undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// `immutable` / `readOnly` mean \"settable on creation, locked\n\t\t\t// once persisted\". Use the persisted `item` (not the live value\n\t\t\t// the user is typing) as the source of truth — otherwise the\n\t\t\t// field would lock the moment the first character is entered.\n\t\t\tconst lockOnce = prop.immutable === true || prop.readOnly === true\n\t\t\tif (lockOnce) {\n\t\t\t\tconst persisted = this.item && this.item[key]\n\t\t\t\tif (persisted !== null && persisted !== undefined && persisted !== '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst type = prop.type || 'string'\n\t\t\treturn this.editableTypes.includes(type)\n\t\t},\n\n\t\tgetPropertyDisplayName(key) {\n\t\t\t// The property title is the English canonical source; resolve it\n\t\t\t// through the consumer's translation function for display.\n\t\t\treturn this.cnTranslate((this.schema?.properties?.[key]?.title) || key)\n\t\t},\n\n\t\tgetPropertyTooltip(key) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (prop?.description) {\n\t\t\t\tconst description = this.cnTranslate(prop.description)\n\t\t\t\tif (prop.title && prop.title !== key) {\n\t\t\t\t\treturn `${this.cnTranslate(prop.title)}: ${description}`\n\t\t\t\t}\n\t\t\t\treturn description\n\t\t\t}\n\t\t\treturn `Property: ${key}`\n\t\t},\n\n\t\tgetPropertyValidationClass(key, value) {\n\t\t\tconst state = this.getPropertyValidationState(key, value)\n\t\t\tswitch (state) {\n\t\t\t\tcase 'invalid': return 'cn-advanced-form-dialog__table-row--invalid'\n\t\t\t\tcase 'warning': return 'cn-advanced-form-dialog__table-row--warning'\n\t\t\t\tcase 'new': return 'cn-advanced-form-dialog__table-row--new'\n\t\t\t\tcase 'valid': return 'cn-advanced-form-dialog__table-row--valid'\n\t\t\t\tdefault: return ''\n\t\t\t}\n\t\t},\n\n\t\tgetPropertyValidationState(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tconst existsInObject = this.item ? Object.hasOwn(this.item, key) : false\n\t\t\tif (!prop) {\n\t\t\t\treturn 'warning'\n\t\t\t}\n\t\t\tif (!existsInObject) {\n\t\t\t\treturn 'new'\n\t\t\t}\n\t\t\tif (this.isValidPropertyValue(key, value, prop)) {\n\t\t\t\treturn 'valid'\n\t\t\t}\n\t\t\treturn 'invalid'\n\t\t},\n\n\t\tisValidPropertyValue(key, value, schemaProperty) {\n\t\t\tif (value === null || value === undefined || value === '') {\n\t\t\t\tconst required = (this.schema?.required || []).includes(key) || schemaProperty?.required\n\t\t\t\treturn !required\n\t\t\t}\n\t\t\tconst type = schemaProperty?.type || 'string'\n\t\t\tswitch (type) {\n\t\t\t\tcase 'string':\n\t\t\t\t\tif (typeof value !== 'string') {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.format === 'date-time' && !this.isValidDate(value)) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.format === 'email' && !this.isValidEmail(value)) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.format === 'uri' && !this.isValidUri(value)) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\tif (schemaProperty?.const && value !== schemaProperty.const) {\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\tcase 'number':\n\t\t\t\t\treturn typeof value === 'number' && !Number.isNaN(value)\n\t\t\t\tcase 'boolean':\n\t\t\t\t\treturn typeof value === 'boolean'\n\t\t\t\tcase 'array':\n\t\t\t\t\treturn Array.isArray(value)\n\t\t\t\tcase 'object':\n\t\t\t\t\treturn typeof value === 'object' && value !== null && !Array.isArray(value)\n\t\t\t\tdefault:\n\t\t\t\t\treturn true\n\t\t\t}\n\t\t},\n\n\t\tgetPropertyErrorMessage(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (!prop) {\n\t\t\t\treturn `Property '${key}' is not defined in the current schema. This property exists in the object but is not part of the schema definition.`\n\t\t\t}\n\t\t\tconst isRequired = (this.schema?.required || []).includes(key) || prop.required\n\t\t\tif ((value === null || value === undefined || value === '') && isRequired) {\n\t\t\t\treturn `Required property '${key}' is missing or empty.`\n\t\t\t}\n\t\t\tconst expectedType = prop.type\n\t\t\tconst actualType = Array.isArray(value) ? 'array' : typeof value\n\t\t\tif (expectedType && expectedType !== actualType) {\n\t\t\t\treturn `Property '${key}' should be ${expectedType} but is ${actualType}.`\n\t\t\t}\n\t\t\tif (prop.format === 'date-time' && !this.isValidDate(value)) {\n\t\t\t\treturn `Property '${key}' should be a valid date-time value.`\n\t\t\t}\n\t\t\tif (prop.format === 'email' && !this.isValidEmail(value)) {\n\t\t\t\treturn `Property '${key}' should be a valid email address.`\n\t\t\t}\n\t\t\tif (prop.format === 'uri' && !this.isValidUri(value)) {\n\t\t\t\treturn `Property '${key}' should be a valid URI.`\n\t\t\t}\n\t\t\tif (prop.const && value !== prop.const) {\n\t\t\t\treturn `Property '${key}' should be '${prop.const}' but is '${value}'.`\n\t\t\t}\n\t\t\treturn `Property '${key}' has an invalid value.`\n\t\t},\n\n\t\tgetPropertyWarningMessage(key, value) {\n\t\t\tconst displayValue = String(value).length > 100 ? String(value).slice(0, 100) + '…' : String(value)\n\t\t\treturn `Property '${key}' exists in the object but is not defined in the current schema. This might happen when property names are changed in the schema. Current value: '${displayValue}'.`\n\t\t},\n\n\t\tgetPropertyNewMessage(key) {\n\t\t\treturn `Property '${key}' is defined in the schema but doesn't have a value yet. Click to add a value.`\n\t\t},\n\n\t\tgetPropertyEditabilityWarning(key, value) {\n\t\t\tif (!this.isPropertyEditable(key, value)) {\n\t\t\t\treturn 'This property cannot be edited in the Properties tab. Use the Data tab to modify it.'\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\tgetEditabilityWarning(key, value) {\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (prop?.const !== undefined) {\n\t\t\t\treturn `This property is constant and must always be '${prop.const}'. Const properties cannot be modified to maintain data integrity.`\n\t\t\t}\n\t\t\tif (prop?.immutable && (value !== null && value !== undefined && value !== '')) {\n\t\t\t\tconst displayValue = String(value).length > 100 ? String(value).slice(0, 100) + '…' : String(value)\n\t\t\t\treturn `This property is immutable and cannot be changed once it has a value. Current value: '${displayValue}'. Immutable properties preserve data consistency.`\n\t\t\t}\n\t\t\tif (!this.isPropertyEditable(key, value)) {\n\t\t\t\treturn this.getPropertyEditabilityWarning(key, value)\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\n\t\thandleRowClick(key, event) {\n\t\t\tif (event.target.tagName === 'INPUT' || event.target.tagName === 'BUTTON' || event.target.closest('.cn-advanced-form-dialog__value-input-container')) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst value = this.resolvedValue(key, this.objectProperties.find(([k]) => k === key)?.[1])\n\t\t\tif (!this.isPropertyEditable(key, value)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst prop = this.schema?.properties?.[key]\n\t\t\tif (prop && !this.editableTypes.includes(prop.type || 'string')) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.$emit('update:selected-property', key)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tconst ref = this.$refs['cell-' + key]\n\t\t\t\tconst cell = ref && (Array.isArray(ref) ? ref[0] : ref)\n\t\t\t\tif (cell && cell.focus) {\n\t\t\t\t\tcell.focus()\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tisValidDate(v) {\n\t\t\tif (!v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tconst d = new Date(v)\n\t\t\treturn d instanceof Date && !Number.isNaN(d.getTime())\n\t\t},\n\n\t\tisValidEmail(v) {\n\t\t\tif (!v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Forbid '.' inside each domain segment to remove the\n\t\t\t// `[^\\s@]+\\.[^\\s@]+` ambiguity that triggers ReDoS\n\t\t\t// (codeql js/redos). Multi-label domains still match via the\n\t\t\t// repeated `(\\.[^\\s@.]+)+` group.\n\t\t\treturn /^[^\\s@]+@[^\\s@.]+(\\.[^\\s@.]+)+$/.test(v)\n\t\t},\n\n\t\tisValidUri(v) {\n\t\t\tif (!v) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\ttry {\n\t\t\t\treturn !!new URL(v)\n\t\t\t} catch {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-advanced-form-dialog__table-container {\n\tbackground: var(--color-main-background);\n\tborder-radius: var(--border-radius);\n\tbox-shadow: 0 2px 4px var(--color-box-shadow);\n\tborder: 1px solid var(--color-border);\n\tmargin-bottom: calc(5 * var(--default-grid-baseline));\n}\n\n.cn-advanced-form-dialog__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table th,\n.cn-advanced-form-dialog__table td {\n\tpadding: calc(3 * var(--default-grid-baseline));\n\ttext-align: left;\n\tborder-bottom: 1px solid var(--color-border);\n\tvertical-align: middle;\n}\n\n/* Selected (editing) row: align the constrained label cell to the top of the\n value cell so tall inputs (textarea, JSON editor) do not visually overflow\n into the next row. */\n.cn-advanced-form-dialog__table-row--selected td {\n\tvertical-align: top;\n}\n\n.cn-advanced-form-dialog__table th {\n\tbackground: var(--color-background-dark);\n\tfont-weight: 500;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__table-row {\n\tcursor: pointer;\n\ttransition: background-color 0.2s ease;\n\tbackground-color: var(--color-main-background);\n}\n\n.cn-advanced-form-dialog__table-row:hover {\n\tbackground-color: var(--color-background-hover);\n}\n\n/* Active/selected row: light blue; ensure it wins over validation state classes */\n.cn-advanced-form-dialog__table-row.cn-advanced-form-dialog__table-row--selected,\n.cn-advanced-form-dialog__table-row--selected:hover {\n\tbackground-color: var(--color-primary-light);\n\tbox-shadow: inset 3px 0 0 0 var(--color-primary);\n}\n\n.cn-advanced-form-dialog__table-row--non-editable {\n\tbackground-color: var(--color-background-dark);\n\tcursor: not-allowed;\n\topacity: 0.7;\n}\n\n.cn-advanced-form-dialog__table-row--non-editable * {\n\tcursor: not-allowed !important;\n}\n\n.cn-advanced-form-dialog__table-row--invalid {\n\tbackground-color: var(--color-error-light);\n}\n\n.cn-advanced-form-dialog__table-row--warning {\n\tbackground-color: var(--color-warning-light);\n}\n\n.cn-advanced-form-dialog__table-col-constrained {\n\twidth: 150px;\n\tmax-width: 150px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__table-col-expanded {\n\twidth: auto;\n\tmin-width: 200px;\n}\n\n.cn-advanced-form-dialog__table-col-actions {\n\twidth: 56px;\n\ttext-align: right;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__prop-cell {\n\twidth: 30%;\n\tfont-weight: 600;\n}\n\n.cn-advanced-form-dialog__value-cell {\n\twidth: 70%;\n\toverflow-wrap: anywhere;\n\tborder-radius: 4px;\n}\n\n.cn-advanced-form-dialog__value-cell > * {\n\tmax-width: 100%;\n}\n\n.cn-advanced-form-dialog__prop-cell-content {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n}\n\n.cn-advanced-form-dialog__validation-icon {\n\tflex-shrink: 0;\n}\n\n.cn-advanced-form-dialog__validation-icon--error {\n\tcolor: var(--color-error);\n}\n\n.cn-advanced-form-dialog__validation-icon--edited {\n\tcolor: var(--color-primary-element);\n}\n\n.cn-advanced-form-dialog__validation-icon--warning {\n\tcolor: var(--color-warning);\n}\n\n.cn-advanced-form-dialog__validation-icon--lock {\n\tcolor: var(--color-text-lighter);\n}\n\n.cn-advanced-form-dialog__validation-icon--new {\n\tcolor: var(--color-new);\n}\n\n.cn-advanced-form-dialog__optional {\n\tfont-weight: 400;\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-advanced-form-dialog__required-indicator {\n\tcolor: var(--color-error-text);\n\tfont-weight: bold;\n\tcursor: help;\n}\n\n.cn-advanced-form-dialog__immutable-badge {\n\tdisplay: inline-block;\n\tpadding: 1px 6px;\n\tborder-radius: 10px;\n\tbackground: var(--color-background-dark);\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 0.75em;\n\tfont-weight: 500;\n\ttext-transform: uppercase;\n\tletter-spacing: 0.02em;\n\tcursor: help;\n\twhite-space: nowrap;\n}\n\n.cn-advanced-form-dialog__unsaved-note {\n\tmargin-bottom: calc(3 * var(--default-grid-baseline));\n}\n</style>\n"],"names":["CnPropertyValueCell","t"],"mappings":"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"}