@neural-charts/native 0.0.0-stage → 0.1.0-beta.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 (508) hide show
  1. package/README.md +58 -2
  2. package/THIRD-PARTY-NOTICES.md +15 -0
  3. package/docs/guide.md +783 -0
  4. package/library/annular-hit.d.ts +10 -0
  5. package/library/annular-hit.d.ts.map +1 -0
  6. package/library/annular-hit.js +43 -0
  7. package/library/annular-hit.js.map +1 -0
  8. package/library/chart-capabilities.d.ts +326 -0
  9. package/library/chart-capabilities.d.ts.map +1 -0
  10. package/library/chart-capabilities.js +39 -0
  11. package/library/chart-capabilities.js.map +1 -0
  12. package/library/circular-scene.d.ts +55 -0
  13. package/library/circular-scene.d.ts.map +1 -0
  14. package/library/circular-scene.js +39 -0
  15. package/library/circular-scene.js.map +1 -0
  16. package/library/comparison-render.d.ts +18 -0
  17. package/library/comparison-render.d.ts.map +1 -0
  18. package/library/comparison-render.js +33 -0
  19. package/library/comparison-render.js.map +1 -0
  20. package/library/comparison-scene.d.ts +40 -0
  21. package/library/comparison-scene.d.ts.map +1 -0
  22. package/library/comparison-scene.js +77 -0
  23. package/library/comparison-scene.js.map +1 -0
  24. package/library/composition-scene.d.ts +35 -0
  25. package/library/composition-scene.d.ts.map +1 -0
  26. package/library/composition-scene.js +55 -0
  27. package/library/composition-scene.js.map +1 -0
  28. package/library/contour-hit-index.d.ts +15 -0
  29. package/library/contour-hit-index.d.ts.map +1 -0
  30. package/library/contour-hit-index.js +75 -0
  31. package/library/contour-hit-index.js.map +1 -0
  32. package/library/contour-label-anchors.d.ts +9 -0
  33. package/library/contour-label-anchors.d.ts.map +1 -0
  34. package/library/contour-label-anchors.js +20 -0
  35. package/library/contour-label-anchors.js.map +1 -0
  36. package/library/contour-scene.d.ts +10 -0
  37. package/library/contour-scene.d.ts.map +1 -0
  38. package/library/contour-scene.js +76 -0
  39. package/library/contour-scene.js.map +1 -0
  40. package/library/contracts.d.ts +445 -0
  41. package/library/contracts.d.ts.map +1 -0
  42. package/library/contracts.js +2 -0
  43. package/library/contracts.js.map +1 -0
  44. package/library/dendrogram-scene.d.ts +7 -0
  45. package/library/dendrogram-scene.d.ts.map +1 -0
  46. package/library/dendrogram-scene.js +28 -0
  47. package/library/dendrogram-scene.js.map +1 -0
  48. package/library/empty-state.d.ts +8 -0
  49. package/library/empty-state.d.ts.map +1 -0
  50. package/library/empty-state.js +30 -0
  51. package/library/empty-state.js.map +1 -0
  52. package/library/heatmap-hit.d.ts +27 -0
  53. package/library/heatmap-hit.d.ts.map +1 -0
  54. package/library/heatmap-hit.js +56 -0
  55. package/library/heatmap-hit.js.map +1 -0
  56. package/library/heatmap-scene.d.ts +17 -0
  57. package/library/heatmap-scene.d.ts.map +1 -0
  58. package/library/heatmap-scene.js +85 -0
  59. package/library/heatmap-scene.js.map +1 -0
  60. package/library/index.d.ts +14 -0
  61. package/library/index.d.ts.map +1 -0
  62. package/library/index.js +4 -0
  63. package/library/index.js.map +1 -0
  64. package/library/interaction-content.d.ts +4 -0
  65. package/library/interaction-content.d.ts.map +1 -0
  66. package/library/interaction-content.js +28 -0
  67. package/library/interaction-content.js.map +1 -0
  68. package/library/interaction.d.ts +75 -0
  69. package/library/interaction.d.ts.map +1 -0
  70. package/library/interaction.js +523 -0
  71. package/library/interaction.js.map +1 -0
  72. package/library/marker-style.d.ts +24 -0
  73. package/library/marker-style.d.ts.map +1 -0
  74. package/library/marker-style.js +43 -0
  75. package/library/marker-style.js.map +1 -0
  76. package/library/parallel-scene.d.ts +11 -0
  77. package/library/parallel-scene.d.ts.map +1 -0
  78. package/library/parallel-scene.js +44 -0
  79. package/library/parallel-scene.js.map +1 -0
  80. package/library/path-validation.d.ts +3 -0
  81. package/library/path-validation.d.ts.map +1 -0
  82. package/library/path-validation.js +78 -0
  83. package/library/path-validation.js.map +1 -0
  84. package/library/pictorial-hit.d.ts +19 -0
  85. package/library/pictorial-hit.d.ts.map +1 -0
  86. package/library/pictorial-hit.js +73 -0
  87. package/library/pictorial-hit.js.map +1 -0
  88. package/library/pictorial-scene.d.ts +16 -0
  89. package/library/pictorial-scene.d.ts.map +1 -0
  90. package/library/pictorial-scene.js +73 -0
  91. package/library/pictorial-scene.js.map +1 -0
  92. package/library/point-label-placement.d.ts +34 -0
  93. package/library/point-label-placement.d.ts.map +1 -0
  94. package/library/point-label-placement.js +24 -0
  95. package/library/point-label-placement.js.map +1 -0
  96. package/library/polar-grid.d.ts +5 -0
  97. package/library/polar-grid.d.ts.map +1 -0
  98. package/library/polar-grid.js +28 -0
  99. package/library/polar-grid.js.map +1 -0
  100. package/library/polygon-hit.d.ts +18 -0
  101. package/library/polygon-hit.d.ts.map +1 -0
  102. package/library/polygon-hit.js +98 -0
  103. package/library/polygon-hit.js.map +1 -0
  104. package/library/profile-scene.d.ts +11 -0
  105. package/library/profile-scene.d.ts.map +1 -0
  106. package/library/profile-scene.js +51 -0
  107. package/library/profile-scene.js.map +1 -0
  108. package/library/relationship-hit-index.d.ts +12 -0
  109. package/library/relationship-hit-index.d.ts.map +1 -0
  110. package/library/relationship-hit-index.js +87 -0
  111. package/library/relationship-hit-index.js.map +1 -0
  112. package/library/relationship-scene.d.ts +12 -0
  113. package/library/relationship-scene.d.ts.map +1 -0
  114. package/library/relationship-scene.js +62 -0
  115. package/library/relationship-scene.js.map +1 -0
  116. package/library/scene-paint.d.ts +29 -0
  117. package/library/scene-paint.d.ts.map +1 -0
  118. package/library/scene-paint.js +123 -0
  119. package/library/scene-paint.js.map +1 -0
  120. package/library/scene-styles.d.ts +13 -0
  121. package/library/scene-styles.d.ts.map +1 -0
  122. package/library/scene-styles.js +135 -0
  123. package/library/scene-styles.js.map +1 -0
  124. package/library/scene.d.ts +49 -0
  125. package/library/scene.d.ts.map +1 -0
  126. package/library/scene.js +533 -0
  127. package/library/scene.js.map +1 -0
  128. package/library/temporal-hit-index.d.ts +13 -0
  129. package/library/temporal-hit-index.d.ts.map +1 -0
  130. package/library/temporal-hit-index.js +71 -0
  131. package/library/temporal-hit-index.js.map +1 -0
  132. package/library/temporal-scene.d.ts +6 -0
  133. package/library/temporal-scene.d.ts.map +1 -0
  134. package/library/temporal-scene.js +70 -0
  135. package/library/temporal-scene.js.map +1 -0
  136. package/library/tile-index.d.ts +11 -0
  137. package/library/tile-index.d.ts.map +1 -0
  138. package/library/tile-index.js +37 -0
  139. package/library/tile-index.js.map +1 -0
  140. package/library/tilemap-hit.d.ts +11 -0
  141. package/library/tilemap-hit.d.ts.map +1 -0
  142. package/library/tilemap-hit.js +63 -0
  143. package/library/tilemap-hit.js.map +1 -0
  144. package/library/tilemap-scene.d.ts +24 -0
  145. package/library/tilemap-scene.d.ts.map +1 -0
  146. package/library/tilemap-scene.js +125 -0
  147. package/library/tilemap-scene.js.map +1 -0
  148. package/library/uncertainty-scene.d.ts +11 -0
  149. package/library/uncertainty-scene.d.ts.map +1 -0
  150. package/library/uncertainty-scene.js +61 -0
  151. package/library/uncertainty-scene.js.map +1 -0
  152. package/library/venn-hit.d.ts +21 -0
  153. package/library/venn-hit.d.ts.map +1 -0
  154. package/library/venn-hit.js +37 -0
  155. package/library/venn-hit.js.map +1 -0
  156. package/library/venn-scene.d.ts +14 -0
  157. package/library/venn-scene.d.ts.map +1 -0
  158. package/library/venn-scene.js +84 -0
  159. package/library/venn-scene.js.map +1 -0
  160. package/library/wordcloud-scene.d.ts +19 -0
  161. package/library/wordcloud-scene.d.ts.map +1 -0
  162. package/library/wordcloud-scene.js +58 -0
  163. package/library/wordcloud-scene.js.map +1 -0
  164. package/native/activity.d.ts +14 -0
  165. package/native/activity.d.ts.map +1 -0
  166. package/native/activity.js +31 -0
  167. package/native/activity.js.map +1 -0
  168. package/native/bar-labels.d.ts +4 -0
  169. package/native/bar-labels.d.ts.map +1 -0
  170. package/native/bar-labels.js +16 -0
  171. package/native/bar-labels.js.map +1 -0
  172. package/native/bubble-entrance.d.ts +15 -0
  173. package/native/bubble-entrance.d.ts.map +1 -0
  174. package/native/bubble-entrance.js +27 -0
  175. package/native/bubble-entrance.js.map +1 -0
  176. package/native/chart-drilldown.d.ts +57 -0
  177. package/native/chart-drilldown.d.ts.map +1 -0
  178. package/native/chart-drilldown.js +118 -0
  179. package/native/chart-drilldown.js.map +1 -0
  180. package/native/chart-motion.d.ts +69 -0
  181. package/native/chart-motion.d.ts.map +1 -0
  182. package/native/chart-motion.js +165 -0
  183. package/native/chart-motion.js.map +1 -0
  184. package/native/chart-panels-options.d.ts +77 -0
  185. package/native/chart-panels-options.d.ts.map +1 -0
  186. package/native/chart-panels-options.js +2 -0
  187. package/native/chart-panels-options.js.map +1 -0
  188. package/native/chart-panels-state.d.ts +34 -0
  189. package/native/chart-panels-state.d.ts.map +1 -0
  190. package/native/chart-panels-state.js +198 -0
  191. package/native/chart-panels-state.js.map +1 -0
  192. package/native/chart-panels.d.ts +43 -0
  193. package/native/chart-panels.d.ts.map +1 -0
  194. package/native/chart-panels.js +107 -0
  195. package/native/chart-panels.js.map +1 -0
  196. package/native/chart-presentation.d.ts +40 -0
  197. package/native/chart-presentation.d.ts.map +1 -0
  198. package/native/chart-presentation.js +16 -0
  199. package/native/chart-presentation.js.map +1 -0
  200. package/native/chart-type.d.ts +65 -0
  201. package/native/chart-type.d.ts.map +1 -0
  202. package/native/chart-type.js +66 -0
  203. package/native/chart-type.js.map +1 -0
  204. package/native/chart.d.ts +571 -0
  205. package/native/chart.d.ts.map +1 -0
  206. package/native/chart.js +1417 -0
  207. package/native/chart.js.map +1 -0
  208. package/native/circular-options.d.ts +17 -0
  209. package/native/circular-options.d.ts.map +1 -0
  210. package/native/circular-options.js +2 -0
  211. package/native/circular-options.js.map +1 -0
  212. package/native/comparison-data.d.ts +64 -0
  213. package/native/comparison-data.d.ts.map +1 -0
  214. package/native/comparison-data.js +2 -0
  215. package/native/comparison-data.js.map +1 -0
  216. package/native/comparison-format.d.ts +16 -0
  217. package/native/comparison-format.d.ts.map +1 -0
  218. package/native/comparison-format.js +26 -0
  219. package/native/comparison-format.js.map +1 -0
  220. package/native/composition-options.d.ts +18 -0
  221. package/native/composition-options.d.ts.map +1 -0
  222. package/native/composition-options.js +2 -0
  223. package/native/composition-options.js.map +1 -0
  224. package/native/contour-data.d.ts +48 -0
  225. package/native/contour-data.d.ts.map +1 -0
  226. package/native/contour-data.js +2 -0
  227. package/native/contour-data.js.map +1 -0
  228. package/native/contour-format.d.ts +3 -0
  229. package/native/contour-format.d.ts.map +1 -0
  230. package/native/contour-format.js +11 -0
  231. package/native/contour-format.js.map +1 -0
  232. package/native/control-accessibility.d.ts +7 -0
  233. package/native/control-accessibility.d.ts.map +1 -0
  234. package/native/control-accessibility.js +9 -0
  235. package/native/control-accessibility.js.map +1 -0
  236. package/native/data-chart.d.ts +179 -0
  237. package/native/data-chart.d.ts.map +1 -0
  238. package/native/data-chart.js +415 -0
  239. package/native/data-chart.js.map +1 -0
  240. package/native/data-identities.d.ts +10 -0
  241. package/native/data-identities.d.ts.map +1 -0
  242. package/native/data-identities.js +50 -0
  243. package/native/data-identities.js.map +1 -0
  244. package/native/data-options.d.ts +566 -0
  245. package/native/data-options.d.ts.map +1 -0
  246. package/native/data-options.js +2 -0
  247. package/native/data-options.js.map +1 -0
  248. package/native/data-planning.d.ts +84 -0
  249. package/native/data-planning.d.ts.map +1 -0
  250. package/native/data-planning.js +174 -0
  251. package/native/data-planning.js.map +1 -0
  252. package/native/dendrogram-data.d.ts +27 -0
  253. package/native/dendrogram-data.d.ts.map +1 -0
  254. package/native/dendrogram-data.js +2 -0
  255. package/native/dendrogram-data.js.map +1 -0
  256. package/native/dendrogram-labels.d.ts +13 -0
  257. package/native/dendrogram-labels.d.ts.map +1 -0
  258. package/native/dendrogram-labels.js +12 -0
  259. package/native/dendrogram-labels.js.map +1 -0
  260. package/native/drilldown-options.d.ts +62 -0
  261. package/native/drilldown-options.d.ts.map +1 -0
  262. package/native/drilldown-options.js +2 -0
  263. package/native/drilldown-options.js.map +1 -0
  264. package/native/drilldown-state.d.ts +18 -0
  265. package/native/drilldown-state.d.ts.map +1 -0
  266. package/native/drilldown-state.js +130 -0
  267. package/native/drilldown-state.js.map +1 -0
  268. package/native/gauge-entrance.d.ts +8 -0
  269. package/native/gauge-entrance.d.ts.map +1 -0
  270. package/native/gauge-entrance.js +42 -0
  271. package/native/gauge-entrance.js.map +1 -0
  272. package/native/haptics.d.ts +21 -0
  273. package/native/haptics.d.ts.map +1 -0
  274. package/native/haptics.js +66 -0
  275. package/native/haptics.js.map +1 -0
  276. package/native/heatmap-data.d.ts +56 -0
  277. package/native/heatmap-data.d.ts.map +1 -0
  278. package/native/heatmap-data.js +2 -0
  279. package/native/heatmap-data.js.map +1 -0
  280. package/native/index.d.ts +26 -0
  281. package/native/index.d.ts.map +1 -0
  282. package/native/index.js +11 -0
  283. package/native/index.js.map +1 -0
  284. package/native/input-bridge.d.ts +32 -0
  285. package/native/input-bridge.d.ts.map +1 -0
  286. package/native/input-bridge.js +3 -0
  287. package/native/input-bridge.js.map +1 -0
  288. package/native/input-lease.d.ts +23 -0
  289. package/native/input-lease.d.ts.map +1 -0
  290. package/native/input-lease.js +28 -0
  291. package/native/input-lease.js.map +1 -0
  292. package/native/label-contrast.d.ts +7 -0
  293. package/native/label-contrast.d.ts.map +1 -0
  294. package/native/label-contrast.js +33 -0
  295. package/native/label-contrast.js.map +1 -0
  296. package/native/label-halo.d.ts +9 -0
  297. package/native/label-halo.d.ts.map +1 -0
  298. package/native/label-halo.js +23 -0
  299. package/native/label-halo.js.map +1 -0
  300. package/native/label-ink.d.ts +3 -0
  301. package/native/label-ink.d.ts.map +1 -0
  302. package/native/label-ink.js +6 -0
  303. package/native/label-ink.js.map +1 -0
  304. package/native/legend.d.ts +21 -0
  305. package/native/legend.d.ts.map +1 -0
  306. package/native/legend.js +66 -0
  307. package/native/legend.js.map +1 -0
  308. package/native/log-axis-labels.d.ts +6 -0
  309. package/native/log-axis-labels.d.ts.map +1 -0
  310. package/native/log-axis-labels.js +16 -0
  311. package/native/log-axis-labels.js.map +1 -0
  312. package/native/log-options.d.ts +5 -0
  313. package/native/log-options.d.ts.map +1 -0
  314. package/native/log-options.js +6 -0
  315. package/native/log-options.js.map +1 -0
  316. package/native/number-format.d.ts +5 -0
  317. package/native/number-format.d.ts.map +1 -0
  318. package/native/number-format.js +24 -0
  319. package/native/number-format.js.map +1 -0
  320. package/native/observation-format.d.ts +8 -0
  321. package/native/observation-format.d.ts.map +1 -0
  322. package/native/observation-format.js +80 -0
  323. package/native/observation-format.js.map +1 -0
  324. package/native/options-validation.d.ts +8 -0
  325. package/native/options-validation.d.ts.map +1 -0
  326. package/native/options-validation.js +612 -0
  327. package/native/options-validation.js.map +1 -0
  328. package/native/panel-viewport-contract.d.ts +15 -0
  329. package/native/panel-viewport-contract.d.ts.map +1 -0
  330. package/native/panel-viewport-contract.js +86 -0
  331. package/native/panel-viewport-contract.js.map +1 -0
  332. package/native/panel-viewport-sync.d.ts +27 -0
  333. package/native/panel-viewport-sync.d.ts.map +1 -0
  334. package/native/panel-viewport-sync.js +96 -0
  335. package/native/panel-viewport-sync.js.map +1 -0
  336. package/native/parallel-data.d.ts +49 -0
  337. package/native/parallel-data.d.ts.map +1 -0
  338. package/native/parallel-data.js +2 -0
  339. package/native/parallel-data.js.map +1 -0
  340. package/native/parallel-labels.d.ts +20 -0
  341. package/native/parallel-labels.d.ts.map +1 -0
  342. package/native/parallel-labels.js +54 -0
  343. package/native/parallel-labels.js.map +1 -0
  344. package/native/pictorial-data.d.ts +78 -0
  345. package/native/pictorial-data.d.ts.map +1 -0
  346. package/native/pictorial-data.js +2 -0
  347. package/native/pictorial-data.js.map +1 -0
  348. package/native/pictorial-format.d.ts +8 -0
  349. package/native/pictorial-format.d.ts.map +1 -0
  350. package/native/pictorial-format.js +14 -0
  351. package/native/pictorial-format.js.map +1 -0
  352. package/native/pictorial-options.d.ts +2 -0
  353. package/native/pictorial-options.d.ts.map +1 -0
  354. package/native/pictorial-options.js +61 -0
  355. package/native/pictorial-options.js.map +1 -0
  356. package/native/pictorial-paint.d.ts +19 -0
  357. package/native/pictorial-paint.d.ts.map +1 -0
  358. package/native/pictorial-paint.js +31 -0
  359. package/native/pictorial-paint.js.map +1 -0
  360. package/native/plan.d.ts +45 -0
  361. package/native/plan.d.ts.map +1 -0
  362. package/native/plan.js +109 -0
  363. package/native/plan.js.map +1 -0
  364. package/native/profile-data.d.ts +82 -0
  365. package/native/profile-data.d.ts.map +1 -0
  366. package/native/profile-data.js +2 -0
  367. package/native/profile-data.js.map +1 -0
  368. package/native/profile-labels.d.ts +5 -0
  369. package/native/profile-labels.d.ts.map +1 -0
  370. package/native/profile-labels.js +19 -0
  371. package/native/profile-labels.js.map +1 -0
  372. package/native/radial-entrance.d.ts +24 -0
  373. package/native/radial-entrance.d.ts.map +1 -0
  374. package/native/radial-entrance.js +25 -0
  375. package/native/radial-entrance.js.map +1 -0
  376. package/native/radial-layer.d.ts +26 -0
  377. package/native/radial-layer.d.ts.map +1 -0
  378. package/native/radial-layer.js +76 -0
  379. package/native/radial-layer.js.map +1 -0
  380. package/native/reference-labels.d.ts +21 -0
  381. package/native/reference-labels.d.ts.map +1 -0
  382. package/native/reference-labels.js +36 -0
  383. package/native/reference-labels.js.map +1 -0
  384. package/native/reference-options.d.ts +23 -0
  385. package/native/reference-options.d.ts.map +1 -0
  386. package/native/reference-options.js +58 -0
  387. package/native/reference-options.js.map +1 -0
  388. package/native/relationship-data.d.ts +63 -0
  389. package/native/relationship-data.d.ts.map +1 -0
  390. package/native/relationship-data.js +2 -0
  391. package/native/relationship-data.js.map +1 -0
  392. package/native/relationship-format.d.ts +13 -0
  393. package/native/relationship-format.d.ts.map +1 -0
  394. package/native/relationship-format.js +26 -0
  395. package/native/relationship-format.js.map +1 -0
  396. package/native/selection-outlines.d.ts +12 -0
  397. package/native/selection-outlines.d.ts.map +1 -0
  398. package/native/selection-outlines.js +20 -0
  399. package/native/selection-outlines.js.map +1 -0
  400. package/native/temporal-format.d.ts +29 -0
  401. package/native/temporal-format.d.ts.map +1 -0
  402. package/native/temporal-format.js +41 -0
  403. package/native/temporal-format.js.map +1 -0
  404. package/native/text-style.d.ts +16 -0
  405. package/native/text-style.d.ts.map +1 -0
  406. package/native/text-style.js +14 -0
  407. package/native/text-style.js.map +1 -0
  408. package/native/tilemap-color-axis.d.ts +23 -0
  409. package/native/tilemap-color-axis.d.ts.map +1 -0
  410. package/native/tilemap-color-axis.js +77 -0
  411. package/native/tilemap-color-axis.js.map +1 -0
  412. package/native/tilemap-data.d.ts +71 -0
  413. package/native/tilemap-data.d.ts.map +1 -0
  414. package/native/tilemap-data.js +2 -0
  415. package/native/tilemap-data.js.map +1 -0
  416. package/native/tilemap-format.d.ts +3 -0
  417. package/native/tilemap-format.d.ts.map +1 -0
  418. package/native/tilemap-format.js +14 -0
  419. package/native/tilemap-format.js.map +1 -0
  420. package/native/tilemap-selection.d.ts +12 -0
  421. package/native/tilemap-selection.d.ts.map +1 -0
  422. package/native/tilemap-selection.js +8 -0
  423. package/native/tilemap-selection.js.map +1 -0
  424. package/native/time-axis-labels.d.ts +5 -0
  425. package/native/time-axis-labels.d.ts.map +1 -0
  426. package/native/time-axis-labels.js +38 -0
  427. package/native/time-axis-labels.js.map +1 -0
  428. package/native/tooltip-layout.d.ts +16 -0
  429. package/native/tooltip-layout.d.ts.map +1 -0
  430. package/native/tooltip-layout.js +33 -0
  431. package/native/tooltip-layout.js.map +1 -0
  432. package/native/tooltip-metrics.d.ts +4 -0
  433. package/native/tooltip-metrics.d.ts.map +1 -0
  434. package/native/tooltip-metrics.js +11 -0
  435. package/native/tooltip-metrics.js.map +1 -0
  436. package/native/tooltip-motion.d.ts +35 -0
  437. package/native/tooltip-motion.d.ts.map +1 -0
  438. package/native/tooltip-motion.js +36 -0
  439. package/native/tooltip-motion.js.map +1 -0
  440. package/native/tooltip-occupancy.d.ts +21 -0
  441. package/native/tooltip-occupancy.d.ts.map +1 -0
  442. package/native/tooltip-occupancy.js +67 -0
  443. package/native/tooltip-occupancy.js.map +1 -0
  444. package/native/tooltip.d.ts +144 -0
  445. package/native/tooltip.d.ts.map +1 -0
  446. package/native/tooltip.js +146 -0
  447. package/native/tooltip.js.map +1 -0
  448. package/native/uncertainty-data.d.ts +110 -0
  449. package/native/uncertainty-data.d.ts.map +1 -0
  450. package/native/uncertainty-data.js +2 -0
  451. package/native/uncertainty-data.js.map +1 -0
  452. package/native/uncertainty-format.d.ts +3 -0
  453. package/native/uncertainty-format.d.ts.map +1 -0
  454. package/native/uncertainty-format.js +10 -0
  455. package/native/uncertainty-format.js.map +1 -0
  456. package/native/value-labels.d.ts +30 -0
  457. package/native/value-labels.d.ts.map +1 -0
  458. package/native/value-labels.js +206 -0
  459. package/native/value-labels.js.map +1 -0
  460. package/native/variwide-labels.d.ts +14 -0
  461. package/native/variwide-labels.d.ts.map +1 -0
  462. package/native/variwide-labels.js +22 -0
  463. package/native/variwide-labels.js.map +1 -0
  464. package/native/venn-data.d.ts +29 -0
  465. package/native/venn-data.d.ts.map +1 -0
  466. package/native/venn-data.js +2 -0
  467. package/native/venn-data.js.map +1 -0
  468. package/native/viewport-gestures.d.ts +32 -0
  469. package/native/viewport-gestures.d.ts.map +1 -0
  470. package/native/viewport-gestures.js +43 -0
  471. package/native/viewport-gestures.js.map +1 -0
  472. package/native/viewport-motion.d.ts +67 -0
  473. package/native/viewport-motion.d.ts.map +1 -0
  474. package/native/viewport-motion.js +182 -0
  475. package/native/viewport-motion.js.map +1 -0
  476. package/native/viewport-state.d.ts +20 -0
  477. package/native/viewport-state.d.ts.map +1 -0
  478. package/native/viewport-state.js +14 -0
  479. package/native/viewport-state.js.map +1 -0
  480. package/native/waterfall-appearance.d.ts +8 -0
  481. package/native/waterfall-appearance.d.ts.map +1 -0
  482. package/native/waterfall-appearance.js +18 -0
  483. package/native/waterfall-appearance.js.map +1 -0
  484. package/native/wordcloud-data.d.ts +40 -0
  485. package/native/wordcloud-data.d.ts.map +1 -0
  486. package/native/wordcloud-data.js +2 -0
  487. package/native/wordcloud-data.js.map +1 -0
  488. package/native/wordcloud-layer.d.ts +29 -0
  489. package/native/wordcloud-layer.d.ts.map +1 -0
  490. package/native/wordcloud-layer.js +58 -0
  491. package/native/wordcloud-layer.js.map +1 -0
  492. package/native/wordcloud-measurements.d.ts +47 -0
  493. package/native/wordcloud-measurements.d.ts.map +1 -0
  494. package/native/wordcloud-measurements.js +137 -0
  495. package/native/wordcloud-measurements.js.map +1 -0
  496. package/native/wordcloud-planning.d.ts +23 -0
  497. package/native/wordcloud-planning.d.ts.map +1 -0
  498. package/native/wordcloud-planning.js +25 -0
  499. package/native/wordcloud-planning.js.map +1 -0
  500. package/native/wordcloud-probes.d.ts +48 -0
  501. package/native/wordcloud-probes.d.ts.map +1 -0
  502. package/native/wordcloud-probes.js +111 -0
  503. package/native/wordcloud-probes.js.map +1 -0
  504. package/native/wordcloud-text-backend.d.ts +16 -0
  505. package/native/wordcloud-text-backend.d.ts.map +1 -0
  506. package/native/wordcloud-text-backend.js +3 -0
  507. package/native/wordcloud-text-backend.js.map +1 -0
  508. package/package.json +58 -4
