@skylivellc/lienzo-editor 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +61 -2
  3. package/THIRD_PARTY_NOTICES.md +101 -0
  4. package/dist/LienzoEditor-tPV_sD5K.js +8988 -0
  5. package/dist/LienzoEditor-tPV_sD5K.js.map +1 -0
  6. package/dist/element.js +12 -0
  7. package/dist/element.js.map +1 -0
  8. package/dist/index.js +2 -0
  9. package/dist/standalone/lienzo-editor.js +389 -0
  10. package/dist/standalone/lienzo-editor.js.map +1 -0
  11. package/dist/types/LienzoEditor.vue.d.ts +21 -0
  12. package/dist/types/canvas/Canvas.vue.d.ts +14 -0
  13. package/dist/types/canvas/ContextMenu.vue.d.ts +18 -0
  14. package/dist/types/canvas/Overlay.vue.d.ts +38 -0
  15. package/dist/types/canvas/Preview.vue.d.ts +3 -0
  16. package/dist/types/canvas/frame.d.ts +52 -0
  17. package/dist/types/canvas/frameCss.d.ts +6 -0
  18. package/dist/types/canvas/render.d.ts +37 -0
  19. package/dist/types/client.d.ts +48 -0
  20. package/dist/types/dialogs/ConflictDialog.vue.d.ts +3 -0
  21. package/dist/types/dialogs/MediaLibrary.vue.d.ts +3 -0
  22. package/dist/types/dialogs/NewPageDialog.vue.d.ts +3 -0
  23. package/dist/types/dialogs/SiteDialog.vue.d.ts +3 -0
  24. package/dist/types/dialogs/SubmissionsDialog.vue.d.ts +3 -0
  25. package/dist/types/dialogs/ThemeDialog.vue.d.ts +3 -0
  26. package/dist/types/dialogs/VersionsDialog.vue.d.ts +3 -0
  27. package/dist/types/element.d.ts +21 -0
  28. package/dist/types/i18n/en.d.ts +535 -0
  29. package/dist/types/i18n/es.d.ts +2 -0
  30. package/dist/types/i18n/index.d.ts +18 -0
  31. package/dist/types/index.d.ts +7 -0
  32. package/dist/types/model/document.d.ts +46 -0
  33. package/dist/types/model/elements.d.ts +280 -0
  34. package/dist/types/model/geometry.d.ts +74 -0
  35. package/dist/types/model/history.d.ts +17 -0
  36. package/dist/types/model/icons.d.ts +5 -0
  37. package/dist/types/model/templates.d.ts +29 -0
  38. package/dist/types/model/theme.d.ts +40 -0
  39. package/dist/types/panels/ActionPicker.vue.d.ts +25 -0
  40. package/dist/types/panels/AlignButtons.vue.d.ts +3 -0
  41. package/dist/types/panels/DesignPanel.vue.d.ts +3 -0
  42. package/dist/types/panels/ElementPanel.vue.d.ts +8 -0
  43. package/dist/types/panels/FieldControl.vue.d.ts +18 -0
  44. package/dist/types/panels/GradientEditor.vue.d.ts +24 -0
  45. package/dist/types/panels/ModalPanel.vue.d.ts +8 -0
  46. package/dist/types/panels/MultiPanel.vue.d.ts +3 -0
  47. package/dist/types/panels/PagePanel.vue.d.ts +3 -0
  48. package/dist/types/panels/SectionPanel.vue.d.ts +8 -0
  49. package/dist/types/panels/actions.d.ts +52 -0
  50. package/dist/types/panels/content/AppContent.vue.d.ts +9 -0
  51. package/dist/types/panels/content/ButtonContent.vue.d.ts +7 -0
  52. package/dist/types/panels/content/FormFieldContent.vue.d.ts +8 -0
  53. package/dist/types/panels/content/IconContent.vue.d.ts +7 -0
  54. package/dist/types/panels/content/ImageContent.vue.d.ts +7 -0
  55. package/dist/types/panels/content/NavbarContent.vue.d.ts +7 -0
  56. package/dist/types/panels/content/ShapeContent.vue.d.ts +7 -0
  57. package/dist/types/panels/content/TextContent.vue.d.ts +8 -0
  58. package/dist/types/panels/content/VideoContent.vue.d.ts +7 -0
  59. package/dist/types/panels/content/shapes.d.ts +9 -0
  60. package/dist/types/panels/style/FillStyle.vue.d.ts +7 -0
  61. package/dist/types/panels/style/FrameStyle.vue.d.ts +7 -0
  62. package/dist/types/panels/style/MotionStyle.vue.d.ts +7 -0
  63. package/dist/types/panels/style/PositionSection.vue.d.ts +8 -0
  64. package/dist/types/panels/style/TextStyle.vue.d.ts +7 -0
  65. package/dist/types/panels/style/TransformStyle.vue.d.ts +7 -0
  66. package/dist/types/shell/ElementIcon.vue.d.ts +11 -0
  67. package/dist/types/shell/LeftSidebar.vue.d.ts +11 -0
  68. package/dist/types/shell/RightPanel.vue.d.ts +3 -0
  69. package/dist/types/shell/Toolbar.vue.d.ts +3 -0
  70. package/dist/types/shell/typeIcons.d.ts +4 -0
  71. package/dist/types/state/autosave.d.ts +63 -0
  72. package/dist/types/state/editor.d.ts +1010 -0
  73. package/dist/types/state/previews.d.ts +26 -0
  74. package/dist/types/state/shortcuts.d.ts +7 -0
  75. package/dist/types/styles/index.d.ts +8 -0
  76. package/dist/types/ui/Button.vue.d.ts +25 -0
  77. package/dist/types/ui/CatalogIcon.vue.d.ts +12 -0
  78. package/dist/types/ui/ColorPicker.vue.d.ts +20 -0
  79. package/dist/types/ui/Dialog.vue.d.ts +33 -0
  80. package/dist/types/ui/Field.vue.d.ts +24 -0
  81. package/dist/types/ui/IconButton.vue.d.ts +24 -0
  82. package/dist/types/ui/ImageField.vue.d.ts +27 -0
  83. package/dist/types/ui/NumberInput.vue.d.ts +22 -0
  84. package/dist/types/ui/PanelSection.vue.d.ts +20 -0
  85. package/dist/types/ui/RangeInput.vue.d.ts +26 -0
  86. package/dist/types/ui/SelectInput.vue.d.ts +33 -0
  87. package/dist/types/ui/TextInput.vue.d.ts +32 -0
  88. package/dist/types/ui/Toasts.vue.d.ts +3 -0
  89. package/dist/types/ui/Toggle.vue.d.ts +17 -0
  90. package/package.json +67 -3
