@versa-stack/v-craft 1.1.0-alpha.1 → 1.1.0-alpha.3

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.
@@ -8,9 +8,11 @@ import { default as CraftEditorPanelBlueprints } from './CraftEditorPanelBluepri
8
8
  import { default as CraftEditorPanelForm } from './CraftEditorPanelForm.vue';
9
9
  import { default as CraftEditorPanelLayers } from './CraftEditorPanelLayers.vue';
10
10
  import { default as CraftEditorPanelLayout } from './CraftEditorPanelLayout.vue';
11
+ import { default as CraftEditorPanelNodeDataSourceSettings } from './CraftEditorPanelNodeDataSourceSettings.vue';
11
12
  import { default as CraftEditorPanelNodeEventsSettings } from './CraftEditorPanelNodeEventsSettings.vue';
12
13
  import { default as CraftEditorPanelNodeLayer } from './CraftEditorPanelNodeLayer.vue';
13
14
  import { default as CraftEditorPanelNodeSettings } from './CraftEditorPanelNodeSettings.vue';
15
+ import { default as CraftEditorPanelNodeSlotPropsSettings } from './CraftEditorPanelNodeSlotPropsSettings.vue';
14
16
  import { default as CraftEditorPanelSettings } from './CraftEditorPanelSettings.vue';
15
17
  import { default as CraftFrame } from './CraftFrame.vue';
16
18
  import { default as CraftNodeEditor } from './CraftNodeEditor.vue';
@@ -18,7 +20,7 @@ import { default as CraftNodeViewer } from './CraftNodeViewer.vue';
18
20
  import { default as CraftIframe } from './CraftIframe.vue';
19
21
  import { default as CraftStaticRenderer } from './CraftStaticRenderer.vue';
20
22
  import * as Utils from "./utils";
21
- export { CraftCanvas, CraftComponentSimpleText, CraftEditor, CraftEditorBlueprint, CraftEditorBlueprintsList, CraftEditorPanelBlueprints, CraftEditorPanelForm, CraftEditorPanelLayers, CraftEditorPanelLayout, CraftEditorPanelNodeEventsSettings, CraftEditorPanelNodeLayer, CraftEditorPanelNodeSettings, CraftEditorPanelSettings, CraftFrame, CraftIframe, CraftNodeEditor, CraftNodeViewer, CraftStaticRenderer, Utils, };
23
+ export { CraftCanvas, CraftComponentSimpleText, CraftEditor, CraftEditorBlueprint, CraftEditorBlueprintsList, CraftEditorPanelBlueprints, CraftEditorPanelForm, CraftEditorPanelLayers, CraftEditorPanelLayout, CraftEditorPanelNodeDataSourceSettings, CraftEditorPanelNodeEventsSettings, CraftEditorPanelNodeLayer, CraftEditorPanelNodeSettings, CraftEditorPanelNodeSlotPropsSettings, CraftEditorPanelSettings, CraftFrame, CraftIframe, CraftNodeEditor, CraftNodeViewer, CraftStaticRenderer, Utils, };
22
24
  export type CraftDataListItem = {
23
25
  dataItem: any;
24
26
  dataIndex: number;
@@ -5,6 +5,7 @@ import { FormKitSchemaDefinition } from '@formkit/core';
5
5
  export declare const blueprintsWithDefaults: <T extends FormKitSchemaDefinition>(group: BlueprintGroup, resolver: CraftNodeResolver<T>) => {
6
6
  props: any;
7
7
  slots: Record<string, CraftNode[]> & Record<string, import('../lib/model').Blueprint[]>;
8
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
8
9
  componentName: string;
9
10
  rules?: import('../lib/craftNode').CraftNodeRules | undefined;
10
11
  visible?: boolean | undefined;
@@ -10,6 +10,7 @@ export type CraftNodeComponentMap<T extends FormKitSchemaDefinition = FormKitSch
10
10
  defaultProps?: Record<string, any>;
11
11
  rules?: CraftNodeRules;
12
12
  slots?: string[];
13
+ slotsProps?: Record<string, string[]>;
13
14
  };
14
15
  export type CraftNodeResolverMap<T extends FormKitSchemaDefinition = FormKitSchemaDefinition> = Record<string, CraftNodeComponentMap<T>>;
15
16
  export type ResolveComponentHook = (craftNode: CraftNode, defaultResolver: (name: string) => Component | undefined) => Component | undefined;
@@ -26,5 +27,6 @@ export declare class CraftNodeResolver<T extends FormKitSchemaDefinition = FormK
26
27
  getSchema(craftNode: CraftNode): T;
27
28
  getEventsSchema(craftNode: CraftNode): T;
28
29
  getRules(craftNode: CraftNode): CraftNodeRules;
30
+ getSlotsProps(craftNode: CraftNode): Record<string, string[]>;
29
31
  }
30
32
  export default CraftNodeResolver;
@@ -8,6 +8,7 @@ export type CraftNodeRules = {
8
8
  };
