@maildeno/editor 0.1.3 → 0.4.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 (169) hide show
  1. package/CHANGELOG.md +258 -0
  2. package/README.md +397 -381
  3. package/dist/RowPreviewChildren-DT0y0lKC.js +4 -0
  4. package/dist/RowPreviewChildren-OsbF7_vu.js +4 -0
  5. package/dist/RowPreviewLegacyComponent-BV4b5bHQ.js +487 -0
  6. package/dist/RowPreviewLegacyComponent-C08MGJVT.js +487 -0
  7. package/dist/RowPreviewRow-ByxeBYV8.js +112 -0
  8. package/dist/RowPreviewRow-N-hh5l_H.js +112 -0
  9. package/dist/adapters/errors.d.ts +59 -0
  10. package/dist/adapters/index.d.ts +31 -0
  11. package/dist/adapters/types.d.ts +68 -0
  12. package/dist/brand.d.ts +15 -0
  13. package/dist/components/DesktopOnlyNotice.vue.d.ts +20 -0
  14. package/dist/components/features/emailBuilder/EmailEditor.vue.d.ts +182 -0
  15. package/dist/components/features/emailBuilder/assistant/AssistantPanel.vue.d.ts +37 -0
  16. package/dist/components/features/emailBuilder/blocks/AnchorBlock.vue.d.ts +3 -0
  17. package/dist/components/features/emailBuilder/blocks/ButtonBlock.vue.d.ts +3 -0
  18. package/dist/components/features/emailBuilder/blocks/DividerBlock.vue.d.ts +3 -0
  19. package/dist/components/features/emailBuilder/blocks/HeadingBlock.vue.d.ts +3 -0
  20. package/dist/components/features/emailBuilder/blocks/ImageBlock.vue.d.ts +3 -0
  21. package/dist/components/features/emailBuilder/blocks/ListBlock.vue.d.ts +3 -0
  22. package/dist/components/features/emailBuilder/blocks/MenuBlock.vue.d.ts +3 -0
  23. package/dist/components/features/emailBuilder/blocks/ParagraphBlock.vue.d.ts +3 -0
  24. package/dist/components/features/emailBuilder/blocks/SocialsBlock.vue.d.ts +3 -0
  25. package/dist/components/features/emailBuilder/blocks/SpacerBlock.vue.d.ts +3 -0
  26. package/dist/components/features/emailBuilder/blocks/VideoBlock.vue.d.ts +3 -0
  27. package/dist/components/features/emailBuilder/canvas/Canvas.vue.d.ts +3 -0
  28. package/dist/components/features/emailBuilder/canvas/CanvasColumn.vue.d.ts +49 -0
  29. package/dist/components/features/emailBuilder/canvas/CanvasComponent.vue.d.ts +56 -0
  30. package/dist/components/features/emailBuilder/canvas/CanvasElement.vue.d.ts +21 -0
  31. package/dist/components/features/emailBuilder/canvas/CanvasRow.vue.d.ts +49 -0
  32. package/dist/components/features/emailBuilder/canvas/CanvasRowSpacer.vue.d.ts +40 -0
  33. package/dist/components/features/emailBuilder/health/HealthIndicator.vue.d.ts +3 -0
  34. package/dist/components/features/emailBuilder/layout/Header.vue.d.ts +54 -0
  35. package/dist/components/features/emailBuilder/layout/SendEmail.vue.d.ts +21 -0
  36. package/dist/components/features/emailBuilder/layout/SidebarLeft.vue.d.ts +3 -0
  37. package/dist/components/features/emailBuilder/layout/SidebarRight.vue.d.ts +3 -0
  38. package/dist/components/features/emailBuilder/panels/AnchorPanel.vue.d.ts +3 -0
  39. package/dist/components/features/emailBuilder/panels/ButtonPanel.vue.d.ts +3 -0
  40. package/dist/components/features/emailBuilder/panels/DividerPanel.vue.d.ts +3 -0
  41. package/dist/components/features/emailBuilder/panels/HeadingPanel.vue.d.ts +3 -0
  42. package/dist/components/features/emailBuilder/panels/ImagePanel.vue.d.ts +3 -0
  43. package/dist/components/features/emailBuilder/panels/ListPanel.vue.d.ts +3 -0
  44. package/dist/components/features/emailBuilder/panels/MenuPanel.vue.d.ts +3 -0
  45. package/dist/components/features/emailBuilder/panels/ParagraphPanel.vue.d.ts +3 -0
  46. package/dist/components/features/emailBuilder/panels/RowColumnPanel.vue.d.ts +13 -0
  47. package/dist/components/features/emailBuilder/panels/RowPanel.vue.d.ts +13 -0
  48. package/dist/components/features/emailBuilder/panels/RowSpacerPanel.vue.d.ts +13 -0
  49. package/dist/components/features/emailBuilder/panels/SocialsPanel.vue.d.ts +3 -0
  50. package/dist/components/features/emailBuilder/panels/SpacerPanel.vue.d.ts +3 -0
  51. package/dist/components/features/emailBuilder/panels/VideoPanel.vue.d.ts +3 -0
  52. package/dist/components/features/emailBuilder/panels/shared/DeviceTabs.vue.d.ts +19 -0
  53. package/dist/components/features/emailBuilder/panels/shared/LinkFieldMergeTags.vue.d.ts +31 -0
  54. package/dist/components/features/emailBuilder/panels/shared/OverrideBadge.vue.d.ts +9 -0
  55. package/dist/components/features/emailBuilder/panels/shared/PreviewBadge.vue.d.ts +11 -0
  56. package/dist/components/features/emailBuilder/panels/shared/TextFieldMergeTags.vue.d.ts +25 -0
  57. package/dist/components/features/emailBuilder/panels/ui/BoxStylingSection.vue.d.ts +7 -0
  58. package/dist/components/features/emailBuilder/panels/ui/PropertyAlignment.vue.d.ts +30 -0
  59. package/dist/components/features/emailBuilder/panels/ui/PropertyColor.vue.d.ts +75 -0
  60. package/dist/components/features/emailBuilder/panels/ui/PropertyGradientColor.vue.d.ts +27 -0
  61. package/dist/components/features/emailBuilder/panels/ui/PropertyNumberSlider.vue.d.ts +74 -0
  62. package/dist/components/features/emailBuilder/panels/ui/PropertySection.vue.d.ts +17 -0
  63. package/dist/components/features/emailBuilder/panels/ui/PropertySelect.vue.d.ts +74 -0
  64. package/dist/components/features/emailBuilder/panels/ui/PropertyTextStyle.vue.d.ts +52 -0
  65. package/dist/components/features/emailBuilder/panels/ui/PropertyTextStylePanel.vue.d.ts +72 -0
  66. package/dist/components/features/emailBuilder/panels/ui/PropertyToggle.vue.d.ts +45 -0
  67. package/dist/components/features/emailBuilder/panels/ui/PropertyVisibility.vue.d.ts +32 -0
  68. package/dist/components/features/emailBuilder/panels/ui/SpacingControl.vue.d.ts +19 -0
  69. package/dist/components/features/emailBuilder/panels/ui/color-picker/AlphaSlider.vue.d.ts +28 -0
  70. package/dist/components/features/emailBuilder/panels/ui/color-picker/ColorPickerPanel.vue.d.ts +31 -0
  71. package/dist/components/features/emailBuilder/panels/ui/color-picker/HueSlider.vue.d.ts +19 -0
  72. package/dist/components/features/emailBuilder/panels/ui/color-picker/RecentColors.vue.d.ts +20 -0
  73. package/dist/components/features/emailBuilder/panels/ui/color-picker/SVPanel.vue.d.ts +39 -0
  74. package/dist/components/features/emailBuilder/panels/ui/visibility-rule/Rule.vue.d.ts +28 -0
  75. package/dist/components/features/emailBuilder/preview/PreviewScreen.vue.d.ts +7 -0
  76. package/dist/components/features/emailBuilder/preview/ui/PreviewCanvas.vue.d.ts +10 -0
  77. package/dist/components/features/emailBuilder/preview/ui/PreviewCapabilityBadges.vue.d.ts +12 -0
  78. package/dist/components/features/emailBuilder/preview/ui/PreviewClientCard.vue.d.ts +20 -0
  79. package/dist/components/features/emailBuilder/preview/ui/PreviewClientList.vue.d.ts +21 -0
  80. package/dist/components/features/emailBuilder/preview/ui/PreviewClientPicker.vue.d.ts +16 -0
  81. package/dist/components/features/emailBuilder/preview/ui/PreviewComponent.vue.d.ts +10 -0
  82. package/dist/components/features/emailBuilder/preview/ui/PreviewDetailView.vue.d.ts +41 -0
  83. package/dist/components/features/emailBuilder/preview/ui/PreviewRendered.vue.d.ts +8 -0
  84. package/dist/components/features/emailBuilder/product/RowPreview.vue.d.ts +8 -0
  85. package/dist/components/features/emailBuilder/product/RowPreviewChildren.vue.d.ts +14 -0
  86. package/dist/components/features/emailBuilder/product/RowPreviewLegacyComponent.vue.d.ts +14 -0
  87. package/dist/components/features/emailBuilder/product/RowPreviewRow.vue.d.ts +9 -0
  88. package/dist/components/features/emailBuilder/product/SavedRowsPanel.vue.d.ts +3 -0
  89. package/dist/components/features/emailBuilder/product/SavedTemplatesPanel.vue.d.ts +13 -0
  90. package/dist/components/features/emailBuilder/product/VersionHistoryPanel.vue.d.ts +14 -0
  91. package/dist/components/features/emailBuilder/sidebar/SidebarBlockButton.vue.d.ts +35 -0
  92. package/dist/components/features/emailBuilder/tabs/GeneralTab.vue.d.ts +3 -0
  93. package/dist/components/features/emailBuilder/tabs/LayoutTab.vue.d.ts +3 -0
  94. package/dist/components/features/emailBuilder/tabs/content/ContentTab.vue.d.ts +3 -0
  95. package/dist/components/features/emailBuilder/tabs/content/LayersPanel.vue.d.ts +7 -0
  96. package/dist/components/features/emailBuilder/tabs/general/MergeTagsTab.vue.d.ts +3 -0
  97. package/dist/components/features/emailBuilder/tabs/general/StylesTab.vue.d.ts +3 -0
  98. package/dist/components/features/emailBuilder/tabs/general/VisibilityTab.vue.d.ts +3 -0
  99. package/dist/components/features/emailBuilder/tabs/general/VisibilityWrapESPTab.vue.d.ts +3 -0
  100. package/dist/components/features/emailBuilder/tabs/general/merge-tags/LinkTagTab.vue.d.ts +3 -0
  101. package/dist/components/features/emailBuilder/tabs/general/merge-tags/MergeTagTab.vue.d.ts +3 -0
  102. package/dist/components/features/emailBuilder/ui/LinkInputDialog.vue.d.ts +17 -0
  103. package/dist/components/features/emailBuilder/ui/canvas/CanvasRowDropZone.vue.d.ts +12 -0
  104. package/dist/components/features/emailBuilder/ui/canvas/DropZone.vue.d.ts +10 -0
  105. package/dist/components/features/emailBuilder/ui/canvas/Loader.vue.d.ts +19 -0
  106. package/dist/components/features/emailBuilder/ui/layers-panel/ComponentIcon.vue.d.ts +7 -0
  107. package/dist/components/features/emailBuilder/ui/layers-panel/LayerColumnChildren.vue.d.ts +42 -0
  108. package/dist/components/features/emailBuilder/ui/layers-panel/LayerDropLine.vue.d.ts +8 -0
  109. package/dist/components/features/emailBuilder/ui/renderers/AnchorRenderer.vue.d.ts +10 -0
  110. package/dist/components/features/emailBuilder/ui/renderers/DividerRenderer.vue.d.ts +10 -0
  111. package/dist/components/features/emailBuilder/ui/renderers/HeadingRenderer.vue.d.ts +10 -0
  112. package/dist/components/features/emailBuilder/ui/renderers/ImageRenderer.vue.d.ts +10 -0
  113. package/dist/components/features/emailBuilder/ui/renderers/ListRenderer.vue.d.ts +10 -0
  114. package/dist/components/features/emailBuilder/ui/renderers/MenuRenderer.vue.d.ts +10 -0
  115. package/dist/components/features/emailBuilder/ui/renderers/ParagraphRenderer.vue.d.ts +10 -0
  116. package/dist/components/features/emailBuilder/ui/renderers/SocialsRenderer.vue.d.ts +10 -0
  117. package/dist/components/features/emailBuilder/ui/renderers/SpacerRenderer.vue.d.ts +10 -0
  118. package/dist/components/features/emailBuilder/ui/renderers/VideoRenderer.vue.d.ts +10 -0
  119. package/dist/components/features/emailBuilder/ui/rich-text-editor/RichTextEditor.vue.d.ts +12 -0
  120. package/dist/components/features/emailBuilder/ui/rich-text-editor/pickers/MergeTagPicker.vue.d.ts +18 -0
  121. package/dist/components/features/emailBuilder/ui/rich-text-editor/pickers/RichTextColorPicker.vue.d.ts +15 -0
  122. package/dist/components/features/emailBuilder/ui/visibility/SupportBadge.vue.d.ts +10 -0
  123. package/dist/components/features/emailBuilder/ui/visibility/VisibilityPopover.vue.d.ts +45 -0
  124. package/dist/components/ui/ConfirmDialog.vue.d.ts +3 -0
  125. package/dist/components/ui/Icon.vue.d.ts +33 -0
  126. package/dist/components/ui/InfoDialog.vue.d.ts +12 -0
  127. package/dist/components/ui/Loading.vue.d.ts +6 -0
  128. package/dist/components/ui/ShadowSafeToast.vue.d.ts +3 -0
  129. package/dist/components/ui/primitives/Button.vue.d.ts +23 -0
  130. package/dist/components/ui/primitives/DatePicker.vue.d.ts +16 -0
  131. package/dist/components/ui/primitives/Dialog.vue.d.ts +34 -0
  132. package/dist/components/ui/primitives/InputText.vue.d.ts +29 -0
  133. package/dist/components/ui/primitives/Message.vue.d.ts +20 -0
  134. package/dist/components/ui/primitives/Select.vue.d.ts +22 -0
  135. package/dist/composables/emailBuilder/components/useSystemRows.d.ts +22 -0
  136. package/dist/composables/emailBuilder/core/ui/useLayerHoverScroll.d.ts +10 -10
  137. package/dist/composables/emailBuilder/core/useEmailBuilder.d.ts +18 -0
  138. package/dist/composables/emailBuilder/export/logic/espLogicWrapper.d.ts +4 -4
  139. package/dist/composables/emailBuilder/export/targets/templateSnapshot.d.ts +24 -0
  140. package/dist/composables/emailBuilder/persistence/useEmailBuilderPersistence.d.ts +1 -1
  141. package/dist/composables/system/useColorScheme.d.ts +16 -0
  142. package/dist/editor.css +1072 -682
  143. package/dist/element-C2ZH0Z_i.js +86561 -0
  144. package/dist/element-scoped-styles.css +1072 -682
  145. package/dist/element.d.ts +1 -1
  146. package/dist/element.js +5 -2
  147. package/dist/estree-DBJlF9un.js +4876 -0
  148. package/dist/html-3PMDtB0V.js +3123 -0
  149. package/dist/index-DhFg3uKs.js +75864 -0
  150. package/dist/index.d.ts +4 -2
  151. package/dist/index.js +16 -67053
  152. package/dist/init.d.ts +95 -2
  153. package/dist/init.js +166 -122
  154. package/dist/standalone-DKWMQftY.js +2391 -0
  155. package/dist/theme.d.ts +68 -17
  156. package/dist/types/assistant.d.ts +56 -0
  157. package/dist/typescript-l6-4tT8s.js +13240 -0
  158. package/package.json +6 -3
  159. package/dist/RowPreviewLegacyComponent-CXsY4P-R.js +0 -439
  160. package/dist/RowPreviewLegacyComponent-yjHSkZLz.js +0 -439
  161. package/dist/RowPreviewRow-CBfAnQ6o.js +0 -107
  162. package/dist/RowPreviewRow-CeowK6Q_.js +0 -107
  163. package/dist/composables/emailBuilder/transform/pipeline/optimizeAI.d.ts +0 -125
  164. package/dist/element-CMhqxYnE.js +0 -67099
  165. package/dist/estree-B67dfAo1.js +0 -7989
  166. package/dist/html-DGrfikay.js +0 -7353
  167. package/dist/standalone-Bd2oQFm3.js +0 -3639
  168. package/dist/typescript-C_Ru9PRN.js +0 -23184
  169. package/dist/vue.runtime.esm-bundler-CfYyFhW6.js +0 -9097
