@clay-design-system/email 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -2
- package/dist/build/asset-scoring.d.ts +48 -0
- package/dist/build/asset-scoring.d.ts.map +1 -0
- package/dist/build/asset-scoring.js +57 -0
- package/dist/build/asset-scoring.js.map +1 -0
- package/dist/build/braze-transform.d.ts +20 -0
- package/dist/build/braze-transform.d.ts.map +1 -0
- package/dist/build/braze-transform.js +26 -0
- package/dist/build/braze-transform.js.map +1 -0
- package/dist/build/catalog.d.ts +25 -0
- package/dist/build/catalog.d.ts.map +1 -0
- package/dist/build/catalog.js +3 -0
- package/dist/build/catalog.js.map +1 -0
- package/dist/build/cloudinary-env.d.ts +15 -0
- package/dist/build/cloudinary-env.d.ts.map +1 -0
- package/dist/build/cloudinary-env.js +36 -0
- package/dist/build/cloudinary-env.js.map +1 -0
- package/dist/build/cloudinary-manifest.d.ts +33 -0
- package/dist/build/cloudinary-manifest.d.ts.map +1 -0
- package/dist/build/cloudinary-manifest.js +36 -0
- package/dist/build/cloudinary-manifest.js.map +1 -0
- package/dist/build/compile.d.ts +11 -0
- package/dist/build/compile.d.ts.map +1 -0
- package/dist/build/compile.js +234 -0
- package/dist/build/compile.js.map +1 -0
- package/dist/build/email-config.d.ts +26 -0
- package/dist/build/email-config.d.ts.map +1 -0
- package/dist/build/email-config.js +17 -0
- package/dist/build/email-config.js.map +1 -0
- package/dist/build/email-list.d.ts +6 -0
- package/dist/build/email-list.d.ts.map +1 -0
- package/dist/build/email-list.js +17 -0
- package/dist/build/email-list.js.map +1 -0
- package/dist/build/email-tree.d.ts +23 -0
- package/dist/build/email-tree.d.ts.map +1 -0
- package/dist/build/email-tree.js +46 -0
- package/dist/build/email-tree.js.map +1 -0
- package/dist/build/export-braze.d.ts +22 -0
- package/dist/build/export-braze.d.ts.map +1 -0
- package/dist/build/export-braze.js +92 -0
- package/dist/build/export-braze.js.map +1 -0
- package/dist/build/generate-stock-library-map.d.ts +13 -0
- package/dist/build/generate-stock-library-map.d.ts.map +1 -0
- package/dist/build/generate-stock-library-map.js +202 -0
- package/dist/build/generate-stock-library-map.js.map +1 -0
- package/dist/build/icon-registry-map.d.ts +34 -0
- package/dist/build/icon-registry-map.d.ts.map +1 -0
- package/dist/build/icon-registry-map.js +44 -0
- package/dist/build/icon-registry-map.js.map +1 -0
- package/dist/build/import-examples.d.ts +14 -0
- package/dist/build/import-examples.d.ts.map +1 -0
- package/dist/build/import-examples.js +65 -0
- package/dist/build/import-examples.js.map +1 -0
- package/dist/build/persona-character-map.d.ts +32 -0
- package/dist/build/persona-character-map.d.ts.map +1 -0
- package/dist/build/persona-character-map.js +90 -0
- package/dist/build/persona-character-map.js.map +1 -0
- package/dist/build/stock-library-map.d.ts +57 -0
- package/dist/build/stock-library-map.d.ts.map +1 -0
- package/dist/build/stock-library-map.js +1261 -0
- package/dist/build/stock-library-map.js.map +1 -0
- package/dist/build/upload-assets.d.ts +20 -0
- package/dist/build/upload-assets.d.ts.map +1 -0
- package/dist/build/upload-assets.js +153 -0
- package/dist/build/upload-assets.js.map +1 -0
- package/dist/build/upload-library-assets.d.ts +21 -0
- package/dist/build/upload-library-assets.d.ts.map +1 -0
- package/dist/build/upload-library-assets.js +182 -0
- package/dist/build/upload-library-assets.js.map +1 -0
- package/dist/build/visual-resolver.d.ts +70 -0
- package/dist/build/visual-resolver.d.ts.map +1 -0
- package/dist/build/visual-resolver.js +375 -0
- package/dist/build/visual-resolver.js.map +1 -0
- package/dist/catalog.json +467 -0
- package/dist/emails/component-buttons-icons.html +435 -0
- package/dist/emails/component-buttons-integration.html +256 -0
- package/dist/emails/component-buttons-primary.html +269 -0
- package/dist/emails/component-buttons-secondary.html +255 -0
- package/dist/emails/component-buttons-two-integrations.html +310 -0
- package/dist/emails/component-images-card-280h.html +281 -0
- package/dist/emails/component-images-card-320h.html +281 -0
- package/dist/emails/component-images-card.html +281 -0
- package/dist/emails/component-images-full-bleed-280h.html +279 -0
- package/dist/emails/component-images-full-bleed-400h.html +279 -0
- package/dist/emails/component-images-full-bleed.html +279 -0
- package/dist/emails/component-text-h1.html +254 -0
- package/dist/emails/component-text-h2.html +230 -0
- package/dist/emails/component-text-h3.html +255 -0
- package/dist/emails/component-text-h4.html +255 -0
- package/dist/emails/component-text-h5.html +254 -0
- package/dist/emails/component-text-p2.html +253 -0
- package/dist/emails/component-text-p3.html +254 -0
- package/dist/emails/component-text-p4.html +254 -0
- package/dist/emails/container.html +250 -0
- package/dist/emails/section-changelog-icon-list.html +1201 -0
- package/dist/emails/section-divider-line.html +340 -0
- package/dist/emails/section-feature-highlight-reversed.html +377 -0
- package/dist/emails/section-feature-highlight.html +384 -0
- package/dist/emails/section-feature-rows.html +328 -0
- package/dist/emails/section-feature-story-row-reversed.html +381 -0
- package/dist/emails/section-feature-story-row.html +382 -0
- package/dist/emails/section-footer-lifecycle.html +650 -0
- package/dist/emails/section-footer-two-column-minimal.html +318 -0
- package/dist/emails/section-footer.html +413 -0
- package/dist/emails/section-header.html +290 -0
- package/dist/emails/section-hero.html +276 -0
- package/dist/emails/section-icon-feature-list.html +554 -0
- package/dist/emails/section-image-caption-block.html +313 -0
- package/dist/emails/section-image-hero.html +341 -0
- package/dist/emails/section-lesson-card.html +628 -0
- package/dist/emails/section-list-action-items.html +590 -0
- package/dist/emails/section-list-feature-items.html +713 -0
- package/dist/emails/section-list-icon-items.html +701 -0
- package/dist/emails/section-list-numbered-items.html +733 -0
- package/dist/emails/section-logo-header.html +288 -0
- package/dist/emails/section-newsletter-hero.html +393 -0
- package/dist/emails/section-product-ui-hero.html +496 -0
- package/dist/emails/section-promo-banner.html +308 -0
- package/dist/emails/section-qa-block.html +440 -0
- package/dist/emails/section-resource-link-list.html +481 -0
- package/dist/emails/section-signoff.html +279 -0
- package/dist/emails/section-single-column-author.html +453 -0
- package/dist/emails/section-single-column-feature-card.html +312 -0
- package/dist/emails/section-single-column-product-card.html +393 -0
- package/dist/emails/section-single-column-promo-card.html +306 -0
- package/dist/emails/section-spacer-fill.html +281 -0
- package/dist/emails/section-testimonial-dark-card.html +363 -0
- package/dist/emails/section-text-h1-regular.html +254 -0
- package/dist/emails/section-text-h2-regular.html +254 -0
- package/dist/emails/section-text-h3-regular.html +254 -0
- package/dist/emails/section-text-h4-regular.html +254 -0
- package/dist/emails/section-text-h5-regular.html +254 -0
- package/dist/emails/section-text-mixed-heading.html +269 -0
- package/dist/emails/section-text-overline-heading.html +281 -0
- package/dist/emails/section-text-p1-bold.html +254 -0
- package/dist/emails/section-text-p1-regular.html +255 -0
- package/dist/emails/section-text-paragraph.html +358 -0
- package/dist/emails/section-text-quote-card.html +269 -0
- package/dist/emails/section-text-quote.html +313 -0
- package/dist/emails/section-text-small-headline.html +279 -0
- package/dist/emails/section-three-column-content-cards.html +499 -0
- package/dist/emails/section-three-column-icon-cards.html +510 -0
- package/dist/emails/section-three-column-image-grid.html +466 -0
- package/dist/emails/section-three-up-icon-benefits.html +464 -0
- package/dist/emails/section-two-column-feature-cards.html +708 -0
- package/dist/emails/section-two-column-grid.html +1131 -0
- package/dist/emails/section-two-column-img-text.html +331 -0
- package/dist/emails/section-two-column-live-tags.html +367 -0
- package/dist/emails/section-two-column-stacked.html +629 -0
- package/dist/emails/section-upsell-cta.html +597 -0
- package/dist/emails/section-value-bullet-list.html +313 -0
- package/dist/examples/manifest.d.ts +21 -0
- package/dist/examples/manifest.d.ts.map +1 -0
- package/dist/examples/manifest.js +84 -0
- package/dist/examples/manifest.js.map +1 -0
- package/dist/exports/contact-sales/Images/Contact_sales_Image_16f4175c-d08c-43f6-9d4c-a0606383271d.png +0 -0
- package/dist/exports/contact-sales/Images/Contact_sales_Image_659b3091-1da9-40c2-86b0-04250982e529.png +0 -0
- package/dist/exports/contact-sales/Images/Contact_sales_Image_79c651f4-5f0f-4a7f-8354-1f6f95ae86d9.png +0 -0
- package/dist/exports/contact-sales/index.braze.html +837 -0
- package/dist/exports/contact-sales/index.html +837 -0
- package/dist/exports/event-confirmation/Images/Confirmation_Image_11938de2-4161-4ae8-8969-90ea0d8b45cb.png +0 -0
- package/dist/exports/event-confirmation/Images/Confirmation_Image_3c52e81f-5d4f-452c-bad1-0471a27598f1.png +0 -0
- package/dist/exports/event-confirmation/Images/Confirmation_Image_3ec1fec8-bf46-4068-8835-633567a715f9.png +0 -0
- package/dist/exports/event-confirmation/Images/Confirmation_Image_c4980c01-c270-4384-a56c-0bae74814cf9.png +0 -0
- package/dist/exports/event-confirmation/Images/Confirmation_Image_cde93e8c-0f96-434d-acaf-1b86503c66f0.png +0 -0
- package/dist/exports/event-confirmation/index.braze.html +1055 -0
- package/dist/exports/event-confirmation/index.html +1055 -0
- package/dist/exports/legal-update/Images/v2_Image_07bbcc13-0ab8-46e4-ab94-98f215f85f69.png +0 -0
- package/dist/exports/legal-update/Images/v2_Image_34394d50-acdf-4375-b254-eef1f84aaacb.png +0 -0
- package/dist/exports/legal-update/Images/v2_Image_4a25f2bd-6270-439b-86c5-4a968a1b104f.png +0 -0
- package/dist/exports/legal-update/Images/v2_Image_7e8e814f-3112-4d8c-af5b-4f4616d84d9c.png +0 -0
- package/dist/exports/legal-update/Images/v2_Image_b24a04c8-4af0-42a1-be0f-cd3f66595e47.png +0 -0
- package/dist/exports/legal-update/Images/v2_Image_b709b9fb-836e-4c20-82e5-a9cb9d702392.png +0 -0
- package/dist/exports/legal-update/Images/v2_Image_ed7b924b-35e6-4536-be0c-92ddc8a34fc2.png +0 -0
- package/dist/exports/legal-update/index.braze.html +1731 -0
- package/dist/exports/legal-update/index.html +1731 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_09be22f6-1f30-4c58-bf33-1df0494b8fc2.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_2dfb595e-6fe2-4e6e-a73a-942a085b38ab.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_544c971b-b4b5-4c89-a25a-8f0d92644009.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_5b6a9576-1c33-40c5-81e3-637514fb6c78.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_680c6193-793a-4a24-8288-4bb4046f4f5e.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_75818ba9-026a-45d7-91e4-f992d4ee7690.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_785f18e6-816d-44d1-8efb-ecc82510b540.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_8bf9141d-9d63-4601-9e81-5c9d726e17f8.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_9097d6e0-65d0-4237-9661-963751812786.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_a4ef2f53-2eaf-438a-bfef-61455ac0915e.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_b7748f87-a7b7-4a91-981a-16567683e4b4.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_bc9830a4-2911-4768-808a-32cbbc39215e.png +0 -0
- package/dist/exports/newsletter/Images/Status_update_-_July_26_Image_ef0e8e92-9075-43a9-991f-09a77ef6d6d4.png +0 -0
- package/dist/exports/newsletter/index.braze.html +125 -0
- package/dist/exports/newsletter/index.html +125 -0
- package/dist/exports/newsletter-ai-june-july/Images/newsletter-ai-blocks.png +0 -0
- package/dist/exports/newsletter-ai-june-july/Images/newsletter-ai-hero-mcp.png +0 -0
- package/dist/exports/newsletter-ai-june-july/Images/newsletter-ai-magic.png +0 -0
- package/dist/exports/newsletter-ai-june-july/Images/newsletter-ai-mcp.png +0 -0
- package/dist/exports/newsletter-ai-june-july/Images/newsletter-ai-portfolio.png +0 -0
- package/dist/exports/newsletter-ai-june-july/index.braze.html +1640 -0
- package/dist/exports/newsletter-ai-june-july/index.html +1640 -0
- package/dist/exports/survey/Images/EmailLove_Image_3b6f4a6f-7f5f-418b-be71-9371b25c20ce.png +0 -0
- package/dist/exports/survey/Images/EmailLove_Image_f659c728-2401-485d-8d90-98c962d28c0c.png +0 -0
- package/dist/exports/survey/index.braze.html +515 -0
- package/dist/exports/survey/index.html +515 -0
- package/dist/exports/trial-01-welcome/Images/tp1_-_welcome_Before_115ccc58-a47f-4eca-a1f2-c0d86e1e1cf4.png +0 -0
- package/dist/exports/trial-01-welcome/Images/tp1_-_welcome_Before_aec4d0d3-6057-4b8a-8d8f-46fbd024f182.png +0 -0
- package/dist/exports/trial-01-welcome/Images/tp1_-_welcome_Before_d139966a-6051-4383-bf8f-1e5138e1b030.png +0 -0
- package/dist/exports/trial-01-welcome/Images/tp1_-_welcome_Image_080fa361-a3f2-4593-9ac0-03cf3a7972ff.png +0 -0
- package/dist/exports/trial-01-welcome/Images/tp1_-_welcome_Image_5ebade34-8f1d-4c2c-9d27-5f9e843ce502.png +0 -0
- package/dist/exports/trial-01-welcome/Images/tp1_-_welcome_Image_aa5e4144-9ec8-4525-b01e-077d72f0bab6.png +0 -0
- package/dist/exports/trial-01-welcome/index.braze.html +941 -0
- package/dist/exports/trial-01-welcome/index.html +941 -0
- package/dist/exports/trial-02/Images/tp2_Image_5b0d9bc4-2e38-4252-8f20-d9f27d471c21.png +0 -0
- package/dist/exports/trial-02/Images/tp2_Image_b3f77c7c-cc8e-4db8-a5d9-072f4f621e72.png +0 -0
- package/dist/exports/trial-02/Images/tp2_Image_cafd1a17-1915-47cd-80f2-1c2d0b133cfe.png +0 -0
- package/dist/exports/trial-02/index.braze.html +923 -0
- package/dist/exports/trial-02/index.html +923 -0
- package/dist/exports/trial-03/Images/tp3_Image_1b96630c-fc4d-4aec-91fb-3c1d4d8544b3.png +0 -0
- package/dist/exports/trial-03/Images/tp3_Image_58f3a342-2193-4b5c-b30a-96f7f3338dd8.png +0 -0
- package/dist/exports/trial-03/Images/tp3_Image_6c4f307a-bac2-40e7-b4f1-9aa623c9eb8e.png +0 -0
- package/dist/exports/trial-03/Images/tp3_Image_848917ce-3f89-4538-a826-558b21f5fea7.png +0 -0
- package/dist/exports/trial-03/Images/tp3_Image_aae8410f-556f-4fb9-88f9-f276d75bafd2.png +0 -0
- package/dist/exports/trial-03/Images/tp3_Image_b4d5be39-509e-4f22-9601-dd070e4c6561.png +0 -0
- package/dist/exports/trial-03/index.braze.html +1129 -0
- package/dist/exports/trial-03/index.html +1129 -0
- package/dist/exports/trial-04/Images/tp4_Image_03bd5a56-25e3-4dcc-bef5-143bf12312d5.png +0 -0
- package/dist/exports/trial-04/Images/tp4_Image_0facbfca-b735-4199-a0d9-05a59341a1e3.gif +0 -0
- package/dist/exports/trial-04/Images/tp4_Image_171cee5f-cd3d-42f0-a180-995893d3742a.png +0 -0
- package/dist/exports/trial-04/Images/tp4_Image_3509d89d-1825-4817-8c1e-130fa294d0e1.png +0 -0
- package/dist/exports/trial-04/Images/tp4_Image_763a0f40-2985-4140-859b-ddd34f20a520.png +0 -0
- package/dist/exports/trial-04/Images/tp4_Image_cc2db4f5-b41d-45d7-a798-7a79e7b8d4d8.png +0 -0
- package/dist/exports/trial-04/index.braze.html +885 -0
- package/dist/exports/trial-04/index.html +885 -0
- package/dist/exports/trial-05/Images/tp5_Image_0248a517-5c60-4e84-ad1c-449dcf4f6a64.png +0 -0
- package/dist/exports/trial-05/Images/tp5_Image_4c1a2d5a-47d3-4801-bb3a-01c22decc108.png +0 -0
- package/dist/exports/trial-05/Images/tp5_Image_63ae77e7-cec7-4b4a-91e0-603b5a80929f.png +0 -0
- package/dist/exports/trial-05/Images/tp5_Image_7aa43530-6707-4308-ab0e-e4c38fc1b77d.png +0 -0
- package/dist/exports/trial-05/Images/tp5_Image_7efe5b6d-b360-4179-bee1-72908ba569bc.png +0 -0
- package/dist/exports/trial-05/Images/tp5_Image_b142bd84-c40a-4a29-b9d5-715b52fdd937.png +0 -0
- package/dist/exports/trial-05/Images/tp5_Image_c0c896ea-5b68-4f58-9e27-cdb4a1f1b438.png +0 -0
- package/dist/exports/trial-05/index.braze.html +1023 -0
- package/dist/exports/trial-05/index.html +1023 -0
- package/dist/exports/trial-06/Images/tp6_Image_2267a268-8a80-4e0d-8813-d4c75dbab6f2.png +0 -0
- package/dist/exports/trial-06/Images/tp6_Image_637a97b7-837e-478d-8ed1-6e8c2739fdc7.png +0 -0
- package/dist/exports/trial-06/Images/tp6_Image_a78df270-ad6f-41e6-8822-ba8ec38313a3.png +0 -0
- package/dist/exports/trial-06/index.braze.html +773 -0
- package/dist/exports/trial-06/index.html +773 -0
- package/dist/exports/winback/Images/_managers_Image_4587ac22-460c-487a-bc37-9dbc487e95a4.png +0 -0
- package/dist/exports/winback/Images/_managers_Image_8a77ec2c-ed49-480d-a1a1-7a38abad232a.png +0 -0
- package/dist/exports/winback/Images/_managers_Image_bb643775-8a2f-4e28-9dfb-6d1838c3561f.png +0 -0
- package/dist/exports/winback/Images/_managers_Image_f7d1bca5-0fcb-4d4c-abcd-40ce2d453b07.png +0 -0
- package/dist/exports/winback/index.braze.html +605 -0
- package/dist/exports/winback/index.html +605 -0
- package/dist/generated/email-tokens.d.ts +101 -0
- package/dist/generated/email-tokens.d.ts.map +1 -0
- package/dist/generated/email-tokens.js +104 -0
- package/dist/generated/email-tokens.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/tokens/build-email-assets.d.ts +19 -0
- package/dist/tokens/build-email-assets.d.ts.map +1 -0
- package/dist/tokens/build-email-assets.js +186 -0
- package/dist/tokens/build-email-assets.js.map +1 -0
- package/dist/tokens/build-email-tokens.d.ts +17 -0
- package/dist/tokens/build-email-tokens.d.ts.map +1 -0
- package/dist/tokens/build-email-tokens.js +229 -0
- package/dist/tokens/build-email-tokens.js.map +1 -0
- package/package.json +41 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock-library-map.js","sourceRoot":"","sources":["../../src/build/stock-library-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudinary asset upload.
|
|
3
|
+
*
|
|
4
|
+
* Scans every email's source .mjml for local, non-shared, raster asset references and uploads
|
|
5
|
+
* each to Cloudinary at `lifecycle/<campaign>/<email>/<filename>` (OPEN-QUESTIONS.md D18),
|
|
6
|
+
* skipping anything already uploaded with unchanged content. Writes a manifest that compile.ts
|
|
7
|
+
* reads to swap those assets' `src` for the hosted URL instead of inlining them as base64 — the
|
|
8
|
+
* root cause of Q15 (base64-inlined images blowing past Gmail's 102KB clip limit).
|
|
9
|
+
*
|
|
10
|
+
* Shared DS asset folders (icons/integrations/logos/placeholders/shared) and any SVG are
|
|
11
|
+
* intentionally skipped — D20 accepts raster-only (PNG/GIF/JPG/JPEG/WEBP) for the hosted path;
|
|
12
|
+
* those stay base64-inlined exactly as before.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* pnpm --filter @clay-design-system/email email:upload
|
|
16
|
+
* pnpm --filter @clay-design-system/email email:upload -- --campaign=sales-agent-activation
|
|
17
|
+
* pnpm --filter @clay-design-system/email email:upload -- --dry-run
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=upload-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-assets.d.ts","sourceRoot":"","sources":["../../src/build/upload-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudinary asset upload.
|
|
3
|
+
*
|
|
4
|
+
* Scans every email's source .mjml for local, non-shared, raster asset references and uploads
|
|
5
|
+
* each to Cloudinary at `lifecycle/<campaign>/<email>/<filename>` (OPEN-QUESTIONS.md D18),
|
|
6
|
+
* skipping anything already uploaded with unchanged content. Writes a manifest that compile.ts
|
|
7
|
+
* reads to swap those assets' `src` for the hosted URL instead of inlining them as base64 — the
|
|
8
|
+
* root cause of Q15 (base64-inlined images blowing past Gmail's 102KB clip limit).
|
|
9
|
+
*
|
|
10
|
+
* Shared DS asset folders (icons/integrations/logos/placeholders/shared) and any SVG are
|
|
11
|
+
* intentionally skipped — D20 accepts raster-only (PNG/GIF/JPG/JPEG/WEBP) for the hosted path;
|
|
12
|
+
* those stay base64-inlined exactly as before.
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* pnpm --filter @clay-design-system/email email:upload
|
|
16
|
+
* pnpm --filter @clay-design-system/email email:upload -- --campaign=sales-agent-activation
|
|
17
|
+
* pnpm --filter @clay-design-system/email email:upload -- --dry-run
|
|
18
|
+
*/
|
|
19
|
+
import { createHash } from 'node:crypto';
|
|
20
|
+
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
21
|
+
import { dirname, resolve } from 'node:path';
|
|
22
|
+
import { v2 as cloudinary } from 'cloudinary';
|
|
23
|
+
import { loadCloudinaryEnv } from './cloudinary-env';
|
|
24
|
+
import { cloudinaryManifestPath, loadCloudinaryManifest, } from './cloudinary-manifest';
|
|
25
|
+
import { assetsDir, walkEmails } from './email-tree';
|
|
26
|
+
const SHARED_ASSET_DIRS = new Set(['icons', 'integrations', 'logos', 'placeholders', 'shared']);
|
|
27
|
+
const RASTER_EXTS = new Set(['png', 'jpg', 'jpeg', 'gif', 'webp']);
|
|
28
|
+
const ASSET_SRC_RE = /src="[^"]*\/assets\/([^"?#]+)"/g;
|
|
29
|
+
const CONCURRENCY = 5;
|
|
30
|
+
const campaignFilterArg = process.argv.find((a) => a.startsWith('--campaign='));
|
|
31
|
+
const campaignFilter = campaignFilterArg ? campaignFilterArg.slice('--campaign='.length) : null;
|
|
32
|
+
const dryRun = process.argv.includes('--dry-run');
|
|
33
|
+
/** Every local, non-shared, raster asset each email references, deduped by target public_id. */
|
|
34
|
+
function collectUploadTasks() {
|
|
35
|
+
const tasks = new Map();
|
|
36
|
+
for (const { campaign, emailSlug, mjmlPath } of walkEmails()) {
|
|
37
|
+
if (campaignFilter && campaign !== campaignFilter)
|
|
38
|
+
continue;
|
|
39
|
+
if (!existsSync(mjmlPath))
|
|
40
|
+
continue;
|
|
41
|
+
const mjmlSource = readFileSync(mjmlPath, 'utf-8');
|
|
42
|
+
for (const match of mjmlSource.matchAll(ASSET_SRC_RE)) {
|
|
43
|
+
const sourcePath = match[1];
|
|
44
|
+
const firstSegment = sourcePath.split('/')[0];
|
|
45
|
+
const ext = (sourcePath.split('.').pop() ?? '').toLowerCase();
|
|
46
|
+
if (SHARED_ASSET_DIRS.has(firstSegment) || !RASTER_EXTS.has(ext))
|
|
47
|
+
continue;
|
|
48
|
+
const filename = sourcePath.split('/').pop();
|
|
49
|
+
if (!filename)
|
|
50
|
+
continue;
|
|
51
|
+
const stem = filename.slice(0, filename.length - ext.length - 1);
|
|
52
|
+
const publicId = `lifecycle/${campaign}/${emailSlug}/${stem}`;
|
|
53
|
+
if (tasks.has(publicId))
|
|
54
|
+
continue;
|
|
55
|
+
tasks.set(publicId, { publicId, absPath: resolve(assetsDir, sourcePath), sourcePath, campaign, email: emailSlug });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return [...tasks.values()];
|
|
59
|
+
}
|
|
60
|
+
function sha256(absPath) {
|
|
61
|
+
return createHash('sha256').update(readFileSync(absPath)).digest('hex').slice(0, 16);
|
|
62
|
+
}
|
|
63
|
+
async function runWithConcurrency(items, limit, fn) {
|
|
64
|
+
let cursor = 0;
|
|
65
|
+
async function worker() {
|
|
66
|
+
while (cursor < items.length) {
|
|
67
|
+
const item = items[cursor++];
|
|
68
|
+
await fn(item);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
|
|
72
|
+
}
|
|
73
|
+
async function main() {
|
|
74
|
+
const tasks = collectUploadTasks();
|
|
75
|
+
if (!tasks.length) {
|
|
76
|
+
console.log('email:upload — no local campaign raster assets found to upload.');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const existingManifest = loadCloudinaryManifest();
|
|
80
|
+
const assets = { ...(existingManifest?.assets ?? {}) };
|
|
81
|
+
let cloudName = existingManifest?.cloudName ?? '';
|
|
82
|
+
if (!dryRun) {
|
|
83
|
+
const env = loadCloudinaryEnv();
|
|
84
|
+
cloudinary.config({ cloud_name: env.cloudName, api_key: env.apiKey, api_secret: env.apiSecret });
|
|
85
|
+
cloudName = env.cloudName;
|
|
86
|
+
}
|
|
87
|
+
let actioned = 0;
|
|
88
|
+
let skipped = 0;
|
|
89
|
+
let failed = 0;
|
|
90
|
+
await runWithConcurrency(tasks, CONCURRENCY, async (task) => {
|
|
91
|
+
if (!existsSync(task.absPath)) {
|
|
92
|
+
console.warn(` ✗ ${task.publicId} — source file missing: ${task.absPath}`);
|
|
93
|
+
failed++;
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const contentHash = sha256(task.absPath);
|
|
97
|
+
const prior = assets[task.publicId];
|
|
98
|
+
if (prior && prior.contentHash === contentHash) {
|
|
99
|
+
skipped++;
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const bytes = statSync(task.absPath).size;
|
|
103
|
+
if (dryRun) {
|
|
104
|
+
console.log(` would upload: ${task.publicId} (${(bytes / 1024).toFixed(0)} KB)`);
|
|
105
|
+
actioned++;
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const result = await cloudinary.uploader.upload(task.absPath, {
|
|
110
|
+
public_id: task.publicId,
|
|
111
|
+
overwrite: true,
|
|
112
|
+
invalidate: true,
|
|
113
|
+
unique_filename: false,
|
|
114
|
+
resource_type: 'image',
|
|
115
|
+
});
|
|
116
|
+
assets[task.publicId] = {
|
|
117
|
+
sourcePath: task.sourcePath,
|
|
118
|
+
campaign: task.campaign,
|
|
119
|
+
email: task.email,
|
|
120
|
+
url: result.secure_url,
|
|
121
|
+
bytes,
|
|
122
|
+
contentHash,
|
|
123
|
+
uploadedAt: new Date().toISOString(),
|
|
124
|
+
};
|
|
125
|
+
actioned++;
|
|
126
|
+
console.log(` ✓ ${task.publicId} → ${result.secure_url}`);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
failed++;
|
|
130
|
+
console.error(` ✗ ${task.publicId} — ${err.message}`);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
if (!dryRun) {
|
|
134
|
+
const manifest = {
|
|
135
|
+
generatedFrom: '@clay-design-system/email src/build/upload-assets.ts',
|
|
136
|
+
cloudName,
|
|
137
|
+
assets,
|
|
138
|
+
};
|
|
139
|
+
mkdirSync(dirname(cloudinaryManifestPath), { recursive: true });
|
|
140
|
+
writeFileSync(cloudinaryManifestPath, JSON.stringify(manifest, null, 2));
|
|
141
|
+
console.log(`\nManifest written → ${cloudinaryManifestPath}`);
|
|
142
|
+
}
|
|
143
|
+
const actionLabel = dryRun ? 'would upload' : 'uploaded';
|
|
144
|
+
console.log(`\nemail:upload — ${actioned} ${actionLabel}, ${skipped} unchanged (skipped), ${failed} failed` +
|
|
145
|
+
(dryRun ? ' [dry run — nothing sent to Cloudinary]' : ''));
|
|
146
|
+
if (failed > 0)
|
|
147
|
+
process.exitCode = 1;
|
|
148
|
+
}
|
|
149
|
+
main().catch((err) => {
|
|
150
|
+
console.error(err.message);
|
|
151
|
+
process.exit(1);
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=upload-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-assets.js","sourceRoot":"","sources":["../../src/build/upload-assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stock-library asset upload (D5.4, board item Clay Lifecycle D5).
|
|
3
|
+
*
|
|
4
|
+
* One-time bulk push of the email asset-catalog bank (packages/email/src/assets/
|
|
5
|
+
* _stock-library-staging/, sourced from CatalogTest.csv's Email-channel rows) to Cloudinary,
|
|
6
|
+
* under a dedicated `lifecycle/library/email-assets/<slug>` folder — a sibling to
|
|
7
|
+
* `lifecycle/<campaign>/...` (upload-assets.ts's per-campaign uploads) and deliberately not
|
|
8
|
+
* `asset-catalog/...` (the separate Asset Catalog system's own Cloudinary convention, see
|
|
9
|
+
* SCHEMA.md), since this is a new copy for our stock-library use case, not the same records.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent (content-hash check, like upload-assets.ts) — safe to re-run after adding more rows
|
|
12
|
+
* to the staging CSV. Writes the resulting secure_url back into `cloudinary_url` on both the
|
|
13
|
+
* staging CSV (packages/email/src/assets/_stock-library-staging/email-assets-catalog.csv) and,
|
|
14
|
+
* as a courtesy, the external copy at EMAILS_ASSETS_EXTERNAL_CSV below.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* pnpm --filter @clay-design-system/email library:upload -- --dry-run
|
|
18
|
+
* pnpm --filter @clay-design-system/email library:upload
|
|
19
|
+
*/
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=upload-library-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-library-assets.d.ts","sourceRoot":"","sources":["../../src/build/upload-library-assets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stock-library asset upload (D5.4, board item Clay Lifecycle D5).
|
|
3
|
+
*
|
|
4
|
+
* One-time bulk push of the email asset-catalog bank (packages/email/src/assets/
|
|
5
|
+
* _stock-library-staging/, sourced from CatalogTest.csv's Email-channel rows) to Cloudinary,
|
|
6
|
+
* under a dedicated `lifecycle/library/email-assets/<slug>` folder — a sibling to
|
|
7
|
+
* `lifecycle/<campaign>/...` (upload-assets.ts's per-campaign uploads) and deliberately not
|
|
8
|
+
* `asset-catalog/...` (the separate Asset Catalog system's own Cloudinary convention, see
|
|
9
|
+
* SCHEMA.md), since this is a new copy for our stock-library use case, not the same records.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent (content-hash check, like upload-assets.ts) — safe to re-run after adding more rows
|
|
12
|
+
* to the staging CSV. Writes the resulting secure_url back into `cloudinary_url` on both the
|
|
13
|
+
* staging CSV (packages/email/src/assets/_stock-library-staging/email-assets-catalog.csv) and,
|
|
14
|
+
* as a courtesy, the external copy at EMAILS_ASSETS_EXTERNAL_CSV below.
|
|
15
|
+
*
|
|
16
|
+
* Usage:
|
|
17
|
+
* pnpm --filter @clay-design-system/email library:upload -- --dry-run
|
|
18
|
+
* pnpm --filter @clay-design-system/email library:upload
|
|
19
|
+
*/
|
|
20
|
+
import { createHash } from 'node:crypto';
|
|
21
|
+
import { existsSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
22
|
+
import { dirname, resolve } from 'node:path';
|
|
23
|
+
import { fileURLToPath } from 'node:url';
|
|
24
|
+
import { v2 as cloudinary } from 'cloudinary';
|
|
25
|
+
import { loadCloudinaryEnv } from './cloudinary-env';
|
|
26
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
27
|
+
const pkgDir = resolve(__dirname, '..', '..');
|
|
28
|
+
const STAGING_DIR = resolve(pkgDir, 'src/assets/_stock-library-staging');
|
|
29
|
+
const STAGING_CSV = resolve(STAGING_DIR, 'email-assets-catalog.csv');
|
|
30
|
+
// Courtesy mirror only — not one of the protected originals (CatalogTest.csv/chips_seed.sql/
|
|
31
|
+
// SCHEMA.md, or the raw PNGs); we created this file ourselves in the prior step.
|
|
32
|
+
const EXTERNAL_CSV = '/Users/eliorsi/Development/emails assets/email-assets-catalog.csv';
|
|
33
|
+
const FOLDER = 'lifecycle/library/email-assets';
|
|
34
|
+
const CONCURRENCY = 5;
|
|
35
|
+
const dryRun = process.argv.includes('--dry-run');
|
|
36
|
+
const limitArg = process.argv.find((a) => a.startsWith('--limit='));
|
|
37
|
+
const limit = limitArg ? Number(limitArg.slice('--limit='.length)) : undefined;
|
|
38
|
+
const CSV_FIELDS = [
|
|
39
|
+
'id', 'name', 'description', 'tag_form', 'tag_context', 'use_case_domain',
|
|
40
|
+
'width', 'height', 'ratio', 'figma_source', 'local_file', 'cloudinary_url',
|
|
41
|
+
];
|
|
42
|
+
/** Minimal RFC 4180 parser — handles quoted fields with embedded commas/newlines (SCHEMA.md trap #1). */
|
|
43
|
+
function parseCsv(text) {
|
|
44
|
+
const rows = [];
|
|
45
|
+
let field = '';
|
|
46
|
+
let row = [];
|
|
47
|
+
let inQuotes = false;
|
|
48
|
+
for (let i = 0; i < text.length; i++) {
|
|
49
|
+
const c = text[i];
|
|
50
|
+
if (inQuotes) {
|
|
51
|
+
if (c === '"') {
|
|
52
|
+
if (text[i + 1] === '"') {
|
|
53
|
+
field += '"';
|
|
54
|
+
i++;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
inQuotes = false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
field += c;
|
|
62
|
+
}
|
|
63
|
+
else if (c === '"')
|
|
64
|
+
inQuotes = true;
|
|
65
|
+
else if (c === ',') {
|
|
66
|
+
row.push(field);
|
|
67
|
+
field = '';
|
|
68
|
+
}
|
|
69
|
+
else if (c === '\n') {
|
|
70
|
+
row.push(field);
|
|
71
|
+
rows.push(row);
|
|
72
|
+
row = [];
|
|
73
|
+
field = '';
|
|
74
|
+
}
|
|
75
|
+
else if (c === '\r') { /* skip */ }
|
|
76
|
+
else
|
|
77
|
+
field += c;
|
|
78
|
+
}
|
|
79
|
+
if (field.length || row.length) {
|
|
80
|
+
row.push(field);
|
|
81
|
+
rows.push(row);
|
|
82
|
+
}
|
|
83
|
+
const [header, ...body] = rows.filter((r) => r.length > 1 || r[0] !== '');
|
|
84
|
+
return body.map((r) => Object.fromEntries(header.map((h, idx) => [h, r[idx] ?? ''])));
|
|
85
|
+
}
|
|
86
|
+
function toCsv(rows) {
|
|
87
|
+
const escape = (v) => (/[",\n]/.test(v) ? `"${v.replace(/"/g, '""')}"` : v);
|
|
88
|
+
const lines = [CSV_FIELDS.join(',')];
|
|
89
|
+
for (const r of rows)
|
|
90
|
+
lines.push(CSV_FIELDS.map((f) => escape(r[f] ?? '')).join(','));
|
|
91
|
+
return lines.join('\n') + '\n';
|
|
92
|
+
}
|
|
93
|
+
/** tag_form/tag_context/use_case_domain, lowercased and space-hyphenated, deduped, non-empty. */
|
|
94
|
+
function buildTags(r) {
|
|
95
|
+
const raw = [r.tag_form, r.tag_context, r.use_case_domain];
|
|
96
|
+
const tags = raw.filter(Boolean).map((t) => t.trim().toLowerCase().replace(/\s+/g, '-'));
|
|
97
|
+
return [...new Set(tags)];
|
|
98
|
+
}
|
|
99
|
+
function sha256(absPath) {
|
|
100
|
+
return createHash('sha256').update(readFileSync(absPath)).digest('hex').slice(0, 16);
|
|
101
|
+
}
|
|
102
|
+
async function runWithConcurrency(items, limit, fn) {
|
|
103
|
+
let cursor = 0;
|
|
104
|
+
async function worker() {
|
|
105
|
+
while (cursor < items.length) {
|
|
106
|
+
const item = items[cursor++];
|
|
107
|
+
await fn(item);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));
|
|
111
|
+
}
|
|
112
|
+
async function main() {
|
|
113
|
+
if (!existsSync(STAGING_CSV)) {
|
|
114
|
+
console.error(`Staging CSV not found: ${STAGING_CSV}`);
|
|
115
|
+
process.exitCode = 1;
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const rows = parseCsv(readFileSync(STAGING_CSV, 'utf-8'));
|
|
119
|
+
console.log(`Loaded ${rows.length} rows from ${STAGING_CSV}\n`);
|
|
120
|
+
if (!dryRun) {
|
|
121
|
+
const env = loadCloudinaryEnv();
|
|
122
|
+
cloudinary.config({ cloud_name: env.cloudName, api_key: env.apiKey, api_secret: env.apiSecret });
|
|
123
|
+
}
|
|
124
|
+
let uploaded = 0;
|
|
125
|
+
let skipped = 0;
|
|
126
|
+
let failed = 0;
|
|
127
|
+
const uploadSet = limit ? rows.slice(0, limit) : rows;
|
|
128
|
+
if (limit)
|
|
129
|
+
console.log(`--limit=${limit}: uploading only the first ${uploadSet.length} of ${rows.length} rows\n`);
|
|
130
|
+
await runWithConcurrency(uploadSet, CONCURRENCY, async (row) => {
|
|
131
|
+
const slug = row.id.split('/', 2)[1];
|
|
132
|
+
const absPath = resolve(STAGING_DIR, row.local_file);
|
|
133
|
+
if (!existsSync(absPath)) {
|
|
134
|
+
console.warn(` ✗ ${slug} — local file missing: ${absPath}`);
|
|
135
|
+
failed++;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const publicId = `${FOLDER}/${slug}`;
|
|
139
|
+
const contentHash = sha256(absPath);
|
|
140
|
+
const bytes = statSync(absPath).size;
|
|
141
|
+
if (dryRun) {
|
|
142
|
+
console.log(` would upload: ${publicId} (${(bytes / 1024).toFixed(0)} KB) tags=[${buildTags(row).join(', ')}]`);
|
|
143
|
+
uploaded++;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
const result = await cloudinary.uploader.upload(absPath, {
|
|
148
|
+
public_id: publicId,
|
|
149
|
+
overwrite: true,
|
|
150
|
+
invalidate: true,
|
|
151
|
+
unique_filename: false,
|
|
152
|
+
resource_type: 'image',
|
|
153
|
+
tags: buildTags(row),
|
|
154
|
+
context: { source: 'asset-catalog', figma_source: row.figma_source, content_hash: contentHash },
|
|
155
|
+
});
|
|
156
|
+
row.cloudinary_url = result.secure_url;
|
|
157
|
+
uploaded++;
|
|
158
|
+
console.log(` ✓ ${publicId} → ${result.secure_url}`);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
failed++;
|
|
162
|
+
console.error(` ✗ ${publicId} — ${err.message}`);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
if (!dryRun) {
|
|
166
|
+
writeFileSync(STAGING_CSV, toCsv(rows));
|
|
167
|
+
console.log(`\nUpdated ${STAGING_CSV}`);
|
|
168
|
+
if (existsSync(EXTERNAL_CSV)) {
|
|
169
|
+
writeFileSync(EXTERNAL_CSV, toCsv(rows));
|
|
170
|
+
console.log(`Updated ${EXTERNAL_CSV}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const label = dryRun ? 'would upload' : 'uploaded';
|
|
174
|
+
console.log(`\nlibrary:upload — ${uploaded} ${label}, ${skipped} unchanged, ${failed} failed` + (dryRun ? ' [dry run — nothing sent to Cloudinary]' : ''));
|
|
175
|
+
if (failed > 0)
|
|
176
|
+
process.exitCode = 1;
|
|
177
|
+
}
|
|
178
|
+
main().catch((err) => {
|
|
179
|
+
console.error(err.message);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=upload-library-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload-library-assets.js","sourceRoot":"","sources":["../../src/build/upload-library-assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Visual-brief resolver (PLAN.md Phase 3; BRIEF-HANDOVER.md §3; OPEN-QUESTIONS.md D6/D8/D21).
|
|
3
|
+
*
|
|
4
|
+
* Takes the 4-field per-slot visual brief (slot / intent / source / assetRef) and resolves each
|
|
5
|
+
* slot to exactly one of three outcomes, per the priority order already documented in
|
|
6
|
+
* skills/email-assets/SKILL.md Process step 2 — this module executes those already-decided rules
|
|
7
|
+
* in code instead of leaving them as prose a human has to walk by hand:
|
|
8
|
+
*
|
|
9
|
+
* - 'resolved' — a real asset: AgentVisual (tier 1, mandatory for a standalone agent
|
|
10
|
+
* portrait), a shared logo or local campaign asset (tier 3), a hosted match
|
|
11
|
+
* from the Cloudinary stock library (tier 5 — D5.6, board item Clay
|
|
12
|
+
* Lifecycle D5; product-ui/abstract only, see that branch below for why not
|
|
13
|
+
* logo), or a match against the ~600-icon Clay registry (tier 6 — D6, board
|
|
14
|
+
* item Clay Lifecycle D6; `icon` source only).
|
|
15
|
+
* - 'placeholder' — a LEGITIMATE gap: a composite agent+UI scene (tier 2 — no dedicated
|
|
16
|
+
* library yet, see knowledge/hero-pipeline.md) or anything else tier 3/5/6
|
|
17
|
+
* didn't find (tier 4).
|
|
18
|
+
* - 'gap' — NOT legitimate: a standalone agent portrait naming an agent the repo's
|
|
19
|
+
* AgentVisual library doesn't have, or a must-use:<file> the brief names
|
|
20
|
+
* that doesn't actually exist anywhere. email-assets/SKILL.md is explicit
|
|
21
|
+
* that a placeholder is never an acceptable substitute for either of these —
|
|
22
|
+
* they need a human decision, not a silent swap.
|
|
23
|
+
*
|
|
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".
|
|
26
|
+
*
|
|
27
|
+
* Usage: tsx src/build/visual-resolver.ts --brief=<path-to-visual-brief.json>
|
|
28
|
+
*/
|
|
29
|
+
import type { SlotShape } from './asset-scoring';
|
|
30
|
+
export type VisualSource = 'agent-portrait' | 'product-ui' | 'logo' | 'abstract' | 'icon' | string;
|
|
31
|
+
export interface VisualSlotSpec {
|
|
32
|
+
/** e.g. "product-ui-hero → Image" — ties the slot to a real section field (BRIEF-HANDOVER §3). */
|
|
33
|
+
slot: string;
|
|
34
|
+
/** Free text: what the image shows. */
|
|
35
|
+
intent: string;
|
|
36
|
+
source: VisualSource;
|
|
37
|
+
/** Exact library key when the brief knows it, e.g. "agentImageMap: outbound-prospector". */
|
|
38
|
+
assetRef?: string;
|
|
39
|
+
}
|
|
40
|
+
export type VisualResolutionStatus = 'resolved' | 'placeholder' | 'gap';
|
|
41
|
+
export interface VisualResolution {
|
|
42
|
+
slot: string;
|
|
43
|
+
status: VisualResolutionStatus;
|
|
44
|
+
tier: 1 | 2 | 3 | 4 | 5 | 6;
|
|
45
|
+
/** Always present — why this outcome, so a reviewer never has to guess. */
|
|
46
|
+
detail: string;
|
|
47
|
+
/**
|
|
48
|
+
* status === 'resolved'. A local disk path for tiers 1/3 (still needs upload-assets.ts before
|
|
49
|
+
* it's usable in a sent email), or an already-hosted https:// Cloudinary URL for tier 5 (the
|
|
50
|
+
* stock library — no further upload step needed, use it in the HTML as-is).
|
|
51
|
+
*/
|
|
52
|
+
assetPath?: string;
|
|
53
|
+
/** status === 'placeholder' */
|
|
54
|
+
placeholderSvg?: string;
|
|
55
|
+
placeholderComment?: string;
|
|
56
|
+
/** status === 'gap' */
|
|
57
|
+
gapReason?: string;
|
|
58
|
+
}
|
|
59
|
+
export type { SlotShape };
|
|
60
|
+
/**
|
|
61
|
+
* A slot's rough layout shape — derived automatically from the slot spec, never hand-authored in
|
|
62
|
+
* a brief. `slot` is formatted "<section/touchpoint> → <field label>" (e.g. "product-ui-hero →
|
|
63
|
+
* Image", "tp1a-library → hero image"), so a keyword search over it catches both a literal
|
|
64
|
+
* section-component name and a free-text touchpoint field label. Passed to findStockLibraryEntry
|
|
65
|
+
* as a stage-2 tie-breaker only (see stock-library-map.ts) — it never gates a match on its own.
|
|
66
|
+
*/
|
|
67
|
+
export declare function deriveSlotShape(spec: VisualSlotSpec): SlotShape;
|
|
68
|
+
/** Resolve one visual-brief slot. `campaign` scopes tier-3 local-folder lookups. */
|
|
69
|
+
export declare function resolveVisualSlot(spec: VisualSlotSpec, campaign: string): VisualResolution;
|
|
70
|
+
//# sourceMappingURL=visual-resolver.d.ts.map
|
|
@@ -0,0 +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"}
|