@conduction/nextcloud-vue 2.119.0 → 2.121.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue.js +9 -0
  2. package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue.js.map +1 -0
  3. package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue2.js +226 -0
  4. package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue2.js.map +1 -0
  5. package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue3.js +211 -0
  6. package/dist/esm/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue3.js.map +1 -0
  7. package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue.js +9 -0
  8. package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue.js.map +1 -0
  9. package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue2.js +64 -0
  10. package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue2.js.map +1 -0
  11. package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue3.js +89 -0
  12. package/dist/esm/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue3.js.map +1 -0
  13. package/dist/esm/components/CnIcon/semanticIcons.js +2 -2
  14. package/dist/esm/components/CnIcon/semanticIcons.js.map +1 -1
  15. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +53 -1
  16. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  17. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +546 -523
  18. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  19. package/dist/esm/components/CnIndexPage/useNamedSource.js +9 -0
  20. package/dist/esm/components/CnIndexPage/useNamedSource.js.map +1 -1
  21. package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue.js +9 -0
  22. package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue.js.map +1 -0
  23. package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue2.js +257 -0
  24. package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue2.js.map +1 -0
  25. package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue3.js +266 -0
  26. package/dist/esm/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue3.js.map +1 -0
  27. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue.js +1 -1
  28. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue2.js +14 -7
  29. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue2.js.map +1 -1
  30. package/dist/esm/components/CnObjectSidebar/CnObjectSidebar.vue3.js.map +1 -1
  31. package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue.js +9 -0
  32. package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue.js.map +1 -0
  33. package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue2.js +278 -0
  34. package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue2.js.map +1 -0
  35. package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue3.js +128 -0
  36. package/dist/esm/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue3.js.map +1 -0
  37. package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue.js +9 -0
  38. package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue.js.map +1 -0
  39. package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue2.js +214 -0
  40. package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue2.js.map +1 -0
  41. package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue3.js +125 -0
  42. package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue3.js.map +1 -0
  43. package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js +9 -0
  44. package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js.map +1 -0
  45. package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue2.js +163 -0
  46. package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue2.js.map +1 -0
  47. package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue3.js +131 -0
  48. package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue3.js.map +1 -0
  49. package/dist/esm/components/CnSchemaRulesWidget/schemaRules.js +127 -0
  50. package/dist/esm/components/CnSchemaRulesWidget/schemaRules.js.map +1 -0
  51. package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue.js +9 -0
  52. package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue.js.map +1 -0
  53. package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue2.js +82 -0
  54. package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue2.js.map +1 -0
  55. package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue3.js +61 -0
  56. package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue3.js.map +1 -0
  57. package/dist/esm/components/CnSearchIndexStatus/searchIndexStatus.js +60 -0
  58. package/dist/esm/components/CnSearchIndexStatus/searchIndexStatus.js.map +1 -0
  59. package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue.js +10 -0
  60. package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue.js.map +1 -0
  61. package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js +226 -0
  62. package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js.map +1 -0
  63. package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js +126 -0
  64. package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js.map +1 -0
  65. package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue.js +10 -0
  66. package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue.js.map +1 -0
  67. package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue2.js +944 -0
  68. package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue2.js.map +1 -0
  69. package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue3.js +276 -0
  70. package/dist/esm/components/CnStateMachineEditor/CnStateMachineEditor.vue3.js.map +1 -0
  71. package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue.js +9 -0
  72. package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue.js.map +1 -0
  73. package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue2.js +354 -0
  74. package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue2.js.map +1 -0
  75. package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue3.js +392 -0
  76. package/dist/esm/components/CnStateMachineEditor/CnStateMachineFields.vue3.js.map +1 -0
  77. package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue.js +9 -0
  78. package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue.js.map +1 -0
  79. package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue2.js +180 -0
  80. package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue2.js.map +1 -0
  81. package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue3.js +208 -0
  82. package/dist/esm/components/CnStateMachineEditor/CnStateMachineNode.vue3.js.map +1 -0
  83. package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue.js +9 -0
  84. package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue.js.map +1 -0
  85. package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue2.js +244 -0
  86. package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue2.js.map +1 -0
  87. package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue3.js +76 -0
  88. package/dist/esm/components/CnStateMachineEditor/CnStateMachinePanel.vue3.js.map +1 -0
  89. package/dist/esm/components/CnStateMachineEditor/stateMachineFields.js +290 -0
  90. package/dist/esm/components/CnStateMachineEditor/stateMachineFields.js.map +1 -0
  91. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js +9 -0
  92. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue.js.map +1 -0
  93. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js +448 -0
  94. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue2.js.map +1 -0
  95. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js +303 -0
  96. package/dist/esm/components/CnTimelineWidget/CnTimelineManage.vue3.js.map +1 -0
  97. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue.js +1 -1
  98. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js +19 -2
  99. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue2.js.map +1 -1
  100. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js +73 -62
  101. package/dist/esm/components/CnTimelineWidget/CnTimelineWidget.vue3.js.map +1 -1
  102. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js +6 -0
  103. package/dist/esm/components/CnWidgetGrid/builtInWidgets.js.map +1 -1
  104. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +42 -32
  105. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  106. package/dist/esm/composables/indexSources.js +116 -16
  107. package/dist/esm/composables/indexSources.js.map +1 -1
  108. package/dist/esm/index.js +9 -0
  109. package/dist/esm/index.js.map +1 -1
  110. package/dist/esm/l10n/en.json.js +207 -1
  111. package/dist/esm/l10n/en.json.js.map +1 -1
  112. package/dist/esm/l10n/nl.json.js +207 -1
  113. package/dist/esm/l10n/nl.json.js.map +1 -1
  114. package/dist/esm/library-style.js +1 -1
  115. package/dist/esm/nextcloud-vue.css +951 -16
  116. package/dist/esm/utils/aiFeatures.js +245 -0
  117. package/dist/esm/utils/aiFeatures.js.map +1 -0
  118. package/dist/esm/utils/aiSuggestionTracker.js +182 -0
  119. package/dist/esm/utils/aiSuggestionTracker.js.map +1 -0
  120. package/dist/esm/utils/libraryWidgetKeys.js +2 -0
  121. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  122. package/dist/esm/utils/objectPermissions.js +552 -0
  123. package/dist/esm/utils/objectPermissions.js.map +1 -0
  124. package/dist/esm/utils/objectTranslations.js +180 -0
  125. package/dist/esm/utils/objectTranslations.js.map +1 -0
  126. package/dist/esm/utils/stateMachineValidation.js +254 -0
  127. package/dist/esm/utils/stateMachineValidation.js.map +1 -0
  128. package/dist/esm/utils/widgetDispatch.js +3 -1
  129. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  130. package/dist/nextcloud-vue.cjs.js +23038 -14567
  131. package/dist/nextcloud-vue.cjs.js.map +2 -2
  132. package/dist/nextcloud-vue.css +951 -16
  133. package/l10n/en.json +207 -1
  134. package/l10n/nl.json +207 -1
  135. package/package.json +1 -1
  136. package/src/components/CnAiFeaturesWidget/CnAiFeaturesWidget.vue +416 -0
  137. package/src/components/CnAiFeaturesWidget/CnAiSuggestionDecision.vue +136 -0
  138. package/src/components/CnAiFeaturesWidget/__tests__/CnAiFeaturesWidget.spec.js +213 -0
  139. package/src/components/CnAiFeaturesWidget/index.js +14 -0
  140. package/src/components/CnIndexPage/CnIndexPage.vue +74 -3
  141. package/src/components/CnIndexPage/useNamedSource.js +9 -0
  142. package/src/components/CnObjectPermissionsTab/CnObjectPermissionsTab.vue +499 -0
  143. package/src/components/CnObjectPermissionsTab/__tests__/CnObjectPermissionsTab.spec.js +186 -0
  144. package/src/components/CnObjectPermissionsTab/index.js +13 -0
  145. package/src/components/CnObjectSidebar/CnObjectSidebar.vue +8 -1
  146. package/src/components/CnObjectTranslationsWidget/CnObjectTranslationsWidget.vue +424 -0
  147. package/src/components/CnObjectTranslationsWidget/__tests__/CnObjectTranslationsWidget.spec.js +189 -0
  148. package/src/components/CnObjectTranslationsWidget/index.js +13 -0
  149. package/src/components/CnReadinessChecklist/CnReadinessChecklist.vue +335 -0
  150. package/src/components/CnReadinessChecklist/index.js +9 -0
  151. package/src/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue +300 -0
  152. package/src/components/CnSchemaRulesWidget/index.js +10 -0
  153. package/src/components/CnSchemaRulesWidget/schemaRules.js +123 -0
  154. package/src/components/CnSearchIndexStatus/CnSearchIndexStatus.vue +160 -0
  155. package/src/components/CnSearchIndexStatus/index.js +10 -0
  156. package/src/components/CnSearchIndexStatus/searchIndexStatus.js +56 -0
  157. package/src/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue +328 -0
  158. package/src/components/CnShippedConfigurationSection/index.js +9 -0
  159. package/src/components/CnStateMachineEditor/CnStateMachineEditor.vue +1332 -0
  160. package/src/components/CnStateMachineEditor/CnStateMachineFields.vue +791 -0
  161. package/src/components/CnStateMachineEditor/CnStateMachineNode.vue +442 -0
  162. package/src/components/CnStateMachineEditor/CnStateMachinePanel.vue +326 -0
  163. package/src/components/CnStateMachineEditor/index.js +8 -0
  164. package/src/components/CnStateMachineEditor/stateMachineFields.js +287 -0
  165. package/src/components/CnTimelineWidget/CnTimelineManage.vue +827 -0
  166. package/src/components/CnTimelineWidget/CnTimelineWidget.vue +29 -3
  167. package/src/components/CnWidgetGrid/builtInWidgets.js +6 -0
  168. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +10 -0
  169. package/src/components/index.js +8 -0
  170. package/src/composables/indexSources.js +116 -16
  171. package/src/css/index-page.css +7 -0
  172. package/src/index.js +9 -0
  173. package/src/utils/aiFeatures.js +241 -0
  174. package/src/utils/aiSuggestionTracker.js +178 -0
  175. package/src/utils/libraryWidgetKeys.js +2 -0
  176. package/src/utils/objectPermissions.js +548 -0
  177. package/src/utils/objectTranslations.js +176 -0
  178. package/src/utils/stateMachineValidation.js +250 -0
  179. package/src/utils/widgetDispatch.js +3 -1
