@lightspeed/crane 1.1.0 → 1.1.2

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 (51) hide show
  1. package/dist/app.d.mts +198 -11
  2. package/dist/app.d.ts +198 -11
  3. package/dist/app.mjs +1 -1
  4. package/dist/cli.mjs +22 -11
  5. package/package.json +5 -2
  6. package/template/footers/example-footer/ExampleFooter.vue +40 -1
  7. package/template/footers/example-footer/component/LegalLinks.vue +20 -0
  8. package/template/footers/example-footer/component/ReportAbuse.vue +18 -0
  9. package/template/footers/example-footer/entity/color.ts +4 -0
  10. package/template/footers/{settings/translations.ts → example-footer/settings/content.ts} +0 -2
  11. package/template/footers/example-footer/settings/design.ts +11 -0
  12. package/template/footers/example-footer/settings/translations.ts +12 -0
  13. package/template/footers/example-footer/showcases/1.ts +2 -0
  14. package/template/footers/example-footer/showcases/translations.ts +9 -0
  15. package/template/footers/example-footer/type.ts +2 -2
  16. package/template/headers/example-header/ExampleHeader.vue +39 -7
  17. package/template/headers/example-header/assets/account_icon.svg +11 -0
  18. package/template/headers/example-header/assets/cart.svg +20 -0
  19. package/template/headers/example-header/assets/lightspeed_logo.png +0 -0
  20. package/template/headers/example-header/assets/search.svg +13 -0
  21. package/template/headers/example-header/component/Account.vue +20 -0
  22. package/template/headers/example-header/component/Cart.vue +64 -0
  23. package/template/headers/example-header/component/Logo.vue +95 -0
  24. package/template/headers/example-header/component/NavigationMenu.vue +53 -0
  25. package/template/headers/example-header/component/SearchForm.vue +89 -0
  26. package/template/headers/example-header/settings/content.ts +9 -0
  27. package/template/headers/example-header/settings/design.ts +23 -0
  28. package/template/headers/example-header/settings/translations.ts +9 -0
  29. package/template/headers/example-header/showcases/1.ts +40 -0
  30. package/template/headers/example-header/showcases/2.ts +42 -0
  31. package/template/headers/example-header/showcases/translations.ts +17 -0
  32. package/template/headers/example-header/type.ts +2 -2
  33. package/template/package.json +3 -2
  34. package/template/sections/example-section/component/image/ImagesGrid.vue +18 -37
  35. package/template/sections/example-section/settings/content.ts +53 -55
  36. package/template/sections/example-section/settings/translations.ts +27 -24
  37. package/template/sections/example-section/showcases/1.ts +143 -103
  38. package/template/sections/example-section/showcases/2.ts +127 -103
  39. package/template/sections/example-section/showcases/translations.ts +4 -0
  40. package/template/shared/LanguageSelector.vue +75 -0
  41. package/template/templates/template.ts +128 -104
  42. package/types.d.ts +262 -152
  43. package/template/footers/example-footer/component/SampleComponent.vue +0 -11
  44. package/template/footers/settings/content.ts +0 -1
  45. package/template/footers/settings/design.ts +0 -1
  46. package/template/headers/example-header/component/SampleComponent.vue +0 -11
  47. package/template/headers/settings/content.ts +0 -1
  48. package/template/headers/settings/design.ts +0 -1
  49. package/template/headers/settings/layout.ts +0 -1
  50. package/template/headers/settings/translations.ts +0 -5
  51. /package/template/{footers → headers/example-header}/settings/layout.ts +0 -0
package/dist/app.d.mts CHANGED
@@ -1,3 +1,4 @@
1
+ import * as vue from 'vue';
1
2
  import { App, Ref, Component } from 'vue';
2
3
 
