@unlayer/types 1.386.2 → 1.386.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -33,13 +33,20 @@ type PopupDesign = JSONTemplate<'popup'>; // body.values has popupPosition
33
33
  type EmailBody = BodyValues<'email'>; // has preheaderText, lacks popupPosition
34
34
  type PopupBody = BodyValues<'popup'>; // has popupPosition, lacks preheaderText
35
35
 
36
- // Export methods accept a display mode generic that narrows the design types:
37
- declare const unlayer: UnlayerEditor;
38
- unlayer.exportHtml<'email'>((result) => {
36
+ // The Unlayer instance propagates its display mode to method typings:
37
+ declare const unlayer: UnlayerEditor<'email'>;
38
+ unlayer.exportHtml((result) => {
39
39
  const html = result.html;
40
40
  const preheaderText = result.design.body.values.preheaderText; // typed, email-only field
41
41
  });
42
42
 
43
+ // Alternatively, you can use the display mode generic on the method:
44
+ unlayer.exportHtml<'popup'>((result) => {
45
+ const popupBackgroundColor = result.design.body.values.popupBackgroundColor; // available on popup mode
46
+ // @ts-expect-error
47
+ const preheaderText = result.design.body.values.preheaderText; // not available on popup mode
48
+ });
49
+
43
50
  // Example of fully typed json manipulation
44
51
  function handleDesign(design: JSONTemplate) {
45
52
  for (const row of design.body.rows) {
@@ -12,7 +12,7 @@ import type { LinkTypes, LinkTypesSharedConfig, SpecialLink, SpecialLinks } from
12
12
  import type { MergeTags, MergeTagsConfig, MergeTagsValues } from './merge-tags';
13
13
  import type { StyleGuideConfig } from './style-guide';
14
14
  import type { AppearanceConfig, Theme } from './theme';
15
- import type { Collection, Device, DisplayMode, Location, Variant } from './types';
15
+ import type { CallbackTypeMap, Collection, Device, DisplayMode, Location, Variant } from './types';
16
16
  import type { DeepPartial, LanguagesValue } from './utils';
17
17
  import type { BodyValues } from '../containers/body';
18
18
  import type { ColumnValues } from '../containers/column';
@@ -201,7 +201,7 @@ declare class Frame {
201
201
  receiveMessage(event: any): void;
202
202
  }
203
203
 
204
- declare class EditorClass {
204
+ declare class EditorClass<TClassDisplayMode extends DisplayMode | undefined = undefined> {
205
205
  frame: Frame | null;
206
206
  constructor(config?: Config);
207
207
  init(config?: Config): void;
@@ -216,12 +216,16 @@ declare class EditorClass {
216
216
  renderEditor(config: Config): void;
217
217
  initEditor(config: Config): void;
218
218
  registerColumns(cells: number[]): void;
219
+ registerCallback<T extends keyof CallbackTypeMap<TClassDisplayMode>>(type: T, callback: CallbackTypeMap<TClassDisplayMode>[T]): void;
219
220
  registerCallback(type: string, callback: (...args: any[]) => void): void;
221
+ unregisterCallback<T extends keyof CallbackTypeMap<TClassDisplayMode>>(type: T): void;
220
222
  unregisterCallback(type: string): void;
221
223
  registerProvider(type: string, callback: (...args: any[]) => any): void;
222
224
  unregisterProvider(type: string): void;
223
225
  reloadProvider(type: string): void;
226
+ addEventListener<T extends keyof CallbackTypeMap<TClassDisplayMode>>(type: T, callback: CallbackTypeMap<TClassDisplayMode>[T]): void;
224
227
  addEventListener(type: string, callback: (...args: any[]) => void): void;
228
+ removeEventListener<T extends keyof CallbackTypeMap<TClassDisplayMode>>(type: T): void;
225
229
  removeEventListener(type: string): void;
226
230
  setDesignId(id: string | null): void;
227
231
  setDesignMode(designMode: DesignMode | null): void;
@@ -239,14 +243,14 @@ declare class EditorClass {
239
243
  setTextDirection(textDirection: TextDirection | null): void;
240
244
  setTranslations(translations: Translations): void;
241
245
  loadBlank(bodyValues?: object): void;
242
- loadDesign<TDisplayMode extends DisplayMode | undefined = undefined>(design: JSONTemplate<TDisplayMode>): void;
243
- saveDesign<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: JSONTemplate<TDisplayMode>) => void, options?: SaveDesignOptions): void;
244
- exportHtml<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: ExportHtmlResult<TDisplayMode>) => void, options?: ExportHtmlOptions): void;
245
- exportLiveHtml<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: ExportLiveHtmlResult<TDisplayMode>) => void, options?: ExportLiveHtmlOptions): void;
246
- exportPlainText<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: ExportPlainTextResult<TDisplayMode>) => void, options?: ExportPlainTextOptions): void;
247
- exportImage<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportImageFromApiOptions): void;
248
- exportPdf<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportPdfFromApiOptions): void;
249
- exportZip<TDisplayMode extends DisplayMode | undefined = undefined>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportZipFromApiOptions): void;
246
+ loadDesign<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(design: JSONTemplate<TDisplayMode>): void;
247
+ saveDesign<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: JSONTemplate<TDisplayMode>) => void, options?: SaveDesignOptions): void;
248
+ exportHtml<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportHtmlResult<TDisplayMode>) => void, options?: ExportHtmlOptions): void;
249
+ exportLiveHtml<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportLiveHtmlResult<TDisplayMode>) => void, options?: ExportLiveHtmlOptions): void;
250
+ exportPlainText<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportPlainTextResult<TDisplayMode>) => void, options?: ExportPlainTextOptions): void;
251
+ exportImage<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportImageFromApiOptions): void;
252
+ exportPdf<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportPdfFromApiOptions): void;
253
+ exportZip<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportZipFromApiOptions): void;
250
254
  setAppearance(appearance: DeepPartial<AppearanceConfig>): void;
