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.
- package/CHANGELOG.md +9 -1
- package/README.md +6 -4
- package/dist/AutoGraph-PDPEAIXL.cjs +145 -0
- package/dist/GraphType.js +19 -0
- package/dist/autograph/chartIndex.js +521 -0
- package/dist/autograph/chartModules.js +2 -1
- package/dist/autograph/index.cjs +98 -93
- package/dist/catalog-DI4XZ46L.cjs +142 -0
- package/dist/catalog.js +2 -1
- package/dist/charts/biologycharts/BiologySamples.js +59 -0
- package/dist/charts/biologycharts/PunnettSquare.js +342 -0
- package/dist/charts/biologycharts/biologyEnums.js +22 -1
- package/dist/charts/biologycharts/index.js +5 -3
- package/dist/charts/doecharts/DoeSamples.js +78 -0
- package/dist/charts/doecharts/SipocDiagram.js +453 -0
- package/dist/charts/doecharts/index.js +4 -2
- package/dist/charts/fieldcharts/SpeciesAccumulationCurve.js +350 -0
- package/dist/charts/fieldcharts/fieldEnums.js +8 -1
- package/dist/charts/fieldcharts/index.js +5 -3
- package/dist/charts/signals/AntennaPatternChart.js +492 -0
- package/dist/charts/signals/SignalSamples.js +17 -0
- package/dist/charts/signals/index.js +5 -3
- package/dist/charts/softwarediagrams/ComponentDiagram.js +504 -0
- package/dist/charts/softwarediagrams/DeploymentDiagram.js +419 -0
- package/dist/charts/softwarediagrams/SoftwareSamples.js +283 -1
- package/dist/charts/softwarediagrams/index.js +7 -3
- package/dist/charts/softwarediagrams/softwareEnums.js +45 -1
- package/dist/charts/sportscharts/PowerDurationCurve.js +301 -0
- package/dist/charts/sportscharts/SportsSamples.js +102 -0
- package/dist/charts/sportscharts/TrainingLoadChart.js +325 -0
- package/dist/charts/sportscharts/index.js +6 -2
- package/dist/charts/strategycharts/BassDiffusionChart.js +362 -0
- package/dist/charts/strategycharts/BassModel.js +96 -0
- package/dist/charts/strategycharts/BurnRunwayChart.js +284 -0
- package/dist/charts/strategycharts/CapTableChart.js +366 -0
- package/dist/charts/strategycharts/KanbanBoard.js +324 -0
- package/dist/charts/strategycharts/OkrTree.js +339 -0
- package/dist/charts/strategycharts/StrategyPane.js +27 -0
- package/dist/charts/strategycharts/StrategySamples.js +251 -0
- package/dist/charts/strategycharts/index.js +15 -3
- package/dist/charts/threefields/BsfcMap3DChart.js +231 -0
- package/dist/charts/threefields/CompressorMap3DChart.js +217 -0
- package/dist/charts/threefields/FieldGrid.js +50 -0
- package/dist/charts/threefields/LossLandscape3DChart.js +201 -0
- package/dist/charts/threefields/MapSheet.js +77 -0
- package/dist/charts/threefields/TerrainRoute3DChart.js +201 -0
- package/dist/charts/threefields/TerrainRouteMath.js +40 -0
- package/dist/charts/threefields/ThreeFieldBase.js +117 -0
- package/dist/charts/threefields/ThreeFieldsSamples.js +80 -0
- package/dist/charts/threefields/WaferMap3DChart.js +218 -0
- package/dist/charts/threefields/index.js +19 -0
- package/dist/charts/threesurfaces/index.js +2 -2
- package/dist/charts/tradingcharts/KeltnerChannelChart.js +171 -0
- package/dist/charts/tradingcharts/TradingMath.js +20 -0
- package/dist/charts/tradingcharts/index.js +4 -2
- package/dist/{chunk-ZL6XDXMK.cjs → chunk-26PSLEP4.cjs} +8 -8
- package/dist/{chunk-W3US6EFP.cjs → chunk-2BO5DZUP.cjs} +12 -12
- package/dist/{chunk-5DP7OUSE.cjs → chunk-2GG5YYSC.cjs} +6 -6
- package/dist/{chunk-7FG4JSVO.cjs → chunk-2GL2VNJU.cjs} +253 -33
- package/dist/{chunk-LCWMRCLF.cjs → chunk-2PYOI7OY.cjs} +21 -21
- package/dist/{chunk-JFWJAEBD.cjs → chunk-3U4MCSKI.cjs} +4 -4
- package/dist/{chunk-CUPLHZRR.cjs → chunk-3ZMM3FSK.cjs} +4 -4
- package/dist/{chunk-L2AV62DP.cjs → chunk-4767WQJ7.cjs} +6 -6
- package/dist/{chunk-DA2EYIIP.cjs → chunk-4E7FSSBF.cjs} +1210 -168
- package/dist/{chunk-VS5LQEZB.cjs → chunk-526STI2S.cjs} +5 -5
- package/dist/{chunk-RXIMEK6C.cjs → chunk-55767YPI.cjs} +20 -20
- package/dist/{chunk-JXLSKIUV.cjs → chunk-5FBQOMMT.cjs} +26 -26
- package/dist/{chunk-27PZV5BR.cjs → chunk-5N4Z7MTS.cjs} +4 -4
- package/dist/{chunk-KEWCUIQA.cjs → chunk-5WEV6YWA.cjs} +22 -22
- package/dist/chunk-5XOVVC5X.cjs +3281 -0
- package/dist/{chunk-HK5J7Q2W.cjs → chunk-6HLXVWXU.cjs} +9 -9
- package/dist/{chunk-7JG47RW4.cjs → chunk-6LQT4WJ5.cjs} +25 -25
- package/dist/{chunk-OCVTI6X4.cjs → chunk-6YTWOUFD.cjs} +329 -36
- package/dist/{chunk-W7IQCAVN.cjs → chunk-7F6W6HKL.cjs} +11 -11
- package/dist/{chunk-F2DCJXDM.cjs → chunk-7L6KYU5A.cjs} +21 -21
- package/dist/{chunk-GTGR6LPR.cjs → chunk-A4GIN4FE.cjs} +17 -17
- package/dist/{chunk-B2CETSR6.cjs → chunk-A4US7SA7.cjs} +5 -5
- package/dist/{chunk-3DIF2YYW.cjs → chunk-AOXPBLPW.cjs} +10 -10
- package/dist/{chunk-7TTR4UF5.cjs → chunk-ATI45Z4M.cjs} +2 -2
- package/dist/{chunk-5BFCIX2V.cjs → chunk-CPPMO4IQ.cjs} +434 -148
- package/dist/{chunk-AYZZQ6AC.cjs → chunk-CZ5KGF6Q.cjs} +9 -9
- package/dist/{chunk-7THJ3ZBK.cjs → chunk-D4I35MCE.cjs} +2 -2
- package/dist/{chunk-MCPPFRLN.cjs → chunk-DCGAAN3Z.cjs} +2 -2
- package/dist/{chunk-VABL6CVX.cjs → chunk-DEY36N37.cjs} +21 -21
- package/dist/{chunk-RNCKGJCC.cjs → chunk-DXHXD3DK.cjs} +3 -3
- package/dist/{chunk-A56ZGMVZ.cjs → chunk-E7B45DBZ.cjs} +11 -11
- package/dist/{chunk-DOR6L4MT.cjs → chunk-EJC6EAC5.cjs} +18 -18
- package/dist/{chunk-UPGNM7MA.cjs → chunk-EULJOOMA.cjs} +11 -11
- package/dist/{chunk-G4AZL4GO.cjs → chunk-EYM6LEIF.cjs} +474 -70
- package/dist/{chunk-NJ4X6XGV.cjs → chunk-EZTYX2GH.cjs} +5 -5
- package/dist/chunk-FDD4UP73.cjs +521 -0
- package/dist/{chunk-WJ3VH2Q4.cjs → chunk-GEAIGM3J.cjs} +110 -615
- package/dist/{chunk-P3SBHF43.cjs → chunk-GRUYVXTS.cjs} +2 -2
- package/dist/{chunk-NX4Z5LMS.cjs → chunk-H3SZXND5.cjs} +5 -5
- package/dist/{chunk-EE4S4TOE.cjs → chunk-HS45TOFJ.cjs} +21 -21
- package/dist/chunk-INGOG6OV.cjs +899 -0
- package/dist/{chunk-UDKA6DGT.cjs → chunk-J3CDXZHF.cjs} +4 -4
- package/dist/{chunk-YO6G7TKI.cjs → chunk-JAU5ADEU.cjs} +11 -11
- package/dist/{chunk-22LBK4GA.cjs → chunk-JQEBSHX3.cjs} +4 -4
- package/dist/{chunk-RXX3U7VQ.cjs → chunk-KLXGLMFU.cjs} +10 -10
- package/dist/chunk-KVOX36J3.cjs +327 -0
- package/dist/chunk-L6BGNHFL.cjs +139 -0
- package/dist/{chunk-GMER35L3.cjs → chunk-L7TB7PU5.cjs} +20 -20
- package/dist/{chunk-AFXYNBL2.cjs → chunk-LBTRYEM2.cjs} +4 -4
- package/dist/{chunk-WYYCKIOD.cjs → chunk-LLULNJSP.cjs} +11 -11
- package/dist/{chunk-J27XOSLP.cjs → chunk-LSO46AFV.cjs} +8 -8
- package/dist/{chunk-5XJO45ES.cjs → chunk-LZ2KJ7ZX.cjs} +11 -11
- package/dist/chunk-M4IQ5LIZ.cjs +422 -0
- package/dist/{chunk-Y2KIUKJF.cjs → chunk-MPDHDKYZ.cjs} +11 -11
- package/dist/{chunk-4EMPKRZU.cjs → chunk-MRQ42ZJE.cjs} +3 -3
- package/dist/{chunk-EU5D2MF4.cjs → chunk-MYV4KZWP.cjs} +9 -9
- package/dist/{chunk-XD7KN4UN.cjs → chunk-MZXVLC24.cjs} +6 -6
- package/dist/{chunk-PPSONARU.cjs → chunk-NLBVDFIR.cjs} +41 -2
- package/dist/{chunk-L3PEGMGM.cjs → chunk-NY3TBZY4.cjs} +33 -33
- package/dist/{chunk-6YNYXXB6.cjs → chunk-OGVVSFAR.cjs} +3 -3
- package/dist/{chunk-MLV7QLB6.cjs → chunk-OMTQIQMN.cjs} +6 -6
- package/dist/{chunk-BEEOSNK7.cjs → chunk-PEJJ6TXJ.cjs} +15 -144
- package/dist/{chunk-SOKOWUF5.cjs → chunk-PPGWHIU7.cjs} +2 -2
- package/dist/{chunk-IELWOM2J.cjs → chunk-PPO6SDAN.cjs} +6 -6
- package/dist/{chunk-6JTZZCSL.cjs → chunk-PUMKX5F2.cjs} +3 -3
- package/dist/{chunk-RFOXFY2U.cjs → chunk-PXBYWCNB.cjs} +190 -799
- package/dist/{chunk-3BYXOISI.cjs → chunk-Q3HB3IX6.cjs} +4 -4
- package/dist/{chunk-RXCOVONX.cjs → chunk-RBMUOIXE.cjs} +289 -34
- package/dist/{chunk-MSBNHCSE.cjs → chunk-RJHGCUUD.cjs} +6 -6
- package/dist/{chunk-I6VG7F6Z.cjs → chunk-RSONDMYW.cjs} +708 -141
- package/dist/{chunk-GZDNPHMT.cjs → chunk-SHMPFCUE.cjs} +19 -19
- package/dist/{chunk-ZIBVCOW6.cjs → chunk-SN4FCXFC.cjs} +19 -19
- package/dist/{chunk-7KM52NMN.cjs → chunk-SN5T7WYO.cjs} +2 -2
- package/dist/{chunk-7MSZR65Z.cjs → chunk-SQJZGVDR.cjs} +7 -7
- package/dist/chunk-SYABFMD7.cjs +633 -0
- package/dist/{chunk-2RRFEYFH.cjs → chunk-TICB3MAC.cjs} +16 -16
- package/dist/{chunk-AOOKHUV5.cjs → chunk-U7Z7XYR2.cjs} +5 -5
- package/dist/{chunk-JEWQAXVG.cjs → chunk-UA2THQFV.cjs} +6 -6
- package/dist/{chunk-LHZPAHU3.cjs → chunk-VIK4L2YF.cjs} +112 -521
- package/dist/{chunk-4YWMAQ4J.cjs → chunk-VM2Y6BDY.cjs} +4 -4
- package/dist/{chunk-IRRKE2ZE.cjs → chunk-VMS3KWYI.cjs} +21 -21
- package/dist/{chunk-4SLARW6F.cjs → chunk-VU5NUD46.cjs} +17 -17
- package/dist/{chunk-XHY6TVYG.cjs → chunk-VV5CVOF7.cjs} +13 -13
- package/dist/{chunk-CCIBPGPZ.cjs → chunk-VYSAWPSS.cjs} +57 -57
- package/dist/{chunk-TTNEMQ2A.cjs → chunk-W7YRWEWQ.cjs} +22 -22
- package/dist/{chunk-C7MUOGEW.cjs → chunk-X7R5SY62.cjs} +6 -6
- package/dist/{chunk-ILR5KBMB.cjs → chunk-XOK3KTSS.cjs} +6 -6
- package/dist/{chunk-2CZM2I3T.cjs → chunk-XUIX45VU.cjs} +19 -19
- package/dist/{chunk-TGRMPS3A.cjs → chunk-XWH46PVJ.cjs} +165 -43
- package/dist/{chunk-WQYXXECR.cjs → chunk-Y5XVMK3K.cjs} +6 -6
- package/dist/{chunk-AK4TX2WG.cjs → chunk-YCNKEDTG.cjs} +13 -13
- package/dist/{chunk-PJJB24DU.cjs → chunk-YEF7SE3X.cjs} +20 -20
- package/dist/{chunk-RVLV4XW6.cjs → chunk-YMTVPMU3.cjs} +22 -22
- package/dist/data/index.cjs +2 -2
- package/dist/entries/autograph-lazy.cjs +2 -2
- package/dist/entries/charts/acoustictransport.cjs +3 -3
- package/dist/entries/charts/analysischarts.cjs +3 -3
- package/dist/entries/charts/astrocharts.cjs +3 -3
- package/dist/entries/charts/bars.cjs +3 -3
- package/dist/entries/charts/bayesiancharts.cjs +3 -3
- package/dist/entries/charts/biocharts.cjs +3 -3
- package/dist/entries/charts/biologycharts.cjs +11 -3
- package/dist/entries/charts/biologycharts.d.ts +1 -1
- package/dist/entries/charts/biologycharts.js +3 -2
- package/dist/entries/charts/business.cjs +3 -3
- package/dist/entries/charts/carecharts.cjs +3 -3
- package/dist/entries/charts/chemistrycharts.cjs +3 -3
- package/dist/entries/charts/civicscharts.cjs +3 -3
- package/dist/entries/charts/clinicalcharts.cjs +3 -3
- package/dist/entries/charts/comparison.cjs +3 -3
- package/dist/entries/charts/demography.cjs +3 -3
- package/dist/entries/charts/density.cjs +3 -3
- package/dist/entries/charts/diagrams.cjs +3 -3
- package/dist/entries/charts/distribution.cjs +3 -3
- package/dist/entries/charts/doecharts.cjs +13 -3
- package/dist/entries/charts/doecharts.d.ts +1 -1
- package/dist/entries/charts/doecharts.js +2 -1
- package/dist/entries/charts/earthscience.cjs +3 -3
- package/dist/entries/charts/economicscharts.cjs +3 -3
- package/dist/entries/charts/energycharts.cjs +3 -3
- package/dist/entries/charts/engineering.cjs +3 -3
- package/dist/entries/charts/fieldcharts.cjs +7 -3
- package/dist/entries/charts/fieldcharts.d.ts +1 -1
- package/dist/entries/charts/fieldcharts.js +3 -2
- package/dist/entries/charts/financial.cjs +3 -3
- package/dist/entries/charts/flow.cjs +3 -3
- package/dist/entries/charts/frameworks.cjs +3 -3
- package/dist/entries/charts/genomics.cjs +3 -3
- package/dist/entries/charts/geoflows.cjs +3 -3
- package/dist/entries/charts/geomaps.cjs +3 -3
- package/dist/entries/charts/geosciencecharts.cjs +3 -3
- package/dist/entries/charts/hierarchy.cjs +3 -3
- package/dist/entries/charts/indicators.cjs +3 -3
- package/dist/entries/charts/inferencecharts.cjs +3 -3
- package/dist/entries/charts/layoutcharts.cjs +3 -3
- package/dist/entries/charts/lifescience.cjs +4 -4
- package/dist/entries/charts/linesareas.cjs +3 -3
- package/dist/entries/charts/logisticscharts.cjs +3 -3
- package/dist/entries/charts/machinecharts.cjs +7 -3
- package/dist/entries/charts/machinecharts.d.ts +1 -1
- package/dist/entries/charts/machinecharts.js +2 -1
- package/dist/entries/charts/massive.cjs +3 -3
- package/dist/entries/charts/mathematical.cjs +3 -3
- package/dist/entries/charts/matrix.cjs +3 -3
- package/dist/entries/charts/medicalcharts.cjs +4 -4
- package/dist/entries/charts/mlcharts.cjs +4 -4
- package/dist/entries/charts/modelcharts.cjs +6 -5
- package/dist/entries/charts/multivariate.cjs +3 -3
- package/dist/entries/charts/musiccharts.cjs +3 -3
- package/dist/entries/charts/network.cjs +3 -3
- package/dist/entries/charts/physicscharts.cjs +3 -3
- package/dist/entries/charts/pictorial.cjs +4 -4
- package/dist/entries/charts/portfoliocharts.cjs +3 -3
- package/dist/entries/charts/productcharts.cjs +3 -3
- package/dist/entries/charts/proportion.cjs +3 -3
- package/dist/entries/charts/qualitycharts.cjs +3 -3
- package/dist/entries/charts/radial.cjs +3 -3
- package/dist/entries/charts/reliabilitycharts.cjs +5 -3
- package/dist/entries/charts/scatter.cjs +3 -3
- package/dist/entries/charts/scientific.cjs +3 -3
- package/dist/entries/charts/seriescharts.cjs +3 -3
- package/dist/entries/charts/signals.cjs +7 -3
- package/dist/entries/charts/signals.d.ts +1 -1
- package/dist/entries/charts/signals.js +2 -1
- package/dist/entries/charts/softwarediagrams.cjs +21 -3
- package/dist/entries/charts/softwarediagrams.d.ts +1 -1
- package/dist/entries/charts/softwarediagrams.js +4 -2
- package/dist/entries/charts/sportscharts.cjs +13 -3
- package/dist/entries/charts/sportscharts.d.ts +1 -1
- package/dist/entries/charts/sportscharts.js +3 -1
- package/dist/entries/charts/statistics.cjs +6 -6
- package/dist/entries/charts/strategycharts.cjs +30 -3
- package/dist/entries/charts/strategycharts.d.ts +1 -1
- package/dist/entries/charts/strategycharts.js +6 -1
- package/dist/entries/charts/structure.cjs +3 -3
- package/dist/entries/charts/surveycharts.cjs +3 -3
- package/dist/entries/charts/systemscharts.cjs +3 -3
- package/dist/entries/charts/textcharts.cjs +5 -5
- package/dist/entries/charts/thematicmaps.cjs +4 -4
- package/dist/entries/charts/threebars.cjs +3 -3
- package/dist/entries/charts/threefields.cjs +53 -0
- package/dist/entries/charts/threefields.d.ts +1 -0
- package/dist/entries/charts/threefields.js +6 -0
- package/dist/entries/charts/threeglobe.cjs +3 -3
- package/dist/entries/charts/threenetwork.cjs +3 -3
- package/dist/entries/charts/threestrata.cjs +3 -3
- package/dist/entries/charts/threesurfaces.cjs +7 -3
- package/dist/entries/charts/threesurfaces.d.ts +1 -1
- package/dist/entries/charts/threesurfaces.js +2 -1
- package/dist/entries/charts/threevolume.cjs +4 -4
- package/dist/entries/charts/timeline.cjs +3 -3
- package/dist/entries/charts/tracecharts.cjs +3 -3
- package/dist/entries/charts/trackscharts.cjs +3 -3
- package/dist/entries/charts/tradingcharts.cjs +6 -4
- package/dist/entries/charts/tradingcharts.d.ts +1 -1
- package/dist/entries/charts/tradingcharts.js +2 -1
- package/dist/entries/three.cjs +60 -20
- package/dist/entries/three.d.ts +1 -1
- package/dist/entries/three.js +7 -1
- package/dist/index.cjs +258 -97
- package/dist/index.d.cts +1953 -10
- package/dist/index.d.ts +1953 -10
- package/dist/index.js +26 -5
- package/dist/page/index.cjs +2 -2
- package/dist/react/components.js +58 -1
- package/dist/react/index.cjs +135 -92
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.js +2 -2
- package/package.json +1 -1
- package/dist/AutoGraph-XLBJQDRB.cjs +0 -140
- package/dist/catalog-O7XGDD2H.cjs +0 -137
- package/dist/chunk-77K2HTRC.cjs +0 -3220
- package/dist/chunk-XEK47TVD.cjs +0 -323
- /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
|
|
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
|
|
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
|
-
|
|
164
|
+
area4 += cross;
|
|
159
165
|
cx += (x + nx) * cross;
|
|
160
166
|
cy += (y + ny) * cross;
|
|
161
167
|
});
|
|
162
|
-
if (Math.abs(
|
|
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 *
|
|
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 } =
|
|
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
|
|
382
|
-
ctx.set(
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 } =
|
|
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 = (
|
|
1253
|
-
static
|
|
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 } =
|
|
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
|
-
},
|
|
1561
|
+
}, _class8.__initStatic8(), _class8);
|
|
1345
1562
|
|
|
1346
1563
|
// src/charts/fieldcharts/FieldDiagram.ts
|
|
1347
1564
|
|
|
1348
|
-
var FieldDiagram = (
|
|
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',
|
|
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',
|
|
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',
|
|
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
|
-
},
|
|
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 = (
|
|
1423
|
-
static
|
|
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) =>
|
|
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
|
-
},
|
|
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 = (
|
|
1482
|
-
static
|
|
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) =>
|
|
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
|
-
},
|
|
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
|
-
|
|
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;
|