@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.
- 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/CnIndexPage/CnIndexPage.vue2.js +53 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +546 -523
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/useNamedSource.js +9 -0
- package/dist/esm/components/CnIndexPage/useNamedSource.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/CnReadinessChecklist/CnReadinessChecklist.vue.js +9 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue.js.map +1 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue2.js +214 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue2.js.map +1 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue3.js +125 -0
- package/dist/esm/components/CnReadinessChecklist/CnReadinessChecklist.vue3.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js +9 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue2.js +163 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue3.js +131 -0
- package/dist/esm/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSchemaRulesWidget/schemaRules.js +127 -0
- package/dist/esm/components/CnSchemaRulesWidget/schemaRules.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue.js +9 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue2.js +82 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue2.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue3.js +61 -0
- package/dist/esm/components/CnSearchIndexStatus/CnSearchIndexStatus.vue3.js.map +1 -0
- package/dist/esm/components/CnSearchIndexStatus/searchIndexStatus.js +60 -0
- package/dist/esm/components/CnSearchIndexStatus/searchIndexStatus.js.map +1 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue.js +10 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue.js.map +1 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js +226 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue2.js.map +1 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue3.js +126 -0
- package/dist/esm/components/CnShippedConfigurationSection/CnShippedConfigurationSection.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/components/CnWidgetGrid/registerDashboardWidgets.js +42 -32
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/composables/indexSources.js +116 -16
- package/dist/esm/composables/indexSources.js.map +1 -1
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +207 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +207 -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 +951 -16
- 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 +2 -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 +23038 -14567
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +951 -16
- package/l10n/en.json +207 -1
- package/l10n/nl.json +207 -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/CnIndexPage/CnIndexPage.vue +74 -3
- package/src/components/CnIndexPage/useNamedSource.js +9 -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/CnReadinessChecklist/CnReadinessChecklist.vue +335 -0
- package/src/components/CnReadinessChecklist/index.js +9 -0
- package/src/components/CnSchemaRulesWidget/CnSchemaRulesWidget.vue +300 -0
- package/src/components/CnSchemaRulesWidget/index.js +10 -0
- package/src/components/CnSchemaRulesWidget/schemaRules.js +123 -0
- package/src/components/CnSearchIndexStatus/CnSearchIndexStatus.vue +160 -0
- package/src/components/CnSearchIndexStatus/index.js +10 -0
- package/src/components/CnSearchIndexStatus/searchIndexStatus.js +56 -0
- package/src/components/CnShippedConfigurationSection/CnShippedConfigurationSection.vue +328 -0
- package/src/components/CnShippedConfigurationSection/index.js +9 -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/CnWidgetGrid/registerDashboardWidgets.js +10 -0
- package/src/components/index.js +8 -0
- package/src/composables/indexSources.js +116 -16
- package/src/css/index-page.css +7 -0
- package/src/index.js +9 -0
- package/src/utils/aiFeatures.js +241 -0
- package/src/utils/aiSuggestionTracker.js +178 -0
- package/src/utils/libraryWidgetKeys.js +2 -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,180 @@
|
|
|
1
|
+
import { NcActions, NcActionButton } from '@nextcloud/vue';
|
|
2
|
+
import ArrowRight from 'vue-material-design-icons/ArrowRight.vue';
|
|
3
|
+
import DeleteOutline from 'vue-material-design-icons/DeleteOutline.vue';
|
|
4
|
+
import LinkOff from 'vue-material-design-icons/LinkOff.vue';
|
|
5
|
+
import Pencil from 'vue-material-design-icons/Pencil.vue';
|
|
6
|
+
import Plus from 'vue-material-design-icons/Plus.vue';
|
|
7
|
+
import { asList } from '../../utils/stateMachineValidation.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The body of one state on the CnStateMachineEditor canvas: its name, its
|
|
11
|
+
* steps, and a menu that offers every canvas gesture from the keyboard.
|
|
12
|
+
*
|
|
13
|
+
* Rendered inside CnGraphCanvas's focusable node wrapper, which owns moving
|
|
14
|
+
* (arrow keys), connecting (`c`) and removing (Delete) the state.
|
|
15
|
+
*/
|
|
16
|
+
var script = {
|
|
17
|
+
name: 'CnStateMachineNode',
|
|
18
|
+
|
|
19
|
+
components: { NcActions, NcActionButton, ArrowRight, DeleteOutline, LinkOff, Pencil, Plus },
|
|
20
|
+
|
|
21
|
+
props: {
|
|
22
|
+
/** The state's name. */
|
|
23
|
+
label: {
|
|
24
|
+
type: String,
|
|
25
|
+
required: true,
|
|
26
|
+
},
|
|
27
|
+
|
|
28
|
+
/** Whether the state is final. */
|
|
29
|
+
final: {
|
|
30
|
+
type: Boolean,
|
|
31
|
+
default: false,
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
/** The state's steps, in order. */
|
|
35
|
+
steps: {
|
|
36
|
+
type: Array,
|
|
37
|
+
default: () => [],
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
/** Whether steps are part of this machine. */
|
|
41
|
+
showSteps: {
|
|
42
|
+
type: Boolean,
|
|
43
|
+
default: true,
|
|
44
|
+
},
|
|
45
|
+
|
|
46
|
+
/** Record keys of a step: `{ title, required, badge }`. */
|
|
47
|
+
stepKeys: {
|
|
48
|
+
type: Object,
|
|
49
|
+
default: () => ({ title: 'title', required: 'required', badge: '' }),
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
/** The step whose panel is open. */
|
|
53
|
+
selectedStepId: {
|
|
54
|
+
type: String,
|
|
55
|
+
default: null,
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
/** States this one has no transition to yet: `{ id, label }`. */
|
|
59
|
+
connectTargets: {
|
|
60
|
+
type: Array,
|
|
61
|
+
default: () => [],
|
|
62
|
+
},
|
|
63
|
+
|
|
64
|
+
/** Transitions leaving this state: `{ id, targetLabel }`. */
|
|
65
|
+
outgoing: {
|
|
66
|
+
type: Array,
|
|
67
|
+
default: () => [],
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/** Whether the actions menu is open. */
|
|
71
|
+
menuOpen: {
|
|
72
|
+
type: Boolean,
|
|
73
|
+
default: false,
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/** Hide every editing control. */
|
|
77
|
+
readOnly: {
|
|
78
|
+
type: Boolean,
|
|
79
|
+
default: false,
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
/** Resolves an editor text by name: `(name, vars) => string`. */
|
|
83
|
+
say: {
|
|
84
|
+
type: Function,
|
|
85
|
+
required: true,
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
emits: [
|
|
90
|
+
'add-step',
|
|
91
|
+
'connect',
|
|
92
|
+
'delete-state',
|
|
93
|
+
'disconnect',
|
|
94
|
+
'edit-transition',
|
|
95
|
+
'step-click',
|
|
96
|
+
'step-move',
|
|
97
|
+
'update:menuOpen',
|
|
98
|
+
],
|
|
99
|
+
|
|
100
|
+
data() {
|
|
101
|
+
return {
|
|
102
|
+
dragIndex: null,
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
methods: {
|
|
107
|
+
/**
|
|
108
|
+
* @param {object} step A step.
|
|
109
|
+
* @return {string} Its title.
|
|
110
|
+
*/
|
|
111
|
+
stepTitle(step) {
|
|
112
|
+
return step[this.stepKeys.title] || ''
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @param {object} step A step.
|
|
117
|
+
* @return {boolean} Whether it is required.
|
|
118
|
+
*/
|
|
119
|
+
isRequired(step) {
|
|
120
|
+
return this.stepKeys.required ? step[this.stepKeys.required] === true : false
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @param {object} step A step.
|
|
125
|
+
* @return {number} The length of the list its badge counts, 0 for none.
|
|
126
|
+
*/
|
|
127
|
+
badgeOf(step) {
|
|
128
|
+
return this.stepKeys.badge ? asList(step[this.stepKeys.badge]).length : 0
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Keys on a step stay on the step: Alt with an arrow moves it within the
|
|
133
|
+
* state, everything else is the button's own.
|
|
134
|
+
*
|
|
135
|
+
* @param {number} index The step's position.
|
|
136
|
+
* @param {KeyboardEvent} event The key event.
|
|
137
|
+
* @return {void}
|
|
138
|
+
*/
|
|
139
|
+
onStepKeydown(index, event) {
|
|
140
|
+
event.stopPropagation();
|
|
141
|
+
if (this.readOnly || event.altKey !== true) {
|
|
142
|
+
return
|
|
143
|
+
}
|
|
144
|
+
if (event.key === 'ArrowUp' && index > 0) {
|
|
145
|
+
event.preventDefault();
|
|
146
|
+
this.$emit('step-move', { from: index, to: index - 1 });
|
|
147
|
+
} else if (event.key === 'ArrowDown' && index < this.steps.length - 1) {
|
|
148
|
+
event.preventDefault();
|
|
149
|
+
this.$emit('step-move', { from: index, to: index + 1 });
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @param {number} index The dragged step.
|
|
155
|
+
* @param {DragEvent} event The drag event.
|
|
156
|
+
* @return {void}
|
|
157
|
+
*/
|
|
158
|
+
onStepDragStart(index, event) {
|
|
159
|
+
this.dragIndex = index;
|
|
160
|
+
if (event.dataTransfer) {
|
|
161
|
+
event.dataTransfer.effectAllowed = 'move';
|
|
162
|
+
event.dataTransfer.setData('text/plain', String(index));
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* @param {number} index The step dropped on.
|
|
168
|
+
* @return {void}
|
|
169
|
+
*/
|
|
170
|
+
onStepDrop(index) {
|
|
171
|
+
if (this.dragIndex !== null && this.dragIndex !== index) {
|
|
172
|
+
this.$emit('step-move', { from: this.dragIndex, to: index });
|
|
173
|
+
}
|
|
174
|
+
this.dragIndex = null;
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
export { script as default };
|
|
180
|
+
//# sourceMappingURL=CnStateMachineNode.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnStateMachineNode.vue2.js","sources":["../../../../src/components/CnStateMachineEditor/CnStateMachineNode.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-node\" :class=\"{ 'cn-sm-node--final': final }\">\n\t\t<div class=\"cn-sm-node__header\">\n\t\t\t<span class=\"cn-sm-node__name\">{{ label }}</span>\n\t\t\t<span\n\t\t\t\tv-if=\"showSteps && steps.length > 0\"\n\t\t\t\tclass=\"cn-sm-node__count\"\n\t\t\t\t:title=\"say('stepCount', { count: steps.length })\">\n\t\t\t\t<span aria-hidden=\"true\">{{ steps.length }}</span>\n\t\t\t\t<span class=\"cn-sm-node__sr\">{{ say('stepCount', { count: steps.length }) }}</span>\n\t\t\t</span>\n\n\t\t\t<!-- Every pointer gesture on the canvas has a menu entry here, so a\n\t\t\t keyboard reaches all of them. Keys and pointer events stop at\n\t\t\t this wrapper: the node's own handler would otherwise move or\n\t\t\t remove the state on an arrow or Delete meant for the menu. -->\n\t\t\t<div\n\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\tclass=\"cn-sm-node__menu nodrag nopan\"\n\t\t\t\t@keydown.stop\n\t\t\t\t@click.stop\n\t\t\t\t@mousedown.stop\n\t\t\t\t@pointerdown.stop>\n\t\t\t\t<NcActions\n\t\t\t\t\t:open=\"menuOpen\"\n\t\t\t\t\t:inline=\"0\"\n\t\t\t\t\t:aria-label=\"say('stateActions', { name: label })\"\n\t\t\t\t\t@update:open=\"$emit('update:menuOpen', $event)\">\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"target in connectTargets\"\n\t\t\t\t\t\t:key=\"`connect-${target.id}`\"\n\t\t\t\t\t\tcloseAfterClick\n\t\t\t\t\t\t@click=\"$emit('connect', target.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ArrowRight :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('connectTo', { name: target.label }) }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"transition in outgoing\"\n\t\t\t\t\t\t:key=\"`edit-${transition.id}`\"\n\t\t\t\t\t\tcloseAfterClick\n\t\t\t\t\t\t@click=\"$emit('edit-transition', transition.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('editTransitionTo', { name: transition.targetLabel }) }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"transition in outgoing\"\n\t\t\t\t\t\t:key=\"`disconnect-${transition.id}`\"\n\t\t\t\t\t\tcloseAfterClick\n\t\t\t\t\t\t@click=\"$emit('disconnect', transition.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<LinkOff :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('disconnectFrom', { name: transition.targetLabel }) }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton v-if=\"showSteps\" closeAfterClick @click=\"$emit('add-step')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('addStep') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton closeAfterClick @click=\"$emit('delete-state')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<DeleteOutline :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('deleteState') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<span v-if=\"final\" class=\"cn-sm-node__chip\">{{ say('final') }}</span>\n\n\t\t<ul v-if=\"showSteps && steps.length > 0\" class=\"cn-sm-node__steps\">\n\t\t\t<li v-for=\"(step, index) in steps\" :key=\"step.id\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-sm-node__step nodrag nopan\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'cn-sm-node__step--required': isRequired(step),\n\t\t\t\t\t\t'cn-sm-node__step--selected': step.id === selectedStepId,\n\t\t\t\t\t}\"\n\t\t\t\t\t:aria-pressed=\"step.id === selectedStepId ? 'true' : 'false'\"\n\t\t\t\t\t:draggable=\"readOnly ? 'false' : 'true'\"\n\t\t\t\t\t@click.stop=\"$emit('step-click', step.id)\"\n\t\t\t\t\t@keydown=\"onStepKeydown(index, $event)\"\n\t\t\t\t\t@mousedown.stop\n\t\t\t\t\t@pointerdown.stop\n\t\t\t\t\t@dragstart.stop=\"onStepDragStart(index, $event)\"\n\t\t\t\t\t@dragover.prevent\n\t\t\t\t\t@drop.stop.prevent=\"onStepDrop(index)\">\n\t\t\t\t\t<span v-if=\"isRequired(step)\" class=\"cn-sm-node__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t<span class=\"cn-sm-node__step-name\">{{ stepTitle(step) }}</span>\n\t\t\t\t\t<span v-if=\"isRequired(step)\" class=\"cn-sm-node__sr\">{{ say('required') }}</span>\n\t\t\t\t\t<span v-if=\"badgeOf(step) > 0\" class=\"cn-sm-node__checks\">{{ badgeOf(step) }}</span>\n\t\t\t\t</button>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<button\n\t\t\tv-if=\"showSteps && !readOnly\"\n\t\t\ttype=\"button\"\n\t\t\tclass=\"cn-sm-node__add nodrag nopan\"\n\t\t\t@click.stop=\"$emit('add-step')\"\n\t\t\t@keydown.stop\n\t\t\t@mousedown.stop\n\t\t\t@pointerdown.stop>\n\t\t\t<Plus :size=\"16\" />\n\t\t\t<span>{{ say('addStep') }}</span>\n\t\t</button>\n\t</div>\n</template>\n\n<script>\nimport { NcActionButton, NcActions } from '@nextcloud/vue'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport DeleteOutline from 'vue-material-design-icons/DeleteOutline.vue'\nimport LinkOff from 'vue-material-design-icons/LinkOff.vue'\nimport Pencil from 'vue-material-design-icons/Pencil.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport { asList } from '../../utils/stateMachineValidation.js'\n\n/**\n * The body of one state on the CnStateMachineEditor canvas: its name, its\n * steps, and a menu that offers every canvas gesture from the keyboard.\n *\n * Rendered inside CnGraphCanvas's focusable node wrapper, which owns moving\n * (arrow keys), connecting (`c`) and removing (Delete) the state.\n */\nexport default {\n\tname: 'CnStateMachineNode',\n\n\tcomponents: { NcActions, NcActionButton, ArrowRight, DeleteOutline, LinkOff, Pencil, Plus },\n\n\tprops: {\n\t\t/** The state's name. */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** Whether the state is final. */\n\t\tfinal: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** The state's steps, in order. */\n\t\tsteps: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether steps are part of this machine. */\n\t\tshowSteps: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Record keys of a step: `{ title, required, badge }`. */\n\t\tstepKeys: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({ title: 'title', required: 'required', badge: '' }),\n\t\t},\n\n\t\t/** The step whose panel is open. */\n\t\tselectedStepId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** States this one has no transition to yet: `{ id, label }`. */\n\t\tconnectTargets: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Transitions leaving this state: `{ id, targetLabel }`. */\n\t\toutgoing: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether the actions menu is open. */\n\t\tmenuOpen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Hide every editing control. */\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Resolves an editor text by name: `(name, vars) => string`. */\n\t\tsay: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: [\n\t\t'add-step',\n\t\t'connect',\n\t\t'delete-state',\n\t\t'disconnect',\n\t\t'edit-transition',\n\t\t'step-click',\n\t\t'step-move',\n\t\t'update:menuOpen',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tdragIndex: null,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {object} step A step.\n\t\t * @return {string} Its title.\n\t\t */\n\t\tstepTitle(step) {\n\t\t\treturn step[this.stepKeys.title] || ''\n\t\t},\n\n\t\t/**\n\t\t * @param {object} step A step.\n\t\t * @return {boolean} Whether it is required.\n\t\t */\n\t\tisRequired(step) {\n\t\t\treturn this.stepKeys.required ? step[this.stepKeys.required] === true : false\n\t\t},\n\n\t\t/**\n\t\t * @param {object} step A step.\n\t\t * @return {number} The length of the list its badge counts, 0 for none.\n\t\t */\n\t\tbadgeOf(step) {\n\t\t\treturn this.stepKeys.badge ? asList(step[this.stepKeys.badge]).length : 0\n\t\t},\n\n\t\t/**\n\t\t * Keys on a step stay on the step: Alt with an arrow moves it within the\n\t\t * state, everything else is the button's own.\n\t\t *\n\t\t * @param {number} index The step's position.\n\t\t * @param {KeyboardEvent} event The key event.\n\t\t * @return {void}\n\t\t */\n\t\tonStepKeydown(index, event) {\n\t\t\tevent.stopPropagation()\n\t\t\tif (this.readOnly || event.altKey !== true) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (event.key === 'ArrowUp' && index > 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.$emit('step-move', { from: index, to: index - 1 })\n\t\t\t} else if (event.key === 'ArrowDown' && index < this.steps.length - 1) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.$emit('step-move', { from: index, to: index + 1 })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {number} index The dragged step.\n\t\t * @param {DragEvent} event The drag event.\n\t\t * @return {void}\n\t\t */\n\t\tonStepDragStart(index, event) {\n\t\t\tthis.dragIndex = index\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 {number} index The step dropped on.\n\t\t * @return {void}\n\t\t */\n\t\tonStepDrop(index) {\n\t\t\tif (this.dragIndex !== null && this.dragIndex !== index) {\n\t\t\t\tthis.$emit('step-move', { from: this.dragIndex, to: index })\n\t\t\t}\n\t\t\tthis.dragIndex = null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-sm-node {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n\ttext-align: start;\n}\n\n.cn-sm-node__header {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 6px;\n\tmin-width: 0;\n}\n\n.cn-sm-node__name {\n\tflex: 1 1 auto;\n\tmin-width: 0;\n\toverflow: hidden;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-sm-node__count {\n\tflex: none;\n\tmin-width: 20px;\n\tpadding: 0 6px;\n\tborder-radius: 10px;\n\tbackground: var(--color-primary-element, #0082c9);\n\tcolor: var(--color-primary-element-text, #fff);\n\tfont-size: 12px;\n\tfont-weight: 600;\n\ttext-align: center;\n}\n\n.cn-sm-node__menu {\n\tflex: none;\n\tmargin: -6px -8px -6px 0;\n}\n\n.cn-sm-node__chip {\n\talign-self: flex-start;\n\tpadding: 2px 8px;\n\tborder-radius: 10px;\n\tbackground: var(--color-success, #2d7b41);\n\tcolor: var(--color-success-text, #fff);\n\tfont-size: 12px;\n\tfont-weight: 600;\n}\n\n.cn-sm-node__steps {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0 -12px;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.cn-sm-node__step {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n\twidth: 100%;\n\tmin-height: 28px;\n\tpadding: 2px 12px;\n\tborder: 0;\n\tbackground: none;\n\tcolor: var(--color-main-text, #222);\n\tfont: inherit;\n\tfont-size: 13px;\n\ttext-align: start;\n\tcursor: pointer;\n}\n\n.cn-sm-node__step:hover,\n.cn-sm-node__step--selected {\n\tbackground: var(--color-background-hover, #f5f5f5);\n}\n\n.cn-sm-node__step:focus-visible,\n.cn-sm-node__add:focus-visible {\n\toutline: 2px solid var(--color-primary-element, #0082c9);\n\toutline-offset: -2px;\n}\n\n.cn-sm-node__step--required {\n\tfont-weight: 600;\n}\n\n.cn-sm-node__required {\n\tcolor: var(--color-error-text, #c9302c);\n}\n\n.cn-sm-node__step-name {\n\tflex: 1 1 auto;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-sm-node__checks {\n\tflex: none;\n\tpadding: 0 4px;\n\tborder-radius: 4px;\n\tbackground: var(--color-background-dark, #ededed);\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n\tfont-size: 11px;\n}\n\n.cn-sm-node__add {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n\tmargin: 0 -12px -8px;\n\tmin-height: 32px;\n\tpadding: 4px 12px;\n\tborder: 0;\n\tborder-top: 1px solid var(--color-border, #d0d0d0);\n\tbackground: none;\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n\tfont: inherit;\n\tfont-size: 13px;\n\tcursor: pointer;\n}\n\n.cn-sm-node__add:hover {\n\tbackground: var(--color-background-hover, #f5f5f5);\n\tcolor: var(--color-main-text, #222);\n}\n\n.cn-sm-node__sr {\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":[],"mappings":"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"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode, withModifiers, createVNode, withCtx, Fragment, renderList, createBlock, createTextVNode } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = { class: "cn-sm-node__header" };
|
|
4
|
+
const _hoisted_2 = { class: "cn-sm-node__name" };
|
|
5
|
+
const _hoisted_3 = ["title"];
|
|
6
|
+
const _hoisted_4 = { "aria-hidden": "true" };
|
|
7
|
+
const _hoisted_5 = { class: "cn-sm-node__sr" };
|
|
8
|
+
const _hoisted_6 = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "cn-sm-node__chip"
|
|
11
|
+
};
|
|
12
|
+
const _hoisted_7 = {
|
|
13
|
+
key: 1,
|
|
14
|
+
class: "cn-sm-node__steps"
|
|
15
|
+
};
|
|
16
|
+
const _hoisted_8 = ["aria-pressed", "draggable", "onClick", "onKeydown", "onDragstart", "onDrop"];
|
|
17
|
+
const _hoisted_9 = {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "cn-sm-node__required",
|
|
20
|
+
"aria-hidden": "true"
|
|
21
|
+
};
|
|
22
|
+
const _hoisted_10 = { class: "cn-sm-node__step-name" };
|
|
23
|
+
const _hoisted_11 = {
|
|
24
|
+
key: 1,
|
|
25
|
+
class: "cn-sm-node__sr"
|
|
26
|
+
};
|
|
27
|
+
const _hoisted_12 = {
|
|
28
|
+
key: 2,
|
|
29
|
+
class: "cn-sm-node__checks"
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
33
|
+
const _component_ArrowRight = resolveComponent("ArrowRight");
|
|
34
|
+
const _component_NcActionButton = resolveComponent("NcActionButton");
|
|
35
|
+
const _component_Pencil = resolveComponent("Pencil");
|
|
36
|
+
const _component_LinkOff = resolveComponent("LinkOff");
|
|
37
|
+
const _component_Plus = resolveComponent("Plus");
|
|
38
|
+
const _component_DeleteOutline = resolveComponent("DeleteOutline");
|
|
39
|
+
const _component_NcActions = resolveComponent("NcActions");
|
|
40
|
+
|
|
41
|
+
return (openBlock(), createElementBlock("div", {
|
|
42
|
+
class: normalizeClass(["cn-sm-node", { 'cn-sm-node--final': $props.final }])
|
|
43
|
+
}, [
|
|
44
|
+
createElementVNode("div", _hoisted_1, [
|
|
45
|
+
createElementVNode("span", _hoisted_2, toDisplayString($props.label), 1 /* TEXT */),
|
|
46
|
+
($props.showSteps && $props.steps.length > 0)
|
|
47
|
+
? (openBlock(), createElementBlock("span", {
|
|
48
|
+
key: 0,
|
|
49
|
+
class: "cn-sm-node__count",
|
|
50
|
+
title: $props.say('stepCount', { count: $props.steps.length })
|
|
51
|
+
}, [
|
|
52
|
+
createElementVNode("span", _hoisted_4, toDisplayString($props.steps.length), 1 /* TEXT */),
|
|
53
|
+
createElementVNode("span", _hoisted_5, toDisplayString($props.say('stepCount', { count: $props.steps.length })), 1 /* TEXT */)
|
|
54
|
+
], 8 /* PROPS */, _hoisted_3))
|
|
55
|
+
: createCommentVNode("v-if", true),
|
|
56
|
+
(!$props.readOnly)
|
|
57
|
+
? (openBlock(), createElementBlock("div", {
|
|
58
|
+
key: 1,
|
|
59
|
+
class: "cn-sm-node__menu nodrag nopan",
|
|
60
|
+
onKeydown: _cache[3] || (_cache[3] = withModifiers(() => {}, ["stop"])),
|
|
61
|
+
onClick: _cache[4] || (_cache[4] = withModifiers(() => {}, ["stop"])),
|
|
62
|
+
onMousedown: _cache[5] || (_cache[5] = withModifiers(() => {}, ["stop"])),
|
|
63
|
+
onPointerdown: _cache[6] || (_cache[6] = withModifiers(() => {}, ["stop"]))
|
|
64
|
+
}, [
|
|
65
|
+
createVNode(_component_NcActions, {
|
|
66
|
+
open: $props.menuOpen,
|
|
67
|
+
inline: 0,
|
|
68
|
+
"aria-label": $props.say('stateActions', { name: $props.label }),
|
|
69
|
+
"onUpdate:open": _cache[2] || (_cache[2] = $event => (_ctx.$emit('update:menuOpen', $event)))
|
|
70
|
+
}, {
|
|
71
|
+
default: withCtx(() => [
|
|
72
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($props.connectTargets, (target) => {
|
|
73
|
+
return (openBlock(), createBlock(_component_NcActionButton, {
|
|
74
|
+
key: `connect-${target.id}`,
|
|
75
|
+
closeAfterClick: "",
|
|
76
|
+
onClick: $event => (_ctx.$emit('connect', target.id))
|
|
77
|
+
}, {
|
|
78
|
+
icon: withCtx(() => [
|
|
79
|
+
createVNode(_component_ArrowRight, { size: 20 })
|
|
80
|
+
]),
|
|
81
|
+
default: withCtx(() => [
|
|
82
|
+
createTextVNode(" " + toDisplayString($props.say('connectTo', { name: target.label })), 1 /* TEXT */)
|
|
83
|
+
]),
|
|
84
|
+
_: 2 /* DYNAMIC */
|
|
85
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["onClick"]))
|
|
86
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
87
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($props.outgoing, (transition) => {
|
|
88
|
+
return (openBlock(), createBlock(_component_NcActionButton, {
|
|
89
|
+
key: `edit-${transition.id}`,
|
|
90
|
+
closeAfterClick: "",
|
|
91
|
+
onClick: $event => (_ctx.$emit('edit-transition', transition.id))
|
|
92
|
+
}, {
|
|
93
|
+
icon: withCtx(() => [
|
|
94
|
+
createVNode(_component_Pencil, { size: 20 })
|
|
95
|
+
]),
|
|
96
|
+
default: withCtx(() => [
|
|
97
|
+
createTextVNode(" " + toDisplayString($props.say('editTransitionTo', { name: transition.targetLabel })), 1 /* TEXT */)
|
|
98
|
+
]),
|
|
99
|
+
_: 2 /* DYNAMIC */
|
|
100
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["onClick"]))
|
|
101
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
102
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($props.outgoing, (transition) => {
|
|
103
|
+
return (openBlock(), createBlock(_component_NcActionButton, {
|
|
104
|
+
key: `disconnect-${transition.id}`,
|
|
105
|
+
closeAfterClick: "",
|
|
106
|
+
onClick: $event => (_ctx.$emit('disconnect', transition.id))
|
|
107
|
+
}, {
|
|
108
|
+
icon: withCtx(() => [
|
|
109
|
+
createVNode(_component_LinkOff, { size: 20 })
|
|
110
|
+
]),
|
|
111
|
+
default: withCtx(() => [
|
|
112
|
+
createTextVNode(" " + toDisplayString($props.say('disconnectFrom', { name: transition.targetLabel })), 1 /* TEXT */)
|
|
113
|
+
]),
|
|
114
|
+
_: 2 /* DYNAMIC */
|
|
115
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["onClick"]))
|
|
116
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
117
|
+
($props.showSteps)
|
|
118
|
+
? (openBlock(), createBlock(_component_NcActionButton, {
|
|
119
|
+
key: 0,
|
|
120
|
+
closeAfterClick: "",
|
|
121
|
+
onClick: _cache[0] || (_cache[0] = $event => (_ctx.$emit('add-step')))
|
|
122
|
+
}, {
|
|
123
|
+
icon: withCtx(() => [
|
|
124
|
+
createVNode(_component_Plus, { size: 20 })
|
|
125
|
+
]),
|
|
126
|
+
default: withCtx(() => [
|
|
127
|
+
createTextVNode(" " + toDisplayString($props.say('addStep')), 1 /* TEXT */)
|
|
128
|
+
]),
|
|
129
|
+
_: 1 /* STABLE */
|
|
130
|
+
}))
|
|
131
|
+
: createCommentVNode("v-if", true),
|
|
132
|
+
createVNode(_component_NcActionButton, {
|
|
133
|
+
closeAfterClick: "",
|
|
134
|
+
onClick: _cache[1] || (_cache[1] = $event => (_ctx.$emit('delete-state')))
|
|
135
|
+
}, {
|
|
136
|
+
icon: withCtx(() => [
|
|
137
|
+
createVNode(_component_DeleteOutline, { size: 20 })
|
|
138
|
+
]),
|
|
139
|
+
default: withCtx(() => [
|
|
140
|
+
createTextVNode(" " + toDisplayString($props.say('deleteState')), 1 /* TEXT */)
|
|
141
|
+
]),
|
|
142
|
+
_: 1 /* STABLE */
|
|
143
|
+
})
|
|
144
|
+
]),
|
|
145
|
+
_: 1 /* STABLE */
|
|
146
|
+
}, 8 /* PROPS */, ["open", "aria-label"])
|
|
147
|
+
], 32 /* NEED_HYDRATION */))
|
|
148
|
+
: createCommentVNode("v-if", true)
|
|
149
|
+
]),
|
|
150
|
+
($props.final)
|
|
151
|
+
? (openBlock(), createElementBlock("span", _hoisted_6, toDisplayString($props.say('final')), 1 /* TEXT */))
|
|
152
|
+
: createCommentVNode("v-if", true),
|
|
153
|
+
($props.showSteps && $props.steps.length > 0)
|
|
154
|
+
? (openBlock(), createElementBlock("ul", _hoisted_7, [
|
|
155
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($props.steps, (step, index) => {
|
|
156
|
+
return (openBlock(), createElementBlock("li", {
|
|
157
|
+
key: step.id
|
|
158
|
+
}, [
|
|
159
|
+
createElementVNode("button", {
|
|
160
|
+
type: "button",
|
|
161
|
+
class: normalizeClass(["cn-sm-node__step nodrag nopan", {
|
|
162
|
+
'cn-sm-node__step--required': $options.isRequired(step),
|
|
163
|
+
'cn-sm-node__step--selected': step.id === $props.selectedStepId,
|
|
164
|
+
}]),
|
|
165
|
+
"aria-pressed": step.id === $props.selectedStepId ? 'true' : 'false',
|
|
166
|
+
draggable: $props.readOnly ? 'false' : 'true',
|
|
167
|
+
onClick: withModifiers($event => (_ctx.$emit('step-click', step.id)), ["stop"]),
|
|
168
|
+
onKeydown: $event => ($options.onStepKeydown(index, $event)),
|
|
169
|
+
onMousedown: _cache[7] || (_cache[7] = withModifiers(() => {}, ["stop"])),
|
|
170
|
+
onPointerdown: _cache[8] || (_cache[8] = withModifiers(() => {}, ["stop"])),
|
|
171
|
+
onDragstart: withModifiers($event => ($options.onStepDragStart(index, $event)), ["stop"]),
|
|
172
|
+
onDragover: _cache[9] || (_cache[9] = withModifiers(() => {}, ["prevent"])),
|
|
173
|
+
onDrop: withModifiers($event => ($options.onStepDrop(index)), ["stop","prevent"])
|
|
174
|
+
}, [
|
|
175
|
+
($options.isRequired(step))
|
|
176
|
+
? (openBlock(), createElementBlock("span", _hoisted_9, "*"))
|
|
177
|
+
: createCommentVNode("v-if", true),
|
|
178
|
+
createElementVNode("span", _hoisted_10, toDisplayString($options.stepTitle(step)), 1 /* TEXT */),
|
|
179
|
+
($options.isRequired(step))
|
|
180
|
+
? (openBlock(), createElementBlock("span", _hoisted_11, toDisplayString($props.say('required')), 1 /* TEXT */))
|
|
181
|
+
: createCommentVNode("v-if", true),
|
|
182
|
+
($options.badgeOf(step) > 0)
|
|
183
|
+
? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString($options.badgeOf(step)), 1 /* TEXT */))
|
|
184
|
+
: createCommentVNode("v-if", true)
|
|
185
|
+
], 42 /* CLASS, PROPS, NEED_HYDRATION */, _hoisted_8)
|
|
186
|
+
]))
|
|
187
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
188
|
+
]))
|
|
189
|
+
: createCommentVNode("v-if", true),
|
|
190
|
+
($props.showSteps && !$props.readOnly)
|
|
191
|
+
? (openBlock(), createElementBlock("button", {
|
|
192
|
+
key: 2,
|
|
193
|
+
type: "button",
|
|
194
|
+
class: "cn-sm-node__add nodrag nopan",
|
|
195
|
+
onClick: _cache[10] || (_cache[10] = withModifiers($event => (_ctx.$emit('add-step')), ["stop"])),
|
|
196
|
+
onKeydown: _cache[11] || (_cache[11] = withModifiers(() => {}, ["stop"])),
|
|
197
|
+
onMousedown: _cache[12] || (_cache[12] = withModifiers(() => {}, ["stop"])),
|
|
198
|
+
onPointerdown: _cache[13] || (_cache[13] = withModifiers(() => {}, ["stop"]))
|
|
199
|
+
}, [
|
|
200
|
+
createVNode(_component_Plus, { size: 16 }),
|
|
201
|
+
createElementVNode("span", null, toDisplayString($props.say('addStep')), 1 /* TEXT */)
|
|
202
|
+
], 32 /* NEED_HYDRATION */))
|
|
203
|
+
: createCommentVNode("v-if", true)
|
|
204
|
+
], 2 /* CLASS */))
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
export { render };
|
|
208
|
+
//# sourceMappingURL=CnStateMachineNode.vue3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnStateMachineNode.vue3.js","sources":["../../../../src/components/CnStateMachineEditor/CnStateMachineNode.vue?vue&type=template&id=5d910d3c&lang.js"],"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-node\" :class=\"{ 'cn-sm-node--final': final }\">\n\t\t<div class=\"cn-sm-node__header\">\n\t\t\t<span class=\"cn-sm-node__name\">{{ label }}</span>\n\t\t\t<span\n\t\t\t\tv-if=\"showSteps && steps.length > 0\"\n\t\t\t\tclass=\"cn-sm-node__count\"\n\t\t\t\t:title=\"say('stepCount', { count: steps.length })\">\n\t\t\t\t<span aria-hidden=\"true\">{{ steps.length }}</span>\n\t\t\t\t<span class=\"cn-sm-node__sr\">{{ say('stepCount', { count: steps.length }) }}</span>\n\t\t\t</span>\n\n\t\t\t<!-- Every pointer gesture on the canvas has a menu entry here, so a\n\t\t\t keyboard reaches all of them. Keys and pointer events stop at\n\t\t\t this wrapper: the node's own handler would otherwise move or\n\t\t\t remove the state on an arrow or Delete meant for the menu. -->\n\t\t\t<div\n\t\t\t\tv-if=\"!readOnly\"\n\t\t\t\tclass=\"cn-sm-node__menu nodrag nopan\"\n\t\t\t\t@keydown.stop\n\t\t\t\t@click.stop\n\t\t\t\t@mousedown.stop\n\t\t\t\t@pointerdown.stop>\n\t\t\t\t<NcActions\n\t\t\t\t\t:open=\"menuOpen\"\n\t\t\t\t\t:inline=\"0\"\n\t\t\t\t\t:aria-label=\"say('stateActions', { name: label })\"\n\t\t\t\t\t@update:open=\"$emit('update:menuOpen', $event)\">\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"target in connectTargets\"\n\t\t\t\t\t\t:key=\"`connect-${target.id}`\"\n\t\t\t\t\t\tcloseAfterClick\n\t\t\t\t\t\t@click=\"$emit('connect', target.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<ArrowRight :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('connectTo', { name: target.label }) }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"transition in outgoing\"\n\t\t\t\t\t\t:key=\"`edit-${transition.id}`\"\n\t\t\t\t\t\tcloseAfterClick\n\t\t\t\t\t\t@click=\"$emit('edit-transition', transition.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('editTransitionTo', { name: transition.targetLabel }) }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\tv-for=\"transition in outgoing\"\n\t\t\t\t\t\t:key=\"`disconnect-${transition.id}`\"\n\t\t\t\t\t\tcloseAfterClick\n\t\t\t\t\t\t@click=\"$emit('disconnect', transition.id)\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<LinkOff :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('disconnectFrom', { name: transition.targetLabel }) }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton v-if=\"showSteps\" closeAfterClick @click=\"$emit('add-step')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Plus :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('addStep') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton closeAfterClick @click=\"$emit('delete-state')\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<DeleteOutline :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t{{ say('deleteState') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<span v-if=\"final\" class=\"cn-sm-node__chip\">{{ say('final') }}</span>\n\n\t\t<ul v-if=\"showSteps && steps.length > 0\" class=\"cn-sm-node__steps\">\n\t\t\t<li v-for=\"(step, index) in steps\" :key=\"step.id\">\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclass=\"cn-sm-node__step nodrag nopan\"\n\t\t\t\t\t:class=\"{\n\t\t\t\t\t\t'cn-sm-node__step--required': isRequired(step),\n\t\t\t\t\t\t'cn-sm-node__step--selected': step.id === selectedStepId,\n\t\t\t\t\t}\"\n\t\t\t\t\t:aria-pressed=\"step.id === selectedStepId ? 'true' : 'false'\"\n\t\t\t\t\t:draggable=\"readOnly ? 'false' : 'true'\"\n\t\t\t\t\t@click.stop=\"$emit('step-click', step.id)\"\n\t\t\t\t\t@keydown=\"onStepKeydown(index, $event)\"\n\t\t\t\t\t@mousedown.stop\n\t\t\t\t\t@pointerdown.stop\n\t\t\t\t\t@dragstart.stop=\"onStepDragStart(index, $event)\"\n\t\t\t\t\t@dragover.prevent\n\t\t\t\t\t@drop.stop.prevent=\"onStepDrop(index)\">\n\t\t\t\t\t<span v-if=\"isRequired(step)\" class=\"cn-sm-node__required\" aria-hidden=\"true\">*</span>\n\t\t\t\t\t<span class=\"cn-sm-node__step-name\">{{ stepTitle(step) }}</span>\n\t\t\t\t\t<span v-if=\"isRequired(step)\" class=\"cn-sm-node__sr\">{{ say('required') }}</span>\n\t\t\t\t\t<span v-if=\"badgeOf(step) > 0\" class=\"cn-sm-node__checks\">{{ badgeOf(step) }}</span>\n\t\t\t\t</button>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<button\n\t\t\tv-if=\"showSteps && !readOnly\"\n\t\t\ttype=\"button\"\n\t\t\tclass=\"cn-sm-node__add nodrag nopan\"\n\t\t\t@click.stop=\"$emit('add-step')\"\n\t\t\t@keydown.stop\n\t\t\t@mousedown.stop\n\t\t\t@pointerdown.stop>\n\t\t\t<Plus :size=\"16\" />\n\t\t\t<span>{{ say('addStep') }}</span>\n\t\t</button>\n\t</div>\n</template>\n\n<script>\nimport { NcActionButton, NcActions } from '@nextcloud/vue'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport DeleteOutline from 'vue-material-design-icons/DeleteOutline.vue'\nimport LinkOff from 'vue-material-design-icons/LinkOff.vue'\nimport Pencil from 'vue-material-design-icons/Pencil.vue'\nimport Plus from 'vue-material-design-icons/Plus.vue'\nimport { asList } from '../../utils/stateMachineValidation.js'\n\n/**\n * The body of one state on the CnStateMachineEditor canvas: its name, its\n * steps, and a menu that offers every canvas gesture from the keyboard.\n *\n * Rendered inside CnGraphCanvas's focusable node wrapper, which owns moving\n * (arrow keys), connecting (`c`) and removing (Delete) the state.\n */\nexport default {\n\tname: 'CnStateMachineNode',\n\n\tcomponents: { NcActions, NcActionButton, ArrowRight, DeleteOutline, LinkOff, Pencil, Plus },\n\n\tprops: {\n\t\t/** The state's name. */\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/** Whether the state is final. */\n\t\tfinal: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** The state's steps, in order. */\n\t\tsteps: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether steps are part of this machine. */\n\t\tshowSteps: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/** Record keys of a step: `{ title, required, badge }`. */\n\t\tstepKeys: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({ title: 'title', required: 'required', badge: '' }),\n\t\t},\n\n\t\t/** The step whose panel is open. */\n\t\tselectedStepId: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** States this one has no transition to yet: `{ id, label }`. */\n\t\tconnectTargets: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Transitions leaving this state: `{ id, targetLabel }`. */\n\t\toutgoing: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\n\t\t/** Whether the actions menu is open. */\n\t\tmenuOpen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Hide every editing control. */\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/** Resolves an editor text by name: `(name, vars) => string`. */\n\t\tsay: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\temits: [\n\t\t'add-step',\n\t\t'connect',\n\t\t'delete-state',\n\t\t'disconnect',\n\t\t'edit-transition',\n\t\t'step-click',\n\t\t'step-move',\n\t\t'update:menuOpen',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tdragIndex: null,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * @param {object} step A step.\n\t\t * @return {string} Its title.\n\t\t */\n\t\tstepTitle(step) {\n\t\t\treturn step[this.stepKeys.title] || ''\n\t\t},\n\n\t\t/**\n\t\t * @param {object} step A step.\n\t\t * @return {boolean} Whether it is required.\n\t\t */\n\t\tisRequired(step) {\n\t\t\treturn this.stepKeys.required ? step[this.stepKeys.required] === true : false\n\t\t},\n\n\t\t/**\n\t\t * @param {object} step A step.\n\t\t * @return {number} The length of the list its badge counts, 0 for none.\n\t\t */\n\t\tbadgeOf(step) {\n\t\t\treturn this.stepKeys.badge ? asList(step[this.stepKeys.badge]).length : 0\n\t\t},\n\n\t\t/**\n\t\t * Keys on a step stay on the step: Alt with an arrow moves it within the\n\t\t * state, everything else is the button's own.\n\t\t *\n\t\t * @param {number} index The step's position.\n\t\t * @param {KeyboardEvent} event The key event.\n\t\t * @return {void}\n\t\t */\n\t\tonStepKeydown(index, event) {\n\t\t\tevent.stopPropagation()\n\t\t\tif (this.readOnly || event.altKey !== true) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (event.key === 'ArrowUp' && index > 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.$emit('step-move', { from: index, to: index - 1 })\n\t\t\t} else if (event.key === 'ArrowDown' && index < this.steps.length - 1) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tthis.$emit('step-move', { from: index, to: index + 1 })\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {number} index The dragged step.\n\t\t * @param {DragEvent} event The drag event.\n\t\t * @return {void}\n\t\t */\n\t\tonStepDragStart(index, event) {\n\t\t\tthis.dragIndex = index\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 {number} index The step dropped on.\n\t\t * @return {void}\n\t\t */\n\t\tonStepDrop(index) {\n\t\t\tif (this.dragIndex !== null && this.dragIndex !== index) {\n\t\t\t\tthis.$emit('step-move', { from: this.dragIndex, to: index })\n\t\t\t}\n\t\t\tthis.dragIndex = null\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-sm-node {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n\ttext-align: start;\n}\n\n.cn-sm-node__header {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 6px;\n\tmin-width: 0;\n}\n\n.cn-sm-node__name {\n\tflex: 1 1 auto;\n\tmin-width: 0;\n\toverflow: hidden;\n\tfont-size: 14px;\n\tfont-weight: 600;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-sm-node__count {\n\tflex: none;\n\tmin-width: 20px;\n\tpadding: 0 6px;\n\tborder-radius: 10px;\n\tbackground: var(--color-primary-element, #0082c9);\n\tcolor: var(--color-primary-element-text, #fff);\n\tfont-size: 12px;\n\tfont-weight: 600;\n\ttext-align: center;\n}\n\n.cn-sm-node__menu {\n\tflex: none;\n\tmargin: -6px -8px -6px 0;\n}\n\n.cn-sm-node__chip {\n\talign-self: flex-start;\n\tpadding: 2px 8px;\n\tborder-radius: 10px;\n\tbackground: var(--color-success, #2d7b41);\n\tcolor: var(--color-success-text, #fff);\n\tfont-size: 12px;\n\tfont-weight: 600;\n}\n\n.cn-sm-node__steps {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin: 0 -12px;\n\tpadding: 0;\n\tlist-style: none;\n}\n\n.cn-sm-node__step {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n\twidth: 100%;\n\tmin-height: 28px;\n\tpadding: 2px 12px;\n\tborder: 0;\n\tbackground: none;\n\tcolor: var(--color-main-text, #222);\n\tfont: inherit;\n\tfont-size: 13px;\n\ttext-align: start;\n\tcursor: pointer;\n}\n\n.cn-sm-node__step:hover,\n.cn-sm-node__step--selected {\n\tbackground: var(--color-background-hover, #f5f5f5);\n}\n\n.cn-sm-node__step:focus-visible,\n.cn-sm-node__add:focus-visible {\n\toutline: 2px solid var(--color-primary-element, #0082c9);\n\toutline-offset: -2px;\n}\n\n.cn-sm-node__step--required {\n\tfont-weight: 600;\n}\n\n.cn-sm-node__required {\n\tcolor: var(--color-error-text, #c9302c);\n}\n\n.cn-sm-node__step-name {\n\tflex: 1 1 auto;\n\tmin-width: 0;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n}\n\n.cn-sm-node__checks {\n\tflex: none;\n\tpadding: 0 4px;\n\tborder-radius: 4px;\n\tbackground: var(--color-background-dark, #ededed);\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n\tfont-size: 11px;\n}\n\n.cn-sm-node__add {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 4px;\n\tmargin: 0 -12px -8px;\n\tmin-height: 32px;\n\tpadding: 4px 12px;\n\tborder: 0;\n\tborder-top: 1px solid var(--color-border, #d0d0d0);\n\tbackground: none;\n\tcolor: var(--color-text-maxcontrast, #6b6b6b);\n\tfont: inherit;\n\tfont-size: 13px;\n\tcursor: pointer;\n}\n\n.cn-sm-node__add:hover {\n\tbackground: var(--color-background-hover, #f5f5f5);\n\tcolor: var(--color-main-text, #222);\n}\n\n.cn-sm-node__sr {\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":["_createElementBlock","_normalizeClass","_toDisplayString","_createElementVNode","_Fragment","_renderList","_createBlock","_createVNode","_createTextVNode","_openBlock","_withModifiers"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import script from './CnStateMachinePanel.vue2.js';
|
|
2
|
+
import { render } from './CnStateMachinePanel.vue3.js';
|
|
3
|
+
|
|
4
|
+
script.render = render;
|
|
5
|
+
script.__scopeId = "data-v-dd581f76";
|
|
6
|
+
const __sfc_main = script;
|
|
7
|
+
|
|
8
|
+
export { __sfc_main as default };
|
|
9
|
+
//# sourceMappingURL=CnStateMachinePanel.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnStateMachinePanel.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|