prographs 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (269) hide show
  1. package/CHANGELOG.md +9 -1
  2. package/README.md +6 -4
  3. package/dist/AutoGraph-PDPEAIXL.cjs +145 -0
  4. package/dist/GraphType.js +19 -0
  5. package/dist/autograph/chartIndex.js +521 -0
  6. package/dist/autograph/chartModules.js +2 -1
  7. package/dist/autograph/index.cjs +98 -93
  8. package/dist/catalog-DI4XZ46L.cjs +142 -0
  9. package/dist/catalog.js +2 -1
  10. package/dist/charts/biologycharts/BiologySamples.js +59 -0
  11. package/dist/charts/biologycharts/PunnettSquare.js +342 -0
  12. package/dist/charts/biologycharts/biologyEnums.js +22 -1
  13. package/dist/charts/biologycharts/index.js +5 -3
  14. package/dist/charts/doecharts/DoeSamples.js +78 -0
  15. package/dist/charts/doecharts/SipocDiagram.js +453 -0
  16. package/dist/charts/doecharts/index.js +4 -2
  17. package/dist/charts/fieldcharts/SpeciesAccumulationCurve.js +350 -0
  18. package/dist/charts/fieldcharts/fieldEnums.js +8 -1
  19. package/dist/charts/fieldcharts/index.js +5 -3
  20. package/dist/charts/signals/AntennaPatternChart.js +492 -0
  21. package/dist/charts/signals/SignalSamples.js +17 -0
  22. package/dist/charts/signals/index.js +5 -3
  23. package/dist/charts/softwarediagrams/ComponentDiagram.js +504 -0
  24. package/dist/charts/softwarediagrams/DeploymentDiagram.js +419 -0
  25. package/dist/charts/softwarediagrams/SoftwareSamples.js +283 -1
  26. package/dist/charts/softwarediagrams/index.js +7 -3
  27. package/dist/charts/softwarediagrams/softwareEnums.js +45 -1
  28. package/dist/charts/sportscharts/PowerDurationCurve.js +301 -0
  29. package/dist/charts/sportscharts/SportsSamples.js +102 -0
  30. package/dist/charts/sportscharts/TrainingLoadChart.js +325 -0
  31. package/dist/charts/sportscharts/index.js +6 -2
  32. package/dist/charts/strategycharts/BassDiffusionChart.js +362 -0
  33. package/dist/charts/strategycharts/BassModel.js +96 -0
  34. package/dist/charts/strategycharts/BurnRunwayChart.js +284 -0
  35. package/dist/charts/strategycharts/CapTableChart.js +366 -0
  36. package/dist/charts/strategycharts/KanbanBoard.js +324 -0
  37. package/dist/charts/strategycharts/OkrTree.js +339 -0
  38. package/dist/charts/strategycharts/StrategyPane.js +27 -0
  39. package/dist/charts/strategycharts/StrategySamples.js +251 -0
  40. package/dist/charts/strategycharts/index.js +15 -3
  41. package/dist/charts/threefields/BsfcMap3DChart.js +231 -0
  42. package/dist/charts/threefields/CompressorMap3DChart.js +217 -0
  43. package/dist/charts/threefields/FieldGrid.js +50 -0
  44. package/dist/charts/threefields/LossLandscape3DChart.js +201 -0
  45. package/dist/charts/threefields/MapSheet.js +77 -0
  46. package/dist/charts/threefields/TerrainRoute3DChart.js +201 -0
  47. package/dist/charts/threefields/TerrainRouteMath.js +40 -0
  48. package/dist/charts/threefields/ThreeFieldBase.js +117 -0
  49. package/dist/charts/threefields/ThreeFieldsSamples.js +80 -0
  50. package/dist/charts/threefields/WaferMap3DChart.js +218 -0
  51. package/dist/charts/threefields/index.js +19 -0
  52. package/dist/charts/threesurfaces/index.js +2 -2
  53. package/dist/charts/tradingcharts/KeltnerChannelChart.js +171 -0
  54. package/dist/charts/tradingcharts/TradingMath.js +20 -0
  55. package/dist/charts/tradingcharts/index.js +4 -2
  56. package/dist/{chunk-ZL6XDXMK.cjs → chunk-26PSLEP4.cjs} +8 -8
  57. package/dist/{chunk-W3US6EFP.cjs → chunk-2BO5DZUP.cjs} +12 -12
  58. package/dist/{chunk-5DP7OUSE.cjs → chunk-2GG5YYSC.cjs} +6 -6
  59. package/dist/{chunk-7FG4JSVO.cjs → chunk-2GL2VNJU.cjs} +253 -33
  60. package/dist/{chunk-LCWMRCLF.cjs → chunk-2PYOI7OY.cjs} +21 -21
  61. package/dist/{chunk-JFWJAEBD.cjs → chunk-3U4MCSKI.cjs} +4 -4
  62. package/dist/{chunk-CUPLHZRR.cjs → chunk-3ZMM3FSK.cjs} +4 -4
  63. package/dist/{chunk-L2AV62DP.cjs → chunk-4767WQJ7.cjs} +6 -6
  64. package/dist/{chunk-DA2EYIIP.cjs → chunk-4E7FSSBF.cjs} +1210 -168
  65. package/dist/{chunk-VS5LQEZB.cjs → chunk-526STI2S.cjs} +5 -5
  66. package/dist/{chunk-RXIMEK6C.cjs → chunk-55767YPI.cjs} +20 -20
  67. package/dist/{chunk-JXLSKIUV.cjs → chunk-5FBQOMMT.cjs} +26 -26
  68. package/dist/{chunk-27PZV5BR.cjs → chunk-5N4Z7MTS.cjs} +4 -4
  69. package/dist/{chunk-KEWCUIQA.cjs → chunk-5WEV6YWA.cjs} +22 -22
  70. package/dist/chunk-5XOVVC5X.cjs +3281 -0
  71. package/dist/{chunk-HK5J7Q2W.cjs → chunk-6HLXVWXU.cjs} +9 -9
  72. package/dist/{chunk-7JG47RW4.cjs → chunk-6LQT4WJ5.cjs} +25 -25
  73. package/dist/{chunk-OCVTI6X4.cjs → chunk-6YTWOUFD.cjs} +329 -36
  74. package/dist/{chunk-W7IQCAVN.cjs → chunk-7F6W6HKL.cjs} +11 -11
  75. package/dist/{chunk-F2DCJXDM.cjs → chunk-7L6KYU5A.cjs} +21 -21
  76. package/dist/{chunk-GTGR6LPR.cjs → chunk-A4GIN4FE.cjs} +17 -17
  77. package/dist/{chunk-B2CETSR6.cjs → chunk-A4US7SA7.cjs} +5 -5
  78. package/dist/{chunk-3DIF2YYW.cjs → chunk-AOXPBLPW.cjs} +10 -10
  79. package/dist/{chunk-7TTR4UF5.cjs → chunk-ATI45Z4M.cjs} +2 -2
  80. package/dist/{chunk-5BFCIX2V.cjs → chunk-CPPMO4IQ.cjs} +434 -148
  81. package/dist/{chunk-AYZZQ6AC.cjs → chunk-CZ5KGF6Q.cjs} +9 -9
  82. package/dist/{chunk-7THJ3ZBK.cjs → chunk-D4I35MCE.cjs} +2 -2
  83. package/dist/{chunk-MCPPFRLN.cjs → chunk-DCGAAN3Z.cjs} +2 -2
  84. package/dist/{chunk-VABL6CVX.cjs → chunk-DEY36N37.cjs} +21 -21
  85. package/dist/{chunk-RNCKGJCC.cjs → chunk-DXHXD3DK.cjs} +3 -3
  86. package/dist/{chunk-A56ZGMVZ.cjs → chunk-E7B45DBZ.cjs} +11 -11
  87. package/dist/{chunk-DOR6L4MT.cjs → chunk-EJC6EAC5.cjs} +18 -18
  88. package/dist/{chunk-UPGNM7MA.cjs → chunk-EULJOOMA.cjs} +11 -11
  89. package/dist/{chunk-G4AZL4GO.cjs → chunk-EYM6LEIF.cjs} +474 -70
  90. package/dist/{chunk-NJ4X6XGV.cjs → chunk-EZTYX2GH.cjs} +5 -5
  91. package/dist/chunk-FDD4UP73.cjs +521 -0
  92. package/dist/{chunk-WJ3VH2Q4.cjs → chunk-GEAIGM3J.cjs} +110 -615
  93. package/dist/{chunk-P3SBHF43.cjs → chunk-GRUYVXTS.cjs} +2 -2
  94. package/dist/{chunk-NX4Z5LMS.cjs → chunk-H3SZXND5.cjs} +5 -5
  95. package/dist/{chunk-EE4S4TOE.cjs → chunk-HS45TOFJ.cjs} +21 -21
  96. package/dist/chunk-INGOG6OV.cjs +899 -0
  97. package/dist/{chunk-UDKA6DGT.cjs → chunk-J3CDXZHF.cjs} +4 -4
  98. package/dist/{chunk-YO6G7TKI.cjs → chunk-JAU5ADEU.cjs} +11 -11
  99. package/dist/{chunk-22LBK4GA.cjs → chunk-JQEBSHX3.cjs} +4 -4
  100. package/dist/{chunk-RXX3U7VQ.cjs → chunk-KLXGLMFU.cjs} +10 -10
  101. package/dist/chunk-KVOX36J3.cjs +327 -0
  102. package/dist/chunk-L6BGNHFL.cjs +139 -0
  103. package/dist/{chunk-GMER35L3.cjs → chunk-L7TB7PU5.cjs} +20 -20
  104. package/dist/{chunk-AFXYNBL2.cjs → chunk-LBTRYEM2.cjs} +4 -4
  105. package/dist/{chunk-WYYCKIOD.cjs → chunk-LLULNJSP.cjs} +11 -11
  106. package/dist/{chunk-J27XOSLP.cjs → chunk-LSO46AFV.cjs} +8 -8
  107. package/dist/{chunk-5XJO45ES.cjs → chunk-LZ2KJ7ZX.cjs} +11 -11
  108. package/dist/chunk-M4IQ5LIZ.cjs +422 -0
  109. package/dist/{chunk-Y2KIUKJF.cjs → chunk-MPDHDKYZ.cjs} +11 -11
  110. package/dist/{chunk-4EMPKRZU.cjs → chunk-MRQ42ZJE.cjs} +3 -3
  111. package/dist/{chunk-EU5D2MF4.cjs → chunk-MYV4KZWP.cjs} +9 -9
  112. package/dist/{chunk-XD7KN4UN.cjs → chunk-MZXVLC24.cjs} +6 -6
  113. package/dist/{chunk-PPSONARU.cjs → chunk-NLBVDFIR.cjs} +41 -2
  114. package/dist/{chunk-L3PEGMGM.cjs → chunk-NY3TBZY4.cjs} +33 -33
  115. package/dist/{chunk-6YNYXXB6.cjs → chunk-OGVVSFAR.cjs} +3 -3
  116. package/dist/{chunk-MLV7QLB6.cjs → chunk-OMTQIQMN.cjs} +6 -6
  117. package/dist/{chunk-BEEOSNK7.cjs → chunk-PEJJ6TXJ.cjs} +15 -144
  118. package/dist/{chunk-SOKOWUF5.cjs → chunk-PPGWHIU7.cjs} +2 -2
  119. package/dist/{chunk-IELWOM2J.cjs → chunk-PPO6SDAN.cjs} +6 -6
  120. package/dist/{chunk-6JTZZCSL.cjs → chunk-PUMKX5F2.cjs} +3 -3
  121. package/dist/{chunk-RFOXFY2U.cjs → chunk-PXBYWCNB.cjs} +190 -799
  122. package/dist/{chunk-3BYXOISI.cjs → chunk-Q3HB3IX6.cjs} +4 -4
  123. package/dist/{chunk-RXCOVONX.cjs → chunk-RBMUOIXE.cjs} +289 -34
  124. package/dist/{chunk-MSBNHCSE.cjs → chunk-RJHGCUUD.cjs} +6 -6
  125. package/dist/{chunk-I6VG7F6Z.cjs → chunk-RSONDMYW.cjs} +708 -141
  126. package/dist/{chunk-GZDNPHMT.cjs → chunk-SHMPFCUE.cjs} +19 -19
  127. package/dist/{chunk-ZIBVCOW6.cjs → chunk-SN4FCXFC.cjs} +19 -19
  128. package/dist/{chunk-7KM52NMN.cjs → chunk-SN5T7WYO.cjs} +2 -2
  129. package/dist/{chunk-7MSZR65Z.cjs → chunk-SQJZGVDR.cjs} +7 -7
  130. package/dist/chunk-SYABFMD7.cjs +633 -0
  131. package/dist/{chunk-2RRFEYFH.cjs → chunk-TICB3MAC.cjs} +16 -16
  132. package/dist/{chunk-AOOKHUV5.cjs → chunk-U7Z7XYR2.cjs} +5 -5
  133. package/dist/{chunk-JEWQAXVG.cjs → chunk-UA2THQFV.cjs} +6 -6
  134. package/dist/{chunk-LHZPAHU3.cjs → chunk-VIK4L2YF.cjs} +112 -521
  135. package/dist/{chunk-4YWMAQ4J.cjs → chunk-VM2Y6BDY.cjs} +4 -4
  136. package/dist/{chunk-IRRKE2ZE.cjs → chunk-VMS3KWYI.cjs} +21 -21
  137. package/dist/{chunk-4SLARW6F.cjs → chunk-VU5NUD46.cjs} +17 -17
  138. package/dist/{chunk-XHY6TVYG.cjs → chunk-VV5CVOF7.cjs} +13 -13
  139. package/dist/{chunk-CCIBPGPZ.cjs → chunk-VYSAWPSS.cjs} +57 -57
  140. package/dist/{chunk-TTNEMQ2A.cjs → chunk-W7YRWEWQ.cjs} +22 -22
  141. package/dist/{chunk-C7MUOGEW.cjs → chunk-X7R5SY62.cjs} +6 -6
  142. package/dist/{chunk-ILR5KBMB.cjs → chunk-XOK3KTSS.cjs} +6 -6
  143. package/dist/{chunk-2CZM2I3T.cjs → chunk-XUIX45VU.cjs} +19 -19
  144. package/dist/{chunk-TGRMPS3A.cjs → chunk-XWH46PVJ.cjs} +165 -43
  145. package/dist/{chunk-WQYXXECR.cjs → chunk-Y5XVMK3K.cjs} +6 -6
  146. package/dist/{chunk-AK4TX2WG.cjs → chunk-YCNKEDTG.cjs} +13 -13
  147. package/dist/{chunk-PJJB24DU.cjs → chunk-YEF7SE3X.cjs} +20 -20
  148. package/dist/{chunk-RVLV4XW6.cjs → chunk-YMTVPMU3.cjs} +22 -22
  149. package/dist/data/index.cjs +2 -2
  150. package/dist/entries/autograph-lazy.cjs +2 -2
  151. package/dist/entries/charts/acoustictransport.cjs +3 -3
  152. package/dist/entries/charts/analysischarts.cjs +3 -3
  153. package/dist/entries/charts/astrocharts.cjs +3 -3
  154. package/dist/entries/charts/bars.cjs +3 -3
  155. package/dist/entries/charts/bayesiancharts.cjs +3 -3
  156. package/dist/entries/charts/biocharts.cjs +3 -3
  157. package/dist/entries/charts/biologycharts.cjs +11 -3
  158. package/dist/entries/charts/biologycharts.d.ts +1 -1
  159. package/dist/entries/charts/biologycharts.js +3 -2
  160. package/dist/entries/charts/business.cjs +3 -3
  161. package/dist/entries/charts/carecharts.cjs +3 -3
  162. package/dist/entries/charts/chemistrycharts.cjs +3 -3
  163. package/dist/entries/charts/civicscharts.cjs +3 -3
  164. package/dist/entries/charts/clinicalcharts.cjs +3 -3
  165. package/dist/entries/charts/comparison.cjs +3 -3
  166. package/dist/entries/charts/demography.cjs +3 -3
  167. package/dist/entries/charts/density.cjs +3 -3
  168. package/dist/entries/charts/diagrams.cjs +3 -3
  169. package/dist/entries/charts/distribution.cjs +3 -3
  170. package/dist/entries/charts/doecharts.cjs +13 -3
  171. package/dist/entries/charts/doecharts.d.ts +1 -1
  172. package/dist/entries/charts/doecharts.js +2 -1
  173. package/dist/entries/charts/earthscience.cjs +3 -3
  174. package/dist/entries/charts/economicscharts.cjs +3 -3
  175. package/dist/entries/charts/energycharts.cjs +3 -3
  176. package/dist/entries/charts/engineering.cjs +3 -3
  177. package/dist/entries/charts/fieldcharts.cjs +7 -3
  178. package/dist/entries/charts/fieldcharts.d.ts +1 -1
  179. package/dist/entries/charts/fieldcharts.js +3 -2
  180. package/dist/entries/charts/financial.cjs +3 -3
  181. package/dist/entries/charts/flow.cjs +3 -3
  182. package/dist/entries/charts/frameworks.cjs +3 -3
  183. package/dist/entries/charts/genomics.cjs +3 -3
  184. package/dist/entries/charts/geoflows.cjs +3 -3
  185. package/dist/entries/charts/geomaps.cjs +3 -3
  186. package/dist/entries/charts/geosciencecharts.cjs +3 -3
  187. package/dist/entries/charts/hierarchy.cjs +3 -3
  188. package/dist/entries/charts/indicators.cjs +3 -3
  189. package/dist/entries/charts/inferencecharts.cjs +3 -3
  190. package/dist/entries/charts/layoutcharts.cjs +3 -3
  191. package/dist/entries/charts/lifescience.cjs +4 -4
  192. package/dist/entries/charts/linesareas.cjs +3 -3
  193. package/dist/entries/charts/logisticscharts.cjs +3 -3
  194. package/dist/entries/charts/machinecharts.cjs +7 -3
  195. package/dist/entries/charts/machinecharts.d.ts +1 -1
  196. package/dist/entries/charts/machinecharts.js +2 -1
  197. package/dist/entries/charts/massive.cjs +3 -3
  198. package/dist/entries/charts/mathematical.cjs +3 -3
  199. package/dist/entries/charts/matrix.cjs +3 -3
  200. package/dist/entries/charts/medicalcharts.cjs +4 -4
  201. package/dist/entries/charts/mlcharts.cjs +4 -4
  202. package/dist/entries/charts/modelcharts.cjs +6 -5
  203. package/dist/entries/charts/multivariate.cjs +3 -3
  204. package/dist/entries/charts/musiccharts.cjs +3 -3
  205. package/dist/entries/charts/network.cjs +3 -3
  206. package/dist/entries/charts/physicscharts.cjs +3 -3
  207. package/dist/entries/charts/pictorial.cjs +4 -4
  208. package/dist/entries/charts/portfoliocharts.cjs +3 -3
  209. package/dist/entries/charts/productcharts.cjs +3 -3
  210. package/dist/entries/charts/proportion.cjs +3 -3
  211. package/dist/entries/charts/qualitycharts.cjs +3 -3
  212. package/dist/entries/charts/radial.cjs +3 -3
  213. package/dist/entries/charts/reliabilitycharts.cjs +5 -3
  214. package/dist/entries/charts/scatter.cjs +3 -3
  215. package/dist/entries/charts/scientific.cjs +3 -3
  216. package/dist/entries/charts/seriescharts.cjs +3 -3
  217. package/dist/entries/charts/signals.cjs +7 -3
  218. package/dist/entries/charts/signals.d.ts +1 -1
  219. package/dist/entries/charts/signals.js +2 -1
  220. package/dist/entries/charts/softwarediagrams.cjs +21 -3
  221. package/dist/entries/charts/softwarediagrams.d.ts +1 -1
  222. package/dist/entries/charts/softwarediagrams.js +4 -2
  223. package/dist/entries/charts/sportscharts.cjs +13 -3
  224. package/dist/entries/charts/sportscharts.d.ts +1 -1
  225. package/dist/entries/charts/sportscharts.js +3 -1
  226. package/dist/entries/charts/statistics.cjs +6 -6
  227. package/dist/entries/charts/strategycharts.cjs +30 -3
  228. package/dist/entries/charts/strategycharts.d.ts +1 -1
  229. package/dist/entries/charts/strategycharts.js +6 -1
  230. package/dist/entries/charts/structure.cjs +3 -3
  231. package/dist/entries/charts/surveycharts.cjs +3 -3
  232. package/dist/entries/charts/systemscharts.cjs +3 -3
  233. package/dist/entries/charts/textcharts.cjs +5 -5
  234. package/dist/entries/charts/thematicmaps.cjs +4 -4
  235. package/dist/entries/charts/threebars.cjs +3 -3
  236. package/dist/entries/charts/threefields.cjs +53 -0
  237. package/dist/entries/charts/threefields.d.ts +1 -0
  238. package/dist/entries/charts/threefields.js +6 -0
  239. package/dist/entries/charts/threeglobe.cjs +3 -3
  240. package/dist/entries/charts/threenetwork.cjs +3 -3
  241. package/dist/entries/charts/threestrata.cjs +3 -3
  242. package/dist/entries/charts/threesurfaces.cjs +7 -3
  243. package/dist/entries/charts/threesurfaces.d.ts +1 -1
  244. package/dist/entries/charts/threesurfaces.js +2 -1
  245. package/dist/entries/charts/threevolume.cjs +4 -4
  246. package/dist/entries/charts/timeline.cjs +3 -3
  247. package/dist/entries/charts/tracecharts.cjs +3 -3
  248. package/dist/entries/charts/trackscharts.cjs +3 -3
  249. package/dist/entries/charts/tradingcharts.cjs +6 -4
  250. package/dist/entries/charts/tradingcharts.d.ts +1 -1
  251. package/dist/entries/charts/tradingcharts.js +2 -1
  252. package/dist/entries/three.cjs +60 -20
  253. package/dist/entries/three.d.ts +1 -1
  254. package/dist/entries/three.js +7 -1
  255. package/dist/index.cjs +258 -97
  256. package/dist/index.d.cts +1953 -10
  257. package/dist/index.d.ts +1953 -10
  258. package/dist/index.js +26 -5
  259. package/dist/page/index.cjs +2 -2
  260. package/dist/react/components.js +58 -1
  261. package/dist/react/index.cjs +135 -92
  262. package/dist/react/index.d.ts +1 -1
  263. package/dist/react/index.js +2 -2
  264. package/package.json +1 -1
  265. package/dist/AutoGraph-XLBJQDRB.cjs +0 -140
  266. package/dist/catalog-O7XGDD2H.cjs +0 -137
  267. package/dist/chunk-77K2HTRC.cjs +0 -3220
  268. package/dist/chunk-XEK47TVD.cjs +0 -323
  269. /package/dist/{chunk-UMEKIIHJ.cjs → chunk-LNWTC72Y.cjs} +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class; var _class2; var _class3; var _class4; var _class5; var _class6; var _class7; var _class8; var _class9; var _class10; var _class11;
