@pibbl/core 0.0.2 → 0.0.3-alpha.85.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.
Files changed (233) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/textures/index.d.ts +12 -2
  3. package/dist/features/textures/index.js +33 -1
  4. package/dist/features/textures/index.js.map +2 -2
  5. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  6. package/dist/features/textures/lib/chemical-field.js +154 -0
  7. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  8. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  9. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  10. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  11. package/dist/features/textures/lib/definitions.d.ts +3 -18
  12. package/dist/features/textures/lib/definitions.js +15 -20
  13. package/dist/features/textures/lib/definitions.js.map +2 -2
  14. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  15. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  16. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  17. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  18. package/dist/features/textures/lib/gray-scott.js +39 -0
  19. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  20. package/dist/features/textures/lib/patterns.d.ts +123 -0
  21. package/dist/features/textures/lib/patterns.js +344 -0
  22. package/dist/features/textures/lib/patterns.js.map +7 -0
  23. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  24. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  25. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  26. package/dist/features/textures/lib/simulation.d.ts +10 -4
  27. package/dist/features/textures/lib/simulation.js +23 -13
  28. package/dist/features/textures/lib/simulation.js.map +2 -2
  29. package/dist/features/viz/index.d.ts +55 -6
  30. package/dist/features/viz/index.js +107 -2
  31. package/dist/features/viz/index.js.map +2 -2
  32. package/dist/features/viz/inspection/bar.d.ts +79 -0
  33. package/dist/features/viz/inspection/bar.js +49 -0
  34. package/dist/features/viz/inspection/bar.js.map +7 -0
  35. package/dist/features/viz/inspection/candle.d.ts +156 -0
  36. package/dist/features/viz/inspection/candle.js +120 -0
  37. package/dist/features/viz/inspection/candle.js.map +7 -0
  38. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  39. package/dist/features/viz/inspection/capture.d.ts +16 -0
  40. package/dist/features/viz/inspection/capture.js +49 -0
  41. package/dist/features/viz/inspection/capture.js.map +7 -0
  42. package/dist/features/viz/inspection/handler.d.ts +36 -0
  43. package/dist/features/viz/inspection/handler.js +91 -0
  44. package/dist/features/viz/inspection/handler.js.map +7 -0
  45. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  46. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  47. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  48. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  49. package/dist/features/viz/inspection/owned-ref.js +99 -0
  50. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  51. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  52. package/dist/features/viz/inspection/painted-point.js +29 -0
  53. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  54. package/dist/features/viz/inspection/queries.d.ts +100 -0
  55. package/dist/features/viz/inspection/queries.js +192 -0
  56. package/dist/features/viz/inspection/queries.js.map +7 -0
  57. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  58. package/dist/features/viz/inspection/volume.d.ts +104 -0
  59. package/dist/features/viz/inspection/volume.js +95 -0
  60. package/dist/features/viz/inspection/volume.js.map +7 -0
  61. package/dist/features/viz/inspection.d.ts +19 -0
  62. package/dist/features/viz/inspection.js +54 -0
  63. package/dist/features/viz/inspection.js.map +7 -0
  64. package/dist/features/viz/inspection.mjs +1 -0
  65. package/dist/features/viz/lib/area-series.d.ts +62 -0
  66. package/dist/features/viz/lib/area-series.js +120 -0
  67. package/dist/features/viz/lib/area-series.js.map +7 -0
  68. package/dist/features/viz/lib/axis.js +1 -1
  69. package/dist/features/viz/lib/axis.js.map +2 -2
  70. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  71. package/dist/features/viz/lib/bar-series.js +16 -1
  72. package/dist/features/viz/lib/bar-series.js.map +2 -2
  73. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  74. package/dist/features/viz/lib/baseline-series.js +136 -0
  75. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  76. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  77. package/dist/features/viz/lib/candlestick-series.js +150 -0
  78. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  79. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  80. package/dist/features/viz/lib/censored-point-series.js +129 -0
  81. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  82. package/dist/features/viz/lib/color-context.d.ts +4 -0
  83. package/dist/features/viz/lib/color-context.js +41 -0
  84. package/dist/features/viz/lib/color-context.js.map +7 -0
  85. package/dist/features/viz/lib/color-math.d.ts +4 -0
  86. package/dist/features/viz/lib/color-math.js +31 -0
  87. package/dist/features/viz/lib/color-math.js.map +7 -0
  88. package/dist/features/viz/lib/color-types.d.ts +53 -0
  89. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  90. package/dist/features/viz/lib/curve-definition.js +148 -0
  91. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  92. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  93. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  94. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  95. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  96. package/dist/features/viz/lib/domain-navigation.js +77 -0
  97. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  98. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  99. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  100. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  101. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  102. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  103. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  104. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  105. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  106. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  107. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  108. package/dist/features/viz/lib/financial-comparison.js +98 -0
  109. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  110. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  111. package/dist/features/viz/lib/financial-geometry.js +67 -0
  112. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  113. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  114. package/dist/features/viz/lib/financial-indicators.js +135 -0
  115. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  116. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  117. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  118. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  119. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  120. package/dist/features/viz/lib/hover-data.js +5 -2
  121. package/dist/features/viz/lib/hover-data.js.map +2 -2
  122. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  123. package/dist/features/viz/lib/interval-band-series.js +136 -0
  124. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  125. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  126. package/dist/features/viz/lib/interval-diamond-series.js +124 -0
  127. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  128. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  129. package/dist/features/viz/lib/interval-series.js +158 -0
  130. package/dist/features/viz/lib/interval-series.js.map +7 -0
  131. package/dist/features/viz/lib/line-series.d.ts +1 -1
  132. package/dist/features/viz/lib/line-series.js +47 -28
  133. package/dist/features/viz/lib/line-series.js.map +2 -2
  134. package/dist/features/viz/lib/linear-scale.js +1 -1
  135. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  136. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  137. package/dist/features/viz/lib/monotone-curve.js +63 -0
  138. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  139. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  140. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  141. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  142. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  143. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  144. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  145. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  146. package/dist/features/viz/lib/paired-series.js +93 -0
  147. package/dist/features/viz/lib/paired-series.js.map +7 -0
  148. package/dist/features/viz/lib/plot-series.js +11 -6
  149. package/dist/features/viz/lib/plot-series.js.map +2 -2
  150. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  151. package/dist/features/viz/lib/point-series.d.ts +1 -1
  152. package/dist/features/viz/lib/point-series.js +36 -9
  153. package/dist/features/viz/lib/point-series.js.map +2 -2
  154. package/dist/features/viz/lib/point-types.d.ts +5 -2
  155. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  156. package/dist/features/viz/lib/scale-ticks.js +21 -6
  157. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  158. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  159. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  160. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  161. package/dist/features/viz/lib/series-position.d.ts +12 -0
  162. package/dist/features/viz/lib/series-position.js +44 -0
  163. package/dist/features/viz/lib/series-position.js.map +7 -0
  164. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  165. package/dist/features/viz/lib/step-curves.js +53 -0
  166. package/dist/features/viz/lib/step-curves.js.map +7 -0
  167. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  168. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  169. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  170. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  171. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  172. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  173. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  174. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  175. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  176. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  177. package/dist/features/viz/lib/trajectory-series.js +111 -0
  178. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  179. package/dist/features/viz/lib/types.d.ts +20 -4
  180. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  181. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  182. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  183. package/dist/features/viz/lib/volume-series.js +117 -0
  184. package/dist/features/viz/lib/volume-series.js.map +7 -0
  185. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  186. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  187. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  188. package/dist/filters/emboss-gpu.d.ts +4 -0
  189. package/dist/filters/emboss-gpu.js +39 -0
  190. package/dist/filters/emboss-gpu.js.map +7 -0
  191. package/dist/filters/emboss.d.ts +32 -0
  192. package/dist/filters/emboss.js +106 -0
  193. package/dist/filters/emboss.js.map +7 -0
  194. package/dist/filters/reflection-gpu.d.ts +3 -1
  195. package/dist/filters/reflection-gpu.js +5 -2
  196. package/dist/filters/reflection-gpu.js.map +2 -2
  197. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  198. package/dist/filters/render-emboss-boundary.js +131 -0
  199. package/dist/filters/render-emboss-boundary.js.map +7 -0
  200. package/dist/filters.d.ts +2 -0
  201. package/dist/filters.js +2 -0
  202. package/dist/filters.js.map +2 -2
  203. package/dist/index.d.ts +2 -0
  204. package/dist/index.js +3 -0
  205. package/dist/index.js.map +2 -2
  206. package/dist/internal.d.ts +2 -0
  207. package/dist/internal.js +4 -0
  208. package/dist/internal.js.map +2 -2
  209. package/dist/lib/events/event-facade.d.ts +13 -0
  210. package/dist/lib/events/event-facade.js +23 -0
  211. package/dist/lib/events/event-facade.js.map +2 -2
  212. package/dist/lib/events/propagation.js +19 -14
  213. package/dist/lib/events/propagation.js.map +2 -2
  214. package/dist/lib/execute-render.js +13 -0
  215. package/dist/lib/execute-render.js.map +2 -2
  216. package/dist/lib/recording/recording.d.ts +43 -0
  217. package/dist/lib/recording/recording.js +555 -0
  218. package/dist/lib/recording/recording.js.map +7 -0
  219. package/dist/lib/recording/types.d.ts +118 -0
  220. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  221. package/dist/lib/recording/wasm-bytes.js +5 -0
  222. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  223. package/dist/lib/recording/worker-source.d.ts +1 -0
  224. package/dist/lib/recording/worker-source.js +5 -0
  225. package/dist/lib/recording/worker-source.js.map +7 -0
  226. package/dist/lib/render-transaction.d.ts +5 -2
  227. package/dist/lib/render-transaction.js +23 -1
  228. package/dist/lib/render-transaction.js.map +2 -2
  229. package/dist/lib/series-inspection-frame.d.ts +18 -0
  230. package/dist/lib/series-inspection-frame.js +70 -0
  231. package/dist/lib/series-inspection-frame.js.map +7 -0
  232. package/dist/lib/types.d.ts +6 -0
  233. package/package.json +10 -2
