semiotic 3.1.2 → 3.2.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 (82) hide show
  1. package/CLAUDE.md +134 -216
  2. package/LICENSE +197 -10
  3. package/README.md +1 -0
  4. package/ai/dist/componentRegistry.js +6 -0
  5. package/ai/dist/mcp-server.js +115 -5
  6. package/ai/examples.md +93 -0
  7. package/ai/schema.json +3916 -878
  8. package/ai/system-prompt.md +27 -0
  9. package/dist/components/ThemeProvider.d.ts +5 -3
  10. package/dist/components/charts/geo/ChoroplethMap.d.ts +1 -1
  11. package/dist/components/charts/index.d.ts +8 -1
  12. package/dist/components/charts/ordinal/BarChart.d.ts +1 -0
  13. package/dist/components/charts/ordinal/BoxPlot.d.ts +1 -0
  14. package/dist/components/charts/ordinal/DonutChart.d.ts +1 -0
  15. package/dist/components/charts/ordinal/DotPlot.d.ts +1 -0
  16. package/dist/components/charts/ordinal/FunnelChart.d.ts +55 -0
  17. package/dist/components/charts/ordinal/GroupedBarChart.d.ts +1 -0
  18. package/dist/components/charts/ordinal/Histogram.d.ts +1 -0
  19. package/dist/components/charts/ordinal/PieChart.d.ts +1 -0
  20. package/dist/components/charts/ordinal/RidgelinePlot.d.ts +1 -0
  21. package/dist/components/charts/ordinal/StackedBarChart.d.ts +1 -0
  22. package/dist/components/charts/ordinal/SwarmPlot.d.ts +1 -0
  23. package/dist/components/charts/ordinal/ViolinPlot.d.ts +1 -0
  24. package/dist/components/charts/shared/colorManipulation.d.ts +15 -0
  25. package/dist/components/charts/shared/formatUtils.d.ts +28 -0
  26. package/dist/components/charts/shared/hatchPattern.d.ts +35 -0
  27. package/dist/components/charts/shared/hooks.d.ts +16 -1
  28. package/dist/components/charts/shared/legendUtils.d.ts +2 -1
  29. package/dist/components/charts/shared/selectionUtils.d.ts +11 -0
  30. package/dist/components/charts/shared/statisticalOverlays.d.ts +49 -5
  31. package/dist/components/charts/shared/types.d.ts +4 -1
  32. package/dist/components/charts/xy/Heatmap.d.ts +1 -1
  33. package/dist/components/charts/xy/MultiAxisLineChart.d.ts +71 -0
  34. package/dist/components/realtime/types.d.ts +2 -0
  35. package/dist/components/semiotic-ai.d.ts +3 -0
  36. package/dist/components/semiotic-ordinal.d.ts +3 -0
  37. package/dist/components/semiotic-themes.d.ts +64 -0
  38. package/dist/components/semiotic-xy.d.ts +1 -0
  39. package/dist/components/semiotic.d.ts +11 -5
  40. package/dist/components/store/ThemeStore.d.ts +22 -2
  41. package/dist/components/stream/OrdinalSVGOverlay.d.ts +1 -0
  42. package/dist/components/stream/PipelineStore.d.ts +2 -0
  43. package/dist/components/stream/SVGOverlay.d.ts +5 -3
  44. package/dist/components/stream/accessorUtils.d.ts +14 -0
  45. package/dist/components/stream/networkTypes.d.ts +2 -0
  46. package/dist/components/stream/ordinalSceneBuilders/barFunnelScene.d.ts +27 -0
  47. package/dist/components/stream/ordinalSceneBuilders/funnelScene.d.ts +26 -0
  48. package/dist/components/stream/ordinalTypes.d.ts +16 -2
  49. package/dist/components/stream/renderers/barFunnelCanvasRenderer.d.ts +12 -0
  50. package/dist/components/stream/renderers/trapezoidCanvasRenderer.d.ts +15 -0
  51. package/dist/components/stream/sceneUtils.d.ts +10 -0
  52. package/dist/components/stream/types.d.ts +10 -3
  53. package/dist/geo.min.js +1 -1
  54. package/dist/geo.module.min.js +1 -1
  55. package/dist/network.min.js +1 -1
  56. package/dist/network.module.min.js +1 -1
  57. package/dist/ordinal.min.js +1 -1
  58. package/dist/ordinal.module.min.js +1 -1
  59. package/dist/realtime.min.js +1 -1
  60. package/dist/realtime.module.min.js +1 -1
  61. package/dist/semiotic-ai-statisticalOverlays-C2PPlmXv.js +1 -0
  62. package/dist/semiotic-ai.d.ts +3 -0
  63. package/dist/semiotic-ai.min.js +1 -1
  64. package/dist/semiotic-ai.module.min.js +1 -1
  65. package/dist/semiotic-ordinal.d.ts +3 -0
  66. package/dist/semiotic-statisticalOverlays-D8LhSbQt.js +1 -0
  67. package/dist/semiotic-themes.d.ts +64 -0
  68. package/dist/semiotic-themes.min.js +1 -0
  69. package/dist/semiotic-themes.module.min.js +1 -0
  70. package/dist/semiotic-xy.d.ts +1 -0
  71. package/dist/semiotic.d.ts +11 -5
  72. package/dist/semiotic.min.js +1 -1
  73. package/dist/semiotic.module.min.js +1 -1
  74. package/dist/server.min.js +1 -1
  75. package/dist/server.module.min.js +1 -1
  76. package/dist/xy-statisticalOverlays-C2PPlmXv.js +1 -0
  77. package/dist/xy.min.js +1 -1
  78. package/dist/xy.module.min.js +1 -1
  79. package/package.json +24 -5
  80. package/dist/semiotic-ai-statisticalOverlays-C1f7TYyD.js +0 -1
  81. package/dist/semiotic-statisticalOverlays-C1f7TYyD.js +0 -1
  82. package/dist/xy-statisticalOverlays-C1f7TYyD.js +0 -1
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "semiotic",
3
- "version": "3.1.2",
3
+ "version": "3.2.0",
4
+ "mcpName": "io.github.nteract/semiotic",
4
5
  "description": "React data visualization library with built-in MCP server for AI-assisted chart generation",