@@ -0,0 +1,112 @@
1
+ import { n as defineComponent, o as computed, q as openBlock, t as createElementBlock, F as Fragment, u as renderList, v as normalizeStyle, w as createVNode, x as unref, y as createCommentVNode, z as defineAsyncComponent } from "./element-C2ZH0Z_i.js";
2
+ const _hoisted_1 = {
3
+ key: 0,
4
+ class: "w-full border border-dashed border-(--md-border) rounded",
5
+ style: { "min-height": "10px" }
6
+ };
7
+ const _sfc_main = /* @__PURE__ */ defineComponent({
8
+ __name: "RowPreviewRow",
9
+ props: {
10
+ row: {},
11
+ scale: {},
12
+ depth: {}
13
+ },
14
+ setup(__props) {
15
+ const RowPreviewChildren = defineAsyncComponent(
16
+ () => import("./RowPreviewChildren-DT0y0lKC.js")
17
+ );
18
+ const props = __props;
19
+ function resolveBackground(item) {
20
+ var _a;
21
+ const bg = item == null ? void 0 : item.backgroundGradient;
22
+ const hasGradient = (bg == null ? void 0 : bg.useGradient) === true && Array.isArray((_a = bg == null ? void 0 : bg.gradient) == null ? void 0 : _a.colors) && bg.gradient.colors.length >= 2;
23
+ if (hasGradient) {
24
+ const { type, direction, colors } = bg.gradient;
25
+ const stops = colors.map((c) => `${c.color} ${c.position}%`).join(", ");
26
+ return type === "radial" ? `radial-gradient(circle at center, ${stops})` : `linear-gradient(${direction}, ${stops})`;
27
+ }
28
+ return (item == null ? void 0 : item.backgroundColor) ?? "transparent";
29
+ }
30
+ const rowStyle = computed(() => {
31
+ var _a, _b, _c, _d, _e, _f, _g, _h;
32
+ const r = props.row;
33
+ const style = {
34
+ display: "flex",
35
+ flexDirection: "row",
36
+ background: resolveBackground(r),
37
+ padding: `${((_a = r.padding) == null ? void 0 : _a.top) ?? 0}px ${((_b = r.padding) == null ? void 0 : _b.right) ?? 0}px ${((_c = r.padding) == null ? void 0 : _c.bottom) ?? 0}px ${((_d = r.padding) == null ? void 0 : _d.left) ?? 0}px`,
38
+ alignItems: "stretch",
39
+ border: `${((_e = r.border) == null ? void 0 : _e.width) ?? 0}px ${((_f = r.border) == null ? void 0 : _f.style) ?? "solid"} ${((_g = r.border) == null ? void 0 : _g.color) ?? "transparent"}`,
40
+ borderRadius: `${((_h = r.border) == null ? void 0 : _h.radius) ?? 0}px`,
41
+ gap: `${r.gap ?? 0}px`,
42
+ overflow: "hidden"
43
+ };
44
+ if (r.backgroundImage) {
45
+ style.backgroundImage = `url(${r.backgroundImage})`;
46
+ style.backgroundSize = r.backgroundSize ?? "cover";
47
+ style.backgroundPosition = r.backgroundPosition ?? "center center";
48
+ }
49
+ return style;
50
+ });
51
+ function colStyle(col, parentRow) {
52
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
53
+ const verticalAlignMap = {
54
+ top: "flex-start",
55
+ middle: "center",
56
+ bottom: "flex-end"
57
+ };
58
+ const widthPct = col.width ?? 50;
59
+ const siblingCount = ((_a = parentRow == null ? void 0 : parentRow.columns) == null ? void 0 : _a.length) || 1;
60
+ const gapPx = (parentRow == null ? void 0 : parentRow.gap) ?? 0;
61
+ const gapShare = siblingCount > 1 ? gapPx * (siblingCount - 1) / siblingCount : 0;
62
+ const widthValue = gapShare > 0 ? `calc(${widthPct}% - ${gapShare}px)` : `${widthPct}%`;
63
+ const style = {
64
+ flex: `0 0 ${widthValue}`,
65
+ width: widthValue,
66
+ maxWidth: widthValue,
67
+ boxSizing: "border-box",
68
+ background: resolveBackground(col),
69
+ padding: `${((_b = col.padding) == null ? void 0 : _b.top) ?? 10}px ${((_c = col.padding) == null ? void 0 : _c.right) ?? 10}px ${((_d = col.padding) == null ? void 0 : _d.bottom) ?? 10}px ${((_e = col.padding) == null ? void 0 : _e.left) ?? 10}px`,
70
+ border: `${((_f = col.border) == null ? void 0 : _f.width) ?? 0}px ${((_g = col.border) == null ? void 0 : _g.style) ?? "solid"} ${((_h = col.border) == null ? void 0 : _h.color) ?? "transparent"}`,
71
+ borderRadius: `${((_i = col.border) == null ? void 0 : _i.radius) ?? 0}px`,
72
+ overflow: "hidden",
73
+ minWidth: "0",
74
+ display: "flex",
75
+ flexDirection: "column",
76
+ justifyContent: verticalAlignMap[col.verticalAlign] ?? "flex-start"
77
+ };
78
+ if (col.backgroundImage) {
79
+ style.backgroundImage = `url(${col.backgroundImage})`;
80
+ style.backgroundSize = col.backgroundSize ?? "cover";
81
+ style.backgroundPosition = col.backgroundPosition ?? "center center";
82
+ style.minHeight = "14px";
83
+ }
84
+ return style;
85
+ }
86
+ return (_ctx, _cache) => {
87
+ return (__props.depth ?? 0) < 5 ? (openBlock(), createElementBlock("div", {
88
+ key: 0,
89
+ style: normalizeStyle(rowStyle.value),
90
+ class: "w-full"
91
+ }, [
92
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.row.columns ?? [], (col) => {
93
+ return openBlock(), createElementBlock("div", {
94
+ key: col.id,
95
+ style: normalizeStyle(colStyle(col, __props.row)),
96
+ class: "overflow-hidden shrink-0"
97
+ }, [
98
+ createVNode(unref(RowPreviewChildren), {
99
+ children: col.children ?? col.components ?? [],
100
+ scale: __props.scale,
101
+ depth: (__props.depth ?? 0) + 1
102
+ }, null, 8, ["children", "scale", "depth"]),
103
+ (col.children ?? col.components ?? []).length === 0 ? (openBlock(), createElementBlock("div", _hoisted_1)) : createCommentVNode("", true)
104
+ ], 4);
105
+ }), 128))
106
+ ], 4)) : createCommentVNode("", true);
107
+ };
108
+ }
109
+ });
110
+ export {
111
+ _sfc_main as default
112
+ };
@@ -0,0 +1,59 @@
1
+ /**
2
+ * adapters/errors.ts — the one thing the editor and a host adapter need to
3
+ * agree on about failure.
4
+ *
5
+ * The editor has no user, role, plan or HTTP model, deliberately (see the
6
+ * README's "Positioning" section, and the comment at the top of
7
+ * SavedRowsPanel.vue). So it cannot say anything useful about a 403, a 402 or
8
+ * an expired session — only the host knows what its own statuses mean and
9
+ * what the user should do about them.
10
+ *
11
+ * That leaves a gap. A host adapter that catches its own 403 and shows a
12
+ * precise message ("your role can't delete saved rows — ask an admin") gets a
13
+ * second, vaguer toast from the editor's own catch block a moment later
14
+ * ("Delete failed"). Two toasts for one click, the less useful one last.
15
+ *
16
+ * `handled` closes it without teaching the editor anything about permissions.
17
+ * The host marks an error it has already surfaced; the editor only asks "did
18
+ * someone already tell the user?" and stays quiet if so. It still gets the
19
+ * rejection — which matters, because every optimistic update in this package
20
+ * is applied on resolve, so a swallowed failure would leave the UI showing a
21
+ * delete or rename that never happened.
22
+ *
23
+ * Hosts that don't use this lose nothing: unmarked errors take the editor's
24
+ * generic message exactly as before.
25
+ */
26
+ /**
27
+ * Marks an error as already reported to the user, and returns it for
28
+ * rethrowing:
29
+ *
30
+ * ```ts
31
+ * catch (err) {
32
+ * toast.add({ severity: "warn", summary: "Not allowed", detail });
33
+ * throw markHandled(err);
34
+ * }
35
+ * ```
36
+ *
37
+ * Mutates in place when it can, so `err.status` / `err.data` and any other
38
+ * fields the host reads downstream survive. Some rejections can't be mutated
39
+ * — ofetch's FetchError is frozen, and a thrown string isn't an object at all
40
+ * — so those get a fresh Error carrying the original as `cause` rather than
41
+ * throwing a TypeError from inside a catch block, which would replace the
42
+ * real failure with a confusing one.
43
+ */
44
+ export declare function markHandled(err: unknown): unknown;
45
+ /**
46
+ * Whether the host already showed the user a message for this failure.
47
+ *
48
+ * Guard the editor's own toast with it, never the recovery logic — a handled
49
+ * error is still an error, and state that was rolled back or a panel that was
50
+ * left open must behave identically either way:
51
+ *
52
+ * ```ts
53
+ * catch (err) {
54
+ * console.error("[maildeno-editor] failed to delete version:", err);
55
+ * if (!isHandled(err)) toast.add({ severity: "error", summary: "Delete failed" });
56
+ * }
57
+ * ```
58
+ */
59
+ export declare function isHandled(err: unknown): boolean;
@@ -1,7 +1,38 @@
1
+ import { Ref } from 'vue';
1
2
  import { EditorStorageAdapter, PartialStorageAdapter } from './types';
