@samva/markup 0.3.0 → 0.5.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.
Files changed (108) hide show
  1. package/AGENTS.md +17 -0
  2. package/dist/{ast-63I-VLQx.d.ts → ast-BLybiDxp.d.ts} +34 -60
  3. package/dist/ast.d.ts +2 -2
  4. package/dist/ast.js +4 -52
  5. package/dist/catalog-Db0UcCTg.d.ts +356 -0
  6. package/dist/{checks-DXuERO4B.js → checks-CmmITP6j.js} +14 -14
  7. package/dist/checks.d.ts +1 -1
  8. package/dist/checks.js +1 -1
  9. package/dist/classes.d.ts +1 -1
  10. package/dist/compile-sms.d.ts +3 -3
  11. package/dist/compile-whatsapp.d.ts +5 -5
  12. package/dist/compile-whatsapp.js +3 -3
  13. package/dist/compile.d.ts +5 -5
  14. package/dist/compile.js +5 -5
  15. package/dist/compiler.d.ts +4 -4
  16. package/dist/compiler.js +6 -6
  17. package/dist/components.d.ts +4 -4
  18. package/dist/conditionals.js +3 -3
  19. package/dist/corpus-CM7rKX41.d.ts +106 -0
  20. package/dist/{css-ar2lU3NC.d.ts → css-DoNc7CiC.d.ts} +4 -5
  21. package/dist/diagnostics-CqepLcpI.d.ts +47 -0
  22. package/dist/diagnostics-eFM9A_TU.d.ts +46 -0
  23. package/dist/diagnostics.d.ts +2 -2
  24. package/dist/diagnostics.js +15 -29
  25. package/dist/{elements-DtwKlFVH.d.ts → elements-ChJULZlh.d.ts} +40 -161
  26. package/dist/email/components.d.ts +1 -1
  27. package/dist/email/diagnostics.d.ts +1 -1
  28. package/dist/email/diagnostics.js +8 -43
  29. package/dist/email/elements.d.ts +1 -1
  30. package/dist/email/html.d.ts +2 -2
  31. package/dist/email/html.js +9 -9
  32. package/dist/email/jsx-dev-runtime.d.ts +3 -21
  33. package/dist/email/jsx-runtime.d.ts +1 -1
  34. package/dist/email/jsx-runtime.js +29 -3
  35. package/dist/email/render.d.ts +4 -4
  36. package/dist/email/render.js +1 -1
  37. package/dist/email/selection.d.ts +20 -31
  38. package/dist/email/selection.js +1 -53
  39. package/dist/email/source-edit.d.ts +1 -1
  40. package/dist/email/source-edit.js +2 -2
  41. package/dist/email/stylesheets.d.ts +1 -1
  42. package/dist/email/text.d.ts +1 -1
  43. package/dist/email/text.js +3 -3
  44. package/dist/emit.d.ts +2 -2
  45. package/dist/emit.js +5 -5
  46. package/dist/guards-eV1qLbf2.js +9 -0
  47. package/dist/{input-schema-BIfzI63B.d.ts → input-schema-7dPFVvNE.d.ts} +2 -2
  48. package/dist/input-schema-zjkgrXn2.js +455 -0
  49. package/dist/input-schema.d.ts +1 -1
  50. package/dist/input-schema.js +1 -169
  51. package/dist/interpolate.d.ts +9 -12
  52. package/dist/interpolate.js +1 -19
  53. package/dist/jsx-dev-runtime.d.ts +2 -2
  54. package/dist/{jsx-runtime-C5k_Zq0A.d.ts → jsx-runtime-BI4gI19E.d.ts} +3 -3
  55. package/dist/jsx-runtime.d.ts +1 -1
  56. package/dist/jsx-runtime.js +3 -3
  57. package/dist/model.d.ts +18 -33
  58. package/dist/model.js +4 -17
  59. package/dist/ops.d.ts +78 -172
  60. package/dist/ops.js +51 -117
  61. package/dist/{parser-CGBS73Gz.d.ts → parser-b_Kp5MT6.d.ts} +5 -5
  62. package/dist/parser.d.ts +1 -1
  63. package/dist/parser.js +8 -8
  64. package/dist/{predicate-G2SeSvoN.d.ts → predicate-Bmvgw7Ao.d.ts} +4 -4
  65. package/dist/{predicate-CvkzT-a2.js → predicate-DwXzmqIY.js} +11 -11
  66. package/dist/predicate.d.ts +1 -1
  67. package/dist/predicate.js +1 -1
  68. package/dist/presets/category-mapping.d.ts +1 -1
  69. package/dist/presets/corpus.d.ts +1 -1
  70. package/dist/presets/corpus.js +87 -140
  71. package/dist/presets/public-gallery.d.ts +106 -130
  72. package/dist/presets/public-gallery.js +131 -209
  73. package/dist/presets/public-handoff.d.ts +4 -4
  74. package/dist/presets/public-handoff.js +13 -11
  75. package/dist/presets/public-preview-artifacts.d.ts +5 -5
  76. package/dist/presets/public-preview-artifacts.js +9 -9
  77. package/dist/presets/public-preview.d.ts +0 -4
  78. package/dist/presets/public-preview.js +37 -362
  79. package/dist/presets/showcase.d.ts +2 -0
  80. package/dist/presets/showcase.js +627 -0
  81. package/dist/presets/sources.d.ts +1 -1
  82. package/dist/presets/sources.js +5767 -2023
  83. package/dist/presets.d.ts +2 -384
  84. package/dist/presets.js +299 -765
  85. package/dist/printer.d.ts +1 -1
  86. package/dist/{render-ykQhtMs_.js → render-T6IFPnP4.js} +12 -12
  87. package/dist/render-template.d.ts +7 -7
  88. package/dist/render-template.js +6 -6
  89. package/dist/showcase-dvJMn-Lo.d.ts +456 -0
  90. package/dist/{source-locations-BCJQnIfU.d.ts → source-locations-D6Te6Gy1.d.ts} +4 -26
  91. package/dist/source-locations.d.ts +2 -2
  92. package/dist/source-locations.js +3 -26
  93. package/dist/{template-Dy5yOPyp.d.ts → template-G-QPcfmn.d.ts} +4 -4
  94. package/dist/template.d.ts +1 -1
  95. package/dist/template.js +3 -3
  96. package/dist/theme-css.d.ts +3 -3
  97. package/dist/theme-css.js +3 -3
  98. package/dist/tsx-source-instrumentation.d.ts +1 -3
  99. package/dist/tsx-source-instrumentation.js +6 -6
  100. package/dist/tsx-tracer.d.ts +7 -11
  101. package/dist/tsx-tracer.js +164 -164
  102. package/dist/{variables-if1VrV34.d.ts → variables-BnKs1iqb.d.ts} +2 -2
  103. package/dist/variables.d.ts +1 -1
  104. package/dist/variables.js +4 -4
  105. package/package.json +8 -3
  106. package/dist/corpus-qrUD5O6r.d.ts +0 -254
  107. package/dist/diagnostics-Djd9ckLg.d.ts +0 -90
  108. package/dist/diagnostics-oveE-laV.d.ts +0 -79
