@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
|
@@ -1,232 +0,0 @@
|
|
|
1
|
-
import { computePosition, autoUpdate, offset, flip, shift, hide, arrow as arrowMiddleware, } from '@floating-ui/dom';
|
|
2
|
-
import { sanitizeWithFallback } from '../../../hostPatcher/core/sanitizer';
|
|
3
|
-
/**
|
|
4
|
-
* For large elements (larger than viewport), create a virtual anchor
|
|
5
|
-
* at the center of the visible portion. This prevents tooltips from
|
|
6
|
-
* appearing at the edge of massive elements.
|
|
7
|
-
*/
|
|
8
|
-
function getAnchorReference(anchorEl) {
|
|
9
|
-
const rect = anchorEl.getBoundingClientRect();
|
|
10
|
-
const viewportWidth = window.innerWidth;
|
|
11
|
-
const viewportHeight = window.innerHeight;
|
|
12
|
-
// Check if element is larger than 80% of viewport in either dimension
|
|
13
|
-
const isLargeElement = rect.width > viewportWidth * 0.8 || rect.height > viewportHeight * 0.8;
|
|
14
|
-
if (!isLargeElement) {
|
|
15
|
-
return anchorEl;
|
|
16
|
-
}
|
|
17
|
-
// For large elements, create a virtual anchor at center of visible portion
|
|
18
|
-
const visibleLeft = Math.max(rect.left, 0);
|
|
19
|
-
const visibleTop = Math.max(rect.top, 0);
|
|
20
|
-
const visibleRight = Math.min(rect.right, viewportWidth);
|
|
21
|
-
const visibleBottom = Math.min(rect.bottom, viewportHeight);
|
|
22
|
-
const centerX = (visibleLeft + visibleRight) / 2;
|
|
23
|
-
const centerY = (visibleTop + visibleBottom) / 2;
|
|
24
|
-
console.log(`[SmartCanvas] Large element detected (${Math.round(rect.width)}x${Math.round(rect.height)}), using virtual anchor at center (${Math.round(centerX)}, ${Math.round(centerY)})`);
|
|
25
|
-
// Return a virtual element that Floating UI can use
|
|
26
|
-
return {
|
|
27
|
-
getBoundingClientRect() {
|
|
28
|
-
return {
|
|
29
|
-
width: 0,
|
|
30
|
-
height: 0,
|
|
31
|
-
x: centerX,
|
|
32
|
-
y: centerY,
|
|
33
|
-
top: centerY,
|
|
34
|
-
left: centerX,
|
|
35
|
-
right: centerX,
|
|
36
|
-
bottom: centerY,
|
|
37
|
-
};
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
export function showTooltip(anchorEl, overlayRoot, opts) {
|
|
42
|
-
var _a;
|
|
43
|
-
// Scroll the anchor element into view (like driver.js does)
|
|
44
|
-
// Only scroll if element is not already mostly visible
|
|
45
|
-
const rect = anchorEl.getBoundingClientRect();
|
|
46
|
-
const isLargeElement = rect.width > window.innerWidth * 0.8 || rect.height > window.innerHeight * 0.8;
|
|
47
|
-
if (!isLargeElement) {
|
|
48
|
-
anchorEl.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
|
|
49
|
-
}
|
|
50
|
-
const div = document.createElement('div');
|
|
51
|
-
div.className = 'syntro-tooltip';
|
|
52
|
-
div.setAttribute('role', 'tooltip');
|
|
53
|
-
// Sanitize HTML to prevent XSS
|
|
54
|
-
div.innerHTML = sanitizeWithFallback(opts.html);
|
|
55
|
-
// Handle action button clicks
|
|
56
|
-
const actionBtns = div.querySelectorAll('[data-syntro-action]');
|
|
57
|
-
const actionHandler = (e) => {
|
|
58
|
-
const btn = e.currentTarget;
|
|
59
|
-
const actionId = btn.getAttribute('data-syntro-action');
|
|
60
|
-
if (actionId && opts.onAction) {
|
|
61
|
-
opts.onAction(actionId);
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
actionBtns.forEach((btn) => btn.addEventListener('click', actionHandler));
|
|
65
|
-
// Create arrow element
|
|
66
|
-
const arrowEl = document.createElement('div');
|
|
67
|
-
arrowEl.className = 'syntro-tooltip-arrow';
|
|
68
|
-
div.appendChild(arrowEl);
|
|
69
|
-
overlayRoot.appendChild(div);
|
|
70
|
-
const middleware = [
|
|
71
|
-
offset((_a = opts.offsetPx) !== null && _a !== void 0 ? _a : 8),
|
|
72
|
-
flip(),
|
|
73
|
-
shift({ padding: 8 }),
|
|
74
|
-
hide(),
|
|
75
|
-
arrowMiddleware({ element: arrowEl }),
|
|
76
|
-
];
|
|
77
|
-
const placement = opts.placement && opts.placement !== 'auto' ? opts.placement : 'top';
|
|
78
|
-
// Get anchor reference (may be virtual for large elements)
|
|
79
|
-
const _anchorRef = getAnchorReference(anchorEl);
|
|
80
|
-
const cleanup = autoUpdate(anchorEl, div, async () => {
|
|
81
|
-
// Re-compute anchor reference on each update (element size may change)
|
|
82
|
-
const currentAnchorRef = getAnchorReference(anchorEl);
|
|
83
|
-
const result = await computePosition(currentAnchorRef, div, {
|
|
84
|
-
placement,
|
|
85
|
-
middleware,
|
|
86
|
-
});
|
|
87
|
-
const { x, y, strategy, middlewareData, placement: finalPlacement } = result;
|
|
88
|
-
Object.assign(div.style, {
|
|
89
|
-
left: `${x}px`,
|
|
90
|
-
top: `${y}px`,
|
|
91
|
-
position: strategy,
|
|
92
|
-
});
|
|
93
|
-
// Position arrow
|
|
94
|
-
if (middlewareData.arrow) {
|
|
95
|
-
const { x: arrowX, y: arrowY } = middlewareData.arrow;
|
|
96
|
-
const side = finalPlacement.split('-')[0];
|
|
97
|
-
const staticSide = {
|
|
98
|
-
top: 'bottom',
|
|
99
|
-
right: 'left',
|
|
100
|
-
bottom: 'top',
|
|
101
|
-
left: 'right',
|
|
102
|
-
}[side];
|
|
103
|
-
Object.assign(arrowEl.style, {
|
|
104
|
-
left: arrowX != null ? `${arrowX}px` : '',
|
|
105
|
-
top: arrowY != null ? `${arrowY}px` : '',
|
|
106
|
-
right: '',
|
|
107
|
-
bottom: '',
|
|
108
|
-
[staticSide]: '-4px',
|
|
109
|
-
});
|
|
110
|
-
// Set arrow rotation based on placement
|
|
111
|
-
const rotation = {
|
|
112
|
-
top: '0deg',
|
|
113
|
-
right: '90deg',
|
|
114
|
-
bottom: '180deg',
|
|
115
|
-
left: '270deg',
|
|
116
|
-
}[side] || '0deg';
|
|
117
|
-
arrowEl.style.transform = `rotate(${rotation})`;
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
const onKey = (e) => {
|
|
121
|
-
if (e.key === 'Escape')
|
|
122
|
-
handle.destroy();
|
|
123
|
-
};
|
|
124
|
-
window.addEventListener('keydown', onKey);
|
|
125
|
-
// Handle blocking mode (focus trap + inert)
|
|
126
|
-
const originalInert = [];
|
|
127
|
-
let focusableEls = [];
|
|
128
|
-
if (opts.blocking) {
|
|
129
|
-
// Make all siblings inert
|
|
130
|
-
Array.from(document.body.children).forEach((el) => {
|
|
131
|
-
if (el !== overlayRoot && el.getAttribute('inert') === null) {
|
|
132
|
-
el.setAttribute('inert', '');
|
|
133
|
-
originalInert.push(el.id || el.tagName);
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
// Setup focus trap
|
|
137
|
-
focusableEls = Array.from(div.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'));
|
|
138
|
-
if (focusableEls.length > 0) {
|
|
139
|
-
const firstFocusable = focusableEls[0];
|
|
140
|
-
const lastFocusable = focusableEls[focusableEls.length - 1];
|
|
141
|
-
const trapFocus = (e) => {
|
|
142
|
-
if (e.key !== 'Tab')
|
|
143
|
-
return;
|
|
144
|
-
if (e.shiftKey) {
|
|
145
|
-
if (document.activeElement === firstFocusable) {
|
|
146
|
-
lastFocusable.focus();
|
|
147
|
-
e.preventDefault();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
else if (document.activeElement === lastFocusable) {
|
|
151
|
-
firstFocusable.focus();
|
|
152
|
-
e.preventDefault();
|
|
153
|
-
}
|
|
154
|
-
};
|
|
155
|
-
div.addEventListener('keydown', trapFocus);
|
|
156
|
-
requestAnimationFrame(() => firstFocusable.focus());
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
const attachTrigger = () => {
|
|
160
|
-
if (opts.trigger === 'hover') {
|
|
161
|
-
const enter = () => {
|
|
162
|
-
div.style.visibility = 'visible';
|
|
163
|
-
div.style.opacity = '1';
|
|
164
|
-
};
|
|
165
|
-
const leave = () => {
|
|
166
|
-
div.style.visibility = 'hidden';
|
|
167
|
-
div.style.opacity = '0';
|
|
168
|
-
};
|
|
169
|
-
// Start hidden for hover
|
|
170
|
-
div.style.visibility = 'hidden';
|
|
171
|
-
div.style.opacity = '0';
|
|
172
|
-
div.style.transition = 'opacity 200ms ease, visibility 200ms';
|
|
173
|
-
anchorEl.addEventListener('mouseenter', enter);
|
|
174
|
-
anchorEl.addEventListener('mouseleave', leave);
|
|
175
|
-
anchorEl.addEventListener('focus', enter);
|
|
176
|
-
anchorEl.addEventListener('blur', leave);
|
|
177
|
-
return () => {
|
|
178
|
-
anchorEl.removeEventListener('mouseenter', enter);
|
|
179
|
-
anchorEl.removeEventListener('mouseleave', leave);
|
|
180
|
-
anchorEl.removeEventListener('focus', enter);
|
|
181
|
-
anchorEl.removeEventListener('blur', leave);
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
if (opts.trigger === 'click') {
|
|
185
|
-
const toggle = () => {
|
|
186
|
-
const isVisible = div.style.visibility === 'visible';
|
|
187
|
-
if (isVisible) {
|
|
188
|
-
handle.destroy();
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
div.style.visibility = 'visible';
|
|
192
|
-
div.style.opacity = '1';
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
div.style.visibility = 'hidden';
|
|
196
|
-
div.style.opacity = '0';
|
|
197
|
-
div.style.transition = 'opacity 200ms ease, visibility 200ms';
|
|
198
|
-
anchorEl.addEventListener('click', toggle);
|
|
199
|
-
return () => anchorEl.removeEventListener('click', toggle);
|
|
200
|
-
}
|
|
201
|
-
// Immediate - fade in on mount
|
|
202
|
-
div.style.opacity = '0';
|
|
203
|
-
div.style.transition = 'opacity 200ms ease';
|
|
204
|
-
requestAnimationFrame(() => {
|
|
205
|
-
div.style.opacity = '1';
|
|
206
|
-
});
|
|
207
|
-
return () => { };
|
|
208
|
-
};
|
|
209
|
-
const removeTrigger = attachTrigger();
|
|
210
|
-
const handle = {
|
|
211
|
-
el: div,
|
|
212
|
-
destroy() {
|
|
213
|
-
cleanup();
|
|
214
|
-
removeTrigger();
|
|
215
|
-
window.removeEventListener('keydown', onKey);
|
|
216
|
-
actionBtns.forEach((btn) => btn.removeEventListener('click', actionHandler));
|
|
217
|
-
// Restore inert state
|
|
218
|
-
if (opts.blocking) {
|
|
219
|
-
Array.from(document.body.children).forEach((el) => {
|
|
220
|
-
if (el !== overlayRoot) {
|
|
221
|
-
el.removeAttribute('inert');
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
// Fade out then remove
|
|
226
|
-
div.style.opacity = '0';
|
|
227
|
-
setTimeout(() => div.remove(), 200);
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
return handle;
|
|
231
|
-
}
|
|
232
|
-
//# sourceMappingURL=tooltip.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/overlay/tooltip.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export function isVisible(el) {
|
|
2
|
-
const rect = el.getBoundingClientRect();
|
|
3
|
-
return (rect.width > 0 &&
|
|
4
|
-
rect.height > 0 &&
|
|
5
|
-
rect.bottom >= 0 &&
|
|
6
|
-
rect.top <= (window.innerHeight || document.documentElement.clientHeight));
|
|
7
|
-
}
|
|
8
|
-
export function scrollIntoViewIfNeeded(el) {
|
|
9
|
-
if (!isVisible(el))
|
|
10
|
-
el.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'center' });
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=dom.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/utils/dom.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAC,EAAe;IACvC,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;IACxC,OAAO,CACL,IAAI,CAAC,KAAK,GAAG,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,IAAI,CAAC;QAChB,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,EAAe;IACpD,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAAE,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnG,CAAC"}
|
package/dist/overlays/schema.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export const SelectorZ = z.union([
|
|
3
|
-
z.object({ type: z.literal('data'), key: z.string(), value: z.string().optional() }),
|
|
4
|
-
z.object({ type: z.literal('css'), value: z.string() }),
|
|
5
|
-
z.object({ type: z.literal('aria'), role: z.string().optional(), label: z.string().optional() }),
|
|
6
|
-
z.object({ type: z.literal('shadow-css'), value: z.string() }),
|
|
7
|
-
z.object({ type: z.literal('ref'), el: z.any() }), // runtime-only
|
|
8
|
-
]);
|
|
9
|
-
export const TooltipStepZ = z.object({
|
|
10
|
-
kind: z.literal('tooltip'),
|
|
11
|
-
id: z.string(),
|
|
12
|
-
anchor: SelectorZ,
|
|
13
|
-
content: z.object({ title: z.string().optional(), body: z.string() }),
|
|
14
|
-
placement: z.enum(['top', 'bottom', 'left', 'right', 'auto']).optional(),
|
|
15
|
-
offsetPx: z.number().optional(),
|
|
16
|
-
blocking: z.boolean().optional(),
|
|
17
|
-
trigger: z.enum(['immediate', 'hover', 'click']).optional(),
|
|
18
|
-
dismiss: z
|
|
19
|
-
.object({
|
|
20
|
-
onEsc: z.boolean().optional(),
|
|
21
|
-
closeButton: z.boolean().optional(),
|
|
22
|
-
timeoutMs: z.number().optional(),
|
|
23
|
-
})
|
|
24
|
-
.optional(),
|
|
25
|
-
});
|
|
26
|
-
export const HighlightStepZ = z.object({
|
|
27
|
-
kind: z.literal('highlight'),
|
|
28
|
-
id: z.string(),
|
|
29
|
-
anchor: SelectorZ,
|
|
30
|
-
copy: z.string().optional(),
|
|
31
|
-
ring: z.object({ paddingPx: z.number().optional(), radiusPx: z.number().optional() }).optional(),
|
|
32
|
-
scrim: z.object({ opacity: z.number().optional() }).optional(),
|
|
33
|
-
ringColor: z.string().optional(),
|
|
34
|
-
blocking: z.boolean().optional(),
|
|
35
|
-
dismiss: z
|
|
36
|
-
.object({
|
|
37
|
-
onClickOutside: z.boolean().optional(),
|
|
38
|
-
onEsc: z.boolean().optional(),
|
|
39
|
-
timeoutMs: z.number().optional(),
|
|
40
|
-
})
|
|
41
|
-
.optional(),
|
|
42
|
-
});
|
|
43
|
-
export const CanvasRecipeZ = z.object({
|
|
44
|
-
id: z.string(),
|
|
45
|
-
version: z.number(),
|
|
46
|
-
routes: z.array(z.string()).optional(),
|
|
47
|
-
steps: z.array(z.union([TooltipStepZ, HighlightStepZ])),
|
|
48
|
-
});
|
|
49
|
-
export function validateRecipe(json) {
|
|
50
|
-
return CanvasRecipeZ.parse(json);
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/overlays/schema.ts"],"names":[],"mappings":"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"}
|
package/dist/overlays/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/overlays/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { createContext, useContext, useMemo } from 'react';
|
|
3
|
-
const RenderContext = createContext(null);
|
|
4
|
-
/**
|
|
5
|
-
* Provider for render props and appearance configuration
|
|
6
|
-
*/
|
|
7
|
-
export function RenderProvider({ children, renderProps = {}, appearance = {}, actionHandlers = {}, }) {
|
|
8
|
-
const value = useMemo(() => ({
|
|
9
|
-
renderProps,
|
|
10
|
-
appearance,
|
|
11
|
-
actionHandlers,
|
|
12
|
-
invoke: (propName, data, defaultRenderer) => {
|
|
13
|
-
var _a;
|
|
14
|
-
const renderProp = renderProps[propName];
|
|
15
|
-
// Check for type-specific override first
|
|
16
|
-
if (propName === 'renderContent' && renderProps.renderByType) {
|
|
17
|
-
const widgetId = (_a = data.tile) === null || _a === void 0 ? void 0 : _a.widget;
|
|
18
|
-
// Extract the widget type suffix (e.g., "faq:panel" -> "panel")
|
|
19
|
-
const widgetType = (widgetId === null || widgetId === void 0 ? void 0 : widgetId.includes(':')) ? widgetId.split(':')[1] : widgetId;
|
|
20
|
-
if (widgetType && renderProps.renderByType[widgetType]) {
|
|
21
|
-
return renderProps.renderByType[widgetType](data, defaultRenderer);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
// Use custom render prop if provided
|
|
25
|
-
if (typeof renderProp === 'function') {
|
|
26
|
-
return renderProp(data, defaultRenderer);
|
|
27
|
-
}
|
|
28
|
-
// Fall back to default renderer
|
|
29
|
-
return defaultRenderer(data);
|
|
30
|
-
},
|
|
31
|
-
}), [renderProps, appearance, actionHandlers]);
|
|
32
|
-
return _jsx(RenderContext.Provider, { value: value, children: children });
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Hook to access render context
|
|
36
|
-
*/
|
|
37
|
-
export function useRenderContext() {
|
|
38
|
-
const context = useContext(RenderContext);
|
|
39
|
-
if (!context) {
|
|
40
|
-
throw new Error('useRenderContext must be used within a RenderProvider');
|
|
41
|
-
}
|
|
42
|
-
return context;
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Hook to get render props
|
|
46
|
-
*/
|
|
47
|
-
export function useRenderProps() {
|
|
48
|
-
return useRenderContext().renderProps;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Hook to get appearance config
|
|
52
|
-
*/
|
|
53
|
-
export function useAppearance() {
|
|
54
|
-
return useRenderContext().appearance;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Hook to get action handlers
|
|
58
|
-
*/
|
|
59
|
-
export function useActionHandlers() {
|
|
60
|
-
return useRenderContext().actionHandlers;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Hook to invoke a render prop
|
|
64
|
-
*/
|
|
65
|
-
export function useRender(propName, data, defaultRenderer) {
|
|
66
|
-
const { invoke } = useRenderContext();
|
|
67
|
-
return invoke(propName, data, defaultRenderer);
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=RenderContext.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RenderContext.js","sourceRoot":"","sources":["../../src/render/RenderContext.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAa,OAAO,EAAE,MAAM,OAAO,CAAC;AAwBtE,MAAM,aAAa,GAAG,aAAa,CAA4B,IAAI,CAAC,CAAC;AASrE;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAC7B,QAAQ,EACR,WAAW,GAAG,EAAE,EAChB,UAAU,GAAG,EAAE,EACf,cAAc,GAAG,EAAE,GACC;IACpB,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC;QACL,WAAW;QACX,UAAU;QACV,cAAc;QACd,MAAM,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE;;YAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAEzC,yCAAyC;YACzC,IAAI,QAAQ,KAAK,eAAe,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;gBAC7D,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAC;gBACnC,gEAAgE;gBAChE,MAAM,UAAU,GAAG,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,CAAC,GAAG,CAAC,EAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC/E,IAAI,UAAU,IAAI,WAAW,CAAC,YAAY,CAAC,UAAuB,CAAC,EAAE,CAAC;oBACpE,OAAO,WAAW,CAAC,YAAY,CAAC,UAAuB,CAAE,CACvD,IAAI,EACJ,eAAkC,CAC5B,CAAC;gBACX,CAAC;YACH,CAAC;YAED,qCAAqC;YACrC,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;gBACrC,OAAO,UAAU,CAAC,IAAI,EAAE,eAAkC,CAAQ,CAAC;YACrE,CAAC;YAED,gCAAgC;YAChC,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC,EACF,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,CAAC,CAC1C,CAAC;IAEF,OAAO,KAAC,aAAa,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAAG,QAAQ,GAA0B,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,gBAAgB,EAAE,CAAC,WAAW,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,gBAAgB,EAAE,CAAC,UAAU,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,gBAAgB,EAAE,CAAC,cAAc,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,QAA2B,EAC3B,IAAgB,EAChB,eAAmC;IAEnC,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtC,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;AACjD,CAAC"}
|
package/dist/render/index.js
DELETED
package/dist/render/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAYA,oBAAoB;AACpB,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,SAAS,GACV,MAAM,iBAAiB,CAAC"}
|
package/dist/render/types.js
DELETED
package/dist/render/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/render/types.ts"],"names":[],"mappings":""}
|
package/dist/runtime.js
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
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 { createActionEngine, executorRegistry, } from './actions';
|
|
17
|
-
import { appRegistry as defaultAppRegistry } from './apps';
|
|
18
|
-
import { createContextManager } from './context/ContextManager';
|
|
19
|
-
import { createDecisionEngine } from './decisions/engine';
|
|
20
|
-
import { createEventAccumulator } from './events/EventAccumulator';
|
|
21
|
-
import { createEventBus } from './events/EventBus';
|
|
22
|
-
import { ensureOverlayRoot } from './overlays/runtime/overlay/root';
|
|
23
|
-
import { createStateStore } from './state/StateStore';
|
|
24
|
-
import { createSurfaces } from './surfaces';
|
|
25
|
-
import { widgetRegistry as defaultWidgetRegistry } from './widgets';
|
|
26
|
-
/**
|
|
27
|
-
* Runtime version.
|
|
28
|
-
*/
|
|
29
|
-
export const RUNTIME_VERSION = '2.0.0';
|
|
30
|
-
/**
|
|
31
|
-
* Check if a URL matches a route filter.
|
|
32
|
-
*/
|
|
33
|
-
function matchesRouteFilter(url, filter) {
|
|
34
|
-
if (!filter)
|
|
35
|
-
return true;
|
|
36
|
-
// Extract pathname
|
|
37
|
-
let pathname;
|
|
38
|
-
try {
|
|
39
|
-
pathname = new URL(url).pathname;
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
pathname = url;
|
|
43
|
-
}
|
|
44
|
-
// Normalize pathname
|
|
45
|
-
const normalizedPath = pathname.replace(/\/$/, '') || '/';
|
|
46
|
-
// Check exclude patterns first
|
|
47
|
-
if (filter.exclude) {
|
|
48
|
-
for (const pattern of filter.exclude) {
|
|
49
|
-
if (matchRoutePattern(normalizedPath, pattern)) {
|
|
50
|
-
return false; // Explicitly excluded
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
// If include list exists, must match at least one
|
|
55
|
-
if (filter.include && filter.include.length > 0) {
|
|
56
|
-
for (const pattern of filter.include) {
|
|
57
|
-
if (matchRoutePattern(normalizedPath, pattern)) {
|
|
58
|
-
return true; // Matches include list
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
return false; // Didn't match any include pattern
|
|
62
|
-
}
|
|
63
|
-
// No include list, not excluded = pass
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Match a pathname against a route pattern.
|
|
68
|
-
*/
|
|
69
|
-
function matchRoutePattern(pathname, pattern) {
|
|
70
|
-
const normalizedPattern = pattern.replace(/\/$/, '') || '/';
|
|
71
|
-
// Exact match
|
|
72
|
-
if (pathname === normalizedPattern)
|
|
73
|
-
return true;
|
|
74
|
-
// Convert pattern to regex
|
|
75
|
-
const regexPattern = normalizedPattern
|
|
76
|
-
.replace(/[.+^${}()|[\]\\]/g, '\\$&') // Escape regex chars
|
|
77
|
-
.replace(/\*\*/g, '.*') // ** matches anything
|
|
78
|
-
.replace(/\*/g, '[^/]*') // * matches within path segment
|
|
79
|
-
.replace(/:[^/]+/g, '[^/]+'); // :param matches any segment
|
|
80
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
81
|
-
return regex.test(pathname);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Resolve an anchor ID to an element.
|
|
85
|
-
*
|
|
86
|
-
* Resolution order:
|
|
87
|
-
* 1. Syntro-tracked anchors (context.anchors with data-syntro-anchor attribute)
|
|
88
|
-
* 2. Native CSS selector via querySelector (handles tags, classes, IDs,
|
|
89
|
-
* attributes, combinators, pseudo-selectors — anything the browser supports)
|
|
90
|
-
* 3. Shorthand ID lookup via getElementById (bare strings like "main-content")
|
|
91
|
-
* 4. data-syntro-anchor attribute fallback (bare strings used as anchor names)
|
|
92
|
-
*/
|
|
93
|
-
function resolveAnchorById(anchorId, ctx) {
|
|
94
|
-
// 1. Check anchors tracked in runtime context
|
|
95
|
-
const runtimeContext = ctx.get();
|
|
96
|
-
if (runtimeContext.anchors) {
|
|
97
|
-
const anchorState = runtimeContext.anchors.find((a) => a.anchorId === anchorId);
|
|
98
|
-
if (anchorState === null || anchorState === void 0 ? void 0 : anchorState.present) {
|
|
99
|
-
const el = document.querySelector(`[data-syntro-anchor="${anchorId}"]`);
|
|
100
|
-
if (el)
|
|
101
|
-
return el;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// 2. Try as CSS selector (let the browser handle all valid CSS)
|
|
105
|
-
try {
|
|
106
|
-
const el = document.querySelector(anchorId);
|
|
107
|
-
if (el)
|
|
108
|
-
return el;
|
|
109
|
-
}
|
|
110
|
-
catch {
|
|
111
|
-
// Invalid CSS selector — fall through to shorthand lookups
|
|
112
|
-
}
|
|
113
|
-
// 3. Try as element ID (bare string like "hero-section")
|
|
114
|
-
const byId = document.getElementById(anchorId);
|
|
115
|
-
if (byId)
|
|
116
|
-
return byId;
|
|
117
|
-
// 4. Try as data-syntro-anchor attribute value
|
|
118
|
-
return document.querySelector(`[data-syntro-anchor="${anchorId}"]`);
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Create a SmartCanvasRuntime instance.
|
|
122
|
-
*/
|
|
123
|
-
export function createSmartCanvasRuntime(options = {}) {
|
|
124
|
-
var _a, _b, _c, _d;
|
|
125
|
-
const { telemetry, sessionMetrics, routes, mode = 'production', namespace } = options;
|
|
126
|
-
// Use provided registries or defaults
|
|
127
|
-
const widgets = (_a = options.widgets) !== null && _a !== void 0 ? _a : defaultWidgetRegistry;
|
|
128
|
-
const executors = (_b = options.executors) !== null && _b !== void 0 ? _b : executorRegistry;
|
|
129
|
-
const apps = (_c = options.apps) !== null && _c !== void 0 ? _c : defaultAppRegistry;
|
|
130
|
-
// Create core providers
|
|
131
|
-
const context = createContextManager({
|
|
132
|
-
telemetry,
|
|
133
|
-
routes,
|
|
134
|
-
});
|
|
135
|
-
// Use external EventBus if provided, otherwise create one
|
|
136
|
-
const events = (_d = options.events) !== null && _d !== void 0 ? _d : createEventBus();
|
|
137
|
-
const state = createStateStore({
|
|
138
|
-
namespace,
|
|
139
|
-
});
|
|
140
|
-
// Create event accumulator for event_count conditions
|
|
141
|
-
const accumulator = createEventAccumulator({
|
|
142
|
-
eventBus: events,
|
|
143
|
-
stateStore: state,
|
|
144
|
-
});
|
|
145
|
-
// Create decision engine with bound options
|
|
146
|
-
const decisionEngine = createDecisionEngine({
|
|
147
|
-
state,
|
|
148
|
-
events,
|
|
149
|
-
sessionMetrics,
|
|
150
|
-
accumulator,
|
|
151
|
-
});
|
|
152
|
-
// Create overlay root for Surfaces and ActionEngine
|
|
153
|
-
const overlayRoot = ensureOverlayRoot();
|
|
154
|
-
// Anchor resolver bound to context
|
|
155
|
-
const anchorResolver = (anchorId) => resolveAnchorById(anchorId, context);
|
|
156
|
-
// Create Surfaces provider with widget registry
|
|
157
|
-
const surfaces = createSurfaces({
|
|
158
|
-
overlayRoot,
|
|
159
|
-
eventBus: events,
|
|
160
|
-
anchorResolver,
|
|
161
|
-
widgetRegistry: widgets,
|
|
162
|
-
});
|
|
163
|
-
// Create ActionEngine provider with executor registry
|
|
164
|
-
const actions = createActionEngine({
|
|
165
|
-
overlayRoot,
|
|
166
|
-
eventBus: events,
|
|
167
|
-
surfaces,
|
|
168
|
-
anchorResolver,
|
|
169
|
-
executorRegistry: executors,
|
|
170
|
-
});
|
|
171
|
-
const runtime = {
|
|
172
|
-
telemetry,
|
|
173
|
-
context,
|
|
174
|
-
events,
|
|
175
|
-
state,
|
|
176
|
-
sessionMetrics,
|
|
177
|
-
actions,
|
|
178
|
-
surfaces,
|
|
179
|
-
widgets,
|
|
180
|
-
executors,
|
|
181
|
-
apps,
|
|
182
|
-
accumulator,
|
|
183
|
-
version: RUNTIME_VERSION,
|
|
184
|
-
mode,
|
|
185
|
-
async evaluate(strategy) {
|
|
186
|
-
return decisionEngine.evaluate(strategy, context.get());
|
|
187
|
-
},
|
|
188
|
-
evaluateSync(strategy) {
|
|
189
|
-
return decisionEngine.evaluateSync(strategy, context.get());
|
|
190
|
-
},
|
|
191
|
-
async filterTiles(tiles) {
|
|
192
|
-
const currentUrl = context.get().page.url;
|
|
193
|
-
const results = [];
|
|
194
|
-
for (const tile of tiles) {
|
|
195
|
-
const activation = tile.activation;
|
|
196
|
-
// If no activation config, tile always renders
|
|
197
|
-
if (!activation) {
|
|
198
|
-
results.push(tile);
|
|
199
|
-
continue;
|
|
200
|
-
}
|
|
201
|
-
// Check route filter first
|
|
202
|
-
if (!matchesRouteFilter(currentUrl, activation.routes)) {
|
|
203
|
-
continue; // Doesn't match route filter
|
|
204
|
-
}
|
|
205
|
-
// If no strategy, tile renders (route filter passed)
|
|
206
|
-
if (!activation.strategy) {
|
|
207
|
-
results.push(tile);
|
|
208
|
-
continue;
|
|
209
|
-
}
|
|
210
|
-
// Evaluate strategy
|
|
211
|
-
const result = await this.evaluate(activation.strategy);
|
|
212
|
-
if (result.value) {
|
|
213
|
-
results.push(tile);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return results;
|
|
217
|
-
},
|
|
218
|
-
setRoutes(routes) {
|
|
219
|
-
context.setRoutes(routes);
|
|
220
|
-
},
|
|
221
|
-
destroy() {
|
|
222
|
-
// Unbind and clean up apps registry
|
|
223
|
-
apps.unbind().catch((err) => {
|
|
224
|
-
console.error('[Runtime] Error unbinding apps registry:', err);
|
|
225
|
-
});
|
|
226
|
-
accumulator.destroy();
|
|
227
|
-
context.destroy();
|
|
228
|
-
actions.destroy();
|
|
229
|
-
surfaces.destroy();
|
|
230
|
-
},
|
|
231
|
-
};
|
|
232
|
-
// Bind apps registry to runtime
|
|
233
|
-
apps.bind(runtime);
|
|
234
|
-
widgets.bindRuntime(runtime);
|
|
235
|
-
return runtime;
|
|
236
|
-
}
|
|
237
|
-
//# sourceMappingURL=runtime.js.map
|