9
9
  export type CraftNode = {
10
10
  slots: Record<string, CraftNode[]>;
11
+ slotsPropsPropsMap?: Record<string, Record<string, string>>;
11
12
  componentName: string;
12
13
  parentUuid?: string | null;
13
14
  props: any;
@@ -0,0 +1,11 @@
1
+ import { FormKitSchemaDefinition } from '@formkit/core';
2
+ export type SchemaFieldOption = {
3
+ value: string;
4
+ label: string;
5
+ };
6
+ /**
7
+ * Reads the flat `propsSchema`/`eventsSchema` array shape used throughout
8
+ * this project's resolvers (each entry a FormKit node carrying `name` and
9
+ * an optional `label`) and turns it into options for a target-prop picker.
10
+ */
11
+ export declare const extractSchemaFieldNames: (schema: FormKitSchemaDefinition | undefined | null) => SchemaFieldOption[];
@@ -13,11 +13,16 @@ export interface EditorState {
13
13
  eventsContext: Record<string, any>;
14
14
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
15
15
  draggingDisabled: boolean;
16
+ /** Live runtime props written by event handlers or captured from value-bearing nodes, by uuid. */
17
+ nodeRuntimeProps: Record<string, Record<string, any>>;
18
+ /** Page-scoped bag shared across event handlers, e.g. a pending flag. */
19
+ pageState: Record<string, any>;
16
20
  }
17
21
  export declare const useEditor: import('pinia').StoreDefinition<"editor", EditorState, {
18
22
  hasNodes: (state: {
19
23
  nodeMap: Map<string, {
20
24
  slots: Record<string, CraftNode[]>;
25
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
21
26
  componentName: string;
22
27
  parentUuid?: string | null | undefined;
23
28
  props: any;
@@ -36,6 +41,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
36
41
  selectedUuid: string | null;
37
42
  draggedNode: {
38
43
  slots: Record<string, CraftNode[]>;
44
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
39
45
  componentName: string;
40
46
  parentUuid?: string | null | undefined;
41
47
  props: any;
@@ -63,14 +69,18 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
63
69
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
64
70
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
65
71
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
72
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
66
73
  } | null;
67
74
  eventsContext: Record<string, any>;
68
75
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
69
76
  draggingDisabled: boolean;
77
+ nodeRuntimeProps: Record<string, Record<string, any>>;
78
+ pageState: Record<string, any>;
70
79
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => boolean;
71
80
  selectedNode: (state: {
72
81
  nodeMap: Map<string, {
73
82
  slots: Record<string, CraftNode[]>;
83
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
74
84
  componentName: string;
75
85
  parentUuid?: string | null | undefined;
76
86
  props: any;
@@ -89,6 +99,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
89
99
  selectedUuid: string | null;
90
100
  draggedNode: {
91
101
  slots: Record<string, CraftNode[]>;
102
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
92
103
  componentName: string;
93
104
  parentUuid?: string | null | undefined;
94
105
  props: any;
@@ -116,14 +127,18 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
116
127
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
117
128
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
118
129
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
130
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
119
131
  } | null;
120
132
  eventsContext: Record<string, any>;
121
133
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
122
134
  draggingDisabled: boolean;
135
+ nodeRuntimeProps: Record<string, Record<string, any>>;
136
+ pageState: Record<string, any>;
123
137
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => CraftNode | null;
124
138
  selectedRef: (state: {
125
139
  nodeMap: Map<string, {
126
140
  slots: Record<string, CraftNode[]>;
141
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
127
142
  componentName: string;
128
143
  parentUuid?: string | null | undefined;
129
144
  props: any;
@@ -142,6 +157,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
142
157
  selectedUuid: string | null;
143
158
  draggedNode: {
144
159
  slots: Record<string, CraftNode[]>;
160
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
145
161
  componentName: string;
146
162
  parentUuid?: string | null | undefined;
147
163
  props: any;
@@ -169,14 +185,18 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
169
185
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
170
186
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
171
187
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
188
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
172
189
  } | null;
173
190
  eventsContext: Record<string, any>;
174
191
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
175
192
  draggingDisabled: boolean;
193
+ nodeRuntimeProps: Record<string, Record<string, any>>;
194
+ pageState: Record<string, any>;
176
195
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => HTMLElement | null;
177
196
  getRef: (state: {
178
197
  nodeMap: Map<string, {
179
198
  slots: Record<string, CraftNode[]>;
199
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
180
200
  componentName: string;
181
201
  parentUuid?: string | null | undefined;
182
202
  props: any;
@@ -195,6 +215,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
195
215
  selectedUuid: string | null;
196
216
  draggedNode: {
197
217
  slots: Record<string, CraftNode[]>;
218
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
198
219
  componentName: string;
199
220
  parentUuid?: string | null | undefined;
200
221
  props: any;
@@ -222,14 +243,18 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
222
243
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
223
244
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
224
245
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
246
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
225
247
  } | null;
226
248
  eventsContext: Record<string, any>;
227
249
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
228
250
  draggingDisabled: boolean;
251
+ nodeRuntimeProps: Record<string, Record<string, any>>;
252
+ pageState: Record<string, any>;
229
253
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => (uuid: string) => HTMLElement;
230
254
  allNodes: (state: {
231
255
  nodeMap: Map<string, {
232
256
  slots: Record<string, CraftNode[]>;
257
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
233
258
  componentName: string;
234
259
  parentUuid?: string | null | undefined;
235
260
  props: any;
@@ -248,6 +273,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
248
273
  selectedUuid: string | null;
249
274
  draggedNode: {
250
275
  slots: Record<string, CraftNode[]>;
276
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
251
277
  componentName: string;
252
278
  parentUuid?: string | null | undefined;
253
279
  props: any;
@@ -275,14 +301,18 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
275
301
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
276
302
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
277
303
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
304
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
278
305
  } | null;
279
306
  eventsContext: Record<string, any>;
280
307
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
281
308
  draggingDisabled: boolean;
309
+ nodeRuntimeProps: Record<string, Record<string, any>>;
310
+ pageState: Record<string, any>;
282
311
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => CraftNode[];
283
312
  getDraggedNode: (state: {
284
313
  nodeMap: Map<string, {
285
314
  slots: Record<string, CraftNode[]>;
315
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
286
316
  componentName: string;
287
317
  parentUuid?: string | null | undefined;
288
318
  props: any;
@@ -301,6 +331,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
301
331
  selectedUuid: string | null;
302
332
  draggedNode: {
303
333
  slots: Record<string, CraftNode[]>;
334
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
304
335
  componentName: string;
305
336
  parentUuid?: string | null | undefined;
306
337
  props: any;
@@ -328,12 +359,16 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
328
359
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
329
360
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
330
361
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
362
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
331
363
  } | null;
332
364
  eventsContext: Record<string, any>;
333
365
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
334
366
  draggingDisabled: boolean;
367
+ nodeRuntimeProps: Record<string, Record<string, any>>;
368
+ pageState: Record<string, any>;
335
369
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => {
336
370
  slots: Record<string, CraftNode[]>;
371
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
337
372
  componentName: string;
338
373
  parentUuid?: string | null | undefined;
339
374
  props: any;
@@ -351,6 +386,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
351
386
  nodeTree: (state: {
352
387
  nodeMap: Map<string, {
353
388
  slots: Record<string, CraftNode[]>;
389
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
354
390
  componentName: string;
355
391
  parentUuid?: string | null | undefined;
356
392
  props: any;
@@ -369,6 +405,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
369
405
  selectedUuid: string | null;
370
406
  draggedNode: {
371
407
  slots: Record<string, CraftNode[]>;
408
+ slotsPropsPropsMap?: Record<string, Record<string, string>> | undefined;
372
409
  componentName: string;
373
410
  parentUuid?: string | null | undefined;
374
411
  props: any;
@@ -396,10 +433,13 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
396
433
  getSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
397
434
  getEventsSchema: (craftNode: CraftNode) => FormKitSchemaDefinition;
398
435
  getRules: (craftNode: CraftNode) => import('../lib/craftNode').CraftNodeRules;
436
+ getSlotsProps: (craftNode: CraftNode) => Record<string, string[]>;
399
437
  } | null;
400
438
  eventsContext: Record<string, any>;
401
439
  nodeDataMap: Record<string, CraftNodeDatasource | null>;
402
440
  draggingDisabled: boolean;
441
+ nodeRuntimeProps: Record<string, Record<string, any>>;
442
+ pageState: Record<string, any>;
403
443
  } & import('pinia').PiniaCustomStateProperties<EditorState>) => CraftNode[];
404
444
  }, {
405
445
  clear(): void;
@@ -413,6 +453,7 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
413
453
  setNodeData(uuid: string, data: CraftNodeDatasource | null): void;
414
454
  updateNodeProps(nodeUuid: string, newProps: Record<string, any>): void;
415
455
  updateNodeEvents(nodeUuid: string, newEvents: Record<string, string>): void;
456
+ updateNodeSlotsPropsPropsMap(nodeUuid: string, slotsPropsPropsMap: Record<string, Record<string, string>>): void;
416
457
  setNodes(nodes: CraftNode[]): void;
417
458
  addNodeRecursively(node: CraftNode, parentUuid?: string | null): void;
418
459
  selectNode(craftNode: CraftNode | null): void;
@@ -425,4 +466,5 @@ export declare const useEditor: import('pinia').StoreDefinition<"editor", Editor
425
466
  insertNodeBefore(node: CraftNode, targetNode: CraftNode, slotName?: string): void;
426
467
  insertNodeAfter(node: CraftNode, targetNode: CraftNode, slotName?: string): void;
427
468
  setEventsContext(context: Record<string, any>): void;
469
+ setNodeRuntimeProps(uuid: string, patch: Record<string, any>): void;
428
470
  }>;
package/dist/v-craft.css CHANGED
@@ -1 +1 @@
1
- .pre-wrap{white-space:pre-wrap}.editable-text.is-editable:hover{background-color:#0000000d;cursor:pointer}.editable-text.is-editing{display:inline-block;width:100%}.editable-text__textarea{font:inherit;border:none;background:none;outline:none;width:100%;resize:none;overflow:hidden;min-height:1em;line-height:inherit;padding:.12em;margin:0}.editable-text__textarea:focus{border:none}.v-craft-blueprints-panel[data-v-a6de4dca]{min-width:15em;max-width:15em;width:15em}.v-craft-blueprints-panel[data-v-a6de4dca] .v-craft-blueprint{text-align:center;padding:.25em;position:relative;border:1px solid var(--v-craft-gray-medium);border-radius:3px;display:flex;align-items:center;cursor:pointer;background-color:var(--v-craft-background-color-lighter-10)}.v-craft-blueprints-panel[data-v-a6de4dca] .v-craft-blueprint-label{font-size:.8em;text-transform:uppercase;font-weight:700;color:var(--v-craft-gray-darker)}.v-craft-blueprints-panel h4[data-v-a6de4dca]{font-size:.8em;text-transform:uppercase;font-weight:700;color:var(--v-craft-gray-medium);margin-bottom:.75em;margin-top:2em}.v-craft-panel.v-craft-layers-panel[data-v-ab795ec3]{padding:10px;display:flex;flex-direction:column;height:auto;position:relative;width:23rem}.v-craft-layers[data-v-ab795ec3]{overflow-y:auto}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar{width:8px}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar-track{background:var(--v-craft-scrollbar-track)}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar-thumb{background:var(--v-craft-scrollbar-thumb);border-radius:4px}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar-thumb:hover{background:var(--v-craft-scrollbar-thumb-hover)}.v-craft-layers[data-v-ab795ec3]{max-height:300px;overflow-y:auto;margin-top:10px}ul.v-craft-node-layers[data-v-ab795ec3]{margin:0;padding:0;list-style-type:none}.v-craft-panel-manager .v-craft-panel[data-v-81a2200d]{padding:.75em;margin-bottom:1.25em;box-shadow:0 2px 2px #00000009,0 4px 4px #0000000c,0 6px 6px #0000000f,0 8px 8px #00000012,0 10px 10px #00000016,0 15px 15px #0000001f;border-radius:3px}.v-craft-panel-manager[data-v-81a2200d] .v-craft-panel .v-craft-title{margin:0;padding:.125em;border-bottom:1px solid var(--v-craft-gray-medium)}.v-craft-node-layer[data-v-208a4e02]{padding:5px 0;border-bottom:1px solid var(--v-craft-gray-dark);list-style-type:none}.v-craft-node-layer.v-craft-node-layer-selected>.v-craft-component-layer-face[data-v-208a4e02]{background-color:var(--v-craft-blue-lighter-5)}.v-craft-node-layer.v-craft-node-layer-selected>.v-craft-component-layer-face[data-v-208a4e02]:hover{background-color:var(--v-craft-blue-lighter-15)}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-layer-face{display:flex;align-items:center;padding:2px 5px;background-color:var(--v-craft-gray-medium);border-radius:3px;transition:background-color .2s ease;position:relative}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-layer-face:before{position:absolute;background-color:var(--v-craft-gray-medium);width:.5em;height:1px;top:50%;left:-.5em;content:" "}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-layer-face:hover{background-color:var(--v-craft-gray-medium-lighter-15)}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-name{flex-grow:1;font-size:12px;cursor:pointer}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-icon{font-size:12px;cursor:pointer;margin-left:5px;transition:color .2s ease}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-icon:hover{color:var(--v-craft-blue)}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-icon{border:none;padding:.12em}.v-craft-node-layer[data-v-208a4e02] .nested-layers{margin-left:15px;border-left:1px solid var(--v-craft-gray-medium);padding-left:5px}:root{--v-craft-indicator-bg-allowed: var(--v-craft-green);--v-craft-indicator-bg-forbidden: var(--v-craft-red);--v-craft-indicator-transition-duration: .125s;--v-craft-indicator-z-index: 10000}.v-craft-indicator{position:fixed;background-color:var(--v-craft-indicator-bg-allowed);transition:top var(--v-craft-indicator-transition-duration) ease,left var(--v-craft-indicator-transition-duration) ease,right var(--v-craft-indicator-transition-duration) ease,bottom var(--v-craft-indicator-transition-duration) ease,width var(--v-craft-indicator-transition-duration) ease,height var(--v-craft-indicator-transition-duration) ease,background-color var(--v-craft-indicator-transition-duration) ease-in-out;z-index:var(--v-craft-indicator-z-index)}.v-craft-indicator:after{content:" "}.v-craft-indicator.v-craft-forbidden{background-color:var(--v-craft-indicator-bg-forbidden)}.v-craft-node{position:relative;transition:all var(--v-craft-transition-duration) ease;cursor:pointer;box-sizing:border-box}.v-craft-node:after{content:"";position:absolute;top:calc(-1 * var(--v-craft-node-editor-border-padding));left:calc(-1 * var(--v-craft-node-editor-border-padding));right:calc(-1 * var(--v-craft-node-editor-border-padding));bottom:calc(-1 * var(--v-craft-node-editor-border-padding));border:1px solid transparent;border-radius:4px;transition:border-color var(--v-craft-transition-duration) ease-in-out,box-shadow var(--v-craft-transition-duration) ease-in-out;pointer-events:none;z-index:10}.v-craft-node:before{content:"";align-items:center;background-color:var(--node-color, var(--v-craft-blue));bottom:calc(-20px - var(--v-craft-node-editor-border-padding));color:var(--v-craft-white);display:flex;font-family:Arial,sans-serif;font-size:12px;font-weight:400;height:20px;left:calc(-1 * var(--v-craft-node-editor-border-padding) + 3px);line-height:1.4em;opacity:0;padding:0 5px!important;pointer-events:none;position:absolute;text-align:center;text-transform:none;transition:opacity var(--v-craft-transition-duration) ease-in-out;z-index:100}.v-craft-node.v-craft-canvas.v-craft-other-node-dragged:before{opacity:.5}.v-craft-node:hover:not(:has(.v-craft-node:hover)):not(.v-craft-node-selected):before{opacity:1}.v-craft-node-selected:before{opacity:1}.v-craft-node:hover:not(:has(.v-craft-node:hover)):after{border-color:var(--node-color, var(--v-craft-blue-lighter-20));box-shadow:0 0 0 1px var(--node-color, var(--v-craft-blue))}.dark .v-craft-node:hover:not(:has(.v-craft-node:hover)):after{border-color:var(--node-color, var(--v-craft-blue-darker-25));box-shadow:0 0 0 1px var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-canvas:hover:not(:has(.v-craft-node:hover)):not(.v-craft-node-selected):after{box-shadow:0 0 .5em .1em rgba(var(--node-color),.2)}.v-craft-node-selected:not(:hover):after{border:1px solid var(--node-color, var(--v-craft-blue));box-shadow:0 0 .5em .1em rgba(var(--node-color),.2)}.v-craft-node-selected:after{border:1px solid var(--node-color, var(--v-craft-blue));box-shadow:0 0 0 1px var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-canvas.v-craft-other-node-dragged:after{border:2px dashed var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-canvas .v-craft-drop-text{border:2px dashed var(--v-craft-gray-medium);color:var(--v-craft-text-color);padding:1.25em;width:100%;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5em;min-height:60px;box-sizing:border-box;pointer-events:auto;position:relative;margin:4px 0}.v-craft-node.v-craft-canvas .v-craft-slot-name{position:absolute;bottom:4px;left:8px;font-weight:400;font-size:.75em;color:var(--v-craft-gray-medium);text-transform:uppercase;letter-spacing:.05em}.v-craft-node.v-craft-canvas .v-craft-drop-text-label{font-size:.85em;color:var(--v-craft-gray-medium)}.v-craft-node.v-craft-canvas.v-craft-other-node-dragged{padding:10px!important;margin-bottom:25px!important}.v-craft-node-selected{z-index:1}.v-craft-node.v-craft-drag-over{box-shadow:0 0 0 2px var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-dragging{opacity:.7}.v-craft-node:before{content:attr(data-node-name)}:root{--v-craft-blue: #1473e6;--v-craft-red: #ff3366;--v-craft-green: rgb(15, 177, 88);--v-craft-gray-dark: #f8f8f8;--v-craft-gray-medium: rgb(202.5, 202.5, 202.5);--v-craft-gray-light: rgb(167.5, 167.5, 167.5);--v-craft-gray-darkest: hsl(0, 0%, 101.7647058824%);--v-craft-white: #ffffff;--v-craft-background-color: hsl(0, 0%, 106.7647058824%);--v-craft-background-color-lighter-10: #ffffff;--v-craft-background-color-darker-10: hsl(0, 0%, 101.7647058824%);--v-craft-input-background: hsl(0, 0%, 109.7647058824%);--v-craft-input-border: #eaeaea;--v-craft-text-color: rgb(55.5, 55.5, 55.5);--v-craft-text-color-blue: #e0e0e0;--v-craft-error-color: #ff3366;--v-craft-blue-darker-25: rgb(9.8, 56.35, 112.7);--v-craft-blue-darker-30: rgb(7.76, 44.62, 89.24);--v-craft-blue-lighter-5: rgb(39.26, 128.37, 236.24);--v-craft-blue-lighter-10: rgb(62.72, 142.14, 238.28);--v-craft-blue-lighter-15: rgb(86.18, 155.91, 240.32);--v-craft-blue-lighter-20: rgb(109.64, 169.68, 242.36);--v-craft-blue-transparent-70: rgba(20, 115, 230, .7);--v-craft-blue-transparent-20: rgba(20, 115, 230, .2);--v-craft-gray-dark-darker-10: rgb(222.5, 222.5, 222.5);--v-craft-gray-dark-darker-5: rgb(235.25, 235.25, 235.25);--v-craft-gray-dark-lighter-10: hsl(0, 0%, 107.2549019608%);--v-craft-gray-dark-transparent-50: rgba(248, 248, 248, .5);--v-craft-gray-medium-darker-10: #b1b1b1;--v-craft-gray-medium-lighter-15: rgb(240.75, 240.75, 240.75);--v-craft-transition-duration: .3s;--v-craft-node-editor-border-padding: .2rem}html.dark{--v-craft-blue: #1473e6;--v-craft-red: #ff3366;--v-craft-green: rgb(15, 177, 88);--v-craft-gray-dark: #2c2c2c;--v-craft-gray-medium: #4b4b4b;--v-craft-gray-light: #8e8e8e;--v-craft-gray-darkest: #1e1e1e;--v-craft-white: #ffffff;--v-craft-background-color: #1e1e1e;--v-craft-background-color-lighter-10: rgb(55.5, 55.5, 55.5);--v-craft-background-color-darker-10: rgb(4.5, 4.5, 4.5);--v-craft-input-background: #2d2d2d;--v-craft-input-border: #3a3a3a;--v-craft-text-color: #e0e0e0;--v-craft-text-color-blue: #e0e0e0;--v-craft-error-color: #ff3366;--v-craft-blue-darker-25: rgb(9.8, 56.35, 112.7);--v-craft-blue-darker-30: rgb(7.76, 44.62, 89.24);--v-craft-blue-lighter-5: rgb(39.26, 128.37, 236.24);--v-craft-blue-lighter-10: rgb(62.72, 142.14, 238.28);--v-craft-blue-lighter-15: rgb(86.18, 155.91, 240.32);--v-craft-blue-lighter-20: rgb(109.64, 169.68, 242.36);--v-craft-blue-transparent-20: rgba(20, 115, 230, .2);--v-craft-blue-transparent-70: rgba(20, 115, 230, .7);--v-craft-gray-dark-darker-10: rgb(18.5, 18.5, 18.5);--v-craft-gray-dark-darker-5: rgb(31.25, 31.25, 31.25);--v-craft-gray-dark-lighter-10: rgb(69.5, 69.5, 69.5);--v-craft-gray-dark-transparent-50: rgba(44, 44, 44, .5);--v-craft-gray-medium-darker-10: rgb(49.5, 49.5, 49.5);--v-craft-gray-medium-lighter-15: rgb(113.25, 113.25, 113.25)}
1
+ .pre-wrap{white-space:pre-wrap}.editable-text.is-editable:hover{background-color:#0000000d;cursor:pointer}.editable-text.is-editing{display:inline-block;width:100%}.editable-text__textarea{font:inherit;border:none;background:none;outline:none;width:100%;resize:none;overflow:hidden;min-height:1em;line-height:inherit;padding:.12em;margin:0}.editable-text__textarea:focus{border:none}.v-craft-blueprints-panel[data-v-a6de4dca]{min-width:15em;max-width:15em;width:15em}.v-craft-blueprints-panel[data-v-a6de4dca] .v-craft-blueprint{text-align:center;padding:.25em;position:relative;border:1px solid var(--v-craft-gray-medium);border-radius:3px;display:flex;align-items:center;cursor:pointer;background-color:var(--v-craft-background-color-lighter-10)}.v-craft-blueprints-panel[data-v-a6de4dca] .v-craft-blueprint-label{font-size:.8em;text-transform:uppercase;font-weight:700;color:var(--v-craft-gray-darker)}.v-craft-blueprints-panel h4[data-v-a6de4dca]{font-size:.8em;text-transform:uppercase;font-weight:700;color:var(--v-craft-gray-medium);margin-bottom:.75em;margin-top:2em}.v-craft-panel.v-craft-layers-panel[data-v-ab795ec3]{padding:10px;display:flex;flex-direction:column;height:auto;position:relative;width:23rem}.v-craft-layers[data-v-ab795ec3]{overflow-y:auto}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar{width:8px}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar-track{background:var(--v-craft-scrollbar-track)}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar-thumb{background:var(--v-craft-scrollbar-thumb);border-radius:4px}.v-craft-layers[data-v-ab795ec3]::-webkit-scrollbar-thumb:hover{background:var(--v-craft-scrollbar-thumb-hover)}.v-craft-layers[data-v-ab795ec3]{max-height:300px;overflow-y:auto;margin-top:10px}ul.v-craft-node-layers[data-v-ab795ec3]{margin:0;padding:0;list-style-type:none}.v-craft-panel-manager .v-craft-panel[data-v-7dd1d43b]{padding:.75em;margin-bottom:1.25em;box-shadow:0 2px 2px #00000009,0 4px 4px #0000000c,0 6px 6px #0000000f,0 8px 8px #00000012,0 10px 10px #00000016,0 15px 15px #0000001f;border-radius:3px}.v-craft-panel-manager[data-v-7dd1d43b] .v-craft-panel .v-craft-title{margin:0;padding:.125em;border-bottom:1px solid var(--v-craft-gray-medium)}.v-craft-data-source-error[data-v-7c1c5696]{color:var(--v-craft-red, #e5484d)}.v-craft-node-layer[data-v-208a4e02]{padding:5px 0;border-bottom:1px solid var(--v-craft-gray-dark);list-style-type:none}.v-craft-node-layer.v-craft-node-layer-selected>.v-craft-component-layer-face[data-v-208a4e02]{background-color:var(--v-craft-blue-lighter-5)}.v-craft-node-layer.v-craft-node-layer-selected>.v-craft-component-layer-face[data-v-208a4e02]:hover{background-color:var(--v-craft-blue-lighter-15)}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-layer-face{display:flex;align-items:center;padding:2px 5px;background-color:var(--v-craft-gray-medium);border-radius:3px;transition:background-color .2s ease;position:relative}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-layer-face:before{position:absolute;background-color:var(--v-craft-gray-medium);width:.5em;height:1px;top:50%;left:-.5em;content:" "}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-layer-face:hover{background-color:var(--v-craft-gray-medium-lighter-15)}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-name{flex-grow:1;font-size:12px;cursor:pointer}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-icon{font-size:12px;cursor:pointer;margin-left:5px;transition:color .2s ease}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-icon:hover{color:var(--v-craft-blue)}.v-craft-node-layer[data-v-208a4e02] .v-craft-component-icon{border:none;padding:.12em}.v-craft-node-layer[data-v-208a4e02] .nested-layers{margin-left:15px;border-left:1px solid var(--v-craft-gray-medium);padding-left:5px}.v-craft-slot-props-map-group[data-v-f762baf8]{border:1px solid var(--v-craft-gray-medium, #ccc);border-radius:4px;padding:.75em;margin-bottom:1em}.v-craft-slot-props-remove[data-v-f762baf8],.v-craft-slot-props-add[data-v-f762baf8]{width:100%;margin-top:.25em}:root{--v-craft-indicator-bg-allowed: var(--v-craft-green);--v-craft-indicator-bg-forbidden: var(--v-craft-red);--v-craft-indicator-transition-duration: .125s;--v-craft-indicator-z-index: 10000}.v-craft-indicator{position:fixed;background-color:var(--v-craft-indicator-bg-allowed);transition:top var(--v-craft-indicator-transition-duration) ease,left var(--v-craft-indicator-transition-duration) ease,right var(--v-craft-indicator-transition-duration) ease,bottom var(--v-craft-indicator-transition-duration) ease,width var(--v-craft-indicator-transition-duration) ease,height var(--v-craft-indicator-transition-duration) ease,background-color var(--v-craft-indicator-transition-duration) ease-in-out;z-index:var(--v-craft-indicator-z-index)}.v-craft-indicator:after{content:" "}.v-craft-indicator.v-craft-forbidden{background-color:var(--v-craft-indicator-bg-forbidden)}.v-craft-node{position:relative;transition:all var(--v-craft-transition-duration) ease;cursor:pointer;box-sizing:border-box}.v-craft-node:after{content:"";position:absolute;top:calc(-1 * var(--v-craft-node-editor-border-padding));left:calc(-1 * var(--v-craft-node-editor-border-padding));right:calc(-1 * var(--v-craft-node-editor-border-padding));bottom:calc(-1 * var(--v-craft-node-editor-border-padding));border:1px solid transparent;border-radius:4px;transition:border-color var(--v-craft-transition-duration) ease-in-out,box-shadow var(--v-craft-transition-duration) ease-in-out;pointer-events:none;z-index:10}.v-craft-node:before{content:"";align-items:center;background-color:var(--node-color, var(--v-craft-blue));bottom:calc(-20px - var(--v-craft-node-editor-border-padding));color:var(--v-craft-white);display:flex;font-family:Arial,sans-serif;font-size:12px;font-weight:400;height:20px;left:calc(-1 * var(--v-craft-node-editor-border-padding) + 3px);line-height:1.4em;opacity:0;padding:0 5px!important;pointer-events:none;position:absolute;text-align:center;text-transform:none;transition:opacity var(--v-craft-transition-duration) ease-in-out;z-index:100}.v-craft-node.v-craft-canvas.v-craft-other-node-dragged:before{opacity:.5}.v-craft-node:hover:not(:has(.v-craft-node:hover)):not(.v-craft-node-selected):before{opacity:1}.v-craft-node-selected:before{opacity:1}.v-craft-node:hover:not(:has(.v-craft-node:hover)):after{border-color:var(--node-color, var(--v-craft-blue-lighter-20));box-shadow:0 0 0 1px var(--node-color, var(--v-craft-blue))}.dark .v-craft-node:hover:not(:has(.v-craft-node:hover)):after{border-color:var(--node-color, var(--v-craft-blue-darker-25));box-shadow:0 0 0 1px var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-canvas:hover:not(:has(.v-craft-node:hover)):not(.v-craft-node-selected):after{box-shadow:0 0 .5em .1em rgba(var(--node-color),.2)}.v-craft-node-selected:not(:hover):after{border:1px solid var(--node-color, var(--v-craft-blue));box-shadow:0 0 .5em .1em rgba(var(--node-color),.2)}.v-craft-node-selected:after{border:1px solid var(--node-color, var(--v-craft-blue));box-shadow:0 0 0 1px var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-canvas.v-craft-other-node-dragged:after{border:2px dashed var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-canvas .v-craft-drop-text{border:2px dashed var(--v-craft-gray-medium);color:var(--v-craft-text-color);padding:1.25em;width:100%;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5em;min-height:60px;box-sizing:border-box;pointer-events:auto;position:relative;margin:4px 0}.v-craft-node.v-craft-canvas .v-craft-slot-name{position:absolute;bottom:4px;left:8px;font-weight:400;font-size:.75em;color:var(--v-craft-gray-medium);text-transform:uppercase;letter-spacing:.05em}.v-craft-node.v-craft-canvas .v-craft-drop-text-label{font-size:.85em;color:var(--v-craft-gray-medium)}.v-craft-node.v-craft-canvas.v-craft-other-node-dragged{padding:10px!important;margin-bottom:25px!important}.v-craft-node-selected{z-index:1}.v-craft-node.v-craft-drag-over{box-shadow:0 0 0 2px var(--node-color, var(--v-craft-blue))}.v-craft-node.v-craft-dragging{opacity:.7}.v-craft-node:before{content:attr(data-node-name)}:root{--v-craft-blue: #1473e6;--v-craft-red: #ff3366;--v-craft-green: rgb(15, 177, 88);--v-craft-gray-dark: #f8f8f8;--v-craft-gray-medium: rgb(202.5, 202.5, 202.5);--v-craft-gray-light: rgb(167.5, 167.5, 167.5);--v-craft-gray-darkest: hsl(0, 0%, 101.7647058824%);--v-craft-white: #ffffff;--v-craft-background-color: hsl(0, 0%, 106.7647058824%);--v-craft-background-color-lighter-10: #ffffff;--v-craft-background-color-darker-10: hsl(0, 0%, 101.7647058824%);--v-craft-input-background: hsl(0, 0%, 109.7647058824%);--v-craft-input-border: #eaeaea;--v-craft-text-color: rgb(55.5, 55.5, 55.5);--v-craft-text-color-blue: #e0e0e0;--v-craft-error-color: #ff3366;--v-craft-blue-darker-25: rgb(9.8, 56.35, 112.7);--v-craft-blue-darker-30: rgb(7.76, 44.62, 89.24);--v-craft-blue-lighter-5: rgb(39.26, 128.37, 236.24);--v-craft-blue-lighter-10: rgb(62.72, 142.14, 238.28);--v-craft-blue-lighter-15: rgb(86.18, 155.91, 240.32);--v-craft-blue-lighter-20: rgb(109.64, 169.68, 242.36);--v-craft-blue-transparent-70: rgba(20, 115, 230, .7);--v-craft-blue-transparent-20: rgba(20, 115, 230, .2);--v-craft-gray-dark-darker-10: rgb(222.5, 222.5, 222.5);--v-craft-gray-dark-darker-5: rgb(235.25, 235.25, 235.25);--v-craft-gray-dark-lighter-10: hsl(0, 0%, 107.2549019608%);--v-craft-gray-dark-transparent-50: rgba(248, 248, 248, .5);--v-craft-gray-medium-darker-10: #b1b1b1;--v-craft-gray-medium-lighter-15: rgb(240.75, 240.75, 240.75);--v-craft-transition-duration: .3s;--v-craft-node-editor-border-padding: .2rem}html.dark{--v-craft-blue: #1473e6;--v-craft-red: #ff3366;--v-craft-green: rgb(15, 177, 88);--v-craft-gray-dark: #2c2c2c;--v-craft-gray-medium: #4b4b4b;--v-craft-gray-light: #8e8e8e;--v-craft-gray-darkest: #1e1e1e;--v-craft-white: #ffffff;--v-craft-background-color: #1e1e1e;--v-craft-background-color-lighter-10: rgb(55.5, 55.5, 55.5);--v-craft-background-color-darker-10: rgb(4.5, 4.5, 4.5);--v-craft-input-background: #2d2d2d;--v-craft-input-border: #3a3a3a;--v-craft-text-color: #e0e0e0;--v-craft-text-color-blue: #e0e0e0;--v-craft-error-color: #ff3366;--v-craft-blue-darker-25: rgb(9.8, 56.35, 112.7);--v-craft-blue-darker-30: rgb(7.76, 44.62, 89.24);--v-craft-blue-lighter-5: rgb(39.26, 128.37, 236.24);--v-craft-blue-lighter-10: rgb(62.72, 142.14, 238.28);--v-craft-blue-lighter-15: rgb(86.18, 155.91, 240.32);--v-craft-blue-lighter-20: rgb(109.64, 169.68, 242.36);--v-craft-blue-transparent-20: rgba(20, 115, 230, .2);--v-craft-blue-transparent-70: rgba(20, 115, 230, .7);--v-craft-gray-dark-darker-10: rgb(18.5, 18.5, 18.5);--v-craft-gray-dark-darker-5: rgb(31.25, 31.25, 31.25);--v-craft-gray-dark-lighter-10: rgb(69.5, 69.5, 69.5);--v-craft-gray-dark-transparent-50: rgba(44, 44, 44, .5);--v-craft-gray-medium-darker-10: rgb(49.5, 49.5, 49.5);--v-craft-gray-medium-lighter-15: rgb(113.25, 113.25, 113.25)}