package/AGENTS.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Samva Markup consumer guide
2
2
 
3
+ This package is plain TypeScript. It depends on no application runtime, so a template project
4
+ installs the compiler and nothing that comes with one. The structured SML surface — `parseSml`,
5
+ `compileSml`, `compileSource` — returns a better-result `Result` you branch on with `Result.isOk`
6
+ / `Result.isErr`, carrying a `TaggedError` such as `SmlParseError` or `SmlCompileError` that you
7
+ discriminate by `_tag`. Email compilation reports through `EmailDiagnostic` values instead. A
8
+ declaration the compiler cannot accept at all throws a `TypeError`: a template id or fixture key
9
+ that is not one plain path segment, a nonportable input schema, a project holding a reserved
10
+ compiler path.
11
+
12
+ Markup's own data models are types and interfaces, not schema declarations, so there is no schema
13
+ library to adopt to consume them. Their unions discriminate on `type`: an `EmailNode` is `Text`,
14
+ `Element`, `Fragment` or `Raw`, and an `SmlOp` names its edit the same way.
15
+ Only the better-result error classes carry `_tag`. A template's JSON input contract is the one
16
+ exception to the no-schema rule, because it has to be checked against real input: `inputSchema`
17
+ accepts any Standard Schema through the `@standard-schema/spec` types and returns a portable JSON
18
+ Schema with its validator, so which schema library an author reaches for stays theirs.
19
+
3
20
  Email entries default-export `defineEmail` definitions. SMS and WhatsApp use the structured
4
21
  channel runtime at `@samva/markup` and components at `@samva/markup/components`.
5
22
  Use documented package subpaths only. Template entry discovery is `.tsx` only.
@@ -1,5 +1,4 @@
1
- import { c as SpanSchema } from "./diagnostics-oveE-laV.js";
2
- import { Schema } from "effect";
1
+ import { a as Span } from "./diagnostics-CqepLcpI.js";
3
2
  //#region src/ast.d.ts
4
3
  declare const BLOCK_TAGS: readonly ["Email", "Subject", "Preview", "Container", "Section", "Row", "Column", "Heading", "Text", "Button", "Image", "Divider", "Spacer", "List", "ListItem", "If", "Else"];
5
4
  declare const INLINE_TAGS: readonly ["strong", "em", "a"];
@@ -41,74 +40,49 @@ declare const ROOT_TAGS: ReadonlyArray<RootTag>;
41
40
  declare const isRootTag: (tag: string) => tag is RootTag;
42
41
  /** The channel a parsed document targets, read off its root tag. */
43
42
  declare const documentChannel: (document: SmlDocument) => Channel;
44
- declare const AttributeValueSchema: Schema.Union<readonly [Schema.Struct<{
45
- readonly kind: Schema.Literal<"string">;
46
- readonly value: Schema.String;
47
- }>, Schema.Struct<{
48
- readonly kind: Schema.Literal<"number">;
49
- readonly value: Schema.Finite;
50
- }>]>;
51
- type AttributeValue = typeof AttributeValueSchema.Type;
52
- declare const AttributeSchema: Schema.Struct<{
53
- readonly name: Schema.String;
54
- readonly value: Schema.Union<readonly [Schema.Struct<{
55
- readonly kind: Schema.Literal<"string">;
56
- readonly value: Schema.String;
57
- }>, Schema.Struct<{
58
- readonly kind: Schema.Literal<"number">;
59
- readonly value: Schema.Finite;
60
- }>]>;
43
+ type AttributeValue = {
44
+ readonly kind: "string";
45
+ readonly value: string;
46
+ } | {
47
+ readonly kind: "number";
48
+ readonly value: number;
49
+ };
50
+ interface Attribute {
51
+ readonly name: string;
52
+ readonly value: AttributeValue;
61
53
  /** Span of the whole `name="value"` pair. */
62
- readonly span: Schema.Struct<{
63
- readonly start: Schema.Finite;
64
- readonly end: Schema.Finite;
65
- }>;
54
+ readonly span: Span;
66
55
  /** Span of the value contents (inside quotes/braces) — class diagnostics point here. */
67
- readonly valueSpan: Schema.Struct<{
68
- readonly start: Schema.Finite;
69
- readonly end: Schema.Finite;
70
- }>;
71
- }>;
72
- interface Attribute extends Schema.Schema.Type<typeof AttributeSchema> {}
73
- declare const TextNodeSchema: Schema.Struct<{
74
- readonly kind: Schema.Literal<"text">;
75
- readonly id: Schema.String;
76
- readonly value: Schema.String;
77
- readonly span: Schema.Struct<{
78
- readonly start: Schema.Finite;
79
- readonly end: Schema.Finite;
80
- }>;
81
- }>;
82
- interface TextNode extends Schema.Schema.Type<typeof TextNodeSchema> {}
83
- declare const InterpolationNodeSchema: Schema.Struct<{
84
- readonly kind: Schema.Literal<"interpolation">;
85
- readonly id: Schema.String;
86
- readonly name: Schema.String;
56
+ readonly valueSpan: Span;
57
+ }
58
+ interface TextNode {
59
+ readonly kind: "text";
60
+ readonly id: string;
61
+ readonly value: string;
62
+ readonly span: Span;
63
+ }
64
+ interface InterpolationNode {
65
+ readonly kind: "interpolation";
66
+ readonly id: string;
67
+ readonly name: string;
87
68
  /** {{name}} vs ${name} — both today's syntaxes, preserved through print. */
88
- readonly syntax: Schema.Literals<readonly ["curly", "dollar"]>;
89
- readonly span: Schema.Struct<{
90
- readonly start: Schema.Finite;
91
- readonly end: Schema.Finite;
92
- }>;
93
- }>;
94
- interface InterpolationNode extends Schema.Schema.Type<typeof InterpolationNodeSchema> {}
69
+ readonly syntax: "curly" | "dollar";
70
+ readonly span: Span;
71
+ }
95
72
  interface ElementNode {
96
73
  readonly kind: "element";
97
74
  readonly id: string;
98
75
  readonly tag: SmlTag;
99
76
  readonly attributes: ReadonlyArray<Attribute>;
100
77
  readonly children: ReadonlyArray<SmlNode>;
101
- readonly span: typeof SpanSchema.Type;
78
+ readonly span: Span;
102
79
  }
