@useinsider/guido 1.0.0-beta.f2fcf4d → 1.0.0-beta.f3dd8d9

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 (277) hide show
  1. package/README.md +535 -82
  2. package/dist/@types/generic.d.ts +13 -4
  3. package/dist/App.vue.d.ts +1 -1
  4. package/dist/_virtual/AddCustomFont.js +4 -0
  5. package/dist/_virtual/AiAssistantValueType.js +4 -0
  6. package/dist/_virtual/BackgroundColorBuiltInControl.js +4 -0
  7. package/dist/_virtual/BackgroundImageBuiltInControl.js +4 -0
  8. package/dist/_virtual/Block.js +4 -0
  9. package/dist/_virtual/BlockAttributes.js +4 -0
  10. package/dist/_virtual/BlockCompositionType.js +4 -0
  11. package/dist/_virtual/BlockPaddingsBuiltInControl.js +4 -0
  12. package/dist/_virtual/BlockRenderer.js +4 -0
  13. package/dist/_virtual/BlockType.js +4 -0
  14. package/dist/_virtual/BlocksPanel.js +4 -0
  15. package/dist/_virtual/BuiltInControl.js +4 -0
  16. package/dist/_virtual/BuiltInControlTypes.js +4 -0
  17. package/dist/_virtual/ButtonBorderBuiltInControl.js +4 -0
  18. package/dist/_virtual/ButtonColorBuiltInControl.js +4 -0
  19. package/dist/_virtual/ButtonFontColorBuiltInControl.js +4 -0
  20. package/dist/_virtual/ButtonInternalIndentsBuiltInControl.js +4 -0
  21. package/dist/_virtual/ButtonTextBuiltInControl.js +4 -0
  22. package/dist/_virtual/ContextAction.js +4 -0
  23. package/dist/_virtual/ContextActionType.js +4 -0
  24. package/dist/_virtual/Control.js +4 -0
  25. package/dist/_virtual/EditorStatePropertyType.js +4 -0
  26. package/dist/_virtual/Extension.js +4 -0
  27. package/dist/_virtual/ExtensionBuilder.js +4 -0
  28. package/dist/_virtual/FontFamilyBuiltInControl.js +4 -0
  29. package/dist/_virtual/LinkColorBuiltInControl.js +4 -0
  30. package/dist/_virtual/ModificationDescription.js +4 -0
  31. package/dist/_virtual/PanelPosition.js +4 -0
  32. package/dist/_virtual/PreviewDeviceMode.js +4 -0
  33. package/dist/_virtual/SettingsPanelRegistry.js +4 -0
  34. package/dist/_virtual/SettingsPanelTab.js +4 -0
  35. package/dist/_virtual/SettingsTab.js +4 -0
  36. package/dist/_virtual/StructureBorderBuiltInControl.js +4 -0
  37. package/dist/_virtual/StructurePaddingsBuiltInControl.js +4 -0
  38. package/dist/_virtual/TextColorBuiltInControl.js +4 -0
  39. package/dist/_virtual/TextLineSpacingBuiltInControl.js +4 -0
  40. package/dist/_virtual/TextSizeBuiltInControl.js +4 -0
  41. package/dist/_virtual/TextStyleBuiltInControl.js +4 -0
  42. package/dist/_virtual/UIElement.js +4 -0
  43. package/dist/_virtual/UIElementTagRegistry.js +4 -0
  44. package/dist/_virtual/UIElementType.js +4 -0
  45. package/dist/_virtual/UIElementsAttributes.js +4 -0
  46. package/dist/_virtual/index.js +5 -0
  47. package/dist/_virtual/index2.js +4 -0
  48. package/dist/components/Guido.vue.d.ts +22 -2
  49. package/dist/components/Guido.vue.js +7 -7
  50. package/dist/components/Guido.vue2.js +74 -15
  51. package/dist/components/organisms/design-preview/AmpErrorModal.vue.d.ts +16 -0
  52. package/dist/components/organisms/design-preview/AmpErrorModal.vue.js +21 -0
  53. package/dist/components/organisms/design-preview/AmpErrorModal.vue2.js +31 -0
  54. package/dist/components/organisms/design-preview/DesktopPreview.vue.d.ts +16 -0
  55. package/dist/components/organisms/design-preview/DesktopPreview.vue.js +22 -0
  56. package/dist/components/organisms/design-preview/DesktopPreview.vue2.js +29 -0
  57. package/dist/components/organisms/design-preview/EmailPreview.vue.d.ts +16 -0
  58. package/dist/components/organisms/design-preview/EmailPreview.vue.js +17 -0
  59. package/dist/components/organisms/design-preview/EmailPreview.vue2.js +33 -0
  60. package/dist/components/organisms/design-preview/EmailView.vue.d.ts +18 -0
  61. package/dist/components/organisms/design-preview/EmailView.vue.js +19 -0
  62. package/dist/components/organisms/design-preview/EmailView.vue2.js +24 -0
  63. package/dist/components/organisms/design-preview/InboxView.vue.d.ts +17 -0
  64. package/dist/components/organisms/design-preview/InboxView.vue.js +19 -0
  65. package/dist/components/organisms/design-preview/InboxView.vue2.js +23 -0
  66. package/dist/components/organisms/design-preview/MobilePreview.vue.d.ts +17 -0
  67. package/dist/components/organisms/design-preview/MobilePreview.vue.js +17 -0
  68. package/dist/components/organisms/design-preview/MobilePreview.vue2.js +23 -0
  69. package/dist/components/organisms/header/AmpToggle.vue.js +17 -0
  70. package/dist/components/organisms/header/AmpToggle.vue2.js +48 -0
  71. package/dist/components/organisms/header/HeaderWrapper.vue.d.ts +2 -0
  72. package/dist/components/organisms/{top-bar/Header.vue.js → header/HeaderWrapper.vue.js} +7 -7
  73. package/dist/components/organisms/header/HeaderWrapper.vue2.js +14 -0
  74. package/dist/components/organisms/header/LeftSlot.vue.d.ts +2 -0
  75. package/dist/components/organisms/header/LeftSlot.vue.js +17 -0
  76. package/dist/components/organisms/header/LeftSlot.vue2.js +15 -0
  77. package/dist/components/organisms/header/MiddleSlot.vue.d.ts +2 -0
  78. package/dist/components/organisms/header/MiddleSlot.vue.js +17 -0
  79. package/dist/components/organisms/header/MiddleSlot.vue2.js +26 -0
  80. package/dist/components/organisms/header/RightSlot.vue.d.ts +2 -0
  81. package/dist/components/organisms/header/RightSlot.vue.js +17 -0
  82. package/dist/components/organisms/header/RightSlot.vue2.js +35 -0
  83. package/dist/components/organisms/header/ViewOptions.vue.d.ts +2 -0
  84. package/dist/components/organisms/header/ViewOptions.vue.js +18 -0
  85. package/dist/components/organisms/header/ViewOptions.vue2.js +15 -0
  86. package/dist/components/organisms/header/version-history/RestoreButton.vue.d.ts +2 -0
  87. package/dist/components/organisms/header/version-history/RestoreButton.vue.js +19 -0
  88. package/dist/components/organisms/header/version-history/RestoreButton.vue2.js +14 -0
  89. package/dist/components/organisms/header/version-history/VersionHistory.vue.d.ts +14 -0
  90. package/dist/components/organisms/header/version-history/VersionHistory.vue.js +22 -0
  91. package/dist/components/organisms/header/version-history/VersionHistory.vue2.js +18 -0
  92. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue.d.ts +16 -0
  93. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue.js +18 -0
  94. package/dist/components/organisms/header/version-history/VersionHistoryItem.vue2.js +16 -0
  95. package/dist/components/organisms/header/version-history/ViewOptions.vue.d.ts +2 -0
  96. package/dist/components/organisms/header/version-history/ViewOptions.vue.js +18 -0
  97. package/dist/components/organisms/header/version-history/ViewOptions.vue2.js +23 -0
  98. package/dist/composables/useActionsApi.d.ts +5 -0
  99. package/dist/composables/useActionsApi.js +38 -0
  100. package/dist/composables/useCustomInterfaceAppearance.js +45 -9
  101. package/dist/composables/useDebounce.d.ts +4 -0
  102. package/dist/composables/useDebounce.js +12 -0
  103. package/dist/composables/useExport.d.ts +3 -0
  104. package/dist/composables/useExport.js +45 -0
  105. package/dist/composables/useGuidoActions.d.ts +46 -0
  106. package/dist/composables/useGuidoActions.js +37 -0
  107. package/dist/composables/useHtmlCompiler.d.ts +4 -0
  108. package/dist/composables/useHtmlCompiler.js +16 -0
  109. package/dist/composables/useHttp.js +84 -0
  110. package/dist/composables/useMobileGmailFit.d.ts +5 -0
  111. package/dist/composables/useMobileGmailFit.js +69 -0
  112. package/dist/composables/usePartner.d.ts +4 -0
  113. package/dist/composables/usePartner.js +16 -0
  114. package/dist/composables/usePreviewMode.d.ts +6 -0
  115. package/dist/composables/usePreviewMode.js +19 -0
  116. package/dist/composables/useProvideInject.d.ts +14 -0
  117. package/dist/composables/useProvideInject.js +17 -0
  118. package/dist/composables/useStripo.d.ts +2 -2
  119. package/dist/composables/useStripo.js +73 -50
  120. package/dist/composables/useToaster.d.ts +1 -0
  121. package/dist/composables/useToaster.js +37 -0
  122. package/dist/composables/useTranslations.d.ts +1 -3
  123. package/dist/composables/useTranslations.js +18 -0
  124. package/dist/composables/useVersionHistoryApi.d.ts +8 -0
  125. package/dist/composables/useVersionHistoryApi.js +53 -0
  126. package/dist/config/compiler/htmlCompilerRules.d.ts +2 -0
  127. package/dist/config/compiler/htmlCompilerRules.js +145 -0
  128. package/dist/config/compiler/outlookCompilerRules.d.ts +0 -0
  129. package/dist/enums/defaults.d.ts +4 -0
  130. package/dist/enums/defaults.js +8 -0
  131. package/dist/enums/displayConditions.d.ts +2 -0
  132. package/dist/enums/displayConditions.js +80 -0
  133. package/dist/enums/emailPreview.d.ts +3 -0
  134. package/dist/enums/emailPreview.js +6 -0
  135. package/dist/enums/gmailMobilePreview.d.ts +7 -0
  136. package/dist/enums/gmailMobilePreview.js +17 -0
  137. package/dist/extensions/DynamicContent/dynamic-content-modal.d.ts +6 -0
  138. package/dist/extensions/DynamicContent/dynamic-content-modal.js +27 -0
  139. package/dist/extensions/DynamicContent/dynamic-content.css.js +24 -0
  140. package/dist/extensions/DynamicContent/dynamic-content.d.ts +16 -0
  141. package/dist/extensions/DynamicContent/dynamic-content.js +63 -0
  142. package/dist/extensions/DynamicContent/extension.d.ts +2 -0
  143. package/dist/extensions/DynamicContent/extension.js +11 -0
  144. package/dist/guido.css +1 -1
  145. package/dist/guido.png +0 -0
  146. package/dist/inbox-mockup.svg +39 -0
  147. package/dist/library.d.ts +1 -0
  148. package/dist/mock/api/custom-fonts.d.ts +2 -0
  149. package/dist/mock/api/default-template.d.ts +2 -0
  150. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/Extension.js +51 -0
  151. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ExtensionBuilder.js +52 -0
  152. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/Block.js +41 -0
  153. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlockRenderer.js +18 -0
  154. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/BlocksPanel.js +32 -0
  155. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/blocks/ContextAction.js +18 -0
  156. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AddCustomFont.js +8 -0
  157. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/AiAssistantValueType.js +13 -0
  158. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockAttributes.js +34 -0
  159. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockCompositionType.js +13 -0
  160. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BlockType.js +13 -0
  161. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/BuiltInControlTypes.js +104 -0
  162. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/ContextActionType.js +13 -0
  163. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/EditorStatePropertyType.js +13 -0
  164. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PanelPosition.js +13 -0
  165. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/PreviewDeviceMode.js +13 -0
  166. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/SettingsTab.js +13 -0
  167. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementType.js +13 -0
  168. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/constants/UIElementsAttributes.js +45 -0
  169. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundColorBuiltInControl.js +43 -0
  170. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BackgroundImageBuiltInControl.js +46 -0
  171. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BlockPaddingsBuiltInControl.js +44 -0
  172. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/BuiltInControl.js +22 -0
  173. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonBorderBuiltInControl.js +46 -0
  174. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonColorBuiltInControl.js +46 -0
  175. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonFontColorBuiltInControl.js +45 -0
  176. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonInternalIndentsBuiltInControl.js +45 -0
  177. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/ButtonTextBuiltInControl.js +45 -0
  178. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/Control.js +20 -0
  179. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/FontFamilyBuiltInControl.js +43 -0
  180. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/LinkColorBuiltInControl.js +45 -0
  181. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelRegistry.js +18 -0
  182. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/SettingsPanelTab.js +32 -0
  183. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructureBorderBuiltInControl.js +46 -0
  184. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/StructurePaddingsBuiltInControl.js +44 -0
  185. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextColorBuiltInControl.js +43 -0
  186. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextLineSpacingBuiltInControl.js +43 -0
  187. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextSizeBuiltInControl.js +45 -0
  188. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/controls/TextStyleBuiltInControl.js +43 -0
  189. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/index.js +266 -0
  190. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/modifications/ModificationDescription.js +26 -0
  191. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElement.js +22 -0
  192. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/ui-elements/UIElementTagRegistry.js +18 -0
  193. package/dist/node_modules/lodash-es/_Hash.js +20 -0
  194. package/dist/node_modules/lodash-es/_ListCache.js +20 -0
  195. package/dist/node_modules/lodash-es/_Map.js +6 -0
  196. package/dist/node_modules/lodash-es/_MapCache.js +20 -0
  197. package/dist/node_modules/lodash-es/_Symbol.js +5 -0
  198. package/dist/node_modules/lodash-es/_assocIndexOf.js +10 -0
  199. package/dist/node_modules/lodash-es/_baseGetTag.js +10 -0
  200. package/dist/node_modules/lodash-es/_baseIsNative.js +16 -0
  201. package/dist/node_modules/lodash-es/_coreJsData.js +5 -0
  202. package/dist/node_modules/lodash-es/_freeGlobal.js +4 -0
  203. package/dist/node_modules/lodash-es/_getMapData.js +8 -0
  204. package/dist/node_modules/lodash-es/_getNative.js +9 -0
  205. package/dist/node_modules/lodash-es/_getRawTag.js +15 -0
  206. package/dist/node_modules/lodash-es/_getValue.js +6 -0
  207. package/dist/node_modules/lodash-es/_hashClear.js +7 -0
  208. package/dist/node_modules/lodash-es/_hashDelete.js +7 -0
  209. package/dist/node_modules/lodash-es/_hashGet.js +13 -0
  210. package/dist/node_modules/lodash-es/_hashHas.js +9 -0
  211. package/dist/node_modules/lodash-es/_hashSet.js +9 -0
  212. package/dist/node_modules/lodash-es/_isKeyable.js +7 -0
  213. package/dist/node_modules/lodash-es/_isMasked.js +11 -0
  214. package/dist/node_modules/lodash-es/_listCacheClear.js +6 -0
  215. package/dist/node_modules/lodash-es/_listCacheDelete.js +12 -0
  216. package/dist/node_modules/lodash-es/_listCacheGet.js +8 -0
  217. package/dist/node_modules/lodash-es/_listCacheHas.js +7 -0
  218. package/dist/node_modules/lodash-es/_listCacheSet.js +8 -0
  219. package/dist/node_modules/lodash-es/_mapCacheClear.js +13 -0
  220. package/dist/node_modules/lodash-es/_mapCacheDelete.js +8 -0
  221. package/dist/node_modules/lodash-es/_mapCacheGet.js +7 -0
  222. package/dist/node_modules/lodash-es/_mapCacheHas.js +7 -0
  223. package/dist/node_modules/lodash-es/_mapCacheSet.js +8 -0
  224. package/dist/node_modules/lodash-es/_nativeCreate.js +5 -0
  225. package/dist/node_modules/lodash-es/_objectToString.js +7 -0
  226. package/dist/node_modules/lodash-es/_root.js +5 -0
  227. package/dist/node_modules/lodash-es/_toSource.js +17 -0
  228. package/dist/node_modules/lodash-es/eq.js +6 -0
  229. package/dist/node_modules/lodash-es/isFunction.js +12 -0
  230. package/dist/node_modules/lodash-es/isObject.js +7 -0
  231. package/dist/node_modules/lodash-es/memoize.js +18 -0
  232. package/dist/phone-mockup.svg +31 -0
  233. package/dist/services/stripoApi.d.ts +8 -0
  234. package/dist/services/stripoApi.js +49 -0
  235. package/dist/static/styles/base.css.js +11 -0
  236. package/dist/static/styles/components/alert-message.css.js +39 -0
  237. package/dist/static/styles/components/amp-block.css.js +18 -0
  238. package/dist/static/styles/components/base-input.css.js +47 -0
  239. package/dist/static/styles/components/button-group.css.js +54 -0
  240. package/dist/static/styles/components/button.css.js +106 -0
  241. package/dist/static/styles/components/combobox.css.js +49 -0
  242. package/dist/static/styles/components/counter.css.js +42 -0
  243. package/dist/static/styles/components/dropdown-menu.css.js +52 -0
  244. package/dist/static/styles/components/narrow-panel.css.js +38 -0
  245. package/dist/static/styles/components/switcher.css.js +11 -0
  246. package/dist/static/styles/components/tabs.css.js +97 -0
  247. package/dist/static/styles/components/tools.css.js +23 -0
  248. package/dist/static/styles/components/version-history.css.js +30 -0
  249. package/dist/static/styles/components/wide-panel.css.js +135 -0
  250. package/dist/static/styles/variables.css.js +23 -0
  251. package/dist/stores/editor.d.ts +9 -0
  252. package/dist/stores/editor.js +15 -0
  253. package/dist/stores/version-history.d.ts +80 -0
  254. package/dist/stores/version-history.js +28 -0
  255. package/dist/utils/dateUtil.d.ts +1 -0
  256. package/dist/utils/dateUtil.js +16 -0
  257. package/dist/utils/htmlCompiler.d.ts +12 -0
  258. package/dist/utils/htmlCompiler.js +70 -0
  259. package/package.json +6 -5
  260. package/dist/components/organisms/top-bar/Header.vue2.js +0 -14
  261. package/dist/components/organisms/top-bar/HeaderLeftSlot.vue.d.ts +0 -2
  262. package/dist/components/organisms/top-bar/HeaderLeftSlot.vue.js +0 -17
  263. package/dist/components/organisms/top-bar/HeaderLeftSlot.vue2.js +0 -11
  264. package/dist/components/organisms/top-bar/HeaderMiddleSlot.vue.d.ts +0 -2
  265. package/dist/components/organisms/top-bar/HeaderMiddleSlot.vue.js +0 -17
  266. package/dist/components/organisms/top-bar/HeaderMiddleSlot.vue2.js +0 -11
  267. package/dist/components/organisms/top-bar/HeaderRightSlot.vue.d.ts +0 -2
  268. package/dist/components/organisms/top-bar/HeaderRightSlot.vue.js +0 -18
  269. package/dist/components/organisms/top-bar/HeaderRightSlot.vue2.js +0 -14
  270. package/dist/composables/useTemplates.d.ts +0 -5
  271. package/dist/composables/useTemplates.js +0 -27
  272. package/dist/enums/defaults.enum.d.ts +0 -18
  273. package/dist/static/editor.css.js +0 -182
  274. package/dist/static/templates/default/index.html.js +0 -5
  275. package/dist/static/templates/default/style.css.js +0 -119
  276. package/dist/stores/counter.d.ts +0 -12
  277. /package/dist/components/organisms/{top-bar/Header.vue.d.ts → header/AmpToggle.vue.d.ts} +0 -0
