@clay-design-system/email 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/build/asset-scoring.d.ts.map +1 -1
  2. package/dist/build/asset-scoring.js +2 -1
  3. package/dist/build/asset-scoring.js.map +1 -1
  4. package/dist/build/compile.js +1 -1
  5. package/dist/build/icon-registry-map.d.ts +2 -2
  6. package/dist/build/icon-registry-map.d.ts.map +1 -1
  7. package/dist/build/icon-registry-map.js +1 -1
  8. package/dist/build/placeholder.d.ts +79 -0
  9. package/dist/build/placeholder.d.ts.map +1 -0
  10. package/dist/build/placeholder.js +148 -0
  11. package/dist/build/placeholder.js.map +1 -0
  12. package/dist/build/visual-resolver.d.ts +20 -3
  13. package/dist/build/visual-resolver.d.ts.map +1 -1
  14. package/dist/build/visual-resolver.js +69 -5
  15. package/dist/build/visual-resolver.js.map +1 -1
  16. package/dist/catalog.json +77 -77
  17. package/dist/emails/component-buttons-icons.html +9 -9
  18. package/dist/emails/component-buttons-integration.html +9 -9
  19. package/dist/emails/component-buttons-primary.html +9 -9
  20. package/dist/emails/component-buttons-secondary.html +9 -9
  21. package/dist/emails/component-buttons-two-integrations.html +9 -9
  22. package/dist/emails/component-images-card-280h.html +9 -9
  23. package/dist/emails/component-images-card-320h.html +9 -9
  24. package/dist/emails/component-images-card.html +9 -9
  25. package/dist/emails/component-images-full-bleed-280h.html +9 -9
  26. package/dist/emails/component-images-full-bleed-400h.html +9 -9
  27. package/dist/emails/component-images-full-bleed.html +9 -9
  28. package/dist/emails/component-text-h1.html +9 -9
  29. package/dist/emails/component-text-h2.html +9 -9
  30. package/dist/emails/component-text-h3.html +9 -9
  31. package/dist/emails/component-text-h4.html +9 -9
  32. package/dist/emails/component-text-h5.html +9 -9
  33. package/dist/emails/component-text-p2.html +9 -9
  34. package/dist/emails/component-text-p3.html +11 -11
  35. package/dist/emails/component-text-p4.html +11 -11
  36. package/dist/emails/container.html +10 -10
  37. package/dist/emails/section-changelog-icon-list.html +9 -9
  38. package/dist/emails/section-divider-line.html +11 -11
  39. package/dist/emails/section-feature-highlight-reversed.html +9 -9
  40. package/dist/emails/section-feature-highlight.html +9 -9
  41. package/dist/emails/section-feature-rows.html +9 -9
  42. package/dist/emails/section-feature-story-row-reversed.html +11 -11
  43. package/dist/emails/section-feature-story-row.html +11 -11
  44. package/dist/emails/section-footer-lifecycle.html +9 -9
  45. package/dist/emails/section-footer-two-column-minimal.html +11 -11
  46. package/dist/emails/section-footer.html +15 -15
  47. package/dist/emails/section-header.html +9 -9
  48. package/dist/emails/section-hero.html +9 -9
  49. package/dist/emails/section-icon-feature-list.html +9 -9
  50. package/dist/emails/section-image-caption-block.html +9 -9
  51. package/dist/emails/section-image-hero.html +10 -10
  52. package/dist/emails/section-lesson-card.html +11 -11
  53. package/dist/emails/section-list-action-items.html +13 -13
  54. package/dist/emails/section-list-feature-items.html +9 -9
  55. package/dist/emails/section-list-icon-items.html +13 -13
  56. package/dist/emails/section-list-numbered-items.html +9 -9
  57. package/dist/emails/section-logo-header.html +9 -9
  58. package/dist/emails/section-newsletter-hero.html +10 -10
  59. package/dist/emails/section-product-ui-hero.html +9 -9
  60. package/dist/emails/section-promo-banner.html +9 -9
  61. package/dist/emails/section-qa-block.html +9 -9
  62. package/dist/emails/section-resource-link-list.html +9 -9
  63. package/dist/emails/section-signoff.html +9 -9
  64. package/dist/emails/section-single-column-author.html +9 -9
  65. package/dist/emails/section-single-column-feature-card.html +9 -9
  66. package/dist/emails/section-single-column-product-card.html +10 -10
  67. package/dist/emails/section-single-column-promo-card.html +10 -10
  68. package/dist/emails/section-spacer-fill.html +12 -12
  69. package/dist/emails/section-testimonial-dark-card.html +9 -9
  70. package/dist/emails/section-text-h1-regular.html +9 -9
  71. package/dist/emails/section-text-h2-regular.html +9 -9
  72. package/dist/emails/section-text-h3-regular.html +9 -9
  73. package/dist/emails/section-text-h4-regular.html +9 -9
  74. package/dist/emails/section-text-h5-regular.html +9 -9
  75. package/dist/emails/section-text-mixed-heading.html +9 -9
  76. package/dist/emails/section-text-overline-heading.html +11 -11
  77. package/dist/emails/section-text-p1-bold.html +9 -9
  78. package/dist/emails/section-text-p1-regular.html +9 -9
  79. package/dist/emails/section-text-paragraph.html +9 -9
  80. package/dist/emails/section-text-quote-card.html +9 -9
  81. package/dist/emails/section-text-quote.html +9 -9
  82. package/dist/emails/section-text-small-headline.html +10 -10
  83. package/dist/emails/section-three-column-content-cards.html +9 -9
  84. package/dist/emails/section-three-column-icon-cards.html +9 -9
  85. package/dist/emails/section-three-column-image-grid.html +9 -9
  86. package/dist/emails/section-three-up-icon-benefits.html +9 -9
  87. package/dist/emails/section-two-column-feature-cards.html +9 -9
  88. package/dist/emails/section-two-column-grid.html +9 -9
  89. package/dist/emails/section-two-column-img-text.html +9 -9
  90. package/dist/emails/section-two-column-live-tags.html +10 -10
  91. package/dist/emails/section-two-column-stacked.html +9 -9
  92. package/dist/emails/section-upsell-cta.html +9 -9
  93. package/dist/emails/section-value-bullet-list.html +9 -9
  94. package/dist/generated/email-tokens.d.ts +1 -1
  95. package/dist/generated/email-tokens.js +1 -1
  96. package/dist/index.d.ts +1 -1
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/index.js.map +1 -1
  100. package/dist/tokens/build-email-assets.js +1 -1
  101. package/dist/tokens/build-email-assets.js.map +1 -1
  102. package/dist/tokens/build-email-tokens.js +10 -10
  103. package/dist/tokens/build-email-tokens.js.map +1 -1
  104. package/package.json +5 -3
