@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.
Files changed (176) hide show
  1. package/AGENTS.md +104 -37
  2. package/README.md +188 -52
  3. package/dist/assets-C5duwTya.d.ts +40 -0
  4. package/dist/brand-B-0bN_Ir.d.ts +88 -0
  5. package/dist/{render-aaJBnsXK.js → cascade-t6kxlgEI.js} +130 -160
  6. package/dist/channel-edit.d.ts +121 -0
  7. package/dist/channel-edit.js +609 -0
  8. package/dist/channel-specs-B6M_HlaV.js +29 -0
  9. package/dist/channel-specs-C2feJwuP.d.ts +13 -0
  10. package/dist/compatibility-DbISoFIq.js +589 -0
  11. package/dist/compiler.d.ts +19 -249
  12. package/dist/compiler.js +10 -1408
  13. package/dist/{css-COcFOT1y.d.ts → css-BVQKICKC.d.ts} +30 -4
  14. package/dist/diagnostic-codes.d.ts +403 -0
  15. package/dist/diagnostic-codes.js +399 -0
  16. package/dist/{diagnostics-BMYtBCQk.d.ts → diagnostics-B-Gym34R.d.ts} +8 -4
  17. package/dist/diagnostics.d.ts +31 -2
  18. package/dist/diagnostics.js +1 -19
  19. package/dist/{elements-BzjjnoCS.d.ts → elements-cqldpaJt.d.ts} +3 -3
  20. package/dist/email/assets.d.ts +2 -0
  21. package/dist/email/assets.js +63 -0
  22. package/dist/email/brand-footer.d.ts +34 -0
  23. package/dist/email/brand-footer.js +63 -0
  24. package/dist/email/brand.d.ts +2 -0
  25. package/dist/email/brand.js +148 -0
  26. package/dist/email/components.d.ts +21 -10
  27. package/dist/email/components.js +46 -11
  28. package/dist/email/diagnostics.d.ts +2 -2
  29. package/dist/email/diagnostics.js +2 -1
  30. package/dist/email/elements.d.ts +1 -1
  31. package/dist/email/html.d.ts +2 -42
  32. package/dist/email/html.js +56 -2
  33. package/dist/email/jsx-dev-runtime.d.ts +2 -2
  34. package/dist/email/jsx-runtime.d.ts +1 -1
  35. package/dist/email/render.d.ts +10 -13
  36. package/dist/email/render.js +163 -6
  37. package/dist/email/text.d.ts +1 -1
  38. package/dist/fmt.d.ts +32 -0
  39. package/dist/fmt.js +174 -0
  40. package/dist/html-BJepOwZ4.d.ts +56 -0
  41. package/dist/index.d.ts +2 -0
  42. package/dist/index.js +2 -0
  43. package/dist/ir-aaqNE987.d.ts +252 -0
  44. package/dist/ir.d.ts +2 -0
  45. package/dist/ir.js +7 -0
  46. package/dist/preview-Ekdg1dXG.d.ts +100 -0
  47. package/dist/preview.d.ts +2 -0
  48. package/dist/preview.js +160 -0
  49. package/dist/profile-BH-OtdDA.js +3670 -0
  50. package/dist/render-ir.d.ts +19 -0
  51. package/dist/render-ir.js +826 -0
  52. package/dist/sms-segments.d.ts +13 -2
  53. package/dist/sms.d.ts +16 -0
  54. package/dist/sms.js +12 -0
  55. package/dist/{email/source-edit.d.ts → source-edit.d.ts} +55 -6
  56. package/dist/source-edit.js +343 -0
  57. package/dist/source-locations-C8wCsiAy.d.ts +23 -0
  58. package/dist/source-locations.d.ts +2 -2
  59. package/dist/source-locations.js +3 -89
  60. package/dist/static.d.ts +57 -0
  61. package/dist/static.js +69 -0
  62. package/dist/tailwind-CMYpZf1v.js +614 -0
  63. package/dist/template-_QE_rQND.d.ts +65 -0
  64. package/dist/template.d.ts +2 -2
  65. package/dist/template.js +15 -10
  66. package/dist/theme-css-hFqcPSar.js +587 -0
  67. package/dist/theme-css.d.ts +57 -16
  68. package/dist/theme-css.js +2 -509
  69. package/dist/theme-imports-lvBw3AD1.js +109 -0
  70. package/dist/transform-Ct2OMkFN.d.ts +153 -0
  71. package/dist/unsubscribe-link-CoesnQDU.js +26 -0
  72. package/dist/whatsapp.d.ts +57 -0
  73. package/dist/whatsapp.js +22 -0
  74. package/generated/contract.json +1782 -0
  75. package/generated/reference.md +353 -0
  76. package/package.json +56 -154
  77. package/samva-brand.d.ts +14 -0
  78. package/skills/sml/SKILL.md +123 -0
  79. package/dist/ast-BrDtApwS.d.ts +0 -107
  80. package/dist/ast.d.ts +0 -2
  81. package/dist/ast.js +0 -124
  82. package/dist/candidate.d.ts +0 -29
  83. package/dist/candidate.js +0 -88
  84. package/dist/catalog-60eaYC7b.d.ts +0 -356
  85. package/dist/checks-DBweSIPN.js +0 -58954
  86. package/dist/checks.d.ts +0 -33
  87. package/dist/checks.js +0 -2
  88. package/dist/classes.d.ts +0 -27
  89. package/dist/classes.js +0 -184
  90. package/dist/compile-sms.d.ts +0 -28
  91. package/dist/compile-sms.js +0 -44
  92. package/dist/compile-whatsapp.d.ts +0 -56
  93. package/dist/compile-whatsapp.js +0 -186
  94. package/dist/compile.d.ts +0 -18
  95. package/dist/compile.js +0 -29
  96. package/dist/components.d.ts +0 -289
  97. package/dist/components.js +0 -106
  98. package/dist/conditionals.d.ts +0 -10
  99. package/dist/conditionals.js +0 -74
  100. package/dist/corpus-BjYMqOoY.d.ts +0 -106
  101. package/dist/diagnostics-OcQKQYSY.d.ts +0 -49
  102. package/dist/email/selection.d.ts +0 -91
  103. package/dist/email/selection.js +0 -91
  104. package/dist/email/source-edit.js +0 -185
  105. package/dist/email/stylesheets.d.ts +0 -15
  106. package/dist/email/stylesheets.js +0 -45
  107. package/dist/emit.d.ts +0 -51
  108. package/dist/emit.js +0 -151
  109. package/dist/footer.d.ts +0 -66
  110. package/dist/footer.js +0 -93
  111. package/dist/interpolate.d.ts +0 -24
  112. package/dist/interpolate.js +0 -43
  113. package/dist/jsx-dev-runtime.d.ts +0 -11
  114. package/dist/jsx-dev-runtime.js +0 -15
  115. package/dist/jsx-runtime-I-1nCtl2.d.ts +0 -57
  116. package/dist/jsx-runtime.d.ts +0 -2
  117. package/dist/jsx-runtime.js +0 -121
  118. package/dist/lexer.d.ts +0 -60
  119. package/dist/lexer.js +0 -281
  120. package/dist/model.d.ts +0 -24
  121. package/dist/model.js +0 -77
  122. package/dist/ops-2aiiYO7m.js +0 -630
  123. package/dist/ops.d.ts +0 -114
  124. package/dist/ops.js +0 -2
  125. package/dist/parser-t29cHLVL.d.ts +0 -396
  126. package/dist/parser.d.ts +0 -2
  127. package/dist/parser.js +0 -859
  128. package/dist/predicate-BI6uRRM-.js +0 -549
  129. package/dist/predicate-M-05Nd7R.d.ts +0 -56
  130. package/dist/predicate.d.ts +0 -2
  131. package/dist/predicate.js +0 -2
  132. package/dist/presets/category-mapping.d.ts +0 -13
  133. package/dist/presets/category-mapping.js +0 -49
  134. package/dist/presets/corpus.d.ts +0 -2
  135. package/dist/presets/corpus.js +0 -194
  136. package/dist/presets/public-gallery.d.ts +0 -266
  137. package/dist/presets/public-gallery.js +0 -916
  138. package/dist/presets/public-handoff.d.ts +0 -164
  139. package/dist/presets/public-handoff.js +0 -361
  140. package/dist/presets/public-preview-artifacts.d.ts +0 -43
  141. package/dist/presets/public-preview-artifacts.js +0 -104
  142. package/dist/presets/public-preview.d.ts +0 -61
  143. package/dist/presets/public-preview.js +0 -83
  144. package/dist/presets/showcase.d.ts +0 -2
  145. package/dist/presets/showcase.js +0 -627
  146. package/dist/presets/sources.d.ts +0 -38
  147. package/dist/presets/sources.js +0 -6083
  148. package/dist/presets.d.ts +0 -2
  149. package/dist/presets.js +0 -881
  150. package/dist/printer.d.ts +0 -6
  151. package/dist/printer.js +0 -122
  152. package/dist/registry.d.ts +0 -42
  153. package/dist/registry.js +0 -646
  154. package/dist/render-template.d.ts +0 -45
  155. package/dist/render-template.js +0 -76
  156. package/dist/showcase-DGZAWn4Z.d.ts +0 -456
  157. package/dist/sms-segments-y4FpPilJ.d.ts +0 -13
  158. package/dist/source-locations-DrCM82Ym.d.ts +0 -67
  159. package/dist/template-DWftqh4x.d.ts +0 -60
  160. package/dist/theme-6ApjjiBo.d.ts +0 -116
  161. package/dist/theme.d.ts +0 -2
  162. package/dist/theme.js +0 -118
  163. package/dist/tokens.d.ts +0 -6
  164. package/dist/tokens.js +0 -417
  165. package/dist/tsx-source-instrumentation.d.ts +0 -30
  166. package/dist/tsx-source-instrumentation.js +0 -115
  167. package/dist/tsx-tracer.d.ts +0 -112
  168. package/dist/tsx-tracer.js +0 -985
  169. package/dist/variables-J_L3qxRa.d.ts +0 -77
  170. package/dist/variables.d.ts +0 -2
  171. package/dist/variables.js +0 -141
  172. package/dist/version-BITr58kk.js +0 -96
  173. package/generated/sml-agent-contract.json +0 -709
  174. package/generated/sml-email-agent-contract.json +0 -615
  175. package/generated/sml-email-language-reference.md +0 -94
  176. package/generated/sml-language-reference.md +0 -195
