@skylivellc/lienzo-editor 0.0.0-stage → 0.1.1

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