@syntrologie/runtime-sdk 0.2.20 → 1.0.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 +756 -284
- package/README.md +310 -68
- package/dist/RuntimeProvider.d.ts +51 -0
- package/dist/RuntimeProvider.js +113 -0
- package/dist/RuntimeProvider.js.map +1 -0
- package/dist/SmartCanvasApp.d.ts +16 -10
- package/dist/SmartCanvasApp.js +45 -49
- package/dist/SmartCanvasApp.js.map +1 -1
- package/dist/SmartCanvasElement.d.ts +5 -5
- package/dist/SmartCanvasElement.js +24 -14
- package/dist/SmartCanvasElement.js.map +1 -1
- package/dist/SmartCanvasPortal.d.ts +2 -2
- package/dist/SmartCanvasPortal.js +2 -2
- package/dist/actions/ActionEngine.d.ts +11 -0
- package/dist/actions/ActionEngine.js +274 -0
- package/dist/actions/ActionEngine.js.map +1 -0
- package/dist/actions/executors/index.d.ts +117 -0
- package/dist/actions/executors/index.js +242 -0
- package/dist/actions/executors/index.js.map +1 -0
- package/dist/actions/executors/tour.d.ts +18 -0
- package/dist/actions/executors/tour.js +332 -0
- package/dist/actions/executors/tour.js.map +1 -0
- package/dist/actions/index.d.ts +10 -0
- package/dist/actions/index.js +12 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/types.d.ts +399 -0
- package/dist/actions/types.js +8 -0
- package/dist/actions/types.js.map +1 -0
- package/dist/actions/validation.d.ts +14 -0
- package/dist/actions/validation.js +602 -0
- package/dist/actions/validation.js.map +1 -0
- package/dist/antiFlicker.js +1 -1
- package/dist/api.d.ts +40 -26
- package/dist/api.js +90 -59
- package/dist/api.js.map +1 -1
- package/dist/apps/AppContext.d.ts +31 -0
- package/dist/apps/AppContext.js +93 -0
- package/dist/apps/AppContext.js.map +1 -0
- package/dist/apps/AppLoader.d.ts +84 -0
- package/dist/apps/AppLoader.js +256 -0
- package/dist/apps/AppLoader.js.map +1 -0
- package/dist/apps/AppRegistry.d.ts +102 -0
- package/dist/apps/AppRegistry.js +317 -0
- package/dist/apps/AppRegistry.js.map +1 -0
- package/dist/apps/adaptive-chatbot/index.js +7 -0
- package/dist/apps/adaptive-chatbot/index.js.map +7 -0
- package/dist/apps/examples/gamification-app.example.d.ts +305 -0
- package/dist/apps/examples/gamification-app.example.js +329 -0
- package/dist/apps/examples/gamification-app.example.js.map +1 -0
- package/dist/apps/faq/index.js +11 -0
- package/dist/apps/faq/index.js.map +7 -0
- package/dist/apps/gamification/index.js +2 -0
- package/dist/apps/gamification/index.js.map +7 -0
- package/dist/apps/index.d.ts +15 -0
- package/dist/apps/index.js +17 -0
- package/dist/apps/index.js.map +1 -0
- package/dist/apps/nav/index.js +11 -0
- package/dist/apps/nav/index.js.map +7 -0
- package/dist/apps/types.d.ts +231 -0
- package/dist/apps/types.js +8 -0
- package/dist/apps/types.js.map +1 -0
- package/dist/blocks/data/ComparisonBlock.d.ts +1 -1
- package/dist/blocks/data/ComparisonBlock.js +40 -40
- package/dist/blocks/data/ComparisonBlock.js.map +1 -1
- package/dist/blocks/data/StatsBlock.d.ts +1 -1
- package/dist/blocks/data/StatsBlock.js +41 -41
- package/dist/blocks/data/StatsBlock.js.map +1 -1
- package/dist/blocks/data/index.d.ts +2 -2
- package/dist/blocks/data/index.js +2 -2
- package/dist/blocks/index.d.ts +5 -5
- package/dist/blocks/index.js +29 -29
- package/dist/blocks/index.js.map +1 -1
- package/dist/blocks/interactive/ChecklistBlock.d.ts +1 -1
- package/dist/blocks/interactive/ChecklistBlock.js +60 -60
- package/dist/blocks/interactive/ChecklistBlock.js.map +1 -1
- package/dist/blocks/interactive/RatingBlock.d.ts +1 -1
- package/dist/blocks/interactive/RatingBlock.js +75 -65
- package/dist/blocks/interactive/RatingBlock.js.map +1 -1
- package/dist/blocks/interactive/index.d.ts +2 -2
- package/dist/blocks/interactive/index.js +2 -2
- package/dist/blocks/notification/NotificationBlock.d.ts +2 -2
- package/dist/blocks/notification/NotificationBlock.js +67 -63
- package/dist/blocks/notification/NotificationBlock.js.map +1 -1
- package/dist/blocks/notification/index.d.ts +1 -1
- package/dist/blocks/notification/index.js +1 -1
- package/dist/bootstrap.d.ts +47 -9
- package/dist/bootstrap.js +237 -69
- package/dist/bootstrap.js.map +1 -1
- package/dist/components/ShadowCanvasOverlay.d.ts +6 -6
- package/dist/components/ShadowCanvasOverlay.js +144 -107
- package/dist/components/ShadowCanvasOverlay.js.map +1 -1
- package/dist/components/TileCard.d.ts +5 -5
- package/dist/components/TileCard.js +204 -154
- package/dist/components/TileCard.js.map +1 -1
- package/dist/components/TileWheel.d.ts +3 -3
- package/dist/components/TileWheel.js +7 -7
- package/dist/components/TileWheel.js.map +1 -1
- package/dist/config-validator.d.ts +49 -0
- package/dist/config-validator.js +173 -0
- package/dist/config-validator.js.map +1 -0
- package/dist/configFetcher.d.ts +2 -2
- package/dist/configFetcher.js +20 -8
- package/dist/configFetcher.js.map +1 -1
- package/dist/context/ContextManager.d.ts +66 -0
- package/dist/context/ContextManager.js +268 -0
- package/dist/context/ContextManager.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/schema.d.ts +360 -0
- package/dist/context/schema.js +50 -0
- package/dist/context/schema.js.map +1 -0
- package/dist/context/types.d.ts +101 -0
- package/dist/context/types.js +8 -0
- package/dist/context/types.js.map +1 -0
- package/dist/decisions/engine.d.ts +43 -0
- package/dist/decisions/engine.js +112 -0
- package/dist/decisions/engine.js.map +1 -0
- package/dist/decisions/index.d.ts +9 -0
- package/dist/decisions/index.js +10 -0
- package/dist/decisions/index.js.map +1 -0
- package/dist/decisions/schema.d.ts +2166 -0
- package/dist/decisions/schema.js +143 -0
- package/dist/decisions/schema.js.map +1 -0
- package/dist/decisions/strategies/rules.d.ts +24 -0
- package/dist/decisions/strategies/rules.js +152 -0
- package/dist/decisions/strategies/rules.js.map +1 -0
- package/dist/decisions/strategies/score.d.ts +10 -0
- package/dist/decisions/strategies/score.js +29 -0
- package/dist/decisions/strategies/score.js.map +1 -0
- package/dist/decisions/types.d.ts +242 -0
- package/dist/decisions/types.js +2 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/earlyPatcher.d.ts +8 -20
- package/dist/earlyPatcher.js +13 -62
- package/dist/earlyPatcher.js.map +1 -1
- package/dist/editorLoader.d.ts +12 -0
- package/dist/editorLoader.js +132 -48
- package/dist/editorLoader.js.map +1 -1
- package/dist/events/EventBus.d.ts +59 -0
- package/dist/events/EventBus.js +152 -0
- package/dist/events/EventBus.js.map +1 -0
- package/dist/events/index.d.ts +9 -0
- package/dist/events/index.js +10 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/normalizers/canvas.d.ts +67 -0
- package/dist/events/normalizers/canvas.js +116 -0
- package/dist/events/normalizers/canvas.js.map +1 -0
- package/dist/events/normalizers/posthog.d.ts +53 -0
- package/dist/events/normalizers/posthog.js +163 -0
- package/dist/events/normalizers/posthog.js.map +1 -0
- package/dist/events/schema.d.ts +70 -0
- package/dist/events/schema.js +30 -0
- package/dist/events/schema.js.map +1 -0
- package/dist/events/types.d.ts +79 -0
- package/dist/events/types.js +49 -0
- package/dist/events/types.js.map +1 -0
- package/dist/experiments/adapters/growthbook.d.ts +4 -4
- package/dist/experiments/adapters/growthbook.js +5 -5
- package/dist/experiments/adapters/growthbook.js.map +1 -1
- package/dist/experiments/index.d.ts +3 -3
- package/dist/experiments/index.js +1 -1
- package/dist/experiments/registry.d.ts +2 -2
- package/dist/experiments/registry.js +2 -2
- package/dist/experiments/types.d.ts +5 -1
- package/dist/fetchers/cdnFetcher.d.ts +1 -1
- package/dist/fetchers/cdnFetcher.js +4 -8
- package/dist/fetchers/cdnFetcher.js.map +1 -1
- package/dist/fetchers/experimentsFetcher.d.ts +2 -2
- package/dist/fetchers/experimentsFetcher.js +7 -7
- package/dist/fetchers/experimentsFetcher.js.map +1 -1
- package/dist/fetchers/index.d.ts +3 -3
- package/dist/fetchers/index.js +2 -2
- package/dist/fetchers/index.js.map +1 -1
- package/dist/fetchers/registry.d.ts +1 -1
- package/dist/fetchers/registry.js +4 -4
- package/dist/fetchers/types.d.ts +1 -1
- package/dist/hooks/useCanvasOverlays.d.ts +8 -5
- package/dist/hooks/useCanvasOverlays.js +66 -17
- package/dist/hooks/useCanvasOverlays.js.map +1 -1
- package/dist/hooks/useHostPatches.d.ts +2 -2
- package/dist/hooks/useHostPatches.js +8 -8
- package/dist/hooks/useHostPatches.js.map +1 -1
- package/dist/hooks/useShadowCanvasConfig.d.ts +9 -9
- package/dist/hooks/useShadowCanvasConfig.js +24 -8
- package/dist/hooks/useShadowCanvasConfig.js.map +1 -1
- package/dist/hostPatcher/core/patcher.d.ts +1 -1
- package/dist/hostPatcher/core/patcher.js +18 -9
- package/dist/hostPatcher/core/patcher.js.map +1 -1
- package/dist/hostPatcher/core/sanitizer.js +24 -3
- package/dist/hostPatcher/core/sanitizer.js.map +1 -1
- package/dist/hostPatcher/policy/defaultPolicy.js +15 -5
- package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -1
- package/dist/hostPatcher/utils/anchors.js +4 -6
- package/dist/hostPatcher/utils/anchors.js.map +1 -1
- package/dist/index.d.ts +34 -21
- package/dist/index.js +46 -19
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +29 -0
- package/dist/logger.js +81 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics/index.d.ts +1 -1
- package/dist/metrics/index.js +1 -1
- package/dist/metrics/sessionMetrics.d.ts +1 -1
- package/dist/metrics/sessionMetrics.js +6 -6
- package/dist/overlays/fetcher.d.ts +2 -2
- package/dist/overlays/fetcher.js +4 -4
- package/dist/overlays/recipeRegistry.js +2 -2
- package/dist/overlays/recipeRegistry.js.map +1 -1
- package/dist/overlays/runtime/anchor/resolve.js +1 -1
- package/dist/overlays/runtime/anchor/resolve.js.map +1 -1
- package/dist/overlays/runtime/index.d.ts +7 -7
- package/dist/overlays/runtime/index.js +7 -7
- package/dist/overlays/runtime/overlay/highlight.js +39 -39
- package/dist/overlays/runtime/overlay/highlight.js.map +1 -1
- package/dist/overlays/runtime/overlay/modal.js +5 -5
- package/dist/overlays/runtime/overlay/modal.js.map +1 -1
- package/dist/overlays/runtime/overlay/root.js +1 -1
- package/dist/overlays/runtime/overlay/runner.js +70 -23
- package/dist/overlays/runtime/overlay/runner.js.map +1 -1
- package/dist/overlays/runtime/overlay/tooltip.d.ts +1 -1
- package/dist/overlays/runtime/overlay/tooltip.js +10 -10
- package/dist/overlays/runtime/overlay/tooltip.js.map +1 -1
- package/dist/overlays/runtime/utils/dom.js +4 -1
- package/dist/overlays/runtime/utils/dom.js.map +1 -1
- package/dist/overlays/schema.d.ts +98 -98
- package/dist/overlays/schema.js +12 -8
- package/dist/overlays/schema.js.map +1 -1
- package/dist/react.d.ts +7 -7
- package/dist/react.js +4 -4
- package/dist/react.js.map +1 -1
- package/dist/render/RenderContext.d.ts +2 -2
- package/dist/render/RenderContext.js +5 -5
- package/dist/render/RenderContext.js.map +1 -1
- package/dist/render/index.d.ts +3 -3
- package/dist/render/index.js +1 -1
- package/dist/render/types.d.ts +4 -4
- package/dist/runtime.d.ts +110 -0
- package/dist/runtime.js +206 -0
- package/dist/runtime.js.map +1 -0
- package/dist/smart-canvas.esm.js +155 -78
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +44390 -37343
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +156 -78
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/state/StateStore.d.ts +41 -0
- package/dist/state/StateStore.js +170 -0
- package/dist/state/StateStore.js.map +1 -0
- package/dist/state/helpers/cooldowns.d.ts +7 -0
- package/dist/state/helpers/cooldowns.js +31 -0
- package/dist/state/helpers/cooldowns.js.map +1 -0
- package/dist/state/helpers/dismissals.d.ts +7 -0
- package/dist/state/helpers/dismissals.js +34 -0
- package/dist/state/helpers/dismissals.js.map +1 -0
- package/dist/state/helpers/frequency.d.ts +8 -0
- package/dist/state/helpers/frequency.js +43 -0
- package/dist/state/helpers/frequency.js.map +1 -0
- package/dist/state/index.d.ts +7 -0
- package/dist/state/index.js +7 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/schema.d.ts +49 -0
- package/dist/state/schema.js +25 -0
- package/dist/state/schema.js.map +1 -0
- package/dist/state/types.d.ts +137 -0
- package/dist/state/types.js +9 -0
- package/dist/state/types.js.map +1 -0
- package/dist/store/example.d.ts +1 -0
- package/dist/store/example.js +43 -0
- package/dist/store/example.js.map +1 -0
- package/dist/store/mini-effector.d.ts +46 -0
- package/dist/store/mini-effector.js +88 -0
- package/dist/store/mini-effector.js.map +1 -0
- package/dist/surfaces/Surfaces.d.ts +11 -0
- package/dist/surfaces/Surfaces.js +361 -0
- package/dist/surfaces/Surfaces.js.map +1 -0
- package/dist/surfaces/index.d.ts +9 -0
- package/dist/surfaces/index.js +12 -0
- package/dist/surfaces/index.js.map +1 -0
- package/dist/surfaces/positioning.d.ts +50 -0
- package/dist/surfaces/positioning.js +228 -0
- package/dist/surfaces/positioning.js.map +1 -0
- package/dist/surfaces/types.d.ts +167 -0
- package/dist/surfaces/types.js +23 -0
- package/dist/surfaces/types.js.map +1 -0
- package/dist/telemetry/adapters/noop.d.ts +12 -0
- package/dist/telemetry/adapters/noop.js +42 -0
- package/dist/telemetry/adapters/noop.js.map +1 -0
- package/dist/telemetry/adapters/posthog.d.ts +9 -3
- package/dist/telemetry/adapters/posthog.js +36 -14
- package/dist/telemetry/adapters/posthog.js.map +1 -1
- package/dist/telemetry/index.d.ts +4 -3
- package/dist/telemetry/index.js +3 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/registry.d.ts +2 -2
- package/dist/telemetry/registry.js +4 -2
- package/dist/telemetry/registry.js.map +1 -1
- package/dist/telemetry/types.d.ts +1 -1
- package/dist/theme/ThemeProvider.d.ts +2 -2
- package/dist/theme/ThemeProvider.js +21 -21
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/defaultTheme.d.ts +2 -2
- package/dist/theme/defaultTheme.js +111 -111
- package/dist/theme/defaultTheme.js.map +1 -1
- package/dist/theme/extractHostTheme.d.ts +1 -1
- package/dist/theme/extractHostTheme.js +42 -44
- package/dist/theme/extractHostTheme.js.map +1 -1
- package/dist/theme/index.d.ts +5 -5
- package/dist/theme/index.js +3 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/types.d.ts +2 -2
- package/dist/token.d.ts +2 -0
- package/dist/token.js +3 -6
- package/dist/token.js.map +1 -1
- package/dist/types-only.d.ts +32 -0
- package/dist/types-only.js +11 -0
- package/dist/types-only.js.map +1 -0
- package/dist/types.d.ts +95 -54
- package/dist/types.js +15 -2
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts +13 -0
- package/dist/version.js +14 -0
- package/dist/version.js.map +1 -0
- package/dist/widgets/WidgetRegistry.d.ts +139 -0
- package/dist/widgets/WidgetRegistry.js +182 -0
- package/dist/widgets/WidgetRegistry.js.map +1 -0
- package/dist/widgets/index.d.ts +7 -0
- package/dist/widgets/index.js +7 -0
- package/dist/widgets/index.js.map +1 -0
- package/package.json +27 -11
- package/schema/canvas-config.schema.json +666 -227
- package/schema/runtime-context.schema.json +127 -0
package/dist/render/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ReactNode, CSSProperties } from
|
|
2
|
-
import type { TileConfig, TileContent, BlockType, TileAction } from
|
|
1
|
+
import type { ReactNode, CSSProperties } from 'react';
|
|
2
|
+
import type { TileConfig, TileContent, BlockType, TileAction } from '../types';
|
|
3
3
|
/**
|
|
4
4
|
* Data passed to render props
|
|
5
5
|
*/
|
|
@@ -7,7 +7,7 @@ export interface RenderData {
|
|
|
7
7
|
tile: TileConfig;
|
|
8
8
|
content: TileContent;
|
|
9
9
|
isExpanded: boolean;
|
|
10
|
-
surface:
|
|
10
|
+
surface: 'overlay' | 'wheel';
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
13
|
* Default renderer function signature
|
|
@@ -66,7 +66,7 @@ export interface AppearanceConfig {
|
|
|
66
66
|
variables?: Partial<Record<`--sc-${string}`, string>>;
|
|
67
67
|
styles?: StyleOverrides;
|
|
68
68
|
classNames?: ClassNameOverrides;
|
|
69
|
-
baseTheme?:
|
|
69
|
+
baseTheme?: 'light' | 'dark' | 'system';
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
72
72
|
* Action handler for interactive elements
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SmartCanvasRuntime - Unified runtime for v2 adaptives.
|
|
3
|
+
*
|
|
4
|
+
* The runtime provides access to all core providers:
|
|
5
|
+
* - telemetry: Event tracking (PostHog)
|
|
6
|
+
* - context: Page/session/viewport state
|
|
7
|
+
* - events: Normalized event stream
|
|
8
|
+
* - state: Persistent state storage
|
|
9
|
+
* - actions: ActionEngine for interventions
|
|
10
|
+
* - surfaces: Surfaces for UI rendering
|
|
11
|
+
*
|
|
12
|
+
* Note: ExperimentClient (GrowthBook) is NOT part of the runtime.
|
|
13
|
+
* GrowthBook's job is done at page load when it selects which config to deliver.
|
|
14
|
+
* The runtime receives the config and makes decisions using DecisionStrategy.
|
|
15
|
+
*/
|
|
16
|
+
import type { TelemetryClient } from './telemetry/types';
|
|
17
|
+
import { ContextManager } from './context/ContextManager';
|
|
18
|
+
import { EventBus } from './events/EventBus';
|
|
19
|
+
import { StateStore } from './state/StateStore';
|
|
20
|
+
import type { DecisionStrategy, DecisionResult } from './decisions/types';
|
|
21
|
+
import type { SessionMetricTracker } from './metrics/sessionMetrics';
|
|
22
|
+
import type { RoutesConfig, TileConfig } from './types';
|
|
23
|
+
import { type ActionEngine, ExecutorRegistry } from './actions';
|
|
24
|
+
import { type Surfaces } from './surfaces';
|
|
25
|
+
import { WidgetRegistry } from './widgets';
|
|
26
|
+
import { AppRegistry } from './apps';
|
|
27
|
+
/**
|
|
28
|
+
* Runtime version.
|
|
29
|
+
*/
|
|
30
|
+
export declare const RUNTIME_VERSION = "2.0.0";
|
|
31
|
+
/**
|
|
32
|
+
* Runtime mode.
|
|
33
|
+
*/
|
|
34
|
+
export type RuntimeMode = 'production' | 'development' | 'editor' | 'audit';
|
|
35
|
+
/**
|
|
36
|
+
* SmartCanvasRuntime interface.
|
|
37
|
+
*/
|
|
38
|
+
export interface SmartCanvasRuntime {
|
|
39
|
+
/** Telemetry client for event tracking */
|
|
40
|
+
telemetry?: TelemetryClient;
|
|
41
|
+
/** Context manager for page/session/viewport state */
|
|
42
|
+
context: ContextManager;
|
|
43
|
+
/** Event bus for normalized event stream */
|
|
44
|
+
events: EventBus;
|
|
45
|
+
/** State store for persistent state */
|
|
46
|
+
state: StateStore;
|
|
47
|
+
/** Session metric tracker (optional) */
|
|
48
|
+
sessionMetrics?: SessionMetricTracker;
|
|
49
|
+
/** ActionEngine for applying interventions */
|
|
50
|
+
actions: ActionEngine;
|
|
51
|
+
/** Surfaces for rendering UI into named slots */
|
|
52
|
+
surfaces: Surfaces;
|
|
53
|
+
/** Widget registry for mountable components */
|
|
54
|
+
widgets: WidgetRegistry;
|
|
55
|
+
/** Executor registry for action executors */
|
|
56
|
+
executors: ExecutorRegistry;
|
|
57
|
+
/** App registry for SynOS apps */
|
|
58
|
+
apps: AppRegistry;
|
|
59
|
+
/** Runtime version */
|
|
60
|
+
version: string;
|
|
61
|
+
/** Runtime mode */
|
|
62
|
+
mode: RuntimeMode;
|
|
63
|
+
/**
|
|
64
|
+
* Evaluate a decision strategy against the current context.
|
|
65
|
+
*/
|
|
66
|
+
evaluate<T>(strategy: DecisionStrategy<T>): Promise<DecisionResult<T>>;
|
|
67
|
+
/**
|
|
68
|
+
* Synchronously evaluate a decision strategy (for simple strategies).
|
|
69
|
+
*/
|
|
70
|
+
evaluateSync<T>(strategy: DecisionStrategy<T>): DecisionResult<T>;
|
|
71
|
+
/**
|
|
72
|
+
* Filter tiles based on their activation configs.
|
|
73
|
+
*/
|
|
74
|
+
filterTiles(tiles: TileConfig[]): Promise<TileConfig[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Update the routes config (e.g., when config is fetched).
|
|
77
|
+
*/
|
|
78
|
+
setRoutes(routes: RoutesConfig): void;
|
|
79
|
+
/**
|
|
80
|
+
* Clean up runtime resources.
|
|
81
|
+
*/
|
|
82
|
+
destroy(): void;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Options for creating a SmartCanvasRuntime.
|
|
86
|
+
*/
|
|
87
|
+
export interface SmartCanvasRuntimeOptions {
|
|
88
|
+
/** Telemetry client */
|
|
89
|
+
telemetry?: TelemetryClient;
|
|
90
|
+
/** Session metric tracker */
|
|
91
|
+
sessionMetrics?: SessionMetricTracker;
|
|
92
|
+
/** Initial routes config */
|
|
93
|
+
routes?: RoutesConfig;
|
|
94
|
+
/** Runtime mode */
|
|
95
|
+
mode?: RuntimeMode;
|
|
96
|
+
/** State namespace */
|
|
97
|
+
namespace?: string;
|
|
98
|
+
/** External EventBus (if not provided, one will be created) */
|
|
99
|
+
events?: EventBus;
|
|
100
|
+
/** Custom widget registry (if not provided, default singleton is used) */
|
|
101
|
+
widgets?: WidgetRegistry;
|
|
102
|
+
/** Custom executor registry (if not provided, default singleton is used) */
|
|
103
|
+
executors?: ExecutorRegistry;
|
|
104
|
+
/** Custom app registry (if not provided, default singleton is used) */
|
|
105
|
+
apps?: AppRegistry;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a SmartCanvasRuntime instance.
|
|
109
|
+
*/
|
|
110
|
+
export declare function createSmartCanvasRuntime(options?: SmartCanvasRuntimeOptions): SmartCanvasRuntime;
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
import { createContextManager } from './context/ContextManager';
|
|
2
|
+
import { createEventBus } from './events/EventBus';
|
|
3
|
+
import { createStateStore } from './state/StateStore';
|
|
4
|
+
import { createDecisionEngine } from './decisions/engine';
|
|
5
|
+
import { createActionEngine, executorRegistry, } from './actions';
|
|
6
|
+
import { createSurfaces } from './surfaces';
|
|
7
|
+
import { ensureOverlayRoot } from './overlays/runtime/overlay/root';
|
|
8
|
+
import { widgetRegistry as defaultWidgetRegistry } from './widgets';
|
|
9
|
+
import { appRegistry as defaultAppRegistry } from './apps';
|
|
10
|
+
/**
|
|
11
|
+
* Runtime version.
|
|
12
|
+
*/
|
|
13
|
+
export const RUNTIME_VERSION = '2.0.0';
|
|
14
|
+
/**
|
|
15
|
+
* Check if a URL matches a route filter.
|
|
16
|
+
*/
|
|
17
|
+
function matchesRouteFilter(url, filter) {
|
|
18
|
+
if (!filter)
|
|
19
|
+
return true;
|
|
20
|
+
// Extract pathname
|
|
21
|
+
let pathname;
|
|
22
|
+
try {
|
|
23
|
+
pathname = new URL(url).pathname;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
pathname = url;
|
|
27
|
+
}
|
|
28
|
+
// Normalize pathname
|
|
29
|
+
const normalizedPath = pathname.replace(/\/$/, '') || '/';
|
|
30
|
+
// Check exclude patterns first
|
|
31
|
+
if (filter.exclude) {
|
|
32
|
+
for (const pattern of filter.exclude) {
|
|
33
|
+
if (matchRoutePattern(normalizedPath, pattern)) {
|
|
34
|
+
return false; // Explicitly excluded
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// If include list exists, must match at least one
|
|
39
|
+
if (filter.include && filter.include.length > 0) {
|
|
40
|
+
for (const pattern of filter.include) {
|
|
41
|
+
if (matchRoutePattern(normalizedPath, pattern)) {
|
|
42
|
+
return true; // Matches include list
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return false; // Didn't match any include pattern
|
|
46
|
+
}
|
|
47
|
+
// No include list, not excluded = pass
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Match a pathname against a route pattern.
|
|
52
|
+
*/
|
|
53
|
+
function matchRoutePattern(pathname, pattern) {
|
|
54
|
+
const normalizedPattern = pattern.replace(/\/$/, '') || '/';
|
|
55
|
+
// Exact match
|
|
56
|
+
if (pathname === normalizedPattern)
|
|
57
|
+
return true;
|
|
58
|
+
// Convert pattern to regex
|
|
59
|
+
const regexPattern = normalizedPattern
|
|
60
|
+
.replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape regex chars
|
|
61
|
+
.replace(/\*\*/g, '.*') // ** matches anything
|
|
62
|
+
.replace(/\*/g, '[^/]*') // * matches within path segment
|
|
63
|
+
.replace(/:[^/]+/g, '[^/]+'); // :param matches any segment
|
|
64
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
65
|
+
return regex.test(pathname);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolve an anchor ID to an element.
|
|
69
|
+
* Supports CSS selectors, data attributes, and direct IDs.
|
|
70
|
+
*/
|
|
71
|
+
function resolveAnchorById(anchorId, ctx) {
|
|
72
|
+
// First check if it's a data attribute selector
|
|
73
|
+
if (anchorId.startsWith('[data-')) {
|
|
74
|
+
return document.querySelector(anchorId);
|
|
75
|
+
}
|
|
76
|
+
// Check anchors tracked in context
|
|
77
|
+
const runtimeContext = ctx.get();
|
|
78
|
+
if (runtimeContext.anchors) {
|
|
79
|
+
const anchorState = runtimeContext.anchors.find((a) => a.anchorId === anchorId);
|
|
80
|
+
if (anchorState === null || anchorState === void 0 ? void 0 : anchorState.present) {
|
|
81
|
+
// Try to find element by data attribute first
|
|
82
|
+
const el = document.querySelector(`[data-syntro-anchor="${anchorId}"]`);
|
|
83
|
+
if (el)
|
|
84
|
+
return el;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Try as CSS selector (must start with . or # or [)
|
|
88
|
+
if (anchorId.startsWith('.') || anchorId.startsWith('#') || anchorId.startsWith('[')) {
|
|
89
|
+
return document.querySelector(anchorId);
|
|
90
|
+
}
|
|
91
|
+
// Try as ID
|
|
92
|
+
const byId = document.getElementById(anchorId);
|
|
93
|
+
if (byId)
|
|
94
|
+
return byId;
|
|
95
|
+
// Try as data attribute
|
|
96
|
+
return document.querySelector(`[data-syntro-anchor="${anchorId}"]`);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a SmartCanvasRuntime instance.
|
|
100
|
+
*/
|
|
101
|
+
export function createSmartCanvasRuntime(options = {}) {
|
|
102
|
+
var _a, _b, _c, _d;
|
|
103
|
+
const { telemetry, sessionMetrics, routes, mode = 'production', namespace } = options;
|
|
104
|
+
// Use provided registries or defaults
|
|
105
|
+
const widgets = (_a = options.widgets) !== null && _a !== void 0 ? _a : defaultWidgetRegistry;
|
|
106
|
+
const executors = (_b = options.executors) !== null && _b !== void 0 ? _b : executorRegistry;
|
|
107
|
+
const apps = (_c = options.apps) !== null && _c !== void 0 ? _c : defaultAppRegistry;
|
|
108
|
+
// Create core providers
|
|
109
|
+
const context = createContextManager({
|
|
110
|
+
telemetry,
|
|
111
|
+
routes,
|
|
112
|
+
});
|
|
113
|
+
// Use external EventBus if provided, otherwise create one
|
|
114
|
+
const events = (_d = options.events) !== null && _d !== void 0 ? _d : createEventBus();
|
|
115
|
+
const state = createStateStore({
|
|
116
|
+
namespace,
|
|
117
|
+
});
|
|
118
|
+
// Create decision engine with bound options
|
|
119
|
+
const decisionEngine = createDecisionEngine({
|
|
120
|
+
state,
|
|
121
|
+
events,
|
|
122
|
+
sessionMetrics,
|
|
123
|
+
});
|
|
124
|
+
// Create overlay root for Surfaces and ActionEngine
|
|
125
|
+
const overlayRoot = ensureOverlayRoot();
|
|
126
|
+
// Anchor resolver bound to context
|
|
127
|
+
const anchorResolver = (anchorId) => resolveAnchorById(anchorId, context);
|
|
128
|
+
// Create Surfaces provider with widget registry
|
|
129
|
+
const surfaces = createSurfaces({
|
|
130
|
+
overlayRoot,
|
|
131
|
+
eventBus: events,
|
|
132
|
+
anchorResolver,
|
|
133
|
+
widgetRegistry: widgets,
|
|
134
|
+
});
|
|
135
|
+
// Create ActionEngine provider with executor registry
|
|
136
|
+
const actions = createActionEngine({
|
|
137
|
+
overlayRoot,
|
|
138
|
+
eventBus: events,
|
|
139
|
+
surfaces,
|
|
140
|
+
anchorResolver,
|
|
141
|
+
executorRegistry: executors,
|
|
142
|
+
});
|
|
143
|
+
const runtime = {
|
|
144
|
+
telemetry,
|
|
145
|
+
context,
|
|
146
|
+
events,
|
|
147
|
+
state,
|
|
148
|
+
sessionMetrics,
|
|
149
|
+
actions,
|
|
150
|
+
surfaces,
|
|
151
|
+
widgets,
|
|
152
|
+
executors,
|
|
153
|
+
apps,
|
|
154
|
+
version: RUNTIME_VERSION,
|
|
155
|
+
mode,
|
|
156
|
+
async evaluate(strategy) {
|
|
157
|
+
return decisionEngine.evaluate(strategy, context.get());
|
|
158
|
+
},
|
|
159
|
+
evaluateSync(strategy) {
|
|
160
|
+
return decisionEngine.evaluateSync(strategy, context.get());
|
|
161
|
+
},
|
|
162
|
+
async filterTiles(tiles) {
|
|
163
|
+
const currentUrl = context.get().page.url;
|
|
164
|
+
const results = [];
|
|
165
|
+
for (const tile of tiles) {
|
|
166
|
+
const activation = tile.activation;
|
|
167
|
+
// If no activation config, tile always renders
|
|
168
|
+
if (!activation) {
|
|
169
|
+
results.push(tile);
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
// Check route filter first
|
|
173
|
+
if (!matchesRouteFilter(currentUrl, activation.routes)) {
|
|
174
|
+
continue; // Doesn't match route filter
|
|
175
|
+
}
|
|
176
|
+
// If no strategy, tile renders (route filter passed)
|
|
177
|
+
if (!activation.strategy) {
|
|
178
|
+
results.push(tile);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
// Evaluate strategy
|
|
182
|
+
const result = await this.evaluate(activation.strategy);
|
|
183
|
+
if (result.value) {
|
|
184
|
+
results.push(tile);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return results;
|
|
188
|
+
},
|
|
189
|
+
setRoutes(routes) {
|
|
190
|
+
context.setRoutes(routes);
|
|
191
|
+
},
|
|
192
|
+
destroy() {
|
|
193
|
+
// Unbind and clean up apps registry
|
|
194
|
+
apps.unbind().catch((err) => {
|
|
195
|
+
console.error('[Runtime] Error unbinding apps registry:', err);
|
|
196
|
+
});
|
|
197
|
+
context.destroy();
|
|
198
|
+
actions.destroy();
|
|
199
|
+
surfaces.destroy();
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
// Bind apps registry to runtime
|
|
203
|
+
apps.bind(runtime);
|
|
204
|
+
return runtime;
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkB,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,OAAO,EAAY,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAc,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAS1D,OAAO,EACL,kBAAkB,EAGlB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAiB,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAkB,cAAc,IAAI,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACpF,OAAO,EAAe,WAAW,IAAI,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAExE;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAyGvC;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAW,EAAE,MAAoB;IAC3D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,mBAAmB;IACnB,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,qBAAqB;IACrB,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IAE1D,+BAA+B;IAC/B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/C,OAAO,KAAK,CAAC,CAAC,sBAAsB;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,iBAAiB,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC,CAAC,uBAAuB;YACtC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,mCAAmC;IACnD,CAAC;IAED,uCAAuC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IAC1D,MAAM,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;IAE5D,cAAc;IACd,IAAI,QAAQ,KAAK,iBAAiB;QAAE,OAAO,IAAI,CAAC;IAEhD,2BAA2B;IAC3B,MAAM,YAAY,GAAG,iBAAiB;SACnC,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,qBAAqB;SAC1D,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,sBAAsB;SAC7C,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,gCAAgC;SACxD,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,6BAA6B;IAE7D,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAAgB,EAAE,GAAmB;IAC9D,gDAAgD;IAChD,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAuB,CAAC;IAChE,CAAC;IAED,mCAAmC;IACnC,MAAM,cAAc,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACjC,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAChF,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE,CAAC;YACzB,8CAA8C;YAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,QAAQ,IAAI,CAAuB,CAAC;YAC9F,IAAI,EAAE;gBAAE,OAAO,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAuB,CAAC;IAChE,CAAC;IAED,YAAY;IACZ,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC/C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAEtB,wBAAwB;IACxB,OAAO,QAAQ,CAAC,aAAa,CAAC,wBAAwB,QAAQ,IAAI,CAAuB,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CACtC,UAAqC,EAAE;;IAEvC,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,GAAG,YAAY,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAEtF,sCAAsC;IACtC,MAAM,OAAO,GAAG,MAAA,OAAO,CAAC,OAAO,mCAAI,qBAAqB,CAAC;IACzD,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,SAAS,mCAAI,gBAAgB,CAAC;IACxD,MAAM,IAAI,GAAG,MAAA,OAAO,CAAC,IAAI,mCAAI,kBAAkB,CAAC;IAEhD,wBAAwB;IACxB,MAAM,OAAO,GAAG,oBAAoB,CAAC;QACnC,SAAS;QACT,MAAM;KACP,CAAC,CAAC;IAEH,0DAA0D;IAC1D,MAAM,MAAM,GAAG,MAAA,OAAO,CAAC,MAAM,mCAAI,cAAc,EAAE,CAAC;IAElD,MAAM,KAAK,GAAG,gBAAgB,CAAC;QAC7B,SAAS;KACV,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,cAAc,GAAG,oBAAoB,CAAC;QAC1C,KAAK;QACL,MAAM;QACN,cAAc;KACf,CAAC,CAAC;IAEH,oDAAoD;IACpD,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;IAExC,mCAAmC;IACnC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAElF,gDAAgD;IAChD,MAAM,QAAQ,GAAG,cAAc,CAAC;QAC9B,WAAW;QACX,QAAQ,EAAE,MAAM;QAChB,cAAc;QACd,cAAc,EAAE,OAAO;KACxB,CAAC,CAAC;IAEH,sDAAsD;IACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC;QACjC,WAAW;QACX,QAAQ,EAAE,MAAM;QAChB,QAAQ;QACR,cAAc;QACd,gBAAgB,EAAE,SAAS;KAC5B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAuB;QAClC,SAAS;QACT,OAAO;QACP,MAAM;QACN,KAAK;QACL,cAAc;QACd,OAAO;QACP,QAAQ;QACR,OAAO;QACP,SAAS;QACT,IAAI;QACJ,OAAO,EAAE,eAAe;QACxB,IAAI;QAEJ,KAAK,CAAC,QAAQ,CAAI,QAA6B;YAC7C,OAAO,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,YAAY,CAAI,QAA6B;YAC3C,OAAO,cAAc,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,KAAmB;YACnC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,MAAM,OAAO,GAAiB,EAAE,CAAC;YAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,UAAU,GAAI,IAAY,CAAC,UAA0C,CAAC;gBAE5E,+CAA+C;gBAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBACvD,SAAS,CAAC,6BAA6B;gBACzC,CAAC;gBAED,qDAAqD;gBACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;oBACzB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,SAAS;gBACX,CAAC;gBAED,oBAAoB;gBACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAU,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACjE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,SAAS,CAAC,MAAoB;YAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO;YACL,oCAAoC;YACpC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC1B,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;KACF,CAAC;IAEF,gCAAgC;IAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEnB,OAAO,OAAO,CAAC;AACjB,CAAC"}
|