5
6
  "main": "dist/semiotic.min.js",
6
7
  "module": "dist/semiotic.module.min.js",
@@ -65,6 +66,12 @@
65
66
  "require": "./dist/geo.min.js",
66
67
  "default": "./dist/geo.module.min.js"
67
68
  },
69
+ "./themes": {
70
+ "types": "./dist/semiotic-themes.d.ts",
71
+ "import": "./dist/semiotic-themes.module.min.js",
72
+ "require": "./dist/semiotic-themes.min.js",
73
+ "default": "./dist/semiotic-themes.module.min.js"
74
+ },
68
75
  "./package.json": "./package.json"
69
76
  },
70
77
  "files": [
@@ -102,13 +109,13 @@
102
109
  "clean": "rm -rf .parcel-cache docs/build dist && echo 'All caches and build artifacts cleared'",
103
110
  "website:clean": "npm run clean && npm run dist:prod",
104
111
  "docs:dev": "parcel serve --target website --no-cache --port 3000",
105
- "website:start": "npm run dist:prod && parcel serve --target website --no-cache",
112
+ "website:start": "npm run dist:prod && npm run docs:api:json && parcel serve --target website --no-cache",
106
113
  "website:start:clean": "npm run clean && npm run dist:prod && parcel serve --target website --no-cache",
107
114
  "generate:ssr-gallery": "npx tsx scripts/ssr-gallery.tsx > docs/public/ssr-gallery.html 2>/dev/null",
108
- "website:build": "npm run dist:prod && npm run generate:ssr-gallery && parcel build --target website && node scripts/prerender.mjs",
115
+ "website:build": "npm run dist:prod && npm run docs:api:json && npm run generate:ssr-gallery && parcel build --target website && node scripts/prerender.mjs",
109
116
  "build:mcp": "tsc -p tsconfig.mcp.json",
110
117
  "docs:api": "typedoc",
111
- "docs:api:json": "typedoc --json docs/build/api/api.json",
118
+ "docs:api:json": "typedoc --json docs/public/api/api.json",
112
119
  "typescript": "tsc --noEmit",
113
120
  "size": "size-limit",
114
121
  "check:schema": "node scripts/check-schema-freshness.js",
@@ -154,7 +161,13 @@
154
161
  "streaming",
155
162
  "network-graph",
156
163
  "ai",
157
- "llm"
164
+ "llm",
165
+ "claude",
166
+ "copilot",
167
+ "geographic",
168
+ "choropleth",
169
+ "sankey",
170
+ "force-directed"
158
171
  ],