@@ -1 +1 @@
1
- {"version":3,"file":"asset-scoring.d.ts","sourceRoot":"","sources":["../../src/build/asset-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGzE;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAMlE,CAAA;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAA;IAC9B,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAA;IAChC,2FAA2F;IAC3F,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,CAAA;CACtC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAA;IACR,mKAAmK;IACnK,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAgB/F"}
1
+ {"version":3,"file":"asset-scoring.d.ts","sourceRoot":"","sources":["../../src/build/asset-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAEvE;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAMlE,CAAA;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAA;IAC9B,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAA;IAChC,2FAA2F;IAC3F,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,CAAA;CACtC;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAA;IACR,mKAAmK;IACnK,eAAe,EAAE,MAAM,EAAE,CAAA;CAC1B;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAgB/F"}
@@ -18,7 +18,8 @@
18
18
  */
19
19
  export function containsWord(haystackLower, word) {
20
20
  const escaped = word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
21
- return new RegExp(`\\b${escaped}\\b`).test(haystackLower);
21
+ // Whole word, tolerating a simple English plural in the haystack ("agents" matches tag "agent").
22
+ return new RegExp(`\\b${escaped}(?:s|es)?\\b`).test(haystackLower);
22
23
  }
23
24
  /**
24
25
  * Which of stock-library-source.csv's curated `ratio` values ('square' | 'wide' | 'super wide')
@@ -1 +1 @@
1
- {"version":3,"file":"asset-scoring.js","sourceRoot":"","sources":["../../src/build/asset-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,IAAY;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IAC3D,OAAO,IAAI,MAAM,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAC3D,CAAC;AASD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzB,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAC/B,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IACjB,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;CACrB,CAAA;AAeD,MAAM,UAAU,eAAe,CAAI,UAAe,EAAE,IAAoB;IACtE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;IAC/H,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;IACjE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,UAAU,CAAC,CAAA;IAC1E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,CAAA;IAE/F,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IACnH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;IAC5E,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,YAAY,CAAC,CAAA;IACvF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACvG,CAAC"}
1
+ {"version":3,"file":"asset-scoring.js","sourceRoot":"","sources":["../../src/build/asset-scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,aAAqB,EAAE,IAAY;IAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;IAC3D,iGAAiG;IACjG,OAAO,IAAI,MAAM,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AACpE,CAAC;AASD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmC;IACrE,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACzB,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAC/B,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;IACjB,OAAO,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;CACrB,CAAA;AAeD,MAAM,UAAU,eAAe,CAAI,UAAe,EAAE,IAAoB;IACtE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;IAC/H,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAE/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAA;IACjE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,UAAU,CAAC,CAAA;IAC1E,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,CAAA;IAE/F,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;IACnH,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAA;IAC5E,IAAI,YAAY,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAElC,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,YAAY,CAAC,CAAA;IACvF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAC9C,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACxC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;AACvG,CAAC"}
@@ -31,7 +31,7 @@ const cloudinaryIndex = cloudinaryManifest ? indexManifestByCampaignEmailFile(cl
31
31
  *
32
32
  * Two independent hosted-URL sources:
33
33
  * - `icons/<name>.svg` → the Clay icon registry's `cloudinaryPngUrl` (icons.json, populated by
34
- * scripts/upload-icons-to-cloudinary.ts). PNG, not the icon's own SVG source: many email
34
+ * scripts/cloudinary/upload-icons-to-cloudinary.ts). PNG, not the icon's own SVG source: many email
35
35
  * clients (notably Outlook) don't reliably render SVG in <img>, so hosted icon delivery
36
36
  * follows the same raster-only rule as everything else here — only the *authoring* format is
37
37
  * SVG. An icon not yet uploaded (brand-new, before its first `icons:upload-cloudinary` run)
@@ -6,7 +6,7 @@
6
6
  * rootDir: "src", so a cross-package relative TS import would violate it; a plain JSON file read
7
7
  * doesn't, same trick build-email-assets.ts already uses to reach
8
8
  * packages/react/src/icons/svg/*.svg for the actual SVG bytes. icons.json is itself generated by
9
- * the real @clay-design-system/icons pipeline (scripts/generate-icons.ts) — nothing here is invented.
9
+ * the real Clay icon pipeline (scripts/docs/generate-icons.ts) — nothing here is invented.
10
10
  */
11
11
  import { type RankedMatch } from './asset-scoring';
12
12
  export interface IconRegistryEntry {
@@ -14,7 +14,7 @@ export interface IconRegistryEntry {
14
14
  category: string;
15
15
  description: string;
16
16
  tags: string[];
17
- /** Present only once scripts/upload-icons-to-cloudinary.ts has uploaded this icon. */
17
+ /** Present only once scripts/cloudinary/upload-icons-to-cloudinary.ts has uploaded this icon. */
18
18
  cloudinarySvgUrl?: string;
19
19
  cloudinaryPngUrl?: string;
20
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"icon-registry-map.d.ts","sourceRoot":"","sources":["../../src/build/icon-registry-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAiC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAKjF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAOD,eAAO,MAAM,aAAa,EAAE,iBAAiB,EAAuB,CAAA;AAEpE,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAOnF"}
1
+ {"version":3,"file":"icon-registry-map.d.ts","sourceRoot":"","sources":["../../src/build/icon-registry-map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAiC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAKjF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,EAAE,CAAA;IACd,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAOD,eAAO,MAAM,aAAa,EAAE,iBAAiB,EAAuB,CAAA;AAEpE,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAOnF"}
@@ -6,7 +6,7 @@
6
6
  * rootDir: "src", so a cross-package relative TS import would violate it; a plain JSON file read
7
7
  * doesn't, same trick build-email-assets.ts already uses to reach
8
8
  * packages/react/src/icons/svg/*.svg for the actual SVG bytes. icons.json is itself generated by
9
- * the real @clay-design-system/icons pipeline (scripts/generate-icons.ts) — nothing here is invented.
9
+ * the real Clay icon pipeline (scripts/docs/generate-icons.ts) — nothing here is invented.
10
10
  */
11
11
  import { existsSync, readFileSync } from 'node:fs';
12
12
  import { dirname, resolve } from 'node:path';
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Labelled email placeholder generator (K10 EM-2).
3
+ *
4
+ * An unresolved image slot (visual-resolver.ts status 'placeholder') needs a visible stand-in while
5
+ * the real asset is sourced. The shared `assets/placeholders/*.svg` tiles are blank and painted
6
+ * #e6e7ea, which is not on the approved placeholder tint list, and SVG doesn't render in Outlook or
7
+ * Gmail <img>. This module draws a **labelled** placeholder on an **approved tint** and writes it as
8
+ * a 2× PNG campaign asset, so `email:upload` can host it like any other campaign image.
9
+ *
10
+ * The tint list mirrors `policy.email.color-system.image-placeholder-background-colors`
11
+ * (19-email-color-system.md § Image Placeholder Background Colors); kb:test checks the two agree.
12
+ *
13
+ * Usage:
14
+ * pnpm --filter @clay-design-system/email email:placeholder -- \
15
+ * --label="A monday board built from a template" --size=560x320 \
16
+ * [--tint=cool-grey|warm-cream|pale-blue|pale-lavender|pale-green|black] [--hero] [--scale=2] \
17
+ * --out=<abs path>/src/assets/<campaign>/<name>.png (or .svg for the vector source)
18
+ */
19
+ /** The approved placeholder background tints, in the order the colour-system policy lists them. */
20
+ export declare const PLACEHOLDER_TINTS: {
21
+ readonly 'cool-grey': {
22
+ readonly hex: "#f3f4f5";
23
+ readonly use: "Default — safe for any content type";
24
+ };
25
+ readonly 'warm-cream': {
26
+ readonly hex: "#f7f3ea";
27
+ readonly use: "Warm-tinted sections (surfaceWarm)";
28
+ };
29
+ readonly 'pale-blue': {
30
+ readonly hex: "#eff5fd";
31
+ readonly use: "Conference, webinar, event imagery";
32
+ };
33
+ readonly 'pale-lavender': {
34
+ readonly hex: "#d9d7ff";
35
+ readonly use: "Creative/design feature sections";
36
+ };
37
+ readonly 'pale-green': {
38
+ readonly hex: "#ceead6";
39
+ readonly use: "Sustainability, success, governance imagery";
40
+ };
41
+ readonly black: {
42
+ readonly hex: "#000000";
43
+ readonly use: "Dark/dramatic hero image placeholder (above-fold hero only)";
44
+ };
45
+ };
46
+ export type PlaceholderTint = keyof typeof PLACEHOLDER_TINTS;
47
+ export interface PlaceholderOptions {
48
+ /** Display width in px (the column the image sits in, e.g. 560). */
49
+ width: number;
50
+ /** Display height in px. */
51
+ height: number;
52
+ /** What the real image will show — printed on the tile, so a reviewer knows what's missing. */
53
+ label: string;
54
+ /** Default 'cool-grey'. */
55
+ tint?: PlaceholderTint;
56
+ /** The slot is the above-fold hero — the only slot that may use the black tint. */
57
+ hero?: boolean;
58
+ }
59
+ /** Greedy word wrap to `maxChars` per line, at most `maxLines` lines (the last one ellipsised). */
60
+ export declare function wrapLabel(label: string, maxChars: number, maxLines: number): string[];
61
+ /** Validates the options; throws on anything the colour-system policy doesn't allow. */
62
+ export declare function checkPlaceholderOptions(opts: PlaceholderOptions): Required<PlaceholderOptions>;
63
+ /** The labelled placeholder as an SVG string at display size (the PNG renders it at `scale`×). */
64
+ export declare function placeholderSvg(opts: PlaceholderOptions): string;
65
+ /** Writes the placeholder: `.svg` → the vector source; anything else → a `scale`× PNG (via sharp). */
66
+ export declare function writePlaceholder(opts: PlaceholderOptions & {
67
+ out: string;
68
+ scale?: number;
69
+ }): Promise<{
70
+ out: string;
71
+ width: number;
72
+ height: number;
73
+ }>;
74
+ /** `--label=… --size=560x320 --tint=… --hero --scale=2 --out=…` → options. */
75
+ export declare function parsePlaceholderArgs(argv: string[]): PlaceholderOptions & {
76
+ out: string;
77
+ scale?: number;
78
+ };
79
+ //# sourceMappingURL=placeholder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../src/build/placeholder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAOH,mGAAmG;AACnG,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAOpB,CAAA;AAEV,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,iBAAiB,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,mFAAmF;IACnF,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAQD,mGAAmG;AACnG,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBrF;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAa9F;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAwB/D;AAED,sGAAsG;AACtG,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB1J;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,kBAAkB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAgBzG"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Labelled email placeholder generator (K10 EM-2).
3
+ *
4
+ * An unresolved image slot (visual-resolver.ts status 'placeholder') needs a visible stand-in while
5
+ * the real asset is sourced. The shared `assets/placeholders/*.svg` tiles are blank and painted
6
+ * #e6e7ea, which is not on the approved placeholder tint list, and SVG doesn't render in Outlook or
7
+ * Gmail <img>. This module draws a **labelled** placeholder on an **approved tint** and writes it as
8
+ * a 2× PNG campaign asset, so `email:upload` can host it like any other campaign image.
9
+ *
10
+ * The tint list mirrors `policy.email.color-system.image-placeholder-background-colors`
11
+ * (19-email-color-system.md § Image Placeholder Background Colors); kb:test checks the two agree.
12
+ *
13
+ * Usage:
14
+ * pnpm --filter @clay-design-system/email email:placeholder -- \
15
+ * --label="A monday board built from a template" --size=560x320 \
16
+ * [--tint=cool-grey|warm-cream|pale-blue|pale-lavender|pale-green|black] [--hero] [--scale=2] \
17
+ * --out=<abs path>/src/assets/<campaign>/<name>.png (or .svg for the vector source)
18
+ */
19
+ import { mkdirSync, writeFileSync } from 'node:fs';
20
+ import { dirname, resolve } from 'node:path';
21
+ import { pathToFileURL } from 'node:url';
22
+ import { emailColor, emailType } from '../generated/email-tokens';
23
+ /** The approved placeholder background tints, in the order the colour-system policy lists them. */
24
+ export const PLACEHOLDER_TINTS = {
25
+ 'cool-grey': { hex: emailColor.page, use: 'Default — safe for any content type' },
26
+ 'warm-cream': { hex: emailColor.surfaceWarm, use: 'Warm-tinted sections (surfaceWarm)' },
27
+ 'pale-blue': { hex: '#eff5fd', use: 'Conference, webinar, event imagery' },
28
+ 'pale-lavender': { hex: '#d9d7ff', use: 'Creative/design feature sections' },
29
+ 'pale-green': { hex: '#ceead6', use: 'Sustainability, success, governance imagery' },
30
+ black: { hex: emailColor.pageDark, use: 'Dark/dramatic hero image placeholder (above-fold hero only)' },
31
+ };
32
+ const MAX_LABEL = 120;
33
+ function escapeXml(s) {
34
+ return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&apos;');
35
+ }
36
+ /** Greedy word wrap to `maxChars` per line, at most `maxLines` lines (the last one ellipsised). */
37
+ export function wrapLabel(label, maxChars, maxLines) {
38
+ const words = label.trim().split(/\s+/);
39
+ const lines = [];
40
+ let cur = '';
41
+ for (const w of words) {
42
+ const next = cur ? `${cur} ${w}` : w;
43
+ if (next.length <= maxChars || !cur)
44
+ cur = next;
45
+ else {
46
+ lines.push(cur);
47
+ cur = w;
48
+ }
49
+ }
50
+ if (cur)
51
+ lines.push(cur);
52
+ if (lines.length <= maxLines)
53
+ return lines;
54
+ const kept = lines.slice(0, maxLines);
55
+ kept[maxLines - 1] = `${kept[maxLines - 1].replace(/[.,;:]?$/, '')}…`;
56
+ return kept;
57
+ }
58
+ /** Validates the options; throws on anything the colour-system policy doesn't allow. */
59
+ export function checkPlaceholderOptions(opts) {
60
+ const tint = opts.tint ?? 'cool-grey';
61
+ if (!(tint in PLACEHOLDER_TINTS)) {
62
+ throw new Error(`Unknown placeholder tint "${tint}" — use one of ${Object.keys(PLACEHOLDER_TINTS).join(', ')} (policy.email.color-system.image-placeholder-background-colors)`);
63
+ }
64
+ if (tint === 'black' && !opts.hero)
65
+ throw new Error('The black placeholder tint is for the above-fold hero only — pass hero: true (--hero), or use a pale tint');
66
+ for (const [k, v] of [['width', opts.width], ['height', opts.height]]) {
67
+ if (!Number.isInteger(v) || v < 16 || v > 1280)
68
+ throw new Error(`Placeholder ${k} must be an integer display size in px (16–1280), got ${v}`);
69
+ }
70
+ const label = opts.label?.trim() ?? '';
71
+ if (!label)
72
+ throw new Error('A placeholder needs a label: say what the real image will show');
73
+ if (label.length > MAX_LABEL)
74
+ throw new Error(`Placeholder label is ${label.length} chars; keep it ≤${MAX_LABEL}`);
75
+ return { width: opts.width, height: opts.height, label, tint, hero: !!opts.hero };
76
+ }
77
+ /** The labelled placeholder as an SVG string at display size (the PNG renders it at `scale`×). */
78
+ export function placeholderSvg(opts) {
79
+ const { width, height, label, tint } = checkPlaceholderOptions(opts);
80
+ const bg = PLACEHOLDER_TINTS[tint].hex;
81
+ const ink = tint === 'black' ? emailColor.textDark : emailColor.textMuted;
82
+ const fontSize = Math.max(12, Math.min(24, Math.round(Math.min(width, height) / 12)));
83
+ const sizeFont = Math.max(10, Math.round(fontSize * 0.7));
84
+ const lineHeight = Math.round(fontSize * 1.3);
85
+ const maxChars = Math.max(8, Math.floor((width * 0.84) / (fontSize * 0.56)));
86
+ const maxLines = Math.max(1, Math.floor((height * 0.7 - sizeFont * 1.6) / lineHeight));
87
+ const lines = wrapLabel(label, maxChars, maxLines);
88
+ const blockH = lines.length * lineHeight + sizeFont * 1.6;
89
+ const top = (height - blockH) / 2 + fontSize;
90
+ const family = escapeXml(emailType.family);
91
+ const text = lines
92
+ .map((l, i) => `<text x="${width / 2}" y="${(top + i * lineHeight).toFixed(1)}" text-anchor="middle" font-family="${family}" font-size="${fontSize}" font-weight="600" fill="${ink}">${escapeXml(l)}</text>`)
93
+ .join('');
94
+ const sizeY = (top + lines.length * lineHeight + sizeFont * 0.4).toFixed(1);
95
+ return (`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" role="img" aria-label="${escapeXml(`Placeholder: ${label}`)}">` +
96
+ `<rect width="${width}" height="${height}" fill="${bg}"/>` +
97
+ text +
98
+ `<text x="${width / 2}" y="${sizeY}" text-anchor="middle" font-family="${family}" font-size="${sizeFont}" font-weight="400" fill="${ink}">${width}×${height} · placeholder</text>` +
99
+ `</svg>`);
100
+ }
101
+ /** Writes the placeholder: `.svg` → the vector source; anything else → a `scale`× PNG (via sharp). */
102
+ export async function writePlaceholder(opts) {
103
+ const svg = placeholderSvg(opts);
104
+ const out = resolve(opts.out);
105
+ mkdirSync(dirname(out), { recursive: true });
106
+ if (out.toLowerCase().endsWith('.svg')) {
107
+ writeFileSync(out, svg);
108
+ return { out, width: opts.width, height: opts.height };
109
+ }
110
+ const scale = opts.scale ?? 2;
111
+ const { default: sharp } = await import('sharp');
112
+ const png = await sharp(Buffer.from(svg), { density: 72 * scale })
113
+ .resize(opts.width * scale, opts.height * scale)
114
+ .png()
115
+ .toBuffer();
116
+ writeFileSync(out, png);
117
+ return { out, width: opts.width * scale, height: opts.height * scale };
118
+ }
119
+ /** `--label=… --size=560x320 --tint=… --hero --scale=2 --out=…` → options. */
120
+ export function parsePlaceholderArgs(argv) {
121
+ const get = (k) => argv.find((a) => a.startsWith(`--${k}=`))?.slice(k.length + 3);
122
+ const size = get('size') ?? '';
123
+ const m = size.match(/^(\d+)x(\d+)$/);
124
+ if (!m)
125
+ throw new Error('--size=<width>x<height> (display px, e.g. 560x320) is required');
126
+ const out = get('out');
127
+ if (!out)
128
+ throw new Error('--out=<path>.png (or .svg) is required — a campaign asset goes in src/assets/<campaign>/');
129
+ return {
130
+ width: Number(m[1]),
131
+ height: Number(m[2]),
132
+ label: get('label') ?? '',
133
+ tint: get('tint') ?? 'cool-grey',
134
+ hero: argv.includes('--hero'),
135
+ scale: get('scale') ? Number(get('scale')) : undefined,
136
+ out,
137
+ };
138
+ }
139
+ const isMain = process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.argv[1]).href;
140
+ if (isMain) {
141
+ writePlaceholder(parsePlaceholderArgs(process.argv.slice(2)))
142
+ .then((r) => console.log(`✓ placeholder ${r.width}×${r.height}px → ${r.out}`))
143
+ .catch((err) => {
144
+ console.error(`✗ ${err.message}`);
145
+ process.exit(1);
146
+ });
147
+ }
148
+ //# sourceMappingURL=placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../src/build/placeholder.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Visual-brief resolver (PLAN.md Phase 3; BRIEF-HANDOVER.md §3; OPEN-QUESTIONS.md D6/D8/D21).
2
+ * Visual-brief resolver (OPEN-QUESTIONS.md M3 + D6/D8/D21; BRIEF-HANDOVER.md §3).
3
3
  *
4
4
  * Takes the 4-field per-slot visual brief (slot / intent / source / assetRef) and resolves each
5
5
  * slot to exactly one of three outcomes, per the priority order already documented in
@@ -22,11 +22,12 @@
22
22
  * they need a human decision, not a silent swap.
23
23
  *
24
24
  * Every slot gets exactly one of the three statuses above — never nothing. That's the literal
25
- * "no silent gaps" contract from PLAN.md Phase 3's "Done when".
25
+ * "no silent gaps" contract from OPEN-QUESTIONS.md M3's "Done when".
26
26
  *
27
27
  * Usage: tsx src/build/visual-resolver.ts --brief=<path-to-visual-brief.json>
28
28
  */
29
- import type { SlotShape } from './asset-scoring';
29
+ import { type SlotShape } from './asset-scoring';
30
+ import { type StockLibraryEntry } from './stock-library-map';
30
31
  export type VisualSource = 'agent-portrait' | 'product-ui' | 'logo' | 'abstract' | 'icon' | string;
31
32
  export interface VisualSlotSpec {
32
33
  /** e.g. "product-ui-hero → Image" — ties the slot to a real section field (BRIEF-HANDOVER §3). */
@@ -53,6 +54,8 @@ export interface VisualResolution {
53
54
  /** status === 'placeholder' */
54
55
  placeholderSvg?: string;
55
56
  placeholderComment?: string;
57
+ /** status === 'placeholder': the `email:placeholder` command that renders it labelled, on an approved tint. */
58
+ placeholderCommand?: string;
56
59
  /** status === 'gap' */
57
60
  gapReason?: string;
58
61
  }
@@ -65,6 +68,20 @@ export type { SlotShape };
65
68
  * as a stage-2 tie-breaker only (see stock-library-map.ts) — it never gates a match on its own.
66
69
  */
67
70
  export declare function deriveSlotShape(spec: VisualSlotSpec): SlotShape;
71
+ /**
72
+ * Tier 5 by name (K10 EM-6): a brief that already knows the stock image names it in `assetRef` —
73
+ * `stock: <slug>`, `asset/<slug>`, the bare slug, the entry name, its file name or its Cloudinary URL.
74
+ * An exact key wins. A partial slug (`ai-work-management-hero` also prefixes `…-hero-alt`) or a
75
+ * name shared by several entries is a tie, broken deterministically — never by catalogue order:
76
+ * 1. more of the entry's tags named in `intent`, 2. aspect fits the slot shape, 3. shorter slug,
77
+ * 4. slug A→Z.
78
+ * No entry matches the ref → null, and the resolver falls back to the intent search.
79
+ */
80
+ export declare function findStockEntryByRef(assetRef: string, intent: string, shape: SlotShape): {
81
+ entry: StockLibraryEntry;
82
+ via: 'exact' | 'tie-break';
83
+ candidates: string[];
84
+ } | null;
68
85
  /** Resolve one visual-brief slot. `campaign` scopes tier-3 local-folder lookups. */
69
86
  export declare function resolveVisualSlot(spec: VisualSlotSpec, campaign: string): VisualResolution;
70
87
  //# sourceMappingURL=visual-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"visual-resolver.d.ts","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAoChD,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;AAElG,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,aAAa,GAAG,KAAK,CAAA;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiBD,YAAY,EAAE,SAAS,EAAE,CAAA;AAEzB;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAO/D;AA0GD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA2J1F"}
1
+ {"version":3,"file":"visual-resolver.d.ts","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAKH,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAIzE,OAAO,EAAwC,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAgClG,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAA;AAElG,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAA;IACpB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,aAAa,GAAG,KAAK,CAAA;AAEvE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,sBAAsB,CAAA;IAC9B,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC3B,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,+GAA+G;IAC/G,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAiBD,YAAY,EAAE,SAAS,EAAE,CAAA;AAEzB;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAO/D;AAkGD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,GACf;IAAE,KAAK,EAAE,iBAAiB,CAAC;IAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CA4BvF;AAgBD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CA4K1F"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Visual-brief resolver (PLAN.md Phase 3; BRIEF-HANDOVER.md §3; OPEN-QUESTIONS.md D6/D8/D21).
2
+ * Visual-brief resolver (OPEN-QUESTIONS.md M3 + D6/D8/D21; BRIEF-HANDOVER.md §3).
3
3
  *
4
4
  * Takes the 4-field per-slot visual brief (slot / intent / source / assetRef) and resolves each
5
5
  * slot to exactly one of three outcomes, per the priority order already documented in
@@ -22,17 +22,18 @@
22
22
  * they need a human decision, not a silent swap.
23
23
  *
24
24
  * Every slot gets exactly one of the three statuses above — never nothing. That's the literal
25
- * "no silent gaps" contract from PLAN.md Phase 3's "Done when".
25
+ * "no silent gaps" contract from OPEN-QUESTIONS.md M3's "Done when".
26
26
  *
27
27
  * Usage: tsx src/build/visual-resolver.ts --brief=<path-to-visual-brief.json>
28
28
  */
29
29
  import { existsSync, readdirSync, readFileSync } from 'node:fs';
30
30
  import { basename, dirname, join, resolve } from 'node:path';
31
31
  import { fileURLToPath, pathToFileURL } from 'node:url';
32
+ import { SHAPE_ACCEPTABLE_RATIOS } from './asset-scoring';
32
33
  import { assetsDir } from './email-tree';
33
34
  import { findIconByName, findIconEntry } from './icon-registry-map';
34
35
  import { findPersonaEntry } from './persona-character-map';
35
- import { findStockLibraryEntry } from './stock-library-map';
36
+ import { findStockLibraryEntry, STOCK_LIBRARY } from './stock-library-map';
36
37
  const __dirname = dirname(fileURLToPath(import.meta.url));
37
38
  /** Cross-package: the repo's one real agent-portrait library lives under packages/react. */
38
39
  const AGENTS_IMAGES_DIR = resolve(__dirname, '../../../../packages/react/src/visuals/agents/images');
@@ -187,6 +188,52 @@ function findExactFile(dir, filename) {
187
188
  const byStem = files.find((f) => f.toLowerCase().replace(/\.[a-z0-9]+$/i, '') === wantedStem);
188
189
  return byStem ? join(dir, byStem) : null;
189
190
  }
191
+ /**
192
+ * Tier 5 by name (K10 EM-6): a brief that already knows the stock image names it in `assetRef` —
193
+ * `stock: <slug>`, `asset/<slug>`, the bare slug, the entry name, its file name or its Cloudinary URL.
194
+ * An exact key wins. A partial slug (`ai-work-management-hero` also prefixes `…-hero-alt`) or a
195
+ * name shared by several entries is a tie, broken deterministically — never by catalogue order:
196
+ * 1. more of the entry's tags named in `intent`, 2. aspect fits the slot shape, 3. shorter slug,
197
+ * 4. slug A→Z.
198
+ * No entry matches the ref → null, and the resolver falls back to the intent search.
199
+ */
200
+ export function findStockEntryByRef(assetRef, intent, shape) {
201
+ const raw = assetRef
202
+ .trim()
203
+ .replace(/^(?:stock(?:[- ]?library)?|stocklibrary|stock_library)\s*:\s*/i, '')
204
+ .trim();
205
+ if (!raw)
206
+ return null;
207
+ const ref = basename(raw.replace(/^asset\//i, ''))
208
+ .replace(/\.(png|jpe?g|gif|webp)$/i, '')
209
+ .toLowerCase();
210
+ const slugOf = (s) => s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
211
+ const exact = STOCK_LIBRARY.filter((e) => e.slug === ref || e.localFile.toLowerCase().replace(/\.[a-z0-9]+$/i, '') === ref || basename(e.cloudinaryUrl).toLowerCase().replace(/\.[a-z0-9]+$/i, '') === ref);
212
+ const pool = exact.length ? exact : STOCK_LIBRARY.filter((e) => slugOf(e.name) === slugOf(raw) || e.slug.startsWith(`${slugOf(ref)}-`));
213
+ if (!pool.length)
214
+ return null;
215
+ const lower = intent.toLowerCase();
216
+ const fits = SHAPE_ACCEPTABLE_RATIOS[shape];
217
+ const ranked = [...pool].sort((a, b) => {
218
+ const ta = a.tags.filter((t) => containsWord(lower, t)).length;
219
+ const tb = b.tags.filter((t) => containsWord(lower, t)).length;
220
+ if (ta !== tb)
221
+ return tb - ta;
222
+ const fa = fits.has(a.aspectRatioLabel) ? 1 : 0;
223
+ const fb = fits.has(b.aspectRatioLabel) ? 1 : 0;
224
+ if (fa !== fb)
225
+ return fb - fa;
226
+ if (a.slug.length !== b.slug.length)
227
+ return a.slug.length - b.slug.length;
228
+ return a.slug < b.slug ? -1 : a.slug > b.slug ? 1 : 0;
229
+ });
230
+ return { entry: ranked[0], via: pool.length === 1 ? 'exact' : 'tie-break', candidates: ranked.map((e) => e.slug) };
231
+ }
232
+ /** How to turn a placeholder spec into a labelled, approved-tint PNG (K10 EM-2, placeholder.ts). */
233
+ function placeholderCommand(intent, campaign) {
234
+ const label = intent.replace(/"/g, "'").slice(0, 120);
235
+ return `pnpm --filter @clay-design-system/email email:placeholder -- --label="${label}" --size=<width>x<height> --out=<abs>/packages/email/src/assets/${campaign}/<name>.png`;
236
+ }
190
237
  function pickPlaceholderSvg() {
191
238
  const preferred = join(assetsDir, 'placeholders', 'placeholder-560x315.svg');
192
239
  if (existsSync(preferred))
@@ -206,6 +253,7 @@ export function resolveVisualSlot(spec, campaign) {
206
253
  tier: 2,
207
254
  placeholderSvg: pickPlaceholderSvg(),
208
255
  placeholderComment: `[PLACEHOLDER: composite agent+UI scene — ${intent}. No dedicated library yet; see knowledge/hero-pipeline.md for the Hero pipeline fallback.]`,
256
+ placeholderCommand: placeholderCommand(intent, campaign),
209
257
  detail: 'Classified as composite (intent mentions UI/product elements) — tier 1 AgentVisual only covers standalone portraits. Tier 2 (Hero pipeline) has no ready library yet, so placeholder is legitimate per email-assets/SKILL.md.',
210
258
  };
211
259
  }
@@ -255,6 +303,7 @@ export function resolveVisualSlot(spec, campaign) {
255
303
  tier: 4,
256
304
  placeholderSvg: pickPlaceholderSvg(),
257
305
  placeholderComment: `[PLACEHOLDER: logo — ${intent}. No repo-hosted customer/integration logo registry exists yet for email.]`,
306
+ placeholderCommand: placeholderCommand(intent, campaign),
258
307
  detail: 'No shared or campaign-local logo file matched. Legitimate placeholder — no repo-hosted registry for arbitrary customer/integration logos yet (email-assets/SKILL.md tier 4).',
259
308
  };
260
309
  }
@@ -266,6 +315,18 @@ export function resolveVisualSlot(spec, campaign) {
266
315
  // every entry in stock-library-map.ts is a marketing hero/card illustration (dashboards,
267
316
  // agent-feature cards, exchanges), not an actual brand/product logo — wiring it into the
268
317
  // logo branch would only add a chance of a wrong match for zero real coverage gain.
318
+ // EM-6: a brief that names the stock image (`assetRef`) gets that image — before the intent search.
319
+ const byRef = assetRef ? findStockEntryByRef(assetRef, intent, deriveSlotShape(spec)) : null;
320
+ if (byRef) {
321
+ const tie = byRef.via === 'tie-break' ? ` (assetRef matched ${byRef.candidates.length} entries: ${byRef.candidates.join(', ')}; tie broken by intent tags → aspect fit → shorter slug → A→Z)` : '';
322
+ return {
323
+ slot,
324
+ status: 'resolved',
325
+ tier: 5,
326
+ assetPath: byRef.entry.cloudinaryUrl,
327
+ detail: `Matched stock-library entry "${byRef.entry.slug}" from assetRef "${assetRef}"${tie} — already hosted, no upload step needed.`,
328
+ };
329
+ }
269
330
  const stockMatch = findStockLibraryEntry({ intent, shape: deriveSlotShape(spec), campaign });
270
331
  if (stockMatch) {
271
332
  const { entry, disambiguatedBy } = stockMatch;
@@ -284,7 +345,8 @@ export function resolveVisualSlot(spec, campaign) {
284
345
  tier: 4,
285
346
  placeholderSvg: pickPlaceholderSvg(),
286
347
  placeholderComment: `[PLACEHOLDER: ${source} — ${intent}. Generation prompt: "${intent}".]`,
287
- detail: `No campaign-local asset and no unambiguous stock-library match. Legitimate placeholder — ${source === 'product-ui' ? 'no repo-hosted product-screenshot library exists yet' : 'abstract art has no registry'} beyond the stock library (email-assets/SKILL.md tier 4).`,
348
+ placeholderCommand: placeholderCommand(intent, campaign),
349
+ detail: `No campaign-local asset${assetRef ? ` or stock-library entry for assetRef "${assetRef}"` : ''} and no unambiguous stock-library match. Legitimate placeholder — ${source === 'product-ui' ? 'no repo-hosted product-screenshot library exists yet' : 'abstract art has no registry'} beyond the stock library (email-assets/SKILL.md tier 4).`,
288
350
  };
289
351
  }
290
352
  if (source === 'icon') {
@@ -313,6 +375,7 @@ export function resolveVisualSlot(spec, campaign) {
313
375
  tier: 4,
314
376
  placeholderSvg: pickPlaceholderSvg(),
315
377
  placeholderComment: `[PLACEHOLDER: icon — ${intent}. No matching icon in the Clay registry.]`,
378
+ placeholderCommand: placeholderCommand(intent, campaign),
316
379
  detail: 'No icon in the ~600-icon Clay registry (packages/react/src/icons) matched by exact name or an unambiguous tag. Legitimate placeholder — not every requested icon concept exists in the registry (email-assets/SKILL.md tier 4).',
317
380
  };
318
381
  }
@@ -343,7 +406,8 @@ export function resolveVisualSlot(spec, campaign) {
343
406
  const STATUS_ICON = { resolved: '✓', placeholder: '◻', gap: '✗' };
344
407
  function formatResolution(r) {
345
408
  const label = r.status === 'resolved' ? r.assetPath : r.status === 'placeholder' ? r.placeholderComment : `GAP (${r.gapReason})`;
346
- return ` ${STATUS_ICON[r.status]} ${r.slot}\n ${label}\n ${r.detail}`;
409
+ const make = r.placeholderCommand ? `\n render it: ${r.placeholderCommand}` : '';
410
+ return ` ${STATUS_ICON[r.status]} ${r.slot}\n ${label}\n ${r.detail}${make}`;
347
411
  }
348
412
  async function main() {
349
413
  const briefArg = process.argv.find((a) => a.startsWith('--brief='));
@@ -1 +1 @@
1
- {"version":3,"file":"visual-resolver.js","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"visual-resolver.js","sourceRoot":"","sources":["../../src/build/visual-resolver.ts"],"names":[],"mappings":"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"}