@wix/web5-core 1.61.0 → 1.62.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.
@@ -4,6 +4,7 @@ exports.__esModule = true;
4
4
  exports.THEME_OVERRIDE_TOKENS = void 0;
5
5
  exports.applyThemeOverrides = applyThemeOverrides;
6
6
  var _hostScope = require("../hostScope");
7
+ var _tokenContract = require("../theme/tokenContract");
7
8
  /**
8
9
  * Runtime theme token injection (DL #131).
9
10
  *
@@ -17,11 +18,23 @@ var _hostScope = require("../hostScope");
17
18
  * compiled bundle stylesheet uses — host-page styling is never touched, and
18
19
  * equal specificity + later document order makes the override win. Callers
19
20
  * must therefore apply AFTER the client bundle's CSS is in the document.
20
- * - **Open token set**: any sanely-shaped custom property is applied, so a
21
- * template can grow new tokens without an FE or BE release. The mandatory
22
- * `--` prefix means an override can only define custom properties it can
23
- * never set a real CSS property inside the scope. The server enforces the
24
- * same shape (plus value sanitation) at write time.
21
+ * - **Bucketed, since DL #193**: a `brand` token (colour roles, font families)
22
+ * is written as itself, so the store's identity beats the template's. Every
23
+ * other key `host` tokens and anything the contract has never heard of —
24
+ * is written as its `--web5-host-*` alias, which core's stylesheets consume
25
+ * as a `var()` fallback. A template stating the real token therefore wins on
26
+ * shape, and an unknown key is inert rather than dangerous: a custom property
27
+ * nothing references renders nothing, so an adapter that learns to read a new
28
+ * token cannot silently override a template.
29
+ * - **The token set stays open, but the destination changed.** Before DL #193
30
+ * an unrecognised key was applied verbatim, so a template could consume
31
+ * `var(--foo)` and grow a token with no release. It now arrives as
32
+ * `--web5-host-foo`, so the template consumes `var(--web5-host-foo, <default>)`
33
+ * instead. One line different, and the provenance is explicit — the wiring
34
+ * line is what activates a host token, not the contract entry.
35
+ * - The mandatory `--` prefix means an override can only define custom
36
+ * properties — it can never set a real CSS property inside the scope. The
37
+ * server enforces the same shape (plus value sanitation) at write time.
25
38
  * - **Values are inert**: entries are written with
26
39
  * `CSSStyleDeclaration.setProperty`, never string-concatenated into CSS, so
27
40
  * a hostile value cannot terminate the declaration or open a new rule.
@@ -38,14 +51,16 @@ var _hostScope = require("../hostScope");
38
51
  */
39
52
 
40
53
  /**
41
- * The known token catalog the CSS custom properties the seed's Tailwind
42
- * bridge consumes today. GUIDANCE, NOT A GATE: writers (the Shopify theme
43
- * extractor, admin tooling) should stick to these to produce visible effect,
44
- * but `applyThemeOverrides` deliberately applies any well-formed custom
45
- * property so the vocabulary can grow from the seed alone (matching the
46
- * open-set validation on the server).
54
+ * The known token catalog. GUIDANCE, NOT A GATE `applyThemeOverrides` still
55
+ * applies any well-formed custom property, so the vocabulary can grow without a
56
+ * release here.
57
+ *
58
+ * Derived from `@wix/web5-token-contract` rather than restated, because two
59
+ * hand-maintained copies of one list is how they drift. The contract also
60
+ * carries what this Set cannot: which bucket each token is in, and therefore
61
+ * who wins when a store and a template disagree.
47
62
  */
48
- const THEME_OVERRIDE_TOKENS = exports.THEME_OVERRIDE_TOKENS = new Set(['--background', '--foreground', '--card', '--card-foreground', '--popover', '--popover-foreground', '--primary', '--primary-foreground', '--secondary', '--secondary-foreground', '--muted', '--muted-foreground', '--accent', '--accent-foreground', '--border', '--input', '--ring', '--radius', '--font-sans', '--font-display', '--heading']);
63
+ const THEME_OVERRIDE_TOKENS = exports.THEME_OVERRIDE_TOKENS = new Set(Object.keys(_tokenContract.THEME_TOKEN_CONTRACT));
49
64
 
50
65
  /** Mirrors the server's Consts.ThemeOverrideKeyPattern. */
51
66
  const KEY_PATTERN = /^--[a-z][a-z0-9-]{0,62}$/;
