@syntrologie/runtime-sdk 2.1.0 → 2.2.0-canary.1
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/CAPABILITIES.md +50 -43
- package/README.md +7 -7
- package/dist/RuntimeProvider.d.ts +1 -1
- package/dist/ShadowRootContext.d.ts +19 -0
- package/dist/SmartCanvasApp.d.ts +3 -3
- package/dist/SmartCanvasElement.d.ts +7 -2
- package/dist/SmartCanvasPortal.d.ts +1 -1
- package/dist/actions/executors/index.d.ts +3 -3
- package/dist/actions/executors/tour.d.ts +1 -1
- package/dist/actions/index.d.ts +4 -3
- package/dist/actions/schema.d.ts +1229 -0
- package/dist/actions/schema.js +67 -0
- package/dist/actions/schema.js.map +7 -0
- package/dist/adaptives/adaptive-chatbot/index.js +4 -4
- package/dist/adaptives/adaptive-chatbot/index.js.map +4 -4
- package/dist/adaptives/adaptive-content/index.js +2 -2
- package/dist/adaptives/adaptive-content/index.js.map +4 -4
- package/dist/adaptives/adaptive-faq/index.js +23 -6
- package/dist/adaptives/adaptive-faq/index.js.map +4 -4
- package/dist/adaptives/adaptive-gamification/index.js.map +1 -1
- package/dist/adaptives/adaptive-nav/index.js +22 -7
- package/dist/adaptives/adaptive-nav/index.js.map +4 -4
- package/dist/adaptives/adaptive-overlays/index.js +13 -13
- package/dist/adaptives/adaptive-overlays/index.js.map +4 -4
- package/dist/api.d.ts +2 -2
- package/dist/apps/examples/gamification-app.example.d.ts +4 -4
- package/dist/apps/index.d.ts +7 -7
- package/dist/blocks/data/index.d.ts +1 -1
- package/dist/blocks/index.d.ts +2 -2
- package/dist/blocks/interactive/index.d.ts +1 -1
- package/dist/blocks/notification/NotificationBlock.d.ts +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/bootstrap.d.ts +4 -4
- package/dist/chunk-AYTRRBR5.js +251 -0
- package/dist/chunk-AYTRRBR5.js.map +7 -0
- package/dist/chunk-HJKAXD5S.js +7921 -0
- package/dist/chunk-HJKAXD5S.js.map +7 -0
- package/dist/components/ShadowCanvasOverlay.d.ts +2 -2
- package/dist/components/TileCard.d.ts +1 -1
- package/dist/context/ContextManager.d.ts +1 -1
- package/dist/context/index.d.ts +3 -3
- package/dist/decisions/engine.d.ts +1 -1
- package/dist/decisions/index.d.ts +3 -3
- package/dist/decisions/schema.d.ts +24 -24
- package/dist/decisions/strategies/rules.d.ts +1 -1
- package/dist/decisions/strategies/score.d.ts +1 -1
- package/dist/editorLoader.d.ts +4 -4
- package/dist/events/EventAccumulator.d.ts +1 -1
- package/dist/events/EventBus.d.ts +1 -1
- package/dist/events/index.d.ts +7 -6
- package/dist/events/registerConfigPredicates.d.ts +19 -0
- package/dist/experiments/adapters/growthbook.d.ts +1 -1
- package/dist/experiments/index.d.ts +2 -2
- package/dist/experiments/registry.d.ts +1 -1
- package/dist/fetchers/index.d.ts +2 -2
- package/dist/hooks/useShadowCanvasConfig.d.ts +1 -1
- package/dist/hostPatcher/index.d.ts +2 -2
- package/dist/index.d.ts +24 -21
- package/dist/index.js +816 -75
- package/dist/index.js.map +7 -1
- package/dist/metrics/index.d.ts +1 -1
- package/dist/notifications/index.d.ts +6 -6
- package/dist/overlays/runtime/index.d.ts +3 -3
- package/dist/overlays/runtime/overlay/root.d.ts +17 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/react.js +90 -134
- package/dist/react.js.map +7 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/index.d.ts +2 -2
- package/dist/render/types.d.ts +2 -2
- package/dist/runtime.d.ts +8 -8
- package/dist/smart-canvas.esm.js +127 -124
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +17160 -16782
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +127 -124
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +1 -1
- package/dist/state/helpers/cooldowns.d.ts +1 -1
- package/dist/state/helpers/dismissals.d.ts +1 -1
- package/dist/state/helpers/frequency.d.ts +1 -1
- package/dist/state/index.d.ts +3 -3
- package/dist/surfaces/index.d.ts +3 -3
- package/dist/surfaces/positioning.d.ts +1 -1
- package/dist/telemetry/adapters/posthog.d.ts +2 -2
- package/dist/telemetry/index.d.ts +3 -3
- package/dist/telemetry/registry.d.ts +1 -1
- package/dist/theme/ThemeProvider.d.ts +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/index.d.ts +4 -4
- package/dist/types-only.d.ts +1 -1
- package/dist/types-only.js +1 -11
- package/dist/types-only.js.map +7 -1
- package/dist/types.d.ts +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/widgets/index.d.ts +1 -1
- package/package.json +24 -17
- package/schema/canvas-config.base.schema.json +351 -0
- package/schema/canvas-config.schema.json +3202 -440
- package/scripts/validate-config.mjs +54 -58
- package/dist/RuntimeProvider.js +0 -113
- package/dist/RuntimeProvider.js.map +0 -1
- package/dist/SmartCanvasApp.js +0 -143
- package/dist/SmartCanvasApp.js.map +0 -1
- package/dist/SmartCanvasElement.js +0 -138
- package/dist/SmartCanvasElement.js.map +0 -1
- package/dist/SmartCanvasPortal.js +0 -17
- package/dist/SmartCanvasPortal.js.map +0 -1
- package/dist/actions/ActionEngine.js +0 -272
- package/dist/actions/ActionEngine.js.map +0 -1
- package/dist/actions/executors/index.js +0 -240
- package/dist/actions/executors/index.js.map +0 -1
- package/dist/actions/executors/tour.js +0 -332
- package/dist/actions/executors/tour.js.map +0 -1
- package/dist/actions/index.js +0 -12
- package/dist/actions/index.js.map +0 -1
- package/dist/actions/types.js +0 -8
- package/dist/actions/types.js.map +0 -1
- package/dist/actions/validation.js +0 -577
- package/dist/actions/validation.js.map +0 -1
- package/dist/antiFlicker.js +0 -39
- package/dist/antiFlicker.js.map +0 -1
- package/dist/api.js +0 -205
- package/dist/api.js.map +0 -1
- package/dist/apps/AppContext.js +0 -91
- package/dist/apps/AppContext.js.map +0 -1
- package/dist/apps/AppLoader.js +0 -293
- package/dist/apps/AppLoader.js.map +0 -1
- package/dist/apps/AppRegistry.js +0 -317
- package/dist/apps/AppRegistry.js.map +0 -1
- package/dist/apps/examples/gamification-app.example.js +0 -329
- package/dist/apps/examples/gamification-app.example.js.map +0 -1
- package/dist/apps/index.js +0 -16
- package/dist/apps/index.js.map +0 -1
- package/dist/apps/types.js +0 -8
- package/dist/apps/types.js.map +0 -1
- package/dist/blocks/data/ComparisonBlock.js +0 -95
- package/dist/blocks/data/ComparisonBlock.js.map +0 -1
- package/dist/blocks/data/StatsBlock.js +0 -102
- package/dist/blocks/data/StatsBlock.js.map +0 -1
- package/dist/blocks/data/index.js +0 -3
- package/dist/blocks/data/index.js.map +0 -1
- package/dist/blocks/index.js +0 -93
- package/dist/blocks/index.js.map +0 -1
- package/dist/blocks/interactive/ChecklistBlock.js +0 -111
- package/dist/blocks/interactive/ChecklistBlock.js.map +0 -1
- package/dist/blocks/interactive/RatingBlock.js +0 -147
- package/dist/blocks/interactive/RatingBlock.js.map +0 -1
- package/dist/blocks/interactive/index.js +0 -3
- package/dist/blocks/interactive/index.js.map +0 -1
- package/dist/blocks/notification/NotificationBlock.js +0 -171
- package/dist/blocks/notification/NotificationBlock.js.map +0 -1
- package/dist/blocks/notification/index.js +0 -2
- package/dist/blocks/notification/index.js.map +0 -1
- package/dist/blocks/theme-tokens.js +0 -25
- package/dist/blocks/theme-tokens.js.map +0 -1
- package/dist/bootstrap.js +0 -448
- package/dist/bootstrap.js.map +0 -1
- package/dist/bundle-entry.js +0 -9
- package/dist/bundle-entry.js.map +0 -1
- package/dist/components/ShadowCanvasOverlay.js +0 -327
- package/dist/components/ShadowCanvasOverlay.js.map +0 -1
- package/dist/components/TileCard.js +0 -103
- package/dist/components/TileCard.js.map +0 -1
- package/dist/components/TileWheel.js +0 -50
- package/dist/components/TileWheel.js.map +0 -1
- package/dist/config-validator.js +0 -173
- package/dist/config-validator.js.map +0 -1
- package/dist/configFetcher.js +0 -131
- package/dist/configFetcher.js.map +0 -1
- package/dist/context/ContextManager.js +0 -269
- package/dist/context/ContextManager.js.map +0 -1
- package/dist/context/index.js +0 -7
- package/dist/context/index.js.map +0 -1
- package/dist/context/schema.js +0 -50
- package/dist/context/schema.js.map +0 -1
- package/dist/context/types.js +0 -8
- package/dist/context/types.js.map +0 -1
- package/dist/controller.js +0 -34
- package/dist/controller.js.map +0 -1
- package/dist/decisions/engine.js +0 -117
- package/dist/decisions/engine.js.map +0 -1
- package/dist/decisions/index.js +0 -10
- package/dist/decisions/index.js.map +0 -1
- package/dist/decisions/schema.js +0 -151
- package/dist/decisions/schema.js.map +0 -1
- package/dist/decisions/strategies/rules.js +0 -166
- package/dist/decisions/strategies/rules.js.map +0 -1
- package/dist/decisions/strategies/score.js +0 -29
- package/dist/decisions/strategies/score.js.map +0 -1
- package/dist/decisions/types.js +0 -2
- package/dist/decisions/types.js.map +0 -1
- package/dist/earlyPatcher.js +0 -20
- package/dist/earlyPatcher.js.map +0 -1
- package/dist/editorLoader.js +0 -254
- package/dist/editorLoader.js.map +0 -1
- package/dist/events/EventAccumulator.js +0 -101
- package/dist/events/EventAccumulator.js.map +0 -1
- package/dist/events/EventBus.js +0 -152
- package/dist/events/EventBus.js.map +0 -1
- package/dist/events/index.js +0 -11
- package/dist/events/index.js.map +0 -1
- package/dist/events/normalizers/canvas.js +0 -116
- package/dist/events/normalizers/canvas.js.map +0 -1
- package/dist/events/normalizers/posthog.js +0 -171
- package/dist/events/normalizers/posthog.js.map +0 -1
- package/dist/events/schema.js +0 -30
- package/dist/events/schema.js.map +0 -1
- package/dist/events/types.js +0 -54
- package/dist/events/types.js.map +0 -1
- package/dist/experiments/adapters/growthbook.js +0 -81
- package/dist/experiments/adapters/growthbook.js.map +0 -1
- package/dist/experiments/index.js +0 -4
- package/dist/experiments/index.js.map +0 -1
- package/dist/experiments/registry.js +0 -30
- package/dist/experiments/registry.js.map +0 -1
- package/dist/experiments/types.js +0 -2
- package/dist/experiments/types.js.map +0 -1
- package/dist/fetchers/cdnFetcher.js +0 -96
- package/dist/fetchers/cdnFetcher.js.map +0 -1
- package/dist/fetchers/experimentsFetcher.js +0 -109
- package/dist/fetchers/experimentsFetcher.js.map +0 -1
- package/dist/fetchers/index.js +0 -5
- package/dist/fetchers/index.js.map +0 -1
- package/dist/fetchers/mergeConfigs.js +0 -38
- package/dist/fetchers/mergeConfigs.js.map +0 -1
- package/dist/fetchers/registry.js +0 -58
- package/dist/fetchers/registry.js.map +0 -1
- package/dist/fetchers/types.js +0 -2
- package/dist/fetchers/types.js.map +0 -1
- package/dist/hooks/useCanvasOverlays.js +0 -128
- package/dist/hooks/useCanvasOverlays.js.map +0 -1
- package/dist/hooks/useHostPatches.js +0 -40
- package/dist/hooks/useHostPatches.js.map +0 -1
- package/dist/hooks/useShadowCanvasConfig.js +0 -63
- package/dist/hooks/useShadowCanvasConfig.js.map +0 -1
- package/dist/hostPatcher/core/patcher.js +0 -181
- package/dist/hostPatcher/core/patcher.js.map +0 -1
- package/dist/hostPatcher/core/sanitizer.js +0 -66
- package/dist/hostPatcher/core/sanitizer.js.map +0 -1
- package/dist/hostPatcher/core/types.js +0 -2
- package/dist/hostPatcher/core/types.js.map +0 -1
- package/dist/hostPatcher/index.js +0 -7
- package/dist/hostPatcher/index.js.map +0 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +0 -23
- package/dist/hostPatcher/policy/defaultPolicy.js.map +0 -1
- package/dist/hostPatcher/utils/anchors.js +0 -105
- package/dist/hostPatcher/utils/anchors.js.map +0 -1
- package/dist/hostPatcher/utils/observer.js +0 -11
- package/dist/hostPatcher/utils/observer.js.map +0 -1
- package/dist/logger.js +0 -81
- package/dist/logger.js.map +0 -1
- package/dist/metrics/index.js +0 -5
- package/dist/metrics/index.js.map +0 -1
- package/dist/metrics/sessionMetrics.js +0 -178
- package/dist/metrics/sessionMetrics.js.map +0 -1
- package/dist/notifications/NotificationToastStack.js +0 -118
- package/dist/notifications/NotificationToastStack.js.map +0 -1
- package/dist/notifications/index.js +0 -6
- package/dist/notifications/index.js.map +0 -1
- package/dist/notifications/matcher.js +0 -66
- package/dist/notifications/matcher.js.map +0 -1
- package/dist/notifications/types.js +0 -13
- package/dist/notifications/types.js.map +0 -1
- package/dist/notifications/useNotifications.js +0 -104
- package/dist/notifications/useNotifications.js.map +0 -1
- package/dist/notifications/useNotifyWatcher.js +0 -62
- package/dist/notifications/useNotifyWatcher.js.map +0 -1
- package/dist/overlays/fetcher.js +0 -15
- package/dist/overlays/fetcher.js.map +0 -1
- package/dist/overlays/recipeRegistry.js +0 -32
- package/dist/overlays/recipeRegistry.js.map +0 -1
- package/dist/overlays/runtime/anchor/resolve.js +0 -87
- package/dist/overlays/runtime/anchor/resolve.js.map +0 -1
- package/dist/overlays/runtime/index.js +0 -8
- package/dist/overlays/runtime/index.js.map +0 -1
- package/dist/overlays/runtime/overlay/highlight.js +0 -160
- package/dist/overlays/runtime/overlay/highlight.js.map +0 -1
- package/dist/overlays/runtime/overlay/modal.js +0 -78
- package/dist/overlays/runtime/overlay/modal.js.map +0 -1
- package/dist/overlays/runtime/overlay/root.js +0 -297
- package/dist/overlays/runtime/overlay/root.js.map +0 -1
- package/dist/overlays/runtime/overlay/runner.js +0 -602
- package/dist/overlays/runtime/overlay/runner.js.map +0 -1
- package/dist/overlays/runtime/overlay/tooltip.js +0 -232
- package/dist/overlays/runtime/overlay/tooltip.js.map +0 -1
- package/dist/overlays/runtime/utils/dom.js +0 -12
- package/dist/overlays/runtime/utils/dom.js.map +0 -1
- package/dist/overlays/schema.js +0 -52
- package/dist/overlays/schema.js.map +0 -1
- package/dist/overlays/types.js +0 -2
- package/dist/overlays/types.js.map +0 -1
- package/dist/render/RenderContext.js +0 -69
- package/dist/render/RenderContext.js.map +0 -1
- package/dist/render/index.js +0 -3
- package/dist/render/index.js.map +0 -1
- package/dist/render/types.js +0 -2
- package/dist/render/types.js.map +0 -1
- package/dist/runtime.js +0 -237
- package/dist/runtime.js.map +0 -1
- package/dist/state/StateStore.js +0 -176
- package/dist/state/StateStore.js.map +0 -1
- package/dist/state/helpers/cooldowns.js +0 -31
- package/dist/state/helpers/cooldowns.js.map +0 -1
- package/dist/state/helpers/dismissals.js +0 -34
- package/dist/state/helpers/dismissals.js.map +0 -1
- package/dist/state/helpers/frequency.js +0 -43
- package/dist/state/helpers/frequency.js.map +0 -1
- package/dist/state/index.js +0 -7
- package/dist/state/index.js.map +0 -1
- package/dist/state/schema.js +0 -25
- package/dist/state/schema.js.map +0 -1
- package/dist/state/types.js +0 -9
- package/dist/state/types.js.map +0 -1
- package/dist/store/example.js +0 -43
- package/dist/store/example.js.map +0 -1
- package/dist/store/mini-effector.js +0 -88
- package/dist/store/mini-effector.js.map +0 -1
- package/dist/surfaces/Surfaces.js +0 -361
- package/dist/surfaces/Surfaces.js.map +0 -1
- package/dist/surfaces/index.js +0 -12
- package/dist/surfaces/index.js.map +0 -1
- package/dist/surfaces/positioning.js +0 -228
- package/dist/surfaces/positioning.js.map +0 -1
- package/dist/surfaces/types.js +0 -23
- package/dist/surfaces/types.js.map +0 -1
- package/dist/telemetry/adapters/noop.js +0 -42
- package/dist/telemetry/adapters/noop.js.map +0 -1
- package/dist/telemetry/adapters/posthog.js +0 -180
- package/dist/telemetry/adapters/posthog.js.map +0 -1
- package/dist/telemetry/index.js +0 -4
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/registry.js +0 -29
- package/dist/telemetry/registry.js.map +0 -1
- package/dist/telemetry/types.js +0 -2
- package/dist/telemetry/types.js.map +0 -1
- package/dist/theme/ThemeProvider.js +0 -109
- package/dist/theme/ThemeProvider.js.map +0 -1
- package/dist/theme/defaultTheme.js +0 -190
- package/dist/theme/defaultTheme.js.map +0 -1
- package/dist/theme/extractHostTheme.js +0 -259
- package/dist/theme/extractHostTheme.js.map +0 -1
- package/dist/theme/index.js +0 -7
- package/dist/theme/index.js.map +0 -1
- package/dist/theme/types.js +0 -6
- package/dist/theme/types.js.map +0 -1
- package/dist/token.js +0 -44
- package/dist/token.js.map +0 -1
- package/dist/types.js +0 -17
- package/dist/types.js.map +0 -1
- package/dist/version.js +0 -14
- package/dist/version.js.map +0 -1
- package/dist/widgets/WidgetRegistry.js +0 -190
- package/dist/widgets/WidgetRegistry.js.map +0 -1
- package/dist/widgets/index.js +0 -7
- package/dist/widgets/index.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/components/TileWheel.tsx", "../src/config-validator.ts", "../src/overlays/schema.ts", "../src/overlays/fetcher.ts", "../src/SmartCanvasPortal.tsx", "../src/context/schema.ts", "../src/decisions/schema.ts", "../src/events/schema.ts", "../src/state/schema.ts"],
|
|
4
|
+
"sourcesContent": ["// ============================================================================\n// Early SynOS exposure for adaptive self-registration + shared React\n// ============================================================================\n// Adaptive bundles loaded via <script> (IIFE) check window.SynOS.appRegistry\n// to self-register. In the Chrome extension's dev mode, adaptives load BEFORE\n// Syntro.init() runs. Expose the singleton appRegistry here (module scope) so\n// it's available as soon as smart-canvas.min.js loads. Syntro.init() later\n// enriches the SynOS object with runtime/version but reuses the same registry.\n//\n// React and ReactDOM are also exposed here so that adaptive bundles built with\n// syntroReactPlugin can resolve their lazy shims via SynOS.React / SynOS.ReactDOM.\n// This makes the runtime SDK the single React owner \u2014 adaptives and the editor\n// SDK consume React from SynOS, never from their own bundles.\n\nimport React from 'react';\nimport { createPortal, flushSync } from 'react-dom';\nimport * as ReactDOMClient from 'react-dom/client';\nimport { appRegistry as _earlyAppRegistry } from './apps';\n\nexport * from './api';\nexport * from './components/ShadowCanvasOverlay';\nexport * from './components/TileCard';\nexport * from './components/TileWheel';\nexport * from './config-validator';\nexport * from './configFetcher';\nexport * from './controller';\nexport * from './experiments';\nexport * from './hooks/useShadowCanvasConfig';\n// Metrics for session-based targeting\nexport * from './metrics';\nexport * from './overlays/fetcher';\nexport * from './overlays/schema';\nexport * from './overlays/types';\nexport * from './ShadowRootContext';\nexport * from './SmartCanvasApp';\nexport * from './SmartCanvasElement';\nexport * from './SmartCanvasPortal';\nexport * from './telemetry';\nexport * from './types';\nexport * from './version';\n\n// ============================================================================\n// v2 Runtime Modules\n// ============================================================================\n\n// Actions - Unified execution layer for interventions\nexport * from './actions';\n// Apps - SynOS app system\nexport * from './apps';\n// Context - Page/session/viewport state management\nexport * from './context';\n// Decisions - Strategy-based conditional rendering\nexport * from './decisions';\n// Events - Normalized event stream\nexport * from './events';\n// Events - Normalized event stream\nexport * from './events';\n// Notifications - Toast notification system\nexport * from './notifications';\n// React context for runtime access\nexport {\n RuntimeProvider,\n useDecision,\n usePageContext,\n useRuntime,\n useRuntimeContext,\n useRuntimeEvents,\n useRuntimeState,\n useSessionContext,\n useViewportContext,\n} from './RuntimeProvider';\nexport type { RuntimeMode, SmartCanvasRuntime, SmartCanvasRuntimeOptions } from './runtime';\n// Unified runtime\nexport { createSmartCanvasRuntime, RUNTIME_VERSION } from './runtime';\n// State - Persistent state storage with helpers\nexport * from './state';\n// State - Persistent state storage with helpers\nexport * from './state';\n// Surfaces - Managed surface system for rendering UI\nexport * from './surfaces';\n// Widgets - Mountable component registry\nexport * from './widgets';\n\n// ============================================================================\n// Single-token initialization\n// ============================================================================\n\nexport type { SyntroInitOptions, SyntroInitResult } from './bootstrap';\nexport { Syntro } from './bootstrap';\nexport type { SyntroTokenPayload } from './token';\nexport { decodeToken, encodeToken } from './token';\n\nif (typeof window !== 'undefined') {\n const existing = (window as any).SynOS;\n (window as any).SynOS = {\n ...existing,\n appRegistry: existing?.appRegistry || _earlyAppRegistry,\n React,\n ReactDOM: { ...ReactDOMClient, createPortal, flushSync },\n };\n}\n", "import { border, brand, slateGrey } from '@syntro/design-system/tokens';\nimport { useEffect, useMemo, useState } from 'react';\n\nimport type { TelemetryClient } from '../telemetry/types';\nimport type { TileConfig } from '../types';\n\nimport { TileCard } from './TileCard';\n\nexport interface TileWheelProps {\n tiles: TileConfig[];\n intervalMs?: number;\n telemetry?: TelemetryClient;\n}\n\nexport function TileWheel({ tiles, intervalMs = 7000, telemetry }: TileWheelProps) {\n const [index, setIndex] = useState(0);\n const ordered = useMemo(\n () => [...tiles].sort((a, b) => (a.priority ?? 0) - (b.priority ?? 0)),\n [tiles]\n );\n\n useEffect(() => {\n telemetry?.trackCanvasOpened('wheel');\n }, [telemetry]);\n\n useEffect(() => {\n if (ordered.length <= 1) return;\n const id = setInterval(() => {\n setIndex((prev) => (prev + 1) % ordered.length);\n }, intervalMs);\n return () => clearInterval(id);\n }, [ordered, intervalMs]);\n\n useEffect(() => {\n const current = ordered[index];\n if (current) {\n telemetry?.trackRectangleViewed(current.id, 'wheel');\n }\n }, [index, ordered, telemetry]);\n\n if (!ordered.length) return null;\n\n return (\n <div\n style={{\n position: 'relative',\n overflow: 'hidden',\n borderRadius: '1.5rem',\n border: `1px solid ${border.primary}`,\n background: slateGrey[1],\n padding: '1.5rem',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n }}\n data-shadow-canvas-id=\"wheel\"\n >\n <div\n style={{\n display: 'flex',\n transition: 'transform 700ms ease-out',\n transform: `translateX(-${index * 100}%)`,\n width: `${ordered.length * 100}%`,\n }}\n >\n {ordered.map((tile) => (\n <div key={tile.id} style={{ width: '100%', flexShrink: 0, padding: '0 1rem' }}>\n <TileCard config={tile} surface=\"wheel\" telemetry={telemetry} />\n </div>\n ))}\n </div>\n <div style={{ marginTop: '1rem', display: 'flex', justifyContent: 'center', gap: '0.5rem' }}>\n {ordered.map((tile, idx) => (\n <button\n type=\"button\"\n key={tile.id}\n style={{\n height: '0.5rem',\n width: '1.5rem',\n borderRadius: '9999px',\n background: idx === index ? brand[3] : slateGrey[6],\n border: 'none',\n cursor: 'pointer',\n padding: 0,\n }}\n onClick={() => setIndex(idx)}\n />\n ))}\n </div>\n </div>\n );\n}\n", "/**\n * Config validation and migration for SDK versioning.\n *\n * This module handles:\n * - Validating configs against the current SDK schema version\n * - Migrating old config formats to current version\n * - Providing warnings for version mismatches\n */\n\nimport type { CanvasConfigResponse } from './types';\nimport { SDK_SCHEMA_VERSION } from './types';\n\n/**\n * Result of config validation.\n */\nexport interface ConfigValidationResult {\n /** Whether the config is valid and can be used */\n valid: boolean;\n\n /** Warning messages (non-fatal issues) */\n warnings: string[];\n\n /** Error messages (fatal issues that prevent usage) */\n errors: string[];\n\n /** Migrated config if old version was detected */\n migratedConfig?: CanvasConfigResponse;\n}\n\n/**\n * Parse a schema version string into major and minor numbers.\n */\nexport function parseVersion(version: string): { major: number; minor: number } {\n const parts = version.split('.');\n return {\n major: parseInt(parts[0] || '0', 10),\n minor: parseInt(parts[1] || '0', 10),\n };\n}\n\n/**\n * Validate and normalize a config, handling version mismatches.\n *\n * This function:\n * 1. Checks if config is valid object\n * 2. Compares config schema version with SDK version\n * 3. Migrates old configs to current version\n * 4. Returns validation result with warnings/errors\n *\n * @param config - Raw config from backend or fetcher\n * @returns Validation result with any migrations applied\n */\nexport function validateConfig(config: unknown): ConfigValidationResult {\n const warnings: string[] = [];\n const errors: string[] = [];\n\n // Type check\n if (!config || typeof config !== 'object') {\n return {\n valid: false,\n errors: ['Config must be an object'],\n warnings,\n };\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n\n // Check required fields\n if (!typedConfig.tiles) {\n errors.push('Config missing required field: tiles');\n }\n if (!typedConfig.actions) {\n errors.push('Config missing required field: actions');\n }\n if (!typedConfig.fetchedAt) {\n errors.push('Config missing required field: fetchedAt');\n }\n\n if (errors.length > 0) {\n return { valid: false, errors, warnings };\n }\n\n // Check schema version\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n // Future schema version (newer backend)\n if (configVer.major > sdkVer.major) {\n warnings.push(\n `Config schema v${configVersion} is newer than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Some features may not work. Update SDK to latest version.`\n );\n }\n\n // Old schema version (older backend or missing version)\n if (configVer.major < sdkVer.major || !typedConfig.schemaVersion) {\n warnings.push(\n `Config schema v${configVersion} is older than SDK v${SDK_SCHEMA_VERSION}. ` +\n `Migrating config to current version.`\n );\n return {\n valid: true,\n warnings,\n errors,\n migratedConfig: migrateConfig(typedConfig as CanvasConfigResponse, configVersion),\n };\n }\n\n // Compatible version (same major version)\n return {\n valid: true,\n warnings,\n errors,\n };\n}\n\n/**\n * Migrate old config format to current SDK version.\n *\n * This function applies all necessary transformations to bring\n * an old config up to the current schema version.\n *\n * @param config - Config to migrate\n * @param fromVersion - Version to migrate from\n * @returns Migrated config at current SDK version\n */\nfunction migrateConfig(config: CanvasConfigResponse, fromVersion: string): CanvasConfigResponse {\n let migrated = { ...config };\n\n const fromVer = parseVersion(fromVersion);\n\n // v1.x -> v2.x migration\n if (fromVer.major === 1) {\n migrated = migrateV1ToV2(migrated);\n }\n\n // Update schema version to current\n migrated.schemaVersion = SDK_SCHEMA_VERSION;\n\n return migrated;\n}\n\n/**\n * Migrate v1.x config to v2.0 format.\n *\n * Changes in v2.0:\n * - Introduced ActivationConfig to replace experiment field\n * - Unified ActionStep format\n * - Added schemaVersion field\n */\nfunction migrateV1ToV2(config: any): CanvasConfigResponse {\n const migrated: CanvasConfigResponse = {\n schemaVersion: '2.0',\n tiles: [],\n actions: config.actions || [],\n fetchedAt: config.fetchedAt || new Date().toISOString(),\n };\n\n // Migrate tiles\n if (config.tiles && Array.isArray(config.tiles)) {\n migrated.tiles = config.tiles.map((tile: any) => {\n const migratedTile = { ...tile };\n\n // Migrate deprecated experiment field to activation\n if (tile.experiment && !tile.activation) {\n const exp = tile.experiment;\n\n // Convert old experiment format to new activation format\n if (exp.featureKey) {\n migratedTile.activation = {\n strategy: {\n type: 'external' as const,\n provider: 'growthbook' as const,\n featureKey: exp.featureKey,\n fallback: false,\n },\n };\n }\n\n // Remove deprecated field\n delete migratedTile.experiment;\n }\n\n return migratedTile;\n });\n }\n\n // Copy optional fields\n if (config.configVersion) migrated.configVersion = config.configVersion;\n if (config.canvasTitle) migrated.canvasTitle = config.canvasTitle;\n if (config.theme) migrated.theme = config.theme;\n if (config.launcher) migrated.launcher = config.launcher;\n if (config.routes) migrated.routes = config.routes;\n\n return migrated;\n}\n\n/**\n * Check if a config needs migration.\n *\n * @param config - Config to check\n * @returns True if migration is needed\n */\nexport function needsMigration(config: unknown): boolean {\n if (!config || typeof config !== 'object') {\n return false;\n }\n\n const typedConfig = config as Partial<CanvasConfigResponse>;\n const configVersion = typedConfig.schemaVersion || '1.0';\n const configVer = parseVersion(configVersion);\n const sdkVer = parseVersion(SDK_SCHEMA_VERSION);\n\n return configVer.major < sdkVer.major || !typedConfig.schemaVersion;\n}\n", "import { z } from 'zod';\n\nexport const SelectorZ = z.union([\n z.object({ type: z.literal('data'), key: z.string(), value: z.string().optional() }),\n z.object({ type: z.literal('css'), value: z.string() }),\n z.object({ type: z.literal('aria'), role: z.string().optional(), label: z.string().optional() }),\n z.object({ type: z.literal('shadow-css'), value: z.string() }),\n z.object({ type: z.literal('ref'), el: z.any() }), // runtime-only\n]);\n\nexport const TooltipStepZ = z.object({\n kind: z.literal('tooltip'),\n id: z.string(),\n anchor: SelectorZ,\n content: z.object({ title: z.string().optional(), body: z.string() }),\n placement: z.enum(['top', 'bottom', 'left', 'right', 'auto']).optional(),\n offsetPx: z.number().optional(),\n blocking: z.boolean().optional(),\n trigger: z.enum(['immediate', 'hover', 'click']).optional(),\n dismiss: z\n .object({\n onEsc: z.boolean().optional(),\n closeButton: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const HighlightStepZ = z.object({\n kind: z.literal('highlight'),\n id: z.string(),\n anchor: SelectorZ,\n copy: z.string().optional(),\n ring: z.object({ paddingPx: z.number().optional(), radiusPx: z.number().optional() }).optional(),\n scrim: z.object({ opacity: z.number().optional() }).optional(),\n ringColor: z.string().optional(),\n blocking: z.boolean().optional(),\n dismiss: z\n .object({\n onClickOutside: z.boolean().optional(),\n onEsc: z.boolean().optional(),\n timeoutMs: z.number().optional(),\n })\n .optional(),\n});\n\nexport const CanvasRecipeZ = z.object({\n id: z.string(),\n version: z.number(),\n routes: z.array(z.string()).optional(),\n steps: z.array(z.union([TooltipStepZ, HighlightStepZ])),\n});\n\nexport function validateRecipe(json: unknown) {\n return CanvasRecipeZ.parse(json);\n}\n", "import { type CanvasFetcherOptions, resolveConfigUri } from '../configFetcher';\n\nimport { CanvasRecipeZ } from './schema';\nimport type { CanvasRecipe } from './types';\n\nexport type OverlayRecipeFetcher = () => Promise<CanvasRecipe>;\n\nexport const createOverlayRecipeFetcher =\n ({\n configUri,\n experiments,\n featureKey = 'smart-canvas-overlay-uri',\n credentials = 'include',\n }: CanvasFetcherOptions = {}): OverlayRecipeFetcher =>\n async () => {\n const uri = resolveConfigUri({ configUri, experiments, featureKey });\n if (!uri) {\n throw new Error('SmartCanvas overlays: recipe URI missing (env + feature unset).');\n }\n const response = await fetch(uri, { credentials });\n if (!response.ok) {\n throw new Error(`SmartCanvas overlays: failed to fetch recipe (${response.status})`);\n }\n const json = await response.json();\n return CanvasRecipeZ.parse(json) as CanvasRecipe;\n };\n", "import { type ReactNode, useLayoutEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport type { SmartCanvasElement } from './SmartCanvasElement';\n\nexport interface SmartCanvasPortalProps {\n element: SmartCanvasElement | null;\n children: ReactNode;\n}\n\nexport function SmartCanvasPortal({ element, children }: SmartCanvasPortalProps) {\n const [mountNode, setMountNode] = useState<HTMLElement | null>(null);\n\n useLayoutEffect(() => {\n if (!element) {\n setMountNode(null);\n return;\n }\n setMountNode(element.getMountNode());\n return () => setMountNode(null);\n }, [element]);\n\n if (!mountNode) return null;\n return createPortal(children, mountNode);\n}\n", "/**\n * Zod schemas for RuntimeContext validation.\n */\nimport { z } from 'zod';\n\nexport const PageContextZ = z.object({\n url: z.string(),\n routeId: z.string().optional(),\n title: z.string().optional(),\n locale: z.string().optional(),\n});\n\nexport const PageHistoryEntryZ = z.object({\n url: z.string(),\n ts: z.number(),\n});\n\nexport const SessionContextZ = z.object({\n sessionId: z.string(),\n startTs: z.number(),\n pageHistory: z.array(PageHistoryEntryZ).optional(),\n});\n\nexport const ViewportContextZ = z.object({\n width: z.number(),\n height: z.number(),\n});\n\nexport const BoundingBoxZ = z.object({\n x: z.number(),\n y: z.number(),\n w: z.number(),\n h: z.number(),\n});\n\nexport const AnchorStateZ = z.object({\n anchorId: z.string(),\n present: z.boolean(),\n visible: z.boolean().optional(),\n boundingBox: BoundingBoxZ.optional(),\n});\n\nexport const AugmentationZ = z.record(\n z.string(),\n z.union([z.number(), z.string(), z.boolean(), z.undefined()])\n);\n\nexport const RuntimeContextZ = z.object({\n page: PageContextZ,\n session: SessionContextZ,\n viewport: ViewportContextZ,\n anchors: z.array(AnchorStateZ).optional(),\n augmented: AugmentationZ.optional(),\n});\n\n/**\n * Validate a RuntimeContext object.\n */\nexport function validateRuntimeContext(data: unknown) {\n return RuntimeContextZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type RuntimeContextSchema = z.infer<typeof RuntimeContextZ>;\nexport type PageContextSchema = z.infer<typeof PageContextZ>;\nexport type SessionContextSchema = z.infer<typeof SessionContextZ>;\nexport type ViewportContextSchema = z.infer<typeof ViewportContextZ>;\nexport type AnchorStateSchema = z.infer<typeof AnchorStateZ>;\n", "/**\n * Zod schemas for decision strategy validation.\n */\nimport { z } from 'zod';\n\n// =============================================================================\n// CONDITION SCHEMAS\n// =============================================================================\n\nexport const PageUrlConditionZ = z.object({\n type: z.literal('page_url'),\n url: z.string(),\n});\n\nexport const RouteConditionZ = z.object({\n type: z.literal('route'),\n routeId: z.string(),\n});\n\nexport const AnchorVisibleConditionZ = z.object({\n type: z.literal('anchor_visible'),\n anchorId: z.string(),\n state: z.enum(['visible', 'present', 'absent']),\n});\n\nexport const EventOccurredConditionZ = z.object({\n type: z.literal('event_occurred'),\n eventName: z.string(),\n withinMs: z.number().optional(),\n});\n\nexport const StateEqualsConditionZ = z.object({\n type: z.literal('state_equals'),\n key: z.string(),\n value: z.unknown(),\n});\n\nexport const ViewportConditionZ = z.object({\n type: z.literal('viewport'),\n minWidth: z.number().optional(),\n maxWidth: z.number().optional(),\n minHeight: z.number().optional(),\n maxHeight: z.number().optional(),\n});\n\nexport const SessionMetricConditionZ = z.object({\n type: z.literal('session_metric'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n threshold: z.number(),\n});\n\nexport const DismissedConditionZ = z.object({\n type: z.literal('dismissed'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\n\nexport const CooldownActiveConditionZ = z.object({\n type: z.literal('cooldown_active'),\n key: z.string(),\n inverted: z.boolean().optional(),\n});\n\nexport const FrequencyLimitConditionZ = z.object({\n type: z.literal('frequency_limit'),\n key: z.string(),\n limit: z.number(),\n inverted: z.boolean().optional(),\n});\n\nexport const EventCountConditionZ = z.object({\n type: z.literal('event_count'),\n key: z.string(),\n operator: z.enum(['gte', 'lte', 'eq', 'gt', 'lt']),\n count: z.number().int().min(0),\n withinMs: z.number().positive().optional(),\n});\n\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// =============================================================================\n// STRATEGY SCHEMAS\n// =============================================================================\n\nexport const RuleZ = z.object({\n conditions: z.array(ConditionZ),\n value: z.unknown(),\n});\n\nexport const RuleStrategyZ = z.object({\n type: z.literal('rules'),\n rules: z.array(RuleZ),\n default: z.unknown(),\n});\n\nexport const ScoreStrategyZ = z.object({\n type: z.literal('score'),\n field: z.string(),\n threshold: z.number(),\n above: z.unknown(),\n below: z.unknown(),\n});\n\nexport const ModelStrategyZ = z.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\nexport const ExternalStrategyZ = z.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\nexport const DecisionStrategyZ = z.discriminatedUnion('type', [\n RuleStrategyZ,\n ScoreStrategyZ,\n ModelStrategyZ,\n ExternalStrategyZ,\n]);\n\n// =============================================================================\n// ACTIVATION CONFIG SCHEMA\n// =============================================================================\n\nexport const RouteFilterZ = z.object({\n include: z.array(z.string()).optional(),\n exclude: z.array(z.string()).optional(),\n});\n\nexport const ActivationConfigZ = z.object({\n routes: RouteFilterZ.optional(),\n strategy: DecisionStrategyZ.optional(),\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// TYPE INFERENCE\n// =============================================================================\n\nexport type ConditionSchema = z.infer<typeof ConditionZ>;\nexport type RuleSchema = z.infer<typeof RuleZ>;\nexport type DecisionStrategySchema = z.infer<typeof DecisionStrategyZ>;\nexport type ActivationConfigSchema = z.infer<typeof ActivationConfigZ>;\n", "/**\n * Zod schemas for event validation.\n */\nimport { z } from 'zod';\n\nexport const EventSourceZ = z.enum(['posthog', 'canvas', 'derived']);\n\nexport const NormalizedEventZ = z.object({\n ts: z.number(),\n name: z.string(),\n source: EventSourceZ,\n props: z.record(z.string(), z.unknown()).optional(),\n schemaVersion: z.string(),\n});\n\nexport const EventFilterZ = z.object({\n names: z.array(z.string()).optional(),\n patterns: z.array(z.string()).optional(),\n sources: z.array(EventSourceZ).optional(),\n});\n\n/**\n * Validate a NormalizedEvent object.\n */\nexport function validateNormalizedEvent(data: unknown) {\n return NormalizedEventZ.safeParse(data);\n}\n\n/**\n * Validate an EventFilter object.\n */\nexport function validateEventFilter(data: unknown) {\n return EventFilterZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type NormalizedEventSchema = z.infer<typeof NormalizedEventZ>;\nexport type EventFilterSchema = z.infer<typeof EventFilterZ>;\n", "/**\n * Zod schemas for state validation.\n */\nimport { z } from 'zod';\n\nexport const StoredValueZ = z.object({\n value: z.unknown(),\n expiresAt: z.number().optional(),\n});\n\nexport const FrequencyEntryZ = z.object({\n count: z.number(),\n resetAt: z.number().optional(),\n});\n\n/**\n * Validate a StoredValue object.\n */\nexport function validateStoredValue(data: unknown) {\n return StoredValueZ.safeParse(data);\n}\n\n/**\n * Validate a FrequencyEntry object.\n */\nexport function validateFrequencyEntry(data: unknown) {\n return FrequencyEntryZ.safeParse(data);\n}\n\n/**\n * Type inference from Zod schema.\n */\nexport type StoredValueSchema = z.infer<typeof StoredValueZ>;\nexport type FrequencyEntrySchema = z.infer<typeof FrequencyEntryZ>;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["createPortal", "useState", "z", "z", "z", "z", "createPortal"]
|
|
7
|
+
}
|
package/dist/metrics/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Metrics module for session-based real-time targeting.
|
|
3
3
|
*/
|
|
4
|
-
export {
|
|
4
|
+
export { createSessionMetricTracker, SessionMetricTracker, type SessionMetricTrackerOptions, } from './sessionMetrics';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export type { TileNotificationRule, NotificationDeepLink, ActiveNotification } from './types';
|
|
2
|
-
export { MAX_VISIBLE_TOASTS, DEFAULT_TTL, DEFAULT_COOLDOWN } from './types';
|
|
3
|
-
export { interpolateTemplate, matchEvent } from './matcher';
|
|
4
1
|
export type { MatchResult } from './matcher';
|
|
5
|
-
export {
|
|
2
|
+
export { interpolateTemplate, matchEvent } from './matcher';
|
|
3
|
+
export type { NotificationToastStackProps } from './NotificationToastStack';
|
|
4
|
+
export { NotificationToastStack } from './NotificationToastStack';
|
|
5
|
+
export type { ActiveNotification, NotificationDeepLink, TileNotificationRule } from './types';
|
|
6
|
+
export { DEFAULT_COOLDOWN, DEFAULT_TTL, MAX_VISIBLE_TOASTS } from './types';
|
|
6
7
|
export type { UseNotificationsReturn } from './useNotifications';
|
|
8
|
+
export { useNotifications } from './useNotifications';
|
|
7
9
|
export { useNotifyWatcher } from './useNotifyWatcher';
|
|
8
|
-
export { NotificationToastStack } from './NotificationToastStack';
|
|
9
|
-
export type { NotificationToastStackProps } from './NotificationToastStack';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export { showTooltip } from './overlay/tooltip';
|
|
1
|
+
export { createAnchorResolver } from './anchor/resolve';
|
|
3
2
|
export { showHighlight } from './overlay/highlight';
|
|
4
3
|
export { showModal } from './overlay/modal';
|
|
4
|
+
export { ensureOverlayRoot, injectBaseStyles } from './overlay/root';
|
|
5
5
|
export { runOverlays } from './overlay/runner';
|
|
6
|
-
export {
|
|
6
|
+
export { showTooltip } from './overlay/tooltip';
|
|
7
7
|
export { isVisible, scrollIntoViewIfNeeded } from './utils/dom';
|
|
@@ -1,4 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redirect overlay rendering into the shadow root's #overlayContainer.
|
|
3
|
+
*
|
|
4
|
+
* If `ensureOverlayRoot()` was already called (e.g. during runtime creation
|
|
5
|
+
* before the canvas element exists), the temporary fallback element is
|
|
6
|
+
* reparented into `container` so that existing references remain valid.
|
|
7
|
+
*/
|
|
8
|
+
export declare function setOverlayRoot(container: HTMLElement): void;
|
|
9
|
+
/**
|
|
10
|
+
* Return the overlay root element for appending overlays (tooltips, modals, etc).
|
|
11
|
+
*
|
|
12
|
+
* On first call (before `setOverlayRoot()`), creates a temporary element on
|
|
13
|
+
* document.body. When `setOverlayRoot()` is called later during shadow DOM
|
|
14
|
+
* bootstrap, this element is reparented into the shadow root so all existing
|
|
15
|
+
* references continue to work.
|
|
16
|
+
*/
|
|
1
17
|
export declare function ensureOverlayRoot(): HTMLElement;
|
|
2
|
-
export declare function injectBaseStyles(): void;
|
|
18
|
+
export declare function injectBaseStyles(target: ShadowRoot | DocumentOrShadowRoot): void;
|
|
3
19
|
export declare function setDocumentInertExcept(keepEl: HTMLElement): void;
|
|
4
20
|
export declare function clearDocumentInert(): void;
|
package/dist/react.js
CHANGED
|
@@ -1,141 +1,97 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
error: null,
|
|
42
|
-
});
|
|
43
|
-
const initRef = useRef(false);
|
|
44
|
-
const handleRef = useRef(null);
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
if (!token)
|
|
47
|
-
return;
|
|
48
|
-
// Reuse existing init if same token (handles React Strict Mode remounts)
|
|
49
|
-
if (globalInitPromise && globalInitToken === token) {
|
|
50
|
-
globalInitPromise.then((result) => {
|
|
51
|
-
var _a, _b;
|
|
52
|
-
handleRef.current = result.canvas;
|
|
53
|
-
setState({
|
|
54
|
-
canvas: result.canvas,
|
|
55
|
-
experiments: (_a = result.experiments) !== null && _a !== void 0 ? _a : null,
|
|
56
|
-
telemetry: (_b = result.telemetry) !== null && _b !== void 0 ? _b : null,
|
|
57
|
-
isReady: true,
|
|
58
|
-
error: null,
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
return;
|
|
62
|
-
}
|
|
63
|
-
// Prevent double init
|
|
64
|
-
if (initRef.current)
|
|
65
|
-
return;
|
|
66
|
-
initRef.current = true;
|
|
67
|
-
globalInitToken = token;
|
|
68
|
-
globalInitPromise = Syntro.init({ token, canvas: canvasOptions, fetcher });
|
|
69
|
-
globalInitPromise
|
|
70
|
-
.then((result) => {
|
|
71
|
-
var _a, _b;
|
|
72
|
-
handleRef.current = result.canvas;
|
|
73
|
-
setState({
|
|
74
|
-
canvas: result.canvas,
|
|
75
|
-
experiments: (_a = result.experiments) !== null && _a !== void 0 ? _a : null,
|
|
76
|
-
telemetry: (_b = result.telemetry) !== null && _b !== void 0 ? _b : null,
|
|
77
|
-
isReady: true,
|
|
78
|
-
error: null,
|
|
79
|
-
});
|
|
80
|
-
onReady === null || onReady === void 0 ? void 0 : onReady(result);
|
|
81
|
-
})
|
|
82
|
-
.catch((err) => {
|
|
83
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
84
|
-
setState((prev) => ({ ...prev, error, isReady: true }));
|
|
85
|
-
onError === null || onError === void 0 ? void 0 : onError(error);
|
|
86
|
-
// Clear global state on error so retry is possible
|
|
87
|
-
globalInitPromise = null;
|
|
88
|
-
globalInitToken = null;
|
|
1
|
+
import {
|
|
2
|
+
Syntro
|
|
3
|
+
} from "./chunk-HJKAXD5S.js";
|
|
4
|
+
import "./chunk-AYTRRBR5.js";
|
|
5
|
+
|
|
6
|
+
// src/react.tsx
|
|
7
|
+
import { createContext, useContext, useEffect, useRef, useState } from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
var SyntroContext = createContext(null);
|
|
10
|
+
var globalInitPromise = null;
|
|
11
|
+
var globalInitToken = null;
|
|
12
|
+
function SyntroProvider({
|
|
13
|
+
token,
|
|
14
|
+
canvasOptions,
|
|
15
|
+
fetcher,
|
|
16
|
+
children,
|
|
17
|
+
onReady,
|
|
18
|
+
onError
|
|
19
|
+
}) {
|
|
20
|
+
const [state, setState] = useState({
|
|
21
|
+
canvas: null,
|
|
22
|
+
experiments: null,
|
|
23
|
+
telemetry: null,
|
|
24
|
+
isReady: false,
|
|
25
|
+
error: null
|
|
26
|
+
});
|
|
27
|
+
const initRef = useRef(false);
|
|
28
|
+
const handleRef = useRef(null);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (!token) return;
|
|
31
|
+
if (globalInitPromise && globalInitToken === token) {
|
|
32
|
+
globalInitPromise.then((result) => {
|
|
33
|
+
var _a, _b;
|
|
34
|
+
handleRef.current = result.canvas;
|
|
35
|
+
setState({
|
|
36
|
+
canvas: result.canvas,
|
|
37
|
+
experiments: (_a = result.experiments) != null ? _a : null,
|
|
38
|
+
telemetry: (_b = result.telemetry) != null ? _b : null,
|
|
39
|
+
isReady: true,
|
|
40
|
+
error: null
|
|
89
41
|
});
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}, [token]);
|
|
93
|
-
return _jsx(SyntroContext.Provider, { value: state, children: children });
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Hook to access the Syntro SDK.
|
|
97
|
-
*
|
|
98
|
-
* Must be used within a SyntroProvider.
|
|
99
|
-
*
|
|
100
|
-
* @returns The SDK context containing canvas, experiments, telemetry, and status
|
|
101
|
-
*/
|
|
102
|
-
export function useSyntro() {
|
|
103
|
-
const context = useContext(SyntroContext);
|
|
104
|
-
if (!context) {
|
|
105
|
-
throw new Error('useSyntro must be used within a SyntroProvider');
|
|
42
|
+
});
|
|
43
|
+
return;
|
|
106
44
|
}
|
|
107
|
-
return
|
|
45
|
+
if (initRef.current) return;
|
|
46
|
+
initRef.current = true;
|
|
47
|
+
globalInitToken = token;
|
|
48
|
+
globalInitPromise = Syntro.init({ token, canvas: canvasOptions, fetcher });
|
|
49
|
+
globalInitPromise.then((result) => {
|
|
50
|
+
var _a, _b;
|
|
51
|
+
handleRef.current = result.canvas;
|
|
52
|
+
setState({
|
|
53
|
+
canvas: result.canvas,
|
|
54
|
+
experiments: (_a = result.experiments) != null ? _a : null,
|
|
55
|
+
telemetry: (_b = result.telemetry) != null ? _b : null,
|
|
56
|
+
isReady: true,
|
|
57
|
+
error: null
|
|
58
|
+
});
|
|
59
|
+
onReady == null ? void 0 : onReady(result);
|
|
60
|
+
}).catch((err) => {
|
|
61
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
62
|
+
setState((prev) => ({ ...prev, error, isReady: true }));
|
|
63
|
+
onError == null ? void 0 : onError(error);
|
|
64
|
+
globalInitPromise = null;
|
|
65
|
+
globalInitToken = null;
|
|
66
|
+
});
|
|
67
|
+
}, [token, canvasOptions, fetcher, onError, onReady]);
|
|
68
|
+
return /* @__PURE__ */ jsx(SyntroContext.Provider, { value: state, children });
|
|
69
|
+
}
|
|
70
|
+
function useSyntro() {
|
|
71
|
+
const context = useContext(SyntroContext);
|
|
72
|
+
if (!context) {
|
|
73
|
+
throw new Error("useSyntro must be used within a SyntroProvider");
|
|
74
|
+
}
|
|
75
|
+
return context;
|
|
108
76
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
*
|
|
112
|
-
* Shorthand for `useSyntro().isReady`.
|
|
113
|
-
*/
|
|
114
|
-
export function useSyntroReady() {
|
|
115
|
-
return useSyntro().isReady;
|
|
77
|
+
function useSyntroReady() {
|
|
78
|
+
return useSyntro().isReady;
|
|
116
79
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
*
|
|
120
|
-
* @returns The experiment client, or null if not configured
|
|
121
|
-
*/
|
|
122
|
-
export function useSyntroExperiments() {
|
|
123
|
-
return useSyntro().experiments;
|
|
80
|
+
function useSyntroExperiments() {
|
|
81
|
+
return useSyntro().experiments;
|
|
124
82
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
*
|
|
128
|
-
* @returns The telemetry client, or null if not configured
|
|
129
|
-
*/
|
|
130
|
-
export function useSyntroTelemetry() {
|
|
131
|
-
return useSyntro().telemetry;
|
|
83
|
+
function useSyntroTelemetry() {
|
|
84
|
+
return useSyntro().telemetry;
|
|
132
85
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
*
|
|
136
|
-
* @returns The canvas handle, or null if not ready
|
|
137
|
-
*/
|
|
138
|
-
export function useSyntroCanvas() {
|
|
139
|
-
return useSyntro().canvas;
|
|
86
|
+
function useSyntroCanvas() {
|
|
87
|
+
return useSyntro().canvas;
|
|
140
88
|
}
|
|
141
|
-
|
|
89
|
+
export {
|
|
90
|
+
SyntroProvider,
|
|
91
|
+
useSyntro,
|
|
92
|
+
useSyntroCanvas,
|
|
93
|
+
useSyntroExperiments,
|
|
94
|
+
useSyntroReady,
|
|
95
|
+
useSyntroTelemetry
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=react.js.map
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/react.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * React bindings for the Syntro SDK.\n *\n * Usage:\n * ```tsx\n * import { SyntroProvider, useSyntro } from '@syntrologie/runtime-sdk/react';\n *\n * function App() {\n * return (\n * <SyntroProvider token=\"syn_xxx\">\n * <MyApp />\n * </SyntroProvider>\n * );\n * }\n *\n * function MyComponent() {\n * const { canvas, experiments, telemetry, isReady } = useSyntro();\n * // ...\n * }\n * ```\n */\nimport { createContext, type ReactNode, useContext, useEffect, useRef, useState } from 'react';\n\nimport type { SmartCanvasHandle } from './api';\nimport { Syntro, type SyntroInitOptions, type SyntroInitResult } from './bootstrap';\nimport type { ExperimentClient } from './experiments/types';\nimport type { TelemetryClient } from './telemetry/types';\n\nexport interface SyntroContextValue {\n /** The SmartCanvas handle */\n canvas: SmartCanvasHandle | null;\n /** The experiment client */\n experiments: ExperimentClient | null;\n /** The telemetry client */\n telemetry: TelemetryClient | null;\n /** Whether the SDK has finished initializing */\n isReady: boolean;\n /** Any error that occurred during initialization */\n error: Error | null;\n}\n\nconst SyntroContext = createContext<SyntroContextValue | null>(null);\n\n// Global tracking to handle React Strict Mode double-mounting\nlet globalInitPromise: Promise<SyntroInitResult> | null = null;\nlet globalInitToken: string | null = null;\n\nexport interface SyntroProviderProps {\n /**\n * The Syntro token containing all credentials.\n */\n token: string;\n\n /**\n * Optional canvas configuration overrides.\n */\n canvasOptions?: SyntroInitOptions['canvas'];\n\n /**\n * Custom config fetcher to override the default experiment-based fetcher.\n * Use this for local development or when bypassing the experiment server.\n */\n fetcher?: SyntroInitOptions['fetcher'];\n\n /**\n * Children to render.\n */\n children: ReactNode;\n\n /**\n * Called when initialization completes.\n */\n onReady?: (result: SyntroInitResult) => void;\n\n /**\n * Called when initialization fails.\n */\n onError?: (error: Error) => void;\n}\n\n/**\n * Provider component that initializes the Syntro SDK.\n *\n * Place this at the root of your app or at the top of any subtree\n * that needs access to the SDK.\n */\nexport function SyntroProvider({\n token,\n canvasOptions,\n fetcher,\n children,\n onReady,\n onError,\n}: SyntroProviderProps) {\n const [state, setState] = useState<SyntroContextValue>({\n canvas: null,\n experiments: null,\n telemetry: null,\n isReady: false,\n error: null,\n });\n\n const initRef = useRef(false);\n const handleRef = useRef<SmartCanvasHandle | null>(null);\n\n useEffect(() => {\n if (!token) return;\n\n // Reuse existing init if same token (handles React Strict Mode remounts)\n if (globalInitPromise && globalInitToken === token) {\n globalInitPromise.then((result) => {\n handleRef.current = result.canvas;\n setState({\n canvas: result.canvas,\n experiments: result.experiments ?? null,\n telemetry: result.telemetry ?? null,\n isReady: true,\n error: null,\n });\n });\n return;\n }\n\n // Prevent double init\n if (initRef.current) return;\n initRef.current = true;\n\n globalInitToken = token;\n globalInitPromise = Syntro.init({ token, canvas: canvasOptions, fetcher });\n\n globalInitPromise\n .then((result) => {\n handleRef.current = result.canvas;\n setState({\n canvas: result.canvas,\n experiments: result.experiments ?? null,\n telemetry: result.telemetry ?? null,\n isReady: true,\n error: null,\n });\n onReady?.(result);\n })\n .catch((err) => {\n const error = err instanceof Error ? err : new Error(String(err));\n setState((prev) => ({ ...prev, error, isReady: true }));\n onError?.(error);\n // Clear global state on error so retry is possible\n globalInitPromise = null;\n globalInitToken = null;\n });\n\n // Don't destroy on unmount in dev mode - React Strict Mode will remount\n // The canvas persists and will be reused on remount\n }, [token, canvasOptions, fetcher, onError, onReady]);\n\n return <SyntroContext.Provider value={state}>{children}</SyntroContext.Provider>;\n}\n\n/**\n * Hook to access the Syntro SDK.\n *\n * Must be used within a SyntroProvider.\n *\n * @returns The SDK context containing canvas, experiments, telemetry, and status\n */\nexport function useSyntro(): SyntroContextValue {\n const context = useContext(SyntroContext);\n if (!context) {\n throw new Error('useSyntro must be used within a SyntroProvider');\n }\n return context;\n}\n\n/**\n * Hook to check if the SDK is ready.\n *\n * Shorthand for `useSyntro().isReady`.\n */\nexport function useSyntroReady(): boolean {\n return useSyntro().isReady;\n}\n\n/**\n * Hook to access the experiment client.\n *\n * @returns The experiment client, or null if not configured\n */\nexport function useSyntroExperiments(): ExperimentClient | null {\n return useSyntro().experiments;\n}\n\n/**\n * Hook to access the telemetry client.\n *\n * @returns The telemetry client, or null if not configured\n */\nexport function useSyntroTelemetry(): TelemetryClient | null {\n return useSyntro().telemetry;\n}\n\n/**\n * Hook to access the canvas handle.\n *\n * @returns The canvas handle, or null if not ready\n */\nexport function useSyntroCanvas(): SmartCanvasHandle | null {\n return useSyntro().canvas;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;AAqBA,SAAS,eAA+B,YAAY,WAAW,QAAQ,gBAAgB;AAsI9E;AAlHT,IAAM,gBAAgB,cAAyC,IAAI;AAGnE,IAAI,oBAAsD;AAC1D,IAAI,kBAAiC;AAyC9B,SAAS,eAAe;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwB;AACtB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAA6B;AAAA,IACrD,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AAED,QAAM,UAAU,OAAO,KAAK;AAC5B,QAAM,YAAY,OAAiC,IAAI;AAEvD,YAAU,MAAM;AACd,QAAI,CAAC,MAAO;AAGZ,QAAI,qBAAqB,oBAAoB,OAAO;AAClD,wBAAkB,KAAK,CAAC,WAAW;AA9GzC;AA+GQ,kBAAU,UAAU,OAAO;AAC3B,iBAAS;AAAA,UACP,QAAQ,OAAO;AAAA,UACf,cAAa,YAAO,gBAAP,YAAsB;AAAA,UACnC,YAAW,YAAO,cAAP,YAAoB;AAAA,UAC/B,SAAS;AAAA,UACT,OAAO;AAAA,QACT,CAAC;AAAA,MACH,CAAC;AACD;AAAA,IACF;AAGA,QAAI,QAAQ,QAAS;AACrB,YAAQ,UAAU;AAElB,sBAAkB;AAClB,wBAAoB,OAAO,KAAK,EAAE,OAAO,QAAQ,eAAe,QAAQ,CAAC;AAEzE,sBACG,KAAK,CAAC,WAAW;AAnIxB;AAoIQ,gBAAU,UAAU,OAAO;AAC3B,eAAS;AAAA,QACP,QAAQ,OAAO;AAAA,QACf,cAAa,YAAO,gBAAP,YAAsB;AAAA,QACnC,YAAW,YAAO,cAAP,YAAoB;AAAA,QAC/B,SAAS;AAAA,QACT,OAAO;AAAA,MACT,CAAC;AACD,yCAAU;AAAA,IACZ,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,YAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC;AAChE,eAAS,CAAC,UAAU,EAAE,GAAG,MAAM,OAAO,SAAS,KAAK,EAAE;AACtD,yCAAU;AAEV,0BAAoB;AACpB,wBAAkB;AAAA,IACpB,CAAC;AAAA,EAIL,GAAG,CAAC,OAAO,eAAe,SAAS,SAAS,OAAO,CAAC;AAEpD,SAAO,oBAAC,cAAc,UAAd,EAAuB,OAAO,OAAQ,UAAS;AACzD;AASO,SAAS,YAAgC;AAC9C,QAAM,UAAU,WAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;AAOO,SAAS,iBAA0B;AACxC,SAAO,UAAU,EAAE;AACrB;AAOO,SAAS,uBAAgD;AAC9D,SAAO,UAAU,EAAE;AACrB;AAOO,SAAS,qBAA6C;AAC3D,SAAO,UAAU,EAAE;AACrB;AAOO,SAAS,kBAA4C;AAC1D,SAAO,UAAU,EAAE;AACrB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import type {
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { ActionHandler, AppearanceConfig, DefaultRenderer, RenderData, RenderProps } from './types';
|
|
3
3
|
interface RenderContextValue {
|
|
4
4
|
renderProps: RenderProps;
|
|
5
5
|
appearance: AppearanceConfig;
|
package/dist/render/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { RenderData, DefaultRenderer, RenderProp, RenderProps, StyleOverrides, ClassNameOverrides, AppearanceConfig, ActionHandler, } from './types';
|
|
2
|
-
export { RenderProvider, useRenderContext, useRenderProps, useAppearance, useActionHandlers, useRender, } from './RenderContext';
|
|
3
1
|
export type { RenderProviderProps } from './RenderContext';
|
|
2
|
+
export { RenderProvider, useActionHandlers, useAppearance, useRender, useRenderContext, useRenderProps, } from './RenderContext';
|
|
3
|
+
export type { ActionHandler, AppearanceConfig, ClassNameOverrides, DefaultRenderer, RenderData, RenderProp, RenderProps, StyleOverrides, } from './types';
|
package/dist/render/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
1
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
2
|
+
import type { BlockType, TileConfig } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Data passed to render props
|
|
5
5
|
*/
|
package/dist/runtime.d.ts
CHANGED
|
@@ -13,18 +13,18 @@
|
|
|
13
13
|
* GrowthBook's job is done at page load when it selects which config to deliver.
|
|
14
14
|
* The runtime receives the config and makes decisions using DecisionStrategy.
|
|
15
15
|
*/
|
|
16
|
-
import { type ActionEngine, ExecutorRegistry } from './actions';
|
|
17
|
-
import { AppRegistry } from './apps';
|
|
18
|
-
import { ContextManager } from './context/ContextManager';
|
|
19
|
-
import type {
|
|
16
|
+
import { type ActionEngine, type ExecutorRegistry } from './actions';
|
|
17
|
+
import { type AppRegistry } from './apps';
|
|
18
|
+
import { type ContextManager } from './context/ContextManager';
|
|
19
|
+
import type { DecisionResult, DecisionStrategy } from './decisions/types';
|
|
20
20
|
import { type EventAccumulator } from './events/EventAccumulator';
|
|
21
|
-
import { EventBus } from './events/EventBus';
|
|
21
|
+
import { type EventBus } from './events/EventBus';
|
|
22
22
|
import type { SessionMetricTracker } from './metrics/sessionMetrics';
|
|
23
|
-
import { StateStore } from './state/StateStore';
|
|
23
|
+
import { type StateStore } from './state/StateStore';
|
|
24
24
|
import { type Surfaces } from './surfaces';
|
|
25
25
|
import type { TelemetryClient } from './telemetry/types';
|
|
26
26
|
import type { RoutesConfig, TileConfig } from './types';
|
|
27
|
-
import { WidgetRegistry } from './widgets';
|
|
27
|
+
import { type WidgetRegistry } from './widgets';
|
|
28
28
|
/**
|
|
29
29
|
* Runtime version.
|
|
30
30
|
*/
|
|
@@ -32,7 +32,7 @@ export declare const RUNTIME_VERSION = "2.0.0";
|
|
|
32
32
|
/**
|
|
33
33
|
* Runtime mode.
|
|
34
34
|
*/
|
|
35
|
-
export type RuntimeMode = 'production' | 'development' | 'editor' | 'audit';
|
|
35
|
+
export type RuntimeMode = 'production' | 'development' | 'editor' | 'audit' | 'review';
|
|
36
36
|
/**
|
|
37
37
|
* SmartCanvasRuntime interface.
|
|
38
38
|
*/
|