@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
@@ -1,76 +0,0 @@
1
- import { mapJsxSourceLocations } from "./source-locations.js";
2
- import { i as parsePredicate, n as collectPredicateVariables } from "./predicate-BI6uRRM-.js";
3
- import { isRootTag } from "./ast.js";
4
- import { createVariablesProxy } from "./variables.js";
5
- import { parseSml } from "./parser.js";
6
- import { printSml } from "./printer.js";
7
- import { Result } from "better-result";
8
- //#region src/render-template.ts
9
- /**
10
- * Runs a template function and returns its canonical document, source, and
11
- * inferred variable schema. Grammar violations in the constructed tree surface
12
- * as a parse `SmlParseError` (Result failure) with spans into the printed
13
- * source. The template function itself may throw (e.g. the coercion guard) —
14
- * that is a programmer error in the user's build, so it propagates rather than
15
- * becoming a diagnostic.
16
- */
17
- const renderTemplate = (template) => {
18
- const { proxy, recorder } = createVariablesProxy();
19
- const root = template(proxy);
20
- if (root.kind !== "element" || !isRootTag(root.tag)) throw new TypeError("a template must return a single channel root element (<Email>, <Sms>, or <WhatsApp>), not a Fragment or other node");
21
- const source = printSml({
22
- kind: "document",
23
- root
24
- });
25
- const parsed = parseSml(source);
26
- if (Result.isError(parsed)) return Result.err(parsed.error);
27
- const document = parsed.value;
28
- return Result.ok({
29
- document,
30
- source,
31
- variables: collectVariableSchema(document, recorder),
32
- sourceLocations: mapJsxSourceLocations(root, document.root)
33
- });
34
- };
35
- /**
36
- * Merges the recorder's kind evidence with structural required-ness read off the
37
- * parsed document. A name referenced anywhere outside an `<If>` subtree is
38
- * required; names seen only inside conditional branches are optional.
39
- */
40
- const collectVariableSchema = (document, recorder) => {
41
- const unconditional = /* @__PURE__ */ new Set();
42
- const conditional = /* @__PURE__ */ new Set();
43
- const kindOf = new Map(recorder.collected().map((variable) => [variable.name, variable.kind]));
44
- const visit = (node, insideIf) => {
45
- if (node.kind === "interpolation") {
46
- (insideIf ? conditional : unconditional).add(node.name);
47
- return;
48
- }
49
- if (node.kind === "text") return;
50
- const nowInsideIf = insideIf || node.tag === "If";
51
- for (const attribute of node.attributes) {
52
- if (attribute.value.kind !== "string") continue;
53
- if (node.tag === "If" && attribute.name === "test") {
54
- const parsed = parsePredicate(attribute.value.value, 0);
55
- if (Result.isOk(parsed)) for (const name of collectPredicateVariables(parsed.value)) (insideIf ? conditional : unconditional).add(name);
56
- continue;
57
- }
58
- for (const match of attribute.value.value.matchAll(INTERPOLATION_PATTERN)) {
59
- const name = match[1] ?? match[2];
60
- if (name !== void 0) (nowInsideIf ? conditional : unconditional).add(name);
61
- }
62
- }
63
- for (const child of node.children) visit(child, nowInsideIf);
64
- };
65
- visit(document.root, false);
66
- return [.../* @__PURE__ */ new Set([...unconditional, ...conditional])].map((name) => ({
67
- name,
68
- kind: kindOf.get(name) ?? "unknown",
69
- required: unconditional.has(name)
70
- }));
71
- };
72
- const INTERPOLATION_PATTERN = /\$\{\s*\/?([\w.]+)\s*\}|\{\{\s*([\w.]+)\s*\}\}/g;
73
- //#endregion
74
- export { renderTemplate };
75
-
76
- //# sourceMappingURL=render-template.js.map
@@ -1,456 +0,0 @@
1
- import { r as PresetCategory } from "./catalog-60eaYC7b.js";
2
- //#region presets/showcase.d.ts
3
- /**
4
- * The showcase projects: presets authored as complete editable projects under
5
- * `examples/email-showcase` rather than as the single module `packages/markup/presets/<id>.tsx`.
6
- *
7
- * This registry is the one place a showcase project is declared. Codegen reads it to bundle the
8
- * project's files, the corpus reads it for provenance and canonical source paths, and
9
- * `showcase.test.ts` fails when an entry here is missing from the catalog, the public gallery or
10
- * the previews — so a project cannot be half-registered.
11
- */
12
- /** How a showcase project's design came about, and what a public surface must say about it. */
13
- type ShowcaseProvenance = {
14
- readonly kind: "owned";
15
- } | {
16
- readonly kind: "brand-recreation";
17
- /** The brand whose own email is recreated, named on every public surface. */
18
- readonly brand: string;
19
- /** What that brand's email does, in the customer's words. */
20
- readonly subject: string;
21
- readonly reviewedNote: string;
22
- };
23
- interface ShowcaseProject {
24
- /** The preset id, matching its catalog row and its entry file's stem. */
25
- readonly id: string;
26
- /** The project's TSX entry, relative to the showcase root. */
27
- readonly entryPath: `emails/${string}.tsx`;
28
- /** Every other file that travels with the entry: stylesheet, assets, retained notices. */
29
- readonly files: ReadonlyArray<string>;
30
- readonly provenance: ShowcaseProvenance;
31
- /** Must equal the catalog row's category. */
32
- readonly category: PresetCategory;
33
- /** Must equal the public gallery entry's slug. */
34
- readonly gallerySlug: string;
35
- /** Stable ISO-8601 timestamp recorded on the corpus entry. */
36
- readonly recordedAt: string;
37
- }
38
- /** Repository-relative root of the showcase project, used to build canonical source paths. */
39
- declare const SHOWCASE_ROOT = "examples/email-showcase";
40
- declare const showcaseProjects: readonly [{
41
- readonly id: "data-sharing-review";
42
- readonly entryPath: "emails/data-sharing-review.tsx";
43
- readonly files: readonly ["emails/data-sharing-review.css", "emails/assets/data-sharing-review-connection.png", "emails/assets/data-sharing-review-wordmark.png"];
44
- readonly provenance: {
45
- readonly kind: "owned";
46
- };
47
- readonly category: "transactional";
48
- readonly gallerySlug: "data-sharing-review";
49
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
50
- }, {
51
- readonly id: "editorial-newsletter";
52
- readonly entryPath: "emails/editorial-newsletter.tsx";
53
- readonly files: readonly ["emails/editorial-newsletter.css", "emails/assets/editorial-newsletter-author.png", "emails/assets/editorial-newsletter-hero.png", "emails/assets/editorial-newsletter-sponsor.png", "emails/assets/editorial-newsletter-wordmark.png"];
54
- readonly provenance: {
55
- readonly kind: "owned";
56
- };
57
- readonly category: "digest";
58
- readonly gallerySlug: "editorial-newsletter";
59
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
60
- }, {
61
- readonly id: "email-verification";
62
- readonly entryPath: "emails/email-verification.tsx";
63
- readonly files: readonly ["emails/email-verification.css", "emails/assets/email-verification-badge.png", "emails/assets/email-verification-wordmark.png"];
64
- readonly provenance: {
65
- readonly kind: "owned";
66
- };
67
- readonly category: "transactional";
68
- readonly gallerySlug: "email-verification";
69
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
70
- }, {
71
- readonly id: "events-roundup";
72
- readonly entryPath: "emails/events-roundup.tsx";
73
- readonly files: readonly ["emails/events-roundup.css", "emails/assets/events-roundup-spotlight.png", "emails/assets/events-roundup-tile-five.png", "emails/assets/events-roundup-tile-four.png", "emails/assets/events-roundup-tile-one.png", "emails/assets/events-roundup-tile-six.png", "emails/assets/events-roundup-tile-three.png", "emails/assets/events-roundup-tile-two.png", "emails/assets/events-roundup-wordmark.png"];
74
- readonly provenance: {
75
- readonly kind: "owned";
76
- };
77
- readonly category: "digest";
78
- readonly gallerySlug: "events-roundup";
79
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
80
- }, {
81
- readonly id: "feature-release-roundup";
82
- readonly entryPath: "emails/feature-release-roundup.tsx";
83
- readonly files: readonly ["emails/feature-release-roundup.css", "emails/assets/feature-release-roundup-release-activity.png", "emails/assets/feature-release-roundup-release-branching.png", "emails/assets/feature-release-roundup-release-keys.png", "emails/assets/feature-release-roundup-release-nodes.png", "emails/assets/feature-release-roundup-release-regions.png", "emails/assets/feature-release-roundup-wordmark.png"];
84
- readonly provenance: {
85
- readonly kind: "owned";
86
- };
87
- readonly category: "marketing";
88
- readonly gallerySlug: "feature-release-roundup";
89
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
90
- }, {
91
- readonly id: "feedback-request";
92
- readonly entryPath: "emails/feedback-request.tsx";
93
- readonly files: readonly ["emails/feedback-request.css", "emails/assets/feedback-request-avatar.png", "emails/assets/feedback-request-wordmark.png"];
94
- readonly provenance: {
95
- readonly kind: "owned";
96
- };
97
- readonly category: "lifecycle";
98
- readonly gallerySlug: "feedback-request";
99
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
100
- }, {
101
- readonly id: "flash-getaway-offer";
102
- readonly entryPath: "emails/flash-getaway-offer.tsx";
103
- readonly files: readonly ["emails/flash-getaway-offer.css", "emails/assets/flash-getaway-offer-banner.png", "emails/assets/flash-getaway-offer-city-harbour.png", "emails/assets/flash-getaway-offer-desert-canyon.png", "emails/assets/flash-getaway-offer-reef-bay.png", "emails/assets/flash-getaway-offer-snow-ridge.png", "emails/assets/flash-getaway-offer-wordmark.png"];
104
- readonly provenance: {
105
- readonly kind: "owned";
106
- };
107
- readonly category: "marketing";
108
- readonly gallerySlug: "flash-getaway-offer";
109
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
110
- }, {
111
- readonly id: "industry-news-digest";
112
- readonly entryPath: "emails/industry-news-digest.tsx";
113
- readonly files: readonly ["emails/industry-news-digest.css", "emails/assets/industry-news-digest-lead.png", "emails/assets/industry-news-digest-sponsor.png", "emails/assets/industry-news-digest-wordmark.png"];
114
- readonly provenance: {
115
- readonly kind: "owned";
116
- };
117
- readonly category: "digest";
118
- readonly gallerySlug: "industry-news-digest";
119
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
120
- }, {
121
- readonly id: "rewards-milestone";
122
- readonly entryPath: "emails/rewards-milestone.tsx";
123
- readonly files: readonly ["emails/assets/rewards-milestone-banner.png", "emails/assets/rewards-milestone-tier-amber.png", "emails/assets/rewards-milestone-tier-brass.png", "emails/assets/rewards-milestone-tier-copper.png", "emails/assets/rewards-milestone-tier-slate.png", "emails/assets/rewards-milestone-wordmark.png", "emails/rewards-milestone.css"];
124
- readonly provenance: {
125
- readonly kind: "owned";
126
- };
127
- readonly category: "marketing";
128
- readonly gallerySlug: "rewards-milestone";
129
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
130
- }, {
131
- readonly id: "member-referral-offer";
132
- readonly entryPath: "emails/member-referral-offer.tsx";
133
- readonly files: readonly ["emails/assets/member-referral-offer-hero.png", "emails/assets/member-referral-offer-step-earn.png", "emails/assets/member-referral-offer-step-join.png", "emails/assets/member-referral-offer-step-share.png", "emails/assets/member-referral-offer-wordmark.png", "emails/member-referral-offer.css"];
134
- readonly provenance: {
135
- readonly kind: "owned";
136
- };
137
- readonly category: "marketing";
138
- readonly gallerySlug: "member-referral-offer";
139
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
140
- }, {
141
- readonly id: "catalog-sale-newsletter";
142
- readonly entryPath: "emails/catalog-sale-newsletter.tsx";
143
- readonly files: readonly ["emails/assets/catalog-sale-newsletter-banner.png", "emails/assets/catalog-sale-newsletter-item-blanket.png", "emails/assets/catalog-sale-newsletter-item-crate.png", "emails/assets/catalog-sale-newsletter-item-kettle.png", "emails/assets/catalog-sale-newsletter-item-lantern.png", "emails/assets/catalog-sale-newsletter-wordmark.png", "emails/catalog-sale-newsletter.css"];
144
- readonly provenance: {
145
- readonly kind: "owned";
146
- };
147
- readonly category: "marketing";
148
- readonly gallerySlug: "catalog-sale-newsletter";
149
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
150
- }, {
151
- readonly id: "event-invite";
152
- readonly entryPath: "emails/event-invite.tsx";
153
- readonly files: readonly ["emails/assets/event-invite-hero.png", "emails/assets/event-invite-wordmark.png", "emails/event-invite.css"];
154
- readonly provenance: {
155
- readonly kind: "owned";
156
- };
157
- readonly category: "marketing";
158
- readonly gallerySlug: "event-invite";
159
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
160
- }, {
161
- readonly id: "limited-time-savings";
162
- readonly entryPath: "emails/limited-time-savings.tsx";
163
- readonly files: readonly ["emails/assets/limited-time-savings-banner.png", "emails/assets/limited-time-savings-wordmark.png", "emails/limited-time-savings.css"];
164
- readonly provenance: {
165
- readonly kind: "owned";
166
- };
167
- readonly category: "marketing";
168
- readonly gallerySlug: "limited-time-savings";
169
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
170
- }, {
171
- readonly id: "membership-promo";
172
- readonly entryPath: "emails/membership-promo.tsx";
173
- readonly files: readonly ["emails/assets/membership-promo-hero.png", "emails/assets/membership-promo-tier-cellar.png", "emails/assets/membership-promo-tier-market.png", "emails/assets/membership-promo-tier-pantry.png", "emails/assets/membership-promo-wordmark.png", "emails/membership-promo.css"];
174
- readonly provenance: {
175
- readonly kind: "owned";
176
- };
177
- readonly category: "marketing";
178
- readonly gallerySlug: "membership-promotion";
179
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
180
- }, {
181
- readonly id: "announcement";
182
- readonly entryPath: "emails/announcement.tsx";
183
- readonly files: readonly ["emails/announcement.css", "emails/assets/announcement-hero.png", "emails/assets/announcement-wordmark.png"];
184
- readonly provenance: {
185
- readonly kind: "owned";
186
- };
187
- readonly category: "marketing";
188
- readonly gallerySlug: "feature-announcement";
189
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
190
- }, {
191
- readonly id: "linear-login-code";
192
- readonly entryPath: "emails/linear-login-code.tsx";
193
- readonly files: readonly ["emails/linear-login-code.css", "README.md", "emails/assets/linear-logo.png"];
194
- readonly provenance: {
195
- readonly kind: "brand-recreation";
196
- readonly brand: "Linear";
197
- readonly subject: "login code";
198
- readonly reviewedNote: "Reviewed recreation of Linear's login code email, its canonical project assets, and its brand attribution.";
199
- };
200
- readonly category: "transactional";
201
- readonly gallerySlug: "linear-login-code";
202
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
203
- }, {
204
- readonly id: "membership-benefits-promo";
205
- readonly entryPath: "emails/membership-benefits-promo.tsx";
206
- readonly files: readonly ["emails/membership-benefits-promo.css", "emails/assets/membership-benefits-promo-icon-concierge.png", "emails/assets/membership-benefits-promo-icon-lounge.png", "emails/assets/membership-benefits-promo-icon-shield.png", "emails/assets/membership-benefits-promo-icon-suitcase.png", "emails/assets/membership-benefits-promo-icon-table.png", "emails/assets/membership-benefits-promo-icon-ticket.png", "emails/assets/membership-benefits-promo-panel.png", "emails/assets/membership-benefits-promo-wordmark.png"];
207
- readonly provenance: {
208
- readonly kind: "owned";
209
- };
210
- readonly category: "marketing";
211
- readonly gallerySlug: "membership-benefits-promo";
212
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
213
- }, {
214
- readonly id: "notification";
215
- readonly entryPath: "emails/notification.tsx";
216
- readonly files: readonly ["emails/notification.css", "emails/assets/notification-avatar-one.png", "emails/assets/notification-avatar-three.png", "emails/assets/notification-avatar-two.png", "emails/assets/notification-wordmark.png"];
217
- readonly provenance: {
218
- readonly kind: "owned";
219
- };
220
- readonly category: "transactional";
221
- readonly gallerySlug: "activity-notification";
222
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
223
- }, {
224
- readonly id: "onboarding-step";
225
- readonly entryPath: "emails/onboarding-step.tsx";
226
- readonly files: readonly ["emails/onboarding-step.css", "emails/assets/onboarding-step-illustration.png", "emails/assets/onboarding-step-wordmark.png"];
227
- readonly provenance: {
228
- readonly kind: "owned";
229
- };
230
- readonly category: "lifecycle";
231
- readonly gallerySlug: "onboarding-step";
232
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
233
- }, {
234
- readonly id: "order-receipt";
235
- readonly entryPath: "emails/order-receipt.tsx";
236
- readonly files: readonly ["emails/order-receipt.css", "emails/assets/order-receipt-candles.png", "emails/assets/order-receipt-mug.png", "emails/assets/order-receipt-napkins.png", "emails/assets/order-receipt-throw.png", "emails/assets/order-receipt-wordmark.png"];
237
- readonly provenance: {
238
- readonly kind: "owned";
239
- };
240
- readonly category: "transactional";
241
- readonly gallerySlug: "order-receipt";
242
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
243
- }, {
244
- readonly id: "otp";
245
- readonly entryPath: "emails/otp.tsx";
246
- readonly files: readonly ["emails/otp.css", "emails/assets/otp-wordmark.png"];
247
- readonly provenance: {
248
- readonly kind: "owned";
249
- };
250
- readonly category: "transactional";
251
- readonly gallerySlug: "one-time-passcode";
252
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
253
- }, {
254
- readonly id: "password-reset";
255
- readonly entryPath: "emails/password-reset.tsx";
256
- readonly files: readonly ["emails/password-reset.css", "emails/assets/password-reset-lock.png", "emails/assets/password-reset-wordmark.png"];
257
- readonly provenance: {
258
- readonly kind: "owned";
259
- };
260
- readonly category: "transactional";
261
- readonly gallerySlug: "password-reset";
262
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
263
- }, {
264
- readonly id: "payment-failed";
265
- readonly entryPath: "emails/payment-failed.tsx";
266
- readonly files: readonly ["emails/payment-failed.css", "emails/assets/payment-failed-bowls.png", "emails/assets/payment-failed-kettle.png", "emails/assets/payment-failed-tray.png", "emails/assets/payment-failed-wordmark.png"];
267
- readonly provenance: {
268
- readonly kind: "owned";
269
- };
270
- readonly category: "transactional";
271
- readonly gallerySlug: "payment-failed";
272
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
273
- }, {
274
- readonly id: "product-digest";
275
- readonly entryPath: "emails/product-digest.tsx";
276
- readonly files: readonly ["emails/product-digest.css", "emails/assets/product-digest-podcast.png", "emails/assets/product-digest-wordmark.png"];
277
- readonly provenance: {
278
- readonly kind: "owned";
279
- };
280
- readonly category: "digest";
281
- readonly gallerySlug: "product-digest";
282
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
283
- }, {
284
- readonly id: "product-launch-promo";
285
- readonly entryPath: "emails/product-launch-promo.tsx";
286
- readonly files: readonly ["emails/product-launch-promo.css", "emails/assets/oakline-hero.png", "emails/assets/oakline-wordmark.png", "emails/assets/product-chair.png", "emails/assets/product-lamp.png", "emails/assets/product-mirror.png", "emails/assets/product-stool.png", "emails/assets/product-throw.png", "emails/assets/product-vase.png"];
287
- readonly provenance: {
288
- readonly kind: "owned";
289
- };
290
- readonly category: "marketing";
291
- readonly gallerySlug: "product-launch-promotion";
292
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
293
- }, {
294
- readonly id: "product-newsletter";
295
- readonly entryPath: "emails/product-newsletter.tsx";
296
- readonly files: readonly ["emails/product-newsletter.css", "emails/assets/newsletter-lead.png", "emails/assets/newsletter-story-five.png", "emails/assets/newsletter-story-four.png", "emails/assets/newsletter-story-one.png", "emails/assets/newsletter-story-three.png", "emails/assets/newsletter-story-two.png", "emails/assets/newsletter-wordmark.png"];
297
- readonly provenance: {
298
- readonly kind: "owned";
299
- };
300
- readonly category: "digest";
301
- readonly gallerySlug: "product-newsletter";
302
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
303
- }, {
304
- readonly id: "product-onboarding-tour";
305
- readonly entryPath: "emails/product-onboarding-tour.tsx";
306
- readonly files: readonly ["emails/product-onboarding-tour.css", "emails/assets/product-onboarding-tour-feature-alerts.png", "emails/assets/product-onboarding-tour-feature-digest.png", "emails/assets/product-onboarding-tour-feature-questions.png", "emails/assets/product-onboarding-tour-read-alerts.png", "emails/assets/product-onboarding-tour-read-metrics.png", "emails/assets/product-onboarding-tour-wordmark.png"];
307
- readonly provenance: {
308
- readonly kind: "owned";
309
- };
310
- readonly category: "lifecycle";
311
- readonly gallerySlug: "product-onboarding-tour";
312
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
313
- }, {
314
- readonly id: "product-updates-roundup";
315
- readonly entryPath: "emails/product-updates-roundup.tsx";
316
- readonly files: readonly ["emails/product-updates-roundup.css", "emails/assets/product-updates-roundup-access-matrix.png", "emails/assets/product-updates-roundup-import-pipeline.png", "emails/assets/product-updates-roundup-query-timeline.png", "emails/assets/product-updates-roundup-status-board.png", "emails/assets/product-updates-roundup-usage-chart.png", "emails/assets/product-updates-roundup-webhook-retry.png", "emails/assets/product-updates-roundup-wordmark.png"];
317
- readonly provenance: {
318
- readonly kind: "owned";
319
- };
320
- readonly category: "marketing";
321
- readonly gallerySlug: "product-updates-roundup";
322
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
323
- }, {
324
- readonly id: "season-clearance-promo";
325
- readonly entryPath: "emails/season-clearance-promo.tsx";
326
- readonly files: readonly ["emails/season-clearance-promo.css", "emails/assets/season-clearance-promo-banner.png", "emails/assets/season-clearance-promo-cushions.png", "emails/assets/season-clearance-promo-planter.png", "emails/assets/season-clearance-promo-secondary.png", "emails/assets/season-clearance-promo-side-table.png", "emails/assets/season-clearance-promo-wall-clock.png", "emails/assets/season-clearance-promo-wordmark.png"];
327
- readonly provenance: {
328
- readonly kind: "owned";
329
- };
330
- readonly category: "marketing";
331
- readonly gallerySlug: "season-clearance-promo";
332
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
333
- }, {
334
- readonly id: "seasonal-sale-flyer";
335
- readonly entryPath: "emails/seasonal-sale-flyer.tsx";
336
- readonly files: readonly ["emails/seasonal-sale-flyer.css", "emails/assets/seasonal-sale-flyer-bedding.png", "emails/assets/seasonal-sale-flyer-cookware.png", "emails/assets/seasonal-sale-flyer-hero.png", "emails/assets/seasonal-sale-flyer-lighting.png", "emails/assets/seasonal-sale-flyer-outdoor.png", "emails/assets/seasonal-sale-flyer-storage.png", "emails/assets/seasonal-sale-flyer-tableware.png", "emails/assets/seasonal-sale-flyer-wordmark.png"];
337
- readonly provenance: {
338
- readonly kind: "owned";
339
- };
340
- readonly category: "marketing";
341
- readonly gallerySlug: "seasonal-sale-flyer";
342
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
343
- }, {
344
- readonly id: "setup-checklist";
345
- readonly entryPath: "emails/setup-checklist.tsx";
346
- readonly files: readonly ["emails/setup-checklist.css", "emails/assets/setup-checklist-step-invite.png", "emails/assets/setup-checklist-step-publish.png", "emails/assets/setup-checklist-step-source.png", "emails/assets/setup-checklist-wordmark.png"];
347
- readonly provenance: {
348
- readonly kind: "owned";
349
- };
350
- readonly category: "lifecycle";
351
- readonly gallerySlug: "setup-checklist";
352
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
353
- }, {
354
- readonly id: "shipping-update";
355
- readonly entryPath: "emails/shipping-update.tsx";
356
- readonly files: readonly ["emails/shipping-update.css", "emails/assets/shipping-update-runner.png", "emails/assets/shipping-update-teapot.png", "emails/assets/shipping-update-tumblers.png", "emails/assets/shipping-update-wordmark.png"];
357
- readonly provenance: {
358
- readonly kind: "owned";
359
- };
360
- readonly category: "transactional";
361
- readonly gallerySlug: "shipping-update";
362
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
363
- }, {
364
- readonly id: "team-invite";
365
- readonly entryPath: "emails/team-invite.tsx";
366
- readonly files: readonly ["emails/team-invite.css", "emails/assets/team-invite-inviter.png", "emails/assets/team-invite-teammate-one.png", "emails/assets/team-invite-teammate-three.png", "emails/assets/team-invite-teammate-two.png", "emails/assets/team-invite-wordmark.png"];
367
- readonly provenance: {
368
- readonly kind: "owned";
369
- };
370
- readonly category: "transactional";
371
- readonly gallerySlug: "team-invite";
372
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
373
- }, {
374
- readonly id: "travel-rewards-promo";
375
- readonly entryPath: "emails/travel-rewards-promo.tsx";
376
- readonly files: readonly ["emails/travel-rewards-promo.css", "emails/assets/travel-rewards-promo-hero.png", "emails/assets/travel-rewards-promo-partner-dining.png", "emails/assets/travel-rewards-promo-partner-drives.png", "emails/assets/travel-rewards-promo-partner-lounges.png", "emails/assets/travel-rewards-promo-partner-stays.png", "emails/assets/travel-rewards-promo-wordmark.png"];
377
- readonly provenance: {
378
- readonly kind: "owned";
379
- };
380
- readonly category: "marketing";
381
- readonly gallerySlug: "travel-rewards-promo";
382
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
383
- }, {
384
- readonly id: "trial-ending";
385
- readonly entryPath: "emails/trial-ending.tsx";
386
- readonly files: readonly ["emails/trial-ending.css", "emails/assets/trial-ending-countdown.png", "emails/assets/trial-ending-wordmark.png"];
387
- readonly provenance: {
388
- readonly kind: "owned";
389
- };
390
- readonly category: "lifecycle";
391
- readonly gallerySlug: "trial-ending";
392
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
393
- }, {
394
- readonly id: "vercel-invitation";
395
- readonly entryPath: "emails/vercel-invitation.tsx";
396
- readonly files: readonly ["emails/vercel-invitation.css", "README.md", "emails/assets/vercel-arrow.png", "emails/assets/vercel-logo.png", "emails/assets/vercel-team.png", "emails/assets/vercel-user.png"];
397
- readonly provenance: {
398
- readonly kind: "brand-recreation";
399
- readonly brand: "Vercel";
400
- readonly subject: "team invitation";
401
- readonly reviewedNote: "Reviewed recreation of Vercel's team invitation email, its canonical project assets, and its brand attribution.";
402
- };
403
- readonly category: "transactional";
404
- readonly gallerySlug: "vercel-team-invitation";
405
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
406
- }, {
407
- readonly id: "weekly-deals-circular";
408
- readonly entryPath: "emails/weekly-deals-circular.tsx";
409
- readonly files: readonly ["emails/weekly-deals-circular.css", "emails/assets/weekly-deals-circular-banner.png", "emails/assets/weekly-deals-circular-basket.png", "emails/assets/weekly-deals-circular-board.png", "emails/assets/weekly-deals-circular-bowls.png", "emails/assets/weekly-deals-circular-duvet.png", "emails/assets/weekly-deals-circular-kettle.png", "emails/assets/weekly-deals-circular-rug.png", "emails/assets/weekly-deals-circular-wordmark.png"];
410
- readonly provenance: {
411
- readonly kind: "owned";
412
- };
413
- readonly category: "marketing";
414
- readonly gallerySlug: "weekly-deals-circular";
415
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
416
- }, {
417
- readonly id: "welcome";
418
- readonly entryPath: "emails/welcome.tsx";
419
- readonly files: readonly ["emails/welcome.css", "emails/assets/welcome-hero.png", "emails/assets/welcome-wordmark.png"];
420
- readonly provenance: {
421
- readonly kind: "owned";
422
- };
423
- readonly category: "transactional";
424
- readonly gallerySlug: "welcome-email";
425
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
426
- }, {
427
- readonly id: "win-back";
428
- readonly entryPath: "emails/win-back.tsx";
429
- readonly files: readonly ["emails/win-back.css", "emails/assets/win-back-update-alerts.png", "emails/assets/win-back-update-exports.png", "emails/assets/win-back-update-mobile.png", "emails/assets/win-back-update-speed.png", "emails/assets/win-back-update-workspaces.png", "emails/assets/win-back-wordmark.png"];
430
- readonly provenance: {
431
- readonly kind: "owned";
432
- };
433
- readonly category: "lifecycle";
434
- readonly gallerySlug: "win-back";
435
- readonly recordedAt: "2026-09-08T00:00:00.000Z";
436
- }];
437
- type ShowcaseProjectId = (typeof showcaseProjects)[number]["id"];
438
- type BrandRecreationShowcaseId = Extract<(typeof showcaseProjects)[number], {
439
- readonly provenance: {
440
- readonly kind: "brand-recreation";
441
- };
442
- }>["id"];
443
- type OwnedShowcaseId = Extract<(typeof showcaseProjects)[number], {
444
- readonly provenance: {
445
- readonly kind: "owned";
446
- };
447
- }>["id"];
448
- declare const isShowcaseProjectId: (id: string) => id is ShowcaseProjectId;
449
- declare const showcaseProject: (id: string) => ShowcaseProject | undefined;
450
- /** Repository-relative path of a showcase project's TSX entry. */
451
- declare const showcaseSourcePath: (project: ShowcaseProject) => string;
452
- /** Every file the project bundles, entry first in sorted order — the shape codegen writes. */
453
- declare const showcaseProjectPaths: (project: ShowcaseProject) => ReadonlyArray<string>;
454
- //#endregion
455
- export { ShowcaseProjectId as a, showcaseProject as c, showcaseSourcePath as d, ShowcaseProject as i, showcaseProjectPaths as l, OwnedShowcaseId as n, ShowcaseProvenance as o, SHOWCASE_ROOT as r, isShowcaseProjectId as s, BrandRecreationShowcaseId as t, showcaseProjects as u };
456
- //# sourceMappingURL=showcase-DGZAWn4Z.d.ts.map
@@ -1,13 +0,0 @@
1
- //#region src/sms-segments.d.ts
2
- /** Lowercase per the CompiledSms union (document's "GSM-7"/"UCS-2" renamed). */
3
- type SmsEncoding = "gsm7" | "ucs2";
4
- interface SmsSegmentInfo {
5
- readonly encoding: SmsEncoding;
6
- readonly characterCount: number;
7
- readonly segmentCount: number;
8
- }
9
- declare const smsSegmentInfo: (text: string) => SmsSegmentInfo;
10
- declare const hasSmsOptOut: (text: string) => boolean;
11
- //#endregion
12
- export { smsSegmentInfo as i, SmsSegmentInfo as n, hasSmsOptOut as r, SmsEncoding as t };
13
- //# sourceMappingURL=sms-segments-y4FpPilJ.d.ts.map
@@ -1,67 +0,0 @@
1
- import { f as ElementNode, x as SmlNode } from "./ast-BrDtApwS.js";
2
- //#region src/source-locations.d.ts
3
- /**
4
- * The source payload emitted by the JSX development transform. The transform
5
- * may omit any field for synthetic calls; only a complete payload can identify
6
- * a source origin safely.
7
- */
8
- interface JsxSource {
9
- readonly fileName?: string | undefined;
10
- readonly lineNumber?: number | undefined;
11
- readonly columnNumber?: number | undefined;
12
- }
13
- /** A complete, normalized source origin for a JSX element. */
14
- interface JsxSourceLocation {
15
- readonly fileName: string;
16
- readonly lineNumber: number;
17
- readonly columnNumber: number;
18
- }
19
- /**
20
- * Runtime-only carrier for JSX source metadata. It is global so separately
21
- * bundled `jsx-dev-runtime` and `render-template` entries still agree on the
22
- * sidecar key, and it is a Symbol so it cannot enter SML, HTML, or JSON.
23
- */
24
- declare const JSX_SOURCE_LOCATION: unique symbol;
25
- /** Internal JSX prop used only by an editor preview source transform. */
26
- declare const JSX_SOURCE_LOCATION_PROP: "__samva_source_location";
27
- /**
28
- * A source map is useful only when it is trustworthy. Production `jsx`/`jsxs`
29
- * currently provide no source metadata, so that path reports a typed absence
30
- * rather than guessing from output order.
31
- */
32
- type SourceLocationUnavailableReason = "no-source-metadata" | "structure-mismatch" | "duplicate-source-origin" | "render-failed" | "stale-preview";
33
- type UnboundTemplateSourceLocations = {
34
- readonly kind: "available";
35
- /** Parsed SML node id → the JSX origin that produced that element. */
36
- readonly byNodeId: Readonly<Record<string, JsxSourceLocation>>;
37
- } | {
38
- readonly kind: "unavailable";
39
- readonly reason: SourceLocationUnavailableReason;
40
- };
41
- /** Revision-fenced source map exposed by a mutable workspace preview. */
42
- type TemplateSourceLocations = {
43
- readonly kind: "available";
44
- readonly revision: string;
45
- /** Parsed SML node id → the JSX origin that produced that element. */
46
- readonly byNodeId: Readonly<Record<string, JsxSourceLocation>>;
47
- } | {
48
- readonly kind: "unavailable";
49
- readonly reason: SourceLocationUnavailableReason;
50
- };
51
- /** Normalize the optional payload accepted by `jsxDEV`. */
52
- declare const completeJsxSourceLocation: (source: JsxSource | null | undefined) => JsxSourceLocation | undefined;
53
- /** Attach a source origin without changing the serialized draft shape. */
54
- declare const attachJsxSourceLocation: (node: ElementNode, source: JsxSourceLocation) => void;
55
- /** Read the ephemeral origin, if this draft element has one. */
56
- declare const jsxSourceLocationOf: (node: SmlNode) => JsxSourceLocation | undefined;
57
- /**
58
- * Pair a draft tree with its parsed SML tree by element preorder. Text nodes
59
- * are intentionally ignored: the SML parser normalizes inline whitespace, so
60
- * only the element structure is stable enough to be a source-map contract.
61
- */
62
- declare const mapJsxSourceLocations: (draft: ElementNode, parsed: ElementNode) => UnboundTemplateSourceLocations;
63
- /** Compare source-map statuses for the emission determinism guard. */
64
- declare const sameTemplateSourceLocations: (left: UnboundTemplateSourceLocations, right: UnboundTemplateSourceLocations) => boolean;
65
- //#endregion
66
- export { SourceLocationUnavailableReason as a, attachJsxSourceLocation as c, mapJsxSourceLocations as d, sameTemplateSourceLocations as f, JsxSourceLocation as i, completeJsxSourceLocation as l, JSX_SOURCE_LOCATION_PROP as n, TemplateSourceLocations as o, JsxSource as r, UnboundTemplateSourceLocations as s, JSX_SOURCE_LOCATION as t, jsxSourceLocationOf as u };
67
- //# sourceMappingURL=source-locations-DrCM82Ym.d.ts.map