251
255
  setTheme(theme: AppearanceConfig['theme']): void;
252
256
  setBodyValues(bodyValues: Partial<BodyValues>, bodyId?: number): void;
@@ -256,7 +260,7 @@ declare class EditorClass {
256
260
  showPreview(payload: {
257
261
  device?: Device;
258
262
  resolution?: number;
259
- }): void;
263
+ } | Device): void;
260
264
  hidePreview(): void;
261
265
  canUndo(callback: (result: boolean) => void): void;
262
266
  canRedo(callback: (result: boolean) => void): void;
@@ -284,11 +288,19 @@ declare class EditorClass {
284
288
  }
285
289
 
286
290
  declare class Embed extends EditorClass {
287
- createEditor(config: Config): EditorClass;
291
+ createEditor<TDisplayMode extends DisplayMode | undefined = undefined>(config: Config): EditorClass<TDisplayMode>;
288
292
  }
289
293
 
290
294
  declare const _default: Embed;
291
295
 
296
+ export type UnlayerEditor<TDisplayMode extends DisplayMode | undefined = undefined> = EditorClass<TDisplayMode>;
297
+
298
+ export type UnlayerEmbed<TDisplayMode extends DisplayMode | undefined = undefined> = Omit<Embed, keyof EditorClass> & EditorClass<TDisplayMode>;
299
+
300
+ export type UnlayerOptions<TDisplayMode extends DisplayMode | undefined = undefined> = Omit<Config, 'displayMode'> & {
301
+ displayMode?: TDisplayMode extends undefined ? DisplayMode : TDisplayMode;
302
+ };
303
+
292
304
  // ───────────────────────────────────────────────────────────────────────────
293
305
  // Other
294
306
  // ───────────────────────────────────────────────────────────────────────────
@@ -455,13 +467,3 @@ export interface WidgetConfig {
455
467
  mount: WidgetMountFn;
456
468
  render: WidgetRenderFn;
457
469
  }
458
-
459
- // ───────────────────────────────────────────────────────────────────────────
460
- // Main Exports
461
- // ───────────────────────────────────────────────────────────────────────────
462
-
463
- export type UnlayerEmbed = typeof _default;
464
-
465
- export type UnlayerOptions = Parameters<UnlayerEmbed['createEditor']>[0];
466
-
467
- export type UnlayerEditor = InstanceType<typeof EditorClass>;
@@ -1,5 +1,8 @@
1
1
  // Auto-generated by build-values-types.js. Do not edit manually.
2
2
 
3
+ import type { JSONTemplate } from './design';
4
+ import type { MergeTags } from './merge-tags';
5
+
3
6
  export type Device = 'desktop' | 'mobile' | 'tablet';
4
7
 