@@ -0,0 +1,354 @@
1
+ import { translate } from '@nextcloud/l10n';
2
+ import { NcButton } from '@nextcloud/vue';
3
+ import ArrowDown from 'vue-material-design-icons/ArrowDown.vue';
4
+ import ArrowUp from 'vue-material-design-icons/ArrowUp.vue';
5
+ import ChevronDown from 'vue-material-design-icons/ChevronDown.vue';
6
+ import ChevronRight from 'vue-material-design-icons/ChevronRight.vue';
7
+ import Close from 'vue-material-design-icons/Close.vue';
8
+ import DragVertical from 'vue-material-design-icons/DragVertical.vue';
9
+ import { newListItem } from './stateMachineFields.js';
10
+
11
+ /**
12
+ * Renders field descriptors against one object of a property panel's copy.
13
+ *
14
+ * Every write goes through the panel's injected `set`, so the panel owns the
15
+ * copy and hears each change. Recursive for groups, rows and typed lists.
16
+ */
17
+ var script = {
18
+ name: 'CnStateMachineFields',
19
+
20
+ components: { NcButton, ArrowDown, ArrowUp, ChevronDown, ChevronRight, Close, DragVertical },
21
+
22
+ inject: ['cnStateMachinePanel'],
23
+
24
+ props: {
25
+ /** The field descriptors to render. */
26
+ fields: {
27
+ type: Array,
28
+ default: () => [],
29
+ },
30
+
31
+ /** The object of the panel's copy these fields edit. */
32
+ target: {
33
+ type: Object,
34
+ required: true,
35
+ },
36
+
37
+ /** Where `target` sits in the copy, for ids and optional-group state. */
38
+ path: {
39
+ type: String,
40
+ default: '',
41
+ },
42
+
43
+ /** Disable every control. */
44
+ disabled: {
45
+ type: Boolean,
46
+ default: false,
47
+ },
48
+
49
+ /** Lay the fields out on one line. */
50
+ row: {
51
+ type: Boolean,
52
+ default: false,
53
+ },
54
+ },
55
+
56
+ data() {
57
+ return {
58
+ open: {},
59
+ dragIndex: null,
60
+ dragKey: null,
61
+ }
62
+ },
63
+
64
+ computed: {
65
+ /**
66
+ * @return {object} The owning panel's API.
67
+ */
68
+ panel() {
69
+ return this.cnStateMachinePanel
70
+ },
71
+ },
72
+
73
+ methods: {
74
+ t: translate,
75
+
76
+ /**
77
+ * @param {object} field A descriptor.
78
+ * @return {boolean} Whether its controls are disabled.
79
+ */
80
+ isDisabled(field) {
81
+ return this.disabled || (field.lockable === true && this.panel.locked === true)
82
+ },
83
+
84
+ /**
85
+ * @param {object} field A descriptor.
86
+ * @return {string} The path of the object a group or list edits.
87
+ */
88
+ childPath(field) {
89
+ if (!field.key) {
90
+ return this.path
91
+ }
92
+ return this.path ? `${this.path}.${field.key}` : field.key
93
+ },
94
+
95
+ /**
96
+ * @param {object} field A descriptor.
97
+ * @param {string} [suffix] A part name.
98
+ * @return {string} A DOM id unique within the editor.
99
+ */
100
+ idFor(field, suffix = '') {
101
+ const raw = [this.panel.uid, this.childPath(field) || field.type, suffix].filter(Boolean).join('-');
102
+ return raw.replace(/[^A-Za-z0-9_-]/g, '-')
103
+ },
104
+
105
+ /**
106
+ * @param {object} field A descriptor.
107
+ * @return {string|null} The width modifier class.
108
+ */
109
+ widthClass(field) {
110
+ return field.width === 'narrow' ? 'cn-sm-field--narrow' : null
111
+ },
112
+
113
+ /**
114
+ * @param {object} field A collapsible group.
115
+ * @return {boolean} Whether it is open.
116
+ */
117
+ isOpen(field) {
118
+ const key = this.childPath(field) || field.label;
119
+ return this.open[key] ?? field.open === true
120
+ },
121
+
122
+ /**
123
+ * @param {object} field A collapsible group.
124
+ * @return {void}
125
+ */
126
+ toggleOpen(field) {
127
+ const key = this.childPath(field) || field.label;
128
+ this.open = { ...this.open, [key]: !this.isOpen(field) };
129
+ },
130
+
131
+ /**
132
+ * @param {object} field A text or number descriptor.
133
+ * @param {string} raw The input's value.
134
+ * @return {void}
135
+ */
136
+ onInput(field, raw) {
137
+ if (field.type === 'number') {
138
+ this.panel.set(this.target, field.key, raw === '' ? null : Number(raw));
139
+ return
140
+ }
141
+ this.panel.set(this.target, field.key, raw);
142
+ },
143
+
144
+ /**
145
+ * @param {object} field A select descriptor.
146
+ * @return {Array<object>} Its options, the empty option first.
147
+ */
148
+ selectOptions(field) {
149
+ const options = this.panel.optionsOf(field);
150
+ if (field.emptyOption) {
151
+ return [{ value: field.emptyOption.value ?? null, label: this.panel.tr(field.emptyOption.label || '') }, ...options]
152
+ }
153
+ return options
154
+ },
155
+
156
+ /**
157
+ * @param {unknown} a One value.
158
+ * @param {unknown} b Another.
159
+ * @return {boolean} Whether they are the same option, treating null and undefined alike.
160
+ */
161
+ sameValue(a, b) {
162
+ return (a ?? null) === (b ?? null)
163
+ },
164
+
165
+ /**
166
+ * @param {object} field A select descriptor.
167
+ * @param {string} index The chosen option's index.
168
+ * @return {void}
169
+ */
170
+ onSelect(field, index) {
171
+ const option = this.selectOptions(field)[Number(index)];
172
+ this.panel.set(this.target, field.key, option ? option.value : null);
173
+ },
174
+
175
+ /**
176
+ * @param {object} field A checkboxes descriptor.
177
+ * @param {unknown} value The option toggled.
178
+ * @return {void}
179
+ */
180
+ toggleOption(field, value) {
181
+ const current = [...(this.target[field.key] || [])];
182
+ const at = current.indexOf(value);
183
+ if (at >= 0) {
184
+ current.splice(at, 1);
185
+ } else {
186
+ current.push(value);
187
+ }
188
+ this.panel.set(this.target, field.key, current);
189
+ },
190
+
191
+ /**
192
+ * @param {object} field A list descriptor.
193
+ * @param {unknown} item An entry.
194
+ * @param {number} index Its index.
195
+ * @return {string} A stable key for the entry.
196
+ */
197
+ itemKey(field, item, index) {
198
+ if (field.idKey && item && typeof item === 'object' && item[field.idKey] !== undefined) {
199
+ return String(item[field.idKey])
200
+ }
201
+ return `${field.key}-${index}`
202
+ },
203
+
204
+ /**
205
+ * @param {object} field A list descriptor.
206
+ * @param {unknown} item An entry.
207
+ * @return {string} The text the entry's input shows.
208
+ */
209
+ itemText(field, item) {
210
+ if (field.itemType === 'object') {
211
+ return (item && item[field.itemKey || 'label']) ?? ''
212
+ }
213
+ return item ?? ''
214
+ },
215
+
216
+ /**
217
+ * @param {object} field A list descriptor.
218
+ * @param {number} index The entry.
219
+ * @param {string} value The new text.
220
+ * @return {void}
221
+ */
222
+ setItemText(field, index, value) {
223
+ const list = this.target[field.key];
224
+ if (field.itemType === 'object') {
225
+ this.panel.set(list[index], field.itemKey || 'label', value);
226
+ return
227
+ }
228
+ this.panel.set(list, index, value);
229
+ },
230
+
231
+ /**
232
+ * @param {object} field A list descriptor.
233
+ * @param {number} index The entry.
234
+ * @return {string} The entry input's accessible name.
235
+ */
236
+ itemAriaLabel(field, index) {
237
+ const label = this.panel.tr(field.itemLabel || field.label);
238
+ return this.target[field.key].length > 1 ? `${label} ${index + 1}` : label
239
+ },
240
+
241
+ /**
242
+ * @param {object} field A list descriptor.
243
+ * @param {number} index The entry.
244
+ * @return {string} The remove button's accessible name.
245
+ */
246
+ removeLabel(field, index) {
247
+ const label = this.panel.tr(field.removeLabel) || translate('nextcloud-vue', 'Remove');
248
+ return this.target[field.key].length > 1 ? `${label} ${index + 1}` : label
249
+ },
250
+
251
+ /**
252
+ * @param {object} field A list descriptor.
253
+ * @param {number} index The entry.
254
+ * @param {string} direction `up` or `down`.
255
+ * @return {string} The move button's accessible name.
256
+ */
257
+ moveLabel(field, index, direction) {
258
+ const label = direction === 'up' ? translate('nextcloud-vue', 'Move up') : translate('nextcloud-vue', 'Move down');
259
+ return `${label}: ${this.itemText(field, this.target[field.key][index]) || index + 1}`
260
+ },
261
+
262
+ /**
263
+ * @param {object} field A list descriptor.
264
+ * @return {void}
265
+ */
266
+ addItem(field) {
267
+ this.panel.push(this.target[field.key], newListItem(field));
268
+ },
269
+
270
+ /**
271
+ * @param {object} field A list descriptor.
272
+ * @param {number} index The entry.
273
+ * @return {void}
274
+ */
275
+ removeItem(field, index) {
276
+ this.panel.splice(this.target[field.key], index);
277
+ },
278
+
279
+ /**
280
+ * @param {object} field A list descriptor.
281
+ * @param {number} from The entry's index.
282
+ * @param {number} to Its new index.
283
+ * @return {void}
284
+ */
285
+ move(field, from, to) {
286
+ this.panel.move(this.target[field.key], from, to);
287
+ },
288
+
289
+ /**
290
+ * @param {object} field A list descriptor.
291
+ * @param {number} index The dragged entry.
292
+ * @param {DragEvent} event The drag event.
293
+ * @return {void}
294
+ */
295
+ onItemDragStart(field, index, event) {
296
+ if (!field.reorderable || this.isDisabled(field)) {
297
+ return
298
+ }
299
+ this.dragIndex = index;
300
+ this.dragKey = field.key;
301
+ if (event.dataTransfer) {
302
+ event.dataTransfer.effectAllowed = 'move';
303
+ event.dataTransfer.setData('text/plain', String(index));
304
+ }
305
+ },
306
+
307
+ /**
308
+ * @param {object} field A list descriptor.
309
+ * @param {number} index The entry dropped on.
310
+ * @return {void}
311
+ */
312
+ onItemDrop(field, index) {
313
+ if (this.dragKey === field.key && this.dragIndex !== null) {
314
+ this.move(field, this.dragIndex, index);
315
+ }
316
+ this.dragIndex = null;
317
+ this.dragKey = null;
318
+ },
319
+
320
+ /**
321
+ * @param {object} field A typed-list descriptor.
322
+ * @return {string} The key holding an entry's type.
323
+ */
324
+ typeKey(field) {
325
+ return field.typeKey || 'type'
326
+ },
327
+
328
+ /**
329
+ * The types an entry can be set to: the offered ones, plus its own when
330
+ * that is one no longer offered, so a stored entry still shows what it is.
331
+ *
332
+ * @param {object} field A typed-list descriptor.
333
+ * @param {object} item The entry.
334
+ * @return {Array<object>} The types.
335
+ */
336
+ typesFor(field, item) {
337
+ const own = item[this.typeKey(field)];
338
+ return (field.types || []).filter((type) => !type.hidden || type.value === own)
339
+ },
340
+
341
+ /**
342
+ * @param {object} field A typed-list descriptor.
343
+ * @param {object} item The entry.
344
+ * @return {Array<object>} The fields of the entry's type.
345
+ */
346
+ fieldsOfType(field, item) {
347
+ const type = (field.types || []).find((candidate) => candidate.value === item[this.typeKey(field)]);
348
+ return type && Array.isArray(type.fields) ? type.fields : []
349
+ },
350
+ },
351
+ };
352
+
353
+ export { script as default };
354
+ //# sourceMappingURL=CnStateMachineFields.vue2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CnStateMachineFields.vue2.js","sources":["../../../../src/components/CnStateMachineEditor/CnStateMachineFields.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V. <info@conduction.nl>\n - SPDX-License-Identifier: EUPL-1.2\n -->\n<template>\n\t<div class=\"cn-sm-fields\" :class=\"{ 'cn-sm-fields--row': row }\">\n\t\t<template v-for=\"(field, fieldIndex) in fields\" :key=\"field.key || `${field.type}-${fieldIndex}`\">\n\t\t\t<!-- One line of fields side by side. -->\n\t\t\t<CnStateMachineFields\n\t\t\t\tv-if=\"field.type === 'row'\"\n\t\t\t\t:fields=\"field.fields\"\n\t\t\t\t:target=\"target\"\n\t\t\t\t:path=\"path\"\n\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\trow />\n\n\t\t\t<!-- A group: collapsible, switchable, or a nested object. -->\n\t\t\t<div v-else-if=\"field.type === 'group'\" class=\"cn-sm-group\" :class=\"{ 'cn-sm-group--section': field.section }\">\n\t\t\t\t<button\n\t\t\t\t\tv-if=\"field.collapsible\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-sm-group__toggle\"\n\t\t\t\t\t:aria-expanded=\"isOpen(field) ? 'true' : 'false'\"\n\t\t\t\t\t:aria-controls=\"idFor(field, 'body')\"\n\t\t\t\t\t@click=\"toggleOpen(field)\">\n\t\t\t\t\t<span>{{ panel.tr(field.label) }}</span>\n\t\t\t\t\t<ChevronDown v-if=\"isOpen(field)\" :size=\"18\" />\n\t\t\t\t\t<ChevronRight v-else :size=\"18\" />\n\t\t\t\t</button>\n\t\t\t\t<h4 v-else-if=\"field.label && !field.optional\" class=\"cn-sm-group__heading\">\n\t\t\t\t\t{{ panel.tr(field.label) }}\n\t\t\t\t</h4>\n\n\t\t\t\t<p v-if=\"field.lockable && panel.locked && field.lockedNotice\" class=\"cn-sm-group__notice\" role=\"note\">\n\t\t\t\t\t{{ panel.tr(field.lockedNotice) }}\n\t\t\t\t</p>\n\n\t\t\t\t<div v-if=\"!field.collapsible || isOpen(field)\" :id=\"idFor(field, 'body')\" class=\"cn-sm-group__body\">\n\t\t\t\t\t<div v-if=\"field.optional\" class=\"cn-sm-field cn-sm-field--check\">\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t:id=\"idFor(field, 'enabled')\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t:checked=\"panel.isEnabled(childPath(field))\"\n\t\t\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t\t\t@change=\"panel.setEnabled(childPath(field), $event.target.checked)\">\n\t\t\t\t\t\t<label :for=\"idFor(field, 'enabled')\">{{ panel.tr(field.toggleLabel || field.label) }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<CnStateMachineFields\n\t\t\t\t\t\tv-if=\"!field.optional || panel.isEnabled(childPath(field))\"\n\t\t\t\t\t\t:class=\"{ 'cn-sm-fields--boxed': field.optional }\"\n\t\t\t\t\t\t:fields=\"field.fields\"\n\t\t\t\t\t\t:target=\"field.key ? target[field.key] : target\"\n\t\t\t\t\t\t:path=\"childPath(field)\"\n\t\t\t\t\t\t:disabled=\"isDisabled(field)\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- A list of strings or of objects with one edited text. -->\n\t\t\t<fieldset v-else-if=\"field.type === 'list'\" class=\"cn-sm-list\" :class=\"{ 'cn-sm-list--section': field.section }\">\n\t\t\t\t<legend class=\"cn-sm-field__label\" :class=\"{ 'cn-sm-list__legend--section': field.section }\">\n\t\t\t\t\t{{ panel.tr(field.label) }}\n\t\t\t\t</legend>\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"(item, index) in target[field.key]\"\n\t\t\t\t\t:key=\"itemKey(field, item, index)\"\n\t\t\t\t\tclass=\"cn-sm-list__item\"\n\t\t\t\t\t:draggable=\"field.reorderable && !isDisabled(field) ? 'true' : 'false'\"\n\t\t\t\t\t@dragstart=\"onItemDragStart(field, index, $event)\"\n\t\t\t\t\t@dragover.prevent\n\t\t\t\t\t@drop.stop.prevent=\"onItemDrop(field, index)\">\n\t\t\t\t\t<span v-if=\"field.reorderable\" class=\"cn-sm-list__handle\" aria-hidden=\"true\">\n\t\t\t\t\t\t<DragVertical :size=\"16\" />\n\t\t\t\t\t</span>\n\t\t\t\t\t<input\n\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\tclass=\"cn-sm-field__input\"\n\t\t\t\t\t\t:value=\"itemText(field, item)\"\n\t\t\t\t\t\t:placeholder=\"field.itemLabel ? panel.tr(field.itemLabel) : ''\"\n\t\t\t\t\t\t:aria-label=\"itemAriaLabel(field, index)\"\n\t\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t\t@input=\"setItemText(field, index, $event.target.value)\">\n\t\t\t\t\t<template v-if=\"field.reorderable\">\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t:disabled=\"isDisabled(field) || index === 0\"\n\t\t\t\t\t\t\t:aria-label=\"moveLabel(field, index, 'up')\"\n\t\t\t\t\t\t\t@click=\"move(field, index, index - 1)\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<ArrowUp :size=\"16\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t\t:disabled=\"isDisabled(field) || index === target[field.key].length - 1\"\n\t\t\t\t\t\t\t:aria-label=\"moveLabel(field, index, 'down')\"\n\t\t\t\t\t\t\t@click=\"move(field, index, index + 1)\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<ArrowDown :size=\"16\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t\t:aria-label=\"removeLabel(field, index)\"\n\t\t\t\t\t\t@click=\"removeItem(field, index)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Close :size=\"16\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<NcButton variant=\"secondary\" :disabled=\"isDisabled(field)\" @click=\"addItem(field)\">\n\t\t\t\t\t{{ panel.tr(field.addLabel) || t('nextcloud-vue', 'Add') }}\n\t\t\t\t</NcButton>\n\t\t\t</fieldset>\n\n\t\t\t<!-- A list of objects whose fields depend on their type. -->\n\t\t\t<fieldset v-else-if=\"field.type === 'typed-list'\" class=\"cn-sm-list\" :class=\"{ 'cn-sm-list--section': field.section }\">\n\t\t\t\t<legend class=\"cn-sm-field__label\" :class=\"{ 'cn-sm-list__legend--section': field.section }\">\n\t\t\t\t\t{{ panel.tr(field.label) }}\n\t\t\t\t</legend>\n\t\t\t\t<div\n\t\t\t\t\tv-for=\"(item, index) in target[field.key]\"\n\t\t\t\t\t:key=\"itemKey(field, item, index)\"\n\t\t\t\t\tclass=\"cn-sm-list__typed\">\n\t\t\t\t\t<div class=\"cn-sm-field\">\n\t\t\t\t\t\t<label :for=\"idFor(field, `type-${index}`)\" class=\"cn-sm-field__label\">\n\t\t\t\t\t\t\t{{ field.typeLabel ? panel.tr(field.typeLabel) : t('nextcloud-vue', 'Type') }}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t\t<select\n\t\t\t\t\t\t\t:id=\"idFor(field, `type-${index}`)\"\n\t\t\t\t\t\t\tclass=\"cn-sm-field__input\"\n\t\t\t\t\t\t\t:value=\"item[typeKey(field)]\"\n\t\t\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t\t\t@change=\"panel.set(item, typeKey(field), $event.target.value)\">\n\t\t\t\t\t\t\t<option\n\t\t\t\t\t\t\t\tv-for=\"type in typesFor(field, item)\"\n\t\t\t\t\t\t\t\t:key=\"type.value\"\n\t\t\t\t\t\t\t\t:value=\"type.value\">\n\t\t\t\t\t\t\t\t{{ panel.tr(type.label) }}\n\t\t\t\t\t\t\t</option>\n\t\t\t\t\t\t</select>\n\t\t\t\t\t</div>\n\t\t\t\t\t<CnStateMachineFields\n\t\t\t\t\t\t:fields=\"fieldsOfType(field, item)\"\n\t\t\t\t\t\t:target=\"item\"\n\t\t\t\t\t\t:path=\"`${childPath(field)}.${index}`\"\n\t\t\t\t\t\t:disabled=\"isDisabled(field)\" />\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\tclass=\"cn-sm-list__remove\"\n\t\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t\t:aria-label=\"panel.tr(field.removeLabel) || t('nextcloud-vue', 'Remove')\"\n\t\t\t\t\t\t@click=\"removeItem(field, index)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Close :size=\"16\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<NcButton variant=\"secondary\" :disabled=\"isDisabled(field)\" @click=\"addItem(field)\">\n\t\t\t\t\t{{ panel.tr(field.addLabel) || t('nextcloud-vue', 'Add') }}\n\t\t\t\t</NcButton>\n\t\t\t</fieldset>\n\n\t\t\t<!-- Several values picked from a set of options. -->\n\t\t\t<fieldset v-else-if=\"field.type === 'checkboxes'\" class=\"cn-sm-list\">\n\t\t\t\t<legend class=\"cn-sm-field__label\">\n\t\t\t\t\t{{ panel.tr(field.label) }}\n\t\t\t\t</legend>\n\t\t\t\t<div v-for=\"(option, index) in panel.optionsOf(field)\" :key=\"String(option.value)\" class=\"cn-sm-field cn-sm-field--check\">\n\t\t\t\t\t<input\n\t\t\t\t\t\t:id=\"idFor(field, `option-${index}`)\"\n\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t:checked=\"(target[field.key] || []).includes(option.value)\"\n\t\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t\t@change=\"toggleOption(field, option.value)\">\n\t\t\t\t\t<label :for=\"idFor(field, `option-${index}`)\">{{ option.label }}</label>\n\t\t\t\t</div>\n\t\t\t</fieldset>\n\n\t\t\t<!-- A single check box. -->\n\t\t\t<div v-else-if=\"field.type === 'checkbox'\" class=\"cn-sm-field cn-sm-field--check\">\n\t\t\t\t<input\n\t\t\t\t\t:id=\"idFor(field)\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:checked=\"!!target[field.key]\"\n\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t@change=\"panel.set(target, field.key, $event.target.checked)\">\n\t\t\t\t<label :for=\"idFor(field)\">{{ panel.tr(field.label) }}</label>\n\t\t\t</div>\n\n\t\t\t<!-- One value from a set of options. -->\n\t\t\t<div v-else-if=\"field.type === 'select'\" class=\"cn-sm-field\" :class=\"widthClass(field)\">\n\t\t\t\t<label :for=\"idFor(field)\" class=\"cn-sm-field__label\" :class=\"{ 'cn-sm-visually-hidden': field.hideLabel }\">\n\t\t\t\t\t{{ panel.tr(field.label) }}\n\t\t\t\t</label>\n\t\t\t\t<select\n\t\t\t\t\t:id=\"idFor(field)\"\n\t\t\t\t\tclass=\"cn-sm-field__input\"\n\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t@change=\"onSelect(field, $event.target.value)\">\n\t\t\t\t\t<option\n\t\t\t\t\t\tv-for=\"(option, index) in selectOptions(field)\"\n\t\t\t\t\t\t:key=\"index\"\n\t\t\t\t\t\t:value=\"String(index)\"\n\t\t\t\t\t\t:selected=\"sameValue(option.value, target[field.key])\">\n\t\t\t\t\t\t{{ option.label }}\n\t\t\t\t\t</option>\n\t\t\t\t</select>\n\t\t\t</div>\n\n\t\t\t<!-- Free text, a longer text, or a number. -->\n\t\t\t<div v-else class=\"cn-sm-field\" :class=\"widthClass(field)\">\n\t\t\t\t<label :for=\"idFor(field)\" class=\"cn-sm-field__label\" :class=\"{ 'cn-sm-visually-hidden': field.hideLabel }\">\n\t\t\t\t\t{{ panel.tr(field.label) }}\n\t\t\t\t</label>\n\t\t\t\t<textarea\n\t\t\t\t\tv-if=\"field.type === 'textarea'\"\n\t\t\t\t\t:id=\"idFor(field)\"\n\t\t\t\t\tclass=\"cn-sm-field__input\"\n\t\t\t\t\t:rows=\"field.rows || 3\"\n\t\t\t\t\t:value=\"target[field.key] ?? ''\"\n\t\t\t\t\t:placeholder=\"field.placeholder ? panel.tr(field.placeholder) : ''\"\n\t\t\t\t\t:aria-describedby=\"field.hint ? idFor(field, 'hint') : undefined\"\n\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t@input=\"panel.set(target, field.key, $event.target.value)\" />\n\t\t\t\t<input\n\t\t\t\t\tv-else\n\t\t\t\t\t:id=\"idFor(field)\"\n\t\t\t\t\tclass=\"cn-sm-field__input\"\n\t\t\t\t\t:type=\"field.type === 'number' ? 'number' : (field.inputType || 'text')\"\n\t\t\t\t\t:min=\"field.min\"\n\t\t\t\t\t:max=\"field.max\"\n\t\t\t\t\t:value=\"target[field.key] ?? ''\"\n\t\t\t\t\t:placeholder=\"field.placeholder ? panel.tr(field.placeholder) : ''\"\n\t\t\t\t\t:aria-describedby=\"field.hint ? idFor(field, 'hint') : undefined\"\n\t\t\t\t\t:disabled=\"isDisabled(field)\"\n\t\t\t\t\t@input=\"onInput(field, $event.target.value)\">\n\t\t\t\t<p v-if=\"field.hint\" :id=\"idFor(field, 'hint')\" class=\"cn-sm-field__hint\">\n\t\t\t\t\t{{ panel.tr(field.hint) }}\n\t\t\t\t</p>\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'\nimport ArrowDown from 'vue-material-design-icons/ArrowDown.vue'\nimport ArrowUp from 'vue-material-design-icons/ArrowUp.vue'\nimport ChevronDown from 'vue-material-design-icons/ChevronDown.vue'\nimport ChevronRight from 'vue-material-design-icons/ChevronRight.vue'\nimport Close from 'vue-material-design-icons/Close.vue'\nimport DragVertical from 'vue-material-design-icons/DragVertical.vue'\nimport { newListItem } from './stateMachineFields.js'\n\n/**\n * Renders field descriptors against one object of a property panel's copy.\n *\n * Every write goes through the panel's injected `set`, so the panel owns the\n * copy and hears each change. Recursive for groups, rows and typed lists.\n */\nexport default {\n\tname: 'CnStateMachineFields',\n\n\tcomponents: { NcButton, ArrowDown, ArrowUp, ChevronDown, ChevronRight, Close, DragVertical },\n\n\tinject: ['cnStateMachinePanel'],\n\n\tprops: {\n\t\t/** The field descriptors to render. */\n\t\tfields: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** The object of the panel's copy these fields edit. */\n\t\ttarget: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** Where `target` sits in the copy, for ids and optional-group state. */\n\t\tpath: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** Disable every control. */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Lay the fields out on one line. */\n\t\trow: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\topen: {},\n\t\t\tdragIndex: null,\n\t\t\tdragKey: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * @return {object} The owning panel's API.\n\t\t */\n\t\tpanel() {\n\t\t\treturn this.cnStateMachinePanel\n\t\t},\n\t},\n\n\tmethods: {\n\t\tt,\n\n\t\t/**\n\t\t * @param {object} field A descriptor.\n\t\t * @return {boolean} Whether its controls are disabled.\n\t\t */\n\t\tisDisabled(field) {\n\t\t\treturn this.disabled || (field.lockable === true && this.panel.locked === true)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A descriptor.\n\t\t * @return {string} The path of the object a group or list edits.\n\t\t */\n\t\tchildPath(field) {\n\t\t\tif (!field.key) {\n\t\t\t\treturn this.path\n\t\t\t}\n\t\t\treturn this.path ? `${this.path}.${field.key}` : field.key\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A descriptor.\n\t\t * @param {string} [suffix] A part name.\n\t\t * @return {string} A DOM id unique within the editor.\n\t\t */\n\t\tidFor(field, suffix = '') {\n\t\t\tconst raw = [this.panel.uid, this.childPath(field) || field.type, suffix].filter(Boolean).join('-')\n\t\t\treturn raw.replace(/[^A-Za-z0-9_-]/g, '-')\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A descriptor.\n\t\t * @return {string|null} The width modifier class.\n\t\t */\n\t\twidthClass(field) {\n\t\t\treturn field.width === 'narrow' ? 'cn-sm-field--narrow' : null\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A collapsible group.\n\t\t * @return {boolean} Whether it is open.\n\t\t */\n\t\tisOpen(field) {\n\t\t\tconst key = this.childPath(field) || field.label\n\t\t\treturn this.open[key] ?? field.open === true\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A collapsible group.\n\t\t * @return {void}\n\t\t */\n\t\ttoggleOpen(field) {\n\t\t\tconst key = this.childPath(field) || field.label\n\t\t\tthis.open = { ...this.open, [key]: !this.isOpen(field) }\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A text or number descriptor.\n\t\t * @param {string} raw The input's value.\n\t\t * @return {void}\n\t\t */\n\t\tonInput(field, raw) {\n\t\t\tif (field.type === 'number') {\n\t\t\t\tthis.panel.set(this.target, field.key, raw === '' ? null : Number(raw))\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.panel.set(this.target, field.key, raw)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A select descriptor.\n\t\t * @return {Array<object>} Its options, the empty option first.\n\t\t */\n\t\tselectOptions(field) {\n\t\t\tconst options = this.panel.optionsOf(field)\n\t\t\tif (field.emptyOption) {\n\t\t\t\treturn [{ value: field.emptyOption.value ?? null, label: this.panel.tr(field.emptyOption.label || '') }, ...options]\n\t\t\t}\n\t\t\treturn options\n\t\t},\n\n\t\t/**\n\t\t * @param {unknown} a One value.\n\t\t * @param {unknown} b Another.\n\t\t * @return {boolean} Whether they are the same option, treating null and undefined alike.\n\t\t */\n\t\tsameValue(a, b) {\n\t\t\treturn (a ?? null) === (b ?? null)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A select descriptor.\n\t\t * @param {string} index The chosen option's index.\n\t\t * @return {void}\n\t\t */\n\t\tonSelect(field, index) {\n\t\t\tconst option = this.selectOptions(field)[Number(index)]\n\t\t\tthis.panel.set(this.target, field.key, option ? option.value : null)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A checkboxes descriptor.\n\t\t * @param {unknown} value The option toggled.\n\t\t * @return {void}\n\t\t */\n\t\ttoggleOption(field, value) {\n\t\t\tconst current = [...(this.target[field.key] || [])]\n\t\t\tconst at = current.indexOf(value)\n\t\t\tif (at >= 0) {\n\t\t\t\tcurrent.splice(at, 1)\n\t\t\t} else {\n\t\t\t\tcurrent.push(value)\n\t\t\t}\n\t\t\tthis.panel.set(this.target, field.key, current)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {unknown} item An entry.\n\t\t * @param {number} index Its index.\n\t\t * @return {string} A stable key for the entry.\n\t\t */\n\t\titemKey(field, item, index) {\n\t\t\tif (field.idKey && item && typeof item === 'object' && item[field.idKey] !== undefined) {\n\t\t\t\treturn String(item[field.idKey])\n\t\t\t}\n\t\t\treturn `${field.key}-${index}`\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {unknown} item An entry.\n\t\t * @return {string} The text the entry's input shows.\n\t\t */\n\t\titemText(field, item) {\n\t\t\tif (field.itemType === 'object') {\n\t\t\t\treturn (item && item[field.itemKey || 'label']) ?? ''\n\t\t\t}\n\t\t\treturn item ?? ''\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The entry.\n\t\t * @param {string} value The new text.\n\t\t * @return {void}\n\t\t */\n\t\tsetItemText(field, index, value) {\n\t\t\tconst list = this.target[field.key]\n\t\t\tif (field.itemType === 'object') {\n\t\t\t\tthis.panel.set(list[index], field.itemKey || 'label', value)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.panel.set(list, index, value)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The entry.\n\t\t * @return {string} The entry input's accessible name.\n\t\t */\n\t\titemAriaLabel(field, index) {\n\t\t\tconst label = this.panel.tr(field.itemLabel || field.label)\n\t\t\treturn this.target[field.key].length > 1 ? `${label} ${index + 1}` : label\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The entry.\n\t\t * @return {string} The remove button's accessible name.\n\t\t */\n\t\tremoveLabel(field, index) {\n\t\t\tconst label = this.panel.tr(field.removeLabel) || t('nextcloud-vue', 'Remove')\n\t\t\treturn this.target[field.key].length > 1 ? `${label} ${index + 1}` : label\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The entry.\n\t\t * @param {string} direction `up` or `down`.\n\t\t * @return {string} The move button's accessible name.\n\t\t */\n\t\tmoveLabel(field, index, direction) {\n\t\t\tconst label = direction === 'up' ? t('nextcloud-vue', 'Move up') : t('nextcloud-vue', 'Move down')\n\t\t\treturn `${label}: ${this.itemText(field, this.target[field.key][index]) || index + 1}`\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @return {void}\n\t\t */\n\t\taddItem(field) {\n\t\t\tthis.panel.push(this.target[field.key], newListItem(field))\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The entry.\n\t\t * @return {void}\n\t\t */\n\t\tremoveItem(field, index) {\n\t\t\tthis.panel.splice(this.target[field.key], index)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} from The entry's index.\n\t\t * @param {number} to Its new index.\n\t\t * @return {void}\n\t\t */\n\t\tmove(field, from, to) {\n\t\t\tthis.panel.move(this.target[field.key], from, to)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The dragged entry.\n\t\t * @param {DragEvent} event The drag event.\n\t\t * @return {void}\n\t\t */\n\t\tonItemDragStart(field, index, event) {\n\t\t\tif (!field.reorderable || this.isDisabled(field)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.dragIndex = index\n\t\t\tthis.dragKey = field.key\n\t\t\tif (event.dataTransfer) {\n\t\t\t\tevent.dataTransfer.effectAllowed = 'move'\n\t\t\t\tevent.dataTransfer.setData('text/plain', String(index))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A list descriptor.\n\t\t * @param {number} index The entry dropped on.\n\t\t * @return {void}\n\t\t */\n\t\tonItemDrop(field, index) {\n\t\t\tif (this.dragKey === field.key && this.dragIndex !== null) {\n\t\t\t\tthis.move(field, this.dragIndex, index)\n\t\t\t}\n\t\t\tthis.dragIndex = null\n\t\t\tthis.dragKey = null\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A typed-list descriptor.\n\t\t * @return {string} The key holding an entry's type.\n\t\t */\n\t\ttypeKey(field) {\n\t\t\treturn field.typeKey || 'type'\n\t\t},\n\n\t\t/**\n\t\t * The types an entry can be set to: the offered ones, plus its own when\n\t\t * that is one no longer offered, so a stored entry still shows what it is.\n\t\t *\n\t\t * @param {object} field A typed-list descriptor.\n\t\t * @param {object} item The entry.\n\t\t * @return {Array<object>} The types.\n\t\t */\n\t\ttypesFor(field, item) {\n\t\t\tconst own = item[this.typeKey(field)]\n\t\t\treturn (field.types || []).filter((type) => !type.hidden || type.value === own)\n\t\t},\n\n\t\t/**\n\t\t * @param {object} field A typed-list descriptor.\n\t\t * @param {object} item The entry.\n\t\t * @return {Array<object>} The fields of the entry's type.\n\t\t */\n\t\tfieldsOfType(field, item) {\n\t\t\tconst type = (field.types || []).find((candidate) => candidate.value === item[this.typeKey(field)])\n\t\t\treturn type && Array.isArray(type.fields) ? type.fields : []\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-sm-fields {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-sm-fields--row {\n\tflex-direction: row;\n\talign-items: flex-end;\n\tgap: 8px;\n}\n\n.cn-sm-fields--row > * {\n\tflex: 1 1 0;\n\tmin-width: 0;\n}\n\n.cn-sm-fields--row > .cn-sm-field--narrow {\n\tflex: 0 0 88px;\n}\n\n.cn-sm-fields--boxed {\n\tpadding: 8px;\n\tborder-radius: var(--border-radius, 8px);\n\tbackground: var(--color-background-dark, #ededed);\n}\n\n.cn-sm-field {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 4px;\n\tmin-width: 0;\n}\n\n.cn-sm-field--check {\n\tflex-direction: row;\n\talign-items: center;\n\tgap: 8px;\n}\n\n.cn-sm-field__label,\n.cn-sm-field > label {\n\tfont-size: 14px;\n\tfont-weight: 600;\n\tcolor: var(--color-main-text, #222);\n}\n\n.cn-sm-field--check > label {\n\tfont-weight: 400;\n}\n\n.cn-sm-field__input {\n\twidth: 100%;\n\tmin-height: 36px;\n\tbox-sizing: border-box;\n\tpadding: 6px 8px;\n\tborder: 1px solid var(--color-border-maxcontrast, #7f7f7f);\n\tborder-radius: var(--border-radius-element, 8px);\n\tbackground: var(--color-main-background, #fff);\n\tcolor: var(--color-main-text, #222);\n\tfont: inherit;\n}\n\ntextarea.cn-sm-field__input {\n\tresize: vertical;\n}\n\n.cn-sm-field__input:focus-visible {\n\toutline: 2px solid var(--color-primary-element, #0082c9);\n\toutline-offset: 1px;\n}\n\n.cn-sm-field__hint {\n\tmargin: 0;\n\tfont-size: 13px;\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n}\n\n.cn-sm-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n\tmin-width: 0;\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n}\n\n.cn-sm-list--section,\n.cn-sm-group--section {\n\tpadding-top: 12px;\n\tborder-top: 1px solid var(--color-border, #d0d0d0);\n}\n\n.cn-sm-list legend {\n\tpadding: 0;\n\tmargin-bottom: 6px;\n}\n\n.cn-sm-list__legend--section,\n.cn-sm-group__heading {\n\tmargin: 0 0 6px;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n}\n\n.cn-sm-list__item {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n}\n\n.cn-sm-list__handle {\n\tdisplay: inline-flex;\n\tcursor: grab;\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n}\n\n.cn-sm-list__typed {\n\tposition: relative;\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n\tpadding: 8px 44px 8px 8px;\n\tborder-radius: var(--border-radius, 8px);\n\tbackground: var(--color-background-dark, #ededed);\n}\n\n.cn-sm-list__remove {\n\tposition: absolute;\n\ttop: 4px;\n\tinset-inline-end: 4px;\n}\n\n.cn-sm-group {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n\n.cn-sm-group__toggle {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\twidth: 100%;\n\tmin-height: 34px;\n\tpadding: 4px 0;\n\tborder: 0;\n\tbackground: none;\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tletter-spacing: 0.04em;\n\ttext-transform: uppercase;\n\tcursor: pointer;\n}\n\n.cn-sm-group__toggle:focus-visible {\n\toutline: 2px solid var(--color-primary-element, #0082c9);\n\toutline-offset: 2px;\n}\n\n.cn-sm-group__notice {\n\tmargin: 0;\n\tpadding: 8px;\n\tborder-inline-start: 4px solid var(--color-warning, #c28900);\n\tborder-radius: var(--border-radius, 8px);\n\tbackground: var(--color-background-dark, #ededed);\n\tfont-size: 13px;\n}\n\n.cn-sm-group__body {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px;\n}\n\n.cn-sm-visually-hidden {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\toverflow: hidden;\n\tclip-path: inset(50%);\n\twhite-space: nowrap;\n}\n</style>\n"],"names":["t"],"mappings":"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"}