@conduction/nextcloud-vue 2.119.0 → 2.120.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue.js +9 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue.js.map +1 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue2.js +226 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue3.js +211 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue.js +9 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue.js.map +1 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue2.js +64 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue2.js.map +1 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue3.js +89 -0
- package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue3.js.map +1 -0
- package/dist/esm/components/CnIcon/semanticIcons.js +2 -2
- package/dist/esm/components/CnIcon/semanticIcons.js.map +1 -1
- package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue.js +9 -0
- package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue.js.map +1 -0
- package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue2.js +257 -0
- package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue2.js.map +1 -0
- package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue3.js +266 -0
- package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue3.js.map +1 -0
- package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue.js +1 -1
- package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue2.js +14 -7
- package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue.js +9 -0
- package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue2.js +278 -0
- package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue3.js +128 -0
- package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue.js +10 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue2.js +944 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue2.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue3.js +276 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue3.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue.js +9 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue2.js +354 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue2.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue3.js +392 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue3.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue.js +9 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue2.js +180 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue2.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue3.js +208 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue3.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue.js +9 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue2.js +244 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue2.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue3.js +76 -0
- package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue3.js.map +1 -0
- package/dist/esm/components/CnStateMachineEditor/stateMachineFields.js +290 -0
- package/dist/esm/components/CnStateMachineEditor/stateMachineFields.js.map +1 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +9 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js.map +1 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js +448 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +303 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -0
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +19 -2
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js +73 -62
- package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetGrid/builtInWidgets.js +6 -0
- package/dist/esm/components/CnWidgetGrid/builtInWidgets.js.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +166 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +166 -1
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +889 -101
- package/dist/esm/utils/aiFeatures.js +245 -0
- package/dist/esm/utils/aiFeatures.js.map +1 -0
- package/dist/esm/utils/aiSuggestionTracker.js +182 -0
- package/dist/esm/utils/aiSuggestionTracker.js.map +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/objectPermissions.js +552 -0
- package/dist/esm/utils/objectPermissions.js.map +1 -0
- package/dist/esm/utils/objectTranslations.js +180 -0
- package/dist/esm/utils/objectTranslations.js.map +1 -0
- package/dist/esm/utils/stateMachineValidation.js +254 -0
- package/dist/esm/utils/stateMachineValidation.js.map +1 -0
- package/dist/esm/utils/widgetDispatch.js +3 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +20052 -13138
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +889 -101
- package/l10n/en.json +166 -1
- package/l10n/nl.json +166 -1
- package/package.json +1 -1
- package/src/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue +416 -0
- package/src/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue +136 -0
- package/src/components/CnAiFeaturesWidget/__tests__/CnAiFeaturesWidget.spec.js +213 -0
- package/src/components/CnAiFeaturesWidget/index.js +14 -0
- package/src/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue +499 -0
- package/src/components/CnObjectPermissionsTab/__tests__/CnObjectPermissionsTab.spec.js +186 -0
- package/src/components/CnObjectPermissionsTab/index.js +13 -0
- package/src/components/CnObjectSidebar/CnObjectSidebar.vue +8 -1
- package/src/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue +424 -0
- package/src/components/CnObjectTranslationsWidget/__tests__/CnObjectTranslationsWidget.spec.js +189 -0
- package/src/components/CnObjectTranslationsWidget/index.js +13 -0
- package/src/components/CnStateMachineEditor/CnStateMachineEditor.vue +1332 -0
- package/src/components/CnStateMachineEditor/CnStateMachineFields.vue +791 -0
- package/src/components/CnStateMachineEditor/CnStateMachineNode.vue +442 -0
- package/src/components/CnStateMachineEditor/CnStateMachinePanel.vue +326 -0
- package/src/components/CnStateMachineEditor/index.js +8 -0
- package/src/components/CnStateMachineEditor/stateMachineFields.js +287 -0
- package/src/components/CnTimelineWidget/CnTimelineManage.vue +827 -0
- package/src/components/CnTimelineWidget/CnTimelineWidget.vue +29 -3
- package/src/components/CnWidgetGrid/builtInWidgets.js +6 -0
- package/src/components/index.js +4 -0
- package/src/index.js +5 -0
- package/src/utils/aiFeatures.js +241 -0
- package/src/utils/aiSuggestionTracker.js +178 -0
- package/src/utils/libraryWidgetKeys.js +1 -0
- package/src/utils/objectPermissions.js +548 -0
- package/src/utils/objectTranslations.js +176 -0
- package/src/utils/stateMachineValidation.js +250 -0
- package/src/utils/widgetDispatch.js +3 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnAiSuggestionDecision.vue2.js","sources":["../../../../src/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue"],"sourcesContent":["<!--\n SPDX-FileCopyrightText: 2026 Conduction B.V.\n SPDX-License-Identifier: EUPL-1.2\n\n What the person does with one AI suggestion: use it, adapt it, or reject it.\n Using it copies it to the clipboard. Emits `decide` with\n `{ userAction, actualValue? }` for the oversight trail.\n-->\n<template>\n\t<div class=\"cn-ai-suggestion-decision\" :data-testid=\"testid\">\n\t\t<p v-if=\"decided\"\n\t\t\tclass=\"cn-ai-suggestion-decision__done\"\n\t\t\trole=\"status\"\n\t\t\t:data-testid=\"`${testid}-done`\">\n\t\t\t{{ decided }}\n\t\t</p>\n\t\t<template v-else>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<label :for=\"`${testid}-draft`\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Your version') }}\n\t\t\t\t</label>\n\t\t\t\t<textarea :id=\"`${testid}-draft`\"\n\t\t\t\t\tv-model=\"draft\"\n\t\t\t\t\trows=\"4\"\n\t\t\t\t\t:data-testid=\"`${testid}-draft`\" />\n\t\t\t</template>\n\t\t\t<div class=\"cn-ai-suggestion-decision__actions\">\n\t\t\t\t<NcButton v-if=\"editing\"\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t:data-testid=\"`${testid}-use-adapted`\"\n\t\t\t\t\t@click=\"decide('modified')\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Use my version') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<NcButton variant=\"primary\"\n\t\t\t\t\t\t:data-testid=\"`${testid}-use`\"\n\t\t\t\t\t\t@click=\"decide('accepted')\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Use this') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :data-testid=\"`${testid}-adapt`\" @click=\"startEditing\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Adapt') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</template>\n\t\t\t\t<NcButton variant=\"tertiary\"\n\t\t\t\t\t:data-testid=\"`${testid}-reject`\"\n\t\t\t\t\t@click=\"decide('rejected')\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Reject') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\n\nexport default {\n\tname: 'CnAiSuggestionDecision',\n\tcomponents: { NcButton },\n\n\tprops: {\n\t\t/** The suggestion text. */\n\t\ttext: { type: String, required: true },\n\t\t/** Test id prefix, also the base of the draft field id. */\n\t\ttestid: { type: String, default: 'cn-ai-suggestion-decision' },\n\t},\n\n\temits: ['decide'],\n\n\tdata() {\n\t\treturn { editing: false, draft: '', decided: '' }\n\t},\n\n\twatch: {\n\t\ttext() {\n\t\t\tthis.editing = false\n\t\t\tthis.draft = ''\n\t\t\tthis.decided = ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tstartEditing() {\n\t\t\tthis.draft = this.text\n\t\t\tthis.editing = true\n\t\t},\n\n\t\t/**\n\t\t * Report the decision, and copy a used suggestion to the clipboard.\n\t\t *\n\t\t * @param {string} userAction accepted, modified or rejected.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync decide(userAction) {\n\t\t\tconst used = userAction === 'modified' ? this.draft : this.text\n\t\t\tthis.$emit('decide', { userAction, actualValue: userAction === 'modified' ? this.draft : undefined })\n\t\t\tthis.decided = {\n\t\t\t\taccepted: t('nextcloud-vue', 'Used. Copied to your clipboard.'),\n\t\t\t\tmodified: t('nextcloud-vue', 'Your version is used. Copied to your clipboard.'),\n\t\t\t\trejected: t('nextcloud-vue', 'Rejected.'),\n\t\t\t}[userAction]\n\t\t\tif (userAction === 'rejected') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(used)\n\t\t\t} catch {\n\t\t\t\tthis.decided = userAction === 'modified' ? t('nextcloud-vue', 'Your version is used.') : t('nextcloud-vue', 'Used.')\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-ai-suggestion-decision {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tmargin-top: 8px;\n}\n\n.cn-ai-suggestion-decision__actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 8px;\n}\n\n.cn-ai-suggestion-decision__done {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 0.85em;\n}\n</style>\n"],"names":["t"],"mappings":";;;AAyDA,aAAe;CACd,IAAI,EAAE,wBAAwB;AAC9B,CAAA,UAAU,EAAE,EAAE,UAAU;;AAExB,CAAA,KAAK,EAAE;;AAEN,EAAA,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;EAEtC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,2BAA0B,EAAG;EAC9D;;AAED,CAAA,KAAK,EAAE,CAAC,QAAQ,CAAC;;AAEjB,CAAA,IAAI,GAAG;AACN,EAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAG,EAAA;EAChD;;AAED,CAAA,KAAK,EAAE;AACN,EAAA,IAAI,GAAG;AACN,GAAA,IAAI,CAAC,OAAQ,GAAE,MAAI;GACnB,IAAI,CAAC,KAAM,GAAE,GAAC;AACd,GAAA,IAAI,CAAC,OAAQ,GAAE,GAAC;GAChB;EACD;;AAED,CAAA,OAAO,EAAE;KACRA,SAAC;;AAED,EAAA,YAAY,GAAG;AACd,GAAA,IAAI,CAAC,KAAM,GAAE,IAAI,CAAC,KAAG;AACrB,GAAA,IAAI,CAAC,OAAM,GAAI,KAAG;GAClB;;AAED;;AAEC;;;;EAID,MAAM,MAAM,CAAC,UAAU,EAAE;GACxB,MAAM,IAAK,GAAE,eAAe,UAAS,GAAI,IAAI,CAAC,KAAM,GAAE,IAAI,CAAC,KAAG;AAC9D,GAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,UAAW,KAAI,UAAS,GAAI,IAAI,CAAC,KAAI,GAAI,WAAW,EAAA;GACpG,IAAI,CAAC,OAAM,GAAI;IACd,QAAQ,EAAEA,SAAC,CAAC,eAAe,EAAE,iCAAiC,CAAC;AAC/D,IAAA,QAAQ,EAAEA,SAAC,CAAC,eAAe,EAAE,iDAAiD,CAAC;AAC/E,IAAA,QAAQ,EAAEA,SAAC,CAAC,eAAe,EAAE,WAAW,CAAC;IACzC,CAAC,UAAU,EAAA;GACZ,IAAI,UAAS,KAAM,UAAU,EAAE;IAC9B,MAAK;AACN,IAAA;AACA,GAAA,IAAI;AACH,IAAA,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAA;AACzC,IAAA,CAAE,MAAM;IACP,IAAI,CAAC,OAAM,GAAI,UAAS,KAAM,UAAS,GAAIA,SAAC,CAAC,eAAe,EAAE,uBAAuB,CAAE,GAAEA,SAAC,CAAC,eAAe,EAAE,OAAO,EAAA;AACpH,IAAA;GACA;EACD;AACF;;;;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, toDisplayString, Fragment, createElementVNode, withDirectives, vModelText, createCommentVNode, createBlock, withCtx, createTextVNode, createVNode } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = ["data-testid"];
|
|
4
|
+
const _hoisted_2 = ["data-testid"];
|
|
5
|
+
const _hoisted_3 = ["for"];
|
|
6
|
+
const _hoisted_4 = ["id", "data-testid"];
|
|
7
|
+
const _hoisted_5 = { class: "cn-ai-suggestion-decision__actions" };
|
|
8
|
+
|
|
9
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
10
|
+
const _component_NcButton = resolveComponent("NcButton");
|
|
11
|
+
|
|
12
|
+
return (openBlock(), createElementBlock("div", {
|
|
13
|
+
class: "cn-ai-suggestion-decision",
|
|
14
|
+
"data-testid": $props.testid
|
|
15
|
+
}, [
|
|
16
|
+
($data.decided)
|
|
17
|
+
? (openBlock(), createElementBlock("p", {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "cn-ai-suggestion-decision__done",
|
|
20
|
+
role: "status",
|
|
21
|
+
"data-testid": `${$props.testid}-done`
|
|
22
|
+
}, toDisplayString($data.decided), 9 /* TEXT, PROPS */, _hoisted_2))
|
|
23
|
+
: (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
24
|
+
($data.editing)
|
|
25
|
+
? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
26
|
+
createElementVNode("label", {
|
|
27
|
+
for: `${$props.testid}-draft`
|
|
28
|
+
}, toDisplayString($options.t('nextcloud-vue', 'Your version')), 9 /* TEXT, PROPS */, _hoisted_3),
|
|
29
|
+
withDirectives(createElementVNode("textarea", {
|
|
30
|
+
id: `${$props.testid}-draft`,
|
|
31
|
+
"onUpdate:modelValue": _cache[0] || (_cache[0] = $event => (($data.draft) = $event)),
|
|
32
|
+
rows: "4",
|
|
33
|
+
"data-testid": `${$props.testid}-draft`
|
|
34
|
+
}, null, 8 /* PROPS */, _hoisted_4), [
|
|
35
|
+
[vModelText, $data.draft]
|
|
36
|
+
])
|
|
37
|
+
], 64 /* STABLE_FRAGMENT */))
|
|
38
|
+
: createCommentVNode("v-if", true),
|
|
39
|
+
createElementVNode("div", _hoisted_5, [
|
|
40
|
+
($data.editing)
|
|
41
|
+
? (openBlock(), createBlock(_component_NcButton, {
|
|
42
|
+
key: 0,
|
|
43
|
+
variant: "primary",
|
|
44
|
+
"data-testid": `${$props.testid}-use-adapted`,
|
|
45
|
+
onClick: _cache[1] || (_cache[1] = $event => ($options.decide('modified')))
|
|
46
|
+
}, {
|
|
47
|
+
default: withCtx(() => [
|
|
48
|
+
createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Use my version')), 1 /* TEXT */)
|
|
49
|
+
]),
|
|
50
|
+
_: 1 /* STABLE */
|
|
51
|
+
}, 8 /* PROPS */, ["data-testid"]))
|
|
52
|
+
: (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
53
|
+
createVNode(_component_NcButton, {
|
|
54
|
+
variant: "primary",
|
|
55
|
+
"data-testid": `${$props.testid}-use`,
|
|
56
|
+
onClick: _cache[2] || (_cache[2] = $event => ($options.decide('accepted')))
|
|
57
|
+
}, {
|
|
58
|
+
default: withCtx(() => [
|
|
59
|
+
createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Use this')), 1 /* TEXT */)
|
|
60
|
+
]),
|
|
61
|
+
_: 1 /* STABLE */
|
|
62
|
+
}, 8 /* PROPS */, ["data-testid"]),
|
|
63
|
+
createVNode(_component_NcButton, {
|
|
64
|
+
"data-testid": `${$props.testid}-adapt`,
|
|
65
|
+
onClick: $options.startEditing
|
|
66
|
+
}, {
|
|
67
|
+
default: withCtx(() => [
|
|
68
|
+
createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Adapt')), 1 /* TEXT */)
|
|
69
|
+
]),
|
|
70
|
+
_: 1 /* STABLE */
|
|
71
|
+
}, 8 /* PROPS */, ["data-testid", "onClick"])
|
|
72
|
+
], 64 /* STABLE_FRAGMENT */)),
|
|
73
|
+
createVNode(_component_NcButton, {
|
|
74
|
+
variant: "tertiary",
|
|
75
|
+
"data-testid": `${$props.testid}-reject`,
|
|
76
|
+
onClick: _cache[3] || (_cache[3] = $event => ($options.decide('rejected')))
|
|
77
|
+
}, {
|
|
78
|
+
default: withCtx(() => [
|
|
79
|
+
createTextVNode(toDisplayString($options.t('nextcloud-vue', 'Reject')), 1 /* TEXT */)
|
|
80
|
+
]),
|
|
81
|
+
_: 1 /* STABLE */
|
|
82
|
+
}, 8 /* PROPS */, ["data-testid"])
|
|
83
|
+
])
|
|
84
|
+
], 64 /* STABLE_FRAGMENT */))
|
|
85
|
+
], 8 /* PROPS */, _hoisted_1))
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export { render };
|
|
89
|
+
//# sourceMappingURL=CnAiSuggestionDecision.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnAiSuggestionDecision.vue3.js","sources":["../../../../src/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue?vue&type=template&id=77db0b7a&lang.js"],"sourcesContent":["<!--\n SPDX-FileCopyrightText: 2026 Conduction B.V.\n SPDX-License-Identifier: EUPL-1.2\n\n What the person does with one AI suggestion: use it, adapt it, or reject it.\n Using it copies it to the clipboard. Emits `decide` with\n `{ userAction, actualValue? }` for the oversight trail.\n-->\n<template>\n\t<div class=\"cn-ai-suggestion-decision\" :data-testid=\"testid\">\n\t\t<p v-if=\"decided\"\n\t\t\tclass=\"cn-ai-suggestion-decision__done\"\n\t\t\trole=\"status\"\n\t\t\t:data-testid=\"`${testid}-done`\">\n\t\t\t{{ decided }}\n\t\t</p>\n\t\t<template v-else>\n\t\t\t<template v-if=\"editing\">\n\t\t\t\t<label :for=\"`${testid}-draft`\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Your version') }}\n\t\t\t\t</label>\n\t\t\t\t<textarea :id=\"`${testid}-draft`\"\n\t\t\t\t\tv-model=\"draft\"\n\t\t\t\t\trows=\"4\"\n\t\t\t\t\t:data-testid=\"`${testid}-draft`\" />\n\t\t\t</template>\n\t\t\t<div class=\"cn-ai-suggestion-decision__actions\">\n\t\t\t\t<NcButton v-if=\"editing\"\n\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t:data-testid=\"`${testid}-use-adapted`\"\n\t\t\t\t\t@click=\"decide('modified')\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Use my version') }}\n\t\t\t\t</NcButton>\n\t\t\t\t<template v-else>\n\t\t\t\t\t<NcButton variant=\"primary\"\n\t\t\t\t\t\t:data-testid=\"`${testid}-use`\"\n\t\t\t\t\t\t@click=\"decide('accepted')\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Use this') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton :data-testid=\"`${testid}-adapt`\" @click=\"startEditing\">\n\t\t\t\t\t\t{{ t('nextcloud-vue', 'Adapt') }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</template>\n\t\t\t\t<NcButton variant=\"tertiary\"\n\t\t\t\t\t:data-testid=\"`${testid}-reject`\"\n\t\t\t\t\t@click=\"decide('rejected')\">\n\t\t\t\t\t{{ t('nextcloud-vue', 'Reject') }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { translate as t } from '@nextcloud/l10n'\nimport { NcButton } from '@nextcloud/vue'\n\nexport default {\n\tname: 'CnAiSuggestionDecision',\n\tcomponents: { NcButton },\n\n\tprops: {\n\t\t/** The suggestion text. */\n\t\ttext: { type: String, required: true },\n\t\t/** Test id prefix, also the base of the draft field id. */\n\t\ttestid: { type: String, default: 'cn-ai-suggestion-decision' },\n\t},\n\n\temits: ['decide'],\n\n\tdata() {\n\t\treturn { editing: false, draft: '', decided: '' }\n\t},\n\n\twatch: {\n\t\ttext() {\n\t\t\tthis.editing = false\n\t\t\tthis.draft = ''\n\t\t\tthis.decided = ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\tstartEditing() {\n\t\t\tthis.draft = this.text\n\t\t\tthis.editing = true\n\t\t},\n\n\t\t/**\n\t\t * Report the decision, and copy a used suggestion to the clipboard.\n\t\t *\n\t\t * @param {string} userAction accepted, modified or rejected.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync decide(userAction) {\n\t\t\tconst used = userAction === 'modified' ? this.draft : this.text\n\t\t\tthis.$emit('decide', { userAction, actualValue: userAction === 'modified' ? this.draft : undefined })\n\t\t\tthis.decided = {\n\t\t\t\taccepted: t('nextcloud-vue', 'Used. Copied to your clipboard.'),\n\t\t\t\tmodified: t('nextcloud-vue', 'Your version is used. Copied to your clipboard.'),\n\t\t\t\trejected: t('nextcloud-vue', 'Rejected.'),\n\t\t\t}[userAction]\n\t\t\tif (userAction === 'rejected') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait navigator.clipboard.writeText(used)\n\t\t\t} catch {\n\t\t\t\tthis.decided = userAction === 'modified' ? t('nextcloud-vue', 'Your version is used.') : t('nextcloud-vue', 'Used.')\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-ai-suggestion-decision {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tmargin-top: 8px;\n}\n\n.cn-ai-suggestion-decision__actions {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: 8px;\n}\n\n.cn-ai-suggestion-decision__done {\n\tcolor: var(--color-text-maxcontrast);\n\tfont-size: 0.85em;\n}\n</style>\n"],"names":["_createElementBlock","_Fragment","_createElementVNode","_createVNode"],"mappings":";;;;;;AAkCQ,MAAA,UAAA,GAAA,EAAA,KAAK,EAAE,oCAAgB,GAAA;;;;;;AAjBzB,IAAA,KAAK,6BAAgB;AAAA,IAAA,aAAA,EAAA,MAAA,CAAA,MAAA;;KAChB,KAAO,CAAA,OAAA;sBAAdA,kBAKE,CAAA,GAAA,EAAA;;AAJD,UAAA,KAAG,EAAC;AACL,UAAA,IAAG,EAAC,QAAG;AACP,UAAA,aAAW,KAAK,MAAM,CAAA,MAAA,CAAA,KAAA,CAAA;2BACpB,KAAO,CAAA,OAAA,CAAA,EAAA,CAAA,oBAAA,UAAA,CAAA;sBAERA;WACQ,KAAA,CAAA,OAAA;4BAAVA,kBAQW,CAAAC,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA;gBAPVC,kBAEQ,CAAA,OAAA,EAAA;AAFA,kBAAA,GAAG,KAAK,MAAM,CAAA,MAAA,CAAA,MAAA,CAAA;mCAClB,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,cAAA,CAAA,CAAA,EAAA,CAAA,oBAAA,UAAA,CAAA;+BAEJA,kBAGS,CAAA,UAAA,EAAA;AAHC,kBAAA,EAAE,KAAK,MAAM,CAAA,MAAA,CAAA,MAAA,CAAA;+EACd,KAAK,CAAA,KAAA,IAAA,MAAA,CAAA,CAAA;AACd,kBAAA,IAAI,EAAC,GAAG;AACP,kBAAA,aAAQ,KAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;;+BAFA,KAAK,CAAA,KAAA,CAAA;;;;;aAKC,KAAO,CAAA,OAAA;yCAKZ,CAAA,mBAAA,EAAA;;yBAJH,EAAC,SAAS;AAChB,kBAAA,aAAW,KAAK,MAAM,CAAA,MAAA,CAAA,YAAA,CAAA;AACtB,kBAAA,OAAK,uCAAE,QAAE,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA;;mCACV,MAAyC;oDAAtC,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,gBAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;gDAWH,CAAAD,QAAA,EAAA,EAAA,GAAA,EAAA,CAAA,EAAA,EAAA;kBARDE,WAIW,CAAA,mBAAA,EAAA;AAJF,oBAAA,OAAA,EAAA,SAAA;AACP,oBAAA,aAAW,KAAK,MAAM,CAAA,MAAA,CAAA,IAAA,CAAA;AACtB,oBAAA,OAAK,uCAAE,QAAM,CAAA,MAAA,CAAA,UAAA,CAAA,CAAA,CAAA;;qCACd,MAA0B;sDAAvB,QAAC,CAAA,CAAA,CAAA,eAAA,EAAA,UAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;kBAELA,WAEO,CAAA,mBAAA,EAAA;AAFE,oBAAA,aAAA,KAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA;AAAA,oBAAA,OAAA,EAAA,QAAA,CAAA,YAAA;;qCACR,MAAE;sDAAA,QAAA,CAAA,CAAA,CAAA,eAAA,EAAA,OAAA,CAAA,CAAA,EAAA,CAAA,YAAA;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -64,7 +64,7 @@ import DatabaseArrowRightOutlineIcon from 'vue-material-design-icons/DatabaseArr
|
|
|
64
64
|
import DatabaseExportOutlineIcon from 'vue-material-design-icons/DatabaseExportOutline.vue';
|
|
65
65
|
import DatabaseImportOutlineIcon from 'vue-material-design-icons/DatabaseImportOutline.vue';
|
|
66
66
|
import DatabaseOutline from 'vue-material-design-icons/DatabaseOutline.vue';
|
|
67
|
-
import
|
|
67
|
+
import DeleteOutline from 'vue-material-design-icons/DeleteOutline.vue';
|
|
68
68
|
import DesktopTowerMonitorIcon from 'vue-material-design-icons/DesktopTowerMonitor.vue';
|
|
69
69
|
import Domain from 'vue-material-design-icons/Domain.vue';
|
|
70
70
|
import DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue';
|
|
@@ -464,7 +464,7 @@ const SEMANTIC_ICON_COMPONENTS = Object.freeze({
|
|
|
464
464
|
DatabaseExportOutline: DatabaseExportOutlineIcon,
|
|
465
465
|
DatabaseImportOutline: DatabaseImportOutlineIcon,
|
|
466
466
|
DatabaseOutline: DatabaseOutline,
|
|
467
|
-
DeleteOutline:
|
|
467
|
+
DeleteOutline: DeleteOutline,
|
|
468
468
|
DesktopTowerMonitor: DesktopTowerMonitorIcon,
|
|
469
469
|
Domain: Domain,
|
|
470
470
|
DotsHorizontal: DotsHorizontal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semanticIcons.js","sources":["../../../../src/components/CnIcon/semanticIcons.js"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2026 Conduction B.V.\n * SPDX-License-Identifier: EUPL-1.2\n *\n * semanticIcons — the fleet-wide semantic icon vocabulary (ADR-077).\n *\n * One concept, one icon. A manifest `icon` field holds an MDI PascalCase name;\n * this table is what makes the same concept read the same way in every\n * Conduction app (Store is always StoreOutline, Dashboard is always\n * ViewDashboardOutline). The mapping is a BIJECTION — no concept has two\n * icons and no icon serves two concepts — which is what stops the historical\n * overloading (one glyph standing for 18 unrelated things).\n *\n * Tier A is universal chrome every app has and MUST match. Tier B is the\n * shared domain vocabulary an app SHOULD use when it has the concept.\n *\n * WHY THIS IS A PURE EXPORT AND NOT AN import-time `registerIcons()` CALL:\n * the published dist's `sideEffects` allowlist has previously tree-shaken\n * import-time side effects out of consumer bundles, which fails SILENTLY\n * (nothing renders, no error). So the rendering components import\n * {@link SEMANTIC_ICON_COMPONENTS} and consult it directly — resolution is\n * guaranteed by the component that needs it, with no side-effect ordering to\n * get wrong and nothing for a bundler to drop.\n *\n * Every name below is verified to exist in `vue-material-design-icons` by\n * tests/components/semanticIcons.spec.js — the check that caught invented\n * names like `LedgerOutline` and `FileSignOutline` already live in manifests.\n *\n * Each icon is imported individually (no wildcard / barrel) so the bundle\n * stays tree-shake-friendly.\n *\n * @spec openspec/architecture/adr-077-semantic-icon-vocabulary.md\n */\n\nimport AccountArrowRightOutlineIcon from 'vue-material-design-icons/AccountArrowRightOutline.vue'\nimport AccountBoxOutlineIcon from 'vue-material-design-icons/AccountBoxOutline.vue'\nimport AccountGroupOutlineIcon from 'vue-material-design-icons/AccountGroupOutline.vue'\nimport AccountKeyOutlineIcon from 'vue-material-design-icons/AccountKeyOutline.vue'\nimport AccountMinusOutlineIcon from 'vue-material-design-icons/AccountMinusOutline.vue'\nimport AccountMultipleOutlineIcon from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport AccountOutlineIcon from 'vue-material-design-icons/AccountOutline.vue'\nimport AccountPlusOutlineIcon from 'vue-material-design-icons/AccountPlusOutline.vue'\nimport AccountSchoolOutlineIcon from 'vue-material-design-icons/AccountSchoolOutline.vue'\nimport AccountSearchOutlineIcon from 'vue-material-design-icons/AccountSearchOutline.vue'\nimport AccountStarOutlineIcon from 'vue-material-design-icons/AccountStarOutline.vue'\nimport AccountSwitchOutlineIcon from 'vue-material-design-icons/AccountSwitchOutline.vue'\nimport AccountTieOutlineIcon from 'vue-material-design-icons/AccountTieOutline.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport ApiIcon from 'vue-material-design-icons/Api.vue'\nimport ApplicationOutlineIcon from 'vue-material-design-icons/ApplicationOutline.vue'\nimport BankOutlineIcon from 'vue-material-design-icons/BankOutline.vue'\nimport BankTransferIcon from 'vue-material-design-icons/BankTransfer.vue'\nimport BellOutlineIcon from 'vue-material-design-icons/BellOutline.vue'\nimport BookOpenPageVariantOutlineIcon from 'vue-material-design-icons/BookOpenPageVariantOutline.vue'\nimport BookOpenVariantOutlineIcon from 'vue-material-design-icons/BookOpenVariantOutline.vue'\nimport BookshelfIcon from 'vue-material-design-icons/Bookshelf.vue'\nimport BrainIcon from 'vue-material-design-icons/Brain.vue'\nimport BriefcaseOutlineIcon from 'vue-material-design-icons/BriefcaseOutline.vue'\nimport CalculatorVariantOutlineIcon from 'vue-material-design-icons/CalculatorVariantOutline.vue'\nimport CalendarAccountOutlineIcon from 'vue-material-design-icons/CalendarAccountOutline.vue'\nimport CalendarClockOutlineIcon from 'vue-material-design-icons/CalendarClockOutline.vue'\nimport CalendarOutlineIcon from 'vue-material-design-icons/CalendarOutline.vue'\nimport CalendarRemoveOutlineIcon from 'vue-material-design-icons/CalendarRemoveOutline.vue'\nimport CalendarTextOutlineIcon from 'vue-material-design-icons/CalendarTextOutline.vue'\nimport CalendarWeekendOutlineIcon from 'vue-material-design-icons/CalendarWeekendOutline.vue'\nimport CarOutlineIcon from 'vue-material-design-icons/CarOutline.vue'\nimport CartArrowDownIcon from 'vue-material-design-icons/CartArrowDown.vue'\nimport CartOutlineIcon from 'vue-material-design-icons/CartOutline.vue'\nimport CashSyncIcon from 'vue-material-design-icons/CashSync.vue'\nimport CertificateOutlineIcon from 'vue-material-design-icons/CertificateOutline.vue'\nimport ChartBarIcon from 'vue-material-design-icons/ChartBar.vue'\nimport ChartBoxOutlineIcon from 'vue-material-design-icons/ChartBoxOutline.vue'\nimport ChartLineVariantIcon from 'vue-material-design-icons/ChartLineVariant.vue'\nimport ChartSankeyIcon from 'vue-material-design-icons/ChartSankey.vue'\nimport ChartTimelineVariantIcon from 'vue-material-design-icons/ChartTimelineVariant.vue'\nimport CheckboxMarkedCircleOutlineIcon from 'vue-material-design-icons/CheckboxMarkedCircleOutline.vue'\nimport CheckCircleOutlineIcon from 'vue-material-design-icons/CheckCircleOutline.vue'\nimport CheckDecagramOutlineIcon from 'vue-material-design-icons/CheckDecagramOutline.vue'\nimport ClipboardAccountOutlineIcon from 'vue-material-design-icons/ClipboardAccountOutline.vue'\nimport ClipboardCheckOutlineIcon from 'vue-material-design-icons/ClipboardCheckOutline.vue'\nimport ClipboardListOutlineIcon from 'vue-material-design-icons/ClipboardListOutline.vue'\nimport ClipboardPulseOutlineIcon from 'vue-material-design-icons/ClipboardPulseOutline.vue'\nimport ClipboardTextOutlineIcon from 'vue-material-design-icons/ClipboardTextOutline.vue'\nimport ClockAlertOutlineIcon from 'vue-material-design-icons/ClockAlertOutline.vue'\nimport ClockCheckOutlineIcon from 'vue-material-design-icons/ClockCheckOutline.vue'\nimport ClockOutlineIcon from 'vue-material-design-icons/ClockOutline.vue'\nimport CloseCircleOutlineIcon from 'vue-material-design-icons/CloseCircleOutline.vue'\nimport CloudUploadOutlineIcon from 'vue-material-design-icons/CloudUploadOutline.vue'\nimport CogOutlineIcon from 'vue-material-design-icons/CogOutline.vue'\nimport CommentOutlineIcon from 'vue-material-design-icons/CommentOutline.vue'\nimport CommentQuestionOutlineIcon from 'vue-material-design-icons/CommentQuestionOutline.vue'\nimport ContentCopyIcon from 'vue-material-design-icons/ContentCopy.vue'\nimport ContentSaveIcon from 'vue-material-design-icons/ContentSave.vue'\nimport CreditCardOutlineIcon from 'vue-material-design-icons/CreditCardOutline.vue'\nimport CubeOutlineIcon from 'vue-material-design-icons/CubeOutline.vue'\nimport CurrencyEurIcon from 'vue-material-design-icons/CurrencyEur.vue'\nimport DatabaseArrowRightOutlineIcon from 'vue-material-design-icons/DatabaseArrowRightOutline.vue'\nimport DatabaseExportOutlineIcon from 'vue-material-design-icons/DatabaseExportOutline.vue'\nimport DatabaseImportOutlineIcon from 'vue-material-design-icons/DatabaseImportOutline.vue'\nimport DatabaseOutlineIcon from 'vue-material-design-icons/DatabaseOutline.vue'\nimport DeleteOutlineIcon from 'vue-material-design-icons/DeleteOutline.vue'\nimport DesktopTowerMonitorIcon from 'vue-material-design-icons/DesktopTowerMonitor.vue'\nimport DomainIcon from 'vue-material-design-icons/Domain.vue'\nimport DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue'\nimport DownloadIcon from 'vue-material-design-icons/Download.vue'\nimport EmailOutlineIcon from 'vue-material-design-icons/EmailOutline.vue'\nimport EyeOffOutlineIcon from 'vue-material-design-icons/EyeOffOutline.vue'\nimport EyeOutlineIcon from 'vue-material-design-icons/EyeOutline.vue'\nimport FileAlertOutlineIcon from 'vue-material-design-icons/FileAlertOutline.vue'\nimport FileChartOutlineIcon from 'vue-material-design-icons/FileChartOutline.vue'\nimport FileCheckOutlineIcon from 'vue-material-design-icons/FileCheckOutline.vue'\nimport FileDocumentMultipleOutlineIcon from 'vue-material-design-icons/FileDocumentMultipleOutline.vue'\nimport FileDocumentOutlineIcon from 'vue-material-design-icons/FileDocumentOutline.vue'\nimport FileLockOutlineIcon from 'vue-material-design-icons/FileLockOutline.vue'\nimport FileReplaceOutlineIcon from 'vue-material-design-icons/FileReplaceOutline.vue'\nimport FileSignIcon from 'vue-material-design-icons/FileSign.vue'\nimport FileTreeOutlineIcon from 'vue-material-design-icons/FileTreeOutline.vue'\nimport FilterVariantIcon from 'vue-material-design-icons/FilterVariant.vue'\nimport FolderAccountOutlineIcon from 'vue-material-design-icons/FolderAccountOutline.vue'\nimport FolderCogOutlineIcon from 'vue-material-design-icons/FolderCogOutline.vue'\nimport FolderOutlineIcon from 'vue-material-design-icons/FolderOutline.vue'\nimport FormatListChecksIcon from 'vue-material-design-icons/FormatListChecks.vue'\nimport ForumOutlineIcon from 'vue-material-design-icons/ForumOutline.vue'\nimport GaugeIcon from 'vue-material-design-icons/Gauge.vue'\nimport GavelIcon from 'vue-material-design-icons/Gavel.vue'\nimport HandHeartOutlineIcon from 'vue-material-design-icons/HandHeartOutline.vue'\nimport HandshakeOutlineIcon from 'vue-material-design-icons/HandshakeOutline.vue'\nimport HistoryIcon from 'vue-material-design-icons/History.vue'\nimport ImageOutlineIcon from 'vue-material-design-icons/ImageOutline.vue'\nimport InformationOutlineIcon from 'vue-material-design-icons/InformationOutline.vue'\nimport KeyOutlineIcon from 'vue-material-design-icons/KeyOutline.vue'\nimport LayersOutlineIcon from 'vue-material-design-icons/LayersOutline.vue'\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\nimport LockOutlineIcon from 'vue-material-design-icons/LockOutline.vue'\nimport MagnifyIcon from 'vue-material-design-icons/Magnify.vue'\nimport MapMarkerOutlineIcon from 'vue-material-design-icons/MapMarkerOutline.vue'\nimport MapMarkerPathIcon from 'vue-material-design-icons/MapMarkerPath.vue'\nimport MapOutlineIcon from 'vue-material-design-icons/MapOutline.vue'\nimport MedalOutlineIcon from 'vue-material-design-icons/MedalOutline.vue'\nimport MessageTextOutlineIcon from 'vue-material-design-icons/MessageTextOutline.vue'\nimport NotebookOutlineIcon from 'vue-material-design-icons/NotebookOutline.vue'\nimport OfficeBuildingOutlineIcon from 'vue-material-design-icons/OfficeBuildingOutline.vue'\nimport OpenInNewIcon from 'vue-material-design-icons/OpenInNew.vue'\nimport PackageVariantClosedIcon from 'vue-material-design-icons/PackageVariantClosed.vue'\nimport PaperclipIcon from 'vue-material-design-icons/Paperclip.vue'\nimport PencilOutlineIcon from 'vue-material-design-icons/PencilOutline.vue'\nimport PercentOutlineIcon from 'vue-material-design-icons/PercentOutline.vue'\nimport PlayCircleOutlineIcon from 'vue-material-design-icons/PlayCircleOutline.vue'\nimport PlayOutlineIcon from 'vue-material-design-icons/PlayOutline.vue'\nimport PlusIcon from 'vue-material-design-icons/Plus.vue'\nimport PrinterOutlineIcon from 'vue-material-design-icons/PrinterOutline.vue'\nimport PulseIcon from 'vue-material-design-icons/Pulse.vue'\nimport PuzzleOutlineIcon from 'vue-material-design-icons/PuzzleOutline.vue'\nimport ReceiptOutlineIcon from 'vue-material-design-icons/ReceiptOutline.vue'\nimport ReceiptTextOutlineIcon from 'vue-material-design-icons/ReceiptTextOutline.vue'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport RobotOutlineIcon from 'vue-material-design-icons/RobotOutline.vue'\nimport ScaleBalanceIcon from 'vue-material-design-icons/ScaleBalance.vue'\nimport SchoolOutlineIcon from 'vue-material-design-icons/SchoolOutline.vue'\nimport ShareVariantOutlineIcon from 'vue-material-design-icons/ShareVariantOutline.vue'\nimport ShieldAccountOutlineIcon from 'vue-material-design-icons/ShieldAccountOutline.vue'\nimport ShieldAlertOutlineIcon from 'vue-material-design-icons/ShieldAlertOutline.vue'\nimport ShieldCheckOutlineIcon from 'vue-material-design-icons/ShieldCheckOutline.vue'\nimport ShieldCrownOutlineIcon from 'vue-material-design-icons/ShieldCrownOutline.vue'\nimport ShieldKeyOutlineIcon from 'vue-material-design-icons/ShieldKeyOutline.vue'\nimport ShieldLockOutlineIcon from 'vue-material-design-icons/ShieldLockOutline.vue'\nimport ShieldOutlineIcon from 'vue-material-design-icons/ShieldOutline.vue'\nimport SignatureFreehandIcon from 'vue-material-design-icons/SignatureFreehand.vue'\nimport SitemapOutlineIcon from 'vue-material-design-icons/SitemapOutline.vue'\nimport SourceBranchIcon from 'vue-material-design-icons/SourceBranch.vue'\nimport SpeedometerIcon from 'vue-material-design-icons/Speedometer.vue'\nimport StoreOutlineIcon from 'vue-material-design-icons/StoreOutline.vue'\nimport SwapHorizontalIcon from 'vue-material-design-icons/SwapHorizontal.vue'\nimport TableClockIcon from 'vue-material-design-icons/TableClock.vue'\nimport TagOutlineIcon from 'vue-material-design-icons/TagOutline.vue'\nimport TextBoxOutlineIcon from 'vue-material-design-icons/TextBoxOutline.vue'\nimport ToolboxOutlineIcon from 'vue-material-design-icons/ToolboxOutline.vue'\nimport TransitConnectionVariantIcon from 'vue-material-design-icons/TransitConnectionVariant.vue'\nimport TrayFullIcon from 'vue-material-design-icons/TrayFull.vue'\nimport TrendingUpIcon from 'vue-material-design-icons/TrendingUp.vue'\nimport UploadIcon from 'vue-material-design-icons/Upload.vue'\nimport VectorPolylinePlusIcon from 'vue-material-design-icons/VectorPolylinePlus.vue'\nimport ViewColumnOutlineIcon from 'vue-material-design-icons/ViewColumnOutline.vue'\nimport ViewDashboardOutlineIcon from 'vue-material-design-icons/ViewDashboardOutline.vue'\nimport ViewGridOutlineIcon from 'vue-material-design-icons/ViewGridOutline.vue'\nimport WarehouseIcon from 'vue-material-design-icons/Warehouse.vue'\nimport WebhookIcon from 'vue-material-design-icons/Webhook.vue'\n\n/**\n * Tier A — universal chrome. An app that has the concept MUST use this icon.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SEMANTIC_ICONS_TIER_A = Object.freeze({\n\tdashboard: 'ViewDashboardOutline',\n\tdocumentation: 'BookOpenVariantOutline',\n\t'features-roadmap': 'MapMarkerPath',\n\tsettings: 'CogOutline',\n\tadmin: 'ShieldAccountOutline',\n\tsearch: 'Magnify',\n\tstore: 'StoreOutline',\n\ttutorial: 'PlayCircleOutline',\n\tabout: 'InformationOutline',\n\tnotifications: 'BellOutline',\n\tactivity: 'Pulse',\n\t'audit-trail': 'History',\n\t'my-work': 'ClipboardAccountOutline',\n})\n\n/**\n * Tier B — shared domain vocabulary. An app SHOULD use this icon when it has\n * the concept; a genuinely new concept is added here, never invented locally.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SEMANTIC_ICONS_TIER_B = Object.freeze({\n\t// data & records\n\tdata: 'DatabaseOutline',\n\tschema: 'FileTreeOutline',\n\trecord: 'CubeOutline',\n\t'data-quality': 'ClipboardPulseOutline',\n\timport: 'DatabaseImportOutline',\n\texport: 'DatabaseExportOutline',\n\tmigration: 'DatabaseArrowRightOutline',\n\tmapping: 'SwapHorizontal',\n\tlog: 'TextBoxOutline',\n\tjob: 'ClockOutline',\n\t// documents & files\n\tdocument: 'FileDocumentOutline',\n\tdocuments: 'FileDocumentMultipleOutline',\n\tfolder: 'FolderOutline',\n\ttemplate: 'FileReplaceOutline',\n\tcatalogue: 'Bookshelf',\n\tsigning: 'SignatureFreehand',\n\tcontract: 'FileSign',\n\tcorrespondence: 'EmailOutline',\n\tattachment: 'Paperclip',\n\t// cases & process\n\tcase: 'FolderAccountOutline',\n\t'case-type': 'FolderCogOutline',\n\ttask: 'CheckboxMarkedCircleOutline',\n\ttasks: 'FormatListChecks',\n\tworkflow: 'SitemapOutline',\n\tboard: 'ViewColumnOutline',\n\tapproval: 'CheckDecagramOutline',\n\tdecision: 'Gavel',\n\tqueue: 'TrayFull',\n\tdeadline: 'ClockAlertOutline',\n\tobjection: 'FileAlertOutline',\n\tappeal: 'ScaleBalance',\n\t// communication\n\tchat: 'MessageTextOutline',\n\tcomment: 'CommentOutline',\n\tmeeting: 'CalendarAccountOutline',\n\tagenda: 'CalendarTextOutline',\n\tappointment: 'CalendarClockOutline',\n\tcalendar: 'CalendarOutline',\n\tconsultation: 'CommentQuestionOutline',\n\tforum: 'ForumOutline',\n\t// people & organisations\n\tperson: 'AccountOutline',\n\tpeople: 'AccountMultipleOutline',\n\tgroup: 'AccountGroupOutline',\n\trole: 'AccountKeyOutline',\n\torganisation: 'OfficeBuildingOutline',\n\t'organisation-unit': 'Domain',\n\tpartner: 'HandshakeOutline',\n\tclient: 'AccountStarOutline',\n\temployee: 'AccountTieOutline',\n\tlead: 'AccountArrowRightOutline',\n\tprospect: 'AccountSearchOutline',\n\tsubstitution: 'AccountSwitchOutline',\n\t// commerce & finance\n\tsales: 'CartOutline',\n\tpurchasing: 'CartArrowDown',\n\tproduct: 'PackageVariantClosed',\n\tinventory: 'Warehouse',\n\torder: 'ClipboardListOutline',\n\tinvoice: 'ReceiptTextOutline',\n\tpayment: 'CreditCardOutline',\n\tpayroll: 'CashSync',\n\texpense: 'ReceiptOutline',\n\tbank: 'BankOutline',\n\t'bank-transaction': 'BankTransfer',\n\tbookkeeping: 'NotebookOutline',\n\ttax: 'PercentOutline',\n\tbudget: 'CalculatorVariantOutline',\n\tforecast: 'ChartTimelineVariant',\n\trevenue: 'CurrencyEur',\n\tpricing: 'TagOutline',\n\tsubsidy: 'HandHeartOutline',\n\t// reporting & monitoring\n\treport: 'FileChartOutline',\n\treporting: 'ChartBoxOutline',\n\tanalytics: 'ChartLineVariant',\n\tkpi: 'Speedometer',\n\tmonitoring: 'Gauge',\n\tstatistics: 'ChartBar',\n\t'process-mining': 'ChartSankey',\n\t// security & compliance\n\tsecurity: 'ShieldOutline',\n\tcompliance: 'ClipboardCheckOutline',\n\tpolicy: 'ShieldCheckOutline',\n\tvulnerability: 'ShieldAlertOutline',\n\tcertificate: 'CertificateOutline',\n\tvault: 'LockOutline',\n\tkey: 'KeyOutline',\n\tauthorization: 'ShieldKeyOutline',\n\tprivacy: 'ShieldLockOutline',\n\tanonymization: 'EyeOffOutline',\n\tconsent: 'FileCheckOutline',\n\tconfidentiality: 'FileLockOutline',\n\tretention: 'CalendarRemoveOutline',\n\tgovernance: 'ShieldCrownOutline',\n\t// integration & technology\n\tintegration: 'Api',\n\tconnection: 'TransitConnectionVariant',\n\twebhook: 'Webhook',\n\tautomation: 'VectorPolylinePlus',\n\tagent: 'RobotOutline',\n\tai: 'Brain',\n\ttool: 'ToolboxOutline',\n\tapps: 'ViewGridOutline',\n\tmodule: 'PuzzleOutline',\n\tsource: 'SourceBranch',\n\t// location & geo\n\tlocation: 'MapMarkerOutline',\n\tmap: 'MapOutline',\n\t'map-layer': 'LayersOutline',\n\t// learning\n\tcourse: 'BookOpenPageVariantOutline',\n\tlearning: 'SchoolOutline',\n\tcompetency: 'MedalOutline',\n\ttimetable: 'TableClock',\n\tprogress: 'TrendingUp',\n\tportfolio: 'BriefcaseOutline',\n\texam: 'ClipboardTextOutline',\n\tstudent: 'AccountSchoolOutline',\n\t// Publish, Test connection).\n\tview: 'EyeOutline',\n\tcreate: 'Plus',\n\tedit: 'PencilOutline',\n\tdelete: 'DeleteOutline',\n\trun: 'PlayOutline',\n\ttest: 'CheckCircleOutline',\n\tupload: 'Upload',\n\tpublish: 'CloudUploadOutline',\n\tdownload: 'Download',\n\trefresh: 'Refresh',\n\t'open-external': 'OpenInNew',\n\tcopy: 'ContentCopy',\n\tshare: 'ShareVariantOutline',\n\tfilter: 'FilterVariant',\n\tprint: 'PrinterOutline',\n\timage: 'ImageOutline',\n\tlink: 'LinkVariant',\n\tmore: 'DotsHorizontal',\n\tsave: 'ContentSave',\n\tcancel: 'CloseCircleOutline',\n\talert: 'AlertCircleOutline',\n\t// hr\n\tleave: 'CalendarWeekendOutline',\n\thours: 'ClockCheckOutline',\n\tonboarding: 'AccountPlusOutline',\n\toffboarding: 'AccountMinusOutline',\n\tvacancy: 'AccountBoxOutline',\n\tasset: 'DesktopTowerMonitor',\n\tfleet: 'CarOutline',\n})\n\n/**\n * The whole vocabulary — concept slug to canonical MDI name.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SEMANTIC_ICONS = Object.freeze({\n\t...SEMANTIC_ICONS_TIER_A,\n\t...SEMANTIC_ICONS_TIER_B,\n})\n\n/**\n * Which tier a concept belongs to — `'A'` (MUST) or `'B'` (SHOULD). Consumed by\n * hydra's icon-vocabulary gate to decide hard-fail vs warn.\n *\n * @type {Readonly<Record<string, 'A'|'B'>>}\n */\nexport const SEMANTIC_ICON_TIERS = Object.freeze(Object.fromEntries([\n\t...Object.keys(SEMANTIC_ICONS_TIER_A).map((c) => [c, 'A']),\n\t...Object.keys(SEMANTIC_ICONS_TIER_B).map((c) => [c, 'B']),\n]))\n\n/**\n * Canonical MDI name to its Vue component, for every icon in the vocabulary.\n * The rendering components consult this so an app never has to register a\n * vocabulary icon itself.\n *\n * @type {Readonly<Record<string, object>>}\n */\nexport const SEMANTIC_ICON_COMPONENTS = Object.freeze({\n\tAccountArrowRightOutline: AccountArrowRightOutlineIcon,\n\tAccountBoxOutline: AccountBoxOutlineIcon,\n\tAccountGroupOutline: AccountGroupOutlineIcon,\n\tAccountKeyOutline: AccountKeyOutlineIcon,\n\tAccountMinusOutline: AccountMinusOutlineIcon,\n\tAccountMultipleOutline: AccountMultipleOutlineIcon,\n\tAccountOutline: AccountOutlineIcon,\n\tAccountPlusOutline: AccountPlusOutlineIcon,\n\tAccountSchoolOutline: AccountSchoolOutlineIcon,\n\tAccountSearchOutline: AccountSearchOutlineIcon,\n\tAccountStarOutline: AccountStarOutlineIcon,\n\tAccountSwitchOutline: AccountSwitchOutlineIcon,\n\tAccountTieOutline: AccountTieOutlineIcon,\n\tAlertCircleOutline: AlertCircleOutlineIcon,\n\tApi: ApiIcon,\n\tApplicationOutline: ApplicationOutlineIcon,\n\tBankOutline: BankOutlineIcon,\n\tBankTransfer: BankTransferIcon,\n\tBellOutline: BellOutlineIcon,\n\tBookOpenPageVariantOutline: BookOpenPageVariantOutlineIcon,\n\tBookOpenVariantOutline: BookOpenVariantOutlineIcon,\n\tBookshelf: BookshelfIcon,\n\tBrain: BrainIcon,\n\tBriefcaseOutline: BriefcaseOutlineIcon,\n\tCalculatorVariantOutline: CalculatorVariantOutlineIcon,\n\tCalendarAccountOutline: CalendarAccountOutlineIcon,\n\tCalendarClockOutline: CalendarClockOutlineIcon,\n\tCalendarOutline: CalendarOutlineIcon,\n\tCalendarRemoveOutline: CalendarRemoveOutlineIcon,\n\tCalendarTextOutline: CalendarTextOutlineIcon,\n\tCalendarWeekendOutline: CalendarWeekendOutlineIcon,\n\tCarOutline: CarOutlineIcon,\n\tCartArrowDown: CartArrowDownIcon,\n\tCartOutline: CartOutlineIcon,\n\tCashSync: CashSyncIcon,\n\tCertificateOutline: CertificateOutlineIcon,\n\tChartBar: ChartBarIcon,\n\tChartBoxOutline: ChartBoxOutlineIcon,\n\tChartLineVariant: ChartLineVariantIcon,\n\tChartSankey: ChartSankeyIcon,\n\tChartTimelineVariant: ChartTimelineVariantIcon,\n\tCheckCircleOutline: CheckCircleOutlineIcon,\n\tCheckDecagramOutline: CheckDecagramOutlineIcon,\n\tCheckboxMarkedCircleOutline: CheckboxMarkedCircleOutlineIcon,\n\tClipboardAccountOutline: ClipboardAccountOutlineIcon,\n\tClipboardCheckOutline: ClipboardCheckOutlineIcon,\n\tClipboardListOutline: ClipboardListOutlineIcon,\n\tClipboardPulseOutline: ClipboardPulseOutlineIcon,\n\tClipboardTextOutline: ClipboardTextOutlineIcon,\n\tClockAlertOutline: ClockAlertOutlineIcon,\n\tClockCheckOutline: ClockCheckOutlineIcon,\n\tClockOutline: ClockOutlineIcon,\n\tCloseCircleOutline: CloseCircleOutlineIcon,\n\tCloudUploadOutline: CloudUploadOutlineIcon,\n\tCogOutline: CogOutlineIcon,\n\tCommentOutline: CommentOutlineIcon,\n\tCommentQuestionOutline: CommentQuestionOutlineIcon,\n\tContentCopy: ContentCopyIcon,\n\tContentSave: ContentSaveIcon,\n\tCreditCardOutline: CreditCardOutlineIcon,\n\tCubeOutline: CubeOutlineIcon,\n\tCurrencyEur: CurrencyEurIcon,\n\tDatabaseArrowRightOutline: DatabaseArrowRightOutlineIcon,\n\tDatabaseExportOutline: DatabaseExportOutlineIcon,\n\tDatabaseImportOutline: DatabaseImportOutlineIcon,\n\tDatabaseOutline: DatabaseOutlineIcon,\n\tDeleteOutline: DeleteOutlineIcon,\n\tDesktopTowerMonitor: DesktopTowerMonitorIcon,\n\tDomain: DomainIcon,\n\tDotsHorizontal: DotsHorizontalIcon,\n\tDownload: DownloadIcon,\n\tEmailOutline: EmailOutlineIcon,\n\tEyeOffOutline: EyeOffOutlineIcon,\n\tEyeOutline: EyeOutlineIcon,\n\tFileAlertOutline: FileAlertOutlineIcon,\n\tFileChartOutline: FileChartOutlineIcon,\n\tFileCheckOutline: FileCheckOutlineIcon,\n\tFileDocumentMultipleOutline: FileDocumentMultipleOutlineIcon,\n\tFileDocumentOutline: FileDocumentOutlineIcon,\n\tFileLockOutline: FileLockOutlineIcon,\n\tFileReplaceOutline: FileReplaceOutlineIcon,\n\tFileSign: FileSignIcon,\n\tFileTreeOutline: FileTreeOutlineIcon,\n\tFilterVariant: FilterVariantIcon,\n\tFolderAccountOutline: FolderAccountOutlineIcon,\n\tFolderCogOutline: FolderCogOutlineIcon,\n\tFolderOutline: FolderOutlineIcon,\n\tFormatListChecks: FormatListChecksIcon,\n\tForumOutline: ForumOutlineIcon,\n\tGauge: GaugeIcon,\n\tGavel: GavelIcon,\n\tHandHeartOutline: HandHeartOutlineIcon,\n\tHandshakeOutline: HandshakeOutlineIcon,\n\tHistory: HistoryIcon,\n\tImageOutline: ImageOutlineIcon,\n\tInformationOutline: InformationOutlineIcon,\n\tKeyOutline: KeyOutlineIcon,\n\tLayersOutline: LayersOutlineIcon,\n\tLinkVariant: LinkVariantIcon,\n\tLockOutline: LockOutlineIcon,\n\tMagnify: MagnifyIcon,\n\tMapMarkerOutline: MapMarkerOutlineIcon,\n\tMapMarkerPath: MapMarkerPathIcon,\n\tMapOutline: MapOutlineIcon,\n\tMedalOutline: MedalOutlineIcon,\n\tMessageTextOutline: MessageTextOutlineIcon,\n\tNotebookOutline: NotebookOutlineIcon,\n\tOfficeBuildingOutline: OfficeBuildingOutlineIcon,\n\tOpenInNew: OpenInNewIcon,\n\tPackageVariantClosed: PackageVariantClosedIcon,\n\tPaperclip: PaperclipIcon,\n\tPencilOutline: PencilOutlineIcon,\n\tPercentOutline: PercentOutlineIcon,\n\tPlayCircleOutline: PlayCircleOutlineIcon,\n\tPlayOutline: PlayOutlineIcon,\n\tPlus: PlusIcon,\n\tPrinterOutline: PrinterOutlineIcon,\n\tPulse: PulseIcon,\n\tPuzzleOutline: PuzzleOutlineIcon,\n\tReceiptOutline: ReceiptOutlineIcon,\n\tReceiptTextOutline: ReceiptTextOutlineIcon,\n\tRefresh: RefreshIcon,\n\tRobotOutline: RobotOutlineIcon,\n\tScaleBalance: ScaleBalanceIcon,\n\tSchoolOutline: SchoolOutlineIcon,\n\tShareVariantOutline: ShareVariantOutlineIcon,\n\tShieldAccountOutline: ShieldAccountOutlineIcon,\n\tShieldAlertOutline: ShieldAlertOutlineIcon,\n\tShieldCheckOutline: ShieldCheckOutlineIcon,\n\tShieldCrownOutline: ShieldCrownOutlineIcon,\n\tShieldKeyOutline: ShieldKeyOutlineIcon,\n\tShieldLockOutline: ShieldLockOutlineIcon,\n\tShieldOutline: ShieldOutlineIcon,\n\tSignatureFreehand: SignatureFreehandIcon,\n\tSitemapOutline: SitemapOutlineIcon,\n\tSourceBranch: SourceBranchIcon,\n\tSpeedometer: SpeedometerIcon,\n\tStoreOutline: StoreOutlineIcon,\n\tSwapHorizontal: SwapHorizontalIcon,\n\tTableClock: TableClockIcon,\n\tTagOutline: TagOutlineIcon,\n\tTextBoxOutline: TextBoxOutlineIcon,\n\tToolboxOutline: ToolboxOutlineIcon,\n\tTransitConnectionVariant: TransitConnectionVariantIcon,\n\tTrayFull: TrayFullIcon,\n\tTrendingUp: TrendingUpIcon,\n\tUpload: UploadIcon,\n\tVectorPolylinePlus: VectorPolylinePlusIcon,\n\tViewColumnOutline: ViewColumnOutlineIcon,\n\tViewDashboardOutline: ViewDashboardOutlineIcon,\n\tViewGridOutline: ViewGridOutlineIcon,\n\tWarehouse: WarehouseIcon,\n\tWebhook: WebhookIcon,\n})\n\n/**\n * Reverse lookup — the concept a canonical icon name stands for.\n *\n * @param {string} name Canonical MDI icon name.\n * @return {string|null} The concept slug, or null when the name is not in the\n * vocabulary.\n */\nexport function conceptForIcon(name) {\n\tfor (const [concept, icon] of Object.entries(SEMANTIC_ICONS)) {\n\t\tif (icon === name) {\n\t\t\treturn concept\n\t\t}\n\t}\n\treturn null\n}\n\n/**\n * Resolve a vocabulary icon name to its component.\n *\n * @param {string|null|undefined} name Canonical MDI icon name.\n * @return {object|null} The Vue component, or null when not in the vocabulary.\n */\nexport function getSemanticIconComponent(name) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\treturn null\n\t}\n\treturn SEMANTIC_ICON_COMPONENTS[name] ?? null\n}\n"],"names":["AccountGroupOutlineIcon","AccountOutlineIcon","AlertCircleOutlineIcon","BellOutlineIcon","BriefcaseOutlineIcon","CalendarClockOutlineIcon","CalendarOutlineIcon","ChartBarIcon","CheckCircleOutlineIcon","ClipboardCheckOutlineIcon","ClipboardListOutlineIcon","ClockOutlineIcon","CloseCircleOutlineIcon","CogOutlineIcon","CommentOutlineIcon","ContentCopyIcon","ContentSaveIcon","CurrencyEurIcon","DatabaseOutlineIcon","DomainIcon","DotsHorizontalIcon","DownloadIcon","EmailOutlineIcon","EyeOutlineIcon","FileDocumentOutlineIcon","FolderAccountOutlineIcon","FolderOutlineIcon","FormatListChecksIcon","HistoryIcon","InformationOutlineIcon","KeyOutlineIcon","LinkVariantIcon","LockOutlineIcon","MagnifyIcon","MapMarkerOutlineIcon","MapOutlineIcon","OpenInNewIcon","PackageVariantClosedIcon","PaperclipIcon","PencilOutlineIcon","PlayCircleOutlineIcon","PlusIcon","PulseIcon","RefreshIcon","ShareVariantOutlineIcon","ShieldAccountOutlineIcon","ShieldKeyOutlineIcon","ShieldOutlineIcon","SitemapOutlineIcon","TagOutlineIcon","UploadIcon","ViewColumnOutlineIcon","ViewDashboardOutlineIcon","ViewGridOutlineIcon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"semanticIcons.js","sources":["../../../../src/components/CnIcon/semanticIcons.js"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2026 Conduction B.V.\n * SPDX-License-Identifier: EUPL-1.2\n *\n * semanticIcons — the fleet-wide semantic icon vocabulary (ADR-077).\n *\n * One concept, one icon. A manifest `icon` field holds an MDI PascalCase name;\n * this table is what makes the same concept read the same way in every\n * Conduction app (Store is always StoreOutline, Dashboard is always\n * ViewDashboardOutline). The mapping is a BIJECTION — no concept has two\n * icons and no icon serves two concepts — which is what stops the historical\n * overloading (one glyph standing for 18 unrelated things).\n *\n * Tier A is universal chrome every app has and MUST match. Tier B is the\n * shared domain vocabulary an app SHOULD use when it has the concept.\n *\n * WHY THIS IS A PURE EXPORT AND NOT AN import-time `registerIcons()` CALL:\n * the published dist's `sideEffects` allowlist has previously tree-shaken\n * import-time side effects out of consumer bundles, which fails SILENTLY\n * (nothing renders, no error). So the rendering components import\n * {@link SEMANTIC_ICON_COMPONENTS} and consult it directly — resolution is\n * guaranteed by the component that needs it, with no side-effect ordering to\n * get wrong and nothing for a bundler to drop.\n *\n * Every name below is verified to exist in `vue-material-design-icons` by\n * tests/components/semanticIcons.spec.js — the check that caught invented\n * names like `LedgerOutline` and `FileSignOutline` already live in manifests.\n *\n * Each icon is imported individually (no wildcard / barrel) so the bundle\n * stays tree-shake-friendly.\n *\n * @spec openspec/architecture/adr-077-semantic-icon-vocabulary.md\n */\n\nimport AccountArrowRightOutlineIcon from 'vue-material-design-icons/AccountArrowRightOutline.vue'\nimport AccountBoxOutlineIcon from 'vue-material-design-icons/AccountBoxOutline.vue'\nimport AccountGroupOutlineIcon from 'vue-material-design-icons/AccountGroupOutline.vue'\nimport AccountKeyOutlineIcon from 'vue-material-design-icons/AccountKeyOutline.vue'\nimport AccountMinusOutlineIcon from 'vue-material-design-icons/AccountMinusOutline.vue'\nimport AccountMultipleOutlineIcon from 'vue-material-design-icons/AccountMultipleOutline.vue'\nimport AccountOutlineIcon from 'vue-material-design-icons/AccountOutline.vue'\nimport AccountPlusOutlineIcon from 'vue-material-design-icons/AccountPlusOutline.vue'\nimport AccountSchoolOutlineIcon from 'vue-material-design-icons/AccountSchoolOutline.vue'\nimport AccountSearchOutlineIcon from 'vue-material-design-icons/AccountSearchOutline.vue'\nimport AccountStarOutlineIcon from 'vue-material-design-icons/AccountStarOutline.vue'\nimport AccountSwitchOutlineIcon from 'vue-material-design-icons/AccountSwitchOutline.vue'\nimport AccountTieOutlineIcon from 'vue-material-design-icons/AccountTieOutline.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\nimport ApiIcon from 'vue-material-design-icons/Api.vue'\nimport ApplicationOutlineIcon from 'vue-material-design-icons/ApplicationOutline.vue'\nimport BankOutlineIcon from 'vue-material-design-icons/BankOutline.vue'\nimport BankTransferIcon from 'vue-material-design-icons/BankTransfer.vue'\nimport BellOutlineIcon from 'vue-material-design-icons/BellOutline.vue'\nimport BookOpenPageVariantOutlineIcon from 'vue-material-design-icons/BookOpenPageVariantOutline.vue'\nimport BookOpenVariantOutlineIcon from 'vue-material-design-icons/BookOpenVariantOutline.vue'\nimport BookshelfIcon from 'vue-material-design-icons/Bookshelf.vue'\nimport BrainIcon from 'vue-material-design-icons/Brain.vue'\nimport BriefcaseOutlineIcon from 'vue-material-design-icons/BriefcaseOutline.vue'\nimport CalculatorVariantOutlineIcon from 'vue-material-design-icons/CalculatorVariantOutline.vue'\nimport CalendarAccountOutlineIcon from 'vue-material-design-icons/CalendarAccountOutline.vue'\nimport CalendarClockOutlineIcon from 'vue-material-design-icons/CalendarClockOutline.vue'\nimport CalendarOutlineIcon from 'vue-material-design-icons/CalendarOutline.vue'\nimport CalendarRemoveOutlineIcon from 'vue-material-design-icons/CalendarRemoveOutline.vue'\nimport CalendarTextOutlineIcon from 'vue-material-design-icons/CalendarTextOutline.vue'\nimport CalendarWeekendOutlineIcon from 'vue-material-design-icons/CalendarWeekendOutline.vue'\nimport CarOutlineIcon from 'vue-material-design-icons/CarOutline.vue'\nimport CartArrowDownIcon from 'vue-material-design-icons/CartArrowDown.vue'\nimport CartOutlineIcon from 'vue-material-design-icons/CartOutline.vue'\nimport CashSyncIcon from 'vue-material-design-icons/CashSync.vue'\nimport CertificateOutlineIcon from 'vue-material-design-icons/CertificateOutline.vue'\nimport ChartBarIcon from 'vue-material-design-icons/ChartBar.vue'\nimport ChartBoxOutlineIcon from 'vue-material-design-icons/ChartBoxOutline.vue'\nimport ChartLineVariantIcon from 'vue-material-design-icons/ChartLineVariant.vue'\nimport ChartSankeyIcon from 'vue-material-design-icons/ChartSankey.vue'\nimport ChartTimelineVariantIcon from 'vue-material-design-icons/ChartTimelineVariant.vue'\nimport CheckboxMarkedCircleOutlineIcon from 'vue-material-design-icons/CheckboxMarkedCircleOutline.vue'\nimport CheckCircleOutlineIcon from 'vue-material-design-icons/CheckCircleOutline.vue'\nimport CheckDecagramOutlineIcon from 'vue-material-design-icons/CheckDecagramOutline.vue'\nimport ClipboardAccountOutlineIcon from 'vue-material-design-icons/ClipboardAccountOutline.vue'\nimport ClipboardCheckOutlineIcon from 'vue-material-design-icons/ClipboardCheckOutline.vue'\nimport ClipboardListOutlineIcon from 'vue-material-design-icons/ClipboardListOutline.vue'\nimport ClipboardPulseOutlineIcon from 'vue-material-design-icons/ClipboardPulseOutline.vue'\nimport ClipboardTextOutlineIcon from 'vue-material-design-icons/ClipboardTextOutline.vue'\nimport ClockAlertOutlineIcon from 'vue-material-design-icons/ClockAlertOutline.vue'\nimport ClockCheckOutlineIcon from 'vue-material-design-icons/ClockCheckOutline.vue'\nimport ClockOutlineIcon from 'vue-material-design-icons/ClockOutline.vue'\nimport CloseCircleOutlineIcon from 'vue-material-design-icons/CloseCircleOutline.vue'\nimport CloudUploadOutlineIcon from 'vue-material-design-icons/CloudUploadOutline.vue'\nimport CogOutlineIcon from 'vue-material-design-icons/CogOutline.vue'\nimport CommentOutlineIcon from 'vue-material-design-icons/CommentOutline.vue'\nimport CommentQuestionOutlineIcon from 'vue-material-design-icons/CommentQuestionOutline.vue'\nimport ContentCopyIcon from 'vue-material-design-icons/ContentCopy.vue'\nimport ContentSaveIcon from 'vue-material-design-icons/ContentSave.vue'\nimport CreditCardOutlineIcon from 'vue-material-design-icons/CreditCardOutline.vue'\nimport CubeOutlineIcon from 'vue-material-design-icons/CubeOutline.vue'\nimport CurrencyEurIcon from 'vue-material-design-icons/CurrencyEur.vue'\nimport DatabaseArrowRightOutlineIcon from 'vue-material-design-icons/DatabaseArrowRightOutline.vue'\nimport DatabaseExportOutlineIcon from 'vue-material-design-icons/DatabaseExportOutline.vue'\nimport DatabaseImportOutlineIcon from 'vue-material-design-icons/DatabaseImportOutline.vue'\nimport DatabaseOutlineIcon from 'vue-material-design-icons/DatabaseOutline.vue'\nimport DeleteOutlineIcon from 'vue-material-design-icons/DeleteOutline.vue'\nimport DesktopTowerMonitorIcon from 'vue-material-design-icons/DesktopTowerMonitor.vue'\nimport DomainIcon from 'vue-material-design-icons/Domain.vue'\nimport DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue'\nimport DownloadIcon from 'vue-material-design-icons/Download.vue'\nimport EmailOutlineIcon from 'vue-material-design-icons/EmailOutline.vue'\nimport EyeOffOutlineIcon from 'vue-material-design-icons/EyeOffOutline.vue'\nimport EyeOutlineIcon from 'vue-material-design-icons/EyeOutline.vue'\nimport FileAlertOutlineIcon from 'vue-material-design-icons/FileAlertOutline.vue'\nimport FileChartOutlineIcon from 'vue-material-design-icons/FileChartOutline.vue'\nimport FileCheckOutlineIcon from 'vue-material-design-icons/FileCheckOutline.vue'\nimport FileDocumentMultipleOutlineIcon from 'vue-material-design-icons/FileDocumentMultipleOutline.vue'\nimport FileDocumentOutlineIcon from 'vue-material-design-icons/FileDocumentOutline.vue'\nimport FileLockOutlineIcon from 'vue-material-design-icons/FileLockOutline.vue'\nimport FileReplaceOutlineIcon from 'vue-material-design-icons/FileReplaceOutline.vue'\nimport FileSignIcon from 'vue-material-design-icons/FileSign.vue'\nimport FileTreeOutlineIcon from 'vue-material-design-icons/FileTreeOutline.vue'\nimport FilterVariantIcon from 'vue-material-design-icons/FilterVariant.vue'\nimport FolderAccountOutlineIcon from 'vue-material-design-icons/FolderAccountOutline.vue'\nimport FolderCogOutlineIcon from 'vue-material-design-icons/FolderCogOutline.vue'\nimport FolderOutlineIcon from 'vue-material-design-icons/FolderOutline.vue'\nimport FormatListChecksIcon from 'vue-material-design-icons/FormatListChecks.vue'\nimport ForumOutlineIcon from 'vue-material-design-icons/ForumOutline.vue'\nimport GaugeIcon from 'vue-material-design-icons/Gauge.vue'\nimport GavelIcon from 'vue-material-design-icons/Gavel.vue'\nimport HandHeartOutlineIcon from 'vue-material-design-icons/HandHeartOutline.vue'\nimport HandshakeOutlineIcon from 'vue-material-design-icons/HandshakeOutline.vue'\nimport HistoryIcon from 'vue-material-design-icons/History.vue'\nimport ImageOutlineIcon from 'vue-material-design-icons/ImageOutline.vue'\nimport InformationOutlineIcon from 'vue-material-design-icons/InformationOutline.vue'\nimport KeyOutlineIcon from 'vue-material-design-icons/KeyOutline.vue'\nimport LayersOutlineIcon from 'vue-material-design-icons/LayersOutline.vue'\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\nimport LockOutlineIcon from 'vue-material-design-icons/LockOutline.vue'\nimport MagnifyIcon from 'vue-material-design-icons/Magnify.vue'\nimport MapMarkerOutlineIcon from 'vue-material-design-icons/MapMarkerOutline.vue'\nimport MapMarkerPathIcon from 'vue-material-design-icons/MapMarkerPath.vue'\nimport MapOutlineIcon from 'vue-material-design-icons/MapOutline.vue'\nimport MedalOutlineIcon from 'vue-material-design-icons/MedalOutline.vue'\nimport MessageTextOutlineIcon from 'vue-material-design-icons/MessageTextOutline.vue'\nimport NotebookOutlineIcon from 'vue-material-design-icons/NotebookOutline.vue'\nimport OfficeBuildingOutlineIcon from 'vue-material-design-icons/OfficeBuildingOutline.vue'\nimport OpenInNewIcon from 'vue-material-design-icons/OpenInNew.vue'\nimport PackageVariantClosedIcon from 'vue-material-design-icons/PackageVariantClosed.vue'\nimport PaperclipIcon from 'vue-material-design-icons/Paperclip.vue'\nimport PencilOutlineIcon from 'vue-material-design-icons/PencilOutline.vue'\nimport PercentOutlineIcon from 'vue-material-design-icons/PercentOutline.vue'\nimport PlayCircleOutlineIcon from 'vue-material-design-icons/PlayCircleOutline.vue'\nimport PlayOutlineIcon from 'vue-material-design-icons/PlayOutline.vue'\nimport PlusIcon from 'vue-material-design-icons/Plus.vue'\nimport PrinterOutlineIcon from 'vue-material-design-icons/PrinterOutline.vue'\nimport PulseIcon from 'vue-material-design-icons/Pulse.vue'\nimport PuzzleOutlineIcon from 'vue-material-design-icons/PuzzleOutline.vue'\nimport ReceiptOutlineIcon from 'vue-material-design-icons/ReceiptOutline.vue'\nimport ReceiptTextOutlineIcon from 'vue-material-design-icons/ReceiptTextOutline.vue'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport RobotOutlineIcon from 'vue-material-design-icons/RobotOutline.vue'\nimport ScaleBalanceIcon from 'vue-material-design-icons/ScaleBalance.vue'\nimport SchoolOutlineIcon from 'vue-material-design-icons/SchoolOutline.vue'\nimport ShareVariantOutlineIcon from 'vue-material-design-icons/ShareVariantOutline.vue'\nimport ShieldAccountOutlineIcon from 'vue-material-design-icons/ShieldAccountOutline.vue'\nimport ShieldAlertOutlineIcon from 'vue-material-design-icons/ShieldAlertOutline.vue'\nimport ShieldCheckOutlineIcon from 'vue-material-design-icons/ShieldCheckOutline.vue'\nimport ShieldCrownOutlineIcon from 'vue-material-design-icons/ShieldCrownOutline.vue'\nimport ShieldKeyOutlineIcon from 'vue-material-design-icons/ShieldKeyOutline.vue'\nimport ShieldLockOutlineIcon from 'vue-material-design-icons/ShieldLockOutline.vue'\nimport ShieldOutlineIcon from 'vue-material-design-icons/ShieldOutline.vue'\nimport SignatureFreehandIcon from 'vue-material-design-icons/SignatureFreehand.vue'\nimport SitemapOutlineIcon from 'vue-material-design-icons/SitemapOutline.vue'\nimport SourceBranchIcon from 'vue-material-design-icons/SourceBranch.vue'\nimport SpeedometerIcon from 'vue-material-design-icons/Speedometer.vue'\nimport StoreOutlineIcon from 'vue-material-design-icons/StoreOutline.vue'\nimport SwapHorizontalIcon from 'vue-material-design-icons/SwapHorizontal.vue'\nimport TableClockIcon from 'vue-material-design-icons/TableClock.vue'\nimport TagOutlineIcon from 'vue-material-design-icons/TagOutline.vue'\nimport TextBoxOutlineIcon from 'vue-material-design-icons/TextBoxOutline.vue'\nimport ToolboxOutlineIcon from 'vue-material-design-icons/ToolboxOutline.vue'\nimport TransitConnectionVariantIcon from 'vue-material-design-icons/TransitConnectionVariant.vue'\nimport TrayFullIcon from 'vue-material-design-icons/TrayFull.vue'\nimport TrendingUpIcon from 'vue-material-design-icons/TrendingUp.vue'\nimport UploadIcon from 'vue-material-design-icons/Upload.vue'\nimport VectorPolylinePlusIcon from 'vue-material-design-icons/VectorPolylinePlus.vue'\nimport ViewColumnOutlineIcon from 'vue-material-design-icons/ViewColumnOutline.vue'\nimport ViewDashboardOutlineIcon from 'vue-material-design-icons/ViewDashboardOutline.vue'\nimport ViewGridOutlineIcon from 'vue-material-design-icons/ViewGridOutline.vue'\nimport WarehouseIcon from 'vue-material-design-icons/Warehouse.vue'\nimport WebhookIcon from 'vue-material-design-icons/Webhook.vue'\n\n/**\n * Tier A — universal chrome. An app that has the concept MUST use this icon.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SEMANTIC_ICONS_TIER_A = Object.freeze({\n\tdashboard: 'ViewDashboardOutline',\n\tdocumentation: 'BookOpenVariantOutline',\n\t'features-roadmap': 'MapMarkerPath',\n\tsettings: 'CogOutline',\n\tadmin: 'ShieldAccountOutline',\n\tsearch: 'Magnify',\n\tstore: 'StoreOutline',\n\ttutorial: 'PlayCircleOutline',\n\tabout: 'InformationOutline',\n\tnotifications: 'BellOutline',\n\tactivity: 'Pulse',\n\t'audit-trail': 'History',\n\t'my-work': 'ClipboardAccountOutline',\n})\n\n/**\n * Tier B — shared domain vocabulary. An app SHOULD use this icon when it has\n * the concept; a genuinely new concept is added here, never invented locally.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SEMANTIC_ICONS_TIER_B = Object.freeze({\n\t// data & records\n\tdata: 'DatabaseOutline',\n\tschema: 'FileTreeOutline',\n\trecord: 'CubeOutline',\n\t'data-quality': 'ClipboardPulseOutline',\n\timport: 'DatabaseImportOutline',\n\texport: 'DatabaseExportOutline',\n\tmigration: 'DatabaseArrowRightOutline',\n\tmapping: 'SwapHorizontal',\n\tlog: 'TextBoxOutline',\n\tjob: 'ClockOutline',\n\t// documents & files\n\tdocument: 'FileDocumentOutline',\n\tdocuments: 'FileDocumentMultipleOutline',\n\tfolder: 'FolderOutline',\n\ttemplate: 'FileReplaceOutline',\n\tcatalogue: 'Bookshelf',\n\tsigning: 'SignatureFreehand',\n\tcontract: 'FileSign',\n\tcorrespondence: 'EmailOutline',\n\tattachment: 'Paperclip',\n\t// cases & process\n\tcase: 'FolderAccountOutline',\n\t'case-type': 'FolderCogOutline',\n\ttask: 'CheckboxMarkedCircleOutline',\n\ttasks: 'FormatListChecks',\n\tworkflow: 'SitemapOutline',\n\tboard: 'ViewColumnOutline',\n\tapproval: 'CheckDecagramOutline',\n\tdecision: 'Gavel',\n\tqueue: 'TrayFull',\n\tdeadline: 'ClockAlertOutline',\n\tobjection: 'FileAlertOutline',\n\tappeal: 'ScaleBalance',\n\t// communication\n\tchat: 'MessageTextOutline',\n\tcomment: 'CommentOutline',\n\tmeeting: 'CalendarAccountOutline',\n\tagenda: 'CalendarTextOutline',\n\tappointment: 'CalendarClockOutline',\n\tcalendar: 'CalendarOutline',\n\tconsultation: 'CommentQuestionOutline',\n\tforum: 'ForumOutline',\n\t// people & organisations\n\tperson: 'AccountOutline',\n\tpeople: 'AccountMultipleOutline',\n\tgroup: 'AccountGroupOutline',\n\trole: 'AccountKeyOutline',\n\torganisation: 'OfficeBuildingOutline',\n\t'organisation-unit': 'Domain',\n\tpartner: 'HandshakeOutline',\n\tclient: 'AccountStarOutline',\n\temployee: 'AccountTieOutline',\n\tlead: 'AccountArrowRightOutline',\n\tprospect: 'AccountSearchOutline',\n\tsubstitution: 'AccountSwitchOutline',\n\t// commerce & finance\n\tsales: 'CartOutline',\n\tpurchasing: 'CartArrowDown',\n\tproduct: 'PackageVariantClosed',\n\tinventory: 'Warehouse',\n\torder: 'ClipboardListOutline',\n\tinvoice: 'ReceiptTextOutline',\n\tpayment: 'CreditCardOutline',\n\tpayroll: 'CashSync',\n\texpense: 'ReceiptOutline',\n\tbank: 'BankOutline',\n\t'bank-transaction': 'BankTransfer',\n\tbookkeeping: 'NotebookOutline',\n\ttax: 'PercentOutline',\n\tbudget: 'CalculatorVariantOutline',\n\tforecast: 'ChartTimelineVariant',\n\trevenue: 'CurrencyEur',\n\tpricing: 'TagOutline',\n\tsubsidy: 'HandHeartOutline',\n\t// reporting & monitoring\n\treport: 'FileChartOutline',\n\treporting: 'ChartBoxOutline',\n\tanalytics: 'ChartLineVariant',\n\tkpi: 'Speedometer',\n\tmonitoring: 'Gauge',\n\tstatistics: 'ChartBar',\n\t'process-mining': 'ChartSankey',\n\t// security & compliance\n\tsecurity: 'ShieldOutline',\n\tcompliance: 'ClipboardCheckOutline',\n\tpolicy: 'ShieldCheckOutline',\n\tvulnerability: 'ShieldAlertOutline',\n\tcertificate: 'CertificateOutline',\n\tvault: 'LockOutline',\n\tkey: 'KeyOutline',\n\tauthorization: 'ShieldKeyOutline',\n\tprivacy: 'ShieldLockOutline',\n\tanonymization: 'EyeOffOutline',\n\tconsent: 'FileCheckOutline',\n\tconfidentiality: 'FileLockOutline',\n\tretention: 'CalendarRemoveOutline',\n\tgovernance: 'ShieldCrownOutline',\n\t// integration & technology\n\tintegration: 'Api',\n\tconnection: 'TransitConnectionVariant',\n\twebhook: 'Webhook',\n\tautomation: 'VectorPolylinePlus',\n\tagent: 'RobotOutline',\n\tai: 'Brain',\n\ttool: 'ToolboxOutline',\n\tapps: 'ViewGridOutline',\n\tmodule: 'PuzzleOutline',\n\tsource: 'SourceBranch',\n\t// location & geo\n\tlocation: 'MapMarkerOutline',\n\tmap: 'MapOutline',\n\t'map-layer': 'LayersOutline',\n\t// learning\n\tcourse: 'BookOpenPageVariantOutline',\n\tlearning: 'SchoolOutline',\n\tcompetency: 'MedalOutline',\n\ttimetable: 'TableClock',\n\tprogress: 'TrendingUp',\n\tportfolio: 'BriefcaseOutline',\n\texam: 'ClipboardTextOutline',\n\tstudent: 'AccountSchoolOutline',\n\t// Publish, Test connection).\n\tview: 'EyeOutline',\n\tcreate: 'Plus',\n\tedit: 'PencilOutline',\n\tdelete: 'DeleteOutline',\n\trun: 'PlayOutline',\n\ttest: 'CheckCircleOutline',\n\tupload: 'Upload',\n\tpublish: 'CloudUploadOutline',\n\tdownload: 'Download',\n\trefresh: 'Refresh',\n\t'open-external': 'OpenInNew',\n\tcopy: 'ContentCopy',\n\tshare: 'ShareVariantOutline',\n\tfilter: 'FilterVariant',\n\tprint: 'PrinterOutline',\n\timage: 'ImageOutline',\n\tlink: 'LinkVariant',\n\tmore: 'DotsHorizontal',\n\tsave: 'ContentSave',\n\tcancel: 'CloseCircleOutline',\n\talert: 'AlertCircleOutline',\n\t// hr\n\tleave: 'CalendarWeekendOutline',\n\thours: 'ClockCheckOutline',\n\tonboarding: 'AccountPlusOutline',\n\toffboarding: 'AccountMinusOutline',\n\tvacancy: 'AccountBoxOutline',\n\tasset: 'DesktopTowerMonitor',\n\tfleet: 'CarOutline',\n})\n\n/**\n * The whole vocabulary — concept slug to canonical MDI name.\n *\n * @type {Readonly<Record<string, string>>}\n */\nexport const SEMANTIC_ICONS = Object.freeze({\n\t...SEMANTIC_ICONS_TIER_A,\n\t...SEMANTIC_ICONS_TIER_B,\n})\n\n/**\n * Which tier a concept belongs to — `'A'` (MUST) or `'B'` (SHOULD). Consumed by\n * hydra's icon-vocabulary gate to decide hard-fail vs warn.\n *\n * @type {Readonly<Record<string, 'A'|'B'>>}\n */\nexport const SEMANTIC_ICON_TIERS = Object.freeze(Object.fromEntries([\n\t...Object.keys(SEMANTIC_ICONS_TIER_A).map((c) => [c, 'A']),\n\t...Object.keys(SEMANTIC_ICONS_TIER_B).map((c) => [c, 'B']),\n]))\n\n/**\n * Canonical MDI name to its Vue component, for every icon in the vocabulary.\n * The rendering components consult this so an app never has to register a\n * vocabulary icon itself.\n *\n * @type {Readonly<Record<string, object>>}\n */\nexport const SEMANTIC_ICON_COMPONENTS = Object.freeze({\n\tAccountArrowRightOutline: AccountArrowRightOutlineIcon,\n\tAccountBoxOutline: AccountBoxOutlineIcon,\n\tAccountGroupOutline: AccountGroupOutlineIcon,\n\tAccountKeyOutline: AccountKeyOutlineIcon,\n\tAccountMinusOutline: AccountMinusOutlineIcon,\n\tAccountMultipleOutline: AccountMultipleOutlineIcon,\n\tAccountOutline: AccountOutlineIcon,\n\tAccountPlusOutline: AccountPlusOutlineIcon,\n\tAccountSchoolOutline: AccountSchoolOutlineIcon,\n\tAccountSearchOutline: AccountSearchOutlineIcon,\n\tAccountStarOutline: AccountStarOutlineIcon,\n\tAccountSwitchOutline: AccountSwitchOutlineIcon,\n\tAccountTieOutline: AccountTieOutlineIcon,\n\tAlertCircleOutline: AlertCircleOutlineIcon,\n\tApi: ApiIcon,\n\tApplicationOutline: ApplicationOutlineIcon,\n\tBankOutline: BankOutlineIcon,\n\tBankTransfer: BankTransferIcon,\n\tBellOutline: BellOutlineIcon,\n\tBookOpenPageVariantOutline: BookOpenPageVariantOutlineIcon,\n\tBookOpenVariantOutline: BookOpenVariantOutlineIcon,\n\tBookshelf: BookshelfIcon,\n\tBrain: BrainIcon,\n\tBriefcaseOutline: BriefcaseOutlineIcon,\n\tCalculatorVariantOutline: CalculatorVariantOutlineIcon,\n\tCalendarAccountOutline: CalendarAccountOutlineIcon,\n\tCalendarClockOutline: CalendarClockOutlineIcon,\n\tCalendarOutline: CalendarOutlineIcon,\n\tCalendarRemoveOutline: CalendarRemoveOutlineIcon,\n\tCalendarTextOutline: CalendarTextOutlineIcon,\n\tCalendarWeekendOutline: CalendarWeekendOutlineIcon,\n\tCarOutline: CarOutlineIcon,\n\tCartArrowDown: CartArrowDownIcon,\n\tCartOutline: CartOutlineIcon,\n\tCashSync: CashSyncIcon,\n\tCertificateOutline: CertificateOutlineIcon,\n\tChartBar: ChartBarIcon,\n\tChartBoxOutline: ChartBoxOutlineIcon,\n\tChartLineVariant: ChartLineVariantIcon,\n\tChartSankey: ChartSankeyIcon,\n\tChartTimelineVariant: ChartTimelineVariantIcon,\n\tCheckCircleOutline: CheckCircleOutlineIcon,\n\tCheckDecagramOutline: CheckDecagramOutlineIcon,\n\tCheckboxMarkedCircleOutline: CheckboxMarkedCircleOutlineIcon,\n\tClipboardAccountOutline: ClipboardAccountOutlineIcon,\n\tClipboardCheckOutline: ClipboardCheckOutlineIcon,\n\tClipboardListOutline: ClipboardListOutlineIcon,\n\tClipboardPulseOutline: ClipboardPulseOutlineIcon,\n\tClipboardTextOutline: ClipboardTextOutlineIcon,\n\tClockAlertOutline: ClockAlertOutlineIcon,\n\tClockCheckOutline: ClockCheckOutlineIcon,\n\tClockOutline: ClockOutlineIcon,\n\tCloseCircleOutline: CloseCircleOutlineIcon,\n\tCloudUploadOutline: CloudUploadOutlineIcon,\n\tCogOutline: CogOutlineIcon,\n\tCommentOutline: CommentOutlineIcon,\n\tCommentQuestionOutline: CommentQuestionOutlineIcon,\n\tContentCopy: ContentCopyIcon,\n\tContentSave: ContentSaveIcon,\n\tCreditCardOutline: CreditCardOutlineIcon,\n\tCubeOutline: CubeOutlineIcon,\n\tCurrencyEur: CurrencyEurIcon,\n\tDatabaseArrowRightOutline: DatabaseArrowRightOutlineIcon,\n\tDatabaseExportOutline: DatabaseExportOutlineIcon,\n\tDatabaseImportOutline: DatabaseImportOutlineIcon,\n\tDatabaseOutline: DatabaseOutlineIcon,\n\tDeleteOutline: DeleteOutlineIcon,\n\tDesktopTowerMonitor: DesktopTowerMonitorIcon,\n\tDomain: DomainIcon,\n\tDotsHorizontal: DotsHorizontalIcon,\n\tDownload: DownloadIcon,\n\tEmailOutline: EmailOutlineIcon,\n\tEyeOffOutline: EyeOffOutlineIcon,\n\tEyeOutline: EyeOutlineIcon,\n\tFileAlertOutline: FileAlertOutlineIcon,\n\tFileChartOutline: FileChartOutlineIcon,\n\tFileCheckOutline: FileCheckOutlineIcon,\n\tFileDocumentMultipleOutline: FileDocumentMultipleOutlineIcon,\n\tFileDocumentOutline: FileDocumentOutlineIcon,\n\tFileLockOutline: FileLockOutlineIcon,\n\tFileReplaceOutline: FileReplaceOutlineIcon,\n\tFileSign: FileSignIcon,\n\tFileTreeOutline: FileTreeOutlineIcon,\n\tFilterVariant: FilterVariantIcon,\n\tFolderAccountOutline: FolderAccountOutlineIcon,\n\tFolderCogOutline: FolderCogOutlineIcon,\n\tFolderOutline: FolderOutlineIcon,\n\tFormatListChecks: FormatListChecksIcon,\n\tForumOutline: ForumOutlineIcon,\n\tGauge: GaugeIcon,\n\tGavel: GavelIcon,\n\tHandHeartOutline: HandHeartOutlineIcon,\n\tHandshakeOutline: HandshakeOutlineIcon,\n\tHistory: HistoryIcon,\n\tImageOutline: ImageOutlineIcon,\n\tInformationOutline: InformationOutlineIcon,\n\tKeyOutline: KeyOutlineIcon,\n\tLayersOutline: LayersOutlineIcon,\n\tLinkVariant: LinkVariantIcon,\n\tLockOutline: LockOutlineIcon,\n\tMagnify: MagnifyIcon,\n\tMapMarkerOutline: MapMarkerOutlineIcon,\n\tMapMarkerPath: MapMarkerPathIcon,\n\tMapOutline: MapOutlineIcon,\n\tMedalOutline: MedalOutlineIcon,\n\tMessageTextOutline: MessageTextOutlineIcon,\n\tNotebookOutline: NotebookOutlineIcon,\n\tOfficeBuildingOutline: OfficeBuildingOutlineIcon,\n\tOpenInNew: OpenInNewIcon,\n\tPackageVariantClosed: PackageVariantClosedIcon,\n\tPaperclip: PaperclipIcon,\n\tPencilOutline: PencilOutlineIcon,\n\tPercentOutline: PercentOutlineIcon,\n\tPlayCircleOutline: PlayCircleOutlineIcon,\n\tPlayOutline: PlayOutlineIcon,\n\tPlus: PlusIcon,\n\tPrinterOutline: PrinterOutlineIcon,\n\tPulse: PulseIcon,\n\tPuzzleOutline: PuzzleOutlineIcon,\n\tReceiptOutline: ReceiptOutlineIcon,\n\tReceiptTextOutline: ReceiptTextOutlineIcon,\n\tRefresh: RefreshIcon,\n\tRobotOutline: RobotOutlineIcon,\n\tScaleBalance: ScaleBalanceIcon,\n\tSchoolOutline: SchoolOutlineIcon,\n\tShareVariantOutline: ShareVariantOutlineIcon,\n\tShieldAccountOutline: ShieldAccountOutlineIcon,\n\tShieldAlertOutline: ShieldAlertOutlineIcon,\n\tShieldCheckOutline: ShieldCheckOutlineIcon,\n\tShieldCrownOutline: ShieldCrownOutlineIcon,\n\tShieldKeyOutline: ShieldKeyOutlineIcon,\n\tShieldLockOutline: ShieldLockOutlineIcon,\n\tShieldOutline: ShieldOutlineIcon,\n\tSignatureFreehand: SignatureFreehandIcon,\n\tSitemapOutline: SitemapOutlineIcon,\n\tSourceBranch: SourceBranchIcon,\n\tSpeedometer: SpeedometerIcon,\n\tStoreOutline: StoreOutlineIcon,\n\tSwapHorizontal: SwapHorizontalIcon,\n\tTableClock: TableClockIcon,\n\tTagOutline: TagOutlineIcon,\n\tTextBoxOutline: TextBoxOutlineIcon,\n\tToolboxOutline: ToolboxOutlineIcon,\n\tTransitConnectionVariant: TransitConnectionVariantIcon,\n\tTrayFull: TrayFullIcon,\n\tTrendingUp: TrendingUpIcon,\n\tUpload: UploadIcon,\n\tVectorPolylinePlus: VectorPolylinePlusIcon,\n\tViewColumnOutline: ViewColumnOutlineIcon,\n\tViewDashboardOutline: ViewDashboardOutlineIcon,\n\tViewGridOutline: ViewGridOutlineIcon,\n\tWarehouse: WarehouseIcon,\n\tWebhook: WebhookIcon,\n})\n\n/**\n * Reverse lookup — the concept a canonical icon name stands for.\n *\n * @param {string} name Canonical MDI icon name.\n * @return {string|null} The concept slug, or null when the name is not in the\n * vocabulary.\n */\nexport function conceptForIcon(name) {\n\tfor (const [concept, icon] of Object.entries(SEMANTIC_ICONS)) {\n\t\tif (icon === name) {\n\t\t\treturn concept\n\t\t}\n\t}\n\treturn null\n}\n\n/**\n * Resolve a vocabulary icon name to its component.\n *\n * @param {string|null|undefined} name Canonical MDI icon name.\n * @return {object|null} The Vue component, or null when not in the vocabulary.\n */\nexport function getSemanticIconComponent(name) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\treturn null\n\t}\n\treturn SEMANTIC_ICON_COMPONENTS[name] ?? null\n}\n"],"names":["AccountGroupOutlineIcon","AccountOutlineIcon","AlertCircleOutlineIcon","BellOutlineIcon","BriefcaseOutlineIcon","CalendarClockOutlineIcon","CalendarOutlineIcon","ChartBarIcon","CheckCircleOutlineIcon","ClipboardCheckOutlineIcon","ClipboardListOutlineIcon","ClockOutlineIcon","CloseCircleOutlineIcon","CogOutlineIcon","CommentOutlineIcon","ContentCopyIcon","ContentSaveIcon","CurrencyEurIcon","DatabaseOutlineIcon","DeleteOutlineIcon","DomainIcon","DotsHorizontalIcon","DownloadIcon","EmailOutlineIcon","EyeOutlineIcon","FileDocumentOutlineIcon","FolderAccountOutlineIcon","FolderOutlineIcon","FormatListChecksIcon","HistoryIcon","InformationOutlineIcon","KeyOutlineIcon","LinkVariantIcon","LockOutlineIcon","MagnifyIcon","MapMarkerOutlineIcon","MapOutlineIcon","OpenInNewIcon","PackageVariantClosedIcon","PaperclipIcon","PencilOutlineIcon","PlayCircleOutlineIcon","PlusIcon","PulseIcon","RefreshIcon","ShareVariantOutlineIcon","ShieldAccountOutlineIcon","ShieldKeyOutlineIcon","ShieldOutlineIcon","SitemapOutlineIcon","TagOutlineIcon","UploadIcon","ViewColumnOutlineIcon","ViewDashboardOutlineIcon","ViewGridOutlineIcon"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import script from './CnObjectPermissionsTab.vue2.js';
|
|
2
|
+
import { render } from './CnObjectPermissionsTab.vue3.js';
|
|
3
|
+
|
|
4
|
+
script.render = render;
|
|
5
|
+
script.__scopeId = "data-v-7b7204e8";
|
|
6
|
+
const __sfc_main = script;
|
|
7
|
+
|
|
8
|
+
export { __sfc_main as default };
|
|
9
|
+
//# sourceMappingURL=CnObjectPermissionsTab.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnObjectPermissionsTab.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { translate } from '@nextcloud/l10n';
|
|
2
|
+
import { NcLoadingIcon } from '@nextcloud/vue';
|
|
3
|
+
import { DEFAULT_API_BASE, roleRuleLabels, roleRuleSentence, fetchObjectPermissions, fetchPermissionCatalogue, fetchObjectGrants, fetchRoleGrants, fetchCallerScope, fetchDenyRules, fetchFieldRoleRules, fieldRoleRows, grantRows, fetchAccessHistory, asOfRows } from '../../utils/objectPermissions.js';
|
|
4
|
+
|
|
5
|
+
/** OpenRegister's answer to a reader who may open the object and not review it. */
|
|
6
|
+
const REVIEW_REFUSED = 403;
|
|
7
|
+
|
|
8
|
+
var script = {
|
|
9
|
+
name: 'CnObjectPermissionsTab',
|
|
10
|
+
components: { NcLoadingIcon },
|
|
11
|
+
|
|
12
|
+
props: {
|
|
13
|
+
/** The object uuid (injected by CnObjectSidebar). */
|
|
14
|
+
objectId: { type: String, default: '' },
|
|
15
|
+
/** Register slug or uuid (injected by CnObjectSidebar). */
|
|
16
|
+
register: { type: String, default: '' },
|
|
17
|
+
/** Schema slug or uuid (injected by CnObjectSidebar). */
|
|
18
|
+
schema: { type: String, default: '' },
|
|
19
|
+
/** OpenRegister API root. */
|
|
20
|
+
apiBase: { type: String, default: DEFAULT_API_BASE },
|
|
21
|
+
/** Offer "who held a right on a date" when OpenRegister answers the history read. */
|
|
22
|
+
historyEnabled: { type: Boolean, default: true },
|
|
23
|
+
/**
|
|
24
|
+
* Where the per-role field rules are declared:
|
|
25
|
+
* `{ typeField, typeSchema, declarationField? }`. The object's
|
|
26
|
+
* `typeField` references a `typeSchema` object in the same register
|
|
27
|
+
* whose `declarationField` (default `fieldRoleRules`) lists the rules.
|
|
28
|
+
* `null` leaves the field-rules section out.
|
|
29
|
+
*/
|
|
30
|
+
fieldRules: { type: Object, default: null },
|
|
31
|
+
/** Heading; empty uses the translated default. */
|
|
32
|
+
title: { type: String, default: '' },
|
|
33
|
+
/**
|
|
34
|
+
* Labels per source key, overriding the defaults (e.g. `{ group: '…' }`).
|
|
35
|
+
* An unknown key renders as itself.
|
|
36
|
+
*/
|
|
37
|
+
sourceLabels: { type: Object, default: () => ({}) },
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
data() {
|
|
41
|
+
return {
|
|
42
|
+
loading: true,
|
|
43
|
+
rows: [],
|
|
44
|
+
catalogue: [],
|
|
45
|
+
enforcement: '',
|
|
46
|
+
unreadable: [],
|
|
47
|
+
reviewRefused: false,
|
|
48
|
+
historyReadable: false,
|
|
49
|
+
fieldRows: [],
|
|
50
|
+
moment: '',
|
|
51
|
+
momentLoading: false,
|
|
52
|
+
asOf: null,
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
computed: {
|
|
57
|
+
target() {
|
|
58
|
+
return { register: this.register, schema: this.schema, apiBase: this.apiBase }
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
ruleLabels() {
|
|
62
|
+
return roleRuleLabels()
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/** Today, so nobody asks the trail about a date that has not happened. */
|
|
66
|
+
today() {
|
|
67
|
+
return new Date().toISOString().slice(0, 10)
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
setBySentence() {
|
|
71
|
+
if (!this.asOf?.setBy) {
|
|
72
|
+
return translate('nextcloud-vue', 'These rights stood on that date. Nobody is named as setting them.')
|
|
73
|
+
}
|
|
74
|
+
return translate('nextcloud-vue', '{who} set these rights.', { who: this.asOf.setBy })
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
changedAfterwardsSentence() {
|
|
78
|
+
const change = this.asOf?.changedAfterwardsBy;
|
|
79
|
+
if (!change) {
|
|
80
|
+
return ''
|
|
81
|
+
}
|
|
82
|
+
return translate('nextcloud-vue', '{who} changed them afterwards, on {date}.', {
|
|
83
|
+
who: change.by || translate('nextcloud-vue', 'Somebody'),
|
|
84
|
+
date: change.at || translate('nextcloud-vue', 'a date the trail does not give'),
|
|
85
|
+
})
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
enforcementSentence() {
|
|
89
|
+
if (this.enforcement === 'enforcing') {
|
|
90
|
+
return translate('nextcloud-vue', 'A refusal below is in force now.')
|
|
91
|
+
}
|
|
92
|
+
if (this.enforcement === 'off') {
|
|
93
|
+
return translate('nextcloud-vue', 'Refusals are switched off, so no rule below removes a right.')
|
|
94
|
+
}
|
|
95
|
+
return translate('nextcloud-vue', 'Refusals are staged: a rule below is recorded, and removes a right once it is switched on.')
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
watch: {
|
|
100
|
+
objectId() {
|
|
101
|
+
this.asOf = null;
|
|
102
|
+
this.moment = '';
|
|
103
|
+
this.load();
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
mounted() {
|
|
108
|
+
this.load();
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
methods: {
|
|
112
|
+
t: translate,
|
|
113
|
+
|
|
114
|
+
sentenceFor(row) {
|
|
115
|
+
return roleRuleSentence(row)
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Ask OpenRegister once and render what came back.
|
|
120
|
+
*
|
|
121
|
+
* @return {Promise<void>}
|
|
122
|
+
*/
|
|
123
|
+
async load() {
|
|
124
|
+
this.loading = true;
|
|
125
|
+
const permissions = this.objectId
|
|
126
|
+
? await fetchObjectPermissions(this.target, this.objectId)
|
|
127
|
+
: { status: 0, set: null };
|
|
128
|
+
|
|
129
|
+
// A 403 is OpenRegister answering "not you", not a failed read.
|
|
130
|
+
this.reviewRefused = permissions.status === REVIEW_REFUSED;
|
|
131
|
+
this.historyReadable = permissions.set !== null;
|
|
132
|
+
const fallback = permissions.set === null;
|
|
133
|
+
|
|
134
|
+
const [catalogue, objectGrants, roleGrants, callerScope, denyRules, fieldRules] = await Promise.all([
|
|
135
|
+
fetchPermissionCatalogue(this.target),
|
|
136
|
+
fallback && this.objectId ? fetchObjectGrants(this.target, this.objectId) : null,
|
|
137
|
+
fallback ? fetchRoleGrants(this.target) : null,
|
|
138
|
+
fetchCallerScope(this.target),
|
|
139
|
+
fallback ? fetchDenyRules(this.target) : null,
|
|
140
|
+
this.fieldRules ? fetchFieldRoleRules(this.target, this.objectId, this.fieldRules) : { decided: null, declared: null },
|
|
141
|
+
]);
|
|
142
|
+
|
|
143
|
+
this.fieldRows = fieldRoleRows(fieldRules.declared, fieldRules.decided);
|
|
144
|
+
|
|
145
|
+
// Each failed read is named: an auditor reading a short list has to
|
|
146
|
+
// know which source is missing from it.
|
|
147
|
+
const missing = [];
|
|
148
|
+
if (catalogue === null) {
|
|
149
|
+
missing.push(translate('nextcloud-vue', 'the rights it publishes'));
|
|
150
|
+
}
|
|
151
|
+
if (permissions.set === null) {
|
|
152
|
+
if (objectGrants === null) {
|
|
153
|
+
missing.push(translate('nextcloud-vue', 'the shares on this record'));
|
|
154
|
+
}
|
|
155
|
+
if (roleGrants === null) {
|
|
156
|
+
missing.push(translate('nextcloud-vue', 'the roles'));
|
|
157
|
+
}
|
|
158
|
+
if (denyRules === null) {
|
|
159
|
+
missing.push(translate('nextcloud-vue', 'the refusals'));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (callerScope === null) {
|
|
163
|
+
missing.push(translate('nextcloud-vue', 'your own rights'));
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
this.catalogue = catalogue?.permissions || [];
|
|
167
|
+
this.enforcement = permissions.set?.denyEnforcement || catalogue?.denyEnforcement || denyRules?.denyEnforcement || '';
|
|
168
|
+
this.unreadable = this.reviewRefused ? [] : missing;
|
|
169
|
+
this.rows = grantRows({ objectPermissions: permissions.set, objectGrants, roleGrants, callerScope, denyRules });
|
|
170
|
+
this.loading = false;
|
|
171
|
+
},
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Ask the trail who held a right at the end of the picked day.
|
|
175
|
+
*
|
|
176
|
+
* @return {Promise<void>}
|
|
177
|
+
*/
|
|
178
|
+
async loadMoment() {
|
|
179
|
+
if (this.moment === '' || this.objectId === '') {
|
|
180
|
+
this.asOf = null;
|
|
181
|
+
return
|
|
182
|
+
}
|
|
183
|
+
this.momentLoading = true;
|
|
184
|
+
// End of that day, so a grant written during it counts as standing on it.
|
|
185
|
+
const { history } = await fetchAccessHistory(this.target, this.objectId, `${this.moment}T23:59:59`);
|
|
186
|
+
this.asOf = asOfRows(history);
|
|
187
|
+
this.momentLoading = false;
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
roleHint(row) {
|
|
191
|
+
if (!row?.role) {
|
|
192
|
+
return row?.detail || ''
|
|
193
|
+
}
|
|
194
|
+
return translate('nextcloud-vue', 'Through the role {role}', { role: row.role })
|
|
195
|
+
},
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Which record handed this rule down, named inside a sentence, never bare.
|
|
199
|
+
*
|
|
200
|
+
* @param {object} row One row.
|
|
201
|
+
* @return {string} The sentence, or ''.
|
|
202
|
+
*/
|
|
203
|
+
inheritedHint(row) {
|
|
204
|
+
if (!row?.inheritedFrom) {
|
|
205
|
+
return ''
|
|
206
|
+
}
|
|
207
|
+
return translate('nextcloud-vue', 'Granted on record {record}, which this one hangs under', { record: row.inheritedFrom })
|
|
208
|
+
},
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* The end as OpenRegister wrote it: printed, never judged against a clock.
|
|
212
|
+
*
|
|
213
|
+
* @param {object} row One row.
|
|
214
|
+
* @return {string} The sentence.
|
|
215
|
+
*/
|
|
216
|
+
endsHint(row) {
|
|
217
|
+
return translate('nextcloud-vue', 'Written to end on {date}', { date: row.until })
|
|
218
|
+
},
|
|
219
|
+
|
|
220
|
+
areaHint(row) {
|
|
221
|
+
const named = [...(row?.scopedTo?.registers || []), ...(row?.scopedTo?.schemas || [])]
|
|
222
|
+
.filter((name) => typeof name === 'string' && name !== '');
|
|
223
|
+
if (named.length === 0) {
|
|
224
|
+
return ''
|
|
225
|
+
}
|
|
226
|
+
return translate('nextcloud-vue', 'Only in {areas}', { areas: named.join(', ') })
|
|
227
|
+
},
|
|
228
|
+
|
|
229
|
+
describe(right) {
|
|
230
|
+
const entry = this.catalogue.find((permission) => permission?.action === right);
|
|
231
|
+
return entry?.description || ''
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
sourceLabel(source) {
|
|
235
|
+
if (this.sourceLabels && this.sourceLabels[source]) {
|
|
236
|
+
return this.sourceLabels[source]
|
|
237
|
+
}
|
|
238
|
+
const labels = {
|
|
239
|
+
share: translate('nextcloud-vue', 'A share on this record'),
|
|
240
|
+
role: translate('nextcloud-vue', 'A role'),
|
|
241
|
+
group: translate('nextcloud-vue', 'A grant on a group of types'),
|
|
242
|
+
object: translate('nextcloud-vue', 'A rule on this record'),
|
|
243
|
+
schema: translate('nextcloud-vue', 'A rule on every record of this type'),
|
|
244
|
+
register: translate('nextcloud-vue', 'A rule on the register'),
|
|
245
|
+
deny: translate('nextcloud-vue', 'A rule that refuses'),
|
|
246
|
+
'staged-deny': translate('nextcloud-vue', 'A rule that will refuse'),
|
|
247
|
+
'default-open': translate('nextcloud-vue', 'No rule, so it is open'),
|
|
248
|
+
none: translate('nextcloud-vue', 'No rule grants it'),
|
|
249
|
+
inherited: translate('nextcloud-vue', 'A grant on a record this one hangs under'),
|
|
250
|
+
};
|
|
251
|
+
return labels[source] || source
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
export { script as default };
|
|
257
|
+
//# sourceMappingURL=CnObjectPermissionsTab.vue2.js.map
|