3
4
  interface AppBaseContext {
@@ -12,6 +13,7 @@ interface AppBaseData<C, D> {
12
13
  readonly content: C;
13
14
  readonly design: D;
14
15
  readonly defaults: Record<string, unknown>;
16
+ readonly externalContent: ExternalContentData;
15
17
  }
16
18
  interface AppBaseState<C, D> {
17
19
  readonly context: AppBaseContext;
@@ -19,34 +21,57 @@ interface AppBaseState<C, D> {
19
21
  }
20
22
 
21
23
  interface VueBaseProps<CONTENT, DESIGN> {
22
- init: (app: App<Element>, contextValue: AppBaseContext, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>) => void;
23
- update: (app: App<Element>, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>) => void;
24
+ init: (app: App<Element>, contextValue: AppBaseContext, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>, externalContent: ExternalContentData) => void;
25
+ update: (app: App<Element>, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>, externalContent: ExternalContentData) => void;
24
26
  readonly context: Ref<AppBaseContext>;
25
27
  readonly content: Ref<CONTENT>;
26
28
  readonly design: Ref<DESIGN>;
27
29
  readonly defaults: Ref<Record<string, unknown>>;
30
+ readonly externalContent: Ref<ExternalContentData>;
28
31
  }
29
32
  declare function useVueBaseProps<CONTENT, DESIGN>(): VueBaseProps<CONTENT, DESIGN>;
30
33
 
31
- declare function useInputboxElementContent<CONTENT>(elementName: keyof CONTENT): {
34
+ interface InputBoxContent {
35
+ hasContent: boolean;
36
+ value: string;
37
+ }
38
+ declare function useInputboxElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
32
39
  hasContent: boolean;
33
40
  value: string | undefined;
34
41
  };
35
42
 
36
- declare function useTextareaElementContent<CONTENT>(elementName: keyof CONTENT): {
43
+ interface TextAreaContent {
44
+ hasContent: boolean;
45
+ value: string;
46
+ }
47
+ declare function useTextareaElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
37
48
  hasContent: boolean;
38
49
  value: string | undefined;
39
50
  };
40
51
 
41
- declare function useButtonElementContent<CONTENT>(elementName: keyof CONTENT): {
52
+ interface ButtonContent {
53
+ title: string;
54
+ link: string;
55
+ hasTitle: boolean;
56
+ hasLink: boolean;
57
+ performAction: () => void;
58
+ }
59
+ declare function useButtonElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
42
60
  title: string | undefined;
43
61
  link: string | undefined;
44
62
  hasTitle: boolean;
45
63
  hasLink: boolean;
46
- performAction: () => void;
64
+ performAction: (() => void) | undefined;
47
65
  };
48
66
 
49
- declare function useImageElementContent<CONTENT>(elementName: keyof CONTENT): {
67
+ interface ImageContent {
68
+ hasContent: boolean;
69
+ lowResolutionMobileImage: string;
70
+ highResolutionMobileImage: string;
71
+ lowResolutionDesktopImage: string;
72
+ highResolutionDesktopImage: string;
73
+ }
74
+ declare function useImageElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
50
75
  hasContent: boolean;
51
76
  lowResolutionMobileImage: string;
52
77
  highResolutionMobileImage: string;
@@ -54,14 +79,109 @@ declare function useImageElementContent<CONTENT>(elementName: keyof CONTENT): {
54
79
  highResolutionDesktopImage: string;
55
80
  };
56
81
 
57
- declare function useToggleElementContent<CONTENT>(elementName: keyof CONTENT): {
82
+ interface ToggleContent {
83
+ hasContent: boolean;
84
+ value: boolean;
85
+ }
86
+ declare function useToggleElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
58
87
  hasContent: boolean;
59
88
  value: boolean | undefined;
60
89
  };
61
90
 
62
- declare function useSelectboxElementContent<CONTENT>(elementName: keyof CONTENT): {
91
+ interface SelectBoxContent {
63
92
  hasContent: boolean;
64
- value: undefined;
93
+ value: string;
94
+ }
95
+ declare function useSelectboxElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
96
+ hasContent: boolean;
97
+ value: string | undefined;
98
+ };
99
+
100
+ declare function useMenuElementContent<CONTENT>(elementName: keyof CONTENT): {
101
+ hasContent: boolean;
102
+ items: {
103
+ performAction: (() => void) | undefined;
104
+ id: string;
105
+ title?: string | undefined;
106
+ type?: string | undefined;
107
+ link?: string | undefined;
108
+ email?: string | undefined;
109
+ phone?: string | undefined;
110
+ tileIdForScroll?: string | undefined;
111
+ pageIdForNavigate?: string | undefined;
112
+ showStoreCategories?: boolean | undefined;
113
+ isSubmenuOpened?: boolean | undefined;
114
+ categoryId?: number | undefined;
115
+ }[];
116
+ };
117
+
118
+ declare function useNavigationMenuElementContent<CONTENT>(): {
119
+ hasContent: boolean;
120
+ items: {
121
+ performAction: (() => void) | undefined;
122
+ id: string;
123
+ title?: string | undefined;
124
+ type?: string | undefined;
125
+ link?: string | undefined;
126
+ email?: string | undefined;
127
+ phone?: string | undefined;
128
+ tileIdForScroll?: string | undefined;
129
+ pageIdForNavigate?: string | undefined;
130
+ showStoreCategories?: boolean | undefined;
131
+ isSubmenuOpened?: boolean | undefined;
132
+ categoryId?: number | undefined;
133
+ }[];
134
+ };
135
+
136
+ interface Card {
137
+ title: string;
138
+ settings: Record<string, unknown>;
139
+ }
140
+ interface Deck {
141
+ cards: Card[];
142
+ }
143
+ declare enum EditorTypes {
144
+ INPUTBOX = "INPUTBOX",
145
+ TEXTAREA = "TEXTAREA",
146
+ BUTTON = "BUTTON",
147
+ IMAGE = "IMAGE",
148
+ TOGGLE = "TOGGLE",
149
+ SELECTBOX = "SELECTBOX"
150
+ }
151
+ declare function useDeckElementContent<CONTENT>(elementName: keyof CONTENT): {
152
+ hasContent: boolean;
153
+ cards: Card[] | undefined;
154
+ getReactiveRef: typeof getReactiveRef;
155
+ };
156
+ declare function getReactiveRef(card: Card | undefined, editorType: EditorTypes, contentElementName: string): {
157
+ hasContent: boolean;
158
+ value: string | undefined;
159
+ } | {
160
+ title: string | undefined;
161
+ link: string | undefined;
162
+ hasTitle: boolean;
163
+ hasLink: boolean;
164
+ performAction: (() => void) | undefined;
165
+ } | {
166
+ hasContent: boolean;
167
+ lowResolutionMobileImage: string;
168
+ highResolutionMobileImage: string;
169
+ lowResolutionDesktopImage: string;
170
+ highResolutionDesktopImage: string;
171
+ } | {
172
+ hasContent: boolean;
173
+ value: boolean | undefined;
174
+ } | undefined;
175
+
176
+ declare function useLogoElementContent<CONTENT>(): {
177
+ type: LogoType | undefined;
178
+ text: string | undefined;
179
+ image: {
180
+ lowResolutionMobileImage: string;
181
+ highResolutionMobileImage: string;
182
+ lowResolutionDesktopImage: string;
183
+ highResolutionDesktopImage: string;
184
+ };
65
185
  };
66
186
 
67
187
  declare function useTextElementDesign<DESIGN>(elementName: keyof DESIGN): {
@@ -113,6 +233,8 @@ declare function useLayoutElementDesign(): {
113
233
  layout: string | undefined;
114
234
  };
115
235
 
236
+ declare function useLogoElementDesign<DESIGN>(): vue.ComputedRef<LogoDesignData>;
237
+
116
238
  interface VueServerAppExtensions {
117
239
  init?: (app: App<Element>) => void;
118
240
  render?: <C, D>(app: App<Element>, context: AppBaseContext, data: AppBaseData<C, D>) => void;
@@ -141,4 +263,69 @@ declare function createVueClientApp<C, D>(appComponent: Component, extensions?:
141
263
  };
142
264
  };
143
265
 
144
- export { createVueClientApp, createVueServerApp, useBackgroundElementDesign, useButtonElementContent, useButtonElementDesign, useImageElementContent, useImageElementDesign, useInputboxElementContent, useLayoutElementDesign, useSelectboxElementContent, useSelectboxElementDesign, useTextElementDesign, useTextareaElementContent, useTextareaElementDesign, useToggleElementContent, useToggleElementDesign, useVueBaseProps };
266
+ interface InstantsiteTilePromise {
267
+ add(callback: (id: string) => void): void;
268
+ }
269
+ interface InstantsiteJSAPI {
270
+ /**
271
+ * Retrieves the current site ID.
272
+ *
273
+ * @returns {number} The site ID.
274
+ */
275
+ getSiteId: () => number;
276
+ /**
277
+ * Retrieves the public token for a given app.
278
+ *
279
+ * @param {string} appId - The ID of the app.
280
+ * @returns {string | undefined} The app's public token, or `undefined` if not found.
281
+ */
282
+ getAppPublicToken: (appId: string) => string | undefined;
283
+ /**
284
+ * Retrieves the public configuration for a given app.
285
+ *
286
+ * @param {string} appId - The ID of the app.
287
+ * @returns {string | undefined} The app's public configuration, or `undefined` if not found.
288
+ */
289
+ getAppPublicConfig: (appId: string) => string | undefined;
290
+ /**
291
+ * An event that triggers when a tile is loaded.
292
+ *
293
+ * @type {InstantsiteTilePromise}
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * const tileLoadedPromise = instantsiteJsApi?.onTileLoaded;
298
+ *
299
+ * tileLoadedPromise?.add((tileId) => {
300
+ * console.log('Tile loaded:', tileId);
301
+ * });
302
+ * ```
303
+ */
304
+ onTileLoaded: InstantsiteTilePromise;
305
+ /**
306
+ * An event that triggers when a tile is unloaded.
307
+ *
308
+ * @type {InstantsiteTilePromise}
309
+ *
310
+ * @example
311
+ * ```ts
312
+ * const tileUnloadedPromise = instantsiteJsApi?.onTileUnloaded;
313
+ *
314
+ * tileUnloadedPromise?.add((tileId) => {
315
+ * console.log('Tile unloaded:', tileId);
316
+ * });
317
+ * ```
318
+ */
319
+ onTileUnloaded: InstantsiteTilePromise;
320
+ /**
321
+ * Opens the search page with the specified keyword.
322
+ *
323
+ * @param {string | undefined} keyword - The keyword to search for.
324
+ * @returns {void}
325
+ */
326
+ openSearchPage: (keyword: string | undefined) => void;
327
+ }
328
+
329
+ declare function useInstantsiteJsApi(): InstantsiteJSAPI | undefined;
330
+
331
+ export { type ButtonContent, type Card, type Deck, EditorTypes, type ImageContent, type InputBoxContent, type SelectBoxContent, type TextAreaContent, type ToggleContent, createVueClientApp, createVueServerApp, useBackgroundElementDesign, useButtonElementContent, useButtonElementDesign, useDeckElementContent, useImageElementContent, useImageElementDesign, useInputboxElementContent, useInstantsiteJsApi, useLayoutElementDesign, useLogoElementContent, useLogoElementDesign, useMenuElementContent, useNavigationMenuElementContent, useSelectboxElementContent, useSelectboxElementDesign, useTextElementDesign, useTextareaElementContent, useTextareaElementDesign, useToggleElementContent, useToggleElementDesign, useVueBaseProps };
package/dist/app.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import * as vue from 'vue';
1
2
  import { App, Ref, Component } from 'vue';
2
3
 
3
4
  interface AppBaseContext {
@@ -12,6 +13,7 @@ interface AppBaseData<C, D> {
12
13
  readonly content: C;
13
14
  readonly design: D;
14
15
  readonly defaults: Record<string, unknown>;
16
+ readonly externalContent: ExternalContentData;
15
17
  }
16
18
  interface AppBaseState<C, D> {
17
19
  readonly context: AppBaseContext;
@@ -19,34 +21,57 @@ interface AppBaseState<C, D> {
19
21
  }
20
22
 
21
23
  interface VueBaseProps<CONTENT, DESIGN> {
22
- init: (app: App<Element>, contextValue: AppBaseContext, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>) => void;
23
- update: (app: App<Element>, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>) => void;
24
+ init: (app: App<Element>, contextValue: AppBaseContext, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>, externalContent: ExternalContentData) => void;
25
+ update: (app: App<Element>, contentValue: CONTENT, designValue: DESIGN, defaultsValue: Record<string, unknown>, externalContent: ExternalContentData) => void;
24
26
  readonly context: Ref<AppBaseContext>;
25
27
  readonly content: Ref<CONTENT>;
26
28
  readonly design: Ref<DESIGN>;
27
29
  readonly defaults: Ref<Record<string, unknown>>;
30
+ readonly externalContent: Ref<ExternalContentData>;
28
31
  }
29
32
  declare function useVueBaseProps<CONTENT, DESIGN>(): VueBaseProps<CONTENT, DESIGN>;
30
33
 
31
- declare function useInputboxElementContent<CONTENT>(elementName: keyof CONTENT): {
34
+ interface InputBoxContent {
35
+ hasContent: boolean;
36
+ value: string;
37
+ }
38
+ declare function useInputboxElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
32
39
  hasContent: boolean;
33
40
  value: string | undefined;
34
41
  };
35
42
 
36
- declare function useTextareaElementContent<CONTENT>(elementName: keyof CONTENT): {
43
+ interface TextAreaContent {
44
+ hasContent: boolean;
45
+ value: string;
46
+ }
47
+ declare function useTextareaElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
37
48
  hasContent: boolean;
38
49
  value: string | undefined;
39
50
  };
40
51
 
41
- declare function useButtonElementContent<CONTENT>(elementName: keyof CONTENT): {
52
+ interface ButtonContent {
53
+ title: string;
54
+ link: string;
55
+ hasTitle: boolean;
56
+ hasLink: boolean;
57
+ performAction: () => void;
58
+ }
59
+ declare function useButtonElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
42
60
  title: string | undefined;
43
61
  link: string | undefined;
44
62
  hasTitle: boolean;
45
63
  hasLink: boolean;
46
- performAction: () => void;
64
+ performAction: (() => void) | undefined;
47
65
  };
48
66
 
49
- declare function useImageElementContent<CONTENT>(elementName: keyof CONTENT): {
67
+ interface ImageContent {
68
+ hasContent: boolean;
69
+ lowResolutionMobileImage: string;
70
+ highResolutionMobileImage: string;
71
+ lowResolutionDesktopImage: string;
72
+ highResolutionDesktopImage: string;
73
+ }
74
+ declare function useImageElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
50
75
  hasContent: boolean;
51
76
  lowResolutionMobileImage: string;
52
77
  highResolutionMobileImage: string;
@@ -54,14 +79,109 @@ declare function useImageElementContent<CONTENT>(elementName: keyof CONTENT): {
54
79
  highResolutionDesktopImage: string;
55
80
  };
56
81
 
57
- declare function useToggleElementContent<CONTENT>(elementName: keyof CONTENT): {
82
+ interface ToggleContent {
83
+ hasContent: boolean;
84
+ value: boolean;
85
+ }
86
+ declare function useToggleElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
58
87
  hasContent: boolean;
59
88
  value: boolean | undefined;
60
89
  };
61
90
 
62
- declare function useSelectboxElementContent<CONTENT>(elementName: keyof CONTENT): {
91
+ interface SelectBoxContent {
63
92
  hasContent: boolean;
64
- value: undefined;
93
+ value: string;
94
+ }
95
+ declare function useSelectboxElementContent<CONTENT>(elementName: string, externalContent?: Record<string, unknown>): {
96
+ hasContent: boolean;
97
+ value: string | undefined;
98
+ };
99
+
100
+ declare function useMenuElementContent<CONTENT>(elementName: keyof CONTENT): {
101
+ hasContent: boolean;
102
+ items: {
103
+ performAction: (() => void) | undefined;
104
+ id: string;
105
+ title?: string | undefined;
106
+ type?: string | undefined;
107
+ link?: string | undefined;
108
+ email?: string | undefined;
109
+ phone?: string | undefined;
110
+ tileIdForScroll?: string | undefined;
111
+ pageIdForNavigate?: string | undefined;
112
+ showStoreCategories?: boolean | undefined;
113
+ isSubmenuOpened?: boolean | undefined;
114
+ categoryId?: number | undefined;
115
+ }[];
116
+ };
117
+
118
+ declare function useNavigationMenuElementContent<CONTENT>(): {
119
+ hasContent: boolean;
120
+ items: {
121
+ performAction: (() => void) | undefined;
122
+ id: string;
123
+ title?: string | undefined;
124
+ type?: string | undefined;
125
+ link?: string | undefined;
126
+ email?: string | undefined;
127
+ phone?: string | undefined;
128
+ tileIdForScroll?: string | undefined;
129
+ pageIdForNavigate?: string | undefined;
130
+ showStoreCategories?: boolean | undefined;
131
+ isSubmenuOpened?: boolean | undefined;
132
+ categoryId?: number | undefined;
133
+ }[];
134
+ };
135
+
136
+ interface Card {
137
+ title: string;
138
+ settings: Record<string, unknown>;
139
+ }
140
+ interface Deck {
141
+ cards: Card[];
142
+ }
143
+ declare enum EditorTypes {
144
+ INPUTBOX = "INPUTBOX",
145
+ TEXTAREA = "TEXTAREA",
146
+ BUTTON = "BUTTON",
147
+ IMAGE = "IMAGE",
148
+ TOGGLE = "TOGGLE",
149
+ SELECTBOX = "SELECTBOX"
150
+ }
151
+ declare function useDeckElementContent<CONTENT>(elementName: keyof CONTENT): {
152
+ hasContent: boolean;
153
+ cards: Card[] | undefined;
154
+ getReactiveRef: typeof getReactiveRef;
155
+ };
156
+ declare function getReactiveRef(card: Card | undefined, editorType: EditorTypes, contentElementName: string): {
157
+ hasContent: boolean;
158
+ value: string | undefined;
159
+ } | {
160
+ title: string | undefined;
161
+ link: string | undefined;
162
+ hasTitle: boolean;
163
+ hasLink: boolean;
164
+ performAction: (() => void) | undefined;
165
+ } | {
166
+ hasContent: boolean;
167
+ lowResolutionMobileImage: string;
168
+ highResolutionMobileImage: string;
169
+ lowResolutionDesktopImage: string;
170
+ highResolutionDesktopImage: string;
171
+ } | {
172
+ hasContent: boolean;
173
+ value: boolean | undefined;
174
+ } | undefined;
175
+
176
+ declare function useLogoElementContent<CONTENT>(): {
177
+ type: LogoType | undefined;
178
+ text: string | undefined;
179
+ image: {
180
+ lowResolutionMobileImage: string;
181
+ highResolutionMobileImage: string;
182
+ lowResolutionDesktopImage: string;
183
+ highResolutionDesktopImage: string;
184
+ };
65
185
  };
66
186
 
67
187
  declare function useTextElementDesign<DESIGN>(elementName: keyof DESIGN): {
@@ -113,6 +233,8 @@ declare function useLayoutElementDesign(): {
113
233
  layout: string | undefined;
114
234
  };
115
235
 
236
+ declare function useLogoElementDesign<DESIGN>(): vue.ComputedRef<LogoDesignData>;
237
+
116
238
  interface VueServerAppExtensions {
117
239
  init?: (app: App<Element>) => void;
118
240
  render?: <C, D>(app: App<Element>, context: AppBaseContext, data: AppBaseData<C, D>) => void;
@@ -141,4 +263,69 @@ declare function createVueClientApp<C, D>(appComponent: Component, extensions?:
141
263
  };
142
264
  };
143
265
 
144
- export { createVueClientApp, createVueServerApp, useBackgroundElementDesign, useButtonElementContent, useButtonElementDesign, useImageElementContent, useImageElementDesign, useInputboxElementContent, useLayoutElementDesign, useSelectboxElementContent, useSelectboxElementDesign, useTextElementDesign, useTextareaElementContent, useTextareaElementDesign, useToggleElementContent, useToggleElementDesign, useVueBaseProps };
266
+ interface InstantsiteTilePromise {
267
+ add(callback: (id: string) => void): void;
268
+ }
269
+ interface InstantsiteJSAPI {
270
+ /**
271
+ * Retrieves the current site ID.
272
+ *
273
+ * @returns {number} The site ID.
274
+ */
275
+ getSiteId: () => number;
276
+ /**
277
+ * Retrieves the public token for a given app.
278
+ *
279
+ * @param {string} appId - The ID of the app.
280
+ * @returns {string | undefined} The app's public token, or `undefined` if not found.
281
+ */
282
+ getAppPublicToken: (appId: string) => string | undefined;
283
+ /**
284
+ * Retrieves the public configuration for a given app.
285
+ *
286
+ * @param {string} appId - The ID of the app.
287
+ * @returns {string | undefined} The app's public configuration, or `undefined` if not found.
288
+ */
289
+ getAppPublicConfig: (appId: string) => string | undefined;
290
+ /**
291
+ * An event that triggers when a tile is loaded.
292
+ *
293
+ * @type {InstantsiteTilePromise}
294
+ *
295
+ * @example
296
+ * ```ts
297
+ * const tileLoadedPromise = instantsiteJsApi?.onTileLoaded;
298
+ *
299
+ * tileLoadedPromise?.add((tileId) => {
300
+ * console.log('Tile loaded:', tileId);
301
+ * });
302
+ * ```
303
+ */
304
+ onTileLoaded: InstantsiteTilePromise;
305
+ /**
306
+ * An event that triggers when a tile is unloaded.
307
+ *
308
+ * @type {InstantsiteTilePromise}
309
+ *
310
+ * @example
311
+ * ```ts
312
+ * const tileUnloadedPromise = instantsiteJsApi?.onTileUnloaded;
313
+ *
314
+ * tileUnloadedPromise?.add((tileId) => {
315
+ * console.log('Tile unloaded:', tileId);
316
+ * });
317
+ * ```
318
+ */
319
+ onTileUnloaded: InstantsiteTilePromise;
320
+ /**
321
+ * Opens the search page with the specified keyword.
322
+ *
323
+ * @param {string | undefined} keyword - The keyword to search for.
324
+ * @returns {void}
325
+ */
326
+ openSearchPage: (keyword: string | undefined) => void;
327
+ }
328
+
329
+ declare function useInstantsiteJsApi(): InstantsiteJSAPI | undefined;
330
+
331
+ export { type ButtonContent, type Card, type Deck, EditorTypes, type ImageContent, type InputBoxContent, type SelectBoxContent, type TextAreaContent, type ToggleContent, createVueClientApp, createVueServerApp, useBackgroundElementDesign, useButtonElementContent, useButtonElementDesign, useDeckElementContent, useImageElementContent, useImageElementDesign, useInputboxElementContent, useInstantsiteJsApi, useLayoutElementDesign, useLogoElementContent, useLogoElementDesign, useMenuElementContent, useNavigationMenuElementContent, useSelectboxElementContent, useSelectboxElementDesign, useTextElementDesign, useTextareaElementContent, useTextareaElementDesign, useToggleElementContent, useToggleElementDesign, useVueBaseProps };
package/dist/app.mjs CHANGED
@@ -1 +1 @@
1
- import{getCurrentInstance as h,ref as b,computed as o,reactive as f,createSSRApp as C}from"vue";import{renderToString as I}from"vue/server-renderer";const y=new Map;function v(){const n=(a,i,r,u,d)=>{y.set(a._uid,{context:b(i),content:b(r),design:b(u),defaults:b(d)})},t=(a,i,r,u)=>{const d=y.get(a._uid);d!==void 0&&(d.content.value=i,d.design.value=r,d.defaults.value=u)},e=h()?.appContext.app._uid??-1,l=y.get(e);return{init:n,update:t,context:l?.context,content:l?.content,design:l?.design,defaults:l?.defaults}}function z(n){const t=v(),e=o(()=>{const i=t.content.value[n];if(i!==void 0){if(typeof i=="string")return i;throw new Error(`Element ${n} is not inputbox`)}}),l=o(()=>e.value!==void 0),a=o(()=>e.value);return f({hasContent:l,value:a})}function _(n){const t=v(),e=o(()=>{const i=t.content.value[n];if(i!==void 0){if(typeof i=="string")return i;throw new Error(`Element ${n} is not textarea`)}}),l=o(()=>e.value!==void 0),a=o(()=>e.value);return f({hasContent:l,value:a})}function D(n){return"title"in n&&"type"in n}function T(n){const t=v(),e=o(()=>{const u=t.content.value[n];if(u!==void 0){if(D(u))return u;throw new Error(`Element ${n} is not action link`)}}),l=o(()=>e.value?.title),a=o(()=>e.value?.link),i=o(()=>!!l.value),r=o(()=>!!a.value);return f({title:l,link:a,hasTitle:i,hasLink:r,performAction:()=>{if(e.value!==void 0)switch(e.value.type){case"HYPER_LINK":e.value.link&&window.open(e.value.link,"_blank");break;case"GO_TO_STORE_LINK":window.open("/products");break;case"MAIL_LINK":e.value.email&&window.open(`mailto:${e.value.email}`,"_self");break;case"TEL_LINK":e.value.phone&&window.open(`tel:${e.value.phone}`,"_self");break;case"SCROLL_TO_TILE":{if(typeof document>"u")return;const u=e.value.tileId;document.getElementById(`tile-${u}`)?.scrollIntoView();break}default:throw new Error("Unknown ButtonType: ")}}})}function S(n){return"bucket"in n&&"borderInfo"in n&&"set"in n}function m(n,t){const e=new RegExp(/^https?:\/\//);return n!=null&&e.test(n)?n:`${t}/${n}`}function L(n){const t=v(),e=o(()=>{const c=t.content.value[n];if(c!==void 0){if(S(c))return c;throw new Error(`Element ${n} is not image`)}}),l=o(()=>e.value===void 0?"":t.context.value.imageBuckets?.[e.value?.bucket]),a=o(()=>e.value!==void 0),i=o(()=>m(e.value?.set?.["cropped-webp-100x200"]?.url,l.value)),r=o(()=>m(e.value?.set?.["cropped-webp-1000x2000"]?.url,l.value)),u=o(()=>m(e.value?.set?.["webp-200x200"]?.url,l.value)),d=o(()=>m(e.value?.set?.["webp-2000x2000"]?.url,l.value));return f({hasContent:a,lowResolutionMobileImage:i,highResolutionMobileImage:r,lowResolutionDesktopImage:u,highResolutionDesktopImage:d})}function $(n){return"enabled"in n}function R(n){const t=v(),e=o(()=>{const i=t.content.value[n];if(i!==void 0){if($(i))return i;throw new Error(`Element ${n} is not toggle`)}}),l=o(()=>e.value!==void 0),a=o(()=>e.value?.enabled);return f({hasContent:l,value:a})}function A(n){const t=v(),e=o(()=>{const i=t.content.value[n];if(i!==void 0){if(typeof i=="string")return i;throw new Error(`Element ${n} is not selectbox`)}}),l=o(()=>e.value!==void 0),a=o(()=>e.value);return f({hasContent:l,value:a})}function E(n,t){if(t===void 0)return;if(!t.startsWith("global."))return t;const e=t.split(".").at(2);if(e!==void 0)return n.fontFamily[e]}function k(n,t){if(t===void 0)return;if(typeof t!="string"||!t.startsWith("global."))return t;const e=t.split(".").at(2);if(e!==void 0)return n.textSize[e]}function p(n,t){if(t===void 0)return;if(typeof t!="string"||!t.startsWith("global."))return t;const e=t.split(".").at(2);if(e!==void 0)return n.color[e]}function B(n){const t=v(),e=o(()=>{const c=t.design.value[n],s=t.defaults.value[n],g=t.context.value.globalDesign;return{font:c?.font?.replaceAll("_"," ")??E(g,s?.font),size:c?.size??k(g,s?.size),bold:c?.bold??s?.bold,italic:c?.italic??s?.italic,color:c?.color??p(g,s?.color),visible:c?.visible??s?.visible??!1}}),l=o(()=>e.value?.font),a=o(()=>e.value?.size),i=o(()=>e.value?.bold),r=o(()=>e.value?.italic),u=o(()=>e.value?.color),d=o(()=>e.value?.visible);return f({font:l,size:a,bold:i,italic:r,color:u,visible:d})}function O(n){const t=v(),e=o(()=>{const s=t.design.value[n],g=t.defaults.value[n],w=t.context.value.globalDesign;return{font:s?.font?.replaceAll("_"," ")??E(w,g?.font),size:s?.size??k(w,g?.size),bold:s?.bold??g?.bold,italic:s?.italic??g?.italic,color:s?.color??p(w,g?.color),visible:s?.visible??g?.visible??!1,whiteSpace:"pre-wrap"}}),l=o(()=>e.value?.font),a=o(()=>e.value?.size),i=o(()=>e.value?.bold),r=o(()=>e.value?.italic),u=o(()=>e.value?.color),d=o(()=>e.value?.visible),c=o(()=>e.value?.whiteSpace);return f({font:l,size:a,bold:i,italic:r,color:u,visible:d,whiteSpace:c})}function G(n){const t=v(),e=o(()=>{const c=t.design.value[n],s=t.defaults.value[n],g=t.context.value.globalDesign;return{appearance:c?.appearance??s?.appearance,font:c?.font??E(g,s?.font),size:c?.size??s?.size,style:c?.style??s?.style,color:c?.color??p(g,s?.color),visible:c?.visible??s?.visible??!1}}),l=o(()=>e.value?.appearance),a=o(()=>e.value?.font),i=o(()=>e.value?.size),r=o(()=>e.value?.style),u=o(()=>e.value?.color),d=o(()=>e.value?.visible);return f({appearance:l,font:a,size:i,style:r,color:u,visible:d})}function K(n){const t=v(),e=o(()=>{const i=t.design.value[n],r=t.defaults.value[n],u=t.context.value.globalDesign;return{overlay:{type:i?.overlay?.type??r?.overlay?.type,solid:{color:i?.overlay?.solid?.color??p(u,r?.overlay?.solid?.color)},gradient:{fromColor:i?.overlay?.gradient?.fromColor??p(u,r?.overlay?.gradient?.fromColor),toColor:i?.overlay?.gradient?.toColor??p(u,r?.overlay?.gradient?.toColor)}},visible:i?.visible??r?.visible??!1}}),l=o(()=>e.value?.overlay),a=o(()=>e.value?.visible);return f({overlay:l,visible:a})}function M(n){const t=v(),e=o(()=>{const a=t.design.value[n],i=t.defaults.value[n];return{enabled:a?.enabled??i?.enabled}}),l=o(()=>e.value?.enabled);return f({enabled:l})}function N(n){const t=v(),e=o(()=>{const a=t.design.value[n],i=t.defaults.value[n];return{value:a?.value??i?.value}}),l=o(()=>e.value?.value);return f({value:l})}function V(n){const t=v(),e=o(()=>{const a=t.design.value[n],i=t.defaults.value[n],r=t.context.value.globalDesign;return{background:{type:a?.background?.type??i?.background?.type,solid:{color:a?.background?.solid?.color??p(r,i?.background?.solid?.color)},gradient:{fromColor:a?.background?.gradient?.fromColor??p(r,i?.background?.gradient?.fromColor),toColor:a?.background?.gradient?.toColor??p(r,i?.background?.gradient?.toColor)}}}}),l=o(()=>e.value?.background);return f({background:l})}function W(){const n=v(),t=o(()=>n.design.value.layout),e=o(()=>t.value);return f({layout:e})}function x(n){return{app:C(n)}}function F(n,t){return{init:()=>{const{app:e}=x(n);return t?.init?.(e),{render:async(l,a)=>(v().init(e,l,a.content,a.design,a.defaults),t?.render?.(e,l,a),{html:await I(e,{context:l}),state:{context:l,data:a}})}}}}function P(n,t){return{init:()=>{const{app:e}=x(n);return t?.init?.(e),{mount:(l,a)=>{v().init(e,a.context,a.data.content,a.data.design,a.data.defaults),t?.mount?.(e,l,a),e.mount(l)},update:l=>{v().update(e,l.data.content,l.data.design,l.data.defaults),t?.update?.(e,l)},unmount:()=>{t?.unmount?.(e),e.unmount()}}}}}export{P as createVueClientApp,F as createVueServerApp,V as useBackgroundElementDesign,T as useButtonElementContent,G as useButtonElementDesign,L as useImageElementContent,K as useImageElementDesign,z as useInputboxElementContent,W as useLayoutElementDesign,A as useSelectboxElementContent,N as useSelectboxElementDesign,B as useTextElementDesign,_ as useTextareaElementContent,O as useTextareaElementDesign,R as useToggleElementContent,M as useToggleElementDesign,v as useVueBaseProps};
1
+ import{getCurrentInstance as z,ref as m,computed as r,reactive as d,createSSRApp as $}from"vue";import{renderToString as D}from"vue/server-renderer";const x=new Map;function s(){const e=(i,l,a,v,f,u)=>{x.set(i._uid,{context:m(l),content:m(a),design:m(v),defaults:m(f),externalContent:m(u)})},n=(i,l,a,v,f)=>{const u=x.get(i._uid);u!==void 0&&(u.content.value=l,u.design.value=a,u.defaults.value=v,u.externalContent.value=f)},t=z()?.appContext.app._uid??-1,o=x.get(t);return{init:e,update:n,context:o?.context,content:o?.content,design:o?.design,defaults:o?.defaults,externalContent:o?.externalContent}}function _(e,n){const t=s(),o=r(()=>n!==void 0?n:t.content.value);return N(o,e)}function N(e,n){const t=r(()=>{const l=e.value[n];if(l!==void 0){if(typeof l=="string")return l;throw new Error(`Element ${n} is not inputbox`)}}),o=r(()=>t.value!==void 0),i=r(()=>t.value);return d({hasContent:o,value:i})}function h(e,n){const t=s(),o=r(()=>n!==void 0?n:t.content.value);return B(o,e)}function B(e,n){const t=r(()=>{const l=e.value[n];if(l!==void 0){if(typeof l=="string")return l;throw new Error(`Element ${n} is not textarea`)}}),o=r(()=>t.value!==void 0),i=r(()=>t.value);return d({hasContent:o,value:i})}const b={HYPER_LINK:"HYPER_LINK",SCROLL_TO_TILE:"SCROLL_TO_TILE",MAIL_LINK:"MAIL_LINK",TEL_LINK:"TEL_LINK",GO_TO_STORE:"GO_TO_STORE",GO_TO_STORE_LINK:"GO_TO_STORE_LINK",GO_TO_PAGE:"GO_TO_PAGE"};function M(e){if("tileId"in e)return e.tileId;if("tileIdForScroll"in e)return e.tileIdForScroll}function K(e){if("pageId"in e)return e.pageId;if("pageIdForNavigate"in e)return e.pageIdForNavigate}function P(e){if("pageUrl"in e)return e.pageUrl;switch(K(e)){case"products":return"/products";case"cart":return"/cart";case"account":return"/account";case"search":return"/search";case"home":default:return"/"}}const y=(e,n)=>{if(!e||n)return;const{type:t,link:o,email:i,phone:l}=e,a=P(e);switch(t){case b.HYPER_LINK:if(o)return()=>window.open(o,"_blank");break;case b.GO_TO_STORE:case b.GO_TO_STORE_LINK:return()=>window.open("/products","_self");case b.MAIL_LINK:if(i)return()=>window.open(`mailto:${i}`,"_self");break;case b.TEL_LINK:if(l)return()=>window.open(`tel:${l}`,"_self");break;case b.SCROLL_TO_TILE:if(typeof document<"u")return()=>{const v=M(e);document.getElementById(`tile-${v}`)?.scrollIntoView()};break;case b.GO_TO_PAGE:if(a)return()=>window.open(a,"_self");break;default:console.error(`Unknown type of ActionLink: ${t}`)}};function U(e){return"title"in e&&"type"in e}function O(e,n){const t=s(),o=r(()=>!!t.externalContent?.value?.isPreviewMode),i=r(()=>n!==void 0?n:t.content.value!==void 0?t.content.value:{});return X(i,e,o.value)}function X(e,n,t){const o=r(()=>{const u=e.value[n];if(u!==void 0){if(U(u))return u;throw new Error(`Element ${n} is not action link`)}}),i=r(()=>o.value?.title),l=r(()=>o.value?.link),a=r(()=>!!i.value),v=r(()=>!!l.value),f=y(o.value,t);return d({title:i,link:l,hasTitle:a,hasLink:v,performAction:f})}function F(e){return"bucket"in e&&"borderInfo"in e&&"set"in e}function E(e,n){const t=new RegExp(/^https?:\/\//);return e!=null&&t.test(e)?e:`${n}/${e}`}function L(e,n){const t=s(),o=r(()=>n!==void 0?n:t.content.value);return V(o,e)}function V(e,n){const t=r(()=>{const u=e.value[n];if(u!==void 0){if(F(u))return u;throw new Error(`Element ${n} is not image`)}}),o=r(()=>t.value===void 0?"":s().context.value.imageBuckets?.[t.value?.bucket]),i=r(()=>t.value!==void 0),l=r(()=>E(t.value?.set?.["cropped-webp-100x200"]?.url,o.value)),a=r(()=>E(t.value?.set?.["cropped-webp-1000x2000"]?.url,o.value)),v=r(()=>E(t.value?.set?.["webp-200x200"]?.url,o.value)),f=r(()=>E(t.value?.set?.["webp-2000x2000"]?.url,o.value));return d({hasContent:i,lowResolutionMobileImage:l,highResolutionMobileImage:a,lowResolutionDesktopImage:v,highResolutionDesktopImage:f})}function H(e){return"enabled"in e}function k(e,n){const t=s(),o=r(()=>n!==void 0?n:t.content.value);return W(o,e)}function W(e,n){const t=r(()=>{const l=e.value[n];if(l!==void 0){if(H(l))return l;throw new Error(`Element ${n} is not toggle`)}}),o=r(()=>t.value!==void 0),i=r(()=>t.value?.enabled);return d({hasContent:o,value:i})}function R(e,n){const t=s(),o=r(()=>n!==void 0?n:t.content.value);return Y(o,e)}function Y(e,n){const t=r(()=>{const l=e.value[n];if(l!==void 0){if(typeof l=="string")return l;throw new Error(`Element ${n} is not selectbox`)}}),o=r(()=>t.value!==void 0),i=r(()=>t.value);return d({hasContent:o,value:i})}function j(e){return e!==null&&"items"in e}function A(e){const n=s(),t=r(()=>{const a=n.content.value[e];if(a!==void 0){if(j(a))return a;throw new Error(`Element ${e} is not an menu`)}}),o=r(()=>!!n.externalContent?.value?.isPreviewMode),i=r(()=>t.value!==void 0),l=r(()=>t.value?.items?t.value.items.map(a=>({...a,performAction:y(a,o.value)})):[]);return d({hasContent:i,items:l})}const J="menu";function q(){return A(J)}var G=(e=>(e.INPUTBOX="INPUTBOX",e.TEXTAREA="TEXTAREA",e.BUTTON="BUTTON",e.IMAGE="IMAGE",e.TOGGLE="TOGGLE",e.SELECTBOX="SELECTBOX",e))(G||{});function Q(e){if(typeof e!="object"||e===null)return!1;const n=e;return Array.isArray(n.cards)&&n.cards.every(t=>typeof t.settings=="object"&&t.settings!==null)}function Z(e){const n=s(),t=r(()=>{const l=n.content.value[e];if(l!==void 0){if(Q(l))return l;throw new Error(`Element ${e} is not of DECK type`)}}),o=r(()=>t.value!==void 0&&t.value.cards.length>0),i=r(()=>t.value?.cards);return d({hasContent:o,cards:i,getReactiveRef:ee})}function ee(e,n,t){if(e==null)throw Error("Could not get a reactive ref for undefined Card");const o=e.settings[t];if(o===void 0)return o;switch(n){case"TEXTAREA":return h(t,e.settings);case"INPUTBOX":return _(t,e.settings);case"SELECTBOX":return R(t,e.settings);case"IMAGE":return L(t,e.settings);case"TOGGLE":return k(t,e.settings);case"BUTTON":return O(t,e.settings);default:return}}function te(e){return"type"in e&&("text"in e||"image"in e)}function w(e,n){const t=new RegExp(/^https?:\/\//);return e!==void 0&&t.test(e)?e:`${n}/${e}`}function ne(){const e=s(),n=r(()=>{const a=e.content.value.logo;if(a!==void 0){if(te(a))return a;throw new Error("Element logo is not LOGO")}}),t=r(()=>n.value?.type),o=r(()=>n.value?.text),i=r(()=>n.value?.image===void 0?"":e.context.value.imageBuckets?.[n.value.image.bucket]),l=r(()=>({lowResolutionMobileImage:w(n.value?.image?.set?.["cropped-webp-100x200"]?.url,i.value),highResolutionMobileImage:w(n.value?.image?.set?.["cropped-webp-1000x2000"]?.url,i.value),lowResolutionDesktopImage:w(n.value?.image?.set?.["webp-200x200"]?.url,i.value),highResolutionDesktopImage:w(n.value?.image?.set?.["webp-2000x2000"]?.url,i.value)}));return d({type:t,text:o,image:l})}function T(e,n){if(n===void 0)return;if(!n.startsWith("global."))return n;const t=n.split(".").at(2);if(t!==void 0)return e.fontFamily[t]}function I(e,n){if(n===void 0)return;if(typeof n!="string"||!n.startsWith("global."))return n;const t=n.split(".").at(2);if(t!==void 0)return e.textSize[t]}function p(e,n){if(n===void 0)return;if(typeof n!="string"||!n.startsWith("global."))return n;const t=n.split(".").at(2);if(t!==void 0)return e.color[t]}function oe(e){const n=s(),t=r(()=>{const u=n.design.value[e],c=n.defaults.value[e],g=n.context.value.globalDesign;return{font:u?.font?.replaceAll("_"," ")??T(g,c?.font),size:u?.size??I(g,c?.size),bold:u?.bold??c?.bold,italic:u?.italic??c?.italic,color:u?.color??p(g,c?.color),visible:u?.visible??c?.visible??!1}}),o=r(()=>t.value?.font),i=r(()=>t.value?.size),l=r(()=>t.value?.bold),a=r(()=>t.value?.italic),v=r(()=>t.value?.color),f=r(()=>t.value?.visible);return d({font:o,size:i,bold:l,italic:a,color:v,visible:f})}function re(e){const n=s(),t=r(()=>{const c=n.design.value[e],g=n.defaults.value[e],C=n.context.value.globalDesign;return{font:c?.font?.replaceAll("_"," ")??T(C,g?.font),size:c?.size??I(C,g?.size),bold:c?.bold??g?.bold,italic:c?.italic??g?.italic,color:c?.color??p(C,g?.color),visible:c?.visible??g?.visible??!1,whiteSpace:"pre-wrap"}}),o=r(()=>t.value?.font),i=r(()=>t.value?.size),l=r(()=>t.value?.bold),a=r(()=>t.value?.italic),v=r(()=>t.value?.color),f=r(()=>t.value?.visible),u=r(()=>t.value?.whiteSpace);return d({font:o,size:i,bold:l,italic:a,color:v,visible:f,whiteSpace:u})}function ie(e){const n=s(),t=r(()=>{const u=n.design.value[e],c=n.defaults.value[e],g=n.context.value.globalDesign;return{appearance:u?.appearance??c?.appearance,font:u?.font??T(g,c?.font),size:u?.size??c?.size,style:u?.style??c?.style,color:u?.color??p(g,c?.color),visible:u?.visible??c?.visible??!1}}),o=r(()=>t.value?.appearance),i=r(()=>t.value?.font),l=r(()=>t.value?.size),a=r(()=>t.value?.style),v=r(()=>t.value?.color),f=r(()=>t.value?.visible);return d({appearance:o,font:i,size:l,style:a,color:v,visible:f})}function le(e){const n=s(),t=r(()=>{const l=n.design.value[e],a=n.defaults.value[e],v=n.context.value.globalDesign;return{overlay:{type:l?.overlay?.type??a?.overlay?.type,solid:{color:l?.overlay?.solid?.color??p(v,a?.overlay?.solid?.color)},gradient:{fromColor:l?.overlay?.gradient?.fromColor??p(v,a?.overlay?.gradient?.fromColor),toColor:l?.overlay?.gradient?.toColor??p(v,a?.overlay?.gradient?.toColor)}},visible:l?.visible??a?.visible??!1}}),o=r(()=>t.value?.overlay),i=r(()=>t.value?.visible);return d({overlay:o,visible:i})}function ae(e){const n=s(),t=r(()=>{const i=n.design.value[e],l=n.defaults.value[e];return{enabled:i?.enabled??l?.enabled}}),o=r(()=>t.value?.enabled);return d({enabled:o})}function ue(e){const n=s(),t=r(()=>{const i=n.design.value[e],l=n.defaults.value[e];return{value:i?.value??l?.value}}),o=r(()=>t.value?.value);return d({value:o})}function se(e){const n=s(),t=r(()=>{const i=n.design.value[e],l=n.defaults.value[e],a=n.context.value.globalDesign;return{background:{type:i?.background?.type??l?.background?.type,solid:{color:i?.background?.solid?.color??p(a,l?.background?.solid?.color)},gradient:{fromColor:i?.background?.gradient?.fromColor??p(a,l?.background?.gradient?.fromColor),toColor:i?.background?.gradient?.toColor??p(a,l?.background?.gradient?.toColor)}}}}),o=r(()=>t.value?.background);return d({background:o})}function ce(){const e=s(),n=r(()=>e.design.value.layout),t=r(()=>n.value);return d({layout:t})}function ve(e,n){return{visible:n?.visible??!1,width:n?.width??1,color:p(e,n?.color)}}function de(){const e=s();return r(()=>{const n=e.design.value.logo,t=e.defaults.value.logo,o=e.context.value.globalDesign;return{font:n?.font?.replaceAll("_"," ")??T(o,t?.font),size:n?.size??I(o,t?.size),bold:n?.bold??t?.bold,italic:n?.italic??t?.italic,color:n?.color??p(o,t?.color),visible:n?.visible??t?.visible??!1,spacing:n?.spacing??t?.spacing??0,capitalization:n?.capitalization??t?.capitalization??"none",frame:n?.frame??ve(o,t?.frame)}})}function S(e){return{app:$(e)}}function fe(e,n){return{init:()=>{const{app:t}=S(e);return n?.init?.(t),{render:async(o,i)=>(s().init(t,o,i.content,i.design,i.defaults,i.externalContent),n?.render?.(t,o,i),{html:await D(t,{context:o}),state:{context:o,data:i}})}}}}function ge(e,n){return{init:()=>{const{app:t}=S(e);return n?.init?.(t),{mount:(o,i)=>{s().init(t,i.context,i.data.content,i.data.design,i.data.defaults,i.data.externalContent),n?.mount?.(t,o,i),t.mount(o)},update:o=>{s().update(t,o.data.content,o.data.design,o.data.defaults,o.data.externalContent),n?.update?.(t,o)},unmount:()=>{n?.unmount?.(t),t.unmount()}}}}}function pe(){return globalThis.window.instantsite}export{G as EditorTypes,ge as createVueClientApp,fe as createVueServerApp,se as useBackgroundElementDesign,O as useButtonElementContent,ie as useButtonElementDesign,Z as useDeckElementContent,L as useImageElementContent,le as useImageElementDesign,_ as useInputboxElementContent,pe as useInstantsiteJsApi,ce as useLayoutElementDesign,ne as useLogoElementContent,de as useLogoElementDesign,A as useMenuElementContent,q as useNavigationMenuElementContent,R as useSelectboxElementContent,ue as useSelectboxElementDesign,oe as useTextElementDesign,h as useTextareaElementContent,re as useTextareaElementDesign,k as useToggleElementContent,ae as useToggleElementDesign,s as useVueBaseProps};