package/dist/printer.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import { b as SmlDocument } from "./ast-BrDtApwS.js";
2
- //#region src/printer.d.ts
3
- declare const printSml: (document: SmlDocument) => string;
4
- //#endregion
5
- export { printSml };
6
- //# sourceMappingURL=printer.d.ts.map
package/dist/printer.js DELETED
@@ -1,122 +0,0 @@
1
- //#region src/printer.ts
2
- const MAX_WIDTH = 100;
3
- const INDENT = " ";
4
- const escapeText = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("{", "&#123;");
5
- const escapeAttribute = (value) => value.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll("\"", "&quot;");
6
- const printAttribute = (attribute) => attribute.value.kind === "number" ? `${attribute.name}={${attribute.value.value}}` : `${attribute.name}="${escapeAttribute(attribute.value.value)}"`;
7
- const printInterpolation = (node) => node.syntax === "curly" ? `{{${node.name}}}` : `\${${node.name}}`;
8
- const printInlineFlow = (children) => {
9
- let result = "";
10
- for (const child of children) if (child.kind === "text") result += escapeText(child.value);
11
- else if (child.kind === "interpolation") result += printInterpolation(child);
12
- else {
13
- const attributes = child.attributes.map((a) => ` ${printAttribute(a)}`).join("");
14
- result += child.children.length === 0 ? `<${child.tag}${attributes} />` : `<${child.tag}${attributes}>${printInlineFlow(child.children)}</${child.tag}>`;
15
- }
16
- return result;
17
- };
18
- const isInlineContainer = (node) => node.tag === "Text" || node.tag === "Heading" || node.tag === "Button" || node.tag === "Subject" || node.tag === "Preview" || node.tag === "ListItem" || node.tag === "a" || node.tag === "strong" || node.tag === "em";
19
- /**
20
- * Splits an inline flow into reflow chunks. Chunk boundaries are exactly the
21
- * spaces in text nodes — the only positions where a line break re-parses to
22
- * the same AST. Everything between two spaces (words, interpolations, whole
23
- * or partial inline elements) glues into one atomic chunk.
24
- */
25
- const chunkInlineFlow = (children) => {
26
- const chunks = [];
27
- let glue = false;
28
- const emit = (text) => {
29
- if (text.length === 0) return;
30
- if (glue && chunks.length > 0) chunks[chunks.length - 1] += text;
31
- else chunks.push(text);
32
- glue = true;
33
- };
34
- const space = () => {
35
- glue = false;
36
- };
37
- const visit = (nodes) => {
38
- for (const child of nodes) if (child.kind === "text") escapeText(child.value).split(" ").forEach((word, index) => {
39
- if (index > 0) space();
40
- emit(word);
41
- });
42
- else if (child.kind === "interpolation") emit(printInterpolation(child));
43
- else {
44
- const attributes = child.attributes.map((a) => ` ${printAttribute(a)}`).join("");
45
- if (child.children.length === 0) emit(`<${child.tag}${attributes} />`);
46
- else {
47
- emit(`<${child.tag}${attributes}>`);
48
- visit(child.children);
49
- emit(`</${child.tag}>`);
50
- }
51
- }
52
- };
53
- visit(children);
54
- return chunks;
55
- };
56
- /** Greedy fill: chunks joined by single spaces, wrapped at MAX_WIDTH. */
57
- const reflowInlineFlow = (children, indent) => {
58
- const chunks = chunkInlineFlow(children);
59
- const lines = [];
60
- let line = null;
61
- for (const chunk of chunks) if (line === null) line = `${indent}${chunk}`;
62
- else if (line.length + 1 + chunk.length <= MAX_WIDTH) line += ` ${chunk}`;
63
- else {
64
- lines.push(line);
65
- line = `${indent}${chunk}`;
66
- }
67
- if (line !== null) lines.push(line);
68
- return lines.join("\n");
69
- };
70
- const printOpenTag = (node, indent, selfClosing) => {
71
- const attributes = node.attributes.map((a) => ` ${printAttribute(a)}`).join("");
72
- const singleLine = `${indent}<${node.tag}${attributes}${selfClosing ? " />" : ">"}`;
73
- if (singleLine.length <= MAX_WIDTH || node.attributes.length === 0) return singleLine;
74
- const lines = [`${indent}<${node.tag}`];
75
- for (const attribute of node.attributes) lines.push(`${indent}${INDENT}${printAttribute(attribute)}`);
76
- lines.push(`${indent}${selfClosing ? "/>" : ">"}`);
77
- return lines.join("\n");
78
- };
79
- /**
80
- * A verbatim flow prints its content byte-preserving: text exactly as stored
81
- * (escaped), interpolations canonical, and <If>/<Else> glued into the flow
82
- * with single-line open tags (whitespace inside a TAG is insignificant, but a
83
- * line break in the FLOW would become content on reparse).
84
- */
85
- const printVerbatimFlow = (children) => {
86
- let result = "";
87
- for (const child of children) if (child.kind === "text") result += escapeText(child.value);
88
- else if (child.kind === "interpolation") result += printInterpolation(child);
89
- else result += printVerbatimElement(child);
90
- return result;
91
- };
92
- const printVerbatimElement = (node) => {
93
- const attributes = node.attributes.map((a) => ` ${printAttribute(a)}`).join("");
94
- return node.children.length === 0 ? `<${node.tag}${attributes} />` : `<${node.tag}${attributes}>${printVerbatimFlow(node.children)}</${node.tag}>`;
95
- };
96
- /** A verbatim container: open tag at its indent, content glued, close tag glued. */
97
- const printVerbatimContainer = (node, indent) => {
98
- if (node.children.length === 0) return printOpenTag(node, indent, true);
99
- const attributes = node.attributes.map((a) => ` ${printAttribute(a)}`).join("");
100
- return `${indent}<${node.tag}${attributes}>${printVerbatimFlow(node.children)}</${node.tag}>`;
101
- };
102
- /** Tags whose content is verbatim. <Button> is verbatim only inside <WhatsApp>. */
103
- const isVerbatimContainer = (node, inWhatsApp) => node.tag === "Sms" || node.tag === "Header" || node.tag === "Body" || node.tag === "Footer" || inWhatsApp && node.tag === "Button";
104
- const printElement = (node, depth, inWhatsApp = false) => {
105
- const indent = INDENT.repeat(depth);
106
- if (isVerbatimContainer(node, inWhatsApp)) return printVerbatimContainer(node, indent);
107
- if (node.children.length === 0) return printOpenTag(node, indent, true);
108
- if (isInlineContainer(node) && !inWhatsApp) {
109
- const flow = printInlineFlow(node.children);
110
- const openTag = printOpenTag(node, indent, false);
111
- const singleLine = `${openTag}${flow}</${node.tag}>`;
112
- if (!openTag.includes("\n") && singleLine.length <= MAX_WIDTH) return singleLine;
113
- return `${openTag}\n${reflowInlineFlow(node.children, indent + INDENT)}\n${indent}</${node.tag}>`;
114
- }
115
- const nextInWhatsApp = inWhatsApp || node.tag === "WhatsApp";
116
- return `${printOpenTag(node, indent, false)}\n${node.children.map((child) => child.kind === "element" ? printElement(child, depth + 1, nextInWhatsApp) : child.kind === "text" ? `${indent}${INDENT}${escapeText(child.value)}` : `${indent}${INDENT}${printInterpolation(child)}`).join("\n")}\n${indent}</${node.tag}>`;
117
- };
118
- const printSml = (document) => `${printElement(document.root, 0)}\n`;
119
- //#endregion
120
- export { printSml };
121
-
122
- //# sourceMappingURL=printer.js.map
@@ -1,42 +0,0 @@
1
- import { s as TokenTable } from "./theme-6ApjjiBo.js";
2
- //#region src/registry.d.ts
3
- interface Declaration {
4
- readonly property: string;
5
- readonly value: string;
6
- }
7
- interface UtilityFamily {
8
- readonly root: string;
9
- /** Accepts `root` with no value ("border", "rounded", "block"). */
10
- readonly bare?: ReadonlyArray<Declaration> | undefined;
11
- /** Resolve a named value; null = this family does not accept it. */
12
- readonly named?: ((value: string, theme: TokenTable) => ReadonlyArray<Declaration> | null) | undefined;
13
- /** Resolve an arbitrary `[...]` value; null = malformed for this family. */
14
- readonly arbitrary?: ((value: string, theme: TokenTable) => ReadonlyArray<Declaration> | null) | undefined;
15
- /** dark: variant is only legal on color families. */
16
- readonly colorFamily?: boolean | undefined;
17
- /**
18
- * Base-variant only: sm:/dark: are rejected. Set on the gradient family —
19
- * its declarations are compiler-internal placeholders that must be combined
20
- * per node, which head rules cannot express.
21
- */
22
- readonly baseOnly?: boolean | undefined;
23
- /** "warn" families compile but surface a lint warning. */
24
- readonly warn?: string | undefined;
25
- readonly description: string;
26
- readonly caniemailSlugs: ReadonlyArray<string>;
27
- }
28
- interface ForbiddenUtility {
29
- /** Exact class or `prefix-` match against the candidate base. */
30
- readonly match: string;
31
- readonly message: string;
32
- }
33
- declare const GRADIENT_DIRECTION_PROPERTY = "-sml-gradient-direction";
34
- declare const GRADIENT_FROM_PROPERTY = "-sml-gradient-from";
35
- declare const GRADIENT_TO_PROPERTY = "-sml-gradient-to";
36
- declare const utilityRegistry: ReadonlyArray<UtilityFamily>;
37
- declare const forbiddenUtilities: ReadonlyArray<ForbiddenUtility>;
38
- /** Every root the resolver may try to split on, longest-match first (candidate.ts). */
39
- declare const registryRoots: ReadonlySet<string>;
40
- //#endregion
41
- export { Declaration, ForbiddenUtility, GRADIENT_DIRECTION_PROPERTY, GRADIENT_FROM_PROPERTY, GRADIENT_TO_PROPERTY, UtilityFamily, forbiddenUtilities, registryRoots, utilityRegistry };
42
- //# sourceMappingURL=registry.d.ts.map