3
+ export declare function useCanSave(): Ref<boolean>;
4
+ export declare function provideCanSave(canSave: Ref<boolean>): void;
5
+ export declare function useHasTemplateLibrary(): boolean;
2
6
  export declare function provideStorageAdapter(adapter?: PartialStorageAdapter): EditorStorageAdapter;
3
7
  /** For genuine child components of <EmailEditor> — Header.vue,
4
8
  * SavedRowsPanel.vue, etc. Their inject() correctly sees EmailEditor.vue's
5
9
  * provides via instance.parent.provides, since they're actual children,
6
10
  * not the same instance that called provide(). */
7
11
  export declare const useStorageAdapter: () => EditorStorageAdapter;
12
+ /**
13
+ * Host-declared restrictions on the saved-row library.
14
+ *
15
+ * Same contract as EmailEditor's `capabilities` prop that carries it: this
16
+ * only ever takes affordances away. Omitting a key, or the whole object,
17
+ * leaves that control exactly as it is today, so no existing host changes
18
+ * behaviour by upgrading.
19
+ *
20
+ * Separate from the read-only Shared tab, which is a property of the data (no
21
+ * adapter method backs renaming an org's curated rows, so no host can grant
22
+ * it). This is a property of the *person* — a viewer in a host's role model
23
+ * who may look at their org's rows but not add to them. The editor still has
24
+ * no user model and isn't learning one: it takes three booleans and asks no
25
+ * questions about where they came from.
26
+ *
27
+ * A gate is not enforcement. The server is still the only thing standing
28
+ * between a viewer and a write; this just stops the editor offering a button
29
+ * whose only outcome is a 403.
30
+ */
31
+ export interface SavedRowCapabilities {
32
+ create?: boolean;
33
+ rename?: boolean;
34
+ delete?: boolean;
35
+ }
36
+ export declare function provideSavedRowCapabilities(caps: Ref<SavedRowCapabilities>): void;
37
+ /** Defaults to fully permitted — see the "only ever restricts" note above. */
38
+ export declare function useSavedRowCapabilities(): Ref<SavedRowCapabilities>;
@@ -28,6 +28,27 @@ export interface TemplateSummary {
28
28
  name?: string;
29
29
  updatedAt?: string;
30
30
  }