@@ -75,8 +90,12 @@ function applyThemeOverrides(overrides) {
75
90
  sheet.insertRule(`${_hostScope.WEB5_SCOPE} {}`, 0);
76
91
  const rule = sheet.cssRules[0];
77
92
  for (const [key, value] of entries) {
93
+ // Brand wins over the template, so it is written as the token the
94
+ // stylesheets actually read. Everything else lands in the host namespace,
95
+ // where core consumes it only as a fallback the template can beat.
96
+ const target = (0, _tokenContract.bucketOf)(key) === 'brand' ? key : (0, _tokenContract.hostAliasFor)(key);
78
97
  try {
79
- rule.style.setProperty(key, value);
98
+ rule.style.setProperty(target, value);
80
99
  } catch {
81
100
  // An engine that rejects the value leaves the token at its baked
82
101
  // default — degraded theming, never broken CSS.
@@ -1 +1 @@
1
- {"version":3,"names":["_hostScope","require","THEME_OVERRIDE_TOKENS","exports","Set","KEY_PATTERN","MARKER_ATTR","applyThemeOverrides","overrides","document","existing","head","querySelector","entries","Object","filter","key","wellFormed","test","console","warn","length","remove","style","createElement","setAttribute","appendChild","sheet","insertRule","WEB5_SCOPE","rule","cssRules","value","setProperty"],"sources":["../../../src/client/applyThemeOverrides.ts"],"sourcesContent":["/**\n * Runtime theme token injection (DL #131).\n *\n * `Configuration.themeOverrides` carries per-store CSS custom-property\n * overrides (`--primary`, `--radius`, `--heading`, ...) computed from the\n * store's own theme (e.g. the Shopify `settings_data.json` extractor). This\n * applies them to the page so they win over the bundle's baked `theme.css`:\n *\n * - **Scoped, not `:root`**: the rule targets `WEB5_SCOPE`, the same\n * `:is(#root, .w5-root, [data-web5-placement], .debug-view)` selector every\n * compiled bundle stylesheet uses — host-page styling is never touched, and\n * equal specificity + later document order makes the override win. Callers\n * must therefore apply AFTER the client bundle's CSS is in the document.\n * - **Open token set**: any sanely-shaped custom property is applied, so a\n * template can grow new tokens without an FE or BE release. The mandatory\n * `--` prefix means an override can only define custom properties — it can\n * never set a real CSS property inside the scope. The server enforces the\n * same shape (plus value sanitation) at write time.\n * - **Values are inert**: entries are written with\n * `CSSStyleDeclaration.setProperty`, never string-concatenated into CSS, so\n * a hostile value cannot terminate the declaration or open a new rule.\n * - **Idempotent**: one marker element per document, replaced wholesale on\n * re-apply; empty/absent input removes it.\n */\nimport { WEB5_SCOPE } from '../hostScope';\n\n/** A themeOverrides key: always a CSS custom property. */\nexport type ThemeOverrideKey = `--${string}`;\n\n/**\n * Writer-side shape for a theme override map. The catalog below documents\n * the tokens the seed consumes today; the type stays open so new tokens\n * flow end-to-end with no release anywhere but the seed.\n */\nexport type ThemeOverrides = Record<ThemeOverrideKey, string>;\n\n/**\n * The known token catalog the CSS custom properties the seed's Tailwind\n * bridge consumes today. GUIDANCE, NOT A GATE: writers (the Shopify theme\n * extractor, admin tooling) should stick to these to produce visible effect,\n * but `applyThemeOverrides` deliberately applies any well-formed custom\n * property so the vocabulary can grow from the seed alone (matching the\n * open-set validation on the server).\n */\nexport const THEME_OVERRIDE_TOKENS: ReadonlySet<string> = new Set([\n '--background', '--foreground',\n '--card', '--card-foreground',\n '--popover', '--popover-foreground',\n '--primary', '--primary-foreground',\n '--secondary', '--secondary-foreground',\n '--muted', '--muted-foreground',\n '--accent', '--accent-foreground',\n '--border', '--input', '--ring',\n '--radius',\n '--font-sans', '--font-display',\n '--heading',\n]);\n\n/** Mirrors the server's Consts.ThemeOverrideKeyPattern. */\nconst KEY_PATTERN = /^--[a-z][a-z0-9-]{0,62}$/;\n\nconst MARKER_ATTR = 'data-web5-theme-overrides';\n\nexport function applyThemeOverrides(\n overrides?: Record<string, string> | null,\n): void {\n if (typeof document === 'undefined') return;\n\n const existing = document.head.querySelector(`style[${MARKER_ATTR}]`);\n const entries = Object.entries(overrides ?? {}).filter(([key]) => {\n const wellFormed = KEY_PATTERN.test(key);\n if (!wellFormed) {\n console.warn(`[web5-theme] Skipping malformed theme override key: ${key}`);\n }\n return wellFormed;\n });\n\n if (entries.length === 0) {\n existing?.remove();\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute(MARKER_ATTR, '');\n document.head.appendChild(style);\n const sheet = style.sheet;\n if (!sheet) {\n style.remove();\n return;\n }\n sheet.insertRule(`${WEB5_SCOPE} {}`, 0);\n const rule = sheet.cssRules[0] as CSSStyleRule;\n for (const [key, value] of entries) {\n try {\n rule.style.setProperty(key, value);\n } catch {\n // An engine that rejects the value leaves the token at its baked\n // default — degraded theming, never broken CSS.\n }\n }\n // Replace-on-reapply: the fresh element is appended (so it stays last in\n // document order) before the stale one is dropped.\n existing?.remove();\n}\n"],"mappings":";;;;;AAwBA,IAAAA,UAAA,GAAAC,OAAA;AAxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;;AAGA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,qBAA0C,GAAAC,OAAA,CAAAD,qBAAA,GAAG,IAAIE,GAAG,CAAC,CAChE,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,mBAAmB,EAC7B,WAAW,EAAE,sBAAsB,EACnC,WAAW,EAAE,sBAAsB,EACnC,aAAa,EAAE,wBAAwB,EACvC,SAAS,EAAE,oBAAoB,EAC/B,UAAU,EAAE,qBAAqB,EACjC,UAAU,EAAE,SAAS,EAAE,QAAQ,EAC/B,UAAU,EACV,aAAa,EAAE,gBAAgB,EAC/B,WAAW,CACZ,CAAC;;AAEF;AACA,MAAMC,WAAW,GAAG,0BAA0B;AAE9C,MAAMC,WAAW,GAAG,2BAA2B;AAExC,SAASC,mBAAmBA,CACjCC,SAAyC,EACnC;EACN,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;EAErC,MAAMC,QAAQ,GAAGD,QAAQ,CAACE,IAAI,CAACC,aAAa,CAAC,SAASN,WAAW,GAAG,CAAC;EACrE,MAAMO,OAAO,GAAGC,MAAM,CAACD,OAAO,CAACL,SAAS,IAAI,CAAC,CAAC,CAAC,CAACO,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK;IAChE,MAAMC,UAAU,GAAGZ,WAAW,CAACa,IAAI,CAACF,GAAG,CAAC;IACxC,IAAI,CAACC,UAAU,EAAE;MACfE,OAAO,CAACC,IAAI,CAAC,uDAAuDJ,GAAG,EAAE,CAAC;IAC5E;IACA,OAAOC,UAAU;EACnB,CAAC,CAAC;EAEF,IAAIJ,OAAO,CAACQ,MAAM,KAAK,CAAC,EAAE;IACxBX,QAAQ,YAARA,QAAQ,CAAEY,MAAM,CAAC,CAAC;IAClB;EACF;EAEA,MAAMC,KAAK,GAAGd,QAAQ,CAACe,aAAa,CAAC,OAAO,CAAC;EAC7CD,KAAK,CAACE,YAAY,CAACnB,WAAW,EAAE,EAAE,CAAC;EACnCG,QAAQ,CAACE,IAAI,CAACe,WAAW,CAACH,KAAK,CAAC;EAChC,MAAMI,KAAK,GAAGJ,KAAK,CAACI,KAAK;EACzB,IAAI,CAACA,KAAK,EAAE;IACVJ,KAAK,CAACD,MAAM,CAAC,CAAC;IACd;EACF;EACAK,KAAK,CAACC,UAAU,CAAC,GAAGC,qBAAU,KAAK,EAAE,CAAC,CAAC;EACvC,MAAMC,IAAI,GAAGH,KAAK,CAACI,QAAQ,CAAC,CAAC,CAAiB;EAC9C,KAAK,MAAM,CAACf,GAAG,EAAEgB,KAAK,CAAC,IAAInB,OAAO,EAAE;IAClC,IAAI;MACFiB,IAAI,CAACP,KAAK,CAACU,WAAW,CAACjB,GAAG,EAAEgB,KAAK,CAAC;IACpC,CAAC,CAAC,MAAM;MACN;MACA;IAAA;EAEJ;EACA;EACA;EACAtB,QAAQ,YAARA,QAAQ,CAAEY,MAAM,CAAC,CAAC;AACpB","ignoreList":[]}
1
+ {"version":3,"names":["_hostScope","require","_tokenContract","THEME_OVERRIDE_TOKENS","exports","Set","Object","keys","THEME_TOKEN_CONTRACT","KEY_PATTERN","MARKER_ATTR","applyThemeOverrides","overrides","document","existing","head","querySelector","entries","filter","key","wellFormed","test","console","warn","length","remove","style","createElement","setAttribute","appendChild","sheet","insertRule","WEB5_SCOPE","rule","cssRules","value","target","bucketOf","hostAliasFor","setProperty"],"sources":["../../../src/client/applyThemeOverrides.ts"],"sourcesContent":["/**\n * Runtime theme token injection (DL #131).\n *\n * `Configuration.themeOverrides` carries per-store CSS custom-property\n * overrides (`--primary`, `--radius`, `--heading`, ...) computed from the\n * store's own theme (e.g. the Shopify `settings_data.json` extractor). This\n * applies them to the page so they win over the bundle's baked `theme.css`:\n *\n * - **Scoped, not `:root`**: the rule targets `WEB5_SCOPE`, the same\n * `:is(#root, .w5-root, [data-web5-placement], .debug-view)` selector every\n * compiled bundle stylesheet uses — host-page styling is never touched, and\n * equal specificity + later document order makes the override win. Callers\n * must therefore apply AFTER the client bundle's CSS is in the document.\n * - **Bucketed, since DL #193**: a `brand` token (colour roles, font families)\n * is written as itself, so the store's identity beats the template's. Every\n * other key — `host` tokens and anything the contract has never heard of —\n * is written as its `--web5-host-*` alias, which core's stylesheets consume\n * as a `var()` fallback. A template stating the real token therefore wins on\n * shape, and an unknown key is inert rather than dangerous: a custom property\n * nothing references renders nothing, so an adapter that learns to read a new\n * token cannot silently override a template.\n * - **The token set stays open, but the destination changed.** Before DL #193\n * an unrecognised key was applied verbatim, so a template could consume\n * `var(--foo)` and grow a token with no release. It now arrives as\n * `--web5-host-foo`, so the template consumes `var(--web5-host-foo, <default>)`\n * instead. One line different, and the provenance is explicit — the wiring\n * line is what activates a host token, not the contract entry.\n * - The mandatory `--` prefix means an override can only define custom\n * properties — it can never set a real CSS property inside the scope. The\n * server enforces the same shape (plus value sanitation) at write time.\n * - **Values are inert**: entries are written with\n * `CSSStyleDeclaration.setProperty`, never string-concatenated into CSS, so\n * a hostile value cannot terminate the declaration or open a new rule.\n * - **Idempotent**: one marker element per document, replaced wholesale on\n * re-apply; empty/absent input removes it.\n */\nimport { WEB5_SCOPE } from '../hostScope';\nimport {\n THEME_TOKEN_CONTRACT,\n bucketOf,\n hostAliasFor,\n} from '../theme/tokenContract';\n\n/** A themeOverrides key: always a CSS custom property. */\nexport type ThemeOverrideKey = `--${string}`;\n\n/**\n * Writer-side shape for a theme override map. The catalog below documents\n * the tokens the seed consumes today; the type stays open so new tokens\n * flow end-to-end with no release anywhere but the seed.\n */\nexport type ThemeOverrides = Record<ThemeOverrideKey, string>;\n\n/**\n * The known token catalog. GUIDANCE, NOT A GATE `applyThemeOverrides` still\n * applies any well-formed custom property, so the vocabulary can grow without a\n * release here.\n *\n * Derived from `@wix/web5-token-contract` rather than restated, because two\n * hand-maintained copies of one list is how they drift. The contract also\n * carries what this Set cannot: which bucket each token is in, and therefore\n * who wins when a store and a template disagree.\n */\nexport const THEME_OVERRIDE_TOKENS: ReadonlySet<string> = new Set(\n Object.keys(THEME_TOKEN_CONTRACT),\n);\n\n/** Mirrors the server's Consts.ThemeOverrideKeyPattern. */\nconst KEY_PATTERN = /^--[a-z][a-z0-9-]{0,62}$/;\n\nconst MARKER_ATTR = 'data-web5-theme-overrides';\n\nexport function applyThemeOverrides(\n overrides?: Record<string, string> | null,\n): void {\n if (typeof document === 'undefined') return;\n\n const existing = document.head.querySelector(`style[${MARKER_ATTR}]`);\n const entries = Object.entries(overrides ?? {}).filter(([key]) => {\n const wellFormed = KEY_PATTERN.test(key);\n if (!wellFormed) {\n console.warn(`[web5-theme] Skipping malformed theme override key: ${key}`);\n }\n return wellFormed;\n });\n\n if (entries.length === 0) {\n existing?.remove();\n return;\n }\n\n const style = document.createElement('style');\n style.setAttribute(MARKER_ATTR, '');\n document.head.appendChild(style);\n const sheet = style.sheet;\n if (!sheet) {\n style.remove();\n return;\n }\n sheet.insertRule(`${WEB5_SCOPE} {}`, 0);\n const rule = sheet.cssRules[0] as CSSStyleRule;\n for (const [key, value] of entries) {\n // Brand wins over the template, so it is written as the token the\n // stylesheets actually read. Everything else lands in the host namespace,\n // where core consumes it only as a fallback the template can beat.\n const target = bucketOf(key) === 'brand' ? key : hostAliasFor(key);\n try {\n rule.style.setProperty(target, value);\n } catch {\n // An engine that rejects the value leaves the token at its baked\n // default — degraded theming, never broken CSS.\n }\n }\n // Replace-on-reapply: the fresh element is appended (so it stays last in\n // document order) before the stale one is dropped.\n existing?.remove();\n}\n"],"mappings":";;;;;AAoCA,IAAAA,UAAA,GAAAC,OAAA;AACA,IAAAC,cAAA,GAAAD,OAAA;AArCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;;AAGA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAME,qBAA0C,GAAAC,OAAA,CAAAD,qBAAA,GAAG,IAAIE,GAAG,CAC/DC,MAAM,CAACC,IAAI,CAACC,mCAAoB,CAClC,CAAC;;AAED;AACA,MAAMC,WAAW,GAAG,0BAA0B;AAE9C,MAAMC,WAAW,GAAG,2BAA2B;AAExC,SAASC,mBAAmBA,CACjCC,SAAyC,EACnC;EACN,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;EAErC,MAAMC,QAAQ,GAAGD,QAAQ,CAACE,IAAI,CAACC,aAAa,CAAC,SAASN,WAAW,GAAG,CAAC;EACrE,MAAMO,OAAO,GAAGX,MAAM,CAACW,OAAO,CAACL,SAAS,IAAI,CAAC,CAAC,CAAC,CAACM,MAAM,CAAC,CAAC,CAACC,GAAG,CAAC,KAAK;IAChE,MAAMC,UAAU,GAAGX,WAAW,CAACY,IAAI,CAACF,GAAG,CAAC;IACxC,IAAI,CAACC,UAAU,EAAE;MACfE,OAAO,CAACC,IAAI,CAAC,uDAAuDJ,GAAG,EAAE,CAAC;IAC5E;IACA,OAAOC,UAAU;EACnB,CAAC,CAAC;EAEF,IAAIH,OAAO,CAACO,MAAM,KAAK,CAAC,EAAE;IACxBV,QAAQ,YAARA,QAAQ,CAAEW,MAAM,CAAC,CAAC;IAClB;EACF;EAEA,MAAMC,KAAK,GAAGb,QAAQ,CAACc,aAAa,CAAC,OAAO,CAAC;EAC7CD,KAAK,CAACE,YAAY,CAAClB,WAAW,EAAE,EAAE,CAAC;EACnCG,QAAQ,CAACE,IAAI,CAACc,WAAW,CAACH,KAAK,CAAC;EAChC,MAAMI,KAAK,GAAGJ,KAAK,CAACI,KAAK;EACzB,IAAI,CAACA,KAAK,EAAE;IACVJ,KAAK,CAACD,MAAM,CAAC,CAAC;IACd;EACF;EACAK,KAAK,CAACC,UAAU,CAAC,GAAGC,qBAAU,KAAK,EAAE,CAAC,CAAC;EACvC,MAAMC,IAAI,GAAGH,KAAK,CAACI,QAAQ,CAAC,CAAC,CAAiB;EAC9C,KAAK,MAAM,CAACf,GAAG,EAAEgB,KAAK,CAAC,IAAIlB,OAAO,EAAE;IAClC;IACA;IACA;IACA,MAAMmB,MAAM,GAAG,IAAAC,uBAAQ,EAAClB,GAAG,CAAC,KAAK,OAAO,GAAGA,GAAG,GAAG,IAAAmB,2BAAY,EAACnB,GAAG,CAAC;IAClE,IAAI;MACFc,IAAI,CAACP,KAAK,CAACa,WAAW,CAACH,MAAM,EAAED,KAAK,CAAC;IACvC,CAAC,CAAC,MAAM;MACN;MACA;IAAA;EAEJ;EACA;EACA;EACArB,QAAQ,YAARA,QAAQ,CAAEW,MAAM,CAAC,CAAC;AACpB","ignoreList":[]}
package/dist/cjs/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
- exports.createFeatureToggleReader = exports.createErrorMarkdown = exports.convertToBlockElementsWithMapping = exports.convertToBlockElements = exports.computeContentBBox = exports.cn = exports.clearForwardStack = exports.buildProbeUrl = exports.buildPlacementDependencies = exports.buildImageSearchFilter = exports.backgroundFilter = exports.applyThemeOverrides = exports.analyzeBackdrop = exports.addToCart = exports.Web5UrlType = exports.WEB5_USER_QUERY_EVENT = exports.WEB5_SCOPES = exports.WEB5_SCOPE = exports.WEB5_ROOT_ID = exports.WEB5_ROOT_CLASS = exports.WEB5_REDIRECT_EVENT = exports.WEB5_GLOBAL_TOKENS = exports.WEB5_ANSWER_UPDATED_EVENT = exports.UserQueryProvider = exports.UserQuery = exports.UnifiedMarkdownParser = exports.UnifiedLink = exports.TextBlockSectionDefinition = exports.TableRow = exports.TableHeader = exports.TableHead = exports.TableFooter = exports.TableCell = exports.TableCaption = exports.TableBody = exports.Table = exports.THEME_OVERRIDE_TOKENS = exports.TEMPLATES_MANIFEST_URL = exports.TEMPLATES_CDN_BASE = exports.SmartIcon = exports.SkipNodesSectionDefinition = exports.ShopifyStorefrontClient = exports.SectionSkeleton = exports.SearchSectionDefinition = exports.SearchSection = exports.STREAMING_TIMEOUT_MS = exports.REFRESH_PROMPTS_WINDOW_MS = exports.REFRESH_PROMPTS_UNTIL_KEY = exports.PromptEntryEmptyState = exports.PlacementSmoothHeight = exports.PlacementResponseRenderer = exports.PlacementPayloadProvider = exports.PlacementLoader = exports.PRODUCT_BY_HANDLE_QUERY = exports.PRODUCT_BACK_SESSION_KEY = exports.OptimizedImage = exports.NextStepsSectionDefinition = exports.MarkdownText = exports.MATCH_DEBUG_QUERY_PARAM = exports.MATCH_DEBUG_KEY = exports.Loader = exports.ListItemsSectionDefinition = exports.LinkType = exports.LIST_ITEMS_ENDPOINT = exports.KpiSectionDefinition = exports.ImageSearchFilterToken = exports.HtmlCommentSectionDefinition = exports.HeroSectionDefinition = exports.HeroEntitySectionDefinition = exports.FeedbackBar = exports.FeatureToggleProvider = exports.FeatureSection9PlusDefinition = exports.FeatureCardsSectionDefinition = exports.FallbackSectionDefinition = exports.ErrorSectionDefinition = exports.EntitySectionDefinition = exports.EntityCollectionSectionDefinition = exports.EXPERIMENT_IDS = exports.ERROR_MARKDOWN = exports.Disclaimer = exports.DiagnosticsCollector = exports.DROP_SECTION = exports.DIAGNOSTIC_TYPES = exports.DEFAULT_ERROR_TEMPLATES = exports.DEFAULT_BACKEND_ENVIRONMENT = exports.CtaBannerSectionDefinition = exports.ComponentTracking = exports.ComponentRegistry = exports.ComponentDependenciesProvider = exports.ComparisonSectionDefinition = exports.ChipsProvider = exports.CalloutSectionDefinition = exports.CalloutBlock = exports.COLLECTION_BY_HANDLE_QUERY = exports.CLIENT_IDS = exports.CALLOUT_KINDS = exports.BottomContainer = exports.BACKEND_ENVIRONMENT_QUERY_PARAM = exports.BACKEND_ENVIRONMENT_KEY = exports.ARTICLE_BY_HANDLE_QUERY = void 0;
5
- exports.resolveClientBundleUrl = exports.resetMatchDebugCache = exports.resetChatIdForTests = exports.registerEntityExtractor = exports.readProductBackHandoff = exports.pushToForwardStack = exports.pushPromptSubmit = exports.pushLinkClick = exports.pushExit = exports.pushEvent = exports.pushError = exports.pushEntityFiltered = exports.preprocessMarkdown = exports.popFromForwardStack = exports.parseWeb5Url = exports.parseMarkdownToComponents = exports.parseMarkdownToAst = exports.parseEntityLink = exports.parseAstToMarkdown = exports.normalizeImageUrl = exports.normalizeIconUrls = exports.nodesToParts = exports.mergeSectionsWithStableReferences = exports.mergeClientConfig = exports.matchMarkdown = exports.matchAllSections = exports.logMatchDebug = exports.loadImagePixels = exports.loadClientBundle = exports.loadBackdropAnalysis = exports.listEntityItems = exports.isWeb5Url = exports.isWeb5SearchUrl = exports.isWeb5ImageUrl = exports.isWeb5IconUrl = exports.isWeb5EntityUrl = exports.isWeb5AskUrl = exports.isWeb5ActionUrl = exports.isValidWeb5Url = exports.isValidTemplateId = exports.isValidLinkUrl = exports.isTrustedBundleHost = exports.isTemplatePickerRequested = exports.isNavigableUrl = exports.isMatchDebugEnabled = exports.isLegacyUrl = exports.isHtmlComment = exports.isEntityLink = exports.hslToRgb = exports.hasImage = exports.hasAnalyticsConsent = exports.getTemplateOverride = exports.getSessionId = exports.getResizedImageUrl = exports.getRefreshPromptsExpiry = exports.getPartsByType = exports.getPartByRole = exports.getOrCreateSessionId = exports.getLinks = exports.getIntentFromMarkdown = exports.getImages = exports.getHeading = exports.getForwardStack = exports.getErrorTypeFromStatus = exports.getEntityExtractor = exports.getContextualImageFilename = exports.getClientBundleOverride = exports.getChatId = exports.getBackendEnvironment = exports.getAllByRole = exports.generateSectionId = exports.generateId = exports.fixMalformedLinks = exports.findKeywordsInContent = exports.findInvalidWeb5Links = exports.findImageInNode = exports.findImageInChildren = exports.fetchProductsByHandlesMap = exports.fetchProductsByHandles = exports.fetchEntityListData = exports.extractProtocol = exports.extractLinkMetadata = exports.extractIntentFromMarkdown = exports.extractContentMarkdown = exports.extractContent = exports.escapeWeb5Links = exports.ensureMinLightness = exports.enrichEntitiesFromPayload = exports.enableRefreshPrompts = exports.disableRefreshPrompts = exports.detectLinkType = exports.deriveRole = exports.deriveLightColor = exports.deriveDarkGradient = exports.deriveDarkColor = exports.defaultExtractor = exports.decodeLinkText = exports.createWixAuthFetch = exports.createSdkRegistry = exports.createPageSection = void 0;
6
- exports.writeProductBackHandoff = exports.validatePatternWithBlocks = exports.validatePatternSyntax = exports.validatePattern = exports.validateLinkUrl = exports.usesStagingBackend = exports.useWeb5Link = exports.useUserQuery = exports.useResolvedImageSources = exports.useResolveShopifyEntityData = exports.useResolveSearchSpringEntityData = exports.useResolveGenericEntityData = exports.usePlacementPayload = exports.useMarkdownUtils = exports.useFeatureToggles = exports.useFeatureToggle = exports.useEntityTransforms = exports.useDebugImageContext = exports.useConversation = exports.useComponentDependencies = exports.useChips = exports.tryParseComponent = exports.trimTrailingWhitespace = exports.transformToSolutionEntityData = exports.transformToGenericEntityData = exports.transformToBlogPostEntityData = exports.transformShopifyProduct = exports.transformShopifyEntityToItemData = exports.transformShopifyCollection = exports.transformShopifyArticle = exports.transformSSProductToEntityItemData = exports.toRgb = exports.stripMarkdown = exports.startNewChatId = exports.shouldRefreshPrompts = exports.setMatchDebug = exports.setForwardStack = exports.setChatId = exports.setBackendEnvironment = exports.rgbToHsl = exports.resolveShopifyEntity = exports.resolveShopifyConfig = exports.resolveErrorTemplate = void 0;
4
+ exports.computeContentBBox = exports.cn = exports.clearForwardStack = exports.buildProbeUrl = exports.buildPlacementDependencies = exports.buildImageSearchFilter = exports.bucketOf = exports.backgroundFilter = exports.applyThemeOverrides = exports.analyzeBackdrop = exports.addToCart = exports.Web5UrlType = exports.WEB5_USER_QUERY_EVENT = exports.WEB5_SCOPES = exports.WEB5_SCOPE = exports.WEB5_ROOT_ID = exports.WEB5_ROOT_CLASS = exports.WEB5_REDIRECT_EVENT = exports.WEB5_GLOBAL_TOKENS = exports.WEB5_ANSWER_UPDATED_EVENT = exports.UserQueryProvider = exports.UserQuery = exports.UnifiedMarkdownParser = exports.UnifiedLink = exports.TextBlockSectionDefinition = exports.TableRow = exports.TableHeader = exports.TableHead = exports.TableFooter = exports.TableCell = exports.TableCaption = exports.TableBody = exports.Table = exports.TOKEN_NAME_PATTERN = exports.THEME_TOKEN_CONTRACT = exports.THEME_OVERRIDE_TOKENS = exports.TEMPLATES_MANIFEST_URL = exports.TEMPLATES_CDN_BASE = exports.SmartIcon = exports.SkipNodesSectionDefinition = exports.ShopifyStorefrontClient = exports.SectionSkeleton = exports.SearchSectionDefinition = exports.SearchSection = exports.STREAMING_TIMEOUT_MS = exports.REFRESH_PROMPTS_WINDOW_MS = exports.REFRESH_PROMPTS_UNTIL_KEY = exports.PromptEntryEmptyState = exports.PlacementSmoothHeight = exports.PlacementResponseRenderer = exports.PlacementPayloadProvider = exports.PlacementLoader = exports.PRODUCT_BY_HANDLE_QUERY = exports.PRODUCT_BACK_SESSION_KEY = exports.OptimizedImage = exports.NextStepsSectionDefinition = exports.MarkdownText = exports.MATCH_DEBUG_QUERY_PARAM = exports.MATCH_DEBUG_KEY = exports.Loader = exports.ListItemsSectionDefinition = exports.LinkType = exports.LIST_ITEMS_ENDPOINT = exports.KpiSectionDefinition = exports.ImageSearchFilterToken = exports.HtmlCommentSectionDefinition = exports.HeroSectionDefinition = exports.HeroEntitySectionDefinition = exports.FeedbackBar = exports.FeatureToggleProvider = exports.FeatureSection9PlusDefinition = exports.FeatureCardsSectionDefinition = exports.FallbackSectionDefinition = exports.ErrorSectionDefinition = exports.EntitySectionDefinition = exports.EntityCollectionSectionDefinition = exports.EXPERIMENT_IDS = exports.ERROR_MARKDOWN = exports.Disclaimer = exports.DiagnosticsCollector = exports.DROP_SECTION = exports.DIAGNOSTIC_TYPES = exports.DEFAULT_ERROR_TEMPLATES = exports.DEFAULT_BACKEND_ENVIRONMENT = exports.CtaBannerSectionDefinition = exports.ComponentTracking = exports.ComponentRegistry = exports.ComponentDependenciesProvider = exports.ComparisonSectionDefinition = exports.ChipsProvider = exports.CalloutSectionDefinition = exports.CalloutBlock = exports.COLLECTION_BY_HANDLE_QUERY = exports.CLIENT_IDS = exports.CALLOUT_KINDS = exports.BottomContainer = exports.BRAND_TOKENS = exports.BACKEND_ENVIRONMENT_QUERY_PARAM = exports.BACKEND_ENVIRONMENT_KEY = exports.ARTICLE_BY_HANDLE_QUERY = void 0;
5
+ exports.pushToForwardStack = exports.pushPromptSubmit = exports.pushLinkClick = exports.pushExit = exports.pushEvent = exports.pushError = exports.pushEntityFiltered = exports.preprocessMarkdown = exports.popFromForwardStack = exports.parseWeb5Url = exports.parseMarkdownToComponents = exports.parseMarkdownToAst = exports.parseEntityLink = exports.parseAstToMarkdown = exports.normalizeImageUrl = exports.normalizeIconUrls = exports.nodesToParts = exports.mergeSectionsWithStableReferences = exports.mergeClientConfig = exports.matchMarkdown = exports.matchAllSections = exports.logMatchDebug = exports.loadImagePixels = exports.loadClientBundle = exports.loadBackdropAnalysis = exports.listEntityItems = exports.isWeb5Url = exports.isWeb5SearchUrl = exports.isWeb5ImageUrl = exports.isWeb5IconUrl = exports.isWeb5EntityUrl = exports.isWeb5AskUrl = exports.isWeb5ActionUrl = exports.isValidWeb5Url = exports.isValidTemplateId = exports.isValidLinkUrl = exports.isTrustedBundleHost = exports.isTemplatePickerRequested = exports.isNavigableUrl = exports.isMatchDebugEnabled = exports.isLegacyUrl = exports.isHtmlComment = exports.isEntityLink = exports.hslToRgb = exports.hostAliasFor = exports.hasImage = exports.hasAnalyticsConsent = exports.getTemplateOverride = exports.getSessionId = exports.getResizedImageUrl = exports.getRefreshPromptsExpiry = exports.getPartsByType = exports.getPartByRole = exports.getOrCreateSessionId = exports.getLinks = exports.getIntentFromMarkdown = exports.getImages = exports.getHeading = exports.getForwardStack = exports.getErrorTypeFromStatus = exports.getEntityExtractor = exports.getContextualImageFilename = exports.getClientBundleOverride = exports.getChatId = exports.getBackendEnvironment = exports.getAllByRole = exports.generateSectionId = exports.generateId = exports.fixMalformedLinks = exports.findKeywordsInContent = exports.findInvalidWeb5Links = exports.findImageInNode = exports.findImageInChildren = exports.fetchProductsByHandlesMap = exports.fetchProductsByHandles = exports.fetchEntityListData = exports.extractProtocol = exports.extractLinkMetadata = exports.extractIntentFromMarkdown = exports.extractContentMarkdown = exports.extractContent = exports.escapeWeb5Links = exports.ensureMinLightness = exports.enrichEntitiesFromPayload = exports.enableRefreshPrompts = exports.disableRefreshPrompts = exports.detectLinkType = exports.deriveRole = exports.deriveLightColor = exports.deriveDarkGradient = exports.deriveDarkColor = exports.defaultExtractor = exports.decodeLinkText = exports.createWixAuthFetch = exports.createSdkRegistry = exports.createPageSection = exports.createFeatureToggleReader = exports.createErrorMarkdown = exports.convertToBlockElementsWithMapping = exports.convertToBlockElements = void 0;
6
+ exports.writeProductBackHandoff = exports.validatePatternWithBlocks = exports.validatePatternSyntax = exports.validatePattern = exports.validateLinkUrl = exports.usesStagingBackend = exports.useWeb5Link = exports.useUserQuery = exports.useResolvedImageSources = exports.useResolveShopifyEntityData = exports.useResolveSearchSpringEntityData = exports.useResolveGenericEntityData = exports.usePlacementPayload = exports.useMarkdownUtils = exports.useFeatureToggles = exports.useFeatureToggle = exports.useEntityTransforms = exports.useDebugImageContext = exports.useConversation = exports.useComponentDependencies = exports.useChips = exports.tryParseComponent = exports.trimTrailingWhitespace = exports.transformToSolutionEntityData = exports.transformToGenericEntityData = exports.transformToBlogPostEntityData = exports.transformShopifyProduct = exports.transformShopifyEntityToItemData = exports.transformShopifyCollection = exports.transformShopifyArticle = exports.transformSSProductToEntityItemData = exports.toRgb = exports.stripMarkdown = exports.startNewChatId = exports.shouldRefreshPrompts = exports.setMatchDebug = exports.setForwardStack = exports.setChatId = exports.setBackendEnvironment = exports.rgbToHsl = exports.resolveShopifyEntity = exports.resolveShopifyConfig = exports.resolveErrorTemplate = exports.resolveClientBundleUrl = exports.resetMatchDebugCache = exports.resetChatIdForTests = exports.registerEntityExtractor = exports.readProductBackHandoff = void 0;
7
7
  var _clients = require("./clients");
8
8
  exports.CLIENT_IDS = _clients.CLIENT_IDS;
9
9
  exports.EXPERIMENT_IDS = _clients.EXPERIMENT_IDS;
@@ -254,6 +254,12 @@ exports.mergeClientConfig = _mergeClientConfig.mergeClientConfig;
254
254
  var _applyThemeOverrides = require("./client/applyThemeOverrides");
255
255
  exports.applyThemeOverrides = _applyThemeOverrides.applyThemeOverrides;
256
256
  exports.THEME_OVERRIDE_TOKENS = _applyThemeOverrides.THEME_OVERRIDE_TOKENS;
257
+ var _tokenContract = require("./theme/tokenContract");
258
+ exports.THEME_TOKEN_CONTRACT = _tokenContract.THEME_TOKEN_CONTRACT;
259
+ exports.BRAND_TOKENS = _tokenContract.BRAND_TOKENS;
260
+ exports.TOKEN_NAME_PATTERN = _tokenContract.TOKEN_NAME_PATTERN;
261
+ exports.bucketOf = _tokenContract.bucketOf;
262
+ exports.hostAliasFor = _tokenContract.hostAliasFor;
257
263
  var _PlacementResponseRenderer = require("./components/placement/PlacementResponseRenderer");
258
264
  exports.PlacementResponseRenderer = _PlacementResponseRenderer.PlacementResponseRenderer;
259
265
  exports.PlacementSmoothHeight = _PlacementResponseRenderer.PlacementSmoothHeight;
@@ -1 +1 @@
1
- {"version":3,"names":["_clients","require","exports","CLIENT_IDS","EXPERIMENT_IDS","_FeatureToggleContext","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","_parts","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","_sectionDefinition","DROP_SECTION","_diagnosticTypes","DIAGNOSTIC_TYPES","_imageSearchFilterTypes","buildImageSearchFilter","_imageSearchFilters","ImageSearchFilterToken","backgroundFilter","_componentDefinitions","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","FeatureCardsSectionDefinition","EntitySectionDefinition","EntityCollectionSectionDefinition","ComparisonSectionDefinition","TextBlockSectionDefinition","CtaBannerSectionDefinition","CalloutSectionDefinition","NextStepsSectionDefinition","FeatureSection9PlusDefinition","ListItemsSectionDefinition","SkipNodesSectionDefinition","HtmlCommentSectionDefinition","SearchSectionDefinition","ErrorSectionDefinition","FallbackSectionDefinition","createSdkRegistry","_registry","ComponentRegistry","_patternValidator","validatePattern","validatePatternSyntax","validatePatternWithBlocks","_markdownBlocks","convertToBlockElements","convertToBlockElementsWithMapping","_linkTypes","Web5UrlType","isWeb5AskUrl","isWeb5EntityUrl","isWeb5ImageUrl","isWeb5IconUrl","isWeb5ActionUrl","isWeb5SearchUrl","isWeb5Url","isNavigableUrl","isValidLinkUrl","isLegacyUrl","_entityLinkParser","parseWeb5Url","isValidWeb5Url","validateLinkUrl","isEntityLink","parseEntityLink","extractProtocol","extractLinkMetadata","_web5LinkValidator","findInvalidWeb5Links","_nodeMatchers","hasImage","isHtmlComment","_match","matchMarkdown","matchAllSections","nodesToParts","_ComponentDependenciesContext","ComponentDependenciesProvider","useComponentDependencies","_UserQueryContext","UserQueryProvider","useUserQuery","_ChipsContext","ChipsProvider","useChips","_entity","defaultExtractor","enrichEntitiesFromPayload","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","_callout","CALLOUT_KINDS","_useWeb5Link","useWeb5Link","_useConversation","useConversation","_useDebugImageContext","useDebugImageContext","_useResolvedImageSources","useResolvedImageSources","_useResolveGenericEntityData","useResolveGenericEntityData","_useEntityTransforms","useEntityTransforms","_useMarkdownUtils","useMarkdownUtils","_useResolveShopifyEntityData","useResolveShopifyEntityData","_useResolveSearchSpringEntityData","useResolveSearchSpringEntityData","_searchspring","fetchProductsByHandles","fetchProductsByHandlesMap","transformSSProductToEntityItemData","_cart","addToCart","_shopify","ShopifyStorefrontClient","resolveShopifyConfig","resolveShopifyEntity","transformShopifyProduct","transformShopifyCollection","transformShopifyArticle","transformShopifyEntityToItemData","PRODUCT_BY_HANDLE_QUERY","COLLECTION_BY_HANDLE_QUERY","ARTICLE_BY_HANDLE_QUERY","_utils","cn","_imageUtils","normalizeImageUrl","getResizedImageUrl","_imageBackdrop","analyzeBackdrop","computeContentBBox","buildProbeUrl","loadImagePixels","loadBackdropAnalysis","_parseUtils","stripMarkdown","_colorUtils","rgbToHsl","hslToRgb","ensureMinLightness","toRgb","deriveDarkColor","deriveDarkGradient","deriveLightColor","_analyticsEvents","pushEvent","pushPromptSubmit","pushLinkClick","pushError","pushExit","pushEntityFiltered","hasAnalyticsConsent","_errors","ERROR_MARKDOWN","getErrorTypeFromStatus","createErrorMarkdown","STREAMING_TIMEOUT_MS","DEFAULT_ERROR_TEMPLATES","resolveErrorTemplate","_navigationStack","getForwardStack","setForwardStack","clearForwardStack","pushToForwardStack","popFromForwardStack","_UserQuery","UserQuery","_productBackHandoff","PRODUCT_BACK_SESSION_KEY","writeProductBackHandoff","readProductBackHandoff","_PromptEntryEmptyState","PromptEntryEmptyState","_SearchSection","SearchSection","_FeedbackBar","FeedbackBar","_Disclaimer","Disclaimer","_BottomContainer","BottomContainer","_MarkdownText","MarkdownText","_CalloutBlock","CalloutBlock","_OptimizedImage","OptimizedImage","_SectionSkeleton","SectionSkeleton","_SmartIcon","SmartIcon","_Loader","Loader","_PlacementLoader","PlacementLoader","_UnifiedLink","UnifiedLink","detectLinkType","LinkType","_table","Table","TableHeader","TableBody","TableFooter","TableHead","TableRow","TableCell","TableCaption","_userQueryEvent","WEB5_USER_QUERY_EVENT","_answerUpdatedEvent","WEB5_ANSWER_UPDATED_EVENT","_redirectEvent","WEB5_REDIRECT_EVENT","_loadClientBundle","loadClientBundle","_clientBundleOverride","getClientBundleOverride","isTrustedBundleHost","_clientBundleUrl","TEMPLATES_CDN_BASE","TEMPLATES_MANIFEST_URL","getTemplateOverride","isTemplatePickerRequested","isValidTemplateId","resolveClientBundleUrl","_mergeClientConfig","mergeClientConfig","_applyThemeOverrides","applyThemeOverrides","THEME_OVERRIDE_TOKENS","_PlacementResponseRenderer","PlacementResponseRenderer","PlacementSmoothHeight","_buildPlacementDependencies","buildPlacementDependencies","_PlacementPayloadContext","PlacementPayloadProvider","usePlacementPayload","_unifiedMarkdownParser","UnifiedMarkdownParser","parseMarkdownToAst","parseAstToMarkdown","_markdownPreprocessor","escapeWeb5Links","fixMalformedLinks","trimTrailingWhitespace","normalizeIconUrls","decodeLinkText","preprocessMarkdown","_componentTracking","ComponentTracking","_contentKeywordMatcher","findKeywordsInContent","getContextualImageFilename","_intentExtractor","extractIntentFromMarkdown","getIntentFromMarkdown","_propsExtractor","createPageSection","generateSectionId","generateId","findImageInNode","findImageInChildren","_diagnosticsCollector","DiagnosticsCollector","_refreshPrompts","REFRESH_PROMPTS_UNTIL_KEY","REFRESH_PROMPTS_WINDOW_MS","getRefreshPromptsExpiry","shouldRefreshPrompts","enableRefreshPrompts","disableRefreshPrompts","_backendEnvironment","BACKEND_ENVIRONMENT_KEY","BACKEND_ENVIRONMENT_QUERY_PARAM","DEFAULT_BACKEND_ENVIRONMENT","getBackendEnvironment","setBackendEnvironment","usesStagingBackend","_matchDebug","MATCH_DEBUG_KEY","MATCH_DEBUG_QUERY_PARAM","isMatchDebugEnabled","setMatchDebug","resetMatchDebugCache","logMatchDebug","_wixAuthFetch","createWixAuthFetch","_sessionManager","getOrCreateSessionId","getSessionId","getChatId","startNewChatId","setChatId","resetChatIdForTests","_componentParser","parseMarkdownToComponents","tryParseComponent","mergeSectionsWithStableReferences","_hostScope","WEB5_ROOT_ID","WEB5_ROOT_CLASS","WEB5_SCOPES","WEB5_SCOPE","WEB5_GLOBAL_TOKENS"],"sources":["../../src/index.ts"],"sourcesContent":["// Client IDs and experiment IDs\nexport { CLIENT_IDS, EXPERIMENT_IDS } from './clients';\n\nexport {\n type EmbedFeatureToggleResult,\n type FeatureToggleReader,\n createFeatureToggleReader,\n FeatureToggleProvider,\n useFeatureToggles,\n useFeatureToggle,\n} from './featureToggles/FeatureToggleContext';\n\n// Dev-only chrome injection contract for client packages\nexport type { DevEnvironment } from './client/devEnvironment';\n\n// Part types and helpers\nexport {\n type PartType,\n type Part,\n type HeadingPart,\n type ImagePart,\n type LinkPart,\n type ListPart,\n type ListItemPart,\n type KpiItemPart,\n type CardPart,\n type IconPart,\n type CalloutPart,\n type EntityPart,\n getPartsByType,\n getPartByRole,\n getAllByRole,\n getHeading,\n getImages,\n getLinks,\n extractContent,\n extractContentMarkdown,\n deriveRole,\n} from './parts/parts';\n\n// Component types\nexport type {\n BaseCompProps,\n SlotCompProps,\n SectionCompProps,\n SectionCompPropsWithSlot,\n TextCompProps,\n ButtonCompProps,\n ImageCompProps,\n BadgeCompProps,\n HeroButton,\n KpiItemCompProps,\n FeatureItemCompProps,\n FeatureCardCompProps,\n EntityItemData,\n EntityItem,\n GenericEntityData,\n GenericEntityCompProps,\n ComparisonRow,\n ComparisonColumn,\n AiNarrativeCompProps,\n HeroCompProps,\n HeroEntityCompProps,\n KpiCompProps,\n FeatureCardsCompProps,\n EntityCompProps,\n ComparisonCompProps,\n TextBlockCompProps,\n Component,\n BaseComponent,\n SlotComponent,\n SectionComponent,\n TextComponent,\n ButtonComponent,\n ImageComponent,\n BadgeComponent,\n KpiItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n FeatureCardsSectionComponent,\n EntitySectionComponent,\n PropsOf,\n SectionFixture,\n CtaBannerCompProps,\n CtaBannerSectionComponent,\n CalloutCompProps,\n CalloutSectionComponent,\n NextStepsCompProps,\n NextStepsSectionComponent,\n FeatureSection9PlusCompProps,\n FeatureSection9PlusSectionComponent,\n ListItemsSectionCompProps,\n ListItemsSectionComponent,\n ErrorCompProps,\n ErrorSectionComponent,\n NullCompProps,\n NullSectionComponent,\n SolutionEntityCompProps,\n SolutionEntitySectionComponent,\n SolutionEntityData,\n BlogEntityCompProps,\n BlogEntitySectionComponent,\n BlogEntityData,\n GeneralTextCompProps,\n GeneralTextSectionComponent,\n PersonalizedNarrativeCompProps,\n PersonalizedNarrativeSectionComponent,\n} from './component/types';\n\n// Section definition\nexport type {\n SectionDefinition,\n ParseContext,\n ContextualImageResult,\n DropSection,\n} from './component/section-definition';\nexport { DROP_SECTION } from './component/section-definition';\n\n// Diagnostic types\nexport { DIAGNOSTIC_TYPES } from './component/diagnosticTypes';\nexport type { DiagnosticType } from './component/diagnosticTypes';\n\n// Image search filters\nexport {\n buildImageSearchFilter,\n type ImageSearchFilterString,\n} from './image/imageSearchFilterTypes';\nexport {\n ImageSearchFilterToken,\n backgroundFilter,\n} from './image/imageSearchFilters';\nexport type {\n ContextualImageAsset,\n ImageSourceInput,\n ResolvedImageSource,\n ResolvedImageSourceKind,\n} from './image/contextualImageTypes';\n\n// Section definition classes + createSdkRegistry\nexport {\n HeroSectionDefinition,\n HeroEntitySectionDefinition,\n KpiSectionDefinition,\n FeatureCardsSectionDefinition,\n EntitySectionDefinition,\n EntityCollectionSectionDefinition,\n ComparisonSectionDefinition,\n TextBlockSectionDefinition,\n CtaBannerSectionDefinition,\n CalloutSectionDefinition,\n NextStepsSectionDefinition,\n FeatureSection9PlusDefinition,\n ListItemsSectionDefinition,\n SkipNodesSectionDefinition,\n HtmlCommentSectionDefinition,\n SearchSectionDefinition,\n ErrorSectionDefinition,\n FallbackSectionDefinition,\n createSdkRegistry,\n} from './component/componentDefinitions';\n\n// Registry\nexport { ComponentRegistry } from './registry';\nexport type {\n SlotOptions,\n SectionOptions,\n SectionRegistration,\n SlotNode,\n SlotIntentNode,\n SectionIntentNode,\n SectionNode,\n SlotVariant,\n SectionVariant,\n RegistryCatalog,\n ActionResult,\n ActionHandler,\n} from './registry';\n\n// Pattern validator\nexport {\n validatePattern,\n validatePatternSyntax,\n validatePatternWithBlocks,\n type PatternValidationResult,\n type BlockElement,\n type EnrichedBlockElement,\n type LinkMetadata,\n type LinkAttribute,\n} from './patternValidator';\n\n// Markdown blocks\nexport {\n convertToBlockElements,\n convertToBlockElementsWithMapping,\n type BlockElementsWithMapping,\n} from './markdownBlocks';\n\n// Link types, enum & guards\nexport {\n Web5UrlType,\n type Web5AskUrl,\n type Web5EntityUrl,\n type Web5ImageUrl,\n type Web5IconUrl,\n type Web5ActionUrl,\n type Web5SearchUrl,\n type Web5Url,\n type HttpsUrl,\n type HttpUrl,\n type MailtoUrl,\n type RelativeUrl,\n type NavigableUrl,\n type ValidLinkUrl,\n type AnyKnownUrl,\n type LegacyUrl,\n isWeb5AskUrl,\n isWeb5EntityUrl,\n isWeb5ImageUrl,\n isWeb5IconUrl,\n isWeb5ActionUrl,\n isWeb5SearchUrl,\n isWeb5Url,\n isNavigableUrl,\n isValidLinkUrl,\n isLegacyUrl,\n} from './types/link-types';\n\n// Entity/URL parsing\nexport {\n parseWeb5Url,\n isValidWeb5Url,\n validateLinkUrl,\n type Web5UrlParsed,\n type Web5AskParsed,\n type Web5EntityParsed,\n type Web5ImageParsed,\n type Web5IconParsed,\n type Web5ActionParsed,\n type Web5SearchParsed,\n isEntityLink,\n parseEntityLink,\n extractProtocol,\n extractLinkMetadata,\n} from './utils/entityLinkParser';\n\n// Web5 link validation\nexport {\n findInvalidWeb5Links,\n type InvalidWeb5Link,\n} from './utils/web5LinkValidator';\n\n// Node matchers\nexport { hasImage, isHtmlComment } from './utils/nodeMatchers';\n\n// Match API\nexport {\n matchMarkdown,\n type MarkdownMatchResult,\n matchAllSections,\n type MatchAllSectionsResult,\n nodesToParts,\n} from './match';\n\n// ---------------------------------------------------------------------------\n// DI Infrastructure (moved from @wix/w5-client-circana)\n// ---------------------------------------------------------------------------\n\n// DI context and provider\nexport {\n ComponentDependenciesProvider,\n useComponentDependencies,\n type ComponentDependenciesProviderProps,\n} from './context/ComponentDependenciesContext';\n\n// Raw user query for the current response page\nexport {\n UserQueryProvider,\n useUserQuery,\n type UserQueryProviderProps,\n} from './context/UserQueryContext';\n\n// Chips context (suggestion chips shared between SearchSection and error states)\nexport {\n ChipsProvider,\n useChips,\n type SuggestionChip,\n} from './context/ChipsContext';\n\n// DI types\nexport type {\n ComponentDependencies,\n Web5LinkApi,\n ConversationApi,\n SendMessageTrackingOptions,\n SendMessageOptions,\n ComparisonSubmitPayload,\n ComparisonSelectedProduct,\n ProductComparisonSelectionState,\n ProductComparisonApi,\n EntityTransforms,\n MarkdownUtils,\n ResolveGenericEntityDataOptions,\n} from './types/dependencies';\nexport type {\n ApiPayloadItem,\n EntityTypeConfig,\n EntityConfig,\n EntityExtractionContext,\n} from './types/entity';\nexport {\n defaultExtractor,\n enrichEntitiesFromPayload,\n fetchEntityListData,\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n getEntityExtractor,\n registerEntityExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n} from './entity';\nexport { CALLOUT_KINDS, type CalloutKind, type Callout } from './types/callout';\n\n// Wrapper hooks\nexport { useWeb5Link } from './hooks/useWeb5Link';\nexport { useConversation } from './hooks/useConversation';\nexport { useDebugImageContext } from './hooks/useDebugImageContext';\nexport { useResolvedImageSources } from './hooks/useResolvedImageSources';\nexport { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData';\nexport { useEntityTransforms } from './hooks/useEntityTransforms';\nexport { useMarkdownUtils } from './hooks/useMarkdownUtils';\nexport { useResolveShopifyEntityData } from './hooks/useResolveShopifyEntityData';\nexport { useResolveSearchSpringEntityData } from './hooks/useResolveSearchSpringEntityData';\n\n// SearchSpring\nexport {\n fetchProductsByHandles,\n fetchProductsByHandlesMap,\n transformSSProductToEntityItemData,\n} from './services/searchspring';\nexport type {\n SearchSpringConfig,\n SSProduct,\n SSSearchResponse,\n SSSizeData,\n} from './services/searchspring';\n\n// Shopify Storefront API\n// Cart actions\nexport { addToCart } from './services/cart';\n\nexport {\n ShopifyStorefrontClient,\n resolveShopifyConfig,\n resolveShopifyEntity,\n transformShopifyProduct,\n transformShopifyCollection,\n transformShopifyArticle,\n transformShopifyEntityToItemData,\n PRODUCT_BY_HANDLE_QUERY,\n COLLECTION_BY_HANDLE_QUERY,\n ARTICLE_BY_HANDLE_QUERY,\n} from './services/shopify';\nexport type {\n ShopifyStorefrontConfig,\n ShopifyProduct,\n ShopifyCollection,\n ShopifyArticle,\n ShopifyImage,\n ShopifyMoneyV2,\n} from './services/shopify';\n\n// Utilities\nexport { cn } from './lib/utils';\nexport { normalizeImageUrl, getResizedImageUrl } from './utils/image-utils';\nexport {\n analyzeBackdrop,\n computeContentBBox,\n buildProbeUrl,\n loadImagePixels,\n loadBackdropAnalysis,\n type BackdropAnalysis,\n type ContentBBox,\n type ImagePixels,\n} from './utils/imageBackdrop';\nexport { stripMarkdown } from './component/componentDefinitions/parse-utils';\n\n// Color utilities\nexport {\n type RGB,\n rgbToHsl,\n hslToRgb,\n ensureMinLightness,\n toRgb,\n deriveDarkColor,\n deriveDarkGradient,\n deriveLightColor,\n} from './color/colorUtils';\n\n// Analytics\nexport {\n pushEvent,\n pushPromptSubmit,\n pushLinkClick,\n pushError,\n pushExit,\n pushEntityFiltered,\n hasAnalyticsConsent,\n type EntityFilteredReason,\n} from './utils/analyticsEvents';\n\n// Error handling types and utilities\nexport {\n type ConversationErrorType,\n ERROR_MARKDOWN,\n getErrorTypeFromStatus,\n createErrorMarkdown,\n STREAMING_TIMEOUT_MS,\n type ErrorActionType,\n type ErrorIconType,\n type ErrorTemplateButton,\n type ErrorTemplate,\n type ErrorTemplateOverrides,\n DEFAULT_ERROR_TEMPLATES,\n resolveErrorTemplate,\n} from './errors';\n\n// Navigation utilities\nexport {\n getForwardStack,\n setForwardStack,\n clearForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n} from './utils/navigationStack';\n\n// UI components\nexport {\n UserQuery,\n type UserQueryProps,\n type ProductBackContext,\n} from './components/ui/UserQuery';\nexport {\n PRODUCT_BACK_SESSION_KEY,\n writeProductBackHandoff,\n readProductBackHandoff,\n type ProductBackHandoff,\n} from './utils/productBackHandoff';\nexport {\n PromptEntryEmptyState,\n type PromptEntryEmptyStateProps,\n} from './components/ui/PromptEntryEmptyState';\nexport {\n SearchSection,\n type SearchSectionProps,\n type SearchSectionHandle,\n type ScrollChip,\n} from './components/ui/SearchSection';\nexport {\n FeedbackBar,\n type FeedbackBarProps,\n type FeedbackCategoryOption,\n type FeedbackSentiment,\n type FeedbackSubmitInput,\n} from './components/ui/FeedbackBar';\nexport {\n Disclaimer,\n type DisclaimerProps,\n} from './components/ui/Disclaimer';\nexport {\n BottomContainer,\n type BottomContainerProps,\n} from './components/ui/BottomContainer';\nexport { MarkdownText } from './components/ui/MarkdownText';\nexport {\n CalloutBlock,\n type CalloutBlockProps,\n} from './components/ui/CalloutBlock';\nexport {\n OptimizedImage,\n type OptimizedImageProps,\n} from './components/ui/OptimizedImage';\nexport {\n SectionSkeleton,\n type SectionSkeletonProps,\n} from './components/ui/SectionSkeleton';\nexport { SmartIcon, type SmartIconProps } from './components/ui/SmartIcon';\nexport { Loader, type LoaderProps } from './components/ui/Loader';\nexport {\n PlacementLoader,\n type PlacementLoaderProps,\n} from './components/ui/PlacementLoader';\nexport {\n UnifiedLink,\n detectLinkType,\n type UnifiedLinkProps,\n LinkType,\n type LinkVariant,\n} from './components/ui/UnifiedLink';\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from './components/ui/table';\n\n// Placement (DL #088, DL #102 behavior declarations)\nexport type {\n PlacementBehaviorConfig,\n PlacementConfig,\n PlacementPrompts,\n} from './types/placement';\n\n// Cross-bundle user-query broadcast event (DL #097 D2)\nexport {\n WEB5_USER_QUERY_EVENT,\n type Web5UserQueryEventDetail,\n type Web5UserQueryEvent,\n} from './types/userQueryEvent';\n\n// Cross-bundle answer-updated broadcast event (B2B-4121)\nexport {\n WEB5_ANSWER_UPDATED_EVENT,\n type Web5AnswerUpdatedEventDetail,\n type Web5AnswerUpdatedEvent,\n} from './types/answerUpdatedEvent';\n\n// Cross-bundle redirect broadcast event (DL #098 D3)\nexport {\n WEB5_REDIRECT_EVENT,\n type Web5RedirectEventDetail,\n type Web5RedirectEvent,\n type Web5RedirectReason,\n} from './types/redirectEvent';\n// `placementFilter` was removed — hero/next-steps exclusion is the prompt's job\n// and placement-specific designs belong as `{ placement: true }` registry\n// variants (resolved automatically via `resolveSection(type, { placement: true })`).\n\n// Client bundle loader (DL #088 D3.3)\nexport { loadClientBundle } from './client/loadClientBundle';\n\n// `?clientBundleUrl=` dev override — shared by `web50-server-ui` and\n// `embed-placement` so the trusted-host gate can't drift between them.\nexport {\n getClientBundleOverride,\n isTrustedBundleHost,\n} from './client/clientBundleOverride';\n\n// Client-UMD URL resolution (DL #094 per-msid, DL #129 per-template) and the\n// universal bundle←backend config merge (DL #129 Q3/Q7) — shared by\n// `web50-server-ui` and `embed-placement`, the two client-bundle load sites.\nexport {\n TEMPLATES_CDN_BASE,\n TEMPLATES_MANIFEST_URL,\n getTemplateOverride,\n isTemplatePickerRequested,\n isValidTemplateId,\n resolveClientBundleUrl,\n} from './client/clientBundleUrl';\nexport { mergeClientConfig, type DeepPartial } from './client/mergeClientConfig';\nexport {\n applyThemeOverrides,\n THEME_OVERRIDE_TOKENS,\n type ThemeOverrideKey,\n type ThemeOverrides,\n} from './client/applyThemeOverrides';\n\n// Placement renderer + DI helper (DL #088 D3.2, D3.4)\nexport {\n PlacementResponseRenderer,\n PlacementSmoothHeight,\n type PlacementResponseRendererProps,\n type PlacementSection,\n type PlacementVariant,\n} from './components/placement/PlacementResponseRenderer';\nexport {\n buildPlacementDependencies,\n type BuildPlacementDependenciesOptions,\n} from './components/placement/buildPlacementDependencies';\nexport {\n PlacementPayloadProvider,\n usePlacementPayload,\n type PlacementPayloadContextValue,\n} from './components/placement/PlacementPayloadContext';\n\n// Markdown parsing utilities — lifted from web50-server-ui (DL #088 B9.1)\nexport {\n UnifiedMarkdownParser,\n parseMarkdownToAst,\n parseAstToMarkdown,\n} from './utils/unifiedMarkdownParser';\nexport {\n escapeWeb5Links,\n fixMalformedLinks,\n trimTrailingWhitespace,\n normalizeIconUrls,\n decodeLinkText,\n preprocessMarkdown,\n type PreprocessorDiagnostic,\n type PreprocessResult,\n} from './utils/markdownPreprocessor';\nexport {\n ComponentTracking,\n type ComponentNodeRange,\n} from './utils/componentTracking';\nexport {\n findKeywordsInContent,\n getContextualImageFilename,\n} from './utils/contentKeywordMatcher';\nexport {\n extractIntentFromMarkdown,\n getIntentFromMarkdown,\n type IntentInfo,\n type IntentExtractionOptions,\n type ResponseState,\n} from './utils/intentExtractor';\nexport type { PageSection } from './types/page-section';\nexport {\n createPageSection,\n generateSectionId,\n generateId,\n findImageInNode,\n findImageInChildren,\n type Product,\n type ComparisonProduct,\n type ProductComparisonSectionProps,\n} from './utils/propsExtractor';\nexport {\n DiagnosticsCollector,\n type DiagnosticEntry,\n} from './utils/diagnosticsCollector';\nexport {\n REFRESH_PROMPTS_UNTIL_KEY,\n REFRESH_PROMPTS_WINDOW_MS,\n getRefreshPromptsExpiry,\n shouldRefreshPrompts,\n enableRefreshPrompts,\n disableRefreshPrompts,\n} from './utils/refreshPrompts';\nexport {\n type BackendEnvironment,\n BACKEND_ENVIRONMENT_KEY,\n BACKEND_ENVIRONMENT_QUERY_PARAM,\n DEFAULT_BACKEND_ENVIRONMENT,\n getBackendEnvironment,\n setBackendEnvironment,\n usesStagingBackend,\n} from './utils/backendEnvironment';\nexport {\n MATCH_DEBUG_KEY,\n MATCH_DEBUG_QUERY_PARAM,\n isMatchDebugEnabled,\n setMatchDebug,\n resetMatchDebugCache,\n logMatchDebug,\n} from './utils/matchDebug';\nexport { createWixAuthFetch } from './client/wixAuthFetch';\nexport {\n getOrCreateSessionId,\n getSessionId,\n getChatId,\n startNewChatId,\n setChatId,\n resetChatIdForTests,\n} from './utils/sessionManager';\n\n// Component parser orchestrator — lifted from web50-server-ui (DL #088 B9.5)\nexport {\n parseMarkdownToComponents,\n tryParseComponent,\n mergeSectionsWithStableReferences,\n type ParseMarkdownOptions,\n type ParseMarkdownResult,\n type ComponentMatch,\n type ParserContext,\n} from './component/componentParser';\nexport type {\n ParserClientConfig,\n EnrichEntityProps,\n} from './component/parser-types';\n\n// Host-mount scope contract — shared by web50-server-ui (which stamps the\n// class and mounts), embed-placement (which mounts the same bundle elsewhere),\n// and the client CDN build (which compiles every selector against it).\nexport {\n WEB5_ROOT_ID,\n WEB5_ROOT_CLASS,\n WEB5_SCOPES,\n WEB5_SCOPE,\n WEB5_GLOBAL_TOKENS,\n type HostFitConfig,\n} from './hostScope';\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAAuDC,OAAA,CAAAC,UAAA,GAAAH,QAAA,CAAAG,UAAA;AAAAD,OAAA,CAAAE,cAAA,GAAAJ,QAAA,CAAAI,cAAA;AAEvD,IAAAC,qBAAA,GAAAJ,OAAA;AAO+CC,OAAA,CAAAI,yBAAA,GAAAD,qBAAA,CAAAC,yBAAA;AAAAJ,OAAA,CAAAK,qBAAA,GAAAF,qBAAA,CAAAE,qBAAA;AAAAL,OAAA,CAAAM,iBAAA,GAAAH,qBAAA,CAAAG,iBAAA;AAAAN,OAAA,CAAAO,gBAAA,GAAAJ,qBAAA,CAAAI,gBAAA;AAM/C,IAAAC,MAAA,GAAAT,OAAA;AAsBuBC,OAAA,CAAAS,cAAA,GAAAD,MAAA,CAAAC,cAAA;AAAAT,OAAA,CAAAU,aAAA,GAAAF,MAAA,CAAAE,aAAA;AAAAV,OAAA,CAAAW,YAAA,GAAAH,MAAA,CAAAG,YAAA;AAAAX,OAAA,CAAAY,UAAA,GAAAJ,MAAA,CAAAI,UAAA;AAAAZ,OAAA,CAAAa,SAAA,GAAAL,MAAA,CAAAK,SAAA;AAAAb,OAAA,CAAAc,QAAA,GAAAN,MAAA,CAAAM,QAAA;AAAAd,OAAA,CAAAe,cAAA,GAAAP,MAAA,CAAAO,cAAA;AAAAf,OAAA,CAAAgB,sBAAA,GAAAR,MAAA,CAAAQ,sBAAA;AAAAhB,OAAA,CAAAiB,UAAA,GAAAT,MAAA,CAAAS,UAAA;AAqFvB,IAAAC,kBAAA,GAAAnB,OAAA;AAA8DC,OAAA,CAAAmB,YAAA,GAAAD,kBAAA,CAAAC,YAAA;AAG9D,IAAAC,gBAAA,GAAArB,OAAA;AAA+DC,OAAA,CAAAqB,gBAAA,GAAAD,gBAAA,CAAAC,gBAAA;AAI/D,IAAAC,uBAAA,GAAAvB,OAAA;AAGwCC,OAAA,CAAAuB,sBAAA,GAAAD,uBAAA,CAAAC,sBAAA;AACxC,IAAAC,mBAAA,GAAAzB,OAAA;AAGoCC,OAAA,CAAAyB,sBAAA,GAAAD,mBAAA,CAAAC,sBAAA;AAAAzB,OAAA,CAAA0B,gBAAA,GAAAF,mBAAA,CAAAE,gBAAA;AASpC,IAAAC,qBAAA,GAAA5B,OAAA;AAoB0CC,OAAA,CAAA4B,qBAAA,GAAAD,qBAAA,CAAAC,qBAAA;AAAA5B,OAAA,CAAA6B,2BAAA,GAAAF,qBAAA,CAAAE,2BAAA;AAAA7B,OAAA,CAAA8B,oBAAA,GAAAH,qBAAA,CAAAG,oBAAA;AAAA9B,OAAA,CAAA+B,6BAAA,GAAAJ,qBAAA,CAAAI,6BAAA;AAAA/B,OAAA,CAAAgC,uBAAA,GAAAL,qBAAA,CAAAK,uBAAA;AAAAhC,OAAA,CAAAiC,iCAAA,GAAAN,qBAAA,CAAAM,iCAAA;AAAAjC,OAAA,CAAAkC,2BAAA,GAAAP,qBAAA,CAAAO,2BAAA;AAAAlC,OAAA,CAAAmC,0BAAA,GAAAR,qBAAA,CAAAQ,0BAAA;AAAAnC,OAAA,CAAAoC,0BAAA,GAAAT,qBAAA,CAAAS,0BAAA;AAAApC,OAAA,CAAAqC,wBAAA,GAAAV,qBAAA,CAAAU,wBAAA;AAAArC,OAAA,CAAAsC,0BAAA,GAAAX,qBAAA,CAAAW,0BAAA;AAAAtC,OAAA,CAAAuC,6BAAA,GAAAZ,qBAAA,CAAAY,6BAAA;AAAAvC,OAAA,CAAAwC,0BAAA,GAAAb,qBAAA,CAAAa,0BAAA;AAAAxC,OAAA,CAAAyC,0BAAA,GAAAd,qBAAA,CAAAc,0BAAA;AAAAzC,OAAA,CAAA0C,4BAAA,GAAAf,qBAAA,CAAAe,4BAAA;AAAA1C,OAAA,CAAA2C,uBAAA,GAAAhB,qBAAA,CAAAgB,uBAAA;AAAA3C,OAAA,CAAA4C,sBAAA,GAAAjB,qBAAA,CAAAiB,sBAAA;AAAA5C,OAAA,CAAA6C,yBAAA,GAAAlB,qBAAA,CAAAkB,yBAAA;AAAA7C,OAAA,CAAA8C,iBAAA,GAAAnB,qBAAA,CAAAmB,iBAAA;AAG1C,IAAAC,SAAA,GAAAhD,OAAA;AAA+CC,OAAA,CAAAgD,iBAAA,GAAAD,SAAA,CAAAC,iBAAA;AAiB/C,IAAAC,iBAAA,GAAAlD,OAAA;AAS4BC,OAAA,CAAAkD,eAAA,GAAAD,iBAAA,CAAAC,eAAA;AAAAlD,OAAA,CAAAmD,qBAAA,GAAAF,iBAAA,CAAAE,qBAAA;AAAAnD,OAAA,CAAAoD,yBAAA,GAAAH,iBAAA,CAAAG,yBAAA;AAG5B,IAAAC,eAAA,GAAAtD,OAAA;AAI0BC,OAAA,CAAAsD,sBAAA,GAAAD,eAAA,CAAAC,sBAAA;AAAAtD,OAAA,CAAAuD,iCAAA,GAAAF,eAAA,CAAAE,iCAAA;AAG1B,IAAAC,UAAA,GAAAzD,OAAA;AA2B4BC,OAAA,CAAAyD,WAAA,GAAAD,UAAA,CAAAC,WAAA;AAAAzD,OAAA,CAAA0D,YAAA,GAAAF,UAAA,CAAAE,YAAA;AAAA1D,OAAA,CAAA2D,eAAA,GAAAH,UAAA,CAAAG,eAAA;AAAA3D,OAAA,CAAA4D,cAAA,GAAAJ,UAAA,CAAAI,cAAA;AAAA5D,OAAA,CAAA6D,aAAA,GAAAL,UAAA,CAAAK,aAAA;AAAA7D,OAAA,CAAA8D,eAAA,GAAAN,UAAA,CAAAM,eAAA;AAAA9D,OAAA,CAAA+D,eAAA,GAAAP,UAAA,CAAAO,eAAA;AAAA/D,OAAA,CAAAgE,SAAA,GAAAR,UAAA,CAAAQ,SAAA;AAAAhE,OAAA,CAAAiE,cAAA,GAAAT,UAAA,CAAAS,cAAA;AAAAjE,OAAA,CAAAkE,cAAA,GAAAV,UAAA,CAAAU,cAAA;AAAAlE,OAAA,CAAAmE,WAAA,GAAAX,UAAA,CAAAW,WAAA;AAG5B,IAAAC,iBAAA,GAAArE,OAAA;AAekCC,OAAA,CAAAqE,YAAA,GAAAD,iBAAA,CAAAC,YAAA;AAAArE,OAAA,CAAAsE,cAAA,GAAAF,iBAAA,CAAAE,cAAA;AAAAtE,OAAA,CAAAuE,eAAA,GAAAH,iBAAA,CAAAG,eAAA;AAAAvE,OAAA,CAAAwE,YAAA,GAAAJ,iBAAA,CAAAI,YAAA;AAAAxE,OAAA,CAAAyE,eAAA,GAAAL,iBAAA,CAAAK,eAAA;AAAAzE,OAAA,CAAA0E,eAAA,GAAAN,iBAAA,CAAAM,eAAA;AAAA1E,OAAA,CAAA2E,mBAAA,GAAAP,iBAAA,CAAAO,mBAAA;AAGlC,IAAAC,kBAAA,GAAA7E,OAAA;AAGmCC,OAAA,CAAA6E,oBAAA,GAAAD,kBAAA,CAAAC,oBAAA;AAGnC,IAAAC,aAAA,GAAA/E,OAAA;AAA+DC,OAAA,CAAA+E,QAAA,GAAAD,aAAA,CAAAC,QAAA;AAAA/E,OAAA,CAAAgF,aAAA,GAAAF,aAAA,CAAAE,aAAA;AAG/D,IAAAC,MAAA,GAAAlF,OAAA;AAMiBC,OAAA,CAAAkF,aAAA,GAAAD,MAAA,CAAAC,aAAA;AAAAlF,OAAA,CAAAmF,gBAAA,GAAAF,MAAA,CAAAE,gBAAA;AAAAnF,OAAA,CAAAoF,YAAA,GAAAH,MAAA,CAAAG,YAAA;AAOjB,IAAAC,6BAAA,GAAAtF,OAAA;AAIgDC,OAAA,CAAAsF,6BAAA,GAAAD,6BAAA,CAAAC,6BAAA;AAAAtF,OAAA,CAAAuF,wBAAA,GAAAF,6BAAA,CAAAE,wBAAA;AAGhD,IAAAC,iBAAA,GAAAzF,OAAA;AAIoCC,OAAA,CAAAyF,iBAAA,GAAAD,iBAAA,CAAAC,iBAAA;AAAAzF,OAAA,CAAA0F,YAAA,GAAAF,iBAAA,CAAAE,YAAA;AAGpC,IAAAC,aAAA,GAAA5F,OAAA;AAIgCC,OAAA,CAAA4F,aAAA,GAAAD,aAAA,CAAAC,aAAA;AAAA5F,OAAA,CAAA6F,QAAA,GAAAF,aAAA,CAAAE,QAAA;AAuBhC,IAAAC,OAAA,GAAA/F,OAAA;AAWkBC,OAAA,CAAA+F,gBAAA,GAAAD,OAAA,CAAAC,gBAAA;AAAA/F,OAAA,CAAAgG,yBAAA,GAAAF,OAAA,CAAAE,yBAAA;AAAAhG,OAAA,CAAAiG,mBAAA,GAAAH,OAAA,CAAAG,mBAAA;AAAAjG,OAAA,CAAAkG,eAAA,GAAAJ,OAAA,CAAAI,eAAA;AAAAlG,OAAA,CAAAmG,mBAAA,GAAAL,OAAA,CAAAK,mBAAA;AAAAnG,OAAA,CAAAoG,kBAAA,GAAAN,OAAA,CAAAM,kBAAA;AAAApG,OAAA,CAAAqG,uBAAA,GAAAP,OAAA,CAAAO,uBAAA;AAAArG,OAAA,CAAAsG,6BAAA,GAAAR,OAAA,CAAAQ,6BAAA;AAAAtG,OAAA,CAAAuG,6BAAA,GAAAT,OAAA,CAAAS,6BAAA;AAAAvG,OAAA,CAAAwG,4BAAA,GAAAV,OAAA,CAAAU,4BAAA;AAMlB,IAAAC,QAAA,GAAA1G,OAAA;AAAgFC,OAAA,CAAA0G,aAAA,GAAAD,QAAA,CAAAC,aAAA;AAGhF,IAAAC,YAAA,GAAA5G,OAAA;AAAkDC,OAAA,CAAA4G,WAAA,GAAAD,YAAA,CAAAC,WAAA;AAClD,IAAAC,gBAAA,GAAA9G,OAAA;AAA0DC,OAAA,CAAA8G,eAAA,GAAAD,gBAAA,CAAAC,eAAA;AAC1D,IAAAC,qBAAA,GAAAhH,OAAA;AAAoEC,OAAA,CAAAgH,oBAAA,GAAAD,qBAAA,CAAAC,oBAAA;AACpE,IAAAC,wBAAA,GAAAlH,OAAA;AAA0EC,OAAA,CAAAkH,uBAAA,GAAAD,wBAAA,CAAAC,uBAAA;AAC1E,IAAAC,4BAAA,GAAApH,OAAA;AAAkFC,OAAA,CAAAoH,2BAAA,GAAAD,4BAAA,CAAAC,2BAAA;AAClF,IAAAC,oBAAA,GAAAtH,OAAA;AAAkEC,OAAA,CAAAsH,mBAAA,GAAAD,oBAAA,CAAAC,mBAAA;AAClE,IAAAC,iBAAA,GAAAxH,OAAA;AAA4DC,OAAA,CAAAwH,gBAAA,GAAAD,iBAAA,CAAAC,gBAAA;AAC5D,IAAAC,4BAAA,GAAA1H,OAAA;AAAkFC,OAAA,CAAA0H,2BAAA,GAAAD,4BAAA,CAAAC,2BAAA;AAClF,IAAAC,iCAAA,GAAA5H,OAAA;AAA4FC,OAAA,CAAA4H,gCAAA,GAAAD,iCAAA,CAAAC,gCAAA;AAG5F,IAAAC,aAAA,GAAA9H,OAAA;AAIiCC,OAAA,CAAA8H,sBAAA,GAAAD,aAAA,CAAAC,sBAAA;AAAA9H,OAAA,CAAA+H,yBAAA,GAAAF,aAAA,CAAAE,yBAAA;AAAA/H,OAAA,CAAAgI,kCAAA,GAAAH,aAAA,CAAAG,kCAAA;AAUjC,IAAAC,KAAA,GAAAlI,OAAA;AAA4CC,OAAA,CAAAkI,SAAA,GAAAD,KAAA,CAAAC,SAAA;AAE5C,IAAAC,QAAA,GAAApI,OAAA;AAW4BC,OAAA,CAAAoI,uBAAA,GAAAD,QAAA,CAAAC,uBAAA;AAAApI,OAAA,CAAAqI,oBAAA,GAAAF,QAAA,CAAAE,oBAAA;AAAArI,OAAA,CAAAsI,oBAAA,GAAAH,QAAA,CAAAG,oBAAA;AAAAtI,OAAA,CAAAuI,uBAAA,GAAAJ,QAAA,CAAAI,uBAAA;AAAAvI,OAAA,CAAAwI,0BAAA,GAAAL,QAAA,CAAAK,0BAAA;AAAAxI,OAAA,CAAAyI,uBAAA,GAAAN,QAAA,CAAAM,uBAAA;AAAAzI,OAAA,CAAA0I,gCAAA,GAAAP,QAAA,CAAAO,gCAAA;AAAA1I,OAAA,CAAA2I,uBAAA,GAAAR,QAAA,CAAAQ,uBAAA;AAAA3I,OAAA,CAAA4I,0BAAA,GAAAT,QAAA,CAAAS,0BAAA;AAAA5I,OAAA,CAAA6I,uBAAA,GAAAV,QAAA,CAAAU,uBAAA;AAW5B,IAAAC,MAAA,GAAA/I,OAAA;AAAiCC,OAAA,CAAA+I,EAAA,GAAAD,MAAA,CAAAC,EAAA;AACjC,IAAAC,WAAA,GAAAjJ,OAAA;AAA4EC,OAAA,CAAAiJ,iBAAA,GAAAD,WAAA,CAAAC,iBAAA;AAAAjJ,OAAA,CAAAkJ,kBAAA,GAAAF,WAAA,CAAAE,kBAAA;AAC5E,IAAAC,cAAA,GAAApJ,OAAA;AAS+BC,OAAA,CAAAoJ,eAAA,GAAAD,cAAA,CAAAC,eAAA;AAAApJ,OAAA,CAAAqJ,kBAAA,GAAAF,cAAA,CAAAE,kBAAA;AAAArJ,OAAA,CAAAsJ,aAAA,GAAAH,cAAA,CAAAG,aAAA;AAAAtJ,OAAA,CAAAuJ,eAAA,GAAAJ,cAAA,CAAAI,eAAA;AAAAvJ,OAAA,CAAAwJ,oBAAA,GAAAL,cAAA,CAAAK,oBAAA;AAC/B,IAAAC,WAAA,GAAA1J,OAAA;AAA6EC,OAAA,CAAA0J,aAAA,GAAAD,WAAA,CAAAC,aAAA;AAG7E,IAAAC,WAAA,GAAA5J,OAAA;AAS4BC,OAAA,CAAA4J,QAAA,GAAAD,WAAA,CAAAC,QAAA;AAAA5J,OAAA,CAAA6J,QAAA,GAAAF,WAAA,CAAAE,QAAA;AAAA7J,OAAA,CAAA8J,kBAAA,GAAAH,WAAA,CAAAG,kBAAA;AAAA9J,OAAA,CAAA+J,KAAA,GAAAJ,WAAA,CAAAI,KAAA;AAAA/J,OAAA,CAAAgK,eAAA,GAAAL,WAAA,CAAAK,eAAA;AAAAhK,OAAA,CAAAiK,kBAAA,GAAAN,WAAA,CAAAM,kBAAA;AAAAjK,OAAA,CAAAkK,gBAAA,GAAAP,WAAA,CAAAO,gBAAA;AAG5B,IAAAC,gBAAA,GAAApK,OAAA;AASiCC,OAAA,CAAAoK,SAAA,GAAAD,gBAAA,CAAAC,SAAA;AAAApK,OAAA,CAAAqK,gBAAA,GAAAF,gBAAA,CAAAE,gBAAA;AAAArK,OAAA,CAAAsK,aAAA,GAAAH,gBAAA,CAAAG,aAAA;AAAAtK,OAAA,CAAAuK,SAAA,GAAAJ,gBAAA,CAAAI,SAAA;AAAAvK,OAAA,CAAAwK,QAAA,GAAAL,gBAAA,CAAAK,QAAA;AAAAxK,OAAA,CAAAyK,kBAAA,GAAAN,gBAAA,CAAAM,kBAAA;AAAAzK,OAAA,CAAA0K,mBAAA,GAAAP,gBAAA,CAAAO,mBAAA;AAGjC,IAAAC,OAAA,GAAA5K,OAAA;AAakBC,OAAA,CAAA4K,cAAA,GAAAD,OAAA,CAAAC,cAAA;AAAA5K,OAAA,CAAA6K,sBAAA,GAAAF,OAAA,CAAAE,sBAAA;AAAA7K,OAAA,CAAA8K,mBAAA,GAAAH,OAAA,CAAAG,mBAAA;AAAA9K,OAAA,CAAA+K,oBAAA,GAAAJ,OAAA,CAAAI,oBAAA;AAAA/K,OAAA,CAAAgL,uBAAA,GAAAL,OAAA,CAAAK,uBAAA;AAAAhL,OAAA,CAAAiL,oBAAA,GAAAN,OAAA,CAAAM,oBAAA;AAGlB,IAAAC,gBAAA,GAAAnL,OAAA;AAMiCC,OAAA,CAAAmL,eAAA,GAAAD,gBAAA,CAAAC,eAAA;AAAAnL,OAAA,CAAAoL,eAAA,GAAAF,gBAAA,CAAAE,eAAA;AAAApL,OAAA,CAAAqL,iBAAA,GAAAH,gBAAA,CAAAG,iBAAA;AAAArL,OAAA,CAAAsL,kBAAA,GAAAJ,gBAAA,CAAAI,kBAAA;AAAAtL,OAAA,CAAAuL,mBAAA,GAAAL,gBAAA,CAAAK,mBAAA;AAGjC,IAAAC,UAAA,GAAAzL,OAAA;AAImCC,OAAA,CAAAyL,SAAA,GAAAD,UAAA,CAAAC,SAAA;AACnC,IAAAC,mBAAA,GAAA3L,OAAA;AAKoCC,OAAA,CAAA2L,wBAAA,GAAAD,mBAAA,CAAAC,wBAAA;AAAA3L,OAAA,CAAA4L,uBAAA,GAAAF,mBAAA,CAAAE,uBAAA;AAAA5L,OAAA,CAAA6L,sBAAA,GAAAH,mBAAA,CAAAG,sBAAA;AACpC,IAAAC,sBAAA,GAAA/L,OAAA;AAG+CC,OAAA,CAAA+L,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AAC/C,IAAAC,cAAA,GAAAjM,OAAA;AAKuCC,OAAA,CAAAiM,aAAA,GAAAD,cAAA,CAAAC,aAAA;AACvC,IAAAC,YAAA,GAAAnM,OAAA;AAMqCC,OAAA,CAAAmM,WAAA,GAAAD,YAAA,CAAAC,WAAA;AACrC,IAAAC,WAAA,GAAArM,OAAA;AAGoCC,OAAA,CAAAqM,UAAA,GAAAD,WAAA,CAAAC,UAAA;AACpC,IAAAC,gBAAA,GAAAvM,OAAA;AAGyCC,OAAA,CAAAuM,eAAA,GAAAD,gBAAA,CAAAC,eAAA;AACzC,IAAAC,aAAA,GAAAzM,OAAA;AAA4DC,OAAA,CAAAyM,YAAA,GAAAD,aAAA,CAAAC,YAAA;AAC5D,IAAAC,aAAA,GAAA3M,OAAA;AAGsCC,OAAA,CAAA2M,YAAA,GAAAD,aAAA,CAAAC,YAAA;AACtC,IAAAC,eAAA,GAAA7M,OAAA;AAGwCC,OAAA,CAAA6M,cAAA,GAAAD,eAAA,CAAAC,cAAA;AACxC,IAAAC,gBAAA,GAAA/M,OAAA;AAGyCC,OAAA,CAAA+M,eAAA,GAAAD,gBAAA,CAAAC,eAAA;AACzC,IAAAC,UAAA,GAAAjN,OAAA;AAA2EC,OAAA,CAAAiN,SAAA,GAAAD,UAAA,CAAAC,SAAA;AAC3E,IAAAC,OAAA,GAAAnN,OAAA;AAAkEC,OAAA,CAAAmN,MAAA,GAAAD,OAAA,CAAAC,MAAA;AAClE,IAAAC,gBAAA,GAAArN,OAAA;AAGyCC,OAAA,CAAAqN,eAAA,GAAAD,gBAAA,CAAAC,eAAA;AACzC,IAAAC,YAAA,GAAAvN,OAAA;AAMqCC,OAAA,CAAAuN,WAAA,GAAAD,YAAA,CAAAC,WAAA;AAAAvN,OAAA,CAAAwN,cAAA,GAAAF,YAAA,CAAAE,cAAA;AAAAxN,OAAA,CAAAyN,QAAA,GAAAH,YAAA,CAAAG,QAAA;AACrC,IAAAC,MAAA,GAAA3N,OAAA;AAS+BC,OAAA,CAAA2N,KAAA,GAAAD,MAAA,CAAAC,KAAA;AAAA3N,OAAA,CAAA4N,WAAA,GAAAF,MAAA,CAAAE,WAAA;AAAA5N,OAAA,CAAA6N,SAAA,GAAAH,MAAA,CAAAG,SAAA;AAAA7N,OAAA,CAAA8N,WAAA,GAAAJ,MAAA,CAAAI,WAAA;AAAA9N,OAAA,CAAA+N,SAAA,GAAAL,MAAA,CAAAK,SAAA;AAAA/N,OAAA,CAAAgO,QAAA,GAAAN,MAAA,CAAAM,QAAA;AAAAhO,OAAA,CAAAiO,SAAA,GAAAP,MAAA,CAAAO,SAAA;AAAAjO,OAAA,CAAAkO,YAAA,GAAAR,MAAA,CAAAQ,YAAA;AAU/B,IAAAC,eAAA,GAAApO,OAAA;AAIgCC,OAAA,CAAAoO,qBAAA,GAAAD,eAAA,CAAAC,qBAAA;AAGhC,IAAAC,mBAAA,GAAAtO,OAAA;AAIoCC,OAAA,CAAAsO,yBAAA,GAAAD,mBAAA,CAAAC,yBAAA;AAGpC,IAAAC,cAAA,GAAAxO,OAAA;AAK+BC,OAAA,CAAAwO,mBAAA,GAAAD,cAAA,CAAAC,mBAAA;AAM/B,IAAAC,iBAAA,GAAA1O,OAAA;AAA6DC,OAAA,CAAA0O,gBAAA,GAAAD,iBAAA,CAAAC,gBAAA;AAI7D,IAAAC,qBAAA,GAAA5O,OAAA;AAGuCC,OAAA,CAAA4O,uBAAA,GAAAD,qBAAA,CAAAC,uBAAA;AAAA5O,OAAA,CAAA6O,mBAAA,GAAAF,qBAAA,CAAAE,mBAAA;AAKvC,IAAAC,gBAAA,GAAA/O,OAAA;AAOkCC,OAAA,CAAA+O,kBAAA,GAAAD,gBAAA,CAAAC,kBAAA;AAAA/O,OAAA,CAAAgP,sBAAA,GAAAF,gBAAA,CAAAE,sBAAA;AAAAhP,OAAA,CAAAiP,mBAAA,GAAAH,gBAAA,CAAAG,mBAAA;AAAAjP,OAAA,CAAAkP,yBAAA,GAAAJ,gBAAA,CAAAI,yBAAA;AAAAlP,OAAA,CAAAmP,iBAAA,GAAAL,gBAAA,CAAAK,iBAAA;AAAAnP,OAAA,CAAAoP,sBAAA,GAAAN,gBAAA,CAAAM,sBAAA;AAClC,IAAAC,kBAAA,GAAAtP,OAAA;AAAiFC,OAAA,CAAAsP,iBAAA,GAAAD,kBAAA,CAAAC,iBAAA;AACjF,IAAAC,oBAAA,GAAAxP,OAAA;AAKsCC,OAAA,CAAAwP,mBAAA,GAAAD,oBAAA,CAAAC,mBAAA;AAAAxP,OAAA,CAAAyP,qBAAA,GAAAF,oBAAA,CAAAE,qBAAA;AAGtC,IAAAC,0BAAA,GAAA3P,OAAA;AAM0DC,OAAA,CAAA2P,yBAAA,GAAAD,0BAAA,CAAAC,yBAAA;AAAA3P,OAAA,CAAA4P,qBAAA,GAAAF,0BAAA,CAAAE,qBAAA;AAC1D,IAAAC,2BAAA,GAAA9P,OAAA;AAG2DC,OAAA,CAAA8P,0BAAA,GAAAD,2BAAA,CAAAC,0BAAA;AAC3D,IAAAC,wBAAA,GAAAhQ,OAAA;AAIwDC,OAAA,CAAAgQ,wBAAA,GAAAD,wBAAA,CAAAC,wBAAA;AAAAhQ,OAAA,CAAAiQ,mBAAA,GAAAF,wBAAA,CAAAE,mBAAA;AAGxD,IAAAC,sBAAA,GAAAnQ,OAAA;AAIuCC,OAAA,CAAAmQ,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AAAAnQ,OAAA,CAAAoQ,kBAAA,GAAAF,sBAAA,CAAAE,kBAAA;AAAApQ,OAAA,CAAAqQ,kBAAA,GAAAH,sBAAA,CAAAG,kBAAA;AACvC,IAAAC,qBAAA,GAAAvQ,OAAA;AASsCC,OAAA,CAAAuQ,eAAA,GAAAD,qBAAA,CAAAC,eAAA;AAAAvQ,OAAA,CAAAwQ,iBAAA,GAAAF,qBAAA,CAAAE,iBAAA;AAAAxQ,OAAA,CAAAyQ,sBAAA,GAAAH,qBAAA,CAAAG,sBAAA;AAAAzQ,OAAA,CAAA0Q,iBAAA,GAAAJ,qBAAA,CAAAI,iBAAA;AAAA1Q,OAAA,CAAA2Q,cAAA,GAAAL,qBAAA,CAAAK,cAAA;AAAA3Q,OAAA,CAAA4Q,kBAAA,GAAAN,qBAAA,CAAAM,kBAAA;AACtC,IAAAC,kBAAA,GAAA9Q,OAAA;AAGmCC,OAAA,CAAA8Q,iBAAA,GAAAD,kBAAA,CAAAC,iBAAA;AACnC,IAAAC,sBAAA,GAAAhR,OAAA;AAGuCC,OAAA,CAAAgR,qBAAA,GAAAD,sBAAA,CAAAC,qBAAA;AAAAhR,OAAA,CAAAiR,0BAAA,GAAAF,sBAAA,CAAAE,0BAAA;AACvC,IAAAC,gBAAA,GAAAnR,OAAA;AAMiCC,OAAA,CAAAmR,yBAAA,GAAAD,gBAAA,CAAAC,yBAAA;AAAAnR,OAAA,CAAAoR,qBAAA,GAAAF,gBAAA,CAAAE,qBAAA;AAEjC,IAAAC,eAAA,GAAAtR,OAAA;AASgCC,OAAA,CAAAsR,iBAAA,GAAAD,eAAA,CAAAC,iBAAA;AAAAtR,OAAA,CAAAuR,iBAAA,GAAAF,eAAA,CAAAE,iBAAA;AAAAvR,OAAA,CAAAwR,UAAA,GAAAH,eAAA,CAAAG,UAAA;AAAAxR,OAAA,CAAAyR,eAAA,GAAAJ,eAAA,CAAAI,eAAA;AAAAzR,OAAA,CAAA0R,mBAAA,GAAAL,eAAA,CAAAK,mBAAA;AAChC,IAAAC,qBAAA,GAAA5R,OAAA;AAGsCC,OAAA,CAAA4R,oBAAA,GAAAD,qBAAA,CAAAC,oBAAA;AACtC,IAAAC,eAAA,GAAA9R,OAAA;AAOgCC,OAAA,CAAA8R,yBAAA,GAAAD,eAAA,CAAAC,yBAAA;AAAA9R,OAAA,CAAA+R,yBAAA,GAAAF,eAAA,CAAAE,yBAAA;AAAA/R,OAAA,CAAAgS,uBAAA,GAAAH,eAAA,CAAAG,uBAAA;AAAAhS,OAAA,CAAAiS,oBAAA,GAAAJ,eAAA,CAAAI,oBAAA;AAAAjS,OAAA,CAAAkS,oBAAA,GAAAL,eAAA,CAAAK,oBAAA;AAAAlS,OAAA,CAAAmS,qBAAA,GAAAN,eAAA,CAAAM,qBAAA;AAChC,IAAAC,mBAAA,GAAArS,OAAA;AAQoCC,OAAA,CAAAqS,uBAAA,GAAAD,mBAAA,CAAAC,uBAAA;AAAArS,OAAA,CAAAsS,+BAAA,GAAAF,mBAAA,CAAAE,+BAAA;AAAAtS,OAAA,CAAAuS,2BAAA,GAAAH,mBAAA,CAAAG,2BAAA;AAAAvS,OAAA,CAAAwS,qBAAA,GAAAJ,mBAAA,CAAAI,qBAAA;AAAAxS,OAAA,CAAAyS,qBAAA,GAAAL,mBAAA,CAAAK,qBAAA;AAAAzS,OAAA,CAAA0S,kBAAA,GAAAN,mBAAA,CAAAM,kBAAA;AACpC,IAAAC,WAAA,GAAA5S,OAAA;AAO4BC,OAAA,CAAA4S,eAAA,GAAAD,WAAA,CAAAC,eAAA;AAAA5S,OAAA,CAAA6S,uBAAA,GAAAF,WAAA,CAAAE,uBAAA;AAAA7S,OAAA,CAAA8S,mBAAA,GAAAH,WAAA,CAAAG,mBAAA;AAAA9S,OAAA,CAAA+S,aAAA,GAAAJ,WAAA,CAAAI,aAAA;AAAA/S,OAAA,CAAAgT,oBAAA,GAAAL,WAAA,CAAAK,oBAAA;AAAAhT,OAAA,CAAAiT,aAAA,GAAAN,WAAA,CAAAM,aAAA;AAC5B,IAAAC,aAAA,GAAAnT,OAAA;AAA2DC,OAAA,CAAAmT,kBAAA,GAAAD,aAAA,CAAAC,kBAAA;AAC3D,IAAAC,eAAA,GAAArT,OAAA;AAOgCC,OAAA,CAAAqT,oBAAA,GAAAD,eAAA,CAAAC,oBAAA;AAAArT,OAAA,CAAAsT,YAAA,GAAAF,eAAA,CAAAE,YAAA;AAAAtT,OAAA,CAAAuT,SAAA,GAAAH,eAAA,CAAAG,SAAA;AAAAvT,OAAA,CAAAwT,cAAA,GAAAJ,eAAA,CAAAI,cAAA;AAAAxT,OAAA,CAAAyT,SAAA,GAAAL,eAAA,CAAAK,SAAA;AAAAzT,OAAA,CAAA0T,mBAAA,GAAAN,eAAA,CAAAM,mBAAA;AAGhC,IAAAC,gBAAA,GAAA5T,OAAA;AAQqCC,OAAA,CAAA4T,yBAAA,GAAAD,gBAAA,CAAAC,yBAAA;AAAA5T,OAAA,CAAA6T,iBAAA,GAAAF,gBAAA,CAAAE,iBAAA;AAAA7T,OAAA,CAAA8T,iCAAA,GAAAH,gBAAA,CAAAG,iCAAA;AASrC,IAAAC,UAAA,GAAAhU,OAAA;AAOqBC,OAAA,CAAAgU,YAAA,GAAAD,UAAA,CAAAC,YAAA;AAAAhU,OAAA,CAAAiU,eAAA,GAAAF,UAAA,CAAAE,eAAA;AAAAjU,OAAA,CAAAkU,WAAA,GAAAH,UAAA,CAAAG,WAAA;AAAAlU,OAAA,CAAAmU,UAAA,GAAAJ,UAAA,CAAAI,UAAA;AAAAnU,OAAA,CAAAoU,kBAAA,GAAAL,UAAA,CAAAK,kBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_clients","require","exports","CLIENT_IDS","EXPERIMENT_IDS","_FeatureToggleContext","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","_parts","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","_sectionDefinition","DROP_SECTION","_diagnosticTypes","DIAGNOSTIC_TYPES","_imageSearchFilterTypes","buildImageSearchFilter","_imageSearchFilters","ImageSearchFilterToken","backgroundFilter","_componentDefinitions","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","FeatureCardsSectionDefinition","EntitySectionDefinition","EntityCollectionSectionDefinition","ComparisonSectionDefinition","TextBlockSectionDefinition","CtaBannerSectionDefinition","CalloutSectionDefinition","NextStepsSectionDefinition","FeatureSection9PlusDefinition","ListItemsSectionDefinition","SkipNodesSectionDefinition","HtmlCommentSectionDefinition","SearchSectionDefinition","ErrorSectionDefinition","FallbackSectionDefinition","createSdkRegistry","_registry","ComponentRegistry","_patternValidator","validatePattern","validatePatternSyntax","validatePatternWithBlocks","_markdownBlocks","convertToBlockElements","convertToBlockElementsWithMapping","_linkTypes","Web5UrlType","isWeb5AskUrl","isWeb5EntityUrl","isWeb5ImageUrl","isWeb5IconUrl","isWeb5ActionUrl","isWeb5SearchUrl","isWeb5Url","isNavigableUrl","isValidLinkUrl","isLegacyUrl","_entityLinkParser","parseWeb5Url","isValidWeb5Url","validateLinkUrl","isEntityLink","parseEntityLink","extractProtocol","extractLinkMetadata","_web5LinkValidator","findInvalidWeb5Links","_nodeMatchers","hasImage","isHtmlComment","_match","matchMarkdown","matchAllSections","nodesToParts","_ComponentDependenciesContext","ComponentDependenciesProvider","useComponentDependencies","_UserQueryContext","UserQueryProvider","useUserQuery","_ChipsContext","ChipsProvider","useChips","_entity","defaultExtractor","enrichEntitiesFromPayload","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","_callout","CALLOUT_KINDS","_useWeb5Link","useWeb5Link","_useConversation","useConversation","_useDebugImageContext","useDebugImageContext","_useResolvedImageSources","useResolvedImageSources","_useResolveGenericEntityData","useResolveGenericEntityData","_useEntityTransforms","useEntityTransforms","_useMarkdownUtils","useMarkdownUtils","_useResolveShopifyEntityData","useResolveShopifyEntityData","_useResolveSearchSpringEntityData","useResolveSearchSpringEntityData","_searchspring","fetchProductsByHandles","fetchProductsByHandlesMap","transformSSProductToEntityItemData","_cart","addToCart","_shopify","ShopifyStorefrontClient","resolveShopifyConfig","resolveShopifyEntity","transformShopifyProduct","transformShopifyCollection","transformShopifyArticle","transformShopifyEntityToItemData","PRODUCT_BY_HANDLE_QUERY","COLLECTION_BY_HANDLE_QUERY","ARTICLE_BY_HANDLE_QUERY","_utils","cn","_imageUtils","normalizeImageUrl","getResizedImageUrl","_imageBackdrop","analyzeBackdrop","computeContentBBox","buildProbeUrl","loadImagePixels","loadBackdropAnalysis","_parseUtils","stripMarkdown","_colorUtils","rgbToHsl","hslToRgb","ensureMinLightness","toRgb","deriveDarkColor","deriveDarkGradient","deriveLightColor","_analyticsEvents","pushEvent","pushPromptSubmit","pushLinkClick","pushError","pushExit","pushEntityFiltered","hasAnalyticsConsent","_errors","ERROR_MARKDOWN","getErrorTypeFromStatus","createErrorMarkdown","STREAMING_TIMEOUT_MS","DEFAULT_ERROR_TEMPLATES","resolveErrorTemplate","_navigationStack","getForwardStack","setForwardStack","clearForwardStack","pushToForwardStack","popFromForwardStack","_UserQuery","UserQuery","_productBackHandoff","PRODUCT_BACK_SESSION_KEY","writeProductBackHandoff","readProductBackHandoff","_PromptEntryEmptyState","PromptEntryEmptyState","_SearchSection","SearchSection","_FeedbackBar","FeedbackBar","_Disclaimer","Disclaimer","_BottomContainer","BottomContainer","_MarkdownText","MarkdownText","_CalloutBlock","CalloutBlock","_OptimizedImage","OptimizedImage","_SectionSkeleton","SectionSkeleton","_SmartIcon","SmartIcon","_Loader","Loader","_PlacementLoader","PlacementLoader","_UnifiedLink","UnifiedLink","detectLinkType","LinkType","_table","Table","TableHeader","TableBody","TableFooter","TableHead","TableRow","TableCell","TableCaption","_userQueryEvent","WEB5_USER_QUERY_EVENT","_answerUpdatedEvent","WEB5_ANSWER_UPDATED_EVENT","_redirectEvent","WEB5_REDIRECT_EVENT","_loadClientBundle","loadClientBundle","_clientBundleOverride","getClientBundleOverride","isTrustedBundleHost","_clientBundleUrl","TEMPLATES_CDN_BASE","TEMPLATES_MANIFEST_URL","getTemplateOverride","isTemplatePickerRequested","isValidTemplateId","resolveClientBundleUrl","_mergeClientConfig","mergeClientConfig","_applyThemeOverrides","applyThemeOverrides","THEME_OVERRIDE_TOKENS","_tokenContract","THEME_TOKEN_CONTRACT","BRAND_TOKENS","TOKEN_NAME_PATTERN","bucketOf","hostAliasFor","_PlacementResponseRenderer","PlacementResponseRenderer","PlacementSmoothHeight","_buildPlacementDependencies","buildPlacementDependencies","_PlacementPayloadContext","PlacementPayloadProvider","usePlacementPayload","_unifiedMarkdownParser","UnifiedMarkdownParser","parseMarkdownToAst","parseAstToMarkdown","_markdownPreprocessor","escapeWeb5Links","fixMalformedLinks","trimTrailingWhitespace","normalizeIconUrls","decodeLinkText","preprocessMarkdown","_componentTracking","ComponentTracking","_contentKeywordMatcher","findKeywordsInContent","getContextualImageFilename","_intentExtractor","extractIntentFromMarkdown","getIntentFromMarkdown","_propsExtractor","createPageSection","generateSectionId","generateId","findImageInNode","findImageInChildren","_diagnosticsCollector","DiagnosticsCollector","_refreshPrompts","REFRESH_PROMPTS_UNTIL_KEY","REFRESH_PROMPTS_WINDOW_MS","getRefreshPromptsExpiry","shouldRefreshPrompts","enableRefreshPrompts","disableRefreshPrompts","_backendEnvironment","BACKEND_ENVIRONMENT_KEY","BACKEND_ENVIRONMENT_QUERY_PARAM","DEFAULT_BACKEND_ENVIRONMENT","getBackendEnvironment","setBackendEnvironment","usesStagingBackend","_matchDebug","MATCH_DEBUG_KEY","MATCH_DEBUG_QUERY_PARAM","isMatchDebugEnabled","setMatchDebug","resetMatchDebugCache","logMatchDebug","_wixAuthFetch","createWixAuthFetch","_sessionManager","getOrCreateSessionId","getSessionId","getChatId","startNewChatId","setChatId","resetChatIdForTests","_componentParser","parseMarkdownToComponents","tryParseComponent","mergeSectionsWithStableReferences","_hostScope","WEB5_ROOT_ID","WEB5_ROOT_CLASS","WEB5_SCOPES","WEB5_SCOPE","WEB5_GLOBAL_TOKENS"],"sources":["../../src/index.ts"],"sourcesContent":["// Client IDs and experiment IDs\nexport { CLIENT_IDS, EXPERIMENT_IDS } from './clients';\n\nexport {\n type EmbedFeatureToggleResult,\n type FeatureToggleReader,\n createFeatureToggleReader,\n FeatureToggleProvider,\n useFeatureToggles,\n useFeatureToggle,\n} from './featureToggles/FeatureToggleContext';\n\n// Dev-only chrome injection contract for client packages\nexport type { DevEnvironment } from './client/devEnvironment';\n\n// Part types and helpers\nexport {\n type PartType,\n type Part,\n type HeadingPart,\n type ImagePart,\n type LinkPart,\n type ListPart,\n type ListItemPart,\n type KpiItemPart,\n type CardPart,\n type IconPart,\n type CalloutPart,\n type EntityPart,\n getPartsByType,\n getPartByRole,\n getAllByRole,\n getHeading,\n getImages,\n getLinks,\n extractContent,\n extractContentMarkdown,\n deriveRole,\n} from './parts/parts';\n\n// Component types\nexport type {\n BaseCompProps,\n SlotCompProps,\n SectionCompProps,\n SectionCompPropsWithSlot,\n TextCompProps,\n ButtonCompProps,\n ImageCompProps,\n BadgeCompProps,\n HeroButton,\n KpiItemCompProps,\n FeatureItemCompProps,\n FeatureCardCompProps,\n EntityItemData,\n EntityItem,\n GenericEntityData,\n GenericEntityCompProps,\n ComparisonRow,\n ComparisonColumn,\n AiNarrativeCompProps,\n HeroCompProps,\n HeroEntityCompProps,\n KpiCompProps,\n FeatureCardsCompProps,\n EntityCompProps,\n ComparisonCompProps,\n TextBlockCompProps,\n Component,\n BaseComponent,\n SlotComponent,\n SectionComponent,\n TextComponent,\n ButtonComponent,\n ImageComponent,\n BadgeComponent,\n KpiItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n FeatureCardsSectionComponent,\n EntitySectionComponent,\n PropsOf,\n SectionFixture,\n CtaBannerCompProps,\n CtaBannerSectionComponent,\n CalloutCompProps,\n CalloutSectionComponent,\n NextStepsCompProps,\n NextStepsSectionComponent,\n FeatureSection9PlusCompProps,\n FeatureSection9PlusSectionComponent,\n ListItemsSectionCompProps,\n ListItemsSectionComponent,\n ErrorCompProps,\n ErrorSectionComponent,\n NullCompProps,\n NullSectionComponent,\n SolutionEntityCompProps,\n SolutionEntitySectionComponent,\n SolutionEntityData,\n BlogEntityCompProps,\n BlogEntitySectionComponent,\n BlogEntityData,\n GeneralTextCompProps,\n GeneralTextSectionComponent,\n PersonalizedNarrativeCompProps,\n PersonalizedNarrativeSectionComponent,\n} from './component/types';\n\n// Section definition\nexport type {\n SectionDefinition,\n ParseContext,\n ContextualImageResult,\n DropSection,\n} from './component/section-definition';\nexport { DROP_SECTION } from './component/section-definition';\n\n// Diagnostic types\nexport { DIAGNOSTIC_TYPES } from './component/diagnosticTypes';\nexport type { DiagnosticType } from './component/diagnosticTypes';\n\n// Image search filters\nexport {\n buildImageSearchFilter,\n type ImageSearchFilterString,\n} from './image/imageSearchFilterTypes';\nexport {\n ImageSearchFilterToken,\n backgroundFilter,\n} from './image/imageSearchFilters';\nexport type {\n ContextualImageAsset,\n ImageSourceInput,\n ResolvedImageSource,\n ResolvedImageSourceKind,\n} from './image/contextualImageTypes';\n\n// Section definition classes + createSdkRegistry\nexport {\n HeroSectionDefinition,\n HeroEntitySectionDefinition,\n KpiSectionDefinition,\n FeatureCardsSectionDefinition,\n EntitySectionDefinition,\n EntityCollectionSectionDefinition,\n ComparisonSectionDefinition,\n TextBlockSectionDefinition,\n CtaBannerSectionDefinition,\n CalloutSectionDefinition,\n NextStepsSectionDefinition,\n FeatureSection9PlusDefinition,\n ListItemsSectionDefinition,\n SkipNodesSectionDefinition,\n HtmlCommentSectionDefinition,\n SearchSectionDefinition,\n ErrorSectionDefinition,\n FallbackSectionDefinition,\n createSdkRegistry,\n} from './component/componentDefinitions';\n\n// Registry\nexport { ComponentRegistry } from './registry';\nexport type {\n SlotOptions,\n SectionOptions,\n SectionRegistration,\n SlotNode,\n SlotIntentNode,\n SectionIntentNode,\n SectionNode,\n SlotVariant,\n SectionVariant,\n RegistryCatalog,\n ActionResult,\n ActionHandler,\n} from './registry';\n\n// Pattern validator\nexport {\n validatePattern,\n validatePatternSyntax,\n validatePatternWithBlocks,\n type PatternValidationResult,\n type BlockElement,\n type EnrichedBlockElement,\n type LinkMetadata,\n type LinkAttribute,\n} from './patternValidator';\n\n// Markdown blocks\nexport {\n convertToBlockElements,\n convertToBlockElementsWithMapping,\n type BlockElementsWithMapping,\n} from './markdownBlocks';\n\n// Link types, enum & guards\nexport {\n Web5UrlType,\n type Web5AskUrl,\n type Web5EntityUrl,\n type Web5ImageUrl,\n type Web5IconUrl,\n type Web5ActionUrl,\n type Web5SearchUrl,\n type Web5Url,\n type HttpsUrl,\n type HttpUrl,\n type MailtoUrl,\n type RelativeUrl,\n type NavigableUrl,\n type ValidLinkUrl,\n type AnyKnownUrl,\n type LegacyUrl,\n isWeb5AskUrl,\n isWeb5EntityUrl,\n isWeb5ImageUrl,\n isWeb5IconUrl,\n isWeb5ActionUrl,\n isWeb5SearchUrl,\n isWeb5Url,\n isNavigableUrl,\n isValidLinkUrl,\n isLegacyUrl,\n} from './types/link-types';\n\n// Entity/URL parsing\nexport {\n parseWeb5Url,\n isValidWeb5Url,\n validateLinkUrl,\n type Web5UrlParsed,\n type Web5AskParsed,\n type Web5EntityParsed,\n type Web5ImageParsed,\n type Web5IconParsed,\n type Web5ActionParsed,\n type Web5SearchParsed,\n isEntityLink,\n parseEntityLink,\n extractProtocol,\n extractLinkMetadata,\n} from './utils/entityLinkParser';\n\n// Web5 link validation\nexport {\n findInvalidWeb5Links,\n type InvalidWeb5Link,\n} from './utils/web5LinkValidator';\n\n// Node matchers\nexport { hasImage, isHtmlComment } from './utils/nodeMatchers';\n\n// Match API\nexport {\n matchMarkdown,\n type MarkdownMatchResult,\n matchAllSections,\n type MatchAllSectionsResult,\n nodesToParts,\n} from './match';\n\n// ---------------------------------------------------------------------------\n// DI Infrastructure (moved from @wix/w5-client-circana)\n// ---------------------------------------------------------------------------\n\n// DI context and provider\nexport {\n ComponentDependenciesProvider,\n useComponentDependencies,\n type ComponentDependenciesProviderProps,\n} from './context/ComponentDependenciesContext';\n\n// Raw user query for the current response page\nexport {\n UserQueryProvider,\n useUserQuery,\n type UserQueryProviderProps,\n} from './context/UserQueryContext';\n\n// Chips context (suggestion chips shared between SearchSection and error states)\nexport {\n ChipsProvider,\n useChips,\n type SuggestionChip,\n} from './context/ChipsContext';\n\n// DI types\nexport type {\n ComponentDependencies,\n Web5LinkApi,\n ConversationApi,\n SendMessageTrackingOptions,\n SendMessageOptions,\n ComparisonSubmitPayload,\n ComparisonSelectedProduct,\n ProductComparisonSelectionState,\n ProductComparisonApi,\n EntityTransforms,\n MarkdownUtils,\n ResolveGenericEntityDataOptions,\n} from './types/dependencies';\nexport type {\n ApiPayloadItem,\n EntityTypeConfig,\n EntityConfig,\n EntityExtractionContext,\n} from './types/entity';\nexport {\n defaultExtractor,\n enrichEntitiesFromPayload,\n fetchEntityListData,\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n getEntityExtractor,\n registerEntityExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n} from './entity';\nexport { CALLOUT_KINDS, type CalloutKind, type Callout } from './types/callout';\n\n// Wrapper hooks\nexport { useWeb5Link } from './hooks/useWeb5Link';\nexport { useConversation } from './hooks/useConversation';\nexport { useDebugImageContext } from './hooks/useDebugImageContext';\nexport { useResolvedImageSources } from './hooks/useResolvedImageSources';\nexport { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData';\nexport { useEntityTransforms } from './hooks/useEntityTransforms';\nexport { useMarkdownUtils } from './hooks/useMarkdownUtils';\nexport { useResolveShopifyEntityData } from './hooks/useResolveShopifyEntityData';\nexport { useResolveSearchSpringEntityData } from './hooks/useResolveSearchSpringEntityData';\n\n// SearchSpring\nexport {\n fetchProductsByHandles,\n fetchProductsByHandlesMap,\n transformSSProductToEntityItemData,\n} from './services/searchspring';\nexport type {\n SearchSpringConfig,\n SSProduct,\n SSSearchResponse,\n SSSizeData,\n} from './services/searchspring';\n\n// Shopify Storefront API\n// Cart actions\nexport { addToCart } from './services/cart';\n\nexport {\n ShopifyStorefrontClient,\n resolveShopifyConfig,\n resolveShopifyEntity,\n transformShopifyProduct,\n transformShopifyCollection,\n transformShopifyArticle,\n transformShopifyEntityToItemData,\n PRODUCT_BY_HANDLE_QUERY,\n COLLECTION_BY_HANDLE_QUERY,\n ARTICLE_BY_HANDLE_QUERY,\n} from './services/shopify';\nexport type {\n ShopifyStorefrontConfig,\n ShopifyProduct,\n ShopifyCollection,\n ShopifyArticle,\n ShopifyImage,\n ShopifyMoneyV2,\n} from './services/shopify';\n\n// Utilities\nexport { cn } from './lib/utils';\nexport { normalizeImageUrl, getResizedImageUrl } from './utils/image-utils';\nexport {\n analyzeBackdrop,\n computeContentBBox,\n buildProbeUrl,\n loadImagePixels,\n loadBackdropAnalysis,\n type BackdropAnalysis,\n type ContentBBox,\n type ImagePixels,\n} from './utils/imageBackdrop';\nexport { stripMarkdown } from './component/componentDefinitions/parse-utils';\n\n// Color utilities\nexport {\n type RGB,\n rgbToHsl,\n hslToRgb,\n ensureMinLightness,\n toRgb,\n deriveDarkColor,\n deriveDarkGradient,\n deriveLightColor,\n} from './color/colorUtils';\n\n// Analytics\nexport {\n pushEvent,\n pushPromptSubmit,\n pushLinkClick,\n pushError,\n pushExit,\n pushEntityFiltered,\n hasAnalyticsConsent,\n type EntityFilteredReason,\n} from './utils/analyticsEvents';\n\n// Error handling types and utilities\nexport {\n type ConversationErrorType,\n ERROR_MARKDOWN,\n getErrorTypeFromStatus,\n createErrorMarkdown,\n STREAMING_TIMEOUT_MS,\n type ErrorActionType,\n type ErrorIconType,\n type ErrorTemplateButton,\n type ErrorTemplate,\n type ErrorTemplateOverrides,\n DEFAULT_ERROR_TEMPLATES,\n resolveErrorTemplate,\n} from './errors';\n\n// Navigation utilities\nexport {\n getForwardStack,\n setForwardStack,\n clearForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n} from './utils/navigationStack';\n\n// UI components\nexport {\n UserQuery,\n type UserQueryProps,\n type ProductBackContext,\n} from './components/ui/UserQuery';\nexport {\n PRODUCT_BACK_SESSION_KEY,\n writeProductBackHandoff,\n readProductBackHandoff,\n type ProductBackHandoff,\n} from './utils/productBackHandoff';\nexport {\n PromptEntryEmptyState,\n type PromptEntryEmptyStateProps,\n} from './components/ui/PromptEntryEmptyState';\nexport {\n SearchSection,\n type SearchSectionProps,\n type SearchSectionHandle,\n type ScrollChip,\n} from './components/ui/SearchSection';\nexport {\n FeedbackBar,\n type FeedbackBarProps,\n type FeedbackCategoryOption,\n type FeedbackSentiment,\n type FeedbackSubmitInput,\n} from './components/ui/FeedbackBar';\nexport {\n Disclaimer,\n type DisclaimerProps,\n} from './components/ui/Disclaimer';\nexport {\n BottomContainer,\n type BottomContainerProps,\n} from './components/ui/BottomContainer';\nexport { MarkdownText } from './components/ui/MarkdownText';\nexport {\n CalloutBlock,\n type CalloutBlockProps,\n} from './components/ui/CalloutBlock';\nexport {\n OptimizedImage,\n type OptimizedImageProps,\n} from './components/ui/OptimizedImage';\nexport {\n SectionSkeleton,\n type SectionSkeletonProps,\n} from './components/ui/SectionSkeleton';\nexport { SmartIcon, type SmartIconProps } from './components/ui/SmartIcon';\nexport { Loader, type LoaderProps } from './components/ui/Loader';\nexport {\n PlacementLoader,\n type PlacementLoaderProps,\n} from './components/ui/PlacementLoader';\nexport {\n UnifiedLink,\n detectLinkType,\n type UnifiedLinkProps,\n LinkType,\n type LinkVariant,\n} from './components/ui/UnifiedLink';\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from './components/ui/table';\n\n// Placement (DL #088, DL #102 behavior declarations)\nexport type {\n PlacementBehaviorConfig,\n PlacementConfig,\n PlacementPrompts,\n} from './types/placement';\n\n// Cross-bundle user-query broadcast event (DL #097 D2)\nexport {\n WEB5_USER_QUERY_EVENT,\n type Web5UserQueryEventDetail,\n type Web5UserQueryEvent,\n} from './types/userQueryEvent';\n\n// Cross-bundle answer-updated broadcast event (B2B-4121)\nexport {\n WEB5_ANSWER_UPDATED_EVENT,\n type Web5AnswerUpdatedEventDetail,\n type Web5AnswerUpdatedEvent,\n} from './types/answerUpdatedEvent';\n\n// Cross-bundle redirect broadcast event (DL #098 D3)\nexport {\n WEB5_REDIRECT_EVENT,\n type Web5RedirectEventDetail,\n type Web5RedirectEvent,\n type Web5RedirectReason,\n} from './types/redirectEvent';\n// `placementFilter` was removed — hero/next-steps exclusion is the prompt's job\n// and placement-specific designs belong as `{ placement: true }` registry\n// variants (resolved automatically via `resolveSection(type, { placement: true })`).\n\n// Client bundle loader (DL #088 D3.3)\nexport { loadClientBundle } from './client/loadClientBundle';\n\n// `?clientBundleUrl=` dev override — shared by `web50-server-ui` and\n// `embed-placement` so the trusted-host gate can't drift between them.\nexport {\n getClientBundleOverride,\n isTrustedBundleHost,\n} from './client/clientBundleOverride';\n\n// Client-UMD URL resolution (DL #094 per-msid, DL #129 per-template) and the\n// universal bundle←backend config merge (DL #129 Q3/Q7) — shared by\n// `web50-server-ui` and `embed-placement`, the two client-bundle load sites.\nexport {\n TEMPLATES_CDN_BASE,\n TEMPLATES_MANIFEST_URL,\n getTemplateOverride,\n isTemplatePickerRequested,\n isValidTemplateId,\n resolveClientBundleUrl,\n} from './client/clientBundleUrl';\nexport { mergeClientConfig, type DeepPartial } from './client/mergeClientConfig';\nexport {\n applyThemeOverrides,\n THEME_OVERRIDE_TOKENS,\n type ThemeOverrideKey,\n type ThemeOverrides,\n} from './client/applyThemeOverrides';\nexport {\n THEME_TOKEN_CONTRACT,\n BRAND_TOKENS,\n TOKEN_NAME_PATTERN,\n bucketOf,\n hostAliasFor,\n type TokenBucket,\n type TokenContractEntry,\n type TokenType,\n} from './theme/tokenContract';\n\n// Placement renderer + DI helper (DL #088 D3.2, D3.4)\nexport {\n PlacementResponseRenderer,\n PlacementSmoothHeight,\n type PlacementResponseRendererProps,\n type PlacementSection,\n type PlacementVariant,\n} from './components/placement/PlacementResponseRenderer';\nexport {\n buildPlacementDependencies,\n type BuildPlacementDependenciesOptions,\n} from './components/placement/buildPlacementDependencies';\nexport {\n PlacementPayloadProvider,\n usePlacementPayload,\n type PlacementPayloadContextValue,\n} from './components/placement/PlacementPayloadContext';\n\n// Markdown parsing utilities — lifted from web50-server-ui (DL #088 B9.1)\nexport {\n UnifiedMarkdownParser,\n parseMarkdownToAst,\n parseAstToMarkdown,\n} from './utils/unifiedMarkdownParser';\nexport {\n escapeWeb5Links,\n fixMalformedLinks,\n trimTrailingWhitespace,\n normalizeIconUrls,\n decodeLinkText,\n preprocessMarkdown,\n type PreprocessorDiagnostic,\n type PreprocessResult,\n} from './utils/markdownPreprocessor';\nexport {\n ComponentTracking,\n type ComponentNodeRange,\n} from './utils/componentTracking';\nexport {\n findKeywordsInContent,\n getContextualImageFilename,\n} from './utils/contentKeywordMatcher';\nexport {\n extractIntentFromMarkdown,\n getIntentFromMarkdown,\n type IntentInfo,\n type IntentExtractionOptions,\n type ResponseState,\n} from './utils/intentExtractor';\nexport type { PageSection } from './types/page-section';\nexport {\n createPageSection,\n generateSectionId,\n generateId,\n findImageInNode,\n findImageInChildren,\n type Product,\n type ComparisonProduct,\n type ProductComparisonSectionProps,\n} from './utils/propsExtractor';\nexport {\n DiagnosticsCollector,\n type DiagnosticEntry,\n} from './utils/diagnosticsCollector';\nexport {\n REFRESH_PROMPTS_UNTIL_KEY,\n REFRESH_PROMPTS_WINDOW_MS,\n getRefreshPromptsExpiry,\n shouldRefreshPrompts,\n enableRefreshPrompts,\n disableRefreshPrompts,\n} from './utils/refreshPrompts';\nexport {\n type BackendEnvironment,\n BACKEND_ENVIRONMENT_KEY,\n BACKEND_ENVIRONMENT_QUERY_PARAM,\n DEFAULT_BACKEND_ENVIRONMENT,\n getBackendEnvironment,\n setBackendEnvironment,\n usesStagingBackend,\n} from './utils/backendEnvironment';\nexport {\n MATCH_DEBUG_KEY,\n MATCH_DEBUG_QUERY_PARAM,\n isMatchDebugEnabled,\n setMatchDebug,\n resetMatchDebugCache,\n logMatchDebug,\n} from './utils/matchDebug';\nexport { createWixAuthFetch } from './client/wixAuthFetch';\nexport {\n getOrCreateSessionId,\n getSessionId,\n getChatId,\n startNewChatId,\n setChatId,\n resetChatIdForTests,\n} from './utils/sessionManager';\n\n// Component parser orchestrator — lifted from web50-server-ui (DL #088 B9.5)\nexport {\n parseMarkdownToComponents,\n tryParseComponent,\n mergeSectionsWithStableReferences,\n type ParseMarkdownOptions,\n type ParseMarkdownResult,\n type ComponentMatch,\n type ParserContext,\n} from './component/componentParser';\nexport type {\n ParserClientConfig,\n EnrichEntityProps,\n} from './component/parser-types';\n\n// Host-mount scope contract — shared by web50-server-ui (which stamps the\n// class and mounts), embed-placement (which mounts the same bundle elsewhere),\n// and the client CDN build (which compiles every selector against it).\nexport {\n WEB5_ROOT_ID,\n WEB5_ROOT_CLASS,\n WEB5_SCOPES,\n WEB5_SCOPE,\n WEB5_GLOBAL_TOKENS,\n type HostFitConfig,\n} from './hostScope';\n"],"mappings":"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","ignoreList":[]}
@@ -36,7 +36,14 @@
36
36
  --font-display: var(--font-sans);
37
37
 
38
38
  /* Spacing & shape tokens */
39
- --radius: 0.5rem;
39
+ /* Shape follows the host page unless a template states its own (DL #193).
40
+ * `embed-loader` writes `--web5-host-radius` from the store's imported theme;
41
+ * a template declaring `--radius` outright beats this fallback, and with
42
+ * neither present the seed default applies exactly as before. The whole
43
+ * derived scale rides on it — `--radius-sm/md/lg/xl` in tailwind-theme.css
44
+ * are live `var()`/`calc()` references, so one value reaches all 48
45
+ * `rounded-*` call sites. */
46
+ --radius: var(--web5-host-radius, 0.5rem);
40
47
  --tracking-normal: -0.02em;
41
48
  --spacing: 0.25rem;
42
49
 
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.TOKEN_NAME_PATTERN = exports.THEME_TOKEN_CONTRACT = exports.BRAND_TOKENS = void 0;
5
+ exports.bucketOf = bucketOf;
6
+ exports.hostAliasFor = hostAliasFor;
7
+ /**
8
+ * The theme-token contract (DL #193).
9
+ *
10
+ * One home for the answer to "who is allowed to set this token, and who wins
11
+ * when more than one of them does". Three things need that answer and must not
12
+ * each keep their own copy:
13
+ *
14
+ * - **`applyThemeOverrides`** decides, per key, whether to write the real
15
+ * token or its `--web5-host-*` alias.
16
+ * - **the seed's `validate-templates`** fails a template that sets a brand
17
+ * token.
18
+ * - **the shop owner's panel** renders a control per `editable` entry.
19
+ *
20
+ * A leaf module beside `hostScope.ts`, and for the same reason: both are data
21
+ * that several packages must agree on, and both have to be readable from plain
22
+ * Node tooling. Requiring this package's ENTRY from Node fails — the CSS import
23
+ * in it is a syntax error to the CJS loader, which is what `scope-css.ts`
24
+ * documents — but a deep import of a leaf like this one works, so the seed's
25
+ * validator can read it without loading a component library.
26
+ *
27
+ * It was briefly its own package. That was justified by `embed-loader` needing
28
+ * the list without taking core's eleven dependencies — and the loader turned
29
+ * out not to need it at all, because `applyThemeOverrides` has owned runtime
30
+ * token injection here since DL #131.
31
+ *
32
+ * ## The two buckets
33
+ *
34
+ * The split is about who WINS, not about what may be imported. A platform
35
+ * adapter is free to read anything the store states; the bucket decides what
36
+ * happens when a template has an opinion about the same token.
37
+ *
38
+ * - `brand` — the store's identity: colour roles and font families. The
39
+ * imported value is written as the real token, last, so it wins
40
+ * unconditionally. A template is not permitted to set these.
41
+ * - `host` — the store's shape: corner radius today. The imported value is
42
+ * written as `--web5-host-<name>` and consumed by core as a `var()`
43
+ * fallback, so a template stating the real token beats it and a template
44
+ * that stays silent inherits the store's.
45
+ *
46
+ * A token absent from this map is treated as `host`. That is deliberate and
47
+ * safe: an alias nothing consumes renders nothing, so an adapter that learns
48
+ * to read a token core has never heard of cannot override a template by
49
+ * accident. The wiring line in core is the real gate for a host token, not the
50
+ * entry here.
51
+ *
52
+ * ## Why all but one are brand
53
+ *
54
+ * This is not a new taxonomy. Twenty of these are the set
55
+ * `web50-shopify-adapter` already emits, with a bucket attached; the
56
+ * twenty-first, `--heading`, has been in core's catalogue since DL #131 and is
57
+ * consumed by the seed, but no adapter fills it yet. Exactly one token changes
58
+ * hands relative to the behaviour before DL #193 — `--radius`, which used to
59
+ * win against the template that had chosen a different one. That single
60
+ * misfiling is the whole of the bug this contract exists to fix.
61
+ */
62
+
63
+ /** How a value is spelled, which is what makes validation possible. */
64
+
65
+ /** Which layer wins when both a store and a template state this token. */
66
+
67
+ const brandColor = label => ({
68
+ bucket: 'brand',
69
+ type: 'color-hsl',
70
+ editable: false,
71
+ ...(label === undefined ? {} : {
72
+ label
73
+ })
74
+ });
75
+
76
+ /**
77
+ * Every token a platform adapter may meaningfully emit today.
78
+ *
79
+ * Growth is adapter-driven on purpose: a token joins when an adapter can
80
+ * actually read it, not on spec. `theme_overrides` is capped at 32 entries by
81
+ * its proto, so there are twelve slots left and no reason to spend them on
82
+ * speculation. `--spacing` is the tempting next one and should be resisted —
83
+ * it scales every `p-*`, `m-*` and `gap-*` in the bundle from one number.
84
+ */
85
+ const THEME_TOKEN_CONTRACT = exports.THEME_TOKEN_CONTRACT = Object.freeze({
86
+ // ── brand · colour roles (18) ────────────────────────────────────────────
87
+ '--background': brandColor(),
88
+ '--foreground': brandColor(),
89
+ '--card': brandColor(),
90
+ '--card-foreground': brandColor(),
91
+ '--popover': brandColor(),
92
+ '--popover-foreground': brandColor(),
93
+ '--primary': brandColor(),
94
+ '--primary-foreground': brandColor(),
95
+ '--secondary': brandColor(),
96
+ '--secondary-foreground': brandColor(),
97
+ '--muted': brandColor(),
98
+ '--muted-foreground': brandColor(),
99
+ '--accent': brandColor(),
100
+ '--accent-foreground': brandColor(),
101
+ '--border': brandColor(),
102
+ '--input': brandColor(),
103
+ '--ring': brandColor(),
104
+ /**
105
+ * Brand-shaped and supported end to end, but no adapter fills it yet: the
106
+ * seed consumes it (`--color-heading-fg: hsl(var(--heading, var(--foreground)))`)
107
+ * and core has catalogued it since DL #131, while `web50-shopify-adapter`
108
+ * emits the other twenty. A store that states a distinct heading colour has
109
+ * somewhere for it to go the moment an adapter learns to read one.
110
+ */
111
+ '--heading': brandColor(),
112
+ // ── brand · type (2) ─────────────────────────────────────────────────────
113
+ '--font-sans': {
114
+ bucket: 'brand',
115
+ type: 'font-stack',
116
+ editable: false
117
+ },
118
+ '--font-display': {
119
+ bucket: 'brand',
120
+ type: 'font-stack',
121
+ editable: false
122
+ },
123
+ // ── host · shape (1) ─────────────────────────────────────────────────────
124
+ /**
125
+ * The one token whose bucket changed, and the reason this contract exists.
126
+ * Editable because it is the one value a store and a template are known to
127
+ * disagree about in a way a merchant can see and wants to settle.
128
+ */
129
+ '--radius': {
130
+ bucket: 'host',
131
+ type: 'length',
132
+ editable: true,
133
+ label: 'Corner rounding'
134
+ }
135
+ });
136
+
137
+ /**
138
+ * The tokens written directly, which is the only question the loader has to
139
+ * answer per key — everything else takes the alias path.
140
+ */
141
+ const BRAND_TOKENS = exports.BRAND_TOKENS = Object.freeze(new Set(Object.entries(THEME_TOKEN_CONTRACT).filter(([, entry]) => entry.bucket === 'brand').map(([token]) => token)));
142
+
143
+ /**
144
+ * A token name we are willing to compose into a CSS declaration.
145
+ *
146
+ * The keys reaching the loader came out of a backend map, which came out of an
147
+ * adapter reading a merchant's theme file. A key carrying `:` or `;` would
148
+ * write arbitrary declarations onto the mount, so the shape is checked where
149
+ * the declaration is built rather than trusted from the source.
150
+ */
151
+ const TOKEN_NAME_PATTERN = exports.TOKEN_NAME_PATTERN = /^--[a-z0-9-]+$/;
152
+
153
+ /** `--radius` → `--web5-host-radius`. Derived, never stored: one fewer thing to get wrong. */
154
+ function hostAliasFor(token) {
155
+ return `--web5-host-${token.slice(2)}`;
156
+ }
157
+
158
+ /** Whether this token is written directly (brand) or as an alias (host, and anything unknown). */
159
+ function bucketOf(token) {
160
+ var _THEME_TOKEN_CONTRACT;
161
+ return ((_THEME_TOKEN_CONTRACT = THEME_TOKEN_CONTRACT[token]) == null ? void 0 : _THEME_TOKEN_CONTRACT.bucket) ?? 'host';
162
+ }
163
+ //# sourceMappingURL=tokenContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["brandColor","label","bucket","type","editable","undefined","THEME_TOKEN_CONTRACT","exports","Object","freeze","BRAND_TOKENS","Set","entries","filter","entry","map","token","TOKEN_NAME_PATTERN","hostAliasFor","slice","bucketOf","_THEME_TOKEN_CONTRACT"],"sources":["../../../src/theme/tokenContract.ts"],"sourcesContent":["/**\n * The theme-token contract (DL #193).\n *\n * One home for the answer to \"who is allowed to set this token, and who wins\n * when more than one of them does\". Three things need that answer and must not\n * each keep their own copy:\n *\n * - **`applyThemeOverrides`** decides, per key, whether to write the real\n * token or its `--web5-host-*` alias.\n * - **the seed's `validate-templates`** fails a template that sets a brand\n * token.\n * - **the shop owner's panel** renders a control per `editable` entry.\n *\n * A leaf module beside `hostScope.ts`, and for the same reason: both are data\n * that several packages must agree on, and both have to be readable from plain\n * Node tooling. Requiring this package's ENTRY from Node fails — the CSS import\n * in it is a syntax error to the CJS loader, which is what `scope-css.ts`\n * documents — but a deep import of a leaf like this one works, so the seed's\n * validator can read it without loading a component library.\n *\n * It was briefly its own package. That was justified by `embed-loader` needing\n * the list without taking core's eleven dependencies — and the loader turned\n * out not to need it at all, because `applyThemeOverrides` has owned runtime\n * token injection here since DL #131.\n *\n * ## The two buckets\n *\n * The split is about who WINS, not about what may be imported. A platform\n * adapter is free to read anything the store states; the bucket decides what\n * happens when a template has an opinion about the same token.\n *\n * - `brand` — the store's identity: colour roles and font families. The\n * imported value is written as the real token, last, so it wins\n * unconditionally. A template is not permitted to set these.\n * - `host` — the store's shape: corner radius today. The imported value is\n * written as `--web5-host-<name>` and consumed by core as a `var()`\n * fallback, so a template stating the real token beats it and a template\n * that stays silent inherits the store's.\n *\n * A token absent from this map is treated as `host`. That is deliberate and\n * safe: an alias nothing consumes renders nothing, so an adapter that learns\n * to read a token core has never heard of cannot override a template by\n * accident. The wiring line in core is the real gate for a host token, not the\n * entry here.\n *\n * ## Why all but one are brand\n *\n * This is not a new taxonomy. Twenty of these are the set\n * `web50-shopify-adapter` already emits, with a bucket attached; the\n * twenty-first, `--heading`, has been in core's catalogue since DL #131 and is\n * consumed by the seed, but no adapter fills it yet. Exactly one token changes\n * hands relative to the behaviour before DL #193 — `--radius`, which used to\n * win against the template that had chosen a different one. That single\n * misfiling is the whole of the bug this contract exists to fix.\n */\n\n/** How a value is spelled, which is what makes validation possible. */\nexport type TokenType =\n /** An HSL triplet with no `hsl()` wrapper — `0 0% 9%`. The core bridge wraps it. */\n | 'color-hsl'\n /** A CSS font stack — `'Poppins', ui-sans-serif, sans-serif`. */\n | 'font-stack'\n /** A CSS length. MUST carry a unit: a bare `0` turns `calc(var(--radius) - 4px)`\n * into a type error and takes the derived radius scale out entirely. */\n | 'length';\n\n/** Which layer wins when both a store and a template state this token. */\nexport type TokenBucket = 'brand' | 'host';\n\nexport interface TokenContractEntry {\n bucket: TokenBucket;\n type: TokenType;\n /** May the shop owner set this from the panel? */\n editable: boolean;\n /** Shown in the owner's panel. Absent for entries that are not editable. */\n label?: string;\n}\n\nconst brandColor = (label?: string): TokenContractEntry => ({\n bucket: 'brand',\n type: 'color-hsl',\n editable: false,\n ...(label === undefined ? {} : { label }),\n});\n\n/**\n * Every token a platform adapter may meaningfully emit today.\n *\n * Growth is adapter-driven on purpose: a token joins when an adapter can\n * actually read it, not on spec. `theme_overrides` is capped at 32 entries by\n * its proto, so there are twelve slots left and no reason to spend them on\n * speculation. `--spacing` is the tempting next one and should be resisted —\n * it scales every `p-*`, `m-*` and `gap-*` in the bundle from one number.\n */\nexport const THEME_TOKEN_CONTRACT: Readonly<Record<string, TokenContractEntry>> =\n Object.freeze({\n // ── brand · colour roles (18) ────────────────────────────────────────────\n '--background': brandColor(),\n '--foreground': brandColor(),\n '--card': brandColor(),\n '--card-foreground': brandColor(),\n '--popover': brandColor(),\n '--popover-foreground': brandColor(),\n '--primary': brandColor(),\n '--primary-foreground': brandColor(),\n '--secondary': brandColor(),\n '--secondary-foreground': brandColor(),\n '--muted': brandColor(),\n '--muted-foreground': brandColor(),\n '--accent': brandColor(),\n '--accent-foreground': brandColor(),\n '--border': brandColor(),\n '--input': brandColor(),\n '--ring': brandColor(),\n\n /**\n * Brand-shaped and supported end to end, but no adapter fills it yet: the\n * seed consumes it (`--color-heading-fg: hsl(var(--heading, var(--foreground)))`)\n * and core has catalogued it since DL #131, while `web50-shopify-adapter`\n * emits the other twenty. A store that states a distinct heading colour has\n * somewhere for it to go the moment an adapter learns to read one.\n */\n '--heading': brandColor(),\n\n // ── brand · type (2) ─────────────────────────────────────────────────────\n '--font-sans': { bucket: 'brand', type: 'font-stack', editable: false },\n '--font-display': { bucket: 'brand', type: 'font-stack', editable: false },\n\n // ── host · shape (1) ─────────────────────────────────────────────────────\n /**\n * The one token whose bucket changed, and the reason this contract exists.\n * Editable because it is the one value a store and a template are known to\n * disagree about in a way a merchant can see and wants to settle.\n */\n '--radius': {\n bucket: 'host',\n type: 'length',\n editable: true,\n label: 'Corner rounding',\n },\n });\n\n/**\n * The tokens written directly, which is the only question the loader has to\n * answer per key — everything else takes the alias path.\n */\nexport const BRAND_TOKENS: ReadonlySet<string> = Object.freeze(\n new Set(\n Object.entries(THEME_TOKEN_CONTRACT)\n .filter(([, entry]) => entry.bucket === 'brand')\n .map(([token]) => token),\n ),\n) as ReadonlySet<string>;\n\n/**\n * A token name we are willing to compose into a CSS declaration.\n *\n * The keys reaching the loader came out of a backend map, which came out of an\n * adapter reading a merchant's theme file. A key carrying `:` or `;` would\n * write arbitrary declarations onto the mount, so the shape is checked where\n * the declaration is built rather than trusted from the source.\n */\nexport const TOKEN_NAME_PATTERN = /^--[a-z0-9-]+$/;\n\n/** `--radius` → `--web5-host-radius`. Derived, never stored: one fewer thing to get wrong. */\nexport function hostAliasFor(token: string): string {\n return `--web5-host-${token.slice(2)}`;\n}\n\n/** Whether this token is written directly (brand) or as an alias (host, and anything unknown). */\nexport function bucketOf(token: string): TokenBucket {\n return THEME_TOKEN_CONTRACT[token]?.bucket ?? 'host';\n}\n"],"mappings":"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","ignoreList":[]}