@@ -0,0 +1,80 @@
1
+ import type { VersionHistoryState } from '@@/Types/version-history-api';
2
+ export interface StoreState extends VersionHistoryState {
3
+ editorVisualMode: 'desktop' | 'mobile';
4
+ }
5
+ export declare const useVersionHistoryStore: import("pinia").StoreDefinition<"versionHistory", StoreState, {
6
+ hasPreviousPatch: (state: {
7
+ editorVisualMode: "desktop" | "mobile";
8
+ previousPatch: {
9
+ id: string;
10
+ date: number;
11
+ description: string;
12
+ authorId: string;
13
+ authorName: string;
14
+ };
15
+ currentPatch: {
16
+ id: string;
17
+ date: number;
18
+ description: string;
19
+ authorId: string;
20
+ authorName: string;
21
+ };
22
+ nextPatch: {
23
+ id: string;
24
+ date: number;
25
+ description: string;
26
+ authorId: string;
27
+ authorName: string;
28
+ };
29
+ } & import("pinia").PiniaCustomStateProperties<StoreState>) => boolean;
30
+ hasCurrentPatch: (state: {
31
+ editorVisualMode: "desktop" | "mobile";
32
+ previousPatch: {
33
+ id: string;
34
+ date: number;
35
+ description: string;
36
+ authorId: string;
37
+ authorName: string;
38
+ };
39
+ currentPatch: {
40
+ id: string;
41
+ date: number;
42
+ description: string;
43
+ authorId: string;
44
+ authorName: string;
45
+ };
46
+ nextPatch: {
47
+ id: string;
48
+ date: number;
49
+ description: string;
50
+ authorId: string;
51
+ authorName: string;
52
+ };
53
+ } & import("pinia").PiniaCustomStateProperties<StoreState>) => boolean;
54
+ hasNextPatch: (state: {
55
+ editorVisualMode: "desktop" | "mobile";
56
+ previousPatch: {
57
+ id: string;
58
+ date: number;
59
+ description: string;
60
+ authorId: string;
61
+ authorName: string;
62
+ };
63
+ currentPatch: {
64
+ id: string;
65
+ date: number;
66
+ description: string;
67
+ authorId: string;
68
+ authorName: string;
69
+ };
70
+ nextPatch: {
71
+ id: string;
72
+ date: number;
73
+ description: string;
74
+ authorId: string;
75
+ authorName: string;
76
+ };
77
+ } & import("pinia").PiniaCustomStateProperties<StoreState>) => boolean;
78
+ }, {
79
+ updateState(state: VersionHistoryState): void;
80
+ }>;
@@ -0,0 +1,28 @@
1
+ import { defineStore as a } from "pinia";
2
+ const e = () => ({
3
+ id: "",
4
+ date: 0,
5
+ description: "",
6
+ authorId: "",
7
+ authorName: ""
8
+ }), r = () => ({
9
+ previousPatch: e(),
10
+ currentPatch: e(),
11
+ nextPatch: e(),
12
+ editorVisualMode: "desktop"
13
+ }), o = a("versionHistory", {
14
+ state: () => r(),
15
+ getters: {
16
+ hasPreviousPatch: (t) => !!t.previousPatch.id,
17
+ hasCurrentPatch: (t) => !!t.currentPatch.id,
18
+ hasNextPatch: (t) => !!t.nextPatch.id
19
+ },
20
+ actions: {
21
+ updateState(t) {
22
+ t.previousPatch && (this.previousPatch = t.previousPatch), t.currentPatch && (this.currentPatch = t.currentPatch), t.nextPatch && (this.nextPatch = t.nextPatch);
23
+ }
24
+ }
25
+ });
26
+ export {
27
+ o as useVersionHistoryStore
28
+ };
@@ -0,0 +1 @@
1
+ export declare const formatPatchDate: (timestamp: number) => string;
@@ -0,0 +1,16 @@
1
+ const o = (t) => {
2
+ if (!t)
3
+ return "";
4
+ const e = new Date(t);
5
+ return new Intl.DateTimeFormat("en-US", {
6
+ month: "short",
7
+ day: "numeric",
8
+ hour: "2-digit",
9
+ minute: "2-digit",
10
+ second: "2-digit",
11
+ hour12: !1
12
+ }).format(e);
13
+ };
14
+ export {
15
+ o as formatPatchDate
16
+ };
@@ -0,0 +1,12 @@
1
+ import type { CompilerRule, CompilationResult, HtmlCompiler } from '@@/Types/html-compiler';
2
+ export declare class HtmlCompilerEngine implements HtmlCompiler {
3
+ private rules;
4
+ constructor(rules?: CompilerRule[]);
5
+ compile(html: string, rules?: CompilerRule[]): CompilationResult;
6
+ private applyRule;
7
+ private applyReplaceRule;
8
+ private applyRegexRule;
9
+ private applyRemoveRule;
10
+ private applyCustomRule;
11
+ }
12
+ export declare const createHtmlCompiler: (rules?: CompilerRule[]) => HtmlCompiler;
@@ -0,0 +1,70 @@
1
+ var y = Object.defineProperty;
2
+ var g = (p, e, r) => e in p ? y(p, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : p[e] = r;
3
+ var u = (p, e, r) => g(p, typeof e != "symbol" ? e + "" : e, r);
4
+ import { useToaster as m } from "../composables/useToaster.js";
5
+ class d {
6
+ constructor(e = []) {
7
+ u(this, "rules");
8
+ this.rules = e;
9
+ }
10
+ compile(e, r) {
11
+ const l = performance.now(), t = e, o = e.length;
12
+ let s = e;
13
+ const a = [];
14
+ (r || this.rules).sort((n, c) => n.priority - c.priority).forEach((n) => {
15
+ const c = s.length;
16
+ s = this.applyRule(s, n), s.length !== c && a.push(n.id);
17
+ });
18
+ const i = s.length, R = o > 0 ? (o - i) / o * 100 : 0;
19
+ return {
20
+ originalHtml: t,
21
+ compiledHtml: s,
22
+ appliedRules: a,
23
+ // TODO: We can use stats for monitoring in the future
24
+ stats: {
25
+ originalSize: o,
26
+ compiledSize: i,
27
+ reductionPercentage: R,
28
+ executionTime: performance.now() - l
29
+ }
30
+ };
31
+ }
32
+ applyRule(e, r) {
33
+ try {
34
+ switch (r.type) {
35
+ case "replace":
36
+ return this.applyReplaceRule(e, r);
37
+ case "regex":
38
+ return this.applyRegexRule(e, r);
39
+ case "remove":
40
+ return this.applyRemoveRule(e, r);
41
+ case "custom":
42
+ return this.applyCustomRule(e, r);
43
+ default:
44
+ return e;
45
+ }
46
+ } catch (l) {
47
+ const { handleError: t } = m();
48
+ return t(l, `Failed to apply rule ${r.id}:`), e;
49
+ }
50
+ }
51
+ applyReplaceRule(e, r) {
52
+ const { search: l, replacement: t, replaceAll: o = !0 } = r;
53
+ return o ? e.replaceAll(l, t) : e.replace(l, t);
54
+ }
55
+ applyRegexRule(e, r) {
56
+ const { pattern: l, replacement: t, flags: o = "g" } = r, s = new RegExp(l, o);
57
+ return e.replace(s, t);
58
+ }
59
+ applyRemoveRule(e, r) {
60
+ return r.targets.reduce((l, t) => t instanceof RegExp ? l.replace(t, "") : l.replaceAll(t, ""), e);
61
+ }
62
+ applyCustomRule(e, r) {
63
+ return r.processor(e);
64
+ }
65
+ }
66
+ const A = (p = []) => new d(p);
67
+ export {
68
+ d as HtmlCompilerEngine,
69
+ A as createHtmlCompiler
70
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "1.0.0-beta.f2fcf4d",
3
+ "version": "1.0.0-beta.f3dd8d9",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -10,9 +10,9 @@
10
10
  ],
11
11
  "exports": {
12
12
  ".": {
13
- "import": "./dist/library.js",
14
- "types": "./dist/components/Guido.vue.d.ts",
15
- "require": "./dist/components/Guido.vue.js"
13
+ "import": "./dist/library.js",
14
+ "types": "./dist/components/Guido.vue.d.ts",
15
+ "require": "./dist/components/Guido.vue.js"
16
16
  },
17
17
  "./style": "./dist/guido.css"
18
18
  },
@@ -21,7 +21,6 @@
21
21
  "start": "vite",
22
22
  "build": "vite build && vue-tsc --declaration --emitDeclarationOnly --project tsconfig.app.json",
23
23
  "preview": "vite preview",
24
- "test": "echo \"Error: no test specified\" && exit 1",
25
24
  "lint": "NODE_OPTIONS=--max-old-space-size=2048 eslint ./ && bun run type-check",
26
25
  "lint:fix": "NODE_OPTIONS=--max-old-space-size=2048 eslint --fix ./",
27
26
  "type-check": "vue-tsc --noEmit --project tsconfig.config.json && vue-tsc --noEmit --project tsconfig.app.json"
@@ -30,6 +29,7 @@
30
29
  "author": "",
31
30
  "license": "ISC",
32
31
  "dependencies": {
32
+ "@stripoinc/ui-editor-extensions": "^1.0.6",
33
33
  "@useinsider/design-system-vue": "0.14.8",
34
34
  "@vuelidate/core": "2.0.3",
35
35
  "@vuelidate/validators": "2.0.4",
@@ -42,6 +42,7 @@
42
42
  "@cspell/eslint-plugin": "8.17.5",
43
43
  "@eslint/eslintrc": "3.3.0",
44
44
  "@eslint/js": "8.57.1",
45
+ "@playwright/test": "^1.54.2",
45
46
  "@stylistic/eslint-plugin": "3.1.0",
46
47
  "@stylistic/eslint-plugin-migrate": "3.1.0",
47
48
  "@types/eslint": "8.56.12",
@@ -1,14 +0,0 @@
1
- import { defineComponent as e } from "vue";
2
- import { InContainer as r } from "@useinsider/design-system-vue";
3
- import o from "./HeaderLeftSlot.vue.js";
4
- import t from "./HeaderMiddleSlot.vue.js";
5
- import m from "./HeaderRightSlot.vue.js";
6
- const _ = /* @__PURE__ */ e({
7
- __name: "Header",
8
- setup(f) {
9
- return { __sfc: !0, InContainer: r, HeaderLeftSlot: o, HeaderMiddleSlot: t, HeaderRightSlot: m };
10
- }
11
- });
12
- export {
13
- _ as default
14
- };
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
- export default _default;
@@ -1,17 +0,0 @@
1
- import n from "./HeaderLeftSlot.vue2.js";
2
- import o from "../../../_virtual/_plugin-vue2_normalizer.js";
3
- var _ = function() {
4
- var t = this, e = t._self._c, r = t._self._setupProxy;
5
- return e("div", [e(r.InButtonV2, { attrs: { id: "guido__back-button", "label-text": "Back", "left-icon": "line-arrow-left", styling: "text", type: "secondary" } })], 1);
6
- }, a = [], s = /* @__PURE__ */ o(
7
- n,
8
- _,
9
- a,
10
- !1,
11
- null,
12
- null
13
- );
14
- const i = s.exports;
15
- export {
16
- i as default
17
- };
@@ -1,11 +0,0 @@
1
- import { defineComponent as t } from "vue";
2
- import { InButtonV2 as e } from "@useinsider/design-system-vue";
3
- const _ = /* @__PURE__ */ t({
4
- __name: "HeaderLeftSlot",
5
- setup(o) {
6
- return { __sfc: !0, InButtonV2: e };
7
- }
8
- });
9
- export {
10
- _ as default
11
- };
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
- export default _default;
@@ -1,17 +0,0 @@
1
- import o from "./HeaderMiddleSlot.vue2.js";
2
- import s from "../../../_virtual/_plugin-vue2_normalizer.js";
3
- var l = function() {
4
- var n = this, t = n._self._c, e = n._self._setupProxy;
5
- return t("div", { staticClass: "d-f" }, [t(e.InButtonV2, { attrs: { id: "guido__undo-button", "left-icon": "line-undo", styling: "ghost", type: "secondary", "label-text-status": !1 } }), t(e.InButtonV2, { attrs: { id: "guido__redo-button", "left-icon": "line-redo", styling: "ghost", type: "secondary", "label-text-status": !1 } }), t(e.InButtonV2, { attrs: { id: "guido__code-button", "left-icon": "line-code", styling: "ghost", type: "secondary", "label-text-status": !1 } }), t(e.InButtonV2, { attrs: { id: "guido__preview-button", "left-icon": "line-show-on", styling: "ghost", type: "secondary", "label-text-status": !1 } })], 1);
6
- }, a = [], i = /* @__PURE__ */ s(
7
- o,
8
- l,
9
- a,
10
- !1,
11
- null,
12
- null
13
- );
14
- const _ = i.exports;
15
- export {
16
- _ as default
17
- };
@@ -1,11 +0,0 @@
1
- import { defineComponent as e } from "vue";
2
- import { InButtonV2 as t } from "@useinsider/design-system-vue";
3
- const _ = /* @__PURE__ */ e({
4
- __name: "HeaderMiddleSlot",
5
- setup(o) {
6
- return { __sfc: !0, InButtonV2: t };
7
- }
8
- });
9
- export {
10
- _ as default
11
- };
@@ -1,2 +0,0 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options").ComponentOptionsMixin, import("vue/types/v3-component-options").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
- export default _default;
@@ -1,18 +0,0 @@
1
- import n from "./HeaderRightSlot.vue2.js";
2
- /* empty css */
3
- import o from "../../../_virtual/_plugin-vue2_normalizer.js";
4
- var a = function() {
5
- var s = this, t = s._self._c, e = s._self._setupProxy;
6
- return t("div", { staticClass: "d-f header-right-slot" }, [t("div", { staticClass: "d-f" }, [t(e.InSegments, { attrs: { id: "preview-platform-selection", "with-icon": "", selected: "desktop", "segment-list": e.segmentList } })], 1), t("div", { staticClass: "d-f" }, [t(e.InButtonV2, { attrs: { id: "guido__history-button", "left-icon": "line-architect-version-history", styling: "ghost", type: "secondary", "label-text-status": !1 } }), t(e.InButtonV2, { attrs: { id: "guido__export-button", "left-icon": "line-export", styling: "ghost", type: "secondary", "label-text-status": !1 } }), t(e.InButtonV2, { attrs: { id: "guido__save-as-button", "left-icon": "line-newsletter-save-as-template", styling: "ghost", type: "secondary", "label-text-status": !1 } }), t(e.InButtonV2, { attrs: { id: "guido__test-button", "left-icon": "line-architect-test-journey", styling: "ghost", type: "secondary", "label-text-status": !1 } })], 1), t(e.InButtonV2, { attrs: { id: "guido__save-button", "label-text": "Save" } })], 1);
7
- }, i = [], l = /* @__PURE__ */ o(
8
- n,
9
- a,
10
- i,
11
- !1,
12
- null,
13
- "9d879f6f"
14
- );
15
- const u = l.exports;
16
- export {
17
- u as default
18
- };
@@ -1,14 +0,0 @@
1
- import { defineComponent as e } from "vue";
2
- import { InSegments as t, InButtonV2 as n } from "@useinsider/design-system-vue";
3
- const p = /* @__PURE__ */ e({
4
- __name: "HeaderRightSlot",
5
- setup(o) {
6
- return { __sfc: !0, segmentList: [
7
- { text: "", icon: "line-desktop", value: "desktop" },
8
- { text: "", icon: "line-menu-mobileapp", value: "mobile" }
9
- ], InButtonV2: n, InSegments: t };
10
- }
11
- });
12
- export {
13
- p as default
14
- };
@@ -1,5 +0,0 @@
1
- import type { Template } from '@@types/stripo';
2
- export declare const useTemplates: () => {
3
- getDefaultTemplate: () => Promise<Template>;
4
- getTemplate: (templateName: string) => Promise<Template>;
5
- };
@@ -1,27 +0,0 @@
1
- const s = () => {
2
- const t = async () => {
3
- const [e, a] = await Promise.all([
4
- // eslint-disable-next-line import/extensions
5
- import("../static/templates/default/index.html.js"),
6
- import("../static/templates/default/style.css.js")
7
- ]);
8
- return {
9
- html: e.default,
10
- css: a.default
11
- };
12
- };
13
- return {
14
- getDefaultTemplate: t,
15
- getTemplate: async (e) => {
16
- switch (e) {
17
- case "default":
18
- return t();
19
- default:
20
- return t();
21
- }
22
- }
23
- };
24
- };
25
- export {
26
- s as useTemplates
27
- };
@@ -1,18 +0,0 @@
1
- export declare const DefaultApiEndpoints: {
2
- dynamicContent: string;
3
- unsubPages: string;
4
- header: string;
5
- footer: string;
6
- productName: string;
7
- productVersion: string;
8
- token: string;
9
- };
10
- export declare const DefaultExtensions: {
11
- dynamicContent: boolean;
12
- unsubPages: boolean;
13
- header: boolean;
14
- footer: boolean;
15
- };
16
- export declare const DefaultConfig: {
17
- translationsPath: string;
18
- };
@@ -1,182 +0,0 @@
1
- const n = `:host {
2
- --guido-primary-color: #0a2ecc;
3
- }
4
-
5
- .label {
6
- font-size: 13px;
7
- color: #292929;
8
- }
9
-
10
- .stacked-panel-title {
11
- font-size: 18px;
12
- font-weight: 600;
13
- color: #2c3546
14
- }
15
-
16
- .stacked-panel-item {
17
- border-radius: 4px;
18
- border: 1px solid #dcdfe6;
19
- box-shadow: 0 0 0 0 #e1e1e1,0 15px 35px -5px rgba(0, 0, 0, .1),0 8px 10px -6px rgba(0, 0, 0, .1)
20
- }
21
-
22
- /** SEGMENT BUTTON */
23
- ue-switcher input {
24
- border-radius: 26px;
25
- }
26
-
27
- ue-switcher input:before {
28
- border-radius: 22px;
29
- }
30
-
31
- .tabs-header {
32
- padding: 0;
33
- column-gap: 0;
34
- background-color: transparent;
35
- }
36
-
37
- .tabs-header button {
38
- background-color: #f7f9fa;
39
- outline: none;
40
- padding: 8px 16px;
41
- border: 1px solid #dcdee6;
42
- height: 42px;
43
- }
44
-
45
- .tabs-header button ue-icon-component.icon-button {
46
- color: #2c3546;
47
- }
48
-
49
- .tabs-header button:not(:last-child),
50
- .tabs-header button:not(:first-child) {
51
- border-radius: 0;
52
- }
53
-
54
- .tabs-header button:first-child {
55
- border-radius: 4px 0 0 4px;
56
- }
57
-
58
- .tabs-header button:last-child {
59
- border-radius: 0 4px 4px 0;
60
- }
61
-
62
- .tabs-header button.checked {
63
- background-color: #c2ddff;
64
- color: var(--guido-primary-color);
65
- border-color: var(--guido-primary-color);
66
- }
67
-
68
- .tabs-header button.checked ue-icon-component.icon-button {
69
- color: var(--guido-primary-color);
70
- }
71
- /** SEGMENT BUTTON */
72
-
73
- /** BUTTON */
74
- .button:not(:disabled,.disabled):active {
75
- transform: none !important;
76
- }
77
- /** BUTTON */
78
-
79
- /** BUTTON GROUP */
80
- .button-group {
81
- padding: 0;
82
- column-gap: 0;
83
- border-radius: 0;
84
- background-color: transparent;
85
- }
86
-
87
- .button-group .button {
88
- background-color: #f7f9fa;
89
- outline: none;
90
- padding: 8px 12px;
91
- border: 1px solid #dcdee6;
92
- box-shadow: none;
93
- height: 42px;
94
- }
95
-
96
- .button-group .button ue-icon-component.icon-button {
97
- color: #2c3546;
98
- }
99
-
100
- .button-group > div:first-of-type .button {
101
- border-radius: 4px 0 0 4px;
102
- }
103
-
104
- .button-group > *:last-child .button {
105
- border-radius: 0 4px 4px 0;
106
- }
107
-
108
- ue-check-buttons input:checked + .button,
109
- ue-radio-buttons input:checked + .button {
110
- background-color: #c2ddff;
111
- color: var(--guido-primary-color);
112
- border-color: var(--guido-primary-color);
113
- }
114
-
115
- ue-check-buttons input:checked + .button ue-icon-component.icon-button,
116
- ue-radio-buttons input:checked + .button ue-icon-component.icon-button {
117
- color: var(--guido-primary-color);
118
- }
119
- /** BUTTON GROUP */
120
-
121
- /** COMBOBOX */
122
- .control-shadow-wrapper:has(.button[role="combobox"]) {
123
- border-radius: 0;
124
- padding: 0;
125
- background: transparent;
126
- }
127
-
128
- .button[role="combobox"] {
129
- background-color: #f9f9f9;
130
- border: 1px solid #e1e1e1;
131
- border-radius: 4px;
132
- box-shadow: none;
133
- min-height: 42px;
134
- padding: 8px;
135
- color: #292929;
136
- text-align: left;
137
- outline: none;
138
- white-space: nowrap;
139
- text-overflow: ellipsis;
140
- overflow: hidden;
141
- }
142
-
143
- .button[role="combobox"].on {
144
- background-color: #f9f9f9;
145
- border-color: var(--guido-primary-color);
146
- box-shadow: 0 0 0 3px #b5c1f1 !important;
147
- }
148
- /** COMBOBOX */
149
-
150
- /** BASE INPUT */
151
- .base-input {
152
- border: 1px solid #e1e1e1;
153
- border-radius: 4px;
154
- background-color: #f9f9f9;
155
- align-items: center;
156
- height: 42px;
157
- max-height: 42px;
158
- box-sizing: content-box;
159
- outline: none;
160
- resize: vertical;
161
- padding: 8px;
162
- transition: none !important;
163
- color: #292929;
164
- box-shadow: none !important;
165
- box-sizing: border-box !important;
166
- }
167
-
168
- .base-input:hover:not(:disabled) {
169
- background-color: #f9f9f9;
170
- border-color: #7a92f2;
171
- }
172
-
173
- .base-input:focus:not(:disabled) {
174
- background-color: #f9f9f9;
175
- border-color: #0a2ecc;
176
- box-shadow: 0 0 0 3px #b5c1f1 !important;
177
- }
178
- /** BASE INPUT */
179
- `;
180
- export {
181
- n as default
182
- };
@@ -1,5 +0,0 @@
1
- const t = `<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><meta charset="UTF-8"><meta content="width=device-width, initial-scale=1" name="viewport"><meta name="x-apple-disable-message-reformatting"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta content="telephone=no" name="format-detection"><title></title><!--[if (mso 16)]><style type="text/css">a{text-decoration:none;}</style><![endif]--><!--[if gte mso 9]><style>sup{font-size:100% !important;}</style><![endif]--><!--[if gte mso 9]><noscript><xml><o:OfficeDocumentSettings><o:AllowPNG></o:AllowPNG><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml></noscript><![endif]--><!--[if mso]><xml><w:WordDocument xmlns:w="urn:schemas-microsoft-com:office:word"><w:DontUseAdvancedTypographyReadingMail></w:DontUseAdvancedTypographyReadingMail></w:WordDocument></xml><![endif]--></head><body><div class="es-wrapper-color"> <!--[if gte mso 9]> <v:background xmlns:v="urn:schemas-microsoft-com:vml" fill="t"> <v:fill type="tile" color="#f6f6f6"></v:fill> </v:background> <![endif]--><table class="es-wrapper" width="100%" cellspacing="0" cellpadding="0"><tbody><tr><td class="esd-email-paddings" valign="top"><table class="es-content esd-header-popover" cellspacing="0" cellpadding="0" align="center"><tbody><tr><td class="esd-stripe" align="center"><table class="es-content-body" width="600" cellspacing="0" cellpadding="0" bgcolor="#ffffff" align="center"><tbody><tr><td class="esd-structure es-p20" align="left" bgcolor="#91949F" style="background-color: #91949f;"><table width="100%" cellspacing="0" cellpadding="0"><tbody><tr><td class="esd-container-frame" width="560" valign="top" align="center"><table width="100%" cellspacing="0" cellpadding="0"><tbody><tr><td align="center" class="esd-block-image es-p15" style="font-size: 0px;"><a target="_blank"><img class="adapt-img" src="https://web-image.useinsider.com/email-template/logo.png" alt style="display: block;" height="30"></a></td></tr><tr><td class="esd-block-text" align="center"><h2 style="color: #ffffff; font-size: 30px;"><strong>Time for great email design</strong></h2></td></tr><tr><td class="esd-block-text es-m-txt-c es-p10t" align="center"><p style="color: #ffffff;">I'm a new text block ready for your message content.</p></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table><table class="es-content" cellspacing="0" cellpadding="0" align="center"><tbody><tr><td class="esd-stripe" align="center"><table class="es-content-body" width="600" cellspacing="0" cellpadding="0" bgcolor="#ffffff" align="center"><tbody><tr><td class="esd-structure es-p30t es-p20b es-p20r es-p20l" align="left" bgcolor="#F9F9F9" style="background-color: #f9f9f9;"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td width="560" class="esd-container-frame" align="center" valign="top"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="center" class="esd-block-image es-p30t es-p20r" style="font-size: 0px;"><a target="_blank"><img class="adapt-img" src="https://web-image.useinsider.com/email-template/image-placeholder.png" alt style="display: block;" width="138"></a></td></tr><tr><td align="center" class="esd-block-text es-p10t es-p40b"><p style="color: #c5c6cc;">Image Placeholder</p></td></tr></tbody></table></td></tr></tbody></table></td></tr><tr><td class="esd-structure es-p20t es-p20r es-p20l" align="left"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td width="560" class="esd-container-frame" align="center" valign="top"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="center" class="esd-block-text"><p style="font-size: 24px; color: #2c3546;"><strong>This is a sample heading</strong><br></p></td></tr><tr><td align="center" class="esd-block-text"><p style="color: #2c3546;">I'm a new text block ready for your message content.</p></td></tr><tr><td align="center" class="esd-block-text"><p style="color: #959aa3; font-size: 10px;">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor<br> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud<br>&nbsp;exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table><table class="es-content esd-footer-popover" cellspacing="0" cellpadding="0" align="center"><tbody><tr></tr><tr><td class="esd-stripe" esd-custom-block-id="8631" align="center"><table class="es-footer-body" style="background-color: #ffffff;" width="600" cellspacing="0" cellpadding="0" align="center" bgcolor="#fff"><tbody><tr><td class="esd-structure es-p20t es-p15b es-p20r es-p20l" align="left"> <!--[if mso]><table width="560" cellpadding="0" cellspacing="0"><tr><td width="270" valign="top"><![endif]--><table cellpadding="0" cellspacing="0" class="es-left" align="left"><tbody><tr><td width="270" class="es-m-p20b esd-container-frame" align="left"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="right" class="esd-block-button"><span class="es-button-border" style="border-radius: 4px; border-color: #5d6980; background: #5d6980; border-width: 1px;"><a href class="es-button" target="_blank" style="color: #ffffff; background: #5d6980; border-color: #5d6980; border-radius: 4px; border-width: 10px 15px;"> Button </a></span></td></tr></tbody></table></td></tr></tbody></table> <!--[if mso]></td><td width="20"></td><td width="270" valign="top"><![endif]--><table cellpadding="0" cellspacing="0" class="es-right" align="right"><tbody><tr><td width="270" align="left" class="esd-container-frame"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="left" class="esd-block-button"><span class="es-button-border" style="border-radius: 4px; border-color: #5d6980; background: #ffffff; border-width: 1px;"><a href class="es-button" target="_blank" style="background: #ffffff; border-color: #ffffff; color: #5d6980; border-radius: 4px; border-width: 10px 15px;"> Button </a></span></td></tr></tbody></table></td></tr></tbody></table> <!--[if mso]></td></tr></table><![endif]--></td></tr><tr><td class="esd-structure es-p30t es-p35b es-p40r es-p40l" align="left" bgcolor="#F9F9F9" style="background-color: #f9f9f9;"> <!--[if mso]><table width="520" cellpadding="0" cellspacing="0"><tr><td width="257" valign="top"><![endif]--><table cellpadding="0" cellspacing="0" class="es-left" align="left"><tbody><tr><td width="257" class="es-m-p20b esd-container-frame" align="left"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="center" class="esd-block-image" style="font-size: 0px;"><a target="_blank"><img class="adapt-img" src="https://web-image.useinsider.com/email-template/image-placeholder.png" alt style="display: block;" width="96"></a></td></tr><tr><td align="center" class="esd-block-text"><p style="color: #c5c6cc;">Image Placeholder</p></td></tr></tbody></table></td></tr></tbody></table> <!--[if mso]></td><td width="0"></td><td width="263" valign="top"><![endif]--><table cellpadding="0" cellspacing="0" class="es-right" align="right"><tbody><tr><td width="263" align="left" class="esd-container-frame"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="center" class="esd-block-image" style="font-size: 0px;"><a target="_blank"><img class="adapt-img" src="https://web-image.useinsider.com/email-template/image-placeholder.png" alt style="display: block;" width="96"></a></td></tr><tr><td align="center" class="esd-block-text"><p style="color: #c5c6cc;">Image Placeholder</p></td></tr></tbody></table></td></tr></tbody></table> <!--[if mso]></td></tr></table><![endif]--></td></tr><tr><td class="esd-structure es-p20t es-p15b es-p20r es-p20l" align="left"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td width="560" class="esd-container-frame" align="center" valign="top"><table cellpadding="0" cellspacing="0" width="100%"><tbody><tr><td align="left" class="esd-block-text"><p>Text</p></td></tr></tbody></table></td></tr></tbody></table></td></tr><tr><td class="esd-structure es-p20t es-p20b es-p20r es-p20l" align="left" bgcolor="#2C3546" style="background-color: #2c3546;"><table width="100%" cellspacing="0" cellpadding="0"><tbody><tr><td class="esd-container-frame" width="560" valign="top" align="center"><table width="100%" cellspacing="0" cellpadding="0"><tbody><tr><td align="center" class="esd-block-social" style="font-size:0"><table cellpadding="0" cellspacing="0" class="es-table-not-adapt es-social"><tbody><tr><td align="center" valign="top" class="es-p20r" esd-tmp-icon-type="facebook"><a target="_blank" href="https://facebook.com"><img title="Facebook" src="https://web-image.useinsider.com/email-template/facebook.png" alt="Facebook" width="24" height="24"></a></td><td align="center" valign="top" class="es-p20r" esd-tmp-icon-type="twitter"><a target="_blank" href="https://instagram.com"><img title="Instagram" src="https://web-image.useinsider.com/email-template/instagram.png" alt="Instagram" width="24" height="24"></a></td><td align="center" valign="top" esd-tmp-icon-type="instagram"><a target="_blank" href="https://twitter.com"><img title="Twitter" src="https://web-image.useinsider.com/email-template/twitter.png" alt="Twitter" width="24" height="24"></a></td></tr></tbody></table></td></tr><tr><td align="center" class="esd-block-text es-p20"><p style="font-size: 10px;">ADDRESS LINE, PROVINCE, CITY, COUNTRY - 999999</p></td></tr><tr><td align="center" class="esd-block-text"><p style="color: #959aa2; font-size: 10px;">You can <u>unsubscribe</u> from our emails, if you need to.</p></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></td></tr></tbody></table></div></body></html>
2
- `;
3
- export {
4
- t as default
5
- };