2
2
 
3
3
  var _chunkXX2YTCORcjs = require('./chunk-XX2YTCOR.cjs');
4
4
 
@@ -6,7 +6,7 @@ var _chunkXX2YTCORcjs = require('./chunk-XX2YTCOR.cjs');
6
6
  var _chunkEEF5WRRZcjs = require('./chunk-EEF5WRRZ.cjs');
7
7
 
8
8
 
9
- var _chunkUMEKIIHJcjs = require('./chunk-UMEKIIHJ.cjs');
9
+ var _chunkLNWTC72Ycjs = require('./chunk-LNWTC72Y.cjs');
10
10
 
11
11
  // src/charts/fieldcharts/fieldEnums.ts
12
12
  var FieldStyle = /* @__PURE__ */ ((FieldStyle2) => {
@@ -51,6 +51,12 @@ var RarefactionBasis = /* @__PURE__ */ ((RarefactionBasis2) => {
51
51
  RarefactionBasis2["Samples"] = "samples";
52
52
  return RarefactionBasis2;
53
53
  })(RarefactionBasis || {});
54
+ var AccumulationOrder = /* @__PURE__ */ ((AccumulationOrder2) => {
55
+ AccumulationOrder2["Collector"] = "collector";
56
+ AccumulationOrder2["Randomised"] = "randomised";
57
+ AccumulationOrder2["Both"] = "collector-and-randomised";
58
+ return AccumulationOrder2;
59
+ })(AccumulationOrder || {});
54
60
  var KiteScaling = /* @__PURE__ */ ((KiteScaling2) => {
55
61
  KiteScaling2["Shared"] = "shared";
56
62
  KiteScaling2["Own"] = "own";
@@ -151,19 +157,19 @@ var FieldKit = class _FieldKit {
151
157
  }
152
158
  /** Area-weighted centroid, falling back to the vertex mean for degenerate rings. */
153
159
  static centroid(polygon) {
154
- let area3 = 0, cx = 0, cy = 0;
160
+ let area4 = 0, cx = 0, cy = 0;
155
161
  polygon.forEach(([x, y], i) => {
156
162
  const [nx, ny] = polygon[(i + 1) % polygon.length];
157
163
  const cross = x * ny - nx * y;
158
- area3 += cross;
164
+ area4 += cross;
159
165
  cx += (x + nx) * cross;
160
166
  cy += (y + ny) * cross;
161
167
  });
162
- if (Math.abs(area3) < 1e-9) {
168
+ if (Math.abs(area4) < 1e-9) {
163
169
  const n = polygon.length || 1;
164
170
  return [polygon.reduce((sum, p) => sum + p[0], 0) / n, polygon.reduce((sum, p) => sum + p[1], 0) / n];
165
171
  }
166
- return [cx / (3 * area3), cy / (3 * area3)];
172
+ return [cx / (3 * area4), cy / (3 * area4)];
167
173
  }
168
174
  /** Width of a polygon along the horizontal line through `y`. */
169
175
  static span(polygon, y) {
@@ -230,7 +236,7 @@ var ConcordiaDiagram = (_class = class _ConcordiaDiagram extends _chunkXX2YTCORc
230
236
  description: "Plots U\u2013Pb isotope ratios with error ellipses against the concordia curve, in Wetherill or Tera-Wasserburg form, with an optional discordia line.",
231
237
  tags: ["geochronology", "u-pb", "zircon", "wetherill", "tera-wasserburg", "discordia", "isotopes"],
232
238
  sample: (seed) => {
233
- const { u, n } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
239
+ const { u, n } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
234
240
  const upper = _ConcordiaDiagram.wetherill((1780 + u() * 160) * MA), lower = _ConcordiaDiagram.wetherill((380 + u() * 120) * MA);
235
241
  return Array.from({ length: 16 }, (_, i) => {
236
242
  const f = i < 4 ? 1 : 0.25 + u() * 0.72;
@@ -378,8 +384,8 @@ var ConcordiaDiagram = (_class = class _ConcordiaDiagram extends _chunkXX2YTCORc
378
384
  const px = (p) => [x(p[0]), y(p[1])];
379
385
  const span = this.#span(x, y);
380
386
  const curve = span ? Array.from({ length: 160 }, (_, i) => px(this.#curve(span[0] + i / 159 * (span[1] - span[0])))) : [];
381
- const line4 = ctx.marks("concordia", "path", curve.length ? [curve] : [], () => "curve").attr("fill", "none").attr("stroke", ctx.theme.inkSecondary).attr("stroke-width", 2).attr("pointer-events", "none");
382
- ctx.set(line4, { d: (d) => FieldKit.path(d, false) });
387
+ const line5 = ctx.marks("concordia", "path", curve.length ? [curve] : [], () => "curve").attr("fill", "none").attr("stroke", ctx.theme.inkSecondary).attr("stroke-width", 2).attr("pointer-events", "none");
388
+ ctx.set(line5, { d: (d) => FieldKit.path(d, false) });
383
389
  const tickAges = span ? _d3.ticks.call(void 0, span[0] / MA, span[1] / MA, Math.max(2, Math.min(7, Math.floor(width / 90)))).filter((age) => age > 0) : [];
384
390
  const ticks = tickAges.map((age) => ({ age, at: px(this.#curve(age * MA)) }));
385
391
  const knots = ctx.marks("age-ticks", "circle", ticks, (d) => d.age).attr("fill", ctx.theme.surface).attr("stroke", ctx.theme.inkSecondary).attr("stroke-width", 1.5).attr("pointer-events", "none");
@@ -463,7 +469,7 @@ var KiteDiagram = (_class2 = class extends _chunkXX2YTCORcjs.CartesianChart {
463
469
  description: "Shows species abundance along a transect as bands drawn symmetrically about each species\u2019 own axis, to reveal zonation.",
464
470
  tags: ["ecology", "transect", "zonation", "abundance", "field sampling", "rocky shore"],
465
471
  sample: (seed) => {
466
- const { n } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
472
+ const { n } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
467
473
  return SHORE.flatMap(([species, centre, spread, peak]) => Array.from({ length: 22 }, (_, i) => {
468
474
  const at = i * 2, value = peak * Math.exp(-(((at - centre) / spread) ** 2) / 2) * (1 + n() * 0.12);
469
475
  return { position: at, species, abundance: Math.max(0, Math.round(value < 3 ? 0 : value)) };
@@ -569,7 +575,7 @@ var KobePlot = (_class3 = class _KobePlot extends _chunkXX2YTCORcjs.CartesianCha
569
575
  description: "Tracks a fish stock\u2019s B/BMSY against F/FMSY through the four Kobe status quadrants, as a yearly trajectory or the latest status.",
570
576
  tags: ["fisheries", "stock assessment", "msy", "kobe", "status", "ecology"],
571
577
  sample: (seed) => {
572
- const { n } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
578
+ const { n } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
573
579
  return STOCKS.flatMap(([stock, start, peakF, cut]) => {
574
580
  let b = start;
575
581
  return Array.from({ length: 40 }, (_, i) => {
@@ -713,7 +719,7 @@ var PollenDiagram = (_class4 = class _PollenDiagram extends _chunkEEF5WRRZcjs.Ch
713
719
  description: "Plots each pollen taxon\u2019s percentage of the pollen sum against sediment depth in side-by-side panels, with \xD710 exaggeration and CONISS zones.",
714
720
  tags: ["palynology", "palaeoecology", "stratigraphy", "sediment core", "coniss", "holocene"],
715
721
  sample: (seed) => {
716
- const { u } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
722
+ const { u } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
717
723
  return Array.from({ length: 30 }, (_, i) => i * 10).flatMap((depth) => {
718
724
  const age = depth / 290, raw = TAXA.map(([, , profile]) => Math.max(0, profile(age) * (0.8 + u() * 0.4))), total = raw.reduce((a, b) => a + b, 0) || 1;
719
725
  return TAXA.map(([taxon, type], k) => ({ depth, taxon, type, count: Math.round(raw[k] / total * 400) }));
@@ -914,7 +920,7 @@ var QapfDiagram = (_class5 = class _QapfDiagram extends _chunkEEF5WRRZcjs.Chart2
914
920
  description: "Classifies igneous rocks by modal quartz, alkali feldspar, plagioclase and feldspathoid on the IUGS plutonic or volcanic double triangle.",
915
921
  tags: ["petrology", "igneous", "mineralogy", "iugs", "streckeisen", "ternary", "classification"],
916
922
  sample: (seed) => {
917
- const { u } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
923
+ const { u } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
918
924
  return SUITES.flatMap(([suite, q, f, ratio]) => Array.from({ length: 14 }, (_, i) => {
919
925
  const quartz = q[0] + u() * (q[1] - q[0]), foid = f[0] + u() * (f[1] - f[0]), r = (ratio[0] + u() * (ratio[1] - ratio[0])) / 100, rest = 100 - quartz - foid;
920
926
  return { sample: `${suite.split(" ")[0]} ${i + 1}`, suite, Q: +quartz.toFixed(1), A: +(rest * (1 - r)).toFixed(1), P: +(rest * r).toFixed(1), F: +foid.toFixed(1) };
@@ -1009,7 +1015,7 @@ var RarefactionCurve = (_class6 = class _RarefactionCurve extends _chunkXX2YTCOR
1009
1015
  description: "Plots expected species richness against individuals or samples drawn per site, with intervals and Chao richness estimates.",
1010
1016
  tags: ["ecology", "biodiversity", "species richness", "rarefaction", "chao", "accumulation"],
1011
1017
  sample: (seed) => {
1012
- const { u, n } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
1018
+ const { u, n } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
1013
1019
  return [["Old-growth", 42], ["Secondary", 30], ["Plantation", 16]].flatMap(([site, pool]) => {
1014
1020
  const weights = Array.from({ length: +pool }, () => Math.exp(n() * 1.3) * 1.1);
1015
1021
  return Array.from({ length: 10 }, (_, j) => weights.flatMap((weight, s) => {
@@ -1116,6 +1122,217 @@ var RarefactionCurve = (_class6 = class _RarefactionCurve extends _chunkXX2YTCOR
1116
1122
  #title = "";
1117
1123
  }, _class6.__initStatic6(), _class6);
1118
1124
 
1125
+ // src/charts/fieldcharts/SpeciesAccumulationCurve.ts
1126
+
1127
+ var STEPS2 = 48;
1128
+ var AHEAD = 24;
1129
+ var Z = 1.96;
1130
+ var diamond = _d3.symbol.call(void 0, _d3.symbolDiamond, 64)();
1131
+ var HABITATS = [["Riparian forest", 58, 12], ["Upland forest", 40, 10], ["Pasture", 20, 8]];
1132
+ var SpeciesAccumulationCurve = (_class7 = class _SpeciesAccumulationCurve extends _chunkXX2YTCORcjs.CartesianChart {
1133
+ static __initStatic7() {this.meta = {
1134
+ id: "species-accumulation-curve",
1135
+ name: "Species accumulation curve",
1136
+ family: "statistical" /* Statistical */,
1137
+ dimension: 2 /* Two */,
1138
+ shape: "table" /* Table */,
1139
+ description: "Plots species found against sampling effort per site, as sampled and as the randomised mean with its band, extrapolated towards a Chao richness estimate.",
1140
+ tags: ["ecology", "biodiversity", "species richness", "collector curve", "sampling effort", "extrapolation", "chao", "asymptote"],
1141
+ sample: (seed) => {
1142
+ const { u, n } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
1143
+ const poisson = (mean) => {
1144
+ let k = 0;
1145
+ for (let p = u(); p > Math.exp(-mean); p *= u()) k++;
1146
+ return k;
1147
+ };
1148
+ return HABITATS.flatMap(([site, pool, traps]) => {
1149
+ const rates = Array.from({ length: pool }, () => Math.exp(n() * 1.5 - 1.7));
1150
+ return Array.from({ length: traps }, (_, j) => rates.flatMap((rate, s) => {
1151
+ const count = poisson(rate);
1152
+ return count > 0 ? [{ site, sample: `Trap ${j + 1}`, species: `sp${s + 1}`, count }] : [];
1153
+ })).flat();
1154
+ });
1155
+ },
1156
+ variants: {
1157
+ order: ["collector-and-randomised" /* Both */, "collector" /* Collector */, "randomised" /* Randomised */],
1158
+ effort: ["samples" /* Samples */, "individuals" /* Individuals */],
1159
+ extrapolate: [true, false]
1160
+ }
1161
+ }}
1162
+ defaults() {
1163
+ return { site: "site", sample: "sample", species: "species", count: "count", order: "collector-and-randomised" /* Both */, effort: "samples" /* Samples */, extrapolate: true, reach: 2, yLabel: "Species" };
1164
+ }
1165
+ /** Species found so far after each sample, in the order given. Each sample maps a species to the individuals counted. */
1166
+ static collector(samples) {
1167
+ const seen = /* @__PURE__ */ new Set();
1168
+ let individuals = 0;
1169
+ return samples.map((found) => {
1170
+ const before = seen.size;
1171
+ for (const [name, count] of found) {
1172
+ if (count <= 0) continue;
1173
+ seen.add(name);
1174
+ individuals += count;
1175
+ }
1176
+ return { species: seen.size, added: seen.size - before, individuals };
1177
+ });
1178
+ }
1179
+ /** Chao's bias-corrected count of species present but not found, from those found once and twice. `scale` is (T - 1) / T for T samples and 1 for individuals. */
1180
+ static unseen(ones, twos, scale = 1) {
1181
+ return ones > 1 ? scale * ones * (ones - 1) / (2 * (twos + 1)) : 0;
1182
+ }
1183
+ /**
1184
+ * Expected species `extra` units of effort past the `effort` observed, after Colwell et al. (2012): the curve closes
1185
+ * on the Chao estimate at a rate set by the species found once. The variance treats the frequency counts as
1186
+ * multinomial, so it meets the interpolated band at `extra = 0` and grows to that of the estimate itself.
1187
+ */
1188
+ static extrapolated(observed, ones, twos, effort, extra, scale = 1) {
1189
+ const gain = (q1, q2) => {
1190
+ const missing2 = _SpeciesAccumulationCurve.unseen(q1, q2, scale);
1191
+ return missing2 > 0 ? missing2 * (1 - (1 - q1 / (effort * missing2 + q1)) ** extra) : 0;
1192
+ };
1193
+ const missing = _SpeciesAccumulationCurve.unseen(ones, twos, scale), total = observed + missing;
1194
+ if (!(total > 0)) return { s: 0, variance: 0 };
1195
+ const h = 1e-4;
1196
+ const d1 = (gain(ones + h, twos) - gain(ones - h, twos)) / (2 * h), d2 = (gain(ones, twos + h) - gain(ones, twos - h)) / (2 * h);
1197
+ const variance = missing * (1 - missing / total) + 2 * missing * (d1 * ones + d2 * twos) / total + d1 * d1 * ones * (1 - ones / total) + d2 * d2 * twos * (1 - twos / total) - 2 * d1 * d2 * ones * twos / total;
1198
+ return { s: observed + gain(ones, twos), variance: Math.max(0, variance) };
1199
+ }
1200
+ get #bySamples() {
1201
+ return this.options.effort !== "individuals" /* Individuals */;
1202
+ }
1203
+ get #chao() {
1204
+ return this.#bySamples ? "Chao2" : "Chao1";
1205
+ }
1206
+ #curves() {
1207
+ const { data, site, sample, species, count, extrapolate, reach } = this.options;
1208
+ const sites = /* @__PURE__ */ new Map();
1209
+ for (const row of Array.isArray(data) ? data : []) {
1210
+ const value = FieldKit.number(_optionalChain([row, 'optionalAccess', _20 => _20[count]]));
1211
+ if (value === null || value < 0) continue;
1212
+ const key = FieldKit.text(row[site]) || "All", unit = FieldKit.text(row[sample]) || "All", name = FieldKit.text(row[species]);
1213
+ const units = _nullishCoalesce(sites.get(key), () => ( sites.set(key, /* @__PURE__ */ new Map()).get(key)));
1214
+ const found = _nullishCoalesce(units.get(unit), () => ( units.set(unit, /* @__PURE__ */ new Map()).get(unit)));
1215
+ if (name && value > 0) found.set(name, (_nullishCoalesce(found.get(name), () => ( 0))) + value);
1216
+ }
1217
+ const bySamples = this.#bySamples, far = extrapolate ? Math.max(1, Number(reach) || 2) : 1;
1218
+ const point = (n, { s, variance }) => {
1219
+ const half = Z * Math.sqrt(variance);
1220
+ return { n, s, low: Math.max(0, s - half), high: s + half };
1221
+ };
1222
+ return [...sites].map(([key, units]) => {
1223
+ const names = [...units.keys()], samples = [...units.values()];
1224
+ const tally = /* @__PURE__ */ new Map();
1225
+ for (const found of samples) for (const [name, value] of found) {
1226
+ const entry = _nullishCoalesce(tally.get(name), () => ( tally.set(name, { total: 0, units: 0 }).get(name)));
1227
+ entry.total += value;
1228
+ entry.units++;
1229
+ }
1230
+ const counts = [...tally.values()].map((entry) => bySamples ? entry.units : Math.round(entry.total)).filter((k) => k > 0);
1231
+ const effort = bySamples ? samples.length : counts.reduce((sum, k) => sum + k, 0), observed = counts.length;
1232
+ const ones = counts.filter((k) => k === 1).length, twos = counts.filter((k) => k === 2).length;
1233
+ const scale = bySamples && effort ? (effort - 1) / effort : 1;
1234
+ const estimate = observed + _SpeciesAccumulationCurve.unseen(ones, twos, scale);
1235
+ const ahead = (extra) => _SpeciesAccumulationCurve.extrapolated(observed, ones, twos, effort, extra, scale);
1236
+ const drawn = [...new Set(Array.from({ length: STEPS2 + 1 }, (_, i) => Math.max(1, Math.round(i / STEPS2 * effort))))];
1237
+ const half = Z * Math.sqrt(ahead(Infinity).variance);
1238
+ return {
1239
+ site: key,
1240
+ observed,
1241
+ estimate,
1242
+ effort,
1243
+ ceiling: [Math.max(observed, estimate - half), estimate + half],
1244
+ steps: _SpeciesAccumulationCurve.collector(samples).map((step, i) => ({ ...step, key: `${key}\0${i}`, site: key, sample: names[i], effort: bySamples ? i + 1 : step.individuals })),
1245
+ mean: effort > 0 ? drawn.map((n) => point(n, RarefactionCurve.samples(counts, effort, n, estimate))) : [],
1246
+ beyond: far > 1 ? Array.from({ length: AHEAD + 1 }, (_, i) => point(effort * (1 + i / AHEAD * (far - 1)), ahead(i / AHEAD * (far - 1) * effort))) : []
1247
+ };
1248
+ }).filter((curve) => curve.effort > 0);
1249
+ }
1250
+ get #collected() {
1251
+ return this.options.order !== "randomised" /* Randomised */;
1252
+ }
1253
+ get #averaged() {
1254
+ return this.options.order !== "collector" /* Collector */;
1255
+ }
1256
+ #label(curve) {
1257
+ return `${this.#chao} ${curve.estimate.toFixed(1)}`;
1258
+ }
1259
+ /** Room on the right for the richness estimates the extrapolation is marked with. */
1260
+ plotMargin() {
1261
+ const margin = super.plotMargin(), marked = this.#curves().filter((curve) => curve.beyond.length);
1262
+ return marked.length ? { ...margin, right: 16 + Math.max(...marked.map((curve) => FieldKit.width(this.#label(curve), 10))) } : margin;
1263
+ }
1264
+ scales(ctx) {
1265
+ const curves = this.#curves();
1266
+ const far = Math.max(1, ...curves.map((curve) => _nullishCoalesce(_optionalChain([curve, 'access', _21 => _21.beyond, 'access', _22 => _22.at, 'call', _23 => _23(-1), 'optionalAccess', _24 => _24.n]), () => ( curve.effort))));
1267
+ const top = Math.max(1, ...curves.flatMap((curve) => [
1268
+ curve.observed,
1269
+ ...this.#averaged ? curve.mean.map((p) => p.high) : [],
1270
+ ...curve.beyond.map((p) => p.high),
1271
+ ...curve.beyond.length ? [curve.estimate] : []
1272
+ ]));
1273
+ return { x: _d3.scaleLinear.call(void 0, [0, far], [0, ctx.plot.width]).nice(), y: _d3.scaleLinear.call(void 0, [0, top * 1.05], [ctx.plot.height, 0]).nice() };
1274
+ }
1275
+ plotMarks(ctx, { x, y }) {
1276
+ const curves = this.#curves(), { width, height } = ctx.plot;
1277
+ const sx = (n) => _nullishCoalesce(x(n), () => ( 0)), sy = (s) => _nullishCoalesce(y(s), () => ( 0));
1278
+ const tone = (d) => ctx.palette.color(d.site);
1279
+ const unit = this.#bySamples ? "Samples" : "Individuals", chao = this.#chao;
1280
+ const averaged = this.#averaged ? curves : [], ahead = curves.filter((curve) => curve.beyond.length);
1281
+ const summary = (d) => [["Observed species", d.observed], [unit, d.effort], [`${chao} estimate`, d.estimate.toFixed(1)]];
1282
+ const band = _d3.area.call(void 0, ).x((p) => sx(p.n)).y0((p) => sy(p.low)).y1((p) => sy(p.high));
1283
+ const bands = ctx.marks("intervals", "path", averaged, (d) => d.site).attr("fill", tone).attr("fill-opacity", 0.16).attr("stroke", "none").attr("pointer-events", "none");
1284
+ ctx.set(bands, { d: (d) => _nullishCoalesce(band(d.mean), () => ( "")) });
1285
+ const cones = ctx.marks("extrapolated-intervals", "path", ahead, (d) => d.site).attr("fill", tone).attr("fill-opacity", 0.1).attr("stroke", "none").attr("pointer-events", "none");
1286
+ ctx.set(cones, { d: (d) => _nullishCoalesce(band(d.beyond), () => ( "")) });
1287
+ const trace = _d3.line.call(void 0, ).x((p) => sx(p.n)).y((p) => sy(p.s));
1288
+ const dashed = ctx.marks("extrapolated", "path", ahead, (d) => d.site).attr("fill", "none").attr("stroke", tone).attr("stroke-width", 2).attr("stroke-dasharray", "6 4");
1289
+ ctx.set(dashed, { d: (d) => _nullishCoalesce(trace(d.beyond), () => ( "")) });
1290
+ ctx.hover(dashed, (d) => {
1291
+ const end = d.beyond.at(-1);
1292
+ return { title: `${d.site}, extrapolated`, color: tone(d), rows: [[`Expected at ${Math.round(end.n)} ${unit.toLowerCase()}`, end.s.toFixed(1)], ["95% interval", `${end.low.toFixed(1)} to ${end.high.toFixed(1)}`], ...summary(d)] };
1293
+ });
1294
+ const means = ctx.marks("curves", "path", averaged, (d) => d.site).attr("fill", "none").attr("stroke", tone).attr("stroke-width", 2).attr("stroke-linejoin", "round");
1295
+ ctx.set(means, { d: (d) => _nullishCoalesce(trace(d.mean), () => ( "")) });
1296
+ ctx.drawOn(means);
1297
+ ctx.hover(means, (d) => ({ title: `${d.site}, randomised mean`, color: tone(d), rows: summary(d) }));
1298
+ const collected = this.#collected ? curves : [];
1299
+ const walk = _d3.line.call(void 0, ).x((step) => sx(step.effort)).y((step) => sy(step.species));
1300
+ const walks = ctx.marks("collector", "path", collected, (d) => d.site).attr("fill", "none").attr("stroke", tone).attr("stroke-width", this.#averaged ? 1.5 : 2).attr("stroke-linejoin", "round");
1301
+ ctx.set(walks, { d: (d) => _nullishCoalesce(walk(d.steps), () => ( "")) });
1302
+ ctx.hover(walks, (d) => ({ title: `${d.site}, as sampled`, color: tone(d), rows: summary(d) }));
1303
+ const roomy = collected.every((curve) => (sx(curve.steps.at(-1).effort) - sx(curve.steps[0].effort)) / curve.steps.length >= 12);
1304
+ const dots = ctx.marks("samples", "circle", roomy ? collected.flatMap((curve) => curve.steps.slice(0, -1)) : [], (step) => step.key).attr("fill", tone).attr("stroke", ctx.theme.surface).attr("stroke-width", 1.5);
1305
+ ctx.set(dots, { cx: (step) => sx(step.effort), cy: (step) => sy(step.species), r: 4 }, { r: 0 });
1306
+ ctx.hover(dots, (step) => ({ title: `${step.site}, ${step.sample}`, color: tone(step), rows: [["Species so far", step.species], ["New in this sample", step.added], [unit, this.#bySamples ? step.effort : Math.round(step.effort)]] }));
1307
+ const ends = ctx.marks("observed", "circle", curves, (d) => d.site).attr("fill", tone).attr("stroke", ctx.theme.surface).attr("stroke-width", 2);
1308
+ ctx.set(ends, { cx: (d) => sx(d.effort), cy: (d) => sy(d.observed), r: 5 }, { r: 0 });
1309
+ ctx.hover(ends, (d) => ({ title: d.site, color: tone(d), rows: summary(d) }));
1310
+ const place = (d) => `translate(${width},${sy(d.estimate)})`;
1311
+ const marks = ctx.marks("estimates", "path", ahead, (d) => d.site).attr("d", diamond).attr("fill", tone).attr("stroke", ctx.theme.surface).attr("stroke-width", 2).attr("paint-order", "stroke");
1312
+ ctx.set(marks, { transform: place }, { transform: place });
1313
+ ctx.hover(marks, (d) => ({
1314
+ title: d.site,
1315
+ color: tone(d),
1316
+ rows: [[`${chao} estimate`, d.estimate.toFixed(1)], ["95% interval", `${d.ceiling[0].toFixed(1)} to ${d.ceiling[1].toFixed(1)}`], ["Observed species", d.observed], ["Share found", `${Math.round(100 * d.observed / Math.max(d.estimate, 1e-9))}%`]]
1317
+ }));
1318
+ const stacked = [...ahead].sort((a, b) => a.estimate - b.estimate).map((curve) => ({ curve, at: sy(curve.estimate) + 3.5 }));
1319
+ stacked.forEach((label, i) => {
1320
+ if (i) label.at = Math.min(label.at, stacked[i - 1].at - 11);
1321
+ });
1322
+ const lift = Math.max(0, 9 - (_nullishCoalesce(_optionalChain([stacked, 'access', _25 => _25.at, 'call', _26 => _26(-1), 'optionalAccess', _27 => _27.at]), () => ( height))));
1323
+ const names = ctx.text(ctx.marks("estimate-labels", "text", stacked, (d) => d.curve.site), 10).attr("pointer-events", "none").text((d) => this.#label(d.curve));
1324
+ ctx.set(names, { x: width + 9, y: (d) => d.at + lift }, { x: width + 9, y: (d) => d.at + lift });
1325
+ }
1326
+ /** The x title names the effort unless the caller set their own. */
1327
+ paint() {
1328
+ const title = this.#bySamples ? "Samples taken" : "Individuals counted";
1329
+ if (this.options.xLabel === void 0 || this.options.xLabel === this.#title) this.options.xLabel = title;
1330
+ this.#title = title;
1331
+ super.paint();
1332
+ }
1333
+ #title = "";
1334
+ }, _class7.__initStatic7(), _class7);
1335
+
1119
1336
  // src/charts/fieldcharts/SpiderDiagram.ts
1120
1337
 
1121
1338
  var CHONDRITE = { La: 0.237, Ce: 0.612, Pr: 0.095, Nd: 0.467, Sm: 0.153, Eu: 0.058, Gd: 0.2055, Tb: 0.0374, Dy: 0.254, Ho: 0.0566, Er: 0.1655, Tm: 0.0255, Yb: 0.17, Lu: 0.0254 };
@@ -1249,8 +1466,8 @@ var REFERENCES = {
1249
1466
  ["n-morb" /* NMorb */]: ["N-MORB", N_MORB]
1250
1467
  };
1251
1468
  var SUITES2 = [["OIB-like", OIB], ["E-MORB-like", E_MORB], ["N-MORB-like", N_MORB]];
1252
- var SpiderDiagram = (_class7 = class extends _chunkXX2YTCORcjs.CartesianChart {
1253
- static __initStatic7() {this.meta = {
1469
+ var SpiderDiagram = (_class8 = class extends _chunkXX2YTCORcjs.CartesianChart {
1470
+ static __initStatic8() {this.meta = {
1254
1471
  id: "trace-element-spider",
1255
1472
  name: "Spider diagram (normalised)",
1256
1473
  family: "scientific" /* Scientific */,
@@ -1259,7 +1476,7 @@ var SpiderDiagram = (_class7 = class extends _chunkXX2YTCORcjs.CartesianChart {
1259
1476
  description: "Plots element concentrations normalised to chondrite, primitive mantle or N-MORB on an ordered element axis, to compare rock suites.",
1260
1477
  tags: ["geochemistry", "trace elements", "ree", "normalised", "multi-element", "sun mcdonough"],
1261
1478
  sample: (seed) => {
1262
- const { n } = _chunkUMEKIIHJcjs.SampleData.rng(seed);
1479
+ const { n } = _chunkLNWTC72Ycjs.SampleData.rng(seed);
1263
1480
  return SUITES2.flatMap(([group, reference]) => Array.from({ length: 4 }, (_, i) => {
1264
1481
  const shift = n() * 0.12;
1265
1482
  return { sample: `${group.split("-")[0]}-${i + 1}`, suite: group, ...Object.fromEntries(Object.entries(reference).map(([element, value]) => [element, +(value * Math.exp(shift + n() * 0.1)).toPrecision(3)])) };
@@ -1341,19 +1558,19 @@ var SpiderDiagram = (_class7 = class extends _chunkXX2YTCORcjs.CartesianChart {
1341
1558
  super.paint();
1342
1559
  }
1343
1560
  #title = "";
1344
- }, _class7.__initStatic7(), _class7);
1561
+ }, _class8.__initStatic8(), _class8);
1345
1562
 
1346
1563
  // src/charts/fieldcharts/FieldDiagram.ts
1347
1564
 
1348
- var FieldDiagram = (_class8 = class extends _chunkXX2YTCORcjs.CartesianChart {constructor(...args) { super(...args); _class8.prototype.__init.call(this); }
1565
+ var FieldDiagram = (_class9 = class extends _chunkXX2YTCORcjs.CartesianChart {constructor(...args) { super(...args); _class9.prototype.__init.call(this); }
1349
1566
  __init() {this.outside = "Outside the fields"}
1350
1567
  #samples() {
1351
1568
  const { data, x, y, group, label } = this.options;
1352
1569
  const shapes = this.fieldShapes();
1353
1570
  return (Array.isArray(data) ? data : []).flatMap((row, i) => {
1354
- const px = FieldKit.number(_optionalChain([row, 'optionalAccess', _20 => _20[x]])), py = FieldKit.number(_optionalChain([row, 'optionalAccess', _21 => _21[y]]));
1571
+ const px = FieldKit.number(_optionalChain([row, 'optionalAccess', _28 => _28[x]])), py = FieldKit.number(_optionalChain([row, 'optionalAccess', _29 => _29[y]]));
1355
1572
  if (px === null || py === null) return [];
1356
- const field2 = _nullishCoalesce(_optionalChain([shapes, 'access', _22 => _22.find, 'call', _23 => _23((shape) => FieldKit.inside([px, py], shape.polygon)), 'optionalAccess', _24 => _24.name]), () => ( this.outside));
1573
+ const field2 = _nullishCoalesce(_optionalChain([shapes, 'access', _30 => _30.find, 'call', _31 => _31((shape) => FieldKit.inside([px, py], shape.polygon)), 'optionalAccess', _32 => _32.name]), () => ( this.outside));
1357
1574
  return [{ key: `${i}`, row, x: px, y: py, group: FieldKit.text(row[group]) || "Samples", label: FieldKit.text(row[label]), field: field2 }];
1358
1575
  });
1359
1576
  }
@@ -1369,7 +1586,7 @@ var FieldDiagram = (_class8 = class extends _chunkXX2YTCORcjs.CartesianChart {co
1369
1586
  const toPixel = ([a, b]) => [_nullishCoalesce(x(a), () => ( 0)), _nullishCoalesce(y(b), () => ( 0))];
1370
1587
  const shapes = this.fieldShapes().map((shape) => ({ ...shape, pixels: FieldKit.clip(shape.polygon, extent.x, extent.y).map(toPixel) })).filter((shape) => shape.pixels.length > 2);
1371
1588
  const filled = fields === "filled" /* Filled */;
1372
- const columns = filled || this.options.grid === false ? [] : _nullishCoalesce(_optionalChain([x, 'access', _25 => _25.ticks, 'optionalCall', _26 => _26(Math.max(2, Math.floor(ctx.plot.width / 80)))]), () => ( []));
1589
+ const columns = filled || this.options.grid === false ? [] : _nullishCoalesce(_optionalChain([x, 'access', _33 => _33.ticks, 'optionalCall', _34 => _34(Math.max(2, Math.floor(ctx.plot.width / 80)))]), () => ( []));
1373
1590
  const verticals = ctx.marks("axis-grid-x", "line", columns, (d) => d).attr("stroke", ctx.theme.grid).attr("stroke-width", 1);
1374
1591
  ctx.set(verticals, { x1: (d) => _nullishCoalesce(x(d), () => ( 0)), x2: (d) => _nullishCoalesce(x(d), () => ( 0)), y1: 0, y2: ctx.plot.height });
1375
1592
  const areas = ctx.marks("fields", "path", shapes, (d) => d.key).attr("stroke-linejoin", "round").attr("fill", (_, i) => filled ? ctx.palette.sequential(0.06 + i % 4 * 0.08) : "transparent").attr("stroke", filled ? ctx.theme.surface : ctx.theme.inkMuted).attr("stroke-width", filled ? 2 : 1.25);
@@ -1396,7 +1613,7 @@ var FieldDiagram = (_class8 = class extends _chunkXX2YTCORcjs.CartesianChart {co
1396
1613
  ctx.set(dots, { cx: (d) => d.px, cy: (d) => d.py, r: 4.5 }, { r: 0 }, Math.min(3, 300 / (shown.length || 1)));
1397
1614
  ctx.hover(dots, (d) => ({ title: d.label || d.field, color: ctx.palette.color(d.group), rows: [["Field", d.field], [xName, +d.x.toFixed(2)], [yName, +d.y.toFixed(2)], ["Group", d.group]] }));
1398
1615
  }
1399
- }, _class8);
1616
+ }, _class9);
1400
1617
 
1401
1618
  // src/charts/fieldcharts/TasDiagram.ts
1402
1619
  var TAS = [
@@ -1419,8 +1636,8 @@ var TAS = [
1419
1636
  ];
1420
1637
  var SHAPES = TAS.map(([code, name, polygon]) => ({ key: code, code, name, polygon }));
1421
1638
  var UNITS = ["Lower unit", "Middle unit", "Upper unit"];
1422
- var TasDiagram = (_class9 = class extends FieldDiagram {
1423
- static __initStatic8() {this.meta = {
1639
+ var TasDiagram = (_class10 = class extends FieldDiagram {
1640
+ static __initStatic9() {this.meta = {
1424
1641
  id: "tas-diagram",
1425
1642
  name: "TAS diagram",
1426
1643
  family: "scientific" /* Scientific */,
@@ -1428,7 +1645,7 @@ var TasDiagram = (_class9 = class extends FieldDiagram {
1428
1645
  shape: "table" /* Table */,
1429
1646
  description: "Classifies volcanic rocks by total alkali (Na2O + K2O) against silica on the Le Bas et al. (1986) IUGS fields.",
1430
1647
  tags: ["geochemistry", "petrology", "igneous", "classification", "iugs", "volcanic"],
1431
- sample: (seed) => _chunkUMEKIIHJcjs.SampleData.points(seed, 90, 3).map((row, i) => {
1648
+ sample: (seed) => _chunkLNWTC72Ycjs.SampleData.points(seed, 90, 3).map((row, i) => {
1432
1649
  const g = i % 3, silica = 41 + (+row.x - 5) * 0.48;
1433
1650
  const alkali = 1.2 + (silica - 41) * 0.2 + (+row.y - +row.x * 0.8 - 10) / 9 * 0.9 + (g === 1 ? 1.6 : 0);
1434
1651
  return { sample: `S-${i + 1}`, unit: UNITS[g], SiO2: +silica.toFixed(2), alkali: +Math.max(0.2, alkali).toFixed(2) };
@@ -1462,7 +1679,7 @@ var TasDiagram = (_class9 = class extends FieldDiagram {
1462
1679
  measures() {
1463
1680
  return ["SiO\u2082 wt%", "Na\u2082O + K\u2082O wt%"];
1464
1681
  }
1465
- }, _class9.__initStatic8(), _class9);
1682
+ }, _class10.__initStatic9(), _class10);
1466
1683
 
1467
1684
  // src/charts/fieldcharts/WhittakerBiomeDiagram.ts
1468
1685
  var BIOMES = [
@@ -1478,8 +1695,8 @@ var BIOMES = [
1478
1695
  ];
1479
1696
  var SHAPES2 = BIOMES.map(([code, name, polygon]) => ({ key: code, code, name, polygon }));
1480
1697
  var NETWORKS = { Alpha: "Network A", Bravo: "Network B", Charlie: "Network C" };
1481
- var WhittakerBiomeDiagram = (_class10 = class extends FieldDiagram {constructor(...args2) { super(...args2); _class10.prototype.__init2.call(this); }
1482
- static __initStatic9() {this.meta = {
1698
+ var WhittakerBiomeDiagram = (_class11 = class extends FieldDiagram {constructor(...args2) { super(...args2); _class11.prototype.__init2.call(this); }
1699
+ static __initStatic10() {this.meta = {
1483
1700
  id: "whittaker-biome-diagram",
1484
1701
  name: "Whittaker biome diagram",
1485
1702
  family: "scientific" /* Scientific */,
@@ -1487,7 +1704,7 @@ var WhittakerBiomeDiagram = (_class10 = class extends FieldDiagram {constructor(
1487
1704
  shape: "table" /* Table */,
1488
1705
  description: "Places sites on Whittaker biome regions by mean annual temperature and precipitation, naming the biome each falls in.",
1489
1706
  tags: ["ecology", "biome", "climate", "vegetation", "whittaker", "ricklefs"],
1490
- sample: (seed) => _chunkUMEKIIHJcjs.SampleData.points(seed, 140, 3).map((row, i) => {
1707
+ sample: (seed) => _chunkLNWTC72Ycjs.SampleData.points(seed, 140, 3).map((row, i) => {
1491
1708
  const x = +row.x, wet = +row.y - x * 0.8 - 10;
1492
1709
  return { site: `Site ${i + 1}`, network: _nullishCoalesce(NETWORKS[String(row.group)], () => ( "Network A")), temperature: +(-15 + (x - 5) * 0.58).toFixed(1), precipitation: Math.round(15 + (x - 5) * 3 + wet * 7) };
1493
1710
  }).filter((row) => SHAPES2.some((shape) => FieldKit.inside([row.temperature, row.precipitation], shape.polygon))).slice(0, 70),
@@ -1521,7 +1738,7 @@ var WhittakerBiomeDiagram = (_class10 = class extends FieldDiagram {constructor(
1521
1738
  measures() {
1522
1739
  return ["Temperature \xB0C", "Precipitation cm"];
1523
1740
  }
1524
- }, _class10.__initStatic9(), _class10);
1741
+ }, _class11.__initStatic10(), _class11);
1525
1742
 
1526
1743
  // src/charts/fieldcharts/index.ts
1527
1744
  var fieldchartsCatalog = [
@@ -1533,7 +1750,8 @@ var fieldchartsCatalog = [
1533
1750
  KiteDiagram,
1534
1751
  PollenDiagram,
1535
1752
  WhittakerBiomeDiagram,
1536
- KobePlot
1753
+ KobePlot,
1754
+ SpeciesAccumulationCurve
1537
1755
  ];
1538
1756
 
1539
1757
 
@@ -1559,4 +1777,6 @@ var fieldchartsCatalog = [
1559
1777
 
1560
1778
 
1561
1779
 
1562
- exports.FieldStyle = FieldStyle; exports.FieldSamples = FieldSamples; exports.ConcordiaProjection = ConcordiaProjection; exports.ConcordiaMarks = ConcordiaMarks; exports.SpiderNormaliser = SpiderNormaliser; exports.SpiderDisplay = SpiderDisplay; exports.QapfRocks = QapfRocks; exports.RarefactionBasis = RarefactionBasis; exports.KiteScaling = KiteScaling; exports.PollenStyle = PollenStyle; exports.PollenWidth = PollenWidth; exports.KobePath = KobePath; exports.ConcordiaDiagram = ConcordiaDiagram; exports.KiteDiagram = KiteDiagram; exports.KobePlot = KobePlot; exports.PollenDiagram = PollenDiagram; exports.QapfDiagram = QapfDiagram; exports.RarefactionCurve = RarefactionCurve; exports.SpiderDiagram = SpiderDiagram; exports.TasDiagram = TasDiagram; exports.WhittakerBiomeDiagram = WhittakerBiomeDiagram; exports.fieldchartsCatalog = fieldchartsCatalog;
1780
+
1781
+
1782
+ exports.FieldStyle = FieldStyle; exports.FieldSamples = FieldSamples; exports.ConcordiaProjection = ConcordiaProjection; exports.ConcordiaMarks = ConcordiaMarks; exports.SpiderNormaliser = SpiderNormaliser; exports.SpiderDisplay = SpiderDisplay; exports.QapfRocks = QapfRocks; exports.RarefactionBasis = RarefactionBasis; exports.AccumulationOrder = AccumulationOrder; exports.KiteScaling = KiteScaling; exports.PollenStyle = PollenStyle; exports.PollenWidth = PollenWidth; exports.KobePath = KobePath; exports.ConcordiaDiagram = ConcordiaDiagram; exports.KiteDiagram = KiteDiagram; exports.KobePlot = KobePlot; exports.PollenDiagram = PollenDiagram; exports.QapfDiagram = QapfDiagram; exports.RarefactionCurve = RarefactionCurve; exports.SpeciesAccumulationCurve = SpeciesAccumulationCurve; exports.SpiderDiagram = SpiderDiagram; exports.TasDiagram = TasDiagram; exports.WhittakerBiomeDiagram = WhittakerBiomeDiagram; exports.fieldchartsCatalog = fieldchartsCatalog;