gridsmith-ui 0.15.0 → 0.16.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 (51) hide show
  1. package/dist/charts.d.ts +20 -1
  2. package/dist/charts.js +64 -28
  3. package/dist/charts.js.map +1 -1
  4. package/dist/chat.js +3 -3
  5. package/dist/{chunk-ATONRIEB.js → chunk-2U2X6E2X.js} +36 -13
  6. package/dist/chunk-2U2X6E2X.js.map +1 -0
  7. package/dist/{chunk-X4CNZFWC.js → chunk-4LDYR7QP.js} +7 -7
  8. package/dist/chunk-4LDYR7QP.js.map +1 -0
  9. package/dist/{chunk-VFAKME7Q.js → chunk-5XOJZQIP.js} +106 -29
  10. package/dist/chunk-5XOJZQIP.js.map +1 -0
  11. package/dist/{chunk-XCSTU6IJ.js → chunk-PVTGMCVR.js} +3 -3
  12. package/dist/{chunk-XCSTU6IJ.js.map → chunk-PVTGMCVR.js.map} +1 -1
  13. package/dist/{chunk-LU3YRNES.js → chunk-XGSQOMEY.js} +4 -4
  14. package/dist/{chunk-LU3YRNES.js.map → chunk-XGSQOMEY.js.map} +1 -1
  15. package/dist/{chunk-M3AARGLI.js → chunk-Z63OSN64.js} +9 -8
  16. package/dist/chunk-Z63OSN64.js.map +1 -0
  17. package/dist/data-grid.js +1 -1
  18. package/dist/editor.js +11 -5
  19. package/dist/editor.js.map +1 -1
  20. package/dist/{feather-B65FI6CY.js → feather-2JFSFLXN.js} +3 -2
  21. package/dist/feather-2JFSFLXN.js.map +1 -0
  22. package/dist/{heroicons-DIR7PXCR.js → heroicons-4AQ4YBVG.js} +3 -2
  23. package/dist/heroicons-4AQ4YBVG.js.map +1 -0
  24. package/dist/icons.d.ts +1 -1
  25. package/dist/icons.js +1 -1
  26. package/dist/index.d.ts +68 -5
  27. package/dist/index.js +884 -471
  28. package/dist/index.js.map +1 -1
  29. package/dist/kanban.d.ts +11 -1
  30. package/dist/kanban.js +225 -113
  31. package/dist/kanban.js.map +1 -1
  32. package/dist/{lucide-JH2R3TFV.js → lucide-RZC2FEMS.js} +3 -2
  33. package/dist/lucide-RZC2FEMS.js.map +1 -0
  34. package/dist/{phosphor-HCVUMVT5.js → phosphor-CEN25FLM.js} +3 -2
  35. package/dist/phosphor-CEN25FLM.js.map +1 -0
  36. package/dist/resizable.d.ts +11 -1
  37. package/dist/resizable.js +79 -21
  38. package/dist/resizable.js.map +1 -1
  39. package/dist/roots.css +11 -8
  40. package/dist/{tabler-HHIXSM73.js → tabler-YXXC7Y6B.js} +3 -2
  41. package/dist/tabler-YXXC7Y6B.js.map +1 -0
  42. package/package.json +1 -1
  43. package/dist/chunk-ATONRIEB.js.map +0 -1
  44. package/dist/chunk-M3AARGLI.js.map +0 -1
  45. package/dist/chunk-VFAKME7Q.js.map +0 -1
  46. package/dist/chunk-X4CNZFWC.js.map +0 -1
  47. package/dist/feather-B65FI6CY.js.map +0 -1
  48. package/dist/heroicons-DIR7PXCR.js.map +0 -1
  49. package/dist/lucide-JH2R3TFV.js.map +0 -1
  50. package/dist/phosphor-HCVUMVT5.js.map +0 -1
  51. package/dist/tabler-HHIXSM73.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../showcase/src/lib/chart-utils.ts","../../../showcase/src/components/charts/ChartPrimitives.tsx","../../../showcase/src/components/charts/ChartWrapper.tsx","../../../showcase/src/components/charts/BarChart.tsx","../../../showcase/src/components/charts/LineChart.tsx","../../../showcase/src/components/charts/AreaChart.tsx","../../../showcase/src/components/charts/PieChart.tsx","../../../showcase/src/components/charts/CompositeChart.tsx","../../../showcase/src/components/charts/ScatterChart.tsx","../../../showcase/src/components/charts/RadarChart.tsx","../../../showcase/src/components/charts/RadialBarChart.tsx","../../../showcase/src/components/charts/FunnelChart.tsx","../../../showcase/src/components/charts/TreemapChart.tsx","../../../showcase/src/components/charts/SankeyChart.tsx","../../../showcase/src/components/charts/Sparkline.tsx","../../../showcase/src/components/ChartContainer.tsx"],"names":["useState","ChartWrapper","jsx","forwardRef","BarChart","jsxs","RechartsBarChart","LineChart","useRef","ResponsiveContainer","RechartsLineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","AreaChart","RechartsAreaChart","PieChart","RechartsPieChart","CompositeChart","Bar","Line","ScatterChart","RechartsScatterChart","RadarChart","RechartsRadarChart","RadialBarChart","RechartsRadialBarChart","FunnelChart","RechartsFunnelChart","TreemapChart","SankeyChart","RechartsSankey","Sparkline","useId","Area","HEIGHT_MAP"],"mappings":";;;;;;;AAEA,IAAM,YAAA,GAAe;AAAA,EACnB,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,iBAAA,GAAoB;AAAA,EACxB,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAEA,IAAM,eAAA,GAA0C;AAAA,EAC9C,cAAA,EAAgB,SAAA;AAAA,EAChB,cAAA,EAAgB,SAAA;AAAA,EAChB,cAAA,EAAgB,SAAA;AAAA,EAChB,cAAA,EAAgB,SAAA;AAAA,EAChB,cAAA,EAAgB,SAAA;AAAA,EAChB,cAAA,EAAgB,SAAA;AAAA,EAChB,mBAAA,EAAqB,yBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,mBAAA,EAAqB,wBAAA;AAAA,EACrB,mBAAA,EAAqB,yBAAA;AAAA,EACrB,iBAAA,EAAmB,SAAA;AAAA,EACnB,oBAAA,EAAsB,SAAA;AAAA,EACtB,mBAAA,EAAqB,SAAA;AAAA,EACrB,qBAAA,EAAuB,SAAA;AAAA,EACvB,iBAAA,EAAmB;AACrB,CAAA;AAIA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAM,WAAA,uBAAkB,GAAA,EAAgB;AACxC,IAAI,gBAAA,GAAmB,KAAA;AAEvB,SAAS,cAAA,GAAiB;AACxB,EAAA,IAAI,gBAAA,IAAoB,OAAO,QAAA,KAAa,WAAA,EAAa;AACzD,EAAA,gBAAA,GAAmB,IAAA;AAEnB,EAAA,MAAM,QAAA,GAAW,IAAI,gBAAA,CAAiB,CAAC,SAAA,KAAc;AACnD,IAAA,KAAA,MAAW,KAAK,SAAA,EAAW;AACzB,MAAA,IAAI,CAAA,CAAE,kBAAkB,WAAA,EAAa;AACnC,QAAA,WAAA,EAAA;AACA,QAAA,KAAA,MAAW,GAAA,IAAO,aAAa,GAAA,EAAI;AACnC,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,QAAA,CAAS,OAAA,CAAQ,SAAS,eAAA,EAAiB;AAAA,IACzC,UAAA,EAAY,IAAA;AAAA,IACZ,eAAA,EAAiB,CAAC,WAAW;AAAA,GAC9B,CAAA;AACH;AAEA,SAAS,UAAU,EAAA,EAAgB;AACjC,EAAA,cAAA,EAAe;AACf,EAAA,WAAA,CAAY,IAAI,EAAE,CAAA;AAClB,EAAA,OAAO,MAAM;AAAE,IAAA,WAAA,CAAY,OAAO,EAAE,CAAA;AAAA,EAAG,CAAA;AACzC;AAEA,SAAS,WAAA,GAAc;AACrB,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,aAAa,KAAA,EAAuB;AAClD,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,eAAA,CAAgB,KAAK,CAAA,IAAK,SAAA;AACtE,EAAA,MAAM,GAAA,GAAM,iBAAiB,QAAA,CAAS,eAAe,EAAE,gBAAA,CAAiB,KAAK,EAAE,IAAA,EAAK;AACpF,EAAA,OAAO,GAAA,IAAO,eAAA,CAAgB,KAAK,CAAA,IAAK,SAAA;AAC1C;AAEO,SAAS,cAAA,CAAe,KAAA,EAAe,IAAA,GAAO,KAAA,EAAiB;AACpE,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,SAAA,EAAW,WAAA,EAAa,iBAAiB,CAAA;AAC9E,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAI,SAAmB,MAAM,cAAA,CAAe,KAAA,EAAO,IAAI,CAAC,CAAA;AAKhF,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,SAAA,CAAU,aAAA,CAAc,KAAA,EAAO,IAAI,CAAC,CAAA;AAAA,EACtC,CAAA,EAAG,CAAC,KAAA,EAAO,IAAA,EAAM,OAAO,CAAC,CAAA;AAGzB,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,cAAA,CAAe,OAAe,IAAA,EAAyB;AAC9D,EAAA,MAAM,MAAA,GAAS,OAAO,iBAAA,GAAoB,YAAA;AAC1C,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA;AACtC,IAAA,MAAA,CAAO,IAAA,CAAK,eAAA,CAAgB,KAAK,CAAA,IAAK,SAAS,CAAA;AAAA,EACjD;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAA,CAAc,OAAe,IAAA,EAAyB;AAC7D,EAAA,MAAM,MAAA,GAAS,OAAO,iBAAA,GAAoB,YAAA;AAC1C,EAAA,MAAM,SAAmB,EAAC;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA;AACtC,IAAA,MAAA,CAAO,IAAA,CAAK,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,iBAAiB,KAAA,EAAuB;AACtD,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,SAAA,EAAW,WAAA,EAAa,iBAAiB,CAAA;AAC9E,EAAA,MAAM,CAAC,OAAO,QAAQ,CAAA,GAAI,SAAS,MAAM,eAAA,CAAgB,KAAK,CAAA,IAAK,SAAS,CAAA;AAG5E,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,QAAA,CAAS,YAAA,CAAa,KAAK,CAAC,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,KAAA,EAAO,OAAO,CAAC,CAAA;AAGnB,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,MAAM;AAC3C,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,KAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA;AAAA,EAC/D,CAAC,CAAA;AAED,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,CAAC,CAAA,KAA2B,UAAA,CAAW,EAAE,OAAO,CAAA;AAChE,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,OAAO,CAAA;AACtC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,OAAO,CAAA;AAAA,EACxD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,iBAAA,GAAoB,CAAC,QAAA,KAAgC;AAChE,EAAA,MAAM,UAAU,gBAAA,EAAiB;AACjC,EAAA,OAAO,QAAA,KAAa,SAAS,CAAC,OAAA;AAChC,CAAA;ACzIO,SAAS,mBAAA,CAAoB,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAM,EAA6B;AACxF,EAAA,MAAM,SAAA,GAAY,iBAAiB,iBAAiB,CAAA;AACpD,EAAA,MAAM,YAAA,GAAe,iBAAiB,oBAAoB,CAAA;AAC1D,EAAA,MAAM,WAAA,GAAc,iBAAiB,mBAAmB,CAAA;AACxD,EAAA,MAAM,aAAA,GAAgB,iBAAiB,qBAAqB,CAAA;AAE5D,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,OAAA,EAAS,QAAQ,OAAO,IAAA;AAExC,EAAA,MAAM,YAAY,KAAA,IAAS,IAAA,IAAQ,KAAA,KAAU,EAAA,IAAM,OAAO,KAAA,KAAU,QAAA;AAEpE,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gHAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,SAAA;AAAA,QACjB,MAAA,EAAQ,gCAAgC,YAAY,CAAA,CAAA;AAAA,QACpD,OAAA,EAAS;AAAA,OACX;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,SAAA,oBACC,GAAA,CAAC,OAAE,SAAA,EAAU,qBAAA,EAAsB,OAAO,EAAE,KAAA,EAAO,WAAA,EAAY,EAC5D,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,QAED,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM;AACzB,UAAA,MAAM,QAAA,GAAY,KAAA,CAAM,OAAA,EAAS,IAAA,IAAmB,MAAM,KAAA,IAAS,aAAA;AACnE,UAAA,MAAM,WAAA,GAAe,OAAO,KAAA,CAAM,OAAA,EAAS,SAAS,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,IAAS,KAAA,CAAM,IAAA;AAC7F,UAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,4BAAA,EAA6B,KAAA,EAAO,EAAE,SAAA,EAAW,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA,EAAE,EACpF,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,0CAAA;AAAA,gBACV,OAAO,EAAE,KAAA,EAAO,GAAG,MAAA,EAAQ,CAAA,EAAG,iBAAiB,QAAA;AAAS;AAAA,aAC1D;AAAA,iCACC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,eAAc,EAAI,QAAA,EAAA;AAAA,cAAA,WAAA;AAAA,cAAY;AAAA,aAAA,EAAC,CAAA;AAAA,gCACpD,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAe,KAAA,EAAO,EAAE,OAAO,WAAA,EAAY,EACxD,QAAA,EAAA,OAAO,KAAA,CAAM,UAAU,QAAA,GAAW,KAAA,CAAM,MAAM,cAAA,EAAe,GAAI,MAAM,KAAA,EAC1E;AAAA,WAAA,EAAA,EARQ,CASV,CAAA;AAAA,QAEJ,CAAC;AAAA;AAAA;AAAA,GACH;AAEJ;AAUO,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAQ,EAA4B;AACvE,EAAA,MAAM,aAAA,GAAgB,iBAAiB,qBAAqB,CAAA;AAE5D,EAAA,IAAI,CAAC,OAAA,EAAS,MAAA,EAAQ,OAAO,IAAA;AAE7B,EAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oGAAA,EACZ,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,qBACnB,IAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,8BAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0CAAA;AAAA,QACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,eAAA,EAAiB,MAAM,KAAA;AAAM;AAAA,KAC7D;AAAA,oBACA,GAAA,CAAC,UAAK,KAAA,EAAO,EAAE,OAAO,aAAA,EAAc,EAAI,gBAAM,KAAA,EAAM;AAAA,GAAA,EAAA,EAL5C,CAMV,CACD,CAAA,EACH,CAAA;AAEJ;AAEO,SAAS,aAAA,GAAwB;AACtC,EAAA,OAAO,iBAAiB,oBAAoB,CAAA;AAC9C;AAEO,SAAS,YAAA,GAAe;AAC7B,EAAA,MAAM,SAAA,GAAY,iBAAiB,iBAAiB,CAAA;AAEpD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU,wBAAA;AAAA,MACV,UAAA,EAAY,qBAAA;AAAA,MACZ,IAAA,EAAM;AAAA;AACR,GACF;AACF;AAEO,SAAS,SAAA,GAAoB;AAClC,EAAA,MAAM,GAAA,GAAM,iBAAiB,gBAAgB,CAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,EAAA,OAAO,KAAA,CAAM,MAAM,CAAA,GAAI,CAAA,GAAI,MAAA;AAC7B;AAMO,SAAS,UAAU,KAAA,EAAgC;AAKxD,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,QAAQ,iBAAA,EAAmB,MAAA,EAAQ,GAAG,IAAA,EAAK,GAAI,KAAA;AAI7E,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAM,GAAG,IAAA,EAAM,CAAA,EAAM,CAAA,EAAM,UAAA,EAAW,QAAA,EAAS,cAAA,EAAe,OAAA,EAC5D,QAAA,EAAA,OAAA,CAAQ,KAAA,EACX,CAAA;AAEJ;AAEO,SAAS,UAAU,KAAA,EAAgC;AACxD,EAAA,MAAM,EAAE,CAAA,EAAG,CAAA,EAAG,OAAA,EAAS,GAAG,MAAK,GAAI,KAAA;AACnC,EAAA,uBACE,GAAA,CAAC,IAAA,EAAA,EAAM,GAAG,IAAA,EAAM,GAAM,CAAA,EAAM,UAAA,EAAW,KAAA,EAAM,cAAA,EAAe,UAAS,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,CAAA,EACxF,kBAAQ,KAAA,EACX,CAAA;AAEJ;AAKA,SAAS,QAAA,CAAS,OAAe,EAAA,EAAqB;AACpD,EAAA,MAAM,CAAA,GAAI,MAAM,IAAA,EAAK;AACrB,EAAA,IAAI,CAAA,CAAE,QAAA,CAAS,KAAK,CAAA,SAAU,UAAA,CAAW,CAAC,CAAA,IAAK,UAAA,CAAW,iBAAiB,EAAA,CAAG,aAAA,CAAc,eAAe,CAAA,CAAE,QAAQ,CAAA,IAAK,EAAA,CAAA;AAC1H,EAAA,IAAI,EAAE,QAAA,CAAS,IAAI,CAAA,EAAG,OAAO,WAAW,CAAC,CAAA;AACzC,EAAA,MAAM,CAAA,GAAI,WAAW,CAAC,CAAA;AACtB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,GAAI,GAAA;AAClC;AAGA,SAAS,WAAA,CAAY,IAAiB,MAAA,EAAiC;AACrE,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,EAAa,OAAO,IAAA;AAC5C,EAAA,MAAM,MAAM,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA,CAAE,aAAa,IAAI,CAAA;AAC9D,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,EAAA,GAAK,iBAAiB,EAAE,CAAA;AAC9B,EAAA,MAAM,OAAO,QAAA,CAAS,EAAA,CAAG,iBAAiB,mBAAmB,CAAA,EAAG,EAAE,CAAA,IAAK,EAAA;AACvE,EAAA,MAAM,MAAA,GAAS,GAAG,gBAAA,CAAiB,gBAAgB,EAAE,IAAA,EAAK,IAAK,GAAG,UAAA,IAAc,YAAA;AAChF,EAAA,GAAA,CAAI,IAAA,GAAO,CAAA,EAAG,IAAI,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA;AAC9B,EAAA,OAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAA,CAAI,WAAA,CAAY,CAAC,CAAA,CAAE,KAAK,GAAG,CAAC,CAAA;AACzE;AAEA,IAAM,QAAA,GAAW,EAAA;AACjB,IAAM,YAAA,GAAe,EAAA;AAUd,SAAS,gBAAA,CACd,IAAA,EACA,QAAA,EACA,GAAA,EACA,QAAA,EACkE;AAClE,EAAA,MAAM,SAAS,OAAA,CAAQ,MAAA,CAAO,QAAQ,EAAC,EAAG,IAAI,CAAC,CAAA,KAAM,OAAO,CAAA,CAAE,QAAQ,KAAK,EAAE,CAAC,GAAG,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA;AACjG,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAQ,CAAA;AACtC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAA+B,MAAS,CAAA;AAElE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,CAAC,CAAA;AAI5C,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,KAAa,QAAA,GAAW,QAAA,GAAW,MAAA;AAC1D,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,YAAY,MAAA,IAAa,CAAC,EAAA,IAAM,MAAA,CAAO,WAAW,CAAA,EAAG;AACzD,IAAA,IAAI,IAAA,GAAO,IAAA;AACX,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,MAAA,GAAS,WAAA,CAAY,EAAA,EAAI,MAAM,CAAA;AACrC,MAAA,MAAM,IAAA,GAAO,GAAG,WAAA,GAAc,YAAA;AAC9B,MAAA,IAAI,MAAA,IAAU,IAAA,IAAQ,IAAA,IAAQ,CAAA,EAAG;AAAE,QAAA,QAAA,CAAS,MAAS,CAAA;AAAG,QAAA;AAAA,MAAQ;AAChE,MAAA,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,KAAK,MAAA,GAAS,CAAC,CAAC,CAAC,CAAA;AAC/C,MAAA,MAAM,IAAA,GAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,IAAQ,MAAA,GAAS,QAAA,CAAS,CAAC,CAAA;AAC/D,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,SAAS,IAAI,CAAA;AAG3C,MAAA,QAAA,CAAS,MAAA,CAAO,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,IAAA,KAAS,CAAC,CAAC,CAAA;AAAA,IAClD,CAAA;AACA,IAAA,IAAI,OAAO,mBAAmB,WAAA,EAAa;AAC3C,IAAA,MAAM,EAAA,GAAK,IAAI,cAAA,CAAe,OAAO,CAAA;AACrC,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,MAAM,QAAS,QAAA,CAAgE,KAAA;AAC/E,IAAA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,MAAM;AAAA,IAAC,CAAC,CAAA;AACnC,IAAA,OAAO,MAAM;AAAE,MAAA,IAAA,GAAO,KAAA;AAAO,MAAA,EAAA,CAAG,UAAA,EAAW;AAAA,IAAG,CAAA;AAAA,EAEhD,CAAA,EAAG,CAAC,SAAA,EAAW,OAAA,EAAS,GAAG,CAAC,CAAA;AAC5B,EAAA,IAAI,YAAY,MAAA,EAAW,OAAO,EAAE,QAAA,EAAU,OAAA,EAAS,WAAW,CAAA,EAAE;AACpE,EAAA,OAAO,KAAA,GAAQ,EAAE,KAAA,EAAO,QAAA,EAAU,CAAA,EAAG,SAAA,EAAU,GAAI,EAAE,QAAA,EAAU,kBAAA,EAAoB,SAAA,EAAW,CAAA,EAAE;AAClG;ACnNO,IAAM,qBAAA,GAAwB,cAAc,KAAK,CAAA;AAEjD,SAAS,uBAAA,GAAmC;AACjD,EAAA,OAAO,WAAW,qBAAqB,CAAA;AACzC;AAEA,IAAM,UAAA,GAAqC;AAAA,EACzC,EAAA,EAAI,2BAAA;AAAA,EACJ,EAAA,EAAI,2BAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AASO,IAAM,YAAA,GAAe,UAAA,CAA8C,SAASC,aAAAA,CAAa,EAAE,MAAA,GAAS,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,YAAA,EAAc,SAAA,EAAU,EAAG,GAAA,EAAK;AACpK,EAAA,MAAM,kBAAkB,uBAAA,EAAwB;AAEhD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,uBACEC,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,SAAA,EAAW,EAAA,CAAG,iBAAiB,SAAS,CAAA,EAAI,GAAI,SAAA,GAAY,EAAE,MAAM,KAAA,EAAO,YAAA,EAAc,WAAU,GAAI,IACnH,QAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,WAAA,GAAc,OAAO,MAAA,KAAW,QAAA,GAAW,GAAG,MAAM,CAAA,EAAA,CAAA,GAAO,WAAW,MAAM,CAAA;AAElF,EAAA,uBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,GAAG,QAAA,EAAU,SAAS,CAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,aAAY,EAAI,GAAI,SAAA,GAAY,EAAE,IAAA,EAAM,KAAA,EAAO,cAAc,SAAA,EAAU,GAAI,EAAC,EAC7I,QAAA,EACH,CAAA;AAEJ,CAAC,CAAA;ACMM,IAAM,QAAA,GAAWC,UAAAA,CAA0C,SAASC,SAAAA,CAAS;AAAA,EAClF,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,OAAA,GAAU,KAAA;AAAA,EACV,UAAA,GAAa,KAAA;AAAA,EACb,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,iBAAiB,IAAA,EAAM,QAAA,EAAU,YAAY,UAAA,GAAc,aAAA,IAAiB,qBAAsB,aAAa,CAAA;AAC9H,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AACrD,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AACnD,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,aAAA,GAAgB,UAAA,IAAc,IAAA,CAAK,MAAA,IAAU,CAAA;AAEnD,EAAA,MAAM,MAAA,GAAS,aAAa,UAAA,GAAa,YAAA;AAEzC,EAAA,SAAS,aAAa,KAAA,EAAiD;AACrE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,UAAA,GAAa,CAAC,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,CAAC,CAAA,GAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,IACpE;AACA,IAAA,MAAM,SAAA,GAAY,KAAA,KAAU,IAAA,CAAK,MAAA,GAAS,CAAA;AAC1C,IAAA,IAAI,CAAC,SAAA,EAAW,OAAO,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAClC,IAAA,OAAO,UAAA,GAAa,CAAC,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,CAAC,CAAA,GAAI,CAAC,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,cAAA,GAAiB,EAAE,QAAA,EAAU,wBAAA,EAA0B,YAAY,qBAAA,EAAuB,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAA,EAAK;AAE1H,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEF,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAK,SAAA,CAAU,GAAA,EAAyB,UAA8B,CAAA,EAA0B,MAAA,EAAgB,WAAsB,YAAA,EAAY,SAAA,EAC9J,0BAAAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,OAAM,MAAA,EAAO,MAAA,EAAO,QACvC,QAAA,kBAAAG,IAAAA;AAAA,IAACC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,OAAO,SAAA,EAAW,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,MAC9D,kBAAA,EAAkB,IAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,QAAA,QAAA,oBACCJ,GAAAA,CAAC,aAAA,EAAA,EAAc,eAAA,EAAgB,KAAA,EAAM,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,CAAC,UAAA,EAAY,UAAA,EAAU,IAAA,EAAC,CAAA;AAAA,QAE5F,UAAA,mBACCG,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACJ,GAAG,SAAA,CAAU,IAAA;AAAA,cACd,QAAA,EAAU,KAAA;AAAA,cACV,QAAA,EAAU,KAAA;AAAA,cACV,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,EAAA,EAAI,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,WAC3G;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,QAAA;AAAA,cACT,IAAA,EAAK,UAAA;AAAA,cACL,KAAA,EAAM,MAAA;AAAA,cACL,GAAG,SAAA,CAAU,IAAA;AAAA,cACd,QAAA,EAAU,KAAA;AAAA,cACV,QAAA,EAAU,KAAA;AAAA,cACV,IAAA,EAAM;AAAA;AAAA;AACR,SAAA,EACF,CAAA,mBAEAG,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAH,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,QAAA;AAAA,cACR,GAAG,SAAA,CAAU,IAAA;AAAA,cACd,QAAA,EAAU,KAAA;AAAA,cACV,QAAA,EAAU,KAAA;AAAA,cACV,IAAA,EAAM,SAAA;AAAA,cACV,UAAU,MAAA,CAAO,QAAA;AAAA,cACjB,OAAO,MAAA,CAAO,KAAA;AAAA,cACV,MAAA,EAAO,MAAA;AAAA,cACP,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,EAAA,EAAI,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,WAC3G;AAAA,0BACAA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,MAAA;AAAA,cACL,GAAG,SAAA,CAAU,IAAA;AAAA,cACd,QAAA,EAAU,KAAA;AAAA,cACV,QAAA,EAAU,KAAA;AAAA,cACV,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA;AACzG,SAAA,EACF,CAAA;AAAA,QAED,WAAA,oBAAeA,GAAAA,CAAC,OAAA,EAAA,EAAQ,yBAASA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,QAAQ,EAAE,IAAA,EAAM,oBAAA,EAAsB,OAAA,EAAS,KAAI,EAAG,CAAA;AAAA,QAChH,aAAA,oBAAiBA,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,kBAASA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG,CAAA;AAAA,QAC7G,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,sBACdA,GAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YAEC,SAAS,GAAA,CAAI,OAAA;AAAA,YACb,IAAA,EAAM,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,OAAA;AAAA,YACvB,MAAM,GAAA,CAAI,IAAA,GAAO,WAAW,CAAC,CAAA,GAAI,YAAY,CAAC,CAAA;AAAA,YAC9C,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,YACtB,OAAA,EAAS,UAAU,OAAA,GAAU,MAAA;AAAA,YAC7B,iBAAA,EAAmB;AAAA,WAAA;AAAA,UANd,GAAA,CAAI;AAAA,SAQZ;AAAA;AAAA;AAAA,KAEL,CAAA,EACF,CAAA;AAEJ,CAAC;AChHM,IAAM,SAAA,GAAYC,UAAAA,CAA2C,SAASI,UAAAA,CAAU;AAAA,EACrF,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,MAAA,GAAS,IAAA;AAAA,EACT,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,UAAA,GAAaC,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,YAAY,aAAa,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA;AACjD,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,UAAA,IAAc,KAAA,CAAM,MAAA,IAAU,CAAA;AACpD,EAAA,MAAM,cAAA,GAAiB,EAAE,QAAA,EAAU,wBAAA,EAA0B,YAAY,qBAAA,EAAuB,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAA,EAAK;AAE1H,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEN,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAK,SAAA,CAAU,KAAyB,UAA8B,CAAA,EAA0B,MAAA,EAAgB,SAAA,EAAsB,cAAY,SAAA,EAC9J,QAAA,kBAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACK,WAAA,EAAA,EAAkB,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,WAAW,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAE,EAAG,oBAAkB,IAAA,EAC/G,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAYR,GAAAA,CAACS,aAAAA,EAAA,EAAc,eAAA,EAAgB,KAAA,EAAM,QAAQ,UAAA,EAAY,CAAA;AAAA,oBACtET,GAAAA;AAAA,MAACU,KAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACR,GAAG,SAAA,CAAU,IAAA;AAAA,QACd,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,MAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,EAAA,EAAI,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,KAC3G;AAAA,oBACAV,GAAAA;AAAA,MAACW,KAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,MAAA;AAAA,QACL,GAAG,SAAA,CAAU,IAAA;AAAA,QACd,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,KACzG;AAAA,IACC,WAAA,oBAAeX,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,IAC1D,aAAA,oBAAiBA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG,CAAA;AAAA,IAC7G,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBA,GAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAM,SAAS,UAAA,GAAa,QAAA;AAAA,QAC5B,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,IAAA,EAAM,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,OAAA;AAAA,QACzB,MAAA,EAAQ,OAAO,CAAC,CAAA;AAAA,QAChB,WAAA,EAAa,CAAA;AAAA,QACb,eAAA,EAAiB,IAAA,CAAK,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,QACvC,GAAA,EAAK,QAAA;AAAA,QACL,SAAA,EAAW,EAAE,CAAA,EAAG,CAAA,EAAG,aAAa,CAAA,EAAE;AAAA,QAClC,iBAAA,EAAmB;AAAA,OAAA;AAAA,MATd,IAAA,CAAK;AAAA,KAWb;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;ACvEM,IAAM,SAAA,GAAYC,UAAAA,CAA2C,SAASa,UAAAA,CAAU;AAAA,EACrF,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,OAAA,GAAU,KAAA;AAAA,EACV,MAAA,GAAS,IAAA;AAAA,EACT,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,UAAA,GAAaR,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,YAAY,aAAa,CAAA;AACzE,EAAA,MAAM,aAAa,KAAA,EAAM;AACzB,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AACpD,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,UAAA,IAAc,KAAA,CAAM,MAAA,IAAU,CAAA;AACpD,EAAA,MAAM,cAAA,GAAiB,EAAE,QAAA,EAAU,wBAAA,EAA0B,YAAY,qBAAA,EAAuB,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAA,EAAK;AAE1H,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEN,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAK,SAAA,CAAU,KAAyB,UAA8B,CAAA,EAA0B,MAAA,EAAgB,SAAA,EAAsB,cAAY,SAAA,EAC9J,QAAA,kBAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACY,WAAA,EAAA,EAAkB,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,WAAW,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAE,EAAG,oBAAkB,IAAA,EAChH,QAAA,EAAA;AAAA,oBAAAf,GAAAA,CAAC,MAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,qBAChBG,IAAAA,CAAC,gBAAA,EAAA,EAAkC,EAAA,EAAI,CAAA,SAAA,EAAY,UAAU,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,CAAA,EAAI,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EACvG,QAAA,EAAA;AAAA,sBAAAH,GAAAA,CAAC,UAAK,MAAA,EAAO,IAAA,EAAK,WAAW,UAAA,CAAW,CAAC,CAAA,EAAG,WAAA,EAAa,CAAA,EAAG,CAAA;AAAA,sBAC5DA,GAAAA,CAAC,MAAA,EAAA,EAAK,MAAA,EAAO,KAAA,EAAM,WAAW,UAAA,CAAW,CAAC,CAAA,EAAG,WAAA,EAAa,GAAA,EAAK;AAAA,KAAA,EAAA,EAF5C,IAAA,CAAK,OAG1B,CACD,CAAA,EACH,CAAA;AAAA,IACC,QAAA,oBAAYA,GAAAA,CAACS,aAAAA,EAAA,EAAc,eAAA,EAAgB,KAAA,EAAM,QAAQ,UAAA,EAAY,CAAA;AAAA,oBACtET,GAAAA;AAAA,MAACU,KAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACR,GAAG,SAAA,CAAU,IAAA;AAAA,QACd,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,MAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,EAAA,EAAI,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,KAC3G;AAAA,oBACAV,GAAAA;AAAA,MAACW,KAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,MAAA;AAAA,QACL,GAAG,SAAA,CAAU,IAAA;AAAA,QACd,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,KACzG;AAAA,IACC,WAAA,oBAAeX,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,IAC1D,aAAA,oBAAiBA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG,CAAA;AAAA,IAC7G,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBA,GAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAM,SAAS,UAAA,GAAa,QAAA;AAAA,QAC5B,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,IAAA,EAAM,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,OAAA;AAAA,QACzB,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,QACrB,WAAA,EAAa,CAAA;AAAA,QACb,IAAA,EAAM,WAAW,CAAA,cAAA,EAAiB,UAAU,IAAI,IAAA,CAAK,OAAO,CAAA,CAAA,CAAA,GAAM,UAAA,CAAW,CAAC,CAAA;AAAA,QAC9E,OAAA,EAAS,UAAU,OAAA,GAAU,MAAA;AAAA,QAC7B,iBAAA,EAAmB;AAAA,OAAA;AAAA,MARd,IAAA,CAAK;AAAA,KAUb;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;ACtGM,IAAM,QAAA,GAAWC,UAAAA,CAA0C,SAASe,SAAAA,CAAS;AAAA,EAClF,IAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,KAAA,GAAQ,KAAA;AAAA,EACR,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,UAAA,GAAa,KAAA;AAAA,EACb,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAE7C,EAAA,MAAM,WAAA,GAAc,UAAA,GAChB,CAAC,EAAE,OAAA,EAAQ,KAA4B,CAAA,EAAA,CAAA,CAAK,OAAA,IAAW,CAAA,IAAK,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,GAC3E,KAAA;AAEJ,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEhB,IAAC,YAAA,EAAA,EAAa,GAAA,EAAU,QAAgB,SAAA,EAAsB,YAAA,EAAY,WACxE,QAAA,kBAAAA,GAAAA,CAACO,qBAAA,EAAoB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACc,UAAA,EAAA,EAAiB,oBAAkB,IAAA,EAClC,QAAA,EAAA;AAAA,oBAAAjB,GAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,IAAA;AAAA,QACA,OAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAQ,MAAA;AAAA,QACR,EAAA,EAAG,KAAA;AAAA,QACH,EAAA,EAAG,KAAA;AAAA,QACH,WAAA,EAAY,KAAA;AAAA,QACZ,WAAA,EAAa,QAAQ,KAAA,GAAQ,CAAA;AAAA,QAC7B,KAAA,EAAO,WAAA;AAAA,QACP,SAAA,EAAW,UAAA;AAAA,QACX,iBAAA,EAAmB,UAAA;AAAA,QACnB,QAAA,EAAS,wBAAA;AAAA,QACT,UAAA,EAAW,qBAAA;AAAA,QAEV,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,sBACZA,GAAAA,CAAC,IAAA,EAAA,EAAa,IAAA,EAAM,OAAO,CAAA,GAAI,MAAA,CAAO,MAAM,CAAA,EAAA,EAAjC,CAAoC,CAChD;AAAA;AAAA,KACH;AAAA,IACC,WAAA,oBAAeA,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,IAC1D,UAAA,oBAAcA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG;AAAA,GAAA,EAC7G,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;AC9BM,IAAM,cAAA,GAAiBC,UAAAA,CAAgD,SAASiB,eAAAA,CAAe;AAAA,EACpG,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,QAAA,GAAW,IAAA;AAAA,EACX,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,UAAA,GAAaZ,OAA8B,IAAI,CAAA;AACrD,EAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,YAAY,aAAa,CAAA;AACzE,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA;AACrD,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,cAAA,GAAiB,EAAE,QAAA,EAAU,wBAAA,EAA0B,YAAY,qBAAA,EAAuB,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAA,EAAK;AAE1H,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEN,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAK,SAAA,CAAU,KAAyB,UAA8B,CAAA,EAA0B,MAAA,EAAgB,SAAA,EAAsB,cAAY,SAAA,EAC9J,QAAA,kBAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAY,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,MAAA,CAAO,WAAW,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAE,EAAG,oBAAkB,IAAA,EAC3G,QAAA,EAAA;AAAA,IAAA,QAAA,oBAAYH,GAAAA,CAACS,aAAAA,EAAA,EAAc,eAAA,EAAgB,KAAA,EAAM,QAAQ,UAAA,EAAY,CAAA;AAAA,oBACtET,GAAAA;AAAA,MAACU,KAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,QAAA;AAAA,QACR,GAAG,SAAA,CAAU,IAAA;AAAA,QACd,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,IAAA,EAAM,SAAA;AAAA,QACN,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,MAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,MAAA,EAAQ,EAAA,EAAI,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,KAC3G;AAAA,oBACAV,GAAAA;AAAA,MAACW,KAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,MAAA;AAAA,QACR,KAAA,EAAM,MAAA;AAAA,QACL,GAAG,SAAA,CAAU,IAAA;AAAA,QACd,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,KAAA;AAAA,QACV,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,GAAA,EAAK,QAAA,EAAU,YAAA,EAAc,KAAA,EAAO,cAAA,EAAe,GAAI;AAAA;AAAA,KACzG;AAAA,IACC,4BACCX,GAAAA,CAACW,KAAAA,EAAA,EAAM,SAAQ,OAAA,EAAQ,WAAA,EAAY,OAAA,EAAQ,KAAA,EAAM,QAAQ,GAAG,SAAA,CAAU,MAAM,QAAA,EAAU,KAAA,EAAO,UAAU,KAAA,EAAO,CAAA;AAAA,IAE/G,WAAA,oBAAeX,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,IAC1D,UAAA,oBAAcA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG,CAAA;AAAA,IAC1G,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,EAAK,sBACdA,GAAAA;AAAA,MAACmB,GAAAA;AAAA,MAAA;AAAA,QAEC,SAAS,GAAA,CAAI,OAAA;AAAA,QACb,IAAA,EAAM,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,OAAA;AAAA,QACvB,IAAA,EAAM,cAAc,CAAC,CAAA;AAAA,QACrB,MAAA,EAAQ,CAAC,MAAA,EAAQ,MAAA,EAAQ,GAAG,CAAC,CAAA;AAAA,QAC7B,OAAA,EAAQ,MAAA;AAAA,QACR,iBAAA,EAAmB;AAAA,OAAA;AAAA,MANd,GAAA,CAAI;AAAA,KAQZ,CAAA;AAAA,IACA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBnB,GAAAA;AAAA,MAACoB,IAAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAK,UAAA;AAAA,QACL,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,IAAA,EAAM,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,OAAA;AAAA,QACzB,MAAA,EAAQ,WAAW,CAAC,CAAA;AAAA,QACpB,WAAA,EAAa,CAAA;AAAA,QACb,eAAA,EAAiB,IAAA,CAAK,MAAA,GAAS,KAAA,GAAQ,MAAA;AAAA,QACvC,GAAA,EAAK,KAAA;AAAA,QACL,OAAA,EAAS,WAAW,OAAA,GAAU,MAAA;AAAA,QAC9B,iBAAA,EAAmB;AAAA,OAAA;AAAA,MATd,IAAA,CAAK;AAAA,KAWb;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;AChGM,IAAM,YAAA,GAAenB,UAAAA,CAA8C,SAASoB,aAAAA,CAAa;AAAA,EAC9F,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAChD,EAAA,MAAM,aAAa,aAAA,EAAc;AACjC,EAAA,MAAM,YAAY,YAAA,EAAa;AAC/B,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,UAAA,IAAc,IAAA,CAAK,MAAA,IAAU,CAAA;AACnD,EAAA,MAAM,cAAA,GAAiB,EAAE,QAAA,EAAU,wBAAA,EAA0B,YAAY,qBAAA,EAAuB,IAAA,EAAM,SAAA,CAAU,IAAA,CAAK,IAAA,EAAK;AAE1H,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACErB,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAU,MAAA,EAAgB,WAAsB,YAAA,EAAY,SAAA,EACxE,QAAA,kBAAAA,GAAAA,CAACO,qBAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,QACvC,QAAA,kBAAAJ,IAAAA;AAAA,IAACmB,cAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,IAAA,EAAM,MAAA,GAAS,KAAK,CAAA,EAAE;AAAA,MAC3E,kBAAA,EAAkB,IAAA;AAAA,MAEjB,QAAA,EAAA;AAAA,QAAA,QAAA,oBAAYtB,GAAAA,CAACS,aAAAA,EAAA,EAAc,eAAA,EAAgB,KAAA,EAAM,QAAQ,UAAA,EAAY,CAAA;AAAA,wBACtET,GAAAA;AAAA,UAACU,KAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,GAAA;AAAA,YACR,MAAM,MAAA,IAAU,GAAA;AAAA,YACf,GAAG,SAAA,CAAU,IAAA;AAAA,YACd,QAAA,EAAU,KAAA;AAAA,YACV,QAAA,EAAU,KAAA;AAAA,YACV,OAAO,MAAA,GAAS,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAU,QAAA,EAAU,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,EAAE,GAAG,cAAA,EAAgB,UAAA,EAAY,QAAA,IAAW,GAAI;AAAA;AAAA,SACzH;AAAA,wBACAV,GAAAA;AAAA,UAACW,KAAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAQ,GAAA;AAAA,YACR,MAAM,MAAA,IAAU,GAAA;AAAA,YAChB,KAAA,EAAM,MAAA;AAAA,YACL,GAAG,SAAA,CAAU,IAAA;AAAA,YACd,QAAA,EAAU,KAAA;AAAA,YACV,QAAA,EAAU,KAAA;AAAA,YACV,OAAO,MAAA,GAAS,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,KAAK,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,CAAA,EAAG,OAAO,EAAE,GAAG,gBAAgB,UAAA,EAAY,QAAA,IAAW,GAAI;AAAA;AAAA,SACnI;AAAA,wBACAX,GAAAA,CAAC,KAAA,EAAA,EAAM,IAAA,EAAK,QAAA,EAAS,OAAA,EAAQ,GAAA,EAAI,KAAA,EAAO,CAAC,EAAA,EAAI,GAAG,CAAA,EAAG,CAAA;AAAA,QAClD,WAAA,oBAAeA,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,QAC1D,aAAA,oBAAiBA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG,CAAA;AAAA,QAC7G,IAAA,CAAK,GAAA,CAAI,CAAC,MAAA,EAAQ,sBACjBA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YAEC,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,MAAM,MAAA,CAAO,MAAA;AAAA,YACb,IAAA,EAAM,OAAO,CAAC,CAAA;AAAA,YACd,iBAAA,EAAmB;AAAA,WAAA;AAAA,UAJd,MAAA,CAAO;AAAA,SAMf;AAAA;AAAA;AAAA,KAEL,CAAA,EACF,CAAA;AAEJ,CAAC;AChEM,IAAM,UAAA,GAAaC,UAAAA,CAA4C,SAASsB,WAAAA,CAAW;AAAA,EACxF,IAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,MAAA,GAAS,IAAA;AAAA,EACT,QAAA,GAAW,IAAA;AAAA,EACX,WAAA,GAAc,IAAA;AAAA,EACd,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,KAAK,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,QAAA,CAAS,MAAA,EAAQ,IAAI,CAAA;AACvD,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,aAAA,GAAgB,UAAA,IAAc,QAAA,CAAS,MAAA,IAAU,CAAA;AAEvD,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEvB,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAU,MAAA,EAAgB,SAAA,EAAsB,YAAA,EAAY,SAAA,EACxE,QAAA,kBAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,MAAA,EACvC,QAAA,kBAAAJ,IAAAA,CAACqB,YAAA,EAAA,EAAmB,IAAA,EAAY,EAAA,EAAG,KAAA,EAAM,EAAA,EAAG,KAAA,EAAM,WAAA,EAAY,KAAA,EAAM,kBAAA,EAAkB,IAAA,EACpF,QAAA,EAAA;AAAA,oBAAAxB,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAO,yBAAA,EAA0B,CAAA;AAAA,oBAC5CA,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,OAAA;AAAA,QACT,MAAM,EAAE,QAAA,EAAU,0BAA0B,UAAA,EAAY,qBAAA,EAAuB,MAAM,sBAAA;AAAuB;AAAA,KAC9G;AAAA,oBACAA,GAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,MAAM,EAAE,QAAA,EAAU,0BAA0B,UAAA,EAAY,qBAAA,EAAuB,MAAM,sBAAA,EAAuB;AAAA,QAC5G,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,IACC,WAAA,oBAAeA,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,IAC1D,aAAA,oBAAiBA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG,CAAA;AAAA,IAC7G,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,EAAI,sBACjBA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,IAAA,EAAM,EAAA,CAAG,KAAA,IAAS,EAAA,CAAG,GAAA;AAAA,QACrB,SAAS,EAAA,CAAG,GAAA;AAAA,QACZ,MAAA,EAAQ,YAAY,CAAC,CAAA;AAAA,QACrB,IAAA,EAAM,MAAA,GAAS,UAAA,CAAW,CAAC,CAAA,GAAI,aAAA;AAAA,QAC/B,WAAA,EAAa,CAAA;AAAA,QACb,GAAA,EAAK,WAAW,EAAE,CAAA,EAAG,GAAG,IAAA,EAAM,WAAA,CAAY,CAAC,CAAA,EAAE,GAAI,KAAA;AAAA,QACjD,iBAAA,EAAmB;AAAA,OAAA;AAAA,MAPd,EAAA,CAAG;AAAA,KASX;AAAA,GAAA,EACH,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;AC5DM,IAAM,cAAA,GAAiBC,UAAAA,CAAgD,SAASwB,eAAAA,CAAe;AAAA,EACpG,IAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,UAAA,GAAa,KAAA;AAAA,EACb,UAAA,GAAa,EAAA;AAAA,EACb,QAAA,GAAW,IAAA;AAAA,EACX,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAE7C,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,IACpC,GAAG,CAAA;AAAA,IACH,IAAA,EAAM,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAM;AAAA,GAChC,CAAE,CAAA;AAEF,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACEzB,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAU,MAAA,EAAgB,WAAsB,YAAA,EAAY,SAAA,EACxE,QAAA,kBAAAA,GAAAA,CAACO,qBAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,QACvC,QAAA,kBAAAJ,IAAAA;AAAA,IAACuB,gBAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,SAAA;AAAA,MACN,EAAA,EAAG,KAAA;AAAA,MACH,EAAA,EAAG,KAAA;AAAA,MACH,WAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAY,KAAA;AAAA,MACZ,UAAA;AAAA,MACA,QAAA;AAAA,MACA,kBAAA,EAAkB,IAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA1B,GAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,UAAA,EAAY,EAAE,IAAA,EAAM,oBAAA,EAAqB;AAAA,YACzC,KAAA,EAAO,aAAa,EAAE,QAAA,EAAU,eAAe,IAAA,EAAM,wBAAA,EAA0B,QAAA,EAAU,wBAAA,EAAyB,GAAI,KAAA;AAAA,YACtH,iBAAA,EAAmB;AAAA;AAAA,SACrB;AAAA,QACC,WAAA,oBAAeA,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,QAC1D,UAAA,oBAAcA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG;AAAA;AAAA;AAAA,KAE/G,CAAA,EACF,CAAA;AAEJ,CAAC;AChDM,IAAM,WAAA,GAAcC,UAAAA,CAA6C,SAAS0B,YAAAA,CAAY;AAAA,EAC3F,IAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,UAAA,GAAa,IAAA;AAAA,EACb,UAAA,GAAa,IAAA;AAAA,EACb,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAE7C,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO;AAAA,IACpC,GAAG,CAAA;AAAA,IACH,IAAA,EAAM,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAM;AAAA,GAChC,CAAE,CAAA;AAEF,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACE3B,IAAC,YAAA,EAAA,EAAa,GAAA,EAAU,QAAgB,SAAA,EAAsB,YAAA,EAAY,WACxE,QAAA,kBAAAA,GAAAA,CAACO,qBAAA,EAAoB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACyB,aAAA,EAAA,EAAoB,oBAAkB,IAAA,EACrC,QAAA,EAAA;AAAA,oBAAA5B,GAAAA,CAAC,UAAO,OAAA,EAAQ,OAAA,EAAQ,MAAM,SAAA,EAAW,iBAAA,EAAmB,UAAA,EACzD,QAAA,EAAA,UAAA,oBACCA,GAAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,MAAA;AAAA,QACR,QAAA,EAAS,OAAA;AAAA,QACT,IAAA,EAAK,wBAAA;AAAA,QACL,QAAA,EAAS,wBAAA;AAAA,QACT,UAAA,EAAW;AAAA;AAAA,KACb,EAEJ,CAAA;AAAA,IACC,WAAA,oBAAeA,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,CAAA;AAAA,IAC1D,UAAA,oBAAcA,GAAAA,CAACa,MAAAA,EAAA,EAAO,OAAA,kBAASb,GAAAA,CAAC,kBAAA,EAAA,EAAmB,CAAA,EAAI,YAAA,EAAc,EAAE,UAAA,EAAY,qBAAoB,EAAG;AAAA,GAAA,EAC7G,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;AC3BD,SAAS,cAAc,GAAA,EAAqB;AAC1C,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,EAAK,EAAE,CAAA;AAC7B,EAAA,IAAI,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG,OAAO,SAAA;AACzB,EAAA,MAAM,IAAI,QAAA,CAAS,CAAA,CAAE,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACxC,EAAA,MAAM,IAAI,QAAA,CAAS,CAAA,CAAE,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACxC,EAAA,MAAM,IAAI,QAAA,CAAS,CAAA,CAAE,UAAU,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACxC,EAAA,MAAM,aAAa,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,QAAQ,CAAA,IAAK,GAAA;AACxD,EAAA,OAAO,SAAA,GAAY,OAAO,SAAA,GAAY,SAAA;AACxC;AAEA,SAAS,eAAe,EAAE,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAG,KAAA,GAAQ,CAAA,EAAG,MAAA,EAAQ,CAAA,GAAI,GAAG,IAAA,EAAM,KAAA,EAAO,QAAQ,MAAA,EAAQ,KAAA,GAAQ,GAAE,EAAwB;AAC/H,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,KAAA,GAAQ,MAAA,CAAO,MAAM,CAAA;AACzC,EAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,EAAA,IAAM,CAAA,GAAI,EAAA;AACpC,EAAA,MAAM,UAAA,GAAa,cAAc,IAAI,CAAA;AAErC,EAAA,uBACEG,KAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAH,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA,EAAQ,CAAA;AAAA,QACR,IAAA;AAAA,QACA,MAAA,EAAO,sBAAA;AAAA,QACP,WAAA,EAAa,CAAA;AAAA,QACb,EAAA,EAAI,KAAA,KAAU,CAAA,GAAI,MAAA,GAAS,CAAA;AAAA,QAC3B,OAAO,EAAE,OAAA,EAAS,KAAA,KAAU,CAAA,GAAI,IAAI,IAAA;AAAK;AAAA,KAC3C;AAAA,IACC,6BACCA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAG,IAAI,KAAA,GAAQ,CAAA;AAAA,QACf,CAAA,EAAG,IAAI,CAAA,GAAI,CAAA;AAAA,QACX,UAAA,EAAW,QAAA;AAAA,QACX,gBAAA,EAAiB,SAAA;AAAA,QACjB,IAAA,EAAM,UAAA;AAAA,QACN,MAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAS,wBAAA;AAAA,QACT,UAAA,EAAW,qBAAA;AAAA,QACX,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAO;AAAA,QAE9B,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,eAAe,KAAA,EAAsB,MAAA,EAAkB,UAAU,EAAE,CAAA,EAAG,GAAE,EAAkB;AACjG,EAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACzB,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,OAAO,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,eAAe,IAAA,CAAK,QAAA,EAAU,MAAA,EAAQ,OAAO,CAAA,EAAE;AAAA,IAC7E;AACA,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,CAAA,GAAI,OAAO,MAAM,CAAA;AAC7C,IAAA,OAAA,CAAQ,CAAA,EAAA;AACR,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,IAAA,EAAK;AAAA,EACzB,CAAC,CAAA;AACH;AAEO,IAAM,YAAA,GAAeC,UAAAA,CAA8C,SAAS4B,aAAAA,CAAa;AAAA,EAC9F,IAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,CAAA,EAAG,KAAK,CAAA;AACtC,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,SAAS,SAAA,EAAU;AAEzB,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA;AAE7C,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,uBACE7B,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAU,MAAA,EAAgB,WAAsB,YAAA,EAAY,SAAA,EACxE,QAAA,kBAAAA,GAAAA,CAACO,qBAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,QACvC,QAAA,kBAAAP,GAAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAQ,OAAA;AAAA,MACR,OAAA,EAAQ,MAAA;AAAA,MACR,aAAa,CAAA,GAAI,CAAA;AAAA,MACjB,MAAA,EAAO,sBAAA;AAAA,MACP,iBAAA,EAAmB,UAAA;AAAA,MACnB,OAAA,kBAASA,GAAAA,CAAC,cAAA,EAAA,EAAe,QAAgB,MAAA,EAAgB,CAAA;AAAA,MAExD,QAAA,EAAA,WAAA,oBAAeA,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI;AAAA;AAAA,KAE/D,CAAA,EACF,CAAA;AAEJ,CAAC;AC3GM,IAAM,WAAA,GAAcC,UAAAA,CAA6C,SAAS6B,YAAAA,CAAY;AAAA,EAC3F,IAAA;AAAA,EACA,MAAA,GAAS,IAAA;AAAA,EACT,WAAA,GAAc,IAAA;AAAA,EACd,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,QAAQ,KAAK,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,iBAAiB,oBAAoB,CAAA;AAExD,EAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,IAClD,GAAG,IAAA;AAAA,IACH,IAAA,EAAM,MAAA,CAAO,CAAA,GAAI,MAAA,CAAO,MAAM;AAAA,GAChC,CAAE,CAAA;AAEF,EAAA,MAAM,UAAA,GAAa;AAAA,IACjB,KAAA,EAAO,cAAA;AAAA,IACP,OAAO,IAAA,CAAK;AAAA,GACd;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,OAAO,IAAA;AAEjC,EAAA,uBACE9B,GAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EAAU,MAAA,EAAgB,WAAsB,YAAA,EAAY,SAAA,EACxE,QAAA,kBAAAA,GAAAA,CAACO,qBAAA,EAAoB,KAAA,EAAM,MAAA,EAAO,MAAA,EAAO,QACvC,QAAA,kBAAAP,GAAAA;AAAA,IAAC+B,MAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,UAAA;AAAA,MACN,SAAA,EAAW,EAAA;AAAA,MACX,WAAA,EAAa,EAAA;AAAA,MACb,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,MAC/C,IAAA,EAAM,EAAE,MAAA,EAAQ,UAAA,EAAY,eAAe,GAAA,EAAI;AAAA,MAE9C,QAAA,EAAA,WAAA,oBAAe/B,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI;AAAA;AAAA,KAE/D,CAAA,EACF,CAAA;AAEJ,CAAC;AC7BM,IAAM,SAAA,GAAYC,UAAAA,CAA2C,SAAS+B,UAAAA,CAAU;AAAA,EACrF,IAAA;AAAA,EACA,OAAA,GAAU,MAAA;AAAA,EACV,KAAA,GAAQ,CAAA;AAAA,EACR,MAAA,GAAS,EAAA;AAAA,EACT,KAAA,GAAQ,MAAA;AAAA,EACR,WAAA,GAAc,KAAA;AAAA,EACd,MAAA,GAAS,IAAA;AAAA,EACT,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd;AACF,CAAA,EAAG,GAAA,EAAK;AACN,EAAA,MAAM,aAAaC,KAAAA,EAAM;AACzB,EAAA,MAAM,UAAA,GAAa,kBAAkB,QAAQ,CAAA;AAC7C,EAAA,MAAM,kBAAkB,uBAAA,EAAwB;AAEhD,EAAA,MAAM,SAAA,GAAY,cAAc,KAAK,CAAA,CAAA;AACrC,EAAA,MAAM,aAAA,GAAgB,cAAc,KAAK,CAAA,KAAA,CAAA;AACzC,EAAA,MAAM,UAAA,GAAa,iBAAiB,SAAS,CAAA;AAC7C,EAAA,MAAM,SAAA,GAAY,iBAAiB,aAAa,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,EAAE,CAAE,CAAA;AAE9D,EAAA,MAAM,cAAA,GAAiB,kBACnB,EAAE,KAAA,EAAO,QAAQ,MAAA,EAAQ,MAAA,KACzB,EAAE,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,GAAG,KAAK,CAAA,EAAA,CAAA,GAAO,OAAO,MAAA,EAAQ,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,EAAK;AAErF,EAAA,IAAI,CAAC,IAAA,EAAM,MAAA,EAAQ,OAAO,IAAA;AAE1B,EAAA,IAAI,YAAY,KAAA,EAAO;AACrB,IAAA,uBACEjC,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,KAAA,EAAO,cAAA,EAAgB,WAAuB,GAAI,SAAA,GAAY,EAAE,IAAA,EAAM,OAAO,YAAA,EAAc,SAAA,KAAc,EAAC,EACvH,0BAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACD,UAAAA,EAAA,EAAS,IAAA,EAAM,SAAA,EAAW,QAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACxE,QAAA,EAAA;AAAA,sBAAAF,IAACU,KAAAA,EAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,MAAI,IAAA,EAAC,CAAA;AAAA,sBAC5BV,GAAAA,CAACW,KAAAA,EAAA,EAAM,MAAI,IAAA,EAAC,CAAA;AAAA,MACX,WAAA,oBAAeX,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,sBAC1EA,GAAAA;AAAA,QAACmB,GAAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,IAAA,EAAM,UAAA;AAAA,UACN,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,UACnB,iBAAA,EAAmB;AAAA;AAAA;AACrB,KAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,IAAA,MAAM,UAAA,GAAa,CAAA,mBAAA,EAAsB,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA;AAC5D,IAAA,uBACEnB,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,KAAA,EAAO,cAAA,EAAgB,WAAuB,GAAI,SAAA,GAAY,EAAE,IAAA,EAAM,OAAO,YAAA,EAAc,SAAA,KAAc,EAAC,EACvH,0BAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACW,WAAAA,EAAA,EAAU,IAAA,EAAM,SAAA,EAAW,QAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACzE,QAAA,EAAA;AAAA,sBAAAd,GAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAG,IAAAA,CAAC,oBAAe,EAAA,EAAI,UAAA,EAAY,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EACtD,QAAA,EAAA;AAAA,wBAAAH,IAAC,MAAA,EAAA,EAAK,MAAA,EAAO,MAAK,SAAA,EAAW,SAAA,EAAW,aAAa,CAAA,EAAG,CAAA;AAAA,wBACxDA,IAAC,MAAA,EAAA,EAAK,MAAA,EAAO,OAAM,SAAA,EAAW,SAAA,EAAW,aAAa,GAAA,EAAK;AAAA,OAAA,EAC7D,CAAA,EACF,CAAA;AAAA,sBACAA,GAAAA,CAACU,KAAAA,EAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,MAAI,IAAA,EAAC,CAAA;AAAA,sBAC5BV,GAAAA,CAACW,KAAAA,EAAA,EAAM,IAAA,EAAI,MAAC,MAAA,EAAQ,CAAC,aAAA,EAAe,aAAa,CAAA,EAAG,CAAA;AAAA,MACnD,WAAA,oBAAeX,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,sBAC1EA,GAAAA;AAAA,QAACkC,IAAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAM,SAAS,UAAA,GAAa,QAAA;AAAA,UAC5B,OAAA,EAAQ,OAAA;AAAA,UACR,MAAA,EAAQ,UAAA;AAAA,UACR,WAAA,EAAa,GAAA;AAAA,UACb,IAAA,EAAM,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,UACxB,GAAA,EAAK,KAAA;AAAA,UACL,WAAW,WAAA,GAAc,EAAE,GAAG,CAAA,EAAG,IAAA,EAAM,YAAW,GAAI,KAAA;AAAA,UACtD,iBAAA,EAAmB;AAAA;AAAA;AACrB,KAAA,EACF,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACElC,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAU,KAAA,EAAO,cAAA,EAAgB,WAAuB,GAAI,SAAA,GAAY,EAAE,IAAA,EAAM,OAAO,YAAA,EAAc,SAAA,KAAc,EAAC,EACvH,0BAAAA,GAAAA,CAACO,mBAAAA,EAAA,EAAoB,KAAA,EAAM,QAAO,MAAA,EAAO,MAAA,EACvC,0BAAAJ,IAAAA,CAACE,WAAAA,EAAA,EAAU,IAAA,EAAM,SAAA,EAAW,QAAQ,EAAE,GAAA,EAAK,GAAG,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAG,IAAA,EAAM,GAAE,EACzE,QAAA,EAAA;AAAA,oBAAAL,IAACU,KAAAA,EAAA,EAAM,OAAA,EAAQ,OAAA,EAAQ,MAAI,IAAA,EAAC,CAAA;AAAA,oBAC5BV,GAAAA,CAACW,KAAAA,EAAA,EAAM,IAAA,EAAI,MAAC,MAAA,EAAQ,CAAC,aAAA,EAAe,aAAa,CAAA,EAAG,CAAA;AAAA,IACnD,WAAA,oBAAeX,GAAAA,CAACY,OAAAA,EAAA,EAAQ,OAAA,kBAASZ,GAAAA,CAAC,mBAAA,EAAA,EAAoB,CAAA,EAAI,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,oBAC1EA,GAAAA;AAAA,MAACoB,IAAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,SAAS,UAAA,GAAa,QAAA;AAAA,QAC5B,OAAA,EAAQ,OAAA;AAAA,QACR,MAAA,EAAQ,UAAA;AAAA,QACR,WAAA,EAAa,GAAA;AAAA,QACb,GAAA,EAAK,KAAA;AAAA,QACL,WAAW,WAAA,GAAc,EAAE,GAAG,CAAA,EAAG,IAAA,EAAM,YAAW,GAAI,KAAA;AAAA,QACtD,iBAAA,EAAmB;AAAA;AAAA;AACrB,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ,CAAC;AC5HD,IAAMe,WAAAA,GAAa;AAAA,EACjB,EAAA,EAAI,2BAAA;AAAA,EACJ,EAAA,EAAI,2BAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAaO,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA,GAAS,IAAA;AAAA,EACT,KAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,UAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,QAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEhC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,OAAA,KAAY,UACR,gBAAA,GACA,EAAA;AAAA,UACE,sCAAA;AAAA,UACA,mGAAA;AAAA,UACA;AAAA,SACF;AAAA,QACJ;AAAA,OACF;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCH,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6DACV,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,wBAEFA,GAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,QAAQmC,WAAAA,CAAW,MAAM,CAAA,EAAE,EAAG,WAAU,UAAA,EACnD,QAAA,EAAA,OAAA,mBACChC,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mDAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACZ,QAAA,EAAA,CAAC,IAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE,CAAA,CAAE,IAAI,CAAC,CAAA,EAAG,sBACpCA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAQ,QAAA;AAAA,cACR,SAAA,EAAU,QAAA;AAAA,cACV,MAAA,EAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,aAAA;AAAA,YAHP;AAAA,WAKR,CAAA,EACH,CAAA;AAAA,0BACAA,IAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,QAAO,KAAA,EAAO,CAAA,EAAG,WAAU,QAAA,EAAS;AAAA,SAAA,EACxD,CAAA,GACE,QAAA,mBACFA,GAAAA,CAAC,qBAAA,CAAsB,UAAtB,EAA+B,KAAA,EAAO,IAAA,EACrC,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,eAAA,EAAiB,QAAA,EAAS,CAAA,EAC3C,CAAA,GACE,UAAA,mBACFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACZ,QAAA,EAAA,UAAA,EACH,CAAA,GACE,IAAA,EACN;AAAA;AAAA;AAAA,GACF;AAEJ","file":"charts.js","sourcesContent":["import { useState, useLayoutEffect, useSyncExternalStore } from \"react\";\n\nconst CHART_TOKENS = [\n \"--ds-chart-1\",\n \"--ds-chart-2\",\n \"--ds-chart-3\",\n \"--ds-chart-4\",\n \"--ds-chart-5\",\n \"--ds-chart-6\",\n] as const;\n\nconst CHART_TOKENS_SOFT = [\n \"--ds-chart-1-soft\",\n \"--ds-chart-2-soft\",\n \"--ds-chart-3-soft\",\n \"--ds-chart-4-soft\",\n \"--ds-chart-5-soft\",\n \"--ds-chart-6-soft\",\n] as const;\n\nconst FALLBACK_COLORS: Record<string, string> = {\n \"--ds-chart-1\": \"#6366f1\",\n \"--ds-chart-2\": \"#d97706\",\n \"--ds-chart-3\": \"#059669\",\n \"--ds-chart-4\": \"#dc2626\",\n \"--ds-chart-5\": \"#0891b2\",\n \"--ds-chart-6\": \"#7c3aed\",\n \"--ds-chart-1-soft\": \"rgba(99, 102, 241, 0.3)\",\n \"--ds-chart-2-soft\": \"rgba(217, 119, 6, 0.3)\",\n \"--ds-chart-3-soft\": \"rgba(5, 150, 105, 0.3)\",\n \"--ds-chart-4-soft\": \"rgba(220, 38, 38, 0.3)\",\n \"--ds-chart-5-soft\": \"rgba(8, 145, 178, 0.3)\",\n \"--ds-chart-6-soft\": \"rgba(124, 58, 237, 0.3)\",\n \"--ds-bg-surface\": \"#ffffff\",\n \"--ds-border-subtle\": \"#e5e7eb\",\n \"--ds-text-primary\": \"#111827\",\n \"--ds-text-secondary\": \"#6b7280\",\n \"--ds-text-muted\": \"#9ca3af\",\n};\n\ntype Subscriber = () => void;\n\nlet modeVersion = 0;\nconst subscribers = new Set<Subscriber>();\nlet observerAttached = false;\n\nfunction attachObserver() {\n if (observerAttached || typeof document === \"undefined\") return;\n observerAttached = true;\n\n const observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.attributeName === \"data-mode\") {\n modeVersion++;\n for (const sub of subscribers) sub();\n break;\n }\n }\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"data-mode\"],\n });\n}\n\nfunction subscribe(cb: Subscriber) {\n attachObserver();\n subscribers.add(cb);\n return () => { subscribers.delete(cb); };\n}\n\nfunction getSnapshot() {\n return modeVersion;\n}\n\nfunction getServerSnapshot() {\n return 0;\n}\n\nexport function resolveToken(token: string): string {\n if (typeof document === \"undefined\") return FALLBACK_COLORS[token] ?? \"#6366f1\";\n const val = getComputedStyle(document.documentElement).getPropertyValue(token).trim();\n return val || FALLBACK_COLORS[token] || \"#6366f1\";\n}\n\nexport function useChartColors(count: number, soft = false): string[] {\n const version = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const [colors, setColors] = useState<string[]>(() => fallbackColors(count, soft));\n\n // Reads computed CSS custom properties, which only exist after the theme's\n // style tag is committed — this has to be a post-layout effect.\n /* eslint-disable react-hooks/set-state-in-effect -- token resolution is a DOM read after commit */\n useLayoutEffect(() => {\n setColors(resolveColors(count, soft));\n }, [count, soft, version]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n return colors;\n}\n\nfunction fallbackColors(count: number, soft: boolean): string[] {\n const tokens = soft ? CHART_TOKENS_SOFT : CHART_TOKENS;\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n const token = tokens[i % tokens.length];\n result.push(FALLBACK_COLORS[token] ?? \"#6366f1\");\n }\n return result;\n}\n\nfunction resolveColors(count: number, soft: boolean): string[] {\n const tokens = soft ? CHART_TOKENS_SOFT : CHART_TOKENS;\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n const token = tokens[i % tokens.length];\n result.push(resolveToken(token));\n }\n return result;\n}\n\nexport function useResolvedToken(token: string): string {\n const version = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const [value, setValue] = useState(() => FALLBACK_COLORS[token] ?? \"#6366f1\");\n\n /* eslint-disable react-hooks/set-state-in-effect -- token resolution is a DOM read after commit */\n useLayoutEffect(() => {\n setValue(resolveToken(token));\n }, [token, version]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n return value;\n}\n\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n });\n\n useLayoutEffect(() => {\n const mql = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const handler = (e: MediaQueryListEvent) => setReduced(e.matches);\n mql.addEventListener(\"change\", handler);\n return () => mql.removeEventListener(\"change\", handler);\n }, []);\n\n return reduced;\n}\n\nexport const useChartAnimation = (animated?: boolean): boolean => {\n const reduced = useReducedMotion();\n return animated !== false && !reduced;\n};\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { Text } from \"recharts\";\nimport { useResolvedToken } from \"../../lib/chart-utils\";\n\ninterface ChartTooltipContentProps {\n active?: boolean;\n payload?: Array<{\n name: string;\n value: number | string;\n color: string;\n dataKey?: string;\n payload?: Record<string, unknown>;\n }>;\n label?: string;\n}\n\nexport function ChartTooltipContent({ active, payload, label }: ChartTooltipContentProps) {\n const bgSurface = useResolvedToken(\"--ds-bg-surface\");\n const borderSubtle = useResolvedToken(\"--ds-border-subtle\");\n const textPrimary = useResolvedToken(\"--ds-text-primary\");\n const textSecondary = useResolvedToken(\"--ds-text-secondary\");\n\n if (!active || !payload?.length) return null;\n\n const showLabel = label != null && label !== \"\" && typeof label !== \"number\";\n\n return (\n <div\n className=\"rounded-[var(--ds-radius-md)] shadow-[var(--ds-shadow-popover)] font-[family-name:var(--ds-font-sans)] text-sm\"\n style={{\n backgroundColor: bgSurface,\n border: `var(--ds-border-width) solid ${borderSubtle}`,\n padding: \"var(--ds-space-2) var(--ds-space-3)\",\n }}\n >\n {showLabel && (\n <p className=\"font-medium mb-ds-1\" style={{ color: textPrimary }}>\n {label}\n </p>\n )}\n {payload.map((entry, i) => {\n const dotColor = (entry.payload?.fill as string) || entry.color || textSecondary;\n const displayName = (typeof entry.payload?.name === \"string\" && entry.payload.name) || entry.name;\n return (\n <div key={i} className=\"flex items-center gap-ds-2\" style={{ marginTop: i > 0 ? 2 : 0 }}>\n <span\n className=\"shrink-0 rounded-[var(--ds-radius-full)]\"\n style={{ width: 8, height: 8, backgroundColor: dotColor }}\n />\n <span style={{ color: textSecondary }}>{displayName}:</span>\n <span className=\"tabular-nums\" style={{ color: textPrimary }}>\n {typeof entry.value === \"number\" ? entry.value.toLocaleString() : entry.value}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface ChartLegendContentProps {\n payload?: Array<{\n value: string;\n color: string;\n dataKey?: string;\n }>;\n}\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const textSecondary = useResolvedToken(\"--ds-text-secondary\");\n\n if (!payload?.length) return null;\n\n return (\n <div className=\"flex flex-wrap justify-center gap-y-ds-1 gap-x-ds-4 font-[family-name:var(--ds-font-sans)] text-sm\">\n {payload.map((entry, i) => (\n <div key={i} className=\"flex items-center gap-ds-1.5\">\n <span\n className=\"shrink-0 rounded-[var(--ds-radius-full)]\"\n style={{ width: 8, height: 8, backgroundColor: entry.color }}\n />\n <span style={{ color: textSecondary }}>{entry.value}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport function useGridStroke(): string {\n return useResolvedToken(\"--ds-border-subtle\");\n}\n\nexport function useAxisStyle() {\n const textMuted = useResolvedToken(\"--ds-text-muted\");\n\n return {\n tick: {\n fontSize: \"var(--ds-font-size-xs)\",\n fontFamily: \"var(--ds-font-sans)\",\n fill: textMuted,\n },\n };\n}\n\nexport function useRadius(): number {\n const val = useResolvedToken(\"--ds-radius-md\");\n const parsed = parseInt(val, 10);\n return isNaN(parsed) ? 6 : parsed;\n}\n/**\n * Recharts' `tick` prop as an object only passes SVG-valid properties.\n * Props like `maxLines`, `verticalAnchor` are stripped. We must use a\n * function to pass them to the internal Text component.\n */\nexport function xAxisTick(props: Record<string, unknown>) {\n // No width box (Sprint 25.3 C12): with one, Recharts measured \"20 Aug\" in a hidden span that did not carry the\n // chart's font, judged it too wide for its share of the axis and wrapped or truncated it. Without a width Text never\n // wraps or truncates; `interval` (preserveStartEnd) thins colliding ticks and keeps the first and last. Recharts' own\n // Text keeps the axis's auto height right, which a bare <text> does not (the label was clipped 8px in the pass).\n const { x, y, payload, width: _width, visibleTicksCount: _count, ...rest } = props as {\n x: number; y: number; payload: { value: string };\n width?: number; visibleTicksCount?: number; [k: string]: unknown;\n };\n return (\n <Text {...rest} x={x} y={y} textAnchor=\"middle\" verticalAnchor=\"start\">\n {payload.value}\n </Text>\n );\n}\n\nexport function yAxisTick(props: Record<string, unknown>) {\n const { x, y, payload, ...rest } = props as { x: number; y: number; payload: { value: string };[k: string]: unknown };\n return (\n <Text {...rest} x={x} y={y} textAnchor=\"end\" verticalAnchor=\"middle\" width={200} maxLines={2}>\n {payload.value}\n </Text>\n );\n}\n\nexport type XAxisInterval = number | \"preserveStart\" | \"preserveEnd\" | \"preserveStartEnd\" | \"equidistantPreserveStart\";\n\n/** A CSS length from a custom property (0.75rem, 12px) in px, against the element's root font size. */\nfunction lengthPx(value: string, el: Element): number {\n const v = value.trim();\n if (v.endsWith(\"rem\")) return parseFloat(v) * (parseFloat(getComputedStyle(el.ownerDocument.documentElement).fontSize) || 16);\n if (v.endsWith(\"px\")) return parseFloat(v);\n const n = parseFloat(v);\n return Number.isFinite(n) ? n : NaN;\n}\n\n/** The widest label in the chart's own axis font (canvas measureText), or null where there is no canvas (jsdom). */\nfunction widestLabel(el: HTMLElement, labels: string[]): number | null {\n if (typeof document === \"undefined\") return null;\n const ctx = document.createElement(\"canvas\").getContext?.(\"2d\");\n if (!ctx) return null;\n const cs = getComputedStyle(el);\n const size = lengthPx(cs.getPropertyValue(\"--ds-font-size-xs\"), el) || 12;\n const family = cs.getPropertyValue(\"--ds-font-sans\").trim() || cs.fontFamily || \"sans-serif\";\n ctx.font = `${size}px ${family}`;\n return labels.reduce((w, l) => Math.max(w, ctx.measureText(l).width), 0);\n}\n\nconst TICK_GAP = 12; // the least space between two labels\nconst AXIS_RESERVE = 48; // the y-axis column and the chart's side margins\n\n/**\n * Sprint 25.4 C-11 (decision 7): the category ticks a chart shows. Recharts' preserveStartEnd thins colliding ticks\n * by its own measurement (without the chart's font) and keeps the last tick, so the labels fall unevenly (round 5:\n * 14 and 15 September missing). The chart measures its widest label with the resolved axis font, picks the step\n * that fits the axis width, and labels every step from the first category — the last only when it falls on the step.\n * Re-measured when the wrapper resizes and when the web fonts land. A numeric `override` (the chart's xAxisInterval\n * prop) is every Nth category and skips the measurement; the Recharts strings are treated as \"measured\" (round 13).\n */\nexport function useCategoryTicks(\n data: ReadonlyArray<Record<string, unknown>> | undefined,\n xAxisKey: string,\n ref: RefObject<HTMLDivElement | null>,\n override?: XAxisInterval,\n): { ticks?: string[]; interval: XAxisInterval; endMargin: number } {\n const labels = useMemo(() => (data ?? []).map((d) => String(d[xAxisKey] ?? \"\")), [data, xAxisKey]);\n const labelsKey = labels.join(\"\\u0001\");\n const [ticks, setTicks] = useState<string[] | undefined>(undefined);\n // Half the widest label: the chart's right margin, so the last label (centred on the last point) is not clipped.\n const [endMargin, setEndMargin] = useState(4);\n // Only a number is an override (every Nth category). The Recharts strings — \"preserveStartEnd\" and friends — are the\n // thinning this hook replaced (round 13: a builder passed the old default by name and got uneven labels again), so\n // they mean \"measured\" too.\n const numeric = typeof override === \"number\" ? override : undefined;\n useEffect(() => {\n const el = ref.current;\n if (numeric !== undefined || !el || labels.length === 0) return;\n let live = true;\n const compute = () => {\n if (!live) return;\n const widest = widestLabel(el, labels);\n const plot = el.clientWidth - AXIS_RESERVE;\n if (widest == null || plot <= 0) { setTicks(undefined); return; }\n setEndMargin(Math.max(4, Math.ceil(widest / 2)));\n const fits = Math.max(1, Math.floor(plot / (widest + TICK_GAP)));\n const step = Math.ceil(labels.length / fits);\n // every k-th label from the first, explicitly — an explicit list keeps Recharts from thinning on its own\n // measurement even when every label fits (round 5: \"16 Sep\" dropped at full width)\n setTicks(labels.filter((_, i) => i % step === 0));\n };\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(compute);\n ro.observe(el);\n const fonts = (document as Document & { fonts?: { ready: Promise<unknown> } }).fonts;\n fonts?.ready.then(compute, () => {});\n return () => { live = false; ro.disconnect(); };\n // labels are compared by value\n }, [labelsKey, numeric, ref]); // eslint-disable-line react-hooks/exhaustive-deps\n if (numeric !== undefined) return { interval: numeric, endMargin: 4 };\n return ticks ? { ticks, interval: 0, endMargin } : { interval: \"preserveStartEnd\", endMargin: 4 };\n}\n","import { createContext, forwardRef, useContext, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport const ChartContainerContext = createContext(false);\n\nexport function useInsideChartContainer(): boolean {\n return useContext(ChartContainerContext);\n}\n\nconst HEIGHT_MAP: Record<string, string> = {\n sm: \"var(--ds-chart-height-sm)\",\n md: \"var(--ds-chart-height-md)\",\n lg: \"var(--ds-chart-height-lg)\",\n};\n\nexport interface ChartWrapperProps {\n height?: \"sm\" | \"md\" | \"lg\" | number;\n className?: string;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\nexport const ChartWrapper = forwardRef<HTMLDivElement, ChartWrapperProps>(function ChartWrapper({ height = \"md\", className, children, \"aria-label\": ariaLabel }, ref) {\n const insideContainer = useInsideChartContainer();\n\n if (insideContainer) {\n return (\n <div ref={ref} className={cn(\"h-full w-full\", className)} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n {children}\n </div>\n );\n }\n\n const heightValue = typeof height === \"number\" ? `${height}px` : HEIGHT_MAP[height];\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} style={{ height: heightValue }} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n {children}\n </div>\n );\n});\n","import { forwardRef, useRef, type Ref } from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, useRadius, xAxisTick, yAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface BarDef {\n dataKey: string;\n label?: string;\n soft?: boolean;\n}\n\nexport interface BarChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n bars: BarDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n stacked?: boolean;\n horizontal?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const BarChart = forwardRef<HTMLDivElement, BarChartProps>(function BarChart({\n data,\n bars,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n stacked = false,\n horizontal = false,\n showGrid = true,\n showTooltip = true,\n showLegend,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, horizontal ? (xAxisInterval ?? \"preserveStartEnd\") : xAxisInterval);\n const solidColors = useChartColors(bars.length, false);\n const softColors = useChartColors(bars.length, true);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n const legendVisible = showLegend ?? bars.length >= 2;\n\n const layout = horizontal ? \"vertical\" : \"horizontal\";\n\n function getBarRadius(index: number): [number, number, number, number] {\n if (!stacked) {\n return horizontal ? [0, radius, radius, 0] : [radius, radius, 0, 0];\n }\n const isTopmost = index === bars.length - 1;\n if (!isTopmost) return [0, 0, 0, 0];\n return horizontal ? [0, radius, radius, 0] : [radius, radius, 0, 0];\n }\n\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }}\n accessibilityLayer\n >\n {showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={!horizontal} horizontal />\n )}\n {horizontal ? (\n <>\n <XAxis\n type=\"number\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n dataKey={xAxisKey}\n type=\"category\"\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={yAxisTick}\n />\n </>\n ) : (\n <>\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n </>\n )}\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={{ fill: \"var(--ds-bg-muted)\", opacity: 0.5 }} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {bars.map((bar, i) => (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={bar.soft ? softColors[i] : solidColors[i]}\n radius={getBarRadius(i)}\n stackId={stacked ? \"stack\" : undefined}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useRef, type Ref } from \"react\";\nimport {\n LineChart as RechartsLineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, xAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface LineDef {\n dataKey: string;\n label?: string;\n dashed?: boolean;\n}\n\nexport interface LineChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n lines: LineDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n curved?: boolean;\n showDots?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const LineChart = forwardRef<HTMLDivElement, LineChartProps>(function LineChart({\n data,\n lines,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n curved = true,\n showDots = false,\n showGrid = true,\n showTooltip = true,\n showLegend,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, xAxisInterval);\n const colors = useChartColors(lines.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? lines.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsLineChart data={data} margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }} accessibilityLayer>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {lines.map((line, i) => (\n <Line\n key={line.dataKey}\n type={curved ? \"monotone\" : \"linear\"}\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={colors[i]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? \"5 5\" : undefined}\n dot={showDots}\n activeDot={{ r: 5, strokeWidth: 2 }}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsLineChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useId, useRef, type Ref } from \"react\";\nimport {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, xAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface AreaDef {\n dataKey: string;\n label?: string;\n}\n\nexport interface AreaChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n areas: AreaDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n stacked?: boolean;\n curved?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n gradient?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const AreaChart = forwardRef<HTMLDivElement, AreaChartProps>(function AreaChart({\n data,\n areas,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n stacked = false,\n curved = true,\n showGrid = true,\n showTooltip = true,\n showLegend,\n gradient = true,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, xAxisInterval);\n const instanceId = useId();\n const solidColors = useChartColors(areas.length, false);\n const softColors = useChartColors(areas.length, true);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? areas.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsAreaChart data={data} margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }} accessibilityLayer>\n <defs>\n {areas.map((area, i) => (\n <linearGradient key={area.dataKey} id={`gradient-${instanceId}-${area.dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={softColors[i]} stopOpacity={1} />\n <stop offset=\"95%\" stopColor={softColors[i]} stopOpacity={0.1} />\n </linearGradient>\n ))}\n </defs>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {areas.map((area, i) => (\n <Area\n key={area.dataKey}\n type={curved ? \"monotone\" : \"linear\"}\n dataKey={area.dataKey}\n name={area.label ?? area.dataKey}\n stroke={solidColors[i]}\n strokeWidth={2}\n fill={gradient ? `url(#gradient-${instanceId}-${area.dataKey})` : softColors[i]}\n stackId={stacked ? \"stack\" : undefined}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsAreaChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n PieChart as RechartsPieChart,\n Pie,\n Cell,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface PieChartProps {\n data: { name: string; value: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n donut?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const PieChart = forwardRef<HTMLDivElement, PieChartProps>(function PieChart({\n data,\n height = \"md\",\n donut = false,\n showTooltip = true,\n showLegend = true,\n showLabels = false,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const renderLabel = showLabels\n ? ({ percent }: { percent?: number }) => `${((percent ?? 0) * 100).toFixed(0)}%`\n : false;\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsPieChart accessibilityLayer>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"75%\"\n innerRadius={donut ? \"55%\" : 0}\n label={renderLabel}\n labelLine={showLabels}\n isAnimationActive={isAnimated}\n fontSize=\"var(--ds-font-size-xs)\"\n fontFamily=\"var(--ds-font-sans)\"\n >\n {data.map((_, i) => (\n <Cell key={i} fill={colors[i % colors.length]} />\n ))}\n </Pie>\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsPieChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useRef, type Ref } from \"react\";\nimport {\n ComposedChart,\n Bar,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, useRadius, xAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\nimport type { BarDef } from \"./BarChart\";\nimport type { LineDef } from \"./LineChart\";\n\nexport interface CompositeChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n bars: BarDef[];\n lines: LineDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n dualAxis?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const CompositeChart = forwardRef<HTMLDivElement, CompositeChartProps>(function CompositeChart({\n data,\n bars,\n lines,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n dualAxis = true,\n showGrid = true,\n showTooltip = true,\n showLegend = true,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, xAxisInterval);\n const barSoftColors = useChartColors(bars.length, true);\n const lineColors = useChartColors(lines.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <ComposedChart data={data} margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }} accessibilityLayer>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n yAxisId=\"left\"\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {dualAxis && (\n <YAxis yAxisId=\"right\" orientation=\"right\" width=\"auto\" {...axisStyle.tick} axisLine={false} tickLine={false} />\n )}\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {bars.map((bar, i) => (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={barSoftColors[i]}\n radius={[radius, radius, 0, 0]}\n yAxisId=\"left\"\n isAnimationActive={isAnimated}\n />\n ))}\n {lines.map((line, i) => (\n <Line\n key={line.dataKey}\n type=\"monotone\"\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={lineColors[i]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? \"5 5\" : undefined}\n dot={false}\n yAxisId={dualAxis ? \"right\" : \"left\"}\n isAnimationActive={isAnimated}\n />\n ))}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n ScatterChart as RechartsScatterChart,\n Scatter,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n ZAxis,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface ScatterSeries {\n name: string;\n points: { x: number; y: number; z?: number }[];\n}\n\nexport interface ScatterChartProps {\n data: ScatterSeries[];\n xLabel?: string;\n yLabel?: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>(function ScatterChart({\n data,\n xLabel,\n yLabel,\n height = \"md\",\n showGrid = true,\n showTooltip = true,\n showLegend,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? data.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsScatterChart\n margin={{ top: 8, right: 8, bottom: xLabel ? 20 : 4, left: yLabel ? 20 : 4 }}\n accessibilityLayer\n >\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={xLabel ?? \"x\"}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={xLabel ? { value: xLabel, position: \"bottom\", offset: 0, style: { ...axisLabelStyle, textAnchor: \"middle\" } } : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={yLabel ?? \"y\"}\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yLabel ? { value: yLabel, angle: -90, position: \"left\", offset: 0, style: { ...axisLabelStyle, textAnchor: \"middle\" } } : undefined}\n />\n <ZAxis type=\"number\" dataKey=\"z\" range={[40, 400]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {data.map((series, i) => (\n <Scatter\n key={series.name}\n name={series.name}\n data={series.points}\n fill={colors[i]}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsScatterChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n RadarChart as RechartsRadarChart,\n Radar,\n PolarGrid,\n PolarAngleAxis,\n PolarRadiusAxis,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface RadarDataKey {\n key: string;\n label?: string;\n}\n\nexport interface RadarChartProps {\n data: Record<string, unknown>[];\n dataKeys: RadarDataKey[];\n axisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n filled?: boolean;\n showDots?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>(function RadarChart({\n data,\n dataKeys,\n axisKey,\n height = \"md\",\n filled = true,\n showDots = true,\n showTooltip = true,\n showLegend,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const solidColors = useChartColors(dataKeys.length, false);\n const softColors = useChartColors(dataKeys.length, true);\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? dataKeys.length >= 2;\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadarChart data={data} cx=\"50%\" cy=\"50%\" outerRadius=\"75%\" accessibilityLayer>\n <PolarGrid stroke=\"var(--ds-border-subtle)\" />\n <PolarAngleAxis\n dataKey={axisKey}\n tick={{ fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: \"var(--ds-text-muted)\" }}\n />\n <PolarRadiusAxis\n tick={{ fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: \"var(--ds-text-muted)\" }}\n axisLine={false}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {dataKeys.map((dk, i) => (\n <Radar\n key={dk.key}\n name={dk.label ?? dk.key}\n dataKey={dk.key}\n stroke={solidColors[i]}\n fill={filled ? softColors[i] : \"transparent\"}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: solidColors[i] } : false}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsRadarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n RadialBarChart as RechartsRadialBarChart,\n RadialBar,\n Legend,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface RadialBarChartProps {\n data: { name: string; value: number; max?: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n startAngle?: number;\n endAngle?: number;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const RadialBarChart = forwardRef<HTMLDivElement, RadialBarChartProps>(function RadialBarChart({\n data,\n height = \"md\",\n showTooltip = true,\n showLegend = true,\n showLabels = false,\n startAngle = 90,\n endAngle = -270,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const chartData = data.map((d, i) => ({\n ...d,\n fill: colors[i % colors.length],\n }));\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadialBarChart\n data={chartData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"20%\"\n outerRadius=\"90%\"\n startAngle={startAngle}\n endAngle={endAngle}\n accessibilityLayer\n >\n <RadialBar\n dataKey=\"value\"\n background={{ fill: \"var(--ds-bg-muted)\" }}\n label={showLabels ? { position: \"insideStart\", fill: \"var(--ds-text-primary)\", fontSize: \"var(--ds-font-size-xs)\" } : false}\n isAnimationActive={isAnimated}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsRadialBarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n FunnelChart as RechartsFunnelChart,\n Funnel,\n Tooltip,\n Legend,\n LabelList,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface FunnelChartProps {\n data: { name: string; value: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const FunnelChart = forwardRef<HTMLDivElement, FunnelChartProps>(function FunnelChart({\n data,\n height = \"md\",\n showTooltip = true,\n showLegend = true,\n showLabels = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const chartData = data.map((d, i) => ({\n ...d,\n fill: colors[i % colors.length],\n }));\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsFunnelChart accessibilityLayer>\n <Funnel dataKey=\"value\" data={chartData} isAnimationActive={isAnimated}>\n {showLabels && (\n <LabelList\n dataKey=\"name\"\n position=\"right\"\n fill=\"var(--ds-text-primary)\"\n fontSize=\"var(--ds-font-size-sm)\"\n fontFamily=\"var(--ds-font-sans)\"\n />\n )}\n </Funnel>\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsFunnelChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n Treemap,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, useRadius } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface TreemapNode {\n name: string;\n value?: number;\n children?: TreemapNode[];\n [key: string]: unknown;\n}\n\nexport interface TreemapChartProps {\n data: TreemapNode[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\ninterface TreemapContentProps {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n name?: string;\n depth?: number;\n colors: string[];\n radius: number;\n index?: number;\n}\n\nfunction contrastColor(hex: string): string {\n const c = hex.replace(\"#\", \"\");\n if (c.length < 6) return \"#ffffff\";\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.55 ? \"#1f2937\" : \"#ffffff\";\n}\n\nfunction TreemapContent({ x = 0, y = 0, width = 0, height: h = 0, name, depth, colors, radius, index = 0 }: TreemapContentProps) {\n const fill = colors[index % colors.length];\n const showLabel = width > 40 && h > 20;\n const labelColor = contrastColor(fill);\n\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={h}\n fill={fill}\n stroke=\"var(--ds-bg-surface)\"\n strokeWidth={2}\n rx={depth === 1 ? radius : 0}\n style={{ opacity: depth === 1 ? 1 : 0.85 }}\n />\n {showLabel && (\n <text\n x={x + width / 2}\n y={y + h / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill={labelColor}\n stroke=\"none\"\n fontSize=\"var(--ds-font-size-xs)\"\n fontFamily=\"var(--ds-font-sans)\"\n style={{ pointerEvents: \"none\" }}\n >\n {name}\n </text>\n )}\n </g>\n );\n}\n\nfunction addFillToNodes(nodes: TreemapNode[], colors: string[], counter = { i: 0 }): TreemapNode[] {\n return nodes.map((node) => {\n if (node.children) {\n return { ...node, children: addFillToNodes(node.children, colors, counter) };\n }\n const fill = colors[counter.i % colors.length];\n counter.i++;\n return { ...node, fill };\n });\n}\n\nexport const TreemapChart = forwardRef<HTMLDivElement, TreemapChartProps>(function TreemapChart({\n data,\n height = \"md\",\n showTooltip = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(6, false);\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n\n const chartData = addFillToNodes(data, colors);\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <Treemap\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n aspectRatio={4 / 3}\n stroke=\"var(--ds-bg-surface)\"\n isAnimationActive={isAnimated}\n content={<TreemapContent colors={colors} radius={radius} />}\n >\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n </Treemap>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n Sankey as RechartsSankey,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useResolvedToken } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface SankeyChartProps {\n data: {\n nodes: { name: string }[];\n links: { source: number; target: number; value: number }[];\n };\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const SankeyChart = forwardRef<HTMLDivElement, SankeyChartProps>(function SankeyChart({\n data,\n height = \"md\",\n showTooltip = true,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.nodes.length, false);\n const linkStroke = useResolvedToken(\"--ds-border-subtle\");\n\n const nodesWithColor = data.nodes.map((node, i) => ({\n ...node,\n fill: colors[i % colors.length],\n }));\n\n const sankeyData = {\n nodes: nodesWithColor,\n links: data.links,\n };\n\n if (!data?.nodes?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsSankey\n data={sankeyData}\n nodeWidth={10}\n nodePadding={24}\n margin={{ top: 8, right: 8, bottom: 8, left: 8 }}\n link={{ stroke: linkStroke, strokeOpacity: 0.4 }}\n >\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n </RechartsSankey>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useId } from \"react\";\nimport {\n LineChart,\n Line,\n AreaChart,\n Area,\n BarChart,\n Bar,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { useResolvedToken, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent } from \"./ChartPrimitives\";\nimport { useInsideChartContainer } from \"./ChartWrapper\";\n\nexport interface SparklineProps {\n data: number[];\n variant?: \"line\" | \"area\" | \"bar\";\n color?: 1 | 2 | 3 | 4 | 5 | 6;\n height?: number;\n width?: number | \"100%\";\n showTooltip?: boolean;\n curved?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const Sparkline = forwardRef<HTMLDivElement, SparklineProps>(function Sparkline({\n data,\n variant = \"line\",\n color = 1,\n height = 40,\n width = \"100%\",\n showTooltip = false,\n curved = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const instanceId = useId();\n const isAnimated = useChartAnimation(animated);\n const insideContainer = useInsideChartContainer();\n\n const tokenName = `--ds-chart-${color}` as const;\n const softTokenName = `--ds-chart-${color}-soft` as const;\n const chartColor = useResolvedToken(tokenName);\n const softColor = useResolvedToken(softTokenName);\n const chartData = data.map((value, i) => ({ value, index: i }));\n\n const containerStyle = insideContainer\n ? { width: \"100%\", height: \"100%\" }\n : { width: typeof width === \"number\" ? `${width}px` : width, height: `${height}px` };\n\n if (!data?.length) return null;\n\n if (variant === \"bar\") {\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Bar\n dataKey=\"value\"\n fill={chartColor}\n radius={[2, 2, 0, 0]}\n isAnimationActive={isAnimated}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n if (variant === \"area\") {\n const gradientId = `sparkline-gradient-${instanceId}-${color}`;\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={softColor} stopOpacity={1} />\n <stop offset=\"95%\" stopColor={softColor} stopOpacity={0.1} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Area\n type={curved ? \"monotone\" : \"linear\"}\n dataKey=\"value\"\n stroke={chartColor}\n strokeWidth={1.5}\n fill={`url(#${gradientId})`}\n dot={false}\n activeDot={showTooltip ? { r: 3, fill: chartColor } : false}\n isAnimationActive={isAnimated}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={chartData} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Line\n type={curved ? \"monotone\" : \"linear\"}\n dataKey=\"value\"\n stroke={chartColor}\n strokeWidth={1.5}\n dot={false}\n activeDot={showTooltip ? { r: 3, fill: chartColor } : false}\n isAnimationActive={isAnimated}\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n );\n});\n","import type { ReactNode } from \"react\";\nimport { cn, GLASS_SURFACE } from \"../lib/utils\";\nimport { Skeleton } from \"./Skeleton\";\nimport { ChartContainerContext } from \"./charts/ChartWrapper\";\n\nconst HEIGHT_MAP = {\n sm: \"var(--ds-chart-height-sm)\",\n md: \"var(--ds-chart-height-md)\",\n lg: \"var(--ds-chart-height-lg)\",\n} as const;\n\ninterface ChartContainerProps {\n height?: \"sm\" | \"md\" | \"lg\";\n title?: string;\n loading?: boolean;\n emptyState?: ReactNode;\n /** \"default\" is a card surface. \"ghost\" drops surface, border, shadow and padding for charts embedded in another container. */\n variant?: \"default\" | \"ghost\";\n children: ReactNode;\n className?: string;\n}\n\nexport function ChartContainer({\n height = \"md\",\n title,\n loading = false,\n emptyState,\n variant = \"default\",\n children,\n className,\n}: ChartContainerProps) {\n return (\n <div\n data-card=\"\"\n className={cn(\n variant === \"ghost\"\n ? \"bg-transparent\"\n : cn(\n \"rounded-[var(--ds-radius-md)] p-ds-4\",\n \"bg-[var(--ds-bg-surface)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n GLASS_SURFACE,\n ),\n className\n )}\n >\n {title && (\n <p className=\"text-sm font-medium text-[var(--ds-text-primary)] mb-ds-4\">\n {title}\n </p>\n )}\n <div style={{ height: HEIGHT_MAP[height] }} className=\"relative\">\n {loading ? (\n <div className=\"flex flex-col justify-end h-full gap-ds-2 px-ds-2\">\n <div className=\"flex items-end h-full gap-ds-1\">\n {[65, 40, 80, 55, 72, 45, 60].map((h, i) => (\n <Skeleton\n key={i}\n variant=\"custom\"\n className=\"flex-1\"\n height={`${h}%`}\n />\n ))}\n </div>\n <Skeleton variant=\"text\" lines={1} className=\"w-full\" />\n </div>\n ) : children ? (\n <ChartContainerContext.Provider value={true}>\n <div className=\"h-full w-full\">{children}</div>\n </ChartContainerContext.Provider>\n ) : emptyState ? (\n <div className=\"h-full w-full flex items-center justify-center\">\n {emptyState}\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../../showcase/src/lib/chart-utils.ts","../../../showcase/src/components/charts/ChartPrimitives.tsx","../../../showcase/src/components/charts/ChartWrapper.tsx","../../../showcase/src/components/charts/BarChart.tsx","../../../showcase/src/components/charts/LineChart.tsx","../../../showcase/src/components/charts/AreaChart.tsx","../../../showcase/src/components/charts/PieChart.tsx","../../../showcase/src/components/charts/CompositeChart.tsx","../../../showcase/src/components/charts/ScatterChart.tsx","../../../showcase/src/components/charts/RadarChart.tsx","../../../showcase/src/components/charts/RadialBarChart.tsx","../../../showcase/src/components/charts/FunnelChart.tsx","../../../showcase/src/components/charts/TreemapChart.tsx","../../../showcase/src/components/charts/SankeyChart.tsx","../../../showcase/src/components/charts/Sparkline.tsx","../../../showcase/src/components/ChartContainer.tsx"],"names":["useState","ChartWrapper","jsx","forwardRef","BarChart","jsxs","RechartsBarChart","LineChart","useRef","ResponsiveContainer","RechartsLineChart","CartesianGrid","XAxis","YAxis","Tooltip","Legend","AreaChart","RechartsAreaChart","PieChart","RechartsPieChart","CompositeChart","Bar","Line","ScatterChart","RechartsScatterChart","RadarChart","RechartsRadarChart","RadialBarChart","RechartsRadialBarChart","FunnelChart","RechartsFunnelChart","TreemapChart","SankeyChart","RechartsSankey","Sparkline","useId","Area","HEIGHT_MAP"],"mappings":"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","file":"charts.js","sourcesContent":["import { useState, useLayoutEffect, useSyncExternalStore } from \"react\";\n\nconst CHART_TOKENS = [\n \"--ds-chart-1\",\n \"--ds-chart-2\",\n \"--ds-chart-3\",\n \"--ds-chart-4\",\n \"--ds-chart-5\",\n \"--ds-chart-6\",\n] as const;\n\nconst CHART_TOKENS_SOFT = [\n \"--ds-chart-1-soft\",\n \"--ds-chart-2-soft\",\n \"--ds-chart-3-soft\",\n \"--ds-chart-4-soft\",\n \"--ds-chart-5-soft\",\n \"--ds-chart-6-soft\",\n] as const;\n\nconst FALLBACK_COLORS: Record<string, string> = {\n \"--ds-chart-1\": \"#6366f1\",\n \"--ds-chart-2\": \"#d97706\",\n \"--ds-chart-3\": \"#059669\",\n \"--ds-chart-4\": \"#dc2626\",\n \"--ds-chart-5\": \"#0891b2\",\n \"--ds-chart-6\": \"#7c3aed\",\n \"--ds-chart-1-soft\": \"rgba(99, 102, 241, 0.3)\",\n \"--ds-chart-2-soft\": \"rgba(217, 119, 6, 0.3)\",\n \"--ds-chart-3-soft\": \"rgba(5, 150, 105, 0.3)\",\n \"--ds-chart-4-soft\": \"rgba(220, 38, 38, 0.3)\",\n \"--ds-chart-5-soft\": \"rgba(8, 145, 178, 0.3)\",\n \"--ds-chart-6-soft\": \"rgba(124, 58, 237, 0.3)\",\n \"--ds-bg-surface\": \"#ffffff\",\n \"--ds-border-subtle\": \"#e5e7eb\",\n \"--ds-text-primary\": \"#111827\",\n \"--ds-text-secondary\": \"#6b7280\",\n \"--ds-text-muted\": \"#9ca3af\",\n};\n\ntype Subscriber = () => void;\n\nlet modeVersion = 0;\nconst subscribers = new Set<Subscriber>();\nlet observerAttached = false;\n\nfunction attachObserver() {\n if (observerAttached || typeof document === \"undefined\") return;\n observerAttached = true;\n\n const observer = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (m.attributeName === \"data-mode\") {\n modeVersion++;\n for (const sub of subscribers) sub();\n break;\n }\n }\n });\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"data-mode\"],\n });\n}\n\nfunction subscribe(cb: Subscriber) {\n attachObserver();\n subscribers.add(cb);\n return () => { subscribers.delete(cb); };\n}\n\nfunction getSnapshot() {\n return modeVersion;\n}\n\nfunction getServerSnapshot() {\n return 0;\n}\n\nexport function resolveToken(token: string): string {\n if (typeof document === \"undefined\") return FALLBACK_COLORS[token] ?? \"#6366f1\";\n const val = getComputedStyle(document.documentElement).getPropertyValue(token).trim();\n return val || FALLBACK_COLORS[token] || \"#6366f1\";\n}\n\nexport function useChartColors(count: number, soft = false): string[] {\n const version = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const [colors, setColors] = useState<string[]>(() => fallbackColors(count, soft));\n\n // Reads computed CSS custom properties, which only exist after the theme's\n // style tag is committed — this has to be a post-layout effect.\n /* eslint-disable react-hooks/set-state-in-effect -- token resolution is a DOM read after commit */\n useLayoutEffect(() => {\n setColors(resolveColors(count, soft));\n }, [count, soft, version]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n return colors;\n}\n\nfunction fallbackColors(count: number, soft: boolean): string[] {\n const tokens = soft ? CHART_TOKENS_SOFT : CHART_TOKENS;\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n const token = tokens[i % tokens.length];\n result.push(FALLBACK_COLORS[token] ?? \"#6366f1\");\n }\n return result;\n}\n\nfunction resolveColors(count: number, soft: boolean): string[] {\n const tokens = soft ? CHART_TOKENS_SOFT : CHART_TOKENS;\n const result: string[] = [];\n for (let i = 0; i < count; i++) {\n const token = tokens[i % tokens.length];\n result.push(resolveToken(token));\n }\n return result;\n}\n\nexport function useResolvedToken(token: string): string {\n const version = useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n const [value, setValue] = useState(() => FALLBACK_COLORS[token] ?? \"#6366f1\");\n\n /* eslint-disable react-hooks/set-state-in-effect -- token resolution is a DOM read after commit */\n useLayoutEffect(() => {\n setValue(resolveToken(token));\n }, [token, version]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n return value;\n}\n\nexport function useReducedMotion(): boolean {\n const [reduced, setReduced] = useState(() => {\n if (typeof window === \"undefined\") return false;\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n });\n\n useLayoutEffect(() => {\n const mql = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n const handler = (e: MediaQueryListEvent) => setReduced(e.matches);\n mql.addEventListener(\"change\", handler);\n return () => mql.removeEventListener(\"change\", handler);\n }, []);\n\n return reduced;\n}\n\nexport const useChartAnimation = (animated?: boolean): boolean => {\n const reduced = useReducedMotion();\n return animated !== false && !reduced;\n};\n","import { useEffect, useMemo, useState, type RefObject } from \"react\";\nimport { Text } from \"recharts\";\nimport { useResolvedToken } from \"../../lib/chart-utils\";\n\ninterface ChartTooltipContentProps {\n active?: boolean;\n payload?: Array<{\n name: string;\n value: number | string;\n color: string;\n dataKey?: string;\n payload?: Record<string, unknown>;\n }>;\n label?: string;\n}\n\nexport function ChartTooltipContent({ active, payload, label }: ChartTooltipContentProps) {\n const bgSurface = useResolvedToken(\"--ds-bg-surface\");\n const borderSubtle = useResolvedToken(\"--ds-border-subtle\");\n const textPrimary = useResolvedToken(\"--ds-text-primary\");\n const textSecondary = useResolvedToken(\"--ds-text-secondary\");\n\n if (!active || !payload?.length) return null;\n\n const showLabel = label != null && label !== \"\" && typeof label !== \"number\";\n\n return (\n <div\n className=\"rounded-[var(--ds-radius-md)] shadow-[var(--ds-shadow-popover)] font-[family-name:var(--ds-font-sans)] text-sm\"\n style={{\n backgroundColor: bgSurface,\n border: `var(--ds-border-width) solid ${borderSubtle}`,\n padding: \"var(--ds-space-2) var(--ds-space-3)\",\n }}\n >\n {showLabel && (\n <p className=\"font-medium mb-ds-1\" style={{ color: textPrimary }}>\n {label}\n </p>\n )}\n {payload.map((entry, i) => {\n const dotColor = (entry.payload?.fill as string) || entry.color || textSecondary;\n const displayName = (typeof entry.payload?.name === \"string\" && entry.payload.name) || entry.name;\n return (\n <div key={i} className=\"flex items-center gap-ds-2\" style={{ marginTop: i > 0 ? 2 : 0 }}>\n <span\n className=\"shrink-0 rounded-[var(--ds-radius-full)]\"\n style={{ width: 8, height: 8, backgroundColor: dotColor }}\n />\n <span style={{ color: textSecondary }}>{displayName}:</span>\n <span className=\"tabular-nums\" style={{ color: textPrimary }}>\n {typeof entry.value === \"number\" ? entry.value.toLocaleString() : entry.value}\n </span>\n </div>\n );\n })}\n </div>\n );\n}\n\ninterface ChartLegendContentProps {\n payload?: Array<{\n value: string;\n color: string;\n dataKey?: string;\n }>;\n}\n\n/** A legend entry's outline: the series' stroke when it has one (a soft bar's solid edge, a line), else its colour. */\nfunction swatchEdge(entry: { color?: string; payload?: unknown }): string | undefined {\n const stroke = (entry.payload as { stroke?: unknown } | undefined)?.stroke;\n return typeof stroke === \"string\" ? stroke : entry.color;\n}\n\nexport function ChartLegendContent({ payload }: ChartLegendContentProps) {\n const textSecondary = useResolvedToken(\"--ds-text-secondary\");\n\n if (!payload?.length) return null;\n\n return (\n <div className=\"flex flex-wrap justify-center gap-y-ds-1 gap-x-ds-4 font-[family-name:var(--ds-font-sans)] text-sm\">\n {payload.map((entry, i) => (\n <div key={i} className=\"flex items-center gap-ds-1.5\">\n <span\n className=\"shrink-0 rounded-[var(--ds-radius-full)]\"\n // the series' own fill inside its outline (a soft bar's solid stroke), so a 30% tint stays visible (C4)\n style={{ width: 10, height: 10, backgroundColor: entry.color, border: `1.5px solid ${swatchEdge(entry)}` }}\n />\n <span style={{ color: textSecondary }}>{entry.value}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport function useGridStroke(): string {\n return useResolvedToken(\"--ds-border-subtle\");\n}\n\nexport function useAxisStyle() {\n const textMuted = useResolvedToken(\"--ds-text-muted\");\n\n return {\n tick: {\n fontSize: \"var(--ds-font-size-xs)\",\n fontFamily: \"var(--ds-font-sans)\",\n fill: textMuted,\n },\n };\n}\n\nexport function useRadius(): number {\n const val = useResolvedToken(\"--ds-radius-md\");\n const parsed = parseInt(val, 10);\n return isNaN(parsed) ? 6 : parsed;\n}\n/**\n * Recharts' `tick` prop as an object only passes SVG-valid properties.\n * Props like `maxLines`, `verticalAnchor` are stripped. We must use a\n * function to pass them to the internal Text component.\n */\nexport function xAxisTick(props: Record<string, unknown>) {\n // No width box (Sprint 25.3 C12): with one, Recharts measured \"20 Aug\" in a hidden span that did not carry the\n // chart's font, judged it too wide for its share of the axis and wrapped or truncated it. Without a width Text never\n // wraps or truncates; `interval` (preserveStartEnd) thins colliding ticks and keeps the first and last. Recharts' own\n // Text keeps the axis's auto height right, which a bare <text> does not (the label was clipped 8px in the pass).\n const { x, y, payload, width: _width, visibleTicksCount: _count, ...rest } = props as {\n x: number; y: number; payload: { value: string };\n width?: number; visibleTicksCount?: number; [k: string]: unknown;\n };\n return (\n <Text {...rest} x={x} y={y} textAnchor=\"middle\" verticalAnchor=\"start\">\n {payload.value}\n </Text>\n );\n}\n\nexport function yAxisTick(props: Record<string, unknown>) {\n const { x, y, payload, ...rest } = props as { x: number; y: number; payload: { value: string };[k: string]: unknown };\n return (\n <Text {...rest} x={x} y={y} textAnchor=\"end\" verticalAnchor=\"middle\" width={200} maxLines={2}>\n {payload.value}\n </Text>\n );\n}\n\nexport type XAxisInterval = number | \"preserveStart\" | \"preserveEnd\" | \"preserveStartEnd\" | \"equidistantPreserveStart\";\n\n/** A CSS length from a custom property (0.75rem, 12px) in px, against the element's root font size. */\nfunction lengthPx(value: string, el: Element): number {\n const v = value.trim();\n if (v.endsWith(\"rem\")) return parseFloat(v) * (parseFloat(getComputedStyle(el.ownerDocument.documentElement).fontSize) || 16);\n if (v.endsWith(\"px\")) return parseFloat(v);\n const n = parseFloat(v);\n return Number.isFinite(n) ? n : NaN;\n}\n\n/** The widest label in the chart's own axis font (canvas measureText), or null where there is no canvas (jsdom). */\nfunction widestLabel(el: HTMLElement, labels: string[]): number | null {\n if (typeof document === \"undefined\") return null;\n const ctx = document.createElement(\"canvas\").getContext?.(\"2d\");\n if (!ctx) return null;\n const cs = getComputedStyle(el);\n const size = lengthPx(cs.getPropertyValue(\"--ds-font-size-xs\"), el) || 12;\n const family = cs.getPropertyValue(\"--ds-font-sans\").trim() || cs.fontFamily || \"sans-serif\";\n ctx.font = `${size}px ${family}`;\n return labels.reduce((w, l) => Math.max(w, ctx.measureText(l).width), 0);\n}\n\nconst TICK_GAP = 12; // the least space between two labels\nconst AXIS_RESERVE = 48; // the y-axis column and the chart's side margins\n\n/**\n * Sprint 25.4 C-11 (decision 7): the category ticks a chart shows. Recharts' preserveStartEnd thins colliding ticks\n * by its own measurement (without the chart's font) and keeps the last tick, so the labels fall unevenly (round 5:\n * 14 and 15 September missing). The chart measures its widest label with the resolved axis font, picks the step\n * that fits the axis width, and labels every step from the first category — the last only when it falls on the step.\n * Re-measured when the wrapper resizes and when the web fonts land. A numeric `override` (the chart's xAxisInterval\n * prop) is every Nth category and skips the measurement; the Recharts strings are treated as \"measured\" (round 13).\n */\nexport function useCategoryTicks(\n data: ReadonlyArray<Record<string, unknown>> | undefined,\n xAxisKey: string,\n ref: RefObject<HTMLDivElement | null>,\n override?: XAxisInterval,\n): { ticks?: string[]; interval: XAxisInterval; endMargin: number } {\n const labels = useMemo(() => (data ?? []).map((d) => String(d[xAxisKey] ?? \"\")), [data, xAxisKey]);\n const labelsKey = labels.join(\"\\u0001\");\n const [ticks, setTicks] = useState<string[] | undefined>(undefined);\n // Half the widest label: the chart's right margin, so the last label (centred on the last point) is not clipped.\n const [endMargin, setEndMargin] = useState(4);\n // Only a number is an override (every Nth category). The Recharts strings — \"preserveStartEnd\" and friends — are the\n // thinning this hook replaced (round 13: a builder passed the old default by name and got uneven labels again), so\n // they mean \"measured\" too.\n const numeric = typeof override === \"number\" ? override : undefined;\n useEffect(() => {\n const el = ref.current;\n if (numeric !== undefined || !el || labels.length === 0) return;\n let live = true;\n const compute = () => {\n if (!live) return;\n const widest = widestLabel(el, labels);\n const plot = el.clientWidth - AXIS_RESERVE;\n if (widest == null || plot <= 0) { setTicks(undefined); return; }\n setEndMargin(Math.max(4, Math.ceil(widest / 2)));\n const fits = Math.max(1, Math.floor(plot / (widest + TICK_GAP)));\n const step = Math.ceil(labels.length / fits);\n // every k-th label from the first, explicitly — an explicit list keeps Recharts from thinning on its own\n // measurement even when every label fits (round 5: \"16 Sep\" dropped at full width)\n setTicks(labels.filter((_, i) => i % step === 0));\n };\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(compute);\n ro.observe(el);\n const fonts = (document as Document & { fonts?: { ready: Promise<unknown> } }).fonts;\n fonts?.ready.then(compute, () => {});\n return () => { live = false; ro.disconnect(); };\n // labels are compared by value\n }, [labelsKey, numeric, ref]); // eslint-disable-line react-hooks/exhaustive-deps\n if (numeric !== undefined) return { interval: numeric, endMargin: 4 };\n return ticks ? { ticks, interval: 0, endMargin } : { interval: \"preserveStartEnd\", endMargin: 4 };\n}\n","import { createContext, forwardRef, useContext, type ReactNode } from \"react\";\nimport { cn } from \"../../lib/utils\";\n\nexport const ChartContainerContext = createContext(false);\n\nexport function useInsideChartContainer(): boolean {\n return useContext(ChartContainerContext);\n}\n\nconst HEIGHT_MAP: Record<string, string> = {\n sm: \"var(--ds-chart-height-sm)\",\n md: \"var(--ds-chart-height-md)\",\n lg: \"var(--ds-chart-height-lg)\",\n};\n\nexport interface ChartWrapperProps {\n height?: \"sm\" | \"md\" | \"lg\" | number;\n className?: string;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\nexport const ChartWrapper = forwardRef<HTMLDivElement, ChartWrapperProps>(function ChartWrapper({ height = \"md\", className, children, \"aria-label\": ariaLabel }, ref) {\n const insideContainer = useInsideChartContainer();\n\n if (insideContainer) {\n return (\n <div ref={ref} className={cn(\"h-full w-full\", className)} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n {children}\n </div>\n );\n }\n\n const heightValue = typeof height === \"number\" ? `${height}px` : HEIGHT_MAP[height];\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} style={{ height: heightValue }} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n {children}\n </div>\n );\n});\n","import { forwardRef, useRef, type Ref } from \"react\";\nimport {\n BarChart as RechartsBarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n Rectangle,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, useRadius, xAxisTick, yAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface BarDef {\n dataKey: string;\n label?: string;\n soft?: boolean;\n /**\n * Bars with the same stackId stack into one column (Sprint 25.7, C4); a bar without one stands alone. BarChart's\n * `stacked` puts every bar without a stackId into one stack. The same field works in CompositeChart, where lines\n * draw over the stacks.\n */\n stackId?: string;\n}\n\n/** The stack a bar joins: its own stackId, else the one `stacked` makes for every bar. */\nexport function barStackOf(bar: BarDef, stacked: boolean): string | undefined {\n return bar.stackId ?? (stacked ? \"stack\" : undefined);\n}\n\n/** Some bar stacks. Its chart then stacks both ways from zero (stackOffset \"sign\"), so a negative series sits below it. */\nexport function anyStack(bars: BarDef[], stacked: boolean): boolean {\n return bars.some((bar) => barStackOf(bar, stacked) != null);\n}\n\n/**\n * The bar's shape: only the end segment of each stack is rounded, per column and per side of zero — the top of the\n * positive side, the bottom of the negative one — so a stack whose last series is zero in a column rounds the segment\n * that ends it there. A bar on its own rounds its end.\n */\nexport function barShape(bars: BarDef[], index: number, stacked: boolean, radius: number, horizontal = false) {\n const round: [number, number, number, number] = horizontal ? [0, radius, radius, 0] : [radius, radius, 0, 0];\n const square: [number, number, number, number] = [0, 0, 0, 0];\n const stack = barStackOf(bars[index], stacked);\n const above = stack == null ? [] : bars.filter((b, j) => j > index && barStackOf(b, stacked) === stack);\n // Recharts hands the shape the bar's geometry and its row of data; it draws a negative bar's rounded corners at its\n // far end itself\n const Shape = (props: unknown) => {\n const p = props as { payload?: Record<string, unknown> };\n const row = p.payload ?? {};\n const down = Number(row[bars[index].dataKey]) < 0;\n const onTop = above.every((b) => {\n const value = Number(row[b.dataKey]);\n return !(down ? value < 0 : value > 0);\n });\n return <Rectangle {...(props as object)} radius={onTop ? round : square} />;\n };\n return Shape;\n}\n\nexport interface BarChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n bars: BarDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n /** Every bar without a stackId joins one stack. */\n stacked?: boolean;\n horizontal?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const BarChart = forwardRef<HTMLDivElement, BarChartProps>(function BarChart({\n data,\n bars,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n stacked = false,\n horizontal = false,\n showGrid = true,\n showTooltip = true,\n showLegend,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, horizontal ? (xAxisInterval ?? \"preserveStartEnd\") : xAxisInterval);\n const solidColors = useChartColors(bars.length, false);\n const softColors = useChartColors(bars.length, true);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n const legendVisible = showLegend ?? bars.length >= 2;\n\n const layout = horizontal ? \"vertical\" : \"horizontal\";\n\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsBarChart\n data={data}\n layout={layout}\n stackOffset={anyStack(bars, stacked) ? \"sign\" : undefined}\n margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }}\n accessibilityLayer\n >\n {showGrid && (\n <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} vertical={!horizontal} horizontal />\n )}\n {horizontal ? (\n <>\n <XAxis\n type=\"number\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n dataKey={xAxisKey}\n type=\"category\"\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={yAxisTick}\n />\n </>\n ) : (\n <>\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n </>\n )}\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={{ fill: \"var(--ds-bg-muted)\", opacity: 0.5 }} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {bars.map((bar, i) => (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={bar.soft ? softColors[i] : solidColors[i]}\n // a soft fill is a 30% tint: the solid outline keeps the bar's edge at the colour's own contrast (WCAG 1.4.11)\n stroke={bar.soft ? solidColors[i] : undefined}\n strokeWidth={bar.soft ? 1 : undefined}\n shape={barShape(bars, i, stacked, radius, horizontal)}\n stackId={barStackOf(bar, stacked)}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsBarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useRef, type Ref } from \"react\";\nimport {\n LineChart as RechartsLineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, xAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface LineDef {\n dataKey: string;\n label?: string;\n dashed?: boolean;\n}\n\nexport interface LineChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n lines: LineDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n curved?: boolean;\n showDots?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const LineChart = forwardRef<HTMLDivElement, LineChartProps>(function LineChart({\n data,\n lines,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n curved = true,\n showDots = false,\n showGrid = true,\n showTooltip = true,\n showLegend,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, xAxisInterval);\n const colors = useChartColors(lines.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? lines.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsLineChart data={data} margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }} accessibilityLayer>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {lines.map((line, i) => (\n <Line\n key={line.dataKey}\n type={curved ? \"monotone\" : \"linear\"}\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={colors[i]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? \"5 5\" : undefined}\n dot={showDots}\n activeDot={{ r: 5, strokeWidth: 2 }}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsLineChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useId, useRef, type Ref } from \"react\";\nimport {\n AreaChart as RechartsAreaChart,\n Area,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, xAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface AreaDef {\n dataKey: string;\n label?: string;\n}\n\nexport interface AreaChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n areas: AreaDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n stacked?: boolean;\n curved?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n gradient?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const AreaChart = forwardRef<HTMLDivElement, AreaChartProps>(function AreaChart({\n data,\n areas,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n stacked = false,\n curved = true,\n showGrid = true,\n showTooltip = true,\n showLegend,\n gradient = true,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, xAxisInterval);\n const instanceId = useId();\n const solidColors = useChartColors(areas.length, false);\n const softColors = useChartColors(areas.length, true);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? areas.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsAreaChart data={data} margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }} accessibilityLayer>\n <defs>\n {areas.map((area, i) => (\n <linearGradient key={area.dataKey} id={`gradient-${instanceId}-${area.dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={softColors[i]} stopOpacity={1} />\n <stop offset=\"95%\" stopColor={softColors[i]} stopOpacity={0.1} />\n </linearGradient>\n ))}\n </defs>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {areas.map((area, i) => (\n <Area\n key={area.dataKey}\n type={curved ? \"monotone\" : \"linear\"}\n dataKey={area.dataKey}\n name={area.label ?? area.dataKey}\n stroke={solidColors[i]}\n strokeWidth={2}\n fill={gradient ? `url(#gradient-${instanceId}-${area.dataKey})` : softColors[i]}\n stackId={stacked ? \"stack\" : undefined}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsAreaChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n PieChart as RechartsPieChart,\n Pie,\n Cell,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface PieChartProps {\n data: { name: string; value: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n donut?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const PieChart = forwardRef<HTMLDivElement, PieChartProps>(function PieChart({\n data,\n height = \"md\",\n donut = false,\n showTooltip = true,\n showLegend = true,\n showLabels = false,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const renderLabel = showLabels\n ? ({ percent }: { percent?: number }) => `${((percent ?? 0) * 100).toFixed(0)}%`\n : false;\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsPieChart accessibilityLayer>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"75%\"\n innerRadius={donut ? \"55%\" : 0}\n label={renderLabel}\n labelLine={showLabels}\n isAnimationActive={isAnimated}\n fontSize=\"var(--ds-font-size-xs)\"\n fontFamily=\"var(--ds-font-sans)\"\n >\n {data.map((_, i) => (\n <Cell key={i} fill={colors[i % colors.length]} />\n ))}\n </Pie>\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsPieChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useRef, type Ref } from \"react\";\nimport {\n ComposedChart,\n Bar,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle, useRadius, xAxisTick, useCategoryTicks, type XAxisInterval } from \"./ChartPrimitives\";\nimport { mergeRefs } from \"../../lib/slot\";\nimport { ChartWrapper } from \"./ChartWrapper\";\nimport { anyStack, barShape, barStackOf, type BarDef } from \"./BarChart\";\nimport type { LineDef } from \"./LineChart\";\n\nexport interface CompositeChartProps {\n /**\n * Which category ticks show. Leave it out: the chart measures its widest label with the chart's font and labels every\n * k-th category from the first, the last only when it falls on the step (Sprint 25.4 C-11, decision 7). A number\n * labels every Nth category instead. The Recharts strings (\"preserveStartEnd\") are accepted for compatibility and\n * mean the same measured labelling — they never hand the ticks back to Recharts' thinning (round 13).\n */\n xAxisInterval?: XAxisInterval;\n data: Record<string, unknown>[];\n bars: BarDef[];\n lines: LineDef[];\n xAxisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n /** Every bar without a stackId joins one stack; lines draw over it (Sprint 25.7, C4). A bar's stackId works too. */\n stacked?: boolean;\n /**\n * The lines on a second axis of their own, on the right, for a line whose unit differs from the bars'. Default: true\n * for bars side by side, false once the bars stack (`stacked` or a bar's stackId), so a capacity or a target line\n * reads against the stack's own scale. An explicit value wins.\n */\n dualAxis?: boolean;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n xAxisLabel?: string;\n yAxisLabel?: string;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const CompositeChart = forwardRef<HTMLDivElement, CompositeChartProps>(function CompositeChart({\n data,\n bars,\n lines,\n xAxisKey,\n xAxisInterval,\n height = \"md\",\n stacked = false,\n dualAxis = !anyStack(bars, stacked),\n showGrid = true,\n showTooltip = true,\n showLegend = true,\n xAxisLabel,\n yAxisLabel,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const wrapperRef = useRef<HTMLDivElement | null>(null);\n const xTicks = useCategoryTicks(data, xAxisKey, wrapperRef, xAxisInterval);\n const barSoftColors = useChartColors(bars.length, true);\n const barSolidColors = useChartColors(bars.length, false);\n const lineColors = useChartColors(lines.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={mergeRefs(ref as Ref<HTMLElement>, wrapperRef as Ref<HTMLElement>) as Ref<HTMLDivElement>} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <ComposedChart data={data} stackOffset={anyStack(bars, stacked) ? \"sign\" : undefined} margin={{ top: 4, right: xTicks.endMargin, bottom: 4, left: 4 }} accessibilityLayer>\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n dataKey={xAxisKey}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n tick={xAxisTick}\n interval={xTicks.interval}\n ticks={xTicks.ticks}\n height=\"auto\"\n label={xAxisLabel ? { value: xAxisLabel, position: \"insideBottom\", offset: -2, style: axisLabelStyle } : undefined}\n />\n <YAxis\n yAxisId=\"left\"\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yAxisLabel ? { value: yAxisLabel, angle: -90, position: \"insideLeft\", style: axisLabelStyle } : undefined}\n />\n {dualAxis && (\n <YAxis yAxisId=\"right\" orientation=\"right\" width=\"auto\" {...axisStyle.tick} axisLine={false} tickLine={false} />\n )}\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {bars.map((bar, i) => (\n <Bar\n key={bar.dataKey}\n dataKey={bar.dataKey}\n name={bar.label ?? bar.dataKey}\n fill={barSoftColors[i]}\n // the soft fill is a 30% tint (1.3–1.4:1 on a dark card, Sprint 25.7 C4): the solid outline keeps the bar's\n // edge at the colour's own contrast against the card (WCAG 1.4.11), and separates stacked segments\n stroke={barSolidColors[i]}\n strokeWidth={1}\n shape={barShape(bars, i, stacked, radius)}\n stackId={barStackOf(bar, stacked)}\n yAxisId=\"left\"\n isAnimationActive={isAnimated}\n />\n ))}\n {lines.map((line, i) => (\n <Line\n key={line.dataKey}\n type=\"monotone\"\n dataKey={line.dataKey}\n name={line.label ?? line.dataKey}\n stroke={lineColors[i]}\n strokeWidth={2}\n strokeDasharray={line.dashed ? \"5 5\" : undefined}\n dot={false}\n yAxisId={dualAxis ? \"right\" : \"left\"}\n isAnimationActive={isAnimated}\n />\n ))}\n </ComposedChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n ScatterChart as RechartsScatterChart,\n Scatter,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n ResponsiveContainer,\n ZAxis,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent, useGridStroke, useAxisStyle } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface ScatterSeries {\n name: string;\n points: { x: number; y: number; z?: number }[];\n}\n\nexport interface ScatterChartProps {\n data: ScatterSeries[];\n xLabel?: string;\n yLabel?: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showGrid?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const ScatterChart = forwardRef<HTMLDivElement, ScatterChartProps>(function ScatterChart({\n data,\n xLabel,\n yLabel,\n height = \"md\",\n showGrid = true,\n showTooltip = true,\n showLegend,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const gridStroke = useGridStroke();\n const axisStyle = useAxisStyle();\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? data.length >= 2;\n const axisLabelStyle = { fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: axisStyle.tick.fill };\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsScatterChart\n margin={{ top: 8, right: 8, bottom: xLabel ? 20 : 4, left: yLabel ? 20 : 4 }}\n accessibilityLayer\n >\n {showGrid && <CartesianGrid strokeDasharray=\"3 3\" stroke={gridStroke} />}\n <XAxis\n type=\"number\"\n dataKey=\"x\"\n name={xLabel ?? \"x\"}\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={xLabel ? { value: xLabel, position: \"bottom\", offset: 0, style: { ...axisLabelStyle, textAnchor: \"middle\" } } : undefined}\n />\n <YAxis\n type=\"number\"\n dataKey=\"y\"\n name={yLabel ?? \"y\"}\n width=\"auto\"\n {...axisStyle.tick}\n axisLine={false}\n tickLine={false}\n label={yLabel ? { value: yLabel, angle: -90, position: \"left\", offset: 0, style: { ...axisLabelStyle, textAnchor: \"middle\" } } : undefined}\n />\n <ZAxis type=\"number\" dataKey=\"z\" range={[40, 400]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {data.map((series, i) => (\n <Scatter\n key={series.name}\n name={series.name}\n data={series.points}\n fill={colors[i]}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsScatterChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n RadarChart as RechartsRadarChart,\n Radar,\n PolarGrid,\n PolarAngleAxis,\n PolarRadiusAxis,\n Tooltip,\n Legend,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface RadarDataKey {\n key: string;\n label?: string;\n}\n\nexport interface RadarChartProps {\n data: Record<string, unknown>[];\n dataKeys: RadarDataKey[];\n axisKey: string;\n height?: \"sm\" | \"md\" | \"lg\" | number;\n filled?: boolean;\n showDots?: boolean;\n showTooltip?: boolean;\n showLegend?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const RadarChart = forwardRef<HTMLDivElement, RadarChartProps>(function RadarChart({\n data,\n dataKeys,\n axisKey,\n height = \"md\",\n filled = true,\n showDots = true,\n showTooltip = true,\n showLegend,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const solidColors = useChartColors(dataKeys.length, false);\n const softColors = useChartColors(dataKeys.length, true);\n const isAnimated = useChartAnimation(animated);\n const legendVisible = showLegend ?? dataKeys.length >= 2;\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadarChart data={data} cx=\"50%\" cy=\"50%\" outerRadius=\"75%\" accessibilityLayer>\n <PolarGrid stroke=\"var(--ds-border-subtle)\" />\n <PolarAngleAxis\n dataKey={axisKey}\n tick={{ fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: \"var(--ds-text-muted)\" }}\n />\n <PolarRadiusAxis\n tick={{ fontSize: \"var(--ds-font-size-xs)\", fontFamily: \"var(--ds-font-sans)\", fill: \"var(--ds-text-muted)\" }}\n axisLine={false}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {legendVisible && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n {dataKeys.map((dk, i) => (\n <Radar\n key={dk.key}\n name={dk.label ?? dk.key}\n dataKey={dk.key}\n stroke={solidColors[i]}\n fill={filled ? softColors[i] : \"transparent\"}\n strokeWidth={2}\n dot={showDots ? { r: 3, fill: solidColors[i] } : false}\n isAnimationActive={isAnimated}\n />\n ))}\n </RechartsRadarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n RadialBarChart as RechartsRadialBarChart,\n RadialBar,\n Legend,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface RadialBarChartProps {\n data: { name: string; value: number; max?: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n startAngle?: number;\n endAngle?: number;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const RadialBarChart = forwardRef<HTMLDivElement, RadialBarChartProps>(function RadialBarChart({\n data,\n height = \"md\",\n showTooltip = true,\n showLegend = true,\n showLabels = false,\n startAngle = 90,\n endAngle = -270,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const chartData = data.map((d, i) => ({\n ...d,\n fill: colors[i % colors.length],\n }));\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsRadialBarChart\n data={chartData}\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"20%\"\n outerRadius=\"90%\"\n startAngle={startAngle}\n endAngle={endAngle}\n accessibilityLayer\n >\n <RadialBar\n dataKey=\"value\"\n background={{ fill: \"var(--ds-bg-muted)\" }}\n label={showLabels ? { position: \"insideStart\", fill: \"var(--ds-text-primary)\", fontSize: \"var(--ds-font-size-xs)\" } : false}\n isAnimationActive={isAnimated}\n />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsRadialBarChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n FunnelChart as RechartsFunnelChart,\n Funnel,\n Tooltip,\n Legend,\n LabelList,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, ChartLegendContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface FunnelChartProps {\n data: { name: string; value: number; [key: string]: unknown }[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n showLegend?: boolean;\n showLabels?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const FunnelChart = forwardRef<HTMLDivElement, FunnelChartProps>(function FunnelChart({\n data,\n height = \"md\",\n showTooltip = true,\n showLegend = true,\n showLabels = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.length, false);\n const isAnimated = useChartAnimation(animated);\n\n const chartData = data.map((d, i) => ({\n ...d,\n fill: colors[i % colors.length],\n }));\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsFunnelChart accessibilityLayer>\n <Funnel dataKey=\"value\" data={chartData} isAnimationActive={isAnimated}>\n {showLabels && (\n <LabelList\n dataKey=\"name\"\n position=\"right\"\n fill=\"var(--ds-text-primary)\"\n fontSize=\"var(--ds-font-size-sm)\"\n fontFamily=\"var(--ds-font-sans)\"\n />\n )}\n </Funnel>\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n {showLegend && <Legend content={<ChartLegendContent />} wrapperStyle={{ paddingTop: \"var(--ds-space-3)\" }} />}\n </RechartsFunnelChart>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n Treemap,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent, useRadius } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface TreemapNode {\n name: string;\n value?: number;\n children?: TreemapNode[];\n [key: string]: unknown;\n}\n\nexport interface TreemapChartProps {\n data: TreemapNode[];\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\ninterface TreemapContentProps {\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n name?: string;\n depth?: number;\n colors: string[];\n radius: number;\n index?: number;\n}\n\nfunction contrastColor(hex: string): string {\n const c = hex.replace(\"#\", \"\");\n if (c.length < 6) return \"#ffffff\";\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return luminance > 0.55 ? \"#1f2937\" : \"#ffffff\";\n}\n\nfunction TreemapContent({ x = 0, y = 0, width = 0, height: h = 0, name, depth, colors, radius, index = 0 }: TreemapContentProps) {\n const fill = colors[index % colors.length];\n const showLabel = width > 40 && h > 20;\n const labelColor = contrastColor(fill);\n\n return (\n <g>\n <rect\n x={x}\n y={y}\n width={width}\n height={h}\n fill={fill}\n stroke=\"var(--ds-bg-surface)\"\n strokeWidth={2}\n rx={depth === 1 ? radius : 0}\n style={{ opacity: depth === 1 ? 1 : 0.85 }}\n />\n {showLabel && (\n <text\n x={x + width / 2}\n y={y + h / 2}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill={labelColor}\n stroke=\"none\"\n fontSize=\"var(--ds-font-size-xs)\"\n fontFamily=\"var(--ds-font-sans)\"\n style={{ pointerEvents: \"none\" }}\n >\n {name}\n </text>\n )}\n </g>\n );\n}\n\nfunction addFillToNodes(nodes: TreemapNode[], colors: string[], counter = { i: 0 }): TreemapNode[] {\n return nodes.map((node) => {\n if (node.children) {\n return { ...node, children: addFillToNodes(node.children, colors, counter) };\n }\n const fill = colors[counter.i % colors.length];\n counter.i++;\n return { ...node, fill };\n });\n}\n\nexport const TreemapChart = forwardRef<HTMLDivElement, TreemapChartProps>(function TreemapChart({\n data,\n height = \"md\",\n showTooltip = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(6, false);\n const isAnimated = useChartAnimation(animated);\n const radius = useRadius();\n\n const chartData = addFillToNodes(data, colors);\n\n if (!data?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <Treemap\n data={chartData}\n dataKey=\"value\"\n nameKey=\"name\"\n aspectRatio={4 / 3}\n stroke=\"var(--ds-bg-surface)\"\n isAnimationActive={isAnimated}\n content={<TreemapContent colors={colors} radius={radius} />}\n >\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n </Treemap>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef } from \"react\";\nimport {\n Sankey as RechartsSankey,\n Tooltip,\n ResponsiveContainer,\n} from \"recharts\";\nimport { useChartColors, useResolvedToken } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent } from \"./ChartPrimitives\";\nimport { ChartWrapper } from \"./ChartWrapper\";\n\nexport interface SankeyChartProps {\n data: {\n nodes: { name: string }[];\n links: { source: number; target: number; value: number }[];\n };\n height?: \"sm\" | \"md\" | \"lg\" | number;\n showTooltip?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const SankeyChart = forwardRef<HTMLDivElement, SankeyChartProps>(function SankeyChart({\n data,\n height = \"md\",\n showTooltip = true,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const colors = useChartColors(data.nodes.length, false);\n const linkStroke = useResolvedToken(\"--ds-border-subtle\");\n\n const nodesWithColor = data.nodes.map((node, i) => ({\n ...node,\n fill: colors[i % colors.length],\n }));\n\n const sankeyData = {\n nodes: nodesWithColor,\n links: data.links,\n };\n\n if (!data?.nodes?.length) return null;\n\n return (\n <ChartWrapper ref={ref} height={height} className={className} aria-label={ariaLabel}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <RechartsSankey\n data={sankeyData}\n nodeWidth={10}\n nodePadding={24}\n margin={{ top: 8, right: 8, bottom: 8, left: 8 }}\n link={{ stroke: linkStroke, strokeOpacity: 0.4 }}\n >\n {showTooltip && <Tooltip content={<ChartTooltipContent />} />}\n </RechartsSankey>\n </ResponsiveContainer>\n </ChartWrapper>\n );\n});\n","import { forwardRef, useId } from \"react\";\nimport {\n LineChart,\n Line,\n AreaChart,\n Area,\n BarChart,\n Bar,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from \"recharts\";\nimport { useResolvedToken, useChartAnimation } from \"../../lib/chart-utils\";\nimport { ChartTooltipContent } from \"./ChartPrimitives\";\nimport { useInsideChartContainer } from \"./ChartWrapper\";\n\nexport interface SparklineProps {\n data: number[];\n variant?: \"line\" | \"area\" | \"bar\";\n color?: 1 | 2 | 3 | 4 | 5 | 6;\n height?: number;\n width?: number | \"100%\";\n showTooltip?: boolean;\n curved?: boolean;\n animated?: boolean;\n \"aria-label\"?: string;\n className?: string;\n}\n\nexport const Sparkline = forwardRef<HTMLDivElement, SparklineProps>(function Sparkline({\n data,\n variant = \"line\",\n color = 1,\n height = 40,\n width = \"100%\",\n showTooltip = false,\n curved = true,\n animated,\n \"aria-label\": ariaLabel,\n className,\n}, ref) {\n const instanceId = useId();\n const isAnimated = useChartAnimation(animated);\n const insideContainer = useInsideChartContainer();\n\n const tokenName = `--ds-chart-${color}` as const;\n const softTokenName = `--ds-chart-${color}-soft` as const;\n const chartColor = useResolvedToken(tokenName);\n const softColor = useResolvedToken(softTokenName);\n const chartData = data.map((value, i) => ({ value, index: i }));\n\n const containerStyle = insideContainer\n ? { width: \"100%\", height: \"100%\" }\n : { width: typeof width === \"number\" ? `${width}px` : width, height: `${height}px` };\n\n if (!data?.length) return null;\n\n if (variant === \"bar\") {\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={chartData} margin={{ top: 0, right: 0, bottom: 0, left: 0 }}>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Bar\n dataKey=\"value\"\n fill={chartColor}\n radius={[2, 2, 0, 0]}\n isAnimationActive={isAnimated}\n />\n </BarChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n if (variant === \"area\") {\n const gradientId = `sparkline-gradient-${instanceId}-${color}`;\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <AreaChart data={chartData} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>\n <defs>\n <linearGradient id={gradientId} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={softColor} stopOpacity={1} />\n <stop offset=\"95%\" stopColor={softColor} stopOpacity={0.1} />\n </linearGradient>\n </defs>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Area\n type={curved ? \"monotone\" : \"linear\"}\n dataKey=\"value\"\n stroke={chartColor}\n strokeWidth={1.5}\n fill={`url(#${gradientId})`}\n dot={false}\n activeDot={showTooltip ? { r: 3, fill: chartColor } : false}\n isAnimationActive={isAnimated}\n />\n </AreaChart>\n </ResponsiveContainer>\n </div>\n );\n }\n\n return (\n <div ref={ref} style={containerStyle} className={className} {...(ariaLabel ? { role: \"img\", \"aria-label\": ariaLabel } : {})}>\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={chartData} margin={{ top: 2, right: 2, bottom: 2, left: 2 }}>\n <XAxis dataKey=\"index\" hide />\n <YAxis hide domain={[\"dataMin - 1\", \"dataMax + 1\"]} />\n {showTooltip && <Tooltip content={<ChartTooltipContent />} cursor={false} />}\n <Line\n type={curved ? \"monotone\" : \"linear\"}\n dataKey=\"value\"\n stroke={chartColor}\n strokeWidth={1.5}\n dot={false}\n activeDot={showTooltip ? { r: 3, fill: chartColor } : false}\n isAnimationActive={isAnimated}\n />\n </LineChart>\n </ResponsiveContainer>\n </div>\n );\n});\n","import type { ReactNode } from \"react\";\nimport { cn, GLASS_SURFACE } from \"../lib/utils\";\nimport { Skeleton } from \"./Skeleton\";\nimport { ChartContainerContext } from \"./charts/ChartWrapper\";\n\nconst HEIGHT_MAP = {\n sm: \"var(--ds-chart-height-sm)\",\n md: \"var(--ds-chart-height-md)\",\n lg: \"var(--ds-chart-height-lg)\",\n} as const;\n\ninterface ChartContainerProps {\n /**\n * \"fill\" (Sprint 25.7, C4): the container fills its row — beside a table in a grid or a flex row — with the chart\n * placed absolutely inside a minimum-height area, so it adds no height of its own: the row takes the table's height,\n * and the chart grows and shrinks with it.\n */\n height?: \"sm\" | \"md\" | \"lg\" | \"fill\";\n title?: string;\n loading?: boolean;\n emptyState?: ReactNode;\n /** \"default\" is a card surface. \"ghost\" drops surface, border, shadow and padding for charts embedded in another container. */\n variant?: \"default\" | \"ghost\";\n children: ReactNode;\n className?: string;\n}\n\nexport function ChartContainer({\n height = \"md\",\n title,\n loading = false,\n emptyState,\n variant = \"default\",\n children,\n className,\n}: ChartContainerProps) {\n const fill = height === \"fill\";\n return (\n <div\n data-card=\"\"\n className={cn(\n fill && \"h-full flex flex-col\",\n variant === \"ghost\"\n ? \"bg-transparent\"\n : cn(\n \"rounded-[var(--ds-radius-md)] p-ds-4\",\n \"bg-[var(--ds-bg-surface)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n GLASS_SURFACE,\n ),\n className\n )}\n >\n {title && (\n <p className=\"text-sm font-medium text-[var(--ds-text-primary)] mb-ds-4\">\n {title}\n </p>\n )}\n <div\n style={fill ? { minHeight: HEIGHT_MAP.sm } : { height: HEIGHT_MAP[height] }}\n className={cn(\"relative\", fill && \"flex-1\")}\n >\n {/* fill: the chart sits absolutely, so its own content never sets the row's height */}\n <div className={fill ? \"absolute inset-0\" : \"h-full\"}>\n {loading ? (\n <div className=\"flex flex-col justify-end h-full gap-ds-2 px-ds-2\">\n <div className=\"flex items-end h-full gap-ds-1\">\n {[65, 40, 80, 55, 72, 45, 60].map((h, i) => (\n <Skeleton\n key={i}\n variant=\"custom\"\n className=\"flex-1\"\n height={`${h}%`}\n />\n ))}\n </div>\n <Skeleton variant=\"text\" lines={1} className=\"w-full\" />\n </div>\n ) : children ? (\n <ChartContainerContext.Provider value={true}>\n <div className=\"h-full w-full\">{children}</div>\n </ChartContainerContext.Provider>\n ) : emptyState ? (\n <div className=\"h-full w-full flex items-center justify-center\">\n {emptyState}\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n}\n"]}
package/dist/chat.js CHANGED
@@ -1,9 +1,9 @@
1
- import { Divider, CodeBlock, Link } from './chunk-LU3YRNES.js';
2
- import './chunk-XCSTU6IJ.js';
1
+ import { Divider, CodeBlock, Link } from './chunk-XGSQOMEY.js';
2
+ import './chunk-PVTGMCVR.js';
3
3
  import './chunk-EMCSARQO.js';
4
4
  import './chunk-7Q46JXSK.js';
5
5
  import './chunk-WH2FUFAC.js';
6
- import './chunk-X4CNZFWC.js';
6
+ import './chunk-4LDYR7QP.js';
7
7
  import { cn } from './chunk-4KVFH5KC.js';
8
8
  import { memo, Children, isValidElement } from 'react';
9
9
  import Markdown from 'react-markdown';