@syntrologie/adapt-product 2.34.0 → 2.36.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 (34) hide show
  1. package/dist/cdn.js +2 -2
  2. package/dist/{chunk-NH3CFDTZ.js → chunk-SLHBNATX.js} +1130 -483
  3. package/dist/chunk-SLHBNATX.js.map +7 -0
  4. package/dist/{chunk-FAKCB3BS.js → chunk-Y2QAYCSK.js} +72 -30
  5. package/dist/chunk-Y2QAYCSK.js.map +7 -0
  6. package/dist/native/nativeSlotWatcher.d.ts.map +1 -1
  7. package/dist/runtime.d.ts +12 -10
  8. package/dist/runtime.d.ts.map +1 -1
  9. package/dist/runtime.js +6 -2
  10. package/dist/schema-primitives.d.ts +4 -4
  11. package/dist/schema.d.ts +148 -58
  12. package/dist/schema.d.ts.map +1 -1
  13. package/dist/schema.js +9 -1
  14. package/dist/takeover/engine.d.ts +45 -0
  15. package/dist/takeover/engine.d.ts.map +1 -0
  16. package/dist/takeover/fetchPlan.d.ts +61 -0
  17. package/dist/takeover/fetchPlan.d.ts.map +1 -0
  18. package/dist/takeover/ports.d.ts +29 -0
  19. package/dist/takeover/ports.d.ts.map +1 -0
  20. package/dist/takeover/regionCurtain.d.ts +17 -0
  21. package/dist/takeover/regionCurtain.d.ts.map +1 -0
  22. package/dist/takeover/renderModules.d.ts +48 -0
  23. package/dist/takeover/renderModules.d.ts.map +1 -0
  24. package/dist/takeover/resurrectionGuard.d.ts +28 -0
  25. package/dist/takeover/resurrectionGuard.d.ts.map +1 -0
  26. package/dist/takeover/schema.d.ts +171 -0
  27. package/dist/takeover/schema.d.ts.map +1 -0
  28. package/dist/takeover/sectionDetach.d.ts +13 -0
  29. package/dist/takeover/sectionDetach.d.ts.map +1 -0
  30. package/dist/widgets/SyntroPdpLit.d.ts +69 -0
  31. package/dist/widgets/SyntroPdpLit.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/dist/chunk-FAKCB3BS.js.map +0 -7
  34. package/dist/chunk-NH3CFDTZ.js.map +0 -7
@@ -8,7 +8,7 @@ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "
8
8
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
9
 
10
10
  // src/schema.ts
11
- import { z as z2 } from "zod";
11
+ import { z as z3 } from "zod";
12
12
 
13
13
  // src/schema-primitives.ts
14
14
  import { z } from "zod";
@@ -166,6 +166,39 @@ var productSchema = z.object({
166
166
  }).optional()
167
167
  }).strict();
168
168
 
169
+ // src/takeover/schema.ts
170
+ import { z as z2 } from "zod";
171
+ var takeoverHostSectionSchema = z2.object({
172
+ id: z2.string().min(1),
173
+ anchor: z2.string().min(1),
174
+ role: z2.string().min(1)
175
+ }).strict();
176
+ var takeoverPlanSchema = z2.object({
177
+ order: z2.array(z2.string().min(1)).min(1),
178
+ suppress: z2.array(z2.string().min(1))
179
+ }).strict();
180
+ var pdpTakeoverSchema = z2.object({
181
+ boundaryAnchor: z2.string().min(1),
182
+ // Bounds mirror the server's TakeoverPlanRequest (extra=forbid, 422):
183
+ // a config violating them would silently fail-open on EVERY page load
184
+ // with nothing but a telemetry event — catch it at authoring time.
185
+ hostSections: z2.array(takeoverHostSectionSchema).max(100).refine((sections) => new Set(sections.map((s) => s.id)).size === sections.length, {
186
+ message: "host section ids must be unique"
187
+ }),
188
+ ingestSnapshot: z2.string().min(1).max(100),
189
+ // How long the takeover may hold the curtain waiting for the plan (ms).
190
+ // Also sent to the server as budget_ms: within it the server may classify
191
+ // INLINE (first view personalized); default 500 keeps the original UX
192
+ // budget. Healthmaxxer demo: 2000.
193
+ commitTimeoutMs: z2.number().int().min(100).max(1e4).optional()
194
+ }).strict();
195
+ var syntroPdpPropsSchema = z2.object({
196
+ productId: z2.string().min(1),
197
+ productName: z2.string().min(1),
198
+ productBlurb: z2.string().optional(),
199
+ takeover: pdpTakeoverSchema.optional()
200
+ }).strict();
201
+
169
202
  // src/platformAdapter.ts
170
203
  var ADAPTER_KEY = "__SYNTRO_PRODUCT_ADAPTER__";