31
+ /**
32
+ * One entry in the version-history panel. A summary for the same reason
33
+ * TemplateSummary is: rendering a list of fifty versions shouldn't mean
34
+ * downloading fifty full documents. getTemplateVersion(id) fetches content
35
+ * for the one the user actually restores.
36
+ */
37
+ export interface TemplateVersionSummary {
38
+ versionId: string;
39
+ createdAt: string;
40
+ /** Optional human label ("Before redesign"). Falls back to a relative
41
+ * timestamp in the panel when absent. */
42
+ label?: string;
43
+ /** Pinned. Kept versions are excluded from deleteAllTemplateVersions and
44
+ * are the ones a host's retention policy should spare. The editor only
45
+ * reads and toggles this; what "spared" means is the host's business. */
46
+ kept?: boolean;
47
+ /** Free-form attribution, shown verbatim if present. Deliberately a
48
+ * string, not a user object — the editor has no user model and shouldn't
49
+ * grow one just to render a name. */
50
+ author?: string;
51
+ }
31
52
  export interface SavedRow {
32
53
  id: string;
33
54
  name: string;
@@ -51,7 +72,54 @@ export interface EditorStorageAdapter {
51
72
  listTemplates(): Promise<TemplateSummary[]>;
52
73
  /** Optional, and only surfaced in the panel when implemented. */
53
74
  deleteTemplate(templateId: string): Promise<void>;
75
+ /**
76
+ * ── Version history ──────────────────────────────────────────────────
77
+ *
78
+ * All five are optional, like listTemplates above, and gated the same
79
+ * way: the panel is only reachable when `versions` is set on the editor,
80
+ * and each control within it only appears when its method exists. An
81
+ * adapter can therefore support listing and restoring without supporting
82
+ * deletion, and the UI reflects exactly that.
83
+ *
84
+ * Note the asymmetry with saveTemplate: nothing here creates a version.
85
+ * When a save produces a new version is a policy question — every save,
86
+ * on a timer, on explicit request — and the host already owns saveTemplate,
87
+ * so it can decide there. Putting version creation in this interface would
88
+ * force one policy on every host.
89
+ */
90
+ listTemplateVersions(templateId: string): Promise<TemplateVersionSummary[]>;
91
+ /** Full content for one version, in the same shape as loadTemplate. */
92
+ getTemplateVersion(templateId: string, versionId: string): Promise<TemplateSnapshot | null>;
93
+ deleteTemplateVersion(templateId: string, versionId: string): Promise<void>;
94
+ /** Bulk delete. Kept versions survive — see TemplateVersionSummary.kept.
95
+ * The panel's confirm copy says so, so an implementation that deletes
96
+ * kept versions too would contradict what the user was told. */
97
+ deleteAllTemplateVersions(templateId: string): Promise<void>;
98
+ setTemplateVersionKept(templateId: string, versionId: string, kept: boolean): Promise<void>;
54
99
  listSavedRows(): Promise<SavedRow[]>;
100
+ /**
101
+ * A second, read-only row library shown in its own tab beside the user's
102
+ * own rows — an organisation's shared blocks, a starter set, whatever the
103
+ * host curates.
104
+ *
105
+ * Optional, and the tab only appears when it is implemented, so a host with
106
+ * one row library sees exactly the panel it has today. The built-in
107
+ * localStorage adapter deliberately does NOT implement it: "shared across
108
+ * an organisation" has no meaning in a single browser's storage, and
109
+ * faking it would demonstrate a feature that cannot work.
110
+ *
111
+ * Read-only by construction. There is no saveSystemSavedRow /
112
+ * deleteSystemSavedRow / renameSystemSavedRow, so the panel renders this
113
+ * tab without rename or delete controls. Who may curate a shared library is
114
+ * a permissions question the host answers in its own admin UI — the editor
115
+ * has no user model to answer it with, and inventing one to grey out a
116
+ * button would be the wrong boundary.
117
+ *
118
+ * cloneSavedRowForCanvas must resolve ids from BOTH libraries. It is the
119
+ * single synchronous entry point used when a row is dragged onto the
120
+ * canvas, and the drag doesn't know which tab the row came from.
121
+ */
122
+ listSystemSavedRows(): Promise<SavedRow[]>;
55
123
  saveSavedRow(row: Record<string, any>, name: string): Promise<SavedRow | null>;
56
124
  deleteSavedRow(id: string): Promise<void>;
57
125
  renameSavedRow(id: string, name: string): Promise<void>;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The package's own name, shown wherever a host hasn't supplied its own.
3
+ *
4
+ * Extracted to a constant because two components now render it — the
5
+ * desktop-only notice and the loading overlay — and DesktopOnlyNotice.vue's
6
+ * prop comment already promised there would be exactly one place to change
7
+ * it. A second `withDefaults(..., { brandName: "Maildeno" })` written inline
8
+ * would quietly make that false, and the two would drift the first time
9
+ * someone renamed one of them.
10
+ *
11
+ * Not a theme token: `theme` carries colours, and this is text, so it has no
12
+ * sensible home in the token map — see the `brandName` prop on EmailEditor
13
+ * for the longer version of that reasoning.
14
+ */
15
+ export declare const DEFAULT_BRAND_NAME = "Maildeno";
@@ -0,0 +1,20 @@
1
+ interface Props {
2
+ /**
3
+ * Name shown in the "Powered by" line at the bottom of the notice.
4
+ *
5
+ * EmailEditor.vue forwards the prop through without redeclaring a default
6
+ * of its own, so an undefined value arriving from any of the three mount
7
+ * paths (Vue component, custom element, light DOM) lands here and resolves
8
+ * the same way. Pass an empty string to hide the line entirely.
9
+ *
10
+ * The default itself now lives in brand.ts — Loader.vue renders the same
11
+ * name, and two inline copies of the string would be two things to keep in
12
+ * step. Behaviour here is unchanged.
13
+ */
14
+ brandName?: string;
15
+ }
16
+ declare const __VLS_export: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
17
+ brandName: string;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
@@ -0,0 +1,182 @@
1
+ import { ColorMode } from '../../../composables/system/useColorScheme';
2
+ import { PartialStorageAdapter } from '../../../adapters/types';
3
+ import { ThemeOptions } from '../../../theme';
4
+ import { AssistantMount, EditorWriteApi } from '../../../types/assistant';
5
+ type __VLS_Props = {
6
+ isReady?: boolean;
7
+ storageAdapter?: PartialStorageAdapter;
8
+ /** If given, loaded via the adapter on mount. Omit to start blank
9
+ * (create mode) — matches the original app's /create vs /edit split,
10
+ * now driven by a prop instead of a route. */
11
+ templateId?: string;
12
+ /** Applied via CSS custom properties (see theme.ts) — works whether this
13
+ * component is used directly or wrapped by element.ts's
14
+ * defineCustomElement, because both write to the same place: this
15
+ * component's own root element, which is where the package's bundled
16
+ * defaults land too once the library build has scoped them. Reactive:
17
+ * assigning a new object re-themes live, no remount. */
18
+ theme?: ThemeOptions;
19
+ /**
20
+ * Which half of `theme` applies.
21
+ *
22
+ * `auto` (the default) follows the host page: useColorScheme.ts watches
23
+ * for a `dark` class on <html> or <body> and mirrors it onto the editor
24
+ * root. A host that already has a Tailwind-style theme switcher needs no
25
+ * wiring at all — flipping the class moves the editor in the same frame.
26
+ *
27
+ * Pass `light` or `dark` to pin the editor regardless of the page: a
28
+ * light editor deliberately embedded in a dark shell, or a host whose
29
+ * switcher signals something other than a class.
30
+ */
31
+ colorMode?: ColorMode;
32
+ /** If provided, the "Send test" button appears in the header. Editor
33
+ * owns the form/validation UI; this callback owns what actually
34
+ * happens on submit (SMTP, an API, anything) — same host-owns-the-
35
+ * operation pattern as the storage adapter. */
36
+ /**
37
+ * Called after a successful save. Its presence is what reveals the Save
38
+ * button — same idiom as onSendTestEmail below.
39
+ *
40
+ * Gating on an explicit handler rather than on the storage adapter,
41
+ * because the adapter can't answer the question: PartialStorageAdapter
42
+ * is merged with the localStorage defaults, so `saveTemplate` always
43
+ * exists by the time anything reads it. A host that wants a read-only or
44
+ * guest editor simply omits this.
45
+ *
46
+ * The `save` event still fires alongside, so `@save` keeps working — and
47
+ * because Vue compiles `@save="fn"` to an `onSave` prop, writing the
48
+ * listener is itself enough to reveal the button.
49
+ */
50
+ onSave?: (payload: {
51
+ templateId: string | null;
52
+ }) => void;
53
+ /**
54
+ * The same handler, under a name that doesn't begin with "on".
55
+ *
56
+ * For the custom-element path only. Vue's defineCustomElement treats
57
+ * `on*` keys as event listeners rather than props, so `el.onSave = fn`
58
+ * never reaches this component — the button appeared and the callback
59
+ * never fired. init() sets this instead. Vue hosts should use `@save`.
60
+ */
61
+ saveHandler?: (payload: {
62
+ templateId: string | null;
63
+ }) => void;
64
+ onSendTestEmail?: (payload: {
65
+ to: string;
66
+ subject: string;
67
+ html: string;
68
+ }) => Promise<void> | void;
69
+ /** Explicit UI restrictions, layered on top of the implicit ones
70
+ * (e.g. onSendTestEmail's mere presence/absence already gates that
71
+ * button — capabilities doesn't replace that, it adds to it).
72
+ * Omit any key to leave that area fully enabled — this restricts,
73
+ * it never grants something that wasn't already possible. */
74
+ capabilities?: {
75
+ /** Which formats appear in the Export dropdown. Omit for all four. */
76
+ export?: Array<"html" | "mjml" | "react" | "json">;
77
+ /** Which saved-row controls this user gets: the canvas row's bookmark
78
+ * button, and the panel's per-row rename and delete. Omit a key for
79
+ * "allowed", the same as omitting the object. For a host with roles,
80
+ * this is what stops a viewer being shown three buttons that can only
81
+ * 403 — the toast their adapter raises afterwards is the backstop, not
82
+ * the design. Does not touch the Shared tab, which is read-only for
83
+ * everyone because no adapter method backs writing to it. */
84
+ savedRows?: {
85
+ create?: boolean;
86
+ rename?: boolean;
87
+ delete?: boolean;
88
+ };
89
+ };
90
+ /** Name shown in the loading overlay and in the desktop-only notice's
91
+ * "Powered by" line.
92
+ *
93
+ * Deliberately a prop rather than a theme token: `theme` carries
94
+ * colours, and this is text, so it has no sensible home in the token
95
+ * map. It is also the one piece of chrome a host cannot restyle away,
96
+ * since the notice replaces the entire editor on small screens.
97
+ *
98
+ * No default is declared here on purpose. Both consumers resolve an
99
+ * undefined value from DEFAULT_BRAND_NAME in brand.ts, so there is one
100
+ * place to change it rather than three that can drift — and declaring a
101
+ * default here would also make the empty-string case unreachable, since
102
+ * the prop would never arrive undefined. Omit for the package default;
103
+ * pass an empty string to render no wordmark and drop the attribution
104
+ * line entirely. */
105
+ brandName?: string;
106
+ /** Replaces the saved-templates panel (and its header button) with
107
+ * version history.
108
+ *
109
+ * A swap rather than an addition, because the two answer different
110
+ * questions — "which template?" versus "which state of this template?"
111
+ * — and a host that has its own template browser elsewhere in its app
112
+ * has no use for the former inside the editor. Two panels competing for
113
+ * the same slot would also mean two header buttons and a layout
114
+ * decision the editor shouldn't be making.
115
+ *
116
+ * Top-level rather than a `capabilities` key on purpose: capabilities
117
+ * documents itself as only ever restricting, never granting, and this
118
+ * grants.
119
+ *
120
+ * The panel still degrades per-method — see the version methods on
121
+ * EditorStorageAdapter. Setting this with an adapter that can't list
122
+ * versions gets an honest "not supported" message, not a broken panel. */
123
+ versions?: boolean;
124
+ /** Fills the assistant drawer from a non-Vue host (init(), React,
125
+ * vanilla). Vue hosts use the #assistant slot instead; either one being
126
+ * present reveals the trigger button, and neither means no assistant UI
127
+ * renders at all.
128
+ *
129
+ * The editor supplies the drawer, its trigger, open/close state, escape
130
+ * handling, focus return and shadow-DOM-safe teleporting. What goes
131
+ * inside is entirely the host's — see the AssistantPanel comment for
132
+ * why the assistant itself isn't in this package. */
133
+ assistant?: AssistantMount;
134
+ };
135
+ declare var __VLS_17: {
136
+ templateId: string | null;
137
+ isSaving: boolean;
138
+ saveStatus: import('../../../composables/emailBuilder/persistence/useEmailBuilderPersistence').AutoSaveStatus;
139
+ }, __VLS_80: {
140
+ editor: EditorWriteApi;
141
+ };
142
+ type __VLS_Slots = {} & {
143
+ 'header-actions'?: (props: typeof __VLS_17) => any;
144
+ } & {
145
+ assistant?: (props: typeof __VLS_80) => any;
146
+ };
147
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
148
+ getHtml: (mode?: "prune" | "wrap") => string | null;
149
+ getMjml: (mode?: "prune" | "wrap") => string | null;
150
+ getReactEmail: (mode?: "prune" | "wrap") => string | null;
151
+ getJson: () => {
152
+ template_id: string;
153
+ template_name: string;
154
+ canvas: Partial<import('../../../composables/emailBuilder/transform/pipeline/optimize').Canvas>;
155
+ rows: Partial<import('../../../composables/emailBuilder/transform/pipeline/optimize').NestedRow | import('../../../composables/emailBuilder/transform/pipeline/optimize').RowSpacer>[];
156
+ schema_version: string;
157
+ } | null;
158
+ setJson: (data: any, opts?: {
159
+ history?: "undoable" | "reset";
160
+ }) => void;
161
+ getSelection: () => {
162
+ id: string;
163
+ type: string | null;
164
+ } | null;
165
+ setSelection: (id: string | null) => boolean;
166
+ onChange: (cb: () => void) => (() => void);
167
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
168
+ ready: () => any;
169
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
170
+ onReady?: (() => any) | undefined;
171
+ }>, {
172
+ isReady: boolean;
173
+ colorMode: ColorMode;
174
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
175
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
176
+ declare const _default: typeof __VLS_export;
177
+ export default _default;
178
+ type __VLS_WithSlots<T, S> = T & {
179
+ new (): {
180
+ $slots: S;
181
+ };
182
+ };
@@ -0,0 +1,37 @@
1
+ import { EditorWriteApi } from '../../../../types/assistant';
2
+ type __VLS_Props = {
3
+ /** Imperative filler for the init()/custom-element path. */
4
+ assistant?: {
5
+ mount: (el: HTMLElement, editor: EditorWriteApi) => void;
6
+ unmount?: (el: HTMLElement) => void;
7
+ };
8
+ /** True when the host passed a #assistant slot. Computed by the parent
9
+ * rather than read from $slots here, because a parent forwarding its own
10
+ * slot down always produces a truthy $slots entry in this child even when
11
+ * the host supplied nothing — which would render an assistant button that
12
+ * opens an empty drawer. */
13
+ hasSlot?: boolean;
14
+ /** Handed to the host so its panel can drive the canvas. */
15
+ editor: EditorWriteApi;
16
+ };
17
+ declare function close(): void;
18
+ declare function toggle(): void;
19
+ declare var __VLS_23: {
20
+ editor: EditorWriteApi;
21
+ };
22
+ type __VLS_Slots = {} & {
23
+ assistant?: (props: typeof __VLS_23) => any;
24
+ };
25
+ declare const __VLS_base: import('vue').DefineComponent<__VLS_Props, {
26
+ open: () => boolean;
27
+ close: typeof close;
28
+ toggle: typeof toggle;
29
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
30
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
31
+ declare const _default: typeof __VLS_export;
32
+ export default _default;
33
+ type __VLS_WithSlots<T, S> = T & {
34
+ new (): {
35
+ $slots: S;
36
+ };
37
+ };
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;