@syntrologie/runtime-sdk 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +185 -0
  2. package/dist/SmartCanvasApp.d.ts +29 -0
  3. package/dist/SmartCanvasApp.js +68 -0
  4. package/dist/SmartCanvasApp.js.map +1 -0
  5. package/dist/SmartCanvasElement.d.ts +29 -0
  6. package/dist/SmartCanvasElement.js +133 -0
  7. package/dist/SmartCanvasElement.js.map +1 -0
  8. package/dist/SmartCanvasPortal.d.ts +7 -0
  9. package/dist/SmartCanvasPortal.js +17 -0
  10. package/dist/SmartCanvasPortal.js.map +1 -0
  11. package/dist/antiFlicker.d.ts +10 -0
  12. package/dist/antiFlicker.js +39 -0
  13. package/dist/antiFlicker.js.map +1 -0
  14. package/dist/api.d.ts +60 -0
  15. package/dist/api.js +159 -0
  16. package/dist/api.js.map +1 -0
  17. package/dist/bootstrap.d.ts +62 -0
  18. package/dist/bootstrap.js +83 -0
  19. package/dist/bootstrap.js.map +1 -0
  20. package/dist/bundle-entry.d.ts +4 -0
  21. package/dist/bundle-entry.js +9 -0
  22. package/dist/bundle-entry.js.map +1 -0
  23. package/dist/components/RectangleCard.d.ts +15 -0
  24. package/dist/components/RectangleCard.js +226 -0
  25. package/dist/components/RectangleCard.js.map +1 -0
  26. package/dist/components/RectangleWheel.d.ts +8 -0
  27. package/dist/components/RectangleWheel.js +30 -0
  28. package/dist/components/RectangleWheel.js.map +1 -0
  29. package/dist/components/ShadowCanvasOverlay.d.ts +26 -0
  30. package/dist/components/ShadowCanvasOverlay.js +163 -0
  31. package/dist/components/ShadowCanvasOverlay.js.map +1 -0
  32. package/dist/configFetcher.d.ts +15 -0
  33. package/dist/configFetcher.js +90 -0
  34. package/dist/configFetcher.js.map +1 -0
  35. package/dist/controller.d.ts +15 -0
  36. package/dist/controller.js +34 -0
  37. package/dist/controller.js.map +1 -0
  38. package/dist/earlyPatcher.d.ts +23 -0
  39. package/dist/earlyPatcher.js +70 -0
  40. package/dist/earlyPatcher.js.map +1 -0
  41. package/dist/editorLoader.d.ts +17 -0
  42. package/dist/editorLoader.js +95 -0
  43. package/dist/editorLoader.js.map +1 -0
  44. package/dist/experiments/adapters/growthbook.d.ts +45 -0
  45. package/dist/experiments/adapters/growthbook.js +79 -0
  46. package/dist/experiments/adapters/growthbook.js.map +1 -0
  47. package/dist/experiments/index.d.ts +3 -0
  48. package/dist/experiments/index.js +4 -0
  49. package/dist/experiments/index.js.map +1 -0
  50. package/dist/experiments/registry.d.ts +13 -0
  51. package/dist/experiments/registry.js +30 -0
  52. package/dist/experiments/registry.js.map +1 -0
  53. package/dist/experiments/types.d.ts +25 -0
  54. package/dist/experiments/types.js +2 -0
  55. package/dist/experiments/types.js.map +1 -0
  56. package/dist/fetchers/cdnFetcher.d.ts +35 -0
  57. package/dist/fetchers/cdnFetcher.js +100 -0
  58. package/dist/fetchers/cdnFetcher.js.map +1 -0
  59. package/dist/fetchers/experimentsFetcher.d.ts +33 -0
  60. package/dist/fetchers/experimentsFetcher.js +42 -0
  61. package/dist/fetchers/experimentsFetcher.js.map +1 -0
  62. package/dist/fetchers/index.d.ts +3 -0
  63. package/dist/fetchers/index.js +5 -0
  64. package/dist/fetchers/index.js.map +1 -0
  65. package/dist/fetchers/registry.d.ts +14 -0
  66. package/dist/fetchers/registry.js +58 -0
  67. package/dist/fetchers/registry.js.map +1 -0
  68. package/dist/fetchers/types.d.ts +26 -0
  69. package/dist/fetchers/types.js +2 -0
  70. package/dist/fetchers/types.js.map +1 -0
  71. package/dist/hooks/useCanvasOverlays.d.ts +13 -0
  72. package/dist/hooks/useCanvasOverlays.js +59 -0
  73. package/dist/hooks/useCanvasOverlays.js.map +1 -0
  74. package/dist/hooks/useHostPatches.d.ts +9 -0
  75. package/dist/hooks/useHostPatches.js +40 -0
  76. package/dist/hooks/useHostPatches.js.map +1 -0
  77. package/dist/hooks/useShadowCanvasConfig.d.ts +20 -0
  78. package/dist/hooks/useShadowCanvasConfig.js +46 -0
  79. package/dist/hooks/useShadowCanvasConfig.js.map +1 -0
  80. package/dist/hostPatcher/core/patcher.d.ts +3 -0
  81. package/dist/hostPatcher/core/patcher.js +173 -0
  82. package/dist/hostPatcher/core/patcher.js.map +1 -0
  83. package/dist/hostPatcher/core/sanitizer.d.ts +1 -0
  84. package/dist/hostPatcher/core/sanitizer.js +45 -0
  85. package/dist/hostPatcher/core/sanitizer.js.map +1 -0
  86. package/dist/hostPatcher/core/types.d.ts +94 -0
  87. package/dist/hostPatcher/core/types.js +2 -0
  88. package/dist/hostPatcher/core/types.js.map +1 -0
  89. package/dist/hostPatcher/index.d.ts +6 -0
  90. package/dist/hostPatcher/index.js +7 -0
  91. package/dist/hostPatcher/index.js.map +1 -0
  92. package/dist/hostPatcher/policy/defaultPolicy.d.ts +2 -0
  93. package/dist/hostPatcher/policy/defaultPolicy.js +41 -0
  94. package/dist/hostPatcher/policy/defaultPolicy.js.map +1 -0
  95. package/dist/hostPatcher/utils/anchors.d.ts +13 -0
  96. package/dist/hostPatcher/utils/anchors.js +107 -0
  97. package/dist/hostPatcher/utils/anchors.js.map +1 -0
  98. package/dist/hostPatcher/utils/observer.d.ts +3 -0
  99. package/dist/hostPatcher/utils/observer.js +11 -0
  100. package/dist/hostPatcher/utils/observer.js.map +1 -0
  101. package/dist/index.d.ts +20 -0
  102. package/dist/index.js +20 -0
  103. package/dist/index.js.map +1 -0
  104. package/dist/overlays/fetcher.d.ts +4 -0
  105. package/dist/overlays/fetcher.js +17 -0
  106. package/dist/overlays/fetcher.js.map +1 -0
  107. package/dist/overlays/runtime/anchor/resolve.d.ts +4 -0
  108. package/dist/overlays/runtime/anchor/resolve.js +87 -0
  109. package/dist/overlays/runtime/anchor/resolve.js.map +1 -0
  110. package/dist/overlays/runtime/index.d.ts +6 -0
  111. package/dist/overlays/runtime/index.js +7 -0
  112. package/dist/overlays/runtime/index.js.map +1 -0
  113. package/dist/overlays/runtime/overlay/highlight.d.ts +10 -0
  114. package/dist/overlays/runtime/overlay/highlight.js +152 -0
  115. package/dist/overlays/runtime/overlay/highlight.js.map +1 -0
  116. package/dist/overlays/runtime/overlay/root.d.ts +4 -0
  117. package/dist/overlays/runtime/overlay/root.js +165 -0
  118. package/dist/overlays/runtime/overlay/root.js.map +1 -0
  119. package/dist/overlays/runtime/overlay/runner.d.ts +2 -0
  120. package/dist/overlays/runtime/overlay/runner.js +101 -0
  121. package/dist/overlays/runtime/overlay/runner.js.map +1 -0
  122. package/dist/overlays/runtime/overlay/tooltip.d.ts +14 -0
  123. package/dist/overlays/runtime/overlay/tooltip.js +174 -0
  124. package/dist/overlays/runtime/overlay/tooltip.js.map +1 -0
  125. package/dist/overlays/runtime/utils/dom.d.ts +2 -0
  126. package/dist/overlays/runtime/utils/dom.js +9 -0
  127. package/dist/overlays/runtime/utils/dom.js.map +1 -0
  128. package/dist/overlays/schema.d.ts +907 -0
  129. package/dist/overlays/schema.js +48 -0
  130. package/dist/overlays/schema.js.map +1 -0
  131. package/dist/overlays/types.d.ts +68 -0
  132. package/dist/overlays/types.js +2 -0
  133. package/dist/overlays/types.js.map +1 -0
  134. package/dist/react.d.ts +99 -0
  135. package/dist/react.js +119 -0
  136. package/dist/react.js.map +1 -0
  137. package/dist/smart-canvas.esm.js +202 -0
  138. package/dist/smart-canvas.esm.js.map +7 -0
  139. package/dist/smart-canvas.js +40406 -0
  140. package/dist/smart-canvas.js.map +7 -0
  141. package/dist/smart-canvas.min.js +202 -0
  142. package/dist/smart-canvas.min.js.map +7 -0
  143. package/dist/telemetry/adapters/posthog.d.ts +67 -0
  144. package/dist/telemetry/adapters/posthog.js +61 -0
  145. package/dist/telemetry/adapters/posthog.js.map +1 -0
  146. package/dist/telemetry/index.d.ts +3 -0
  147. package/dist/telemetry/index.js +3 -0
  148. package/dist/telemetry/index.js.map +1 -0
  149. package/dist/telemetry/registry.d.ts +13 -0
  150. package/dist/telemetry/registry.js +27 -0
  151. package/dist/telemetry/registry.js.map +1 -0
  152. package/dist/telemetry/types.d.ts +28 -0
  153. package/dist/telemetry/types.js +2 -0
  154. package/dist/telemetry/types.js.map +1 -0
  155. package/dist/token.d.ts +36 -0
  156. package/dist/token.js +47 -0
  157. package/dist/token.js.map +1 -0
  158. package/dist/types.d.ts +147 -0
  159. package/dist/types.js +5 -0
  160. package/dist/types.js.map +1 -0
  161. package/package.json +64 -0
  162. package/schema/canvas-config.schema.json +329 -0
  163. package/scripts/validate-config.mjs +80 -0
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Dangerous selector patterns that should be blocked.
3
+ */
4
+ const DANGEROUS_SELECTOR_PATTERNS = [
5
+ /^\*$/, // Universal selector alone - matches everything
6
+ /^\s*$/, // Empty/whitespace
7
+ /:has\(/i, // :has() can be slow and used for DOM probing
8
+ /javascript:/i, // Should never appear in selectors
9
+ ];
10
+ const MAX_SELECTOR_LENGTH = 500;
11
+ /**
12
+ * Validates a CSS selector for security and performance.
13
+ * Returns true if the selector is safe to use.
14
+ */
15
+ function validateSelector(selector) {
16
+ if (!selector || selector.length > MAX_SELECTOR_LENGTH) {
17
+ console.warn('[SmartCanvas] Selector too long or empty:', selector === null || selector === void 0 ? void 0 : selector.slice(0, 50));
18
+ return false;
19
+ }
20
+ if (DANGEROUS_SELECTOR_PATTERNS.some(p => p.test(selector))) {
21
+ console.warn('[SmartCanvas] Dangerous selector pattern blocked:', selector);
22
+ return false;
23
+ }
24
+ // Test that it's valid CSS
25
+ try {
26
+ document.querySelector(selector);
27
+ return true;
28
+ }
29
+ catch {
30
+ console.warn('[SmartCanvas] Invalid CSS selector:', selector);
31
+ return false;
32
+ }
33
+ }
34
+ /**
35
+ * Builds a selector string from an AnchorSelector and validates it.
36
+ * Returns null if invalid.
37
+ */
38
+ function buildAndValidateSelector(sel) {
39
+ let selectorStr;
40
+ if (sel.by === 'css') {
41
+ selectorStr = sel.value;
42
+ }
43
+ else if (sel.by === 'data') {
44
+ selectorStr = `[data-${sel.key}${sel.value ? `="${sel.value}"` : ''}]`;
45
+ }
46
+ else if (sel.by === 'aria') {
47
+ const role = sel.role ? `[role="${sel.role}"]` : '';
48
+ const label = sel.label ? `[aria-label="${sel.label}"]` : '';
49
+ selectorStr = `${role}${label}`;
50
+ }
51
+ else {
52
+ return null;
53
+ }
54
+ if (!validateSelector(selectorStr)) {
55
+ return null;
56
+ }
57
+ return selectorStr;
58
+ }
59
+ /**
60
+ * Resolves an anchor selector to an HTMLElement.
61
+ * Warns if the selector matches multiple elements.
62
+ */
63
+ export function resolveAnchor(sel, opts) {
64
+ var _a, _b;
65
+ // Direct element reference - no validation needed
66
+ if (sel.el instanceof HTMLElement)
67
+ return sel.el;
68
+ const withinShadow = "within" in sel ? sel.within === 'shadow' : false;
69
+ const root = withinShadow
70
+ ? ((_b = (_a = opts.shadowHost) === null || _a === void 0 ? void 0 : _a.shadowRoot) !== null && _b !== void 0 ? _b : document)
71
+ : document;
72
+ // Build and validate selector
73
+ const selectorStr = buildAndValidateSelector(sel);
74
+ if (!selectorStr) {
75
+ return null;
76
+ }
77
+ // Check for ambiguous selectors (multiple matches)
78
+ const matches = root.querySelectorAll(selectorStr);
79
+ if (matches.length === 0) {
80
+ console.warn(`[SmartCanvas] No elements match selector: ${selectorStr}`);
81
+ return null;
82
+ }
83
+ if (matches.length > 1) {
84
+ console.warn(`[SmartCanvas] Selector "${selectorStr}" matches ${matches.length} elements. ` +
85
+ `Using first match. Consider a more specific selector.`);
86
+ }
87
+ return matches[0];
88
+ }
89
+ export function checkInvariants(el, inv) {
90
+ if (!inv)
91
+ return true;
92
+ if (inv.tag && el.tagName.toLowerCase() !== inv.tag.toLowerCase())
93
+ return false;
94
+ if (inv.hasAttrs) {
95
+ for (const [k, v] of Object.entries(inv.hasAttrs)) {
96
+ if (el.getAttribute(k) !== v)
97
+ return false;
98
+ }
99
+ }
100
+ if (inv.closest) {
101
+ const ok = inv.closest.some(sel => !!el.closest(sel));
102
+ if (!ok)
103
+ return false;
104
+ }
105
+ return true;
106
+ }
107
+ //# sourceMappingURL=anchors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchors.js","sourceRoot":"","sources":["../../../src/hostPatcher/utils/anchors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ type CB = () => void;
2
+ export declare function observeAnchor(anchor: HTMLElement, onChange: CB): MutationObserver;
3
+ export {};
@@ -0,0 +1,11 @@
1
+ export function observeAnchor(anchor, onChange) {
2
+ var _a;
3
+ const obs = new MutationObserver(() => {
4
+ onChange();
5
+ });
6
+ // Observe subtree changes on parent to detect child reorders/removals
7
+ const parent = (_a = anchor.parentElement) !== null && _a !== void 0 ? _a : document.body;
8
+ obs.observe(parent, { childList: true, subtree: false });
9
+ return obs;
10
+ }
11
+ //# sourceMappingURL=observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.js","sourceRoot":"","sources":["../../../src/hostPatcher/utils/observer.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,MAAmB,EAAE,QAAY;;IAC7D,MAAM,GAAG,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE;QACpC,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IACH,sEAAsE;IACtE,MAAM,MAAM,GAAG,MAAA,MAAM,CAAC,aAAa,mCAAI,QAAQ,CAAC,IAAI,CAAC;IACrD,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,20 @@
1
+ export * from "./types";
2
+ export * from "./telemetry";
3
+ export * from "./experiments";
4
+ export * from "./hooks/useShadowCanvasConfig";
5
+ export * from "./components/RectangleCard";
6
+ export * from "./components/ShadowCanvasOverlay";
7
+ export * from "./components/RectangleWheel";
8
+ export * from "./controller";
9
+ export * from "./SmartCanvasApp";
10
+ export * from "./SmartCanvasElement";
11
+ export * from "./SmartCanvasPortal";
12
+ export * from "./api";
13
+ export * from "./configFetcher";
14
+ export * from "./overlays/types";
15
+ export * from "./overlays/schema";
16
+ export * from "./overlays/fetcher";
17
+ export { Syntro } from "./bootstrap";
18
+ export type { SyntroInitOptions, SyntroInitResult } from "./bootstrap";
19
+ export { encodeToken, decodeToken } from "./token";
20
+ export type { SyntroTokenPayload } from "./token";
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ export * from "./types";
2
+ export * from "./telemetry";
3
+ export * from "./experiments";
4
+ export * from "./hooks/useShadowCanvasConfig";
5
+ export * from "./components/RectangleCard";
6
+ export * from "./components/ShadowCanvasOverlay";
7
+ export * from "./components/RectangleWheel";
8
+ export * from "./controller";
9
+ export * from "./SmartCanvasApp";
10
+ export * from "./SmartCanvasElement";
11
+ export * from "./SmartCanvasPortal";
12
+ export * from "./api";
13
+ export * from "./configFetcher";
14
+ export * from "./overlays/types";
15
+ export * from "./overlays/schema";
16
+ export * from "./overlays/fetcher";
17
+ // Single-token initialization
18
+ export { Syntro } from "./bootstrap";
19
+ export { encodeToken, decodeToken } from "./token";
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AAEnC,8BAA8B;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { CanvasRecipe } from "./types";
2
+ import { type CanvasFetcherOptions } from "../configFetcher";
3
+ export type OverlayRecipeFetcher = () => Promise<CanvasRecipe>;
4
+ export declare const createOverlayRecipeFetcher: ({ configUri, experiments, featureKey, credentials, }?: CanvasFetcherOptions) => OverlayRecipeFetcher;
@@ -0,0 +1,17 @@
1
+ import { CanvasRecipeZ } from "./schema";
2
+ import { resolveConfigUri } from "../configFetcher";
3
+ export const createOverlayRecipeFetcher = ({ configUri, experiments, featureKey = "smart-canvas-overlay-uri", credentials = "include", } = {}) => {
4
+ return async () => {
5
+ const uri = resolveConfigUri({ configUri, experiments, featureKey });
6
+ if (!uri) {
7
+ throw new Error("SmartCanvas overlays: recipe URI missing (env + feature unset).");
8
+ }
9
+ const response = await fetch(uri, { credentials });
10
+ if (!response.ok) {
11
+ throw new Error(`SmartCanvas overlays: failed to fetch recipe (${response.status})`);
12
+ }
13
+ const json = await response.json();
14
+ return CanvasRecipeZ.parse(json);
15
+ };
16
+ };
17
+ //# sourceMappingURL=fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/overlays/fetcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAA6B,MAAM,kBAAkB,CAAC;AAI/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,EACzC,SAAS,EACT,WAAW,EACX,UAAU,GAAG,0BAA0B,EACvC,WAAW,GAAG,SAAS,MACC,EAAE,EAAwB,EAAE;IACpD,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,GAAG,GAAG,gBAAgB,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,iDAAiD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,aAAa,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC;IACnD,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { Selector } from '../../types';
2
+ export declare function createAnchorResolver(opts: {
3
+ canvasHost?: HTMLElement | null;
4
+ }): (sel: Selector) => Promise<HTMLElement | null>;
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Dangerous selector patterns that should be blocked.
3
+ */
4
+ const DANGEROUS_SELECTOR_PATTERNS = [
5
+ /^\*$/, // Universal selector alone - matches everything
6
+ /^\s*$/, // Empty/whitespace
7
+ /:has\(/i, // :has() can be slow and used for DOM probing
8
+ /javascript:/i, // Should never appear in selectors
9
+ ];
10
+ const MAX_SELECTOR_LENGTH = 500;
11
+ /**
12
+ * Validates a CSS selector for security and performance.
13
+ */
14
+ function validateSelector(selector) {
15
+ if (!selector || selector.length > MAX_SELECTOR_LENGTH) {
16
+ console.warn('[SmartCanvas] Selector too long or empty:', selector === null || selector === void 0 ? void 0 : selector.slice(0, 50));
17
+ return false;
18
+ }
19
+ if (DANGEROUS_SELECTOR_PATTERNS.some(p => p.test(selector))) {
20
+ console.warn('[SmartCanvas] Dangerous selector pattern blocked:', selector);
21
+ return false;
22
+ }
23
+ try {
24
+ document.querySelector(selector);
25
+ return true;
26
+ }
27
+ catch {
28
+ console.warn('[SmartCanvas] Invalid CSS selector:', selector);
29
+ return false;
30
+ }
31
+ }
32
+ /**
33
+ * Resolves a selector and warns about ambiguous matches.
34
+ */
35
+ function resolveWithWarning(root, selector) {
36
+ if (!validateSelector(selector)) {
37
+ return null;
38
+ }
39
+ const matches = root.querySelectorAll(selector);
40
+ if (matches.length === 0) {
41
+ console.warn(`[SmartCanvas] No elements match selector: ${selector}`);
42
+ return null;
43
+ }
44
+ if (matches.length > 1) {
45
+ console.warn(`[SmartCanvas] Selector "${selector}" matches ${matches.length} elements. ` +
46
+ `Using first match. Consider a more specific selector.`);
47
+ }
48
+ return matches[0];
49
+ }
50
+ export function createAnchorResolver(opts) {
51
+ var _a;
52
+ const canvasHost = (_a = opts.canvasHost) !== null && _a !== void 0 ? _a : document.querySelector('syntro-canvas');
53
+ return async function resolve(sel) {
54
+ // Direct element reference - no validation needed
55
+ if (sel.el instanceof HTMLElement)
56
+ return sel.el;
57
+ if (sel.type === 'data') {
58
+ const q = `[data-${sel.key}${sel.value ? `="${sel.value}"` : ''}]`;
59
+ // Try document first, then shadow DOM
60
+ const result = resolveWithWarning(document, q);
61
+ if (result)
62
+ return result;
63
+ if (canvasHost === null || canvasHost === void 0 ? void 0 : canvasHost.shadowRoot) {
64
+ return resolveWithWarning(canvasHost.shadowRoot, q);
65
+ }
66
+ return null;
67
+ }
68
+ if (sel.type === 'css') {
69
+ return resolveWithWarning(document, sel.value);
70
+ }
71
+ if (sel.type === 'aria') {
72
+ const role = sel.role ? `[role="${sel.role}"]` : '';
73
+ const label = sel.label ? `[aria-label="${sel.label}"]` : '';
74
+ const selector = `${role}${label}`;
75
+ return resolveWithWarning(document, selector);
76
+ }
77
+ if (sel.type === 'shadow-css') {
78
+ if (!(canvasHost === null || canvasHost === void 0 ? void 0 : canvasHost.shadowRoot)) {
79
+ console.warn('[SmartCanvas] shadow-css selector used but no shadow root available');
80
+ return null;
81
+ }
82
+ return resolveWithWarning(canvasHost.shadowRoot, sel.value);
83
+ }
84
+ return null;
85
+ };
86
+ }
87
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/anchor/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { ensureOverlayRoot, injectBaseStyles } from "./overlay/root";
2
+ export { showTooltip } from "./overlay/tooltip";
3
+ export { showHighlight } from "./overlay/highlight";
4
+ export { runOverlays } from "./overlay/runner";
5
+ export { createAnchorResolver } from "./anchor/resolve";
6
+ export { isVisible, scrollIntoViewIfNeeded } from "./utils/dom";
@@ -0,0 +1,7 @@
1
+ export { ensureOverlayRoot, injectBaseStyles } from "./overlay/root";
2
+ export { showTooltip } from "./overlay/tooltip";
3
+ export { showHighlight } from "./overlay/highlight";
4
+ export { runOverlays } from "./overlay/runner";
5
+ export { createAnchorResolver } from "./anchor/resolve";
6
+ export { isVisible, scrollIntoViewIfNeeded } from "./utils/dom";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/overlays/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type HighlightHandle = {
2
+ destroy(): void;
3
+ };
4
+ export declare function showHighlight(anchorEl: HTMLElement, overlayRoot: HTMLElement, opts?: {
5
+ paddingPx?: number;
6
+ radiusPx?: number;
7
+ scrimOpacity?: number;
8
+ ringColor?: string;
9
+ blocking?: boolean;
10
+ }): HighlightHandle;
@@ -0,0 +1,152 @@
1
+ var _a;
2
+ const supportsPathClip = typeof CSS !== "undefined" && ((_a = CSS.supports) === null || _a === void 0 ? void 0 : _a.call(CSS, "clip-path", "path('M0 0 H1 V1 Z')"));
3
+ export function showHighlight(anchorEl, overlayRoot, opts) {
4
+ var _a, _b, _c, _d, _e;
5
+ const padding = (_a = opts === null || opts === void 0 ? void 0 : opts.paddingPx) !== null && _a !== void 0 ? _a : 12;
6
+ const radius = (_b = opts === null || opts === void 0 ? void 0 : opts.radiusPx) !== null && _b !== void 0 ? _b : 12;
7
+ const opacity = Math.min(Math.max((_c = opts === null || opts === void 0 ? void 0 : opts.scrimOpacity) !== null && _c !== void 0 ? _c : 0.55, 0), 1);
8
+ const ringColor = (_d = opts === null || opts === void 0 ? void 0 : opts.ringColor) !== null && _d !== void 0 ? _d : "var(--syntro-ring, #5b8cff)";
9
+ const blocking = (_e = opts === null || opts === void 0 ? void 0 : opts.blocking) !== null && _e !== void 0 ? _e : false;
10
+ const rootStyles = getComputedStyle(document.documentElement);
11
+ const tokenScrim = rootStyles.getPropertyValue("--syntro-spotlight-backdrop").trim();
12
+ const tokenRing = rootStyles.getPropertyValue("--syntro-ring").trim();
13
+ const scrim = document.createElement("div");
14
+ scrim.className = "syntro-spotlight-scrim";
15
+ Object.assign(scrim.style, {
16
+ position: "fixed",
17
+ inset: "0",
18
+ zIndex: "2147483646",
19
+ pointerEvents: blocking ? "auto" : "none",
20
+ background: tokenScrim || `rgba(2, 6, 23, ${opacity})`,
21
+ transition: "opacity 220ms ease",
22
+ opacity: "0",
23
+ });
24
+ overlayRoot.appendChild(scrim);
25
+ requestAnimationFrame(() => (scrim.style.opacity = "1"));
26
+ const ring = document.createElement("div");
27
+ ring.className = "syntro-spotlight-ring";
28
+ Object.assign(ring.style, {
29
+ position: "fixed",
30
+ pointerEvents: "none",
31
+ borderRadius: `${radius}px`,
32
+ border: `2px solid ${ringColor || tokenRing || "#5b8cff"}`,
33
+ boxShadow: `0 0 0 4px rgba(255,255,255,0.35)`,
34
+ zIndex: "2147483647",
35
+ transition: "all 220ms cubic-bezier(0.16,1,0.3,1)",
36
+ });
37
+ overlayRoot.appendChild(ring);
38
+ const fallbackSlices = [];
39
+ if (!supportsPathClip) {
40
+ for (let i = 0; i < 4; i++) {
41
+ const slice = document.createElement("div");
42
+ slice.style.position = "fixed";
43
+ slice.style.background = "inherit";
44
+ fallbackSlices.push(slice);
45
+ scrim.appendChild(slice);
46
+ }
47
+ }
48
+ const setClipPath = (path) => {
49
+ scrim.style.clipPath = path;
50
+ scrim.style.webkitClipPath = path;
51
+ };
52
+ const update = () => {
53
+ const rect = anchorEl.getBoundingClientRect();
54
+ const x = Math.max(0, rect.left - padding);
55
+ const y = Math.max(0, rect.top - padding);
56
+ const w = Math.min(window.innerWidth, rect.width + padding * 2);
57
+ const h = Math.min(window.innerHeight, rect.height + padding * 2);
58
+ Object.assign(ring.style, {
59
+ left: `${x}px`,
60
+ top: `${y}px`,
61
+ width: `${w}px`,
62
+ height: `${h}px`,
63
+ });
64
+ if (supportsPathClip) {
65
+ // Create a single path that covers viewport with a ROUNDED hole cut out
66
+ const vw = window.innerWidth;
67
+ const vh = window.innerHeight;
68
+ const r = Math.min(radius, w / 2, h / 2); // Don't let radius exceed half width/height
69
+ // Outer path: clockwise around viewport
70
+ const outer = `M 0 0 L ${vw} 0 L ${vw} ${vh} L 0 ${vh} Z`;
71
+ // Inner path with rounded corners: counter-clockwise to create hole
72
+ // Start at top-left, go LEFT first (counter-clockwise means opposite direction)
73
+ const inner = `M ${x + r} ${y} ` +
74
+ `A ${r} ${r} 0 0 0 ${x} ${y + r} ` + // top-left curve (sweep-flag=0 for counter-clockwise)
75
+ `L ${x} ${y + h - r} ` + // left edge (going down)
76
+ `A ${r} ${r} 0 0 0 ${x + r} ${y + h} ` + // bottom-left curve
77
+ `L ${x + w - r} ${y + h} ` + // bottom edge (going right)
78
+ `A ${r} ${r} 0 0 0 ${x + w} ${y + h - r} ` + // bottom-right curve
79
+ `L ${x + w} ${y + r} ` + // right edge (going up)
80
+ `A ${r} ${r} 0 0 0 ${x + w - r} ${y} ` + // top-right curve
81
+ `L ${x + r} ${y} ` + // top edge (going left, back to start)
82
+ `Z`;
83
+ const path = `path('${outer} ${inner}')`;
84
+ setClipPath(path);
85
+ }
86
+ else {
87
+ const [top, right, bottom, left] = fallbackSlices;
88
+ Object.assign(top.style, {
89
+ left: "0px",
90
+ top: "0px",
91
+ width: "100vw",
92
+ height: `${y}px`,
93
+ });
94
+ Object.assign(bottom.style, {
95
+ left: "0px",
96
+ top: `${y + h}px`,
97
+ width: "100vw",
98
+ height: `${Math.max(0, window.innerHeight - (y + h))}px`,
99
+ });
100
+ Object.assign(left.style, {
101
+ left: "0px",
102
+ top: `${y}px`,
103
+ width: `${x}px`,
104
+ height: `${h}px`,
105
+ });
106
+ Object.assign(right.style, {
107
+ left: `${x + w}px`,
108
+ top: `${y}px`,
109
+ width: `${Math.max(0, window.innerWidth - (x + w))}px`,
110
+ height: `${h}px`,
111
+ });
112
+ }
113
+ };
114
+ const ro = new ResizeObserver(() => requestAnimationFrame(update));
115
+ ro.observe(anchorEl);
116
+ const onScroll = () => requestAnimationFrame(update);
117
+ const onResize = () => requestAnimationFrame(update);
118
+ window.addEventListener("scroll", onScroll, true);
119
+ window.addEventListener("resize", onResize);
120
+ const onKey = (e) => {
121
+ if (e.key === "Escape")
122
+ handle.destroy();
123
+ };
124
+ window.addEventListener("keydown", onKey);
125
+ const onClick = (event) => {
126
+ if (!blocking) {
127
+ handle.destroy();
128
+ }
129
+ else {
130
+ event.preventDefault();
131
+ event.stopPropagation();
132
+ }
133
+ };
134
+ scrim.addEventListener("click", onClick);
135
+ const handle = {
136
+ destroy() {
137
+ ro.disconnect();
138
+ window.removeEventListener("scroll", onScroll, true);
139
+ window.removeEventListener("resize", onResize);
140
+ window.removeEventListener("keydown", onKey);
141
+ scrim.removeEventListener("click", onClick);
142
+ scrim.style.opacity = "0";
143
+ setTimeout(() => {
144
+ scrim.remove();
145
+ ring.remove();
146
+ }, 220);
147
+ },
148
+ };
149
+ update();
150
+ return handle;
151
+ }
152
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../../src/overlays/runtime/overlay/highlight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function ensureOverlayRoot(): HTMLElement;
2
+ export declare function injectBaseStyles(): void;
3
+ export declare function setDocumentInertExcept(keepEl: HTMLElement): void;
4
+ export declare function clearDocumentInert(): void;