@syntrologie/adapt-overlays 2.25.2 → 2.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WorkflowWidgetLit.d.ts.map +1 -1
- package/dist/runtime.js.map +2 -2
- package/dist/schema.d.ts +3 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +1 -0
- package/dist/schema.js.map +2 -2
- package/package.json +1 -1
package/dist/schema.d.ts
CHANGED
|
@@ -1072,6 +1072,7 @@ export declare const actionStepSchemas: {
|
|
|
1072
1072
|
method?: "GET" | "POST" | undefined;
|
|
1073
1073
|
timeoutMs?: number | undefined;
|
|
1074
1074
|
}>]>>>;
|
|
1075
|
+
id: z.ZodOptional<z.ZodString>;
|
|
1075
1076
|
title: z.ZodOptional<z.ZodString>;
|
|
1076
1077
|
description: z.ZodOptional<z.ZodString>;
|
|
1077
1078
|
validation: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
@@ -1084,6 +1085,7 @@ export declare const actionStepSchemas: {
|
|
|
1084
1085
|
intensity?: "light" | "medium" | "heavy" | undefined;
|
|
1085
1086
|
colors?: string[] | undefined;
|
|
1086
1087
|
props?: Record<string, unknown> | undefined;
|
|
1088
|
+
id?: string | undefined;
|
|
1087
1089
|
validation?: string[] | undefined;
|
|
1088
1090
|
triggerWhen?: {
|
|
1089
1091
|
type: "rules";
|
|
@@ -1176,6 +1178,7 @@ export declare const actionStepSchemas: {
|
|
|
1176
1178
|
intensity?: "light" | "medium" | "heavy" | undefined;
|
|
1177
1179
|
colors?: string[] | undefined;
|
|
1178
1180
|
props?: Record<string, unknown> | undefined;
|
|
1181
|
+
id?: string | undefined;
|
|
1179
1182
|
validation?: string[] | undefined;
|
|
1180
1183
|
triggerWhen?: {
|
|
1181
1184
|
type: "rules";
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0CxB;;;GAGG;AACH,eAAO,MAAM,YAAY;IAErB,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgD/B,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4F7B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAgC3B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyB3B,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2F3B,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiE3B,CAAC;AAEJ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAwD1D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.js
CHANGED
|
@@ -7,6 +7,7 @@ var AnchorIdZ = z.object({
|
|
|
7
7
|
route: z.union([z.string(), z.array(z.string())])
|
|
8
8
|
}).strict();
|
|
9
9
|
var AuthoringFieldsZ = {
|
|
10
|
+
id: z.string().optional().describe('Stable action identifier (e.g. "act_3db6a14d2ab0").'),
|
|
10
11
|
title: z.string().max(200).optional().describe("Authoring-only: short label shown on the action plan dashboard. Stripped before serving to the runtime SDK."),
|
|
11
12
|
description: z.string().max(1e3).optional().describe("Authoring-only: one-sentence explanation of what this action does and why. Stripped before serving to the runtime SDK."),
|
|
12
13
|
validation: z.array(z.string().max(500)).max(10).optional().describe("Authoring-only: ordered steps a reviewer can follow to trigger this action and visually confirm it works. Each entry is one step. Stripped before serving to the runtime SDK.")
|
package/dist/schema.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../sdk-contracts/dist/schemas.js", "../src/schema.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Shared Zod schemas for decision strategies, conditions, and event scoping.\n *\n * These are the canonical definitions \u2014 runtime-sdk and all adaptive packages\n * should import from here instead of duplicating.\n */\nimport { z } from 'zod';\n// =============================================================================\n// ANCHOR ID SCHEMA\n// =============================================================================\nexport const AnchorIdZ = z\n .object({\n selector: z.string(),\n route: z.union([z.string(), z.array(z.string())]),\n})\n .strict();\n// =============================================================================\n// AUTHORING FIELDS \u2014 title / description / validation\n//\n// These live on every action *during authoring* (LLM produces them; dashboard\n// displays them; reviewers QA-verify with them) but are stripped before the\n// runtime SDK receives the config. Stripping happens server-side in\n// `to_runtime_config` (platform/backend/app/domains/experiments/helpers.py).\n// They appear in the JSON Schema (and therefore in the tactician's prompt)\n// because the LLM needs to know they are valid action properties \u2014 otherwise\n// schema validation would reject what the prompt commands.\n//\n// Each action variant should `.extend(AuthoringFieldsZ)` alongside any\n// triggerWhen/condition extensions. Validation is an ordered list of\n// human-readable step strings \u2014 reviewers scan it as a checklist.\n// =============================================================================\nexport const AuthoringFieldsZ = {\n title: z\n .string()\n .max(200)\n .optional()\n .describe('Authoring-only: short label shown on the action plan dashboard. Stripped before serving to the runtime SDK.'),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe('Authoring-only: one-sentence explanation of what this action does and why. Stripped before serving to the runtime SDK.'),\n validation: z\n .array(z.string().max(500))\n .max(10)\n .optional()\n .describe('Authoring-only: ordered steps a reviewer can follow to trigger this action and visually confirm it works. Each entry is one step. Stripped before serving to the runtime SDK.'),\n};\n// =============================================================================\n// TRIGGER VOCABULARY \u2014 canonical lists of valid event names, metric keys, etc.\n// These flow through to the JSON schema as enums and are used by the LLM prompt.\n// =============================================================================\n/** Events that can be counted in event_count conditions. */\nexport const COUNTABLE_EVENTS = [\n // User interactions (from PostHog autocapture normalization)\n 'ui.click',\n 'ui.scroll',\n 'ui.input',\n 'ui.change',\n 'ui.submit',\n // Behavioral detectors (from event-processor)\n 'ui.hover',\n 'ui.idle',\n 'ui.scroll_thrash',\n 'ui.focus_bounce',\n // Navigation\n 'nav.page_view',\n 'nav.page_leave',\n // Derived behavioral signals\n 'behavior.rage_click',\n 'behavior.hesitation',\n 'behavior.confusion',\n];\nexport const CountableEventZ = z\n .enum(COUNTABLE_EVENTS)\n .describe('Event name to count. ui.* = user interactions and behavioral detectors, nav.* = page navigation, behavior.* = derived behavioral signals.');\n/** Valid session metric keys. */\nexport const SESSION_METRIC_KEYS = ['time_on_page', 'page_views', 'scroll_depth'];\nexport const SessionMetricKeyZ = z\n .enum(SESSION_METRIC_KEYS)\n .describe('Session metric key. time_on_page = seconds on current page, page_views = pages visited this session, scroll_depth = 0-100 percentage.');\n/** Element chain match field prefixes for counter filters. */\nexport const ELEMENT_MATCH_FIELDS = ['tag_name', '$el_text'];\n// Note: attr__* is a dynamic prefix (attr__data-id, attr__class, attr__href, etc.)\n// and cannot be enumerated. The match key is either one of ELEMENT_MATCH_FIELDS\n// or starts with \"attr__\".\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\nexport const PageUrlConditionZ = z\n .object({\n type: z.literal('page_url'),\n url: z.string().describe('URL path to match (e.g. \"/pricing\", \"/dashboard\")'),\n})\n .describe('Fires when the current page URL matches. Use for page-specific actions. ' +\n 'Example: {\"type\": \"page_url\", \"url\": \"/pricing\"}');\nexport const RouteConditionZ = z\n .object({\n type: z.literal('route'),\n routeId: z.string().describe('Named route ID from the route filter'),\n})\n .describe('Fires when the current route matches a named route ID.');\nexport const AnchorVisibleConditionZ = z\n .object({\n type: z.literal('anchor_visible'),\n anchorId: z.string().describe('CSS selector of the anchor element'),\n state: z\n .enum(['visible', 'present', 'absent'])\n .describe('\"visible\" = in viewport, \"present\" = in DOM, \"absent\" = not in DOM'),\n})\n .describe(\"Fires based on a DOM element's visibility state. \" +\n 'Example: {\"type\": \"anchor_visible\", \"anchorId\": \"#cta-button\", \"state\": \"visible\"}');\nexport const EventOccurredConditionZ = z\n .object({\n type: z.literal('event_occurred'),\n eventName: z.string().describe('Event name (e.g. \"ui.click\", \"$pageview\")'),\n withinMs: z.number().optional().describe('Time window in ms. Omit = any time this session.'),\n})\n .describe('Fires when a specific event has occurred during this session. ' +\n 'Example: {\"type\": \"event_occurred\", \"eventName\": \"ui.click\", \"withinMs\": 5000}');\nexport const StateEqualsConditionZ = z\n .object({\n type: z.literal('state_equals'),\n key: z\n .string()\n .describe('Key in the SDK persistent state store (localStorage). Only valid for keys the host app explicitly sets via syntro.state.set().'),\n value: z.unknown().describe('Expected value to match against'),\n})\n .describe('Checks the SDK persistent state store (localStorage). ONLY for host-app state set via syntro.state.set() \u2014 ' +\n 'NOT for user attributes like region, device, or UTM params (those are handled by segment targeting). ' +\n 'Do NOT use this for targeting. If you do not know the valid state keys, do not use this condition type.');\nexport const ViewportConditionZ = z\n .object({\n type: z.literal('viewport'),\n minWidth: z.number().optional().describe('Minimum viewport width in pixels'),\n maxWidth: z.number().optional().describe('Maximum viewport width in pixels'),\n minHeight: z.number().optional().describe('Minimum viewport height in pixels'),\n maxHeight: z.number().optional().describe('Maximum viewport height in pixels'),\n})\n .describe('Fires based on viewport (screen) size. Use for responsive behavior. ' +\n 'Example: {\"type\": \"viewport\", \"minWidth\": 768} \u2014 fires on tablet and larger.');\nexport const SessionMetricConditionZ = z\n .object({\n type: z.literal('session_metric'),\n key: SessionMetricKeyZ,\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number().describe('Numeric threshold to compare against'),\n})\n .describe('Fires when a session metric crosses a threshold. Valid keys: \"time_on_page\" (seconds), ' +\n '\"page_views\" (count), \"scroll_depth\" (0-100). ' +\n 'Example: {\"type\": \"session_metric\", \"key\": \"time_on_page\", \"operator\": \"gte\", \"threshold\": 30}');\nexport const DismissedConditionZ = z\n .object({\n type: z.literal('dismissed'),\n key: z.string().describe('Dismissal key (usually a tile or action ID)'),\n inverted: z\n .boolean()\n .optional()\n .describe('When true, fires if NOT dismissed (default behavior)'),\n})\n .describe('Checks if an item has been dismissed by the user. Use with inverted: true to show only if not dismissed.');\nexport const CooldownActiveConditionZ = z\n .object({\n type: z.literal('cooldown_active'),\n key: z.string().describe('Cooldown key'),\n inverted: z.boolean().optional().describe('When true, fires if cooldown is NOT active'),\n})\n .describe('Checks if a cooldown timer is currently active. Use to prevent showing the same intervention too frequently.');\nexport const FrequencyLimitConditionZ = z\n .object({\n type: z.literal('frequency_limit'),\n key: z.string().describe('Frequency counter key'),\n limit: z.number().describe('Maximum allowed count'),\n inverted: z.boolean().optional().describe('When true, fires if limit NOT reached'),\n})\n .describe('Checks if a frequency limit has been reached. Use to cap how many times an action fires per session.');\nexport const MatchOpZ = z\n .object({\n equals: z.union([z.string(), z.number(), z.boolean()]).optional(),\n contains: z.string().optional(),\n})\n .describe('Match operator for counter filters. Exactly one of equals or contains must be specified.');\nexport const CounterDefZ = z\n .object({\n events: z\n .array(CountableEventZ)\n .min(1)\n .describe('Event names to count. Use values from the countable events enum.'),\n match: z\n .record(z.string(), MatchOpZ)\n .optional()\n .describe('Property filters. Keys are event prop names or element-chain fields ' +\n '(tag_name, $el_text, attr__*). All entries AND together.'),\n})\n .describe('Defines what events to count. Registered as an accumulator predicate at config-load time.');\nexport const EventCountConditionZ = z\n .object({\n type: z.literal('event_count'),\n key: z.string().describe('Unique key for this counter (used for accumulator registration)'),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0).describe('Target count threshold'),\n withinMs: z\n .number()\n .positive()\n .optional()\n .describe('Time window in ms. Omit = count across entire session.'),\n counter: CounterDefZ.optional().describe('Inline counter definition. Defines what events to count.'),\n})\n .describe('Fires when accumulated event count crosses a threshold. Most powerful trigger type. ' +\n 'Example: {\"type\": \"event_count\", \"key\": \"pricing-clicks\", \"operator\": \"gte\", \"count\": 3, ' +\n '\"counter\": {\"events\": [\"ui.click\"], \"match\": {\"attr__data-cta\": {\"contains\": \"pricing\"}}}}');\nexport const ConditionZ = z.discriminatedUnion('type', [\n PageUrlConditionZ,\n RouteConditionZ,\n AnchorVisibleConditionZ,\n EventOccurredConditionZ,\n StateEqualsConditionZ,\n ViewportConditionZ,\n SessionMetricConditionZ,\n DismissedConditionZ,\n CooldownActiveConditionZ,\n FrequencyLimitConditionZ,\n EventCountConditionZ,\n]);\n// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\nexport const RuleZ = z\n .object({\n conditions: z\n .array(ConditionZ)\n .describe('Array of conditions \u2014 ALL must match (AND logic) for this rule to fire.'),\n value: z\n .unknown()\n .describe('Value returned when all conditions match. For triggerWhen: true = fire the action.'),\n})\n .describe('A single rule. ALL conditions must match (AND logic). Rules in a strategy are evaluated ' +\n 'top-to-bottom \u2014 first rule where all conditions match wins and returns its value.');\nexport const RuleStrategyZ = z\n .object({\n type: z.literal('rules'),\n rules: z\n .array(RuleZ)\n .describe('Ordered list of rules. Evaluated top-to-bottom \u2014 first match wins.'),\n default: z\n .unknown()\n .describe('Fallback value when no rule matches. For triggerWhen: false = do not fire by default.'),\n})\n .describe('Rule-based strategy. Evaluates rules top-to-bottom. First rule where ALL conditions match ' +\n 'returns its value. If no rule matches, returns default. ' +\n 'For triggerWhen: set value=true on matching rules, default=false.');\nexport const ScoreStrategyZ = z\n .object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n})\n .describe('Score-based strategy. Compares a field value against a threshold.');\nexport const ModelStrategyZ = z\n .object({\n type: z.literal('model'),\n modelId: z.string(),\n inputs: z.array(z.string()),\n outputMapping: z.record(z.string(), z.unknown()),\n default: z.unknown(),\n})\n .describe('ML model strategy. Sends inputs to a model and maps outputs.');\nexport const ExternalStrategyZ = z\n .object({\n type: z.literal('external'),\n endpoint: z.string(),\n method: z.enum(['GET', 'POST']).optional(),\n default: z.unknown(),\n timeoutMs: z.number().optional(),\n})\n .describe('External API strategy. Calls an endpoint to determine the value.');\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n/** Canonical Zod schema for the optional triggerWhen field on actions and adaptive items. */\nexport const TriggerWhenZ = DecisionStrategyZ.nullable().optional();\n// =============================================================================\n// TRIGGER DOCUMENTATION \u2014 examples and match field docs\n// Exported as constants so the schema generator can inject them into the\n// JSON schema. The Python prompt builder reads them from the schema.\n// =============================================================================\n/** Complete triggerWhen examples showing the full rules wrapper structure. */\nexport const TRIGGER_EXAMPLES = [\n {\n name: 'Click count on a specific element',\n description: 'Fire when user clicks an element with data-id=\"hero-cta\" 2+ times',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'event_count',\n key: 'cta-clicks',\n operator: 'gte',\n count: 2,\n counter: {\n events: ['ui.click'],\n match: { 'attr__data-id': { equals: 'hero-cta' } },\n },\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'Time on page threshold',\n description: 'Fire after user spends 30+ seconds on the page',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'session_metric',\n key: 'time_on_page',\n operator: 'gte',\n threshold: 30,\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'Element visible in viewport',\n description: 'Fire when a DOM element becomes visible',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'anchor_visible',\n anchorId: '#pricing-section',\n state: 'visible',\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'No trigger (fire immediately)',\n description: 'Action fires as soon as the segment matches \u2014 no in-session condition needed',\n triggerWhen: null,\n },\n];\n/** Documentation for counter.match field keys. */\nexport const MATCH_FIELD_DOCS = {\n tag_name: 'HTML tag name (e.g. \"button\", \"a\", \"input\")',\n $el_text: 'Visible text content of the element',\n 'attr__*': 'HTML attribute prefixed with attr__. Example: attr__data-id matches the data-id attribute, ' +\n 'attr__class matches the class attribute, attr__href matches the href attribute.',\n};\n// =============================================================================\n// EVENT SCOPE SCHEMA\n// =============================================================================\n/** Scopes a widget to specific events/URLs. */\nexport const EventScopeZ = z.object({\n events: z.array(z.string()),\n urlContains: z.string().optional(),\n props: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n// =============================================================================\n// NOTIFY SCHEMA\n// =============================================================================\n/** Toast notification config for triggerWhen transitions. */\nexport const NotifyZ = z\n .object({\n title: z.string().optional(),\n body: z.string().optional(),\n icon: z.string().optional(),\n})\n .nullable()\n .optional();\n", "/**\n * Adaptive Overlays - Config Schema\n *\n * Zod schema for validating overlays app configuration.\n */\n\nimport { AnchorIdZ, AuthoringFieldsZ, TriggerWhenZ } from '@syntrologie/sdk-contracts';\nimport { z } from 'zod';\n\n/**\n * Validates a CTA button href. See `runtime-sdk/src/actions/schema.ts` for\n * the canonical version \u2014 kept in sync. Two layers: a positive-allowlist\n * regex (serializes to JSON Schema `pattern`) and a URL-parse refine that\n * catches embedded-control-character bypasses.\n */\nconst SAFE_HREF_PATTERN =\n /^(?:[/.#?]|[hH][tT][tT][pP][sS]?:\\/\\/|[mM][aA][iI][lL][tT][oO]:|[tT][eE][lL]:)/;\n\nconst HrefZ = z\n .string()\n .min(1)\n .regex(SAFE_HREF_PATTERN, {\n message:\n 'href must start with /, ./, ../, #, ?, http(s)://, mailto:, or tel: \u2014 javascript:, data:, and vbscript: are not allowed',\n })\n .refine(\n (s) => {\n try {\n const parsed = new URL(s, 'https://syntro.local/');\n return ['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol);\n } catch {\n return false;\n }\n },\n { message: 'href resolves to an unsupported protocol' }\n );\n\nconst CtaButtonNavZ = {\n href: HrefZ.optional().describe(\n 'Optional URL to navigate to when the button is clicked. Relative paths (\"/product/x\"), fragments (\"#section\"), and absolute http(s) URLs are allowed. javascript:/data:/vbscript: are rejected. When actionId is \"dismiss\", the overlay closes without navigating regardless of href.'\n ),\n target: z\n .enum(['_self', '_blank'])\n .optional()\n .describe(\n 'Navigation target. \"_self\" (default) replaces the current tab; \"_blank\" opens a new tab with rel=noopener,noreferrer.'\n ),\n};\n\n/**\n * Overlays app config schema.\n * Defines the structure for overlay configurations in a canvas config.\n */\nexport const configSchema = z\n .object({\n /** Highlight configurations */\n highlights: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe('Route and CSS selector of the element to spotlight.'),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this highlight, used for logging and debugging.'\n ),\n style: z\n .object({\n color: z\n .string()\n .optional()\n .describe(\n 'Ring color as a CSS color string (e.g. \"#5b8cff\"). Defaults to brand blue.'\n ),\n paddingPx: z\n .number()\n .optional()\n .describe(\n 'Space in pixels between the element edge and the spotlight ring. Defaults to 12.'\n ),\n radiusPx: z\n .number()\n .optional()\n .describe('Corner radius of the spotlight ring in pixels. Defaults to 12.'),\n scrimOpacity: z\n .number()\n .optional()\n .describe(\n 'Opacity of the dark backdrop behind the spotlight (0\u20131). Set to 0 to show the ring without dimming the page. Defaults to 0.55.'\n ),\n })\n .optional()\n .describe('Optional visual style overrides for the spotlight ring and backdrop.'),\n })\n .describe(\n 'A spotlight highlight that dims the page and draws a ring around a target element.'\n )\n )\n .optional()\n .describe(\n 'Spotlight highlights: draw attention to specific elements by ringing them with a colored border and dimming the rest of the page.'\n ),\n\n /** Tooltip configurations */\n tooltips: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe(\n 'Route and CSS selector of the element the tooltip is anchored to.'\n ),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this tooltip, used for logging and debugging.'\n ),\n content: z\n .object({\n title: z\n .string()\n .optional()\n .describe('Optional heading shown at the top of the tooltip.'),\n body: z\n .string()\n .describe(\n 'Main tooltip text (required). Explains the feature or provides guidance.'\n ),\n cta: z\n .object({\n label: z.string().describe('Button label text for the single CTA.'),\n action: z.unknown().describe('Action step to execute when the CTA is clicked.'),\n })\n .optional()\n .describe(\n 'Optional single CTA button shorthand. Use ctaButtons for multiple actions.'\n ),\n ctaButtons: z\n .array(\n z.object({\n label: z.string().describe('Button label text.'),\n actionId: z\n .string()\n .describe(\n 'Action identifier published with the action.tooltip_cta_clicked event. Special values: \"dismiss\" closes the tooltip without publishing an event; \"faq:open:<questionId>\" opens the corresponding FAQ question in an adaptive-faq:accordion widget (companion tooltip pattern). Any other value publishes action.tooltip_cta_clicked with the actionId in event props for custom handling.'\n ),\n primary: z\n .boolean()\n .optional()\n .describe(\n 'When true, renders as the primary (filled) button style. Defaults to false.'\n ),\n ...CtaButtonNavZ,\n })\n )\n .optional()\n .describe(\n 'Optional multi-button CTA row. Preferred over the single cta shorthand when more than one action is needed. Each button publishes action.tooltip_cta_clicked with its actionId, and navigates to its href when one is set (unless actionId === \"dismiss\").'\n ),\n })\n .describe('Tooltip content including body text and optional title and CTA.'),\n trigger: z\n .enum(['immediate', 'hover', 'click'])\n .optional()\n .describe(\n '\"immediate\" shows on mount; \"hover\" shows when the user hovers the anchor; \"click\" shows on click. Defaults to \"immediate\".'\n ),\n placement: z\n .enum([\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n ])\n .optional()\n .describe(\n 'Preferred placement of the tooltip relative to the anchor element. The SDK flips to the opposite side if there is not enough space. Defaults to \"top\".'\n ),\n })\n .describe(\n 'A tooltip anchored to a DOM element. Use for contextual help, feature discovery, or CTA prompts near specific UI elements.'\n )\n )\n .optional()\n .describe(\n 'Tooltips anchored to DOM elements. Use for contextual help, upsell prompts, or feature discovery near specific UI elements.'\n ),\n\n /** Badge configurations */\n badges: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe(\n 'Route and CSS selector of the element to attach the badge to.'\n ),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this badge, used for logging and debugging.'\n ),\n content: z\n .string()\n .describe(\n 'Badge text (e.g. \"NEW\", \"3\", \"!\"). Keep short \u2014 typically 1\u20134 characters.'\n ),\n position: z\n .enum(['top-left', 'top-right', 'bottom-left', 'bottom-right'])\n .optional()\n .describe(\n 'Corner of the anchor element where the badge is positioned. Defaults to \"top-right\".'\n ),\n })\n .describe('A small badge indicator positioned at a corner of a target element.')\n )\n .optional()\n .describe(\n 'Badge indicators overlaid on DOM elements. Use for notification counts (\"3\"), status labels (\"NEW\"), or attention markers (\"!\").'\n ),\n\n /** Pulse configurations */\n pulses: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe('Route and CSS selector of the element to animate.'),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this pulse, used for logging and debugging.'\n ),\n duration: z\n .number()\n .optional()\n .describe('Animation duration in milliseconds. Defaults to 2000ms.'),\n })\n .describe(\n 'A pulsing animation applied to a DOM element to draw subtle attention without blocking interaction.'\n )\n )\n .optional()\n .describe(\n 'Pulse animations on DOM elements. Use for subtle attention-grabbing when highlights would be too intrusive.'\n ),\n\n /** Modal configurations */\n modals: z\n .array(\n z\n .object({\n summary: z\n .string()\n .describe(\n 'Human-readable description of this modal, used for logging and debugging.'\n ),\n content: z\n .object({\n title: z\n .string()\n .optional()\n .describe('Optional modal heading shown at the top of the dialog.'),\n body: z.string().describe('Main modal body text (required).'),\n })\n .describe('Modal content including body text and optional heading.'),\n size: z\n .enum(['sm', 'md', 'lg'])\n .optional()\n .describe(\n 'Dialog width: \"sm\" is narrow, \"md\" is standard, \"lg\" is wide. Defaults to \"md\".'\n ),\n blocking: z\n .boolean()\n .optional()\n .describe(\n 'When true, the modal blocks all page interaction until dismissed. Use sparingly \u2014 only for critical confirmations.'\n ),\n scrim: z\n .object({\n opacity: z\n .number()\n .optional()\n .describe('Backdrop opacity behind the modal (0\u20131). Defaults to 0.6.'),\n })\n .optional()\n .describe('Scrim (backdrop) configuration for the modal overlay.'),\n dismiss: z\n .object({\n onEsc: z\n .boolean()\n .optional()\n .describe('When true (default), pressing Escape closes the modal.'),\n closeButton: z\n .boolean()\n .optional()\n .describe('When true (default), an X close button is shown in the modal header.'),\n timeoutMs: z\n .number()\n .optional()\n .describe(\n 'Optional auto-close timeout in milliseconds. Omit to require explicit dismissal.'\n ),\n })\n .optional()\n .describe('Controls how the modal can be dismissed by the user.'),\n ctaButtons: z\n .array(\n z.object({\n label: z.string().describe('Button label text.'),\n actionId: z\n .string()\n .describe(\n 'Action identifier published with the action.modal_cta_clicked event. Use \"dismiss\" to close the modal without publishing an event.'\n ),\n primary: z\n .boolean()\n .optional()\n .describe(\n 'When true, renders as the primary (filled) button style. Defaults to false.'\n ),\n ...CtaButtonNavZ,\n })\n )\n .optional()\n .describe(\n 'Optional CTA buttons shown at the bottom of the modal. Each button navigates to its href when one is set (unless actionId === \"dismiss\").'\n ),\n })\n .describe(\n 'A centered dialog modal. Use for announcements, onboarding prompts, or required confirmations.'\n )\n )\n .optional()\n .describe(\n 'Modal dialogs overlaid on the page. Use for announcements, onboarding prompts, or confirmations that require explicit user acknowledgement.'\n ),\n\n /** Tour configurations */\n tours: z\n .array(\n z\n .object({\n tourId: z\n .string()\n .describe(\n 'Unique identifier for this tour, used to start/resume it via action or deeplink.'\n ),\n summary: z\n .string()\n .describe('Human-readable description of this tour, used for logging and debugging.'),\n steps: z\n .array(\n z.object({\n id: z.string().describe('Unique step identifier within this tour.'),\n action: z\n .record(z.unknown())\n .describe(\n 'Action step config to execute for this tour step (e.g. a tooltip or highlight).'\n ),\n route: z\n .string()\n .optional()\n .describe('Optional route the user must be on before this step executes.'),\n onAction: z\n .record(z.string())\n .optional()\n .describe(\n 'Map of action event \u2192 next step ID. Defines transitions between steps based on user interaction.'\n ),\n })\n )\n .min(\n 1,\n 'Tour must have at least one step \u2014 the executor throws Error(\\'Tour \"...\" has no steps\\') when steps is empty.'\n )\n .describe(\n 'Ordered list of tour steps. Each step executes one action and optionally transitions to the next.'\n ),\n startStep: z\n .string()\n .optional()\n .describe(\n 'ID of the step to begin the tour on. Defaults to the first step in the array.'\n ),\n autoStart: z\n .boolean()\n .optional()\n .describe(\n 'When true, the tour starts automatically when the config loads. Omit to require explicit triggering.'\n ),\n })\n .describe(\n 'A multi-step product tour. Steps execute sequentially (or via onAction transitions) to guide the user through a feature.'\n )\n )\n .optional()\n .describe(\n 'Multi-step product tours. Each tour chains overlay actions (tooltips, highlights) into a guided walkthrough of a feature or workflow.'\n ),\n })\n .describe(\n 'Props for adaptive-overlays visual overlay operations. Each field targets a list of overlay instances by type: highlights (spotlight), tooltips, badges, pulses, modals, and tours.'\n );\n\nexport type OverlaysConfig = z.infer<typeof configSchema>;\n\n// ============================================================================\n// Celebrate Action Schema\n// ============================================================================\n\nconst CelebrateActionZ = z\n .object({\n ...AuthoringFieldsZ,\n kind: z\n .literal('overlays:celebrate')\n .describe(\n 'Renders a fullscreen Canvas 2D celebration effect. Use to reward a user achievement (e.g. completing onboarding, first purchase).'\n ),\n effect: z\n .enum(['confetti', 'fireworks', 'sparkles', 'emoji-rain'])\n .describe(\n 'Effect preset name: \"confetti\" (falling pieces), \"fireworks\" (burst particles), \"sparkles\" (twinkling diamonds), \"emoji-rain\" (falling emoji).'\n ),\n duration: z\n .number()\n .optional()\n .describe('Animation duration in milliseconds. Defaults to 3000ms.'),\n intensity: z\n .enum(['light', 'medium', 'heavy'])\n .optional()\n .describe('Particle density: \"light\" is subtle, \"heavy\" is exuberant. Defaults to \"medium\".'),\n colors: z\n .array(z.string())\n .optional()\n .describe(\n 'Optional color palette as CSS color strings (e.g. [\"#ff0000\", \"#00ff00\"]). Defaults to a rainbow palette.'\n ),\n props: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Effect-specific properties. For \"emoji-rain\", use {\"emoji\": \"\uD83D\uDD25\"} to set the falling character.'\n ),\n label: z\n .string()\n .optional()\n .describe('Optional accessible label for the celebration (used for screen readers).'),\n triggerWhen: TriggerWhenZ.describe(\n 'Conditional trigger strategy. When null, the celebration fires immediately. Use a rules strategy to fire on a specific behavioral event.'\n ),\n })\n .strict()\n .describe(\n 'Fullscreen celebration effect action. Use to celebrate a user milestone. Pick an effect preset and optionally customize duration, intensity, and colors.'\n );\n\n// ============================================================================\n// Unified Schema Export\n// ============================================================================\n\nexport const actionStepSchemas = [{ defName: 'celebrate', schema: CelebrateActionZ }];\n\n// ============================================================================\n// Capabilities Documentation (injected into JSON Schema for LLM prompts)\n// ============================================================================\n\nexport const CAPABILITIES_DOCUMENTATION = {\n packageId: 'adaptive-overlays',\n description:\n 'Visual overlay capabilities including highlights, tooltips, badges, pulse animations, modals, tours, and celebrations.',\n whenToUse: [\n { goal: 'Draw attention to an element (spotlight)', action: 'overlays:highlight' },\n { goal: 'Show contextual help or guidance near an element', action: 'overlays:tooltip' },\n { goal: 'Add a notification indicator (count, \"NEW\")', action: 'overlays:badge' },\n { goal: 'Subtle attention-grab animation', action: 'overlays:pulse' },\n { goal: 'Show a blocking or non-blocking dialog', action: 'overlays:modal' },\n { goal: 'Celebrate a user achievement', action: 'overlays:celebrate' },\n { goal: 'Multi-step guided walkthrough', action: 'overlays:tour' },\n ],\n conventions: [\n {\n name: 'Tooltip actionId: \"dismiss\"',\n description:\n 'The special actionId \"dismiss\" closes the tooltip immediately without publishing an event or navigating (even if href is set). Use for \"close\" or \"not now\" buttons.',\n },\n {\n name: 'CTA navigation via href',\n description:\n 'To send users to a specific URL when they click a tooltip or modal CTA button, set the button\\'s `href` field (and optionally `target: \"_blank\"` to open a new tab). The runtime publishes the click event first, then navigates via window.location.assign / window.open. Do NOT try to drive navigation by setting data-href via content:setAttr \u2014 that does nothing on non-anchor elements. Example: { label: \"Shop GLP-3 (R)\", actionId: \"shop\", href: \"/product/glpiii\", primary: true }.',\n },\n {\n name: 'Companion FAQ tooltips (faq:open:<questionId>)',\n description:\n 'A tooltip CTA with actionId \"faq:open:<questionId>\" publishes action.tooltip_cta_clicked, which the adaptive-faq:accordion widget listens for. The matching FAQ question expands and scrolls into view. If the FAQ widget mounts after the click (e.g. canvas was closed), it checks EventBus history for recent faq:open:* events (within 10 seconds) and auto-expands on mount. The widget also publishes canvas.requestOpen to open the canvas panel if needed.',\n },\n {\n name: 'Celebrate effect presets',\n description:\n 'Available effects: \"confetti\" (falling rectangular/circular pieces with gravity and rotation), \"fireworks\" (burst centers with radiating particles and glow), \"sparkles\" (diamond shapes with sine-wave opacity and upward float), \"emoji-rain\" (emoji characters falling with horizontal wobble \u2014 set props.emoji to customize the character).',\n },\n ],\n events: [\n {\n name: 'action.tooltip_cta_clicked',\n when: 'User clicks a tooltip CTA button',\n props: '{ anchorId, actionId, label, href? }',\n },\n {\n name: 'action.modal_cta_clicked',\n when: 'User clicks a modal CTA button',\n props: '{ actionId, href? }',\n },\n ],\n};\n\n// ============================================================================\n// Tile Widget Definitions\n// ============================================================================\n\n/**\n * Tile widget definitions for unified JSON Schema generation.\n * Maps widget IDs to their props validation schema so the build script\n * can inject if/then constraints on tile.props.\n */\nconst WorkflowTrackerPropsZ = z.object({}).passthrough();\n\nexport const tileWidgets = [\n {\n widget: 'adaptive-overlays:workflow-tracker',\n defName: 'workflowTrackerProps',\n propsSchema: WorkflowTrackerPropsZ,\n },\n];\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Shared Zod schemas for decision strategies, conditions, and event scoping.\n *\n * These are the canonical definitions \u2014 runtime-sdk and all adaptive packages\n * should import from here instead of duplicating.\n */\nimport { z } from 'zod';\n// =============================================================================\n// ANCHOR ID SCHEMA\n// =============================================================================\nexport const AnchorIdZ = z\n .object({\n selector: z.string(),\n route: z.union([z.string(), z.array(z.string())]),\n})\n .strict();\n// =============================================================================\n// AUTHORING FIELDS \u2014 id / title / description / validation\n//\n// Shared fields every action carries. `id` is the action identifier the\n// runtime uses to dispatch, dedupe, and drop/replace actions \u2014 it is NOT\n// stripped before serving. `title` / `description` / `validation` are\n// authoring-only metadata stripped server-side in `to_runtime_config`\n// (platform/backend/app/domains/experiments/helpers.py).\n//\n// They all appear in the JSON Schema (and therefore in the tactician's\n// prompt) because the LLM needs to know they are valid action properties \u2014\n// otherwise schema validation would reject what the prompt commands.\n//\n// Each action variant should `.extend(AuthoringFieldsZ)` alongside any\n// triggerWhen/condition extensions.\n// =============================================================================\nexport const AuthoringFieldsZ = {\n id: z.string().optional().describe('Stable action identifier (e.g. \"act_3db6a14d2ab0\").'),\n title: z\n .string()\n .max(200)\n .optional()\n .describe('Authoring-only: short label shown on the action plan dashboard. Stripped before serving to the runtime SDK.'),\n description: z\n .string()\n .max(1000)\n .optional()\n .describe('Authoring-only: one-sentence explanation of what this action does and why. Stripped before serving to the runtime SDK.'),\n validation: z\n .array(z.string().max(500))\n .max(10)\n .optional()\n .describe('Authoring-only: ordered steps a reviewer can follow to trigger this action and visually confirm it works. Each entry is one step. Stripped before serving to the runtime SDK.'),\n};\n// =============================================================================\n// TRIGGER VOCABULARY \u2014 canonical lists of valid event names, metric keys, etc.\n// These flow through to the JSON schema as enums and are used by the LLM prompt.\n// =============================================================================\n/** Events that can be counted in event_count conditions. */\nexport const COUNTABLE_EVENTS = [\n // User interactions (from PostHog autocapture normalization)\n 'ui.click',\n 'ui.scroll',\n 'ui.input',\n 'ui.change',\n 'ui.submit',\n // Behavioral detectors (from event-processor)\n 'ui.hover',\n 'ui.idle',\n 'ui.scroll_thrash',\n 'ui.focus_bounce',\n // Navigation\n 'nav.page_view',\n 'nav.page_leave',\n // Derived behavioral signals\n 'behavior.rage_click',\n 'behavior.hesitation',\n 'behavior.confusion',\n];\nexport const CountableEventZ = z\n .enum(COUNTABLE_EVENTS)\n .describe('Event name to count. ui.* = user interactions and behavioral detectors, nav.* = page navigation, behavior.* = derived behavioral signals.');\n/** Valid session metric keys. */\nexport const SESSION_METRIC_KEYS = ['time_on_page', 'page_views', 'scroll_depth'];\nexport const SessionMetricKeyZ = z\n .enum(SESSION_METRIC_KEYS)\n .describe('Session metric key. time_on_page = seconds on current page, page_views = pages visited this session, scroll_depth = 0-100 percentage.');\n/** Element chain match field prefixes for counter filters. */\nexport const ELEMENT_MATCH_FIELDS = ['tag_name', '$el_text'];\n// Note: attr__* is a dynamic prefix (attr__data-id, attr__class, attr__href, etc.)\n// and cannot be enumerated. The match key is either one of ELEMENT_MATCH_FIELDS\n// or starts with \"attr__\".\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\nexport const PageUrlConditionZ = z\n .object({\n type: z.literal('page_url'),\n url: z.string().describe('URL path to match (e.g. \"/pricing\", \"/dashboard\")'),\n})\n .describe('Fires when the current page URL matches. Use for page-specific actions. ' +\n 'Example: {\"type\": \"page_url\", \"url\": \"/pricing\"}');\nexport const RouteConditionZ = z\n .object({\n type: z.literal('route'),\n routeId: z.string().describe('Named route ID from the route filter'),\n})\n .describe('Fires when the current route matches a named route ID.');\nexport const AnchorVisibleConditionZ = z\n .object({\n type: z.literal('anchor_visible'),\n anchorId: z.string().describe('CSS selector of the anchor element'),\n state: z\n .enum(['visible', 'present', 'absent'])\n .describe('\"visible\" = in viewport, \"present\" = in DOM, \"absent\" = not in DOM'),\n})\n .describe(\"Fires based on a DOM element's visibility state. \" +\n 'Example: {\"type\": \"anchor_visible\", \"anchorId\": \"#cta-button\", \"state\": \"visible\"}');\nexport const EventOccurredConditionZ = z\n .object({\n type: z.literal('event_occurred'),\n eventName: z.string().describe('Event name (e.g. \"ui.click\", \"$pageview\")'),\n withinMs: z.number().optional().describe('Time window in ms. Omit = any time this session.'),\n})\n .describe('Fires when a specific event has occurred during this session. ' +\n 'Example: {\"type\": \"event_occurred\", \"eventName\": \"ui.click\", \"withinMs\": 5000}');\nexport const StateEqualsConditionZ = z\n .object({\n type: z.literal('state_equals'),\n key: z\n .string()\n .describe('Key in the SDK persistent state store (localStorage). Only valid for keys the host app explicitly sets via syntro.state.set().'),\n value: z.unknown().describe('Expected value to match against'),\n})\n .describe('Checks the SDK persistent state store (localStorage). ONLY for host-app state set via syntro.state.set() \u2014 ' +\n 'NOT for user attributes like region, device, or UTM params (those are handled by segment targeting). ' +\n 'Do NOT use this for targeting. If you do not know the valid state keys, do not use this condition type.');\nexport const ViewportConditionZ = z\n .object({\n type: z.literal('viewport'),\n minWidth: z.number().optional().describe('Minimum viewport width in pixels'),\n maxWidth: z.number().optional().describe('Maximum viewport width in pixels'),\n minHeight: z.number().optional().describe('Minimum viewport height in pixels'),\n maxHeight: z.number().optional().describe('Maximum viewport height in pixels'),\n})\n .describe('Fires based on viewport (screen) size. Use for responsive behavior. ' +\n 'Example: {\"type\": \"viewport\", \"minWidth\": 768} \u2014 fires on tablet and larger.');\nexport const SessionMetricConditionZ = z\n .object({\n type: z.literal('session_metric'),\n key: SessionMetricKeyZ,\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number().describe('Numeric threshold to compare against'),\n})\n .describe('Fires when a session metric crosses a threshold. Valid keys: \"time_on_page\" (seconds), ' +\n '\"page_views\" (count), \"scroll_depth\" (0-100). ' +\n 'Example: {\"type\": \"session_metric\", \"key\": \"time_on_page\", \"operator\": \"gte\", \"threshold\": 30}');\nexport const DismissedConditionZ = z\n .object({\n type: z.literal('dismissed'),\n key: z.string().describe('Dismissal key (usually a tile or action ID)'),\n inverted: z\n .boolean()\n .optional()\n .describe('When true, fires if NOT dismissed (default behavior)'),\n})\n .describe('Checks if an item has been dismissed by the user. Use with inverted: true to show only if not dismissed.');\nexport const CooldownActiveConditionZ = z\n .object({\n type: z.literal('cooldown_active'),\n key: z.string().describe('Cooldown key'),\n inverted: z.boolean().optional().describe('When true, fires if cooldown is NOT active'),\n})\n .describe('Checks if a cooldown timer is currently active. Use to prevent showing the same intervention too frequently.');\nexport const FrequencyLimitConditionZ = z\n .object({\n type: z.literal('frequency_limit'),\n key: z.string().describe('Frequency counter key'),\n limit: z.number().describe('Maximum allowed count'),\n inverted: z.boolean().optional().describe('When true, fires if limit NOT reached'),\n})\n .describe('Checks if a frequency limit has been reached. Use to cap how many times an action fires per session.');\nexport const MatchOpZ = z\n .object({\n equals: z.union([z.string(), z.number(), z.boolean()]).optional(),\n contains: z.string().optional(),\n})\n .describe('Match operator for counter filters. Exactly one of equals or contains must be specified.');\nexport const CounterDefZ = z\n .object({\n events: z\n .array(CountableEventZ)\n .min(1)\n .describe('Event names to count. Use values from the countable events enum.'),\n match: z\n .record(z.string(), MatchOpZ)\n .optional()\n .describe('Property filters. Keys are event prop names or element-chain fields ' +\n '(tag_name, $el_text, attr__*). All entries AND together.'),\n})\n .describe('Defines what events to count. Registered as an accumulator predicate at config-load time.');\nexport const EventCountConditionZ = z\n .object({\n type: z.literal('event_count'),\n key: z.string().describe('Unique key for this counter (used for accumulator registration)'),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0).describe('Target count threshold'),\n withinMs: z\n .number()\n .positive()\n .optional()\n .describe('Time window in ms. Omit = count across entire session.'),\n counter: CounterDefZ.optional().describe('Inline counter definition. Defines what events to count.'),\n})\n .describe('Fires when accumulated event count crosses a threshold. Most powerful trigger type. ' +\n 'Example: {\"type\": \"event_count\", \"key\": \"pricing-clicks\", \"operator\": \"gte\", \"count\": 3, ' +\n '\"counter\": {\"events\": [\"ui.click\"], \"match\": {\"attr__data-cta\": {\"contains\": \"pricing\"}}}}');\nexport const ConditionZ = z.discriminatedUnion('type', [\n PageUrlConditionZ,\n RouteConditionZ,\n AnchorVisibleConditionZ,\n EventOccurredConditionZ,\n StateEqualsConditionZ,\n ViewportConditionZ,\n SessionMetricConditionZ,\n DismissedConditionZ,\n CooldownActiveConditionZ,\n FrequencyLimitConditionZ,\n EventCountConditionZ,\n]);\n// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\nexport const RuleZ = z\n .object({\n conditions: z\n .array(ConditionZ)\n .describe('Array of conditions \u2014 ALL must match (AND logic) for this rule to fire.'),\n value: z\n .unknown()\n .describe('Value returned when all conditions match. For triggerWhen: true = fire the action.'),\n})\n .describe('A single rule. ALL conditions must match (AND logic). Rules in a strategy are evaluated ' +\n 'top-to-bottom \u2014 first rule where all conditions match wins and returns its value.');\nexport const RuleStrategyZ = z\n .object({\n type: z.literal('rules'),\n rules: z\n .array(RuleZ)\n .describe('Ordered list of rules. Evaluated top-to-bottom \u2014 first match wins.'),\n default: z\n .unknown()\n .describe('Fallback value when no rule matches. For triggerWhen: false = do not fire by default.'),\n})\n .describe('Rule-based strategy. Evaluates rules top-to-bottom. First rule where ALL conditions match ' +\n 'returns its value. If no rule matches, returns default. ' +\n 'For triggerWhen: set value=true on matching rules, default=false.');\nexport const ScoreStrategyZ = z\n .object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n})\n .describe('Score-based strategy. Compares a field value against a threshold.');\nexport const ModelStrategyZ = z\n .object({\n type: z.literal('model'),\n modelId: z.string(),\n inputs: z.array(z.string()),\n outputMapping: z.record(z.string(), z.unknown()),\n default: z.unknown(),\n})\n .describe('ML model strategy. Sends inputs to a model and maps outputs.');\nexport const ExternalStrategyZ = z\n .object({\n type: z.literal('external'),\n endpoint: z.string(),\n method: z.enum(['GET', 'POST']).optional(),\n default: z.unknown(),\n timeoutMs: z.number().optional(),\n})\n .describe('External API strategy. Calls an endpoint to determine the value.');\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n/** Canonical Zod schema for the optional triggerWhen field on actions and adaptive items. */\nexport const TriggerWhenZ = DecisionStrategyZ.nullable().optional();\n// =============================================================================\n// TRIGGER DOCUMENTATION \u2014 examples and match field docs\n// Exported as constants so the schema generator can inject them into the\n// JSON schema. The Python prompt builder reads them from the schema.\n// =============================================================================\n/** Complete triggerWhen examples showing the full rules wrapper structure. */\nexport const TRIGGER_EXAMPLES = [\n {\n name: 'Click count on a specific element',\n description: 'Fire when user clicks an element with data-id=\"hero-cta\" 2+ times',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'event_count',\n key: 'cta-clicks',\n operator: 'gte',\n count: 2,\n counter: {\n events: ['ui.click'],\n match: { 'attr__data-id': { equals: 'hero-cta' } },\n },\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'Time on page threshold',\n description: 'Fire after user spends 30+ seconds on the page',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'session_metric',\n key: 'time_on_page',\n operator: 'gte',\n threshold: 30,\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'Element visible in viewport',\n description: 'Fire when a DOM element becomes visible',\n triggerWhen: {\n type: 'rules',\n rules: [\n {\n conditions: [\n {\n type: 'anchor_visible',\n anchorId: '#pricing-section',\n state: 'visible',\n },\n ],\n value: true,\n },\n ],\n default: false,\n },\n },\n {\n name: 'No trigger (fire immediately)',\n description: 'Action fires as soon as the segment matches \u2014 no in-session condition needed',\n triggerWhen: null,\n },\n];\n/** Documentation for counter.match field keys. */\nexport const MATCH_FIELD_DOCS = {\n tag_name: 'HTML tag name (e.g. \"button\", \"a\", \"input\")',\n $el_text: 'Visible text content of the element',\n 'attr__*': 'HTML attribute prefixed with attr__. Example: attr__data-id matches the data-id attribute, ' +\n 'attr__class matches the class attribute, attr__href matches the href attribute.',\n};\n// =============================================================================\n// EVENT SCOPE SCHEMA\n// =============================================================================\n/** Scopes a widget to specific events/URLs. */\nexport const EventScopeZ = z.object({\n events: z.array(z.string()),\n urlContains: z.string().optional(),\n props: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n// =============================================================================\n// NOTIFY SCHEMA\n// =============================================================================\n/** Toast notification config for triggerWhen transitions. */\nexport const NotifyZ = z\n .object({\n title: z.string().optional(),\n body: z.string().optional(),\n icon: z.string().optional(),\n})\n .nullable()\n .optional();\n", "/**\n * Adaptive Overlays - Config Schema\n *\n * Zod schema for validating overlays app configuration.\n */\n\nimport { AnchorIdZ, AuthoringFieldsZ, TriggerWhenZ } from '@syntrologie/sdk-contracts';\nimport { z } from 'zod';\n\n/**\n * Validates a CTA button href. See `runtime-sdk/src/actions/schema.ts` for\n * the canonical version \u2014 kept in sync. Two layers: a positive-allowlist\n * regex (serializes to JSON Schema `pattern`) and a URL-parse refine that\n * catches embedded-control-character bypasses.\n */\nconst SAFE_HREF_PATTERN =\n /^(?:[/.#?]|[hH][tT][tT][pP][sS]?:\\/\\/|[mM][aA][iI][lL][tT][oO]:|[tT][eE][lL]:)/;\n\nconst HrefZ = z\n .string()\n .min(1)\n .regex(SAFE_HREF_PATTERN, {\n message:\n 'href must start with /, ./, ../, #, ?, http(s)://, mailto:, or tel: \u2014 javascript:, data:, and vbscript: are not allowed',\n })\n .refine(\n (s) => {\n try {\n const parsed = new URL(s, 'https://syntro.local/');\n return ['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol);\n } catch {\n return false;\n }\n },\n { message: 'href resolves to an unsupported protocol' }\n );\n\nconst CtaButtonNavZ = {\n href: HrefZ.optional().describe(\n 'Optional URL to navigate to when the button is clicked. Relative paths (\"/product/x\"), fragments (\"#section\"), and absolute http(s) URLs are allowed. javascript:/data:/vbscript: are rejected. When actionId is \"dismiss\", the overlay closes without navigating regardless of href.'\n ),\n target: z\n .enum(['_self', '_blank'])\n .optional()\n .describe(\n 'Navigation target. \"_self\" (default) replaces the current tab; \"_blank\" opens a new tab with rel=noopener,noreferrer.'\n ),\n};\n\n/**\n * Overlays app config schema.\n * Defines the structure for overlay configurations in a canvas config.\n */\nexport const configSchema = z\n .object({\n /** Highlight configurations */\n highlights: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe('Route and CSS selector of the element to spotlight.'),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this highlight, used for logging and debugging.'\n ),\n style: z\n .object({\n color: z\n .string()\n .optional()\n .describe(\n 'Ring color as a CSS color string (e.g. \"#5b8cff\"). Defaults to brand blue.'\n ),\n paddingPx: z\n .number()\n .optional()\n .describe(\n 'Space in pixels between the element edge and the spotlight ring. Defaults to 12.'\n ),\n radiusPx: z\n .number()\n .optional()\n .describe('Corner radius of the spotlight ring in pixels. Defaults to 12.'),\n scrimOpacity: z\n .number()\n .optional()\n .describe(\n 'Opacity of the dark backdrop behind the spotlight (0\u20131). Set to 0 to show the ring without dimming the page. Defaults to 0.55.'\n ),\n })\n .optional()\n .describe('Optional visual style overrides for the spotlight ring and backdrop.'),\n })\n .describe(\n 'A spotlight highlight that dims the page and draws a ring around a target element.'\n )\n )\n .optional()\n .describe(\n 'Spotlight highlights: draw attention to specific elements by ringing them with a colored border and dimming the rest of the page.'\n ),\n\n /** Tooltip configurations */\n tooltips: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe(\n 'Route and CSS selector of the element the tooltip is anchored to.'\n ),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this tooltip, used for logging and debugging.'\n ),\n content: z\n .object({\n title: z\n .string()\n .optional()\n .describe('Optional heading shown at the top of the tooltip.'),\n body: z\n .string()\n .describe(\n 'Main tooltip text (required). Explains the feature or provides guidance.'\n ),\n cta: z\n .object({\n label: z.string().describe('Button label text for the single CTA.'),\n action: z.unknown().describe('Action step to execute when the CTA is clicked.'),\n })\n .optional()\n .describe(\n 'Optional single CTA button shorthand. Use ctaButtons for multiple actions.'\n ),\n ctaButtons: z\n .array(\n z.object({\n label: z.string().describe('Button label text.'),\n actionId: z\n .string()\n .describe(\n 'Action identifier published with the action.tooltip_cta_clicked event. Special values: \"dismiss\" closes the tooltip without publishing an event; \"faq:open:<questionId>\" opens the corresponding FAQ question in an adaptive-faq:accordion widget (companion tooltip pattern). Any other value publishes action.tooltip_cta_clicked with the actionId in event props for custom handling.'\n ),\n primary: z\n .boolean()\n .optional()\n .describe(\n 'When true, renders as the primary (filled) button style. Defaults to false.'\n ),\n ...CtaButtonNavZ,\n })\n )\n .optional()\n .describe(\n 'Optional multi-button CTA row. Preferred over the single cta shorthand when more than one action is needed. Each button publishes action.tooltip_cta_clicked with its actionId, and navigates to its href when one is set (unless actionId === \"dismiss\").'\n ),\n })\n .describe('Tooltip content including body text and optional title and CTA.'),\n trigger: z\n .enum(['immediate', 'hover', 'click'])\n .optional()\n .describe(\n '\"immediate\" shows on mount; \"hover\" shows when the user hovers the anchor; \"click\" shows on click. Defaults to \"immediate\".'\n ),\n placement: z\n .enum([\n 'top',\n 'top-start',\n 'top-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n ])\n .optional()\n .describe(\n 'Preferred placement of the tooltip relative to the anchor element. The SDK flips to the opposite side if there is not enough space. Defaults to \"top\".'\n ),\n })\n .describe(\n 'A tooltip anchored to a DOM element. Use for contextual help, feature discovery, or CTA prompts near specific UI elements.'\n )\n )\n .optional()\n .describe(\n 'Tooltips anchored to DOM elements. Use for contextual help, upsell prompts, or feature discovery near specific UI elements.'\n ),\n\n /** Badge configurations */\n badges: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe(\n 'Route and CSS selector of the element to attach the badge to.'\n ),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this badge, used for logging and debugging.'\n ),\n content: z\n .string()\n .describe(\n 'Badge text (e.g. \"NEW\", \"3\", \"!\"). Keep short \u2014 typically 1\u20134 characters.'\n ),\n position: z\n .enum(['top-left', 'top-right', 'bottom-left', 'bottom-right'])\n .optional()\n .describe(\n 'Corner of the anchor element where the badge is positioned. Defaults to \"top-right\".'\n ),\n })\n .describe('A small badge indicator positioned at a corner of a target element.')\n )\n .optional()\n .describe(\n 'Badge indicators overlaid on DOM elements. Use for notification counts (\"3\"), status labels (\"NEW\"), or attention markers (\"!\").'\n ),\n\n /** Pulse configurations */\n pulses: z\n .array(\n z\n .object({\n anchorId: AnchorIdZ.describe('Route and CSS selector of the element to animate.'),\n summary: z\n .string()\n .describe(\n 'Human-readable description of this pulse, used for logging and debugging.'\n ),\n duration: z\n .number()\n .optional()\n .describe('Animation duration in milliseconds. Defaults to 2000ms.'),\n })\n .describe(\n 'A pulsing animation applied to a DOM element to draw subtle attention without blocking interaction.'\n )\n )\n .optional()\n .describe(\n 'Pulse animations on DOM elements. Use for subtle attention-grabbing when highlights would be too intrusive.'\n ),\n\n /** Modal configurations */\n modals: z\n .array(\n z\n .object({\n summary: z\n .string()\n .describe(\n 'Human-readable description of this modal, used for logging and debugging.'\n ),\n content: z\n .object({\n title: z\n .string()\n .optional()\n .describe('Optional modal heading shown at the top of the dialog.'),\n body: z.string().describe('Main modal body text (required).'),\n })\n .describe('Modal content including body text and optional heading.'),\n size: z\n .enum(['sm', 'md', 'lg'])\n .optional()\n .describe(\n 'Dialog width: \"sm\" is narrow, \"md\" is standard, \"lg\" is wide. Defaults to \"md\".'\n ),\n blocking: z\n .boolean()\n .optional()\n .describe(\n 'When true, the modal blocks all page interaction until dismissed. Use sparingly \u2014 only for critical confirmations.'\n ),\n scrim: z\n .object({\n opacity: z\n .number()\n .optional()\n .describe('Backdrop opacity behind the modal (0\u20131). Defaults to 0.6.'),\n })\n .optional()\n .describe('Scrim (backdrop) configuration for the modal overlay.'),\n dismiss: z\n .object({\n onEsc: z\n .boolean()\n .optional()\n .describe('When true (default), pressing Escape closes the modal.'),\n closeButton: z\n .boolean()\n .optional()\n .describe('When true (default), an X close button is shown in the modal header.'),\n timeoutMs: z\n .number()\n .optional()\n .describe(\n 'Optional auto-close timeout in milliseconds. Omit to require explicit dismissal.'\n ),\n })\n .optional()\n .describe('Controls how the modal can be dismissed by the user.'),\n ctaButtons: z\n .array(\n z.object({\n label: z.string().describe('Button label text.'),\n actionId: z\n .string()\n .describe(\n 'Action identifier published with the action.modal_cta_clicked event. Use \"dismiss\" to close the modal without publishing an event.'\n ),\n primary: z\n .boolean()\n .optional()\n .describe(\n 'When true, renders as the primary (filled) button style. Defaults to false.'\n ),\n ...CtaButtonNavZ,\n })\n )\n .optional()\n .describe(\n 'Optional CTA buttons shown at the bottom of the modal. Each button navigates to its href when one is set (unless actionId === \"dismiss\").'\n ),\n })\n .describe(\n 'A centered dialog modal. Use for announcements, onboarding prompts, or required confirmations.'\n )\n )\n .optional()\n .describe(\n 'Modal dialogs overlaid on the page. Use for announcements, onboarding prompts, or confirmations that require explicit user acknowledgement.'\n ),\n\n /** Tour configurations */\n tours: z\n .array(\n z\n .object({\n tourId: z\n .string()\n .describe(\n 'Unique identifier for this tour, used to start/resume it via action or deeplink.'\n ),\n summary: z\n .string()\n .describe('Human-readable description of this tour, used for logging and debugging.'),\n steps: z\n .array(\n z.object({\n id: z.string().describe('Unique step identifier within this tour.'),\n action: z\n .record(z.unknown())\n .describe(\n 'Action step config to execute for this tour step (e.g. a tooltip or highlight).'\n ),\n route: z\n .string()\n .optional()\n .describe('Optional route the user must be on before this step executes.'),\n onAction: z\n .record(z.string())\n .optional()\n .describe(\n 'Map of action event \u2192 next step ID. Defines transitions between steps based on user interaction.'\n ),\n })\n )\n .min(\n 1,\n 'Tour must have at least one step \u2014 the executor throws Error(\\'Tour \"...\" has no steps\\') when steps is empty.'\n )\n .describe(\n 'Ordered list of tour steps. Each step executes one action and optionally transitions to the next.'\n ),\n startStep: z\n .string()\n .optional()\n .describe(\n 'ID of the step to begin the tour on. Defaults to the first step in the array.'\n ),\n autoStart: z\n .boolean()\n .optional()\n .describe(\n 'When true, the tour starts automatically when the config loads. Omit to require explicit triggering.'\n ),\n })\n .describe(\n 'A multi-step product tour. Steps execute sequentially (or via onAction transitions) to guide the user through a feature.'\n )\n )\n .optional()\n .describe(\n 'Multi-step product tours. Each tour chains overlay actions (tooltips, highlights) into a guided walkthrough of a feature or workflow.'\n ),\n })\n .describe(\n 'Props for adaptive-overlays visual overlay operations. Each field targets a list of overlay instances by type: highlights (spotlight), tooltips, badges, pulses, modals, and tours.'\n );\n\nexport type OverlaysConfig = z.infer<typeof configSchema>;\n\n// ============================================================================\n// Celebrate Action Schema\n// ============================================================================\n\nconst CelebrateActionZ = z\n .object({\n ...AuthoringFieldsZ,\n kind: z\n .literal('overlays:celebrate')\n .describe(\n 'Renders a fullscreen Canvas 2D celebration effect. Use to reward a user achievement (e.g. completing onboarding, first purchase).'\n ),\n effect: z\n .enum(['confetti', 'fireworks', 'sparkles', 'emoji-rain'])\n .describe(\n 'Effect preset name: \"confetti\" (falling pieces), \"fireworks\" (burst particles), \"sparkles\" (twinkling diamonds), \"emoji-rain\" (falling emoji).'\n ),\n duration: z\n .number()\n .optional()\n .describe('Animation duration in milliseconds. Defaults to 3000ms.'),\n intensity: z\n .enum(['light', 'medium', 'heavy'])\n .optional()\n .describe('Particle density: \"light\" is subtle, \"heavy\" is exuberant. Defaults to \"medium\".'),\n colors: z\n .array(z.string())\n .optional()\n .describe(\n 'Optional color palette as CSS color strings (e.g. [\"#ff0000\", \"#00ff00\"]). Defaults to a rainbow palette.'\n ),\n props: z\n .record(z.unknown())\n .optional()\n .describe(\n 'Effect-specific properties. For \"emoji-rain\", use {\"emoji\": \"\uD83D\uDD25\"} to set the falling character.'\n ),\n label: z\n .string()\n .optional()\n .describe('Optional accessible label for the celebration (used for screen readers).'),\n triggerWhen: TriggerWhenZ.describe(\n 'Conditional trigger strategy. When null, the celebration fires immediately. Use a rules strategy to fire on a specific behavioral event.'\n ),\n })\n .strict()\n .describe(\n 'Fullscreen celebration effect action. Use to celebrate a user milestone. Pick an effect preset and optionally customize duration, intensity, and colors.'\n );\n\n// ============================================================================\n// Unified Schema Export\n// ============================================================================\n\nexport const actionStepSchemas = [{ defName: 'celebrate', schema: CelebrateActionZ }];\n\n// ============================================================================\n// Capabilities Documentation (injected into JSON Schema for LLM prompts)\n// ============================================================================\n\nexport const CAPABILITIES_DOCUMENTATION = {\n packageId: 'adaptive-overlays',\n description:\n 'Visual overlay capabilities including highlights, tooltips, badges, pulse animations, modals, tours, and celebrations.',\n whenToUse: [\n { goal: 'Draw attention to an element (spotlight)', action: 'overlays:highlight' },\n { goal: 'Show contextual help or guidance near an element', action: 'overlays:tooltip' },\n { goal: 'Add a notification indicator (count, \"NEW\")', action: 'overlays:badge' },\n { goal: 'Subtle attention-grab animation', action: 'overlays:pulse' },\n { goal: 'Show a blocking or non-blocking dialog', action: 'overlays:modal' },\n { goal: 'Celebrate a user achievement', action: 'overlays:celebrate' },\n { goal: 'Multi-step guided walkthrough', action: 'overlays:tour' },\n ],\n conventions: [\n {\n name: 'Tooltip actionId: \"dismiss\"',\n description:\n 'The special actionId \"dismiss\" closes the tooltip immediately without publishing an event or navigating (even if href is set). Use for \"close\" or \"not now\" buttons.',\n },\n {\n name: 'CTA navigation via href',\n description:\n 'To send users to a specific URL when they click a tooltip or modal CTA button, set the button\\'s `href` field (and optionally `target: \"_blank\"` to open a new tab). The runtime publishes the click event first, then navigates via window.location.assign / window.open. Do NOT try to drive navigation by setting data-href via content:setAttr \u2014 that does nothing on non-anchor elements. Example: { label: \"Shop GLP-3 (R)\", actionId: \"shop\", href: \"/product/glpiii\", primary: true }.',\n },\n {\n name: 'Companion FAQ tooltips (faq:open:<questionId>)',\n description:\n 'A tooltip CTA with actionId \"faq:open:<questionId>\" publishes action.tooltip_cta_clicked, which the adaptive-faq:accordion widget listens for. The matching FAQ question expands and scrolls into view. If the FAQ widget mounts after the click (e.g. canvas was closed), it checks EventBus history for recent faq:open:* events (within 10 seconds) and auto-expands on mount. The widget also publishes canvas.requestOpen to open the canvas panel if needed.',\n },\n {\n name: 'Celebrate effect presets',\n description:\n 'Available effects: \"confetti\" (falling rectangular/circular pieces with gravity and rotation), \"fireworks\" (burst centers with radiating particles and glow), \"sparkles\" (diamond shapes with sine-wave opacity and upward float), \"emoji-rain\" (emoji characters falling with horizontal wobble \u2014 set props.emoji to customize the character).',\n },\n ],\n events: [\n {\n name: 'action.tooltip_cta_clicked',\n when: 'User clicks a tooltip CTA button',\n props: '{ anchorId, actionId, label, href? }',\n },\n {\n name: 'action.modal_cta_clicked',\n when: 'User clicks a modal CTA button',\n props: '{ actionId, href? }',\n },\n ],\n};\n\n// ============================================================================\n// Tile Widget Definitions\n// ============================================================================\n\n/**\n * Tile widget definitions for unified JSON Schema generation.\n * Maps widget IDs to their props validation schema so the build script\n * can inject if/then constraints on tile.props.\n */\nconst WorkflowTrackerPropsZ = z.object({}).passthrough();\n\nexport const tileWidgets = [\n {\n widget: 'adaptive-overlays:workflow-tracker',\n defName: 'workflowTrackerProps',\n propsSchema: WorkflowTrackerPropsZ,\n },\n];\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["z"]
|
|
7
7
|
}
|
package/package.json
CHANGED