103
80
  type SmlNode = ElementNode | TextNode | InterpolationNode;
104
- declare const ElementNodeSchema: Schema.Codec<ElementNode>;
105
- declare const SmlNodeSchema: Schema.Codec<SmlNode>;
106
- declare const SmlDocumentSchema: Schema.Struct<{
107
- readonly kind: Schema.Literal<"document">;
81
+ interface SmlDocument {
82
+ readonly kind: "document";
108
83
  /** Always a root element: `<Email>`, `<Sms>`, or `<WhatsApp>`. */
109
- readonly root: Schema.Codec<ElementNode, ElementNode, never, never>;
110
- }>;
111
- interface SmlDocument extends Schema.Schema.Type<typeof SmlDocumentSchema> {}
84
+ readonly root: ElementNode;
85
+ }
112
86
  declare const attributeValue: (node: ElementNode, name: string) => AttributeValue | undefined;
113
87
  declare const stringAttribute: (node: ElementNode, name: string) => string | undefined;
114
88
  declare const numberAttribute: (node: ElementNode, name: string) => number | undefined;
@@ -129,5 +103,5 @@ declare const isHiddenNode: (node: ElementNode) => boolean;
129
103
  */
130
104
  declare const collectVariableReferences: (document: SmlDocument) => ReadonlySet<string>;
131
105
  //#endregion
132
- export { TextNodeSchema as A, stringAttribute as B, SML_TAG_BY_COMPONENT_NAME as C, SmlNodeSchema as D, SmlNode as E, isHiddenNode as F, isRootTag as I, nodeLabel as L, collectVariableReferences as M, componentNameForSmlTag as N, SmlTag as O, documentChannel as P, numberAttribute as R, SML_TAGS as S, SmlDocumentSchema as T, InlineTag as _, AttributeValueSchema as a, ROOT_TAGS as b, BlockTag as c, Channel as d, ChannelTag as f, INLINE_TAGS as g, ElementNodeSchema as h, AttributeValue as i, attributeValue as j, TextNode as k, CHANNEL_BY_ROOT_TAG as l, ElementNode as m, Attribute as n, AuxiliaryTag as o, DEFAULT_EMAIL_WIDTH as p, AttributeSchema as r, BLOCK_TAGS as s, AUXILIARY_TAGS as t, CHANNEL_TAGS as u, InterpolationNode as v, SmlDocument as w, RootTag as x, InterpolationNodeSchema as y, smlTagForComponentName as z };
133
- //# sourceMappingURL=ast-63I-VLQx.d.ts.map
106
+ export { nodeLabel as A, TextNode as C, documentChannel as D, componentNameForSmlTag as E, smlTagForComponentName as M, stringAttribute as N, isHiddenNode as O, SmlTag as S, collectVariableReferences as T, RootTag as _, BLOCK_TAGS as a, SmlDocument as b, CHANNEL_TAGS as c, DEFAULT_EMAIL_WIDTH as d, ElementNode as f, ROOT_TAGS as g, InterpolationNode as h, AuxiliaryTag as i, numberAttribute as j, isRootTag as k, Channel as l, InlineTag as m, Attribute as n, BlockTag as o, INLINE_TAGS as p, AttributeValue as r, CHANNEL_BY_ROOT_TAG as s, AUXILIARY_TAGS as t, ChannelTag as u, SML_TAGS as v, attributeValue as w, SmlNode as x, SML_TAG_BY_COMPONENT_NAME as y };
107
+ //# sourceMappingURL=ast-BLybiDxp.d.ts.map
package/dist/ast.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { A as TextNodeSchema, B as stringAttribute, C as SML_TAG_BY_COMPONENT_NAME, D as SmlNodeSchema, E as SmlNode, F as isHiddenNode, I as isRootTag, L as nodeLabel, M as collectVariableReferences, N as componentNameForSmlTag, O as SmlTag, P as documentChannel, R as numberAttribute, S as SML_TAGS, T as SmlDocumentSchema, _ as InlineTag, a as AttributeValueSchema, b as ROOT_TAGS, c as BlockTag, d as Channel, f as ChannelTag, g as INLINE_TAGS, h as ElementNodeSchema, i as AttributeValue, j as attributeValue, k as TextNode, l as CHANNEL_BY_ROOT_TAG, m as ElementNode, n as Attribute, o as AuxiliaryTag, p as DEFAULT_EMAIL_WIDTH, r as AttributeSchema, s as BLOCK_TAGS, t as AUXILIARY_TAGS, u as CHANNEL_TAGS, v as InterpolationNode, w as SmlDocument, x as RootTag, y as InterpolationNodeSchema, z as smlTagForComponentName } from "./ast-63I-VLQx.js";
2
- export { AUXILIARY_TAGS, Attribute, AttributeSchema, AttributeValue, AttributeValueSchema, AuxiliaryTag, BLOCK_TAGS, BlockTag, CHANNEL_BY_ROOT_TAG, CHANNEL_TAGS, Channel, ChannelTag, DEFAULT_EMAIL_WIDTH, ElementNode, ElementNodeSchema, INLINE_TAGS, InlineTag, InterpolationNode, InterpolationNodeSchema, ROOT_TAGS, RootTag, SML_TAGS, SML_TAG_BY_COMPONENT_NAME, SmlDocument, SmlDocumentSchema, SmlNode, SmlNodeSchema, SmlTag, TextNode, TextNodeSchema, attributeValue, collectVariableReferences, componentNameForSmlTag, documentChannel, isHiddenNode, isRootTag, nodeLabel, numberAttribute, smlTagForComponentName, stringAttribute };
1
+ import { A as nodeLabel, C as TextNode, D as documentChannel, E as componentNameForSmlTag, M as smlTagForComponentName, N as stringAttribute, O as isHiddenNode, S as SmlTag, T as collectVariableReferences, _ as RootTag, a as BLOCK_TAGS, b as SmlDocument, c as CHANNEL_TAGS, d as DEFAULT_EMAIL_WIDTH, f as ElementNode, g as ROOT_TAGS, h as InterpolationNode, i as AuxiliaryTag, j as numberAttribute, k as isRootTag, l as Channel, m as InlineTag, n as Attribute, o as BlockTag, p as INLINE_TAGS, r as AttributeValue, s as CHANNEL_BY_ROOT_TAG, t as AUXILIARY_TAGS, u as ChannelTag, v as SML_TAGS, w as attributeValue, x as SmlNode, y as SML_TAG_BY_COMPONENT_NAME } from "./ast-BLybiDxp.js";
2
+ export { AUXILIARY_TAGS, Attribute, AttributeValue, AuxiliaryTag, BLOCK_TAGS, BlockTag, CHANNEL_BY_ROOT_TAG, CHANNEL_TAGS, Channel, ChannelTag, DEFAULT_EMAIL_WIDTH, ElementNode, INLINE_TAGS, InlineTag, InterpolationNode, ROOT_TAGS, RootTag, SML_TAGS, SML_TAG_BY_COMPONENT_NAME, SmlDocument, SmlNode, SmlTag, TextNode, attributeValue, collectVariableReferences, componentNameForSmlTag, documentChannel, isHiddenNode, isRootTag, nodeLabel, numberAttribute, smlTagForComponentName, stringAttribute };
package/dist/ast.js CHANGED
@@ -1,6 +1,5 @@
1
- import { SpanSchema } from "./diagnostics.js";
2
- import { i as parsePredicate, n as collectPredicateVariables } from "./predicate-CvkzT-a2.js";
3
- import { Result, Schema } from "effect";
1
+ import { i as parsePredicate, n as collectPredicateVariables } from "./predicate-DwXzmqIY.js";
2
+ import { Result } from "better-result";
4
3
  //#region src/ast.ts