@@ -1,7 +1,9 @@
1
1
  class RootRenderTransaction {
2
2
  publications = /* @__PURE__ */ new Set();
3
3
  callbacks = /* @__PURE__ */ new Set();
4
+ afterFinishCallbacks = /* @__PURE__ */ new Set();
4
5
  result;
6
+ afterFinishDelivered = false;
5
7
  onPublish(callback) {
6
8
  if (this.result !== void 0) {
7
9
  if (this.result) callback();
@@ -11,6 +13,13 @@ class RootRenderTransaction {
11
13
  if (this.result !== void 0) callback(this.result);
12
14
  else this.callbacks.add(callback);
13
15
  }
16
+ onAfterFinish(callback) {
17
+ if (this.afterFinishDelivered) {
18
+ callback(this.result);
19
+ } else {
20
+ this.afterFinishCallbacks.add(callback);
21
+ }
22
+ }
14
23
  finish(success) {
15
24
  if (this.result !== void 0) return;
16
25
  const errors = [];
@@ -36,8 +45,21 @@ class RootRenderTransaction {
36
45
  errors.push(error);
37
46
  }
38
47
  }
48
+ while (this.afterFinishCallbacks.size) {
49
+ const afterFinishCallbacks = Array.from(this.afterFinishCallbacks);
50
+ this.afterFinishCallbacks.clear();
51
+ for (const callback of afterFinishCallbacks) {
52
+ try {
53
+ callback(success);
54
+ } catch (error) {
55
+ errors.push(error);
56
+ }
57
+ }
58
+ }
59
+ this.afterFinishDelivered = true;
39
60
  if (errors.length === 1) throw errors[0];
40
- if (errors.length) throw new AggregateError(errors, "Pibbl render completion failed.");
61
+ if (errors.length)
62
+ throw new AggregateError(errors, "Pibbl render completion failed.");
41
63
  }
42
64
  }
43
65
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/render-transaction.ts"],
4
- "sourcesContent": ["import type { PibblRenderTransaction } from './types.js';\n\n/** Root-wide publication precedes focus/policy commit in both render paths. */\nexport class RootRenderTransaction implements PibblRenderTransaction {\n private publications = new Set<() => void>();\n private callbacks = new Set<(success: boolean) => void>();\n private result: boolean | undefined;\n\n onPublish(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.publications.add(callback);\n }\n\n onFinish(callback: (success: boolean) => void): void {\n if (this.result !== undefined) callback(this.result);\n else this.callbacks.add(callback);\n }\n\n finish(success: boolean): void {\n if (this.result !== undefined) return;\n const errors: unknown[] = [];\n if (success) {\n for (const publish of this.publications) {\n try { publish(); } catch (error) { errors.push(error); success = false; break; }\n }\n }\n this.publications.clear();\n this.result = success;\n const callbacks = Array.from(this.callbacks);\n this.callbacks.clear();\n for (const callback of callbacks) {\n try { callback(success); } catch (error) { errors.push(error); }\n }\n if (errors.length === 1) throw errors[0];\n if (errors.length) throw new AggregateError(errors, 'Pibbl render completion failed.');\n }\n}\n"],
5
- "mappings": "AAGO,MAAM,sBAAwD;AAAA,EAC3D,eAAe,oBAAI,IAAgB;AAAA,EACnC,YAAY,oBAAI,IAAgC;AAAA,EAChD;AAAA,EAER,UAAU,UAA4B;AACpC,QAAI,KAAK,WAAW,QAAW;AAC7B,UAAI,KAAK,OAAQ,UAAS;AAAA,IAC5B,MAAO,MAAK,aAAa,IAAI,QAAQ;AAAA,EACvC;AAAA,EAEA,SAAS,UAA4C;AACnD,QAAI,KAAK,WAAW,OAAW,UAAS,KAAK,MAAM;AAAA,QAC9C,MAAK,UAAU,IAAI,QAAQ;AAAA,EAClC;AAAA,EAEA,OAAO,SAAwB;AAC7B,QAAI,KAAK,WAAW,OAAW;AAC/B,UAAM,SAAoB,CAAC;AAC3B,QAAI,SAAS;AACX,iBAAW,WAAW,KAAK,cAAc;AACvC,YAAI;AAAE,kBAAQ;AAAA,QAAG,SAAS,OAAO;AAAE,iBAAO,KAAK,KAAK;AAAG,oBAAU;AAAO;AAAA,QAAO;AAAA,MACjF;AAAA,IACF;AACA,SAAK,aAAa,MAAM;AACxB,SAAK,SAAS;AACd,UAAM,YAAY,MAAM,KAAK,KAAK,SAAS;AAC3C,SAAK,UAAU,MAAM;AACrB,eAAW,YAAY,WAAW;AAChC,UAAI;AAAE,iBAAS,OAAO;AAAA,MAAG,SAAS,OAAO;AAAE,eAAO,KAAK,KAAK;AAAA,MAAG;AAAA,IACjE;AACA,QAAI,OAAO,WAAW,EAAG,OAAM,OAAO,CAAC;AACvC,QAAI,OAAO,OAAQ,OAAM,IAAI,eAAe,QAAQ,iCAAiC;AAAA,EACvF;AACF;",
4
+ "sourcesContent": ["import type { PibblRenderTransaction } from \"./types.js\";\n\n/** Root-wide publications and ordinary commit callbacks precede completion observers. */\nexport class RootRenderTransaction implements PibblRenderTransaction {\n private publications = new Set<() => void>();\n private callbacks = new Set<(success: boolean) => void>();\n private afterFinishCallbacks = new Set<(success: boolean) => void>();\n private result: boolean | undefined;\n private afterFinishDelivered = false;\n\n onPublish(callback: () => void): void {\n if (this.result !== undefined) {\n if (this.result) callback();\n } else this.publications.add(callback);\n }\n\n onFinish(callback: (success: boolean) => void): void {\n if (this.result !== undefined) callback(this.result);\n else this.callbacks.add(callback);\n }\n\n onAfterFinish(callback: (success: boolean) => void): void {\n if (this.afterFinishDelivered) {\n callback(this.result!);\n } else {\n this.afterFinishCallbacks.add(callback);\n }\n }\n\n finish(success: boolean): void {\n if (this.result !== undefined) return;\n const errors: unknown[] = [];\n if (success) {\n for (const publish of this.publications) {\n try {\n publish();\n } catch (error) {\n errors.push(error);\n success = false;\n break;\n }\n }\n }\n this.publications.clear();\n this.result = success;\n const callbacks = Array.from(this.callbacks);\n this.callbacks.clear();\n for (const callback of callbacks) {\n try {\n callback(success);\n } catch (error) {\n errors.push(error);\n }\n }\n while (this.afterFinishCallbacks.size) {\n const afterFinishCallbacks = Array.from(this.afterFinishCallbacks);\n this.afterFinishCallbacks.clear();\n for (const callback of afterFinishCallbacks) {\n try {\n callback(success);\n } catch (error) {\n errors.push(error);\n }\n }\n }\n this.afterFinishDelivered = true;\n if (errors.length === 1) throw errors[0];\n if (errors.length)\n throw new AggregateError(errors, \"Pibbl render completion failed.\");\n }\n}\n"],
5
+ "mappings": "AAGO,MAAM,sBAAwD;AAAA,EAC3D,eAAe,oBAAI,IAAgB;AAAA,EACnC,YAAY,oBAAI,IAAgC;AAAA,EAChD,uBAAuB,oBAAI,IAAgC;AAAA,EAC3D;AAAA,EACA,uBAAuB;AAAA,EAE/B,UAAU,UAA4B;AACpC,QAAI,KAAK,WAAW,QAAW;AAC7B,UAAI,KAAK,OAAQ,UAAS;AAAA,IAC5B,MAAO,MAAK,aAAa,IAAI,QAAQ;AAAA,EACvC;AAAA,EAEA,SAAS,UAA4C;AACnD,QAAI,KAAK,WAAW,OAAW,UAAS,KAAK,MAAM;AAAA,QAC9C,MAAK,UAAU,IAAI,QAAQ;AAAA,EAClC;AAAA,EAEA,cAAc,UAA4C;AACxD,QAAI,KAAK,sBAAsB;AAC7B,eAAS,KAAK,MAAO;AAAA,IACvB,OAAO;AACL,WAAK,qBAAqB,IAAI,QAAQ;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,OAAO,SAAwB;AAC7B,QAAI,KAAK,WAAW,OAAW;AAC/B,UAAM,SAAoB,CAAC;AAC3B,QAAI,SAAS;AACX,iBAAW,WAAW,KAAK,cAAc;AACvC,YAAI;AACF,kBAAQ;AAAA,QACV,SAAS,OAAO;AACd,iBAAO,KAAK,KAAK;AACjB,oBAAU;AACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,SAAK,aAAa,MAAM;AACxB,SAAK,SAAS;AACd,UAAM,YAAY,MAAM,KAAK,KAAK,SAAS;AAC3C,SAAK,UAAU,MAAM;AACrB,eAAW,YAAY,WAAW;AAChC,UAAI;AACF,iBAAS,OAAO;AAAA,MAClB,SAAS,OAAO;AACd,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AACA,WAAO,KAAK,qBAAqB,MAAM;AACrC,YAAM,uBAAuB,MAAM,KAAK,KAAK,oBAAoB;AACjE,WAAK,qBAAqB,MAAM;AAChC,iBAAW,YAAY,sBAAsB;AAC3C,YAAI;AACF,mBAAS,OAAO;AAAA,QAClB,SAAS,OAAO;AACd,iBAAO,KAAK,KAAK;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AACA,SAAK,uBAAuB;AAC5B,QAAI,OAAO,WAAW,EAAG,OAAM,OAAO,CAAC;AACvC,QAAI,OAAO;AACT,YAAM,IAAI,eAAe,QAAQ,iCAAiC;AAAA,EACtE;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,18 @@
1
+ import type { PibblClippingStackEntry } from "./types.js";
2
+ /** Private geometry/ownership seam; no inspection algorithms enter core rendering.
3
+ * @returns Captured receiver ownership and lazily composed root geometry.
4
+ * @see {@link PibblClippingStackEntry}
5
+ */
6
+ export declare function captureSeriesInspectionFrame(): {
7
+ receiver: import("./types.js").PibblComponentRefs<any>;
8
+ onDispose: (callback: () => void) => void;
9
+ onFinish: (callback: (success: boolean) => void) => void;
10
+ alive: () => boolean;
11
+ generation: () => number;
12
+ resolve(): {
13
+ transform: DOMMatrix;
14
+ clips: PibblClippingStackEntry[];
15
+ generation: number;
16
+ canvas: HTMLCanvasElement;
17
+ } | undefined;
18
+ };
@@ -0,0 +1,70 @@
1
+ import { GLOBAL_STATE } from "./global-state.js";
2
+ import { requireHookContext } from "./hooks/hook-slot.js";
3
+ import { getCurrentWorldTransform } from "./render-target.js";
4
+ import { PibblPaintEntryKind } from "./events/paint-entry.js";
5
+ function captureSeriesInspectionFrame() {
6
+ const { componentRefs, pibblInstance } = requireHookContext();
7
+ const localTransform = new DOMMatrix(
8
+ Array.from(getCurrentWorldTransform().toFloat64Array())
9
+ );
10
+ const localClips = GLOBAL_STATE.clippingStack.map((clip) => ({
11
+ ...clip,
12
+ path: new Path2D(clip.path),
13
+ transform: new DOMMatrix(Array.from(clip.transform.toFloat64Array()))
14
+ }));
15
+ const transaction = GLOBAL_STATE.renderTransaction;
16
+ return {
17
+ receiver: componentRefs,
18
+ onDispose: (callback) => componentRefs.teardowns.add(callback),
19
+ onFinish: (callback) => transaction.onFinish(callback),
20
+ alive: () => !componentRefs.teardowns.closed && !pibblInstance.mainTeardowns.closed,
21
+ generation: () => pibblInstance.eventRoot.rootInstance?.committedRenderGeneration ?? 0,
22
+ resolve() {
23
+ let owner = pibblInstance;
24
+ let transform = new DOMMatrix(
25
+ Array.from(localTransform.toFloat64Array())
26
+ );
27
+ let clips = localClips.slice();
28
+ while (owner !== owner.eventRoot.rootInstance) {
29
+ const parent = owner.parent && GLOBAL_STATE.pibblInstances.get(owner.parent);
30
+ if (!parent) return void 0;
31
+ const bridge = [...parent.paintEntries].find(
32
+ (entry) => entry.paintKind !== PibblPaintEntryKind.Path && entry.instance === owner
33
+ );
34
+ if (!bridge || bridge.paintKind === PibblPaintEntryKind.Path)
35
+ return void 0;
36
+ const outer = bridge.transform;
37
+ clips = clips.map((clip) => ({
38
+ ...clip,
39
+ transform: outer.multiply(clip.transform)
40
+ }));
41
+ clips.push(
42
+ ...bridge.clippingStack.map((clip) => ({
43
+ ...clip,
44
+ path: new Path2D(clip.path),
45
+ transform: new DOMMatrix(
46
+ Array.from(clip.transform.toFloat64Array())
47
+ )
48
+ }))
49
+ );
50
+ clips.push({
51
+ path: new Path2D(bridge.bounds),
52
+ transform: new DOMMatrix(Array.from(outer.toFloat64Array())),
53
+ fillRule: "nonzero"
54
+ });
55
+ transform = outer.multiply(transform);
56
+ owner = parent;
57
+ }
58
+ return {
59
+ transform,
60
+ clips,
61
+ generation: owner.committedRenderGeneration ?? 0,
62
+ canvas: owner.canvas
63
+ };
64
+ }
65
+ };
66
+ }
67
+ export {
68
+ captureSeriesInspectionFrame
69
+ };
70
+ //# sourceMappingURL=series-inspection-frame.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/lib/series-inspection-frame.ts"],
4
+ "sourcesContent": ["import { GLOBAL_STATE } from \"./global-state.js\";\nimport { requireHookContext } from \"./hooks/hook-slot.js\";\nimport { getCurrentWorldTransform } from \"./render-target.js\";\nimport { PibblPaintEntryKind } from \"./events/paint-entry.js\";\nimport type { PibblClippingStackEntry } from \"./types.js\";\n\n/** Private geometry/ownership seam; no inspection algorithms enter core rendering.\n * @returns Captured receiver ownership and lazily composed root geometry.\n * @see {@link PibblClippingStackEntry}\n */\nexport function captureSeriesInspectionFrame() {\n const { componentRefs, pibblInstance } = requireHookContext();\n const localTransform = new DOMMatrix(\n Array.from(getCurrentWorldTransform().toFloat64Array()),\n );\n const localClips = GLOBAL_STATE.clippingStack.map((clip) => ({\n ...clip,\n path: new Path2D(clip.path),\n transform: new DOMMatrix(Array.from(clip.transform.toFloat64Array())),\n }));\n const transaction = GLOBAL_STATE.renderTransaction!;\n return {\n receiver: componentRefs,\n onDispose: (callback: () => void) => componentRefs.teardowns.add(callback),\n onFinish: (callback: (success: boolean) => void) =>\n transaction.onFinish(callback),\n alive: () =>\n !componentRefs.teardowns.closed && !pibblInstance.mainTeardowns.closed,\n generation: () =>\n pibblInstance.eventRoot.rootInstance?.committedRenderGeneration ?? 0,\n resolve() {\n let owner = pibblInstance;\n let transform = new DOMMatrix(\n Array.from(localTransform.toFloat64Array()),\n );\n let clips: PibblClippingStackEntry[] = localClips.slice();\n while (owner !== owner.eventRoot.rootInstance) {\n const parent =\n owner.parent && GLOBAL_STATE.pibblInstances.get(owner.parent);\n if (!parent) return undefined;\n const bridge = [...parent.paintEntries].find(\n (entry) =>\n entry.paintKind !== PibblPaintEntryKind.Path &&\n entry.instance === owner,\n );\n if (!bridge || bridge.paintKind === PibblPaintEntryKind.Path)\n return undefined;\n const outer = bridge.transform;\n clips = clips.map((clip) => ({\n ...clip,\n transform: outer.multiply(clip.transform),\n }));\n clips.push(\n ...bridge.clippingStack.map((clip) => ({\n ...clip,\n path: new Path2D(clip.path),\n transform: new DOMMatrix(\n Array.from(clip.transform.toFloat64Array()),\n ),\n })),\n );\n clips.push({\n path: new Path2D(bridge.bounds),\n transform: new DOMMatrix(Array.from(outer.toFloat64Array())),\n fillRule: \"nonzero\",\n });\n transform = outer.multiply(transform);\n owner = parent;\n }\n return {\n transform,\n clips,\n generation: owner.committedRenderGeneration ?? 0,\n canvas: owner.canvas as HTMLCanvasElement,\n };\n },\n };\n}\n"],
5
+ "mappings": "AAAA,SAAS,oBAAoB;AAC7B,SAAS,0BAA0B;AACnC,SAAS,gCAAgC;AACzC,SAAS,2BAA2B;AAO7B,SAAS,+BAA+B;AAC7C,QAAM,EAAE,eAAe,cAAc,IAAI,mBAAmB;AAC5D,QAAM,iBAAiB,IAAI;AAAA,IACzB,MAAM,KAAK,yBAAyB,EAAE,eAAe,CAAC;AAAA,EACxD;AACA,QAAM,aAAa,aAAa,cAAc,IAAI,CAAC,UAAU;AAAA,IAC3D,GAAG;AAAA,IACH,MAAM,IAAI,OAAO,KAAK,IAAI;AAAA,IAC1B,WAAW,IAAI,UAAU,MAAM,KAAK,KAAK,UAAU,eAAe,CAAC,CAAC;AAAA,EACtE,EAAE;AACF,QAAM,cAAc,aAAa;AACjC,SAAO;AAAA,IACL,UAAU;AAAA,IACV,WAAW,CAAC,aAAyB,cAAc,UAAU,IAAI,QAAQ;AAAA,IACzE,UAAU,CAAC,aACT,YAAY,SAAS,QAAQ;AAAA,IAC/B,OAAO,MACL,CAAC,cAAc,UAAU,UAAU,CAAC,cAAc,cAAc;AAAA,IAClE,YAAY,MACV,cAAc,UAAU,cAAc,6BAA6B;AAAA,IACrE,UAAU;AACR,UAAI,QAAQ;AACZ,UAAI,YAAY,IAAI;AAAA,QAClB,MAAM,KAAK,eAAe,eAAe,CAAC;AAAA,MAC5C;AACA,UAAI,QAAmC,WAAW,MAAM;AACxD,aAAO,UAAU,MAAM,UAAU,cAAc;AAC7C,cAAM,SACJ,MAAM,UAAU,aAAa,eAAe,IAAI,MAAM,MAAM;AAC9D,YAAI,CAAC,OAAQ,QAAO;AACpB,cAAM,SAAS,CAAC,GAAG,OAAO,YAAY,EAAE;AAAA,UACtC,CAAC,UACC,MAAM,cAAc,oBAAoB,QACxC,MAAM,aAAa;AAAA,QACvB;AACA,YAAI,CAAC,UAAU,OAAO,cAAc,oBAAoB;AACtD,iBAAO;AACT,cAAM,QAAQ,OAAO;AACrB,gBAAQ,MAAM,IAAI,CAAC,UAAU;AAAA,UAC3B,GAAG;AAAA,UACH,WAAW,MAAM,SAAS,KAAK,SAAS;AAAA,QAC1C,EAAE;AACF,cAAM;AAAA,UACJ,GAAG,OAAO,cAAc,IAAI,CAAC,UAAU;AAAA,YACrC,GAAG;AAAA,YACH,MAAM,IAAI,OAAO,KAAK,IAAI;AAAA,YAC1B,WAAW,IAAI;AAAA,cACb,MAAM,KAAK,KAAK,UAAU,eAAe,CAAC;AAAA,YAC5C;AAAA,UACF,EAAE;AAAA,QACJ;AACA,cAAM,KAAK;AAAA,UACT,MAAM,IAAI,OAAO,OAAO,MAAM;AAAA,UAC9B,WAAW,IAAI,UAAU,MAAM,KAAK,MAAM,eAAe,CAAC,CAAC;AAAA,UAC3D,UAAU;AAAA,QACZ,CAAC;AACD,oBAAY,MAAM,SAAS,SAAS;AACpC,gBAAQ;AAAA,MACV;AACA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA,YAAY,MAAM,6BAA6B;AAAA,QAC/C,QAAQ,MAAM;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -461,6 +461,8 @@ export interface PibblEventRoot {
461
461
  export interface PibblRenderTransaction {
462
462
  onPublish?(callback: () => void): void;
463
463
  onFinish(callback: (success: boolean) => void): void;
464
+ /** Run after all finish callbacks have published their committed state. */
465
+ onAfterFinish?(callback: (success: boolean) => void): void;
464
466
  }
465
467
  export interface PibblFocusPolicyBridge {
466
468
  observeHtmlRegion?(region: HtmlFocusRegion): void;
@@ -529,6 +531,10 @@ export type FillStyle = CanvasRenderingContext2D["fillStyle"] | import('./textur
529
531
  */
530
532
  export type StrokeStyle = CanvasRenderingContext2D["strokeStyle"] | import('./textures/texture.js').TexturePaint;
531
533
  export interface PibblInstance {
534
+ /** Last root traversal published successfully; failed render attempts do not advance it. */
535
+ committedRenderGeneration?: number;
536
+ /** Opt-in root bitmap observers; absent unless a recording is attached. */
537
+ rootFrameObservers?: Set<(success: boolean, generation: number) => void>;
532
538
  canvas: Canvas;
533
539
  controller: PibblController;
534
540
  root: PibblNode;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pibbl/core",
3
3
  "type": "module",
4
- "version": "0.0.2",
4
+ "version": "0.0.3-alpha.85.1",
5
5
  "description": "Canvas 2D component runtime with JSX and createElement authoring",
6
6
  "author": "Ben Lesh <ben@benlesh.com>",
7
7
  "license": "MIT",
@@ -86,6 +86,10 @@
86
86
  "./machines/animation": {
87
87
  "types": "./dist/features/machines/animation.d.ts",
88
88
  "default": "./dist/features/machines/animation.mjs"
89
+ },
90
+ "./viz/inspection": {
91
+ "types": "./dist/features/viz/inspection.d.ts",
92
+ "default": "./dist/features/viz/inspection.mjs"
89
93
  }
90
94
  },
91
95
  "main": "./dist/index.mjs",
@@ -144,6 +148,9 @@
144
148
  ],
145
149
  "machines/animation": [
146
150
  "./dist/features/machines/animation.d.ts"
151
+ ],
152
+ "viz/inspection": [
153
+ "./dist/features/viz/inspection.d.ts"
147
154
  ]
148
155
  }
149
156
  },
@@ -155,8 +162,9 @@
155
162
  "@dimforge/rapier2d-compat": "0.21.0",
156
163
  "assemblyscript": "0.28.20"
157
164
  },
165
+ "pibblAlphaInputHash": "bcffc88fe310d66a1c37d713a3d38515ca2dc01471037e7831a71a660e0049a0",
158
166
  "scripts": {
159
- "build": "node ../../tooling/build-transition-wasm.mjs --check && rimraf dist && tsc -p tsconfig.build.json && node ../../tooling/build-core.mjs",
167
+ "build": "node ../../tooling/build-transition-wasm.mjs --check && node ../../tooling/build-recording-wasm.mjs --check && node ../../tooling/build-recording-worker.mjs --check && rimraf dist && tsc -p tsconfig.build.json && node ../../tooling/build-core.mjs",
160
168
  "dev": "pnpm run build",
161
169
  "test": "vitest"
162
170
  }