@@ -0,0 +1,98 @@
1
+ const cross = (a, b, c) => (b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x);
2
+ const orientation = (a, b, c) => {
3
+ const product1 = (b.x - a.x) * (c.y - a.y), product2 = (b.y - a.y) * (c.x - a.x), det = product1 - product2, error = Number.EPSILON * 8 * (Math.abs(product1) + Math.abs(product2));
4
+ return det > error ? 1 : det < -error ? -1 : 0;
5
+ };
6
+ const onSegment = (a, b, p) => orientation(a, b, p) === 0 && p.x >= Math.min(a.x, b.x) && p.x <= Math.max(a.x, b.x) && p.y >= Math.min(a.y, b.y) && p.y <= Math.max(a.y, b.y);
7
+ function intersects(a, b, c, d) {
8
+ const x = orientation(a, b, c), y = orientation(a, b, d), z = orientation(c, d, a), w = orientation(c, d, b);
9
+ return (x * y < 0 && z * w < 0) || onSegment(a, b, c) || onSegment(a, b, d) || onSegment(c, d, a) || onSegment(c, d, b);
10
+ }
11
+ /** Bounded ownership/validation. Neck-crossing funnel polygons may be concave. */
12
+ export function ownPolygon(hit, scene) {
13
+ if (!(['column', 'bar'].includes(scene.family) && scene.stackGroups) && !['regression', 'flame', 'violin', 'heatmap', 'wordcloud', 'pictorial', 'tilemap', 'dependencywheel', 'arcdiagram', 'chord', 'bullet', 'variwide', 'xrange', 'sankey', 'organization', 'treegraph', 'funnel', 'pyramid', 'lollipop', 'dumbbell', 'columnpyramid', 'boxplot', 'errorbar', 'columnrange'].includes(scene.family) || !Array.isArray(hit.vertices) || hit.vertices.length < 3 || hit.vertices.length > (scene.family === 'violin' ? 256 : scene.family === 'pictorial' ? 5 : scene.family === 'sankey' ? 40 : ['dependencywheel', 'arcdiagram', 'chord'].includes(scene.family) ? 34 : 6))
14
+ throw Error('Invalid polygon hit region');
15
+ const vertices = hit.vertices.map(p => { if (!p || typeof p.x !== 'number' || typeof p.y !== 'number' || !Number.isFinite(p.x) || !Number.isFinite(p.y) || p.x < 0 || p.x > scene.width || p.y < 0 || p.y > scene.height)
16
+ throw Error('Invalid polygon vertex'); return { x: p.x, y: p.y }; });
17
+ const origin = vertices[0];
18
+ let area = 0;
19
+ for (let i = 0; i < vertices.length; i++) {
20
+ const a = vertices[i], b = vertices[(i + 1) % vertices.length];
21
+ if (a.x === b.x && a.y === b.y)
22
+ throw Error('Collapsed polygon edge');
23
+ area += cross(origin, a, b);
24
+ }
25
+ if (!Number.isFinite(area) || area === 0)
26
+ throw Error('Degenerate polygon hit region');
27
+ // A compact-kernel violin can pinch to zero between separate sample clusters.
28
+ // Validate the two mirrored, monotone chains in linear time: these boundary
29
+ // touches are valid density gaps, rather than self-crossing arbitrary polygons.
30
+ if (scene.family === 'violin' && vertices.length > 4) {
31
+ if (vertices.length % 2 !== 0)
32
+ throw Error('Invalid violin contour');
33
+ const steps = vertices.length / 2, center = vertices[0].x, direction = Math.sign(vertices[1].y - vertices[0].y);
34
+ if (!direction || vertices[steps].x !== center)
35
+ throw Error('Invalid violin contour');
36
+ for (let i = 1; i < steps; i++) {
37
+ const left = vertices[i], right = vertices[vertices.length - i];
38
+ if (direction * (left.y - vertices[i - 1].y) <= 0 || left.x > center || right.x < center || left.y !== right.y || Math.abs((left.x - center) + (right.x - center)) > 1e-7)
39
+ throw Error('Invalid violin contour');
40
+ }
41
+ if (direction * (vertices[steps].y - vertices[steps - 1].y) <= 0)
42
+ throw Error('Invalid violin contour');
43
+ return { type: 'polygon', vertices };
44
+ }
45
+ for (let i = 0; i < vertices.length; i++)
46
+ for (let j = i + 1; j < vertices.length; j++) {
47
+ if (j === i + 1 || i === 0 && j === vertices.length - 1)
48
+ continue;
49
+ if (intersects(vertices[i], vertices[(i + 1) % vertices.length], vertices[j], vertices[(j + 1) % vertices.length]))
50
+ throw Error('Self-intersecting polygon hit region');
51
+ }
52
+ return { type: 'polygon', vertices };
53
+ }
54
+ export function containsPolygon(hit, x, y) {
55
+ const p = { x, y }, v = hit.vertices;
56
+ let inside = false;
57
+ for (let i = 0, j = v.length - 1; i < v.length; j = i++) {
58
+ const a = v[j], b = v[i];
59
+ if (onSegment(a, b, p))
60
+ return true;
61
+ if ((a.y > y) !== (b.y > y) && x < (b.x - a.x) * (y - a.y) / (b.y - a.y) + a.x)
62
+ inside = !inside;
63
+ }
64
+ return inside;
65
+ }
66
+ /** Each candidate has at most six edges; callers bound the candidate set. */
67
+ export function polygonObservation(points, x, y) {
68
+ return points.find(p => p.hit?.type === 'polygon' && containsPolygon(p.hit, x, y)) ?? null;
69
+ }
70
+ const boundsCache = new WeakMap();
71
+ /** Cache bounds on immutable scene polygons; no arrays are allocated per move. */
72
+ export function sankeyObservation(points, x, y) {
73
+ let selected = null;
74
+ for (const point of points) {
75
+ const hit = point.hit;
76
+ if (hit?.type !== 'polygon')
77
+ continue;
78
+ let bounds = boundsCache.get(hit);
79
+ if (!bounds) {
80
+ let left = Infinity, right = -Infinity, top = Infinity, bottom = -Infinity;
81
+ for (const vertex of hit.vertices) {
82
+ left = Math.min(left, vertex.x);
83
+ right = Math.max(right, vertex.x);
84
+ top = Math.min(top, vertex.y);
85
+ bottom = Math.max(bottom, vertex.y);
86
+ }
87
+ bounds = { left, right, top, bottom };
88
+ boundsCache.set(hit, bounds);
89
+ }
90
+ if (x < bounds.left || x > bounds.right || y < bounds.top || y > bounds.bottom || !containsPolygon(hit, x, y))
91
+ continue;
92
+ if (point.sankey?.type === 'node')
93
+ return point;
94
+ selected = point;
95
+ }
96
+ return selected;
97
+ }
98
+ //# sourceMappingURL=polygon-hit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-hit.js","sourceRoot":"","sources":["../../src/library/polygon-hit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { PlanFlameLayout, PlanFlameValue, PlanViolinLayout, PlanViolinValue } from '@neural-charts/core/plan';
2
+ import type { NativeScene } from './contracts.js';
3
+ export type NativeFlameLayout = PlanFlameLayout;
4
+ export type NativeFlameValue = PlanFlameValue;
5
+ export type NativeViolinLayout = PlanViolinLayout;
6
+ export type NativeViolinValue = PlanViolinValue;
7
+ export declare function ownFlameValue(v: NativeFlameValue): NativeFlameValue;
8
+ export declare function ownFlame(v: NativeFlameLayout, scene: NativeScene): NativeFlameLayout;
9
+ export declare function ownViolinValue(v: NativeViolinValue): NativeViolinValue;
10
+ export declare function ownViolin(v: NativeViolinLayout, scene: NativeScene): NativeViolinLayout;
11
+ //# sourceMappingURL=profile-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-scene.d.ts","sourceRoot":"","sources":["../../src/library/profile-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,eAAe,EAAC,cAAc,EAAC,gBAAgB,EAAC,eAAe,EAAC,MAAM,0BAA0B,CAAC;AAC9G,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAChD,MAAM,MAAM,iBAAiB,GAAC,eAAe,CAAC;AAC9C,MAAM,MAAM,gBAAgB,GAAC,cAAc,CAAC;AAC5C,MAAM,MAAM,kBAAkB,GAAC,gBAAgB,CAAC;AAChD,MAAM,MAAM,iBAAiB,GAAC,eAAe,CAAC;AAG9C,wBAAgB,aAAa,CAAC,CAAC,EAAC,gBAAgB,GAAE,gBAAgB,CAGjE;AACD,wBAAgB,QAAQ,CAAC,CAAC,EAAC,iBAAiB,EAAC,KAAK,EAAC,WAAW,GAAE,iBAAiB,CAKhF;AACD,wBAAgB,cAAc,CAAC,CAAC,EAAC,iBAAiB,GAAE,iBAAiB,CAGpE;AACD,wBAAgB,SAAS,CAAC,CAAC,EAAC,kBAAkB,EAAC,KAAK,EAAC,WAAW,GAAE,kBAAkB,CAanF"}
@@ -0,0 +1,51 @@
1
+ const integer = (v, min, max) => Number.isInteger(v) && v >= min && v <= max;
2
+ const text = (v, max) => typeof v === 'string' && v.length <= max;
3
+ export function ownFlameValue(v) {
4
+ if (!v || !integer(v.depth, 0, 31) || !integer(v.childCount, 0, 2048) || !Number.isFinite(v.selfDuration) || v.selfDuration < 0 || v.parentId !== undefined && (!text(v.parentId, 128) || !v.parentId) || v.depth === 0 && v.parentId !== undefined || v.depth > 0 && v.parentId === undefined)
5
+ throw Error('Invalid flame observation');
6
+ return { ...(v.parentId === undefined ? {} : { parentId: v.parentId }), depth: v.depth, childCount: v.childCount, selfDuration: v.selfDuration };
7
+ }
8
+ export function ownFlame(v, scene) {
9
+ if (scene.family !== 'flame' || !v || !integer(v.maxDepth, 0, 31) || !integer(v.nodeCount, 0, 2048) || !integer(v.rootCount, 0, v.nodeCount) || v.nodeCount > 0 && v.rootCount === 0 || (scene.legend?.length ?? 0) !== 0 || scene.series.length !== 1 || scene.series[0]?.id !== 'profile' || scene.observations.length > v.nodeCount || scene.intervals?.length !== v.nodeCount)
10
+ throw Error('Invalid flame layout');
11
+ const sources = new Set(scene.intervals.map(p => p.id.pointId));
12
+ for (const p of scene.observations) {
13
+ const f = ownFlameValue(p.flame);
14
+ if (p.id.seriesId !== 'profile' || !p.interval || p.interval.completed !== undefined || f.depth > v.maxDepth || f.selfDuration > p.value || f.parentId !== undefined && !sources.has(f.parentId) || p.interval.rowId !== 'depth-' + f.depth)
15
+ throw Error('Invalid flame source role');
16
+ }
17
+ return Object.freeze({ maxDepth: v.maxDepth, nodeCount: v.nodeCount, rootCount: v.rootCount });
18
+ }
19
+ export function ownViolinValue(v) {
20
+ if (!v || v.derived !== true || !integer(v.sampleCount, 1, 4096) || !integer(v.missingCount, 0, 4096) || v.sampleCount + v.missingCount > 4096 || ![v.minimum, v.q1, v.median, v.q3, v.maximum, v.mean].every(Number.isFinite) || v.minimum > v.q1 || v.q1 > v.median || v.median > v.q3 || v.q3 > v.maximum || v.mean < v.minimum || v.mean > v.maximum || v.bandwidth !== null && (!Number.isFinite(v.bandwidth) || v.bandwidth <= 0) || v.bandwidth === null && v.minimum !== v.maximum)
21
+ throw Error('Invalid violin summary');
22
+ return { derived: true, sampleCount: v.sampleCount, missingCount: v.missingCount, minimum: v.minimum, q1: v.q1, median: v.median, q3: v.q3, maximum: v.maximum, mean: v.mean, bandwidth: v.bandwidth };
23
+ }
24
+ export function ownViolin(v, scene) {
25
+ if (scene.family !== 'violin' || !v || v.kernel !== 'epanechnikov' || !['width', 'area', 'count'].includes(v.normalization) || !integer(v.resolution, 32, 128) || !Array.isArray(v.groups) || v.groups.length > 16)
26
+ throw Error('Invalid violin layout');
27
+ const ids = new Set(), byId = new Map(scene.observations.map(p => [p.id.seriesId, p]));
28
+ let sourceCount = 0;
29
+ const groups = v.groups.map(g => {
30
+ if (!g || !text(g.id, 128) || !g.id || ids.has(g.id) || !text(g.label, 200) || typeof g.visible !== 'boolean' || !integer(g.sampleCount, 0, 4096) || !integer(g.missingCount, 0, 4096) || (sourceCount += g.sampleCount + g.missingCount) > 4096 || !Array.isArray(g.density) || g.density.length !== 0 && g.density.length !== v.resolution + 1)
31
+ throw Error('Invalid violin group');
32
+ ids.add(g.id);
33
+ const summary = g.summary ? ownViolinValue(g.summary) : undefined;
34
+ if (!!summary !== (g.sampleCount > 0) || summary && (summary.sampleCount !== g.sampleCount || summary.missingCount !== g.missingCount || summary.bandwidth === null && g.density.length !== 0 || summary.bandwidth !== null && g.density.length === 0))
35
+ throw Error('Invalid violin summary ownership');
36
+ const density = g.density.map((p, i) => { if (!p || !Number.isFinite(p.value) || !Number.isFinite(p.density) || p.density < 0 || i > 0 && p.value <= g.density[i - 1].value)
37
+ throw Error('Invalid violin density'); return Object.freeze({ value: p.value, density: p.density }); });
38
+ const p = byId.get(g.id);
39
+ if (g.visible && summary) {
40
+ if (!p || p.id.pointId !== 'summary' || p.value !== summary.median || p.hit?.type !== 'polygon' || !p.violin || Object.keys(summary).some(k => p.violin[k] !== summary[k]))
41
+ throw Error('Invalid violin observation ownership');
42
+ }
43
+ else if (p)
44
+ throw Error('Hidden or unknown violin group cannot invent a summary');
45
+ return Object.freeze({ id: g.id, label: g.label, visible: g.visible, sampleCount: g.sampleCount, missingCount: g.missingCount, ...(summary ? { summary: Object.freeze(summary) } : {}), density: Object.freeze(density) });
46
+ });
47
+ if (scene.observations.some(p => !ids.has(p.id.seriesId) || !p.violin) || (scene.legend?.length ?? 0) !== groups.length || scene.legend?.some(p => !ids.has(p.id)))
48
+ throw Error('Invalid violin identities');
49
+ return Object.freeze({ kernel: 'epanechnikov', normalization: v.normalization, resolution: v.resolution, groups: Object.freeze(groups) });
50
+ }
51
+ //# sourceMappingURL=profile-scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-scene.js","sourceRoot":"","sources":["../../src/library/profile-scene.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { NativeScene, Observation } from './contracts.js';
2
+ /** Fixed 12×12 plot-local index. Construct once per owned geometry, never per pointer move. */
3
+ export declare class RelationshipHitIndex {
4
+ private readonly scene;
5
+ private readonly cells;
6
+ private readonly circles;
7
+ constructor(scene: NativeScene);
8
+ private cell;
9
+ private contains;
10
+ pick(x: number, y: number, tolerance?: number): Observation | null;
11
+ }
12
+ //# sourceMappingURL=relationship-hit-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-hit-index.d.ts","sourceRoot":"","sources":["../../src/library/relationship-hit-index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,WAAW,EAAW,MAAM,gBAAgB,CAAC;AAGtE,+FAA+F;AAC/F,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAFlC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4D;IAClF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;gBACb,KAAK,EAAC,WAAW;IAU9C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAQhB,IAAI,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,EAAC,SAAS,SAAE,GAAE,WAAW,GAAC,IAAI;CAarD"}
@@ -0,0 +1,87 @@
1
+ import { containsPolygon } from './polygon-hit.js';
2
+ /** Fixed 12×12 plot-local index. Construct once per owned geometry, never per pointer move. */
3
+ export class RelationshipHitIndex {
4
+ scene;
5
+ cells = Array.from({ length: 144 }, () => ({ nodes: [], links: [] }));
6
+ circles = [];
7
+ constructor(scene) {
8
+ this.scene = scene;
9
+ for (const point of scene.observations) {
10
+ const hit = point.hit;
11
+ if (!hit)
12
+ continue;
13
+ if (hit.type === 'compoundPolygon')
14
+ throw Error('Unsupported relationship hit geometry');
15
+ if (point.relationship?.type === 'node' && hit.type === 'circle')
16
+ this.circles.push(point);
17
+ let left, right, top, bottom;
18
+ if (hit.type === 'polygon') {
19
+ left = Infinity;
20
+ right = -Infinity;
21
+ top = Infinity;
22
+ bottom = -Infinity;
23
+ for (const vertex of hit.vertices) {
24
+ left = Math.min(left, vertex.x);
25
+ right = Math.max(right, vertex.x);
26
+ top = Math.min(top, vertex.y);
27
+ bottom = Math.max(bottom, vertex.y);
28
+ }
29
+ }
30
+ else {
31
+ left = hit.cx - hit.radius;
32
+ right = hit.cx + hit.radius;
33
+ top = hit.cy - hit.radius;
34
+ bottom = hit.cy + hit.radius;
35
+ }
36
+ for (let y = this.cell(top, scene.height); y <= this.cell(bottom, scene.height); y++)
37
+ for (let x = this.cell(left, scene.width); x <= this.cell(right, scene.width); x++)
38
+ this.cells[y * 12 + x][point.relationship?.type === 'node' ? 'nodes' : 'links'].push(point);
39
+ }
40
+ }
41
+ cell(value, extent) { return Math.max(0, Math.min(11, Math.floor(value / extent * 12))); }
42
+ contains(hit, x, y) {
43
+ if (hit.type === 'compoundPolygon')
44
+ return false;
45
+ if (hit.type === 'polygon')
46
+ return containsPolygon(hit, x, y);
47
+ const radius = Math.hypot(x - hit.cx, y - hit.cy);
48
+ if (radius > hit.radius)
49
+ return false;
50
+ if (hit.type === 'circle')
51
+ return true;
52
+ if (radius < hit.innerRadius)
53
+ return false;
54
+ const turn = 2 * Math.PI, angle = (Math.atan2(x - hit.cx, hit.cy - y) - hit.start) % turn, relative = (angle + turn) % turn;
55
+ return relative <= hit.end - hit.start + 1e-10;
56
+ }
57
+ pick(x, y, tolerance = 0) {
58
+ if (x < 0 || y < 0 || x > this.scene.width || y > this.scene.height)
59
+ return null;
60
+ const cell = this.cells[this.cell(y, this.scene.height) * 12 + this.cell(x, this.scene.width)];
61
+ for (const point of cell.nodes)
62
+ if (point.hit && this.contains(point.hit, x, y))
63
+ return point;
64
+ // A miss inside the ring must fall through to its actual ribbon polygons.
65
+ for (let i = cell.links.length - 1; i >= 0; i--) {
66
+ const point = cell.links[i];
67
+ if (point.hit && this.contains(point.hit, x, y))
68
+ return point;
69
+ }
70
+ // A larger touch target is separate from drawn radius and never steals an
71
+ // actual ribbon hit. At most64 source nodes; no move-time collections.
72
+ let nearest = null, distance = Infinity;
73
+ const reach = Number.isFinite(tolerance) ? Math.max(0, Math.min(256, tolerance)) : 0;
74
+ for (const point of this.circles) {
75
+ const hit = point.hit;
76
+ if (hit?.type !== 'circle')
77
+ continue;
78
+ const d = (x - hit.cx) ** 2 + (y - hit.cy) ** 2;
79
+ if (d <= Math.max(hit.radius, reach) ** 2 && d < distance) {
80
+ nearest = point;
81
+ distance = d;
82
+ }
83
+ }
84
+ return nearest;
85
+ }
86
+ }
87
+ //# sourceMappingURL=relationship-hit-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-hit-index.js","sourceRoot":"","sources":["../../src/library/relationship-hit-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { NativeScene, Observation, NativeAnnotation } from './contracts.js';
2
+ import type { PlanRelationshipMetadata } from '@neural-charts/core/plan';
3
+ export declare const relationshipFamily: (family: string) => family is "dependencywheel" | "arcdiagram" | "chord";
4
+ /** Own the public Core metadata without recomputing totals or projecting geometry. */
5
+ export declare function ownRelationshipPoint(point: Observation, family: NativeScene['family']): Readonly<{
6
+ relationship?: PlanRelationshipMetadata;
7
+ }>;
8
+ export declare function validateRelationshipScene(scene: NativeScene): void;
9
+ /** Text boxes are presentation constraints, not source values or projected arcs.
10
+ * Core supplies a requested width; the native label must fit around its anchor. */
11
+ export declare function relationshipAnnotations(scene: NativeScene): readonly NativeAnnotation[];
12
+ //# sourceMappingURL=relationship-scene.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-scene.d.ts","sourceRoot":"","sources":["../../src/library/relationship-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,WAAW,EAAC,gBAAgB,EAAC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,0BAA0B,CAAC;AAEvE,eAAO,MAAM,kBAAkB,GAAE,QAAO,MAAM,KAAE,MAAM,IAAI,iBAAiB,GAAC,YAAY,GAAC,OAA4E,CAAC;AAEtK,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,KAAK,EAAC,WAAW,EAAC,MAAM,EAAC,WAAW,CAAC,QAAQ,CAAC,GAAE,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAC,wBAAwB,CAAA;CAAC,CAAC,CAWtI;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAC,WAAW,GAAE,IAAI,CAKhE;AAED;mFACmF;AACnF,wBAAgB,uBAAuB,CAAC,KAAK,EAAC,WAAW,GAAE,SAAS,gBAAgB,EAAE,CAcrF"}
@@ -0,0 +1,62 @@
1
+ export const relationshipFamily = (family) => family === 'dependencywheel' || family === 'arcdiagram' || family === 'chord';
2
+ const text = (value, max) => typeof value === 'string' && value.length > 0 && value.length <= max;
3
+ /** Own the public Core metadata without recomputing totals or projecting geometry. */
4
+ export function ownRelationshipPoint(point, family) {
5
+ const value = point.relationship;
6
+ if (!relationshipFamily(family)) {
7
+ if (value !== undefined)
8
+ throw Error('Unexpected relationship metadata');
9
+ return {};
10
+ }
11
+ if (!value || point.value < 0 || value.geometryOmitted !== undefined && value.geometryOmitted !== true || value.geometryOmitted && point.hit !== undefined)
12
+ throw Error('Invalid relationship metadata');
13
+ const omitted = value.geometryOmitted ? { geometryOmitted: true } : {};
14
+ if (value.type === 'node') {
15
+ if (!text(point.label, 256) || ![value.incoming, value.outgoing, value.incident].every(n => Number.isFinite(n) && n >= 0) || point.value !== value.incident)
16
+ throw Error('Invalid relationship totals');
17
+ return { relationship: { type: 'node', incoming: value.incoming, outgoing: value.outgoing, incident: value.incident, ...omitted } };
18
+ }
19
+ if (value.type !== 'link' || !text(value.from, 128) || !text(value.to, 128) || value.from === value.to || !text(value.fromLabel, 256) || !text(value.toLabel, 256) || value.directed !== (family === 'dependencywheel') || point.incomplete !== undefined || point.value === 0 && !value.geometryOmitted)
20
+ throw Error('Invalid relationship endpoints');
21
+ return { relationship: { type: 'link', from: value.from, to: value.to, fromLabel: value.fromLabel, toLabel: value.toLabel, directed: value.directed, ...omitted } };
22
+ }
23
+ export function validateRelationshipScene(scene) {
24
+ if (!relationshipFamily(scene.family))
25
+ return;
26
+ let nodes = 0, links = 0;
27
+ for (const point of scene.observations) {
28
+ if (point.relationship?.type === 'node')
29
+ nodes++;
30
+ else if (point.relationship?.type === 'link')
31
+ links++;
32
+ else
33
+ throw Error('Missing relationship metadata');
34
+ }
35
+ if (nodes > 64 || links > 256 || scene.observations.length > 320 || (scene.annotations?.length ?? 0) > 64 || scene.grid.length || scene.labels.length || scene.yLabels?.length || scene.references?.length)
36
+ throw Error('Invalid relationship frame budget or unsupported axes');
37
+ }
38
+ /** Text boxes are presentation constraints, not source values or projected arcs.
39
+ * Core supplies a requested width; the native label must fit around its anchor. */
40
+ export function relationshipAnnotations(scene) {
41
+ if (!relationshipFamily(scene.family))
42
+ return scene.annotations ?? [];
43
+ const allocated = [];
44
+ if ((scene.annotations?.length ?? 0) > 64)
45
+ throw Error('Relationship label budget exceeded');
46
+ return (scene.annotations ?? []).flatMap(annotation => {
47
+ const box = annotation.box;
48
+ if (!box)
49
+ return [annotation];
50
+ if (![annotation.x, annotation.y, box.width, box.height].every(Number.isFinite) || annotation.x < 0 || annotation.x > scene.width || annotation.y < 0 || annotation.y > scene.height || box.width <= 0 || box.width > 240 || box.height <= 0 || box.height > 64)
51
+ throw Error('Invalid relationship text box');
52
+ const width = Math.min(box.width, 2 * annotation.x, 2 * (scene.width - annotation.x)), height = Math.min(box.height, 2 * annotation.y, 2 * (scene.height - annotation.y));
53
+ if (width < 16 || height < 12)
54
+ return [];
55
+ const rect = { left: annotation.x - width / 2, right: annotation.x + width / 2, top: annotation.y - height / 2, bottom: annotation.y + height / 2 };
56
+ if (allocated.some(previous => rect.left < previous.right + 2 && rect.right > previous.left - 2 && rect.top < previous.bottom + 2 && rect.bottom > previous.top - 2))
57
+ return [];
58
+ allocated.push(rect);
59
+ return [{ ...annotation, box: { ...box, width, height } }];
60
+ });
61
+ }
62
+ //# sourceMappingURL=relationship-scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationship-scene.js","sourceRoot":"","sources":["../../src/library/relationship-scene.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { NativeScene, NativeReference, DatumId } from './contracts.js';
2
+ export declare function pointPaint(scene: NativeScene): ReadonlyMap<string, string>;
3
+ export declare function pointOverrideColor(scene: NativeScene, id: DatumId): string | undefined;
4
+ export declare function paintGroups<T extends {
5
+ readonly pointId?: string;
6
+ }>(seriesId: string, baseColor: string, items: readonly T[], overrides: ReadonlyMap<string, string>): ReadonlyMap<string, readonly T[]>;
7
+ /** Same-colour paint commutes; keep colour runs ordered and each path disjoint.
8
+ * Coarse cell masks bound work independently of the number of prior circles. */
9
+ export declare function circlePaintBatches<T extends {
10
+ readonly pointId?: string;
11
+ readonly cx: number;
12
+ readonly cy: number;
13
+ readonly radius: number;
14
+ }>(seriesId: string, baseColor: string, items: readonly T[], overrides: ReadonlyMap<string, string>, padding?: number): readonly (readonly [string, readonly T[]])[];
15
+ /** Preserve paint order; alpha and stroked rectangles also need disjoint bounds. */
16
+ export declare function barPaintBatches<T extends {
17
+ readonly pointId?: string;
18
+ readonly x: number;
19
+ readonly y: number;
20
+ readonly width: number;
21
+ readonly height: number;
22
+ }>(seriesId: string, baseColor: string, items: readonly T[], overrides: ReadonlyMap<string, string>, separateOverlaps: boolean, padding?: number): readonly (readonly [string, readonly T[]])[];
23
+ export declare function referencePaint(references: readonly NativeReference[] | undefined, transform: Readonly<{
24
+ x: number;
25
+ y: number;
26
+ sx: number;
27
+ sy: number;
28
+ }>): string;
29
+ //# sourceMappingURL=scene-paint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-paint.d.ts","sourceRoot":"","sources":["../../src/library/scene-paint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,eAAe,EAAC,OAAO,EAAC,MAAM,gBAAgB,CAAC;AAIxE,wBAAgB,UAAU,CAAC,KAAK,EAAC,WAAW,GAAE,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,CAEvE;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE,EAAC,OAAO,GAAE,MAAM,GAAC,SAAS,CAAgD;AACjI,wBAAgB,WAAW,CAAC,CAAC,SAAS;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAC,MAAM,CAAA;CAAC,EAAE,QAAQ,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAC,SAAS,CAAC,EAAE,EAAC,SAAS,EAAC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,GAAE,WAAW,CAAC,MAAM,EAAC,SAAS,CAAC,EAAE,CAAC,CAI3L;AACD;gFACgF;AAChF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,EAAE,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,MAAM,EAAC,MAAM,CAAA;CAAC,EAAE,QAAQ,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAC,SAAS,CAAC,EAAE,EAAC,SAAS,EAAC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,EAAC,OAAO,SAAE,GAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAiCpR;AACD,oFAAoF;AACpF,wBAAgB,eAAe,CAAC,CAAC,SAAS;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,KAAK,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,MAAM,EAAC,MAAM,CAAA;CAAC,EAAE,QAAQ,EAAC,MAAM,EAAC,SAAS,EAAC,MAAM,EAAC,KAAK,EAAC,SAAS,CAAC,EAAE,EAAC,SAAS,EAAC,WAAW,CAAC,MAAM,EAAC,MAAM,CAAC,EAAC,gBAAgB,EAAC,OAAO,EAAC,OAAO,SAAE,GAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAc9T;AACD,wBAAgB,cAAc,CAAC,UAAU,EAAC,SAAS,eAAe,EAAE,GAAC,SAAS,EAAC,SAAS,EAAC,QAAQ,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,EAAE,EAAC,MAAM,CAAA;CAAC,CAAC,GAAE,MAAM,CAMjJ"}
@@ -0,0 +1,123 @@
1
+ import { identityKey } from './contracts.js';
2
+ const colors = new WeakMap();
3
+ export function pointPaint(scene) {
4
+ let cached = colors.get(scene);
5
+ if (!cached) {
6
+ cached = new Map((scene.points ?? []).map(point => [identityKey(point), point.color]));
7
+ colors.set(scene, cached);
8
+ }
9
+ return cached;
10
+ }
11
+ export function pointOverrideColor(scene, id) { return pointPaint(scene).get(identityKey(id)); }
12
+ export function paintGroups(seriesId, baseColor, items, overrides) {
13
+ const groups = new Map();
14
+ for (const primitive of items) {
15
+ const color = primitive.pointId === undefined ? baseColor : overrides.get(identityKey({ seriesId, pointId: primitive.pointId })) ?? baseColor;
16
+ const group = groups.get(color);
17
+ if (group)
18
+ group.push(primitive);
19
+ else
20
+ groups.set(color, [primitive]);
21
+ }
22
+ return groups;
23
+ }
24
+ /** Same-colour paint commutes; keep colour runs ordered and each path disjoint.
25
+ * Coarse cell masks bound work independently of the number of prior circles. */
26
+ export function circlePaintBatches(seriesId, baseColor, items, overrides, padding = 2) {
27
+ const batches = [];
28
+ let runColor;
29
+ const reusable = [], cells = new Map(), occupied = new Uint32Array(32), cellSize = Math.max(16, padding * 2);
30
+ for (const circle of items) {
31
+ const color = circle.pointId === undefined ? baseColor : overrides.get(identityKey({ seriesId, pointId: circle.pointId })) ?? baseColor;
32
+ if (color !== runColor) {
33
+ runColor = color;
34
+ reusable.length = 0;
35
+ cells.clear();
36
+ }
37
+ // Include the half stroke and the caller's native-pixel rasterisation guard.
38
+ const radius = circle.radius + padding;
39
+ const left = Math.floor((circle.cx - radius) / cellSize), right = Math.floor((circle.cx + radius) / cellSize), top = Math.floor((circle.cy - radius) / cellSize), bottom = Math.floor((circle.cy + radius) / cellSize);
40
+ if ((right - left + 1) * (bottom - top + 1) > 64) {
41
+ batches.push([color, [circle]]);
42
+ continue;
43
+ }
44
+ const keys = [], words = Math.min(32, (reusable.length >>> 5) + 1);
45
+ occupied.fill(0);
46
+ for (let x = left; x <= right; x++)
47
+ for (let y = top; y <= bottom; y++) {
48
+ const key = x + ':' + y;
49
+ keys.push(key);
50
+ const mask = cells.get(key);
51
+ if (mask)
52
+ for (let word = 0; word < words; word++)
53
+ occupied[word] = occupied[word] | mask[word];
54
+ }
55
+ let index = -1;
56
+ for (let word = 0; word < words; word++) {
57
+ const free = (~occupied[word]) >>> 0;
58
+ if (free) {
59
+ index = word * 32 + 31 - Math.clz32(free & -free);
60
+ break;
61
+ }
62
+ }
63
+ // Never reuse an unindexed fallback path. Every reusable path occupies
64
+ // disjoint cells, a conservative guarantee of disjoint guarded bounds.
65
+ if (index < 0) {
66
+ batches.push([color, [circle]]);
67
+ continue;
68
+ }
69
+ let group = reusable[index];
70
+ if (!group) {
71
+ group = [];
72
+ reusable.push(group);
73
+ batches.push([color, group]);
74
+ }
75
+ group.push(circle);
76
+ const word = index >>> 5, bit = 1 << (index & 31);
77
+ for (const key of keys) {
78
+ let mask = cells.get(key);
79
+ if (!mask) {
80
+ mask = new Uint32Array(32);
81
+ cells.set(key, mask);
82
+ }
83
+ mask[word] = mask[word] | bit;
84
+ }
85
+ }
86
+ return batches;
87
+ }
88
+ /** Preserve paint order; alpha and stroked rectangles also need disjoint bounds. */
89
+ export function barPaintBatches(seriesId, baseColor, items, overrides, separateOverlaps, padding = 0) {
90
+ const batches = [];
91
+ let batch, left = 0, top = 0, right = 0, bottom = 0;
92
+ for (const bar of items) {
93
+ const color = bar.pointId === undefined ? baseColor : overrides.get(identityKey({ seriesId, pointId: bar.pointId })) ?? baseColor;
94
+ const disjoint = !separateOverlaps || bar.x + bar.width + padding < left || bar.x - padding > right || bar.y + bar.height + padding < top || bar.y - padding > bottom;
95
+ if (!batch || batch[0] !== color || !disjoint) {
96
+ batch = [color, [bar]];
97
+ batches.push(batch);
98
+ left = bar.x - padding;
99
+ top = bar.y - padding;
100
+ right = bar.x + bar.width + padding;
101
+ bottom = bar.y + bar.height + padding;
102
+ }
103
+ else {
104
+ batch[1].push(bar);
105
+ if (separateOverlaps) {
106
+ left = Math.min(left, bar.x - padding);
107
+ top = Math.min(top, bar.y - padding);
108
+ right = Math.max(right, bar.x + bar.width + padding);
109
+ bottom = Math.max(bottom, bar.y + bar.height + padding);
110
+ }
111
+ }
112
+ }
113
+ return batches;
114
+ }
115
+ export function referencePaint(references, transform) {
116
+ return (references ?? []).filter(reference => reference.status === 'visible').map(reference => {
117
+ if (reference.status !== 'visible')
118
+ return '';
119
+ const { line } = reference, dash = reference.dash ?? 'dash', paint = `stroke="${reference.color ?? '#8B6CCE'}" stroke-width="${reference.width ?? 1.5}"${dash === 'solid' ? '' : ` stroke-dasharray="${dash === 'dot' ? '1 4' : '6 4'}"`}${dash === 'dot' ? ' stroke-linecap="round"' : ''}`;
120
+ return `<path d="M${transform.x + line.x1 * transform.sx} ${transform.y + line.y1 * transform.sy}L${transform.x + line.x2 * transform.sx} ${transform.y + line.y2 * transform.sy}" fill="none" ${paint}/>`;
121
+ }).join('');
122
+ }
123
+ //# sourceMappingURL=scene-paint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-paint.js","sourceRoot":"","sources":["../../src/library/scene-paint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { NativePointAppearance, NativeReference, NativeReferenceStyle, NativeReferenceBand, NativeReferenceBandStyle, NativeScene } from './contracts.js';
2
+ export declare function ownPrimitiveId(input: object): string | undefined;
3
+ export declare function ownReferenceStyles(input: readonly NativeReferenceStyle[]): readonly NativeReferenceStyle[];
4
+ export declare function ownReferences(input: readonly NativeReference[] | undefined, scene: Pick<NativeScene, 'width' | 'height' | 'family' | 'bulletOrientation' | 'mixedAxes'>): readonly NativeReference[] | undefined;
5
+ export declare function ownPointAppearance(input: readonly NativePointAppearance[] | undefined): readonly NativePointAppearance[] | undefined;
6
+ export declare function samePointAppearance(a: readonly NativePointAppearance[] | undefined, b: readonly NativePointAppearance[] | undefined): boolean;
7
+ export declare function sameReferenceStyle(a: NativeReferenceStyle, b: NativeReferenceStyle): boolean;
8
+ export declare function sameReferencePaint(a: NativeReferenceStyle, b: NativeReferenceStyle): boolean;
9
+ export declare function ownReferenceBandStyles(input: readonly NativeReferenceBandStyle[]): readonly NativeReferenceBandStyle[];
10
+ export declare function ownReferenceBands(input: readonly NativeReferenceBand[] | undefined, scene: Pick<NativeScene, 'width' | 'height' | 'family' | 'mixedAxes'>): readonly NativeReferenceBand[] | undefined;
11
+ export declare function sameReferenceBandPaint(a: NativeReferenceBandStyle, b: NativeReferenceBandStyle): boolean;
12
+ export declare function sameReferenceBandStyle(a: NativeReferenceBandStyle, b: NativeReferenceBandStyle): boolean;
13
+ //# sourceMappingURL=scene-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-styles.d.ts","sourceRoot":"","sources":["../../src/library/scene-styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,qBAAqB,EAAC,eAAe,EAAC,oBAAoB,EAAC,mBAAmB,EAAC,wBAAwB,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAMxJ,wBAAgB,cAAc,CAAC,KAAK,EAAC,MAAM,GAAE,MAAM,GAAC,SAAS,CAA2K;AAaxO,wBAAgB,kBAAkB,CAAC,KAAK,EAAC,SAAS,oBAAoB,EAAE,GAAE,SAAS,oBAAoB,EAAE,CAGxG;AACD,wBAAgB,aAAa,CAAC,KAAK,EAAC,SAAS,eAAe,EAAE,GAAC,SAAS,EAAC,KAAK,EAAC,IAAI,CAAC,WAAW,EAAC,OAAO,GAAC,QAAQ,GAAC,QAAQ,GAAC,mBAAmB,GAAC,WAAW,CAAC,GAAE,SAAS,eAAe,EAAE,GAAC,SAAS,CAc/L;AACD,wBAAgB,kBAAkB,CAAC,KAAK,EAAC,SAAS,qBAAqB,EAAE,GAAC,SAAS,GAAE,SAAS,qBAAqB,EAAE,GAAC,SAAS,CAS9H;AACD,wBAAgB,mBAAmB,CAAC,CAAC,EAAC,SAAS,qBAAqB,EAAE,GAAC,SAAS,EAAC,CAAC,EAAC,SAAS,qBAAqB,EAAE,GAAC,SAAS,GAAE,OAAO,CAAgL;AACtT,wBAAgB,kBAAkB,CAAC,CAAC,EAAC,oBAAoB,EAAC,CAAC,EAAC,oBAAoB,GAAE,OAAO,CAAoD;AAC7I,wBAAgB,kBAAkB,CAAC,CAAC,EAAC,oBAAoB,EAAC,CAAC,EAAC,oBAAoB,GAAE,OAAO,CAA+D;AAaxJ,wBAAgB,sBAAsB,CAAC,KAAK,EAAC,SAAS,wBAAwB,EAAE,GAAE,SAAS,wBAAwB,EAAE,CAEpH;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAC,SAAS,mBAAmB,EAAE,GAAC,SAAS,EAAC,KAAK,EAAC,IAAI,CAAC,WAAW,EAAC,OAAO,GAAC,QAAQ,GAAC,QAAQ,GAAC,WAAW,CAAC,GAAE,SAAS,mBAAmB,EAAE,GAAC,SAAS,CAcvL;AACD,wBAAgB,sBAAsB,CAAC,CAAC,EAAC,wBAAwB,EAAC,CAAC,EAAC,wBAAwB,GAAE,OAAO,CAAkD;AACvJ,wBAAgB,sBAAsB,CAAC,CAAC,EAAC,wBAAwB,EAAC,CAAC,EAAC,wBAAwB,GAAE,OAAO,CAAwD"}