5
4
  const BLOCK_TAGS = [
6
5
  "Email",
@@ -68,53 +67,6 @@ const ROOT_TAGS = Object.keys(CHANNEL_BY_ROOT_TAG);
68
67
  const isRootTag = (tag) => tag in CHANNEL_BY_ROOT_TAG;
69
68
  /** The channel a parsed document targets, read off its root tag. */
70
69
  const documentChannel = (document) => CHANNEL_BY_ROOT_TAG[document.root.tag];
71
- const AttributeValueSchema = Schema.Union([Schema.Struct({
72
- kind: Schema.Literal("string"),
73
- value: Schema.String
74
- }), Schema.Struct({
75
- kind: Schema.Literal("number"),
76
- value: Schema.Finite
77
- })]);
78
- const AttributeSchema = Schema.Struct({
79
- name: Schema.String,
80
- value: AttributeValueSchema,
81
- /** Span of the whole `name="value"` pair. */
82
- span: SpanSchema,
83
- /** Span of the value contents (inside quotes/braces) — class diagnostics point here. */
84
- valueSpan: SpanSchema
85
- });
86
- const TextNodeSchema = Schema.Struct({
87
- kind: Schema.Literal("text"),
88
- id: Schema.String,
89
- value: Schema.String,
90
- span: SpanSchema
91
- });
92
- const InterpolationNodeSchema = Schema.Struct({
93
- kind: Schema.Literal("interpolation"),
94
- id: Schema.String,
95
- name: Schema.String,
96
- /** {{name}} vs ${name} — both today's syntaxes, preserved through print. */
97
- syntax: Schema.Literals(["curly", "dollar"]),
98
- span: SpanSchema
99
- });
100
- const ElementNodeSchema = Schema.Struct({
101
- kind: Schema.Literal("element"),
102
- id: Schema.String,
103
- tag: Schema.Literals(SML_TAGS),
104
- attributes: Schema.Array(AttributeSchema),
105
- children: Schema.Array(Schema.suspend(() => SmlNodeSchema)),
106
- span: SpanSchema
107
- });
108
- const SmlNodeSchema = Schema.Union([
109
- ElementNodeSchema,
110
- TextNodeSchema,
111
- InterpolationNodeSchema
112
- ]);
113
- const SmlDocumentSchema = Schema.Struct({
114
- kind: Schema.Literal("document"),
115
- /** Always a root element: `<Email>`, `<Sms>`, or `<WhatsApp>`. */
116
- root: ElementNodeSchema
117
- });
118
70
  const attributeValue = (node, name) => node.attributes.find((attribute) => attribute.name === name)?.value;
119
71
  const stringAttribute = (node, name) => {
120
72
  const value = attributeValue(node, name);
@@ -153,7 +105,7 @@ const collectVariableReferences = (document) => {
153
105
  if (attribute.value.kind !== "string") continue;
154
106
  if (node.tag === "If" && attribute.name === "test") {
155
107
  const parsed = parsePredicate(attribute.value.value);
156
- if (Result.isSuccess(parsed)) for (const name of collectPredicateVariables(parsed.success)) names.add(name);
108
+ if (Result.isOk(parsed)) for (const name of collectPredicateVariables(parsed.value)) names.add(name);
157
109
  continue;
158
110
  }
159
111
  for (const match of attribute.value.value.matchAll(attributePattern)) {
@@ -167,6 +119,6 @@ const collectVariableReferences = (document) => {
167
119
  return names;
168
120
  };
169
121
  //#endregion
170
- export { AUXILIARY_TAGS, AttributeSchema, AttributeValueSchema, BLOCK_TAGS, CHANNEL_BY_ROOT_TAG, CHANNEL_TAGS, DEFAULT_EMAIL_WIDTH, ElementNodeSchema, INLINE_TAGS, InterpolationNodeSchema, ROOT_TAGS, SML_TAGS, SML_TAG_BY_COMPONENT_NAME, SmlDocumentSchema, SmlNodeSchema, TextNodeSchema, attributeValue, collectVariableReferences, componentNameForSmlTag, documentChannel, isHiddenNode, isRootTag, nodeLabel, numberAttribute, smlTagForComponentName, stringAttribute };
122
+ export { AUXILIARY_TAGS, BLOCK_TAGS, CHANNEL_BY_ROOT_TAG, CHANNEL_TAGS, DEFAULT_EMAIL_WIDTH, INLINE_TAGS, ROOT_TAGS, SML_TAGS, SML_TAG_BY_COMPONENT_NAME, attributeValue, collectVariableReferences, componentNameForSmlTag, documentChannel, isHiddenNode, isRootTag, nodeLabel, numberAttribute, smlTagForComponentName, stringAttribute };
171
123
 
172
124
  //# sourceMappingURL=ast.js.map
@@ -0,0 +1,356 @@
1
+ import { l as Channel } from "./ast-BLybiDxp.js";
2
+ import { o as TokenOverrides } from "./theme-6ApjjiBo.js";
3
+ //#region presets/catalog.d.ts
4
+ type PresetCategory = "transactional" | "digest" | "marketing" | "lifecycle";
5
+ interface PresetMeta {
6
+ /** Stable id and source filename stem (`${id}.tsx`). */
7
+ readonly id: string;
8
+ /** The source's root-tag channel; the gallery filters by it. */
9
+ readonly channel: Channel;
10
+ readonly category: PresetCategory;
11
+ /** Human title for the gallery card. */
12
+ readonly name: string;
13
+ /** One-line description of when to reach for this preset. */
14
+ readonly description: string;
15
+ /**
16
+ * Every input property declared by the template schema, sorted.
17
+ * A sender supplies these values when rendering the template.
18
+ */
19
+ readonly variables: ReadonlyArray<string>;
20
+ }
21
+ declare const RECOMMENDED_THEME: TokenOverrides;
22
+ declare const presetCatalog: readonly [{
23
+ readonly id: "linear-login-code";
24
+ readonly channel: "email";
25
+ readonly category: "transactional";
26
+ readonly name: "Linear login code";
27
+ readonly description: "Recreate Linear's login code email with an editable magic link, code, and bundled logo.";
28
+ readonly variables: readonly ["expiryNotice", "homeUrl", "loginUrl", "productName", "validationCode"];
29
+ }, {
30
+ readonly id: "product-newsletter";
31
+ readonly channel: "email";
32
+ readonly category: "digest";
33
+ readonly name: "Product newsletter";
34
+ readonly description: "A monthly product newsletter with a lead story, mapped secondary stories, a changelog and one action.";
35
+ readonly variables: readonly ["changelog", "issueMonth", "issueNumber", "issueUrl", "leadImage", "leadSummary", "leadTitle", "leadUrl", "preferencesUrl", "stories", "unsubscribeUrl"];
36
+ }, {
37
+ readonly id: "vercel-invitation";
38
+ readonly channel: "email";
39
+ readonly category: "transactional";
40
+ readonly name: "Vercel team invitation";
41
+ readonly description: "Recreate Vercel's team invitation with editable source and bundled assets.";
42
+ readonly variables: readonly ["inviteFromIp", "inviteFromLocation", "inviteLink", "invitedByEmail", "invitedByUsername", "teamImage", "teamName", "userImage", "username"];
43
+ }, {
44
+ readonly id: "order-receipt";
45
+ readonly channel: "email";
46
+ readonly category: "transactional";
47
+ readonly name: "Order receipt";
48
+ readonly description: "Itemized order receipt with product thumbnails, totals, payment summary and shipping address.";
49
+ readonly variables: readonly ["customerName", "discount", "items", "orderDate", "orderNumber", "orderUrl", "paymentBrand", "paymentLast4", "shipping", "shippingAddress", "subtotal", "supportEmail", "tax", "total"];
50
+ }, {
51
+ readonly id: "welcome";
52
+ readonly channel: "email";
53
+ readonly category: "transactional";
54
+ readonly name: "Welcome";
55
+ readonly description: "First email after signup, with a lead illustration and a numbered list of first steps from the input.";
56
+ readonly variables: readonly ["ctaUrl", "docsUrl", "firstName", "planNote", "steps", "supportEmail", "workspace"];
57
+ }, {
58
+ readonly id: "email-verification";
59
+ readonly channel: "email";
60
+ readonly category: "transactional";
61
+ readonly name: "Email verification";
62
+ readonly description: "Confirm a new email address with a one-click button, a fallback code and the request details behind it.";
63
+ readonly variables: readonly ["email", "expiryNotice", "firstName", "previousEmail", "requestDetails", "supportEmail", "verificationCode", "verifyUrl", "workspace"];
64
+ }, {
65
+ readonly id: "otp";
66
+ readonly channel: "email";
67
+ readonly category: "transactional";
68
+ readonly name: "One-time passcode";
69
+ readonly description: "Deliver a short-lived sign-in code as the only thing on the page, with the request details under it.";
70
+ readonly variables: readonly ["code", "expiryNotice", "helpUrl", "newDevice", "requestDetails", "workspace"];
71
+ }, {
72
+ readonly id: "password-reset";
73
+ readonly channel: "email";
74
+ readonly category: "transactional";
75
+ readonly name: "Password reset";
76
+ readonly description: "Send an expiring reset link with the request details, a paste-able fallback URL and an optional passkey offer.";
77
+ readonly variables: readonly ["expiryNotice", "firstName", "passkeyPrompt", "requestDetails", "resetUrl", "securityUrl", "supportEmail", "workspace"];
78
+ }, {
79
+ readonly id: "payment-failed";
80
+ readonly channel: "email";
81
+ readonly category: "transactional";
82
+ readonly name: "Payment failed";
83
+ readonly description: "Declined-charge notice with the amount due, the card on file, the held order and every charge attempt.";
84
+ readonly variables: readonly ["amountDue", "attempts", "automaticRetry", "customerName", "declineReason", "holdUntil", "items", "orderNumber", "paymentBrand", "paymentLast4", "supportEmail", "updatePaymentUrl"];
85
+ }, {
86
+ readonly id: "shipping-update";
87
+ readonly channel: "email";
88
+ readonly category: "transactional";
89
+ readonly name: "Shipping update";
90
+ readonly description: "Shipment notice with the carrier, tracking, delivery estimate, the packed items and anything still to come.";
91
+ readonly variables: readonly ["carrier", "customerName", "estimatedDelivery", "items", "orderNumber", "pendingItems", "shippedDate", "shippingAddress", "supportEmail", "trackingNumber", "trackingUrl"];
92
+ }, {
93
+ readonly id: "notification";
94
+ readonly channel: "email";
95
+ readonly category: "transactional";
96
+ readonly name: "Activity notification";
97
+ readonly description: "Workspace activity notification with the actor, the message quoted in full, recent activity and a deep link back.";
98
+ readonly variables: readonly ["actionSummary", "actorAvatar", "actorName", "attachment", "itemTitle", "itemUrl", "message", "otherActivity", "settingsUrl", "timestamp", "workspaceName"];
99
+ }, {
100
+ readonly id: "team-invite";
101
+ readonly channel: "email";
102
+ readonly category: "transactional";
103
+ readonly name: "Team invite";
104
+ readonly description: "Invite someone into a workspace with one accept action, the inviter's note and the people already there.";
105
+ readonly variables: readonly ["acceptUrl", "expiryNotice", "inviteeEmail", "inviterAvatarUrl", "inviterEmail", "inviterName", "personalNote", "productName", "teammates", "workspace"];
106
+ }, {
107
+ readonly id: "data-sharing-review";
108
+ readonly channel: "email";
109
+ readonly category: "transactional";
110
+ readonly name: "Data-sharing review";
111
+ readonly description: "Ask a customer to keep or remove a third-party connection, listing every permission it holds.";
112
+ readonly variables: readonly ["connectedServiceIconUrl", "connectedServiceName", "connectedSince", "keepConnectionUrl", "lastAccess", "recipientEmail", "referenceCode", "removeConnectionUrl", "scopes", "securityUrl", "settingsUrl", "workspace"];
113
+ }, {
114
+ readonly id: "product-digest";
115
+ readonly channel: "email";
116
+ readonly category: "digest";
117
+ readonly name: "Weekly digest";
118
+ readonly description: "A weekly reader digest: mapped stories with their desk and reading time, a most-read list, and an optional audio edition.";
119
+ readonly variables: readonly ["archiveUrl", "editionLabel", "mostRead", "podcast", "preferencesUrl", "readerName", "stories", "unsubscribeUrl"];
120
+ }, {
121
+ readonly id: "editorial-newsletter";
122
+ readonly channel: "email";
123
+ readonly category: "digest";
124
+ readonly name: "Long-form newsletter";
125
+ readonly description: "A long-form editorial issue: a byline, an essay that renders from a list of paragraphs, a pull quote, an optional labelled sponsor and a reading list.";
126
+ readonly variables: readonly ["authorAvatar", "authorName", "authorRole", "heroImage", "issueLabel", "paragraphs", "preferencesUrl", "pullQuote", "readingList", "sponsor", "standfirst", "storyUrl", "subscribeUrl", "title", "unsubscribeUrl"];
127
+ }, {
128
+ readonly id: "events-roundup";
129
+ readonly channel: "email";
130
+ readonly category: "digest";
131
+ readonly name: "Events roundup";
132
+ readonly description: "A dated events digest: an optional spotlight billing and a grid of upcoming shows with images, dates, rooms, prices and per-event tickets.";
133
+ readonly variables: readonly ["calendarUrl", "cityName", "events", "helpUrl", "seasonLabel", "spotlight", "unsubscribeUrl"];
134
+ }, {
135
+ readonly id: "industry-news-digest";
136
+ readonly channel: "email";
137
+ readonly category: "digest";
138
+ readonly name: "Industry news digest";
139
+ readonly description: "A dense industry brief: an agenda, a lead story with details and analysis, mapped desk stories, an optional labelled sponsor, and tool and job lists.";
140
+ readonly variables: readonly ["agenda", "audienceSize", "editionDate", "editionUrl", "intro", "jobs", "lead", "sponsor", "sponsorContactUrl", "stories", "tools", "unsubscribeUrl"];
141
+ }, {
142
+ readonly id: "announcement";
143
+ readonly channel: "email";
144
+ readonly category: "marketing";
145
+ readonly name: "Feature announcement";
146
+ readonly description: "Announce one change with a hero image, highlights from a list, an availability date and a single action.";
147
+ readonly variables: readonly ["availableFrom", "ctaUrl", "featureDescription", "featureName", "featureTagline", "firstName", "highlights", "preferencesUrl", "releaseNoteUrl", "unsubscribeUrl"];
148
+ }, {
149
+ readonly id: "event-invite";
150
+ readonly channel: "email";
151
+ readonly category: "marketing";
152
+ readonly name: "Event invite";
153
+ readonly description: "Invite members to an event with the date, the place, an agenda from a list, and one RSVP action.";
154
+ readonly variables: readonly ["agenda", "capacityNote", "declineUrl", "eventAddress", "eventDate", "eventDescription", "eventLocation", "eventName", "eventTagline", "eventTime", "firstName", "preferencesUrl", "rsvpUrl", "travelNote", "unsubscribeUrl"];
155
+ }, {
156
+ readonly id: "membership-promo";
157
+ readonly channel: "email";
158
+ readonly category: "marketing";
159
+ readonly name: "Membership promotion";
160
+ readonly description: "Promote a paid membership with tier cards from a list, a discount code, a deadline, and one join action.";
161
+ readonly variables: readonly ["compareUrl", "discountPercent", "firstName", "headline", "joinUrl", "offerEnds", "preferencesUrl", "promoCode", "savingsNote", "subhead", "tiers", "unsubscribeUrl"];
162
+ }, {
163
+ readonly id: "member-referral-offer";
164
+ readonly channel: "email";
165
+ readonly category: "marketing";
166
+ readonly name: "Member referral offer";
167
+ readonly description: "Ask a member to bring people onto their account for a limited-time reward, with the steps and the terms as lists.";
168
+ readonly variables: readonly ["firstName", "headline", "maxMembers", "maxReward", "offerEnds", "offerStarts", "preferencesUrl", "referralCode", "referralUrl", "reminderNote", "rewardPerMember", "spendMinimum", "steps", "subhead", "terms", "termsUrl", "unsubscribeUrl"];
169
+ }, {
170
+ readonly id: "catalog-sale-newsletter";
171
+ readonly channel: "email";
172
+ readonly category: "marketing";
173
+ readonly name: "Catalog sale newsletter";
174
+ readonly description: "Open a catalogue-wide sale with a bundle offer, a product grid from a list, a discount code, and the shop dates.";
175
+ readonly variables: readonly ["bundleListPrice", "bundleName", "bundleSalePrice", "bundleUrl", "dates", "discountCode", "editionLabel", "editionYear", "firstName", "headline", "intro", "items", "offerEnds", "preferencesUrl", "shopUrl", "stockNote", "unsubscribeUrl"];
176
+ }, {
177
+ readonly id: "limited-time-savings";
178
+ readonly channel: "email";
179
+ readonly category: "marketing";
180
+ readonly name: "Limited-time savings";
181
+ readonly description: "A time-boxed savings offer with the hours remaining, reasons from a list, member quotes, and one claim action.";
182
+ readonly variables: readonly ["claimUrl", "firstName", "headline", "hoursRemaining", "listPrice", "offerEnds", "postscript", "preferencesUrl", "promoCode", "reasons", "salePrice", "savingsAmount", "subhead", "testimonials", "timezoneUrl", "unsubscribeUrl"];
183
+ }, {
184
+ readonly id: "rewards-milestone";
185
+ readonly channel: "email";
186
+ readonly category: "marketing";
187
+ readonly name: "Rewards milestone";
188
+ readonly description: "Show a member how far through a rewards ladder they are, what the next step unlocks, and what each tier is worth.";
189
+ readonly variables: readonly ["bonusNote", "expiresOn", "firstName", "headline", "milestoneLabel", "nextReward", "pointsBalance", "preferencesUrl", "rewardsUrl", "steps", "stepsCompleted", "stepsTotal", "subhead", "termsUrl", "tiers", "unsubscribeUrl"];
190
+ }, {
191
+ readonly id: "travel-rewards-promo";
192
+ readonly channel: "email";
193
+ readonly category: "marketing";
194
+ readonly name: "Travel rewards promotion";
195
+ readonly description: "A travel rewards promotion with a member balance, earning tiers from a list, and partner offers.";
196
+ readonly variables: readonly ["accountUrl", "bookUrl", "firstName", "headline", "memberNumber", "milesBalance", "offerEnds", "partners", "preferencesUrl", "subhead", "termsUrl", "tierName", "tiers", "unsubscribeUrl"];
197
+ }, {
198
+ readonly id: "product-updates-roundup";
199
+ readonly channel: "email";
200
+ readonly category: "marketing";
201
+ readonly name: "Product updates roundup";
202
+ readonly description: "A monthly product roundup with a metrics strip, shipped updates from a list, and an optional event.";
203
+ readonly variables: readonly ["changelogUrl", "event", "firstName", "headline", "intro", "issueMonth", "issueNumber", "metrics", "preferencesUrl", "unsubscribeUrl", "updates"];
204
+ }, {
205
+ readonly id: "flash-getaway-offer";
206
+ readonly channel: "email";
207
+ readonly category: "marketing";
208
+ readonly name: "Flash getaway offer";
209
+ readonly description: "A flash getaway offer with an input countdown, destinations from a list, and one booking action.";
210
+ readonly variables: readonly ["countdown", "destinations", "exploreUrl", "firstName", "headline", "offerEnds", "offerWindow", "preferencesUrl", "subhead", "termsUrl", "unsubscribeUrl"];
211
+ }, {
212
+ readonly id: "membership-benefits-promo";
213
+ readonly channel: "email";
214
+ readonly category: "marketing";
215
+ readonly name: "Membership benefits promotion";
216
+ readonly description: "A paid-membership promotion with a price panel, benefits from a list, and one join action.";
217
+ readonly variables: readonly ["benefits", "billingNote", "comparePlansUrl", "firstName", "headline", "joinUrl", "preferencesUrl", "priceLabel", "renewsOn", "subhead", "supportEmail", "trialLabel", "unsubscribeUrl"];
218
+ }, {
219
+ readonly id: "weekly-deals-circular";
220
+ readonly channel: "email";
221
+ readonly category: "marketing";
222
+ readonly name: "Weekly deals circular";
223
+ readonly description: "A weekly retail circular with deals from a list, clippable coupons, and one shop action.";
224
+ readonly variables: readonly ["coupons", "deals", "headline", "intro", "memberPerk", "membershipUrl", "preferencesUrl", "shopUrl", "unsubscribeUrl", "validThrough", "weekLabel"];
225
+ }, {
226
+ readonly id: "seasonal-sale-flyer";
227
+ readonly channel: "email";
228
+ readonly category: "marketing";
229
+ readonly name: "Seasonal sale flyer";
230
+ readonly description: "A seasonal sale flyer with tiered promo codes, a category grid, and an optional gift-card offer.";
231
+ readonly variables: readonly ["categories", "giftCard", "headline", "intro", "offerWindow", "preferencesUrl", "promoTiers", "seasonLabel", "shopUrl", "subhead", "termsUrl", "unsubscribeUrl"];
232
+ }, {
233
+ readonly id: "feature-release-roundup";
234
+ readonly channel: "email";
235
+ readonly category: "marketing";
236
+ readonly name: "Feature release roundup";
237
+ readonly description: "A feature release roundup with image-left rows from a list, release badges, and docs links.";
238
+ readonly variables: readonly ["changelogUrl", "firstName", "headline", "intro", "migrationUrl", "preferencesUrl", "releases", "sunsetOn", "unsubscribeUrl"];
239
+ }, {
240
+ readonly id: "season-clearance-promo";
241
+ readonly channel: "email";
242
+ readonly category: "marketing";
243
+ readonly name: "Season clearance promotion";
244
+ readonly description: "A last-chance clearance promotion with marked-down highlights three a row and one shop action.";
245
+ readonly variables: readonly ["deadlinePhrase", "firstName", "headline", "highlights", "intro", "newArrivalsUrl", "preferencesUrl", "remainingNote", "shopUrl", "unsubscribeUrl"];
246
+ }, {
247
+ readonly id: "product-launch-promo";
248
+ readonly channel: "email";
249
+ readonly category: "marketing";
250
+ readonly name: "Product launch promotion";
251
+ readonly description: "Launch a collection with a hero, a four-product grid, a discount code, and one shop action.";
252
+ readonly variables: readonly ["bestSellersUrl", "discountCode", "firstName", "headline", "newArrivalsUrl", "offerEnds", "preferencesUrl", "products", "saleUrl", "shopUrl", "subhead", "unsubscribeUrl"];
253
+ }, {
254
+ readonly id: "onboarding-step";
255
+ readonly channel: "email";
256
+ readonly category: "lifecycle";
257
+ readonly name: "Onboarding step";
258
+ readonly description: "One step of an onboarding sequence, with the whole setup list, its progress, and a single next action.";
259
+ readonly variables: readonly ["actionUrl", "docsUrl", "firstName", "stepBody", "stepNumber", "stepTitle", "steps", "supportEmail", "tip", "workspace"];
260
+ }, {
261
+ readonly id: "trial-ending";
262
+ readonly channel: "email";
263
+ readonly category: "lifecycle";
264
+ readonly name: "Trial ending";
265
+ readonly description: "Warn a trial user their access is ending, with what the trial produced, the plan that keeps it, and an optional offer.";
266
+ readonly variables: readonly ["contactUrl", "daysLeft", "firstName", "highlights", "keeps", "offer", "plan", "trialEndDate", "upgradeUrl", "workspace"];
267
+ }, {
268
+ readonly id: "win-back";
269
+ readonly channel: "email";
270
+ readonly category: "lifecycle";
271
+ readonly name: "Win-back";
272
+ readonly description: "Re-engage a lapsed user with an illustrated list of what shipped while they were away, and an optional return offer.";
273
+ readonly variables: readonly ["firstName", "lastActive", "offer", "preferencesUrl", "returnUrl", "unsubscribeUrl", "updates", "workspace"];
274
+ }, {
275
+ readonly id: "feedback-request";
276
+ readonly channel: "email";
277
+ readonly category: "lifecycle";
278
+ readonly name: "Feedback request";
279
+ readonly description: "Ask an active user one question with clickable answers, a short survey, and a named sender who reads the replies.";
280
+ readonly variables: readonly ["firstName", "incentive", "options", "question", "sender", "surveyUrl", "tenure", "workspace"];
281
+ }, {
282
+ readonly id: "product-onboarding-tour";
283
+ readonly channel: "email";
284
+ readonly category: "lifecycle";
285
+ readonly name: "Product onboarding tour";
286
+ readonly description: "Walk a new user through the features worth turning on first, each with a still, its own points and a link, followed by a reading list.";
287
+ readonly variables: readonly ["features", "firstName", "helpCenterUrl", "intro", "mobile", "preferencesUrl", "reads", "unsubscribeUrl"];
288
+ }, {
289
+ readonly id: "setup-checklist";
290
+ readonly channel: "email";
291
+ readonly category: "lifecycle";
292
+ readonly name: "Setup checklist";
293
+ readonly description: "Welcome a new customer with the setup steps that remain, each marked done or outstanding, and one link back into the flow.";
294
+ readonly variables: readonly ["continueUrl", "firstName", "helpUrl", "note", "steps", "unsubscribeUrl", "welcome", "workspace"];
295
+ }, {
296
+ readonly id: "sms-otp";
297
+ readonly channel: "sms";
298
+ readonly category: "transactional";
299
+ readonly name: "One-time passcode (SMS)";
300
+ readonly description: "Deliver a short-lived sign-in or 2FA code in a single GSM-7 segment.";
301
+ readonly variables: readonly ["code", "expiryMinutes", "workspace"];
302
+ }, {
303
+ readonly id: "sms-shipping-update";
304
+ readonly channel: "sms";
305
+ readonly category: "transactional";
306
+ readonly name: "Shipping update (SMS)";
307
+ readonly description: "Tell a customer their order shipped, with a tracking link.";
308
+ readonly variables: readonly ["orderNumber", "trackingUrl", "workspace"];
309
+ }, {
310
+ readonly id: "sms-appointment-reminder";
311
+ readonly channel: "sms";
312
+ readonly category: "lifecycle";
313
+ readonly name: "Appointment reminder (SMS)";
314
+ readonly description: "Remind a customer of an upcoming appointment with a reschedule path.";
315
+ readonly variables: readonly ["appointmentDate", "appointmentTime", "workspace"];
316
+ }, {
317
+ readonly id: "sms-flash-sale";
318
+ readonly channel: "sms";
319
+ readonly category: "marketing";
320
+ readonly name: "Flash sale (SMS)";
321
+ readonly description: "Drive a limited-time offer with a promo code and a conditional urgency line.";
322
+ readonly variables: readonly ["endsToday", "offerHeadline", "promoCode", "shopUrl", "workspace"];
323
+ }, {
324
+ readonly id: "whatsapp-order-update";
325
+ readonly channel: "whatsapp";
326
+ readonly category: "transactional";
327
+ readonly name: "Order update (WhatsApp)";
328
+ readonly description: "Utility template: shipping confirmation with a tracking URL button.";
329
+ readonly variables: readonly ["estimatedDelivery", "firstName", "orderNumber", "trackingUrl"];
330
+ }, {
331
+ readonly id: "whatsapp-appointment-reminder";
332
+ readonly channel: "whatsapp";
333
+ readonly category: "lifecycle";
334
+ readonly name: "Appointment reminder (WhatsApp)";
335
+ readonly description: "Utility template: appointment reminder with confirm/reschedule quick replies.";
336
+ readonly variables: readonly ["appointmentDate", "appointmentTime", "firstName", "workspace"];
337
+ }, {
338
+ readonly id: "whatsapp-flash-sale";
339
+ readonly channel: "whatsapp";
340
+ readonly category: "marketing";
341
+ readonly name: "Flash sale (WhatsApp)";
342
+ readonly description: "Marketing template: limited-time offer with a copyable promo code and a shop button.";
343
+ readonly variables: readonly ["endsToday", "firstName", "offerDetails", "offerHeadline", "promoCode", "shopUrl"];
344
+ }];
345
+ type PresetId = (typeof presetCatalog)[number]["id"];
346
+ type PresetVariable = (typeof presetCatalog)[number]["variables"][number];
347
+ type EmailPreset = Extract<(typeof presetCatalog)[number], {
348
+ channel: "email";
349
+ }>;
350
+ type EmailPresetId = EmailPreset["id"];
351
+ type EmailPresetVariable = EmailPreset extends (infer Preset) ? Preset extends {
352
+ readonly variables: ReadonlyArray<infer Variable>;
353
+ } ? Variable : never : never;
354
+ //#endregion
355
+ export { PresetMeta as a, presetCatalog as c, PresetId as i, EmailPresetVariable as n, PresetVariable as o, PresetCategory as r, RECOMMENDED_THEME as s, EmailPresetId as t };
356
+ //# sourceMappingURL=catalog-Db0UcCTg.d.ts.map