5
8
  export type Resolution = {
@@ -20,4 +23,97 @@ export interface Location {
20
23
  id: number | string;
21
24
  }
22
25
 
26
+ export interface CallbackTypeMap<TDisplayMode extends DisplayMode | undefined = undefined> {
27
+ 'editor:ready': () => void;
28
+ 'design:loaded': (data: {
29
+ design: JSONTemplate<TDisplayMode>;
30
+ }) => void;
31
+ 'design:updated': (data: {
32
+ type: string;
33
+ item?: Record<string, any>;
34
+ changes?: Record<string, any>;
35
+ }) => void;
36
+ 'image:uploaded': (data: {
37
+ image: {
38
+ url: string;
39
+ width?: number;
40
+ height?: number;
41
+ };
42
+ }) => void;
43
+ 'item:selected': (data: {
44
+ item: Record<string, any>;
45
+ active: boolean;
46
+ }) => void;
47
+ 'row:moved': (data: {
48
+ row: Record<string, any>;
49
+ }) => void;
50
+ 'content:moved': (data: {
51
+ content: Record<string, any>;
52
+ }) => void;
53
+ image: (data: {
54
+ attachments: File[];
55
+ }, done: (result: {
56
+ progress?: number;
57
+ url?: string;
58
+ }) => void) => void;
59
+ selectImage: (data: Record<string, any>, done: (result: {
60
+ url: string;
61
+ width?: number;
62
+ height?: number;
63
+ size?: number;
64
+ id?: string | number;
65
+ }) => void) => void;
66
+ displayCondition: (data: Record<string, any>, done: (result: {
67
+ type: string;
68
+ label: string;
69
+ description: string;
70
+ before: string;
71
+ after: string;
72
+ } | null) => void) => void;
73
+ mergeTag: (data: {
74
+ mergeTags: MergeTags;
75
+ context: {
76
+ elementId: string;
77
+ };
78
+ }, done: (result: {
79
+ name?: string;
80
+ value: string;
81
+ }) => void) => void;
82
+ mergeTagRule: (data: {
83
+ mergeTags: MergeTags;
84
+ mergeTagGroup?: string;
85
+ mergeTagRule?: string;
86
+ context: {
87
+ elementId: string;
88
+ };
89
+ }, done: (result: {
90
+ mergeTagGroup: string | null;
91
+ mergeTagRule: string | null;
92
+ }) => void) => void;
93
+ previewHtml: (data: {
94
+ html: string;
95
+ }, done: (result: {
96
+ html: string;
97
+ }) => void) => void;
98
+ fetchImage: (data: {
99
+ url: string;
100
+ }, done: (result: {
101
+ blob: Blob;
102
+ url?: string;
103
+ }) => void) => void;
104
+ 'image:removed': (params: Record<string, any>, done: (result: any) => void) => void;
105
+ itemAdded: (data: {
106
+ item: Record<string, any>;
107
+ }, done: (result: any) => void) => void;
108
+ itemRemoved: (data: {
109
+ item: Record<string, any>;
110
+ }, done: (result: boolean) => void) => void;
111
+ itemMoved: (data: {
112
+ item: Record<string, any>;
113
+ }, done: (result: any) => void) => void;
114
+ 'block:added': (data: Record<string, any>, done: (result: any) => void) => void;
115
+ 'block:modified': (data: Record<string, any>, done: (result: any) => void) => void;
116
+ 'block:removed': (data: Record<string, any>, done: (result: any) => void) => void;
117
+ }
118
+
23
119
  export type ExporterName = "email" | "web" | "popup" | "document" | "classic" | "ampWeb" | "ampEmail";
@@ -48,7 +48,6 @@ export type ButtonValues<
48
48
  label?: string;
49
49
  };
50
50
  buttonColors: {
51
- [x: string]: unknown;
52
51
  color?: string;
53
52
  backgroundColor?: string;
54
53
  hoverColor?: string;
@@ -81,7 +81,6 @@ export type FormValues<
81
81
  labelAlign: "left" | "center" | "right" | "justify";
82
82
  labelPadding: `${number}px` | `${number}px ${number}px` | `${number}px ${number}px ${number}px` | `${number}px ${number}px ${number}px ${number}px`;
83
83
  buttonColors: {
84
- [x: string]: unknown;
85
84
  color?: string;
86
85
  backgroundColor?: string;
87
86
  hoverColor?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unlayer/types",
3
- "version": "1.386.2",
3
+ "version": "1.386.4",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "types": "./dist/index.d.ts",