159
172
  "license": "Apache-2.0",
160
173
  "size-limit": [
@@ -241,6 +254,9 @@
241
254
  "react": "^18.1.0 || ^19.0.0",
242
255
  "react-dom": "^18.1.0 || ^19.0.0"
243
256
  },
257
+ "optionalDependencies": {
258
+ "sharp": ">=0.33.0"
259
+ },
244
260
  "dependencies": {
245
261
  "@modelcontextprotocol/sdk": "^1.12.1",
246
262
  "@types/d3-quadtree": "^3.0.6",
@@ -274,5 +290,8 @@
274
290
  },
275
291
  "volta": {
276
292
  "node": "22.22.1"
293
+ },
294
+ "overrides": {
295
+ "flatted": "3.4.2"
277
296
  }
278
297
  }
@@ -1 +0,0 @@
1
- const o="__forecastSegment";function n(o,n){return"function"==typeof n?n(o):!!o[n]}function a(o){var n,a,t;return[{type:"anomaly-band",threshold:null!==(n=o.threshold)&&void 0!==n?n:2,showBand:!1!==o.showBand,fill:o.bandColor||"#6366f1",fillOpacity:null!==(a=o.bandOpacity)&&void 0!==a?a:.1,anomalyColor:o.anomalyColor||"#ef4444",anomalyRadius:null!==(t=o.anomalyRadius)&&void 0!==t?t:6,label:o.label}]}function t(a,t,e,s,l){return(r=s).isTraining||r.isForecast||r.isAnomaly||r.upperBounds||r.lowerBounds?function(a,t,e,s,l){var r,i,c;const{isTraining:u,isForecast:f,isAnomaly:p,upperBounds:h,lowerBounds:d,color:y="#6366f1",bandOpacity:b=.15,anomalyColor:g="#ef4444",anomalyRadius:O=6,label:m}=s,v=a.map(a=>{let t="observed";return f&&n(a,f)?t="forecast":u&&n(a,u)&&(t="training"),Object.assign(Object.assign({},a),{[o]:t})}),j=[];for(let n=0;v.length>n;n++)j.push(v[n]),v.length-1>n&&v[n][o]!==v[n+1][o]&&j.push(Object.assign(Object.assign({},v[n]),{[o]:v[n+1][o]}));const w=[];if(h&&d){const o="string"==typeof h?h:"__envUpper",n="string"==typeof d?d:"__envLower";if("function"==typeof h||"function"==typeof d)for(const a of j)"function"==typeof h&&(a[o]=h(a)),"function"==typeof d&&(a[n]=d(a));w.push({type:"envelope",upperAccessor:o,lowerAccessor:n,fill:y,fillOpacity:b,label:m})}return p&&w.push({type:"highlight",filter:o=>n(o,p),color:g,r:O,style:{stroke:g,strokeWidth:1.5,fill:g,fillOpacity:.7}}),l&&w.push({type:"anomaly-band",threshold:null!==(r=l.threshold)&&void 0!==r?r:2,showBand:!1!==l.showBand,fill:l.bandColor||"#6366f1",fillOpacity:null!==(i=l.bandOpacity)&&void 0!==i?i:.1,anomalyColor:l.anomalyColor||"#ef4444",anomalyRadius:null!==(c=l.anomalyRadius)&&void 0!==c?c:6,label:l.label}),{processedData:j,annotations:w}}(a,0,0,s,l):function(n,a,t,e,s){var l,r,i;const{trainEnd:c,steps:u=10,confidence:f=.95,color:p="#6366f1",bandOpacity:h=.15,label:d}=e;if(null==c)return{processedData:n,annotations:[]};const y=[],b=[];for(const t of n)t[a]>c?b.push(Object.assign(Object.assign({},t),{[o]:"observed"})):y.push(Object.assign(Object.assign({},t),{[o]:"training"}));const g=y.map(o=>[o[a],o[t]]).filter(o=>null!=o[0]&&null!=o[1]&&isFinite(o[0])&&isFinite(o[1])).sort((o,n)=>o[0]-n[0]),O=[],m=[];if(g.length>=3){const e=g.length;let s=0,l=0,r=0,i=0;for(const[o,n]of g)s+=o,l+=n,r+=o*o,i+=o*n;const c=e*r-s*s;if(Math.abs(c)>1e-12){const r=(e*i-s*l)/c,y=(l-r*s)/e,b=o=>y+r*o,v=g.map(([o,n])=>n-b(o)).reduce((o,n)=>o+n*n,0),j=Math.sqrt(v/Math.max(e-2,1)),w=g.reduce((o,n)=>o+n[0],0)/e,_=g.reduce((o,n)=>o+Math.pow(n[0]-w,2),0),B=.99>f?.95>f?.9>f?1:1.645:1.96:2.576,C=n.map(o=>o[a]).filter(o=>null!=o&&isFinite(o)),D=Math.max(...C),k=g.length>1?(g[e-1][0]-g[0][0])/(e-1):1;for(let n=1;u>=n;n++){const s=D+n*k,l=b(s),r=j*Math.sqrt(1+1/e+(_>0?Math.pow(s-w,2)/_:0))*B;m.push({[a]:s,[t]:l,[o]:"forecast",__forecastUpper:l+r,__forecastLower:l-r})}O.push({type:"envelope",upperAccessor:"__forecastUpper",lowerAccessor:"__forecastLower",fill:p,fillOpacity:h,label:d})}}O.push({type:"x-threshold",x:c,color:"#94a3b8",strokeWidth:1,strokeDasharray:"4,2",label:"Train / Forecast"}),s&&O.push({type:"anomaly-band",threshold:null!==(l=s.threshold)&&void 0!==l?l:2,showBand:!1!==s.showBand,fill:s.bandColor||"#6366f1",fillOpacity:null!==(r=s.bandOpacity)&&void 0!==r?r:.1,anomalyColor:s.anomalyColor||"#ef4444",anomalyRadius:null!==(i=s.anomalyRadius)&&void 0!==i?i:6,label:s.label});const v=[];if(v.push(...y),y.length>0&&b.length>0&&v.push(Object.assign(Object.assign({},y[y.length-1]),{[o]:"observed"})),v.push(...b),m.length>0){const n=b.length>0?b[b.length-1]:y[y.length-1];n&&v.push(Object.assign(Object.assign({},n),{[o]:"forecast"})),v.push(...m)}return{processedData:v,annotations:O}}(a,t,e,s,l);var r}function e(n,a){var t,e;const s=null!==(t=a.trainDasharray)&&void 0!==t?t:"8,4",l=null!==(e=a.forecastDasharray)&&void 0!==e?e:"4,4",r=a.color||"#6366f1";return a=>{const t=n(a),e=a[o];return"training"===e?Object.assign(Object.assign({},t),{strokeDasharray:s}):"forecast"===e?Object.assign(Object.assign({},t),{stroke:r,strokeDasharray:l}):t}}export{o as SEGMENT_FIELD,a as buildAnomalyAnnotations,t as buildForecast,e as createSegmentLineStyle};
@@ -1 +0,0 @@
1
- const o="__forecastSegment";function n(o,n){return"function"==typeof n?n(o):!!o[n]}function a(o){var n,a,t;return[{type:"anomaly-band",threshold:null!==(n=o.threshold)&&void 0!==n?n:2,showBand:!1!==o.showBand,fill:o.bandColor||"#6366f1",fillOpacity:null!==(a=o.bandOpacity)&&void 0!==a?a:.1,anomalyColor:o.anomalyColor||"#ef4444",anomalyRadius:null!==(t=o.anomalyRadius)&&void 0!==t?t:6,label:o.label}]}function t(a,t,e,s,l){return(r=s).isTraining||r.isForecast||r.isAnomaly||r.upperBounds||r.lowerBounds?function(a,t,e,s,l){var r,i,c;const{isTraining:u,isForecast:f,isAnomaly:p,upperBounds:h,lowerBounds:d,color:y="#6366f1",bandOpacity:b=.15,anomalyColor:g="#ef4444",anomalyRadius:O=6,label:m}=s,v=a.map(a=>{let t="observed";return f&&n(a,f)?t="forecast":u&&n(a,u)&&(t="training"),Object.assign(Object.assign({},a),{[o]:t})}),j=[];for(let n=0;v.length>n;n++)j.push(v[n]),v.length-1>n&&v[n][o]!==v[n+1][o]&&j.push(Object.assign(Object.assign({},v[n]),{[o]:v[n+1][o]}));const w=[];if(h&&d){const o="string"==typeof h?h:"__envUpper",n="string"==typeof d?d:"__envLower";if("function"==typeof h||"function"==typeof d)for(const a of j)"function"==typeof h&&(a[o]=h(a)),"function"==typeof d&&(a[n]=d(a));w.push({type:"envelope",upperAccessor:o,lowerAccessor:n,fill:y,fillOpacity:b,label:m})}return p&&w.push({type:"highlight",filter:o=>n(o,p),color:g,r:O,style:{stroke:g,strokeWidth:1.5,fill:g,fillOpacity:.7}}),l&&w.push({type:"anomaly-band",threshold:null!==(r=l.threshold)&&void 0!==r?r:2,showBand:!1!==l.showBand,fill:l.bandColor||"#6366f1",fillOpacity:null!==(i=l.bandOpacity)&&void 0!==i?i:.1,anomalyColor:l.anomalyColor||"#ef4444",anomalyRadius:null!==(c=l.anomalyRadius)&&void 0!==c?c:6,label:l.label}),{processedData:j,annotations:w}}(a,0,0,s,l):function(n,a,t,e,s){var l,r,i;const{trainEnd:c,steps:u=10,confidence:f=.95,color:p="#6366f1",bandOpacity:h=.15,label:d}=e;if(null==c)return{processedData:n,annotations:[]};const y=[],b=[];for(const t of n)t[a]>c?b.push(Object.assign(Object.assign({},t),{[o]:"observed"})):y.push(Object.assign(Object.assign({},t),{[o]:"training"}));const g=y.map(o=>[o[a],o[t]]).filter(o=>null!=o[0]&&null!=o[1]&&isFinite(o[0])&&isFinite(o[1])).sort((o,n)=>o[0]-n[0]),O=[],m=[];if(g.length>=3){const e=g.length;let s=0,l=0,r=0,i=0;for(const[o,n]of g)s+=o,l+=n,r+=o*o,i+=o*n;const c=e*r-s*s;if(Math.abs(c)>1e-12){const r=(e*i-s*l)/c,y=(l-r*s)/e,b=o=>y+r*o,v=g.map(([o,n])=>n-b(o)).reduce((o,n)=>o+n*n,0),j=Math.sqrt(v/Math.max(e-2,1)),w=g.reduce((o,n)=>o+n[0],0)/e,_=g.reduce((o,n)=>o+Math.pow(n[0]-w,2),0),B=.99>f?.95>f?.9>f?1:1.645:1.96:2.576,C=n.map(o=>o[a]).filter(o=>null!=o&&isFinite(o)),D=Math.max(...C),k=g.length>1?(g[e-1][0]-g[0][0])/(e-1):1;for(let n=1;u>=n;n++){const s=D+n*k,l=b(s),r=j*Math.sqrt(1+1/e+(_>0?Math.pow(s-w,2)/_:0))*B;m.push({[a]:s,[t]:l,[o]:"forecast",__forecastUpper:l+r,__forecastLower:l-r})}O.push({type:"envelope",upperAccessor:"__forecastUpper",lowerAccessor:"__forecastLower",fill:p,fillOpacity:h,label:d})}}O.push({type:"x-threshold",x:c,color:"#94a3b8",strokeWidth:1,strokeDasharray:"4,2",label:"Train / Forecast"}),s&&O.push({type:"anomaly-band",threshold:null!==(l=s.threshold)&&void 0!==l?l:2,showBand:!1!==s.showBand,fill:s.bandColor||"#6366f1",fillOpacity:null!==(r=s.bandOpacity)&&void 0!==r?r:.1,anomalyColor:s.anomalyColor||"#ef4444",anomalyRadius:null!==(i=s.anomalyRadius)&&void 0!==i?i:6,label:s.label});const v=[];if(v.push(...y),y.length>0&&b.length>0&&v.push(Object.assign(Object.assign({},y[y.length-1]),{[o]:"observed"})),v.push(...b),m.length>0){const n=b.length>0?b[b.length-1]:y[y.length-1];n&&v.push(Object.assign(Object.assign({},n),{[o]:"forecast"})),v.push(...m)}return{processedData:v,annotations:O}}(a,t,e,s,l);var r}function e(n,a){var t,e;const s=null!==(t=a.trainDasharray)&&void 0!==t?t:"8,4",l=null!==(e=a.forecastDasharray)&&void 0!==e?e:"4,4",r=a.color||"#6366f1";return a=>{const t=n(a),e=a[o];return"training"===e?Object.assign(Object.assign({},t),{strokeDasharray:s}):"forecast"===e?Object.assign(Object.assign({},t),{stroke:r,strokeDasharray:l}):t}}export{o as SEGMENT_FIELD,a as buildAnomalyAnnotations,t as buildForecast,e as createSegmentLineStyle};
@@ -1 +0,0 @@
1
- const o="__forecastSegment";function n(o,n){return"function"==typeof n?n(o):!!o[n]}function a(o){var n,a,t;return[{type:"anomaly-band",threshold:null!==(n=o.threshold)&&void 0!==n?n:2,showBand:!1!==o.showBand,fill:o.bandColor||"#6366f1",fillOpacity:null!==(a=o.bandOpacity)&&void 0!==a?a:.1,anomalyColor:o.anomalyColor||"#ef4444",anomalyRadius:null!==(t=o.anomalyRadius)&&void 0!==t?t:6,label:o.label}]}function t(a,t,e,s,l){return(r=s).isTraining||r.isForecast||r.isAnomaly||r.upperBounds||r.lowerBounds?function(a,t,e,s,l){var r,i,c;const{isTraining:u,isForecast:f,isAnomaly:p,upperBounds:h,lowerBounds:d,color:y="#6366f1",bandOpacity:b=.15,anomalyColor:g="#ef4444",anomalyRadius:O=6,label:m}=s,v=a.map(a=>{let t="observed";return f&&n(a,f)?t="forecast":u&&n(a,u)&&(t="training"),Object.assign(Object.assign({},a),{[o]:t})}),j=[];for(let n=0;v.length>n;n++)j.push(v[n]),v.length-1>n&&v[n][o]!==v[n+1][o]&&j.push(Object.assign(Object.assign({},v[n]),{[o]:v[n+1][o]}));const w=[];if(h&&d){const o="string"==typeof h?h:"__envUpper",n="string"==typeof d?d:"__envLower";if("function"==typeof h||"function"==typeof d)for(const a of j)"function"==typeof h&&(a[o]=h(a)),"function"==typeof d&&(a[n]=d(a));w.push({type:"envelope",upperAccessor:o,lowerAccessor:n,fill:y,fillOpacity:b,label:m})}return p&&w.push({type:"highlight",filter:o=>n(o,p),color:g,r:O,style:{stroke:g,strokeWidth:1.5,fill:g,fillOpacity:.7}}),l&&w.push({type:"anomaly-band",threshold:null!==(r=l.threshold)&&void 0!==r?r:2,showBand:!1!==l.showBand,fill:l.bandColor||"#6366f1",fillOpacity:null!==(i=l.bandOpacity)&&void 0!==i?i:.1,anomalyColor:l.anomalyColor||"#ef4444",anomalyRadius:null!==(c=l.anomalyRadius)&&void 0!==c?c:6,label:l.label}),{processedData:j,annotations:w}}(a,0,0,s,l):function(n,a,t,e,s){var l,r,i;const{trainEnd:c,steps:u=10,confidence:f=.95,color:p="#6366f1",bandOpacity:h=.15,label:d}=e;if(null==c)return{processedData:n,annotations:[]};const y=[],b=[];for(const t of n)t[a]>c?b.push(Object.assign(Object.assign({},t),{[o]:"observed"})):y.push(Object.assign(Object.assign({},t),{[o]:"training"}));const g=y.map(o=>[o[a],o[t]]).filter(o=>null!=o[0]&&null!=o[1]&&isFinite(o[0])&&isFinite(o[1])).sort((o,n)=>o[0]-n[0]),O=[],m=[];if(g.length>=3){const e=g.length;let s=0,l=0,r=0,i=0;for(const[o,n]of g)s+=o,l+=n,r+=o*o,i+=o*n;const c=e*r-s*s;if(Math.abs(c)>1e-12){const r=(e*i-s*l)/c,y=(l-r*s)/e,b=o=>y+r*o,v=g.map(([o,n])=>n-b(o)).reduce((o,n)=>o+n*n,0),j=Math.sqrt(v/Math.max(e-2,1)),w=g.reduce((o,n)=>o+n[0],0)/e,_=g.reduce((o,n)=>o+Math.pow(n[0]-w,2),0),B=.99>f?.95>f?.9>f?1:1.645:1.96:2.576,C=n.map(o=>o[a]).filter(o=>null!=o&&isFinite(o)),D=Math.max(...C),k=g.length>1?(g[e-1][0]-g[0][0])/(e-1):1;for(let n=1;u>=n;n++){const s=D+n*k,l=b(s),r=j*Math.sqrt(1+1/e+(_>0?Math.pow(s-w,2)/_:0))*B;m.push({[a]:s,[t]:l,[o]:"forecast",__forecastUpper:l+r,__forecastLower:l-r})}O.push({type:"envelope",upperAccessor:"__forecastUpper",lowerAccessor:"__forecastLower",fill:p,fillOpacity:h,label:d})}}O.push({type:"x-threshold",x:c,color:"#94a3b8",strokeWidth:1,strokeDasharray:"4,2",label:"Train / Forecast"}),s&&O.push({type:"anomaly-band",threshold:null!==(l=s.threshold)&&void 0!==l?l:2,showBand:!1!==s.showBand,fill:s.bandColor||"#6366f1",fillOpacity:null!==(r=s.bandOpacity)&&void 0!==r?r:.1,anomalyColor:s.anomalyColor||"#ef4444",anomalyRadius:null!==(i=s.anomalyRadius)&&void 0!==i?i:6,label:s.label});const v=[];if(v.push(...y),y.length>0&&b.length>0&&v.push(Object.assign(Object.assign({},y[y.length-1]),{[o]:"observed"})),v.push(...b),m.length>0){const n=b.length>0?b[b.length-1]:y[y.length-1];n&&v.push(Object.assign(Object.assign({},n),{[o]:"forecast"})),v.push(...m)}return{processedData:v,annotations:O}}(a,t,e,s,l);var r}function e(n,a){var t,e;const s=null!==(t=a.trainDasharray)&&void 0!==t?t:"8,4",l=null!==(e=a.forecastDasharray)&&void 0!==e?e:"4,4",r=a.color||"#6366f1";return a=>{const t=n(a),e=a[o];return"training"===e?Object.assign(Object.assign({},t),{strokeDasharray:s}):"forecast"===e?Object.assign(Object.assign({},t),{stroke:r,strokeDasharray:l}):t}}export{o as SEGMENT_FIELD,a as buildAnomalyAnnotations,t as buildForecast,e as createSegmentLineStyle};