@@ -0,0 +1,1010 @@
1
+ import { type Catalog, type Document, type Element, type Issue, type Modal, type Parsed, type Section, type SiteSettings, type Theme } from '@skylivellc/lienzo-core';
2
+ import type { Asset, PageVersion, SiteUpdate, Workspace } from '@skylivellc/lienzo-core/protocol';
3
+ import { type InjectionKey, type WritableComputedRef } from 'vue';
4
+ import type { Client, Failure } from '../client.ts';
5
+ import type { Translator } from '../i18n/index.ts';
6
+ import { type Canvas, type Device } from '../model/document.ts';
7
+ import { type Insertable } from '../model/elements.ts';
8
+ import { type Alignment } from '../model/geometry.ts';
9
+ import { type PageTemplateKey } from '../model/templates.ts';
10
+ /** What the canvas shows: the page's sections, or one modal's content. */
11
+ export type View = {
12
+ kind: 'page';
13
+ } | {
14
+ kind: 'modal';
15
+ id: string;
16
+ };
17
+ /**
18
+ * What is selected. Elements always belong to one canvas; the active one is
19
+ * the element the settings panel edits (the last one clicked).
20
+ */
21
+ export type Selection = {
22
+ kind: 'none';
23
+ } | {
24
+ kind: 'canvas';
25
+ canvas: string;
26
+ } | {
27
+ kind: 'elements';
28
+ canvas: string;
29
+ ids: string[];
30
+ active: string;
31
+ };
32
+ export type Dialog = 'newPage' | 'versions' | 'theme' | 'site' | 'submissions' | 'conflict' | null;
33
+ export type Toast = {
34
+ id: number;
35
+ tone: 'info' | 'error';
36
+ text: string;
37
+ };
38
+ /** The page being edited, minus its draft. */
39
+ export type OpenPage = {
40
+ id: number;
41
+ slug: string;
42
+ title: string;
43
+ publishedAt: string | null;
44
+ seo: {
45
+ title: string;
46
+ description: string;
47
+ };
48
+ versions: PageVersion[];
49
+ };
50
+ export type Load = {
51
+ kind: 'loading';
52
+ } | {
53
+ kind: 'failed';
54
+ message: string;
55
+ } | {
56
+ kind: 'empty';
57
+ } | {
58
+ kind: 'ready';
59
+ };
60
+ export type EditorDeps = {
61
+ client: Client;
62
+ i18n: Translator;
63
+ };
64
+ export type Editor = ReturnType<typeof createEditor>;
65
+ export declare const editorKey: InjectionKey<Editor>;
66
+ export declare function useEditor(): Editor;
67
+ export type EditorState = {
68
+ load: Load;
69
+ workspace: Workspace;
70
+ page: OpenPage | null;
71
+ draft: Document;
72
+ revision: number;
73
+ device: Device;
74
+ view: View;
75
+ selection: Selection;
76
+ previewing: boolean;
77
+ dialog: Dialog;
78
+ /** The media library, open on top of anything else; picking calls `onPick`. */
79
+ library: {
80
+ onPick: ((ref: string) => void) | null;
81
+ } | null;
82
+ /** Theme being edited in the theme dialog: the canvas shows it live until saved or cancelled. */
83
+ themeDraft: Theme | null;
84
+ /** Visible panel per tab or step group on the canvas. */
85
+ panels: Record<string, number>;
86
+ /** Canvas zoom, or null to fit the stage width. */
87
+ zoom: number | null;
88
+ /** Issues of a draft that does not parse, so the canvas shows the last good render. */
89
+ renderIssues: Issue[];
90
+ publishing: boolean;
91
+ toasts: Toast[];
92
+ };
93
+ /**
94
+ * All editor state and the operations on it. Panels and canvas gestures
95
+ * edit the draft in place and call `commit` to record an undo step;
96
+ * structural changes (adding, removing, moving things) go through these methods.
97
+ */
98
+ export declare function createEditor({ client, i18n }: EditorDeps): {
99
+ state: {
100
+ load: {
101
+ kind: "loading";
102
+ } | {
103
+ kind: "failed";
104
+ message: string;
105
+ } | {
106
+ kind: "empty";
107
+ } | {
108
+ kind: "ready";
109
+ };
110
+ workspace: {
111
+ site: {
112
+ name: string;
113
+ locale: string;
114
+ theme: {
115
+ primary: string;
116
+ secondary: string;
117
+ background: string;
118
+ surface: string;
119
+ text: string;
120
+ muted: string;
121
+ heading_font: string;
122
+ body_font: string;
123
+ radius: number;
124
+ max_width: number;
125
+ };
126
+ seo: {
127
+ title?: string | null | undefined;
128
+ description?: string | null | undefined;
129
+ };
130
+ favicon: string | null;
131
+ og_image: string | null;
132
+ };
133
+ meta: import("@skylivellc/lienzo-core/protocol").SiteMeta;
134
+ publicUrl: string | null;
135
+ pages: {
136
+ id: number;
137
+ slug: string;
138
+ title: string;
139
+ publishedAt: string | null;
140
+ }[];
141
+ catalog: {
142
+ elements: {
143
+ type: string;
144
+ label: {
145
+ readonly [x: string]: string;
146
+ readonly en: string;
147
+ };
148
+ icon: string;
149
+ fields: ({
150
+ kind: "text";
151
+ key: string;
152
+ label: {
153
+ readonly [x: string]: string;
154
+ readonly en: string;
155
+ };
156
+ max: number;
157
+ multiline?: boolean | undefined;
158
+ default?: string | undefined;
159
+ } | {
160
+ kind: "number";
161
+ key: string;
162
+ label: {
163
+ readonly [x: string]: string;
164
+ readonly en: string;
165
+ };
166
+ min: number;
167
+ max: number;
168
+ step?: number | undefined;
169
+ default: number;
170
+ } | {
171
+ kind: "toggle";
172
+ key: string;
173
+ label: {
174
+ readonly [x: string]: string;
175
+ readonly en: string;
176
+ };
177
+ default: boolean;
178
+ } | {
179
+ kind: "choice";
180
+ key: string;
181
+ label: {
182
+ readonly [x: string]: string;
183
+ readonly en: string;
184
+ };
185
+ options: {
186
+ value: string;
187
+ label: {
188
+ readonly [x: string]: string;
189
+ readonly en: string;
190
+ };
191
+ }[];
192
+ default: string | string[];
193
+ multiple?: boolean | undefined;
194
+ } | {
195
+ kind: "image";
196
+ key: string;
197
+ label: {
198
+ readonly [x: string]: string;
199
+ readonly en: string;
200
+ };
201
+ } | {
202
+ kind: "action";
203
+ key: string;
204
+ label: {
205
+ readonly [x: string]: string;
206
+ readonly en: string;
207
+ };
208
+ })[];
209
+ styles: import("@skylivellc/lienzo-core").StyleGroup[];
210
+ size: {
211
+ w: number;
212
+ h: number;
213
+ };
214
+ css?: string | undefined;
215
+ }[];
216
+ actions: {
217
+ type: string;
218
+ label: {
219
+ readonly [x: string]: string;
220
+ readonly en: string;
221
+ };
222
+ value: {
223
+ kind: "text";
224
+ key: string;
225
+ label: {
226
+ readonly [x: string]: string;
227
+ readonly en: string;
228
+ };
229
+ max: number;
230
+ multiline?: boolean | undefined;
231
+ default?: string | undefined;
232
+ } | {
233
+ kind: "number";
234
+ key: string;
235
+ label: {
236
+ readonly [x: string]: string;
237
+ readonly en: string;
238
+ };
239
+ min: number;
240
+ max: number;
241
+ step?: number | undefined;
242
+ default: number;
243
+ } | {
244
+ kind: "toggle";
245
+ key: string;
246
+ label: {
247
+ readonly [x: string]: string;
248
+ readonly en: string;
249
+ };
250
+ default: boolean;
251
+ } | {
252
+ kind: "choice";
253
+ key: string;
254
+ label: {
255
+ readonly [x: string]: string;
256
+ readonly en: string;
257
+ };
258
+ options: {
259
+ value: string;
260
+ label: {
261
+ readonly [x: string]: string;
262
+ readonly en: string;
263
+ };
264
+ }[];
265
+ default: string | string[];
266
+ multiple?: boolean | undefined;
267
+ } | {
268
+ kind: "image";
269
+ key: string;
270
+ label: {
271
+ readonly [x: string]: string;
272
+ readonly en: string;
273
+ };
274
+ } | null;
275
+ }[];
276
+ siteFields?: ({
277
+ kind: "text";
278
+ key: string;
279
+ label: {
280
+ readonly [x: string]: string;
281
+ readonly en: string;
282
+ };
283
+ max: number;
284
+ multiline?: boolean | undefined;
285
+ default?: string | undefined;
286
+ } | {
287
+ kind: "number";
288
+ key: string;
289
+ label: {
290
+ readonly [x: string]: string;
291
+ readonly en: string;
292
+ };
293
+ min: number;
294
+ max: number;
295
+ step?: number | undefined;
296
+ default: number;
297
+ } | {
298
+ kind: "toggle";
299
+ key: string;
300
+ label: {
301
+ readonly [x: string]: string;
302
+ readonly en: string;
303
+ };
304
+ default: boolean;
305
+ } | {
306
+ kind: "choice";
307
+ key: string;
308
+ label: {
309
+ readonly [x: string]: string;
310
+ readonly en: string;
311
+ };
312
+ options: {
313
+ value: string;
314
+ label: {
315
+ readonly [x: string]: string;
316
+ readonly en: string;
317
+ };
318
+ }[];
319
+ default: string | string[];
320
+ multiple?: boolean | undefined;
321
+ } | {
322
+ kind: "image";
323
+ key: string;
324
+ label: {
325
+ readonly [x: string]: string;
326
+ readonly en: string;
327
+ };
328
+ } | {
329
+ kind: "action";
330
+ key: string;
331
+ label: {
332
+ readonly [x: string]: string;
333
+ readonly en: string;
334
+ };
335
+ })[] | undefined;
336
+ };
337
+ assets: {
338
+ id: number;
339
+ ref: string;
340
+ name: string;
341
+ url: string;
342
+ thumb: string;
343
+ width: number | null;
344
+ height: number | null;
345
+ }[];
346
+ quota: {
347
+ used: number;
348
+ limit: number;
349
+ };
350
+ };
351
+ page: {
352
+ id: number;
353
+ slug: string;
354
+ title: string;
355
+ publishedAt: string | null;
356
+ seo: {
357
+ title: string;
358
+ description: string;
359
+ };
360
+ versions: {
361
+ id: number;
362
+ createdAt: string;
363
+ by: string | null;
364
+ }[];
365
+ } | null;
366
+ draft: {
367
+ sections: {
368
+ id: string;
369
+ group?: {
370
+ id?: string | null | undefined;
371
+ type?: "tabs" | "steps" | null | undefined;
372
+ label?: string | null | undefined;
373
+ } | null | undefined;
374
+ height: {
375
+ desktop: number;
376
+ mobile: number;
377
+ };
378
+ background: {
379
+ type: "color" | "gradient" | "image";
380
+ color?: string | null | undefined;
381
+ gradient?: {
382
+ type?: "linear" | "radial" | null | undefined;
383
+ from?: string | null | undefined;
384
+ to?: string | null | undefined;
385
+ angle?: number | null | undefined;
386
+ } | null | undefined;
387
+ image?: string | null | undefined;
388
+ overlay?: number | null | undefined;
389
+ parallax?: boolean | null | undefined;
390
+ };
391
+ elements: ({
392
+ id: string;
393
+ group?: string | null | undefined;
394
+ z: number;
395
+ locked?: boolean | null | undefined;
396
+ layout: {
397
+ desktop: {
398
+ x: number;
399
+ y: number;
400
+ w: number;
401
+ h: number;
402
+ };
403
+ mobile?: {
404
+ x: number;
405
+ y: number;
406
+ w: number;
407
+ h: number;
408
+ } | null | undefined;
409
+ };
410
+ style: {
411
+ color?: string | null | undefined;
412
+ background?: string | null | undefined;
413
+ font?: "heading" | "body" | null | undefined;
414
+ size?: number | null | undefined;
415
+ weight?: 500 | 300 | 400 | 600 | 700 | 800 | null | undefined;
416
+ align?: "left" | "center" | "right" | null | undefined;
417
+ line_height?: number | null | undefined;
418
+ radius?: number | null | undefined;
419
+ border_width?: number | null | undefined;
420
+ border_color?: string | null | undefined;
421
+ padding?: number | null | undefined;
422
+ opacity?: number | null | undefined;
423
+ shadow?: "none" | "custom" | "sm" | "md" | "lg" | null | undefined;
424
+ shadow_custom?: {
425
+ x?: number | null | undefined;
426
+ y?: number | null | undefined;
427
+ blur?: number | null | undefined;
428
+ spread?: number | null | undefined;
429
+ color?: string | null | undefined;
430
+ opacity?: number | null | undefined;
431
+ } | null | undefined;
432
+ object_fit?: "cover" | "contain" | null | undefined;
433
+ gradient?: {
434
+ type?: "linear" | "radial" | null | undefined;
435
+ from?: string | null | undefined;
436
+ to?: string | null | undefined;
437
+ angle?: number | null | undefined;
438
+ } | null | undefined;
439
+ background_opacity?: number | null | undefined;
440
+ blur?: number | null | undefined;
441
+ rotate?: number | null | undefined;
442
+ flip_x?: boolean | null | undefined;
443
+ flip_y?: boolean | null | undefined;
444
+ clip?: boolean | null | undefined;
445
+ pinned?: boolean | null | undefined;
446
+ overflow?: "visible" | "hidden" | "scroll-x" | "scroll-y" | null | undefined;
447
+ visible_on?: "desktop" | "mobile" | "all" | null | undefined;
448
+ accent_color?: string | null | undefined;
449
+ hover?: "none" | "lift" | "grow" | "fade" | null | undefined;
450
+ animation?: {
451
+ type?: "left" | "right" | "none" | "fade" | "up" | "down" | "zoom" | null | undefined;
452
+ delay?: number | null | undefined;
453
+ duration?: number | null | undefined;
454
+ } | null | undefined;
455
+ };
456
+ type: import("@skylivellc/lienzo-core").CoreElementType;
457
+ props: {
458
+ text?: string | null | undefined;
459
+ level?: number | null | undefined;
460
+ src?: string | null | undefined;
461
+ alt?: string | null | undefined;
462
+ label?: string | null | undefined;
463
+ url?: string | null | undefined;
464
+ icon?: string | null | undefined;
465
+ sticky?: boolean | null | undefined;
466
+ scroll_style?: "shadow" | "same" | "solid" | "compact" | null | undefined;
467
+ stroke?: number | null | undefined;
468
+ accent?: string | null | undefined;
469
+ shape?: "rectangle" | "ellipse" | "triangle" | "blob" | "arch" | "diagonal" | "dots" | "grid" | null | undefined;
470
+ placeholder?: string | null | undefined;
471
+ required?: boolean | null | undefined;
472
+ input_type?: "number" | "text" | "email" | "date" | "tel" | null | undefined;
473
+ options?: string[] | null | undefined;
474
+ multiple?: boolean | null | undefined;
475
+ brand?: string | null | undefined;
476
+ layout?: "left" | "center" | "split" | null | undefined;
477
+ template?: "plain" | "pill" | "card" | "underline" | "divided" | null | undefined;
478
+ links?: {
479
+ label: string;
480
+ action: {
481
+ type: string;
482
+ value?: string | null | undefined;
483
+ };
484
+ }[] | null | undefined;
485
+ action?: {
486
+ type?: string | null | undefined;
487
+ value?: string | null | undefined;
488
+ } | null | undefined;
489
+ };
490
+ } | {
491
+ id: string;
492
+ group?: string | null | undefined;
493
+ z: number;
494
+ locked?: boolean | null | undefined;
495
+ layout: {
496
+ desktop: {
497
+ x: number;
498
+ y: number;
499
+ w: number;
500
+ h: number;
501
+ };
502
+ mobile?: {
503
+ x: number;
504
+ y: number;
505
+ w: number;
506
+ h: number;
507
+ } | null | undefined;
508
+ };
509
+ style: {
510
+ color?: string | null | undefined;
511
+ background?: string | null | undefined;
512
+ font?: "heading" | "body" | null | undefined;
513
+ size?: number | null | undefined;
514
+ weight?: 500 | 300 | 400 | 600 | 700 | 800 | null | undefined;
515
+ align?: "left" | "center" | "right" | null | undefined;
516
+ line_height?: number | null | undefined;
517
+ radius?: number | null | undefined;
518
+ border_width?: number | null | undefined;
519
+ border_color?: string | null | undefined;
520
+ padding?: number | null | undefined;
521
+ opacity?: number | null | undefined;
522
+ shadow?: "none" | "custom" | "sm" | "md" | "lg" | null | undefined;
523
+ shadow_custom?: {
524
+ x?: number | null | undefined;
525
+ y?: number | null | undefined;
526
+ blur?: number | null | undefined;
527
+ spread?: number | null | undefined;
528
+ color?: string | null | undefined;
529
+ opacity?: number | null | undefined;
530
+ } | null | undefined;
531
+ object_fit?: "cover" | "contain" | null | undefined;
532
+ gradient?: {
533
+ type?: "linear" | "radial" | null | undefined;
534
+ from?: string | null | undefined;
535
+ to?: string | null | undefined;
536
+ angle?: number | null | undefined;
537
+ } | null | undefined;
538
+ background_opacity?: number | null | undefined;
539
+ blur?: number | null | undefined;
540
+ rotate?: number | null | undefined;
541
+ flip_x?: boolean | null | undefined;
542
+ flip_y?: boolean | null | undefined;
543
+ clip?: boolean | null | undefined;
544
+ pinned?: boolean | null | undefined;
545
+ overflow?: "visible" | "hidden" | "scroll-x" | "scroll-y" | null | undefined;
546
+ visible_on?: "desktop" | "mobile" | "all" | null | undefined;
547
+ accent_color?: string | null | undefined;
548
+ hover?: "none" | "lift" | "grow" | "fade" | null | undefined;
549
+ animation?: {
550
+ type?: "left" | "right" | "none" | "fade" | "up" | "down" | "zoom" | null | undefined;
551
+ delay?: number | null | undefined;
552
+ duration?: number | null | undefined;
553
+ } | null | undefined;
554
+ };
555
+ type: string;
556
+ props: Readonly<Record<string, import("@skylivellc/lienzo-core").FieldValue | undefined>>;
557
+ } | {
558
+ id: string;
559
+ group?: string | null | undefined;
560
+ z: number;
561
+ locked?: boolean | null | undefined;
562
+ layout: {
563
+ desktop: {
564
+ x: number;
565
+ y: number;
566
+ w: number;
567
+ h: number;
568
+ };
569
+ mobile?: {
570
+ x: number;
571
+ y: number;
572
+ w: number;
573
+ h: number;
574
+ } | null | undefined;
575
+ };
576
+ style: {
577
+ color?: string | null | undefined;
578
+ background?: string | null | undefined;
579
+ font?: "heading" | "body" | null | undefined;
580
+ size?: number | null | undefined;
581
+ weight?: 500 | 300 | 400 | 600 | 700 | 800 | null | undefined;
582
+ align?: "left" | "center" | "right" | null | undefined;
583
+ line_height?: number | null | undefined;
584
+ radius?: number | null | undefined;
585
+ border_width?: number | null | undefined;
586
+ border_color?: string | null | undefined;
587
+ padding?: number | null | undefined;
588
+ opacity?: number | null | undefined;
589
+ shadow?: "none" | "custom" | "sm" | "md" | "lg" | null | undefined;
590
+ shadow_custom?: {
591
+ x?: number | null | undefined;
592
+ y?: number | null | undefined;
593
+ blur?: number | null | undefined;
594
+ spread?: number | null | undefined;
595
+ color?: string | null | undefined;
596
+ opacity?: number | null | undefined;
597
+ } | null | undefined;
598
+ object_fit?: "cover" | "contain" | null | undefined;
599
+ gradient?: {
600
+ type?: "linear" | "radial" | null | undefined;
601
+ from?: string | null | undefined;
602
+ to?: string | null | undefined;
603
+ angle?: number | null | undefined;
604
+ } | null | undefined;
605
+ background_opacity?: number | null | undefined;
606
+ blur?: number | null | undefined;
607
+ rotate?: number | null | undefined;
608
+ flip_x?: boolean | null | undefined;
609
+ flip_y?: boolean | null | undefined;
610
+ clip?: boolean | null | undefined;
611
+ pinned?: boolean | null | undefined;
612
+ overflow?: "visible" | "hidden" | "scroll-x" | "scroll-y" | null | undefined;
613
+ visible_on?: "desktop" | "mobile" | "all" | null | undefined;
614
+ accent_color?: string | null | undefined;
615
+ hover?: "none" | "lift" | "grow" | "fade" | null | undefined;
616
+ animation?: {
617
+ type?: "left" | "right" | "none" | "fade" | "up" | "down" | "zoom" | null | undefined;
618
+ delay?: number | null | undefined;
619
+ duration?: number | null | undefined;
620
+ } | null | undefined;
621
+ };
622
+ type: string;
623
+ props: Readonly<Record<string, unknown>>;
624
+ })[];
625
+ }[];
626
+ modals?: {
627
+ id: string;
628
+ height: {
629
+ desktop: number;
630
+ mobile: number;
631
+ };
632
+ background: {
633
+ type: "color";
634
+ color?: string | null | undefined;
635
+ };
636
+ size?: "custom" | "sm" | "md" | "lg" | "xl" | "full" | null | undefined;
637
+ title: string;
638
+ show_title?: boolean | null | undefined;
639
+ width: number;
640
+ elements: ({
641
+ id: string;
642
+ group?: string | null | undefined;
643
+ z: number;
644
+ locked?: boolean | null | undefined;
645
+ layout: {
646
+ desktop: {
647
+ x: number;
648
+ y: number;
649
+ w: number;
650
+ h: number;
651
+ };
652
+ mobile?: {
653
+ x: number;
654
+ y: number;
655
+ w: number;
656
+ h: number;
657
+ } | null | undefined;
658
+ };
659
+ style: {
660
+ color?: string | null | undefined;
661
+ background?: string | null | undefined;
662
+ font?: "heading" | "body" | null | undefined;
663
+ size?: number | null | undefined;
664
+ weight?: 500 | 300 | 400 | 600 | 700 | 800 | null | undefined;
665
+ align?: "left" | "center" | "right" | null | undefined;
666
+ line_height?: number | null | undefined;
667
+ radius?: number | null | undefined;
668
+ border_width?: number | null | undefined;
669
+ border_color?: string | null | undefined;
670
+ padding?: number | null | undefined;
671
+ opacity?: number | null | undefined;
672
+ shadow?: "none" | "custom" | "sm" | "md" | "lg" | null | undefined;
673
+ shadow_custom?: {
674
+ x?: number | null | undefined;
675
+ y?: number | null | undefined;
676
+ blur?: number | null | undefined;
677
+ spread?: number | null | undefined;
678
+ color?: string | null | undefined;
679
+ opacity?: number | null | undefined;
680
+ } | null | undefined;
681
+ object_fit?: "cover" | "contain" | null | undefined;
682
+ gradient?: {
683
+ type?: "linear" | "radial" | null | undefined;
684
+ from?: string | null | undefined;
685
+ to?: string | null | undefined;
686
+ angle?: number | null | undefined;
687
+ } | null | undefined;
688
+ background_opacity?: number | null | undefined;
689
+ blur?: number | null | undefined;
690
+ rotate?: number | null | undefined;
691
+ flip_x?: boolean | null | undefined;
692
+ flip_y?: boolean | null | undefined;
693
+ clip?: boolean | null | undefined;
694
+ pinned?: boolean | null | undefined;
695
+ overflow?: "visible" | "hidden" | "scroll-x" | "scroll-y" | null | undefined;
696
+ visible_on?: "desktop" | "mobile" | "all" | null | undefined;
697
+ accent_color?: string | null | undefined;
698
+ hover?: "none" | "lift" | "grow" | "fade" | null | undefined;
699
+ animation?: {
700
+ type?: "left" | "right" | "none" | "fade" | "up" | "down" | "zoom" | null | undefined;
701
+ delay?: number | null | undefined;
702
+ duration?: number | null | undefined;
703
+ } | null | undefined;
704
+ };
705
+ type: import("@skylivellc/lienzo-core").CoreElementType;
706
+ props: {
707
+ text?: string | null | undefined;
708
+ level?: number | null | undefined;
709
+ src?: string | null | undefined;
710
+ alt?: string | null | undefined;
711
+ label?: string | null | undefined;
712
+ url?: string | null | undefined;
713
+ icon?: string | null | undefined;
714
+ sticky?: boolean | null | undefined;
715
+ scroll_style?: "shadow" | "same" | "solid" | "compact" | null | undefined;
716
+ stroke?: number | null | undefined;
717
+ accent?: string | null | undefined;
718
+ shape?: "rectangle" | "ellipse" | "triangle" | "blob" | "arch" | "diagonal" | "dots" | "grid" | null | undefined;
719
+ placeholder?: string | null | undefined;
720
+ required?: boolean | null | undefined;
721
+ input_type?: "number" | "text" | "email" | "date" | "tel" | null | undefined;
722
+ options?: string[] | null | undefined;
723
+ multiple?: boolean | null | undefined;
724
+ brand?: string | null | undefined;
725
+ layout?: "left" | "center" | "split" | null | undefined;
726
+ template?: "plain" | "pill" | "card" | "underline" | "divided" | null | undefined;
727
+ links?: {
728
+ label: string;
729
+ action: {
730
+ type: string;
731
+ value?: string | null | undefined;
732
+ };
733
+ }[] | null | undefined;
734
+ action?: {
735
+ type?: string | null | undefined;
736
+ value?: string | null | undefined;
737
+ } | null | undefined;
738
+ };
739
+ } | {
740
+ id: string;
741
+ group?: string | null | undefined;
742
+ z: number;
743
+ locked?: boolean | null | undefined;
744
+ layout: {
745
+ desktop: {
746
+ x: number;
747
+ y: number;
748
+ w: number;
749
+ h: number;
750
+ };
751
+ mobile?: {
752
+ x: number;
753
+ y: number;
754
+ w: number;
755
+ h: number;
756
+ } | null | undefined;
757
+ };
758
+ style: {
759
+ color?: string | null | undefined;
760
+ background?: string | null | undefined;
761
+ font?: "heading" | "body" | null | undefined;
762
+ size?: number | null | undefined;
763
+ weight?: 500 | 300 | 400 | 600 | 700 | 800 | null | undefined;
764
+ align?: "left" | "center" | "right" | null | undefined;
765
+ line_height?: number | null | undefined;
766
+ radius?: number | null | undefined;
767
+ border_width?: number | null | undefined;
768
+ border_color?: string | null | undefined;
769
+ padding?: number | null | undefined;
770
+ opacity?: number | null | undefined;
771
+ shadow?: "none" | "custom" | "sm" | "md" | "lg" | null | undefined;
772
+ shadow_custom?: {
773
+ x?: number | null | undefined;
774
+ y?: number | null | undefined;
775
+ blur?: number | null | undefined;
776
+ spread?: number | null | undefined;
777
+ color?: string | null | undefined;
778
+ opacity?: number | null | undefined;
779
+ } | null | undefined;
780
+ object_fit?: "cover" | "contain" | null | undefined;
781
+ gradient?: {
782
+ type?: "linear" | "radial" | null | undefined;
783
+ from?: string | null | undefined;
784
+ to?: string | null | undefined;
785
+ angle?: number | null | undefined;
786
+ } | null | undefined;
787
+ background_opacity?: number | null | undefined;
788
+ blur?: number | null | undefined;
789
+ rotate?: number | null | undefined;
790
+ flip_x?: boolean | null | undefined;
791
+ flip_y?: boolean | null | undefined;
792
+ clip?: boolean | null | undefined;
793
+ pinned?: boolean | null | undefined;
794
+ overflow?: "visible" | "hidden" | "scroll-x" | "scroll-y" | null | undefined;
795
+ visible_on?: "desktop" | "mobile" | "all" | null | undefined;
796
+ accent_color?: string | null | undefined;
797
+ hover?: "none" | "lift" | "grow" | "fade" | null | undefined;
798
+ animation?: {
799
+ type?: "left" | "right" | "none" | "fade" | "up" | "down" | "zoom" | null | undefined;
800
+ delay?: number | null | undefined;
801
+ duration?: number | null | undefined;
802
+ } | null | undefined;
803
+ };
804
+ type: string;
805
+ props: Readonly<Record<string, import("@skylivellc/lienzo-core").FieldValue | undefined>>;
806
+ } | {
807
+ id: string;
808
+ group?: string | null | undefined;
809
+ z: number;
810
+ locked?: boolean | null | undefined;
811
+ layout: {
812
+ desktop: {
813
+ x: number;
814
+ y: number;
815
+ w: number;
816
+ h: number;
817
+ };
818
+ mobile?: {
819
+ x: number;
820
+ y: number;
821
+ w: number;
822
+ h: number;
823
+ } | null | undefined;
824
+ };
825
+ style: {
826
+ color?: string | null | undefined;
827
+ background?: string | null | undefined;
828
+ font?: "heading" | "body" | null | undefined;
829
+ size?: number | null | undefined;
830
+ weight?: 500 | 300 | 400 | 600 | 700 | 800 | null | undefined;
831
+ align?: "left" | "center" | "right" | null | undefined;
832
+ line_height?: number | null | undefined;
833
+ radius?: number | null | undefined;
834
+ border_width?: number | null | undefined;
835
+ border_color?: string | null | undefined;
836
+ padding?: number | null | undefined;
837
+ opacity?: number | null | undefined;
838
+ shadow?: "none" | "custom" | "sm" | "md" | "lg" | null | undefined;
839
+ shadow_custom?: {
840
+ x?: number | null | undefined;
841
+ y?: number | null | undefined;
842
+ blur?: number | null | undefined;
843
+ spread?: number | null | undefined;
844
+ color?: string | null | undefined;
845
+ opacity?: number | null | undefined;
846
+ } | null | undefined;
847
+ object_fit?: "cover" | "contain" | null | undefined;
848
+ gradient?: {
849
+ type?: "linear" | "radial" | null | undefined;
850
+ from?: string | null | undefined;
851
+ to?: string | null | undefined;
852
+ angle?: number | null | undefined;
853
+ } | null | undefined;
854
+ background_opacity?: number | null | undefined;
855
+ blur?: number | null | undefined;
856
+ rotate?: number | null | undefined;
857
+ flip_x?: boolean | null | undefined;
858
+ flip_y?: boolean | null | undefined;
859
+ clip?: boolean | null | undefined;
860
+ pinned?: boolean | null | undefined;
861
+ overflow?: "visible" | "hidden" | "scroll-x" | "scroll-y" | null | undefined;
862
+ visible_on?: "desktop" | "mobile" | "all" | null | undefined;
863
+ accent_color?: string | null | undefined;
864
+ hover?: "none" | "lift" | "grow" | "fade" | null | undefined;
865
+ animation?: {
866
+ type?: "left" | "right" | "none" | "fade" | "up" | "down" | "zoom" | null | undefined;
867
+ delay?: number | null | undefined;
868
+ duration?: number | null | undefined;
869
+ } | null | undefined;
870
+ };
871
+ type: string;
872
+ props: Readonly<Record<string, unknown>>;
873
+ })[];
874
+ }[] | null | undefined;
875
+ };
876
+ revision: number;
877
+ device: Device;
878
+ view: {
879
+ kind: "page";
880
+ } | {
881
+ kind: "modal";
882
+ id: string;
883
+ };
884
+ selection: {
885
+ kind: "none";
886
+ } | {
887
+ kind: "canvas";
888
+ canvas: string;
889
+ } | {
890
+ kind: "elements";
891
+ canvas: string;
892
+ ids: string[];
893
+ active: string;
894
+ };
895
+ previewing: boolean;
896
+ dialog: Dialog;
897
+ library: {
898
+ onPick: ((ref: string) => void) | null;
899
+ } | null;
900
+ themeDraft: {
901
+ primary: string;
902
+ secondary: string;
903
+ background: string;
904
+ surface: string;
905
+ text: string;
906
+ muted: string;
907
+ heading_font: string;
908
+ body_font: string;
909
+ radius: number;
910
+ max_width: number;
911
+ } | null;
912
+ panels: Record<string, number>;
913
+ zoom: number | null;
914
+ renderIssues: {
915
+ path: string;
916
+ code: "type" | "range" | "pattern" | "enum" | "size" | "required" | "unique";
917
+ message: string;
918
+ }[];
919
+ publishing: boolean;
920
+ toasts: {
921
+ id: number;
922
+ tone: "info" | "error";
923
+ text: string;
924
+ }[];
925
+ };
926
+ i18n: Translator;
927
+ t: (key: import("../index.ts").MessageKey, params?: Readonly<Record<string, string | number>>) => string;
928
+ client: Client;
929
+ previews: import("./previews.ts").Previews;
930
+ saveState: import("vue").ShallowRef<import("./autosave.ts").SaveState>;
931
+ catalog: import("vue").ComputedRef<Catalog>;
932
+ site: import("vue").ComputedRef<Parsed<SiteSettings>>;
933
+ theme: import("vue").ComputedRef<{
934
+ primary: string;
935
+ secondary: string;
936
+ background: string;
937
+ surface: string;
938
+ text: string;
939
+ muted: string;
940
+ heading_font: string;
941
+ body_font: string;
942
+ radius: number;
943
+ max_width: number;
944
+ }>;
945
+ canvases: import("vue").ComputedRef<Canvas[]>;
946
+ activeModal: import("vue").ComputedRef<Modal | null>;
947
+ currentCanvas: import("vue").ComputedRef<Canvas | null>;
948
+ selectedElements: import("vue").ComputedRef<Element[]>;
949
+ activeElement: import("vue").ComputedRef<Element | null>;
950
+ frameWidth: import("vue").ComputedRef<number>;
951
+ canUndo: import("vue").ComputedRef<boolean>;
952
+ canRedo: import("vue").ComputedRef<boolean>;
953
+ kindOf: (element: Element) => import("../model/elements.ts").ElementKind;
954
+ notify: (text: string, tone?: Toast["tone"]) => void;
955
+ failureText: (failure: Failure) => string;
956
+ dismiss: (id: number) => void;
957
+ load: () => Promise<void>;
958
+ openPage: (id: number) => Promise<void>;
959
+ reloadPage: () => Promise<void>;
960
+ commit: () => void;
961
+ undo: () => void;
962
+ redo: () => void;
963
+ select: (canvasId: string, elementId: string, additive?: boolean) => void;
964
+ selectCanvas: (canvasId: string) => void;
965
+ clearSelection: () => void;
966
+ addElement: (insertable: Insertable, at?: {
967
+ canvas: string;
968
+ x: number;
969
+ y: number;
970
+ }, src?: string) => void;
971
+ removeSelected: () => void;
972
+ duplicateSelected: () => void;
973
+ copySelected: () => void;
974
+ paste: () => void;
975
+ layer: (step: "front" | "back") => void;
976
+ align: (where: Alignment) => void;
977
+ distributeSelected: (axis: "x" | "y") => void;
978
+ sharedTarget: () => Element | null;
979
+ groupSelected: () => void;
980
+ ungroupSelected: () => void;
981
+ toggleLock: () => void;
982
+ nudge: (dx: number, dy: number) => void;
983
+ placeElements: (boxes: readonly {
984
+ id: string;
985
+ box: Element["layout"]["desktop"];
986
+ }[]) => void;
987
+ addSection: (section?: Section) => void;
988
+ applyPageTemplate: (key: PageTemplateKey) => void;
989
+ removeSection: (id: string) => void;
990
+ moveSection: (index: number, step: -1 | 1) => void;
991
+ setSectionGroup: (section: Section, mode: "alone" | "tabs" | "steps") => void;
992
+ fitCanvas: (canvas: Canvas) => void;
993
+ generateMobile: (canvas: Canvas) => void;
994
+ addModal: () => void;
995
+ openModal: (id: string | null) => void;
996
+ removeModal: (id: string) => void;
997
+ saveNow: () => Promise<void>;
998
+ publish: () => Promise<void>;
999
+ restoreVersion: (version: number) => Promise<void>;
1000
+ createPage: (title: string, slug: string) => Promise<Issue[]>;
1001
+ renamePage: (slug: string) => Promise<Issue[]>;
1002
+ deletePage: () => Promise<void>;
1003
+ updateSite: (update: SiteUpdate) => Promise<Issue[]>;
1004
+ uploadAsset: (file: File) => Promise<Asset | null>;
1005
+ deleteAsset: (asset: Asset) => Promise<void>;
1006
+ openLibrary: (onPick?: ((ref: string) => void) | null) => void;
1007
+ dialogModel: (name: Exclude<Dialog, null>) => WritableComputedRef<boolean>;
1008
+ dispose: () => void;
1009
+ };
1010
+ export declare const issueText: (issue: Issue | undefined) => string;