@samva/markup 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +104 -37
- package/README.md +188 -52
- package/dist/assets-C5duwTya.d.ts +40 -0
- package/dist/brand-B-0bN_Ir.d.ts +88 -0
- package/dist/{render-aaJBnsXK.js → cascade-t6kxlgEI.js} +130 -160
- package/dist/channel-edit.d.ts +121 -0
- package/dist/channel-edit.js +609 -0
- package/dist/channel-specs-B6M_HlaV.js +29 -0
- package/dist/channel-specs-C2feJwuP.d.ts +13 -0
- package/dist/compatibility-DbISoFIq.js +589 -0
- package/dist/compiler.d.ts +19 -249
- package/dist/compiler.js +10 -1408
- package/dist/{css-COcFOT1y.d.ts → css-BVQKICKC.d.ts} +30 -4
- package/dist/diagnostic-codes.d.ts +403 -0
- package/dist/diagnostic-codes.js +399 -0
- package/dist/{diagnostics-BMYtBCQk.d.ts → diagnostics-B-Gym34R.d.ts} +8 -4
- package/dist/diagnostics.d.ts +31 -2
- package/dist/diagnostics.js +1 -19
- package/dist/{elements-BzjjnoCS.d.ts → elements-cqldpaJt.d.ts} +3 -3
- package/dist/email/assets.d.ts +2 -0
- package/dist/email/assets.js +63 -0
- package/dist/email/brand-footer.d.ts +34 -0
- package/dist/email/brand-footer.js +63 -0
- package/dist/email/brand.d.ts +2 -0
- package/dist/email/brand.js +148 -0
- package/dist/email/components.d.ts +21 -10
- package/dist/email/components.js +46 -11
- package/dist/email/diagnostics.d.ts +2 -2
- package/dist/email/diagnostics.js +2 -1
- package/dist/email/elements.d.ts +1 -1
- package/dist/email/html.d.ts +2 -42
- package/dist/email/html.js +56 -2
- package/dist/email/jsx-dev-runtime.d.ts +2 -2
- package/dist/email/jsx-runtime.d.ts +1 -1
- package/dist/email/render.d.ts +10 -13
- package/dist/email/render.js +163 -6
- package/dist/email/text.d.ts +1 -1
- package/dist/fmt.d.ts +32 -0
- package/dist/fmt.js +174 -0
- package/dist/html-BJepOwZ4.d.ts +56 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/ir-aaqNE987.d.ts +252 -0
- package/dist/ir.d.ts +2 -0
- package/dist/ir.js +7 -0
- package/dist/preview-Ekdg1dXG.d.ts +100 -0
- package/dist/preview.d.ts +2 -0
- package/dist/preview.js +160 -0
- package/dist/profile-BH-OtdDA.js +3670 -0
- package/dist/render-ir.d.ts +19 -0
- package/dist/render-ir.js +826 -0
- package/dist/sms-segments.d.ts +13 -2
- package/dist/sms.d.ts +16 -0
- package/dist/sms.js +12 -0
- package/dist/{email/source-edit.d.ts → source-edit.d.ts} +55 -6
- package/dist/source-edit.js +343 -0
- package/dist/source-locations-C8wCsiAy.d.ts +23 -0
- package/dist/source-locations.d.ts +2 -2
- package/dist/source-locations.js +3 -89
- package/dist/static.d.ts +57 -0
- package/dist/static.js +69 -0
- package/dist/tailwind-CMYpZf1v.js +614 -0
- package/dist/template-_QE_rQND.d.ts +65 -0
- package/dist/template.d.ts +2 -2
- package/dist/template.js +15 -10
- package/dist/theme-css-hFqcPSar.js +587 -0
- package/dist/theme-css.d.ts +57 -16
- package/dist/theme-css.js +2 -509
- package/dist/theme-imports-lvBw3AD1.js +109 -0
- package/dist/transform-Ct2OMkFN.d.ts +153 -0
- package/dist/unsubscribe-link-CoesnQDU.js +26 -0
- package/dist/whatsapp.d.ts +57 -0
- package/dist/whatsapp.js +22 -0
- package/generated/contract.json +1782 -0
- package/generated/reference.md +353 -0
- package/package.json +56 -154
- package/samva-brand.d.ts +14 -0
- package/skills/sml/SKILL.md +123 -0
- package/dist/ast-BrDtApwS.d.ts +0 -107
- package/dist/ast.d.ts +0 -2
- package/dist/ast.js +0 -124
- package/dist/candidate.d.ts +0 -29
- package/dist/candidate.js +0 -88
- package/dist/catalog-60eaYC7b.d.ts +0 -356
- package/dist/checks-DBweSIPN.js +0 -58954
- package/dist/checks.d.ts +0 -33
- package/dist/checks.js +0 -2
- package/dist/classes.d.ts +0 -27
- package/dist/classes.js +0 -184
- package/dist/compile-sms.d.ts +0 -28
- package/dist/compile-sms.js +0 -44
- package/dist/compile-whatsapp.d.ts +0 -56
- package/dist/compile-whatsapp.js +0 -186
- package/dist/compile.d.ts +0 -18
- package/dist/compile.js +0 -29
- package/dist/components.d.ts +0 -289
- package/dist/components.js +0 -106
- package/dist/conditionals.d.ts +0 -10
- package/dist/conditionals.js +0 -74
- package/dist/corpus-BjYMqOoY.d.ts +0 -106
- package/dist/diagnostics-OcQKQYSY.d.ts +0 -49
- package/dist/email/selection.d.ts +0 -91
- package/dist/email/selection.js +0 -91
- package/dist/email/source-edit.js +0 -185
- package/dist/email/stylesheets.d.ts +0 -15
- package/dist/email/stylesheets.js +0 -45
- package/dist/emit.d.ts +0 -51
- package/dist/emit.js +0 -151
- package/dist/footer.d.ts +0 -66
- package/dist/footer.js +0 -93
- package/dist/interpolate.d.ts +0 -24
- package/dist/interpolate.js +0 -43
- package/dist/jsx-dev-runtime.d.ts +0 -11
- package/dist/jsx-dev-runtime.js +0 -15
- package/dist/jsx-runtime-I-1nCtl2.d.ts +0 -57
- package/dist/jsx-runtime.d.ts +0 -2
- package/dist/jsx-runtime.js +0 -121
- package/dist/lexer.d.ts +0 -60
- package/dist/lexer.js +0 -281
- package/dist/model.d.ts +0 -24
- package/dist/model.js +0 -77
- package/dist/ops-2aiiYO7m.js +0 -630
- package/dist/ops.d.ts +0 -114
- package/dist/ops.js +0 -2
- package/dist/parser-t29cHLVL.d.ts +0 -396
- package/dist/parser.d.ts +0 -2
- package/dist/parser.js +0 -859
- package/dist/predicate-BI6uRRM-.js +0 -549
- package/dist/predicate-M-05Nd7R.d.ts +0 -56
- package/dist/predicate.d.ts +0 -2
- package/dist/predicate.js +0 -2
- package/dist/presets/category-mapping.d.ts +0 -13
- package/dist/presets/category-mapping.js +0 -49
- package/dist/presets/corpus.d.ts +0 -2
- package/dist/presets/corpus.js +0 -194
- package/dist/presets/public-gallery.d.ts +0 -266
- package/dist/presets/public-gallery.js +0 -916
- package/dist/presets/public-handoff.d.ts +0 -164
- package/dist/presets/public-handoff.js +0 -361
- package/dist/presets/public-preview-artifacts.d.ts +0 -43
- package/dist/presets/public-preview-artifacts.js +0 -104
- package/dist/presets/public-preview.d.ts +0 -61
- package/dist/presets/public-preview.js +0 -83
- package/dist/presets/showcase.d.ts +0 -2
- package/dist/presets/showcase.js +0 -627
- package/dist/presets/sources.d.ts +0 -38
- package/dist/presets/sources.js +0 -6083
- package/dist/presets.d.ts +0 -2
- package/dist/presets.js +0 -881
- package/dist/printer.d.ts +0 -6
- package/dist/printer.js +0 -122
- package/dist/registry.d.ts +0 -42
- package/dist/registry.js +0 -646
- package/dist/render-template.d.ts +0 -45
- package/dist/render-template.js +0 -76
- package/dist/showcase-DGZAWn4Z.d.ts +0 -456
- package/dist/sms-segments-y4FpPilJ.d.ts +0 -13
- package/dist/source-locations-DrCM82Ym.d.ts +0 -67
- package/dist/template-DWftqh4x.d.ts +0 -60
- package/dist/theme-6ApjjiBo.d.ts +0 -116
- package/dist/theme.d.ts +0 -2
- package/dist/theme.js +0 -118
- package/dist/tokens.d.ts +0 -6
- package/dist/tokens.js +0 -417
- package/dist/tsx-source-instrumentation.d.ts +0 -30
- package/dist/tsx-source-instrumentation.js +0 -115
- package/dist/tsx-tracer.d.ts +0 -112
- package/dist/tsx-tracer.js +0 -985
- package/dist/variables-J_L3qxRa.d.ts +0 -77
- package/dist/variables.d.ts +0 -2
- package/dist/variables.js +0 -141
- package/dist/version-BITr58kk.js +0 -96
- package/generated/sml-agent-contract.json +0 -709
- package/generated/sml-email-agent-contract.json +0 -615
- package/generated/sml-email-language-reference.md +0 -94
- package/generated/sml-language-reference.md +0 -195
package/dist/components.d.ts
DELETED
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
import { f as ElementNode } from "./ast-BrDtApwS.js";
|
|
2
|
-
import { i as EMAIL_TAG_SPECS, l as WHATSAPP_TAG_SPECS, o as TagSpec, t as AttributeSpec } from "./parser-t29cHLVL.js";
|
|
3
|
-
import { r as PredicateRef, s as VariableRef } from "./variables-J_L3qxRa.js";
|
|
4
|
-
import { s as SmlChildren } from "./jsx-runtime-I-1nCtl2.js";
|
|
5
|
-
//#region src/components.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* The scalar type an attribute spec accepts. `level` narrows to the Heading
|
|
8
|
-
* union; a spec with `values` narrows to that literal union (no VariableRef —
|
|
9
|
-
* enum attributes are structural, not send-time holes); other string
|
|
10
|
-
* attributes also take a VariableRef (href={v.ctaUrl}), which embeds as its
|
|
11
|
-
* send-time interpolation.
|
|
12
|
-
*/
|
|
13
|
-
type AttributeType<Name extends string, Spec extends AttributeSpec> = Name extends "level" ? HeadingLevel : Spec["type"] extends "number" ? number : Spec["values"] extends ReadonlyArray<string> ? Spec["values"][number] : string | VariableRef<string>;
|
|
14
|
-
/** Required attributes become required props; the rest are optional. */
|
|
15
|
-
type AttributeProps<Attributes extends Readonly<Record<string, AttributeSpec>>> = { [K in keyof Attributes as Attributes[K]["required"] extends true ? K : never]: AttributeType<K & string, Attributes[K]>; } & { [K in keyof Attributes as Attributes[K]["required"] extends true ? never : K]?: AttributeType<K & string, Attributes[K]>; };
|
|
16
|
-
type ChildrenProp<Content extends TagSpec["content"]> = Content extends "void" ? Record<never, never> : {
|
|
17
|
-
readonly children?: SmlChildren | undefined;
|
|
18
|
-
};
|
|
19
|
-
/** Full prop type for one spec: its attributes (typed/required) plus children where allowed. */
|
|
20
|
-
type PropsOf<Spec extends TagSpec> = AttributeProps<Spec["attributes"]> & ChildrenProp<Spec["content"]>;
|
|
21
|
-
/** Prop type for an email-table tag (the shared If/Else live here too). */
|
|
22
|
-
type PropsFor<Tag extends keyof typeof EMAIL_TAG_SPECS> = PropsOf<(typeof EMAIL_TAG_SPECS)[Tag]>;
|
|
23
|
-
type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
|
|
24
|
-
declare const Email: (props: PropsOf<{
|
|
25
|
-
readonly attributes: {
|
|
26
|
-
readonly lang: {
|
|
27
|
-
readonly type: "string";
|
|
28
|
-
};
|
|
29
|
-
readonly dir: {
|
|
30
|
-
readonly type: "string";
|
|
31
|
-
};
|
|
32
|
-
readonly width: {
|
|
33
|
-
readonly type: "number";
|
|
34
|
-
readonly min: 1;
|
|
35
|
-
readonly max: 10000;
|
|
36
|
-
};
|
|
37
|
-
readonly class: {
|
|
38
|
-
readonly type: "string";
|
|
39
|
-
};
|
|
40
|
-
};
|
|
41
|
-
readonly content: "email";
|
|
42
|
-
}>) => ElementNode;
|
|
43
|
-
declare const Subject: (props: PropsOf<{
|
|
44
|
-
readonly attributes: {};
|
|
45
|
-
readonly content: "preview";
|
|
46
|
-
}>) => ElementNode;
|
|
47
|
-
declare const Preview: (props: PropsOf<{
|
|
48
|
-
readonly attributes: {};
|
|
49
|
-
readonly content: "preview";
|
|
50
|
-
}>) => ElementNode;
|
|
51
|
-
declare const Container: (props: PropsOf<{
|
|
52
|
-
readonly attributes: {
|
|
53
|
-
readonly backgroundImage: {
|
|
54
|
-
readonly type: "string";
|
|
55
|
-
};
|
|
56
|
-
readonly backgroundPosition: {
|
|
57
|
-
readonly type: "string";
|
|
58
|
-
readonly values: readonly ["center", "top", "bottom"];
|
|
59
|
-
};
|
|
60
|
-
readonly backgroundSize: {
|
|
61
|
-
readonly type: "string";
|
|
62
|
-
readonly values: readonly ["cover", "contain", "auto"];
|
|
63
|
-
};
|
|
64
|
-
readonly class: {
|
|
65
|
-
readonly type: "string";
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
readonly content: "block";
|
|
69
|
-
}>) => ElementNode;
|
|
70
|
-
declare const Section: (props: PropsOf<{
|
|
71
|
-
readonly attributes: {
|
|
72
|
-
readonly backgroundImage: {
|
|
73
|
-
readonly type: "string";
|
|
74
|
-
};
|
|
75
|
-
readonly backgroundPosition: {
|
|
76
|
-
readonly type: "string";
|
|
77
|
-
readonly values: readonly ["center", "top", "bottom"];
|
|
78
|
-
};
|
|
79
|
-
readonly backgroundSize: {
|
|
80
|
-
readonly type: "string";
|
|
81
|
-
readonly values: readonly ["cover", "contain", "auto"];
|
|
82
|
-
};
|
|
83
|
-
readonly class: {
|
|
84
|
-
readonly type: "string";
|
|
85
|
-
};
|
|
86
|
-
};
|
|
87
|
-
readonly content: "block";
|
|
88
|
-
}>) => ElementNode;
|
|
89
|
-
declare const Row: (props: PropsOf<{
|
|
90
|
-
readonly attributes: {
|
|
91
|
-
readonly class: {
|
|
92
|
-
readonly type: "string";
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
readonly content: "columns";
|
|
96
|
-
}>) => ElementNode;
|
|
97
|
-
declare const Column: (props: PropsOf<{
|
|
98
|
-
readonly attributes: {
|
|
99
|
-
readonly class: {
|
|
100
|
-
readonly type: "string";
|
|
101
|
-
};
|
|
102
|
-
readonly width: {
|
|
103
|
-
readonly type: "string";
|
|
104
|
-
};
|
|
105
|
-
readonly valign: {
|
|
106
|
-
readonly type: "string";
|
|
107
|
-
readonly values: readonly ["top", "middle", "bottom"];
|
|
108
|
-
};
|
|
109
|
-
};
|
|
110
|
-
readonly content: "block";
|
|
111
|
-
}>) => ElementNode;
|
|
112
|
-
declare const Text: (props: PropsOf<{
|
|
113
|
-
readonly attributes: {
|
|
114
|
-
readonly class: {
|
|
115
|
-
readonly type: "string";
|
|
116
|
-
};
|
|
117
|
-
};
|
|
118
|
-
readonly content: "inline";
|
|
119
|
-
}>) => ElementNode;
|
|
120
|
-
declare const Image: (props: PropsOf<{
|
|
121
|
-
readonly attributes: {
|
|
122
|
-
readonly src: {
|
|
123
|
-
readonly type: "string";
|
|
124
|
-
readonly required: true;
|
|
125
|
-
};
|
|
126
|
-
readonly alt: {
|
|
127
|
-
readonly type: "string";
|
|
128
|
-
};
|
|
129
|
-
readonly width: {
|
|
130
|
-
readonly type: "number";
|
|
131
|
-
readonly min: 0;
|
|
132
|
-
readonly max: 10000;
|
|
133
|
-
};
|
|
134
|
-
readonly height: {
|
|
135
|
-
readonly type: "number";
|
|
136
|
-
readonly min: 0;
|
|
137
|
-
readonly max: 10000;
|
|
138
|
-
};
|
|
139
|
-
readonly class: {
|
|
140
|
-
readonly type: "string";
|
|
141
|
-
};
|
|
142
|
-
};
|
|
143
|
-
readonly content: "image";
|
|
144
|
-
}>) => ElementNode;
|
|
145
|
-
declare const Source: (props: PropsOf<{
|
|
146
|
-
readonly attributes: {
|
|
147
|
-
readonly scheme: {
|
|
148
|
-
readonly type: "string";
|
|
149
|
-
readonly required: true;
|
|
150
|
-
readonly values: readonly ["dark"];
|
|
151
|
-
};
|
|
152
|
-
readonly src: {
|
|
153
|
-
readonly type: "string";
|
|
154
|
-
readonly required: true;
|
|
155
|
-
};
|
|
156
|
-
};
|
|
157
|
-
readonly content: "void";
|
|
158
|
-
}>) => ElementNode;
|
|
159
|
-
declare const Divider: (props: PropsOf<{
|
|
160
|
-
readonly attributes: {
|
|
161
|
-
readonly class: {
|
|
162
|
-
readonly type: "string";
|
|
163
|
-
};
|
|
164
|
-
};
|
|
165
|
-
readonly content: "void";
|
|
166
|
-
}>) => ElementNode;
|
|
167
|
-
declare const Spacer: (props: PropsOf<{
|
|
168
|
-
readonly attributes: {
|
|
169
|
-
readonly height: {
|
|
170
|
-
readonly type: "number";
|
|
171
|
-
readonly required: true;
|
|
172
|
-
readonly min: 1;
|
|
173
|
-
readonly max: 2000;
|
|
174
|
-
};
|
|
175
|
-
};
|
|
176
|
-
readonly content: "void";
|
|
177
|
-
}>) => ElementNode;
|
|
178
|
-
declare const List: (props: PropsOf<{
|
|
179
|
-
readonly attributes: {
|
|
180
|
-
readonly type: {
|
|
181
|
-
readonly type: "string";
|
|
182
|
-
readonly values: readonly ["unordered", "ordered"];
|
|
183
|
-
};
|
|
184
|
-
readonly class: {
|
|
185
|
-
readonly type: "string";
|
|
186
|
-
};
|
|
187
|
-
};
|
|
188
|
-
readonly content: "list";
|
|
189
|
-
}>) => ElementNode;
|
|
190
|
-
declare const ListItem: (props: PropsOf<{
|
|
191
|
-
readonly attributes: {
|
|
192
|
-
readonly class: {
|
|
193
|
-
readonly type: "string";
|
|
194
|
-
};
|
|
195
|
-
};
|
|
196
|
-
readonly content: "inline";
|
|
197
|
-
}>) => ElementNode;
|
|
198
|
-
/** Heading — `level` is the literal 1–6 union the grammar bounds it to. */
|
|
199
|
-
declare const Heading: (props: PropsFor<"Heading">) => ElementNode;
|
|
200
|
-
/**
|
|
201
|
-
* `<Button>` is two tags in one name: the email link-button (`href` required)
|
|
202
|
-
* and the WhatsApp template button (`type` required, `url`/`phone` per type).
|
|
203
|
-
* The union keeps both authorable; the parser's per-channel table rejects the
|
|
204
|
-
* wrong one at render time.
|
|
205
|
-
*/
|
|
206
|
-
declare const Button: (props: PropsFor<"Button"> | PropsOf<(typeof WHATSAPP_TAG_SPECS)["Button"]>) => ElementNode;
|
|
207
|
-
declare const Strong: (props: PropsOf<{
|
|
208
|
-
readonly attributes: {};
|
|
209
|
-
readonly content: "inline-nolink";
|
|
210
|
-
}>) => ElementNode;
|
|
211
|
-
declare const Em: (props: PropsOf<{
|
|
212
|
-
readonly attributes: {};
|
|
213
|
-
readonly content: "inline-nolink";
|
|
214
|
-
}>) => ElementNode;
|
|
215
|
-
declare const A: (props: PropsOf<{
|
|
216
|
-
readonly attributes: {
|
|
217
|
-
readonly href: {
|
|
218
|
-
readonly type: "string";
|
|
219
|
-
readonly required: true;
|
|
220
|
-
};
|
|
221
|
-
readonly class: {
|
|
222
|
-
readonly type: "string";
|
|
223
|
-
};
|
|
224
|
-
};
|
|
225
|
-
readonly content: "inline-nolink";
|
|
226
|
-
}>) => ElementNode;
|
|
227
|
-
declare const Sms: (props: PropsOf<{
|
|
228
|
-
readonly attributes: {
|
|
229
|
-
readonly category: {
|
|
230
|
-
readonly type: "string";
|
|
231
|
-
readonly values: readonly ["transactional", "promotional", "service_implicit"];
|
|
232
|
-
};
|
|
233
|
-
};
|
|
234
|
-
readonly content: "verbatim";
|
|
235
|
-
}>) => ElementNode;
|
|
236
|
-
declare const WhatsApp: (props: PropsOf<{
|
|
237
|
-
readonly attributes: {
|
|
238
|
-
readonly name: {
|
|
239
|
-
readonly type: "string";
|
|
240
|
-
};
|
|
241
|
-
readonly language: {
|
|
242
|
-
readonly type: "string";
|
|
243
|
-
};
|
|
244
|
-
readonly category: {
|
|
245
|
-
readonly type: "string";
|
|
246
|
-
readonly required: true;
|
|
247
|
-
readonly values: readonly ["marketing", "utility", "authentication"];
|
|
248
|
-
};
|
|
249
|
-
};
|
|
250
|
-
readonly content: "whatsapp";
|
|
251
|
-
}>) => ElementNode;
|
|
252
|
-
declare const Header: (props: PropsOf<{
|
|
253
|
-
readonly attributes: {
|
|
254
|
-
readonly type: {
|
|
255
|
-
readonly type: "string";
|
|
256
|
-
readonly values: readonly ["text", "image", "video", "document"];
|
|
257
|
-
};
|
|
258
|
-
};
|
|
259
|
-
readonly content: "verbatim";
|
|
260
|
-
}>) => ElementNode;
|
|
261
|
-
declare const Body: (props: PropsOf<{
|
|
262
|
-
readonly attributes: {};
|
|
263
|
-
readonly content: "verbatim";
|
|
264
|
-
}>) => ElementNode;
|
|
265
|
-
declare const Footer: (props: PropsOf<{
|
|
266
|
-
readonly attributes: {};
|
|
267
|
-
readonly content: "verbatim";
|
|
268
|
-
}>) => ElementNode;
|
|
269
|
-
declare const Buttons: (props: PropsOf<{
|
|
270
|
-
readonly attributes: {};
|
|
271
|
-
readonly content: "buttons";
|
|
272
|
-
}>) => ElementNode;
|
|
273
|
-
/**
|
|
274
|
-
* `<If test={v.plan.eq("pro").and(v.seats.gt(5))}>…<Else>…</Else></If>`. The
|
|
275
|
-
* predicate ref is printed to the closed predicate source the parser validates;
|
|
276
|
-
* a plain VariableRef (someone wrote `test={v.plan}`) is a common slip, so name
|
|
277
|
-
* the fix instead of coercing.
|
|
278
|
-
*/
|
|
279
|
-
declare const If: (props: {
|
|
280
|
-
readonly test: PredicateRef;
|
|
281
|
-
readonly children?: SmlChildren | undefined;
|
|
282
|
-
}) => ElementNode;
|
|
283
|
-
/** `<Else>` — the trailing branch of an `<If>`; children only. */
|
|
284
|
-
declare const Else: (props: {
|
|
285
|
-
readonly children?: SmlChildren | undefined;
|
|
286
|
-
}) => ElementNode;
|
|
287
|
-
//#endregion
|
|
288
|
-
export { A, Body, Button, Buttons, Column, Container, Divider, Else, Em, Email, Footer, Header, Heading, HeadingLevel, If, Image, List, ListItem, Preview, Row, Section, Sms, Source, Spacer, Strong, Subject, Text, WhatsApp };
|
|
289
|
-
//# sourceMappingURL=components.d.ts.map
|
package/dist/components.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { VARIABLE_REF, isPredicateRef, isVariableRef, printPredicateRef } from "./variables.js";
|
|
2
|
-
import { elementDraft, normalizeChildren } from "./jsx-runtime.js";
|
|
3
|
-
import { EMAIL_TAG_SPECS, SMS_TAG_SPECS, WHATSAPP_TAG_SPECS } from "./parser.js";
|
|
4
|
-
//#region src/components.ts
|
|
5
|
-
const PLACEHOLDER_SPAN = {
|
|
6
|
-
start: 0,
|
|
7
|
-
end: 0
|
|
8
|
-
};
|
|
9
|
-
const attribute = (name, value) => ({
|
|
10
|
-
name,
|
|
11
|
-
value,
|
|
12
|
-
span: PLACEHOLDER_SPAN,
|
|
13
|
-
valueSpan: PLACEHOLDER_SPAN
|
|
14
|
-
});
|
|
15
|
-
/**
|
|
16
|
-
* Maps a props object onto ordered attributes in AUTHORED order — object keys
|
|
17
|
-
* preserve JSX insertion order, and the printer preserves attribute order, so
|
|
18
|
-
* `<Column width="50%" class="pr-2">` round-trips as written rather than being
|
|
19
|
-
* reordered to the spec's declaration order. `children` is skipped; the spec's
|
|
20
|
-
* declared type per attribute picks the AttributeValue kind.
|
|
21
|
-
*/
|
|
22
|
-
const attributesFor = (spec, props) => {
|
|
23
|
-
const out = [];
|
|
24
|
-
for (const [name, value] of Object.entries(props)) {
|
|
25
|
-
if (name === "children" || value === void 0) continue;
|
|
26
|
-
const attributeSpec = spec.attributes[name];
|
|
27
|
-
if (isVariableRef(value)) {
|
|
28
|
-
out.push(attribute(name, {
|
|
29
|
-
kind: "string",
|
|
30
|
-
value: `{{${value[VARIABLE_REF].path}}}`
|
|
31
|
-
}));
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
if (attributeSpec?.type === "number") out.push(attribute(name, {
|
|
35
|
-
kind: "number",
|
|
36
|
-
value
|
|
37
|
-
}));
|
|
38
|
-
else out.push(attribute(name, {
|
|
39
|
-
kind: "string",
|
|
40
|
-
value: String(value)
|
|
41
|
-
}));
|
|
42
|
-
}
|
|
43
|
-
return out;
|
|
44
|
-
};
|
|
45
|
-
/** Builds a component for a tag whose attributes are all plain scalars. */
|
|
46
|
-
const scalarComponent = (tag, spec) => (props) => {
|
|
47
|
-
const record = props;
|
|
48
|
-
return elementDraft(tag, attributesFor(spec, record), spec.content === "void" ? [] : normalizeChildren(record.children));
|
|
49
|
-
};
|
|
50
|
-
const Email = scalarComponent("Email", EMAIL_TAG_SPECS.Email);
|
|
51
|
-
const Subject = scalarComponent("Subject", EMAIL_TAG_SPECS.Subject);
|
|
52
|
-
const Preview = scalarComponent("Preview", EMAIL_TAG_SPECS.Preview);
|
|
53
|
-
const Container = scalarComponent("Container", EMAIL_TAG_SPECS.Container);
|
|
54
|
-
const Section = scalarComponent("Section", EMAIL_TAG_SPECS.Section);
|
|
55
|
-
const Row = scalarComponent("Row", EMAIL_TAG_SPECS.Row);
|
|
56
|
-
const Column = scalarComponent("Column", EMAIL_TAG_SPECS.Column);
|
|
57
|
-
const Text = scalarComponent("Text", EMAIL_TAG_SPECS.Text);
|
|
58
|
-
const Image = scalarComponent("Image", EMAIL_TAG_SPECS.Image);
|
|
59
|
-
const Source = scalarComponent("Source", EMAIL_TAG_SPECS.Source);
|
|
60
|
-
const Divider = scalarComponent("Divider", EMAIL_TAG_SPECS.Divider);
|
|
61
|
-
const Spacer = scalarComponent("Spacer", EMAIL_TAG_SPECS.Spacer);
|
|
62
|
-
const List = scalarComponent("List", EMAIL_TAG_SPECS.List);
|
|
63
|
-
const ListItem = scalarComponent("ListItem", EMAIL_TAG_SPECS.ListItem);
|
|
64
|
-
/** Heading — `level` is the literal 1–6 union the grammar bounds it to. */
|
|
65
|
-
const Heading = (props) => scalarComponent("Heading", EMAIL_TAG_SPECS.Heading)(props);
|
|
66
|
-
/**
|
|
67
|
-
* `<Button>` is two tags in one name: the email link-button (`href` required)
|
|
68
|
-
* and the WhatsApp template button (`type` required, `url`/`phone` per type).
|
|
69
|
-
* The union keeps both authorable; the parser's per-channel table rejects the
|
|
70
|
-
* wrong one at render time.
|
|
71
|
-
*/
|
|
72
|
-
const Button = (props) => {
|
|
73
|
-
const record = props;
|
|
74
|
-
return elementDraft("Button", attributesFor(EMAIL_TAG_SPECS.Button, record), normalizeChildren(record.children));
|
|
75
|
-
};
|
|
76
|
-
const Strong = scalarComponent("strong", EMAIL_TAG_SPECS.strong);
|
|
77
|
-
const Em = scalarComponent("em", EMAIL_TAG_SPECS.em);
|
|
78
|
-
const A = scalarComponent("a", EMAIL_TAG_SPECS.a);
|
|
79
|
-
const Sms = scalarComponent("Sms", SMS_TAG_SPECS.Sms);
|
|
80
|
-
const WhatsApp = scalarComponent("WhatsApp", WHATSAPP_TAG_SPECS.WhatsApp);
|
|
81
|
-
const Header = scalarComponent("Header", WHATSAPP_TAG_SPECS.Header);
|
|
82
|
-
const Body = scalarComponent("Body", WHATSAPP_TAG_SPECS.Body);
|
|
83
|
-
const Footer = scalarComponent("Footer", WHATSAPP_TAG_SPECS.Footer);
|
|
84
|
-
const Buttons = scalarComponent("Buttons", WHATSAPP_TAG_SPECS.Buttons);
|
|
85
|
-
/**
|
|
86
|
-
* `<If test={v.plan.eq("pro").and(v.seats.gt(5))}>…<Else>…</Else></If>`. The
|
|
87
|
-
* predicate ref is printed to the closed predicate source the parser validates;
|
|
88
|
-
* a plain VariableRef (someone wrote `test={v.plan}`) is a common slip, so name
|
|
89
|
-
* the fix instead of coercing.
|
|
90
|
-
*/
|
|
91
|
-
const If = (props) => {
|
|
92
|
-
if (!isPredicateRef(props.test)) {
|
|
93
|
-
const hint = isVariableRef(props.test) ? `— a bare variable is not a condition; write test={var.exists()} or a comparison like .eq(...)` : "— build it with the variable predicate builders (eq/ne/gt/…, and/or/not)";
|
|
94
|
-
throw new TypeError(`<If test> must be a predicate ${hint}`);
|
|
95
|
-
}
|
|
96
|
-
return elementDraft("If", [attribute("test", {
|
|
97
|
-
kind: "string",
|
|
98
|
-
value: printPredicateRef(props.test)
|
|
99
|
-
})], normalizeChildren(props.children));
|
|
100
|
-
};
|
|
101
|
-
/** `<Else>` — the trailing branch of an `<If>`; children only. */
|
|
102
|
-
const Else = (props) => elementDraft("Else", [], normalizeChildren(props.children));
|
|
103
|
-
//#endregion
|
|
104
|
-
export { A, Body, Button, Buttons, Column, Container, Divider, Else, Em, Email, Footer, Header, Heading, If, Image, List, ListItem, Preview, Row, Section, Sms, Source, Spacer, Strong, Subject, Text, WhatsApp };
|
|
105
|
-
|
|
106
|
-
//# sourceMappingURL=components.js.map
|
package/dist/conditionals.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
//#region src/conditionals.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Selects <If> branches in a compiled artifact (html or plain-text alt) for
|
|
4
|
-
* one recipient's variables and strips all sml: markers. Marker-free content
|
|
5
|
-
* passes through unchanged.
|
|
6
|
-
*/
|
|
7
|
-
declare const resolveArtifactConditionals: (content: string, variables: Record<string, unknown>) => string;
|
|
8
|
-
//#endregion
|
|
9
|
-
export { resolveArtifactConditionals };
|
|
10
|
-
//# sourceMappingURL=conditionals.d.ts.map
|
package/dist/conditionals.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { i as parsePredicate, r as evaluatePredicate } from "./predicate-BI6uRRM-.js";
|
|
2
|
-
import { Result } from "better-result";
|
|
3
|
-
//#region src/conditionals.ts
|
|
4
|
-
const IF_MARKER = "<!--sml:if:";
|
|
5
|
-
const MARKER_CLOSE = "-->";
|
|
6
|
-
const resolve = (content, variables) => {
|
|
7
|
-
const stack = [{
|
|
8
|
-
cursor: 0,
|
|
9
|
-
end: content.length,
|
|
10
|
-
trim: false,
|
|
11
|
-
chunks: []
|
|
12
|
-
}];
|
|
13
|
-
let resolved = content;
|
|
14
|
-
while (stack.length > 0) {
|
|
15
|
-
const frame = stack.at(-1);
|
|
16
|
-
const start = content.indexOf(IF_MARKER, frame.cursor);
|
|
17
|
-
if (start === -1 || start >= frame.end) {
|
|
18
|
-
frame.chunks.push(content.slice(frame.cursor, frame.end));
|
|
19
|
-
const value = frame.trim ? frame.chunks.join("").trim() : frame.chunks.join("");
|
|
20
|
-
stack.pop();
|
|
21
|
-
const parent = stack.at(-1);
|
|
22
|
-
if (parent === void 0) resolved = value;
|
|
23
|
-
else parent.chunks.push(value);
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const headEnd = content.indexOf(MARKER_CLOSE, start);
|
|
27
|
-
if (headEnd === -1 || headEnd >= frame.end) {
|
|
28
|
-
frame.chunks.push(content.slice(frame.cursor, frame.end));
|
|
29
|
-
frame.cursor = frame.end;
|
|
30
|
-
continue;
|
|
31
|
-
}
|
|
32
|
-
const header = content.slice(start + 11, headEnd);
|
|
33
|
-
const spaceIndex = header.indexOf(" ");
|
|
34
|
-
const id = spaceIndex === -1 ? header : header.slice(0, spaceIndex);
|
|
35
|
-
const predicateSource = spaceIndex === -1 ? "" : header.slice(spaceIndex + 1);
|
|
36
|
-
const elseMarker = `<!--sml:else:${id}-->`;
|
|
37
|
-
const endMarker = `<!--sml:endif:${id}-->`;
|
|
38
|
-
const bodyStart = headEnd + 3;
|
|
39
|
-
const endIndex = content.indexOf(endMarker, bodyStart);
|
|
40
|
-
if (endIndex === -1 || endIndex + endMarker.length > frame.end) {
|
|
41
|
-
frame.chunks.push(content.slice(frame.cursor, frame.end));
|
|
42
|
-
frame.cursor = frame.end;
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
const elseCandidate = content.indexOf(elseMarker, bodyStart);
|
|
46
|
-
const elseIndex = elseCandidate !== -1 && elseCandidate < endIndex ? elseCandidate : -1;
|
|
47
|
-
const parsed = parsePredicate(predicateSource);
|
|
48
|
-
const condition = Result.isOk(parsed) && evaluatePredicate(parsed.value, variables);
|
|
49
|
-
const branchStart = condition ? bodyStart : elseIndex === -1 ? endIndex : elseIndex + elseMarker.length;
|
|
50
|
-
const branchEnd = condition && elseIndex !== -1 ? elseIndex : endIndex;
|
|
51
|
-
frame.chunks.push(content.slice(frame.cursor, start));
|
|
52
|
-
frame.cursor = endIndex + endMarker.length;
|
|
53
|
-
stack.push({
|
|
54
|
-
cursor: branchStart,
|
|
55
|
-
end: branchEnd,
|
|
56
|
-
trim: true,
|
|
57
|
-
chunks: []
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
return resolved;
|
|
61
|
-
};
|
|
62
|
-
/**
|
|
63
|
-
* Selects <If> branches in a compiled artifact (html or plain-text alt) for
|
|
64
|
-
* one recipient's variables and strips all sml: markers. Marker-free content
|
|
65
|
-
* passes through unchanged.
|
|
66
|
-
*/
|
|
67
|
-
const resolveArtifactConditionals = (content, variables) => {
|
|
68
|
-
if (!content.includes(IF_MARKER)) return content;
|
|
69
|
-
return resolve(content, variables).replace(/\n{3,}/g, "\n\n");
|
|
70
|
-
};
|
|
71
|
-
//#endregion
|
|
72
|
-
export { resolveArtifactConditionals };
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=conditionals.js.map
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { n as OwnedShowcaseId, t as BrandRecreationShowcaseId } from "./showcase-DGZAWn4Z.js";
|
|
2
|
-
import { Result } from "better-result";
|
|
3
|
-
//#region presets/corpus.d.ts
|
|
4
|
-
type TemplateCorpusKind = "owned-editable-sml" | "brand-recreation-sml" | "inspiration-reference";
|
|
5
|
-
declare const templateFacetOptions: {
|
|
6
|
-
readonly jobType: readonly ["account-access", "commerce", "product-communication", "lifecycle", "publishing-campaigns"];
|
|
7
|
-
readonly lifecycle: readonly ["acquisition", "activation", "engagement", "transaction", "retention", "recovery"];
|
|
8
|
-
readonly industry: readonly ["saas", "ecommerce", "developer-tools", "newsletters-media"];
|
|
9
|
-
readonly season: readonly ["evergreen", "seasonal"];
|
|
10
|
-
readonly audience: readonly ["product-users", "customers", "members", "readers", "shoppers", "teams"];
|
|
11
|
-
readonly design: readonly ["minimal", "branded", "editorial", "data-heavy", "single-cta"];
|
|
12
|
-
readonly brandProvenance: readonly ["samva-original", "third-party-reference"];
|
|
13
|
-
};
|
|
14
|
-
/** Every facet dimension, with the closed value list each accepts. */
|
|
15
|
-
type TemplateFacetSet = { readonly [Dimension in keyof typeof templateFacetOptions]: ReadonlyArray<(typeof templateFacetOptions)[Dimension][number]>; };
|
|
16
|
-
interface CorpusReview {
|
|
17
|
-
readonly state: "draft" | "approved" | "rejected";
|
|
18
|
-
readonly reviewedBy: string;
|
|
19
|
-
readonly reviewedAt: string;
|
|
20
|
-
readonly notes: string;
|
|
21
|
-
}
|
|
22
|
-
interface CorpusDisplay {
|
|
23
|
-
readonly state: "hidden" | "public";
|
|
24
|
-
readonly attributionLabel: string;
|
|
25
|
-
}
|
|
26
|
-
interface CorpusRetention {
|
|
27
|
-
readonly policy: "retain-until-withdrawn" | "retain-while-linked";
|
|
28
|
-
readonly reviewedAt: string;
|
|
29
|
-
}
|
|
30
|
-
interface CorpusTakedown {
|
|
31
|
-
readonly state: "active" | "removed";
|
|
32
|
-
readonly contact: string;
|
|
33
|
-
readonly procedureUrl: string;
|
|
34
|
-
}
|
|
35
|
-
interface OwnedEditablePreset {
|
|
36
|
-
readonly type: "OwnedEditablePreset";
|
|
37
|
-
readonly corpusKind: "owned-editable-sml";
|
|
38
|
-
readonly provenance: {
|
|
39
|
-
readonly owner: "Samva";
|
|
40
|
-
readonly sourcePath: string;
|
|
41
|
-
readonly recordedAt: string;
|
|
42
|
-
};
|
|
43
|
-
readonly review: CorpusReview;
|
|
44
|
-
readonly display: CorpusDisplay;
|
|
45
|
-
readonly retention: CorpusRetention;
|
|
46
|
-
readonly takedown: CorpusTakedown;
|
|
47
|
-
}
|
|
48
|
-
interface BrandRecreationPreset {
|
|
49
|
-
readonly type: "BrandRecreationPreset";
|
|
50
|
-
readonly corpusKind: "brand-recreation-sml";
|
|
51
|
-
readonly provenance: {
|
|
52
|
-
readonly owner: "Samva";
|
|
53
|
-
readonly sourcePath: string;
|
|
54
|
-
readonly recordedAt: string;
|
|
55
|
-
/** The brand whose own email is recreated, named on every public surface. */
|
|
56
|
-
readonly brand: string;
|
|
57
|
-
/** What that brand's email does, in the customer's words. */
|
|
58
|
-
readonly subject: string;
|
|
59
|
-
readonly reviewedNote: string;
|
|
60
|
-
};
|
|
61
|
-
readonly review: CorpusReview;
|
|
62
|
-
readonly display: CorpusDisplay;
|
|
63
|
-
readonly retention: CorpusRetention;
|
|
64
|
-
readonly takedown: CorpusTakedown;
|
|
65
|
-
}
|
|
66
|
-
/** Clean-room recreations of a named brand's own email, authored as editable Samva projects. */
|
|
67
|
-
declare const brandRecreationProvenance: Record<BrandRecreationShowcaseId, BrandRecreationPreset["provenance"]>;
|
|
68
|
-
/**
|
|
69
|
-
* Owned presets authored as complete showcase projects with their own stylesheet and assets.
|
|
70
|
-
* Every other owned preset is the single module `packages/markup/presets/<id>.tsx`.
|
|
71
|
-
*/
|
|
72
|
-
declare const ownedShowcasePresetSources: Record<OwnedShowcaseId, string>;
|
|
73
|
-
declare const ownedPresetSourcePath: (id: string) => string;
|
|
74
|
-
interface InspirationReference {
|
|
75
|
-
readonly type: "InspirationReference";
|
|
76
|
-
readonly corpusKind: "inspiration-reference";
|
|
77
|
-
readonly provenance: {
|
|
78
|
-
readonly publisher: string;
|
|
79
|
-
readonly sourceUrl: string;
|
|
80
|
-
readonly capturedAt: string;
|
|
81
|
-
readonly rightsBasis: "display-link-and-commentary" | "permission";
|
|
82
|
-
};
|
|
83
|
-
readonly review: CorpusReview;
|
|
84
|
-
readonly display: CorpusDisplay;
|
|
85
|
-
readonly retention: CorpusRetention;
|
|
86
|
-
readonly takedown: CorpusTakedown;
|
|
87
|
-
}
|
|
88
|
-
type TemplateCorpusRecord = OwnedEditablePreset | BrandRecreationPreset | InspirationReference;
|
|
89
|
-
interface PublicCorpusRegistration {
|
|
90
|
-
readonly id: string;
|
|
91
|
-
readonly corpus: TemplateCorpusRecord;
|
|
92
|
-
readonly facets: TemplateFacetSet;
|
|
93
|
-
}
|
|
94
|
-
interface PublicCorpusRegistrationIssue {
|
|
95
|
-
readonly id: string;
|
|
96
|
-
readonly message: string;
|
|
97
|
-
}
|
|
98
|
-
/** Decode and gate a record before it can enter any public projection. */
|
|
99
|
-
declare const registerPublicCorpusEntry: (input: unknown) => Result<PublicCorpusRegistration, PublicCorpusRegistrationIssue>;
|
|
100
|
-
/** A facet selection: any dimension may be left unselected. */
|
|
101
|
-
type TemplateFacetQuery = Partial<TemplateFacetSet>;
|
|
102
|
-
/** Strict intersection: every selected value in every selected dimension must match. */
|
|
103
|
-
declare const matchesTemplateFacets: (facets: TemplateFacetSet, query: TemplateFacetQuery) => boolean;
|
|
104
|
-
//#endregion
|
|
105
|
-
export { PublicCorpusRegistrationIssue as a, TemplateFacetQuery as c, matchesTemplateFacets as d, ownedPresetSourcePath as f, templateFacetOptions as h, PublicCorpusRegistration as i, TemplateFacetSet as l, registerPublicCorpusEntry as m, InspirationReference as n, TemplateCorpusKind as o, ownedShowcasePresetSources as p, OwnedEditablePreset as r, TemplateCorpusRecord as s, BrandRecreationPreset as t, brandRecreationProvenance as u };
|
|
106
|
-
//# sourceMappingURL=corpus-BjYMqOoY.d.ts.map
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
//#region src/diagnostics.d.ts
|
|
2
|
-
interface Span {
|
|
3
|
-
readonly start: number;
|
|
4
|
-
readonly end: number;
|
|
5
|
-
}
|
|
6
|
-
interface DiagnosticRepair {
|
|
7
|
-
readonly kind: "replace-class" | "remove-class" | "rewrite-node" | "use-primitive";
|
|
8
|
-
readonly raw?: string | undefined;
|
|
9
|
-
readonly suggestions: ReadonlyArray<string>;
|
|
10
|
-
readonly explanation: string;
|
|
11
|
-
}
|
|
12
|
-
interface Diagnostic {
|
|
13
|
-
readonly code: string;
|
|
14
|
-
readonly message: string;
|
|
15
|
-
readonly span: Span;
|
|
16
|
-
readonly repair?: DiagnosticRepair | undefined;
|
|
17
|
-
}
|
|
18
|
-
declare const SmlParseError_base: import("better-result").TaggedErrorClass<"SmlParseError">;
|
|
19
|
-
declare class SmlParseError extends SmlParseError_base<{
|
|
20
|
-
readonly diagnostics: ReadonlyArray<Diagnostic>;
|
|
21
|
-
readonly message: string;
|
|
22
|
-
}> {
|
|
23
|
-
constructor(args: {
|
|
24
|
-
readonly diagnostics: ReadonlyArray<Diagnostic>;
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
declare const SmlCompileError_base: import("better-result").TaggedErrorClass<"SmlCompileError">;
|
|
28
|
-
declare class SmlCompileError extends SmlCompileError_base<{
|
|
29
|
-
readonly diagnostics: ReadonlyArray<Diagnostic>;
|
|
30
|
-
readonly message: string;
|
|
31
|
-
}> {
|
|
32
|
-
constructor(args: {
|
|
33
|
-
readonly diagnostics: ReadonlyArray<Diagnostic>;
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
/** Newline-offset line map. Build once per source, query with `lineColumn`. */
|
|
37
|
-
declare const buildLineMap: (source: string) => ReadonlyArray<number>;
|
|
38
|
-
/** 1-based line/column for an absolute offset, via binary search. */
|
|
39
|
-
declare const lineColumn: (lineMap: ReadonlyArray<number>, offset: number) => {
|
|
40
|
-
readonly line: number;
|
|
41
|
-
readonly column: number;
|
|
42
|
-
};
|
|
43
|
-
/** Build one formatter for a batch of diagnostics against the same source. */
|
|
44
|
-
declare const createDiagnosticFormatter: (source: string) => ((diagnostic: Diagnostic) => string);
|
|
45
|
-
/** "line 12:8 unknown class ..." — the shape agents iterate on. */
|
|
46
|
-
declare const formatDiagnostic: (source: string, diagnostic: Diagnostic) => string;
|
|
47
|
-
//#endregion
|
|
48
|
-
export { Span as a, formatDiagnostic as c, SmlParseError as i, lineColumn as l, DiagnosticRepair as n, buildLineMap as o, SmlCompileError as r, createDiagnosticFormatter as s, Diagnostic as t };
|
|
49
|
-
//# sourceMappingURL=diagnostics-OcQKQYSY.d.ts.map
|