@teleporthq/teleport-shared 0.43.70 → 0.43.74

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 (169) hide show
  1. package/__tests__/function-sources.ts +30 -0
  2. package/__tests__/motion-runtime/motion-engine.ts +102 -0
  3. package/__tests__/motion-runtime/scroll-video-engine.ts +28 -0
  4. package/__tests__/scroll-scene/story-lanes.ts +126 -0
  5. package/dist/cjs/index.d.ts +5 -1
  6. package/dist/cjs/index.d.ts.map +1 -1
  7. package/dist/cjs/index.js +9 -1
  8. package/dist/cjs/index.js.map +1 -1
  9. package/dist/cjs/motion-runtime/index.d.ts +3 -0
  10. package/dist/cjs/motion-runtime/index.d.ts.map +1 -0
  11. package/dist/cjs/motion-runtime/index.js +8 -0
  12. package/dist/cjs/motion-runtime/index.js.map +1 -0
  13. package/dist/cjs/motion-runtime/motion-engine-source.d.ts +16 -0
  14. package/dist/cjs/motion-runtime/motion-engine-source.d.ts.map +1 -0
  15. package/dist/cjs/motion-runtime/motion-engine-source.js +20 -0
  16. package/dist/cjs/motion-runtime/motion-engine-source.js.map +1 -0
  17. package/dist/cjs/motion-runtime/scroll-video-engine-source.d.ts +9 -0
  18. package/dist/cjs/motion-runtime/scroll-video-engine-source.d.ts.map +1 -0
  19. package/dist/cjs/motion-runtime/scroll-video-engine-source.js +13 -0
  20. package/dist/cjs/motion-runtime/scroll-video-engine-source.js.map +1 -0
  21. package/dist/cjs/page-transition/index.d.ts +5 -0
  22. package/dist/cjs/page-transition/index.d.ts.map +1 -0
  23. package/dist/cjs/page-transition/index.js +21 -0
  24. package/dist/cjs/page-transition/index.js.map +1 -0
  25. package/dist/cjs/page-transition/morph-source.d.ts +20 -0
  26. package/dist/cjs/page-transition/morph-source.d.ts.map +1 -0
  27. package/dist/cjs/page-transition/morph-source.js +25 -0
  28. package/dist/cjs/page-transition/morph-source.js.map +1 -0
  29. package/dist/cjs/page-transition/variant-sources.generated.d.ts +7 -0
  30. package/dist/cjs/page-transition/variant-sources.generated.d.ts.map +1 -0
  31. package/dist/cjs/page-transition/variant-sources.generated.js +14 -0
  32. package/dist/cjs/page-transition/variant-sources.generated.js.map +1 -0
  33. package/dist/cjs/page-transition/variants.d.ts +87 -0
  34. package/dist/cjs/page-transition/variants.d.ts.map +1 -0
  35. package/dist/cjs/page-transition/variants.js +330 -0
  36. package/dist/cjs/page-transition/variants.js.map +1 -0
  37. package/dist/cjs/page-transition/view-transition-css.d.ts +21 -0
  38. package/dist/cjs/page-transition/view-transition-css.d.ts.map +1 -0
  39. package/dist/cjs/page-transition/view-transition-css.js +188 -0
  40. package/dist/cjs/page-transition/view-transition-css.js.map +1 -0
  41. package/dist/cjs/scroll-scene/chapter-index.d.ts +15 -0
  42. package/dist/cjs/scroll-scene/chapter-index.d.ts.map +1 -0
  43. package/dist/cjs/scroll-scene/chapter-index.js +30 -0
  44. package/dist/cjs/scroll-scene/chapter-index.js.map +1 -0
  45. package/dist/cjs/scroll-scene/controller-source.d.ts +26 -0
  46. package/dist/cjs/scroll-scene/controller-source.d.ts.map +1 -0
  47. package/dist/cjs/scroll-scene/controller-source.js +34 -0
  48. package/dist/cjs/scroll-scene/controller-source.js.map +1 -0
  49. package/dist/cjs/scroll-scene/engine-source.d.ts +2 -0
  50. package/dist/cjs/scroll-scene/engine-source.d.ts.map +1 -0
  51. package/dist/cjs/scroll-scene/engine-source.js +23 -0
  52. package/dist/cjs/scroll-scene/engine-source.js.map +1 -0
  53. package/dist/cjs/scroll-scene/helper-sources.generated.d.ts +9 -0
  54. package/dist/cjs/scroll-scene/helper-sources.generated.d.ts.map +1 -0
  55. package/dist/cjs/scroll-scene/helper-sources.generated.js +16 -0
  56. package/dist/cjs/scroll-scene/helper-sources.generated.js.map +1 -0
  57. package/dist/cjs/scroll-scene/index.d.ts +8 -0
  58. package/dist/cjs/scroll-scene/index.d.ts.map +1 -0
  59. package/dist/cjs/scroll-scene/index.js +24 -0
  60. package/dist/cjs/scroll-scene/index.js.map +1 -0
  61. package/dist/cjs/scroll-scene/moment.d.ts +21 -0
  62. package/dist/cjs/scroll-scene/moment.d.ts.map +1 -0
  63. package/dist/cjs/scroll-scene/moment.js +50 -0
  64. package/dist/cjs/scroll-scene/moment.js.map +1 -0
  65. package/dist/cjs/scroll-scene/points.d.ts +23 -0
  66. package/dist/cjs/scroll-scene/points.d.ts.map +1 -0
  67. package/dist/cjs/scroll-scene/points.js +51 -0
  68. package/dist/cjs/scroll-scene/points.js.map +1 -0
  69. package/dist/cjs/scroll-scene/unclip.d.ts +15 -0
  70. package/dist/cjs/scroll-scene/unclip.d.ts.map +1 -0
  71. package/dist/cjs/scroll-scene/unclip.js +44 -0
  72. package/dist/cjs/scroll-scene/unclip.js.map +1 -0
  73. package/dist/cjs/state-bindings/index.d.ts +74 -0
  74. package/dist/cjs/state-bindings/index.d.ts.map +1 -0
  75. package/dist/cjs/state-bindings/index.js +193 -0
  76. package/dist/cjs/state-bindings/index.js.map +1 -0
  77. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  78. package/dist/esm/index.d.ts +5 -1
  79. package/dist/esm/index.d.ts.map +1 -1
  80. package/dist/esm/index.js +5 -1
  81. package/dist/esm/index.js.map +1 -1
  82. package/dist/esm/motion-runtime/index.d.ts +3 -0
  83. package/dist/esm/motion-runtime/index.d.ts.map +1 -0
  84. package/dist/esm/motion-runtime/index.js +3 -0
  85. package/dist/esm/motion-runtime/index.js.map +1 -0
  86. package/dist/esm/motion-runtime/motion-engine-source.d.ts +16 -0
  87. package/dist/esm/motion-runtime/motion-engine-source.d.ts.map +1 -0
  88. package/dist/esm/motion-runtime/motion-engine-source.js +16 -0
  89. package/dist/esm/motion-runtime/motion-engine-source.js.map +1 -0
  90. package/dist/esm/motion-runtime/scroll-video-engine-source.d.ts +9 -0
  91. package/dist/esm/motion-runtime/scroll-video-engine-source.d.ts.map +1 -0
  92. package/dist/esm/motion-runtime/scroll-video-engine-source.js +9 -0
  93. package/dist/esm/motion-runtime/scroll-video-engine-source.js.map +1 -0
  94. package/dist/esm/page-transition/index.d.ts +5 -0
  95. package/dist/esm/page-transition/index.d.ts.map +1 -0
  96. package/dist/esm/page-transition/index.js +5 -0
  97. package/dist/esm/page-transition/index.js.map +1 -0
  98. package/dist/esm/page-transition/morph-source.d.ts +20 -0
  99. package/dist/esm/page-transition/morph-source.d.ts.map +1 -0
  100. package/dist/esm/page-transition/morph-source.js +21 -0
  101. package/dist/esm/page-transition/morph-source.js.map +1 -0
  102. package/dist/esm/page-transition/variant-sources.generated.d.ts +7 -0
  103. package/dist/esm/page-transition/variant-sources.generated.d.ts.map +1 -0
  104. package/dist/esm/page-transition/variant-sources.generated.js +11 -0
  105. package/dist/esm/page-transition/variant-sources.generated.js.map +1 -0
  106. package/dist/esm/page-transition/variants.d.ts +87 -0
  107. package/dist/esm/page-transition/variants.d.ts.map +1 -0
  108. package/dist/esm/page-transition/variants.js +318 -0
  109. package/dist/esm/page-transition/variants.js.map +1 -0
  110. package/dist/esm/page-transition/view-transition-css.d.ts +21 -0
  111. package/dist/esm/page-transition/view-transition-css.d.ts.map +1 -0
  112. package/dist/esm/page-transition/view-transition-css.js +161 -0
  113. package/dist/esm/page-transition/view-transition-css.js.map +1 -0
  114. package/dist/esm/scroll-scene/chapter-index.d.ts +15 -0
  115. package/dist/esm/scroll-scene/chapter-index.d.ts.map +1 -0
  116. package/dist/esm/scroll-scene/chapter-index.js +26 -0
  117. package/dist/esm/scroll-scene/chapter-index.js.map +1 -0
  118. package/dist/esm/scroll-scene/controller-source.d.ts +26 -0
  119. package/dist/esm/scroll-scene/controller-source.d.ts.map +1 -0
  120. package/dist/esm/scroll-scene/controller-source.js +26 -0
  121. package/dist/esm/scroll-scene/controller-source.js.map +1 -0
  122. package/dist/esm/scroll-scene/engine-source.d.ts +2 -0
  123. package/dist/esm/scroll-scene/engine-source.d.ts.map +1 -0
  124. package/dist/esm/scroll-scene/engine-source.js +19 -0
  125. package/dist/esm/scroll-scene/engine-source.js.map +1 -0
  126. package/dist/esm/scroll-scene/helper-sources.generated.d.ts +9 -0
  127. package/dist/esm/scroll-scene/helper-sources.generated.d.ts.map +1 -0
  128. package/dist/esm/scroll-scene/helper-sources.generated.js +13 -0
  129. package/dist/esm/scroll-scene/helper-sources.generated.js.map +1 -0
  130. package/dist/esm/scroll-scene/index.d.ts +8 -0
  131. package/dist/esm/scroll-scene/index.d.ts.map +1 -0
  132. package/dist/esm/scroll-scene/index.js +8 -0
  133. package/dist/esm/scroll-scene/index.js.map +1 -0
  134. package/dist/esm/scroll-scene/moment.d.ts +21 -0
  135. package/dist/esm/scroll-scene/moment.d.ts.map +1 -0
  136. package/dist/esm/scroll-scene/moment.js +46 -0
  137. package/dist/esm/scroll-scene/moment.js.map +1 -0
  138. package/dist/esm/scroll-scene/points.d.ts +23 -0
  139. package/dist/esm/scroll-scene/points.d.ts.map +1 -0
  140. package/dist/esm/scroll-scene/points.js +45 -0
  141. package/dist/esm/scroll-scene/points.js.map +1 -0
  142. package/dist/esm/scroll-scene/unclip.d.ts +15 -0
  143. package/dist/esm/scroll-scene/unclip.d.ts.map +1 -0
  144. package/dist/esm/scroll-scene/unclip.js +40 -0
  145. package/dist/esm/scroll-scene/unclip.js.map +1 -0
  146. package/dist/esm/state-bindings/index.d.ts +74 -0
  147. package/dist/esm/state-bindings/index.d.ts.map +1 -0
  148. package/dist/esm/state-bindings/index.js +176 -0
  149. package/dist/esm/state-bindings/index.js.map +1 -0
  150. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  151. package/package.json +3 -3
  152. package/src/index.ts +8 -0
  153. package/src/motion-runtime/index.ts +2 -0
  154. package/src/motion-runtime/motion-engine-source.ts +289 -0
  155. package/src/motion-runtime/scroll-video-engine-source.ts +591 -0
  156. package/src/page-transition/index.ts +4 -0
  157. package/src/page-transition/morph-source.ts +86 -0
  158. package/src/page-transition/variant-sources.generated.ts +14 -0
  159. package/src/page-transition/variants.ts +407 -0
  160. package/src/page-transition/view-transition-css.ts +237 -0
  161. package/src/scroll-scene/chapter-index.ts +25 -0
  162. package/src/scroll-scene/controller-source.ts +451 -0
  163. package/src/scroll-scene/engine-source.ts +327 -0
  164. package/src/scroll-scene/helper-sources.generated.ts +18 -0
  165. package/src/scroll-scene/index.ts +13 -0
  166. package/src/scroll-scene/moment.ts +64 -0
  167. package/src/scroll-scene/points.ts +46 -0
  168. package/src/scroll-scene/unclip.ts +44 -0
  169. package/src/state-bindings/index.ts +207 -0
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The "scrolled past a point" contract of a published Scroll Scene: the four
3
+ * plain points in scroll order, which of them a move from one progress to
4
+ * another passes DOWNWARD, and the rank of a point for late listeners. The
5
+ * scene announces every passed point as a `tq-scene-point-passed` DOM event
6
+ * on its track (the element carrying the scene's id) and stamps the furthest
7
+ * point passed so far as `data-scene-point`.
8
+ *
9
+ * Plain JS inside: these functions' SOURCE is injected into the generated
10
+ * runtime via toString(), so no TypeScript-only runtime constructs, no
11
+ * template literals and no reference to anything outside the function. The
12
+ * list mirrors SCROLL_POINT_PROGRESS in teleport-plugin-next-workflows
13
+ * (pinned by a test).
14
+ */
15
+ export declare function scenePointList(): Array<{
16
+ key: string;
17
+ at: number;
18
+ }>;
19
+ /** Points passed going DOWN from one progress to another, in scroll order; none when going up. */
20
+ export declare function passedScenePoints(from: number, to: number): string[];
21
+ /** 1-based rank of a point in scroll order, 0 for anything else. */
22
+ export declare function scenePointRank(key: string): number;
23
+ //# sourceMappingURL=points.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"points.d.ts","sourceRoot":"","sources":["../../../src/scroll-scene/points.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,IAAI,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAOnE;AAED,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpE;AAED,oEAAoE;AACpE,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQlD"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scenePointRank = exports.passedScenePoints = exports.scenePointList = void 0;
4
+ /**
5
+ * The "scrolled past a point" contract of a published Scroll Scene: the four
6
+ * plain points in scroll order, which of them a move from one progress to
7
+ * another passes DOWNWARD, and the rank of a point for late listeners. The
8
+ * scene announces every passed point as a `tq-scene-point-passed` DOM event
9
+ * on its track (the element carrying the scene's id) and stamps the furthest
10
+ * point passed so far as `data-scene-point`.
11
+ *
12
+ * Plain JS inside: these functions' SOURCE is injected into the generated
13
+ * runtime via toString(), so no TypeScript-only runtime constructs, no
14
+ * template literals and no reference to anything outside the function. The
15
+ * list mirrors SCROLL_POINT_PROGRESS in teleport-plugin-next-workflows
16
+ * (pinned by a test).
17
+ */
18
+ function scenePointList() {
19
+ return [
20
+ { key: 'quarter', at: 0.25 },
21
+ { key: 'half', at: 0.5 },
22
+ { key: 'three-quarters', at: 0.75 },
23
+ { key: 'end', at: 1 },
24
+ ];
25
+ }
26
+ exports.scenePointList = scenePointList;
27
+ /** Points passed going DOWN from one progress to another, in scroll order; none when going up. */
28
+ function passedScenePoints(from, to) {
29
+ var passed = [];
30
+ var points = scenePointList();
31
+ for (var index = 0; index < points.length; index++) {
32
+ var point = points[index];
33
+ if (point.at > from + 0.000001 && point.at <= to + 0.000001) {
34
+ passed.push(point.key);
35
+ }
36
+ }
37
+ return passed;
38
+ }
39
+ exports.passedScenePoints = passedScenePoints;
40
+ /** 1-based rank of a point in scroll order, 0 for anything else. */
41
+ function scenePointRank(key) {
42
+ var points = scenePointList();
43
+ for (var index = 0; index < points.length; index++) {
44
+ if (points[index].key === key) {
45
+ return index + 1;
46
+ }
47
+ }
48
+ return 0;
49
+ }
50
+ exports.scenePointRank = scenePointRank;
51
+ //# sourceMappingURL=points.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"points.js","sourceRoot":"","sources":["../../../src/scroll-scene/points.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;GAaG;AACH,SAAgB,cAAc;IAC5B,OAAO;QACL,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE;QAC5B,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE;QACxB,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE;QACnC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE;KACtB,CAAA;AACH,CAAC;AAPD,wCAOC;AAED,kGAAkG;AAClG,SAAgB,iBAAiB,CAAC,IAAY,EAAE,EAAU;IACxD,IAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClD,IAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC3B,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,QAAQ,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE;YAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SACvB;KACF;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAVD,8CAUC;AAED,oEAAoE;AACpE,SAAgB,cAAc,CAAC,GAAW;IACxC,IAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClD,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE;YAC7B,OAAO,KAAK,GAAG,CAAC,CAAA;SACjB;KACF;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AARD,wCAQC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Keep a pinned scene's stage pinnable: an ancestor with `overflow: hidden`
3
+ * (either axis) turns position:sticky off, silently. Authors and the AI write
4
+ * it for good reasons (a horizontal rail must clip its overhang — run
5
+ * e7f332df wrote `section.rail-scene { overflow: hidden }` around the
6
+ * homepage's story and the stage scrolled straight through). `overflow: clip`
7
+ * keeps the clipping and, unlike hidden, does not make the element a scroll
8
+ * container, so the stage sticks again. Ancestors that really scroll (auto /
9
+ * scroll) are left alone: sticky then rightly binds to that container.
10
+ *
11
+ * Injected into the generated widget via toString — no imports, no template
12
+ * literals (the generated project transpiles it).
13
+ */
14
+ export declare function unclipStickyAncestors(track: Element, getStyle: (element: Element) => CSSStyleDeclaration): string[];
15
+ //# sourceMappingURL=unclip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unclip.d.ts","sourceRoot":"","sources":["../../../src/scroll-scene/unclip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,mBAAmB,GAClD,MAAM,EAAE,CA2BV"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.unclipStickyAncestors = void 0;
4
+ /**
5
+ * Keep a pinned scene's stage pinnable: an ancestor with `overflow: hidden`
6
+ * (either axis) turns position:sticky off, silently. Authors and the AI write
7
+ * it for good reasons (a horizontal rail must clip its overhang — run
8
+ * e7f332df wrote `section.rail-scene { overflow: hidden }` around the
9
+ * homepage's story and the stage scrolled straight through). `overflow: clip`
10
+ * keeps the clipping and, unlike hidden, does not make the element a scroll
11
+ * container, so the stage sticks again. Ancestors that really scroll (auto /
12
+ * scroll) are left alone: sticky then rightly binds to that container.
13
+ *
14
+ * Injected into the generated widget via toString — no imports, no template
15
+ * literals (the generated project transpiles it).
16
+ */
17
+ function unclipStickyAncestors(track, getStyle) {
18
+ var unclipped = [];
19
+ var element = track.parentElement;
20
+ while (element && element !== element.ownerDocument.documentElement) {
21
+ var style = getStyle(element);
22
+ var both = style.overflow === 'hidden';
23
+ var axes = [];
24
+ if (both || style.overflowX === 'hidden') {
25
+ axes.push('x');
26
+ }
27
+ if (both || style.overflowY === 'hidden') {
28
+ axes.push('y');
29
+ }
30
+ if (axes.length > 0) {
31
+ var host = element;
32
+ for (var i = 0; i < axes.length; i++) {
33
+ host.style.setProperty('overflow-' + axes[i], 'clip');
34
+ }
35
+ host.setAttribute('data-scene-unclipped', axes.join(''));
36
+ unclipped.push(host.tagName.toLowerCase() +
37
+ (host.className ? '.' + String(host.className).split(' ')[0] : ''));
38
+ }
39
+ element = element.parentElement;
40
+ }
41
+ return unclipped;
42
+ }
43
+ exports.unclipStickyAncestors = unclipStickyAncestors;
44
+ //# sourceMappingURL=unclip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unclip.js","sourceRoot":"","sources":["../../../src/scroll-scene/unclip.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;GAYG;AACH,SAAgB,qBAAqB,CACnC,KAAc,EACd,QAAmD;IAEnD,IAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,IAAI,OAAO,GAAG,KAAK,CAAC,aAAa,CAAA;IACjC,OAAO,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,eAAe,EAAE;QACnE,IAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAA;QACxC,IAAM,IAAI,GAAa,EAAE,CAAA;QACzB,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACf;QACD,IAAI,IAAI,IAAI,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACf;QACD,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAM,IAAI,GAAG,OAAsB,CAAA;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;aACtD;YACD,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;YACxD,SAAS,CAAC,IAAI,CACZ,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE;gBACxB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACrE,CAAA;SACF;QACD,OAAO,GAAG,OAAO,CAAC,aAAa,CAAA;KAChC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AA9BD,sDA8BC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * State bindings of the static HTML export: the attributes a downloaded page
3
+ * carries so that clicks open menus, switch tabs and restyle elements, and the
4
+ * small expression language they are written in. The HTML generator writes
5
+ * them (teleport-plugin-html-base-component), the one runtime file a download
6
+ * ships (`tq-state.js`, teleport-project-generator-html) reads them back.
7
+ *
8
+ * data-tq-scope="Navigation" a page root or a component instance:
9
+ * data-tq-state="menuOpen = false" its own store, with its starting values
10
+ * data-tq-if="menuOpen" shown while true; `hidden` when it starts false
11
+ * data-tq-class="active: tab === 0" the class is on while true
12
+ * data-tq-on-click="menuOpen = !menuOpen"
13
+ * data-tq-slot content a parent put into a component:
14
+ * it reads the parent's store
15
+ *
16
+ * The language has literals (numbers, 'quoted strings', true, false, null),
17
+ * state names, `!`, `+ -`, the six comparisons and `&& ||`, with JavaScript's
18
+ * meaning. Nothing is ever evaluated as JavaScript, so a page keeps working
19
+ * under a strict Content-Security-Policy.
20
+ */
21
+ export declare const SCOPE_ATTR = "data-tq-scope";
22
+ export declare const STATE_ATTR = "data-tq-state";
23
+ export declare const SLOT_ATTR = "data-tq-slot";
24
+ export declare const IF_ATTR = "data-tq-if";
25
+ export declare const CLASS_ATTR = "data-tq-class";
26
+ export declare const CLICK_ATTR = "data-tq-on-click";
27
+ export declare const RUNTIME_FILE_NAME = "tq-state";
28
+ export type StateValue = string | number | boolean | null;
29
+ export type ComparisonOperator = '===' | '!==' | '<' | '<=' | '>' | '>=';
30
+ export type BinaryOperator = '||' | '&&' | ComparisonOperator | '+' | '-';
31
+ export type StateExpression = {
32
+ kind: 'literal';
33
+ value: StateValue;
34
+ } | {
35
+ kind: 'state';
36
+ name: string;
37
+ } | {
38
+ kind: 'not';
39
+ operand: StateExpression;
40
+ } | {
41
+ kind: 'binary';
42
+ operator: BinaryOperator;
43
+ left: StateExpression;
44
+ right: StateExpression;
45
+ };
46
+ export interface StateAssignment {
47
+ name: string;
48
+ value: StateExpression;
49
+ }
50
+ export interface ClassBinding {
51
+ className: string;
52
+ condition: StateExpression;
53
+ }
54
+ export declare const isStateName: (name: string) => boolean;
55
+ export declare const isBindableClassName: (name: string) => boolean;
56
+ export declare const isStateValue: (value: unknown) => value is StateValue;
57
+ export declare const literal: (value: StateValue) => StateExpression;
58
+ export declare const state: (name: string) => StateExpression;
59
+ export declare const not: (operand: StateExpression) => StateExpression;
60
+ export declare const binary: (operator: BinaryOperator, left: StateExpression, right: StateExpression) => StateExpression;
61
+ export declare const stateNamesOf: (expression: StateExpression, names?: Set<string>) => Set<string>;
62
+ export declare const printValue: (value: StateValue) => string;
63
+ export declare const printExpression: (expression: StateExpression) => string;
64
+ export declare const printAssignments: (assignments: StateAssignment[]) => string;
65
+ export declare const printClassBindings: (bindings: ClassBinding[]) => string;
66
+ /** The same meaning the runtime gives an expression, for the page's first paint. */
67
+ export declare const evaluateExpression: (expression: StateExpression, values: Record<string, StateValue>) => unknown;
68
+ /**
69
+ * An attribute value as the HTML printer must receive it: it writes values
70
+ * between double quotes and escapes nothing. `&&` and `<` stay readable; an
71
+ * ampersand that could start a character reference does not.
72
+ */
73
+ export declare const escapeAttributeValue: (value: string) => string;
74
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/state-bindings/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,eAAO,MAAM,UAAU,kBAAkB,CAAA;AACzC,eAAO,MAAM,UAAU,kBAAkB,CAAA;AACzC,eAAO,MAAM,SAAS,iBAAiB,CAAA;AACvC,eAAO,MAAM,OAAO,eAAe,CAAA;AACnC,eAAO,MAAM,UAAU,kBAAkB,CAAA;AACzC,eAAO,MAAM,UAAU,qBAAqB,CAAA;AAE5C,eAAO,MAAM,iBAAiB,aAAa,CAAA;AAE3C,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAEzD,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;AACxE,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAA;AAEzE,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,GACtC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAA;AAE/F,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,eAAe,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,eAAe,CAAA;CAC3B;AAID,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,OACwB,CAAA;AAEnE,eAAO,MAAM,mBAAmB,SAAU,MAAM,KAAG,OAAsC,CAAA;AAEzF,eAAO,MAAM,YAAY,UAAW,OAAO,wBAIY,CAAA;AAEvD,eAAO,MAAM,OAAO,UAAW,UAAU,KAAG,eAA+C,CAAA;AAC3F,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,eAA4C,CAAA;AACjF,eAAO,MAAM,GAAG,YAAa,eAAe,KAAG,eAA6C,CAAA;AAC5F,eAAO,MAAM,MAAM,aACP,cAAc,QAClB,eAAe,SACd,eAAe,KACrB,eAA8D,CAAA;AAEjE,eAAO,MAAM,YAAY,eAAgB,eAAe,qCAgBvD,CAAA;AA6BD,eAAO,MAAM,UAAU,UAAW,UAAU,KAAG,MAK9C,CAAA;AAED,eAAO,MAAM,eAAe,eAAgB,eAAe,KAAG,MAkB7D,CAAA;AAED,eAAO,MAAM,gBAAgB,gBAAiB,eAAe,EAAE,KAAG,MACsB,CAAA;AAExF,eAAO,MAAM,kBAAkB,aAAc,YAAY,EAAE,KAAG,MAG/C,CAAA;AAEf,oFAAoF;AACpF,eAAO,MAAM,kBAAkB,eACjB,eAAe,UACnB,OAAO,MAAM,EAAE,UAAU,CAAC,KACjC,OAyCF,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,UAAW,MAAM,KAAG,MACc,CAAA"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ /**
3
+ * State bindings of the static HTML export: the attributes a downloaded page
4
+ * carries so that clicks open menus, switch tabs and restyle elements, and the
5
+ * small expression language they are written in. The HTML generator writes
6
+ * them (teleport-plugin-html-base-component), the one runtime file a download
7
+ * ships (`tq-state.js`, teleport-project-generator-html) reads them back.
8
+ *
9
+ * data-tq-scope="Navigation" a page root or a component instance:
10
+ * data-tq-state="menuOpen = false" its own store, with its starting values
11
+ * data-tq-if="menuOpen" shown while true; `hidden` when it starts false
12
+ * data-tq-class="active: tab === 0" the class is on while true
13
+ * data-tq-on-click="menuOpen = !menuOpen"
14
+ * data-tq-slot content a parent put into a component:
15
+ * it reads the parent's store
16
+ *
17
+ * The language has literals (numbers, 'quoted strings', true, false, null),
18
+ * state names, `!`, `+ -`, the six comparisons and `&& ||`, with JavaScript's
19
+ * meaning. Nothing is ever evaluated as JavaScript, so a page keeps working
20
+ * under a strict Content-Security-Policy.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.escapeAttributeValue = exports.evaluateExpression = exports.printClassBindings = exports.printAssignments = exports.printExpression = exports.printValue = exports.stateNamesOf = exports.binary = exports.not = exports.state = exports.literal = exports.isStateValue = exports.isBindableClassName = exports.isStateName = exports.RUNTIME_FILE_NAME = exports.CLICK_ATTR = exports.CLASS_ATTR = exports.IF_ATTR = exports.SLOT_ATTR = exports.STATE_ATTR = exports.SCOPE_ATTR = void 0;
24
+ exports.SCOPE_ATTR = 'data-tq-scope';
25
+ exports.STATE_ATTR = 'data-tq-state';
26
+ exports.SLOT_ATTR = 'data-tq-slot';
27
+ exports.IF_ATTR = 'data-tq-if';
28
+ exports.CLASS_ATTR = 'data-tq-class';
29
+ exports.CLICK_ATTR = 'data-tq-on-click';
30
+ exports.RUNTIME_FILE_NAME = 'tq-state';
31
+ var RESERVED_WORDS = ['true', 'false', 'null'];
32
+ var isStateName = function (name) {
33
+ return /^[A-Za-z_$][\w$]*$/.test(name) && !RESERVED_WORDS.includes(name);
34
+ };
35
+ exports.isStateName = isStateName;
36
+ var isBindableClassName = function (name) { return /^[^\s:;'"\\]+$/.test(name); };
37
+ exports.isBindableClassName = isBindableClassName;
38
+ var isStateValue = function (value) {
39
+ return value === null ||
40
+ typeof value === 'string' ||
41
+ typeof value === 'boolean' ||
42
+ (typeof value === 'number' && Number.isFinite(value));
43
+ };
44
+ exports.isStateValue = isStateValue;
45
+ var literal = function (value) { return ({ kind: 'literal', value: value }); };
46
+ exports.literal = literal;
47
+ var state = function (name) { return ({ kind: 'state', name: name }); };
48
+ exports.state = state;
49
+ var not = function (operand) { return ({ kind: 'not', operand: operand }); };
50
+ exports.not = not;
51
+ var binary = function (operator, left, right) { return ({ kind: 'binary', operator: operator, left: left, right: right }); };
52
+ exports.binary = binary;
53
+ var stateNamesOf = function (expression, names) {
54
+ if (names === void 0) { names = new Set(); }
55
+ switch (expression.kind) {
56
+ case 'state':
57
+ names.add(expression.name);
58
+ break;
59
+ case 'not':
60
+ (0, exports.stateNamesOf)(expression.operand, names);
61
+ break;
62
+ case 'binary':
63
+ (0, exports.stateNamesOf)(expression.left, names);
64
+ (0, exports.stateNamesOf)(expression.right, names);
65
+ break;
66
+ default:
67
+ break;
68
+ }
69
+ return names;
70
+ };
71
+ exports.stateNamesOf = stateNamesOf;
72
+ var PRECEDENCE = {
73
+ '||': 1,
74
+ '&&': 2,
75
+ '===': 3,
76
+ '!==': 3,
77
+ '<': 3,
78
+ '<=': 3,
79
+ '>': 3,
80
+ '>=': 3,
81
+ '+': 4,
82
+ '-': 4,
83
+ };
84
+ var UNARY_PRECEDENCE = 5;
85
+ var PRIMARY_PRECEDENCE = 6;
86
+ var precedenceOf = function (expression) {
87
+ if (expression.kind === 'binary') {
88
+ return PRECEDENCE[expression.operator];
89
+ }
90
+ return expression.kind === 'not' ? UNARY_PRECEDENCE : PRIMARY_PRECEDENCE;
91
+ };
92
+ var printOperand = function (expression, lowestUnwrapped) {
93
+ return precedenceOf(expression) < lowestUnwrapped
94
+ ? "(".concat((0, exports.printExpression)(expression), ")")
95
+ : (0, exports.printExpression)(expression);
96
+ };
97
+ var printValue = function (value) {
98
+ if (typeof value === 'string') {
99
+ return "'".concat(value.replace(/[\\']/g, '\\$&'), "'");
100
+ }
101
+ return String(value);
102
+ };
103
+ exports.printValue = printValue;
104
+ var printExpression = function (expression) {
105
+ switch (expression.kind) {
106
+ case 'literal':
107
+ return (0, exports.printValue)(expression.value);
108
+ case 'state':
109
+ return expression.name;
110
+ case 'not':
111
+ return "!".concat(printOperand(expression.operand, UNARY_PRECEDENCE));
112
+ case 'binary': {
113
+ var level = PRECEDENCE[expression.operator];
114
+ var chains = expression.operator === '||' || expression.operator === '&&';
115
+ var left = printOperand(expression.left, level === 3 ? level + 1 : level);
116
+ var right = printOperand(expression.right, chains ? level : level + 1);
117
+ return "".concat(left, " ").concat(expression.operator, " ").concat(right);
118
+ }
119
+ default:
120
+ throw new Error("Unknown state expression ".concat(JSON.stringify(expression)));
121
+ }
122
+ };
123
+ exports.printExpression = printExpression;
124
+ var printAssignments = function (assignments) {
125
+ return assignments.map(function (_a) {
126
+ var name = _a.name, value = _a.value;
127
+ return "".concat(name, " = ").concat((0, exports.printExpression)(value));
128
+ }).join('; ');
129
+ };
130
+ exports.printAssignments = printAssignments;
131
+ var printClassBindings = function (bindings) {
132
+ return bindings
133
+ .map(function (_a) {
134
+ var className = _a.className, condition = _a.condition;
135
+ return "".concat(className, ": ").concat((0, exports.printExpression)(condition));
136
+ })
137
+ .join('; ');
138
+ };
139
+ exports.printClassBindings = printClassBindings;
140
+ /** The same meaning the runtime gives an expression, for the page's first paint. */
141
+ var evaluateExpression = function (expression, values) {
142
+ switch (expression.kind) {
143
+ case 'literal':
144
+ return expression.value;
145
+ case 'state':
146
+ return Object.prototype.hasOwnProperty.call(values, expression.name)
147
+ ? values[expression.name]
148
+ : undefined;
149
+ case 'not':
150
+ return !(0, exports.evaluateExpression)(expression.operand, values);
151
+ case 'binary': {
152
+ var left = (0, exports.evaluateExpression)(expression.left, values);
153
+ var right = (0, exports.evaluateExpression)(expression.right, values);
154
+ switch (expression.operator) {
155
+ case '||':
156
+ return left || right;
157
+ case '&&':
158
+ return left && right;
159
+ case '===':
160
+ return left === right;
161
+ case '!==':
162
+ return left !== right;
163
+ case '<':
164
+ return left < right;
165
+ case '<=':
166
+ return left <= right;
167
+ case '>':
168
+ return left > right;
169
+ case '>=':
170
+ return left >= right;
171
+ case '+':
172
+ return left + right;
173
+ case '-':
174
+ return left - right;
175
+ default:
176
+ throw new Error("Unknown state operator ".concat(expression.operator));
177
+ }
178
+ }
179
+ default:
180
+ throw new Error("Unknown state expression ".concat(JSON.stringify(expression)));
181
+ }
182
+ };
183
+ exports.evaluateExpression = evaluateExpression;
184
+ /**
185
+ * An attribute value as the HTML printer must receive it: it writes values
186
+ * between double quotes and escapes nothing. `&&` and `<` stay readable; an
187
+ * ampersand that could start a character reference does not.
188
+ */
189
+ var escapeAttributeValue = function (value) {
190
+ return value.replace(/&(?=[A-Za-z#])/g, '&amp;').replace(/"/g, '&quot;');
191
+ };
192
+ exports.escapeAttributeValue = escapeAttributeValue;
193
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/state-bindings/index.ts"],"names":[],"mappings":"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"}