@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
package/docs/guide.md ADDED
@@ -0,0 +1,783 @@
1
+ # Primer alcance
2
+
3
+ Neural Charts Native se dedica a teléfonos y tablets iOS y Android con Angular Native. El catálogo incluye gráficas cartesianas y radiales, distribuciones, jerarquías, intervalos, relaciones ponderadas y siluetas. El renderizador dibuja geometría propia mediante vistas SVG nativas y texto del sistema. Los ejemplos utilizan datos reproducibles y el componente real de la librería; la entrada data también acepta las medidas originales de una aplicación.
4
+
5
+ # Explorar y seleccionar
6
+
7
+ interactionChange notifica cambios de estado: comenzar/terminar exploración, cambiar dato/grupo, fijar o limpiar. Moverse dentro del mismo dato, insistir en un extremo o volver a limpiar una selección vacía no repite notificaciones. Las burbujas de tamaño cero conservan su observación para Anterior/Siguiente sin crear una zona táctil invisible. Los intervalos radiales rotados mantienen selección coherente al cruzar el inicio del círculo; los huecos siguen sin dato. Alcance y criterios de hardening en docs/seven-refinement.md.
8
+
9
+ options.tooltip.content='shared' activa el tooltip compartido en líneas, columnas y barras. Cero y ausencia se distinguen. La leyenda interactiva actualiza la visibilidad y recalcula con el Core; hiddenSeriesIds permite enlazar ese estado a la aplicación. Las series ocultas siguen disponibles para restaurarlas. Un gauge no tiene leyenda de series.
10
+
11
+ Arrastra dentro de la gráfica para explorar observaciones. En líneas y columnas se busca la posición horizontal más cercana; en barras, la vertical. Con varias series en la misma posición se usa la otra coordenada para desambiguar. Al soltar se fija la selección. Una cancelación restaura la selección anterior. El tooltip flotante se coloca junto al dato, evitando el dedo y los bordes. Repetir el toque sobre el mismo dato lo cierra; tocar otro cambia el detalle. El panel inferior es opcional.
12
+
13
+ Detalles permite leer el texto completo en un panel nativo desplazable; Contraer vuelve a la posición automática. El detalle compacto reserva su altura antes de mostrarse; los nombres largos o listas extensas pasan al panel. Las listas compartidas mantienen el orden de las series y distinguen cero de ausencia. La expansión se conserva al navegar y se restablece al limpiar o reproducir la animación. Nombres largos en el showcase reutiliza los mismos datos. options.tooltip.pinnable=true añade Fijar/Desfijar: mantiene el dato visible, pausa exploración y háptica, y permite leer el panel. Una revisión de datos libera la fijación; limpiar y reproducir la cierran. Arrastrar, acciones y animación de tamaño siguen pendientes.
14
+
15
+ En cajas, rangos de columnas, barras de error y columnas triangulares, el arrastre continuo sigue el grupo más cercano al cruzar espacios vacíos; no cierra y vuelve a abrir el tooltip entre figuras. El toque individual conserva la selección sobre la figura.
16
+
17
+ El tooltip flotante cambia de posición con una transición breve, independiente del cálculo de datos. Su cierre utiliza la posición visible durante el movimiento. La colocación compara zonas de ocupación aproximada con un presupuesto fijo de muestras y prefiere cubrir menos datos sin tapar el punto seleccionado. Si no cabe, utiliza el panel de detalle; el contenido compartido de cajas permanece en ese panel.
18
+
19
+ La estimación de ocupación se calcula cuando hace falta mostrar un tooltip flotante y se reutiliza al cambiar de dato dentro de la misma escena y vista. Desplazar la gráfica sin selección, desactivar el tooltip o usar el modo acoplado no ejecuta ese cálculo. Una transición hacia la misma posición conserva su animación en curso; desactivar las animaciones o solicitar un cambio inmediato sigue deteniéndola.
20
+
21
+ # Límites de geometría nativa
22
+
23
+ El adaptador limita los trazados serializados a 1.000.000 de caracteres por serie y 2.000.000 por escena. Si se supera uno de estos presupuestos, `planningError` devuelve el motivo `NATIVE_PATH_LIMIT` y la ruta de la serie o de la escena afectada. No se omiten observaciones ni se sustituyen los datos originales de forma silenciosa. Reduce la densidad del origen antes de volver a planificar.
24
+
25
+ El coste depende de la forma de los datos y del número de series, además de su recuento. Las áreas spline apiladas necesitan muestras intermedias para mantener las fronteras comunes; una señal que alterna bruscamente puede alcanzar el presupuesto antes que otra suave con el mismo número de puntos. Estos límites protegen la conversión de geometría; no garantizan una tasa de fotogramas ni un consumo de memoria determinados en un dispositivo.
26
+
27
+ # Arranque para desarrolladores
28
+
29
+ El showcase web y la aplicación nativa son destinos independientes de este repositorio. Para trabajar aquí usa Node 22.22.3 o superior. Para instalar la beta en tu aplicación, usa `npm install @neural-charts/native@beta`. La guía que estás leyendo se genera desde docs/guide.md en cada build.
30
+
31
+ ```sh
32
+ npm ci
33
+ npm run showcase # Documentación y ejemplos web
34
+ npm run build:showcase # Build del sitio
35
+ npm run build:showcase:review # Build equivalente del showcase
36
+ npm start # Desarrollo nativo con Expo
37
+ npm run verify # Contratos, tipos y pruebas
38
+ ```
39
+
40
+ # API de la beta
41
+
42
+ Importa NativeDataChart en un componente Angular Native. data es obligatorio y options es opcional. interactionChange emite la observación explorada, la selección y el estado del arrastre. planningError informa de datos u opciones inválidas. El contenedor de la app necesita GestureRoot y la configuración de Metro de Angular Native. El ejemplo recibe los datos tipados desde su consumidor.
43
+
44
+ options.axes configura ejes y rejilla; options.legend configura la leyenda. Su contenido conserva los nombres completos y ocupa como máximo 144 píxeles lógicos: si necesita más espacio se desplaza y muestra una indicación. Esto evita que muchas series desplacen toda la gráfica fuera de la pantalla. Una leyenda de solo lectura sigue señalando las series ocultas; el mensaje de estado solo indica cómo restaurarlas cuando esa acción está disponible. Ocultar la rejilla no elimina las etiquetas ni los datos. Las opciones del showcase utilizan estas mismas entradas.
45
+
46
+ ```ts
47
+ import {Component, input} from '@angular/core';
48
+ import {NativeDataChart, type NativeLineData, type NativeChartOptions}
49
+ from '@neural-charts/native';
50
+
51
+ @Component({
52
+ selector: 'app-example-chart',
53
+ imports: [NativeDataChart],
54
+ template: `<neu-c-chart [data]="data()" [options]="options" />`,
55
+ })
56
+ export class ExampleChart {
57
+ readonly data = input.required<NativeLineData>();
58
+ readonly options = {
59
+ axes: {grid: true, x: {title: 'Día'}, y: {title: 'Visitas'}},
60
+ format: {unit: 'visitas'},
61
+ legend: {visible: true, position: 'bottom'},
62
+ tooltip: {content: 'shared', pinnable: true},
63
+ interaction: {haptics: true},
64
+ } as const satisfies NativeChartOptions<'line'>;
65
+ }
66
+ ```
67
+
68
+ # Showcase web y límites de la vista
69
+
70
+ El sitio web es mobile first y utiliza el host oficial @ng-native/web para representar los mismos componentes. Su adaptador de Pointer Events permite explorar con ratón o dedo y usar el teclado. Las acciones y los detalles pasan por el mismo modelo de selección. La háptica está desactivada y señalizada en esta vista: un navegador no demuestra el comportamiento de los reconocedores nativos, VoiceOver/TalkBack ni la fluidez en hardware. Las capturas web son evidencia del sitio web, no del binario iOS o Android.
71
+
72
+ Cada ejemplo puede verse en formato iOS o Android. La librería también admite tablets; el selector de la web no añade un tercer marco. El gráfico vive en un documento embebido con su propio ancho, de modo que la vista de teléfono no hereda el ancho de escritorio. Son previsualizaciones web, no simuladores del sistema operativo. El botón Reproducir animación reinicia la entrada del mismo componente, conservando su instancia. Movimiento reducido muestra directamente el estado final y cancela una animación en curso.
73
+
74
+ # Orientación y espacio disponible
75
+
76
+ En ventanas horizontales de hasta 500 puntos lógicos de alto se reducen los márgenes y separaciones del componente. Los datos, los objetivos táctiles y las acciones de selección no cambian. La altura del área de dibujo sigue controlada por `options.appearance.plotHeight`, acotada entre 180 y 600 puntos lógicos. Si la configuración completa no cabe, la app debe proporcionar desplazamiento; no se deben recortar los ejes para encajar el contenido.
77
+
78
+ El tooltip flotante utiliza el espacio disponible alrededor del dato, también en áreas de dibujo bajas. Solo pasa al panel de detalles cuando su contenido no cabe sin recortar ni cubrir el punto seleccionado, o cuando la configuración de lectura lo requiere. Los textos ampliados y los detalles extensos conservan su presentación accesible en el panel.
79
+
80
+ # Animación del componente nativo
81
+
82
+ La entrada pertenece a NativeChart y comparte política y parámetros entre plataformas. En iOS y Android utiliza WorkletStyle y valores compartidos oficiales de Angular Native con Reanimated en el hilo de interfaz. La web utiliza BrowserChartMotion con AnimatedStyle en el navegador. Las líneas se revelan de izquierda a derecha; las columnas y barras crecen desde su origen proyectado. Circular y donut conservan su barrido; el gauge revela únicamente la lectura, con fondo, bandas y objetivo fijos. Polar, radar y sectores concéntricos como sunburst, variablepie, rueda y cuerdas crecen desde su centro real proyectado. Embudo, pirámide, treemap y organización se revelan verticalmente. Las comparativas, intervalos y diagramas de arcos se revelan horizontalmente sin escalar sus posiciones. Las nubes de burbujas, dispersión y burbujas empaquetadas crecen desde el centro de cada círculo hasta un máximo de 32; por encima utilizan un fundido agrupado. Las etiquetas esperan a la fase final cuando lo necesita cada familia. Los ejes y la rejilla permanecen fijos. Un único progreso controla las capas, sin recalcular datos ni ejecutar detección de cambios por cada frame en el controlador. El movimiento reducido termina la entrada inmediatamente.
83
+
84
+ options.animation.enabled vale true por defecto. durationMs empieza en 1100 milisegundos y se limita al intervalo 0–2000. Incrementa revision para limpiar selección y tooltip y reproducir la entrada sin desmontar el componente. También se limpia con la animación desactivada o movimiento reducido. Los cambios de título, tema y color no la repiten. Una corrección de tamaño durante el arranque espera al layout estable; un cambio de tamaño durante la animación la termina. El ajuste de movimiento reducido del sistema siempre tiene prioridad.
85
+
86
+ ```html
87
+ <neu-c-chart [data]="data()"
88
+ [options]="{animation: {enabled: true, durationMs: 1100, revision: animationRevision()}}" />
89
+ ```
90
+
91
+ Al tocar o navegar por datos, la entrada termina antes de seleccionar para que el tooltip coincida con la posición definitiva. Un cambio de tamaño termina la transformación anterior. Al cambiar de geometría se sustituye la animación; al desmontar se cancela cualquier arranque pendiente y la ejecución de animación de la plataforma. Compartir componente, parámetros y política no demuestra fluidez ni comportamiento táctil en un dispositivo: las pruebas nativas y sus límites se registran por separado.
92
+
93
+ Al ocultar o restaurar una serie desde la leyenda, o actualizar valores dentro del mismo tipo, la geometría anterior y la nueva se funden con una transición breve de hasta 220 ms. Los refrescos frecuentes no vuelven a iniciar la entrada de 1100 ms; cambiar de tipo o incrementar revision sí la reproduce. La selección válida se conserva; no se reinicia la animación de entrada por tener o no un tooltip activo. Se mantiene una sola geometría anterior y se libera al finalizar. animation.enabled: false, duración cero y movimiento reducido muestran el estado final directamente. No se recalculan datos por fotograma.
94
+
95
+ # Identidad de los datos
96
+
97
+ Cada observación tiene una identidad estable formada por seriesId y pointId. Las etiquetas, la posición visual y la referencia del objeto no sustituyen esa identidad. El dato explorado y el seleccionado son estados distintos: mover el dedo muestra una vista previa, soltar la confirma y cancelar recupera la anterior. Un cambio de datos conserva la selección si su identidad sigue existiendo en la misma familia; shared conserva su grupo semántico cuando sea posible. updateScenePresentation cambia metadatos y colores reutilizando geometría e índices. La preview no recalcula el Core por título, descripción o color.
98
+
99
+ Cada coordenada compartida identifica un único grupo semántico; varias series pueden pertenecer al mismo grupo. Dos claves de grupo distintas en esa coordenada se rechazan para evitar que el tacto seleccione un grupo diferente del que muestra la navegación.
100
+
101
+ # Configuración reutilizable
102
+
103
+ NativeDataChart recibe data y options. NativeChartOptions agrupa axes, legend, tooltip, animation, interaction y appearance con interfaces readonly. Usa as const satisfies NativeChartOptions<'line'> para conservar literales y detectar incompatibilidades. Las familias sin ejes los rechazan; el tooltip compartido pertenece a líneas y columnas/barras. El gauge usa data.unit y no admite leyenda. Cada referencia documenta tipos, valores iniciales, restricciones y ejemplos.
104
+
105
+ La entrada hiddenSeriesIds es un modelo opcional: la leyenda funciona por sí misma y también permite [(hiddenSeriesIds)] para guardar la visibilidad en la aplicación. Al cambiar los datos se eliminan identificadores que ya no existen. Ocultar la serie seleccionada limpia el detalle y notifica interactionChange; al cambiar las filas de un grupo compartido se notifica su contenido actualizado. Cambiar solo tooltip o leyenda no vuelve a planificar los datos. NativeChart y NativeScene quedan disponibles como API avanzada de escenas proyectadas.
106
+
107
+ Los paths de escenas externas se validan una vez al adquirirlos: comandos completos, números finitos y flags de arcos. La geometría puede salir del plot para recortar dominios explícitos; parámetros y extremos se limitan en magnitud a 1024 veces la mayor dimensión de escena. El contenedor nativo recorta el dibujo. Esta validación no calcula el contorno completo de curvas o arcos. Los límites son de seguridad, no presupuestos de rendimiento de dispositivos.
108
+
109
+ # Háptica
110
+
111
+ El interruptor permite desactivar la respuesta. Se pide feedback solo cuando cambia la identidad del dato, nunca por cada evento del dedo, con al menos 45 ms entre peticiones. Se omite en simuladores, sin módulo, con ahorro de batería, fuera de primer plano o con movimiento reducido. Android utiliza el feedback de la vista que respeta los ajustes del sistema; iOS conserva las restricciones del sistema. Un módulo presente no demuestra que exista un actuador físico. Las respuestas requieren revisión en hardware real.
112
+
113
+ # Accesibilidad
114
+
115
+ La gráfica es un control nativo ajustable con etiqueta, valor y acciones anterior/siguiente. También ofrece botones de 48 puntos y texto nativo escalable. Con un lector de pantalla activo se evita competir con sus gestos. La navegación por datos usa las mismas identidades que el tacto. VoiceOver, TalkBack, contraste, tamaños de texto y lectura completa de datos necesitan revisión en dispositivos antes de certificar accesibilidad.
116
+
117
+ # Datos y recursos
118
+
119
+ Cada dato se identifica por serie y punto, nunca por etiqueta o índice visual. Las escenas se copian y congelan al entrar. Se valida finitud, identidad y límites: 10.000 observaciones, 16 series y límites de geometría. El índice se prepara una vez. Los movimientos se agrupan por frame, con búsqueda binaria por posición y resolución de coincidencias. Al desmontar se cancelan frames y se eliminan listeners y referencias. Este límite es defensivo, no una promesa de rendimiento para 10.000 puntos.
120
+
121
+ Burbujas utiliza el tamaño medido del área de datos para planificar posiciones y radios en el Core. Mantiene círculos, ejes y selección alineados sin reservar las franjas vacías de un marco panorámico fijo. Solo un cambio real de dimensiones actualiza esa planificación; los movimientos del dedo y las mediciones repetidas no la vuelven a ejecutar. En la API avanzada de escenas, viewportChange comunica las dimensiones del área de datos; la fachada data/options lo gestiona automáticamente.
122
+
123
+ # Cálculo compartido
124
+
125
+ NativeDataChart convierte la definición de datos mediante la entrada pública @neural-charts/core/plan, sin DOM. planNativeChart está disponible en @neural-charts/native/plan para integraciones avanzadas. El cálculo permanece en el Core compartido; el adaptador se ocupa de presentación, selección y ejecución nativa.
126
+
127
+ # Datos reales
128
+
129
+ El paquete instala una versión fijada de @neural-charts/core desde npm. El Core público, con licencia MIT, valida los datos y calcula dominios, ticks y geometría sin APIs de navegador ni de Angular Native. La aplicación y el showcase usan la misma fachada NativeDataChart. Los contratos y la documentación del motor están en https://github.com/PedroMorenoTrujillo/neural-charts-core.
130
+
131
+ Admite categorías, líneas con intervalos numéricos irregulares o fechas UTC, varias series, huecos null, ceros y negativos. Conserva identidades y transporta claves de grupo. La visibilidad recalcula dominios/sectores en el Core y conserva la leyenda al ocultarlo todo. Rechaza duplicados, valores no finitos y excesos de límites. Estas validaciones no certifican rendimiento en dispositivos.
132
+
133
+ Los ejemplos copiados importan únicamente entradas públicas. data contiene valores e identidades; options contiene títulos, colores y presentación. Los cambios de presentación reutilizan la geometría y los índices de interacción.
134
+
135
+ Mantén los objetos de negocio fuera de la entrada de la gráfica y recupéralos mediante los IDs de serie y punto del evento. Los campos datum, markers y dash por serie se rechazan; los marcadores se configuran mediante options.appearance.markers y el trazo discontinuo aún no está disponible. Títulos y rejilla de ejes pertenecen a options.axes; no se admiten ajustes de ancho de etiqueta en data. Las incompatibilidades producen un diagnóstico en lugar de aceptar opciones sin efecto.
136
+
137
+ El buscador encuentra propiedades concretas como options.tooltip.pinnable e interfaces como NativeTooltipOptions. El resultado abre directamente la propiedad o el tipo, también al recargar o compartir su URL, sin fragmentos en la dirección.
138
+
139
+ # Configurador y filtros
140
+
141
+ Cada familia tiene un único conjunto de datos ilustrativos. Líneas y columnas comparan dos series de ese mismo conjunto; barras utiliza sus canales. No se alternan conjuntos de datos preparados para simular opciones. El configurador modifica título, subtítulo, colores, visibilidad y posición de la leyenda, ejes, títulos de ejes y rejilla. El filtro conserva una parte del origen: los últimos cuatro días o los dos primeros canales. Los identificadores de serie y punto se mantienen.
142
+
143
+ En escritorio puedes ver las opciones junto al teléfono; en móvil aparecen debajo. La gráfica embebida, la tabla y el código se actualizan con el mismo estado de signals. Restablecer recupera las opciones y visibilidad iniciales. Replay limpia selección/tooltip y respeta movimiento reducido. Texto y color no repiten la entrada ni recalculan datos. Una actualización conserva una identidad seleccionada que siga existiendo; todavía no hay una entrada de selección controlada.
144
+
145
+ # Pruebas y límites
146
+
147
+ Las pruebas Node usan un Fabric simulado y comprueban contratos e interacción. La compilación y los bundles comprueban integración, no fluidez. Las capturas de simulador prueban representación en ese simulador. La háptica, latencia y calidad percibida se miden en dispositivos reales. Android necesita un SDK y runtime Java disponibles para validar el binario. El ledger registra evidencias y pendientes sin equipararlos a certificación.
148
+
149
+ # Estado de las pruebas nativas
150
+
151
+ La revisión actual ha probado la fachada data/options en Android API 36 y en un iPhone iOS 27: Siguiente, selección táctil, cambio de dato, cierre al repetir toque, replay y seis leyendas con ocultación total/restauración. Gauge no tiene leyenda. Líneas, columnas y barras tienen comprobación de tooltip compartido con dos series y fijación/cierre. Android añade un escenario de doce series con nombres largos, árabe, un nombre sin espacios, cero y ausencia: permite leer la última fila, desplazar el panel, fijar y cerrar. La matriz Android incluye tamaño de tablet mediante resolución y densidad ajustadas en el emulador propio, no hardware físico. Quedan la matriz avanzada de contenido en iOS/tablets, cancelación, texto grande, rotación, iPad, lectores, háptica física y rendimiento medido. Las capturas y los resultados se registran con su alcance; los formatos embebidos de la web son previsualizaciones de navegador.
152
+
153
+ La campaña del 1 de noviembre verifica Árbol, Organización, Dependency Wheel, Arc Diagram y Chord en Android e iOS sobre la revisión 57e8142: cinco casos aprobados por plataforma. Comprueba dibujo nativo, selección táctil con identidad original, contenido y cierre del tooltip, replay y ocultación total/restauración de la leyenda sin errores de configuración. Esta comprobación focal no supone una nueva validación de los 48 tipos ni de sus 195 ejemplos. Los 41 tipos básicos, los intervalos y los comparativos tienen campañas anteriores separadas. Siguen pendientes la matriz completa de variantes, estrés, tablets, lectores y háptica física. El informe reproducible está en docs/native-verification.md.
154
+
155
+ # Pruebas y limpieza de recursos
156
+
157
+ npm test ejecuta pruebas finitas con un máximo de dos trabajadores. Cada caso desmonta sus aplicaciones. Cada ejecución elimina su carpeta temporal al terminar, fallar o interrumpirse normalmente; no guarda un archivo de capturas por ejecución. Los servidores y simuladores propios se cierran cuando terminan sus comprobaciones. Las pruebas Node y las regresiones de compilación de Metro para iOS y Android no sustituyen la aceptación nativa. Los resultados por revisión se registran en el ledger. Detalles y límites en docs/test-resources.md.
158
+
159
+ # Catálogo y opciones actuales
160
+
161
+ Los tipos disponibles se renderizan con NativeChart en la aplicación nativa y en el host web oficial. Pie y Donut usan sectores táctiles; Gauge conserva el valor exacto; Burbujas conserva X, Y y tamaño. Las etiquetas porcentuales utilizan contraste de texto automático y se limitan a sectores legibles. Las barras agrupadas reciben las posiciones de categoría del Core. Las líneas densas omiten marcadores decorativos sin descartar datos; las burbujas densas agrupan geometría por serie para limitar vistas nativas.
162
+
163
+ El showcase utiliza Neural UI v2, inglés/español y temas claro/oscuro. Cada familia tiene demo, configurador y documentación propia. Solo ofrece marcos iOS/Android; la librería también admite tablets. El cambio de marco conserva la instancia y la selección. Una gráfica ancha permite desplazamiento horizontal y selección por toque.
164
+
165
+ La preview utiliza NativeDataChart y la misma política de animación, con ejecución propia del navegador y respeto al movimiento reducido. El navegador no certifica el comportamiento de los reconocedores, el rendimiento ni la háptica de iOS/Android. La nueva fachada y los ajustes de detalle requieren una nueva aceptación nativa.
166
+
167
+ # Zoom y exploración
168
+
169
+ Activa `options.viewport` en líneas, columnas, barras o burbujas. Al omitirlo no aparecen controles ni reconocedores de zoom. Dentro del grupo, `axes` vale `'x'` por defecto y `pinch`, `pan` y `controls` valen `true`. Las opciones explícitas del ejemplo facilitan decidir qué interacción necesita tu aplicación.
170
+
171
+ ```ts
172
+ import type {NativeChartOptions} from '@neural-charts/native';
173
+
174
+ const options = {
175
+ viewport: {axes: 'x', pinch: true, pan: true, controls: true},
176
+ } satisfies NativeChartOptions<'line'>;
177
+ ```
178
+
179
+ El pellizco amplía la ventana de datos; el arrastre con dos dedos la desplaza. Un dedo sigue disponible para explorar puntos. Los controles permiten ampliar, reducir, desplazar y restablecer sin depender de un gesto. `(viewportChange)` entrega `{value, source}` cuando cambia la ventana aceptada, no en cada movimiento. La vista previa del gesto transforma la presentación y el Core calcula el resultado al terminar. Cancelar, cambiar los datos o desmontar no debe dejar una transformación pendiente.
180
+
181
+ `x` e `y` identifican los ejes de los datos. En barras horizontales, el eje de categorías `x` se dibuja verticalmente. Las categorías se delimitan mediante IDs existentes; los ejes numéricos o temporales utilizan intervalos numéricos. Circular, donut y gauge no admiten `viewport`. Un tooltip fijado pausa la exploración hasta cerrarlo o desfijarlo.
182
+
183
+ El desplazamiento de una gráfica ancha es independiente del zoom: `options.appearance.minPlotWidth` reserva anchura para el área de datos y las etiquetas X. Solo esa región se desplaza; título, eje Y, leyenda y controles conservan su posición. Usa `0` para adaptarla al ancho disponible.
184
+
185
+ En árbol y organización, el viewport utiliza coordenadas de distribución normalizadas 0–1. Una zona ampliada puede no contener nodos aunque el origen sí los tenga. El mensaje distingue esa región vacía de una fuente sin datos o de todos los grupos ocultos. Ofrece alejar/restablecer o desplazar únicamente cuando esas acciones están activadas; restablecer conserva los nodos e IDs originales.
186
+
187
+ # Variantes, referencias y estilos
188
+
189
+ Columnas y barras admiten una serie, series agrupadas y `options.layout.stacking: 'sum' | 'percent'`. En porcentaje, cada categoría visible necesita valores conocidos y no negativos en todas las series visibles. Un valor ausente produce `INCOMPLETE_PERCENT_CATEGORY`; un cero real conserva su significado. El tooltip compartido muestra el valor original y su porcentaje cuando existe. Las líneas, circular, donut, gauge y burbujas no admiten apilado.
190
+
191
+ `options.axes.x.referenceLines` y `options.axes.y.referenceLines` marcan valores sin ampliar el dominio. Cada referencia tiene `id`, `value` y, opcionalmente, `label`, `color`, `width` y `dash`. Se admiten hasta 16 IDs únicos entre ambos ejes. Columnas y barras utilizan el eje de valores `y`; sus referencias cambian de orientación junto a la gráfica. En un eje X categórico, `value` es el ID de una categoría. Una referencia fuera de la ventana no se dibuja.
192
+
193
+ `options.appearance.points` configura hasta 256 colores mediante `{seriesId, pointId, color}` en los tipos cartesianos. Los IDs deben existir en los datos. El cambio afecta al punto y su detalle, sin cambiar el valor, el color de la línea ni su leyenda. Circular y donut utilizan `appearance.series` para sus sectores; gauge utiliza la serie `reading`.
194
+
195
+ Configura títulos con `appearance.title`, `appearance.subtitle` y `axes.x.titleStyle` o `axes.y.titleStyle`. Estos grupos ofrecen alineación, color, tamaño y peso. Las líneas admiten marcadores circulares, cuadrados, rombos y triángulos, con relleno y borde propios, dentro de `appearance.markers`. Los cambios de presentación reutilizan el cálculo de datos. Las interfaces y la referencia de propiedades muestran los límites de cada opción.
196
+
197
+ La leyenda admite `top`, `bottom`, `left` y `right`. Las posiciones laterales requieren al menos 640 píxeles lógicos de ancho del componente; por debajo, izquierda pasa arriba y derecha pasa abajo, conservando visibilidad y selección de series.
198
+
199
+ # Áreas, líneas suaves y dispersión
200
+
201
+ `NativeAreaData`, `NativeSplineData` y `NativeScatterData` utilizan `type: 'area'`, `'spline'` y `'scatter'`. Cada tipo tiene su demo, configurador y referencia individual.
202
+
203
+ Áreas rellena hasta cero con transparencia y dibuja el contorno aparte. Las series se superponen sin apilarse. Por defecto el eje Y incluye cero; un dominio explícito puede recortar el relleno. `includeZero: false` es incompatible. Los huecos se conservan por defecto; `series.gaps: 'connect'` permite unirlos de forma explícita.
204
+
205
+ Spline utiliza interpolación monótona del Core entre observaciones ordenadas. Las muestras de la curva no son datos ni objetivos táctiles: el tooltip y la tabla conservan los valores originales. No admite configurar otra curva mediante `series.curve`. Comparte marcadores, tooltip compartido, referencias, leyendas y ventana de datos con líneas.
206
+
207
+ Dispersión representa pares X/Y independientes, sin conectarlos ni asignarles tamaño Z. Admite pares ausentes con null, ceros, negativos, ejes numéricos, referencias, colores por punto, leyendas y ventana en ambos ejes. Sus marcadores son circulares del mismo tamaño. El tooltip es individual; las opciones de línea, los marcadores de línea y el detalle compartido se rechazan.
208
+
209
+ Los nuevos tipos continúan en estado experimental hasta completar su aceptación nativa. Las pruebas del navegador o de compilación no certifican los gestos de iOS/Android ni el rendimiento en dispositivos.
210
+
211
+ # Ejemplos con datos y enlaces propios
212
+
213
+ La galería reúne los casos de uso de los tipos implementados. Cada tarjeta abre una URL como `/charts/line/time` o `/charts/areaspline/percent`; el código de datos y opciones corresponde al caso seleccionado. No modifica otra gráfica fuera de la vista. Los ejemplos de una misma familia reutilizan una única instancia del componente nativo y sus controles de presentación mantienen el mismo origen de datos. Los filtros conservan IDs y valores de las observaciones supervivientes.
214
+
215
+ Los casos incluyen huecos, UTC, intervalos irregulares, signos, series coincidentes, nombres largos, datos densos, dominios recortados, apilados, ceros/ausentes, bandas y lecturas fuera del rango. La señal densa es sintética y su código usa un generador tipado; no es una medición de rendimiento del dispositivo. Las etiquetas largas se acotan visualmente y conservan el texto accesible completo.
216
+
217
+ Waterfall, radar, área polar y Pareto utilizan cálculo propio en la entrada pública del Core. Pareto deriva el acumulado sobre el origen completo y utiliza un eje porcentual independiente; las combinaciones genéricas con múltiples ejes siguen pendientes. La baseline distingue implementación, verificación web y aceptación nativa.
218
+
219
+ # Áreas apiladas
220
+
221
+ Utiliza `NativeAreaData` o `NativeAreaSplineData` y configura `options.layout.stacking` como `sum` o `percent`. La suma separa aportaciones positivas y negativas; el porcentaje rechaza valores negativos. Una fila incompleta interrumpe todas las bandas y no se rellena con ceros. Los porcentajes utilizan solo las series visibles. Un total cero no tiene porcentaje definido.
222
+
223
+ ```typescript
224
+ import type {NativeChartOptions} from '@neural-charts/native';
225
+
226
+ const options = {
227
+ layout: {stacking: 'sum', stackLabels: true},
228
+ tooltip: {content: 'shared'},
229
+ } as const satisfies NativeChartOptions<'area'>;
230
+ ```
231
+
232
+ El apilado es incompatible con `series.curve`, `gaps: 'connect'` y `axes.y.includeZero: false`. El tooltip mantiene el valor original de cada aportación. Ocultar una serie recalcula la pila mediante el Core.
233
+
234
+ # Series mixtas
235
+
236
+ `NativeMixedData` combina series `type: 'column'`, `'line'` y `'area'` sobre un único marco de categorías y una escala Y compartida. Cada serie mantiene ID, nombre y puntos propios. No superpone componentes ni calcula una escala diferente para cada capa. Los rellenos se pintan bajo las columnas y las líneas quedan encima.
237
+
238
+ ```typescript
239
+ import type {NativeMixedData, NativeChartOptions} from '@neural-charts/native';
240
+
241
+ const data = {
242
+ type: 'mixed',
243
+ axes: {
244
+ x: {type: 'category', values: [{id: 'mon'}, {id: 'tue'}]},
245
+ y: {type: 'linear'},
246
+ },
247
+ series: [
248
+ {id: 'actual', name: 'Actual', type: 'column', data: [
249
+ {id: 'mon', x: 'mon', y: 29}, {id: 'tue', x: 'tue', y: 35},
250
+ ]},
251
+ {id: 'target', name: 'Target', type: 'line', data: [
252
+ {id: 'mon', x: 'mon', y: 30}, {id: 'tue', x: 'tue', y: 30},
253
+ ]},
254
+ ],
255
+ } as const satisfies NativeMixedData;
256
+ const options = {tooltip: {content: 'shared'}} as const satisfies NativeChartOptions<'mixed'>;
257
+ ```
258
+
259
+ El tooltip compartido y la selección se agrupan por ID de categoría, conservando los centros de las columnas agrupadas. Leyenda, referencias y zoom utilizan el mismo marco. Esta versión admite X categórico y una Y numérica; no admite unidades incompatibles sobre esa misma escala, apilado mixto, eje secundario ni Pareto. Las series `column` rechazan `curve` y `gaps`.
260
+
261
+ # Treemap
262
+
263
+ `NativeTreemapData` contiene `root`. Cada nodo tiene un ID globalmente único y una etiqueta opcional. Una hoja contiene `value: number | null`; una rama contiene `children`, nunca ambos. El Core calcula la distribución y los subtotales conocidos. Un descendiente ausente marca su subtotal como incompleto. Los ceros conservan navegación sin inventar área.
264
+
265
+ ```typescript
266
+ import type {NativeTreemapData} from '@neural-charts/native';
267
+
268
+ const data = {
269
+ type: 'treemap',
270
+ root: {id: 'portfolio', label: 'Portfolio', children: [
271
+ {id: 'software', label: 'Software', children: [
272
+ {id: 'apps', label: 'Applications', value: 42},
273
+ {id: 'cloud', label: 'Cloud', value: 28},
274
+ ]},
275
+ {id: 'services', label: 'Services', value: 22},
276
+ ]},
277
+ } as const satisfies NativeTreemapData;
278
+ ```
279
+
280
+ El toque selecciona el bloque pintado más profundo y repetirlo cierra el tooltip. Anterior/Siguiente permite consultar ceros y nodos sin espacio. Las etiquetas se acotan dentro de cada bloque; el detalle conserva el nombre completo. Los colores de grupo se configuran mediante IDs en `options.appearance.series`. No se exponen ejes, zoom cartesiano, tooltip compartido, leyenda de visibilidad, navegación a subárboles ni escala de color cuantitativa en esta versión.
281
+
282
+ Límites de seguridad: 512 nodos, profundidad 16, raíz y hasta 15 grupos, etiquetas de 200 caracteres y hasta 64 etiquetas visuales. Se rechazan negativos, sumas desbordadas, ciclos, nodos repetidos y propiedades incompatibles. Estos límites no certifican rendimiento físico.
283
+
284
+ # Etiquetas de valores y totales
285
+
286
+ `options.appearance.dataLabels` activa etiquetas de valores originales en gráficas cartesianas. En líneas y curvas solo etiqueta observaciones reales: un cruce geométrico o una muestra interpolada no añade datos. En burbujas utiliza el tamaño original. Está desactivada por defecto en cartesianas; las etiquetas de sectores y jerarquía están activadas por defecto.
287
+
288
+ `options.layout.stackLabels` requiere `stacking`. En suma muestra por separado totales positivos y negativos; en porcentaje muestra 100 % solo cuando el total está definido. Los valores proceden del cálculo del Core, sin volver a sumar en el componente. Se omiten filas incompletas y extremos fuera del dominio. Ambas opciones son independientes del tooltip.
289
+
290
+ La presentación limita las etiquetas a 64, evita solapamientos y omite las que no caben o quedan fuera de la ventana. Los valores de puntos se colocan por encima del marcador, dejando espacio libre; si no hay sitio, se omite la etiqueta en vez de cubrir el punto. En burbujas se respeta el radio dibujado. Las etiquetas interiores de celdas, sectores y jerarquías conservan su colocación propia. Por encima de 64 observaciones no se crean etiquetas por punto. Los valores exactos continúan disponibles mediante tooltip y navegación accesible. El escalado de texto del sistema sigue habilitado.
291
+
292
+ # Nuevas familias de datos
293
+
294
+ Waterfall utiliza un flujo ordenado de incrementos, subtotales de tramo y total acumulado. Admite valores con signo y conserva el prefijo al ampliar una ventana; no admite cambios desconocidos ni apilado. Radar compara perfiles no negativos en 3–32 ejes radiales; los valores ausentes interrumpen el contorno y eliminan el relleno. Área polar mantiene iguales los ángulos y permite radio lineal o superficie proporcional.
295
+
296
+ Pareto admite hasta 64 categorías completas no negativas, ordena de forma estable y calcula el porcentaje acumulado en una escala Y independiente. La leyenda y el zoom X no modifican el denominador. El origen todo a cero conserva los ceros seleccionables y omite la curva porcentual.
297
+
298
+ Los cuatro incluyen ejemplos independientes y contratos data/options. Las comprobaciones locales de cálculo, componente y navegador se distinguen de la aceptación física en iOS y Android, todavía pendiente para estas familias.
299
+
300
+ # Embudo y pirámide
301
+
302
+ `NativeFunnelData` y `NativePyramidData` reciben `type: 'funnel'` o `type: 'pyramid'` y un array `data` de 1–16 etapas `{id, label, value}`. Los IDs son únicos y estables; los valores son finitos y no negativos. Se rechaza `null`: todas las etapas deben tener un valor conocido. El orden original nunca se ordena por magnitud.
303
+
304
+ La **altura de cada fila** es proporcional a su valor dentro del total visible; el área del polígono no es proporcional. Los porcentajes son participaciones en la suma de etapas visibles. No representan conversión, retención ni porcentaje respecto a la primera etapa. Ocultar una etapa mediante la leyenda redistribuye las alturas y el denominador de las restantes. Cero conserva identidad, tabla y navegación Anterior/Siguiente sin dibujar un polígono ni crear una zona táctil invisible. Si todo es cero, no se inventan porcentajes ni volumen.
305
+
306
+ La forma pertenece a `options.layout`, nunca a los datos:
307
+
308
+ ```ts
309
+ import type {NativeFunnelData, NativeChartOptions} from '@neural-charts/native';
310
+
311
+ const data = {
312
+ type: 'funnel',
313
+ data: [
314
+ {id: 'awareness', label: 'Conocimiento', value: 480},
315
+ {id: 'interest', label: 'Interés', value: 300},
316
+ {id: 'evaluation', label: 'Evaluación', value: 160},
317
+ {id: 'purchase', label: 'Compra', value: 60},
318
+ ],
319
+ } as const satisfies NativeFunnelData;
320
+
321
+ const options = {
322
+ layout: {neckWidth: 0.3, neckHeight: 0.25, reversed: false},
323
+ legend: {position: 'bottom', interactive: true},
324
+ tooltip: {content: 'point', pinnable: true},
325
+ appearance: {dataLabels: true, series: [{id: 'awareness', color: '#2C6DCD'}]},
326
+ } as const satisfies NativeChartOptions<'funnel'>;
327
+ ```
328
+
329
+ Embudo admite `neckWidth` y `neckHeight` entre 0 y 1, con valores iniciales 0.3 y 0.25; `reversed` empieza en `false`. Pirámide solo admite `reversed`, inicialmente `true`: el vértice aparece arriba y la silueta se ensancha hacia abajo. Cambiar la dirección no reordena las etapas. Cambiar la forma recalcula geometría; colores y nombres mediante `appearance.series` conservan geometría e identidades. Las etiquetas que no caben en una etapa estrecha se omiten para conservar legibilidad: el valor no se descarta y continúa disponible mediante toque, tooltip, Anterior/Siguiente y tabla.
330
+
331
+ Ambas familias admiten títulos, tema, locale, colores por ID de etapa, leyenda, etiquetas, detalle individual, fijación y una entrada por opacidad acotada. Se rechazan ejes, viewport, apilado y totales apilados, tooltip compartido, marcadores, crosshair y cambios de apariencia por punto. La pirámide rechaza las opciones de cuello. La web muestra cuatro ejemplos de embudo y tres de pirámide, con datos y opciones copiables sobre el mismo componente nativo. La aceptación física en iOS y Android sigue pendiente; la previsualización web no la sustituye.
332
+
333
+ # Área suave, bandas y columnas de intervalo
334
+
335
+ `NativeAreaSplineData` utiliza `type: 'areaspline'` y el mismo origen ordenado id/x/y de una línea. Sin apilado, la interpolación monótona es fija y el relleno termina en cero. Null interrumpe el trazado y el área. Admite marcadores, detalle compartido, leyenda, referencias y viewport; rechaza `series.curve`. Las muestras geométricas de la curva no se convierten en observaciones nuevas.
336
+
337
+ Para área spline apilada utiliza `options.layout.stacking: 'sum'`; para apilado al 100 %, utiliza `'percent'`. Opcionalmente, `stackLabels: true` muestra los totales visibles. Las capas utilizan curvas suaves compartidas, con tangentes horizontales en los puntos originales, para mantener bordes coincidentes y evitar que una capa invada otra. Esta interpolación conservadora es distinta de la curva monótona sin apilar. Los huecos rompen todas las capas y el porcentaje rechaza valores negativos. El tooltip compartido conserva los valores originales y añade el porcentaje cuando está definido.
338
+
339
+ ```typescript
340
+ import type {NativeChartOptions} from '@neural-charts/native';
341
+
342
+ const options = {
343
+ layout: {stacking: 'percent', stackLabels: true},
344
+ tooltip: {content: 'shared'},
345
+ legend: {interactive: true},
346
+ } as const satisfies NativeChartOptions<'areaspline'>;
347
+ ```
348
+
349
+ `NativeAreaRangeData`, `NativeAreaSplineRangeData` y `NativeColumnRangeData` utilizan `arearange`, `areasplinerange` y `columnrange`. Cada serie requiere `id`, `name` y puntos `{id, x, low, high}`. X puede ser categoría, número o tiempo UTC. Los extremos deben ser finitos y cumplir `low <= high`; una ausencia requiere `low: null` y `high: null`. Se rechaza una pareja incompleta. Las bandas y columnas flotan entre extremos originales; no se infiere un punto medio ni un margen de incertidumbre.
350
+
351
+ ```ts
352
+ import type {NativeAreaRangeData, NativeChartOptions} from '@neural-charts/native';
353
+
354
+ const data = {
355
+ type: 'arearange',
356
+ axes: {x: {type: 'linear'}, y: {type: 'linear'}},
357
+ series: [{id: 'temperature', name: 'Temperatura', data: [
358
+ {id: 'morning', x: 8, low: 12, high: 22},
359
+ {id: 'midday', x: 12, low: 18, high: 29},
360
+ {id: 'evening', x: 18, low: 15, high: 24},
361
+ ]}],
362
+ } as const satisfies NativeAreaRangeData;
363
+ const options = {tooltip: {content: 'shared'}} as const satisfies NativeChartOptions<'arearange'>;
364
+ ```
365
+
366
+ El detalle individual y compartido, la tabla y la navegación conservan ambos extremos. Las curvas de `areasplinerange` son fijas; no crean puntos semánticos intermedios. Las tres familias admiten ejes, referencias, colores, etiquetas, leyenda y viewport. No admiten apilado, marcadores, curve/gaps por serie ni colores por punto.
367
+
368
+ # Histogramas y densidad normal
369
+
370
+ `NativeHistogramData` recibe `type: 'histogram'`, `samples: readonly number[]` y `binCount` opcional. Admite hasta 10.000 medidas finitas, con negativos y sin null. El Core calcula las frecuencias: no se entregan columnas preparadas. `binCount` es entero entre 1 y 64; omitido utiliza `ceil(log2(n)) + 1`, limitado a 64. Cada intervalo incluye su extremo izquierdo; solo el último incluye el derecho. Las muestras constantes producen un único intervalo. La altura es el recuento y el tooltip conserva los límites numéricos. Una partición explícita que no se pueda representar por precisión numérica genera diagnóstico.
371
+
372
+ `NativeBellcurveData` recibe `type: 'bellcurve'` y las muestras originales. Calcula media y desviación típica **muestral**, con denominador `n−1`, y genera densidad normal en torno a la media. `intervals` es entero entre 16 y 256, inicialmente 64, y produce `intervals + 1` puntos derivados. `standardDeviations` está entre 1 y 6, inicialmente 3, a cada lado de la media. La curva representa densidad, no frecuencias ni observaciones originales; un ajuste no demuestra que el origen sea normal.
373
+
374
+ Con menos de dos muestras o varianza cero conserva el recuento y la media reales, sin inventar una curva ajustada. El origen vacío conserva un resumen de cero muestras. Los cálculos no representables generan diagnóstico explícito. La leyenda oculta la serie derivada `distribution` sin cambiar el resumen del origen completo.
375
+
376
+ ```ts
377
+ import type {NativeHistogramData, NativeBellcurveData} from '@neural-charts/native';
378
+
379
+ const samples = [12, 15, 18, 20, 21, 22, 24, 25, 25, 26, 28, 30, 32, 35];
380
+ const histogram = {type: 'histogram', samples, binCount: 6} as const satisfies NativeHistogramData;
381
+ const density = {type: 'bellcurve', samples, intervals: 64, standardDeviations: 3} as const satisfies NativeBellcurveData;
382
+ ```
383
+
384
+ Ambas familias admiten títulos, ejes, cuadrícula, colores por ID `distribution`, etiquetas, leyenda y detalle individual con fijación. No admiten viewport, referencias, tooltip compartido, marcadores, colores por punto ni apilado. El resumen de la web y su tabla distinguen recuentos y densidad derivados de las muestras originales.
385
+
386
+ # Áreas centradas
387
+
388
+ `NativeStreamgraphData` utiliza `type: 'streamgraph'`, ejes ordenados y series con `id`, `name` y puntos id/x/y. Y debe ser no negativo o null. La distribución centrada es fija: los desplazamientos se utilizan exclusivamente para geometría; tooltip, etiquetas, tabla y navegación conservan los valores originales. Una aportación ausente interrumpe toda la fila, sin convertirla en cero.
389
+
390
+ Admite detalle individual o compartido, leyenda, colores, etiquetas, referencias y viewport. Rechaza layout stacking, curve/gaps por serie, grosor de línea, marcadores y colores por punto. Los tres ejemplos muestran composición básica, fila incompleta y totales desiguales. La aceptación física de estas siete familias en iOS y Android continúa pendiente y se registra por separado de las verificaciones de cálculo y navegador.
391
+
392
+ # Cajas, bigotes y barras de error
393
+
394
+ `NativeBoxplotData` recibe `type: 'boxplot'`, ejes y series con `id`, `name` y puntos `{id, x, minimum, q1, median, q3, maximum}`. Los cinco números son resúmenes suministrados por la aplicación, no muestras originales: la gráfica no calcula cuartiles ni infiere valores atípicos. Deben ser finitos y cumplir `minimum <= q1 <= median <= q3 <= maximum`, o ser todos null para un hueco completo. El tooltip, la navegación accesible y la tabla conservan los cinco valores. El detalle compartido utiliza espacio separado cuando necesita presentar varias series.
395
+
396
+ `NativeErrorbarData` recibe `type: 'errorbar'` y puntos `{id, x, low, high}`. Entrega los límites que ya define tu origen; no se calculan error estándar, confianza ni incertidumbre desde muestras. Ambos extremos deben ser finitos con `low <= high`, o ambos null. Los extremos coincidentes siguen siendo datos semánticos, aunque la altura sea cero.
397
+
398
+ ```ts
399
+ import type {NativeBoxplotData, NativeChartOptions} from '@neural-charts/native';
400
+
401
+ const data = {
402
+ type: 'boxplot',
403
+ axes: {x: {type: 'category', values: [{id: 'a', label: 'Grupo A'}, {id: 'b', label: 'Grupo B'}]}, y: {type: 'linear'}},
404
+ series: [{id: 'summary', name: 'Resumen de medidas', data: [
405
+ {id: 'a', x: 'a', minimum: 8, q1: 12, median: 17, q3: 22, maximum: 28},
406
+ {id: 'b', x: 'b', minimum: 10, q1: 14, median: 19, q3: 24, maximum: 30},
407
+ ]}],
408
+ } as const satisfies NativeBoxplotData;
409
+ const options = {layout: {whiskerWidth: 0.5}, tooltip: {content: 'shared'}} as const satisfies NativeChartOptions<'boxplot'>;
410
+ ```
411
+
412
+ Las dimensiones del glifo pertenecen a `options.layout`: `whiskerWidth` en cajas está entre 0 y 1, inicialmente 0.5; `capWidth` en barras de error está entre 0 y 1, inicialmente 1. Son fracciones del ancho de su cuerpo, no valores de los datos. Los datos nativos rechazan esos campos. `groupGap`, `barGap` y `maxBarWidth` siguen siendo geometría del origen, como en columnas.
413
+
414
+ # Tallos, parejas y columnas triangulares
415
+
416
+ `NativeLollipopData` utiliza `type: 'lollipop'` y puntos id/x/y. Un tallo desde cero y un extremo representan el valor original, con signo. Cero conserva el extremo y navegación; null es ausencia. `NativeDumbbellData` utiliza `type: 'dumbbell'` y parejas id/x/low/high, finitas y ordenadas o ambas null. La línea une los extremos originales; no añade un punto medio. Una pareja coincidente conserva ambos valores.
417
+
418
+ El radio de los círculos de extremo se configura mediante `options.layout.markerRadius`, entre 1 y 16 puntos lógicos, inicialmente 4. Es una dimensión del glifo; no utiliza `appearance.markers`. Cambiarla recalcula la forma y conserva métricas e identidades.
419
+
420
+ `NativeColumnPyramidData` utiliza `type: 'columnpyramid'` y puntos id/x/y. La altura triangular desde cero representa el valor; el área del triángulo no es proporcional. Los negativos apuntan bajo cero. El cero conserva semántica sin inventar un área pintada. No dispone de grupo `layout`.
421
+
422
+ Las cinco familias utilizan series con nombre e IDs estables y admiten X categórico, numérico o temporal UTC. Incluyen ejes, leyenda, colores, etiquetas acotadas, detalle individual o compartido, referencias y viewport. Los dominios de tallos y columnas triangulares deben conservar el origen cero. Se rechazan apilado, curve/gaps por serie, controles de marcadores de línea y colores por punto. Cada familia tiene tres ejemplos reales y código data/options copiable; la aceptación física en iOS y Android sigue pendiente.
423
+
424
+ En histogramas, el eje X presenta límites numéricos de intervalos sobre los bordes reales de las columnas, con un máximo de ocho marcas y menos en vistas estrechas. El tooltip conserva el intervalo exacto completo. El nombre de la serie calculada se configura con `options.appearance.series: [{id: 'distribution', name: 'Frecuencia'}]`; así coinciden la leyenda y el tooltip sin modificar las muestras. Las marcas usan cuatro cifras significativas y recuperan el texto completo si el redondeo produjera etiquetas ambiguas.
425
+
426
+ # Sectores de radio variable
427
+
428
+ `NativeVariablePieData` utiliza `type: 'variablepie'` y filas `{id, label, value, z}`. Son dos medidas independientes, finitas y no negativas: `value` determina el ángulo y `z` el radio. Admite hasta 16 filas completas, sin null. El dominio opcional `zDomain` es una pareja no negativa creciente que debe contener todas las Z; omitido se calcula con las filas visibles. Una leyenda puede cambiar esa normalización si no se fija el dominio.
429
+
430
+ `options.layout.minRadiusRatio` está entre 0 y 1, inicialmente 0.25. `options.layout.radiusScale` es `'area'` o `'radius'`, inicialmente `'area'`. Con `'area'` se interpola **el radio al cuadrado**: `r² = rMin² + Znormalizada × (rMax² − rMin²)`. El área del sector también depende del ángulo independiente; por tanto **no representa Z por sí sola**. `'radius'` interpola directamente el radio entre esos límites. Son opciones de distribución y se rechazan en los datos nativos.
431
+
432
+ ```ts
433
+ import type {NativeVariablePieData, NativeChartOptions} from '@neural-charts/native';
434
+
435
+ const data = {
436
+ type: 'variablepie', zDomain: [0, 100],
437
+ data: [
438
+ {id: 'organic', label: 'Orgánico', value: 44, z: 25},
439
+ {id: 'direct', label: 'Directo', value: 28, z: 70},
440
+ {id: 'referral', label: 'Referidos', value: 18, z: 45},
441
+ ],
442
+ } as const satisfies NativeVariablePieData;
443
+ const options = {layout: {minRadiusRatio: 0.25, radiusScale: 'area'}} as const satisfies NativeChartOptions<'variablepie'>;
444
+ ```
445
+
446
+ El tooltip conserva value, porcentaje angular y Z originales. Un valor angular cero conserva navegación y Z sin dibujar ni crear un sector táctil invisible. Colores y leyenda utilizan IDs de categoría. Admite etiquetas, detalle individual y fijación; no expone ejes cartesianos, viewport, tooltip compartido, colores por punto ni controles de marcadores.
447
+
448
+ # Gráficas por unidades
449
+
450
+ `NativeItemData` utiliza `type: 'item'` y categorías `{id, label, value}`. Los valores son enteros seguros no negativos, con máximo 16 categorías y suma máxima **256 en el origen completo**, incluidas categorías ocultas. Cada círculo pintado representa exactamente una unidad: no se escalan ni redondean los valores para decidir el número de círculos.
451
+
452
+ ```ts
453
+ import type {NativeItemData, NativeChartOptions} from '@neural-charts/native';
454
+
455
+ const data = {type: 'item', data: [
456
+ {id: 'completed', label: 'Completadas', value: 12},
457
+ {id: 'pending', label: 'Pendientes', value: 8},
458
+ {id: 'blocked', label: 'Bloqueadas', value: 0},
459
+ ]} as const satisfies NativeItemData;
460
+ const options = {layout: {columns: 4}} as const satisfies NativeChartOptions<'item'>;
461
+ ```
462
+
463
+ `options.layout.columns` es entero entre 1 y 32; omítelo para distribución automática según el área disponible. Cambiar columnas redistribuye las mismas unidades, sin cambiar su recuento. La interacción utiliza los círculos exactos; los huecos entre ellos no seleccionan una categoría. Hay una observación semántica por categoría, no una por círculo. Cero conserva Anterior/Siguiente sin dibujar unidades ficticias.
464
+
465
+ Colores y leyenda utilizan IDs de categoría. Admite etiquetas, detalle individual por categoría y fijación. No admite ejes cartesianos, viewport, tooltip compartido, cambios por punto ni controles de marcadores.
466
+
467
+ # Polígonos de vértices originales
468
+
469
+ `NativePolygonData` utiliza `type: 'polygon'`, X numérico o temporal UTC, Y numérico y series con `id`, `name` y vértices `{id, x, y}`. Cada serie no vacía requiere al menos tres vértices únicos y completos. Se conserva el orden original y el cierre se genera automáticamente: no ordenes por X ni repitas el primer vértice al final. Admite contornos cóncavos simples. Rechaza null, coordenadas repetidas, área cero y autointersecciones.
470
+
471
+ ```ts
472
+ import type {NativePolygonData} from '@neural-charts/native';
473
+
474
+ const data = {
475
+ type: 'polygon',
476
+ axes: {x: {type: 'linear'}, y: {type: 'linear'}},
477
+ series: [{id: 'region', name: 'Región factible', data: [
478
+ {id: 'v0', x: 0, y: 0}, {id: 'v1', x: 6, y: 0},
479
+ {id: 'v2', x: 6, y: 4}, {id: 'v3', x: 3, y: 2},
480
+ {id: 'v4', x: 0, y: 4},
481
+ ]}],
482
+ } as const satisfies NativePolygonData;
483
+ ```
484
+
485
+ Los puntos de vértice son fijos y conservan X/Y originales; los cruces geométricos y el interior pintado no crean observaciones nuevas. Admite colores por serie, ejes, leyenda, etiquetas, detalle individual, fijación, crosshair, referencias y viewport. No admite tooltip compartido, controles de marcadores de línea, colores por punto, apilado ni opciones curve/gaps.
486
+
487
+ Las tres familias tienen tres ejemplos independientes con datos completos y opciones copiables. Sus valores ilustrativos se entregan al mismo planificador y componente nativo de la biblioteca; no utilizan geometría de demostración superpuesta. Las comprobaciones de cálculo y navegador se registran por separado de la aceptación física en iOS y Android, todavía pendiente.
488
+
489
+ # Jerarquías en anillos
490
+
491
+ `NativeSunburstData` recibe `type: 'sunburst'` y `root`, con la misma unión estricta `NativeTreemapNode`: una hoja tiene `value: number | null`; una rama tiene `children`, nunca ambos. Los IDs son globalmente únicos. El límite es 512 nodos, profundidad 8 y 15 ramas de raíz más un centro neutro. Las etiquetas solo se dibujan si su caja completa cabe dentro del anillo y de su sector angular; en caso contrario se omiten y el tooltip conserva el nombre completo.
492
+
493
+ ```ts
494
+ import type {NativeSunburstData} from '@neural-charts/native';
495
+
496
+ const data = {type: 'sunburst', root: {
497
+ id: 'portfolio', label: 'Cartera', children: [
498
+ {id: 'software', label: 'Software', children: [
499
+ {id: 'apps', label: 'Aplicaciones', value: 20},
500
+ {id: 'cloud', label: 'Nube', value: 12},
501
+ ]},
502
+ {id: 'services', label: 'Servicios', children: [
503
+ {id: 'support', label: 'Soporte', value: 8},
504
+ {id: 'consulting', label: 'Consultoría', value: null},
505
+ ]},
506
+ ],
507
+ }} as const satisfies NativeSunburstData;
508
+ ```
509
+
510
+ El Core calcula los subtotales **conocidos** de padres y raíz a partir de hojas originales. Null conserva el estado incompleto; no se transforma en una contribución conocida ni en un total completo. Cero y ausencia mantienen significados distintos. Los anillos y sus objetivos táctiles corresponden a la jerarquía exacta; no se inventa un porcentaje arbitrario para presentar el total desconocido.
511
+
512
+ Colores y leyenda utilizan IDs de ramas de raíz, por ejemplo `software` o `services`, mediante `options.appearance.series`. Ocultar una rama elimina su contribución visible y recalcula los valores de padres/raíz y la distribución. El centro conserva un color neutro. Admite nombres, detalle individual, fijación y una tabla que distingue hojas, subtotales calculados e incompletos. No expone ejes, viewport, referencias, crosshair, tooltip compartido, controles de marcadores ni colores por punto.
513
+
514
+ # Árboles y organizaciones dirigidas
515
+
516
+ `NativeTreegraphData` y `NativeOrganizationData` reciben nodos `{id, label, groupId?}`, enlaces `{id, from, to}` y grupos opcionales `{id, label}`. No contienen campos numéricos `value`, X o Y: las relaciones son los datos originales. Admite hasta 128 nodos, 512 enlaces y 15 grupos en total, incluyendo el grupo implícito `nodes` cuando falta `groupId`.
517
+
518
+ ```ts
519
+ import type {NativeTreegraphData, NativeOrganizationData, NativeChartOptions} from '@neural-charts/native';
520
+
521
+ const tree = {
522
+ type: 'treegraph',
523
+ groups: [{id: 'planning', label: 'Planificación'}, {id: 'delivery', label: 'Entrega'}],
524
+ nodes: [
525
+ {id: 'product', label: 'Producto', groupId: 'planning'},
526
+ {id: 'design', label: 'Diseño', groupId: 'planning'},
527
+ {id: 'engineering', label: 'Ingeniería', groupId: 'delivery'},
528
+ ],
529
+ links: [
530
+ {id: 'product-design', from: 'product', to: 'design'},
531
+ {id: 'product-engineering', from: 'product', to: 'engineering'},
532
+ ],
533
+ } as const satisfies NativeTreegraphData;
534
+
535
+ const organization = {...tree, type: 'organization', links: [
536
+ ...tree.links,
537
+ {id: 'design-engineering', from: 'design', to: 'engineering'},
538
+ ]} as const satisfies NativeOrganizationData;
539
+
540
+ const options = {
541
+ appearance: {dataLabels: true, series: [
542
+ {id: 'planning', color: '#2C6DCD'},
543
+ {id: 'delivery', color: '#638A35'},
544
+ {id: 'links', color: '#8392A6'},
545
+ ]},
546
+ viewport: {axes: 'xy', initial: {x: [0.1, 0.9], y: [0, 1]}, controls: true},
547
+ } as const satisfies NativeChartOptions<'organization'>;
548
+ ```
549
+
550
+ Ambos grafos deben ser acíclicos, con IDs estables únicos y extremos existentes. Se rechazan autoenlaces, enlaces duplicados y referencias inexistentes. Treegraph admite como máximo un padre por nodo y puede representar un bosque de varias raíces. Organization admite varios padres sin introducir ciclos.
551
+
552
+ Los colores y la leyenda utilizan grupos de nodos. `links` está reservado al estilo de conectores; no es un grupo de nodos, una entrada independiente de leyenda ni un ID válido para ocultar por separado. Su estilo sigue siendo válido si no hay enlaces visibles o están ocultos todos los grupos; la leyenda permanece disponible para restaurarlos con los IDs y colores originales. Ocultar un grupo elimina sus nodos y enlaces incidentes y redistribuye el grafo. El detalle calcula conexiones entrantes/salientes, su grado y profundidad después de aplicar visibilidad. Esas métricas se presentan como **calculadas**, nunca como valores numéricos originales.
553
+
554
+ La web muestra tablas de nodos, enlaces y grupos originales, separadas de las métricas calculadas. `options.appearance.dataLabels` controla los nombres dibujados y empieza activada; ocultar nombres no elimina etiquetas originales del tooltip ni de las tablas. Admite detalle individual y fijación.
555
+
556
+ El viewport es opcional y utiliza dimensiones de distribución normalizadas entre **0 y 1**, con `axes: 'x' | 'y' | 'xy'`; el valor inicial de axes es `xy`. No son ejes ni métricas numéricas del origen. Las ventanas son parejas numéricas finitas crecientes; se rechazan ventanas por categoría. No se exponen ejes, referencias, crosshair, tooltip compartido, controles de marcadores ni colores por punto.
557
+
558
+ Los tres ejemplos de cada familia utilizan datos originales completos y el componente nativo real. Estas verificaciones de implementación, cálculo y navegador no sustituyen la aceptación física pendiente en iOS y Android.
559
+
560
+ # Redes sin dirección
561
+
562
+ NativeNetworkgraphData recibe type: 'networkgraph', nodes con id, label y groupId opcional, links con id, from y to y groups opcional con id y label. No contiene valores numéricos de nodos ni pesos inventados. Admite ciclos y componentes desconectados; rechaza autoenlaces, extremos inexistentes y parejas duplicadas sin dirección. Hasta 128 nodos, 512 enlaces y 15 grupos contando el implícito nodes. links es un ID reservado al estilo del conector, no un grupo de leyenda.
563
+
564
+ La distribución estática es determinista y limita el trabajo por pares; no ejecuta simulaciones continuas ni temporizadores. Ocultar un grupo elimina sus nodos y enlaces incidentes antes de recalcular el grado visible. El tooltip muestra ese recuento y el nombre original, sin atribuir dirección ni profundidad. Las tablas separan los nodos y enlaces originales de los recuentos calculados. Los nombres dibujados se limitan a 64 y se omiten si no caben.
565
+
566
+ Configura colores con options.appearance.series por ID de grupo y el conector mediante el ID links. El zoom utiliza options.viewport sobre coordenadas de distribución normalizadas entre 0 y 1; estas posiciones no son datos originales. Sin ejes numéricos, tooltip compartido ni apilado.
567
+
568
+ # Burbujas empaquetadas
569
+
570
+ NativePackedBubbleData recibe type: 'packedbubble' y series con id, name y data. Cada punto utiliza id, label opcional y value: number | null. Admite hasta 16 series y 256 puntos en total. Los valores deben ser finitos y no negativos. null se omite; cero sigue accesible con Anterior/Siguiente sin crear un círculo ficticio.
571
+
572
+ El área es proporcional al valor original con una escala común para todas las series. options.layout.splitSeries separa las series en grupos mediante una única escala final: una misma área representa el mismo valor aunque cambie de grupo. No se renormaliza cada serie por separado. La distribución evita solapamientos y tiene un presupuesto acotado; no garantiza la solución de área mínima. La posición y la distancia no codifican medidas originales.
573
+
574
+ options.appearance.dataLabels muestra nombres originales cuando caben, hasta 64 etiquetas. Colores, nombres de serie, leyenda interactiva y tooltip individual fijable conservan IDs originales. No admite radio arbitrario, ejes de datos, cruceta, tooltip compartido ni apilado.
575
+
576
+ options.viewport admite únicamente axes: 'xy', con escala uniforme para conservar círculos y proporciones. Las ventanas iniciales deben proporcionar x e y como parejas finitas crecientes entre 0 y 1, con la misma amplitud y al menos 0,125. El zoom máximo es 8×. El Core limita los gestos y controles al mínimo permitido; el recorte y la selección utilizan la misma área visible. splitSeries pertenece a options.layout y se rechaza en data.
577
+
578
+ # Vectores
579
+
580
+ NativeVectorData utiliza type: 'vector', ejes numéricos X/Y y series de puntos con id, x, y, dx y dy. X/Y localizan la observación; dx/dy son componentes vectoriales independientes, con una unidad común opcional en data.unit. El tooltip distingue posición, componentes y magnitud calculada con Math.hypot. El límite es 16 series y 2.048 puntos en total.
581
+
582
+ Las dos componentes deben ser finitas o ambas null. Una coordenada nula o una pareja de componentes nulas omite el símbolo; un vector cero sigue siendo seleccionable como un anillo pequeño. El origen copiable y la tabla conservan los datos ausentes. No se interpolan observaciones ni se crean medidas sintéticas.
583
+
584
+ La longitud usa una escala de magnitud común entre las series visibles. Las flechas respetan la orientación cartesiana y la inversión de ejes, pero sus ángulos no se deforman por diferencias entre las amplitudes X/Y. No representan extremos de desplazamiento proyectados. El cálculo reutiliza la validación, dominios, proyección y ventanas numéricas existentes.
585
+
586
+ Admite zoom y desplazamiento X/Y, referencias, títulos de ejes, colores de serie, leyenda interactiva, selección y tooltip fijable. Sin ejes categóricos/temporales, apilado, tooltip compartido, colores por punto ni options.format; la unidad pertenece a data.unit. Los símbolos mantienen un tamaño lógico acotado al ampliar la ventana.
587
+
588
+ # Barbas de viento
589
+
590
+ NativeWindbarbData utiliza type: 'windbarb', ejes numéricos y series de puntos {id, x, value, direction}. value es la velocidad original en m/s entre 0 y 150; direction indica de dónde viene el viento, en grados horarios desde el norte y en [0, 360). 0° es norte y 90° este. La brújula no gira al invertir los ejes de datos. El límite total es 2.048 puntos entre 16 series.
591
+
592
+ La posición Y conserva la velocidad en m/s. El símbolo redondea a cinco nudos: media barba representa 5, una completa 10 y una bandera rellena 50. Un anillo indica una velocidad que redondea a cero nudos. El tooltip siempre conserva la velocidad y dirección originales, sin sustituirlas por la velocidad redondeada del símbolo.
593
+
594
+ value: null omite la observación; direction: null mantiene una velocidad conocida con un rombo de dirección desconocida. Un cero sigue siendo un dato. La tabla del origen incluye valores ausentes y no desaparece al ocultar una serie. El render no dibuja líneas que conecten observaciones independientes.
595
+
596
+ Admite zoom y desplazamiento numéricos, referencias, colores de serie, títulos, etiquetas, leyenda interactiva y tooltip fijable. Sin apilado, tooltip compartido, colores por punto, ejes categóricos/temporales ni options.format. La unidad m/s es fija y no se puede cambiar sin convertir los datos antes de entregarlos.
597
+
598
+
599
+ ## Sankey: cantidades entre etapas
600
+
601
+ NativeSankeyData describe nodos con id, label y groupId opcional, y enlaces con id, from, to y value no negativo o null. Los IDs de nodos y enlaces son únicos en el diagrama. Admite hasta 128 nodos, 512 enlaces y un grafo acíclico. Los enlaces paralelos utilizan IDs diferentes. El grosor conserva una escala común y los nodos muestran el mayor total conocido de entradas o salidas. Cero sigue siendo cero; los enlaces null no inventan flujos y sus nodos permanecen marcados como incompletos.
602
+
603
+ La orientación, el grosor y la separación pertenecen a options.layout. La leyenda por grupos retira enlaces incidentes y recalcula la escala visible. Los tooltips distinguen cantidades de entradas/salidas y flujos originales. La exploración XY utiliza coordenadas normalizadas de distribución, sin presentarlas como medidas X/Y.
604
+
605
+ ```typescript
606
+ import type {NativeSankeyData, NativeChartOptions} from '@neural-charts/native';
607
+
608
+ const data = {
609
+ type: 'sankey',
610
+ nodes: [{id: 'source', label: 'Origen'}, {id: 'target', label: 'Destino'}],
611
+ links: [{id: 'transfer', from: 'source', to: 'target', value: 48}],
612
+ } satisfies NativeSankeyData;
613
+
614
+ const options = {
615
+ title: 'Flujos entre etapas',
616
+ layout: {orientation: 'horizontal', nodeWidth: 14, nodePadding: 12},
617
+ tooltip: {mode: 'floating', pinnable: true},
618
+ viewport: {axes: 'xy'},
619
+ } satisfies NativeChartOptions<'sankey'>;
620
+ ```
621
+
622
+ Sankey no admite ejes cartesianos, tooltip compartido, apilado, referencias ni colores por enlace; utiliza appearance.series para los grupos. Los polígonos por debajo de la precisión de dibujo pueden omitirse sin ensancharlos ni convertir el valor en cero: la identidad y el valor siguen disponibles en las observaciones con sankey.geometryOmitted y en los datos originales. La navegación accesible permite inspeccionarlos aunque no exista una banda táctil representable. La compilación y las pruebas de navegador no sustituyen las pruebas en dispositivos iOS y Android.
623
+
624
+
625
+ # Objetivos y anchos proporcionales
626
+
627
+ Bullet compara medidas con objetivos opcionales en una misma escala. Cada punto contiene id, x e y; target es independiente: omitirlo significa que no se ha configurado, null significa desconocido y 0 sigue siendo un objetivo conocido. Si falta la medida pero existe un objetivo conocido, el detalle anuncia Objetivo y explica que la medida es desconocida. Las bandas cualitativas pertenecen a options.layout.bands: no son series, no aparecen en la leyenda y no amplían el dominio numérico.
628
+
629
+ Bullet admite disposición horizontal o vertical, varias series, detalle individual o compartido, fijación y referencias. pointPadding controla la separación entre categorías. No admite viewport ni apilado. Mantén pocas categorías visibles en un teléfono; los límites de entrada no garantizan legibilidad en una única vista.
630
+
631
+ Variwide utiliza una serie con puntos {id, x, y, z}. La altura representa y y el ancho representa la proporción original de z. Un z conocido reserva su ancho aunque y sea null. Un z de cero no recibe ancho inventado; los valores positivos inferiores a la precisión geométrica mantienen su identidad y un marcador independiente para selección. Si todos los anchos son cero o desconocidos, el reparto queda vacío de forma explícita.
632
+
633
+ Variwide admite zoom y desplazamiento sobre Y numérico, con controles y gestos opcionales. Se rechazan zoom X ponderado, varias series y apilado. Los valores originales, incluidos null y cero, siguen en la tabla de datos; no se reconstruyen desde la geometría visible.
634
+
635
+ # Ejes semánticos en columnas, barras y Bullet
636
+
637
+ En NativeDataChart, options.axes.x e y describen los mismos ejes de datos que data.axes. X conserva las categorías e Y las medidas. En orientación horizontal, X se representa a la izquierda e Y debajo de la gráfica. El adaptador intercambia la posición física de títulos, visibilidad y estilos, sin cambiar los datos.
638
+
639
+ Por ejemplo, options.axes.x.title configura el título de categorías también en una barra horizontal. options.axes.y.visible controla el eje de medidas, situado abajo en esa orientación. Las referencias numéricas de columnas y barras utilizan Y; sus referencias X categóricas todavía no están disponibles y se rechazan. Bullet admite referencias X categóricas e Y numéricas.
640
+
641
+ El adaptador avanzado NativeChart conserva sus propiedades físicas para escenas ya proyectadas. Los ejemplos públicos utilizan data y options con los contratos semánticos anteriores.
642
+
643
+ # Relaciones ponderadas: rueda, arcos y cuerdas
644
+
645
+ DependencyWheel, ArcDiagram y Chord utilizan nodos originales {id, label, groupId?}, enlaces {id, from, to, value} y grupos opcionales. value es un número finito no negativo o null. Los IDs de nodo y enlace son únicos entre sí y no cambian con el idioma, la visibilidad o la distribución. Se rechazan autorrelaciones y extremos inexistentes.
646
+
647
+ DependencyWheel representa relaciones dirigidas, incluidos ciclos. Chord y ArcDiagram representan relaciones no dirigidas: el orden de extremos no inventa una dirección. ArcDiagram conserva el orden original de los nodos; el radio de sus círculos es una opción visual. Los pesos de enlaces determinan el grosor de los arcos o bandas.
648
+
649
+ Los totales de nodo son cantidades incidentes conocidas, no valores originales ni recuentos de conexiones. Un enlace null permanece en la tabla original y marca sus extremos como incompletos; nunca fabrica una observación cero. El cero conocido y los valores positivos bajo la precisión del dibujo conservan su identidad y detalle accesible, aunque no tengan área visible.
650
+
651
+ Las bandas se dibujan primero y los sectores o círculos opacos después. Seleccionar un nodo tiene prioridad sobre una banda; un toque dentro del anillo puede seleccionar la banda real. Tocar otra vez cierra el tooltip. El detalle fijado conserva nombres completos de nodo, ambos extremos del enlace y el estado de datos incompletos.
652
+
653
+ Utiliza NativeDependencyWheelData, NativeArcDiagramData o NativeChordData junto con NativeChartOptions del mismo tipo. En las dos familias radiales, options.layout ofrece startAngle de −360 a 360 grados, nodePadding de 0 a 20 grados y nodeWidth de 2 a 64 píxeles lógicos. ArcDiagram ofrece reversed, nodeRadius de 2 a 24 y linkWidth de 1 a 48. Sus valores se limitan al espacio disponible sin modificar las cantidades originales.
654
+
655
+ Los tres tipos admiten hasta 64 nodos,256 enlaces y15 grupos explícitos más el grupo implícito nodes. Los nombres de nodo y grupo conservan hasta 256 caracteres; la etiqueta completa de un enlace conserva ambos extremos. La interfaz puede abreviar la etiqueta visual y el tooltip fijado permite leerla completa. Estos límites no garantizan legibilidad con todos los elementos en una pantalla pequeña.
656
+
657
+ No admiten ejes, referencias, apilado, zoom de viewport ni tooltip compartido. ArcDiagram puede configurar appearance.minPlotWidth para desplazar solo la gráfica; títulos, leyenda y navegación mantienen el ancho del dispositivo. Ocultar/restaurar grupos recalcula la geometría y los totales conocidos visibles, manteniendo las identidades originales.
658
+
659
+ # Pictorial: capacidad y siluetas
660
+
661
+ Pictorial utiliza NativeDataChart con NativePictorialData y NativeChartOptions<'pictorial'>. Cada punto conserva su ID, categoría x y medida y no negativa. null significa desconocido; cero permanece conocido sin generar tinta ni una zona táctil inventada. La altura rellena representa el valor: el área y el volumen físico de la silueta no son medidas equivalentes.
662
+
663
+ data.axes.x contiene hasta 32 categorías con IDs y nombres. Las series conservan IDs, nombres y hasta 64 puntos originales en total, con un máximo de ocho series. Una capacidad original puede definirse con data.axes.y.domain: [0, máximo], cuyo máximo debe ser finito y positivo. Los títulos y colores pertenecen a options. NativePictorialPoint, NativePictorialSeries, NativePictorialAxesData, NativePictorialShape, NativePictorialMesh y NativePictorialVertex describen los contratos públicos de forma explícita.
664
+
665
+ options.layout.shape acepta los presets person, bottle y heart o una malla normalizada. NativePictorialMesh contiene id, aspectRatio, vertices y triangles. La relación de aspecto va de 0,1 a 10; la malla utiliza de 3 a 192 vértices en [0,1] y hasta 64 triángulos conformes. Los huecos de la malla permanecen vacíos. No se acepta SVG/XML arbitrario. La separación options.layout.gap va de 0 a 64 unidades lógicas y se limita a la mitad del espacio de cada silueta cuando sea necesario. options.layout.background controla el fondo neutro completo.
666
+
667
+ Sin stacking, cada serie dispone de una silueta. sum divide una silueta compartida en bandas de valores originales. percent utiliza la parte conocida de cada categoría; el tooltip indica los totales incompletos, sin presentarlos como una población completa. percent es incompatible con data.axes.y.domain. La capacidad se conserva al ocultar o restaurar series, sin cambiar las identidades originales.
668
+
669
+ Se admiten etiquetas y título del eje X categórico, colores por serie, leyenda, tooltip individual/fijable y appearance.minPlotWidth para desplazar únicamente la gráfica. No se admiten eje Y visible, cuadrícula numérica, referencias, zoom/pellizco, tooltip compartido, etiquetas de valor o total sobre la silueta ni colores por punto. Los controles y la API rechazan estas combinaciones en vez de ignorarlas.
670
+
671
+ El fondo permanece estático y el relleno se revela desde su base proyectada sin deformar la silueta. El índice táctil solo selecciona los polígonos realmente rellenos: huecos y zonas vacías no interceptan toques. Anterior y Siguiente permiten consultar también ceros y valores positivos sin tinta visible. Cambiar solo títulos, colores o contenido del tooltip reutiliza la geometría; cambiar forma, separación, fondo o apilado vuelve a planificarla.
672
+
673
+ La tabla del origen utiliza Neural Table y conserva los puntos originales aunque sean null, cero, estén ocultos o no tengan relleno visible. Muestra la medida original separada del total visible conocido que devuelve el Core y marca los totales incompletos. Ocultar toda la leyenda no elimina esas filas de consulta. Su desplazamiento queda contenido en la tabla.
674
+
675
+ Los ejemplos son agrupado, capacidad fija, suma, porcentaje, valores incompletos, corazón, malla con hueco y cero, en español e inglés. Cada propiedad de malla muestra un ejemplo tipado completo para evitar configuraciones parciales incompatibles. Se aplican límites nativos de trazados y escenas; una malla válida que excede el presupuesto de dibujo se rechaza, sin simplificar datos ni retirar elementos silenciosamente. Estos límites no son mediciones de FPS ni garantías de legibilidad móvil.
676
+
677
+ Las comprobaciones de Node/Fabric, de compilación y del navegador se registran por separado de la aceptación de Pictorial en iOS y Android, todavía pendiente. Los resultados de relaciones ponderadas de la revisión 57e8142 no certifican esta nueva familia, tablets, lectores, háptica física ni rendimiento medido.
678
+
679
+ ## Tilemap
680
+
681
+ Tilemap representa medidas en posiciones enteras de una cuadrícula: `x` e `y` identifican la celda y `value` es la medida. No representa un mapa geográfico. Admite hexágonos, círculos, rombos y cuadrados mediante `options.layout.tileShape`, sin cambiar los datos originales. La única serie conserva IDs estables y permite ocultar/restaurar el conjunto desde su leyenda.
682
+
683
+ La escala se configura en `options.colorAxis.scale`: continua con entre dos y ocho paradas, o por clases con hasta dieciséis intervalos. Los valores fuera de un dominio continuo explícito conservan su medida y muestran el extremo de color; el tooltip indica ese ajuste. Los huecos entre clases conservan su color y estado independientes. `null` se pinta con el color de ausencia y no genera una observación numérica; cero sigue siendo un valor seleccionable. `options.colorAxis.visible` controla solamente la leyenda de color, sin recalcular la escena.
684
+
685
+ La selección utiliza el contorno exacto de cada celda: tocar un hueco o una medida ausente no elige una celda vecina. Las teclas de navegación y el tooltip fijable conservan el ID y las coordenadas originales. El adaptador renderiza las geometrías y colores devueltos por el Core; no calcula polígonos, distribuciones ni colores en la vista.
686
+
687
+ El límite es de 2.048 celdas y los lotes de pintura agrupan únicamente colores y opacidades exactamente iguales, sin reducir precisión. En el peor caso hay 2.048 lotes y el serializador rechaza escenas que superan dos millones de caracteres de rutas. Son límites de seguridad, no garantías de fluidez. Los ocho ejemplos incluyen formas, escalas por clases, ausencia completa, ceros y dominio explícito. No hay ejes, viewport, apilado, colores por serie ni tooltip compartido en Tilemap. Consulta [el contrato completo](./tilemap.md).
688
+
689
+ # Curvas de nivel de un campo medido
690
+
691
+ NativeContourData recibe una rejilla rectangular de coordenadas X/Y numéricas crecientes y medidas originales por filas. grid.ids conserva un ID único por muestra; grid.values mantiene null como desconocido y cero como conocido. Una rejilla admite de 2 a 64 coordenadas por eje, hasta 4.096 muestras originales.
692
+
693
+ NativeChartOptions<'contour'> exige options.layout.levels: de uno a ocho niveles finitos estrictamente crecientes, cada uno con un ID estable. Los nombres y colores pertenecen a appearance.series y utilizan esos IDs. Cambiar la presentación conserva la geometría y el índice de interacción. Las curvas utilizan marching squares con decisión bilineal en puntos de silla; no se suavizan ni se sustituyen por bandas rellenas.
694
+
695
+ El tooltip señala que una isolínea es interpolada y distingue su nivel de las cuatro medidas originales de la celda. Se puede fijar para leer IDs largos; la tabla paginada del showcase conserva todas las muestras, aunque no exista ningún cruce o una muestra sea desconocida. Anterior/Siguiente recorre segmentos derivados. Una celda afectada por null no genera líneas ficticias.
696
+
697
+ El presupuesto de cálculo completo es de 4.096 segmentos, ampliable hasta 8.192. Se aplica antes del recorte: si se supera, se devuelve un diagnóstico sin geometría parcial. El zoom, pellizco, desplazamiento y las referencias utilizan las coordenadas numéricas X/Y; no representan intensidad ni una proyección geográfica. No se admiten apilado, marcadores, cursor cruzado ni tooltip compartido.
698
+
699
+ Las demos incluyen un campo medido, muestras ausentes, una rejilla no uniforme, un punto de silla, zoom XY y un campo uniforme sin cruces. La animación revela líneas y respeta la reducción de movimiento. Las pruebas de componentes y de procesamiento son independientes de la validación registrada en iOS y Android.
700
+
701
+ # Intervalos de ejecución y distribuciones
702
+
703
+ Flame recibe `NativeFlameData`: un eje `axes.x` lineal o `time` y una lista de intervalos originales con `id`, `label`, `start`, `end` y `parentId` opcional. Representa una traza síncrona de un hilo en tiempo original. Los hijos deben estar contenidos en su padre; los hermanos con duración positiva no pueden solaparse. Se rechazan ciclos y padres inexistentes. Los eventos de duración cero siguen disponibles por toque y navegación. El límite es de 2.048 intervalos y 32 niveles de profundidad.
704
+
705
+ `NativeChartOptions<'flame'>` configura la separación mediante `layout.rowPadding`, el zoom y pellizco X mediante `viewport.axes:'x'`, y referencias temporales mediante `axes.x.referenceLines`. Los nombres de funciones se muestran solo cuando caben. El tooltip distingue duración inclusiva y exclusiva, profundidad y llamadas hijas. Sin leyenda de visibilidad, apilado, tooltip compartido ni zoom Y. No sustituye una traza concurrente o un flamegraph agregado.
706
+
707
+ Violín recibe `NativeViolinData` con grupos de muestras originales: cada grupo tiene `id`, `label` y `samples`; cada muestra conserva `id` y `value:number|null`. Cero y valores negativos son conocidos; `null` es desconocido. Se admiten hasta 16 grupos y 4.096 muestras en total. Un grupo sin medidas conocidas conserva su lugar y leyenda sin inventar un resumen. Las muestras constantes se dibujan como una línea sin dispersión, salvo suavizado explícito.
708
+
709
+ `NativeChartOptions<'violin'>` separa la estimación de la medida. `layout.bandwidth` es un ancho positivo en unidades originales; omitirlo utiliza una estimación robusta. `layout.resolution` admite enteros de 32 a 128. `layout.normalization` permite `width` para igual ancho máximo, `area` para igual área de probabilidad y `count` para ponderar el área por el número de muestras conocidas. La leyenda oculta grupos sin alterar escalas ni normalización de los demás. Un dominio Y explícito debe contener todo el soporte del kernel. No se admiten viewport numérico, referencias, apilado ni tooltip compartido.
710
+
711
+ La silueta y sus cuartiles son cálculos derivados. El tooltip identifica la mediana, el rango, la media, los recuentos conocidos y desconocidos y el ancho de banda. La tabla del showcase conserva las muestras originales y muestra hasta 64 filas por página. Las pruebas de cálculo, componentes y navegador no certifican todavía rendimiento, accesibilidad ni respuesta háptica en dispositivos; la app de pruebas y la campaña nativa se realizan después del cierre del catálogo.
712
+
713
+ # Conjuntos, intersecciones y Euler
714
+
715
+ Los ejemplos de Euler utilizan `NativeVennData`: el caso de inclusión contiene un conjunto completo dentro de otro y el caso separado conserva una intersección cero sin dibujar un solapamiento ficticio. Comparten geometría e interacción con Venn. No necesitas cambiar de componente ni convertir tus medidas en posiciones de círculos.
716
+
717
+ El contrato admite entre uno y tres conjuntos con IDs estables y exige cada combinación no vacía en `data`, incluidos ceros y valores `null` explícitos. Las medidas son inclusivas: una intersección de dos conjuntos contiene también la intersección triple. Los valores desconocidos no se convierten en ceros ni en áreas inventadas. La tabla y Anterior/Siguiente conservan las medidas que no generan una región visible.
718
+
719
+ Los dos conjuntos tienen una disposición circular medida, incluida la inclusión y la separación. Con tres conjuntos, ciertas combinaciones solo admiten una aproximación circular: se informa del error de área sin modificar las medidas originales. Esta capacidad no equivale a un solucionador general para cualquier número de conjuntos o cualquier topología. Consulta el caso de dos conjuntos, los casos de Euler y la distribución de tres conjuntos para elegir una representación adecuada.
720
+
721
+ # Estimaciones e intervalos de incertidumbre
722
+
723
+ `NativeFanData` recibe la estimación central y los intervalos proporcionados por tu aplicación. La gráfica no calcula pronósticos ni infiere probabilidades. `bands` declara de una a seis bandas, con IDs estables de hasta 64 caracteres, nombre y `coverage` estrictamente creciente entre cero y uno. El ID `center` está reservado para la estimación.
724
+
725
+ Cada punto conserva `id`, `x`, `value` e `intervals`. Sus extremos `low` y `high` son conocidos o ambos `null`. Un intervalo conocido contiene la estimación y está dentro de cada banda más amplia conocida. Un intervalo omitido no está configurado; `null` es desconocido; cero sigue siendo un valor real. Se rechazan duplicados, intervalos invertidos y bandas que se cruzan. Hasta 1.024 puntos utilizan IDs categóricos, números finitos o marcas UTC en milisegundos, según `axes.x.type`. La unión de tipos impide mezclar categorías con coordenadas numéricas.
726
+
727
+ ```typescript
728
+ import type {NativeFanData, NativeChartOptions} from '@neural-charts/native';
729
+
730
+ const data = {
731
+ type: 'fan',
732
+ axes: {x: {type: 'linear'}, y: {type: 'linear'}},
733
+ bands: [{id: 'interval', label: 'Intervalo 80%', coverage: 0.8}],
734
+ data: [
735
+ {id: 'a', x: 0, value: 0, intervals: [{bandId: 'interval', low: -1, high: 1}]},
736
+ {id: 'b', x: 1, value: 2, intervals: [{bandId: 'interval', low: 0, high: 4}]},
737
+ ],
738
+ } as const satisfies NativeFanData;
739
+
740
+ const options = {
741
+ title: 'Estimaciones originales',
742
+ legend: {position: 'bottom'},
743
+ tooltip: {content: 'shared', pinnable: true},
744
+ appearance: {series: [{id: 'center', color: '#2C6DCD'}, {id: 'interval', color: '#638A35'}]},
745
+ viewport: {axes: 'x'},
746
+ } as const satisfies NativeChartOptions<'fan'>;
747
+ ```
748
+
749
+ El detalle compartido agrupa solo la misma X original y presenta los extremos de cada intervalo, junto con la estimación central. La leyenda oculta bandas sin modificar el origen. Los marcadores pertenecen a la estimación central; sus formas, relleno, borde y diámetro son presentación. El zoom y las referencias conservan las medidas originales. No se admiten apilado, bandas ajustadas por separado ni escala logarítmica. Los títulos y colores pertenecen exclusivamente a `options`.
750
+
751
+ # Regresión desde muestras originales
752
+
753
+ `NativeRegressionData` recibe hasta ocho series y 4.096 filas XY en total. Cada muestra mantiene IDs estables de hasta 96 caracteres. `null` en cualquiera de las coordenadas hace que ese par no participe en el cálculo; cero es conocido. El prefijo `ols:` está reservado para los ajustes derivados. Se calcula una regresión de mínimos cuadrados independiente por serie, sin extrapolar fuera de sus X conocidas.
754
+
755
+ ```typescript
756
+ import type {NativeRegressionData, NativeChartOptions} from '@neural-charts/native';
757
+
758
+ const data = {
759
+ type: 'regression',
760
+ axes: {x: {type: 'linear'}, y: {type: 'linear'}},
761
+ series: [{id: 'samples', name: 'Muestras', data: [
762
+ {id: 'a', x: 0, y: 1},
763
+ {id: 'b', x: 1, y: 3},
764
+ {id: 'unknown', x: null, y: 8},
765
+ ]}],
766
+ } as const satisfies NativeRegressionData;
767
+
768
+ const options = {
769
+ title: 'Muestras y ajuste',
770
+ appearance: {series: [
771
+ {id: 'samples', color: '#2C6DCD'},
772
+ {id: 'ols:samples', name: 'Ajuste calculado', color: '#638A35'},
773
+ ]},
774
+ tooltip: {pinnable: true},
775
+ viewport: {axes: 'xy'},
776
+ } as const satisfies NativeChartOptions<'regression'>;
777
+ ```
778
+
779
+ Muestras y recta comparten un único marco de ejes y mantienen colores y visibilidad independientes. Ocultar una serie no cambia los datos utilizados para ajustar su modelo. El zoom recorta la recta original, incluso si la ventana no contiene ninguna muestra; no vuelve a entrenarla. El detalle diferencia la estimación de un dato original e incluye pendiente, ordenada, R² y recuentos de pares conocidos y desconocidos.
780
+
781
+ Con menos de dos pares completos o sin variación en X no se dibuja una recta ficticia: se explica por qué no hay ajuste. Una Y constante produce pendiente cero, con R² indefinido. Los cálculos compensados y centrados conservan precisión con X grandes y pequeñas diferencias, y rechazan coeficientes que no pueden representarse. La asociación lineal no implica causalidad ni convierte el ajuste en una previsión. No hay intervalos de confianza calculados, apilado ni tooltip compartido.
782
+
783
+ Ambas páginas incluyen seis ejemplos, configurador, referencia de propiedades con tipos e incompatibilidades y tabla de datos originales paginada. Las pruebas de cálculo, componentes y navegador siguen separadas de la campaña pendiente en las apps de iOS y Android.