@syntrologie/runtime-sdk 2.14.0 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/SmartCanvasElementLit.d.ts +166 -0
- package/dist/actions/schema.js +4 -3
- package/dist/actions/types.d.ts +8 -2
- package/dist/anchor/AnchorResolver.d.ts +1 -0
- package/dist/api-lit.d.ts +84 -0
- package/dist/apps/builtinRuntimeModules-lit.d.ts +20 -0
- package/dist/bootstrap-types.d.ts +10 -0
- package/dist/chunk-2IQ2PTLJ.js +871 -0
- package/dist/chunk-2IQ2PTLJ.js.map +7 -0
- package/dist/{chunk-YLLWLUQX.js → chunk-4HXPGXUC.js} +1 -16
- package/dist/{chunk-YLLWLUQX.js.map → chunk-4HXPGXUC.js.map} +1 -1
- package/dist/{chunk-JCDCANR7.js → chunk-CVMZW3II.js} +951 -1040
- package/dist/chunk-CVMZW3II.js.map +7 -0
- package/dist/{chunk-IR6UOR63.js → chunk-GX7BBYX6.js} +2 -2
- package/dist/chunk-JMHRHAEL.js +18 -0
- package/dist/chunk-JMHRHAEL.js.map +7 -0
- package/dist/{chunk-77TNZ66J.js → chunk-XVRDKBYF.js} +3 -3
- package/dist/components/SyntroCanvasOverlay.d.ts +100 -0
- package/dist/components/SyntroDrawer.d.ts +110 -0
- package/dist/components/SyntroLauncher.d.ts +105 -0
- package/dist/components/SyntroTileCard.d.ts +74 -0
- package/dist/components/SyntroTileWheel.d.ts +51 -0
- package/dist/config/schema.js +3 -2
- package/dist/controllers/DecisionController.d.ts +48 -0
- package/dist/controllers/NotificationsController.d.ts +59 -0
- package/dist/controllers/RuntimeController.d.ts +52 -0
- package/dist/controllers/RuntimeEventsController.d.ts +42 -0
- package/dist/controllers/ThemeController.d.ts +110 -0
- package/dist/controllers/index.d.ts +13 -0
- package/dist/decisions/schema.js +2 -1
- package/dist/decisions/types.d.ts +4 -0
- package/dist/editorLoader.d.ts +5 -0
- package/dist/index-lit.d.ts +40 -0
- package/dist/index.js +1264 -19
- package/dist/index.js.map +4 -4
- package/dist/interop/LitInReact.d.ts +27 -0
- package/dist/interop/ReactInLit.d.ts +42 -0
- package/dist/interop/index.d.ts +7 -0
- package/dist/metrics/sessionMetrics.d.ts +4 -0
- package/dist/notifications/SyntroToastStack.d.ts +43 -0
- package/dist/react-compat.d.ts +114 -0
- package/dist/react.js +6 -4
- package/dist/react.js.map +1 -1
- package/dist/smart-canvas.esm.js +856 -240
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +31411 -40000
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +855 -240
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/theme/index.js +30 -0
- package/dist/theme/index.js.map +7 -0
- package/dist/version.d.ts +1 -1
- package/package.json +10 -1
- package/dist/chunk-JCDCANR7.js.map +0 -7
- /package/dist/{chunk-IR6UOR63.js.map → chunk-GX7BBYX6.js.map} +0 -0
- /package/dist/{chunk-77TNZ66J.js.map → chunk-XVRDKBYF.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../design-system/src/tokens/colors.ts", "../../design-system/src/tokens/panel-shell.ts", "../src/theme/defaultTheme.ts", "../src/theme/ThemeProvider.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Syntro Design System - Color Tokens\n *\n * This file contains all color tokens from the Figma design system.\n * Colors are organized by scale and semantic meaning.\n *\n * @see https://www.figma.com/design/U0Ol5vM7FQvgPfIgCAgxgb/Design-System\n */\n\n// ============================================================================\n// BASE COLORS\n// ============================================================================\n\nexport const base = {\n white: '#ffffff',\n black: '#000000',\n} as const;\n\n// ============================================================================\n// BRAND COLORS\n// ============================================================================\n\nexport const brand = {\n 0: '#2c0b0a',\n 1: '#5b1715',\n 2: '#89221f',\n 3: '#b72e2a',\n 4: '#d44844',\n 5: '#dd6d69',\n 6: '#e5918f',\n 7: '#eeb6b4',\n 8: '#f6dada',\n 9: '#faebea',\n} as const;\n\n// ============================================================================\n// NEUTRAL COLORS\n// ============================================================================\n\nexport const slateGrey = {\n 0: '#07080a',\n 1: '#0f1318',\n 2: '#0e1114',\n 3: '#1c222a',\n 4: '#2b333f',\n 5: '#394454',\n 6: '#475569',\n 7: '#677384',\n 8: '#87919f',\n 9: '#a8afba',\n 10: '#cbd0d7',\n 11: '#e8eaee',\n 12: '#f6f7f9',\n} as const;\n\n// ============================================================================\n// SEMANTIC COLOR SCALES\n// ============================================================================\n\nexport const green = {\n 0: '#07230a',\n 1: '#0e4514',\n 2: '#16681e',\n 3: '#1d8a28',\n 4: '#24ad32',\n 5: '#4fbd5a',\n 6: '#7acd82',\n 7: '#a5deab',\n 8: '#d0eed3',\n 9: '#e5f6e7',\n} as const;\n\nexport const yellow = {\n 0: '#301f09',\n 1: '#5f3e12',\n 2: '#8f5e1b',\n 3: '#be7d24',\n 4: '#ee9c2d',\n 5: '#f1b057',\n 6: '#f5c481',\n 7: '#f8d7ab',\n 8: '#fcebd5',\n 9: '#fdf5ea',\n} as const;\n\nexport const red = {\n 0: '#330707',\n 1: '#660f0e',\n 2: '#991616',\n 3: '#cc1e1d',\n 4: '#ff2524',\n 5: '#ff5150',\n 6: '#ff7c7c',\n 7: '#ffa8a7',\n 8: '#ffd3d3',\n 9: '#ffe9e9',\n} as const;\n\nexport const blue = {\n 0: '#051533',\n 1: '#0a2a66',\n 2: '#0f3f98',\n 3: '#1454cb',\n 4: '#1969fe',\n 5: '#4787fe',\n 6: '#75a5fe',\n 7: '#a3c3ff',\n 8: '#d1e1ff',\n 9: '#e8f0ff',\n} as const;\n\nexport const orange = {\n 0: '#662500',\n 1: '#993d00',\n 2: '#cc5800',\n 3: '#ff7700',\n 4: '#fea85d',\n 5: '#fec58f',\n 6: '#ffd6ae',\n 7: '#fee6cd',\n 8: '#fff1e1',\n 9: '#fff8f0',\n} as const;\n\nexport const purple = {\n 0: '#151229',\n 1: '#2a2452',\n 2: '#40357c',\n 3: '#5547a5',\n 4: '#6a59ce',\n 5: '#887ad8',\n 6: '#a69be2',\n 7: '#c3bdeb',\n 8: '#e1def5',\n 9: '#f0eefa',\n} as const;\n\nexport const pink = {\n 0: '#37091f',\n 1: '#69123c',\n 2: '#9b1c58',\n 3: '#cd2575',\n 4: '#ff2e92',\n 5: '#ff58a8',\n 6: '#ff82be',\n 7: '#ffabd3',\n 8: '#ffd5e9',\n 9: '#ffeaf4',\n} as const;\n\n// ============================================================================\n// LEGACY COLORS (Being phased out)\n// ============================================================================\n\nexport const legacy = {\n aqua: {\n 0: '#0c5f8d',\n 1: '#146b99',\n 2: '#1d78a6',\n 3: '#2e89b6',\n 4: '#4a9fc4',\n 5: '#6bb4d1',\n 6: '#93cce0',\n 7: '#bddff0',\n 8: '#dceef8',\n 9: '#f2f8fc',\n },\n violet: {\n 0: '#6927da',\n 1: '#7839ee',\n 2: '#875bf7',\n 3: '#a48afb',\n 4: '#c3b4fd',\n 5: '#ddd6fe',\n 6: '#ece9fe',\n 7: '#f5f3ff',\n 8: '#fbfaff',\n },\n fuchsia: {\n 0: '#9f1ab1',\n 1: '#ba24d5',\n 2: '#d444f1',\n 3: '#e478fa',\n 4: '#eeaafd',\n 5: '#f6d0fe',\n 6: '#fbe8ff',\n 7: '#fdf4ff',\n 8: '#fefaff',\n },\n pink: {\n 0: '#a10f5f',\n 1: '#dd2590',\n 2: '#ee46bc',\n 3: '#f670c7',\n 4: '#faa7e0',\n 5: '#fcceee',\n 6: '#fce7f6',\n 7: '#fdf2fa',\n 8: '#fef6fb',\n },\n} as const;\n\n// ============================================================================\n// TEXT TOKENS\n// ============================================================================\n\nexport const text = {\n primary: slateGrey[10],\n secondary: slateGrey[9],\n tertiary: slateGrey[8],\n} as const;\n\n// ============================================================================\n// BACKGROUND TOKENS\n// ============================================================================\n\nexport const background = {\n primary: slateGrey[2],\n secondary: slateGrey[0],\n} as const;\n\n// ============================================================================\n// BORDER TOKENS\n// ============================================================================\n\nexport const border = {\n primary: slateGrey[4],\n secondary: slateGrey[3],\n} as const;\n\n// ============================================================================\n// BUTTON TOKENS\n// ============================================================================\n\nexport const button = {\n primary: {\n text: base.white,\n icon: base.white,\n border: brand[3],\n backgroundDefault: brand[3],\n backgroundHover: brand[2],\n },\n neutral: {\n text: slateGrey[10],\n textHover: base.white,\n icon: slateGrey[10],\n iconHover: base.white,\n border: slateGrey[4],\n background: slateGrey[2],\n },\n link: {\n text: base.white,\n icon: base.white,\n hover: brand[5],\n },\n error: {\n text: red[5],\n hover: red[6],\n },\n success: {\n text: green[5],\n hover: green[6],\n },\n} as const;\n\n// ============================================================================\n// BADGE TOKENS\n// ============================================================================\n\nexport const badge = {\n slateGrey: {\n content: slateGrey[10],\n pillOutline: slateGrey[10],\n borderPrimary: slateGrey[5],\n borderSecondary: slateGrey[5],\n background: slateGrey[3],\n },\n brand: {\n content: brand[9],\n pillOutline: brand[9],\n borderPrimary: brand[6],\n borderSecondary: brand[6],\n background: brand[0],\n },\n red: {\n content: red[8],\n pillOutline: red[4],\n borderPrimary: red[2],\n borderSecondary: red[2],\n background: red[0],\n },\n yellow: {\n content: yellow[8],\n pillOutline: yellow[4],\n borderPrimary: yellow[2],\n borderSecondary: yellow[2],\n background: yellow[0],\n },\n green: {\n content: green[8],\n pillOutline: green[4],\n borderPrimary: green[2],\n borderSecondary: green[2],\n background: green[0],\n },\n purple: {\n content: purple[8],\n pillOutline: purple[4],\n borderPrimary: purple[2],\n borderSecondary: purple[2],\n background: purple[0],\n },\n blue: {\n content: blue[8],\n pillOutline: blue[4],\n borderPrimary: blue[2],\n borderSecondary: blue[2],\n background: blue[0],\n },\n orange: {\n content: orange[8],\n pillOutline: orange[4],\n borderPrimary: orange[2],\n borderSecondary: orange[2],\n background: orange[0],\n },\n pink: {\n content: pink[8],\n pillOutline: pink[4],\n borderPrimary: pink[2],\n borderSecondary: pink[2],\n background: pink[0],\n },\n} as const;\n\n// ============================================================================\n// BADGE BANNER TOKENS\n// ============================================================================\n\nexport const badgeBanner = {\n green: {\n content: green[8],\n border: green[2],\n background: green[0],\n },\n yellow: {\n content: yellow[8],\n border: yellow[2],\n background: yellow[0],\n },\n red: {\n content: red[8],\n border: red[2],\n background: red[0],\n },\n} as const;\n\n// ============================================================================\n// ALERT TOKENS\n// ============================================================================\n\nexport const alert = {\n green: {\n content: green[1],\n background: green[9],\n },\n yellow: {\n content: yellow[1],\n background: yellow[9],\n },\n red: {\n content: red[1],\n background: red[9],\n },\n} as const;\n\n// ============================================================================\n// TAG TOKENS\n// ============================================================================\n\nexport const tag = {\n content: slateGrey[10],\n border: slateGrey[4],\n background: slateGrey[3],\n} as const;\n\n// ============================================================================\n// MENU TOKENS\n// ============================================================================\n\nexport const menu = {\n backgroundDefault: slateGrey[2],\n backgroundHover: slateGrey[1],\n selected: slateGrey[3],\n} as const;\n\n// ============================================================================\n// INPUT/DROPDOWN TOKENS\n// ============================================================================\n\nexport const inputDropdown = {\n background: slateGrey[2],\n icon: slateGrey[10],\n borderDefault: slateGrey[4],\n borderSelected: brand[3],\n textLabel: slateGrey[9],\n textPlaceholder: slateGrey[8],\n textHint: slateGrey[8],\n} as const;\n\nexport const inputField = {\n backgroundDefault: slateGrey[2],\n backgroundDisabled: slateGrey[0],\n textLabel: slateGrey[9],\n textPlaceholder: slateGrey[8],\n textHint: slateGrey[8],\n textError: red[5],\n iconDefault: slateGrey[9],\n iconPlaceholder: slateGrey[10],\n iconError: red[5],\n borderDefault: slateGrey[4],\n borderSelected: brand[3],\n borderError: red[5],\n} as const;\n\n// ============================================================================\n// TOGGLE TOKENS\n// ============================================================================\n\nexport const toggle = {\n handleDefault: base.white,\n handleDisabled: slateGrey[10],\n off: {\n backgroundDefault: slateGrey[4],\n backgroundHover: slateGrey[5],\n backgroundDisabled: slateGrey[4],\n },\n on: {\n backgroundDefault: green[3],\n backgroundHover: green[2],\n backgroundDisabled: slateGrey[4],\n },\n} as const;\n\n// ============================================================================\n// CHECKBOX TOKENS\n// ============================================================================\n\nexport const checkbox = {\n off: {\n backgroundDefault: '#00000000',\n backgroundHover: slateGrey[5],\n backgroundDisabled: slateGrey[2],\n border: slateGrey[6],\n },\n on: {\n backgroundDefault: green[0],\n backgroundHover: green[1],\n backgroundDisabled: slateGrey[2],\n border: green[3],\n },\n} as const;\n\n// ============================================================================\n// AVATAR TOKENS\n// ============================================================================\n\nexport const avatar = {\n content: slateGrey[10],\n background: slateGrey[4],\n} as const;\n\n// ============================================================================\n// PROGRESS BAR & SLIDER TOKENS\n// ============================================================================\n\nexport const progressBarSlider = {\n background: slateGrey[4],\n active: green[3],\n} as const;\n\n// ============================================================================\n// CARD TOKENS\n// ============================================================================\n\nexport const card = {\n background: slateGrey[1],\n content: slateGrey[9],\n border: slateGrey[4],\n} as const;\n\n// ============================================================================\n// SIDEBAR TOKENS\n// ============================================================================\n\nexport const sidebar = {\n backgroundDefault: slateGrey[1],\n backgroundHover: slateGrey[3],\n backgroundActive: slateGrey[4],\n border: slateGrey[4],\n contentPrimary: slateGrey[10],\n contentSecondary: slateGrey[9],\n contentTertiary: slateGrey[8],\n} as const;\n\n// ============================================================================\n// MODAL TOKENS\n// ============================================================================\n\nexport const modal = {\n background: slateGrey[1],\n content: slateGrey[9],\n border: slateGrey[4],\n} as const;\n\n// ============================================================================\n// TAB TOKENS\n// ============================================================================\n\nexport const tab = {\n activeBackground: slateGrey[3],\n activeContent: brand[5],\n inactiveContent: slateGrey[9],\n border: slateGrey[4],\n} as const;\n\n// ============================================================================\n// TABLE TOKENS\n// ============================================================================\n\nexport const table = {\n header: {\n textDefault: slateGrey[9],\n textHover: slateGrey[8],\n backgroundDefault: slateGrey[1],\n },\n border: slateGrey[4],\n cell: {\n textPrimary: slateGrey[10],\n textSecondary: slateGrey[9],\n backgroundDefault: slateGrey[2],\n backgroundHover: slateGrey[1],\n },\n} as const;\n\n// ============================================================================\n// BREADCRUMBS TOKENS\n// ============================================================================\n\nexport const breadcrumbs = {\n textPrimaryDefault: slateGrey[10],\n textPrimaryHover: slateGrey[10],\n textSecondaryDefault: slateGrey[8],\n textSecondaryHover: slateGrey[9],\n iconPrimary: slateGrey[10],\n iconSecondary: slateGrey[8],\n} as const;\n\n// ============================================================================\n// LOADING INDICATOR TOKENS\n// ============================================================================\n\nexport const loadingIndicator = {\n background: green[1],\n active: green[5],\n} as const;\n\n// ============================================================================\n// DATE PICKER TOKENS\n// ============================================================================\n\nexport const datePicker = {\n textDefault: slateGrey[10],\n textSelected: base.white,\n textDisabled: slateGrey[7],\n backgroundDefault: slateGrey[2],\n backgroundMiddle: slateGrey[3],\n backgroundSelected: brand[3],\n border: slateGrey[4],\n} as const;\n\n// ============================================================================\n// MISC TOKENS\n// ============================================================================\n\nexport const scroll = slateGrey[9];\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\nexport const colors = {\n base,\n brand,\n slateGrey,\n green,\n yellow,\n red,\n blue,\n orange,\n purple,\n pink,\n legacy,\n text,\n background,\n border,\n button,\n badge,\n badgeBanner,\n alert,\n tag,\n menu,\n inputDropdown,\n inputField,\n toggle,\n checkbox,\n avatar,\n progressBarSlider,\n card,\n sidebar,\n modal,\n tab,\n table,\n breadcrumbs,\n loadingIndicator,\n datePicker,\n scroll,\n} as const;\n\nexport default colors;\n", "/**\n * Syntro Design System \u2014 Editor Panel Shell Tokens\n *\n * Single source of truth for the floating editor panel's visuals and behavior.\n * Consumed by:\n * - packages/shared-editor-ui/src/components/EditorPanelShell.tsx (React)\n * - packages/shared-editor-ui/src/controllers/PanelShellController.ts (Lit)\n *\n * Any change here updates both React and Lit panels in one step \u2014 no drift.\n */\n\nimport { base, brand } from './colors';\n\n// ============================================================================\n// Panel background & shadows\n// ============================================================================\n\n/** Dark gradient rendered behind the panel contents (backdrop-blur layered on). */\nexport const panelBackground =\n 'linear-gradient(160deg, rgba(7,8,10,0.84) 0%, rgba(14,17,20,0.88) 45%, rgba(15,19,24,0.84) 100%)';\n\n/** Outer shadows for the panel, indexed by dock state. */\nexport const panelShadows = {\n /** Free-floating panel \u2014 shadow all sides. */\n floating: '0 8px 60px rgba(0,0,0,0.5)',\n /** Docked to left \u2014 shadow cast rightward into page. */\n dockedLeft: '20px 0 60px rgba(0,0,0,0.5)',\n /** Docked to right \u2014 shadow cast leftward into page. */\n dockedRight: '-20px 0 60px rgba(0,0,0,0.5)',\n} as const;\n\n/** Backdrop-filter blur radius applied to the panel surface. */\nexport const panelBackdropBlur = '12px';\n\n// ============================================================================\n// FAB (floating action button) visuals\n// ============================================================================\n\nexport const fab = {\n /** Diameter in pixels. */\n size: 56,\n /** Inset from the panel's top-left corner in pixels. */\n inset: 12,\n /** Background color (always the brand black). */\n background: base.black,\n /** Icon / logo color. */\n color: base.white,\n /** Border \u2014 2px brand red ring. */\n border: `2px solid ${brand[3]}`,\n /** Shadow when the panel is open (inner ring for \"active\" state). */\n shadowOpen: '0 4px 24px rgba(0,0,0,0.6), 0 0 0 2px rgba(255,255,255,0.08)',\n /** Shadow when the panel is closed. */\n shadowClosed: '0 4px 24px rgba(0,0,0,0.6)',\n} as const;\n\n// ============================================================================\n// Behavior: resize, drag, snap\n// ============================================================================\n\nexport const panelBehavior = {\n /** Minimum panel width when resizing or undocked. */\n minWidth: 480,\n /** Minimum panel height when resizing or undocked. */\n minHeight: 400,\n /** Edge thickness of resize handles in pixels. */\n handleSize: 8,\n /** Pixels the FAB must move before a press becomes a drag (vs a click). */\n dragThreshold: 5,\n /** Distance from a viewport edge that triggers edge-dock snapping. */\n snapThreshold: 20,\n} as const;\n\n// ============================================================================\n// Aggregate export\n// ============================================================================\n\nexport const panelShell = {\n background: panelBackground,\n shadows: panelShadows,\n backdropBlur: panelBackdropBlur,\n fab,\n behavior: panelBehavior,\n} as const;\n\nexport default panelShell;\n", "import {\n blue,\n border,\n brand,\n button,\n green,\n red,\n slateGrey,\n text,\n yellow,\n} from '@syntro/design-system/tokens';\n\nimport type { CanvasThemeConfig, CanvasThemeTokens } from './types';\n\n/**\n * Apply alpha transparency to a hex color.\n * Converts a 0-1 alpha value to a 2-digit hex suffix.\n */\nexport function withAlpha(hex: string, alpha: number): string {\n return `${hex}${Math.round(alpha * 255)\n .toString(16)\n .padStart(2, '0')}`;\n}\n\n/**\n * Default dark theme using Syntro Design System tokens\n */\nexport const darkTheme: CanvasThemeTokens = {\n // Brand colors\n colorPrimary: brand[3],\n colorPrimaryHover: brand[4],\n colorPrimaryMuted: brand[0],\n\n // Surface colors (with alpha for glass/vibrancy effects)\n colorBackground: withAlpha(slateGrey[1], 0.95),\n colorBackgroundElevated: withAlpha(slateGrey[3], 0.95),\n colorBackgroundSubtle: withAlpha(slateGrey[0], 0.2),\n colorSurface: withAlpha(slateGrey[4], 0.8),\n colorSurfaceHover: withAlpha(slateGrey[5], 0.8),\n\n // Text colors\n colorText: text.primary,\n colorTextSecondary: text.secondary,\n colorTextMuted: text.tertiary,\n colorTextInverse: slateGrey[1],\n\n // Border colors\n colorBorder: border.primary,\n colorBorderSubtle: border.secondary,\n\n // Semantic colors\n colorSuccess: green[4],\n colorSuccessMuted: green[0],\n colorWarning: yellow[4],\n colorWarningMuted: yellow[0],\n colorError: red[4],\n colorErrorMuted: red[0],\n colorInfo: blue[4],\n colorInfoMuted: blue[0],\n\n // Notification badge\n colorNotification: brand[4],\n colorNotificationMuted: withAlpha(brand[4], 0.4),\n\n // Glass morphism\n glassBackground: withAlpha(slateGrey[1], 0.6),\n glassBackgroundHover: withAlpha(slateGrey[1], 0.7),\n glassBorder: 'rgba(255, 255, 255, 0.08)',\n glassBlur: 'blur(24px)',\n glassSaturate: 'saturate(1.2)',\n\n // Typography (SF Pro stack)\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif\",\n fontFamilyMono: \"'SF Mono', 'Fira Code', Consolas, monospace\",\n fontSizeXs: '0.7rem',\n fontSizeSm: '0.8rem',\n fontSizeMd: '0.9rem',\n fontSizeLg: '1rem',\n fontSizeXl: '1.25rem',\n fontSizeXxl: '1.5rem',\n fontWeightNormal: '400',\n fontWeightMedium: '500',\n fontWeightSemibold: '600',\n fontWeightBold: '700',\n lineHeightTight: '1.25',\n lineHeightNormal: '1.5',\n lineHeightRelaxed: '1.75',\n\n // Spacing\n spacingXs: '0.25rem',\n spacingSm: '0.5rem',\n spacingMd: '0.75rem',\n spacingLg: '1rem',\n spacingXl: '1.5rem',\n\n // Border radius\n borderRadiusSm: '6px',\n borderRadiusMd: '10px',\n borderRadiusLg: '14px',\n borderRadiusXl: '20px',\n borderRadiusFull: '9999px',\n\n // Shadows\n shadowSm: '0 1px 2px rgba(0, 0, 0, 0.2)',\n shadowMd: '0 2px 12px rgba(0, 0, 0, 0.3)',\n shadowLg: '0 8px 24px rgba(0, 0, 0, 0.4)',\n shadowXl: '0 16px 48px rgba(0, 0, 0, 0.5)',\n\n // Backdrop effects\n backdropBlur: 'blur(20px)',\n backdropSaturate: 'saturate(180%)',\n\n // Animation\n transitionFast: '0.1s ease',\n transitionNormal: '0.25s ease',\n transitionSlow: '0.4s ease',\n};\n\n/**\n * Light theme variant using Syntro Design System tokens\n */\nexport const lightTheme: CanvasThemeTokens = {\n // Brand colors\n colorPrimary: brand[3],\n colorPrimaryHover: brand[2],\n colorPrimaryMuted: withAlpha(brand[5], 0.1),\n\n // Surface colors\n colorBackground: withAlpha(slateGrey[12], 0.95),\n colorBackgroundElevated: withAlpha(slateGrey[11], 0.95),\n colorBackgroundSubtle: withAlpha(slateGrey[0], 0.02),\n colorSurface: withAlpha(slateGrey[11], 0.6),\n colorSurfaceHover: withAlpha(slateGrey[10], 0.6),\n\n // Text colors\n colorText: slateGrey[1],\n colorTextSecondary: slateGrey[6],\n colorTextMuted: slateGrey[8],\n colorTextInverse: slateGrey[12],\n\n // Border colors\n colorBorder: withAlpha(slateGrey[0], 0.12),\n colorBorderSubtle: withAlpha(slateGrey[0], 0.06),\n\n // Semantic colors\n colorSuccess: green[4],\n colorSuccessMuted: withAlpha(green[4], 0.12),\n colorWarning: yellow[4],\n colorWarningMuted: withAlpha(yellow[4], 0.12),\n colorError: red[4],\n colorErrorMuted: withAlpha(red[4], 0.12),\n colorInfo: blue[4],\n colorInfoMuted: withAlpha(blue[4], 0.12),\n\n // Notification badge\n colorNotification: brand[3],\n colorNotificationMuted: withAlpha(brand[3], 0.4),\n\n // Glass morphism\n glassBackground: withAlpha(slateGrey[12], 0.7),\n glassBackgroundHover: withAlpha(slateGrey[12], 0.8),\n glassBorder: 'rgba(0, 0, 0, 0.06)',\n glassBlur: 'blur(24px)',\n glassSaturate: 'saturate(1.2)',\n\n // Typography (same as dark)\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif\",\n fontFamilyMono: \"'SF Mono', 'Fira Code', Consolas, monospace\",\n fontSizeXs: '0.7rem',\n fontSizeSm: '0.8rem',\n fontSizeMd: '0.9rem',\n fontSizeLg: '1rem',\n fontSizeXl: '1.25rem',\n fontSizeXxl: '1.5rem',\n fontWeightNormal: '400',\n fontWeightMedium: '500',\n fontWeightSemibold: '600',\n fontWeightBold: '700',\n lineHeightTight: '1.25',\n lineHeightNormal: '1.5',\n lineHeightRelaxed: '1.75',\n\n // Spacing (same as dark)\n spacingXs: '0.25rem',\n spacingSm: '0.5rem',\n spacingMd: '0.75rem',\n spacingLg: '1rem',\n spacingXl: '1.5rem',\n\n // Border radius (same as dark)\n borderRadiusSm: '6px',\n borderRadiusMd: '10px',\n borderRadiusLg: '14px',\n borderRadiusXl: '20px',\n borderRadiusFull: '9999px',\n\n // Shadows (lighter for light mode)\n shadowSm: '0 1px 2px rgba(0, 0, 0, 0.08)',\n shadowMd: '0 2px 12px rgba(0, 0, 0, 0.12)',\n shadowLg: '0 8px 24px rgba(0, 0, 0, 0.16)',\n shadowXl: '0 16px 48px rgba(0, 0, 0, 0.2)',\n\n // Backdrop effects\n backdropBlur: 'blur(20px)',\n backdropSaturate: 'saturate(180%)',\n\n // Animation\n transitionFast: '0.1s ease',\n transitionNormal: '0.25s ease',\n transitionSlow: '0.4s ease',\n};\n\n/**\n * Get default theme based on mode\n */\nexport function getDefaultTheme(mode: 'light' | 'dark' = 'dark'): CanvasThemeTokens {\n return mode === 'light' ? lightTheme : darkTheme;\n}\n\n/**\n * Convert theme tokens to CSS custom properties\n */\n// ---------------------------------------------------------------------------\n// Shared utility: camelCase \u2192 kebab-case\n// ---------------------------------------------------------------------------\n\nfunction kebabCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Convert theme tokens to CSS custom properties\n */\nexport function themeToCssVariables(theme: CanvasThemeTokens): Record<string, string> {\n const variables: Record<string, string> = {};\n for (const [key, value] of Object.entries(theme)) {\n variables[`--sc-${kebabCase(key)}`] = value;\n }\n return variables;\n}\n\n// ---------------------------------------------------------------------------\n// Default themes (nested by visual element)\n// ---------------------------------------------------------------------------\n\nexport const darkDefaults: Required<CanvasThemeConfig> = {\n mode: 'dark',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif\",\n colorPrimary: brand[3],\n colorPrimaryHover: brand[4],\n borderRadius: '12px',\n canvas: {\n position: 'right',\n layout: 'overlay',\n background: withAlpha(slateGrey[1], 0.6),\n blur: 'blur(24px)',\n border: 'none',\n width: 'clamp(380px, 25vw, 520px)',\n transitionDuration: '300ms',\n transitionEasing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n transitionFade: '6%',\n },\n launcher: {\n background: button.primary.backgroundDefault,\n backgroundHover: button.primary.backgroundHover,\n color: button.primary.icon,\n size: '56px',\n shadow: `0 8px 32px ${withAlpha(slateGrey[0], 0.6)}`,\n borderRadius: '9999px',\n },\n tile: {\n background: withAlpha(slateGrey[1], 0.6),\n backgroundHover: withAlpha(slateGrey[1], 0.7),\n border: '1px solid rgba(255, 255, 255, 0.08)',\n borderRadius: '14px',\n shadow: '0 2px 12px rgba(0, 0, 0, 0.3)',\n titleColor: text.primary,\n textColor: text.secondary,\n iconBackground: `linear-gradient(135deg, ${brand[3]} 0%, ${brand[3]}cc 100%)`,\n iconShadow: `0 2px 8px ${brand[3]}40`,\n headerPadding: '0.375rem 0.75rem',\n bodyPadding: '0 0.75rem 0.5rem',\n gap: '0.25rem',\n },\n overlay: {\n background: withAlpha(slateGrey[1], 0.6),\n textColor: text.primary,\n titleColor: text.primary,\n arrowColor: withAlpha(slateGrey[1], 0.6),\n arrowSize: '8px',\n border: 'none',\n borderRadius: '0',\n scrimOpacity: '0',\n highlightRing: `2px solid ${brand[3]}`,\n },\n notification: {\n background: withAlpha(slateGrey[0], 0.95),\n textColor: text.primary,\n textSecondaryColor: text.secondary,\n border: `1px solid ${slateGrey[5]}`,\n borderRadius: '12px',\n successColor: green[4],\n warningColor: yellow[4],\n errorColor: red[4],\n iconBackground: withAlpha(brand[3], 0.15),\n progressGradient: `linear-gradient(90deg, ${brand[3]}, ${brand[4]})`,\n },\n content: {\n background: withAlpha(slateGrey[3], 0.8),\n backgroundHover: withAlpha(slateGrey[5], 0.6),\n border: `1px solid ${withAlpha(slateGrey[5], 0.5)}`,\n borderRadius: '8px',\n textColor: text.primary,\n textSecondaryColor: text.secondary,\n itemDivider: 'none',\n itemGap: '6px',\n itemPadding: '12px 16px',\n itemFontSize: '15px',\n bodyPadding: '0 16px 12px 16px',\n bodyFontSize: '14px',\n categoryPadding: '8px 4px 4px 4px',\n categoryGap: '4px',\n categoryFontSize: '12px',\n searchBackground: withAlpha(slateGrey[3], 0.8),\n searchColor: text.primary,\n chevronColor: 'currentColor',\n },\n};\n\nexport const lightDefaults: Required<CanvasThemeConfig> = {\n mode: 'light',\n fontFamily: \"-apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif\",\n colorPrimary: brand[3],\n colorPrimaryHover: brand[2],\n borderRadius: '12px',\n canvas: {\n position: 'right',\n layout: 'overlay',\n background: withAlpha(slateGrey[12], 0.7),\n blur: 'blur(24px)',\n border: 'none',\n width: 'clamp(380px, 25vw, 520px)',\n transitionDuration: '300ms',\n transitionEasing: 'cubic-bezier(0.16, 1, 0.3, 1)',\n transitionFade: '6%',\n },\n launcher: {\n background: brand[3],\n backgroundHover: brand[2],\n color: '#ffffff',\n size: '56px',\n shadow: '0 8px 32px rgba(0, 0, 0, 0.15)',\n borderRadius: '9999px',\n },\n tile: {\n background: withAlpha(slateGrey[12], 0.7),\n backgroundHover: withAlpha(slateGrey[12], 0.8),\n border: '1px solid rgba(0, 0, 0, 0.06)',\n borderRadius: '14px',\n shadow: '0 2px 12px rgba(0, 0, 0, 0.12)',\n titleColor: slateGrey[1],\n textColor: slateGrey[6],\n iconBackground: `linear-gradient(135deg, ${brand[3]} 0%, ${brand[3]}cc 100%)`,\n iconShadow: `0 2px 8px ${brand[3]}40`,\n headerPadding: '0.375rem 0.75rem',\n bodyPadding: '0 0.75rem 0.5rem',\n gap: '0.25rem',\n },\n overlay: {\n background: withAlpha(slateGrey[12], 0.7),\n textColor: slateGrey[1],\n titleColor: slateGrey[1],\n arrowColor: withAlpha(slateGrey[12], 0.7),\n arrowSize: '8px',\n border: 'none',\n borderRadius: '0',\n scrimOpacity: '0',\n highlightRing: `2px solid ${brand[3]}`,\n },\n notification: {\n background: withAlpha(slateGrey[12], 0.95),\n textColor: slateGrey[1],\n textSecondaryColor: slateGrey[6],\n border: `1px solid ${withAlpha(slateGrey[0], 0.12)}`,\n borderRadius: '12px',\n successColor: green[4],\n warningColor: yellow[4],\n errorColor: red[4],\n iconBackground: withAlpha(brand[3], 0.1),\n progressGradient: `linear-gradient(90deg, ${brand[3]}, ${brand[2]})`,\n },\n content: {\n background: withAlpha(slateGrey[12], 0.8),\n backgroundHover: withAlpha(slateGrey[11], 0.6),\n border: `1px solid ${slateGrey[11]}`,\n borderRadius: '8px',\n textColor: slateGrey[1],\n textSecondaryColor: slateGrey[6],\n itemDivider: 'none',\n itemGap: '6px',\n itemPadding: '12px 16px',\n itemFontSize: '15px',\n bodyPadding: '0 16px 12px 16px',\n bodyFontSize: '14px',\n categoryPadding: '8px 4px 4px 4px',\n categoryGap: '4px',\n categoryFontSize: '12px',\n searchBackground: slateGrey[12],\n searchColor: slateGrey[1],\n chevronColor: 'currentColor',\n },\n};\n\n// ---------------------------------------------------------------------------\n// Merge: deep-merge customer config on top of defaults\n// ---------------------------------------------------------------------------\n\nexport function mergeThemeConfig(customer: CanvasThemeConfig): Required<CanvasThemeConfig> {\n const base = customer.mode === 'light' ? lightDefaults : darkDefaults;\n return {\n mode: customer.mode ?? base.mode,\n fontFamily: customer.fontFamily ?? base.fontFamily,\n colorPrimary: customer.colorPrimary ?? base.colorPrimary,\n colorPrimaryHover: customer.colorPrimaryHover ?? base.colorPrimaryHover,\n borderRadius: customer.borderRadius ?? base.borderRadius,\n canvas: { ...base.canvas, ...customer.canvas },\n launcher: { ...base.launcher, ...customer.launcher },\n tile: { ...base.tile, ...customer.tile },\n overlay: { ...base.overlay, ...customer.overlay },\n notification: { ...base.notification, ...customer.notification },\n content: { ...base.content, ...customer.content },\n };\n}\n\n// ---------------------------------------------------------------------------\n// 3-layer merge: defaults \u2192 workspace theme \u2192 config theme\n// ---------------------------------------------------------------------------\n\nexport function mergeThemeWithWorkspace(\n workspaceTheme: CanvasThemeConfig,\n configTheme: CanvasThemeConfig\n): Required<CanvasThemeConfig> {\n const mode = configTheme.mode ?? workspaceTheme.mode ?? 'dark';\n const base = mode === 'light' ? lightDefaults : darkDefaults;\n return {\n mode,\n fontFamily: configTheme.fontFamily ?? workspaceTheme.fontFamily ?? base.fontFamily,\n colorPrimary: configTheme.colorPrimary ?? workspaceTheme.colorPrimary ?? base.colorPrimary,\n colorPrimaryHover:\n configTheme.colorPrimaryHover ?? workspaceTheme.colorPrimaryHover ?? base.colorPrimaryHover,\n borderRadius: configTheme.borderRadius ?? workspaceTheme.borderRadius ?? base.borderRadius,\n canvas: { ...base.canvas, ...workspaceTheme.canvas, ...configTheme.canvas },\n launcher: { ...base.launcher, ...workspaceTheme.launcher, ...configTheme.launcher },\n tile: { ...base.tile, ...workspaceTheme.tile, ...configTheme.tile },\n overlay: { ...base.overlay, ...workspaceTheme.overlay, ...configTheme.overlay },\n notification: {\n ...base.notification,\n ...workspaceTheme.notification,\n ...configTheme.notification,\n },\n content: { ...base.content, ...workspaceTheme.content, ...configTheme.content },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Flatten: nested config -> --sc-{element}-{property} CSS variables\n// ---------------------------------------------------------------------------\n\nconst ELEMENT_SECTIONS = [\n 'canvas',\n 'launcher',\n 'tile',\n 'overlay',\n 'notification',\n 'content',\n] as const;\n\nexport function flattenThemeConfig(config: Required<CanvasThemeConfig>): Record<string, string> {\n const vars: Record<string, string> = {};\n if (config.fontFamily) vars['--sc-font-family'] = config.fontFamily;\n if (config.colorPrimary) vars['--sc-color-primary'] = config.colorPrimary;\n if (config.colorPrimaryHover) vars['--sc-color-primary-hover'] = config.colorPrimaryHover;\n if (config.borderRadius) vars['--sc-border-radius'] = config.borderRadius;\n for (const section of ELEMENT_SECTIONS) {\n const sectionConfig = config[section];\n if (!sectionConfig) continue;\n for (const [key, value] of Object.entries(sectionConfig)) {\n if (value !== undefined) {\n vars[`--sc-${section}-${kebabCase(key)}`] = value;\n }\n }\n }\n return vars;\n}\n", "import { createContext, type ReactNode, useContext, useEffect, useMemo } from 'react';\n\nimport { flattenThemeConfig, mergeThemeConfig, mergeThemeWithWorkspace } from './defaultTheme';\nimport type { CanvasThemeConfig } from './types';\n\ninterface ThemeContextValue {\n config: Required<CanvasThemeConfig>;\n mode: 'light' | 'dark';\n cssVariables: Record<string, string>;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\n\nexport interface ThemeProviderProps {\n children: ReactNode;\n /** Customer theme overrides (nested by visual element) */\n themeConfig?: CanvasThemeConfig;\n /** Workspace-level theme (applied between defaults and config overrides) */\n workspaceTheme?: CanvasThemeConfig;\n shadowRoot?: ShadowRoot | null;\n}\n\n/**\n * Theme provider: config \u2192 merge with defaults \u2192 flatten to CSS vars \u2192 inject into shadow root.\n * When workspaceTheme is provided, uses 3-layer merge: defaults \u2192 workspace \u2192 config.\n * No auto-detection. Fully deterministic.\n */\nexport function ThemeProvider({\n children,\n themeConfig,\n workspaceTheme,\n shadowRoot,\n}: ThemeProviderProps) {\n // Merge customer config with defaults (optionally via workspace layer)\n const merged = useMemo(\n () =>\n workspaceTheme\n ? mergeThemeWithWorkspace(workspaceTheme, themeConfig ?? {})\n : mergeThemeConfig(themeConfig ?? {}),\n [themeConfig, workspaceTheme]\n );\n\n // Flatten to CSS variables\n const cssVariables = useMemo(() => flattenThemeConfig(merged), [merged]);\n\n // Inject CSS variables into shadow root\n useEffect(() => {\n if (!shadowRoot) return;\n\n let styleEl = shadowRoot.querySelector<HTMLStyleElement>('#sc-theme-vars');\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.id = 'sc-theme-vars';\n shadowRoot.insertBefore(styleEl, shadowRoot.firstChild);\n }\n\n const cssRules = Object.entries(cssVariables)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join('\\n');\n\n styleEl.textContent = `:host {\\n${cssRules}\\n}`;\n }, [shadowRoot, cssVariables]);\n\n const value: ThemeContextValue = {\n config: merged,\n mode: merged.mode,\n cssVariables,\n };\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\n/**\n * Hook to access theme context\n */\nexport function useTheme(): ThemeContextValue {\n const context = useContext(ThemeContext);\n if (!context) {\n throw new Error('useTheme must be used within a ThemeProvider');\n }\n return context;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["base", "value"]
|
|
7
|
+
}
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __typeError = (msg) => {
|
|
3
|
-
throw TypeError(msg);
|
|
4
|
-
};
|
|
5
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
7
|
-
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
8
|
-
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
9
|
-
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
10
|
-
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
11
|
-
|
|
12
1
|
// src/decisions/schema.ts
|
|
13
2
|
import { z as z2 } from "zod";
|
|
14
3
|
|
|
@@ -206,10 +195,6 @@ var decisionSchemas = [
|
|
|
206
195
|
];
|
|
207
196
|
|
|
208
197
|
export {
|
|
209
|
-
__publicField,
|
|
210
|
-
__privateGet,
|
|
211
|
-
__privateAdd,
|
|
212
|
-
__privateSet,
|
|
213
198
|
PageUrlConditionZ,
|
|
214
199
|
RouteConditionZ,
|
|
215
200
|
AnchorVisibleConditionZ,
|
|
@@ -238,4 +223,4 @@ export {
|
|
|
238
223
|
validateActivationConfig,
|
|
239
224
|
decisionSchemas
|
|
240
225
|
};
|
|
241
|
-
//# sourceMappingURL=chunk-
|
|
226
|
+
//# sourceMappingURL=chunk-4HXPGXUC.js.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/decisions/schema.ts", "../../sdk-contracts/dist/schemas.js"],
|
|
4
4
|
"sourcesContent": ["/**\n * Zod schemas for decision strategy validation.\n *\n * Condition and strategy schemas are canonical in @syntrologie/sdk-contracts.\n * This module re-exports them and adds runtime-specific schemas\n * (ActivationConfig, RouteFilter) plus the decisionSchemas array for\n * unified JSON Schema generation.\n */\nimport { z } from 'zod';\n\n// Re-export all condition + strategy schemas from the single source of truth\nexport {\n AnchorVisibleConditionZ,\n type ConditionSchema,\n ConditionZ,\n CooldownActiveConditionZ,\n CounterDefZ,\n type DecisionStrategySchema,\n DecisionStrategyZ,\n DismissedConditionZ,\n EventCountConditionZ,\n EventOccurredConditionZ,\n ExternalStrategyZ,\n FrequencyLimitConditionZ,\n MatchOpZ,\n ModelStrategyZ,\n PageUrlConditionZ,\n RouteConditionZ,\n type RuleSchema,\n RuleStrategyZ,\n RuleZ,\n ScoreStrategyZ,\n SessionMetricConditionZ,\n StateEqualsConditionZ,\n TriggerWhenZ,\n ViewportConditionZ,\n} from '@syntrologie/sdk-contracts';\n\nimport {\n ConditionZ,\n CounterDefZ,\n DecisionStrategyZ,\n ExternalStrategyZ,\n MatchOpZ,\n ModelStrategyZ,\n RuleStrategyZ,\n RuleZ,\n ScoreStrategyZ,\n} from '@syntrologie/sdk-contracts';\n\n// =============================================================================\n// ACTIVATION CONFIG SCHEMA (runtime-specific)\n// =============================================================================\n\nexport const RouteFilterZ = z.object({\n include: z\n .array(z.string())\n .optional()\n .describe(\n 'URL patterns where this tile appears. Supports *, **, :param wildcards. ' +\n 'Use sparingly \u2014 mostly to isolate to specific webapp functionality. ' +\n 'Omit to appear on all routes.'\n ),\n exclude: z\n .array(z.string())\n .optional()\n .describe('URL patterns where this tile should NOT appear. Evaluated before include.'),\n});\n\nexport const ActivationConfigZ = z.object({\n routes: RouteFilterZ,\n onlyIfPopulated: z\n .boolean()\n .optional()\n .describe(\n 'When true, tile is hidden if none of its props.actions[] have an active triggerWhen. ' +\n 'Useful for tiles with all-deferred FAQ questions or nav tips. Default: false.'\n ),\n});\n\n// =============================================================================\n// VALIDATION FUNCTIONS\n// =============================================================================\n\n/**\n * Validate a Condition object.\n */\nexport function validateCondition(data: unknown) {\n return ConditionZ.safeParse(data);\n}\n\n/**\n * Validate a DecisionStrategy object.\n */\nexport function validateStrategy(data: unknown) {\n return DecisionStrategyZ.safeParse(data);\n}\n\n/**\n * Validate an ActivationConfig object.\n */\nexport function validateActivationConfig(data: unknown) {\n return ActivationConfigZ.safeParse(data);\n}\n\n// =============================================================================\n// Export: Array for unified schema generation\n// =============================================================================\n\n/**\n * Decision schemas for unified JSON Schema generation.\n * The generator imports this array and converts each to a JSON Schema $def.\n *\n * Note: `decisionStrategy` is NOT included here \u2014 it's a oneOf wrapper that\n * the generator builds from $refs to the four strategy defs.\n */\nexport const decisionSchemas = [\n { defName: 'matchOp', schema: MatchOpZ },\n { defName: 'counterDef', schema: CounterDefZ },\n { defName: 'activationConfig', schema: ActivationConfigZ },\n { defName: 'routeFilter', schema: RouteFilterZ },\n { defName: 'ruleStrategy', schema: RuleStrategyZ },\n { defName: 'scoreStrategy', schema: ScoreStrategyZ },\n { defName: 'modelStrategy', schema: ModelStrategyZ },\n { defName: 'externalStrategy', schema: ExternalStrategyZ },\n { defName: 'rule', schema: RuleZ },\n { defName: 'condition', schema: ConditionZ },\n];\n\n// =============================================================================\n// TYPE INFERENCE\n// =============================================================================\n\nexport type ActivationConfigSchema = z.infer<typeof ActivationConfigZ>;\n", "/**\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// 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"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["z", "z"]
|
|
7
7
|
}
|