@unlayer/types 1.386.1 → 1.386.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -25,14 +25,36 @@ const options: UnlayerOptions = {
25
25
  projectId: 12345,
26
26
  };
27
27
 
28
- // Work with designs
28
+ // JSONTemplate types for each Display Mode
29
+ type EmailDesign = JSONTemplate<'email'>; // body.values has preheaderText
30
+ type PopupDesign = JSONTemplate<'popup'>; // body.values has popupPosition
31
+
32
+ // Container and Tool types, e.g. BodyValues, RowValues, ButtonValues, etc
33
+ type EmailBody = BodyValues<'email'>; // has preheaderText, lacks popupPosition
34
+ type PopupBody = BodyValues<'popup'>; // has popupPosition, lacks preheaderText
35
+
36
+ // The Unlayer instance propagates its display mode to method typings:
37
+ declare const unlayer: UnlayerEditor<'email'>;
38
+ unlayer.exportHtml((result) => {
39
+ const html = result.html;
40
+ const preheaderText = result.design.body.values.preheaderText; // typed, email-only field
41
+ });
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
+
50
+ // Example of fully typed json manipulation
29
51
  function handleDesign(design: JSONTemplate) {
30
52
  for (const row of design.body.rows) {
31
53
  for (const column of row.columns) {
32
54
  for (const content of column.contents) {
33
55
  if (content.type === 'button') {
34
56
  // content.values type is narrowed to ButtonValues
35
- console.info(content.values.buttonColors);
57
+ console.info('Button found', content.id, content.values.buttonColors);
36
58
  }
37
59
  }
38
60
  }
@@ -40,24 +62,6 @@ function handleDesign(design: JSONTemplate) {
40
62
  }
41
63
  ```
42
64
 
43
- ### Display mode generics
44
-
45
- Export methods accept a display mode generic that narrows the design types:
46
-
47
- ```ts
48
- type EmailDesign = JSONTemplate<'email'>; // body.values has preheaderText
49
- type PopupDesign = JSONTemplate<'popup'>; // body.values has popupPosition
50
-
51
- type EmailBody = BodyValues<'email'>; // has preheaderText, lacks popupPosition
52
- type PopupBody = BodyValues<'popup'>; // has popupPosition, lacks preheaderText
53
-
54
- declare const unlayer: UnlayerEditor;
55
- unlayer.exportHtml<'email'>((result) => {
56
- const html = result.html;
57
- const preheaderText = result.design.body.values.preheaderText; // typed, email-only field
58
- });
59
- ```
60
-
61
65
  ## License
62
66
 
63
67
  MIT
@@ -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;
@@ -239,14 +239,14 @@ declare class EditorClass {
239
239
  setTextDirection(textDirection: TextDirection | null): void;
240
240
  setTranslations(translations: Translations): void;
241
241
  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;
242
+ loadDesign<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(design: JSONTemplate<TDisplayMode>): void;
243
+ saveDesign<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: JSONTemplate<TDisplayMode>) => void, options?: SaveDesignOptions): void;
244
+ exportHtml<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportHtmlResult<TDisplayMode>) => void, options?: ExportHtmlOptions): void;
245
+ exportLiveHtml<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportLiveHtmlResult<TDisplayMode>) => void, options?: ExportLiveHtmlOptions): void;
246
+ exportPlainText<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportPlainTextResult<TDisplayMode>) => void, options?: ExportPlainTextOptions): void;
247
+ exportImage<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportImageFromApiOptions): void;
248
+ exportPdf<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportPdfFromApiOptions): void;
249
+ exportZip<TDisplayMode extends DisplayMode | undefined = TClassDisplayMode>(callback: (data: ExportFromApiResult<TDisplayMode>) => void, options?: ExportZipFromApiOptions): void;
250
250
  setAppearance(appearance: DeepPartial<AppearanceConfig>): void;
251
251
  setTheme(theme: AppearanceConfig['theme']): void;
252
252
  setBodyValues(bodyValues: Partial<BodyValues>, bodyId?: number): void;
@@ -256,7 +256,7 @@ declare class EditorClass {
256
256
  showPreview(payload: {
257
257
  device?: Device;
258
258
  resolution?: number;
259
- }): void;
259
+ } | Device): void;
260
260
  hidePreview(): void;
261
261
  canUndo(callback: (result: boolean) => void): void;
262
262
  canRedo(callback: (result: boolean) => void): void;
@@ -284,11 +284,19 @@ declare class EditorClass {
284
284
  }
285
285
 
286
286
  declare class Embed extends EditorClass {
287
- createEditor(config: Config): EditorClass;
287
+ createEditor<TDisplayMode extends DisplayMode | undefined = undefined>(config: Config): EditorClass<TDisplayMode>;
288
288
  }
289
289
 
290
290
  declare const _default: Embed;
291
291
 
292
+ export type UnlayerEditor<TDisplayMode extends DisplayMode | undefined = undefined> = EditorClass<TDisplayMode>;
293
+
294
+ export type UnlayerEmbed<TDisplayMode extends DisplayMode | undefined = undefined> = Omit<Embed, keyof EditorClass> & EditorClass<TDisplayMode>;
295
+
296
+ export type UnlayerOptions<TDisplayMode extends DisplayMode | undefined = undefined> = Omit<Config, 'displayMode'> & {
297
+ displayMode?: TDisplayMode extends undefined ? DisplayMode : TDisplayMode;
298
+ };
299
+
292
300
  // ───────────────────────────────────────────────────────────────────────────
293
301
  // Other
294
302
  // ───────────────────────────────────────────────────────────────────────────
@@ -455,13 +463,3 @@ export interface WidgetConfig {
455
463
  mount: WidgetMountFn;
456
464
  render: WidgetRenderFn;
457
465
  }
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>;
@@ -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.1",
3
+ "version": "1.386.3",
4
4
  "license": "MIT",
5
5
  "private": false,
6
6
  "types": "./dist/index.d.ts",