171
204
  function getProductPlatformAdapter() {
@@ -183,9 +216,9 @@ var VISIBLE_FACT_KEYS = [
183
216
  "specs",
184
217
  "framing"
185
218
  ];
186
- var cardSchema = z2.object({
219
+ var cardSchema = z3.object({
187
220
  product: productSchema,
188
- density: z2.enum(["compact", "standard"]).default("standard"),
221
+ density: z3.enum(["compact", "standard"]).default("standard"),
189
222
  /**
190
223
  * LLM-curated subset of facts to render, in author order. When omitted,
191
224
  * the card renders every populated block. When set, only listed keys
@@ -193,7 +226,7 @@ var cardSchema = z2.object({
193
226
  * order — `["rating", "price"]` and `["price", "rating"]` produce
194
227
  * different layouts.
195
228
  */
196
- visibleFacts: z2.array(z2.enum(VISIBLE_FACT_KEYS)).max(VISIBLE_FACT_KEYS.length).optional()
229
+ visibleFacts: z3.array(z3.enum(VISIBLE_FACT_KEYS)).max(VISIBLE_FACT_KEYS.length).optional()
197
230
  // NOTE: variant presence is NOT a config/LLM field. Whether a product has
198
231
  // selectable SKUs is a CATALOG fact, resolved at render from the platform
199
232
  // adapter's fetchVariants (host API for real tenants, seed data for the
@@ -202,47 +235,47 @@ var cardSchema = z2.object({
202
235
  // flag drifts from the catalog and can't be known by the LLM, so it was
203
236
  // removed (BUG-1783100102 follow-up).
204
237
  });
205
- var comparisonRowSchema = z2.object({
206
- label: z2.string(),
238
+ var comparisonRowSchema = z3.object({
239
+ label: z3.string(),
207
240
  // Schema floor (mainpeptides filler-cell incident): a row's first two cells
208
241
  // are always visitor-facing (a comparison mounts ≥2 products) — an empty
209
242
  // cell is a "we don't know" in a tile that exists to answer exactly that
210
243
  // question. Whitespace-only cells are caught at render (ProductComparisonLit
211
244
  // drops the row); the server-side filler gate rejects placeholder prose.
212
- valueA: z2.string().min(1),
213
- valueB: z2.string().min(1),
214
- valueC: z2.string().optional(),
215
- valueD: z2.string().optional()
245
+ valueA: z3.string().min(1),
246
+ valueB: z3.string().min(1),
247
+ valueC: z3.string().optional(),
248
+ valueD: z3.string().optional()
216
249
  });
217
- var comparisonSchema = z2.object({
218
- products: z2.array(productSchema).min(2).max(4),
250
+ var comparisonSchema = z3.object({
251
+ products: z3.array(productSchema).min(2).max(4),
219
252
  // The comparison ALWAYS renders as a side-by-side matrix (products = columns,
220
253
  // rows = dimensions) — that's the whole point of a comparison. When the
221
254
  // assistant authors `rows`, those are used verbatim; when omitted, the widget
222
255
  // synthesizes rows from each product's `attributes`. There is deliberately NO
223
256
  // layout toggle: the LLM can't choose a stacked/accordion presentation.
224
- rows: z2.array(comparisonRowSchema).optional(),
225
- heading: z2.string().optional()
257
+ rows: z3.array(comparisonRowSchema).optional(),
258
+ heading: z3.string().optional()
226
259
  });
227
- var heroSchema = z2.object({
260
+ var heroSchema = z3.object({
228
261
  product: productSchema,
229
- layout: z2.enum(["image-left", "image-right", "image-top"]).default("image-left"),
230
- longCopy: z2.string().max(800).optional()
262
+ layout: z3.enum(["image-left", "image-right", "image-top"]).default("image-left"),
263
+ longCopy: z3.string().max(800).optional()
231
264
  });
232
- var gridSchema = z2.object({
233
- products: z2.array(productSchema).min(2).max(12),
234
- desktopColumns: z2.union([z2.literal(2), z2.literal(3)]).default(3),
235
- heading: z2.string().optional()
265
+ var gridSchema = z3.object({
266
+ products: z3.array(productSchema).min(2).max(12),
267
+ desktopColumns: z3.union([z3.literal(2), z3.literal(3)]).default(3),
268
+ heading: z3.string().optional()
236
269
  });
237
270
  var SAFE_HREF = /^(https?:\/\/|\/|\.\/|\.\.\/|#|\?|mailto:|tel:)/i;
238
- var recoItemSchema = z2.object({
239
- image_url: z2.string().nullish(),
240
- price: z2.string().nullish(),
241
- hook: z2.string().max(40).nullish(),
242
- pdp_href: z2.string().regex(SAFE_HREF, "pdp_href must be a safe path/URL")
271
+ var recoItemSchema = z3.object({
272
+ image_url: z3.string().nullish(),
273
+ price: z3.string().nullish(),
274
+ hook: z3.string().max(40).nullish(),
275
+ pdp_href: z3.string().regex(SAFE_HREF, "pdp_href must be a safe path/URL")
243
276
  });
244
- var recoSchema = z2.object({
245
- items: z2.array(recoItemSchema).max(12).default([])
277
+ var recoSchema = z3.object({
278
+ items: z3.array(recoItemSchema).max(12).default([])
246
279
  });
247
280
  var tileWidgets = [
248
281
  { widget: "adaptive-product:card", defName: "productCardProps", propsSchema: cardSchema },
@@ -253,7 +286,8 @@ var tileWidgets = [
253
286
  },
254
287
  { widget: "adaptive-product:hero", defName: "productHeroProps", propsSchema: heroSchema },
255
288
  { widget: "adaptive-product:grid", defName: "productGridProps", propsSchema: gridSchema },
256
- { widget: "adaptive-product:reco", defName: "productRecoProps", propsSchema: recoSchema }
289
+ { widget: "adaptive-product:reco", defName: "productRecoProps", propsSchema: recoSchema },
290
+ { widget: "adaptive-product:pdp", defName: "syntroPdpProps", propsSchema: syntroPdpPropsSchema }
257
291
  ];
258
292
  var CAPABILITIES_DOCUMENTATION = {
259
293
  packageId: "adaptive-product",
@@ -279,6 +313,10 @@ var CAPABILITIES_DOCUMENTATION = {
279
313
  {
280
314
  goal: "Show recommended next products or actions",
281
315
  action: 'Add a tile with widget: "adaptive-product:reco" and provide up to 12 recommendation items with safe pdp_href values.'
316
+ },
317
+ {
318
+ goal: "Take over the PDP below the buy box with per-visitor section ordering",
319
+ action: 'Mount widget: "adaptive-product:pdp" at the boundary anchor (core:mountWidget, inline slot) and provide the takeover prop: page anatomy only \u2014 host section anchors + boundary anchor. Section ordering/suppression plans are resolved server-side per visitor archetype (never authored in config). Rollout and kill happen at config delivery: the GrowthBook flag that serves this config variant is the gate \u2014 there is no separate runtime flag. Fails open to the native page.'
282
320
  }
283
321
  ],
284
322
  conventions: [
@@ -307,6 +345,10 @@ export {
307
345
  __privateAdd,
308
346
  __privateSet,
309
347
  __privateMethod,
348
+ takeoverHostSectionSchema,
349
+ takeoverPlanSchema,
350
+ pdpTakeoverSchema,
351
+ syntroPdpPropsSchema,
310
352
  getProductPlatformAdapter,
311
353
  productSchema,
312
354
  VISIBLE_FACT_KEYS,
@@ -320,4 +362,4 @@ export {
320
362
  tileWidgets,
321
363
  CAPABILITIES_DOCUMENTATION
322
364
  };
323
- //# sourceMappingURL=chunk-FAKCB3BS.js.map
365
+ //# sourceMappingURL=chunk-Y2QAYCSK.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/schema.ts", "../src/schema-primitives.ts", "../src/takeover/schema.ts", "../src/platformAdapter.ts"],
4
+ "sourcesContent": ["import { z } from 'zod';\nimport { productSchema } from './schema-primitives';\nimport { type PdpTakeoverConfig, syntroPdpPropsSchema } from './takeover/schema';\n\nexport {\n type PdpTakeoverConfig,\n pdpTakeoverSchema,\n type SyntroPdpZodProps,\n syntroPdpPropsSchema,\n type TakeoverHostSection,\n type TakeoverPlan,\n type TakeoverPlanResponse,\n takeoverHostSectionSchema,\n takeoverPlanSchema,\n} from './takeover/schema';\n\n// Top-level schemas use Zod's default `.strip()` mode so the runtime-injected\n// fields ``chromeless`` and ``instanceId`` that SyntroTileCard adds to every\n// widget mount don't fail validation. The inner ``productSchema`` remains\n// strict \u2014 that's the actual product contract, and unknown fields there\n// would signal author error rather than runtime envelope leakage.\n// Keys the LLM may include in `visibleFacts` to curate which baked facts\n// render on a card. `name` / `image` / `ctas` are identity + PDP CTA and\n// always show \u2014 they're not toggleable. Omitting `visibleFacts` renders\n// every populated block (back-compat for configs that never opted in).\nexport const VISIBLE_FACT_KEYS = [\n 'tagline',\n 'price',\n 'rating',\n 'availability',\n 'badge',\n 'specs',\n 'framing',\n] as const;\n\nexport type VisibleFactKey = (typeof VISIBLE_FACT_KEYS)[number];\n\nexport const cardSchema = z.object({\n product: productSchema,\n density: z.enum(['compact', 'standard']).default('standard'),\n /**\n * LLM-curated subset of facts to render, in author order. When omitted,\n * the card renders every populated block. When set, only listed keys\n * render (plus the always-shown identity + CTAs). List order = render\n * order \u2014 `[\"rating\", \"price\"]` and `[\"price\", \"rating\"]` produce\n * different layouts.\n */\n visibleFacts: z.array(z.enum(VISIBLE_FACT_KEYS)).max(VISIBLE_FACT_KEYS.length).optional(),\n // NOTE: variant presence is NOT a config/LLM field. Whether a product has\n // selectable SKUs is a CATALOG fact, resolved at render from the platform\n // adapter's fetchVariants (host API for real tenants, seed data for the\n // demo). The card derives its Add-to-cart behavior from that fetched payload\n // \u2014 see ProductCardLit `#hasSelectableVariants`. A stored `has_variants`\n // flag drifts from the catalog and can't be known by the LLM, so it was\n // removed (BUG-1783100102 follow-up).\n});\n\n/**\n * One comparison dimension, rendered as a matrix row. `valueA`..`valueD` are the\n * cells for `products[0]`..`products[3]` (a row need only fill as many as there\n * are products; missing cells render as \"\u2014\"). Flat scalar columns \u2014 NOT a nested\n * array \u2014 so the whole row is authorable as one `struct_list` item by the\n * assistant. This is the LLM-authorable shape of a comparison: a flat list of\n * rows the assistant fills to answer the visitor's actual question, aligned by\n * construction (each row carries every product's value), unlike per-product\n * attribute lists which drift out of sync.\n */\nexport const comparisonRowSchema = z.object({\n label: z.string(),\n // Schema floor (mainpeptides filler-cell incident): a row's first two cells\n // are always visitor-facing (a comparison mounts \u22652 products) \u2014 an empty\n // cell is a \"we don't know\" in a tile that exists to answer exactly that\n // question. Whitespace-only cells are caught at render (ProductComparisonLit\n // drops the row); the server-side filler gate rejects placeholder prose.\n valueA: z.string().min(1),\n valueB: z.string().min(1),\n valueC: z.string().optional(),\n valueD: z.string().optional(),\n});\n\nexport const comparisonSchema = z.object({\n products: z.array(productSchema).min(2).max(4),\n // The comparison ALWAYS renders as a side-by-side matrix (products = columns,\n // rows = dimensions) \u2014 that's the whole point of a comparison. When the\n // assistant authors `rows`, those are used verbatim; when omitted, the widget\n // synthesizes rows from each product's `attributes`. There is deliberately NO\n // layout toggle: the LLM can't choose a stacked/accordion presentation.\n rows: z.array(comparisonRowSchema).optional(),\n heading: z.string().optional(),\n});\n\nexport const heroSchema = z.object({\n product: productSchema,\n layout: z.enum(['image-left', 'image-right', 'image-top']).default('image-left'),\n longCopy: z.string().max(800).optional(),\n});\n\nexport const gridSchema = z.object({\n products: z.array(productSchema).min(2).max(12),\n desktopColumns: z.union([z.literal(2), z.literal(3)]).default(3),\n heading: z.string().optional(),\n});\n\n// [Adversarial SEC] scheme-validate pdp_href \u2014 block javascript:/data:/vbscript:\n// by requiring the URL to start with a known-safe scheme or relative path.\nconst SAFE_HREF = /^(https?:\\/\\/|\\/|\\.\\/|\\.\\.\\/|#|\\?|mailto:|tel:)/i;\n\n// nullish (not optional): the runtime-backend serializes Pydantic None as\n// JSON null \u2014 optional() alone rejects null, which silently blanked every\n// mounted carousel with an unset image/price/hook (BUG-1783408976).\nexport const recoItemSchema = z.object({\n image_url: z.string().nullish(),\n price: z.string().nullish(),\n hook: z.string().max(40).nullish(),\n pdp_href: z.string().regex(SAFE_HREF, 'pdp_href must be a safe path/URL'),\n});\n\n// The carousel's TITLE is not a widget prop \u2014 it rides the mount's\n// content['title'] (lifted into tile chrome like every other element). A\n// widget-level `heading` used to render a duplicate in-widget h2 (user\n// report 2026-07-24). Stale cached payloads may still carry a heading key;\n// z.object() strips unknown keys on parse, so they mount fine.\nexport const recoSchema = z.object({\n items: z.array(recoItemSchema).max(12).default([]),\n});\n\nexport type CardProps = z.infer<typeof cardSchema>;\nexport type ComparisonProps = z.infer<typeof comparisonSchema>;\nexport type HeroProps = z.infer<typeof heroSchema>;\nexport type GridProps = z.infer<typeof gridSchema>;\nexport type RecoProps = z.infer<typeof recoSchema>;\nexport type RecoItemProps = z.infer<typeof recoItemSchema>;\n\nexport const tileWidgets = [\n { widget: 'adaptive-product:card', defName: 'productCardProps', propsSchema: cardSchema },\n {\n widget: 'adaptive-product:comparison',\n defName: 'productComparisonProps',\n propsSchema: comparisonSchema,\n },\n { widget: 'adaptive-product:hero', defName: 'productHeroProps', propsSchema: heroSchema },\n { widget: 'adaptive-product:grid', defName: 'productGridProps', propsSchema: gridSchema },\n { widget: 'adaptive-product:reco', defName: 'productRecoProps', propsSchema: recoSchema },\n { widget: 'adaptive-product:pdp', defName: 'syntroPdpProps', propsSchema: syntroPdpPropsSchema },\n] as const;\n\n// ============================================================================\n// Capabilities Documentation (injected into JSON Schema for LLM prompts)\n// ============================================================================\n\nexport const CAPABILITIES_DOCUMENTATION = {\n packageId: 'adaptive-product',\n plannerSummary:\n 'Product merchandising widgets for cards, comparisons, heroes, grids, and recommendation carousels. Reach for this when the strategy needs product facts, PDP support, recommendations, or commerce-oriented social proof.',\n description:\n 'Product adaptive for presenting catalog-backed product facts and recommendations. Widgets support product cards, side-by-side comparisons, hero blocks, product grids, recommendation carousels, and a host-owned PDP element.',\n whenToUse: [\n {\n goal: 'Show one curated product with controlled visible facts',\n action:\n 'Add a tile with widget: \"adaptive-product:card\" and provide product, density, and optional visibleFacts props.',\n },\n {\n goal: 'Compare two to four products side by side',\n action:\n 'Add a tile with widget: \"adaptive-product:comparison\"; products become columns and optional rows define the comparison dimensions.',\n },\n {\n goal: 'Feature one product in a larger editorial layout',\n action:\n 'Add a tile with widget: \"adaptive-product:hero\" and choose image-left, image-right, or image-top layout.',\n },\n {\n goal: 'Show a small collection of products',\n action:\n 'Add a tile with widget: \"adaptive-product:grid\" for 2-12 products and choose two or three desktop columns.',\n },\n {\n goal: 'Show recommended next products or actions',\n action:\n 'Add a tile with widget: \"adaptive-product:reco\" and provide up to 12 recommendation items with safe pdp_href values.',\n },\n {\n goal: 'Take over the PDP below the buy box with per-visitor section ordering',\n action:\n 'Mount widget: \"adaptive-product:pdp\" at the boundary anchor (core:mountWidget, inline slot) and provide the takeover prop: page anatomy only \u2014 host section anchors + boundary anchor. Section ordering/suppression plans are resolved server-side per visitor archetype (never authored in config). Rollout and kill happen at config delivery: the GrowthBook flag that serves this config variant is the gate \u2014 there is no separate runtime flag. Fails open to the native page.',\n },\n ],\n conventions: [\n {\n name: 'Catalog facts stay inside product',\n description:\n 'Use the product object for identity, image, price, rating, availability, badge, specs, framing, and CTAs. Keep visibleFacts top-level on card props; it is not nested under product.',\n },\n {\n name: 'Comparison has one presentation',\n description:\n 'adaptive-product:comparison always renders a side-by-side matrix. Do not add layout toggles such as stacked, accordion, expandBehavior, or defaultExpandedIndex.',\n },\n {\n name: 'Recommendation links must be safe',\n description:\n 'reco item pdp_href values must use http(s), relative paths, hashes, query strings, mailto, or tel. javascript:, data:, and other executable schemes are rejected.',\n },\n {\n name: 'Live binding is a product adapter concern',\n description:\n 'Price, image, variant, Shopify, WooCommerce, JSON-LD, and OpenGraph binding are resolved through the adaptive-product platform adapter, not through runtime-specific branches.',\n },\n ],\n events: [],\n};\n\nexport type {\n AddToCartInput,\n AddToCartResult,\n AttributeDef,\n AttributeValue,\n ProductPlatformAdapter,\n SwatchSpec,\n Variant,\n VariantPayload,\n} from './platformAdapter';\nexport { getProductPlatformAdapter } from './platformAdapter';\nexport type { ImageBind, PriceBind, Product } from './schema-primitives';\nexport { productSchema } from './schema-primitives';\n\n// \u2500\u2500 Syntro PDP (config-first personalized PDP; live slots via /api/pdp/module) \u2500\n\nexport interface SyntroPdpProps {\n /** Stable product identifier passed to the backend planner. */\n productId: string;\n /** Display name used by the planner when authoring headers / copy. */\n productName: string;\n /** Optional short product blurb passed verbatim into the planner. */\n productBlurb?: string;\n /**\n * Page-takeover anatomy (FEAT-1785977524). Presence switches `<syntro-pdp>`\n * from the fixed six-slot compose path to the takeover engine\n * (`takeover/engine.ts`): one `/api/pdp/plan` round trip scores the visitor\n * and returns the server-resolved section plan. Mirrors\n * `syntroPdpPropsSchema` in `takeover/schema.ts`; keep the two in sync.\n */\n takeover?: PdpTakeoverConfig;\n}\n", "// src/schema-primitives.ts\nimport { z } from 'zod';\n\nconst SAFE_HREF_PATTERN =\n /^(?:[/.#?]|[hH][tT][tT][pP][sS]?:\\/\\/|[mM][aA][iI][lL][tT][oO]:|[tT][eE][lL]:)/;\n\nexport const HrefZ = z\n .string()\n .min(1)\n .regex(SAFE_HREF_PATTERN, {\n message:\n 'href must start with /, ./, ../, #, ?, http(s)://, mailto:, or tel: \u2014 javascript:, data:, and vbscript: are not allowed',\n })\n .refine(\n (s) => {\n try {\n const parsed = new URL(s, 'https://syntro.local/');\n return ['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol);\n } catch {\n return false;\n }\n },\n { message: 'href resolves to an unsupported protocol' }\n );\n\nexport const PriceBindZ = z.discriminatedUnion('type', [\n z.object({ type: z.literal('dom-selector'), selector: z.string().min(1) }).strict(),\n z\n .object({ type: z.literal('shopify-ajax'), handle: z.string().min(1), base: HrefZ.optional() })\n .strict(),\n z\n .object({\n type: z.literal('woocommerce-store-api'),\n slug: z.string().min(1),\n base: HrefZ.optional(),\n })\n .strict(),\n z.object({ type: z.literal('jsonld'), url: HrefZ.optional() }).strict(),\n]);\n\nexport const ImageBindZ = z.discriminatedUnion('type', [\n z.object({ type: z.literal('dom-selector'), selector: z.string().min(1) }).strict(),\n z\n .object({ type: z.literal('shopify-ajax'), handle: z.string().min(1), base: HrefZ.optional() })\n .strict(),\n z.object({ type: z.literal('opengraph'), url: HrefZ }).strict(),\n z.object({ type: z.literal('jsonld'), url: HrefZ.optional() }).strict(),\n]);\n\n// ---------------------------------------------------------------------------\n// productSchema v2 \u2014 Google Merchant Center / schema.org/Product alignment\n//\n// Layered model:\n// 1. Strict typed core (id, name, image, price, ctas) \u2014 rendering depends on\n// these; unchanged from v1.\n// 2. Common typed optional (brand, availability, salePrice, rating) \u2014 widely\n// reused across product types; renderers know what to do with them.\n// 3. `specs[]` \u2014 open spec table modelled on Google's `product_detail[]` /\n// schema.org's `additionalProperty`. Arbitrary `{section, name, value}`\n// triples for category-specific facts. Cards group by section.\n// 4. `labels{}` \u2014 Google `custom_label_0..4` style: free-form targeting\n// data the renderer ignores and the targeting layer reads.\n//\n// `attributes[]` from v1 is preserved as an optional, deprecated field so\n// existing configs keep working. Renderers should treat it as a synthetic\n// \"About\" spec section. New configs should use `specs[]`.\n// ---------------------------------------------------------------------------\n\nconst specRowSchema = z\n .object({\n section: z.string().min(1).describe('Section header \u2014 \"Supplement Facts\", \"Shipping\", etc.'),\n name: z.string().min(1).describe('Attribute name \u2014 \"Vitamin D3\", \"Lead time\"'),\n value: z.string().describe('Attribute value as a string \u2014 \"5000\", \"2\"'),\n unit: z\n .string()\n .optional()\n .describe('Unit suffix shown small next to value \u2014 \"IU\", \"mg\", \"days\"'),\n emphasis: z.boolean().default(false),\n priority: z\n .number()\n .optional()\n .describe('Higher = more important. Compact cards show top N by priority.'),\n })\n .strict();\n\nexport const productSchema = z\n .object({\n // \u2500\u2500 Tier 1: strict typed core \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n id: z.string().min(1).describe('Stable identifier for analytics and dedup'),\n name: z.string().min(1),\n tagline: z.string().optional(),\n image: z\n .object({\n src: HrefZ,\n alt: z.string(),\n bind: ImageBindZ.optional(),\n })\n .strict(),\n price: z\n .object({\n amount: z.string(),\n cadence: z.string().optional(),\n bind: PriceBindZ.optional(),\n })\n .strict()\n .optional(),\n badge: z\n .object({\n label: z.string(),\n tone: z.enum(['neutral', 'primary', 'success', 'warning']).default('neutral'),\n })\n .strict()\n .optional(),\n framing: z.string().max(280).optional(),\n ctas: z\n .array(\n z\n .object({\n label: z.string().min(1),\n href: HrefZ.optional(),\n target: z.enum(['_self', '_blank']).default('_self'),\n variant: z.enum(['primary', 'secondary', 'ghost']).default('primary'),\n actionId: z.string().optional(),\n })\n .strict()\n )\n .min(1)\n .max(2),\n\n // \u2500\u2500 Tier 2: common typed optional (mirrors GMC / schema.org Offer) \u2500\n /** Cross-platform product identifiers. SKU/GTIN/MPN per GMC; platform handles for bind auto-resolution. */\n identifiers: z\n .object({\n sku: z.string().optional(),\n gtin: z.string().optional(),\n mpn: z.string().optional(),\n shopifyHandle: z.string().optional(),\n wooSlug: z.string().optional(),\n })\n .strict()\n .optional(),\n brand: z.string().optional(),\n /** GMC availability enum \u2014 drives default badge if no explicit badge set. */\n availability: z.enum(['in_stock', 'preorder', 'backorder', 'out_of_stock']).optional(),\n /** Strikethrough source price. `price` becomes the \"was\" value when this is set. */\n salePrice: z\n .object({\n amount: z.string(),\n cadence: z.string().optional(),\n validUntil: z.string().datetime().optional(),\n bind: PriceBindZ.optional(),\n })\n .strict()\n .optional(),\n /** AggregateRating \u2014 value, count, optional max (defaults to 5). */\n rating: z\n .object({\n value: z.number().min(0),\n count: z.number().int().min(0),\n max: z.number().default(5),\n })\n .strict()\n .optional(),\n\n // \u2500\u2500 Tier 3: open spec table (Google product_detail / schema.org additionalProperty) \u2500\u2500\n /** Category-specific spec rows grouped by section. Renderers show as grouped tables. */\n specs: z.array(specRowSchema).max(32).optional(),\n\n // \u2500\u2500 Tier 4: passthrough targeting labels (Google custom_label_*) \u2500\u2500\u2500\n /** Flat record of targeting/segmentation labels. Renderer ignores; targeting layer reads. */\n labels: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),\n\n // \u2500\u2500 Deprecated: v1 flat attributes (renderers shim into a synthetic \"About\" spec section) \u2500\u2500\n /** @deprecated Use `specs[]` with `section: \"About\"`. Retained for backward compatibility. */\n attributes: z\n .array(\n z\n .object({\n label: z.string(),\n value: z.string(),\n emphasis: z.boolean().default(false),\n })\n .strict()\n )\n .max(8)\n .optional(),\n\n /**\n * Optional variant block for products with attribute-based SKUs.\n * When present, indicates the product has multiple SKUs distinguished\n * by attributes (size, color, etc.). This block on the product itself\n * is the seed-data shape the demo uses to serve its Shopify\n * GET /products/{handle}.js endpoint.\n *\n * The card does NOT read this directly to decide whether to show a\n * variant picker: variant presence is resolved at render from the\n * platform adapter's fetchVariants (host API for real tenants, this\n * seed data for the demo), so a single catalog source drives it.\n * For real Shopify/Woo tenants this field is unused on the mount\n * payload; the adapter fetches from the host API instead.\n */\n variants: z\n .object({\n attributes: z.array(\n z.object({\n key: z.string(),\n label: z.string(),\n kind: z.enum(['pill', 'swatch']),\n values: z.array(\n z.object({\n id: z.string(),\n label: z.string(),\n swatch: z\n .object({\n kind: z.enum(['color', 'image']),\n value: z.string(),\n })\n .nullable(),\n })\n ),\n })\n ),\n variants: z.array(\n z.object({\n id: z.string(),\n selection: z.record(z.string(), z.string()),\n price: z.number(),\n compare_at_price: z.number().nullable(),\n in_stock: z.boolean(),\n // Same URL-safety policy as image.src \u2014 this block is config/LLM-\n // authored, so javascript:/data:/vbscript: must be rejected here too.\n featured_image: HrefZ.optional(),\n })\n ),\n })\n .optional(),\n })\n .strict();\n\nexport type Product = z.infer<typeof productSchema>;\nexport type PriceBind = z.infer<typeof PriceBindZ>;\nexport type ImageBind = z.infer<typeof ImageBindZ>;\n", "import { z } from 'zod';\n\nexport const takeoverHostSectionSchema = z\n .object({\n id: z.string().min(1),\n anchor: z.string().min(1),\n role: z.string().min(1),\n })\n .strict();\n\nexport const takeoverPlanSchema = z\n .object({\n order: z.array(z.string().min(1)).min(1),\n suppress: z.array(z.string().min(1)),\n })\n .strict();\n\n/**\n * Page ANATOMY only \u2014 which sections exist on the host page and where the\n * takeover root mounts. Deliberately NO plans/ordering here: ordering is\n * intelligence, and intelligence baked into per-customer configs strands\n * every model improvement behind a fleet-wide config re-publish (Parker,\n * 2026-08-06). Plans are resolved server-side and arrive on the same\n * round trip that scores the visitor; `takeoverPlanSchema` above is that\n * response's wire shape.\n */\nexport const pdpTakeoverSchema = z\n .object({\n boundaryAnchor: z.string().min(1),\n // Bounds mirror the server's TakeoverPlanRequest (extra=forbid, 422):\n // a config violating them would silently fail-open on EVERY page load\n // with nothing but a telemetry event \u2014 catch it at authoring time.\n hostSections: z\n .array(takeoverHostSectionSchema)\n .max(100)\n .refine((sections) => new Set(sections.map((s) => s.id)).size === sections.length, {\n message: 'host section ids must be unique',\n }),\n ingestSnapshot: z.string().min(1).max(100),\n // How long the takeover may hold the curtain waiting for the plan (ms).\n // Also sent to the server as budget_ms: within it the server may classify\n // INLINE (first view personalized); default 500 keeps the original UX\n // budget. Healthmaxxer demo: 2000.\n commitTimeoutMs: z.number().int().min(100).max(10000).optional(),\n })\n .strict();\n\n/**\n * Widget props for adaptive-product:pdp \u2014 the takeover config's home in the\n * unified schema (via tileWidgets). Mirrors the SyntroPdpProps interface in\n * ../schema.ts; keep the two in sync.\n */\nexport const syntroPdpPropsSchema = z\n .object({\n productId: z.string().min(1),\n productName: z.string().min(1),\n productBlurb: z.string().optional(),\n takeover: pdpTakeoverSchema.optional(),\n })\n .strict();\n\nexport type TakeoverHostSection = z.infer<typeof takeoverHostSectionSchema>;\nexport type TakeoverPlan = z.infer<typeof takeoverPlanSchema>;\nexport type PdpTakeoverConfig = z.infer<typeof pdpTakeoverSchema>;\nexport type SyntroPdpZodProps = z.infer<typeof syntroPdpPropsSchema>;\n\n/** Server plan response: the visitor's scored archetype + that archetype's\n * plan, resolved centrally (rules today, model later) and cached per\n * workspace \u00D7 product \u00D7 archetype. One round trip, same call that scores. */\nexport interface TakeoverPlanResponse {\n decisionArchetype: string;\n plan: TakeoverPlan;\n}\n", "/**\n * Platform-agnostic commerce interface the product-card widget reads to fetch\n * variants, add to cart, and open the cart. The widget never branches on\n * platform \u2014 it just reads whatever adapter the RUNTIME published for the\n * detected platform.\n *\n * Implementations live in the platform packages and are wired in by the runtime\n * (see runtime-sdk `_platforms-registered.ts` \u2192 `setProductCommerceGlobal`):\n * - platform-shopify: /products/{handle}.js + /cart/add.js + navigate to /cart.\n * - platform-woocommerce (future): Store API + ?wc-ajax=add_to_cart.\n *\n * This is NOT host-injected. The host page supplies nothing.\n */\nexport interface ProductPlatformAdapter {\n /** Fetch normalized variant data for a product. */\n fetchVariants(productId: string): Promise<VariantPayload>;\n\n /** Perform the platform-specific add-to-cart POST. Returns success or\n * a structured error the widget can render. */\n addToCart(input: AddToCartInput): Promise<AddToCartResult>;\n\n /** Open the host's cart UI. Implementation is entirely platform-specific.\n * The widget calls this AFTER closing the chat canvas. */\n openCart(): Promise<void>;\n}\n\nexport interface AddToCartInput {\n product_id: string;\n /** null for single-SKU products (no variant to pick). */\n variant_id: string | null;\n quantity: number;\n}\n\nexport interface AddToCartResult {\n ok: boolean;\n /** Set when ok=false. */\n error?: { code: 'oos' | 'network' | 'validation' | 'unknown'; message: string };\n}\n\nexport interface VariantPayload {\n product_id: string;\n attributes: AttributeDef[];\n variants: Variant[];\n}\n\nexport interface AttributeDef {\n /** Stable id: 'size', 'color', 'cadence'. */\n key: string;\n /** Display label: 'Size', 'Color', 'Delivery'. */\n label: string;\n /** Render mode. Extensible: future kinds may include 'dropdown'. */\n kind: 'pill' | 'swatch';\n values: AttributeValue[];\n}\n\nexport interface AttributeValue {\n /** Stable id: 'large', 'red', 'subscribe'. */\n id: string;\n /** Display label: 'Large', 'Red', 'Subscribe \u2014 save 15%'. */\n label: string;\n /** Present when the attribute's kind is 'swatch'; null for pill attributes. */\n swatch: SwatchSpec | null;\n}\n\nexport interface SwatchSpec {\n kind: 'color' | 'image';\n /** Hex color (#000000) for kind 'color'; URL for kind 'image'. */\n value: string;\n}\n\nexport interface Variant {\n /** Platform-native SKU/variant id used as the cart-POST id. */\n id: string;\n /** Map of attribute key \u2192 value id, e.g. { size: 'large', color: 'red' }. */\n selection: Record<string, string>;\n price: number;\n compare_at_price: number | null;\n in_stock: boolean;\n /** Optional per-variant hero image URL. When present the variant panel swaps\n * its image to this on selection; otherwise it keeps the product-level image.\n * Populated by platforms that carry variant-level media (Shopify\n * `variant.featured_image`); absent for products whose image never varies by\n * SKU (e.g. pack-size only). */\n featured_image?: string;\n}\n\n// \u2500\u2500 Window-level lookup \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n//\n// The widget ships as a bundled IIFE with its own module closure, so a\n// module-level variable can't be shared with the runtime that sets the adapter.\n// The runtime publishes the detected platform's commerce adapter on this window\n// key (runtime-sdk `setProductCommerceGlobal`); the widget only reads it.\n// Returns null when no platform was detected \u2014 the widget then renders its\n// add-to-cart CTA disabled.\n\nconst ADAPTER_KEY = '__SYNTRO_PRODUCT_ADAPTER__';\n\n/** Retrieve the runtime-published commerce adapter. Null if none was set. */\nexport function getProductPlatformAdapter(): ProductPlatformAdapter | null {\n if (typeof window === 'undefined') return null;\n return (\n (window as unknown as Record<string, ProductPlatformAdapter | undefined>)[ADAPTER_KEY] ?? null\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["z", "z", "z"]
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"nativeSlotWatcher.d.ts","sourceRoot":"","sources":["../../src/native/nativeSlotWatcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nativeSlotWatcher.d.ts","sourceRoot":"","sources":["../../src/native/nativeSlotWatcher.ts"],"names":[],"mappings":"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"}
package/dist/runtime.d.ts CHANGED
@@ -78,8 +78,8 @@ export declare const ProductCardMountable: {
78
78
  id: string;
79
79
  ctas: {
80
80
  label: string;
81
- variant: "primary" | "secondary" | "ghost";
82
81
  target: "_self" | "_blank";
82
+ variant: "primary" | "secondary" | "ghost";
83
83
  href?: string | undefined;
84
84
  actionId?: string | undefined;
85
85
  }[];
@@ -209,8 +209,8 @@ export declare const ProductComparisonMountable: {
209
209
  id: string;
210
210
  ctas: {
211
211
  label: string;
212
- variant: "primary" | "secondary" | "ghost";
213
212
  target: "_self" | "_blank";
213
+ variant: "primary" | "secondary" | "ghost";
214
214
  href?: string | undefined;
215
215
  actionId?: string | undefined;
216
216
  }[];
@@ -346,8 +346,8 @@ export declare const ProductHeroMountable: {
346
346
  id: string;
347
347
  ctas: {
348
348
  label: string;
349
- variant: "primary" | "secondary" | "ghost";
350
349
  target: "_self" | "_blank";
350
+ variant: "primary" | "secondary" | "ghost";
351
351
  href?: string | undefined;
352
352
  actionId?: string | undefined;
353
353
  }[];
@@ -477,8 +477,8 @@ export declare const ProductGridMountable: {
477
477
  id: string;
478
478
  ctas: {
479
479
  label: string;
480
- variant: "primary" | "secondary" | "ghost";
481
480
  target: "_self" | "_blank";
481
+ variant: "primary" | "secondary" | "ghost";
482
482
  href?: string | undefined;
483
483
  actionId?: string | undefined;
484
484
  }[];
@@ -590,8 +590,8 @@ export declare const SyntroRecoMountable: {
590
590
  mount(container: HTMLElement, config?: ({
591
591
  items: {
592
592
  pdp_href: string;
593
- image_url?: string | null | undefined;
594
593
  price?: string | null | undefined;
594
+ image_url?: string | null | undefined;
595
595
  hook?: string | null | undefined;
596
596
  }[];
597
597
  } & MountPlumbing) | null | undefined): () => void;
@@ -629,8 +629,8 @@ export declare const runtime: {
629
629
  id: string;
630
630
  ctas: {
631
631
  label: string;
632
- variant: "primary" | "secondary" | "ghost";
633
632
  target: "_self" | "_blank";
633
+ variant: "primary" | "secondary" | "ghost";
634
634
  href?: string | undefined;
635
635
  actionId?: string | undefined;
636
636
  }[];
@@ -767,8 +767,8 @@ export declare const runtime: {
767
767
  id: string;
768
768
  ctas: {
769
769
  label: string;
770
- variant: "primary" | "secondary" | "ghost";
771
770
  target: "_self" | "_blank";
771
+ variant: "primary" | "secondary" | "ghost";
772
772
  href?: string | undefined;
773
773
  actionId?: string | undefined;
774
774
  }[];
@@ -911,8 +911,8 @@ export declare const runtime: {
911
911
  id: string;
912
912
  ctas: {
913
913
  label: string;
914
- variant: "primary" | "secondary" | "ghost";
915
914
  target: "_self" | "_blank";
915
+ variant: "primary" | "secondary" | "ghost";
916
916
  href?: string | undefined;
917
917
  actionId?: string | undefined;
918
918
  }[];
@@ -1049,8 +1049,8 @@ export declare const runtime: {
1049
1049
  id: string;
1050
1050
  ctas: {
1051
1051
  label: string;
1052
- variant: "primary" | "secondary" | "ghost";
1053
1052
  target: "_self" | "_blank";
1053
+ variant: "primary" | "secondary" | "ghost";
1054
1054
  href?: string | undefined;
1055
1055
  actionId?: string | undefined;
1056
1056
  }[];
@@ -1176,8 +1176,8 @@ export declare const runtime: {
1176
1176
  mount(container: HTMLElement, config?: ({
1177
1177
  items: {
1178
1178
  pdp_href: string;
1179
- image_url?: string | null | undefined;
1180
1179
  price?: string | null | undefined;
1180
+ image_url?: string | null | undefined;
1181
1181
  hook?: string | null | undefined;
1182
1182
  }[];
1183
1183
  } & MountPlumbing) | null | undefined): () => void;
@@ -1189,5 +1189,7 @@ export declare const runtime: {
1189
1189
  };
1190
1190
  })[];
1191
1191
  };
1192
+ export { runTakeover, type TakeoverOutcome, type TakeoverPorts, type TakeoverResult, } from './takeover/engine';
1193
+ export { type DetachHandle, detachSection } from './takeover/sectionDetach';
1192
1194
  export default runtime;
1193
1195
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
package/dist/runtime.js CHANGED
@@ -6,11 +6,13 @@ import {
6
6
  SyntroPdpMountable,
7
7
  SyntroRecoMountable,
8
8
  _testing,
9
+ detachSection,
9
10
  onActivate,
11
+ runTakeover,
10
12
  runtime,
11
13
  runtime_default
12
- } from "./chunk-NH3CFDTZ.js";
13
- import "./chunk-FAKCB3BS.js";
14
+ } from "./chunk-SLHBNATX.js";
15
+ import "./chunk-Y2QAYCSK.js";
14
16
  export {
15
17
  ProductCardMountable,
16
18
  ProductComparisonMountable,
@@ -20,7 +22,9 @@ export {
20
22
  SyntroRecoMountable,
21
23
  _testing,
22
24
  runtime_default as default,
25
+ detachSection,
23
26
  onActivate,
27
+ runTakeover,
24
28
  runtime
25
29
  };
26
30
  //# sourceMappingURL=runtime.js.map
@@ -267,15 +267,15 @@ export declare const productSchema: z.ZodObject<{
267
267
  actionId: z.ZodOptional<z.ZodString>;
268
268
  }, "strict", z.ZodTypeAny, {
269
269
  label: string;
270
- variant: "primary" | "secondary" | "ghost";
271
270
  target: "_self" | "_blank";
271
+ variant: "primary" | "secondary" | "ghost";
272
272
  href?: string | undefined;
273
273
  actionId?: string | undefined;
274
274
  }, {
275
275
  label: string;
276
- variant?: "primary" | "secondary" | "ghost" | undefined;
277
276
  href?: string | undefined;
278
277
  target?: "_self" | "_blank" | undefined;
278
+ variant?: "primary" | "secondary" | "ghost" | undefined;
279
279
  actionId?: string | undefined;
280
280
  }>, "many">;
281
281
  /** Cross-platform product identifiers. SKU/GTIN/MPN per GMC; platform handles for bind auto-resolution. */
@@ -603,8 +603,8 @@ export declare const productSchema: z.ZodObject<{
603
603
  id: string;
604
604
  ctas: {
605
605
  label: string;
606
- variant: "primary" | "secondary" | "ghost";
607
606
  target: "_self" | "_blank";
607
+ variant: "primary" | "secondary" | "ghost";
608
608
  href?: string | undefined;
609
609
  actionId?: string | undefined;
610
610
  }[];
@@ -727,9 +727,9 @@ export declare const productSchema: z.ZodObject<{
727
727
  id: string;
728
728
  ctas: {
729
729
  label: string;
730
- variant?: "primary" | "secondary" | "ghost" | undefined;
731
730
  href?: string | undefined;
732
731
  target?: "_self" | "_blank" | undefined;
732
+ variant?: "primary" | "secondary" | "ghost" | undefined;
733
733
  actionId?: string | undefined;
734
734
  }[];
735
735
  tagline?: string | undefined;