pristine-charts 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isPlaceholder.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curry1.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curry2.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isArray.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isTransformer.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_dispatchable.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_reduced.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xfBase.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xall.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/all.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_arity.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curryN.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/curryN.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_arrayFromIterator.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_includesWith.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_functionName.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_has.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_objectIs.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isArguments.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/keys.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/type.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_equals.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/equals.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_indexOf.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_includes.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_map.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_quote.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_toISOString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_complement.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_arrayReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_filter.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isObject.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xfilter.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/filter.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/reject.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_toString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/toString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/max.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xmap.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/map.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isInteger.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_nth.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/prop.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/pluck.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curry3.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isArrayLike.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_createReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xArrayReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/bind.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xwrap.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/reduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/allPass.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/always.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/anyPass.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_aperture.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_concat.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xaperture.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/aperture.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_reduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/ap.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/liftN.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/lift.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/not.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/complement.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/cond.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/defaultTo.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xfindIndex.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/findIndex.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/head.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_identity.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/identity.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/ifElse.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_checkForMethod.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/slice.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/init.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isTypedArray.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/empty.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/isEmpty.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/isNil.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/last.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_pipe.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/tail.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/pipe.js","../src/shared/className.ts","../src/shared/option.ts","../src/shared/number.ts","../src/shared/result.ts","../src/chart-error/ChartError.tsx","../src/area-chart/AreaChart.domain.ts","../src/area-chart/AreaChart.model.ts","../src/area-chart/components/AreaChartCaption.tsx","../src/area-chart/components/AreaChartAxes.tsx","../src/area-chart/components/AreaChartFilledRegion.tsx","../src/area-chart/components/AreaChartGridLines.tsx","../src/area-chart/components/AreaChartLine.tsx","../src/area-chart/components/AreaChartPlotArea.tsx","../src/area-chart/components/AreaChartPointMarker.tsx","../src/area-chart/components/AreaChartPoints.tsx","../src/area-chart/components/AreaChartTooltip.tsx","../src/area-chart/components/AreaChartSvg.tsx","../src/area-chart/components/AreaChartFigure.tsx","../src/area-chart/AreaChart.tsx","../src/area-chart/AreaChart.defaults.ts","../src/bar-chart/BarChart.domain.ts","../src/bar-chart/BarChart.model.ts","../src/bar-chart/components/BarChartCaption.tsx","../src/bar-chart/components/BarChartAxes.tsx","../src/bar-chart/components/BarChartBar.tsx","../src/bar-chart/components/BarChartCategoryLabel.tsx","../src/bar-chart/components/BarChartValueLabel.tsx","../src/bar-chart/components/BarChartCategory.tsx","../src/bar-chart/components/BarChartCategories.tsx","../src/bar-chart/components/BarChartGridLines.tsx","../src/bar-chart/components/BarChartPlotArea.tsx","../src/bar-chart/components/BarChartTooltip.tsx","../src/bar-chart/components/BarChartSvg.tsx","../src/bar-chart/components/BarChartFigure.tsx","../src/bar-chart/BarChart.tsx","../src/bar-chart/BarChart.defaults.ts","../src/bullet-chart/BulletChart.domain.ts","../src/bullet-chart/BulletChart.model.ts","../src/bullet-chart/components/BulletChartCaption.tsx","../src/bullet-chart/components/BulletChartAxis.tsx","../src/bullet-chart/components/BulletChartBands.tsx","../src/bullet-chart/components/BulletChartCurrentBar.tsx","../src/bullet-chart/components/BulletChartTargetMarker.tsx","../src/bullet-chart/components/BulletChartValueLabels.tsx","../src/bullet-chart/components/BulletChartSvg.tsx","../src/bullet-chart/components/BulletChartFigure.tsx","../src/bullet-chart/BulletChart.tsx","../src/bullet-chart/BulletChart.defaults.ts","../src/box-plot/BoxPlot.domain.ts","../src/box-plot/BoxPlot.model.ts","../src/box-plot/components/BoxPlotCaption.tsx","../src/box-plot/components/BoxPlotAxes.tsx","../src/box-plot/components/BoxPlotDistribution.tsx","../src/box-plot/components/BoxPlotGridLines.tsx","../src/box-plot/components/BoxPlotPlotArea.tsx","../src/box-plot/components/BoxPlotTooltip.tsx","../src/box-plot/components/BoxPlotXTicks.tsx","../src/box-plot/components/BoxPlotSvg.tsx","../src/box-plot/components/BoxPlotFigure.tsx","../src/box-plot/BoxPlot.tsx","../src/box-plot/BoxPlot.defaults.ts","../src/histogram-chart/HistogramChart.domain.ts","../src/histogram-chart/HistogramChart.model.ts","../src/histogram-chart/components/HistogramChartCaption.tsx","../src/histogram-chart/components/HistogramChartAxes.tsx","../src/histogram-chart/components/HistogramChartBar.tsx","../src/histogram-chart/components/HistogramChartCountLabel.tsx","../src/histogram-chart/components/HistogramChartBin.tsx","../src/histogram-chart/components/HistogramChartBins.tsx","../src/histogram-chart/components/HistogramChartGridLines.tsx","../src/histogram-chart/components/HistogramChartPlotArea.tsx","../src/histogram-chart/components/HistogramChartTooltip.tsx","../src/histogram-chart/HistogramChart.defaults.ts","../src/histogram-chart/components/HistogramChartXTicks.tsx","../src/histogram-chart/components/HistogramChartSvg.tsx","../src/histogram-chart/components/HistogramChartFigure.tsx","../src/histogram-chart/HistogramChart.tsx","../src/kpi-card/KPICard.domain.ts","../src/kpi-card/KPICard.model.ts","../src/kpi-card/components/KPICardCaption.tsx","../src/kpi-card/components/KPICardFigure.tsx","../src/kpi-card/KPICard.tsx","../src/kpi-card/KPICard.defaults.ts","../src/shared/linearSeries.ts","../src/line-chart/LineChart.domain.ts","../src/line-chart/LineChart.model.ts","../src/line-chart/components/LineChartCaption.tsx","../src/line-chart/components/LineChartAxes.tsx","../src/line-chart/components/LineChartGridLines.tsx","../src/line-chart/components/LineChartPath.tsx","../src/line-chart/components/LineChartPlotArea.tsx","../src/line-chart/components/LineChartPointMarker.tsx","../src/line-chart/components/LineChartPoints.tsx","../src/line-chart/components/LineChartTooltip.tsx","../src/line-chart/components/LineChartSvg.tsx","../src/line-chart/components/LineChartFigure.tsx","../src/line-chart/LineChart.tsx","../src/line-chart/LineChart.defaults.ts","../src/pie-donut-chart/PieDonutChart.domain.ts","../src/pie-donut-chart/PieDonutChart.model.ts","../src/pie-donut-chart/components/PieDonutChartCaption.tsx","../src/pie-donut-chart/components/PieDonutChartLabels.tsx","../src/pie-donut-chart/components/PieDonutChartSlice.tsx","../src/pie-donut-chart/components/PieDonutChartSlices.tsx","../src/pie-donut-chart/components/PieDonutChartTooltip.tsx","../src/pie-donut-chart/components/PieDonutChartSvg.tsx","../src/pie-donut-chart/components/PieDonutChartFigure.tsx","../src/pie-donut-chart/PieDonutChart.tsx","../src/pie-donut-chart/PieDonutChart.defaults.ts","../src/progress-bar/ProgressBar.domain.ts","../src/progress-bar/ProgressBar.model.ts","../src/progress-bar/components/ProgressBarCaption.tsx","../src/progress-bar/components/ProgressBarSvg.tsx","../src/progress-bar/components/ProgressBarFigure.tsx","../src/progress-bar/ProgressBar.tsx","../src/progress-bar/ProgressBar.defaults.ts","../src/ranked-list/RankedList.domain.ts","../src/ranked-list/RankedList.model.ts","../src/ranked-list/components/RankedListCaption.tsx","../src/ranked-list/components/RankedListEntry.tsx","../src/ranked-list/components/RankedListFigure.tsx","../src/ranked-list/RankedList.tsx","../src/ranked-list/RankedList.defaults.ts","../src/scatter-plot/ScatterPlot.domain.ts","../src/scatter-plot/ScatterPlot.model.ts","../src/scatter-plot/components/ScatterPlotCaption.tsx","../src/scatter-plot/components/ScatterPlotAxes.tsx","../src/scatter-plot/components/ScatterPlotDotMarker.tsx","../src/scatter-plot/components/ScatterPlotDots.tsx","../src/scatter-plot/components/ScatterPlotGridLines.tsx","../src/scatter-plot/components/ScatterPlotPlotArea.tsx","../src/scatter-plot/components/ScatterPlotTooltip.tsx","../src/scatter-plot/components/ScatterPlotSvg.tsx","../src/scatter-plot/components/ScatterPlotFigure.tsx","../src/scatter-plot/ScatterPlot.tsx","../src/scatter-plot/ScatterPlot.defaults.ts","../src/sparkline/Sparkline.domain.ts","../src/sparkline/Sparkline.model.ts","../src/sparkline/components/SparklineCaption.tsx","../src/sparkline/components/SparklinePath.tsx","../src/sparkline/components/SparklineSvg.tsx","../src/sparkline/components/SparklineFigure.tsx","../src/sparkline/Sparkline.tsx","../src/sparkline/Sparkline.defaults.ts"],"names":["XAll","all","curryN","prop","_isArguments","contains","keys","type","b","equals","pad","_toISOString","XFilter","reject","recur","toString","max","XMap","_xmap","map","pluck","_reduce","bind","XWrap","allPass","always","anyPass","XAperture","reduce_default","ap","liftN","lift","not","cond","defaultTo","XFindIndex","findIndex","ifElse","slice","empty","isEmpty","isNil","jsx","jsxs","Fragment","isFiniteNumber","datasetValidators","validateDataset","scaleLinear","TOOLTIP_HEIGHT","TOOLTIP_MIN_WIDTH","TOOLTIP_PADDING_X","TOOLTIP_CHAR_WIDTH","VIEWBOX_PADDING","getTooltipWidth","clamp","useState","useMemo","byAscendingValue","getExtent","extent","isZeroWidthExtent","expandZeroWidthExtent","detailsFromIndex","hasOnlyFiniteNumbers","findInvalidNumberIndex","toValidatedDataset","isNumber","withNumberDefault","createD3Bin","toBar","getHitAreaY","getBinKey","isNonEmptyString","hasValidCurrentValue","toValidatedInput","inputValidators","MINIMUM_POINT_COUNT","hasEnoughPoints","getXValues","getYValues","hasOnlyFiniteXValues","hasOnlyFiniteYValues","findInvalidXValueIndex","findInvalidYValueIndex","hasUniqueXValues","findDuplicateXValue","byAscendingX","sortByX","renderLinePath","line","getXExtent","getYExtent","getCategories","getValues","hasOnlyNamedCategories","findEmptyCategoryIndex","hasUniqueCategories","findDuplicateCategory","arc","createArc","renderLabel","isPositiveFiniteNumber","useId","isPositiveInteger","hasOnlyFiniteValues","findInvalidValueIndex","hasOnlyNonEmptyLabels","byDescendingValue","computeSegments","isFirstSegmentIndex","getPointsForSegment","getPointsFromSegments"],"mappings":";;;;;;;AAAe,SAAR,eAAgC,CAAA,EAAG;AACxC,EAAA,OAAO,KAAK,IAAA,IAAQ,OAAO,MAAM,QAAA,IAAY,CAAA,CAAE,0BAA0B,CAAA,KAAM,IAAA;AACjF;;;ACQe,SAAR,QAAyB,EAAA,EAAI;AAClC,EAAA,OAAO,SAAS,GAAG,CAAA,EAAG;AACpB,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA,EAAG;AAC/C,MAAA,OAAO,EAAA;AAAA,IACT,CAAA,MAAO;AACL,MAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,IACjC;AAAA,EACF,CAAA;AACF;;;ACPe,SAAR,QAAyB,EAAA,EAAI;AAClC,EAAA,OAAO,SAAS,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG;AACvB,IAAA,QAAQ,UAAU,MAAA;AAAQ,MACxB,KAAK,CAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,CAAA;AACH,QAAA,OAAO,eAAe,CAAC,CAAA,GAAI,EAAA,GAAK,OAAA,CAAQ,SAAU,EAAA,EAAI;AACpD,UAAA,OAAO,EAAA,CAAG,GAAG,EAAE,CAAA;AAAA,QACjB,CAAC,CAAA;AAAA,MACH;AACE,QAAA,OAAO,cAAA,CAAe,CAAC,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA,GAAI,EAAA,GAAK,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI;AAC7F,UAAA,OAAO,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA,QACjB,CAAC,CAAA,GAAI,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI;AAC7C,UAAA,OAAO,EAAA,CAAG,GAAG,EAAE,CAAA;AAAA,QACjB,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAC,CAAA;AAAA;AAChB,EACF,CAAA;AACF;;;AChBA,IAAO,eAAA,GAAQ,KAAA,CAAM,OAAA,IAAW,SAAS,SAAS,GAAA,EAAK;AACrD,EAAA,OAAO,GAAA,IAAO,IAAA,IAAQ,GAAA,CAAI,MAAA,IAAU,CAAA,IAAK,OAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,KAAM,gBAAA;AACnF,CAAA;;;ACde,SAAR,eAAgC,GAAA,EAAK;AAC1C,EAAA,OAAO,GAAA,IAAO,IAAA,IAAQ,OAAO,GAAA,CAAI,mBAAmB,CAAA,KAAM,UAAA;AAC5D;;;ACgBe,SAAR,aAAA,CAA+B,WAAA,EAAa,iBAAA,EAAmB,EAAA,EAAI;AACxE,EAAA,OAAO,WAAY;AACjB,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA,OAAO,EAAA,EAAG;AAAA,IACZ;AACA,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AACxC,IAAA,IAAI,CAAC,eAAA,CAAS,GAAG,CAAA,EAAG;AAClB,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,OAAO,GAAA,GAAM,YAAY,MAAA,EAAQ;AAC/B,QAAA,IAAI,OAAO,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,MAAM,UAAA,EAAY;AAC/C,UAAA,OAAO,GAAA,CAAI,WAAA,CAAY,GAAG,CAAC,EAAE,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,EAAE,CAAC,CAAA;AAAA,QACtF;AACA,QAAA,GAAA,IAAO,CAAA;AAAA,MACT;AACA,MAAA,IAAI,cAAA,CAAe,GAAG,CAAA,EAAG;AACvB,QAAA,IAAI,UAAA,GAAa,iBAAA,CAAkB,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,EAAE,CAAC,CAAA;AAC3F,QAAA,OAAO,WAAW,GAAG,CAAA;AAAA,MACvB;AAAA,IACF;AACA,IAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,EACjC,CAAA;AACF;;;ACvCe,SAAR,SAA0B,CAAA,EAAG;AAClC,EAAA,OAAO,CAAA,IAAK,CAAA,CAAE,sBAAsB,CAAA,GAAI,CAAA,GAAI;AAAA,IAC1C,oBAAA,EAAsB,CAAA;AAAA,IACtB,sBAAA,EAAwB;AAAA,GAC1B;AACF;;;ACLA,IAAO,cAAA,GAAQ;AAAA,EACb,MAAM,WAAY;AAChB,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,mBAAmB,CAAA,EAAE;AAAA,EACtC,CAAA;AAAA,EACA,MAAA,EAAQ,SAAU,MAAA,EAAQ;AACxB,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,qBAAqB,CAAA,CAAE,MAAM,CAAA;AAAA,EAC9C;AACF,CAAA;;;ACLA,IAAI,uBAAoB,CAAA,WAAY;AAClC,EAAA,SAASA,KAAAA,CAAK,GAAG,EAAA,EAAI;AACnB,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AAAA,EACb;AACA,EAAAA,KAAAA,CAAK,SAAA,CAAU,mBAAmB,CAAA,GAAI,cAAA,CAAQ,IAAA;AAC9C,EAAAA,KAAAA,CAAK,SAAA,CAAU,qBAAqB,CAAA,GAAI,SAAU,MAAA,EAAQ;AACxD,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAA,GAAS,IAAA,CAAK,EAAA,CAAG,mBAAmB,CAAA,CAAE,QAAQ,IAAI,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,qBAAqB,CAAA,CAAE,MAAM,CAAA;AAAA,EAC9C,CAAA;AACA,EAAAA,MAAK,SAAA,CAAU,mBAAmB,CAAA,GAAI,SAAU,QAAQ,KAAA,EAAO;AAC7D,IAAA,IAAI,CAAC,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,EAAG;AAClB,MAAA,IAAA,CAAK,GAAA,GAAM,KAAA;AACX,MAAA,MAAA,GAAS,SAAS,IAAA,CAAK,EAAA,CAAG,mBAAmB,CAAA,CAAE,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,IAC/D;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAOA,KAAAA;AACT,CAAA,GAAE;AACa,SAAR,MAAuB,CAAA,EAAG;AAC/B,EAAA,OAAO,SAAU,EAAA,EAAI;AACnB,IAAA,OAAO,IAAI,IAAA,CAAK,CAAA,EAAG,EAAE,CAAA;AAAA,EACvB,CAAA;AACF;;;ACAA,IAAI,GAAA,mBAAmB,OAAA,iBAAsB,aAAA,CAAc,CAAC,KAAK,GAAG,KAAA,EAAO,SAASC,IAAAA,CAAI,EAAA,EAAI,IAAA,EAAM;AAChG,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,OAAO,GAAA,GAAM,KAAK,MAAA,EAAQ;AACxB,IAAA,IAAI,CAAC,EAAA,CAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT,CAAC,CAAC,CAAA;AACF,IAAO,WAAA,GAAQ,GAAA;;;ACtCA,SAAR,MAAA,CAAwB,GAAG,EAAA,EAAI;AAEpC,EAAA,QAAQ,CAAA;AAAG,IACT,KAAK,CAAA;AACH,MAAA,OAAO,WAAY;AACjB,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI;AACnB,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,IAAI,EAAA,EAAI;AACvB,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI;AAC3B,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI;AAC/B,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI;AACnC,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI;AACvC,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI;AAC3C,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI;AAC/C,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,CAAA;AACH,MAAA,OAAO,SAAU,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI;AACnD,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF,KAAK,EAAA;AACH,MAAA,OAAO,SAAU,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI,EAAA,EAAI;AACvD,QAAA,OAAO,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,CAAA;AAAA,IACF;AACE,MAAA,MAAM,IAAI,MAAM,6EAA6E,CAAA;AAAA;AAEnG;;;ACrCe,SAAR,OAAA,CAAyB,MAAA,EAAQ,QAAA,EAAU,EAAA,EAAI;AACpD,EAAA,OAAO,WAAY;AACjB,IAAA,IAAI,WAAW,EAAC;AAChB,IAAA,IAAI,OAAA,GAAU,CAAA;AACd,IAAA,IAAI,IAAA,GAAO,MAAA;AACX,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,IAAI,cAAA,GAAiB,KAAA;AACrB,IAAA,OAAO,WAAA,GAAc,QAAA,CAAS,MAAA,IAAU,OAAA,GAAU,UAAU,MAAA,EAAQ;AAClE,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,WAAA,GAAc,QAAA,CAAS,MAAA,KAAW,CAAC,cAAA,CAAe,QAAA,CAAS,WAAW,CAAC,CAAA,IAAK,OAAA,IAAW,SAAA,CAAU,MAAA,CAAA,EAAS;AAC5G,QAAA,MAAA,GAAS,SAAS,WAAW,CAAA;AAAA,MAC/B,CAAA,MAAO;AACL,QAAA,MAAA,GAAS,UAAU,OAAO,CAAA;AAC1B,QAAA,OAAA,IAAW,CAAA;AAAA,MACb;AACA,MAAA,QAAA,CAAS,WAAW,CAAA,GAAI,MAAA;AACxB,MAAA,IAAI,CAAC,cAAA,CAAe,MAAM,CAAA,EAAG;AAC3B,QAAA,IAAA,IAAQ,CAAA;AAAA,MACV,CAAA,MAAO;AACL,QAAA,cAAA,GAAiB,IAAA;AAAA,MACnB;AACA,MAAA,WAAA,IAAe,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,CAAC,cAAA,IAAkB,IAAA,IAAQ,IAAI,EAAA,CAAG,KAAA,CAAM,MAAM,QAAQ,CAAA,GAAI,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,IAAI,CAAA,EAAG,QAAQ,MAAA,EAAQ,QAAA,EAAU,EAAE,CAAC,CAAA;AAAA,EAC1H,CAAA;AACF;;;ACSA,IAAI,MAAA,mBAAsB,OAAA,CAAQ,SAASC,OAAAA,CAAO,QAAQ,EAAA,EAAI;AAC5D,EAAA,IAAI,WAAW,CAAA,EAAG;AAChB,IAAA,OAAO,QAAQ,EAAE,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,OAAO,MAAA,EAAQ,OAAA,CAAQ,QAAQ,EAAC,EAAG,EAAE,CAAC,CAAA;AAC/C,CAAC,CAAA;AACD,IAAO,cAAA,GAAQ,MAAA;;;ACrDA,SAAR,mBAAoC,IAAA,EAAM;AAC/C,EAAA,IAAI,OAAO,EAAC;AACZ,EAAA,IAAI,IAAA;AACJ,EAAA,OAAO,CAAA,CAAE,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,IAAA,EAAM;AACjC,IAAA,IAAA,CAAK,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,EACtB;AACA,EAAA,OAAO,IAAA;AACT;;;ACPe,SAAR,aAAA,CAA+B,IAAA,EAAM,CAAA,EAAG,IAAA,EAAM;AACnD,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,EAAA,OAAO,MAAM,GAAA,EAAK;AAChB,IAAA,IAAI,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;;;ACVe,SAAR,cAA+B,CAAA,EAAG;AAEvC,EAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,MAAM,iBAAiB,CAAA;AAC7C,EAAA,OAAO,KAAA,IAAS,IAAA,GAAO,EAAA,GAAK,KAAA,CAAM,CAAC,CAAA;AACrC;;;ACJe,SAAR,IAAA,CAAsBC,OAAM,GAAA,EAAK;AACtC,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,KAAKA,KAAI,CAAA;AACvD;;;ACDA,SAAS,SAAA,CAAU,GAAG,CAAA,EAAG;AAEvB,EAAA,IAAI,MAAM,CAAA,EAAG;AAGX,IAAA,OAAO,CAAA,KAAM,CAAA,IAAK,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA;AAAA,EAClC,CAAA,MAAO;AAEL,IAAA,OAAO,CAAA,KAAM,KAAK,CAAA,KAAM,CAAA;AAAA,EAC1B;AACF;AACA,IAAO,mBAAQ,OAAO,MAAA,CAAO,EAAA,KAAO,UAAA,GAAa,OAAO,EAAA,GAAK,SAAA;;;ACX7D,IAAI,QAAA,GAAW,OAAO,SAAA,CAAU,QAAA;AAChC,IAAI,+BAA4B,CAAA,WAAY;AAC1C,EAAA,OAAO,SAAS,IAAA,CAAK,SAAS,MAAM,oBAAA,GAAuB,SAASC,cAAa,CAAA,EAAG;AAClF,IAAA,OAAO,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,oBAAA;AAAA,EAC9B,CAAA,GAAI,SAASA,aAAAA,CAAa,CAAA,EAAG;AAC3B,IAAA,OAAO,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EACzB,CAAA;AACF,CAAA,GAAE;AACF,IAAO,mBAAA,GAAQ,YAAA;;;ACJf,IAAI,aAAa,iBAAe;AAAA,EAC9B,QAAA,EAAU;AACZ,CAAA,CAAE,qBAAqB,UAAU,CAAA;AACjC,IAAI,kBAAA,GAAqB,CAAC,aAAA,EAAe,SAAA,EAAW,iBAAiB,UAAA,EAAY,sBAAA,EAAwB,kBAAkB,gBAAgB,CAAA;AAE3I,IAAI,iCAA8B,CAAA,WAAY;AAG5C,EAAA,OAAO,SAAA,CAAU,qBAAqB,QAAQ,CAAA;AAChD,CAAA,GAAE;AACF,IAAI,QAAA,GAAW,SAASC,SAAAA,CAAS,IAAA,EAAM,IAAA,EAAM;AAC3C,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,OAAO,GAAA,GAAM,KAAK,MAAA,EAAQ;AACxB,IAAA,IAAI,IAAA,CAAK,GAAG,CAAA,KAAM,IAAA,EAAM;AACtB,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT,CAAA;AAoBA,IAAI,IAAA,GAAO,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,IAAc,CAAC,cAAA,mBAA8B,OAAA,CAAQ,SAASC,KAAAA,CAAK,GAAA,EAAK;AACxG,EAAA,OAAO,MAAA,CAAO,GAAG,CAAA,KAAM,GAAA,GAAM,EAAC,GAAI,MAAA,CAAO,KAAK,GAAG,CAAA;AACnD,CAAC,CAAA,mBAAiB,OAAA,CAAQ,SAASA,KAAAA,CAAK,GAAA,EAAK;AAC3C,EAAA,IAAI,MAAA,CAAO,GAAG,CAAA,KAAM,GAAA,EAAK;AACvB,IAAA,OAAO,EAAC;AAAA,EACV;AACA,EAAA,IAAIH,KAAAA,EAAM,IAAA;AACV,EAAA,IAAI,KAAK,EAAC;AACV,EAAA,IAAI,eAAA,GAAkB,cAAA,IAAkB,mBAAA,CAAa,GAAG,CAAA;AACxD,EAAA,KAAKA,SAAQ,GAAA,EAAK;AAChB,IAAA,IAAI,KAAKA,KAAAA,EAAM,GAAG,MAAM,CAAC,eAAA,IAAmBA,UAAS,QAAA,CAAA,EAAW;AAC9D,MAAA,EAAA,CAAG,EAAA,CAAG,MAAM,CAAA,GAAIA,KAAAA;AAAA,IAClB;AAAA,EACF;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAA,GAAO,mBAAmB,MAAA,GAAS,CAAA;AACnC,IAAA,OAAO,QAAQ,CAAA,EAAG;AAChB,MAAAA,KAAAA,GAAO,mBAAmB,IAAI,CAAA;AAC9B,MAAA,IAAI,IAAA,CAAKA,OAAM,GAAG,CAAA,IAAK,CAAC,QAAA,CAAS,EAAA,EAAIA,KAAI,CAAA,EAAG;AAC1C,QAAA,EAAA,CAAG,EAAA,CAAG,MAAM,CAAA,GAAIA,KAAAA;AAAA,MAClB;AACA,MAAA,IAAA,IAAQ,CAAA;AAAA,IACV;AAAA,EACF;AACA,EAAA,OAAO,EAAA;AACT,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;ACzCf,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAASI,KAAAA,CAAK,GAAA,EAAK;AACjD,EAAA,OAAO,GAAA,KAAQ,IAAA,GAAO,MAAA,GAAS,GAAA,KAAQ,SAAY,WAAA,GAAc,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAClH,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;ACbf,SAAS,kBAAA,CAAmB,SAAA,EAAW,SAAA,EAAW,MAAA,EAAQ,MAAA,EAAQ;AAChE,EAAA,IAAI,CAAA,GAAI,mBAAmB,SAAS,CAAA;AACpC,EAAA,IAAI,CAAA,GAAI,mBAAmB,SAAS,CAAA;AACpC,EAAA,SAAS,EAAA,CAAG,IAAI,EAAA,EAAI;AAClB,IAAA,OAAO,OAAA,CAAQ,IAAI,EAAA,EAAI,MAAA,CAAO,OAAM,EAAG,MAAA,CAAO,OAAO,CAAA;AAAA,EACvD;AAGA,EAAA,OAAO,CAAC,aAAA,CAAc,SAAUC,EAAAA,EAAG,KAAA,EAAO;AACxC,IAAA,OAAO,CAAC,aAAA,CAAc,EAAA,EAAI,KAAA,EAAOA,EAAC,CAAA;AAAA,EACpC,CAAA,EAAG,GAAG,CAAC,CAAA;AACT;AACe,SAAR,OAAA,CAAyB,CAAA,EAAG,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ;AACpD,EAAA,IAAI,gBAAA,CAAU,CAAA,EAAG,CAAC,CAAA,EAAG;AACnB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,GAAQ,aAAK,CAAC,CAAA;AAClB,EAAA,IAAI,KAAA,KAAU,YAAA,CAAK,CAAC,CAAA,EAAG;AACrB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,EAAE,qBAAqB,CAAA,KAAM,cAAc,OAAO,CAAA,CAAE,qBAAqB,CAAA,KAAM,UAAA,EAAY;AACpG,IAAA,OAAO,OAAO,CAAA,CAAE,qBAAqB,MAAM,UAAA,IAAc,CAAA,CAAE,qBAAqB,CAAA,CAAE,CAAC,CAAA,IAAK,OAAO,EAAE,qBAAqB,CAAA,KAAM,cAAc,CAAA,CAAE,qBAAqB,EAAE,CAAC,CAAA;AAAA,EACtK;AACA,EAAA,IAAI,OAAO,CAAA,CAAE,MAAA,KAAW,cAAc,OAAO,CAAA,CAAE,WAAW,UAAA,EAAY;AACpE,IAAA,OAAO,OAAO,CAAA,CAAE,MAAA,KAAW,UAAA,IAAc,EAAE,MAAA,CAAO,CAAC,CAAA,IAAK,OAAO,CAAA,CAAE,MAAA,KAAW,UAAA,IAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EACtG;AACA,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,WAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,IAAI,OAAO,EAAE,WAAA,KAAgB,UAAA,IAAc,cAAc,CAAA,CAAE,WAAW,MAAM,SAAA,EAAW;AACrF,QAAA,OAAO,CAAA,KAAM,CAAA;AAAA,MACf;AACA,MAAA;AAAA,IACF,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,QAAA;AACH,MAAA,IAAI,EAAE,OAAO,CAAA,KAAM,OAAO,CAAA,IAAK,gBAAA,CAAU,CAAA,CAAE,OAAA,EAAQ,EAAG,CAAA,CAAE,OAAA,EAAS,CAAA,CAAA,EAAI;AACnE,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF,KAAK,MAAA;AACH,MAAA,IAAI,CAAC,iBAAU,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,EAAS,CAAA,EAAG;AACxC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA;AAAA,IACF,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,IAAA,KAAS,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,YAAY,CAAA,CAAE,OAAA;AAAA,IAC9C,KAAK,QAAA;AACH,MAAA,IAAI,EAAE,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,EAAE,MAAA,KAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,UAAA,KAAe,CAAA,CAAE,cAAc,CAAA,CAAE,SAAA,KAAc,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,MAAA,KAAW,EAAE,MAAA,IAAU,CAAA,CAAE,OAAA,KAAY,CAAA,CAAE,OAAA,CAAA,EAAU;AACzK,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA;AAAA;AAEJ,EAAA,IAAI,GAAA,GAAM,OAAO,MAAA,GAAS,CAAA;AAC1B,EAAA,OAAO,OAAO,CAAA,EAAG;AACf,IAAA,IAAI,MAAA,CAAO,GAAG,CAAA,KAAM,CAAA,EAAG;AACrB,MAAA,OAAO,MAAA,CAAO,GAAG,CAAA,KAAM,CAAA;AAAA,IACzB;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,KAAA;AACH,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM;AACrB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,mBAAmB,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,OAAA,IAAW,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC5F,KAAK,KAAA;AACH,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,CAAA,CAAE,IAAA,EAAM;AACrB,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO,mBAAmB,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAAA,IAC1F,KAAK,WAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,SAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,MAAA;AAAA,IACL,KAAK,OAAA;AAAA,IACL,KAAK,QAAA;AAAA,IACL,KAAK,WAAA;AAAA,IACL,KAAK,YAAA;AAAA,IACL,KAAK,mBAAA;AAAA,IACL,KAAK,YAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,YAAA;AAAA,IACL,KAAK,aAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,cAAA;AAAA,IACL,KAAK,aAAA;AACH,MAAA;AAAA,IACF;AAEE,MAAA,OAAO,KAAA;AAAA;AAEX,EAAA,IAAI,KAAA,GAAQ,aAAK,CAAC,CAAA;AAClB,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,YAAA,CAAK,CAAC,EAAE,MAAA,EAAQ;AACnC,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACtC,EAAA,IAAI,cAAA,GAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACtC,EAAA,GAAA,GAAM,MAAM,MAAA,GAAS,CAAA;AACrB,EAAA,OAAO,OAAO,CAAA,EAAG;AACf,IAAA,IAAI,GAAA,GAAM,MAAM,GAAG,CAAA;AACnB,IAAA,IAAI,EAAE,IAAA,CAAK,GAAA,EAAK,CAAC,KAAK,OAAA,CAAQ,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,EAAG,cAAA,EAAgB,cAAc,CAAA,CAAA,EAAI;AAC9E,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;;;ACtGA,IAAI,MAAA,mBAAsB,OAAA,CAAQ,SAASC,OAAAA,CAAO,GAAG,CAAA,EAAG;AACtD,EAAA,OAAO,QAAQ,CAAA,EAAG,CAAA,EAAG,EAAC,EAAG,EAAE,CAAA;AAC7B,CAAC,CAAA;AACD,IAAO,cAAA,GAAQ,MAAA;;;AC9BA,SAAR,QAAA,CAA0B,IAAA,EAAM,CAAA,EAAG,GAAA,EAAK;AAC7C,EAAA,IAAI,GAAA,EAAK,IAAA;AAET,EAAA,IAAI,OAAO,IAAA,CAAK,OAAA,KAAY,UAAA,EAAY;AACtC,IAAA,QAAQ,OAAO,CAAA;AAAG,MAChB,KAAK,QAAA;AACH,QAAA,IAAI,MAAM,CAAA,EAAG;AAEX,UAAA,GAAA,GAAM,CAAA,GAAI,CAAA;AACV,UAAA,OAAO,GAAA,GAAM,KAAK,MAAA,EAAQ;AACxB,YAAA,IAAA,GAAO,KAAK,GAAG,CAAA;AACf,YAAA,IAAI,IAAA,KAAS,CAAA,IAAK,CAAA,GAAI,IAAA,KAAS,GAAA,EAAK;AAClC,cAAA,OAAO,GAAA;AAAA,YACT;AACA,YAAA,GAAA,IAAO,CAAA;AAAA,UACT;AACA,UAAA,OAAO,EAAA;AAAA,QACT,CAAA,MAAA,IAAW,MAAM,CAAA,EAAG;AAElB,UAAA,OAAO,GAAA,GAAM,KAAK,MAAA,EAAQ;AACxB,YAAA,IAAA,GAAO,KAAK,GAAG,CAAA;AACf,YAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,cAAA,OAAO,GAAA;AAAA,YACT;AACA,YAAA,GAAA,IAAO,CAAA;AAAA,UACT;AACA,UAAA,OAAO,EAAA;AAAA,QACT;AAEA,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA;AAAA,MAG5B,KAAK,QAAA;AAAA,MACL,KAAK,SAAA;AAAA,MACL,KAAK,UAAA;AAAA,MACL,KAAK,WAAA;AACH,QAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA,MAC5B,KAAK,QAAA;AACH,QAAA,IAAI,MAAM,IAAA,EAAM;AAEd,UAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAA,EAAG,GAAG,CAAA;AAAA,QAC5B;AAAA;AACJ,EACF;AAEA,EAAA,OAAO,GAAA,GAAM,KAAK,MAAA,EAAQ;AACxB,IAAA,IAAI,cAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAG,CAAC,CAAA,EAAG;AACxB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAA;AACT;;;ACpDe,SAAR,SAAA,CAA2B,GAAG,IAAA,EAAM;AACzC,EAAA,OAAO,QAAA,CAAS,IAAA,EAAM,CAAA,EAAG,CAAC,CAAA,IAAK,CAAA;AACjC;;;ACHe,SAAR,IAAA,CAAsB,IAAI,OAAA,EAAS;AACxC,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAM,OAAA,CAAQ,MAAA;AAClB,EAAA,IAAI,MAAA,GAAS,MAAM,GAAG,CAAA;AACtB,EAAA,OAAO,MAAM,GAAA,EAAK;AAChB,IAAA,MAAA,CAAO,GAAG,CAAA,GAAI,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC7B,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;;;ACTe,SAAR,OAAwB,CAAA,EAAG;AAChC,EAAA,IAAI,OAAA,GAAU,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,MAAM,CAAA,CAAE,OAAA,CAAQ,OAAA,EAAS,KAAK,CAAA,CAC5D,OAAA,CAAQ,KAAA,EAAO,KAAK,EAAE,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA,CAAE,QAAQ,KAAA,EAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,KAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,KAAK,CAAA;AACnI,EAAA,OAAO,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA,GAAI,GAAA;AAC9C;;;ACDA,IAAI,GAAA,GAAM,SAASC,IAAAA,CAAI,CAAA,EAAG;AACxB,EAAA,OAAA,CAAQ,CAAA,GAAI,EAAA,GAAK,GAAA,GAAM,EAAA,IAAM,CAAA;AAC/B,CAAA;AACA,IAAI,YAAA,GAAe,OAAO,IAAA,CAAK,SAAA,CAAU,gBAAgB,UAAA,GAAa,SAASC,cAAa,CAAA,EAAG;AAC7F,EAAA,OAAO,EAAE,WAAA,EAAY;AACvB,CAAA,GAAI,SAASA,cAAa,CAAA,EAAG;AAC3B,EAAA,OAAO,CAAA,CAAE,gBAAe,GAAI,GAAA,GAAM,IAAI,CAAA,CAAE,WAAA,KAAgB,CAAC,CAAA,GAAI,MAAM,GAAA,CAAI,CAAA,CAAE,YAAY,CAAA,GAAI,MAAM,GAAA,CAAI,CAAA,CAAE,aAAa,CAAA,GAAI,MAAM,GAAA,CAAI,CAAA,CAAE,eAAe,CAAA,GAAI,MAAM,GAAA,CAAI,CAAA,CAAE,eAAe,CAAA,GAAI,OAAO,CAAA,CAAE,kBAAA,KAAuB,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,GAAA;AACrP,CAAA;AACA,IAAO,mBAAA,GAAQ,YAAA;;;ACXA,SAAR,YAA6B,CAAA,EAAG;AACrC,EAAA,OAAO,WAAY;AACjB,IAAA,OAAO,CAAC,CAAA,CAAE,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA;AAAA,EACjC,CAAA;AACF;;;ACJe,SAAR,YAAA,CAA8B,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM;AACvD,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,SAAS,IAAA,CAAK,MAAA;AAClB,EAAA,OAAO,QAAQ,MAAA,EAAQ;AACrB,IAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AAC9B,IAAA,KAAA,IAAS,CAAA;AAAA,EACX;AACA,EAAA,OAAO,GAAA;AACT;;;ACRe,SAAR,OAAA,CAAyB,IAAI,IAAA,EAAM;AACxC,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,EAAA,IAAI,SAAS,EAAC;AACd,EAAA,OAAO,MAAM,GAAA,EAAK;AAChB,IAAA,IAAI,EAAA,CAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG;AACjB,MAAA,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA,CAAK,GAAG,CAAA;AAAA,IAClC;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;;;ACXe,SAAR,UAA2B,CAAA,EAAG;AACnC,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,iBAAA;AAC/C;;;ACDA,IAAI,0BAAuB,CAAA,WAAY;AACrC,EAAA,SAASC,QAAAA,CAAQ,GAAG,EAAA,EAAI;AACtB,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAAA,QAAAA,CAAQ,SAAA,CAAU,mBAAmB,CAAA,GAAI,cAAA,CAAQ,IAAA;AACjD,EAAAA,QAAAA,CAAQ,SAAA,CAAU,qBAAqB,CAAA,GAAI,cAAA,CAAQ,MAAA;AACnD,EAAAA,SAAQ,SAAA,CAAU,mBAAmB,CAAA,GAAI,SAAU,QAAQ,KAAA,EAAO;AAChE,IAAA,OAAO,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,GAAI,IAAA,CAAK,GAAG,mBAAmB,CAAA,CAAE,MAAA,EAAQ,KAAK,CAAA,GAAI,MAAA;AAAA,EACvE,CAAA;AACA,EAAA,OAAOA,QAAAA;AACT,CAAA,GAAE;AACa,SAAR,SAA0B,CAAA,EAAG;AAClC,EAAA,OAAO,SAAU,EAAA,EAAI;AACnB,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAA,EAAG,EAAE,CAAA;AAAA,EAC1B,CAAA;AACF;;;ACmBA,IAAI,MAAA,mBAAsB,OAAA,iBAAsB,aAAA,CAAc,CAAC,qBAAA,EAAuB,QAAQ,CAAA,EAAG,QAAA,EAAU,SAAU,IAAA,EAAM,UAAA,EAAY;AACrI,EAAA,OAAO,UAAU,UAAU,CAAA,GAAI,YAAA,CAAa,SAAU,KAAK,GAAA,EAAK;AAC9D,IAAA,IAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAC,CAAA,EAAG;AACzB,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,UAAA,CAAW,GAAG,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,EAAC,EAAG,YAAA,CAAK,UAAU,CAAC,CAAA;AAAA;AAAA,IAEvB,OAAA,CAAQ,MAAM,UAAU;AAAA,GAAA;AAC1B,CAAC,CAAC,CAAA;AACF,IAAO,cAAA,GAAQ,MAAA;;;AClBf,IAAI,MAAA,mBAAsB,OAAA,CAAQ,SAASC,OAAAA,CAAO,MAAM,UAAA,EAAY;AAClE,EAAA,OAAO,cAAA,CAAO,WAAA,CAAY,IAAI,CAAA,EAAG,UAAU,CAAA;AAC7C,CAAC,CAAA;AACD,IAAO,cAAA,GAAQ,MAAA;;;ACzBA,SAAR,SAAA,CAA2B,GAAG,IAAA,EAAM;AACzC,EAAA,IAAI,KAAA,GAAQ,SAASC,MAAAA,CAAM,CAAA,EAAG;AAC5B,IAAA,IAAI,EAAA,GAAK,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AACxB,IAAA,OAAO,UAAU,CAAA,EAAG,EAAE,IAAI,YAAA,GAAe,SAAA,CAAU,GAAG,EAAE,CAAA;AAAA,EAC1D,CAAA;AAGA,EAAA,IAAI,QAAA,GAAW,SAAU,GAAA,EAAKR,KAAAA,EAAM;AAClC,IAAA,OAAO,IAAA,CAAK,SAAU,CAAA,EAAG;AACvB,MAAA,OAAO,OAAO,CAAC,CAAA,GAAI,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,IACxC,CAAA,EAAGA,KAAAA,CAAK,KAAA,EAAM,CAAE,MAAM,CAAA;AAAA,EACxB,CAAA;AACA,EAAA,QAAQ,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA;AAAG,IACzC,KAAK,oBAAA;AACH,MAAA,OAAO,uCAAuC,IAAA,CAAK,KAAA,EAAO,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,IAAA;AAAA,IAC5E,KAAK,gBAAA;AACH,MAAA,OAAO,GAAA,GAAM,IAAA,CAAK,KAAA,EAAO,CAAC,CAAA,CAAE,OAAO,QAAA,CAAS,CAAA,EAAG,cAAA,CAAO,SAAU,CAAA,EAAG;AACjE,QAAA,OAAO,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MACvB,CAAA,EAAG,aAAK,CAAC,CAAC,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AAAA,IAC7B,KAAK,kBAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,cAAA,GAAiB,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,CAAA,GAAI,GAAA,GAAM,CAAA,CAAE,QAAA,EAAS;AAAA,IACxF,KAAK,eAAA;AACH,MAAA,OAAO,WAAA,IAAe,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,CAAA,GAAI,KAAA,CAAM,GAAG,CAAA,GAAI,MAAA,CAAO,mBAAA,CAAa,CAAC,CAAC,CAAA,CAAA,GAAK,GAAA;AAAA,IACrF,KAAK,cAAA;AACH,MAAA,OAAO,aAAa,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAC,CAAA,GAAI,GAAA;AAAA,IAC7C,KAAK,eAAA;AACH,MAAA,OAAO,MAAA;AAAA,IACT,KAAK,iBAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,aAAA,GAAgB,KAAA,CAAM,EAAE,OAAA,EAAS,CAAA,GAAI,GAAA,GAAM,IAAI,CAAA,KAAM,CAAA,QAAA,GAAY,IAAA,GAAO,CAAA,CAAE,SAAS,EAAE,CAAA;AAAA,IACtH,KAAK,cAAA;AACH,MAAA,OAAO,UAAA,GAAa,MAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,CAAE,IAAA,EAAM,CAAA,GAAI,GAAA;AAAA,IACpD,KAAK,iBAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,aAAA,GAAgB,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,CAAA,GAAI,GAAA,GAAM,MAAA,CAAO,CAAC,CAAA;AAAA,IACpF,KAAK,oBAAA;AACH,MAAA,OAAO,WAAA;AAAA,IACT;AACE,MAAA,IAAI,OAAO,CAAA,CAAE,QAAA,KAAa,UAAA,EAAY;AACpC,QAAA,IAAI,IAAA,GAAO,EAAE,QAAA,EAAS;AACtB,QAAA,IAAI,SAAS,iBAAA,EAAmB;AAC9B,UAAA,OAAO,IAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,OAAO,GAAA,GAAM,SAAS,CAAA,EAAG,YAAA,CAAK,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,GAAA;AAAA;AAErD;;;ACXA,IAAIS,SAAAA,mBAAwB,OAAA,CAAQ,SAASA,SAAAA,CAAS,GAAA,EAAK;AACzD,EAAA,OAAO,SAAA,CAAU,GAAA,EAAK,EAAE,CAAA;AAC1B,CAAC,CAAA;AACD,IAAO,gBAAA,GAAQA,SAAAA;;;ACtBf,IAAI,GAAA,mBAAmB,OAAA,CAAQ,SAASC,IAAAA,CAAI,GAAG,CAAA,EAAG;AAChD,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,SAAS,OAAA,CAAQ,GAAG,CAAA,EAAG;AACrB,IAAA,IAAI,CAAA,GAAI,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG;AACnB,MAAA,OAAO,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAA,GAAa,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAC7B,EAAA,IAAI,eAAe,MAAA,EAAW;AAC5B,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,GAAY,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,CAAC,CAAA;AAC1C,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,OAAO,SAAA,KAAc,OAAO,CAAA,GAAI,CAAA,GAAI,CAAA;AAAA,EACtC;AACA,EAAA,IAAI,OAAA,GAAU,iBAAS,CAAC,CAAA;AACxB,EAAA,IAAI,gBAAA,GAAmB,OAAA,CAAQ,OAAA,EAAS,gBAAA,CAAS,CAAC,CAAC,CAAA;AACnD,EAAA,IAAI,qBAAqB,MAAA,EAAW;AAClC,IAAA,OAAO,gBAAA,KAAqB,UAAU,CAAA,GAAI,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,CAAA;AACT,CAAC,CAAA;AACD,IAAO,WAAA,GAAQ,GAAA;;;AC5Cf,IAAI,uBAAoB,CAAA,WAAY;AAClC,EAAA,SAASC,KAAAA,CAAK,GAAG,EAAA,EAAI;AACnB,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AAAA,EACX;AACA,EAAAA,KAAAA,CAAK,SAAA,CAAU,mBAAmB,CAAA,GAAI,cAAA,CAAQ,IAAA;AAC9C,EAAAA,KAAAA,CAAK,SAAA,CAAU,qBAAqB,CAAA,GAAI,cAAA,CAAQ,MAAA;AAChD,EAAAA,MAAK,SAAA,CAAU,mBAAmB,CAAA,GAAI,SAAU,QAAQ,KAAA,EAAO;AAC7D,IAAA,OAAO,IAAA,CAAK,GAAG,mBAAmB,CAAA,CAAE,QAAQ,IAAA,CAAK,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,EAC3D,CAAA;AACA,EAAA,OAAOA,KAAAA;AACT,CAAA,GAAE;AACF,IAAI,KAAA,GAAQ,SAASC,MAAAA,CAAM,CAAA,EAAG;AAC5B,EAAA,OAAO,SAAU,EAAA,EAAI;AACnB,IAAA,OAAO,IAAI,IAAA,CAAK,CAAA,EAAG,EAAE,CAAA;AAAA,EACvB,CAAA;AACF,CAAA;AACA,IAAO,YAAA,GAAQ,KAAA;;;ACyBf,IAAI,GAAA,mBAAmB,OAAA,iBAAsB,aAAA,CAAc,CAAC,kBAAA,EAAoB,KAAK,CAAA,EAAG,YAAA,EAAO,SAASC,IAAAA,CAAI,EAAA,EAAI,OAAA,EAAS;AACvH,EAAA,QAAQ,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA;AAAG,IAC/C,KAAK,mBAAA;AACH,MAAA,OAAO,cAAA,CAAO,OAAA,CAAQ,MAAA,EAAQ,WAAY;AACxC,QAAA,OAAO,GAAG,IAAA,CAAK,IAAA,EAAM,QAAQ,KAAA,CAAM,IAAA,EAAM,SAAS,CAAC,CAAA;AAAA,MACrD,CAAC,CAAA;AAAA,IACH,KAAK,iBAAA;AACH,MAAA,OAAO,YAAA,CAAa,SAAU,GAAA,EAAK,GAAA,EAAK;AACtC,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAC,CAAA;AAC1B,QAAA,OAAO,GAAA;AAAA,MACT,CAAA,EAAG,EAAC,EAAG,YAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACtB;AACE,MAAA,OAAO,IAAA,CAAK,IAAI,OAAO,CAAA;AAAA;AAE7B,CAAC,CAAC,CAAA;AACF,IAAO,WAAA,GAAQ,GAAA;;;AClDf,IAAO,iBAAA,GAAQ,MAAA,CAAO,SAAA,IAAa,SAAS,WAAW,CAAA,EAAG;AACxD,EAAA,OAAO,KAAK,CAAA,KAAM,CAAA;AACpB,CAAA;;;ACVe,SAAR,UAA2B,CAAA,EAAG;AACnC,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,iBAAA;AAC/C;;;ACDe,SAAR,IAAA,CAAsB,QAAQ,IAAA,EAAM;AACzC,EAAA,IAAI,GAAA,GAAM,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,SAAS,MAAA,GAAS,MAAA;AAC9C,EAAA,OAAO,SAAA,CAAU,IAAI,CAAA,GAAI,IAAA,CAAK,OAAO,GAAG,CAAA,GAAI,KAAK,GAAG,CAAA;AACtD;;;ACsBA,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAAShB,KAAAA,CAAK,GAAG,GAAA,EAAK;AACpD,EAAA,IAAI,OAAO,IAAA,EAAM;AACf,IAAA;AAAA,EACF;AACA,EAAA,OAAO,iBAAA,CAAW,CAAC,CAAA,GAAI,IAAA,CAAK,GAAG,GAAG,CAAA,GAAI,IAAI,CAAC,CAAA;AAC7C,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;ACDf,IAAI,KAAA,mBAAqB,OAAA,CAAQ,SAASiB,MAAAA,CAAM,GAAG,IAAA,EAAM;AACvD,EAAA,OAAO,WAAA,CAAI,YAAA,CAAK,CAAC,CAAA,EAAG,IAAI,CAAA;AAC1B,CAAC,CAAA;AACD,IAAO,aAAA,GAAQ,KAAA;;;ACtBA,SAAR,QAAyB,EAAA,EAAI;AAClC,EAAA,OAAO,SAAS,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG;AAC1B,IAAA,QAAQ,UAAU,MAAA;AAAQ,MACxB,KAAK,CAAA;AACH,QAAA,OAAO,EAAA;AAAA,MACT,KAAK,CAAA;AACH,QAAA,OAAO,eAAe,CAAC,CAAA,GAAI,KAAK,OAAA,CAAQ,SAAU,IAAI,EAAA,EAAI;AACxD,UAAA,OAAO,EAAA,CAAG,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,QACrB,CAAC,CAAA;AAAA,MACH,KAAK,CAAA;AACH,QAAA,OAAO,cAAA,CAAe,CAAC,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA,GAAI,EAAA,GAAK,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,IAAI,EAAA,EAAI;AACjG,UAAA,OAAO,EAAA,CAAG,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB,CAAC,IAAI,cAAA,CAAe,CAAC,IAAI,OAAA,CAAQ,SAAU,IAAI,EAAA,EAAI;AACjD,UAAA,OAAO,EAAA,CAAG,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,QACrB,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI;AACzB,UAAA,OAAO,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AAAA,QACpB,CAAC,CAAA;AAAA,MACH;AACE,QAAA,OAAO,eAAe,CAAC,CAAA,IAAK,eAAe,CAAC,CAAA,IAAK,eAAe,CAAC,CAAA,GAAI,KAAK,cAAA,CAAe,CAAC,KAAK,cAAA,CAAe,CAAC,IAAI,OAAA,CAAQ,SAAU,IAAI,EAAA,EAAI;AAC3I,UAAA,OAAO,EAAA,CAAG,EAAA,EAAI,EAAA,EAAI,CAAC,CAAA;AAAA,QACrB,CAAC,CAAA,GAAI,cAAA,CAAe,CAAC,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI,EAAA,EAAI;AACtE,UAAA,OAAO,EAAA,CAAG,EAAA,EAAI,CAAA,EAAG,EAAE,CAAA;AAAA,QACrB,CAAC,CAAA,GAAI,cAAA,CAAe,CAAC,CAAA,IAAK,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI,EAAA,EAAI;AACtE,UAAA,OAAO,EAAA,CAAG,CAAA,EAAG,EAAA,EAAI,EAAE,CAAA;AAAA,QACrB,CAAC,CAAA,GAAI,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI;AAC7C,UAAA,OAAO,EAAA,CAAG,EAAA,EAAI,CAAA,EAAG,CAAC,CAAA;AAAA,QACpB,CAAC,CAAA,GAAI,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI;AAC7C,UAAA,OAAO,EAAA,CAAG,CAAA,EAAG,EAAA,EAAI,CAAC,CAAA;AAAA,QACpB,CAAC,CAAA,GAAI,cAAA,CAAe,CAAC,CAAA,GAAI,OAAA,CAAQ,SAAU,EAAA,EAAI;AAC7C,UAAA,OAAO,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA;AAAA,QACpB,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA;AACnB,EACF,CAAA;AACF;;;ACvBA,IAAI,YAAA,mBAA4B,OAAA,CAAQ,SAAS,WAAA,CAAY,CAAA,EAAG;AAC9D,EAAA,IAAI,eAAA,CAAS,CAAC,CAAA,EAAG;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,SAAA,CAAU,CAAC,CAAA,EAAG;AAChB,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChB,IAAA,OAAO,CAAA,CAAE,eAAe,CAAC,CAAA,IAAK,EAAE,cAAA,CAAe,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,KAAA;AACT,CAAC,CAAA;AACD,IAAO,mBAAA,GAAQ,YAAA;;;AC1Cf,IAAI,WAAA,GAAc,OAAO,MAAA,KAAW,WAAA,GAAc,OAAO,QAAA,GAAW,YAAA;AACrD,SAAR,aAAA,CAA+B,WAAA,EAAa,YAAA,EAAc,cAAA,EAAgB;AAC/E,EAAA,OAAO,SAASC,QAAAA,CAAQ,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM;AACrC,IAAA,IAAI,mBAAA,CAAa,IAAI,CAAA,EAAG;AACtB,MAAA,OAAO,WAAA,CAAY,EAAA,EAAI,GAAA,EAAK,IAAI,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,qBAAqB,CAAA,KAAM,UAAA,EAAY;AACrD,MAAA,OAAO,YAAA,CAAa,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,qBAAqB,CAAA;AAAA,IAC1D;AACA,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,IAAK,IAAA,EAAM;AAC7B,MAAA,OAAO,eAAe,EAAA,EAAI,GAAA,EAAK,IAAA,CAAK,WAAW,GAAG,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA,KAAS,UAAA,EAAY;AACnC,MAAA,OAAO,cAAA,CAAe,EAAA,EAAI,GAAA,EAAK,IAAI,CAAA;AAAA,IACrC;AACA,IAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,UAAA,EAAY;AACrC,MAAA,OAAO,YAAA,CAAa,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM,QAAQ,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,IAAI,UAAU,wCAAwC,CAAA;AAAA,EAC9D,CAAA;AACF;;;ACxBe,SAAR,aAAA,CAA+B,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM;AACnD,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,EAAA,OAAO,MAAM,GAAA,EAAK;AAChB,IAAA,GAAA,GAAM,GAAG,mBAAmB,CAAA,CAAE,GAAA,EAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC5C,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,sBAAsB,CAAA,EAAG;AACtC,MAAA,GAAA,GAAM,IAAI,oBAAoB,CAAA;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAA,CAAG,qBAAqB,CAAA,CAAE,GAAG,CAAA;AACtC;;;ACaA,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAASC,KAAAA,CAAK,IAAI,OAAA,EAAS;AACzD,EAAA,OAAO,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,WAAY;AACnC,IAAA,OAAO,EAAA,CAAG,KAAA,CAAM,OAAA,EAAS,SAAS,CAAA;AAAA,EACpC,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;AC3Bf,SAAS,gBAAA,CAAiB,EAAA,EAAI,GAAA,EAAK,IAAA,EAAM;AACvC,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,EAAK;AACrB,EAAA,OAAO,CAAC,KAAK,IAAA,EAAM;AACjB,IAAA,GAAA,GAAM,EAAA,CAAG,mBAAmB,CAAA,CAAE,GAAA,EAAK,KAAK,KAAK,CAAA;AAC7C,IAAA,IAAI,GAAA,IAAO,GAAA,CAAI,sBAAsB,CAAA,EAAG;AACtC,MAAA,GAAA,GAAM,IAAI,oBAAoB,CAAA;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,OAAO,EAAA,CAAG,qBAAqB,CAAA,CAAE,GAAG,CAAA;AACtC;AACA,SAAS,cAAA,CAAe,EAAA,EAAI,GAAA,EAAK,GAAA,EAAK,UAAA,EAAY;AAChD,EAAA,OAAO,EAAA,CAAG,qBAAqB,CAAA,CAAE,GAAA,CAAI,UAAU,CAAA,CAAE,YAAA,CAAK,EAAA,CAAG,mBAAmB,CAAA,EAAG,EAAE,CAAA,EAAG,GAAG,CAAC,CAAA;AAC1F;AACA,IAAI,QAAA,mBAAwB,aAAA,CAAc,aAAA,EAAe,cAAA,EAAgB,gBAAgB,CAAA;AACzF,IAAO,eAAA,GAAQ,QAAA;;;ACnBf,IAAI,wBAAqB,CAAA,WAAY;AACnC,EAAA,SAASC,OAAM,EAAA,EAAI;AACjB,IAAA,IAAA,CAAK,CAAA,GAAI,EAAA;AAAA,EACX;AACA,EAAAA,MAAAA,CAAM,SAAA,CAAU,mBAAmB,CAAA,GAAI,WAAY;AACjD,IAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,EACjD,CAAA;AACA,EAAAA,MAAAA,CAAM,SAAA,CAAU,qBAAqB,CAAA,GAAI,SAAU,GAAA,EAAK;AACtD,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AACA,EAAAA,OAAM,SAAA,CAAU,mBAAmB,CAAA,GAAI,SAAU,KAAK,CAAA,EAAG;AACvD,IAAA,OAAO,IAAA,CAAK,CAAA,CAAE,GAAA,EAAK,CAAC,CAAA;AAAA,EACtB,CAAA;AACA,EAAA,OAAOA,MAAAA;AACT,CAAA,GAAE;AACa,SAAR,OAAwB,EAAA,EAAI;AACjC,EAAA,OAAO,IAAI,MAAM,EAAE,CAAA;AACrB;;;ACuCA,IAAI,MAAA,mBAAsB,OAAA,CAAQ,SAAU,EAAA,EAAI,KAAK,IAAA,EAAM;AACzD,EAAA,OAAO,eAAA,CAAS,OAAO,EAAA,KAAO,UAAA,GAAa,OAAO,EAAE,CAAA,GAAI,EAAA,EAAI,GAAA,EAAK,IAAI,CAAA;AACvE,CAAC,CAAA;AACD,IAAO,cAAA,GAAQ,MAAA;;;AC5Bf,IAAI,OAAA,mBAAuB,OAAA,CAAQ,SAASC,QAAAA,CAAQ,KAAA,EAAO;AACzD,EAAA,OAAO,cAAA,CAAO,eAAO,WAAA,EAAK,CAAA,EAAG,cAAM,QAAA,EAAU,KAAK,CAAC,CAAA,EAAG,WAAY;AAChE,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,MAAM,KAAA,CAAM,MAAA;AAChB,IAAA,OAAO,MAAM,GAAA,EAAK;AAChB,MAAA,IAAI,CAAC,KAAA,CAAM,GAAG,EAAE,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA,EAAG;AACtC,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,GAAA,IAAO,CAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAO,eAAA,GAAQ,OAAA;;;ACvBf,IAAI,MAAA,mBAAsB,OAAA,CAAQ,SAASC,OAAAA,CAAO,GAAA,EAAK;AACrD,EAAA,OAAO,WAAY;AACjB,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AACF,CAAC,CAAA;AACD,IAAO,cAAA,GAAQ,MAAA;;;ACMf,IAAI,OAAA,mBAAuB,OAAA,CAAQ,SAASC,QAAAA,CAAQ,KAAA,EAAO;AACzD,EAAA,OAAO,cAAA,CAAO,eAAO,WAAA,EAAK,CAAA,EAAG,cAAM,QAAA,EAAU,KAAK,CAAC,CAAA,EAAG,WAAY;AAChE,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,IAAI,MAAM,KAAA,CAAM,MAAA;AAChB,IAAA,OAAO,MAAM,GAAA,EAAK;AAChB,MAAA,IAAI,MAAM,GAAG,CAAA,CAAE,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA,EAAG;AACrC,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,GAAA,IAAO,CAAA;AAAA,IACT;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAO,eAAA,GAAQ,OAAA;;;AC7CA,SAAR,SAAA,CAA2B,GAAG,IAAA,EAAM;AACzC,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,MAAA,IAAU,CAAA,GAAI,CAAA,CAAA;AAC/B,EAAA,IAAI,MAAM,IAAI,KAAA,CAAM,KAAA,IAAS,CAAA,GAAI,QAAQ,CAAC,CAAA;AAC1C,EAAA,OAAO,MAAM,KAAA,EAAO;AAClB,IAAA,GAAA,CAAI,GAAG,IAAI,KAAA,CAAM,SAAA,CAAU,MAAM,IAAA,CAAK,IAAA,EAAM,GAAA,EAAK,GAAA,GAAM,CAAC,CAAA;AACxD,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;;;ACEe,SAAR,OAAA,CAAyB,MAAM,IAAA,EAAM;AAC1C,EAAA,IAAA,GAAO,QAAQ,EAAC;AAChB,EAAA,IAAA,GAAO,QAAQ,EAAC;AAChB,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,OAAO,IAAA,CAAK,MAAA;AAChB,EAAA,IAAI,OAAO,IAAA,CAAK,MAAA;AAChB,EAAA,IAAI,SAAS,EAAC;AACd,EAAA,GAAA,GAAM,CAAA;AACN,EAAA,OAAO,MAAM,IAAA,EAAM;AACjB,IAAA,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA,CAAK,GAAG,CAAA;AAChC,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,GAAA,GAAM,CAAA;AACN,EAAA,OAAO,MAAM,IAAA,EAAM;AACjB,IAAA,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,GAAI,IAAA,CAAK,GAAG,CAAA;AAChC,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,MAAA;AACT;;;AC3BA,IAAI,4BAAyB,CAAA,WAAY;AACvC,EAAA,SAASC,UAAAA,CAAU,GAAG,EAAA,EAAI;AACxB,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,GAAA,GAAM,CAAA;AACX,IAAA,IAAA,CAAK,IAAA,GAAO,KAAA;AACZ,IAAA,IAAA,CAAK,GAAA,GAAM,IAAI,KAAA,CAAM,CAAC,CAAA;AAAA,EACxB;AACA,EAAAA,UAAAA,CAAU,SAAA,CAAU,mBAAmB,CAAA,GAAI,cAAA,CAAQ,IAAA;AACnD,EAAAA,UAAAA,CAAU,SAAA,CAAU,qBAAqB,CAAA,GAAI,SAAU,MAAA,EAAQ;AAC7D,IAAA,IAAA,CAAK,GAAA,GAAM,IAAA;AACX,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,qBAAqB,CAAA,CAAE,MAAM,CAAA;AAAA,EAC9C,CAAA;AACA,EAAAA,WAAU,SAAA,CAAU,mBAAmB,CAAA,GAAI,SAAU,QAAQ,KAAA,EAAO;AAClE,IAAA,IAAA,CAAK,MAAM,KAAK,CAAA;AAChB,IAAA,OAAO,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,EAAA,CAAG,mBAAmB,EAAE,MAAA,EAAQ,IAAA,CAAK,OAAA,EAAS,CAAA,GAAI,MAAA;AAAA,EAC5E,CAAA;AACA,EAAAA,UAAAA,CAAU,SAAA,CAAU,KAAA,GAAQ,SAAU,KAAA,EAAO;AAC3C,IAAA,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AACrB,IAAA,IAAA,CAAK,GAAA,IAAO,CAAA;AACZ,IAAA,IAAI,IAAA,CAAK,GAAA,KAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ;AAChC,MAAA,IAAA,CAAK,GAAA,GAAM,CAAA;AACX,MAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,IACd;AAAA,EACF,CAAA;AACA,EAAAA,UAAAA,CAAU,SAAA,CAAU,OAAA,GAAU,WAAY;AACxC,IAAA,OAAO,QAAQ,KAAA,CAAM,SAAA,CAAU,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,IAAA,CAAK,GAAG,GAAG,KAAA,CAAM,SAAA,CAAU,MAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAA,EAAG,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,EAClH,CAAA;AACA,EAAA,OAAOA,UAAAA;AACT,CAAA,GAAE;AACa,SAAR,WAA4B,CAAA,EAAG;AACpC,EAAA,OAAO,SAAU,EAAA,EAAI;AACnB,IAAA,OAAO,IAAI,SAAA,CAAU,CAAA,EAAG,EAAE,CAAA;AAAA,EAC5B,CAAA;AACF;;;ACTA,IAAI,2BAAwB,OAAA,iBAAsB,aAAA,CAAc,EAAC,EAAG,UAAA,EAAY,SAAS,CAAC,CAAA;AAC1F,IAAO,gBAAA,GAAQ,QAAA;;;ACzBf,SAAS,eAAA,CAAgB,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM;AAC3C,EAAA,IAAI,IAAA,GAAO,KAAK,IAAA,EAAK;AACrB,EAAA,OAAO,CAAC,KAAK,IAAA,EAAM;AACjB,IAAA,GAAA,GAAM,OAAA,CAAQ,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAC7B,IAAA,IAAA,GAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AACA,EAAA,OAAO,GAAA;AACT;AACA,SAAS,aAAA,CAAc,OAAA,EAAS,GAAA,EAAK,GAAA,EAAK,UAAA,EAAY;AACpD,EAAA,OAAO,GAAA,CAAI,UAAU,CAAA,CAAE,OAAA,EAAS,GAAG,CAAA;AACrC;AACA,IAAI,OAAA,mBAAuB,aAAA,CAAc,YAAA,EAAc,aAAA,EAAe,eAAe,CAAA;AACrF,IAAOC,eAAAA,GAAQ,OAAA;;;ACiBf,IAAI,EAAA,mBAAkB,OAAA,CAAQ,SAASC,GAAAA,CAAG,QAAQ,MAAA,EAAQ;AACxD,EAAA,OAAO,OAAO,OAAO,iBAAiB,CAAA,KAAM,aAAa,MAAA,CAAO,iBAAiB,CAAA,CAAE,MAAM,CAAA,GAAI,OAAO,OAAO,EAAA,KAAO,UAAA,GAAa,OAAO,EAAA,CAAG,MAAM,IAAI,OAAO,MAAA,KAAW,UAAA,GAAa,SAAU,CAAA,EAAG;AAC7L,IAAA,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EAC5B,CAAA,GAAID,eAAAA,CAAQ,SAAU,GAAA,EAAK,CAAA,EAAG;AAC5B,IAAA,OAAO,OAAA,CAAQ,GAAA,EAAK,WAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,EACpC,CAAA,EAAG,EAAC,EAAG,MAAM,CAAA;AACf,CAAC,CAAA;AACD,IAAO,UAAA,GAAQ,EAAA;;;ACff,IAAI,KAAA,mBAAqB,OAAA,CAAQ,SAASE,MAAAA,CAAM,OAAO,EAAA,EAAI;AACzD,EAAA,IAAI,MAAA,GAAS,cAAA,CAAO,KAAA,EAAO,EAAE,CAAA;AAC7B,EAAA,OAAO,cAAA,CAAO,OAAO,WAAY;AAC/B,IAAA,OAAO,YAAA,CAAa,UAAA,EAAI,WAAA,CAAI,MAAA,EAAQ,UAAU,CAAC,CAAC,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,CAAC,CAAC,CAAA;AAAA,EAC7F,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAO,aAAA,GAAQ,KAAA;;;ACJf,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAASC,KAAAA,CAAK,EAAA,EAAI;AAChD,EAAA,OAAO,aAAA,CAAM,EAAA,CAAG,MAAA,EAAQ,EAAE,CAAA;AAC5B,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;ACPf,IAAI,GAAA,mBAAmB,OAAA,CAAQ,SAASC,IAAAA,CAAI,CAAA,EAAG;AAC7C,EAAA,OAAO,CAAC,CAAA;AACV,CAAC,CAAA;AACD,IAAO,WAAA,GAAQ,GAAA;;;ACCf,IAAI,UAAA,gCAA+B,WAAG,CAAA;AACtC,IAAO,kBAAA,GAAQ,UAAA;;;ACWf,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAASC,KAAAA,CAAK,KAAA,EAAO;AACnD,EAAA,IAAI,QAAQ,cAAA,CAAO,WAAA,EAAK,CAAA,EAAG,WAAA,CAAI,SAAU,IAAA,EAAM;AAC7C,IAAA,OAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA;AAAA,EACjB,CAAA,EAAG,KAAK,CAAC,CAAA;AACT,EAAA,OAAO,MAAA,CAAO,OAAO,WAAY;AAC/B,IAAA,IAAI,GAAA,GAAM,CAAA;AACV,IAAA,OAAO,GAAA,GAAM,MAAM,MAAA,EAAQ;AACzB,MAAA,IAAI,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,EAAE,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA,EAAG;AACxC,QAAA,OAAO,MAAM,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,MAC5C;AACA,MAAA,GAAA,IAAO,CAAA;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;AC1Bf,IAAI,SAAA,mBAAyB,OAAA,CAAQ,SAASC,UAAAA,CAAU,GAAG,CAAA,EAAG;AAC5D,EAAA,OAAO,CAAA,IAAK,IAAA,IAAQ,CAAA,KAAM,CAAA,GAAI,CAAA,GAAI,CAAA;AACpC,CAAC,CAAA;AACD,IAAO,iBAAA,GAAQ,SAAA;;;AC1Bf,IAAI,6BAA0B,CAAA,WAAY;AACxC,EAAA,SAASC,WAAAA,CAAW,GAAG,EAAA,EAAI;AACzB,IAAA,IAAA,CAAK,EAAA,GAAK,EAAA;AACV,IAAA,IAAA,CAAK,CAAA,GAAI,CAAA;AACT,IAAA,IAAA,CAAK,GAAA,GAAM,EAAA;AACX,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AACA,EAAAA,WAAAA,CAAW,SAAA,CAAU,mBAAmB,CAAA,GAAI,cAAA,CAAQ,IAAA;AACpD,EAAAA,WAAAA,CAAW,SAAA,CAAU,qBAAqB,CAAA,GAAI,SAAU,MAAA,EAAQ;AAC9D,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAA,GAAS,IAAA,CAAK,EAAA,CAAG,mBAAmB,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,IAAA,CAAK,EAAA,CAAG,qBAAqB,CAAA,CAAE,MAAM,CAAA;AAAA,EAC9C,CAAA;AACA,EAAAA,YAAW,SAAA,CAAU,mBAAmB,CAAA,GAAI,SAAU,QAAQ,KAAA,EAAO;AACnE,IAAA,IAAA,CAAK,GAAA,IAAO,CAAA;AACZ,IAAA,IAAI,IAAA,CAAK,CAAA,CAAE,KAAK,CAAA,EAAG;AACjB,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,MAAA,MAAA,GAAS,QAAA,CAAS,KAAK,EAAA,CAAG,mBAAmB,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,IAClE;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAOA,WAAAA;AACT,CAAA,GAAE;AACa,SAAR,YAA6B,CAAA,EAAG;AACrC,EAAA,OAAO,SAAU,EAAA,EAAI;AACnB,IAAA,OAAO,IAAI,UAAA,CAAW,CAAA,EAAG,EAAE,CAAA;AAAA,EAC7B,CAAA;AACF;;;ACJA,IAAI,SAAA,2CAA+C,aAAA,CAAc,IAAI,WAAA,EAAa,SAASC,UAAAA,CAAU,EAAA,EAAI,IAAA,EAAM;AAC7G,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAM,IAAA,CAAK,MAAA;AACf,EAAA,OAAO,MAAM,GAAA,EAAK;AAChB,IAAA,IAAI,EAAA,CAAG,IAAA,CAAK,GAAG,CAAC,CAAA,EAAG;AACjB,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,GAAA,IAAO,CAAA;AAAA,EACT;AACA,EAAA,OAAO,EAAA;AACT,CAAC,CAAC,CAAA;AACF,IAAO,iBAAA,GAAQ,SAAA;;;ACbf,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAAU,IAAA,EAAM;AAC9C,EAAA,OAAO,IAAA,CAAK,GAAG,IAAI,CAAA;AACrB,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;AC3BA,SAAR,UAA2B,CAAA,EAAG;AACnC,EAAA,OAAO,CAAA;AACT;;;ACoBA,IAAI,QAAA,2BAAgC,SAAS,CAAA;AAC7C,IAAO,gBAAA,GAAQ,QAAA;;;ACOf,IAAI,yBAAsB,OAAA,CAAQ,SAASC,OAAAA,CAAO,SAAA,EAAW,QAAQ,OAAA,EAAS;AAC5E,EAAA,OAAO,cAAA,CAAO,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,CAAQ,MAAM,CAAA,EAAG,SAAS,OAAA,GAAU;AAC1F,IAAA,OAAO,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA,GAAI,OAAA,CAAQ,KAAA,CAAM,MAAM,SAAS,CAAA;AAAA,EACzG,CAAC,CAAA;AACH,CAAC,CAAA;AACD,IAAO,cAAA,GAAQ,MAAA;;;ACvBA,SAAR,eAAA,CAAiC,YAAY,EAAA,EAAI;AACtD,EAAA,OAAO,WAAY;AACjB,IAAA,IAAI,SAAS,SAAA,CAAU,MAAA;AACvB,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,OAAO,EAAA,EAAG;AAAA,IACZ;AACA,IAAA,IAAI,GAAA,GAAM,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA;AAC9B,IAAA,OAAO,eAAA,CAAS,GAAG,CAAA,IAAK,OAAO,GAAA,CAAI,UAAU,CAAA,KAAM,UAAA,GAAa,EAAA,CAAG,KAAA,CAAM,IAAA,EAAM,SAAS,CAAA,GAAI,IAAI,UAAU,CAAA,CAAE,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,CAAA,EAAG,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,EAC7K,CAAA;AACF;;;ACMA,IAAI,KAAA,2CAA2C,eAAA,CAAgB,OAAA,EAAS,SAASC,MAAAA,CAAM,SAAA,EAAW,SAAS,IAAA,EAAM;AAC/G,EAAA,OAAO,MAAM,SAAA,CAAU,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,WAAW,OAAO,CAAA;AAC5D,CAAC,CAAC,CAAA;AACF,IAAO,aAAA,GAAQ,KAAA;;;ACJf,IAAI,IAAA,mBAAoB,aAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACnC,IAAO,YAAA,GAAQ,IAAA;;;ACbA,SAAR,cAA+B,GAAA,EAAK;AACzC,EAAA,IAAI/B,KAAAA,GAAO,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,KAAK,GAAG,CAAA;AAC7C,EAAA,OAAOA,KAAAA,KAAS,gCAAgCA,KAAAA,KAAS,oBAAA,IAAwBA,UAAS,qBAAA,IAAyBA,KAAAA,KAAS,yBAAyBA,KAAAA,KAAS,sBAAA,IAA0BA,UAAS,qBAAA,IAAyBA,KAAAA,KAAS,0BAA0BA,KAAAA,KAAS,uBAAA,IAA2BA,UAAS,uBAAA,IAA2BA,KAAAA,KAAS,4BAA4BA,KAAAA,KAAS,yBAAA;AACrX;;;ACeA,IAAI,KAAA,mBAAqB,OAAA,CAAQ,SAASgC,MAAAA,CAAM,CAAA,EAAG;AACjD,EAAA,OAAO,CAAA,IAAK,IAAA,IAAQ,OAAO,CAAA,CAAE,oBAAoB,CAAA,KAAM,UAAA,GAAa,CAAA,CAAE,oBAAoB,CAAA,EAAE,GAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,WAAA,IAAe,IAAA,IAAQ,OAAO,CAAA,CAAE,WAAA,CAAY,oBAAoB,CAAA,KAAM,aAAa,CAAA,CAAE,WAAA,CAAY,oBAAoB,CAAA,EAAE,GAAI,CAAA,IAAK,IAAA,IAAQ,OAAO,EAAE,KAAA,KAAU,UAAA,GAAa,CAAA,CAAE,KAAA,EAAM,GAAI,CAAA,IAAK,IAAA,IAAQ,CAAA,CAAE,eAAe,IAAA,IAAQ,OAAO,CAAA,CAAE,WAAA,CAAY,KAAA,KAAU,UAAA,GAAa,CAAA,CAAE,WAAA,CAAY,OAAM,GAAI,eAAA,CAAS,CAAC,CAAA,GAAI,EAAC,GAAI,SAAA,CAAU,CAAC,IAAI,EAAA,GAAK,SAAA,CAAU,CAAC,CAAA,GAAI,EAAC,GAAI,mBAAA,CAAa,CAAC,oBAAI,CAAA,WAAY;AACpe,IAAA,OAAO,SAAA;AAAA,EACT,CAAA,MAAM,aAAA,CAAc,CAAC,IAAI,CAAA,CAAE,WAAA,CAAY,IAAA,CAAK,EAAE,CAAA,GAAI,MAAA;AAEpD,CAAC,CAAA;AAED,IAAO,aAAA,GAAQ,KAAA;;;ACbf,IAAI,OAAA,mBAAuB,OAAA,CAAQ,SAASC,QAAAA,CAAQ,CAAA,EAAG;AACrD,EAAA,OAAO,KAAK,IAAA,IAAQ,cAAA,CAAO,CAAA,EAAG,aAAA,CAAM,CAAC,CAAC,CAAA;AACxC,CAAC,CAAA;AACD,IAAO,eAAA,GAAQ,OAAA;;;ACVf,IAAI,KAAA,mBAAqB,OAAA,CAAQ,SAASC,MAAAA,CAAM,CAAA,EAAG;AACjD,EAAA,OAAO,CAAA,IAAK,IAAA;AACd,CAAC,CAAA;AACD,IAAO,aAAA,GAAQ,KAAA;;;ACCf,IAAI,IAAA,mBAAoB,OAAA,CAAQ,SAAU,IAAA,EAAM;AAC9C,EAAA,OAAO,IAAA,CAAK,IAAI,IAAI,CAAA;AACtB,CAAC,CAAA;AACD,IAAO,YAAA,GAAQ,IAAA;;;AC1BA,SAAR,KAAA,CAAuB,GAAG,CAAA,EAAG;AAClC,EAAA,OAAO,WAAY;AACjB,IAAA,OAAO,EAAE,IAAA,CAAK,IAAA,EAAM,EAAE,KAAA,CAAM,IAAA,EAAM,SAAS,CAAC,CAAA;AAAA,EAC9C,CAAA;AACF;;;AC2BA,IAAI,IAAA,2CAA0C,eAAA,CAAgB,MAAA,gCAA2B,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA;AACtG,IAAO,YAAA,GAAQ,IAAA;;;ACHA,SAAR,IAAA,GAAwB;AAC7B,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,MAAM,qCAAqC,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,MAAA,CAAO,SAAA,CAAU,CAAC,CAAA,CAAE,MAAA,EAAQ,cAAA,CAAO,KAAA,EAAO,SAAA,CAAU,CAAC,CAAA,EAAG,YAAA,CAAK,SAAS,CAAC,CAAC,CAAA;AACjF;;;AChCA,IAAM,qBAAqB,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAE7D,IAAM,UAAA,GAAa,CAAC,MAAA,KACzB,cAAA,CAAO,kBAAA,EAAoB,CAAC,GAAG,MAAM,CAAC,CAAA,CAAE,IAAA,CAAK,GAAG;;;ACa3C,IAAM,IAAA,GAAa,EAAE,MAAA,EAAQ,MAAA;AAE7B,SAAS,KAAa,KAAA,EAA6B;AACxD,EAAA,OAAO,EAAE,MAAA,EAAQ,MAAA,EAAQ,KAAA,EAAM;AACjC;AAEO,IAAM,MAAA,GAAS,CAAS,MAAA,KAC7B,MAAA,CAAO,MAAA,KAAW;AAEb,IAAM,MAAA,GAAS,CAAS,MAAA,KAC7B,MAAA,CAAO,MAAA,KAAW;AAEb,IAAM,YAAA,GAAe,CAAS,KAAA,KACnC,cAAA;AAAA,EACE,aAAA;AAAA,EACA,eAAO,IAAI,CAAA;AAAA,EACX;AACF,CAAA,CAAE,KAAK;AAEF,IAAM,SAAA,GAAY,CAAS,QAAA,KAAqB,CAAC,MAAA,KACtD,cAAA;AAAA,EACE,MAAA;AAAA,EACA,CAAC,eAA6B,UAAA,CAAW,KAAA;AAAA,EACzC,eAAO,QAAQ;AACjB,CAAA,CAAE,MAAM;AAEH,SAAS,WAAA,CACd,QACA,OAAA,EACA;AACA,EAAA,OAAO,cAAA;AAAA,IACL,MAAA;AAAA,IACA,CAAC,UAAA,KAA6B,OAAA,CAAQ,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,IAC3D,OAAA,CAAQ;AAAA,IACR,MAAM,CAAA;AACV;;;AClDA,IAAM,QAAA,GAAW,CAAC,KAAA,KAAmB,OAAO,KAAA,KAAU,QAAA;AAE/C,IAAM,iBAAA,GAAoB,CAAC,QAAA,KAAqB,CAAC,UACtD,WAAA,CAAY,YAAA,CAAa,KAAK,CAAA,EAAG;AAAA,EAC/B,MAAM,MAAM,QAAA;AAAA,EACZ,IAAA,EAAM,CAAC,aAAA,KACL,cAAA;AAAA,IACE,QAAA;AAAA,IACA,CAAC,WAAA,KAAwB,iBAAA,CAAU,QAAA,EAAU,WAAW,CAAA;AAAA,IACxD,eAAO,QAAQ;AAAA,IACf,aAAa;AACnB,CAAC,CAAA;;;ACKI,SAAS,GAAW,KAAA,EAA2B;AACpD,EAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAM;AAC/B;AAEO,SAAS,IAAY,KAAA,EAA4B;AACtD,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAM;AAClC;AAEO,IAAM,IAAA,GAAO,CAClB,MAAA,KACyB,MAAA,CAAO,MAAA,KAAW,IAAA;AAEtC,IAAM,gBACX,CACE,SAAA,KAEF,CAAC,MAAA,KACC,YAAY,MAAA,EAAQ;AAAA,EAClB,KAAA,EAAO,GAAA;AAAA,EACP,EAAA,EAAI;AACN,CAAC;AAEE,IAAM,SAAA,GACX,CAA6B,SAAA,KAC7B,CAAC,WACC,aAAA,CAA0C,CAAC,KAAA,KAAU,EAAA,CAAG,SAAA,CAAU,KAAK,CAAC,CAAC,EAAE,MAAM;AAE9E,IAAM,UAAA,GACX,CACE,SAAA,EACA,KAAA,KAEF,CAAC,MAAA,KACC,aAAA;AAAA,EACE,CAAC,YACC,SAAA,CAAwC,CAAC,UAAU,KAAA,CAAM,OAAA,EAAS,KAAK,CAAC,CAAA;AAAA,IACtE,UAAU,OAAO;AAAA;AAEvB,CAAA,CAAE,MAAM,CAAA;AAEL,SAAS,WAAA,CACd,QACA,OAAA,EACA;AACA,EAAA,OAAO,cAAA;AAAA,IACL,IAAA;AAAA,IACA,CAAC,QAAA,KAAyB,OAAA,CAAQ,EAAA,CAAG,SAAS,KAAK,CAAA;AAAA,IACnD,CAAC,WAAA,KAA6B,OAAA,CAAQ,KAAA,CAAM,YAAY,KAAK;AAAA,IAC7D,MAAM,CAAA;AACV;ACjEA,IAAM,aAAA,GAAgB,CAAC,OAAA,KACrB,WAAA,CAAY,OAAA,EAAS;AAAA,EACnB,MAAM,MAAM,IAAA;AAAA,EACZ,MAAM,CAAC,KAAA,yBAAW,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAA,KAAA,EAAM;AACvE,CAAC,CAAA;AAEI,SAAS,UAAA,CAAW;AAAA,EACzB,KAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,UAAA,CAAW,CAAC,sBAAA,EAAwB,SAAS,CAAC,CAAA,EAAG,IAAA,EAC/D,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAClD,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,IACrD,cAAc,OAAO;AAAA,GAAA,EACxB,CAAA;AAEJ;;;ACiBA,IAAM,mBAAA,GAAsB,CAAA;AAC5B,IAAM,gBAAA,GAAmB,CAAA;AAEzB,IAAM,cAAA,GAAiB;AAAA,EACrB,oBAAoB,OAAuB;AAAA,IACzC,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,0CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAmC;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,mDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAmC;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,mDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,CAAA,MAA+B;AAAA,IAC/C,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,qCAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAG;AAAA,GAClD,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,QAAA,MAAuC;AAAA,IACvD,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,kBAAA,EAAqB,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAG;AAAA,GACxD,CAAA;AAAA,EACA,mBAAA,EAAqB,CAAC,QAAA,EAA6B,aAAA,MAA2C;AAAA,IAC5F,IAAA,EAAM,qBAAA;AAAA,IACN,OAAA,EAAS,4EAAA;AAAA,IACT,OAAA,EAAS,IAAA;AAAA,MACP,YAAY,MAAA,CAAO,QAAQ,CAAC,CAAA,yBAAA,EAA4B,MAAA,CAAO,aAAa,CAAC,CAAA,CAAA;AAAA;AAC/E,GACF;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,eAAA,GAAkB,CAAC,IAAA,KACvB,IAAA,CAAK,MAAA,IAAU,mBAAA;AAEjB,IAAM,UAAA,GAAa,CAAC,IAAA,KAAoC,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEhF,IAAM,UAAA,GAAa,CAAC,IAAA,KAAoC,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEhF,IAAM,uBAAuB,CAAC,IAAA,KAC5B,YAAI,cAAA,EAAgB,UAAA,CAAW,IAAI,CAAC,CAAA;AAEtC,IAAM,uBAAuB,CAAC,IAAA,KAC5B,YAAI,cAAA,EAAgB,UAAA,CAAW,IAAI,CAAC,CAAA;AAEtC,IAAM,sBAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAW,cAAc,CAAA,EAAG,UAAA,CAAW,IAAI,CAAC,CAAA;AAExD,IAAM,sBAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAW,cAAc,CAAA,EAAG,UAAA,CAAW,IAAI,CAAC,CAAA;AAExD,IAAM,gBAAA,GAAmB,CAAC,IAAA,KAAoC;AAC5D,EAAA,MAAM,OAAA,GAAU,WAAW,IAAI,CAAA;AAE/B,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA;AAC7C,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAAC,IAAA,KAAoC;AAC/D,EAAA,MAAM,OAAA,GAAU,WAAW,IAAI,CAAA;AAE/B,EAAA,OAAO,iBAAA;AAAA,IACL,CAAA;AAAA,IACA,OAAA,CAAQ,KAAK,CAAC,MAAA,EAAQ,UAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,KAAM,KAAK;AAAA,GACnE;AACF,CAAA;AAEA,IAAM,iBAAA,GAAwC;AAAA,EAC5C,CAAC,mBAAW,eAAe,CAAA,EAAG,MAAM,GAAA,CAAI,cAAA,CAAe,kBAAA,EAAoB,CAAC,CAAA;AAAA,EAC5E;AAAA,IACE,mBAAW,oBAAoB,CAAA;AAAA,IAC/B,CAAC,cACC,GAAA,CAAI,cAAA,CAAe,cAAc,sBAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,GACvE;AAAA,EACA;AAAA,IACE,mBAAW,oBAAoB,CAAA;AAAA,IAC/B,CAAC,cACC,GAAA,CAAI,cAAA,CAAe,cAAc,sBAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,GACvE;AAAA,EACA;AAAA,IACE,mBAAW,gBAAgB,CAAA;AAAA,IAC3B,CAAC,cACC,GAAA,CAAI,cAAA,CAAe,gBAAgB,mBAAA,CAAoB,SAAS,CAAC,CAAC;AAAA,GACtE;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAAyC,EAAA,CAAG,SAAS,CAAC;AACxE,CAAA;AAEA,IAAM,eAAA,GACJ,aAAK,iBAAiB,CAAA;AAExB,IAAM,mBAAA,GAAsB,UAAoB,gBAAgB,CAAA;AAEhE,IAAM,iBAAA,GAAoB,CAAC,KAAA,KAAmC,cAAA,CAAe,MAAM,QAAQ,CAAA;AAE3F,IAAM,gBAAA,GAAmB,CAAC,OAAA,KACxB,IAAA,CAAK,IAAI,GAAG,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;AAE1C,IAAM,sBAAsB,CAAC,KAAA,KAC3B,MAAM,QAAA,IAAY,gBAAA,CAAiB,MAAM,OAAO,CAAA;AAElD,IAAM,kBAAA,GAA0C;AAAA,EAC9C;AAAA,IACE,mBAAW,iBAAiB,CAAA;AAAA,IAC5B,CAAC,KAAA,KAAmC,GAAA,CAAI,eAAe,eAAA,CAAgB,KAAA,CAAM,QAAQ,CAAC;AAAA,GACxF;AAAA,EACA;AAAA,IACE,mBAAW,mBAAmB,CAAA;AAAA,IAC9B,CAAC,KAAA,KACC,GAAA,CAAI,cAAA,CAAe,mBAAA,CAAoB,KAAA,CAAM,QAAA,EAAU,gBAAA,CAAiB,KAAA,CAAM,OAAO,CAAC,CAAC;AAAA,GAC3F;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,KAAA,KAAmC,EAAA,CAAG,KAAK,CAAC;AAC9D,CAAA;AAEA,IAAM,gBAAA,GACJ,aAAK,kBAAkB,CAAA;AAElB,SAAS,uBAAuB,KAAA,EAA6C;AAClF,EAAA,OAAO,aAAA;AAAA,IACL;AAAA,GACF;AAAA,IACE,SAAA,CAAqE,CAAC,OAAA,MAAa;AAAA,MACjF,OAAA;AAAA,MACA,QAAA,EAAU,mBAAA,CAAoB,KAAA,CAAM,QAAQ;AAAA,KAC9C,CAAE,CAAA,CAAE,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAC;AAAA,GACjC;AACF;AAEA,IAAM,eAAe,CAAC,IAAA,EAAsB,KAAA,KAA0B,IAAA,CAAK,IAAI,KAAA,CAAM,CAAA;AAErF,IAAM,OAAA,GAAU,CAAC,OAAA,KAA6C,CAAC,GAAG,OAAO,CAAA,CAAE,KAAK,YAAY,CAAA;AAE5F,IAAM,eAAA,GAAkB,CAAC,KAAA,EAAgC,QAAA,MAAiC;AAAA,EACxF,GAAG,KAAA,CAAM,CAAA;AAAA,EACT,CAAA,EAAG;AACL,CAAA,CAAA;AAEA,IAAM,aAAA,GAAgB,CACpB,KAAA,EACA,QAAA,MACiB;AAAA,EACjB,KAAA,EAAO,KAAA;AAAA,EACP,GAAA,EAAK,eAAA,CAAgB,KAAA,EAAO,QAAQ;AACtC,CAAA,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAAiD;AAC5E,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA;AACpC,EAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAE3C,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,UAAU,KAAA,CAAM,QAAA;AAAA,IAChB,eAAA,EAAiB,aAAA,CAAc,SAAA,EAAW,KAAA,CAAM,QAAQ,CAAA;AAAA,IACxD,gBAAA,EAAkB,aAAA,CAAc,UAAA,EAAY,KAAA,CAAM,QAAQ;AAAA,GAC5D;AACF,CAAA;AAEO,SAAS,iBAAiB,KAAA,EAAwC;AACvE,EAAA,OAAO,UAAiE,mBAAmB,CAAA;AAAA,IACzF,uBAAuB,KAAK;AAAA,GAC9B;AACF;AC3MO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAoBA,IAAM,SAAA,GAAY,CAAC,MAAA,KAA2C;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAI,OAAO,MAAM,CAAA;AAE9C,EAAA,OAAO,CAAC,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,GAAG,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5E,CAAA;AAEA,IAAM,oBAAoB,CAAC,CAAC,UAAA,EAAY,UAAU,MAAmB,UAAA,KAAe,UAAA;AAEpF,IAAM,qBAAA,GAA8D,cAAA;AAAA,EAClE,iBAAA;AAAA,EACA,CAAC,CAAC,UAAA,EAAY,UAAU,MAAgC,CAAC,UAAA,GAAa,GAAA,EAAK,UAAA,GAAa,GAAG,CAAA;AAAA,EAC3F;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,MAAA,KACtB,iBAAA;AAAA,EACE,EAAA;AAAA,EACA,IAAA,EAAwB,CACrB,CAAA,CAAE,CAAC,UAAU,KAAA,CAAM,EAAE,CAAA,CACrB,CAAA,CAAE,CAAC,KAAA,KAAU,KAAA,CAAM,EAAE,EAAE,MAAM;AAClC,CAAA;AAEF,IAAM,cAAA,GAAiB,CAAC,SAAA,KAAsB,CAAC,MAAA,KAC7C,iBAAA;AAAA,EACE,EAAA;AAAA,EACA,MAAwB,CACrB,CAAA,CAAE,CAAC,KAAA,KAAU,MAAM,EAAE,CAAA,CACrB,EAAA,CAAG,SAAS,EACZ,EAAA,CAAG,CAAC,UAAU,KAAA,CAAM,EAAE,EAAE,MAAM;AACnC,CAAA;AAEF,IAAM,UAAA,GAAa,CAAC,MAAA,KAClB,qBAAA,CAAsB,UAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE9D,IAAM,UAAA,GAAa,CAAC,MAAA,KAClB,qBAAA,CAAsB,UAAU,CAAC,MAAA,CAAO,UAAU,GAAG,WAAA,CAAI,aAAK,GAAG,CAAA,EAAG,CAAC,GAAG,MAAA,CAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAEpF,IAAM,mBAAA,GAAsB,CACjC,MAAA,EACA,KAAA,EACA,MAAA,KACmB;AACnB,EAAA,MAAM,UAAA,GAAa,SAAS,iBAAA,CAAkB,MAAA;AAC9C,EAAA,MAAM,SAAS,WAAA,EAAY,CACxB,OAAO,UAAA,CAAW,MAAA,CAAO,MAAM,CAAC,CAAA,CAChC,IAAA,EAAK,CACL,MAAM,CAAC,iBAAA,CAAkB,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS,WAAA,EAAY,CACxB,MAAA,CAAO,WAAW,MAAM,CAAC,CAAA,CACzB,IAAA,GACA,KAAA,CAAM,CAAC,UAAA,EAAY,iBAAA,CAAkB,GAAG,CAAC,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACxC,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,MAA8C;AAAA,IACrE,GAAG,KAAA;AAAA,IACH,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IAClB,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC;AAAA,GACpB,CAAA;AACA,EAAA,MAAM,iBAAiB,WAAA,CAAI,eAAA,EAAiB,CAAC,GAAG,MAAA,CAAO,MAAM,CAAC,CAAA;AAE9D,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,MAAA,EAAQ,cAAA;AAAA,IACR,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,SAAA;AAAA,IACA,QAAA,EAAU,cAAA,CAAe,SAAS,CAAA,CAAE,cAAc,CAAA;AAAA,IAClD,QAAA,EAAU,eAAe,cAAc,CAAA;AAAA,IACvC,MAAA,EAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IACtD,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB,MAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;ACrGO,SAAS,gBAAA,CAAiB,EAAE,OAAA,EAAQ,EAAoC;AAC7E,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,IAAA,qBAASC,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,gCAAgC,QAAA,EAAA,IAAA,EAAK;AAAA,GAC5E,CAAA;AACH;ACDO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,EAAM,EAAuB;AAClE,EAAA,uBACEC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2BAAA;AAAA,QACV,IAAI,iBAAA,CAAkB,IAAA;AAAA,QACtB,EAAA,EAAI,QAAQ,iBAAA,CAAkB,KAAA;AAAA,QAC9B,IAAI,KAAA,CAAM,UAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2BAAA;AAAA,QACV,IAAI,iBAAA,CAAkB,IAAA;AAAA,QACtB,IAAI,iBAAA,CAAkB,IAAA;AAAA,QACtB,IAAI,iBAAA,CAAkB,GAAA;AAAA,QACtB,IAAI,KAAA,CAAM;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;ACrBO,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAM,EAA+B;AAC3E,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA4B,CAAA,EAAG,KAAA,CAAM,QAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA;AAC3F;ACGO,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,IAAA,qBACjBD,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,gCAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAI,iBAAA,CAAkB,IAAA;AAAA,UACtB,EAAA,EAAI,QAAQ,iBAAA,CAAkB,KAAA;AAAA,UAC9B,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI;AAAA;AAAA,OACvB;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,iBAAA,CAAkB,OAAO,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,EAAG,UAAA,EAAW,KAAA,EACpE,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EACpB;AAAA,KAAA,EAAA,EATiD,CAAA,EAAA,EAAK,IAAI,CAAA,CAU5D,CACD,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACjBC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,IAAI,iBAAA,CAAkB,GAAA;AAAA,UACtB,IAAI,KAAA,CAAM;AAAA;AAAA,OACZ;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACpB,CAAA,EAAG,MAAA,GAAS,iBAAA,CAAkB,MAAA,GAAS,EAAA;AAAA,UACvC,UAAA,EAAW,QAAA;AAAA,UAEV,uBAAa,IAAI;AAAA;AAAA;AACpB,KAAA,EAAA,EAbiD,CAAA,EAAA,EAAK,IAAI,CAAA,CAc5D,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AC9CO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAM,EAAuB;AAC3D,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA4B,CAAA,EAAG,KAAA,CAAM,QAAA,EAAU,aAAA,EAAY,MAAA,EAAO,CAAA;AAC3F;ACAO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,KAAA,EAAM,EAA2B;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,2BAAA;AAAA,MACV,GAAG,iBAAA,CAAkB,IAAA;AAAA,MACrB,GAAG,iBAAA,CAAkB,GAAA;AAAA,MACrB,KAAA,EAAO,KAAA,GAAQ,iBAAA,CAAkB,IAAA,GAAO,iBAAA,CAAkB,KAAA;AAAA,MAC1D,MAAA,EAAQ,KAAA,CAAM,UAAA,GAAa,iBAAA,CAAkB;AAAA;AAAA,GAC/C;AAEJ;ACFO,SAAS,oBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,eAAA,GAAkB,cAAA;AAAA,IACtB,eAAO,MAAM,CAAA;AAAA,IACb,eAAO,oCAAoC,CAAA;AAAA,IAC3C,eAAO,EAAE;AAAA,IACT,MAAM,CAAA;AACR,EAAA,MAAM,gBAAA,GAAmB,cAAA;AAAA,IACvB,eAAO,UAAU,CAAA;AAAA,IACjB,eAAO,qCAAqC,CAAA;AAAA,IAC5C,eAAO,EAAE;AAAA,IACT,UAAU,CAAA;AACZ,EAAA,MAAM,eAAA,GAAkB,CAAA,EAAG,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC1E,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACEC,IAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAA,CAAW;AAAA,QACpB,4BAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,MACD,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,YAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qCAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,CAAA,EAAG;AAAA;AAAA,SACL;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,gCAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,CAAA,EAAG;AAAA;AAAA;AACL;AAAA;AAAA,GACF;AAEJ;AC5DO,SAAS,eAAA,CAAgB;AAAA,EAC9B,YAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,0BACvBA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,iBAAiB,KAAA,CAAM,CAAA;AAAA,MAC/B,YAAA;AAAA,MACA,YAAA;AAAA,MAEA,UAAA,EAAY,MAAM,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AAAA,MACpC,YAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KAAA;AAAA,IAJK,KAAA,CAAM;AAAA,GAMd,CAAA;AACH;ACzBA,IAAM,cAAA,GAAiB,EAAA;AACvB,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,iBAAA,GAAoB,CAAA;AAC1B,IAAM,kBAAA,GAAqB,CAAA;AAC3B,IAAM,eAAA,GAAkB,CAAA;AAExB,IAAM,eAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAI,mBAAmB,KAAA,CAAM,MAAA,GAAS,kBAAA,GAAqB,iBAAA,GAAoB,CAAC,CAAA;AAEvF,IAAM,KAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,gBAAA,CAAiB;AAAA,EAC/B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,gBAAgB,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAI,KAAA;AAAA,IACR,eAAA;AAAA,IACA,QAAQ,YAAA,GAAe,eAAA;AAAA,IACvB,KAAA,CAAM,KAAK,YAAA,GAAe;AAAA,GAC5B;AACA,EAAA,MAAM,CAAA,GAAI,KAAA;AAAA,IACR,eAAA;AAAA,IACA,SAAS,cAAA,GAAiB,eAAA;AAAA,IAC1B,KAAA,CAAM,KAAK,cAAA,GAAiB;AAAA,GAC9B;AAEA,EAAA,uBACEC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAA+B,eAAY,MAAA,EACtD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,yCAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQ,cAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAI,cAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC1CO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAM,YAAY,CAAA;AAE5E,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,0BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC/CA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC3CA,GAAAA,CAAC,qBAAA,EAAA,EAAsB,KAAA,EAAc,CAAA;AAAA,wBACrCA,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC7BA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,YAAA;AAAA,YACA,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,UAAA,EAAY,eAAA;AAAA,YACZ,YAAA,EAAc,MAAM,eAAA,CAAgB,IAAI,CAAA;AAAA,YACxC;AAAA;AAAA,SACF;AAAA,QACC,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,qBACjBA,GAAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YAEA,KAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAFK,KAAA,CAAM;AAAA,SAId;AAAA;AAAA;AAAA,GACH;AAEJ;ACjDO,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,qBAAA,EAAuB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC7E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB;AAAA,GAAA,EACtC,CAAA;AAEJ;ACrCO,SAAS,SAAA,CAAU;AAAA,EACxB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAM,gBAAA,CAAiB,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnF,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNA,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,4BAAA,EAA8B,SAAS,CAAC,CAAA;AAAA,QAC/D,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,MAAA,KAAW;AACd,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,MAAA,EAAQ,KAAA,EAAO,MAAM,CAAA;AAEvD,MAAA,uBACEA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AC/CO,IAAM,qBAAA,GAAwB,cAAA;AAAA,EACnC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,6BAAA,GAAgC;AAAA,EAC3C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,UAAA,EAAY,IAAA;AAAA,EACZ,YAAA,EAAc,qBAAA;AAAA,EACd,YAAA,EAAc;AAChB;;;AC2BO,IAAM,gCAAA,GAAkD;AAAA,EAC7D,IAAA,EAAM;AACR;AAEA,IAAM,oBAAA,GAAsC,WAAA;AAE5C,IAAM,aAAA,GAAgB;AAAA,EACpB,cAAc,OAAsB;AAAA,IAClC,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,0CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,YAAA,EAAc,CAAC,KAAA,MAAkC;AAAA,IAC/C,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,gDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC1D,CAAA;AAAA,EACA,iBAAA,EAAmB,CAAC,QAAA,MAAqC;AAAA,IACvD,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,sCAAA;AAAA,IACT,OAAA,EAAS,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAG;AAAA,GAClD,CAAA;AAAA,EACA,iBAAA,EAAmB,CAAC,KAAA,MAAkC;AAAA,IACpD,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,wBAAA,EAA2B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC3D,CAAA;AAAA,EACA,2BAA2B,OAAsB;AAAA,IAC/C,IAAA,EAAM,2BAAA;AAAA,IACN,OAAA,EAAS,iEAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,8BAAA,EAAgC,CAAC,UAAA,MAAkD;AAAA,IACjF,IAAA,EAAM,gCAAA;AAAA,IACN,OAAA,EAAS,wDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,oBAAA,EAAuB,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG;AAAA,GAC/D;AACF,CAAA;AAEA,IAAMG,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,mBAAmB,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAElE,IAAM,aAAA,GAAgB,CAAC,IAAA,KAAmC,WAAA,CAAI,YAAA,CAAK,UAAU,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEzF,IAAM,SAAA,GAAY,CAAC,IAAA,KAAmC,WAAA,CAAI,YAAA,CAAK,OAAO,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAElF,IAAM,sBAAsB,CAAC,IAAA,KAC3B,YAAIA,eAAAA,EAAgB,SAAA,CAAU,IAAI,CAAC,CAAA;AAErC,IAAM,qBAAA,GAAwB,CAAC,IAAA,KAC7B,iBAAA,CAAU,mBAAWA,eAAc,CAAA,EAAG,SAAA,CAAU,IAAI,CAAC,CAAA;AAEvD,IAAM,sBAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAW,gBAAgB,CAAA,EAAG,aAAA,CAAc,IAAI,CAAC,CAAA;AAE7D,IAAM,yBAAyB,CAAC,IAAA,KAC9B,YAAI,gBAAA,EAAkB,aAAA,CAAc,IAAI,CAAC,CAAA;AAE3C,IAAM,mBAAA,GAAsB,CAAC,IAAA,KAAmC;AAC9D,EAAA,MAAM,UAAA,GAAa,cAAc,IAAI,CAAA;AAErC,EAAA,OAAO,UAAA,CAAW,MAAA,KAAW,IAAI,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA;AACnD,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,IAAA,KAAmC;AAChE,EAAA,MAAM,UAAA,GAAa,cAAc,IAAI,CAAA;AAErC,EAAA,OAAO,iBAAA;AAAA,IACL,kBAAA;AAAA,IACA,UAAA,CAAW,KAAK,CAAC,QAAA,EAAU,UAAU,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,KAAM,KAAK;AAAA,GAC7E;AACF,CAAA;AAEA,IAAM,sBAAA,GAAyB,CAC7B,QAAA,KACqC,QAAA,CAAS,IAAA,KAAS,OAAA;AAEzD,IAAM,qBAAA,GAAwB,CAC5B,QAAA,KACoC,QAAA,CAAS,IAAA,KAAS,QAAA;AAExD,IAAM,sBAAA,GAAyB,CAAC,QAAA,KAC9B,cAAA;AAAA,EACE,sBAAA;AAAA,EACA,CAAC,aAAA,KAAwC,YAAA,CAAa,aAAA,CAAc,SAAS,CAAA;AAAA,EAC7E,cAAA,CAAO,IAAA,CAAK,oBAAoB,CAAC;AACnC,CAAA,CAAE,QAAQ,CAAA;AAEZ,IAAM,2BAAA,GAA8B,CAAC,QAAA,KACnC,eAAA,CAAQ;AAAA,EACN,sBAAA;AAAA,EACA,IAAA,CAAK,wBAAwB,MAAM;AACrC,CAAC,EAAE,QAAQ,CAAA;AAEb,IAAM,wBAAA,GAA2B,CAAC,QAAA,KAChC,cAAA;AAAA,EACE,qBAAA;AAAA,EACA,CAAC,mBAAwC,cAAA,CAAe,UAAA;AAAA,EACxD,cAAA,CAAO,EAAE;AACX,CAAA,CAAE,QAAQ,CAAA;AAEZ,IAAM,mBAAmB,CAAC,UAAA,KAAkC,CAAC,QAAA,KAC3D,UAAA,CAAW,SAAS,QAAQ,CAAA;AAE9B,IAAM,0BAAA,GAA6B,CACjC,IAAA,EACA,QAAA,KAEA,cAAA;AAAA,EACE,kBAAA,CAAW,gBAAA,CAAiB,wBAAA,CAAyB,QAAQ,CAAC,CAAC,CAAA;AAAA,EAC/D,cAAc,IAAI;AACpB,CAAA;AAEF,IAAM,yBAAA,GAA4B,CAAC,KAAA,KACjC,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAA6B,qBAAA,CAAsB,SAAA,CAAU,aAAa,CAAA;AAAA,EAC3E,CAAC,SAAA,KACC,kBAAA,CAAW,eAAO,CAAA,CAAE,2BAA2B,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,aAAa,CAAC;AAC3F,CAAC,EAAE,KAAK,CAAA;AAEV,IAAMC,kBAAAA,GAAwC;AAAA,EAC5C,CAAC,eAAA,EAAS,MAAM,IAAI,aAAA,CAAc,YAAA,EAAc,CAAC,CAAA;AAAA,EACjD;AAAA,IACE,mBAAW,mBAAmB,CAAA;AAAA,IAC9B,CAAC,cACC,GAAA,CAAI,aAAA,CAAc,aAAa,qBAAA,CAAsB,SAAS,CAAC,CAAC;AAAA,GACpE;AAAA,EACA;AAAA,IACE,mBAAW,sBAAsB,CAAA;AAAA,IACjC,CAAC,cACC,GAAA,CAAI,aAAA,CAAc,kBAAkB,sBAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,GAC1E;AAAA,EACA;AAAA,IACE,mBAAW,mBAAmB,CAAA;AAAA,IAC9B,CAAC,cACC,GAAA,CAAI,aAAA,CAAc,kBAAkB,qBAAA,CAAsB,SAAS,CAAC,CAAC;AAAA,GACzE;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAAwC,EAAA,CAAG,SAAS,CAAC;AACvE,CAAA;AAEA,IAAMC,gBAAAA,GAAqE,aAAKD,kBAAiB,CAAA;AAEjG,IAAM,uBAAA,GAAoD;AAAA,EACxD;AAAA,IACE,CAAC,SAAA,KAA6B,2BAAA,CAA4B,SAAA,CAAU,aAAa,CAAA;AAAA,IACjF,MAAM,GAAA,CAAI,aAAA,CAAc,yBAAA,EAA2B;AAAA,GACrD;AAAA,EACA;AAAA,IACE,yBAAA;AAAA,IACA,CAAC,SAAA,KACC,GAAA;AAAA,MACE,aAAA,CAAc,8BAAA;AAAA,QACZ,0BAAA,CAA2B,SAAA,CAAU,IAAA,EAAM,SAAA,CAAU,aAAa;AAAA;AACpE;AACF,GACJ;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAA6B,EAAA,CAAG,SAAA,CAAU,aAAa,CAAC;AAC1E,CAAA;AAEA,IAAM,qBAAA,GACJ,aAAK,uBAAuB,CAAA;AAEvB,SAAS,sBAAsB,KAAA,EAA2C;AAC/E,EAAA,OAAO,UAAA;AAAA,IAML,MAAM,sBAAsB,KAAK,CAAA;AAAA,IACjC,CAAC,OAAA,EAAS,aAAA,MAAmB,EAAE,GAAG,SAAS,aAAA,EAAc;AAAA,GAC3D;AAAA,IACE,UAAA;AAAA,MACE,MAAMC,gBAAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AAAA,MAChC,CAAC,CAAA,EAAG,IAAA,MAAU,EAAE,IAAA,EAAK;AAAA,KACvB,CAAE,EAAA,CAAG,EAAE,CAAC;AAAA,GACV;AACF;AAEA,IAAM,UAAA,GAAa,CAAC,IAAA,EAAqB,KAAA,KACvC,KAAK,QAAA,CAAS,aAAA,CAAc,MAAM,QAAQ,CAAA;AAE5C,IAAM,mBAAmB,CAAC,IAAA,EAAqB,KAAA,KAC7C,IAAA,CAAK,QAAQ,KAAA,CAAM,KAAA;AAErB,IAAM,oBAAoB,CAAC,IAAA,EAAqB,KAAA,KAC9C,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA;AAErB,IAAM,aAAA,GAAgB,CAAC,UAAA,KAAkC,CACvD,MACA,KAAA,KACG,UAAA,CAAW,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,GAAI,UAAA,CAAW,OAAA,CAAQ,MAAM,QAAQ,CAAA;AAE1E,IAAM,2BAAA,GAA8B,CAAC,QAAA,KACnC,QAAA,CAAS,IAAA,KAAS,cAAA;AAEpB,IAAM,wBAAA,GAA2B,CAAC,QAAA,KAChC,QAAA,CAAS,IAAA,KAAS,WAAA;AAEpB,IAAM,wBAAA,GAA2B,CAAC,SAAA,KAA6B,SAAA,KAAc,WAAA;AAE7E,IAAM,cAAA,GAAiB,CACrB,IAAA,EACA,aAAA,KAEA,YAAA,CAAK;AAAA,EACH,CAAC,wBAAA,EAA0B,cAAA,CAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;AAAA,EAC5C,CAAC,2BAAA,EAA6B,cAAA,CAAO,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA,CAAK,UAAU,CAAC,CAAC,CAAA;AAAA,EAChE;AAAA,IACE,sBAAA;AAAA,IACA,CAAC,QAAA,KACC,cAAA;AAAA,MACE,wBAAA;AAAA,MACA,eAAO,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAAA,MACvC,eAAO,CAAC,GAAG,IAAI,CAAA,CAAE,IAAA,CAAK,iBAAiB,CAAC;AAAA,MACxC,SAAA,CAAyB,oBAAoB,EAAE,sBAAA,CAAuB,QAAQ,CAAC,CAAC;AAAA,GACtF;AAAA,EACA;AAAA,IACE,qBAAA;AAAA,IACA,CAAC,QAAA,KAAkC,CAAC,GAAG,IAAI,EAAE,IAAA,CAAK,aAAA,CAAc,QAAA,CAAS,UAAU,CAAC;AAAA;AAExF,CAAC,EAAE,aAAa,CAAA;AAElB,IAAM,kBAAA,GAAmC,UAAA;AACzC,IAAM,kBAAA,GAAmC,UAAA;AACzC,IAAM,cAAA,GAA+B,MAAA;AAErC,IAAM,iBAAA,GAAwC;AAAA,EAC5C,CAAC,CAAC,SAAA,KAAsB,YAAY,CAAA,EAAG,cAAA,CAAO,kBAAkB,CAAC,CAAA;AAAA,EACjE,CAAC,CAAC,SAAA,KAAsB,YAAY,CAAA,EAAG,cAAA,CAAO,kBAAkB,CAAC,CAAA;AAAA,EACjE,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,cAAc,CAAC;AACvC,CAAA;AAEA,IAAM,eAAA,GAAmD,aAAK,iBAAiB,CAAA;AAE/E,IAAM,KAAA,GAAQ,CAAC,KAAA,MAA+B;AAAA,EAC5C,GAAG,KAAA;AAAA,EACH,SAAA,EAAW,eAAA,CAAgB,KAAA,CAAM,KAAK;AACxC,CAAA,CAAA;AAEA,IAAM,WAAA,GAAc,CAAC,KAAA,KACnB,WAAA,CAAI,KAAA,EAAO,eAAe,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,aAAa,CAAC,CAAA;AAErD,SAAS,gBAAgB,KAAA,EAAsC;AACpE,EAAA,OAAO,UAAwD,WAAW,CAAA;AAAA,IACxE,sBAAsB,KAAK;AAAA,GAC7B;AACF;ACrSO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAkBA,IAAM,cAAc,CAAC,IAAA,KACnB,iBAAA,CAAkB,CAAC,EAAE,GAAA,CAAI,WAAA,CAAI,YAAA,CAAK,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAEzD,IAAM,cAAc,CAAC,IAAA,KACnB,iBAAA,CAAkB,CAAC,EAAE/B,KAAAA,CAAI,WAAA,CAAI,YAAA,CAAK,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAEzD,IAAM,cAAA,GAAiB,CAAC,IAAA,KAAyB,IAAA,CAAK,IAAI,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAE9E,IAAM,cAAA,GAAiB,CAAC,IAAA,KAAyB,IAAA,CAAK,IAAI,CAAA,EAAG,WAAA,CAAY,IAAI,CAAC,CAAA;AAE9E,IAAM,WAAA,GAAc,CAAC,GAAA,KAAa,GAAA,CAAI,QAAA;AAEtC,IAAM,YAAY,CAAC,UAAA,KAAuB,CAAC,GAAA,EAAU,GAAW,MAAA,KAC9D,cAAA;AAAA,EACE,CAAC,SAAA,KAAmB,SAAA,CAAU,SAAA,KAAc,UAAA;AAAA,EAC5C,cAAA,CAAO,KAAK,GAAA,CAAI,UAAA,GAAa,GAAG,CAAA,GAAI,MAAA,GAAS,EAAE,CAAC,CAAA;AAAA,EAChD,cAAA,CAAO,KAAK,GAAA,CAAI,gBAAA,CAAiB,MAAM,EAAA,EAAI,CAAA,GAAI,CAAC,CAAC;AACnD,CAAA,CAAE,GAAG,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAChC,IAAA,EACA,KAAA,EACA,MAAA,KACkB;AAClB,EAAA,MAAM,UAAA,GAAa,SAAS,gBAAA,CAAiB,MAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,WAAkB,CAC9B,MAAA,CAAO,YAAI,WAAA,EAAa,CAAC,GAAG,IAAI,CAAC,CAAC,EAClC,KAAA,CAAM,CAAC,iBAAiB,IAAA,EAAM,KAAA,GAAQ,iBAAiB,KAAK,CAAC,CAAA,CAC7D,OAAA,CAAQ,IAAI,CAAA;AACf,EAAA,MAAM,MAAA,GAASgC,aAAY,CACxB,MAAA,CAAO,CAAC,cAAA,CAAe,IAAI,GAAG,cAAA,CAAe,IAAI,CAAC,CAAC,CAAA,CACnD,MAAK,CACL,KAAA,CAAM,CAAC,UAAA,EAAY,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAC1B,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KAA0B;AAC/C,IAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,OAAO,GAAA,CAAI,KAAK,GAAG,SAAS,CAAA;AAC/C,IAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,YAAY,MAAA,CAAO,GAAA,CAAI,KAAK,CAAC,CAAA;AAExD,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,CAAA,EAAG,kBAAkB,gBAAA,CAAiB,IAAI,EAAE,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,MAChE,CAAA;AAAA,MACA,KAAA,EAAO,OAAO,SAAA,EAAU;AAAA,MACxB,MAAA,EAAQ,SAAA;AAAA,MACR,QAAQ,SAAA,CAAU,UAAU,CAAA,CAAE,GAAA,EAAK,GAAG,SAAS;AAAA,KACjD;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB,MAAM,WAAA,CAAI,aAAA,EAAe,CAAC,GAAG,IAAI,CAAC,CAAA;AAAA,IAClC;AAAA,GACF;AACF,CAAA;ACjFO,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAQ,EAAmC;AAC3E,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,KAAA,qBAAUN,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,+BAA+B,QAAA,EAAA,KAAA,EAAM;AAAA,GAC7E,CAAA;AACH;ACDO,SAAS,YAAA,CAAa,EAAE,KAAA,EAAO,KAAA,EAAM,EAAsB;AAChE,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0BAAA;AAAA,QACV,IAAI,gBAAA,CAAiB,IAAA;AAAA,QACrB,EAAA,EAAI,QAAQ,gBAAA,CAAiB,KAAA;AAAA,QAC7B,IAAI,KAAA,CAAM,SAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,0BAAA;AAAA,QACV,IAAI,gBAAA,CAAiB,IAAA;AAAA,QACrB,IAAI,gBAAA,CAAiB,IAAA;AAAA,QACrB,IAAI,gBAAA,CAAiB,GAAA;AAAA,QACrB,IAAI,KAAA,CAAM;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;ACnBA,IAAM,WAAA,GAAc,cAAA;AAAA,EAClB,CAAC,GAAA,KAAqB,GAAA,CAAI,MAAA,GAAS,CAAA;AAAA,EACnC,CAAC,QAAqB,GAAA,CAAI,CAAA;AAAA,EAC1B,CAAC,GAAA,KAAqB,GAAA,CAAI,CAAA,GAAI;AAChC,CAAA;AAEO,SAAS,WAAA,CAAY,EAAE,GAAA,EAAI,EAAqB;AACrD,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,CAAA,iDAAA,EAAoD,GAAA,CAAI,SAAS,CAAA,CAAA;AAAA,QAC5E,GAAG,GAAA,CAAI,CAAA;AAAA,QACP,GAAG,GAAA,CAAI,CAAA;AAAA,QACP,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,aAAA,EAAY;AAAA;AAAA,KACd;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,kCAAA;AAAA,QACV,GAAG,GAAA,CAAI,CAAA;AAAA,QACP,CAAA,EAAG,YAAY,GAAG,CAAA;AAAA,QAClB,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,QAC9B,aAAA,EAAY;AAAA;AAAA;AACd,GAAA,EACF,CAAA;AAEJ;AC5BO,SAAS,qBAAA,CAAsB,EAAE,GAAA,EAAK,MAAA,EAAO,EAA+B;AACjF,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,2BAAA;AAAA,MACV,CAAA,EAAG,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,CAAA;AAAA,MACvB,GAAG,MAAA,GAAS,EAAA;AAAA,MACZ,UAAA,EAAW,QAAA;AAAA,MAEV,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,GACP;AAEJ;ACXO,SAAS,kBAAA,CAAmB,EAAE,GAAA,EAAK,WAAA,EAAY,EAA4B;AAChF,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,2BAAA;AAAA,MACV,CAAA,EAAG,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,CAAA;AAAA,MACvB,GAAG,GAAA,CAAI,MAAA;AAAA,MACP,UAAA,EAAW,QAAA;AAAA,MAEV,QAAA,EAAA,WAAA,CAAY,IAAI,KAAK;AAAA;AAAA,GACxB;AAEJ;ACEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,MAAA;AAAA,EACA,GAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,gBAAA,GAAmB,cAAA;AAAA,IACvB,eAAO,UAAU,CAAA;AAAA,IACjB,sBAAMA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAU,WAAA,EAA0B,CAAA;AAAA,IAC9D,eAAO,IAAI;AAAA,GACb;AACA,EAAA,MAAM,eAAA,GAAkB,cAAA;AAAA,IACtB,eAAO,MAAM,CAAA;AAAA,IACb,eAAO,sCAAsC,CAAA;AAAA,IAC7C,eAAO,EAAE;AAAA,IACT,MAAM,CAAA;AACR,EAAA,MAAM,eAAA,GAAkB,GAAG,GAAA,CAAI,QAAQ,KAAK,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,CAAA;AAClE,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACEC,IAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAA,CAAW;AAAA,QACpB,8BAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,MACD,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,YAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,eAAY,GAAA,EAAU,CAAA;AAAA,QACtB,gBAAA,EAAiB;AAAA,wBAClBA,GAAAA,CAAC,qBAAA,EAAA,EAAsB,GAAA,EAAU,MAAA,EAAgB;AAAA;AAAA;AAAA,GACnD;AAEJ;ACtDO,SAAS,kBAAA,CAAmB;AAAA,EACjC,cAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,wBACrBA,GAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,mBAAmB,GAAA,CAAI,QAAA;AAAA,MAC/B,GAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MAEA,UAAA,EAAY,MAAM,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AAAA,MACzC,YAAA;AAAA,MACA;AAAA,KAAA;AAAA,IAHK,GAAA,CAAI;AAAA,GAKZ,CAAA;AACH;AC3BO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,KAAA,EAAM,EAA2B;AAC1E,EAAA,OAAO,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACvBC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAI,gBAAA,CAAiB,IAAA;AAAA,QACrB,EAAA,EAAI,QAAQ,gBAAA,CAAiB,KAAA;AAAA,QAC7B,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI;AAAA;AAAA,KACvB;AAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,iBAAiB,IAAA,GAAO,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,EAAG,UAAA,EAAW,OACnE,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EAAA,EATgD,IAUlD,CACD,CAAA;AACH;ACdO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,KAAA,EAAM,EAA0B;AACxE,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,0BAAA;AAAA,MACV,GAAG,gBAAA,CAAiB,IAAA;AAAA,MACpB,GAAG,gBAAA,CAAiB,GAAA;AAAA,MACpB,KAAA,EAAO,KAAA,GAAQ,gBAAA,CAAiB,IAAA,GAAO,gBAAA,CAAiB,KAAA;AAAA,MACxD,MAAA,EAAQ,KAAA,CAAM,UAAA,GAAa,gBAAA,CAAiB;AAAA;AAAA,GAC9C;AAEJ;ACTA,IAAMO,eAAAA,GAAiB,EAAA;AACvB,IAAMC,kBAAAA,GAAoB,EAAA;AAC1B,IAAMC,kBAAAA,GAAoB,CAAA;AAC1B,IAAMC,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,gBAAAA,GAAkB,CAAA;AAExB,IAAMC,gBAAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAIJ,oBAAmB,KAAA,CAAM,MAAA,GAASE,mBAAAA,GAAqBD,kBAAAA,GAAoB,CAAC,CAAA;AAEvF,IAAMI,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,eAAA,CAAgB;AAAA,EAC9B,GAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,GAAA,CAAI,KAAK,CAAA;AACnC,EAAA,MAAM,YAAA,GAAeD,iBAAgB,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAIC,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,QAAQ,YAAA,GAAeA,gBAAAA;AAAA,IACvB,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,IAAI,YAAA,GAAe;AAAA,GACzC;AACA,EAAA,MAAM,CAAA,GAAIE,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,SAASJ,eAAAA,GAAiBI,gBAAAA;AAAA,IAC1B,GAAA,CAAI,SAASJ,eAAAA,GAAiB;AAAA,GAChC;AAEA,EAAA,uBACEN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA8B,eAAY,MAAA,EACrD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,wCAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQO,eAAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAP,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,kCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAIO,eAAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC7CO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIO,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,aAAa,cAAc,CAAA;AAE7E,EAAA,uBACEb,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yBAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC9CA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC/CA,GAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC1CA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,cAAA;AAAA,YACA,KAAA;AAAA,YACA,WAAA;AAAA,YACA,MAAA;AAAA,YACA,UAAA,EAAY,iBAAA;AAAA,YACZ,YAAA,EAAc,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,YAC1C;AAAA;AAAA,SACF;AAAA,QACC,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,qBACfA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YAEC,GAAA;AAAA,YACA,WAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAJK,GAAA,CAAI;AAAA,SAMZ;AAAA;AAAA;AAAA,GACH;AAEJ;ACzCO,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,oBAAA,EAAsB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC5E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAkB;AAAA,GAAA,EACrC,CAAA;AAEJ;AC5BO,SAAS,QAAA,CAAS;AAAA,EACvB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,MAAA,GAASe,OAAAA;AAAA,IACb,MAAM,eAAA,CAAgB,EAAE,IAAA,EAAM,eAAe,CAAA;AAAA,IAC7C,CAAC,MAAM,aAAa;AAAA,GACtB;AAEA,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,2BAAA,EAA6B,SAAS,CAAC,CAAA;AAAA,QAC9D,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,IAAA,KAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEpD,MAAA,uBACEA,GAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AChDO,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAAkB,MAAA,CAAO,KAAK,CAAA;AAE1D,IAAM,4BAAA,GAA+B;AAAA,EAC1C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,WAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,aAAA,EAAe,gCAAA;AAAA,EACf,UAAA,EAAY,KAAA;AAAA,EACZ,WAAA,EAAa;AACf;;;ACcA,IAAM,gBAAA,GAAmB;AAAA,EACvB,mBAAA,EAAqB,CAAC,YAAA,MAA6C;AAAA,IACjE,IAAA,EAAM,qBAAA;AAAA,IACN,OAAA,EAAS,qDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,MAAA,CAAO,YAAY,CAAC,CAAA,CAAA,CAAG;AAAA,GACjE,CAAA;AAAA,EACA,kBAAA,EAAoB,CAAC,WAAA,MAA4C;AAAA,IAC/D,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,oDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,sBAAA,EAAyB,MAAA,CAAO,WAAW,CAAC,CAAA,CAAA,CAAG;AAAA,GAC/D,CAAA;AAAA,EACA,iBAAiB,OAAyB;AAAA,IACxC,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,qDAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,cAAA,EAAgB,CAAC,KAAA,MAAqC;AAAA,IACpD,IAAA,EAAM,gBAAA;AAAA,IACN,OAAA,EAAS,8DAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,0BAAA,EAA6B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC7D,CAAA;AAAA,EACA,gBAAA,EAAkB,CAAC,KAAA,MAAqC;AAAA,IACtD,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS,wEAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,6BAAA,EAAgC,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAChE,CAAA;AAAA,EACA,kBAAA,EAAoB,CAAC,KAAA,MAAqC;AAAA,IACxD,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,4DAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,cAAA,EAAiB,MAAA,CAAO,KAAK,CAAC,CAAA,4CAAA,CAA8C;AAAA,GAC5F,CAAA;AAAA,EACA,iBAAA,EAAmB,CAAC,SAAA,EAAmB,KAAA,EAAe,UAAA,MAA8C;AAAA,IAClG,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,kEAAA;AAAA,IACT,OAAA,EAAS,IAAA;AAAA,MACP,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAC,CAAA,YAAA,EAAe,MAAA,CAAO,UAAA,CAAW,UAAU,CAAC,CAAA,IAAA,EAAO,MAAA;AAAA,QAC9E,UAAA,CAAW;AAAA,OACZ,CAAA,CAAA;AAAA;AACH,GACF;AACF,CAAA;AAEA,IAAMG,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAC5BA,eAAAA,CAAe,MAAM,YAAY,CAAA;AAEnC,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAC3BA,eAAAA,CAAe,MAAM,WAAW,CAAA;AAElC,IAAM,QAAA,GAAW,CAAC,KAAA,KAA4B,KAAA,CAAM,MAAM,MAAA,GAAS,CAAA;AAEnE,IAAM,mBAAmB,CAAC,IAAA,KAA0B,KAAK,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAE/E,IAAM,qBAAA,GAAwB,CAAC,KAAA,KAC7B,WAAA,CAAI,kBAAkB,CAAC,GAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAExC,IAAM,uBAAA,GAA0B,CAAC,KAAA,KAC/B,iBAAA,CAAU,kBAAA,CAAW,gBAAgB,CAAA,EAAG,CAAC,GAAG,KAAK,CAAC,CAAA;AAEpD,IAAM,iBAAA,GAAoB,CAAC,IAAA,KACzB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAA+BA,eAAAA,CAAe,SAAA,CAAU,UAAU,CAAA;AAAA,EACnE,CAAC,SAAA,KAA+BA,eAAAA,CAAe,SAAA,CAAU,UAAU,CAAA;AAAA,EACnE,CAAC,SAAA,KAA+B,SAAA,CAAU,UAAA,GAAa,SAAA,CAAU;AACnE,CAAC,EAAE,IAAI,CAAA;AAET,IAAM,sBAAA,GAAyB,CAAC,KAAA,KAC9B,WAAA,CAAI,mBAAmB,CAAC,GAAG,KAAA,CAAM,KAAK,CAAC,CAAA;AAEzC,IAAM,yBAAA,GAA4B,CAAC,KAAA,KACjC,iBAAA,CAAU,kBAAA,CAAW,iBAAiB,CAAA,EAAG,CAAC,GAAG,KAAK,CAAC,CAAA;AAIrD,IAAM,UAAA,GAAa,CAAC,KAAA,KAClB,CAAC,SAAA,EAA4B,UAA4B,CAAC,KAAA,CAAM,KAAK,CAAA,EAAG,SAAS,CAAA;AAEnF,IAAM,YAAA,GAAe,CAAC,KAAA,KACpB,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,GAAA,CAAI,UAAA,CAAW,KAAK,CAAC,CAAA;AAEtC,IAAM,kBAAA,GAAqB,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KACtC,IAAA,CAAK,eAAe,KAAA,CAAM,UAAA;AAE5B,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAC1B,WAAA,CAAI,oBAAoB,YAAA,CAAa,KAAA,CAAM,KAAK,CAAC,CAAA;AAEnD,IAAM,0BAAA,GAA6B,CAAC,KAAA,KAClC,iBAAA;AAAA,EACE,mBAAW,kBAAkB,CAAA;AAAA,EAC7B,aAAa,KAAK;AACpB,CAAA,GAAI,CAAA;AAEN,IAAM,YAAA,GAAe,CAAC,KAAA,MAA4D;AAAA,EAChF,UAAA,EAAY,KAAA,CAAM,CAAC,CAAA,CAAE,UAAA;AAAA,EACrB,UAAA,EAAY,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAE;AACtC,CAAA,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,UAAA,KAC1B,eAAA,CAAQ;AAAA,EACN,CAAC,KAAA,KAAkB,KAAA,IAAS,UAAA,CAAW,UAAA;AAAA,EACvC,CAAC,KAAA,KAAkB,KAAA,IAAS,UAAA,CAAW;AACzC,CAAC,CAAA;AAEH,IAAM,gBAAA,GAAmB,CAAC,KAAA,MAAwD;AAAA,EAChF,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA,EACvC,WAAA,EAAa,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA;AAAA,EACrC,OAAO,KAAA,CAAM;AACf,CAAA,CAAA;AAEA,IAAM,yBAAA,GAA4B,CAAC,KAAA,KAA4B;AAC7D,EAAA,MAAM,cAAA,GAAiB,iBAAiB,KAAK,CAAA;AAE7C,EAAA,OAAO,mBAAmB,YAAA,CAAa,cAAA,CAAe,KAAK,CAAC,CAAA,CAAE,eAAe,YAAY,CAAA;AAC3F,CAAA;AAEA,IAAM,wBAAA,GAA2B,CAAC,KAAA,KAA4B;AAC5D,EAAA,MAAM,cAAA,GAAiB,iBAAiB,KAAK,CAAA;AAE7C,EAAA,OAAO,mBAAmB,YAAA,CAAa,cAAA,CAAe,KAAK,CAAC,CAAA,CAAE,eAAe,WAAW,CAAA;AAC1F,CAAA;AAEA,IAAM,uBACJ,CAAC,YAAA,EAAsB,UAAA,KAA2B,CAAC,SACjD,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAwC,YAAA,IAAgB,SAAA,CAAU,UAAA;AAAA,EACnE,eAAA,CAAQ;AAAA,IACN,CAAC,SAAA,KAAwC,YAAA,GAAe,SAAA,CAAU,UAAA;AAAA,IAClE,CAAC,SAAA,KAAwC,SAAA,CAAU,UAAA,KAAe,UAAA,CAAW;AAAA,GAC9E;AACH,CAAC,EAAE,IAAI,CAAA;AAEX,IAAM,aAAA,GAAgB,CACpB,YAAA,EACA,KAAA,EACA,UAAA,KAEA,iBAAA;AAAA,EACE,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,EACtB,KAAA,CAAM,IAAA,CAAK,oBAAA,CAAqB,YAAA,EAAc,UAAU,CAAC;AAC3D,CAAA;AAEF,IAAM,eAAA,GAA+C;AAAA,EACnD;AAAA,IACE,mBAAW,oBAAoB,CAAA;AAAA,IAC/B,CAAC,KAAA,KAA4B,GAAA,CAAI,iBAAiB,mBAAA,CAAoB,KAAA,CAAM,YAAY,CAAC;AAAA,GAC3F;AAAA,EACA;AAAA,IACE,mBAAW,mBAAmB,CAAA;AAAA,IAC9B,CAAC,KAAA,KAA4B,GAAA,CAAI,iBAAiB,kBAAA,CAAmB,KAAA,CAAM,WAAW,CAAC;AAAA,GACzF;AAAA,EACA;AAAA,IACE,mBAAW,QAAQ,CAAA;AAAA,IACnB,MAAM,GAAA,CAAI,gBAAA,CAAiB,eAAA,EAAiB;AAAA,GAC9C;AAAA,EACA;AAAA,IACE,mBAAW,qBAAqB,CAAA;AAAA,IAChC,CAAC,UACC,GAAA,CAAI,gBAAA,CAAiB,eAAe,uBAAA,CAAwB,KAAA,CAAM,KAAK,CAAC,CAAC;AAAA,GAC7E;AAAA,EACA;AAAA,IACE,mBAAW,sBAAsB,CAAA;AAAA,IACjC,CAAC,UACC,GAAA,CAAI,gBAAA,CAAiB,iBAAiB,yBAAA,CAA0B,KAAA,CAAM,KAAK,CAAC,CAAC;AAAA,GACjF;AAAA,EACA;AAAA,IACE,mBAAW,kBAAkB,CAAA;AAAA,IAC7B,CAAC,UACC,GAAA,CAAI,gBAAA,CAAiB,mBAAmB,0BAAA,CAA2B,KAAA,CAAM,KAAK,CAAC,CAAC;AAAA,GACpF;AAAA,EACA;AAAA,IACE,mBAAW,yBAAyB,CAAA;AAAA,IACpC,CAAC,KAAA,KAA4B;AAC3B,MAAA,MAAM,cAAA,GAAiB,iBAAiB,KAAK,CAAA;AAE7C,MAAA,OAAO,GAAA;AAAA,QACL,gBAAA,CAAiB,iBAAA;AAAA,UACf,eAAA;AAAA,UACA,cAAA,CAAe,YAAA;AAAA,UACf,YAAA,CAAa,eAAe,KAAK;AAAA;AACnC,OACF;AAAA,IACF;AAAA,GACF;AAAA,EACA;AAAA,IACE,mBAAW,wBAAwB,CAAA;AAAA,IACnC,CAAC,KAAA,KAA4B;AAC3B,MAAA,MAAM,cAAA,GAAiB,iBAAiB,KAAK,CAAA;AAE7C,MAAA,OAAO,GAAA;AAAA,QACL,gBAAA,CAAiB,iBAAA;AAAA,UACf,cAAA;AAAA,UACA,cAAA,CAAe,WAAA;AAAA,UACf,YAAA,CAAa,eAAe,KAAK;AAAA;AACnC,OACF;AAAA,IACF;AAAA,GACF;AAAA,EACA,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,CAAC,UAA4B,EAAA,CAAG,gBAAA,CAAiB,KAAK,CAAC,CAAC;AACzE,CAAA;AAEO,IAAM,wBAAA,GAEiB,aAAK,eAAe;AAElD,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAAyD;AACrF,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA;AAE3C,EAAA,OAAO;AAAA,IACL,GAAG,KAAA;AAAA,IACH,UAAA;AAAA,IACA,YAAY,aAAA,CAAc,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,OAAO,UAAU;AAAA,GACvE;AACF,CAAA;AAEO,SAAS,mBAAmB,KAAA,EAA4C;AAC7E,EAAA,OAAO,SAAA;AAAA,IACL;AAAA,GACF,CAAE,wBAAA,CAAyB,KAAK,CAAC,CAAA;AACnC;ACnPO,IAAM,mBAAA,GAAsB;AAAA,EACjC,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AA+CA,IAAM,WAAA,GAAc,EAAA;AACpB,IAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAM,sBAAA,GAAyB,CAAA;AAC/B,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,WAAA,GAAc,EAAA;AACpB,IAAM,iBAAA,GAAoB,EAAA;AAC1B,IAAM,mBAAA,GAAsB,EAAA;AAC5B,IAAM,aAAA,GAAgB,EAAA;AACtB,IAAM,sBAAA,GAAoD,OAAA;AAC1D,IAAM,uBAAA,GAAqD,QAAA;AAC3D,IAAM,oBAAA,GAAkD,KAAA;AAExD,IAAMU,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAE5C,IAAM,gBAAA,GAAmB,CAAC,UAAA,KACxBA,MAAAA,CAAM,WAAW,UAAA,EAAY,UAAA,CAAW,YAAY,CAAC,CAAA;AAEvD,IAAM,gBAAA,GAAmB,CAAC,UAAA,KACxB,UAAA,CAAW,cAAc,UAAA,CAAW,UAAA,GAAa,WAAW,UAAA,IAAc,CAAA;AAE5E,IAAM,aAAA,GAAgB,CAAC,UAAA,KAA2B;AAAA,EAChD,UAAA,CAAW,UAAA;AAAA,EACX,iBAAiB,UAAU,CAAA;AAAA,EAC3B,UAAA,CAAW;AACb,CAAA;AAEA,IAAM,iBAAA,GAG2B,CAAC,KAAA,EAAO,KAAA,KACvC,YAAA,CAAK;AAAA,EACH,CAAC,CAAC,SAAA,KAAsB,cAAc,CAAA,EAAG,cAAA,CAAO,sBAAsB,CAAC,CAAA;AAAA,EACvE,CAAC,CAAC,SAAA,KAAsB,SAAA,KAAc,MAAM,MAAA,GAAS,CAAA,EAAG,cAAA,CAAO,oBAAoB,CAAC,CAAA;AAAA,EACpF,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,uBAAuB,CAAC;AAChD,CAAC,EAAE,KAAK,CAAA;AAEH,IAAM,qBAAA,GAAwB,CACnC,OAAA,EACA,KAAA,EACA,QACA,WAAA,KACqB;AACrB,EAAA,MAAM,QAAQ,mBAAA,CAAoB,IAAA;AAClC,EAAA,MAAM,QAAQ,mBAAA,CAAoB,GAAA;AAClC,EAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,mBAAA,CAAoB,IAAA,GAAO,mBAAA,CAAoB,KAAA;AACzE,EAAA,MAAM,aAAa,IAAA,CAAK,GAAA;AAAA,IACtB,mBAAA;AAAA,IACA,IAAA,CAAK,GAAA;AAAA,MACH,WAAA;AAAA,MACA,MAAA,GAAS,mBAAA,CAAoB,GAAA,GAAM,mBAAA,CAAoB;AAAA;AACzD,GACF;AACA,EAAA,MAAM,SAASP,WAAAA,EAAY,CACxB,OAAO,CAAC,OAAA,CAAQ,WAAW,UAAA,EAAY,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAC,CAAA,CACrE,KAAA,CAAM,CAAC,KAAA,EAAO,KAAA,GAAQ,SAAS,CAAC,CAAA;AACnC,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,gBAAA,CAAiB,OAAA,CAAQ,UAAU,CAAC,CAAA;AAC7D,EAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA;AAC5C,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA;AAC1C,EAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,OAAA,CAAQ,UAAU,CAAA;AAE9C,EAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,KAAmD;AACzE,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AACrC,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA;AAEnC,IAAA,OAAO;AAAA,MACL,GAAG,IAAA;AAAA,MACH,CAAA,EAAG,MAAA;AAAA,MACH,CAAA,EAAG,KAAA;AAAA,MACH,OAAO,IAAA,GAAO,MAAA;AAAA,MACd,MAAA,EAAQ,UAAA;AAAA,MACR,MAAA,EAAQ,MAAA,GAAA,CAAU,IAAA,GAAO,MAAA,IAAU,CAAA;AAAA,MACnC,MAAA,EAAQ,QAAQ,UAAA,GAAa;AAAA,KAC/B;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,cAAc,OAAA,CAAQ,YAAA;AAAA,IACtB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,OAAO,WAAA,CAAI,cAAA,EAAgB,CAAC,GAAG,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAC7C,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,MAAW;AAAA,MACjC,KAAA,EAAO,IAAA;AAAA,MACP,CAAA,EAAG,OAAO,IAAI,CAAA;AAAA,MACd,UAAA,EAAY,iBAAA,CAAkB,KAAA,EAAO,KAAK;AAAA,KAC5C,CAAE,CAAA;AAAA,IACF,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,aAAa,CAAC,CAAA;AAAA,IACxC,WAAA,EAAa,IAAA,CAAK,GAAA,CAAI,SAAA,EAAW,QAAQ,CAAA;AAAA,IACzC,WAAA,EAAa,KAAA,GAAA,CAAS,UAAA,GAAa,kBAAA,IAAsB,CAAA;AAAA,IACzD,eAAA,EAAiB,IAAA,CAAK,GAAA,CAAI,QAAA,GAAW,SAAS,CAAA;AAAA,IAC9C,gBAAA,EAAkB,kBAAA;AAAA,IAClB,OAAA;AAAA,IACA,UAAU,KAAA,GAAQ,sBAAA;AAAA,IAClB,QAAA,EAAU,QAAQ,UAAA,GAAa,sBAAA;AAAA,IAC/B,KAAA,EAAO,QAAQ,UAAA,GAAa,WAAA;AAAA,IAC5B,UAAA,EAAY,KAAA,GAAQ,UAAA,GAAa,WAAA,GAAc,iBAAA;AAAA,IAC/C,WAAA,EAAa,aAAA;AAAA,IACb,YAAA,EAAc,CAAA,QAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,YAAY,CAAC,CAAA,CAAA;AAAA,IAC1D,WAAA,EAAa,CAAA,OAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,WAAW,CAAC,CAAA,CAAA;AAAA,IACvD,eAAA,EAAiB,QAAQ,UAAA,CAAW;AAAA,GACtC;AACF,CAAA;ACnKO,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAQ,EAA4B;AACvE,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,KAAA,qBACLN,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,kCAAkC,QAAA,EAAA,KAAA,EAAM;AAAA,GAEjE,CAAA;AACH;ACNO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,WAAA,EAAY,EAAyB;AAC5E,EAAA,uBACEC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EAA8B,eAAY,MAAA,EACrD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAI,KAAA,CAAM,KAAA;AAAA,QACV,EAAA,EAAI,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,SAAA;AAAA,QACxB,IAAI,KAAA,CAAM,KAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,IACC,KAAA,CAAM,MAAM,GAAA,CAAI,CAAC,yBAChBC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,6BAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAI,IAAA,CAAK,CAAA;AAAA,UACT,IAAI,IAAA,CAAK,CAAA;AAAA,UACT,IAAI,KAAA,CAAM,KAAA;AAAA,UACV,EAAA,EAAI,MAAM,KAAA,GAAQ;AAAA;AAAA,OACpB;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,UAAA,EAAY,YAAY,IAAA,CAAK,UAAA,EACpD,QAAA,EAAA,WAAA,CAAY,IAAA,CAAK,KAAK,CAAA,EACzB;AAAA,KAAA,EAAA,EAT8C,IAAA,CAAK,KAUrD,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;ACtBA,IAAM,kBAAkB,CAAC,KAAA,KACvB,4DAA4D,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAA;AAE/E,IAAM,eAAe,CACnB,KAAA,EACA,SAEA,KAAA,CAAM,UAAA,CAAW,UAAU,IAAA,CAAK,KAAA;AAElC,IAAM,qBAAA,GAAwB,cAAA;AAAA,EAC5B,CAAC,SAAA,KAAuB,SAAA;AAAA,EACxB,MAAM,2CAAA;AAAA,EACN,MAAM;AACR,CAAA;AAEA,IAAM,oBAAA,GAAuB,CAC3B,KAAA,EACA,IAAA,KAEA,UAAA,CAAW;AAAA,EACT,mCAAA;AAAA,EACA,qBAAA,CAAsB,YAAA,CAAa,KAAA,EAAO,IAAI,CAAC;AACjD,CAAC,CAAA;AAEH,IAAM,WAAA,GAAc,CAAC,IAAA,KACnB,cAAA;AAAA,EACE,CAAC,SAAA,KAAuB,SAAA;AAAA,EACxB,sBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,mCAAA;AAAA,MACV,GAAG,IAAA,CAAK,MAAA;AAAA,MACR,GAAG,IAAA,CAAK,MAAA;AAAA,MACR,UAAA,EAAW,QAAA;AAAA,MACX,aAAA,EAAY,MAAA;AAAA,MAEX,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,GACR;AAAA,EAEF,MAAM;AACR,CAAA;AAEK,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAO,UAAA,EAAW,EAA0B;AAC7E,EAAA,uBACEA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,8BAAA,EACV,QAAA,EAAA,KAAA,CAAM,MAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBACtBC,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,oBAAA,CAAqB,KAAA,EAAO,IAAI,CAAA,EAC5C,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,gBAAgB,KAAK,CAAA;AAAA,QAChC,GAAG,IAAA,CAAK,CAAA;AAAA,QACR,GAAG,IAAA,CAAK,CAAA;AAAA,QACR,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,IAAA,CAAK;AAAA;AAAA,KACf;AAAA,IACC,WAAA,CAAY,IAAI,CAAA,CAAE,UAAU;AAAA,GAAA,EAAA,EARuB,IAAA,CAAK,KAS3D,CACD,CAAA,EACH,CAAA;AAEJ;AC7DO,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAM,EAA+B;AAC3E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oCAAA;AAAA,MACV,GAAG,KAAA,CAAM,WAAA;AAAA,MACT,GAAG,KAAA,CAAM,WAAA;AAAA,MACT,OAAO,KAAA,CAAM,eAAA;AAAA,MACb,QAAQ,KAAA,CAAM,gBAAA;AAAA,MACd,EAAA,EAAI,MAAM,gBAAA,GAAmB;AAAA;AAAA,GAC/B;AAEJ;ACXO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAM,EAAiC;AAC/E,EAAA,uBACEC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,eAAY,MAAA,EACvD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2CAAA;AAAA,QACV,IAAI,KAAA,CAAM,OAAA;AAAA,QACV,IAAI,KAAA,CAAM,OAAA;AAAA,QACV,IAAI,KAAA,CAAM,QAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,sCAAA;AAAA,QACV,IAAI,KAAA,CAAM,OAAA;AAAA,QACV,IAAI,KAAA,CAAM,OAAA;AAAA,QACV,IAAI,KAAA,CAAM,QAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;ACnBO,SAAS,sBAAA,CAAuB,EAAE,KAAA,EAAM,EAAgC;AAC7E,EAAA,uBACEC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAA,EAAsC,eAAY,MAAA,EAC7D,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gFAAA;AAAA,QACV,GAAG,KAAA,CAAM,KAAA;AAAA,QACT,GAAG,KAAA,CAAM,WAAA;AAAA,QAER,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,KACT;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,+EAAA;AAAA,QACV,CAAA,EAAG,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,SAAA;AAAA,QACvB,GAAG,KAAA,CAAM,WAAA;AAAA,QACT,UAAA,EAAW,KAAA;AAAA,QAEV,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,GAAA,EACF,CAAA;AAEJ;ACNA,IAAM,aAAA,GAAgB,CAAC,KAAA,KAA4B,KAAA,CAAM,eAAA,GAAkB,CAAA;AAEpE,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,aAAa,CAAA,4BAAA,EAA+B,KAAA,GAAQ,UAAA,CAAW,GAAA,EAAK,EAAE,CAAC,CAAA,CAAA;AAC7E,EAAA,MAAM,SAAA,GAAY,GAAG,KAAA,CAAM,YAAY,KAAK,KAAA,CAAM,WAAW,CAAA,EAAA,EAAK,KAAA,CAAM,eAAe,CAAA,CAAA;AACvF,EAAA,MAAM,gBAAA,GAAmB,cAAA;AAAA,IACvB,aAAA;AAAA,IACA,sBAAMA,GAAAA,CAAC,qBAAA,EAAA,EAAsB,KAAA,EAAc,CAAA;AAAA,IAC3C,MAAM;AAAA,GACR;AAEA,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,IAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,UAAA,EAAA,EAAS,EAAA,EAAI,YACZ,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAG,KAAA,CAAM,KAAA;AAAA,YACT,GAAG,KAAA,CAAM,KAAA;AAAA,YACT,OAAO,KAAA,CAAM,SAAA;AAAA,YACb,QAAQ,KAAA,CAAM,UAAA;AAAA,YACd,IAAI,KAAA,CAAM;AAAA;AAAA,WAEd,CAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,sBAAA,EAAA,EAAuB,KAAA,EAAc,CAAA;AAAA,wBACtCC,IAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,8BAAA;AAAA,YACV,IAAA,EAAK,OAAA;AAAA,YACL,YAAA,EAAY,SAAA;AAAA,YACZ,eAAA,EAAe,MAAM,UAAA,CAAW,UAAA;AAAA,YAChC,eAAA,EAAe,MAAM,UAAA,CAAW,UAAA;AAAA,YAChC,iBAAe,KAAA,CAAM,YAAA;AAAA,YACrB,gBAAA,EAAgB,SAAA;AAAA,YAEhB,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,oCAAA;AAAA,kBACV,GAAG,KAAA,CAAM,KAAA;AAAA,kBACT,GAAG,KAAA,CAAM,KAAA;AAAA,kBACT,OAAO,KAAA,CAAM,SAAA;AAAA,kBACb,QAAQ,KAAA,CAAM,UAAA;AAAA,kBACd,IAAI,KAAA,CAAM;AAAA;AAAA,eACZ;AAAA,8BACAC,IAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAU,CAAA,KAAA,EAAQ,UAAU,CAAA,CAAA,CAAA,EAC7B,QAAA,EAAA;AAAA,gCAAAD,GAAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAc,UAAA,EAAwB,CAAA;AAAA,gBACvD,iBAAiB,KAAK;AAAA,eAAA,EACzB,CAAA;AAAA,8BACAA,GAAAA,CAAC,uBAAA,EAAA,EAAwB,KAAA,EAAc;AAAA;AAAA;AAAA,SACzC;AAAA,wBACAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAc,WAAA,EAA0B;AAAA;AAAA;AAAA,GAC3D;AAEJ;ACpEO,SAAS,iBAAA,CAAkB;AAAA,EAChC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,uBAAA,EAAyB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAkB;AAAA,GAAA,EACxC,CAAA;AAEJ;AC5BO,SAAS,WAAA,CAAY;AAAA,EAC1B,YAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,MAAA,GAASe,OAAAA;AAAA,IACb,MAAM,kBAAA,CAAmB,EAAE,YAAA,EAAc,WAAA,EAAa,OAAO,CAAA;AAAA,IAC7D,CAAC,YAAA,EAAc,WAAA,EAAa,KAAK;AAAA,GACnC;AAEA,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,8BAAA,EAAgC,SAAS,CAAC,CAAA;AAAA,QACjE,KAAA,EAAM,0BAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,OAAA,KAAY;AACf,MAAA,MAAM,KAAA,GAAQ,qBAAA,CAAsB,OAAA,EAAS,KAAA,EAAO,QAAQ,WAAW,CAAA;AAEvE,MAAA,uBACEA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,WAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;ACjDO,IAAM,uBAAA,GAA0B,cAAA;AAAA,EACrC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,+BAAA,GAAkC;AAAA,EAC7C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,WAAA,EAAa;AACf;;;ACYA,IAAM,mBAAA,GAAsB,CAAA;AAC5B,IAAM,kBAAA,GAAqB,GAAA;AAE3B,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAAkB,IAAA,CAAK,0BAA0B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG,CAAA;AAE3F,IAAM,YAAA,GAAe;AAAA,EACnB,gBAAA,EAAkB,CAAC,KAAA,MAAiC;AAAA,IAClD,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS,gDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5C,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,KAAA,MAAiC;AAAA,IACjD,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,+CAAA;AAAA,IACT,OAAA,EAAS,iBAAiB,KAAK;AAAA,GACjC;AACF,CAAA;AAEA,IAAMG,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,eAAA,GAAkB,CAAC,IAAA,KAA6B,IAAA,CAAK,MAAA,IAAU,mBAAA;AAErE,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAA6B,WAAA,CAAIA,iBAAgB,CAAC,GAAG,IAAI,CAAC,CAAA;AAExF,IAAM,sBAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,kBAAA,CAAWA,eAAc,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEjD,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAC1B,cAAA,CAAO,CAAC,KAAA,KAA2BA,eAAAA,CAAe,KAAK,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAErE,IAAMC,kBAAAA,GAAwC;AAAA,EAC5C;AAAA,IACE,mBAAW,oBAAoB,CAAA;AAAA,IAC/B,CAAC,SAA6B,GAAA,CAAI,YAAA,CAAa,gBAAgB,sBAAA,CAAuB,IAAI,CAAC,CAAC;AAAA,GAC9F;AAAA,EACA;AAAA,IACE,mBAAW,eAAe,CAAA;AAAA,IAC1B,CAAC,IAAA,KAA6B,GAAA,CAAI,aAAa,gBAAA,CAAiB,IAAA,CAAK,MAAM,CAAC;AAAA,GAC9E;AAAA,EACA,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,CAAC,SAA6B,EAAA,CAAG,kBAAA,CAAmB,IAAI,CAAC,CAAC;AAC3E,CAAA;AAEA,IAAMC,gBAAAA,GAA+D,aAAKD,kBAAiB,CAAA;AAEpF,SAAS,qBAAqB,KAAA,EAAyC;AAC5E,EAAA,OAAO,SAAA;AAAA,IACL,CAAC,OAAA,MAAa,EAAE,OAAA,EAAQ;AAAA,GAC1B,CAAEC,gBAAAA,CAAgB,KAAA,CAAM,IAAI,CAAC,CAAA;AAC/B;AAEA,IAAMW,iBAAAA,GAAmB,CAAC,IAAA,EAAc,KAAA,KAAkB,IAAA,GAAO,KAAA;AAEjE,IAAM,WAAA,GAAc,CAAC,OAAA,KACnB,CAAC,GAAG,OAAO,CAAA,CAAE,KAAKA,iBAAgB,CAAA;AAEpC,IAAM,SAAA,GAAY,CAAC,YAAA,KAAoC;AACrD,EAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,SAAS,CAAC,CAAA;AAEnD,EAAA,OAAO,cAAA;AAAA,IACL,CAAC,MAAA,KAA8B,MAAA,CAAO,MAAA,GAAS,CAAA,KAAM,CAAA;AAAA,IACrD,CAAC,MAAA,KAAA,CAA+B,MAAA,CAAO,MAAA,CAAO,QAAA,GAAW,CAAC,CAAC,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IAC3F,CAAC,MAAA,KAA8B,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAC;AAAA,IACtD,YAAY,CAAA;AAChB,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,YAAA,KACpB,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,MAAA,GAAS,CAAC,CAAC,CAAA;AAE3D,IAAM,YAAA,GAAe,CAAC,YAAA,KACpB,YAAA,CAAa,KAAA,CAAM,KAAK,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAC,CAAC,CAAA;AAEvD,IAAM,iBAAiB,CAAC,UAAA,EAAoB,UAAA,KAAuB,CAAC,UAClE,eAAA,CAAQ;AAAA,EACN,CAAC,cAAsB,SAAA,IAAa,UAAA;AAAA,EACpC,CAAC,cAAsB,SAAA,IAAa;AACtC,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,kBAAkB,CAAC,UAAA,EAAoB,UAAA,KAAuB,CAAC,UACnE,eAAA,CAAQ;AAAA,EACN,CAAC,cAAsB,SAAA,GAAY,UAAA;AAAA,EACnC,CAAC,cAAsB,SAAA,GAAY;AACrC,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,gBAAgB,CAAC,MAAA,KAA8B,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AAErE,IAAM,YAAA,GAAe,CAAC,MAAA,KAA8B,MAAA,CAAO,OAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAC,CAAA;AAEpF,IAAM,cAAA,GAAiB,CAAC,KAAA,KAAoD;AAC1E,EAAA,MAAM,aAAA,GAAgB,WAAA,CAAY,KAAA,CAAM,OAAO,CAAA;AAC/C,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,YAAA,CAAa,aAAa,CAAC,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,UAAU,aAAa,CAAA;AACtC,EAAA,MAAM,EAAA,GAAK,SAAA,CAAU,YAAA,CAAa,aAAa,CAAC,CAAA;AAChD,EAAA,MAAM,qBAAqB,EAAA,GAAK,EAAA;AAChC,EAAA,MAAM,UAAA,GAAa,KAAK,kBAAA,GAAqB,kBAAA;AAC7C,EAAA,MAAM,UAAA,GAAa,KAAK,kBAAA,GAAqB,kBAAA;AAC7C,EAAA,MAAM,YAAA,GAAe,eAAO,cAAA,CAAe,UAAA,EAAY,UAAU,CAAA,EAAG,CAAC,GAAG,aAAa,CAAC,CAAA;AAEtF,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,MAAA;AAAA,IACA,EAAA;AAAA,IACA,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA,EAAc,cAAc,YAAY,CAAA;AAAA,IACxC,YAAA,EAAc,aAAa,YAAY,CAAA;AAAA,IACvC,QAAA,EAAU,eAAO,eAAA,CAAgB,UAAA,EAAY,UAAU,CAAA,EAAG,CAAC,GAAG,aAAa,CAAC;AAAA,GAC9E;AACF,CAAA;AAEO,SAAS,eAAe,KAAA,EAAoC;AACjE,EAAA,OAAO,UAAkE,cAAc,CAAA;AAAA,IACrF,qBAAqB,KAAK;AAAA,GAC5B;AACF;AC5IO,IAAM,eAAA,GAAkB;AAAA,EAC7B,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAuCA,IAAM,UAAA,GAAa,EAAA;AACnB,IAAM,kBAAA,GAAqB,EAAA;AAC3B,IAAM,oBAAA,GAAuB,IAAA;AAE7B,IAAMC,UAAAA,GAAY,CAAC,MAAA,KAA2C;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAIC,OAAO,MAAM,CAAA;AAE9C,EAAA,OAAO,CAAC,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,GAAG,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5E,CAAA;AAEA,IAAMC,qBAAoB,CAAC,CAAC,UAAA,EAAY,UAAU,MAAmB,UAAA,KAAe,UAAA;AAEpF,IAAMC,sBAAAA,GAA8D,cAAA;AAAA,EAClED,kBAAAA;AAAA,EACA,CAAC,CAAC,UAAA,EAAY,UAAU,MAAgC,CAAC,UAAA,GAAa,GAAA,EAAK,UAAA,GAAa,GAAG,CAAA;AAAA,EAC3F;AACF,CAAA;AAEA,IAAM,SAAA,GAAY,CAAC,CAAC,UAAA,EAAY,UAAU,CAAA,KAAgC;AACxE,EAAA,MAAM,QAAQ,UAAA,GAAa,UAAA;AAC3B,EAAA,MAAM,UAAU,KAAA,GAAQ,oBAAA;AAExB,EAAA,OAAO,CAAC,UAAA,GAAa,OAAA,EAAS,UAAA,GAAa,OAAO,CAAA;AACpD,CAAA;AAEA,IAAM,gBAAA,GAAmB,CAAC,OAAA,KAA+B;AAAA,EACvD,OAAA,CAAQ,YAAA;AAAA,EACR,OAAA,CAAQ,EAAA;AAAA,EACR,OAAA,CAAQ,MAAA;AAAA,EACR,OAAA,CAAQ,EAAA;AAAA,EACR,OAAA,CAAQ,YAAA;AAAA,EACR,GAAG,OAAA,CAAQ;AACb,CAAA;AAEA,IAAM,UAAA,GAAa,CACjB,GAAA,EACA,KAAA,EACA,UACA,QAAA,MACyB;AAAA,EACzB,GAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,CAAA;AAEO,IAAM,iBAAA,GAAoB,CAC/B,OAAA,EACA,KAAA,EACA,QACA,WAAA,KACiB;AACjB,EAAA,MAAM,UAAA,GAAa,SAAS,eAAA,CAAgB,MAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,GAAA,GAAA,CAAO,UAAA,GAAa,gBAAgB,GAAA,IAAO,CAAA;AAC9E,EAAA,MAAM,MAAA,GAAS,aAAa,UAAA,GAAa,CAAA;AACzC,EAAA,MAAM,MAAA,GAASb,aAAY,CACxB,MAAA,CAAO,UAAUc,sBAAAA,CAAsBH,UAAAA,CAAU,gBAAA,CAAiB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA,CAC7E,IAAA,EAAK,CACL,KAAA,CAAM,CAAC,gBAAgB,IAAA,EAAM,KAAA,GAAQ,eAAA,CAAgB,KAAK,CAAC,CAAA;AAC9D,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAC7B,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AACrC,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,OAAA,CAAQ,EAAE,CAAA;AAC7B,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA;AACjD,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc,aAAa,kBAAA,GAAqB,CAAA;AACtD,EAAA,MAAM,cAAA,GAAiB,aAAa,kBAAA,GAAqB,CAAA;AACzD,EAAA,MAAM,WAAA,GAAc,WAAA;AACpB,EAAA,MAAM,cAAA,GAAiB,cAAA;AACvB,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,KAAA;AAAA,IACA,CAAA,GAAA,EAAM,YAAY,OAAA,CAAQ,EAAE,CAAC,CAAA,OAAA,EAAU,WAAA,CAAY,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAA;AAAA,IAC9D,GAAA,GAAA,CAAO,MAAM,GAAA,IAAO,CAAA;AAAA,IACpB;AAAA,GACF;AACA,EAAA,MAAM,UAAA,GAAa,UAAA;AAAA,IACjB,QAAA;AAAA,IACA,CAAA,QAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,IACtC,OAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,gBAAA,GAAmB,UAAA;AAAA,IACvB,eAAA;AAAA,IACA,CAAA,eAAA,EAAkB,WAAA,CAAY,OAAA,CAAQ,YAAY,CAAC,CAAA,CAAA;AAAA,IACnD,aAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,gBAAA,GAAmB,UAAA;AAAA,IACvB,eAAA;AAAA,IACA,CAAA,eAAA,EAAkB,WAAA,CAAY,OAAA,CAAQ,YAAY,CAAC,CAAA,CAAA;AAAA,IACnD,aAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA;AAAA,IAChC,CAAC,OAAO,KAAA,MAA4B;AAAA,MAClC,GAAG,UAAA;AAAA,QACD,CAAA,QAAA,EAAW,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA;AAAA,QACxB,CAAA,SAAA,EAAY,WAAA,CAAY,KAAK,CAAC,CAAA,CAAA;AAAA,QAC9B,OAAO,KAAK,CAAA;AAAA,QACZ;AAAA,OACF;AAAA,MACA,KAAA;AAAA,MACA,EAAA,EAAI,OAAO,KAAK,CAAA;AAAA,MAChB,EAAA,EAAI;AAAA,KACN;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA,EAAW,UAAA;AAAA,IACX,GAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAO,CAAC,OAAA,EAAS,YAAY,gBAAA,EAAkB,gBAAA,EAAkB,GAAG,QAAQ,CAAA;AAAA,IAC5E,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB;AAAA,GACF;AACF,CAAA;ACjLO,SAAS,cAAA,CAAe,EAAE,OAAA,EAAQ,EAAwB;AAC/D,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,OAAA,qBACLjB,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,8BAA8B,QAAA,EAAA,OAAA,EAAQ;AAAA,GAE/D,CAAA;AACH;ACJO,SAAS,WAAA,CAAY,EAAE,KAAA,EAAO,KAAA,EAAM,EAAqB;AAC9D,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yBAAA;AAAA,MACV,IAAI,eAAA,CAAgB,IAAA;AAAA,MACpB,EAAA,EAAI,QAAQ,eAAA,CAAgB,KAAA;AAAA,MAC5B,IAAI,KAAA,CAAM,UAAA;AAAA,MACV,IAAI,KAAA,CAAM;AAAA;AAAA,GACZ;AAEJ;ACGA,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAC1B,cAAA;AAAA,EACE,eAAO,MAAM,CAAA;AAAA,EACb,eAAO,iCAAiC,CAAA;AAAA,EACxC,eAAO,EAAE;AACX,CAAA,CAAE,MAAM,CAAA;AAEV,SAAS,eAAA,CAAgB;AAAA,EACvB,aAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACEA,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAA,CAAW;AAAA,QACpB,yBAAA;AAAA,QACA,kBAAA,CAAmB,aAAA,KAAkB,IAAA,CAAK,GAAG;AAAA,OAC9C,CAAA;AAAA,MACD,IAAA,EAAK,KAAA;AAAA,MACL,cAAY,IAAA,CAAK,KAAA;AAAA,MACjB,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,MAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,MAClC,OAAA,EAAS,MAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,MAClC,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,MAAM,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAAA,MACvC,YAAA,EAAc,YAAA;AAAA,MAEb;AAAA;AAAA,GACH;AAEJ;AAEA,IAAM,mBAAA,GAAsB,CAAC,aAAA,EAA8B,OAAA,KACzD,UAAA,CAAW;AAAA,EACT,4BAAA;AAAA,EACA,kBAAA,CAAmB,aAAA,KAAkB,OAAA,CAAQ,GAAG;AAClD,CAAC,CAAA;AAEH,IAAM,oBAAA,GAAuB,CAAC,YAAA,KAA6B,CAAC,KAAA,KAC1D,cAAA;AAAA,EACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,EAC7D,MAAM,YAAA,EAAa;AAAA,EACnB,eAAO,MAAS;AAClB,CAAA,CAAE,KAAK,CAAA;AAEF,SAAS,mBAAA,CAAoB;AAAA,EAClC,aAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,IAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,MAAM,KAAA,CAAM,gBAAA;AAAA,QACZ,UAAA;AAAA,QACA,YAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,4BAAA;AAAA,cACV,IAAI,KAAA,CAAM,aAAA;AAAA,cACV,IAAI,KAAA,CAAM,GAAA;AAAA,cACV,IAAI,KAAA,CAAM,UAAA;AAAA,cACV,IAAI,KAAA,CAAM;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,gCAAA;AAAA,cACV,IAAI,KAAA,CAAM,aAAA;AAAA,cACV,IAAI,KAAA,CAAM,aAAA;AAAA,cACV,IAAI,KAAA,CAAM,WAAA;AAAA,cACV,IAAI,KAAA,CAAM;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6BAAA;AAAA,cACV,GAAG,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,aAAA,EAAe,MAAM,GAAG,CAAA;AAAA,cAC1C,CAAA,EAAG,MAAM,WAAA,GAAc,CAAA;AAAA,cACvB,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,GAAA,GAAM,KAAA,CAAM,aAAa,CAAA,GAAI,EAAA;AAAA,cACnD,MAAA,EAAQ,KAAA,CAAM,cAAA,GAAiB,KAAA,CAAM,WAAA,GAAc;AAAA;AAAA;AACrD;AAAA;AAAA,KACF;AAAA,oBAEAC,IAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,MAAM,KAAA,CAAM,gBAAA;AAAA,QACZ,UAAA;AAAA,QACA,YAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,4BAAA;AAAA,cACV,IAAI,KAAA,CAAM,GAAA;AAAA,cACV,IAAI,KAAA,CAAM,aAAA;AAAA,cACV,IAAI,KAAA,CAAM,UAAA;AAAA,cACV,IAAI,KAAA,CAAM;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,gCAAA;AAAA,cACV,IAAI,KAAA,CAAM,aAAA;AAAA,cACV,IAAI,KAAA,CAAM,aAAA;AAAA,cACV,IAAI,KAAA,CAAM,WAAA;AAAA,cACV,IAAI,KAAA,CAAM;AAAA;AAAA,WACZ;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6BAAA;AAAA,cACV,GAAG,IAAA,CAAK,GAAA,CAAI,MAAM,GAAA,EAAK,KAAA,CAAM,aAAa,CAAA,GAAI,CAAA;AAAA,cAC9C,CAAA,EAAG,MAAM,WAAA,GAAc,CAAA;AAAA,cACvB,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,aAAA,GAAgB,KAAA,CAAM,GAAG,CAAA,GAAI,EAAA;AAAA,cACnD,MAAA,EAAQ,KAAA,CAAM,cAAA,GAAiB,KAAA,CAAM,WAAA,GAAc;AAAA;AAAA;AACrD;AAAA;AAAA,KACF;AAAA,oBAEAC,IAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,MAAM,KAAA,CAAM,OAAA;AAAA,QACZ,UAAA;AAAA,QACA,YAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,wBAAA;AAAA,cACV,GAAG,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,MAAM,GAAG,CAAA;AAAA,cAChC,GAAG,KAAA,CAAM,MAAA;AAAA,cACT,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,GAAA,GAAM,MAAM,GAAG,CAAA;AAAA,cACrC,QAAQ,KAAA,CAAM;AAAA;AAAA,WAChB;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6BAAA;AAAA,cACV,GAAG,IAAA,CAAK,GAAA,CAAI,MAAM,GAAA,EAAK,KAAA,CAAM,GAAG,CAAA,GAAI,CAAA;AAAA,cACpC,CAAA,EAAG,MAAM,MAAA,GAAS,CAAA;AAAA,cAClB,OAAO,IAAA,CAAK,GAAA,CAAI,MAAM,GAAA,GAAM,KAAA,CAAM,GAAG,CAAA,GAAI,EAAA;AAAA,cACzC,MAAA,EAAQ,MAAM,SAAA,GAAY;AAAA;AAAA;AAC5B;AAAA;AAAA,KACF;AAAA,oBAEAC,IAAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,MAAM,KAAA,CAAM,UAAA;AAAA,QACZ,UAAA;AAAA,QACA,YAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,2BAAA;AAAA,cACV,IAAI,KAAA,CAAM,OAAA;AAAA,cACV,IAAI,KAAA,CAAM,OAAA;AAAA,cACV,IAAI,KAAA,CAAM,MAAA;AAAA,cACV,EAAA,EAAI,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM;AAAA;AAAA,WAC3B;AAAA,0BACAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,6BAAA;AAAA,cACV,CAAA,EAAG,MAAM,OAAA,GAAU,CAAA;AAAA,cACnB,CAAA,EAAG,MAAM,MAAA,GAAS,CAAA;AAAA,cAClB,KAAA,EAAO,EAAA;AAAA,cACP,MAAA,EAAQ,MAAM,SAAA,GAAY;AAAA;AAAA;AAC5B;AAAA;AAAA,KACF;AAAA,IAEC,KAAA,CAAM,QAAA,CAAS,GAAA,CAAI,CAAC,4BACnBC,IAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,mBAAA,CAAoB,aAAA,EAAe,OAAO,CAAA;AAAA,QAErD,IAAA,EAAK,KAAA;AAAA,QACL,cAAY,OAAA,CAAQ,KAAA;AAAA,QACpB,QAAA,EAAU,CAAA;AAAA,QACV,MAAA,EAAQ,YAAA;AAAA,QACR,OAAA,EAAS,MAAM,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,QACrC,OAAA,EAAS,MAAM,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,QACrC,SAAA,EAAW,qBAAqB,YAAY,CAAA;AAAA,QAC5C,YAAA,EAAc,MAAM,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,QAC1C,YAAA,EAAc,YAAA;AAAA,QAEd,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,qCAAA;AAAA,cACV,IAAI,OAAA,CAAQ,EAAA;AAAA,cACZ,IAAI,OAAA,CAAQ,EAAA;AAAA,cACZ,CAAA,EAAG;AAAA;AAAA,WACL;AAAA,0BACAA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,iCAAA;AAAA,cACV,IAAI,OAAA,CAAQ,EAAA;AAAA,cACZ,IAAI,OAAA,CAAQ,EAAA;AAAA,cACZ,CAAA,EAAG;AAAA;AAAA;AACL;AAAA,OAAA;AAAA,MAtBK,OAAA,CAAQ;AAAA,KAwBhB;AAAA,GAAA,EACH,CAAA;AAEJ;ACjNO,SAAS,gBAAA,CAAiB,EAAE,KAAA,EAAM,EAA0B;AACjE,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,IAAA,qBACvBA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EACX,QAAA,kBAAAA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,MACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,MACrB,IAAI,eAAA,CAAgB,GAAA;AAAA,MACpB,IAAI,KAAA,CAAM;AAAA;AAAA,GACZ,EAAA,EAN+C,IAOjD,CACD,CAAA;AACH;ACVO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,KAAA,EAAM,EAAyB;AACtE,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yBAAA;AAAA,MACV,GAAG,eAAA,CAAgB,IAAA;AAAA,MACnB,GAAG,eAAA,CAAgB,GAAA;AAAA,MACnB,KAAA,EAAO,KAAA,GAAQ,eAAA,CAAgB,IAAA,GAAO,eAAA,CAAgB,KAAA;AAAA,MACtD,MAAA,EAAQ,KAAA,CAAM,UAAA,GAAa,eAAA,CAAgB;AAAA;AAAA,GAC7C;AAEJ;ACVA,IAAMO,eAAAA,GAAiB,EAAA;AACvB,IAAMC,kBAAAA,GAAoB,EAAA;AAC1B,IAAMC,kBAAAA,GAAoB,CAAA;AAC1B,IAAMC,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,gBAAAA,GAAkB,CAAA;AAExB,IAAMC,gBAAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAIJ,oBAAmB,KAAA,CAAM,MAAA,GAASE,mBAAAA,GAAqBD,kBAAAA,GAAoB,CAAC,CAAA;AAEvF,IAAMI,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,cAAA,CAAe;AAAA,EAC7B,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,YAAA,GAAeD,gBAAAA,CAAgB,IAAA,CAAK,KAAK,CAAA;AAC/C,EAAA,MAAM,CAAA,GAAIC,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,QAAQ,YAAA,GAAeA,gBAAAA;AAAA,IACvB,IAAA,CAAK,WAAW,YAAA,GAAe;AAAA,GACjC;AACA,EAAA,MAAM,CAAA,GAAIE,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,SAASJ,eAAAA,GAAiBI,gBAAAA;AAAA,IAC1B,IAAA,CAAK,WAAWJ,eAAAA,GAAiB;AAAA,GACnC;AAEA,EAAA,uBACEN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,4BAAA,EAA6B,eAAY,MAAA,EACpD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,uCAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQO,eAAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAP,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,iCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAIO,eAAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR,GAAA,EACF,CAAA;AAEJ;ACjDO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,MAAA,EAAO,EAAuB;AACnE,EAAA,OAAO,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACvBN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yBAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACrB,IAAI,KAAA,CAAM,UAAA;AAAA,QACV,EAAA,EAAI,MAAM,UAAA,GAAa;AAAA;AAAA,KACzB;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACpB,CAAA,EAAG,MAAA,GAAS,eAAA,CAAgB,MAAA,GAAS,EAAA;AAAA,QACrC,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EAAA,EAb0C,IAc5C,CACD,CAAA;AACH;ACVO,SAAS,UAAA,CAAW;AAAA,EACzB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIc,SAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,WAAA,GAAc,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,QAAQ,aAAa,CAAA;AAE3E,EAAA,uBACEb,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,wBAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC7CA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAc,CAAA;AAAA,wBAChCA,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBACzCA,GAAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YACC,aAAA;AAAA,YACA,KAAA;AAAA,YACA,UAAA,EAAY,gBAAA;AAAA,YACZ,YAAA,EAAc,MAAM,gBAAA,CAAiB,IAAI;AAAA;AAAA,SAC3C;AAAA,wBACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,MAAA,EAAgB,CAAA;AAAA,QAC5C,WAAA,CAAY,GAAA,CAAI,CAAC,IAAA,qBAChBA,GAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YAEC,MAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAHK,IAAA,CAAK;AAAA,SAKb;AAAA;AAAA;AAAA,GACH;AAEJ;ACrCO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,mBAAA,EAAqB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC3E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB;AAAA,GAAA,EACpC,CAAA;AAEJ;ACxBO,SAAS,OAAA,CAAQ;AAAA,EACtB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,MAAA,GAASe,OAAAA;AAAA,IACb,MAAM,cAAA,CAAe,EAAE,IAAA,EAAM,CAAA;AAAA,IAC7B,CAAC,IAAI;AAAA,GACP;AAEA,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,0BAAA,EAA4B,SAAS,CAAC,CAAA;AAAA,QAC7D,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,OAAA,KAAY;AACf,MAAA,MAAM,KAAA,GAAQ,iBAAA,CAAkB,OAAA,EAAS,KAAA,EAAO,QAAQ,WAAW,CAAA;AAEnE,MAAA,uBACEA,GAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AC5CO,IAAM,mBAAA,GAAsB,cAAA;AAAA,EACjC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,2BAAA,GAA8B;AAAA,EACzC,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,UAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,WAAA,EAAa;AACf;ACoCO,IAAM,8BAAA,GAA8C;AAAA,EACzD,IAAA,EAAM,MAAA;AAAA,EACN,QAAA,EAAU;AACZ;AAEA,IAAMqB,iBAAAA,GAAmB,cAAA;AAAA,EACvB,CAAC,UAAkB,KAAA,IAAS,CAAA;AAAA,EAC5B,CAAC,KAAA,KAAkB,IAAA,CAAK,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EAC1D,eAAO,IAAI;AACb,CAAA;AAEA,IAAM,cAAA,GAAiB;AAAA,EACrB,cAAc,OAAuB;AAAA,IACnC,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,+CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,KAAA,MAAmC;AAAA,IACnD,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,gDAAA;AAAA,IACT,OAAA,EAASA,kBAAiB,KAAK;AAAA,GACjC,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,QAAA,MAAsC;AAAA,IACtD,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,4CAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,QAAQ,CAAC,CAAA,CAAA,CAAG;AAAA,GAC/C,CAAA;AAAA,EACA,sBAAsB,OAAuB;AAAA,IAC3C,IAAA,EAAM,sBAAA;AAAA,IACN,OAAA,EAAS,uEAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,+BAA+B,OAAuB;AAAA,IACpD,IAAA,EAAM,+BAAA;AAAA,IACN,OAAA,EAAS,uDAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AACF,CAAA;AAEA,IAAMlB,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,iBAAA,GAAoB,CAAC,KAAA,KACzB,eAAA,CAAQ,CAAC,MAAA,CAAO,SAAA,EAAW,CAAC,SAAA,KAAsB,SAAA,GAAY,CAAC,CAAC,EAAE,KAAK,CAAA;AAEzE,IAAM,kBAAkB,CAAC,CAAC,IAAA,EAAM,KAAK,MACnC,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA;AAAA,EACjD,MAAM,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA;AAAA,EAC3B,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,GAAI,OAAO,KAAK;AAC1D,CAAC,EAAE,IAAI,CAAA;AAET,IAAM,oBAAA,GAAuB,CAAC,MAAA,KAC5B,WAAA,CAAI,eAAA,EAAiB,gBAAA,CAAS,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAA;AAE/C,IAAM,mBAAA,GAAsB,CAAC,MAAA,KAA8B,MAAA,CAAO,MAAA,IAAU,CAAA;AAE5E,IAAMmB,qBAAAA,GAAuB,CAAC,MAAA,KAA+B,WAAA,CAAInB,iBAAgB,CAAC,GAAG,MAAM,CAAC,CAAA;AAE5F,IAAMoB,uBAAAA,GAAyB,CAAC,MAAA,KAC9B,iBAAA,CAAU,kBAAA,CAAWpB,eAAc,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAA;AAEnD,IAAMqB,mBAAAA,GAAqB,CAAC,MAAA,KAC1B,cAAA,CAAO,CAAC,KAAA,KAA2BrB,eAAAA,CAAe,KAAK,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAA;AAEvE,IAAM,YAAA,GAAe,CAAC,MAAA,KAA0C,cAAA,CAAOA,iBAAgB,CAAC,GAAG,MAAM,CAAC,CAAA;AAElG,IAAMsB,SAAAA,GAAW,CAAC,KAAA,KAAmB,OAAO,KAAA,KAAU,QAAA;AAEtD,IAAMC,kBAAAA,GAAoB,CAAC,QAAA,KAAqB,CAAC,UAC/C,WAAA,CAAY,YAAA,CAAa,KAAK,CAAA,EAAG;AAAA,EAC/B,MAAM,MAAM,QAAA;AAAA,EACZ,IAAA,EAAM,CAAC,aAAA,KACL,cAAA;AAAA,IACED,SAAAA;AAAA,IACA,CAAC,WAAA,KAAwB,iBAAA,CAAU,QAAA,EAAU,WAAW,CAAA;AAAA,IACxD,eAAO,QAAQ;AAAA,IACf,aAAa;AACnB,CAAC,CAAA;AAEH,IAAMR,UAAAA,GAAY,CAAC,MAAA,KAA+C;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAIC,OAAO,MAAM,CAAA;AAE9C,EAAA,OAAO,CAACQ,kBAAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,GAAGA,kBAAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5E,CAAA;AAEA,IAAMP,qBAAoB,CAAC,CAAC,UAAA,EAAY,UAAU,MAAuB,UAAA,KAAe,UAAA;AAExF,IAAMC,sBAAAA,GAAwB,cAAA;AAAA,EAC5BD,kBAAAA;AAAA,EACA,CAAC,CAAC,UAAA,EAAY,UAAU,MAAwC,CAAC,UAAA,GAAa,GAAA,EAAK,UAAA,GAAa,GAAG,CAAA;AAAA,EACnG;AACF,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,UAAA,KAA4C;AAAA,EACnEO,kBAAAA,CAAkB,CAAC,CAAA,CAAE,UAAA,CAAW,CAAC,CAAC,CAAA;AAAA,EAClCA,kBAAAA,CAAkB,CAAC,CAAA,CAAE,YAAA,CAAK,CAAC,GAAG,UAAU,CAAC,CAAC;AAC5C,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,UAAA,KAC7B,YAAA,CAAK,aAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAA;AAE5B,IAAM,kBAAA,GAAqB,CAAC,OAAA,EAA2B,UAAA,KAA2B;AAChF,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAIT,WAAU,OAAO,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,YAAY,CAAA,GAAI,gBAAgB,UAAU,CAAA;AAE/D,EAAA,OAAO,YAAI,gBAAA,EAAU;AAAA,IACnB,YAAA,IAAgB,UAAA;AAAA,IAChB,YAAA,IAAgB;AAAA,GACjB,CAAA;AACH,CAAA;AAOA,IAAMb,kBAAAA,GAAwC;AAAA,EAC5C,CAAC,eAAA,EAAS,MAAM,IAAI,cAAA,CAAe,YAAA,EAAc,CAAC,CAAA;AAAA,EAClD;AAAA,IACE,mBAAWkB,qBAAoB,CAAA;AAAA,IAC/B,CAAC,SAA6B,GAAA,CAAI,cAAA,CAAe,gBAAgBC,uBAAAA,CAAuB,IAAI,CAAC,CAAC;AAAA,GAChG;AAAA,EACA,CAAC,MAAM,IAAA,EAAM,CAAC,SAA6B,EAAA,CAAGC,mBAAAA,CAAmB,IAAI,CAAC,CAAC;AACzE,CAAA;AAEA,IAAMnB,gBAAAA,GAA+D,aAAKD,kBAAiB,CAAA;AAE3F,IAAM,2BAAA,GAA8B,CAAC,QAAA,MAAgD;AAAA,EACnF,IAAA,EAAM,MAAA;AAAA,EACN;AACF,CAAA,CAAA;AAEA,IAAM,6BAAA,GAAgC,CAAC,UAAA,MAAwD;AAAA,EAC7F,IAAA,EAAM,QAAA;AAAA,EACN;AACF,CAAA,CAAA;AAEA,IAAM,uBAAA,GAA0B,CAAC,WAAA,KAC/B,cAAA;AAAA,EACE,iBAAA;AAAA,EACA,CAAC,QAAA,KAAqB,EAAA,CAAG,2BAAA,CAA4B,QAAQ,CAAC,CAAA;AAAA,EAC9D,CAAC,QAAA,KAAqB,GAAA,CAAI,cAAA,CAAe,eAAA,CAAgB,QAAQ,CAAC;AACpE,CAAA,CAAE,YAAY,QAAQ,CAAA;AAExB,IAAM,6BAA6B,eAAA,CAAQ;AAAA,EACzC,mBAAW,mBAAmB,CAAA;AAAA,EAC9B,mBAAWkB,qBAAoB,CAAA;AAAA,EAC/B,mBAAW,oBAAoB;AACjC,CAAC,CAAA;AAED,IAAM,sBAAA,GAAyB,CAAC,OAAA,KAA8B,CAC5D,WAAA,KACsB;AACtB,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,WAAA,CAAY,UAAU,CAAA;AAEtD,EAAA,OAAO,cAAA;AAAA,IACL,CAAC,SAAA,KAA0B,kBAAA,CAAmB,OAAA,EAAS,SAAS,CAAA;AAAA,IAChE,CAAC,SAAA,KAA0B,EAAA,CAAG,6BAAA,CAA8B,SAAS,CAAC,CAAA;AAAA,IACtE,MAAM,GAAA,CAAI,cAAA,CAAe,6BAAA,EAA+B;AAAA,IACxD,UAAU,CAAA;AACd,CAAA;AAEA,IAAM,yBAAA,GAA4B,CAChC,WAAA,EACA,OAAA,KAEA,cAAA;AAAA,EACE,CAAC,QAAA,KAAgC,0BAAA,CAA2B,QAAA,CAAS,UAAU,CAAA;AAAA,EAC/E,MAAM,GAAA,CAAI,cAAA,CAAe,oBAAA,EAAsB,CAAA;AAAA,EAC/C,uBAAuB,OAAO;AAChC,CAAA,CAAE,WAAW,CAAA;AAEf,IAAM,cAAA,GAAiB,CAAC,QAAA,KAAuD,QAAA,CAAS,IAAA,KAAS,MAAA;AAEjG,IAAM,uBAAA,GAA0B,CAC9B,QAAA,KACyC,QAAA,CAAS,IAAA,KAAS,MAAA;AAE7D,IAAM,gBAAA,GAAmB,CACvB,WAAA,EACA,OAAA,KACG,cAAA,CAAO,cAAA,EAAgB,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,MAAM,CAAA,CAAE,WAAW,CAAA;AAErE,IAAM,yBAAA,GAA4B,CAChC,WAAA,EACA,OAAA,KACG,cAAA,CAAO,uBAAA,EAAyB,OAAA,CAAQ,IAAA,EAAM,OAAA,CAAQ,MAAM,CAAA,CAAE,WAAW,CAAA;AAE9E,SAAS,mBAAA,CACP,aACA,OAAA,EACmB;AACnB,EAAA,OAAO,iBAAiB,WAAA,EAAa;AAAA,IACnC,IAAA,EAAM,uBAAA;AAAA,IACN,MAAA,EAAQ,CAAC,QAAA,KAAa,yBAAA,CAA0B,UAAU,OAAO;AAAA,GAClE,CAAA;AACH;AAEO,SAAS,uBAAuB,KAAA,EAA6C;AAClF,EAAA,OAAO,UAAA;AAAA,IAML,CAAC,EAAE,OAAA,OAAc,mBAAA,CAAoB,KAAA,CAAM,aAAa,OAAO,CAAA;AAAA,IAC/D,CAAC,OAAA,EAAS,WAAA,MAAiB,EAAE,GAAG,SAAS,WAAA,EAAY;AAAA,GACvD;AAAA,IACE,UAAA;AAAA,MACE,MAAMjB,gBAAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AAAA,MAChC,CAAC,CAAA,EAAG,OAAA,MAAa,EAAE,OAAA,EAAQ;AAAA,KAC7B,CAAE,EAAA,CAAG,EAAE,CAAC;AAAA,GACV;AACF;AAEA,IAAM,YAAA,GAAe,CAAC,GAAA,KACpB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAmC,MAAA,CAAO,QAAA,CAAS,UAAU,EAAE,CAAA;AAAA,EAChE,CAAC,SAAA,KAAmC,MAAA,CAAO,QAAA,CAAS,UAAU,EAAE,CAAA;AAAA,EAChE,CAAC,cAAmC,MAAA,CAAO,SAAA,CAAU,EAAE,CAAA,GAAI,MAAA,CAAO,UAAU,EAAE;AAChF,CAAC,EAAE,GAAG,CAAA;AAER,IAAM,kBAAA,GAAqB,CAAC,GAAA,MAA4C;AAAA,EACtE,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAAA,EACzB,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAAA,EACzB,OAAO,GAAA,CAAI;AACb,CAAA,CAAA;AAEA,IAAM,sBAAsB,CAAC,OAAA,KAA8Bc,kBAAAA,CAAkBF,UAAAA,CAAU,OAAO,CAAC,CAAA;AAE/F,IAAM,2BAA2B,CAAC,OAAA,KAChCU,KAA4B,CACzB,MAAA,CAAOP,uBAAsBH,UAAAA,CAAU,OAAO,CAAC,CAAC,CAAA,CAChD,WAAW,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAA;AAEhC,IAAM,sBAAA,GAAyB,CAC7B,OAAA,EACA,WAAA,KAEAU,KAA4B,CACzB,MAAA,CAAOP,uBAAsBH,UAAAA,CAAU,OAAO,CAAC,CAAC,CAAA,CAChD,WAAW,WAAA,CAAY,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAA;AAElD,IAAM,eAAA,GAAkB,CACtB,OAAA,EACA,WAAA,KAEA,cAAA;AAAA,EACE,mBAAA;AAAA,EACA,wBAAA;AAAA,EACA,CAAC,YAAA,KAAmC,sBAAA,CAAuB,YAAA,EAAc,WAAW;AACtF,CAAA,CAAE,OAAO,CAAA;AAEX,IAAM,iBAAA,GAAoB,CACxB,OAAA,EACA,WAAA,KAEAU,KAA4B,CACzB,MAAA,CAAO,gBAAgB,WAAA,CAAY,UAAU,CAAC,CAAA,CAC9C,UAAA,CAAW,sBAAsB,WAAA,CAAY,UAAU,CAAC,CAAA,CAAE,CAAC,GAAG,OAAO,CAAC,CAAA;AAE3E,IAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,yBAAA,CAA0B,MAAM,WAAA,EAAa;AAAA,EAC3C,MAAM,CAAC,QAAA,KAAa,eAAA,CAAgB,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,EAC3D,QAAQ,CAAC,QAAA,KAAa,iBAAA,CAAkB,KAAA,CAAM,SAAS,QAAQ;AACjE,CAAC,CAAA;AAEH,IAAM,WAAA,GAAc,CAAC,KAAA,KACnB,WAAA,CAAI,kBAAA,EAAoB,eAAO,YAAA,EAAc,aAAA,CAAc,KAAK,CAAC,CAAC,CAAA;AAE7D,SAAS,iBAAiB,KAAA,EAAwC;AACvE,EAAA,OAAO,UAA4E,WAAW,CAAA;AAAA,IAC5F,uBAAuB,KAAK;AAAA,GAC9B;AACF;ACrUO,IAAM,sBAAA,GAAyB;AAAA,EACpC,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAmBA,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAC1B,iBAAA,CAAkB,CAAC,CAAA,CAAE,YAAA,CAAK,CAAC,GAAG,IAAI,CAAC,CAAA,EAAG,UAAU,CAAA;AAElD,IAAM,iBAAA,GAAoB,CAAC,IAAA,KACzB,iBAAA,CAAkB,CAAC,CAAA,CAAE,YAAA,CAAK,CAAC,GAAG,IAAI,CAAC,CAAA,EAAG,UAAU,CAAA;AAElD,IAAM,cAAc,CAAC,IAAA,KACnB,iBAAA,CAAkB,CAAC,EAAErD,KAAAA,CAAI,WAAA,CAAI,YAAA,CAAK,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAElD,IAAM,wBAAA,GAA2B,CACtC,IAAA,EACA,KAAA,EACA,QACA,cAAA,KACwB;AACxB,EAAA,MAAM,UAAA,GAAa,SAAS,sBAAA,CAAuB,MAAA;AACnD,EAAA,MAAM,MAAA,GAASgC,aAAY,CACxB,MAAA,CAAO,CAAC,kBAAA,CAAmB,IAAI,GAAG,iBAAA,CAAkB,IAAI,CAAC,CAAC,CAAA,CAC1D,MAAM,CAAC,sBAAA,CAAuB,MAAM,KAAA,GAAQ,sBAAA,CAAuB,KAAK,CAAC,CAAA;AAC5E,EAAA,MAAM,SAASA,WAAAA,EAAY,CACxB,OAAO,CAAC,CAAA,EAAG,YAAY,IAAI,CAAC,CAAC,CAAA,CAC7B,MAAK,CACL,KAAA,CAAM,CAAC,UAAA,EAAY,sBAAA,CAAuB,GAAG,CAAC,CAAA;AACjD,EAAA,MAAMsB,MAAAA,GAAQ,CAAC,GAAA,KAA4C;AACzD,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,UAAU,CAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,KAAK,GAAA,CAAI,CAAA,EAAG,OAAO,GAAA,CAAI,UAAU,IAAI,CAAC,CAAA;AACvD,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAE1B,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,CAAA;AAAA,MACA,CAAA;AAAA,MACA,KAAA,EAAO,QAAA;AAAA,MACP,QAAQ,UAAA,GAAa,CAAA;AAAA,MACrB,KAAA,EAAO,eAAe,GAAG;AAAA,KAC3B;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,MAAA,EAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AAAA,IACjD,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB,MAAM,WAAA,CAAIA,MAAAA,EAAO,CAAC,GAAG,IAAI,CAAC,CAAA;AAAA,IAC1B,MAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;ACzEO,SAAS,qBAAA,CAAsB,EAAE,OAAA,EAAQ,EAAyC;AACvF,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,KAAA,qBACL5B,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,qCAAqC,QAAA,EAAA,KAAA,EAAM;AAAA,GAEpE,CAAA;AACH;ACHO,SAAS,kBAAA,CAAmB,EAAE,KAAA,EAAO,KAAA,EAAM,EAA4B;AAC5E,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gCAAA;AAAA,QACV,IAAI,sBAAA,CAAuB,IAAA;AAAA,QAC3B,EAAA,EAAI,QAAQ,sBAAA,CAAuB,KAAA;AAAA,QACnC,IAAI,KAAA,CAAM,UAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gCAAA;AAAA,QACV,IAAI,sBAAA,CAAuB,IAAA;AAAA,QAC3B,IAAI,sBAAA,CAAuB,IAAA;AAAA,QAC3B,IAAI,sBAAA,CAAuB,GAAA;AAAA,QAC3B,IAAI,KAAA,CAAM;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;ACnBA,IAAM6B,YAAAA,GAAc,cAAA;AAAA,EAClB,CAAC,GAAA,KAA8B,GAAA,CAAI,MAAA,GAAS,CAAA;AAAA,EAC5C,CAAC,QAA8B,GAAA,CAAI,CAAA;AAAA,EACnC,CAAC,GAAA,KAA8B,GAAA,CAAI,CAAA,GAAI;AACzC,CAAA;AAEO,SAAS,iBAAA,CAAkB,EAAE,GAAA,EAAI,EAA2B;AACjE,EAAA,uBACE5B,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,+BAAA;AAAA,QACV,GAAG,GAAA,CAAI,CAAA;AAAA,QACP,GAAG,GAAA,CAAI,CAAA;AAAA,QACP,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,aAAA,EAAY;AAAA;AAAA,KACd;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,wCAAA;AAAA,QACV,GAAG,GAAA,CAAI,CAAA;AAAA,QACP,CAAA,EAAG6B,aAAY,GAAG,CAAA;AAAA,QAClB,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,QAC9B,aAAA,EAAY;AAAA;AAAA;AACd,GAAA,EACF,CAAA;AAEJ;AC5BO,SAAS,wBAAA,CAAyB,EAAE,GAAA,EAAI,EAAkC;AAC/E,EAAA,uBACE7B,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iCAAA;AAAA,MACV,CAAA,EAAG,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,CAAA;AAAA,MACvB,CAAA,EAAG,KAAK,GAAA,CAAI,sBAAA,CAAuB,MAAM,EAAA,EAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,MACtD,UAAA,EAAW,QAAA;AAAA,MAEV,QAAA,EAAA,GAAA,CAAI;AAAA;AAAA,GACP;AAEJ;ACDO,SAAS,iBAAA,CAAkB;AAAA,EAChC,MAAA;AAAA,EACA,GAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,gBAAA,GAAmB,cAAA;AAAA,IACvB,eAAO,UAAU,CAAA;AAAA,IACjB,sBAAMA,GAAAA,CAAC,wBAAA,EAAA,EAAyB,GAAA,EAAU,CAAA;AAAA,IAC1C,eAAO,IAAI;AAAA,GACb;AACA,EAAA,MAAM,eAAA,GAAkB,cAAA;AAAA,IACtB,eAAO,MAAM,CAAA;AAAA,IACb,eAAO,uCAAuC,CAAA;AAAA,IAC9C,eAAO,EAAE;AAAA,IACT,MAAM,CAAA;AACR,EAAA,MAAM,kBAAkB,CAAA,EAAG,GAAA,CAAI,KAAK,CAAA,EAAA,EAAK,IAAI,KAAK,CAAA,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACEC,IAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAA,CAAW;AAAA,QACpB,+BAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,MACD,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,YAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,qBAAkB,GAAA,EAAU,CAAA;AAAA,QAC5B,gBAAA;AAAiB;AAAA;AAAA,GACpB;AAEJ;AClDA,IAAM,SAAA,GAAY,CAAC,GAAA,KACjB,CAAA,EAAG,IAAI,UAAU,CAAA,CAAA,EAAI,IAAI,UAAU,CAAA,CAAA;AAE9B,SAAS,kBAAA,CAAmB;AAAA,EACjC,SAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC7B,IAAA,MAAM,MAAA,GAAS,UAAU,GAAG,CAAA;AAE5B,IAAA,uBACEA,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,QAAQ,SAAA,KAAc,MAAA;AAAA,QACtB,GAAA;AAAA,QAEA,UAAA,EAAY,MAAM,UAAA,CAAW,MAAM,CAAA;AAAA,QACnC,YAAA;AAAA,QACA;AAAA,OAAA;AAAA,MAHK;AAAA,KAIP;AAAA,EAEJ,CAAC,CAAA;AACH;AC5BO,SAAS,uBAAA,CAAwB,EAAE,KAAA,EAAO,KAAA,EAAM,EAAiC;AACtF,EAAA,OAAO,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACvBC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,IAAI,sBAAA,CAAuB,IAAA;AAAA,QAC3B,EAAA,EAAI,QAAQ,sBAAA,CAAuB,KAAA;AAAA,QACnC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI;AAAA;AAAA,KACvB;AAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,uBAAuB,IAAA,GAAO,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,EAAG,UAAA,EAAW,OACzE,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EAAA,EATsD,IAUxD,CACD,CAAA;AACH;ACdO,SAAS,sBAAA,CAAuB,EAAE,KAAA,EAAO,KAAA,EAAM,EAAgC;AACpF,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,gCAAA;AAAA,MACV,GAAG,sBAAA,CAAuB,IAAA;AAAA,MAC1B,GAAG,sBAAA,CAAuB,GAAA;AAAA,MAC1B,KAAA,EAAO,KAAA,GAAQ,sBAAA,CAAuB,IAAA,GAAO,sBAAA,CAAuB,KAAA;AAAA,MACpE,MAAA,EAAQ,KAAA,CAAM,UAAA,GAAa,sBAAA,CAAuB;AAAA;AAAA,GACpD;AAEJ;ACTA,IAAMO,eAAAA,GAAiB,EAAA;AACvB,IAAMC,kBAAAA,GAAoB,EAAA;AAC1B,IAAMC,kBAAAA,GAAoB,CAAA;AAC1B,IAAMC,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,gBAAAA,GAAkB,CAAA;AAExB,IAAMC,gBAAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAIJ,oBAAmB,KAAA,CAAM,MAAA,GAASE,mBAAAA,GAAqBD,kBAAAA,GAAoB,CAAC,CAAA;AAEvF,IAAMI,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,qBAAA,CAAsB;AAAA,EACpC,GAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA+B;AAC7B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA;AAC9B,EAAA,MAAM,YAAA,GAAeD,iBAAgB,KAAK,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,KAAK,GAAA,CAAI,sBAAA,CAAuB,MAAM,EAAA,EAAI,GAAA,CAAI,IAAI,CAAC,CAAA;AAClE,EAAA,MAAM,CAAA,GAAIC,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,QAAQ,YAAA,GAAeA,gBAAAA;AAAA,IACvB,GAAA,CAAI,CAAA,GAAI,GAAA,CAAI,KAAA,GAAQ,IAAI,YAAA,GAAe;AAAA,GACzC;AACA,EAAA,MAAM,CAAA,GAAIE,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,SAASJ,eAAAA,GAAiBI,gBAAAA;AAAA,IAC1B,SAASJ,eAAAA,GAAiB;AAAA,GAC5B;AAEA,EAAA,uBACEN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAoC,eAAY,MAAA,EAC3D,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,8CAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQO,eAAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAP,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,wCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAIO,eAAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;;;ACtDO,IAAM,sBAAA,GAAyB,cAAA;AAAA,EACpC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D,CAAA;AAEO,IAAM,qBAAA,GAAwB,CAAC,GAAA,KACpC,CAAA,EAAG,sBAAA,CAAuB,GAAA,CAAI,UAAU,CAAC,CAAA,CAAA,EAAI,sBAAA,CAAuB,GAAA,CAAI,UAAU,CAAC,CAAA,CAAA;AAE9E,IAAM,kCAAA,GAAqC;AAAA,EAChD,WAAA,EAAa,8BAAA;AAAA,EACb,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,iBAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,UAAA,EAAY,KAAA;AAAA,EACZ,cAAA,EAAgB;AAClB;AChBO,SAAS,oBAAA,CAAqB,EAAE,KAAA,EAAO,MAAA,EAAO,EAA8B;AACjF,EAAA,OAAO,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACvBN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EACX,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,QACrB,IAAI,KAAA,CAAM,UAAA;AAAA,QACV,EAAA,EAAI,MAAM,UAAA,GAAa;AAAA;AAAA,KACzB;AAAA,oBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,MAAM,MAAA,CAAO,IAAI,CAAA,EAAG,CAAA,EAAG,SAAS,EAAA,EAAI,UAAA,EAAW,QAAA,EACrD,QAAA,EAAA,sBAAA,CAAuB,IAAI,CAAA,EAC9B;AAAA,GAAA,EAAA,EATiD,IAUnD,CACD,CAAA;AACH;ACNA,IAAM8B,UAAAA,GAAY,CAAC,GAAA,KACjB,CAAA,EAAG,IAAI,UAAU,CAAA,CAAA,EAAI,IAAI,UAAU,CAAA,CAAA;AAE9B,SAAS,iBAAA,CAAkB;AAAA,EAChC,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIhB,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQgB,UAAAA,CAAU,GAAG,CAAA,KAAM,SAAS,CAAA;AAE1E,EAAA,uBACE7B,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,+BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,sBAAA,EAAA,EAAuB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBACpDA,GAAAA,CAAC,uBAAA,EAAA,EAAwB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBACrDA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAChDA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,SAAA;AAAA,YACA,KAAA;AAAA,YACA,UAAA,EAAY,YAAA;AAAA,YACZ,YAAA,EAAc,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,YACrC;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA,CAAC,oBAAA,EAAA,EAAqB,KAAA,EAAc,MAAA,EAAgB,CAAA;AAAA,QACnD,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,qBACfA,GAAAA;AAAA,UAAC,qBAAA;AAAA,UAAA;AAAA,YAEC,GAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAHK8B,WAAU,GAAG;AAAA,SAKrB;AAAA;AAAA;AAAA,GACH;AAEJ;AC1CO,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,uBACE7B,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,0BAAA,EAA4B,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAClF,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,qBAAA,EAAA,EAAsB,OAAA,EAAkB;AAAA,GAAA,EAC3C,CAAA;AAEJ;AC1BO,SAAS,cAAA,CAAe;AAAA,EAC7B,IAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,MAAA,GAASe,OAAAA;AAAA,IACb,MAAM,gBAAA,CAAiB,EAAE,IAAA,EAAM,aAAa,CAAA;AAAA,IAC5C,CAAC,aAAa,IAAI;AAAA,GACpB;AAEA,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,iCAAA,EAAmC,SAAS,CAAC,CAAA;AAAA,QACpE,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,IAAA,KAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,wBAAA,CAAyB,IAAA,EAAM,KAAA,EAAO,QAAQ,cAAc,CAAA;AAE1E,MAAA,uBACEA,GAAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;ACxBO,IAAM,gBAAA,GAAmC;AACzC,IAAM,eAAA,GAAkC;AACxC,IAAM,yBAAA,GAA4C;AAEzD,IAAM,YAAA,GAAe;AAAA,EACnB,iBAAiB,OAAqB;AAAA,IACpC,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,2CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,mBAAA,EAAqB,CAAC,YAAA,MAAyC;AAAA,IAC7D,IAAA,EAAM,qBAAA;AAAA,IACN,OAAA,EAAS,iDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,MAAA,CAAO,YAAY,CAAC,CAAA,CAAA,CAAG;AAAA,GACjE,CAAA;AAAA,EACA,qBAAA,EAAuB,CAAC,cAAA,MAA2C;AAAA,IACjE,IAAA,EAAM,uBAAA;AAAA,IACN,OAAA,EAAS,4DAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,cAAc,CAAC,CAAA,CAAA,CAAG;AAAA,GACrE;AACF,CAAA;AAEA,IAAMG,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,qBAAA,GAAwB,CAAC,KAAA,KAC7B,eAAA,CAAQ;AAAA,EACNA,eAAAA;AAAA,EACA,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,KAAM;AAChD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM4B,iBAAAA,GAAmB,CAAC,KAAA,KACxB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,CAAE,IAAA,GAAO,MAAA,GAAS;AAC5D,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAAwBA,iBAAAA,CAAiB,MAAM,UAAU,CAAA;AAErF,IAAMC,qBAAAA,GAAuB,CAAC,KAAA,KAAwB7B,eAAAA,CAAe,MAAM,YAAY,CAAA;AAEvF,IAAM,sBAAA,GAAyB,CAAC,KAAA,KAC9B,qBAAA,CAAsB,MAAM,cAAc,CAAA;AAE5C,IAAM8B,iBAAAA,GAAmB,CAAC,KAAA,MAAgD;AAAA,EACxE,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,UAAU,EAAE,IAAA,EAAK;AAAA,EAC1C,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA,EACvC,cAAA,EAAgB,MAAA,CAAO,KAAA,CAAM,cAAc,CAAA;AAAA,EAC3C,QAAA,EAAU,SAAA,CAA0B,yBAAyB,CAAA,CAAE,MAAM,QAAQ;AAC/E,CAAA,CAAA;AAEA,IAAMC,gBAAAA,GAA2C;AAAA,EAC/C;AAAA,IACE,mBAAW,kBAAkB,CAAA;AAAA,IAC7B,MAAM,GAAA,CAAI,YAAA,CAAa,eAAA,EAAiB;AAAA,GAC1C;AAAA,EACA;AAAA,IACE,mBAAWF,qBAAoB,CAAA;AAAA,IAC/B,CAAC,KAAA,KAAwB,GAAA,CAAI,aAAa,mBAAA,CAAoB,KAAA,CAAM,YAAY,CAAC;AAAA,GACnF;AAAA,EACA;AAAA,IACE,mBAAW,sBAAsB,CAAA;AAAA,IACjC,CAAC,KAAA,KAAwB,GAAA,CAAI,aAAa,qBAAA,CAAsB,KAAA,CAAM,cAAc,CAAC;AAAA,GACvF;AAAA,EACA,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,CAAC,UAAwB,EAAA,CAAGC,iBAAAA,CAAiB,KAAK,CAAC,CAAC;AACrE,CAAA;AAEO,IAAM,oBAAA,GACX,aAAKC,gBAAe;AAEtB,IAAM,gBAAA,GAAmB,CAAC,QAAA,KAA6B,QAAA,KAAa,gBAAA;AAEpE,IAAM,eAAA,GAAkB,CAAC,QAAA,KAA6B,QAAA,KAAa,eAAA;AAEnE,IAAM,WAAA,GAAc,CAAC,OAAA,KAAoC,OAAA,CAAQ,YAAA,KAAiB,CAAA;AAElF,IAAM,2BAAA,GAA8B,CAAC,OAAA,KACnC,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAsC,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA;AAAA,EAC1E,CAAC,SAAA,KAAsC,SAAA,CAAU,YAAA,GAAe;AAClE,CAAC,EAAE,OAAO,CAAA;AAEZ,IAAM,0BAAA,GAA6B,CAAC,OAAA,KAClC,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAsC,eAAA,CAAgB,SAAA,CAAU,QAAQ,CAAA;AAAA,EACzE,CAAC,SAAA,KAAsC,SAAA,CAAU,YAAA,GAAe;AAClE,CAAC,EAAE,OAAO,CAAA;AAEZ,IAAM,oBAAA,GAA8C;AAAA,EAClD,CAAC,WAAA,EAAa,cAAA,CAAO,WAAW,CAAC,CAAA;AAAA,EACjC,CAAC,2BAAA,EAA6B,cAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EAChD,CAAC,0BAAA,EAA4B,cAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EAC/C,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,UAAU,CAAC;AACnC,CAAA;AAEA,IAAM,qBAAA,GACJ,aAAK,oBAAoB,CAAA;AAE3B,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAC3B,KAAA,CAAM,eAAe,KAAA,CAAM,cAAA;AAE7B,IAAM,0BAA0B,CAC9B,YAAA,EACA,KAAA,KACI,YAAA,GAAe,MAAM,cAAA,GAAkB,GAAA;AAE7C,IAAM,YAAA,GAAe,CAAC,KAAA,KAA6C;AACjE,EAAA,MAAM,YAAA,GAAe,oBAAoB,KAAK,CAAA;AAC9C,EAAA,MAAM,gBAAA,GAAmB,uBAAA,CAAwB,YAAA,EAAc,KAAK,CAAA;AAEpE,EAAA,OAAO;AAAA,IACL,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,gBAAgB,KAAA,CAAM,cAAA;AAAA,IACtB,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAiB,qBAAA,CAAsB,EAAE,cAAc,QAAA,EAAU,KAAA,CAAM,UAAU;AAAA,GACnF;AACF,CAAA;AAEO,SAAS,eAAe,KAAA,EAAoC;AACjE,EAAA,OAAO,UAA2D,YAAY,CAAA;AAAA,IAC5E,qBAAqB,KAAK;AAAA,GAC5B;AACF;;;ACzIA,IAAM,2BAAA,GAA8B,CAAC,SAAA,KACnC,SAAA,CAAU,WAAA,EAAY;AAExB,IAAM,kBAAA,GAAqB,CAAC,eAAA,KAC1B,cAAA;AAAA,EACE,CAAC,SAAA,KAAsB,SAAA,CAAU,IAAA,GAAO,MAAA,GAAS,CAAA;AAAA,EACjD,CAAC,SAAA,KAAsB,CAAC,SAAA,CAAU,MAAM,CAAA;AAAA,EACxC,MAAM;AACR,CAAA,CAAE,eAAe,CAAA;AAEnB,IAAM,UAAA,GAAa,CAAC,KAAA,KAA6B,KAAA,CAAM,KAAK,GAAG,CAAA;AAExD,IAAM,oBAAoB,CAC/B,OAAA,EACA,eAAA,EACA,WAAA,EACA,oBACA,sBAAA,KACiB;AACjB,EAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,OAAA,CAAQ,YAAY,CAAA;AAC1D,EAAA,MAAM,mBAAA,GAAsB,WAAA,CAAY,OAAA,CAAQ,cAAc,CAAA;AAC9D,EAAA,MAAM,iBAAA,GAAoB,kBAAA,CAAmB,OAAA,CAAQ,YAAY,CAAA;AACjE,EAAA,MAAM,qBAAA,GAAwB,sBAAA,CAAuB,OAAA,CAAQ,gBAAgB,CAAA;AAC7E,EAAA,MAAM,yBAAA,GAA4B,gBAAgB,IAAA,EAAK;AACvD,EAAA,MAAM,uBAAuB,OAAA,CAAQ,eAAA;AACrC,EAAA,MAAM,cAAc,UAAA,CAAW;AAAA,IAC7B,oBAAA;AAAA,IACA,qBAAA;AAAA,IACA,IAAI,iBAAiB,CAAA,CAAA,CAAA;AAAA,IACrB,GAAG,mBAAmB,yBAAyB;AAAA,GAChD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,iBAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,IACA,iBAAiB,OAAA,CAAQ,eAAA;AAAA,IACzB,oBAAA;AAAA,IACA,wBAAA,EAA0B,2BAAA,CAA4B,OAAA,CAAQ,eAAe,CAAA;AAAA,IAC7E,eAAA,EAAiB,yBAAA;AAAA,IACjB,WAAA;AAAA,IACA,cAAc,UAAA,CAAW;AAAA,MACvB,CAAA,EAAG,QAAQ,UAAU,CAAA,CAAA,CAAA;AAAA,MACrB,GAAG,iBAAiB,CAAA,CAAA,CAAA;AAAA,MACpB,GAAG,WAAW,CAAA,CAAA,CAAA;AAAA,MACd,mBAAmB,mBAAmB,CAAA,CAAA;AAAA,KACvC;AAAA,GACH;AACF,CAAA;AC9DO,SAAS,cAAA,CAAe,EAAE,OAAA,EAAQ,EAAwB;AAC/D,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,OAAA,qBACLlC,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,8BAA8B,QAAA,EAAA,OAAA,EAAQ;AAAA,GAE/D,CAAA;AACH;ACQA,IAAM,WAAA,GAAc,CAAC,KAAA,EAAe,MAAA,MAAkC;AAAA,EACpE,2BAAA,EAA6B,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA,EAAA,CAAA;AAAA,EAC7C,gCAAA,EAAkC,CAAA,EAAG,MAAA,CAAO,MAAM,CAAC,CAAA,EAAA;AACrD,CAAA,CAAA;AAEO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,kBAAkB,UAAA,CAAW;AAAA,IACjC,2BAAA;AAAA,IACA,CAAA,2BAAA,EAA8B,IAAI,wBAAwB,CAAA;AAAA,GAC3D,CAAA;AAED,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,CAAC,mBAAA,EAAqB,SAAS,CAAC,CAAA;AAAA,MACtD,YAAA,EAAY,SAAA;AAAA,MACZ,KAAA,EAAO,WAAA,CAAY,KAAA,EAAO,MAAM,CAAA;AAAA,MAEhC,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,SAAI,SAAA,EAAU,yBAAA,EAA0B,MAAK,OAAA,EAAQ,YAAA,EAAY,IAAI,YAAA,EACpE,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAAA,EAA6B,cAAI,UAAA,EAAW,CAAA;AAAA,0BACzDA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,0BAAA,EAA4B,cAAI,iBAAA,EAAkB,CAAA;AAAA,0BAC/DC,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,eAAA,EAAiB,YAAA,EAAY,IAAI,WAAA,EAC7C,QAAA,EAAA;AAAA,4BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAAgC,cAAI,oBAAA,EAAqB,CAAA;AAAA,4BACzEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,cAAI,qBAAA,EACP,CAAA;AAAA,4BACAC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2BAAA,EAA4B,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAAE,GAAA,CAAI,iBAAA;AAAA,cAAkB;AAAA,aAAA,EAAC,CAAA;AAAA,4BACrED,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,cAAI,eAAA,EAAgB;AAAA,WAAA,EACvE;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB;AAAA;AAAA;AAAA,GACpC;AAEJ;AClDO,SAAS,OAAA,CAAQ;AAAA,EACtB,UAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,MAAA,GAASe,OAAAA;AAAA,IACb,MAAM,cAAA,CAAe,EAAE,YAAY,YAAA,EAAc,cAAA,EAAgB,UAAU,CAAA;AAAA,IAC3E,CAAC,YAAA,EAAc,UAAA,EAAY,QAAA,EAAU,cAAc;AAAA,GACrD;AAEA,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,0BAAA,EAA4B,SAAS,CAAC,CAAA;AAAA,QAC7D,KAAA,EAAM,iBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,OAAA,KAAY;AACf,MAAA,MAAM,GAAA,GAAM,iBAAA;AAAA,QACV,OAAA;AAAA,QACA,eAAA;AAAA,QACA,WAAA;AAAA,QACA,kBAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,uBACEA,GAAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,UACA,GAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;ACxDO,IAAM,mBAAA,GAAsB,cAAA;AAAA,EACjC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,yBAAA,GAA4B,CAAC,KAAA,KACxC,cAAA;AAAA,EACE,CAAC,cAAsB,SAAA,GAAY,CAAA;AAAA,EACnC,CAAC,SAAA,KAAsB,CAAA,CAAA,EAAI,mBAAA,CAAoB,SAAS,CAAC,CAAA,CAAA;AAAA,EACzD;AACF,CAAA,CAAE,KAAK;AAEF,IAAM,0BAA0B,CAAC,UAAA,KACtC,CAAA,EAAG,yBAAA,CAA0B,UAAU,CAAC,CAAA,CAAA;AAEnC,IAAM,2BAAA,GAA8B;AAAA,EACzC,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,UAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,eAAA,EAAiB,cAAA;AAAA,EACjB,WAAA,EAAa,mBAAA;AAAA,EACb,kBAAA,EAAoB,yBAAA;AAAA,EACpB,sBAAA,EAAwB;AAC1B;;;ACeA,IAAMmC,oBAAAA,GAAsB,CAAA;AAE5B,IAAMhC,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAMiC,gBAAAA,GAAkB,CAAC,IAAA,KACvB,IAAA,CAAK,MAAA,IAAUD,oBAAAA;AAEjB,IAAME,WAAAA,GAAa,CAAC,IAAA,KAAuC,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEnF,IAAMC,WAAAA,GAAa,CAAC,IAAA,KAAuC,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEnF,IAAMC,wBAAuB,CAAC,IAAA,KAC5B,YAAIpC,eAAAA,EAAgBkC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAEtC,IAAMG,wBAAuB,CAAC,IAAA,KAC5B,YAAIrC,eAAAA,EAAgBmC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAEtC,IAAMG,uBAAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAWtC,eAAc,CAAA,EAAGkC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAExD,IAAMK,uBAAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAWvC,eAAc,CAAA,EAAGmC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAExD,IAAMK,iBAAAA,GAAmB,CAAC,IAAA,KAAuC;AAC/D,EAAA,MAAM,OAAA,GAAUN,YAAW,IAAI,CAAA;AAE/B,EAAA,OAAO,OAAA,CAAQ,MAAA,KAAW,IAAI,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA;AAC7C,CAAA;AAEA,IAAMO,oBAAAA,GAAsB,CAAC,IAAA,KAAuC;AAClE,EAAA,MAAM,OAAA,GAAUP,YAAW,IAAI,CAAA;AAE/B,EAAA,OAAO,iBAAA;AAAA,IACL,CAAA;AAAA,IACA,OAAA,CAAQ,KAAK,CAAC,MAAA,EAAQ,UAAU,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,KAAM,KAAK;AAAA,GACnE;AACF,CAAA;AAEA,IAAMQ,gBAAe,CACnB,IAAA,EACA,KAAA,KACG,IAAA,CAAK,IAAI,KAAA,CAAM,CAAA;AAEpB,IAAMC,QAAAA,GAAU,CACd,OAAA,KAC8B,CAAC,GAAG,OAAO,CAAA,CAAE,KAAKD,aAAY,CAAA;AAE9D,IAAM,aAAA,GAAgB,CACpB,MAAA,KAC0B,MAAA,CAAO,MAAA,KAAW,CAAA;AAE9C,IAAM,qBAAA,GAAwB,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,MAAyC;AAAA,EACjF,KAAA;AAAA,EACA;AACF,CAAA,CAAA;AAEO,IAAM,2BAAA,GAA8B,CACzC,IAAA,EACA,KAAA,KAC0B;AAC1B,EAAA,MAAMzC,kBAAAA,GAAgD;AAAA,IACpD,CAAC,mBAAWgC,gBAAe,CAAA,EAAG,MAAM,GAAA,CAAI,KAAA,CAAM,kBAAA,EAAoB,CAAC,CAAA;AAAA,IACnE;AAAA,MACE,mBAAWG,qBAAoB,CAAA;AAAA,MAC/B,CAAC,cACC,GAAA,CAAI,KAAA,CAAM,cAAcE,uBAAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,KAC9D;AAAA,IACA;AAAA,MACE,mBAAWD,qBAAoB,CAAA;AAAA,MAC/B,CAAC,cACC,GAAA,CAAI,KAAA,CAAM,cAAcE,uBAAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,KAC9D;AAAA,IACA;AAAA,MACE,mBAAWC,iBAAgB,CAAA;AAAA,MAC3B,CAAC,cACC,GAAA,CAAI,KAAA,CAAM,gBAAgBC,oBAAAA,CAAoB,SAAS,CAAC,CAAC;AAAA,KAC7D;AAAA,IACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAA4C,EAAA,CAAG,SAAS,CAAC;AAAA,GAC3E;AACA,EAAA,MAAMvC,gBAAAA,GACJ,aAAKD,kBAAiB,CAAA;AAExB,EAAA,OAAOC,iBAAgB,IAAI,CAAA;AAC7B,CAAA;AAEO,IAAM,2BAAA,GAA8B,CACzC,OAAA,KAEA,WAAA,CAAI,qBAAA,EAAuB,gBAAA,CAAS,CAAA,EAAGyC,QAAAA,CAAQ,OAAO,CAAC,CAAA,CAAE,MAAA,CAAO,aAAa,CAAC,CAAA;;;ACxHhF,IAAM,cAAA,GAAyD;AAAA,EAC7D,oBAAoB,OAAuB;AAAA,IACzC,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,yCAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAmC;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,mDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAmC;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,mDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,CAAA,MAA+B;AAAA,IAC/C,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,qCAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAG;AAAA,GAClD;AACF,CAAA;AAEO,SAAS,uBAAuB,KAAA,EAA6C;AAClF,EAAA,OAAO,SAAA;AAAA,IACL,CAAC,OAAA,MAAa,EAAE,OAAA,EAAQ;AAAA,GAC1B,CAAE,2BAAA,CAA4B,KAAA,CAAM,IAAA,EAAM,cAAc,CAAC,CAAA;AAC3D;AAEA,IAAM,eAAA,GAAkB,CAAC,KAAA,KACvB,2BAAA,CAA4B,MAAM,OAAO,CAAA;AAEpC,SAAS,iBAAiB,KAAA,EAAwC;AACvE,EAAA,OAAO,SAAA;AAAA,IACL;AAAA,GACF,CAAE,sBAAA,CAAuB,KAAK,CAAC,CAAA;AACjC;AC9CO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAuBA,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAAkB,KAAA,KAAU,CAAA;AAEzD,IAAM,mBAAA,GAAsB,CAAC,OAAA,KAAyB,CAAC,KAAA,KACrD,cAAA;AAAA,EACE,mBAAA;AAAA,EACA,eAAO,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,EACnC,cAAA,CAAO,CAAC,OAAA,CAAQ,GAAG,CAAC;AACtB,CAAA,CAAE,KAAK,CAAA;AAET,IAAM,qBAAA,GAAwB,CAAC,QAAA,KAC7B,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,EAAS,KAAA,KAAU,mBAAA,CAAoB,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAE1E,IAAM7B,UAAAA,GAAY,CAAC,MAAA,KAA2C;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAIC,OAAO,MAAM,CAAA;AAE9C,EAAA,OAAO,CAAC,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,GAAG,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5E,CAAA;AAEA,IAAMC,qBAAoB,CAAC,CAAC,UAAA,EAAY,UAAU,MAAmB,UAAA,KAAe,UAAA;AAEpF,IAAMC,sBAAAA,GAA8D,cAAA;AAAA,EAClED,kBAAAA;AAAA,EACA,CAAC,CAAC,UAAA,EAAY,UAAU,MAAgC,CAAC,UAAA,GAAa,GAAA,EAAK,UAAA,GAAa,GAAG,CAAA;AAAA,EAC3F;AACF,CAAA;AAEA,IAAM4B,eAAAA,GAAiB,CAAC,MAAA,KACtB,iBAAA;AAAA,EACE,EAAA;AAAA,EACAC,IAAAA,EAAwB,CACrB,CAAA,CAAE,CAAC,UAAU,KAAA,CAAM,EAAE,CAAA,CACrB,CAAA,CAAE,CAAC,KAAA,KAAU,KAAA,CAAM,EAAE,EAAE,MAAM;AAClC,CAAA;AAEF,IAAMC,WAAAA,GAAa,CAAC,MAAA,KAClB7B,sBAAAA,CAAsBH,WAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE9D,IAAMiC,WAAAA,GAAa,CAAC,MAAA,KAClB9B,sBAAAA,CAAsBH,WAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAEvD,IAAM,mBAAA,GAAsB,CACjC,QAAA,EACA,KAAA,EACA,MAAA,KACmB;AACnB,EAAA,MAAM,UAAA,GAAa,SAAS,iBAAA,CAAkB,MAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,sBAAsB,QAAQ,CAAA;AAC7C,EAAA,MAAM,SAASX,WAAAA,EAAY,CACxB,MAAA,CAAO2C,WAAAA,CAAW,MAAM,CAAC,CAAA,CACzB,IAAA,EAAK,CACL,MAAM,CAAC,iBAAA,CAAkB,MAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS3C,WAAAA,EAAY,CACxB,MAAA,CAAO4C,YAAW,MAAM,CAAC,CAAA,CACzB,IAAA,GACA,KAAA,CAAM,CAAC,UAAA,EAAY,iBAAA,CAAkB,GAAG,CAAC,CAAA;AAC5C,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,MAA8C;AAAA,IACrE,GAAG,KAAA;AAAA,IACH,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IAClB,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC;AAAA,GACpB,CAAA;AACA,EAAA,MAAM,iBAAiB,WAAA,CAAI,eAAA,EAAiB,CAAC,GAAG,MAAM,CAAC,CAAA;AACvD,EAAA,MAAM,YAAA,GAAeH,gBAAe,cAAc,CAAA;AAClD,EAAA,MAAM,iBAAA,GAAoB,CAAC,OAAA,MAA+C;AAAA,IACxE,KAAA,EAAO,eAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAAA,IACpC,GAAA,EAAK,eAAA,CAAgB,OAAA,CAAQ,GAAG;AAAA,GAClC,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,MAAA,EAAQ,cAAA;AAAA,IACR,UAAU,WAAA,CAAI,iBAAA,EAAmB,CAAC,GAAG,QAAQ,CAAC,CAAA;AAAA,IAC9C,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAC/C,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB,MAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AC9GO,SAAS,gBAAA,CAAiB,EAAE,OAAA,EAAQ,EAAoC;AAC7E,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,IAAA,qBAAS/C,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,gCAAgC,QAAA,EAAA,IAAA,EAAK;AAAA,GAC5E,CAAA;AACH;ACDO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,EAAM,EAAuB;AAClE,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2BAAA;AAAA,QACV,IAAI,iBAAA,CAAkB,IAAA;AAAA,QACtB,EAAA,EAAI,QAAQ,iBAAA,CAAkB,KAAA;AAAA,QAC9B,IAAI,KAAA,CAAM,UAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2BAAA;AAAA,QACV,IAAI,iBAAA,CAAkB,IAAA;AAAA,QACtB,IAAI,iBAAA,CAAkB,IAAA;AAAA,QACtB,IAAI,iBAAA,CAAkB,GAAA;AAAA,QACtB,IAAI,KAAA,CAAM;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;AChBO,SAAS,kBAAA,CAAmB;AAAA,EACjC,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,IAAA,qBACjBD,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,gCAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAI,iBAAA,CAAkB,IAAA;AAAA,UACtB,EAAA,EAAI,QAAQ,iBAAA,CAAkB,KAAA;AAAA,UAC9B,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI;AAAA;AAAA,OACvB;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,iBAAA,CAAkB,OAAO,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,EAAG,UAAA,EAAW,KAAA,EACpE,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EACpB;AAAA,KAAA,EAAA,EATiD,CAAA,EAAA,EAAK,IAAI,CAAA,CAU5D,CACD,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACjBC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,IAAI,iBAAA,CAAkB,GAAA;AAAA,UACtB,IAAI,KAAA,CAAM;AAAA;AAAA,OACZ;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACpB,CAAA,EAAG,MAAA,GAAS,iBAAA,CAAkB,MAAA,GAAS,EAAA;AAAA,UACvC,UAAA,EAAW,QAAA;AAAA,UAEV,uBAAa,IAAI;AAAA;AAAA;AACpB,KAAA,EAAA,EAbiD,CAAA,EAAA,EAAK,IAAI,CAAA,CAc5D,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AC9CO,SAAS,aAAA,CAAc,EAAE,KAAA,EAAM,EAAuB;AAC3D,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAA4B,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,aAAA,EAAY,MAAA,EAAO,CAAA;AACvF;ACAO,SAAS,iBAAA,CAAkB,EAAE,KAAA,EAAO,KAAA,EAAM,EAA2B;AAC1E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,2BAAA;AAAA,MACV,GAAG,iBAAA,CAAkB,IAAA;AAAA,MACrB,GAAG,iBAAA,CAAkB,GAAA;AAAA,MACrB,KAAA,EAAO,KAAA,GAAQ,iBAAA,CAAkB,IAAA,GAAO,iBAAA,CAAkB,KAAA;AAAA,MAC1D,MAAA,EAAQ,KAAA,CAAM,UAAA,GAAa,iBAAA,CAAkB;AAAA;AAAA,GAC/C;AAEJ;ACFO,SAAS,oBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,eAAA,GAAkB,cAAA;AAAA,IACtB,eAAO,MAAM,CAAA;AAAA,IACb,eAAO,oCAAoC,CAAA;AAAA,IAC3C,eAAO,EAAE;AAAA,IACT,MAAM,CAAA;AACR,EAAA,MAAM,gBAAA,GAAmB,cAAA;AAAA,IACvB,eAAO,UAAU,CAAA;AAAA,IACjB,eAAO,qCAAqC,CAAA;AAAA,IAC5C,eAAO,EAAE;AAAA,IACT,UAAU,CAAA;AACZ,EAAA,MAAM,eAAA,GAAkB,CAAA,EAAG,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAC1E,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACEC,IAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAA,CAAW;AAAA,QACpB,4BAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,MACD,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,YAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qCAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,CAAA,EAAG;AAAA;AAAA,SACL;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,gCAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,IAAI,KAAA,CAAM,EAAA;AAAA,YACV,CAAA,EAAG;AAAA;AAAA;AACL;AAAA;AAAA,GACF;AAEJ;AC5DO,SAAS,eAAA,CAAgB;AAAA,EAC9B,YAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,0BACvBA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,iBAAiB,KAAA,CAAM,CAAA;AAAA,MAC/B,YAAA;AAAA,MACA,YAAA;AAAA,MAEA,UAAA,EAAY,MAAM,UAAA,CAAW,KAAA,CAAM,CAAC,CAAA;AAAA,MACpC,YAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KAAA;AAAA,IAJK,KAAA,CAAM;AAAA,GAMd,CAAA;AACH;ACzBA,IAAMO,eAAAA,GAAiB,EAAA;AACvB,IAAMC,kBAAAA,GAAoB,EAAA;AAC1B,IAAMC,kBAAAA,GAAoB,CAAA;AAC1B,IAAMC,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,gBAAAA,GAAkB,CAAA;AAExB,IAAMC,gBAAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAIJ,oBAAmB,KAAA,CAAM,MAAA,GAASE,mBAAAA,GAAqBD,kBAAAA,GAAoB,CAAC,CAAA;AAEvF,IAAMI,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,gBAAA,CAAiB;AAAA,EAC/B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAChE,EAAA,MAAM,YAAA,GAAeD,iBAAgB,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAIC,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,QAAQ,YAAA,GAAeA,gBAAAA;AAAA,IACvB,KAAA,CAAM,KAAK,YAAA,GAAe;AAAA,GAC5B;AACA,EAAA,MAAM,CAAA,GAAIE,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,SAASJ,eAAAA,GAAiBI,gBAAAA;AAAA,IAC1B,KAAA,CAAM,KAAKJ,eAAAA,GAAiB;AAAA,GAC9B;AAEA,EAAA,uBACEN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAA+B,eAAY,MAAA,EACtD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,yCAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQO,eAAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAP,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAIO,eAAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC3CO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIO,SAAwB,IAAI,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,MAAM,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,KAAA,CAAM,MAAM,YAAY,CAAA;AAE5E,EAAA,uBACEb,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,0BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC/CA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC3CA,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC7BA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,YAAA;AAAA,YACA,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,UAAA,EAAY,eAAA;AAAA,YACZ,YAAA,EAAc,MAAM,eAAA,CAAgB,IAAI,CAAA;AAAA,YACxC;AAAA;AAAA,SACF;AAAA,QACC,YAAA,CAAa,GAAA,CAAI,CAAC,KAAA,qBACjBA,GAAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACC,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YAEA,KAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAFK,KAAA,CAAM;AAAA,SAId;AAAA;AAAA;AAAA,GACH;AAEJ;AC/CO,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,qBAAA,EAAuB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC7E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB;AAAA,GAAA,EACtC,CAAA;AAEJ;ACrCO,SAAS,SAAA,CAAU;AAAA,EACxB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,MAAA,GAASe,OAAAA,CAAQ,MAAM,gBAAA,CAAiB,EAAE,MAAM,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAE/D,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,4BAAA,EAA8B,SAAS,CAAC,CAAA;AAAA,QAC/D,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,QAAA,KAAa;AAChB,MAAA,MAAM,KAAA,GAAQ,mBAAA,CAAoB,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AAEzD,MAAA,uBACEA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AC9CO,IAAM,qBAAA,GAAwB,cAAA;AAAA,EACnC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,6BAAA,GAAgC;AAAA,EAC3C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,YAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,YAAA,EAAc,qBAAA;AAAA,EACd,YAAA,EAAc;AAChB;;;ACqBA,IAAM,mBAAA,GAAsB,CAAA;AAC5B,IAAM,GAAA,GAAM,KAAK,EAAA,GAAK,CAAA;AAEf,IAAM,+BAAA,GAAgD;AAAA,EAC3D,IAAA,EAAM;AACR;AAEA,IAAM,kBAAA,GAAqB;AAAA,EACzB,oBAAoB,OAA2B;AAAA,IAC7C,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,iDAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,gBAAA,EAAkB,CAAC,QAAA,MAA0C;AAAA,IAC3D,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS,kEAAA;AAAA,IACT,OAAA,EAAS,IAAA,CAAK,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAA,CAAG;AAAA,GAC1D,CAAA;AAAA,EACA,iBAAA,EAAmB,CAAC,QAAA,MAA0C;AAAA,IAC5D,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,gDAAA;AAAA,IACT,OAAA,EAAS,IAAA,CAAK,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAG;AAAA,GAClD,CAAA;AAAA,EACA,iBAAA,EAAmB,CAAC,KAAA,MAAuC;AAAA,IACzD,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,2DAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,wBAAA,EAA2B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC3D,CAAA;AAAA,EACA,kBAAA,EAAoB,CAAC,WAAA,MAA8C;AAAA,IACjE,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,oEAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,sBAAA,EAAyB,MAAA,CAAO,WAAW,CAAC,CAAA,CAAA,CAAG;AAAA,GAC/D;AACF,CAAA;AAEA,IAAMG,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,sBAAA,GAAyB,CAAC,KAAA,KAC9B,eAAA,CAAQ;AAAA,EACNA,eAAAA;AAAA,EACA,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,GAAI;AAC9C,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM4B,oBAAmB,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAElE,IAAM,eAAA,GAAkB,CAAC,IAAA,KAA2B,IAAA,CAAK,MAAA,IAAU,mBAAA;AAEnE,IAAMoB,cAAAA,GAAgB,CAAC,IAAA,KAA2B,WAAA,CAAI,YAAA,CAAK,UAAU,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAEjF,IAAMC,UAAAA,GAAY,CAAC,IAAA,KAA2B,WAAA,CAAI,YAAA,CAAK,OAAO,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAE1E,IAAMC,0BAAyB,CAAC,IAAA,KAC9B,YAAItB,iBAAAA,EAAkBoB,cAAAA,CAAc,IAAI,CAAC,CAAA;AAE3C,IAAMG,uBAAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAWvB,iBAAgB,CAAA,EAAGoB,cAAAA,CAAc,IAAI,CAAC,CAAA;AAE7D,IAAM,8BAA8B,CAAC,IAAA,KACnC,YAAI,sBAAA,EAAwBC,UAAAA,CAAU,IAAI,CAAC,CAAA;AAE7C,IAAM,wBAAA,GAA2B,CAAC,IAAA,KAChC,iBAAA;AAAA,EACE,kBAAA;AAAA,EACA,IAAA,CAAK,IAAA,CAAK,CAACxD,MAAAA,KAAU,kBAAA,CAAW,sBAAsB,CAAA,CAAEA,MAAAA,CAAM,KAAK,CAAC,CAAA,EAAG;AACzE,CAAA;AAEF,IAAM2D,oBAAAA,GAAsB,CAAC,IAAA,KAA2B;AACtD,EAAA,MAAM,UAAA,GAAaJ,eAAc,IAAI,CAAA;AAErC,EAAA,OAAO,UAAA,CAAW,MAAA,KAAW,IAAI,GAAA,CAAI,UAAU,CAAA,CAAE,IAAA;AACnD,CAAA;AAEA,IAAMK,sBAAAA,GAAwB,CAAC,IAAA,KAA2B;AACxD,EAAA,MAAM,UAAA,GAAaL,eAAc,IAAI,CAAA;AAErC,EAAA,OAAO,iBAAA;AAAA,IACL,kBAAA;AAAA,IACA,UAAA,CAAW,KAAK,CAAC,QAAA,EAAU,UAAU,UAAA,CAAW,OAAA,CAAQ,QAAQ,CAAA,KAAM,KAAK;AAAA,GAC7E;AACF,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,OAAA,KACtB,OAAA,CAAQ,IAAA,KAAS,OAAA;AAEnB,IAAM,2BAA2B,eAAA,CAAQ;AAAA,EACvC,CAAC,SAAA,KAAiChD,eAAAA,CAAe,SAAA,CAAU,WAAW,CAAA;AAAA,EACtE,CAAC,SAAA,KAAiC,SAAA,CAAU,WAAA,GAAc,CAAA;AAAA,EAC1D,CAAC,SAAA,KAAiC,SAAA,CAAU,WAAA,GAAc;AAC5D,CAAC,CAAA;AAED,IAAM,mBAAA,GAAsB,CAAC,OAAA,KAC3B,cAAA;AAAA,EACE,cAAA;AAAA,EACA,wBAAA;AAAA,EACA,eAAO,IAAI;AACb,CAAA,CAAE,OAAO,CAAA;AAEX,IAAM,qBAAA,GAAwB,CAAC,OAAA,KAC7B,cAAA;AAAA,EACE,cAAA;AAAA,EACA,CAAC,cAAiC,SAAA,CAAU,WAAA;AAAA,EAC5C,eAAO,MAAS;AAClB,CAAA,CAAE,OAAO,CAAA;AAEX,IAAMC,kBAAAA,GAAwC;AAAA,EAC5C,CAAC,mBAAW,eAAe,CAAA,EAAG,MAAM,GAAA,CAAI,kBAAA,CAAmB,kBAAA,EAAoB,CAAC,CAAA;AAAA,EAChF;AAAA,IACE,mBAAWiD,uBAAsB,CAAA;AAAA,IACjC,CAAC,cACC,GAAA,CAAI,kBAAA,CAAmB,kBAAkBC,uBAAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,GAC/E;AAAA,EACA;AAAA,IACE,mBAAW,2BAA2B,CAAA;AAAA,IACtC,CAAC,cACC,GAAA,CAAI,kBAAA,CAAmB,iBAAiB,wBAAA,CAAyB,SAAS,CAAC,CAAC;AAAA,GAChF;AAAA,EACA;AAAA,IACE,mBAAWC,oBAAmB,CAAA;AAAA,IAC9B,CAAC,cACC,GAAA,CAAI,kBAAA,CAAmB,kBAAkBC,sBAAAA,CAAsB,SAAS,CAAC,CAAC;AAAA,GAC9E;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAAgC,EAAA,CAAG,SAAS,CAAC;AAC/D,CAAA;AAEA,IAAM,iBAAA,GAAwC;AAAA,EAC5C;AAAA,IACE,mBAAW,mBAAmB,CAAA;AAAA,IAC9B,CAAC,cACC,GAAA,CAAI,kBAAA,CAAmB,mBAAmB,qBAAA,CAAsB,SAAS,CAAC,CAAC;AAAA,GAC/E;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAA4B,EAAA,CAAG,SAAS,CAAC;AAC3D,CAAA;AAEA,IAAMnD,gBAAAA,GAA6D,aAAKD,kBAAiB,CAAA;AAEzF,IAAM,eAAA,GAA4D,aAAK,iBAAiB,CAAA;AAExF,IAAM,kBAAA,GAAqB,UAAwB,+BAA+B,CAAA;AAE3E,SAAS,2BACd,KAAA,EAC0B;AAC1B,EAAA,OAAO,UAAA;AAAA,IAML,MAAM,eAAA,CAAgB,kBAAA,CAAmB,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,IACvD,CAAC,OAAA,EAAS,OAAA,MAAa,EAAE,GAAG,SAAS,OAAA,EAAQ;AAAA,GAC/C;AAAA,IACE,UAAA;AAAA,MACE,MAAMC,gBAAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AAAA,MAChC,CAAC,CAAA,EAAG,OAAA,MAAa,EAAE,OAAA,EAAQ;AAAA,KAC7B,CAAE,EAAA,CAAG,EAAE,CAAC;AAAA,GACV;AACF;AAEA,IAAM,SAAA,GAAY,CAAC,IAAA,KACjB,IAAA,CAAK,MAAA,CAAO,CAAC,KAAA,EAAOT,MAAAA,KAAU,KAAA,GAAQA,MAAAA,CAAM,KAAA,EAAO,CAAC,CAAA;AAEtD,IAAM,KAAA,GAAQ,CAAC,KAAA,KAAkB,CAC/B,SACAA,MAAAA,KACG;AACH,EAAA,MAAM,UAAA,GAAaA,OAAM,KAAA,GAAQ,KAAA;AACjC,EAAA,MAAM,aAAa,OAAA,CAAQ,KAAA;AAC3B,EAAA,MAAM,QAAA,GAAW,aAAa,UAAA,GAAa,GAAA;AAE3C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,GAAG,OAAA,CAAQ,IAAA;AAAA,MACX;AAAA,QACE,GAAGA,MAAAA;AAAA,QACH,UAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AACF,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,KAAA,KAAuD;AACpF,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,OAAO,CAAA;AACrC,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAM,KAAK,CAAA,EAAG,EAAE,IAAA,EAAM,EAAC,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA,CAAE,IAAA;AAExE,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAS,KAAA,CAAM;AAAA,GACjB;AACF,CAAA;AAEO,SAAS,qBAAqB,KAAA,EAAgD;AACnF,EAAA,OAAO,SAAA;AAAA,IACL;AAAA,GACF,CAAE,0BAAA,CAA2B,KAAK,CAAC,CAAA;AACrC;AC7OO,IAAM,sBAAA,GAAyB;AAAA,EACpC,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAEA,IAAM,YAAA,GAAe,EAAA;AACrB,IAAM,SAAA,GAAY,EAAA;AAClB,IAAM,wBAAA,GAA2B,IAAA;AAyBjC,IAAM,YAAA,GAAe,CAAC,KAAA,KACpB,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,GAAQ,sBAAA,CAAuB,IAAA,GAAO,sBAAA,CAAuB,KAAK,CAAA;AAEhF,IAAM,aAAA,GAAgB,CAAC,MAAA,KACrB,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,GAAS,sBAAA,CAAuB,GAAA,GAAM,sBAAA,CAAuB,MAAM,CAAA;AAEjF,IAAM,iBAAiB,CAAC,KAAA,EAAe,MAAA,KACrC,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,YAAA,CAAa,KAAK,CAAA,EAAG,aAAA,CAAc,MAAM,CAAC,CAAA,GAAI,IAAI,YAAY,CAAA;AAMrF,IAAM,YAAA,GAAe,CAAC,KAAA,KACpB,KAAA,CAAM,QAAQ,IAAA,KAAS,OAAA;AAEzB,IAAM,cAAA,GAAiB,CAAC,KAAA,EAAuB,WAAA,KAC7C,cAAA;AAAA,EACE,YAAA;AAAA,EACA,CAAC,SAAA,KAAmC,WAAA,GAAc,SAAA,CAAU,OAAA,CAAQ,WAAA;AAAA,EACpE,eAAO,CAAC;AACV,CAAA,CAAE,KAAK,CAAA;AAET,IAAM,aAAA,GAAgB,CAAC,MAAA,EAAgB,KAAA,MAAmB;AAAA,EACxD,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,MAAA;AAAA,EACrB,CAAA,EAAG,CAAC,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI;AACxB,CAAA,CAAA;AAEA,IAAM,cAAc,CAAC,GAAA,KAAA,CAAc,GAAA,CAAI,UAAA,GAAa,IAAI,QAAA,IAAY,CAAA;AAEpE,IAAM,kBAAkB,CAAC,CAAA,KAAc,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAErD,IAAM,iBAA4C,YAAA,CAAK;AAAA,EACrD,CAAC,eAAA,EAAiB,cAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,EAClC,CAAC,CAAC,SAAA,KAAsB,YAAY,CAAA,EAAG,cAAA,CAAO,OAAO,CAAC,CAAA;AAAA,EACtD,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,KAAK,CAAC;AAC9B,CAAC,CAAA;AAED,IAAM,aAAA,GAAgB,CAAC,WAAA,EAAqB,WAAA,KAAwB,CAAC6D,KAAA,KACnE,iBAAA;AAAA,EACE,EAAA;AAAA,EACAC,GAAA,GACG,WAAA,CAAY,WAAW,EACvB,WAAA,CAAY,WAAW,EACvB,UAAA,CAAW,CAAC,YAAY,OAAA,CAAQ,UAAU,EAC1C,QAAA,CAAS,CAAC,YAAY,OAAA,CAAQ,QAAQ,EAAED,KAAG;AAChD,CAAA;AAEK,IAAM,uBAAA,GAA0B,CACrC,KAAA,EACA,KAAA,EACA,MAAA,KACuB;AACvB,EAAA,MAAM,UAAU,KAAA,GAAQ,CAAA;AACxB,EAAA,MAAM,UAAU,MAAA,GAAS,CAAA;AACzB,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,KAAA,EAAO,MAAM,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,KAAA,EAAO,WAAW,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,WAAA,EAAa,WAAW,CAAA;AACtD,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,EAAU,KAAA,KAA+B;AAC9D,IAAA,MAAM,QAAA,GAAW,YAAY,GAAG,CAAA;AAChC,IAAA,MAAM,UAAA,GAAa,aAAA,CAAc,WAAA,GAAc,SAAA,EAAW,QAAQ,CAAA;AAClE,IAAA,MAAM,YAAA,GAAe,aAAA,CAAA,CAAe,WAAA,GAAc,WAAA,IAAe,GAAG,QAAQ,CAAA;AAE5E,IAAA,OAAO;AAAA,MACL,GAAG,GAAA;AAAA,MACH,YAAY,KAAA,GAAQ,CAAA;AAAA,MACpB,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,MACjB,QAAQ,UAAA,CAAW,CAAA;AAAA,MACnB,QAAQ,UAAA,CAAW,CAAA;AAAA,MACnB,WAAA,EAAa,cAAA,CAAe,UAAA,CAAW,CAAC,CAAA;AAAA,MACxC,SAAA,EAAW,IAAI,UAAA,IAAc,wBAAA;AAAA,MAC7B,QAAA,EAAU,UAAU,YAAA,CAAa,CAAA;AAAA,MACjC,QAAA,EAAU,UAAU,YAAA,CAAa;AAAA,KACnC;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,aAAa,CAAA;AAAA,IAClC,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,WAAA,EAAa,MAAM,OAAA,CAAQ;AAAA,GAC7B;AACF,CAAA;ACxHO,SAAS,oBAAA,CAAqB,EAAE,OAAA,EAAQ,EAA8B;AAC3E,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,IAAA,qBAASzD,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,qCAAqC,QAAA,EAAA,IAAA,EAAK;AAAA,GACjF,CAAA;AACH;ACDA,IAAM2D,YAAAA,GAAc,CAAC,gBAAA,KAAqD,CAAC,GAAA,KACzE,cAAA;AAAA,EACE,CAAC,cAA2B,SAAA,CAAU,SAAA;AAAA,EACtC,CAAC,8BACC1D,IAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,iCAAA;AAAA,MAEV,GAAG,SAAA,CAAU,MAAA;AAAA,MACb,GAAG,SAAA,CAAU,MAAA;AAAA,MACb,YAAY,SAAA,CAAU,WAAA;AAAA,MAEtB,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,WAAM,CAAA,EAAG,SAAA,CAAU,QAAQ,EAAA,EAAG,QAAA,EAC5B,oBAAU,QAAA,EACb,CAAA;AAAA,wBACAA,GAAAA,CAAC,OAAA,EAAA,EAAM,CAAA,EAAG,SAAA,CAAU,MAAA,EAAQ,EAAA,EAAG,OAAA,EAC5B,QAAA,EAAA,gBAAA,CAAiB,SAAA,CAAU,UAAU,CAAA,EACxC;AAAA;AAAA,KAAA;AAAA,IAVK,SAAA,CAAU;AAAA,GAWjB;AAAA,EAEF,eAAO,IAAI;AACb,CAAA,CAAE,GAAG,CAAA;AAEA,SAAS,mBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,OAAO,cAAA;AAAA,IACL,CAAC,SAAA,KAAuB,SAAA;AAAA,IACxB,sBAAMA,GAAAA,CAAC,GAAA,EAAA,EAAE,aAAA,EAAY,MAAA,EAAQ,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI2D,YAAAA,CAAY,gBAAgB,CAAC,CAAA,EAAE,CAAA;AAAA,IAC3E,eAAO,IAAI;AAAA,IACX,UAAU,CAAA;AACd;AC1BO,SAAS,kBAAA,CAAmB;AAAA,EACjC,MAAA;AAAA,EACA,GAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,eAAA,GAAkB,cAAA;AAAA,IACtB,eAAO,MAAM,CAAA;AAAA,IACb,eAAO,yCAAyC,CAAA;AAAA,IAChD,eAAO,EAAE;AAAA,IACT,MAAM,CAAA;AACR,EAAA,MAAM,eAAA,GAAkB,GAAG,GAAA,CAAI,QAAQ,KAAK,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,EAAA,EAAK,gBAAA;AAAA,IACrE,GAAA,CAAI;AAAA,GACL,CAAA,CAAA,CAAA;AACD,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACE3D,GAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAA,CAAW;AAAA,QACpB,iCAAA;AAAA,QACA,CAAA,sCAAA,EAAyC,MAAA,CAAO,GAAA,CAAI,UAAU,CAAC,CAAA,CAAA;AAAA,QAC/D;AAAA,OACD,CAAA;AAAA,MACD,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,YAAA;AAAA,MAEd,0BAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,sCAAA,EAAuC,CAAA,EAAG,IAAI,IAAA,EAAM;AAAA;AAAA,GACtE;AAEJ;AC7CO,SAAS,mBAAA,CAAoB;AAAA,EAClC,cAAA;AAAA,EACA,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,wBACrBA,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,mBAAmB,GAAA,CAAI,QAAA;AAAA,MAC/B,GAAA;AAAA,MACA,gBAAA;AAAA,MACA,WAAA;AAAA,MAEA,UAAA,EAAY,MAAM,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AAAA,MACzC;AAAA,KAAA;AAAA,IAFK,GAAA,CAAI;AAAA,GAIZ,CAAA;AACH;ACtBA,IAAMO,eAAAA,GAAiB,EAAA;AACvB,IAAMC,kBAAAA,GAAoB,EAAA;AAC1B,IAAMC,kBAAAA,GAAoB,CAAA;AAC1B,IAAMC,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,gBAAAA,GAAkB,CAAA;AAExB,IAAMC,gBAAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAIJ,oBAAmB,KAAA,CAAM,MAAA,GAASE,mBAAAA,GAAqBD,kBAAAA,GAAoB,CAAC,CAAA;AAEvF,IAAMI,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,oBAAA,CAAqB;AAAA,EACnC,GAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK,WAAA,CAAY,GAAA,CAAI,KAAK,CAAC,CAAA,EAAA,EAAK,gBAAA,CAAiB,GAAA,CAAI,UAAU,CAAC,CAAA,CAAA,CAAA;AAC7F,EAAA,MAAM,YAAA,GAAeD,iBAAgB,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAIC,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,QAAQ,YAAA,GAAeA,gBAAAA;AAAA,IACvB,GAAA,CAAI,WAAW,YAAA,GAAe;AAAA,GAChC;AACA,EAAA,MAAM,CAAA,GAAIE,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,SAASJ,eAAAA,GAAiBI,gBAAAA;AAAA,IAC1B,GAAA,CAAI,WAAWJ,eAAAA,GAAiB;AAAA,GAClC;AAEA,EAAA,uBACEN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAoC,eAAY,MAAA,EAC3D,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,8CAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQO,eAAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAP,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,wCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAIO,eAAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC9CO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIO,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,aAAa,cAAc,CAAA;AAE7E,EAAA,uBACEb,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,+BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,OAAE,SAAA,EAAW,CAAA,UAAA,EAAa,MAAM,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAA,CAAA,CAAA,EACvD,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAAC,mBAAA;AAAA,YAAA;AAAA,cACC,cAAA;AAAA,cACA,KAAA;AAAA,cACA,gBAAA;AAAA,cACA,WAAA;AAAA,cACA,UAAA,EAAY,iBAAA;AAAA,cACZ,YAAA,EAAc,MAAM,iBAAA,CAAkB,IAAI;AAAA;AAAA,WAC5C;AAAA,0BACAA,GAAAA;AAAA,YAAC,mBAAA;AAAA,YAAA;AAAA,cACC,KAAA;AAAA,cACA,gBAAA;AAAA,cACA;AAAA;AAAA;AACF,SAAA,EACF,CAAA;AAAA,QACC,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,qBACfA,GAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,gBAAA;AAAA,YACA,WAAA;AAAA,YACA,MAAA;AAAA,YAEA;AAAA,WAAA;AAAA,UADK,GAAA,CAAI;AAAA,SAGZ;AAAA;AAAA;AAAA,GACH;AAEJ;ACxCO,SAAS,mBAAA,CAAoB;AAAA,EAClC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,0BAAA,EAA4B,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAClF,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,gBAAA;AAAA,QACA,WAAA;AAAA,QACA,MAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,oBAAA,EAAA,EAAqB,OAAA,EAAkB;AAAA,GAAA,EAC1C,CAAA;AAEJ;ACrCO,SAAS,aAAA,CAAc;AAAA,EAC5B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,MAAA,GAASe,OAAAA,CAAQ,MAAM,oBAAA,CAAqB,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA,EAAG,CAAC,IAAA,EAAM,OAAO,CAAC,CAAA;AAErF,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,iCAAA,EAAmC,SAAS,CAAC,CAAA;AAAA,QACpE,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,KAAA,KAAU;AACb,MAAA,MAAM,KAAA,GAAQ,uBAAA,CAAwB,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA;AAE1D,MAAA,uBACEA,GAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,gBAAA;AAAA,UACA,WAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AC/CO,IAAM,yBAAA,GAA4B,cAAA;AAAA,EACvC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,gCAAgC,CAAC,UAAA,KAC5C,GAAG,yBAAA,CAA0B,UAAA,GAAa,GAAG,CAAC,CAAA,CAAA;AAEzC,IAAM,kCAAA,GAAqC;AAAA,EAChD,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,WAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,IAAA;AAAA,EACT,UAAA,EAAY,IAAA;AAAA,EACZ,WAAA,EAAa,yBAAA;AAAA,EACb,gBAAA,EAAkB;AACpB;;;ACPA,IAAM,gBAAA,GAAmB;AAAA,EACvB,mBAAA,EAAqB,CAAC,YAAA,MAA6C;AAAA,IACjE,IAAA,EAAM,qBAAA;AAAA,IACN,OAAA,EAAS,mFAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,MAAA,CAAO,YAAY,CAAC,CAAA,CAAA,CAAG;AAAA,GACjE,CAAA;AAAA,EACA,YAAA,EAAc,CAAC,KAAA,MAAsC;AAAA,IACnD,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,sDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAClD,CAAA;AAAA,EACA,mBAAA,EAAqB,CAAC,KAAA,MAAwD;AAAA,IAC5E,IAAA,EAAM,qBAAA;AAAA,IACN,OAAA,EAAS,qDAAA;AAAA,IACT,OAAA,EAAS,IAAA;AAAA,MACP,CAAA,cAAA,EAAiB,OAAO,KAAA,CAAM,YAAY,CAAC,CAAA,eAAA,EAAkB,MAAA,CAAO,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAAA;AAClF,GACF;AACF,CAAA;AAEA,IAAMG,eAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,yBAAA,GAA4B,CAAC,KAAA,KACjC,eAAA,CAAQ;AAAA,EACNA,eAAAA;AAAA,EACA,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,IAAK;AAC/C,CAAC,EAAE,KAAK,CAAA;AAEV,IAAMyD,uBAAAA,GAAyB,CAAC,KAAA,KAC9B,eAAA,CAAQ;AAAA,EACNzD,eAAAA;AAAA,EACA,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,GAAI;AAC9C,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM6B,qBAAAA,GAAuB,CAAC,KAAA,KAC5B,yBAAA,CAA0B,MAAM,YAAY,CAAA;AAE9C,IAAM,aAAA,GAAgB,CAAC,KAAA,KAA4B4B,uBAAAA,CAAuB,MAAM,KAAK,CAAA;AAErF,IAAM3B,iBAAAA,GAAmB,CAAC,KAAA,MAAwD;AAAA,EAChF,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,YAAY,CAAA;AAAA,EACvC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,KAAK;AAC3B,CAAA,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAAC,KAAA,KAC3B,KAAA,CAAM,eAAe,KAAA,CAAM,KAAA;AAE7B,IAAMC,gBAAAA,GAA+C;AAAA,EACnD;AAAA,IACE,mBAAWF,qBAAoB,CAAA;AAAA,IAC/B,CAAC,KAAA,KAA4B,GAAA,CAAI,iBAAiB,mBAAA,CAAoB,KAAA,CAAM,YAAY,CAAC;AAAA,GAC3F;AAAA,EACA;AAAA,IACE,mBAAW,aAAa,CAAA;AAAA,IACxB,CAAC,KAAA,KAA4B,GAAA,CAAI,iBAAiB,YAAA,CAAa,KAAA,CAAM,KAAK,CAAC;AAAA,GAC7E;AAAA,EACA;AAAA,IACE,CAAC,KAAA,KAA4B,mBAAA,CAAoBC,iBAAAA,CAAiB,KAAK,CAAC,CAAA;AAAA,IACxE,CAAC,UAA4B,GAAA,CAAI,gBAAA,CAAiB,oBAAoBA,iBAAAA,CAAiB,KAAK,CAAC,CAAC;AAAA,GAChG;AAAA,EACA,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,CAAC,UAA4B,EAAA,CAAGA,iBAAAA,CAAiB,KAAK,CAAC,CAAC;AACzE,CAAA;AAEO,IAAM,wBAAA,GAEiB,aAAKC,gBAAe;AAElD,IAAM,YAAA,GAAe,CAAC,KAAA,KAAqC,KAAA,CAAM,eAAe,KAAA,CAAM,KAAA;AAE/E,SAAS,mBAAmB,KAAA,EAA4C;AAC7E,EAAA,OAAO,UAA+D,YAAY,CAAA;AAAA,IAChF,yBAAyB,KAAK;AAAA,GAChC;AACF;;;AC9FO,IAAM,mBAAA,GAAsB;AAAA,EACjC,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAiBA,IAAM,YAAA,GAAe,EAAA;AAEd,IAAM,qBAAA,GAAwB,CACnC,YAAA,EACA,KAAA,EACA,OACA,KAAA,EACA,MAAA,EACA,aACA,gBAAA,KACqB;AACrB,EAAA,MAAM,UAAA,GAAa,KAAA,GAAQ,mBAAA,CAAoB,IAAA,GAAO,mBAAA,CAAoB,KAAA;AAC1E,EAAA,MAAM,cAAc,IAAA,CAAK,GAAA;AAAA,IACvB,YAAA;AAAA,IACA,MAAA,GAAS,mBAAA,CAAoB,GAAA,GAAM,mBAAA,CAAoB;AAAA,GACzD;AACA,EAAA,MAAM,SAAS,mBAAA,CAAoB,IAAA;AACnC,EAAA,MAAM,MAAA,GAAS,MAAA,GAAS,mBAAA,CAAoB,MAAA,GAAS,WAAA;AAErD,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAa,WAAA,GAAc,CAAA;AAAA,IAC3B,WAAW,UAAA,GAAa,KAAA;AAAA,IACxB,UAAA,EAAY,GAAG,WAAA,CAAY,YAAY,CAAC,CAAA,IAAA,EAAO,WAAA,CAAY,KAAK,CAAC,CAAA,CAAA;AAAA,IACjE,eAAA,EAAiB,iBAAiB,KAAK,CAAA;AAAA,IACvC,MAAA,EAAQ,oBAAoB,GAAA,GAAM;AAAA,GACpC;AACF,CAAA;ACjDO,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAQ,EAA4B;AACvE,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,OAAA,qBACLlC,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,kCAAkC,QAAA,EAAA,OAAA,EAAQ;AAAA,GAEnE,CAAA;AACH;ACCA,IAAM,OAAA,GAAU,CAAC,QAAA,KAA+B,QAAA,CAAS,SAAA,GAAY,CAAA;AAE9D,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,aAAa,CAAA,sBAAA,EAAyB6D,KAAAA,GAAQ,UAAA,CAAW,GAAA,EAAK,EAAE,CAAC,CAAA,CAAA;AACvE,EAAA,MAAM,YAAY,CAAA,EAAG,QAAA,CAAS,UAAU,CAAA,EAAA,EAAK,SAAS,eAAe,CAAA,CAAA,CAAA;AACrE,EAAA,MAAM,UAAA,GAAa,cAAA;AAAA,IACjB,OAAA;AAAA,IACA,sBACE7D,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,6BAAA;AAAA,QACV,GAAG,QAAA,CAAS,MAAA;AAAA,QACZ,GAAG,QAAA,CAAS,MAAA;AAAA,QACZ,OAAO,QAAA,CAAS,SAAA;AAAA,QAChB,QAAQ,QAAA,CAAS,WAAA;AAAA,QACjB,QAAA,EAAU,QAAQ,UAAU,CAAA,CAAA;AAAA;AAAA,KAC9B;AAAA,IAEF,MAAM;AAAA,GACR;AACA,EAAA,MAAM,YAAA,GAAe,cAAA;AAAA,IACnB,CAAC,SAAA,KAAuB,SAAA;AAAA,IACxB,sBACEC,IAAAA,CAAC,OAAE,SAAA,EAAU,+BAAA,EAAgC,eAAY,MAAA,EACvD,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,8BAAA;AAAA,UACV,GAAG,QAAA,CAAS,MAAA;AAAA,UACZ,GAAG,QAAA,CAAS,MAAA;AAAA,UAEX,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA,OACZ;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,mCAAA;AAAA,UACV,CAAA,EAAG,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,UAAA;AAAA,UAC9B,GAAG,QAAA,CAAS,MAAA;AAAA,UACZ,UAAA,EAAW,KAAA;AAAA,UAEV,QAAA,EAAA,QAAA,CAAS;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,IAEF,MAAM;AAAA,GACR;AAEA,EAAA,uBACEC,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,IAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,UAAA,EAAA,EAAS,EAAA,EAAI,YACZ,QAAA,kBAAAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,GAAG,QAAA,CAAS,MAAA;AAAA,YACZ,GAAG,QAAA,CAAS,MAAA;AAAA,YACZ,OAAO,QAAA,CAAS,UAAA;AAAA,YAChB,QAAQ,QAAA,CAAS,WAAA;AAAA,YACjB,IAAI,QAAA,CAAS;AAAA;AAAA,WAEjB,CAAA,EACF,CAAA;AAAA,QACC,aAAa,SAAS,CAAA;AAAA,wBACvBC,IAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,8BAAA;AAAA,YACV,IAAA,EAAK,aAAA;AAAA,YACL,YAAA,EAAY,SAAA;AAAA,YACZ,eAAA,EAAe,CAAA;AAAA,YACf,iBAAe,QAAA,CAAS,KAAA;AAAA,YACxB,iBAAe,QAAA,CAAS,YAAA;AAAA,YACxB,gBAAA,EAAgB,SAAA;AAAA,YAEhB,QAAA,EAAA;AAAA,8BAAAD,GAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,8BAAA;AAAA,kBACV,GAAG,QAAA,CAAS,MAAA;AAAA,kBACZ,GAAG,QAAA,CAAS,MAAA;AAAA,kBACZ,OAAO,QAAA,CAAS,UAAA;AAAA,kBAChB,QAAQ,QAAA,CAAS,WAAA;AAAA,kBACjB,IAAI,QAAA,CAAS;AAAA;AAAA,eACf;AAAA,cACC,WAAW,QAAQ;AAAA;AAAA;AAAA;AACtB;AAAA;AAAA,GACF;AAEJ;ACxFO,SAAS,iBAAA,CAAkB;AAAA,EAChC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,uBAAA,EAAyB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,MAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAkB;AAAA,GAAA,EACxC,CAAA;AAEJ;AC1BO,SAAS,WAAA,CAAY;AAAA,EAC1B,YAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,MAAA,GAASe,OAAAA;AAAA,IACb,MAAM,kBAAA,CAAmB,EAAE,YAAA,EAAc,OAAO,CAAA;AAAA,IAChD,CAAC,cAAc,KAAK;AAAA,GACtB;AAEA,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,8BAAA,EAAgC,SAAS,CAAC,CAAA;AAAA,QACjE,KAAA,EAAM,sBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,KAAA,KAAU;AACb,MAAA,MAAM,QAAA,GAAW,qBAAA;AAAA,QACf,YAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,uBACEA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;ACxDO,IAAM,uBAAA,GAA0B,cAAA;AAAA,EACrC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,8BAA8B,CAAC,KAAA,KAC1C,GAAG,uBAAA,CAAwB,KAAA,GAAQ,GAAG,CAAC,CAAA,CAAA;AAElC,IAAM,+BAAA,GAAkC;AAAA,EAC7C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,SAAA,EAAW,IAAA;AAAA,EACX,WAAA,EAAa,uBAAA;AAAA,EACb,gBAAA,EAAkB;AACpB;;;ACeA,IAAM,eAAA,GAAkB;AAAA,EACtB,mBAAmB,OAAwB;AAAA,IACzC,IAAA,EAAM,mBAAA;AAAA,IACN,OAAA,EAAS,yCAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,YAAA,EAAc,CAAC,KAAA,MAAoC;AAAA,IACjD,IAAA,EAAM,cAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,uBAAA,EAA0B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC1D,CAAA;AAAA,EACA,UAAA,EAAY,CAAC,KAAA,MAAoC;AAAA,IAC/C,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,iDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,qBAAA,EAAwB,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GACxD,CAAA;AAAA,EACA,cAAA,EAAgB,CAAC,KAAA,MAAoC;AAAA,IACnD,IAAA,EAAM,gBAAA;AAAA,IACN,OAAA,EAAS,oCAAA;AAAA,IACT,OAAA,EAAS,IAAA,CAAK,CAAA,iBAAA,EAAoB,KAAK,CAAA,CAAA,CAAG;AAAA,GAC5C,CAAA;AAAA,EACA,wBAAwB,OAAwB;AAAA,IAC9C,IAAA,EAAM,wBAAA;AAAA,IACN,OAAA,EAAS,8EAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,gBAAA,EAAkB,CAAC,SAAA,MAAyC;AAAA,IAC1D,IAAA,EAAM,kBAAA;AAAA,IACN,OAAA,EAAS,0DAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,oBAAA,EAAuB,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA,CAAG;AAAA,GAC3D;AACF,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAA;AAE3B,IAAMG,gBAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM2D,kBAAAA,GAAoB,CAAC,KAAA,KACzB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA;AAAA,EAClD,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,GAAI;AAC9C,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM/B,iBAAAA,GAAmB,CAAC,KAAA,KACxB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,SAAS,CAAA,CAAE,IAAA,GAAO,MAAA,GAAS;AAC5D,CAAC,EAAE,KAAK,CAAA;AAEV,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAC5B,IAAA,CAAK,MAAA,GAAS,kBAAA;AAEhB,IAAM,SAAA,GAAY,CAAC,IAAA,KAAgC,WAAA,CAAI,YAAA,CAAK,OAAO,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAE/E,IAAM,mBAAA,GAAsB,CAAC,IAAA,KAC3B,WAAA,CAAI,CAAC,KAAA,KAAkB,KAAA,CAAM,IAAA,EAAK,EAAG,SAAA,CAAU,IAAI,CAAC,CAAA;AAEtD,IAAMqB,UAAAA,GAAY,CAAC,IAAA,KAAgC,WAAA,CAAI,YAAA,CAAK,OAAO,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAE/E,IAAM,aAAA,GAAgB,CAAC,IAAA,KACrB,WAAA,CAAI,CAAC,IAAA,KAAqB,IAAA,CAAK,SAAA,EAAW,CAAC,GAAG,IAAI,CAAC,CAAA;AAErD,IAAM,YAAA,GAAe,CAAC,IAAA,KACpB,IAAA,CAAK,SAAA;AAEP,IAAMW,uBAAsB,CAAC,IAAA,KAC3B,YAAI5D,gBAAAA,EAAgBiD,UAAAA,CAAU,IAAI,CAAC,CAAA;AAErC,IAAMY,sBAAAA,GAAwB,CAAC,IAAA,KAC7B,iBAAA,CAAU,mBAAW7D,gBAAc,CAAA,EAAGiD,UAAAA,CAAU,IAAI,CAAC,CAAA;AAEvD,IAAMa,yBAAwB,CAAC,IAAA,KAC7B,YAAIlC,iBAAAA,EAAkB,SAAA,CAAU,IAAI,CAAC,CAAA;AAEvC,IAAM,mBAAA,GAAsB,CAAC,IAAA,KAC3B,iBAAA,CAAU,mBAAWA,iBAAgB,CAAA,EAAG,SAAA,CAAU,IAAI,CAAC,CAAA;AAEzD,IAAM,eAAA,GAAkB,CAAC,IAAA,KAAgC;AACvD,EAAA,MAAM,MAAA,GAAS,oBAAoB,IAAI,CAAA;AAEvC,EAAA,OAAO,MAAA,CAAO,MAAA,KAAW,IAAI,GAAA,CAAI,MAAM,CAAA,CAAE,IAAA;AAC3C,CAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAAgC;AAC1D,EAAA,MAAM,MAAA,GAAS,oBAAoB,IAAI,CAAA;AAEvC,EAAA,OAAO,iBAAA;AAAA,IACL,eAAA;AAAA,IACA,MAAA,CAAO,KAAK,CAAC,KAAA,EAAO,UAAU,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,KAAM,KAAK;AAAA,GAC/D;AACF,CAAA;AAEA,IAAM,kBAAkB,CAAC,IAAA,KACvB,YAAI,MAAA,EAAQ,aAAA,CAAc,IAAI,CAAC,CAAA;AAEjC,IAAM,mBAAmB,CAAC,IAAA,KACxB,YAAI,MAAA,EAAQ,aAAA,CAAc,IAAI,CAAC,CAAA;AAEjC,IAAM,yBAAA,GAA4B,CAAC,IAAA,KACjC,eAAA,CAAQ,CAAC,kBAAA,CAAW,eAAe,CAAA,EAAG,kBAAA,CAAW,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAA;AAE3E,IAAM,oBAAoB,CAAC,IAAA,KACzB,WAAA,CAAY,YAAA,CAAa,IAAI,CAAA,EAAG;AAAA,EAC9B,IAAA,EAAM,eAAO,IAAI,CAAA;AAAA,EACjB,IAAA,EAAM+B;AACR,CAAC,CAAA;AAEH,IAAM,sBAAA,GAAyB,CAAC,IAAA,KAC9B,WAAA,CAAI,mBAAmB,CAAC,GAAG,IAAI,CAAC,CAAA;AAElC,IAAM,YAAA,GAAe,CAAC,KAAA,KACpB,KAAA,KAAU,MAAA;AAEZ,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAC1B,cAAA;AAAA,EACE,YAAA;AAAA,EACA,CAAC,IAAA,KAAqB,IAAA,CAAK,IAAI,CAAA;AAAA,EAC/B,eAAO,IAAI;AACb,CAAA,CAAE,KAAK,CAAA;AAET,IAAM,kBAAA,GAAqB,CAAC,IAAA,KAC1B,WAAA,CAA2C,KAAK,SAAA,EAAW;AAAA,EACzD,IAAA,EAAM,eAAO,oBAAoB,CAAA;AAAA,EACjC,IAAA,EAAM,CAAC,KAAA,KAAU;AACnB,CAAC,CAAA;AAEH,IAAM,oBAAA,GAAuB,CAAC,IAAA,KAC5B,WAAA,CAAY,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAW,iBAAiB,CAAC,CAAC,CAAA,EAAG;AAAA,EACxE,IAAA,EAAM,eAAO,oBAAoB,CAAA;AAAA,EACjC,IAAA,EAAM;AACR,CAAC,CAAA;AAEH,IAAM,eAAA,GAAkB,CAAC,IAAA,MAA2C;AAAA,EAClE,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK;AAAA,EACvB,OAAO,IAAA,CAAK,KAAA;AAAA,EACZ,SAAA,EAAW,aAAa,IAAI;AAC9B,CAAA,CAAA;AAEA,IAAM1D,kBAAAA,GAAwC;AAAA,EAC5C,CAAC,oBAAA,EAAsB,MAAM,IAAI,eAAA,CAAgB,iBAAA,EAAmB,CAAC,CAAA;AAAA,EACrE;AAAA,IACE,mBAAW2D,oBAAmB,CAAA;AAAA,IAC9B,CAAC,SACC,GAAA,CAAI,eAAA,CAAgB,aAAaC,sBAAAA,CAAsB,IAAI,CAAC,CAAC;AAAA,GACjE;AAAA,EACA;AAAA,IACE,mBAAWC,sBAAqB,CAAA;AAAA,IAChC,CAAC,SACC,GAAA,CAAI,eAAA,CAAgB,WAAW,mBAAA,CAAoB,IAAI,CAAC,CAAC;AAAA,GAC7D;AAAA,EACA;AAAA,IACE,mBAAW,eAAe,CAAA;AAAA,IAC1B,CAAC,SAAgC,GAAA,CAAI,eAAA,CAAgB,eAAe,kBAAA,CAAmB,IAAI,CAAC,CAAC;AAAA,GAC/F;AAAA,EACA,CAAC,yBAAA,EAA2B,MAAM,IAAI,eAAA,CAAgB,sBAAA,EAAwB,CAAC,CAAA;AAAA,EAC/E;AAAA,IACE,mBAAW,sBAAsB,CAAA;AAAA,IACjC,CAAC,SACC,GAAA,CAAI,eAAA,CAAgB,iBAAiB,oBAAA,CAAqB,IAAI,CAAC,CAAC;AAAA,GACpE;AAAA,EACA;AAAA,IACE,eAAO,IAAI,CAAA;AAAA,IACX,CAAC,SAAgC,EAAA,CAAG,WAAA,CAAI,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;AAAA;AAEvE,CAAA;AAEO,IAAM,0BAEQ,CAAC,KAAA,KAA2B,aAAK7D,kBAAiB,CAAA,CAAE,MAAM,IAAI;AAEnF,IAAM8D,qBAAoB,CAAC,IAAA,EAA2B,KAAA,KACpD,KAAA,CAAM,QAAQ,IAAA,CAAK,KAAA;AAErB,IAAM,UAAA,GAAa,CAAC,IAAA,KAA2B,CAAC,GAAG,IAAI,CAAA,CAAE,KAAKA,kBAAiB,CAAA;AAE/E,IAAM,UAAU,CACd,IAAA,EACA,OACA,aAAA,EACA,YAAA,KAEA,YAAY,aAAA,EAAe;AAAA,EACzB,IAAA,EAAM,MAAM,KAAA,GAAQ,CAAA;AAAA,EACpB,IAAA,EAAM,CAAC,KAAA,KACL,cAAA;AAAA,IACE,CAAC,SAAA,KAAsB,SAAA,KAAc,IAAA,CAAK,KAAA;AAAA,IAC1C,eAAO,YAAY,CAAA;AAAA,IACnB,cAAA,CAAO,QAAQ,CAAC;AAAA,IAChB,KAAK;AACX,CAAC,CAAA;AAEH,IAAM,gBAAgB,CAAC,IAAA,KAAe,CACpC,SAAA,KAEA,YAAkD,SAAA,EAAW;AAAA,EAC3D,MAAM,MAAM,IAAA;AAAA,EACZ,IAAA,EAAM,CAAC,KAAA,KAAU,IAAA,CAAK,QAAQ,IAAI;AACpC,CAAC,CAAA;AAEH,IAAM,aAAA,GAAgB,CAAC,IAAA,KAAe,CAAC,IAAA,MAA4C;AAAA,EACjF,OAAO,IAAA,CAAK,KAAA;AAAA,EACZ,OAAO,IAAA,CAAK,KAAA;AAAA,EACZ,IAAA;AAAA,EACA,UAAA,EAAY,aAAA,CAAc,IAAI,CAAA,CAAE,KAAK,SAAS;AAChD,CAAA,CAAA;AAEA,IAAM,iBAAA,GAAoB,CACxB,WAAA,EACA,IAAA,EACA,KAAA,KACoB;AACpB,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA,EAAM,OAAO,WAAA,CAAY,aAAA,EAAe,YAAY,YAAY,CAAA;AAErF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAC,GAAG,WAAA,CAAY,SAAS,aAAA,CAAc,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,IAC3D,YAAA,EAAc,IAAA;AAAA,IACd,aAAA,EAAe,IAAA,CAAK,IAAA,CAAK,KAAK;AAAA,GAChC;AACF,CAAA;AAEA,IAAM,YAAY,CAAC,IAAA,KACjB,WAAW,IAAI,CAAA,CAAE,OAAwB,iBAAA,EAAmB;AAAA,EAC1D,SAAS,EAAC;AAAA,EACV,YAAA,EAAc,CAAA;AAAA,EACd,aAAA,EAAe;AACjB,CAAC,CAAA,CAAE,OAAA;AAEE,SAAS,kBAAkB,KAAA,EAA0C;AAC1E,EAAA,OAAO,UAAqE,SAAS,CAAA;AAAA,IACnF,wBAAwB,KAAK;AAAA,GAC/B;AACF;;;AChOA,IAAM,wBAAA,GAAsD;AAAA,EAC1D,CAAC,CAAC,MAAA,KAAuB,SAAS,CAAA,EAAG,cAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EACvD,CAAC,CAAC,MAAA,KAAuB,SAAS,CAAA,EAAG,cAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EACvD,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,WAAW,CAAC;AACpC,CAAA;AAEA,IAAM,mBAAA,GAA4C;AAAA,EAChD,CAAC,CAAC,KAAA,KAAkB,QAAQ,CAAA,EAAG,cAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EACjD,CAAC,CAAC,KAAA,KAAkB,QAAQ,CAAA,EAAG,cAAA,CAAO,UAAU,CAAC,CAAA;AAAA,EACjD,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,MAAM,CAAC;AAC/B,CAAA;AAEA,IAAM,sBAAA,GACJ,aAAK,wBAAwB,CAAA;AAE/B,IAAM,iBAAA,GACJ,aAAK,mBAAmB,CAAA;AAE1B,IAAM,+BAAA,GAAkC,CAAC,SAAA,KACvC,SAAA,CAAU,WAAA,EAAY;AAExB,IAAM,2BAAA,GAA8B,CAAC,SAAA,KACnC,YAAA,CAAK;AAAA,EACH,CAAC,CAAC,SAAA,KAAmC,cAAc,UAAA,EAAY,cAAA,CAAO,IAAI,CAAC,CAAA;AAAA,EAC3E,CAAC,CAAC,SAAA,KAAmC,cAAc,UAAA,EAAY,cAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAC7E,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,cAAA,CAAO,MAAM,CAAC;AAC/B,CAAC,EAAE,SAAS,CAAA;AAEd,IAAM,aAAA,GAAgB,CAAC,KAAA,KAAuB,KAAA,CAAM,KAAA;AAEpD,IAAMd,UAAAA,GAAY,CAAC,OAAA,KAAoC,WAAA,CAAI,eAAe,CAAC,GAAG,OAAO,CAAC,CAAA;AAEtF,IAAM,UAAA,GAAa,CAAC,OAAA,KAAoC,OAAA,CAAQ,MAAA,GAAS,CAAA;AAEzE,IAAM,eAAA,GAAkB,CAAC,OAAA,KACvB,cAAA;AAAA,EACE,UAAA;AAAA,EACA,CAAC,aAAA,KAA0C,IAAA,CAAK,IAAI,GAAGA,UAAAA,CAAU,aAAa,CAAC,CAAA;AAAA,EAC/E,eAAO,CAAC;AACV,CAAA,CAAE,OAAO,CAAA;AAEX,IAAM,eAAA,GAAkB,CAAC,OAAA,KACvB,cAAA;AAAA,EACE,UAAA;AAAA,EACA,CAAC,aAAA,KAA0C,IAAA,CAAK,IAAI,GAAGA,UAAAA,CAAU,aAAa,CAAC,CAAA;AAAA,EAC/E,eAAO,CAAC;AACV,CAAA,CAAE,OAAO,CAAA;AAEX,IAAM,SAAA,GAAY,CAAC,KAAA,KAAkB,CAAA,EAAG,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAA,GAAQ,GAAI,CAAA,GAAI,EAAE,CAAC,CAAA,CAAA,CAAA;AAE7E,IAAM,eAAA,GAAkB,CAAC,OAAA,KACvB,OAAA,CAAQ,iBAAiB,OAAA,CAAQ,YAAA;AAEnC,IAAM,iBAAA,GAAoB,CAAC,OAAA,KAAA,CACxB,OAAA,CAAQ,QAAQ,OAAA,CAAQ,YAAA,KAAiB,OAAA,CAAQ,YAAA,GAAe,OAAA,CAAQ,YAAA,CAAA;AAE3E,IAAM,aAAA,GAAgB,CAAC,YAAA,EAAsB,YAAA,KAAyB,CAAC,KAAA,KACrE,cAAA;AAAA,EACE,eAAA;AAAA,EACA,eAAO,CAAC,CAAA;AAAA,EACR;AACF,CAAA,CAAE,EAAE,YAAA,EAAc,YAAA,EAAc,KAAA,EAAO,CAAA;AAEzC,IAAM,kBAAA,GAAqB,CAAC,KAAA,KAC1B,cAAA;AAAA,EACE,CAAC,cAAsB,SAAA,KAAc,CAAA;AAAA,EACrC,eAAO,UAAU,CAAA;AAAA,EACjB,eAAO,WAAW;AACpB,CAAA,CAAE,KAAK,CAAA;AAET,IAAM,kBAAA,GAAqB,CAAC,MAAA,KAAuB;AACjD,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AAEtC,EAAA,OAAO,YAAA,CAAK;AAAA,IACV,CAAC,CAAC,SAAA,KAA0B,SAAA,GAAY,GAAG,MACzC,CAAA,iBAAA,EAAoB,MAAA,CAAO,cAAc,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IACrF,CAAC,CAAC,SAAA,KAA0B,SAAA,GAAY,GAAG,MACzC,CAAA,iBAAA,EAAoB,MAAA,CAAO,cAAc,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,IACrF,CAAC,cAAA,CAAO,IAAI,CAAA,EAAG,MAAM,sBAAsB;AAAA,GAC5C,EAAE,MAAM,CAAA;AACX,CAAA;AAEA,IAAM,gBAAA,GAAmB,CACvB,UAAA,EACA,gBAAA,KAC0B;AAC1B,EAAA,MAAM,SAAA,GAAY,uBAAuB,UAAU,CAAA;AAEnD,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,WAAA,EAAa,iBAAiB,UAAU,CAAA;AAAA,IACxC,SAAA;AAAA,IACA,cAAA,EAAgB,4BAA4B,SAAS,CAAA;AAAA,IACrD,kBAAA,EAAoB,gCAAgC,SAAS,CAAA;AAAA,IAC7D,SAAA,EAAW,mBAAmB,UAAU;AAAA,GAC1C;AACF,CAAA;AAEA,IAAM,iBAAiB,CACrB,KAAA,EACA,gBAAA,KAEA,WAAA,CAAuD,MAAM,UAAA,EAAY;AAAA,EACvE,MAAM,MAAM,IAAA;AAAA,EACZ,MAAM,CAAC,KAAA,KAAU,KAAK,gBAAA,CAAiB,KAAA,EAAO,gBAAgB,CAAC;AACjE,CAAC,CAAA;AAEH,IAAM,gBAAA,GAAmB,CAAC,MAAA,KACxB,WAAA,CAAY,MAAA,EAAQ;AAAA,EAClB,IAAA,EAAM,eAAO,gBAAgB,CAAA;AAAA,EAC7B,IAAA,EAAM,CAAC,KAAA,KAAU,KAAA,CAAM;AACzB,CAAC,CAAA;AAEH,IAAM,YAAA,GAAe,CACnB,YAAA,EACA,YAAA,EACA,aACA,UAAA,EACA,gBAAA,KACG,CAAC,KAAA,KAA6C;AACjD,EAAA,MAAM,aAAa,aAAA,CAAc,YAAA,EAAc,YAAY,CAAA,CAAE,MAAM,KAAK,CAAA;AACxE,EAAA,MAAM,SAAA,GAAY,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA;AACvC,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,KAAA,CAAM,KAAK,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,KAAA,EAAO,gBAAgB,CAAA;AAErD,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,MAAM,KAAA,CAAM,IAAA;AAAA,IACZ,SAAA;AAAA,IACA,UAAA;AAAA,IACA,aAAA,EAAe,UAAU,UAAU,CAAA;AAAA,IACnC,uBAAA,EAAyB,iBAAA,CAAkB,KAAA,CAAM,KAAK,CAAA;AAAA,IACtD,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,MAAA;AAAA,IACA,YAAA,EAAc,CAAA,KAAA,EAAQ,SAAS,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,UAAU,CAAA,EAAA,EAAK,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,GAC7F;AACF,CAAA;AAEO,IAAM,oBAAA,GAAuB,CAClC,OAAA,EACA,WAAA,EACA,YACA,gBAAA,KACoB;AACpB,EAAA,MAAM,YAAA,GAAe,gBAAgB,OAAO,CAAA;AAC5C,EAAA,MAAM,YAAA,GAAe,gBAAgB,OAAO,CAAA;AAE5C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,WAAA;AAAA,MACP,YAAA,CAAa,YAAA,EAAc,YAAA,EAAc,WAAA,EAAa,YAAY,gBAAgB,CAAA;AAAA,MAClF,CAAC,GAAG,OAAO;AAAA;AACb,GACF;AACF,CAAA;ACxMO,SAAS,iBAAA,CAAkB,EAAE,OAAA,EAAQ,EAAqC;AAC/E,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,KAAA,qBACLpD,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,iCAAiC,QAAA,EAAA,KAAA,EAAM;AAAA,GAEhE,CAAA;AACH;ACKA,IAAM,YAAA,GAAe,CAAC,KAAA,MAAuD;AAAA,EAC3E,sCAAsC,KAAA,CAAM;AAC9C,CAAA,CAAA;AAEA,IAAM,cAAA,GAAiB,CAAC,MAAA,KAAkC,MAAA,CAAO,MAAA,KAAW,CAAA;AAE5E,IAAM,kBAAA,GAAqB,cAAA;AAAA,EACzB,cAAA;AAAA,EACA,CAAC,2BACCA,GAAAA,CAAC,UAAK,SAAA,EAAU,qCAAA,EAAuC,iBAAO,WAAA,EAAY,CAAA;AAAA,EAE5E,eAAO,IAAI;AACb,CAAA;AAEA,IAAM,uBAAA,GAA0B,CAAC,MAAA,qBAC/BC,IAAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,WAAW,UAAA,CAAW;AAAA,MACpB,8BAAA;AAAA,MACA,CAAA,8BAAA,EAAiC,OAAO,kBAAkB,CAAA;AAAA,KAC3D,CAAA;AAAA,IACD,cAAY,MAAA,CAAO,SAAA;AAAA,IAEnB,QAAA,EAAA;AAAA,sBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,iBAAO,cAAA,EAAe,CAAA;AAAA,MAC/E,mBAAmB,MAAM;AAAA;AAAA;AAC5B,CAAA;AAGF,IAAM,uBAAA,GAA0B,CAAC,eAAA,KAC/B,cAAA;AAAA,EACE,eAAO,eAAe,CAAA;AAAA,EACtB,uBAAA;AAAA,EACA,eAAO,IAAI;AACb,CAAA;AAEF,IAAM,gBAAA,GAAmB,CACvB,MAAA,EACA,eAAA,KAEA,YAAY,MAAA,EAAQ;AAAA,EAClB,IAAA,EAAM,eAAO,IAAI,CAAA;AAAA,EACjB,MAAM,CAAC,KAAA,KAAU,uBAAA,CAAwB,eAAe,EAAE,KAAK;AACjE,CAAC,CAAA;AAEI,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,eAAA,EAAgB,EAAyB;AAChF,EAAA,uBACEC,IAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,6BAAA;AAAA,MACV,cAAY,KAAA,CAAM,YAAA;AAAA,MAClB,KAAA,EAAO,aAAa,KAAK,CAAA;AAAA,MAEzB,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA8B,gBAAM,SAAA,EAAU,CAAA;AAAA,wBAC9DC,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EACd,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA+B,gBAAM,KAAA,EAAM,CAAA;AAAA,0BAC3DA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,6BAAA,EAA8B,aAAA,EAAY,QACxD,QAAA,kBAAAA,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,WAAW,UAAA,CAAW;AAAA,gBACpB,kCAAA;AAAA,gBACA,CAAA,kCAAA,EAAqC,MAAM,uBAAuB,CAAA;AAAA,eACnE;AAAA;AAAA,WACH,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,WAAW,UAAA,CAAW;AAAA,cACpB,6BAAA;AAAA,cACA,CAAA,6BAAA,EAAgC,MAAM,uBAAuB,CAAA;AAAA,aAC9D,CAAA;AAAA,YAEA,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,SACT;AAAA,QACC,gBAAA,CAAiB,KAAA,CAAM,MAAA,EAAQ,eAAe;AAAA;AAAA;AAAA,GACjD;AAEJ;ACnEA,IAAM,aAAA,GAAgB,CAAC,KAAA,EAAe,MAAA,MAAqC;AAAA,EACzE,8BAAA,EAAgC,CAAA,EAAG,MAAA,CAAO,KAAK,CAAC,CAAA,EAAA,CAAA;AAAA,EAChD,mCAAA,EAAqC,CAAA,EAAG,MAAA,CAAO,MAAM,CAAC,CAAA,EAAA;AACxD,CAAA,CAAA;AAEO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,uBACEC,IAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,CAAC,sBAAA,EAAwB,SAAS,CAAC,CAAA;AAAA,MACzD,YAAA,EAAY,SAAA;AAAA,MACZ,KAAA,EAAO,aAAA,CAAc,KAAA,EAAO,MAAM,CAAA;AAAA,MAElC,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,QAAG,SAAA,EAAU,+BAAA,EACX,qBAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,qBACvBA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YAEC,KAAA;AAAA,YACA;AAAA,WAAA;AAAA,UAFK,KAAA,CAAM;AAAA,SAId,CAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,iBAAA,EAAA,EAAkB,OAAA,EAAkB;AAAA;AAAA;AAAA,GACvC;AAEJ;AC5CO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,MAAA,GAASe,OAAAA,CAAQ,MAAM,iBAAA,CAAkB,EAAE,MAAM,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAEhE,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,6BAAA,EAA+B,SAAS,CAAC,CAAA;AAAA,QAChE,KAAA,EAAM,yBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,OAAA,KAAY;AACf,MAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,QACjB,OAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,uBACEA,GAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,UACA,UAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AClDO,IAAM,sBAAA,GAAyB,cAAA;AAAA,EACpC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,uBAAuB,CAAC,IAAA,KAAiB,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAC,CAAA;AAE/D,IAAM,0BAAA,GAA6B,CAAC,UAAA,KACzC,cAAA;AAAA,EACE,CAAC,cAAsB,SAAA,GAAY,CAAA;AAAA,EACnC,CAAC,SAAA,KAAsB,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAC,CAAA,CAAA;AAAA,EAC5C;AACF,CAAA,CAAE,UAAU;AAEP,IAAM,8BAAA,GAAiC;AAAA,EAC5C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,aAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,eAAA,EAAiB,IAAA;AAAA,EACjB,WAAA,EAAa,sBAAA;AAAA,EACb,UAAA,EAAY,oBAAA;AAAA,EACZ,gBAAA,EAAkB;AACpB;;;ACAA,IAAMmC,oBAAAA,GAAsB,CAAA;AAE5B,IAAM,gBAAA,GAAmB;AAAA,EACvB,oBAAoB,OAAyB;AAAA,IAC3C,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,2CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAqC;AAAA,IACnD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,qDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAqC;AAAA,IACnD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,qDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D;AACF,CAAA;AAEA,IAAMhC,gBAAAA,GAAiB,CAAC,KAAA,KACtB,eAAA,CAAQ;AAAA,EACN,CAAC,SAAA,KAAuB,OAAO,SAAA,KAAc,QAAA;AAAA,EAC7C,CAAC,SAAA,KAAuB,MAAA,CAAO,QAAA,CAAS,SAAS;AACnD,CAAC,EAAE,KAAK,CAAA;AAEV,IAAMiC,gBAAAA,GAAkB,CAAC,IAAA,KACvB,IAAA,CAAK,MAAA,IAAUD,oBAAAA;AAEjB,IAAME,WAAAA,GAAa,CAAC,IAAA,KAAsC,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAElF,IAAMC,WAAAA,GAAa,CAAC,IAAA,KAAsC,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAElF,IAAMC,wBAAuB,CAAC,IAAA,KAC5B,YAAIpC,gBAAAA,EAAgBkC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAEtC,IAAMG,wBAAuB,CAAC,IAAA,KAC5B,YAAIrC,gBAAAA,EAAgBmC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAEtC,IAAMG,uBAAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAWtC,gBAAc,CAAA,EAAGkC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAExD,IAAMK,uBAAAA,GAAyB,CAAC,IAAA,KAC9B,iBAAA,CAAU,mBAAWvC,gBAAc,CAAA,EAAGmC,WAAAA,CAAW,IAAI,CAAC,CAAA;AAExD,IAAMlC,kBAAAA,GAAwC;AAAA,EAC5C,CAAC,mBAAWgC,gBAAe,CAAA,EAAG,MAAM,GAAA,CAAI,gBAAA,CAAiB,kBAAA,EAAoB,CAAC,CAAA;AAAA,EAC9E;AAAA,IACE,mBAAWG,qBAAoB,CAAA;AAAA,IAC/B,CAAC,cACC,GAAA,CAAI,gBAAA,CAAiB,cAAcE,uBAAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,GACzE;AAAA,EACA;AAAA,IACE,mBAAWD,qBAAoB,CAAA;AAAA,IAC/B,CAAC,cACC,GAAA,CAAI,gBAAA,CAAiB,cAAcE,uBAAAA,CAAuB,SAAS,CAAC,CAAC;AAAA,GACzE;AAAA,EACA,CAAC,eAAO,IAAI,CAAA,EAAG,CAAC,SAAA,KAA2C,EAAA,CAAG,SAAS,CAAC;AAC1E,CAAA;AAEA,IAAMrC,gBAAAA,GACJ,aAAKD,kBAAiB,CAAA;AAEjB,SAAS,yBAAyB,KAAA,EAAiD;AACxF,EAAA,OAAO,SAAA;AAAA,IACL,CAAC,OAAA,MAAa,EAAE,OAAA,EAAQ;AAAA,GAC1B,CAAEC,gBAAAA,CAAgB,KAAA,CAAM,IAAI,CAAC,CAAA;AAC/B;AAEA,IAAM,gBAAA,GAAmB,CACvB,KAAA,EACA,KAAA,MACoB;AAAA,EACpB,GAAG,KAAA;AAAA,EACH;AACF,CAAA,CAAA;AAEA,IAAM,cAAc,CAAC,KAAA,KACnB,KAAA,CAAM,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAE7B,SAAS,mBAAmB,KAAA,EAA4C;AAC7E,EAAA,OAAO,SAAA;AAAA,IACL;AAAA,GACF,CAAE,wBAAA,CAAyB,KAAK,CAAC,CAAA;AACnC;ACzGO,IAAM,mBAAA,GAAsB;AAAA,EACjC,GAAA,EAAK,EAAA;AAAA,EACL,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAgBA,IAAMY,UAAAA,GAAY,CAAC,MAAA,KAA2C;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAIC,OAAO,MAAM,CAAA;AAE9C,EAAA,OAAO,CAAC,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,GAAG,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5E,CAAA;AAEA,IAAMC,qBAAoB,CAAC,CAAC,UAAA,EAAY,UAAU,MAAmB,UAAA,KAAe,UAAA;AAEpF,IAAMC,sBAAAA,GAA8D,cAAA;AAAA,EAClED,kBAAAA;AAAA,EACA,CAAC,CAAC,UAAA,EAAY,UAAU,MAAgC,CAAC,UAAA,GAAa,GAAA,EAAK,UAAA,GAAa,GAAG,CAAA;AAAA,EAC3F;AACF,CAAA;AAEA,IAAM8B,WAAAA,GAAa,CAAC,IAAA,KAClB7B,sBAAAA,CAAsBH,WAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAE5D,IAAMiC,WAAAA,GAAa,CAAC,IAAA,KAClB9B,sBAAAA,CAAsBH,WAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AAErD,IAAM,qBAAA,GAAwB,CACnC,IAAA,EACA,KAAA,EACA,MAAA,KACqB;AACrB,EAAA,MAAM,UAAA,GAAa,SAAS,mBAAA,CAAoB,MAAA;AAChD,EAAA,MAAM,SAASX,WAAAA,EAAY,CACxB,MAAA,CAAO2C,WAAAA,CAAW,IAAI,CAAC,CAAA,CACvB,IAAA,EAAK,CACL,MAAM,CAAC,mBAAA,CAAoB,MAAM,KAAA,GAAQ,mBAAA,CAAoB,KAAK,CAAC,CAAA;AACtE,EAAA,MAAM,MAAA,GAAS3C,WAAAA,EAAY,CACxB,MAAA,CAAO4C,YAAW,IAAI,CAAC,CAAA,CACvB,IAAA,GACA,KAAA,CAAM,CAAC,UAAA,EAAY,mBAAA,CAAoB,GAAG,CAAC,CAAA;AAC9C,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,MAAiD;AAAA,IACtE,GAAG,GAAA;AAAA,IACH,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA;AAAA,IAChB,EAAA,EAAI,MAAA,CAAO,GAAA,CAAI,CAAC;AAAA,GAClB,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,UAAA;AAAA,IACA,MAAM,WAAA,CAAI,aAAA,EAAe,CAAC,GAAG,IAAI,CAAC,CAAA;AAAA,IAClC,MAAA,EAAQ,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IAC7C,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACtB,MAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;AC1EO,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAQ,EAAsC;AACjF,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,IAAA,qBAASlD,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,kCAAkC,QAAA,EAAA,IAAA,EAAK;AAAA,GAC9E,CAAA;AACH;ACDO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,KAAA,EAAM,EAAyB;AACtE,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,6BAAA;AAAA,QACV,IAAI,mBAAA,CAAoB,IAAA;AAAA,QACxB,EAAA,EAAI,QAAQ,mBAAA,CAAoB,KAAA;AAAA,QAChC,IAAI,KAAA,CAAM,UAAA;AAAA,QACV,IAAI,KAAA,CAAM;AAAA;AAAA,KACZ;AAAA,oBACAA,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,6BAAA;AAAA,QACV,IAAI,mBAAA,CAAoB,IAAA;AAAA,QACxB,IAAI,mBAAA,CAAoB,IAAA;AAAA,QACxB,IAAI,mBAAA,CAAoB,GAAA;AAAA,QACxB,IAAI,KAAA,CAAM;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ;ACZO,SAAS,oBAAA,CAAqB;AAAA,EACnC,MAAA;AAAA,EACA,GAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,MAAM,eAAA,GAAkB,cAAA;AAAA,IACtB,eAAO,MAAM,CAAA;AAAA,IACb,eAAO,oCAAoC,CAAA;AAAA,IAC3C,eAAO,EAAE;AAAA,IACT,MAAM,CAAA;AACR,EAAA,MAAM,eAAA,GAAkB,CAAA,EAAG,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA,CAAA;AACtE,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KACrB,cAAA;AAAA,IACE,CAAC,SAAA,KAA0C,SAAA,CAAU,GAAA,KAAQ,QAAA;AAAA,IAC7D,MAAM,YAAA,EAAa;AAAA,IACnB,eAAO,MAAS;AAAA,IAChB,KAAK,CAAA;AAET,EAAA,uBACEC,IAAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,CAAC,4BAAA,EAA8B,eAAe,CAAC,CAAA;AAAA,MACrE,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,YAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAW,aAAA;AAAA,MACX,YAAA,EAAc,UAAA;AAAA,MACd,YAAA,EAAc,YAAA;AAAA,MAEd,QAAA,EAAA;AAAA,wBAAAD,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qCAAA;AAAA,YACV,IAAI,GAAA,CAAI,EAAA;AAAA,YACR,IAAI,GAAA,CAAI,EAAA;AAAA,YACR,CAAA,EAAG;AAAA;AAAA,SACL;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,iCAAA;AAAA,YACV,IAAI,GAAA,CAAI,EAAA;AAAA,YACR,IAAI,GAAA,CAAI,EAAA;AAAA,YACR,CAAA,EAAG;AAAA;AAAA;AACL;AAAA;AAAA,GACF;AAEJ;AClDO,SAAS,eAAA,CAAgB;AAAA,EAC9B,cAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,wBACrBA,GAAAA;AAAA,IAAC,oBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,mBAAmB,GAAA,CAAI,KAAA;AAAA,MAC/B,GAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MAEA,UAAA,EAAY,MAAM,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAAA,MACtC;AAAA,KAAA;AAAA,IAFK,GAAA,CAAI;AAAA,GAIZ,CAAA;AACH;ACrBO,SAAS,oBAAA,CAAqB;AAAA,EACnC,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA8B;AAC5B,EAAA,uBACEC,IAAAA,CAAAC,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,MAAA,CAAO,IAAI,CAAC,IAAA,qBACjBD,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,kCAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,IAAI,mBAAA,CAAoB,IAAA;AAAA,UACxB,EAAA,EAAI,QAAQ,mBAAA,CAAoB,KAAA;AAAA,UAChC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI;AAAA;AAAA,OACvB;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAG,mBAAA,CAAoB,OAAO,CAAA,EAAG,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,EAAG,UAAA,EAAW,KAAA,EACtE,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EACpB;AAAA,KAAA,EAAA,EATmD,CAAA,EAAA,EAAK,IAAI,CAAA,CAU9D,CACD,CAAA;AAAA,IACA,KAAA,CAAM,OAAO,GAAA,CAAI,CAAC,yBACjBC,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAA,EACX,QAAA,EAAA;AAAA,sBAAAD,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,EAAA,EAAI,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACrB,IAAI,mBAAA,CAAoB,GAAA;AAAA,UACxB,IAAI,KAAA,CAAM;AAAA;AAAA,OACZ;AAAA,sBACAA,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA;AAAA,UACpB,CAAA,EAAG,MAAA,GAAS,mBAAA,CAAoB,MAAA,GAAS,EAAA;AAAA,UACzC,UAAA,EAAW,QAAA;AAAA,UAEV,uBAAa,IAAI;AAAA;AAAA;AACpB,KAAA,EAAA,EAbmD,CAAA,EAAA,EAAK,IAAI,CAAA,CAc9D,CACD;AAAA,GAAA,EACH,CAAA;AAEJ;AC5CO,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,KAAA,EAAM,EAA6B;AAC9E,EAAA,uBACEA,GAAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,6BAAA;AAAA,MACV,GAAG,mBAAA,CAAoB,IAAA;AAAA,MACvB,GAAG,mBAAA,CAAoB,GAAA;AAAA,MACvB,KAAA,EAAO,KAAA,GAAQ,mBAAA,CAAoB,IAAA,GAAO,mBAAA,CAAoB,KAAA;AAAA,MAC9D,MAAA,EAAQ,KAAA,CAAM,UAAA,GAAa,mBAAA,CAAoB;AAAA;AAAA,GACjD;AAEJ;ACRA,IAAMO,eAAAA,GAAiB,EAAA;AACvB,IAAMC,kBAAAA,GAAoB,EAAA;AAC1B,IAAMC,kBAAAA,GAAoB,CAAA;AAC1B,IAAMC,mBAAAA,GAAqB,CAAA;AAC3B,IAAMC,gBAAAA,GAAkB,CAAA;AAExB,IAAMC,gBAAAA,GAAkB,CAAC,KAAA,KACvB,IAAA,CAAK,GAAA,CAAIJ,oBAAmB,KAAA,CAAM,MAAA,GAASE,mBAAAA,GAAqBD,kBAAAA,GAAoB,CAAC,CAAA;AAEvF,IAAMI,MAAAA,GAAQ,CAAC,OAAA,EAAiB,OAAA,EAAiB,KAAA,KAC/C,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,OAAO,CAAA,EAAG,OAAO,CAAA;AAErC,SAAS,kBAAA,CAAmB;AAAA,EACjC,GAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA,EAAA,EAAK,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,CAAA,CAAA;AAC5D,EAAA,MAAM,YAAA,GAAeD,iBAAgB,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAIC,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,QAAQ,YAAA,GAAeA,gBAAAA;AAAA,IACvB,GAAA,CAAI,KAAK,YAAA,GAAe;AAAA,GAC1B;AACA,EAAA,MAAM,CAAA,GAAIE,MAAAA;AAAA,IACRF,gBAAAA;AAAA,IACA,SAASJ,eAAAA,GAAiBI,gBAAAA;AAAA,IAC1B,GAAA,CAAI,KAAKJ,eAAAA,GAAiB;AAAA,GAC5B;AAEA,EAAA,uBACEN,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAAA,EAAiC,eAAY,MAAA,EACxD,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,2CAAA;AAAA,QACV,CAAA;AAAA,QACA,CAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQO,eAAAA;AAAA,QACR,EAAA,EAAI;AAAA;AAAA,KACN;AAAA,oBACAP,GAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,qCAAA;AAAA,QACV,CAAA,EAAG,IAAI,YAAA,GAAe,CAAA;AAAA,QACtB,CAAA,EAAG,IAAIO,eAAAA,GAAiB,CAAA;AAAA,QACxB,UAAA,EAAW,QAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC5CO,SAAS,cAAA,CAAe;AAAA,EAC7B,SAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIO,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,UAAU,cAAc,CAAA;AAE1E,EAAA,uBACEb,IAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,4BAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAD,GAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBACjDA,GAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA;AAAA,SACF;AAAA,wBACAA,GAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAc,KAAA,EAAc,CAAA;AAAA,wBAC7CA,GAAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,cAAA;AAAA,YACA,KAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,UAAA,EAAY,iBAAA;AAAA,YACZ,YAAA,EAAc,MAAM,iBAAA,CAAkB,IAAI;AAAA;AAAA,SAC5C;AAAA,QACC,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,qBACfA,GAAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,YAAA;AAAA,YACA,YAAA;AAAA,YACA,MAAA;AAAA,YAEA;AAAA,WAAA;AAAA,UADK,GAAA,CAAI;AAAA,SAGZ;AAAA;AAAA;AAAA,GACH;AAEJ;AC5CO,SAAS,iBAAA,CAAkB;AAAA,EAChC,SAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,uBAAA,EAAyB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,KAAA;AAAA,QACA,YAAA;AAAA,QACA,YAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,OAAA,EAAkB;AAAA,GAAA,EACxC,CAAA;AAEJ;AClCO,SAAS,WAAA,CAAY;AAAA,EAC1B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,MAAA,GAASe,OAAAA,CAAQ,MAAM,kBAAA,CAAmB,EAAE,MAAM,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAEjE,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,8BAAA,EAAgC,SAAS,CAAC,CAAA;AAAA,QACjE,KAAA,EAAM,mBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,IAAA,KAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,qBAAA,CAAsB,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAEvD,MAAA,uBACEA,GAAAA;AAAA,QAAC,iBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA;AAAA,UACA,SAAA;AAAA,UACA,YAAA;AAAA,UACA,YAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;AC5CO,IAAM,uBAAA,GAA0B,cAAA;AAAA,EACrC,MAAA,CAAO,SAAA;AAAA,EACP,MAAA;AAAA,EACA,CAAC,UAAkB,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,UAAU,EAAE;AAC1D;AAEO,IAAM,+BAAA,GAAkC;AAAA,EAC7C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,GAAA;AAAA,EACR,SAAA,EAAW,cAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS,IAAA;AAAA,EACT,YAAA,EAAc,uBAAA;AAAA,EACd,YAAA,EAAc;AAChB;;;ACAA,IAAM,cAAA,GAAyD;AAAA,EAC7D,oBAAoB,OAAuB;AAAA,IACzC,IAAA,EAAM,oBAAA;AAAA,IACN,OAAA,EAAS,wCAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAmC;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,aAAA,EAAe,CAAC,KAAA,MAAmC;AAAA,IACjD,IAAA,EAAM,eAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,yBAAA,EAA4B,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAG;AAAA,GAC5D,CAAA;AAAA,EACA,eAAA,EAAiB,CAAC,CAAA,MAA+B;AAAA,IAC/C,IAAA,EAAM,iBAAA;AAAA,IACN,OAAA,EAAS,oCAAA;AAAA,IACT,SAAS,IAAA,CAAK,CAAA,mBAAA,EAAsB,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,CAAG;AAAA,GAClD;AACF,CAAA;AAEO,SAAS,uBAAuB,KAAA,EAA6C;AAClF,EAAA,OAAO,SAAA;AAAA,IACL,CAAC,OAAA,MAAa,EAAE,OAAA,EAAQ;AAAA,GAC1B,CAAE,2BAAA,CAA4B,KAAA,CAAM,IAAA,EAAM,cAAc,CAAC,CAAA;AAC3D;AAEA,IAAMmE,gBAAAA,GAAkB,CAAC,KAAA,KACvB,2BAAA,CAA4B,MAAM,OAAO,CAAA;AAEpC,SAAS,iBAAiB,KAAA,EAAwC;AACvE,EAAA,OAAO,SAAA;AAAA,IACLA;AAAA,GACF,CAAE,sBAAA,CAAuB,KAAK,CAAC,CAAA;AACjC;AC9CO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,GAAA,EAAK,CAAA;AAAA,EACL,KAAA,EAAO,CAAA;AAAA,EACP,MAAA,EAAQ,CAAA;AAAA,EACR,IAAA,EAAM;AACR,CAAA;AAkBA,IAAMC,oBAAAA,GAAsB,CAAC,KAAA,KAAkB,KAAA,KAAU,CAAA;AAEzD,IAAMC,oBAAAA,GAAsB,CAAC,OAAA,KAA8B,CAAC,KAAA,KAC1D,cAAA;AAAA,EACED,oBAAAA;AAAA,EACA,eAAO,CAAC,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,EACnC,cAAA,CAAO,CAAC,OAAA,CAAQ,GAAG,CAAC;AACtB,CAAA,CAAE,KAAK,CAAA;AAET,IAAME,sBAAAA,GAAwB,CAAC,QAAA,KAC7B,QAAA,CAAS,OAAA,CAAQ,CAAC,OAAA,EAAS,KAAA,KAAUD,oBAAAA,CAAoB,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA;AAE1E,IAAMpD,UAAAA,GAAY,CAAC,MAAA,KAA2C;AAC5D,EAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAIC,OAAO,MAAM,CAAA;AAE9C,EAAA,OAAO,CAAC,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,GAAG,iBAAA,CAAkB,CAAC,CAAA,CAAE,UAAU,CAAC,CAAA;AAC5E,CAAA;AAEA,IAAMC,qBAAoB,CAAC,CAAC,UAAA,EAAY,UAAU,MAAmB,UAAA,KAAe,UAAA;AAEpF,IAAMC,sBAAAA,GAA8D,cAAA;AAAA,EAClED,kBAAAA;AAAA,EACA,CAAC,CAAC,UAAA,EAAY,UAAU,MAAgC,CAAC,UAAA,GAAa,GAAA,EAAK,UAAA,GAAa,GAAG,CAAA;AAAA,EAC3F;AACF,CAAA;AAEA,IAAM,mBAAA,GAAsB,CAAC,MAAA,KAC3B,iBAAA;AAAA,EACE,EAAA;AAAA,EACA6B,IAAAA,EAA6B,CAC1B,CAAA,CAAE,CAAC,UAAU,KAAA,CAAM,EAAE,CAAA,CACrB,CAAA,CAAE,CAAC,KAAA,KAAU,KAAA,CAAM,EAAE,EAAE,MAAM;AAClC,CAAA;AAEF,IAAMC,WAAAA,GAAa,CAAC,MAAA,KAClB7B,sBAAAA,CAAsBH,WAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE9D,IAAMiC,WAAAA,GAAa,CAAC,MAAA,KAClB9B,sBAAAA,CAAsBH,WAAU,WAAA,CAAI,YAAA,CAAK,GAAG,CAAA,EAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAEvD,IAAM,mBAAA,GAAsB,CACjC,QAAA,EACA,KAAA,EACA,MAAA,KACmB;AACnB,EAAA,MAAM,MAAA,GAASqD,uBAAsB,QAAQ,CAAA;AAC7C,EAAA,MAAM,MAAA,GAAShE,WAAAA,EAAY,CACxB,MAAA,CAAO2C,YAAW,MAAM,CAAC,CAAA,CACzB,KAAA,CAAM,CAAC,iBAAA,CAAkB,IAAA,EAAM,KAAA,GAAQ,iBAAA,CAAkB,KAAK,CAAC,CAAA;AAClE,EAAA,MAAM,MAAA,GAAS3C,WAAAA,EAAY,CACxB,MAAA,CAAO4C,YAAW,MAAM,CAAC,CAAA,CACzB,KAAA,CAAM,CAAC,MAAA,GAAS,iBAAA,CAAkB,MAAA,EAAQ,iBAAA,CAAkB,GAAG,CAAC,CAAA;AACnE,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,MAAmD;AAAA,IAC1E,GAAG,KAAA;AAAA,IACH,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IAClB,EAAA,EAAI,MAAA,CAAO,KAAA,CAAM,CAAC;AAAA,GACpB,CAAA;AACA,EAAA,MAAM,iBAAiB,WAAA,CAAI,eAAA,EAAiB,CAAC,GAAG,MAAM,CAAC,CAAA;AACvD,EAAA,MAAM,iBAAA,GAAoB,CAAC,OAAA,MAAyD;AAAA,IAClF,KAAA,EAAO,eAAA,CAAgB,OAAA,CAAQ,KAAK,CAAA;AAAA,IACpC,GAAA,EAAK,eAAA,CAAgB,OAAA,CAAQ,GAAG;AAAA,GAClC,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,cAAA;AAAA,IACR,UAAU,WAAA,CAAI,iBAAA,EAAmB,CAAC,GAAG,QAAQ,CAAC,CAAA;AAAA,IAC9C,IAAA,EAAM,oBAAoB,cAAc;AAAA,GAC1C;AACF,CAAA;AChGO,SAAS,gBAAA,CAAiB,EAAE,OAAA,EAAQ,EAAoC;AAC7E,EAAA,OAAO,YAAY,OAAA,EAAS;AAAA,IAC1B,MAAM,MAAM,IAAA;AAAA,IACZ,IAAA,EAAM,CAAC,IAAA,qBAASlD,IAAC,YAAA,EAAA,EAAW,SAAA,EAAU,+BAA+B,QAAA,EAAA,IAAA,EAAK;AAAA,GAC3E,CAAA;AACH;ACHO,SAAS,aAAA,CAAc,EAAE,SAAA,EAAU,EAAuB;AAC/D,EAAA,uBAAOA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAA2B,CAAA,EAAG,SAAA,CAAU,IAAA,EAAM,aAAA,EAAY,MAAA,EAAO,CAAA;AAC1F;ACCO,SAAS,YAAA,CAAa;AAAA,EAC3B,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,uBACEA,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,yBAAA;AAAA,MACV,OAAA,EAAS,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,kBAAAA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAsB;AAAA;AAAA,GACvC;AAEJ;ACVO,SAAS,eAAA,CAAgB;AAAA,EAC9B,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEC,IAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAW,UAAA,CAAW,CAAC,oBAAA,EAAsB,SAAS,CAAC,CAAA,EAAG,YAAA,EAAY,SAAA,EAC5E,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,SAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AAAA,KACF;AAAA,oBACAA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB;AAAA,GAAA,EACtC,CAAA;AAEJ;ACxBO,SAAS,SAAA,CAAU;AAAA,EACxB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,MAAA,GAASe,OAAAA,CAAQ,MAAM,gBAAA,CAAiB,EAAE,MAAM,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAE/D,EAAA,OAAO,YAAY,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,CAAC,KAAA,qBACNf,GAAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,UAAA,CAAW,CAAC,2BAAA,EAA6B,SAAS,CAAC,CAAA;AAAA,QAC9D,KAAA,EAAM,uBAAA;AAAA,QACN,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,IAAA,EAAK;AAAA;AAAA,KACP;AAAA,IAEF,EAAA,EAAI,CAAC,QAAA,KAAa;AAChB,MAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,QAAA,EAAU,KAAA,EAAO,MAAM,CAAA;AAE7D,MAAA,uBACEA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,OAAA;AAAA,UACA,SAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,IAEJ;AAAA,GACD,CAAA;AACH;;;ACzCO,IAAM,4BAAA,GAA+B;AAAA,EAC1C,KAAA,EAAO,GAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,SAAA,EAAW,WAAA;AAAA,EACX,SAAA,EAAW,EAAA;AAAA,EACX,OAAA,EAAS;AACX","file":"index.js","sourcesContent":["export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","export default function _isTransformer(obj) {\n return obj != null && typeof obj['@@transducer/step'] === 'function';\n}","import _isArray from \"./_isArray.js\";\nimport _isTransformer from \"./_isTransformer.js\";\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer created by [transducerCreator] to return a new transformer\n * (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} transducerCreator transducer factory if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nexport default function _dispatchable(methodNames, transducerCreator, fn) {\n return function () {\n if (arguments.length === 0) {\n return fn();\n }\n var obj = arguments[arguments.length - 1];\n if (!_isArray(obj)) {\n var idx = 0;\n while (idx < methodNames.length) {\n if (typeof obj[methodNames[idx]] === 'function') {\n return obj[methodNames[idx]].apply(obj, Array.prototype.slice.call(arguments, 0, -1));\n }\n idx += 1;\n }\n if (_isTransformer(obj)) {\n var transducer = transducerCreator.apply(null, Array.prototype.slice.call(arguments, 0, -1));\n return transducer(obj);\n }\n }\n return fn.apply(this, arguments);\n };\n}","export default function _reduced(x) {\n return x && x['@@transducer/reduced'] ? x : {\n '@@transducer/value': x,\n '@@transducer/reduced': true\n };\n}","export default {\n init: function () {\n return this.xf['@@transducer/init']();\n },\n result: function (result) {\n return this.xf['@@transducer/result'](result);\n }\n};","import _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\nvar XAll = /*#__PURE__*/function () {\n function XAll(f, xf) {\n this.xf = xf;\n this.f = f;\n this.all = true;\n }\n XAll.prototype['@@transducer/init'] = _xfBase.init;\n XAll.prototype['@@transducer/result'] = function (result) {\n if (this.all) {\n result = this.xf['@@transducer/step'](result, true);\n }\n return this.xf['@@transducer/result'](result);\n };\n XAll.prototype['@@transducer/step'] = function (result, input) {\n if (!this.f(input)) {\n this.all = false;\n result = _reduced(this.xf['@@transducer/step'](result, false));\n }\n return result;\n };\n return XAll;\n}();\nexport default function _xall(f) {\n return function (xf) {\n return new XAll(f, xf);\n };\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xall from \"./internal/_xall.js\";\n\n/**\n * Returns `true` if all elements of the list match the predicate, `false` if\n * there are any that don't.\n *\n * Dispatches to the `all` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is satisfied by every element, `false`\n * otherwise.\n * @see R.any, R.none, R.transduce\n * @example\n *\n * const equals3 = R.equals(3);\n * R.all(equals3)([3, 3, 3, 3]); //=> true\n * R.all(equals3)([3, 3, 1, 3]); //=> false\n */\nvar all = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['all'], _xall, function all(fn, list) {\n var idx = 0;\n while (idx < list.length) {\n if (!fn(list[idx])) {\n return false;\n }\n idx += 1;\n }\n return true;\n}));\nexport default all;","export default function _arity(n, fn) {\n /* eslint-disable no-unused-vars */\n switch (n) {\n case 0:\n return function () {\n return fn.apply(this, arguments);\n };\n case 1:\n return function (a0) {\n return fn.apply(this, arguments);\n };\n case 2:\n return function (a0, a1) {\n return fn.apply(this, arguments);\n };\n case 3:\n return function (a0, a1, a2) {\n return fn.apply(this, arguments);\n };\n case 4:\n return function (a0, a1, a2, a3) {\n return fn.apply(this, arguments);\n };\n case 5:\n return function (a0, a1, a2, a3, a4) {\n return fn.apply(this, arguments);\n };\n case 6:\n return function (a0, a1, a2, a3, a4, a5) {\n return fn.apply(this, arguments);\n };\n case 7:\n return function (a0, a1, a2, a3, a4, a5, a6) {\n return fn.apply(this, arguments);\n };\n case 8:\n return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n return fn.apply(this, arguments);\n };\n case 9:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n return fn.apply(this, arguments);\n };\n case 10:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n return fn.apply(this, arguments);\n };\n default:\n throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n }\n}","import _arity from \"./_arity.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curryN(length, received, fn) {\n return function () {\n var combined = [];\n var argsIdx = 0;\n var left = length;\n var combinedIdx = 0;\n var hasPlaceholder = false;\n while (combinedIdx < received.length || argsIdx < arguments.length) {\n var result;\n if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n result = received[combinedIdx];\n } else {\n result = arguments[argsIdx];\n argsIdx += 1;\n }\n combined[combinedIdx] = result;\n if (!_isPlaceholder(result)) {\n left -= 1;\n } else {\n hasPlaceholder = true;\n }\n combinedIdx += 1;\n }\n return !hasPlaceholder && left <= 0 ? fn.apply(this, combined) : _arity(Math.max(0, left), _curryN(length, combined, fn));\n };\n}","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _curryN from \"./internal/_curryN.js\";\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n * const sumArgs = (...args) => R.sum(args);\n *\n * const curriedAddFourNumbers = R.curryN(4, sumArgs);\n * const f = curriedAddFourNumbers(1, 2);\n * const g = f(3);\n * g(4); //=> 10\n */\nvar curryN = /*#__PURE__*/_curry2(function curryN(length, fn) {\n if (length === 1) {\n return _curry1(fn);\n }\n return _arity(length, _curryN(length, [], fn));\n});\nexport default curryN;","export default function _arrayFromIterator(iter) {\n var list = [];\n var next;\n while (!(next = iter.next()).done) {\n list.push(next.value);\n }\n return list;\n}","export default function _includesWith(pred, x, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n if (pred(x, list[idx])) {\n return true;\n }\n idx += 1;\n }\n return false;\n}","export default function _functionName(f) {\n // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n var match = String(f).match(/^function (\\w*)/);\n return match == null ? '' : match[1];\n}","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction _objectIs(a, b) {\n // SameValue algorithm\n if (a === b) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return a !== 0 || 1 / a === 1 / b;\n } else {\n // Step 6.a: NaN == NaN\n return a !== a && b !== b;\n }\n}\nexport default typeof Object.is === 'function' ? Object.is : _objectIs;","import _has from \"./_has.js\";\nvar toString = Object.prototype.toString;\nvar _isArguments = /*#__PURE__*/function () {\n return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n return toString.call(x) === '[object Arguments]';\n } : function _isArguments(x) {\n return _has('callee', x);\n };\n}();\nexport default _isArguments;","import _curry1 from \"./internal/_curry1.js\";\nimport _has from \"./internal/_has.js\";\nimport _isArguments from \"./internal/_isArguments.js\";\n\n// cover IE < 9 keys issues\nvar hasEnumBug = ! /*#__PURE__*/{\n toString: null\n}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n// Safari bug\nvar hasArgsEnumBug = /*#__PURE__*/function () {\n 'use strict';\n\n return arguments.propertyIsEnumerable('length');\n}();\nvar contains = function contains(list, item) {\n var idx = 0;\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n idx += 1;\n }\n return false;\n};\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values, R.toPairs\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? /*#__PURE__*/_curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n}) : /*#__PURE__*/_curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n var prop, nIdx;\n var ks = [];\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n nIdx -= 1;\n }\n }\n return ks;\n});\nexport default keys;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig * -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n * R.type(() => {}); //=> \"Function\"\n * R.type(async () => {}); //=> \"AsyncFunction\"\n * R.type(undefined); //=> \"Undefined\"\n * R.type(BigInt(123)); //=> \"BigInt\"\n */\nvar type = /*#__PURE__*/_curry1(function type(val) {\n return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\nexport default type;","import _arrayFromIterator from \"./_arrayFromIterator.js\";\nimport _includesWith from \"./_includesWith.js\";\nimport _functionName from \"./_functionName.js\";\nimport _has from \"./_has.js\";\nimport _objectIs from \"./_objectIs.js\";\nimport keys from \"../keys.js\";\nimport type from \"../type.js\";\n\n/**\n * private _uniqContentEquals function.\n * That function is checking equality of 2 iterator contents with 2 assumptions\n * - iterators lengths are the same\n * - iterators values are unique\n *\n * false-positive result will be returned for comparison of, e.g.\n * - [1,2,3] and [1,2,3,4]\n * - [1,1,1] and [1,2,3]\n * */\n\nfunction _uniqContentEquals(aIterator, bIterator, stackA, stackB) {\n var a = _arrayFromIterator(aIterator);\n var b = _arrayFromIterator(bIterator);\n function eq(_a, _b) {\n return _equals(_a, _b, stackA.slice(), stackB.slice());\n }\n\n // if *a* array contains any element that is not included in *b*\n return !_includesWith(function (b, aItem) {\n return !_includesWith(eq, aItem, b);\n }, b, a);\n}\nexport default function _equals(a, b, stackA, stackB) {\n if (_objectIs(a, b)) {\n return true;\n }\n var typeA = type(a);\n if (typeA !== type(b)) {\n return false;\n }\n if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n }\n if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a);\n }\n switch (typeA) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') {\n return a === b;\n }\n break;\n case 'Boolean':\n case 'Number':\n case 'String':\n if (!(typeof a === typeof b && _objectIs(a.valueOf(), b.valueOf()))) {\n return false;\n }\n break;\n case 'Date':\n if (!_objectIs(a.valueOf(), b.valueOf())) {\n return false;\n }\n break;\n case 'Error':\n return a.name === b.name && a.message === b.message;\n case 'RegExp':\n if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) {\n return false;\n }\n break;\n }\n var idx = stackA.length - 1;\n while (idx >= 0) {\n if (stackA[idx] === a) {\n return stackB[idx] === b;\n }\n idx -= 1;\n }\n switch (typeA) {\n case 'Map':\n if (a.size !== b.size) {\n return false;\n }\n return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b]));\n case 'Set':\n if (a.size !== b.size) {\n return false;\n }\n return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b]));\n case 'Arguments':\n case 'Array':\n case 'Object':\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'Error':\n case 'RegExp':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'ArrayBuffer':\n break;\n default:\n // Values of other types are only equal if identical.\n return false;\n }\n var keysA = keys(a);\n if (keysA.length !== keys(b).length) {\n return false;\n }\n var extendedStackA = stackA.concat([a]);\n var extendedStackB = stackB.concat([b]);\n idx = keysA.length - 1;\n while (idx >= 0) {\n var key = keysA[idx];\n if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) {\n return false;\n }\n idx -= 1;\n }\n return true;\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _equals from \"./internal/_equals.js\";\n\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * R.equals(1, 1); //=> true\n * R.equals(1, '1'); //=> false\n * R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n * const a = {}; a.v = a;\n * const b = {}; b.v = b;\n * R.equals(a, b); //=> true\n */\nvar equals = /*#__PURE__*/_curry2(function equals(a, b) {\n return _equals(a, b, [], []);\n});\nexport default equals;","import equals from \"../equals.js\";\nexport default function _indexOf(list, a, idx) {\n var inf, item;\n // Array.prototype.indexOf doesn't exist below IE9\n if (typeof list.indexOf === 'function') {\n switch (typeof a) {\n case 'number':\n if (a === 0) {\n // manually crawl the list to distinguish between +0 and -0\n inf = 1 / a;\n while (idx < list.length) {\n item = list[idx];\n if (item === 0 && 1 / item === inf) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n } else if (a !== a) {\n // NaN\n while (idx < list.length) {\n item = list[idx];\n if (typeof item === 'number' && item !== item) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n }\n // non-zero numbers can utilise Set\n return list.indexOf(a, idx);\n\n // all these types can utilise Set\n case 'string':\n case 'boolean':\n case 'function':\n case 'undefined':\n return list.indexOf(a, idx);\n case 'object':\n if (a === null) {\n // null can utilise Set\n return list.indexOf(a, idx);\n }\n }\n }\n // anything else not covered above, defer to R.equals\n while (idx < list.length) {\n if (equals(list[idx], a)) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n}","import _indexOf from \"./_indexOf.js\";\nexport default function _includes(a, list) {\n return _indexOf(list, a, 0) >= 0;\n}","export default function _map(fn, functor) {\n var idx = 0;\n var len = functor.length;\n var result = Array(len);\n while (idx < len) {\n result[idx] = fn(functor[idx]);\n idx += 1;\n }\n return result;\n}","export default function _quote(s) {\n var escaped = s.replace(/\\\\/g, '\\\\\\\\').replace(/[\\b]/g, '\\\\b') // \\b matches word boundary; [\\b] matches backspace\n .replace(/\\f/g, '\\\\f').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t').replace(/\\v/g, '\\\\v').replace(/\\0/g, '\\\\0');\n return '\"' + escaped.replace(/\"/g, '\\\\\"') + '\"';\n}","/**\n * Polyfill from <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString>.\n */\nvar pad = function pad(n) {\n return (n < 10 ? '0' : '') + n;\n};\nvar _toISOString = typeof Date.prototype.toISOString === 'function' ? function _toISOString(d) {\n return d.toISOString();\n} : function _toISOString(d) {\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z';\n};\nexport default _toISOString;","export default function _complement(f) {\n return function () {\n return !f.apply(this, arguments);\n };\n}","export default function _arrayReduce(reducer, acc, list) {\n var index = 0;\n var length = list.length;\n while (index < length) {\n acc = reducer(acc, list[index]);\n index += 1;\n }\n return acc;\n}","export default function _filter(fn, list) {\n var idx = 0;\n var len = list.length;\n var result = [];\n while (idx < len) {\n if (fn(list[idx])) {\n result[result.length] = list[idx];\n }\n idx += 1;\n }\n return result;\n}","export default function _isObject(x) {\n return Object.prototype.toString.call(x) === '[object Object]';\n}","import _xfBase from \"./_xfBase.js\";\nvar XFilter = /*#__PURE__*/function () {\n function XFilter(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XFilter.prototype['@@transducer/init'] = _xfBase.init;\n XFilter.prototype['@@transducer/result'] = _xfBase.result;\n XFilter.prototype['@@transducer/step'] = function (result, input) {\n return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n };\n return XFilter;\n}();\nexport default function _xfilter(f) {\n return function (xf) {\n return new XFilter(f, xf);\n };\n}","import _arrayReduce from \"./internal/_arrayReduce.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _filter from \"./internal/_filter.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _xfilter from \"./internal/_xfilter.js\";\nimport keys from \"./keys.js\";\n\n/**\n * Takes a predicate and a `Filterable`, and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @category Object\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array} Filterable\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n * const isEven = n => n % 2 === 0;\n *\n * R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nvar filter = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/filter', 'filter'], _xfilter, function (pred, filterable) {\n return _isObject(filterable) ? _arrayReduce(function (acc, key) {\n if (pred(filterable[key])) {\n acc[key] = filterable[key];\n }\n return acc;\n }, {}, keys(filterable)) :\n // else\n _filter(pred, filterable);\n}));\nexport default filter;","import _complement from \"./internal/_complement.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport filter from \"./filter.js\";\n\n/**\n * The complement of [`filter`](#filter).\n *\n * Acts as a transducer if a transformer is given in list position. Filterable\n * objects include plain objects or any object that has a filter method such\n * as `Array`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array}\n * @see R.filter, R.transduce, R.addIndex\n * @example\n *\n * const isOdd = (n) => n % 2 !== 0;\n *\n * R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nvar reject = /*#__PURE__*/_curry2(function reject(pred, filterable) {\n return filter(_complement(pred), filterable);\n});\nexport default reject;","import _includes from \"./_includes.js\";\nimport _map from \"./_map.js\";\nimport _quote from \"./_quote.js\";\nimport _toISOString from \"./_toISOString.js\";\nimport keys from \"../keys.js\";\nimport reject from \"../reject.js\";\nexport default function _toString(x, seen) {\n var recur = function recur(y) {\n var xs = seen.concat([x]);\n return _includes(y, xs) ? '<Circular>' : _toString(y, xs);\n };\n\n // mapPairs :: (Object, [String]) -> [String]\n var mapPairs = function (obj, keys) {\n return _map(function (k) {\n return _quote(k) + ': ' + recur(obj[k]);\n }, keys.slice().sort());\n };\n switch (Object.prototype.toString.call(x)) {\n case '[object Arguments]':\n return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';\n case '[object Array]':\n return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) {\n return /^\\d+$/.test(k);\n }, keys(x)))).join(', ') + ']';\n case '[object Boolean]':\n return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();\n case '[object Date]':\n return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';\n case '[object Map]':\n return 'new Map(' + recur(Array.from(x)) + ')';\n case '[object Null]':\n return 'null';\n case '[object Number]':\n return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);\n case '[object Set]':\n return 'new Set(' + recur(Array.from(x).sort()) + ')';\n case '[object String]':\n return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);\n case '[object Undefined]':\n return 'undefined';\n default:\n if (typeof x.toString === 'function') {\n var repr = x.toString();\n if (repr !== '[object Object]') {\n return repr;\n }\n }\n return '{' + mapPairs(x, keys(x)).join(', ') + '}';\n }\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _toString from \"./internal/_toString.js\";\n\n/**\n * Returns the string representation of the given value. `eval`'ing the output\n * should result in a value equivalent to the input value. Many of the built-in\n * `toString` methods do not satisfy this requirement.\n *\n * If the given value is an `[object Object]` with a `toString` method other\n * than `Object.prototype.toString`, this method is invoked with no arguments\n * to produce the return value. This means user-defined constructor functions\n * can provide a suitable `toString` method. For example:\n *\n * function Point(x, y) {\n * this.x = x;\n * this.y = y;\n * }\n *\n * Point.prototype.toString = function() {\n * return 'new Point(' + this.x + ', ' + this.y + ')';\n * };\n *\n * R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category String\n * @sig * -> String\n * @param {*} val\n * @return {String}\n * @example\n *\n * R.toString(42); //=> '42'\n * R.toString('abc'); //=> '\"abc\"'\n * R.toString([1, 2, 3]); //=> '[1, 2, 3]'\n * R.toString({foo: 1, bar: 2, baz: 3}); //=> '{\"bar\": 2, \"baz\": 3, \"foo\": 1}'\n * R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date(\"2001-02-03T04:05:06.000Z\")'\n */\nvar toString = /*#__PURE__*/_curry1(function toString(val) {\n return _toString(val, []);\n});\nexport default toString;","import _curry2 from \"./internal/_curry2.js\";\nimport toString from \"./toString.js\";\n\n/**\n * Returns the larger of its two arguments.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> a\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.maxBy, R.min\n * @example\n *\n * R.max(789, 123); //=> 789\n * R.max('a', 'b'); //=> 'b'\n */\nvar max = /*#__PURE__*/_curry2(function max(a, b) {\n if (a === b) {\n return b;\n }\n function safeMax(x, y) {\n if (x > y !== y > x) {\n return y > x ? y : x;\n }\n return undefined;\n }\n var maxByValue = safeMax(a, b);\n if (maxByValue !== undefined) {\n return maxByValue;\n }\n var maxByType = safeMax(typeof a, typeof b);\n if (maxByType !== undefined) {\n return maxByType === typeof a ? a : b;\n }\n var stringA = toString(a);\n var maxByStringValue = safeMax(stringA, toString(b));\n if (maxByStringValue !== undefined) {\n return maxByStringValue === stringA ? a : b;\n }\n return b;\n});\nexport default max;","import _xfBase from \"./_xfBase.js\";\nvar XMap = /*#__PURE__*/function () {\n function XMap(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XMap.prototype['@@transducer/init'] = _xfBase.init;\n XMap.prototype['@@transducer/result'] = _xfBase.result;\n XMap.prototype['@@transducer/step'] = function (result, input) {\n return this.xf['@@transducer/step'](result, this.f(input));\n };\n return XMap;\n}();\nvar _xmap = function _xmap(f) {\n return function (xf) {\n return new XMap(f, xf);\n };\n};\nexport default _xmap;","import _arrayReduce from \"./internal/_arrayReduce.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _map from \"./internal/_map.js\";\nimport _xmap from \"./internal/_xmap.js\";\nimport curryN from \"./curryN.js\";\nimport keys from \"./keys.js\";\n\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex, R.pluck, R.project\n * @example\n *\n * const double = x => x * 2;\n *\n * R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n * R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\nvar map = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n switch (Object.prototype.toString.call(functor)) {\n case '[object Function]':\n return curryN(functor.length, function () {\n return fn.call(this, functor.apply(this, arguments));\n });\n case '[object Object]':\n return _arrayReduce(function (acc, key) {\n acc[key] = fn(functor[key]);\n return acc;\n }, {}, keys(functor));\n default:\n return _map(fn, functor);\n }\n}));\nexport default map;","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","export default function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}","import _isString from \"./_isString.js\";\nexport default function _nth(offset, list) {\n var idx = offset < 0 ? list.length + offset : offset;\n return _isString(list) ? list.charAt(idx) : list[idx];\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns a function that when supplied an object returns the indicated\n * property of that object, if it exists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig Idx -> {s: a} -> a | Undefined\n * @param {String|Number} p The property name or array index\n * @param {Object} obj The object to query\n * @return {*} The value at `obj.p`.\n * @see R.path, R.props, R.pluck, R.project, R.nth\n * @example\n *\n * R.prop('x', {x: 100}); //=> 100\n * R.prop('x', {}); //=> undefined\n * R.prop(0, [100]); //=> 100\n * R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4\n */\n\nvar prop = /*#__PURE__*/_curry2(function prop(p, obj) {\n if (obj == null) {\n return;\n }\n return _isInteger(p) ? _nth(p, obj) : obj[p];\n});\nexport default prop;","import _curry2 from \"./internal/_curry2.js\";\nimport map from \"./map.js\";\nimport prop from \"./prop.js\";\n\n/**\n * Returns a new list by plucking the same named property off all objects in\n * the list supplied.\n *\n * `pluck` will work on\n * any [functor](https://github.com/fantasyland/fantasy-land#functor) in\n * addition to arrays, as it is equivalent to `R.map(R.prop(k), f)`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => k -> f {k: v} -> f v\n * @param {Number|String} key The key name to pluck off of each object.\n * @param {Array} f The array or functor to consider.\n * @return {Array} The list of values for the given key.\n * @see R.project, R.prop, R.props\n * @example\n *\n * var getAges = R.pluck('age');\n * getAges([{name: 'fred', age: 29}, {name: 'wilma', age: 27}]); //=> [29, 27]\n *\n * R.pluck(0, [[1, 2], [3, 4]]); //=> [1, 3]\n * R.pluck('val', {a: {val: 3}, b: {val: 5}}); //=> {a: 3, b: 5}\n * @symb R.pluck('x', [{x: 1, y: 2}, {x: 3, y: 4}, {x: 5, y: 6}]) = [1, 3, 5]\n * @symb R.pluck(0, [[1, 2], [3, 4], [5, 6]]) = [1, 3, 5]\n */\nvar pluck = /*#__PURE__*/_curry2(function pluck(p, list) {\n return map(prop(p), list);\n});\nexport default pluck;","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isArray from \"./_isArray.js\";\nimport _isString from \"./_isString.js\";\n\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n * _isArrayLike([]); //=> true\n * _isArrayLike(true); //=> false\n * _isArrayLike({}); //=> false\n * _isArrayLike({length: 10}); //=> false\n * _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n * _isArrayLike({nodeType: 1, length: 1}) // => false\n */\nvar _isArrayLike = /*#__PURE__*/_curry1(function isArrayLike(x) {\n if (_isArray(x)) {\n return true;\n }\n if (!x) {\n return false;\n }\n if (typeof x !== 'object') {\n return false;\n }\n if (_isString(x)) {\n return false;\n }\n if (x.length === 0) {\n return true;\n }\n if (x.length > 0) {\n return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n }\n return false;\n});\nexport default _isArrayLike;","import _isArrayLike from \"./_isArrayLike.js\";\nvar symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator';\nexport default function _createReduce(arrayReduce, methodReduce, iterableReduce) {\n return function _reduce(xf, acc, list) {\n if (_isArrayLike(list)) {\n return arrayReduce(xf, acc, list);\n }\n if (list == null) {\n return acc;\n }\n if (typeof list['fantasy-land/reduce'] === 'function') {\n return methodReduce(xf, acc, list, 'fantasy-land/reduce');\n }\n if (list[symIterator] != null) {\n return iterableReduce(xf, acc, list[symIterator]());\n }\n if (typeof list.next === 'function') {\n return iterableReduce(xf, acc, list);\n }\n if (typeof list.reduce === 'function') {\n return methodReduce(xf, acc, list, 'reduce');\n }\n throw new TypeError('reduce: list must be array or iterable');\n };\n}","export default function _xArrayReduce(xf, acc, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n acc = xf['@@transducer/step'](acc, list[idx]);\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n idx += 1;\n }\n return xf['@@transducer/result'](acc);\n}","import _arity from \"./internal/_arity.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n * const log = R.bind(console.log, console);\n * R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n * // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\nvar bind = /*#__PURE__*/_curry2(function bind(fn, thisObj) {\n return _arity(fn.length, function () {\n return fn.apply(thisObj, arguments);\n });\n});\nexport default bind;","import _createReduce from \"./_createReduce.js\";\nimport _xArrayReduce from \"./_xArrayReduce.js\";\nimport bind from \"../bind.js\";\nfunction _xIterableReduce(xf, acc, iter) {\n var step = iter.next();\n while (!step.done) {\n acc = xf['@@transducer/step'](acc, step.value);\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n step = iter.next();\n }\n return xf['@@transducer/result'](acc);\n}\nfunction _xMethodReduce(xf, acc, obj, methodName) {\n return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n}\nvar _xReduce = /*#__PURE__*/_createReduce(_xArrayReduce, _xMethodReduce, _xIterableReduce);\nexport default _xReduce;","var XWrap = /*#__PURE__*/function () {\n function XWrap(fn) {\n this.f = fn;\n }\n XWrap.prototype['@@transducer/init'] = function () {\n throw new Error('init not implemented on XWrap');\n };\n XWrap.prototype['@@transducer/result'] = function (acc) {\n return acc;\n };\n XWrap.prototype['@@transducer/step'] = function (acc, x) {\n return this.f(acc, x);\n };\n return XWrap;\n}();\nexport default function _xwrap(fn) {\n return new XWrap(fn);\n}","import _curry3 from \"./internal/_curry3.js\";\nimport _xReduce from \"./internal/_xReduce.js\";\nimport _xwrap from \"./internal/_xwrap.js\";\n\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It may use\n * [`R.reduced`](#reduced) to shortcut the iteration.\n *\n * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function\n * is *(value, acc)*.\n *\n * Note: `R.reduce` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduce` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description\n *\n * Be cautious of mutating and returning the accumulator. If you reuse it across\n * invocations, it will continue to accumulate onto the same value. The general\n * recommendation is to always return a new value. If you can't do so for\n * performance reasons, then be sure to reinitialize the accumulator on each\n * invocation.\n *\n * Dispatches to the `reduce` method of the third argument, if present. When\n * doing so, it is up to the user to handle the [`R.reduced`](#reduced)\n * shortcuting, as this is not implemented by `reduce`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n * current element from the array.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduced, R.addIndex, R.reduceRight\n * @example\n *\n * R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10\n * // - -10\n * // / \\ / \\\n * // - 4 -6 4\n * // / \\ / \\\n * // - 3 ==> -3 3\n * // / \\ / \\\n * // - 2 -1 2\n * // / \\ / \\\n * // 0 1 0 1\n *\n * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)\n */\nvar reduce = /*#__PURE__*/_curry3(function (xf, acc, list) {\n return _xReduce(typeof xf === 'function' ? _xwrap(xf) : xf, acc, list);\n});\nexport default reduce;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Takes a list of predicates and returns a predicate that returns true for a\n * given list of arguments if every one of the provided predicates is satisfied\n * by those arguments.\n *\n * The function returned is a curried function whose arity matches that of the\n * highest-arity predicate.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Logic\n * @sig [(*... -> Boolean)] -> (*... -> Boolean)\n * @param {Array} predicates An array of predicates to check\n * @return {Function} The combined predicate\n * @see R.anyPass, R.both\n * @example\n *\n * const isQueen = R.propEq('Q', 'rank');\n * const isSpade = R.propEq('♠︎', 'suit');\n * const isQueenOfSpades = R.allPass([isQueen, isSpade]);\n *\n * isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false\n * isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true\n */\nvar allPass = /*#__PURE__*/_curry1(function allPass(preds) {\n return curryN(reduce(max, 0, pluck('length', preds)), function () {\n var idx = 0;\n var len = preds.length;\n while (idx < len) {\n if (!preds[idx].apply(this, arguments)) {\n return false;\n }\n idx += 1;\n }\n return true;\n });\n});\nexport default allPass;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Returns a function that always returns the given value. Note that for\n * non-primitives the value returned is a reference to the original value.\n *\n * This function is known as `const`, `constant`, or `K` (for K combinator) in\n * other languages and libraries.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> (* -> a)\n * @param {*} val The value to wrap in a function\n * @return {Function} A Function :: * -> val.\n * @example\n *\n * const t = R.always('Tee');\n * t(); //=> 'Tee'\n */\nvar always = /*#__PURE__*/_curry1(function always(val) {\n return function () {\n return val;\n };\n});\nexport default always;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Takes a list of predicates and returns a predicate that returns true for a\n * given list of arguments if at least one of the provided predicates is\n * satisfied by those arguments.\n *\n * The function returned is a curried function whose arity matches that of the\n * highest-arity predicate.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Logic\n * @sig [(*... -> Boolean)] -> (*... -> Boolean)\n * @param {Array} predicates An array of predicates to check\n * @return {Function} The combined predicate\n * @see R.allPass, R.either\n * @example\n *\n * const isClub = R.propEq('♣', 'suit');\n * const isSpade = R.propEq('♠', 'suit');\n * const isBlackCard = R.anyPass([isClub, isSpade]);\n *\n * isBlackCard({rank: '10', suit: '♣'}); //=> true\n * isBlackCard({rank: 'Q', suit: '♠'}); //=> true\n * isBlackCard({rank: 'Q', suit: '♦'}); //=> false\n */\nvar anyPass = /*#__PURE__*/_curry1(function anyPass(preds) {\n return curryN(reduce(max, 0, pluck('length', preds)), function () {\n var idx = 0;\n var len = preds.length;\n while (idx < len) {\n if (preds[idx].apply(this, arguments)) {\n return true;\n }\n idx += 1;\n }\n return false;\n });\n});\nexport default anyPass;","export default function _aperture(n, list) {\n var idx = 0;\n var limit = list.length - (n - 1);\n var acc = new Array(limit >= 0 ? limit : 0);\n while (idx < limit) {\n acc[idx] = Array.prototype.slice.call(list, idx, idx + n);\n idx += 1;\n }\n return acc;\n}","/**\n * Private `concat` function to merge two array-like objects.\n *\n * @private\n * @param {Array|Arguments} [set1=[]] An array-like object.\n * @param {Array|Arguments} [set2=[]] An array-like object.\n * @return {Array} A new, merged array.\n * @example\n *\n * _concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]\n */\nexport default function _concat(set1, set2) {\n set1 = set1 || [];\n set2 = set2 || [];\n var idx;\n var len1 = set1.length;\n var len2 = set2.length;\n var result = [];\n idx = 0;\n while (idx < len1) {\n result[result.length] = set1[idx];\n idx += 1;\n }\n idx = 0;\n while (idx < len2) {\n result[result.length] = set2[idx];\n idx += 1;\n }\n return result;\n}","import _concat from \"./_concat.js\";\nimport _xfBase from \"./_xfBase.js\";\nvar XAperture = /*#__PURE__*/function () {\n function XAperture(n, xf) {\n this.xf = xf;\n this.pos = 0;\n this.full = false;\n this.acc = new Array(n);\n }\n XAperture.prototype['@@transducer/init'] = _xfBase.init;\n XAperture.prototype['@@transducer/result'] = function (result) {\n this.acc = null;\n return this.xf['@@transducer/result'](result);\n };\n XAperture.prototype['@@transducer/step'] = function (result, input) {\n this.store(input);\n return this.full ? this.xf['@@transducer/step'](result, this.getCopy()) : result;\n };\n XAperture.prototype.store = function (input) {\n this.acc[this.pos] = input;\n this.pos += 1;\n if (this.pos === this.acc.length) {\n this.pos = 0;\n this.full = true;\n }\n };\n XAperture.prototype.getCopy = function () {\n return _concat(Array.prototype.slice.call(this.acc, this.pos), Array.prototype.slice.call(this.acc, 0, this.pos));\n };\n return XAperture;\n}();\nexport default function _xaperture(n) {\n return function (xf) {\n return new XAperture(n, xf);\n };\n}","import _aperture from \"./internal/_aperture.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xaperture from \"./internal/_xaperture.js\";\n\n/**\n * Returns a new list, composed of n-tuples of consecutive elements. If `n` is\n * greater than the length of the list, an empty list is returned.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category List\n * @sig Number -> [a] -> [[a]]\n * @param {Number} n The size of the tuples to create\n * @param {Array} list The list to split into `n`-length tuples\n * @return {Array} The resulting list of `n`-length tuples\n * @see R.transduce\n * @example\n *\n * R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]]\n * R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * R.aperture(7, [1, 2, 3, 4, 5]); //=> []\n */\nvar aperture = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xaperture, _aperture));\nexport default aperture;","import _arrayReduce from \"./_arrayReduce.js\";\nimport _createReduce from \"./_createReduce.js\";\nfunction _iterableReduce(reducer, acc, iter) {\n var step = iter.next();\n while (!step.done) {\n acc = reducer(acc, step.value);\n step = iter.next();\n }\n return acc;\n}\nfunction _methodReduce(reducer, acc, obj, methodName) {\n return obj[methodName](reducer, acc);\n}\nvar _reduce = /*#__PURE__*/_createReduce(_arrayReduce, _methodReduce, _iterableReduce);\nexport default _reduce;","import _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport map from \"./map.js\";\n\n/**\n * ap applies a list of functions to a list of values.\n *\n * Dispatches to the `ap` method of the first argument, if present. Also\n * treats curried functions as applicatives.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig [a -> b] -> [a] -> [b]\n * @sig Apply f => f (a -> b) -> f a -> f b\n * @sig (r -> a -> b) -> (r -> a) -> (r -> b)\n * @param {*} applyF\n * @param {*} applyX\n * @return {*}\n * @example\n *\n * R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]\n * R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> [\"tasty pizza\", \"tasty salad\", \"PIZZA\", \"SALAD\"]\n *\n * // R.ap can also be used as S combinator\n * // when only two functions are passed\n * R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA'\n * @symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)]\n */\nvar ap = /*#__PURE__*/_curry2(function ap(applyF, applyX) {\n return typeof applyX['fantasy-land/ap'] === 'function' ? applyX['fantasy-land/ap'](applyF) : typeof applyF.ap === 'function' ? applyF.ap(applyX) : typeof applyF === 'function' ? function (x) {\n return applyF(x)(applyX(x));\n } : _reduce(function (acc, f) {\n return _concat(acc, map(f, applyX));\n }, [], applyF);\n});\nexport default ap;","import _curry2 from \"./internal/_curry2.js\";\nimport _arrayReduce from \"./internal/_arrayReduce.js\";\nimport ap from \"./ap.js\";\nimport curryN from \"./curryN.js\";\nimport map from \"./map.js\";\n\n/**\n * \"lifts\" a function to be the specified arity, so that it may \"map over\" that\n * many lists, Functions or other objects that satisfy the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig Number -> (*... -> *) -> ([*]... -> [*])\n * @param {Function} fn The function to lift into higher context\n * @return {Function} The lifted function.\n * @see R.lift, R.ap\n * @example\n *\n * const madd3 = R.liftN(3, (...args) => R.sum(args));\n * madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]\n */\nvar liftN = /*#__PURE__*/_curry2(function liftN(arity, fn) {\n var lifted = curryN(arity, fn);\n return curryN(arity, function () {\n return _arrayReduce(ap, map(lifted, arguments[0]), Array.prototype.slice.call(arguments, 1));\n });\n});\nexport default liftN;","import _curry1 from \"./internal/_curry1.js\";\nimport liftN from \"./liftN.js\";\n\n/**\n * \"lifts\" a function of arity >= 1 so that it may \"map over\" a list, Function or other\n * object that satisfies the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig (*... -> *) -> ([*]... -> [*])\n * @param {Function} fn The function to lift into higher context\n * @return {Function} The lifted function.\n * @see R.liftN\n * @example\n *\n * const madd3 = R.lift((a, b, c) => a + b + c);\n *\n * madd3([100, 200], [30, 40], [5, 6, 7]); //=> [135, 136, 137, 145, 146, 147, 235, 236, 237, 245, 246, 247]\n *\n * const madd5 = R.lift((a, b, c, d, e) => a + b + c + d + e);\n *\n * madd5([10, 20], [1], [2, 3], [4], [100, 200]); //=> [117, 217, 118, 218, 127, 227, 128, 228]\n */\nvar lift = /*#__PURE__*/_curry1(function lift(fn) {\n return liftN(fn.length, fn);\n});\nexport default lift;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * A function that returns the `!` of its argument. It will return `true` when\n * passed false-y value, and `false` when passed a truth-y one.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig * -> Boolean\n * @param {*} a any value\n * @return {Boolean} the logical inverse of passed argument.\n * @see R.complement\n * @example\n *\n * R.not(true); //=> false\n * R.not(false); //=> true\n * R.not(0); //=> true\n * R.not(1); //=> false\n */\nvar not = /*#__PURE__*/_curry1(function not(a) {\n return !a;\n});\nexport default not;","import lift from \"./lift.js\";\nimport not from \"./not.js\";\n\n/**\n * Takes a function `f` and returns a function `g` such that if called with the same arguments\n * when `f` returns a \"truthy\" value, `g` returns `false` and when `f` returns a \"falsy\" value `g` returns `true`.\n *\n * `R.complement` may be applied to any functor\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category Logic\n * @sig (*... -> *) -> (*... -> Boolean)\n * @param {Function} f\n * @return {Function}\n * @see R.not\n * @example\n *\n * const isNotNil = R.complement(R.isNil);\n * R.isNil(null); //=> true\n * isNotNil(null); //=> false\n * R.isNil(7); //=> false\n * isNotNil(7); //=> true\n */\nvar complement = /*#__PURE__*/lift(not);\nexport default complement;","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport map from \"./map.js\";\nimport max from \"./max.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Returns a function, `fn`, which encapsulates `if/else, if/else, ...` logic.\n * `R.cond` takes a list of [predicate, transformer] pairs. All of the arguments\n * to `fn` are applied to each of the predicates in turn until one returns a\n * \"truthy\" value, at which point `fn` returns the result of applying its\n * arguments to the corresponding transformer. If none of the predicates\n * matches, `fn` returns undefined.\n *\n * **Please note**: This is not a direct substitute for a `switch` statement.\n * Remember that both elements of every pair passed to `cond` are *functions*,\n * and `cond` returns a function.\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Logic\n * @sig [[(*... -> Boolean),(*... -> *)]] -> (*... -> *)\n * @param {Array} pairs A list of [predicate, transformer]\n * @return {Function}\n * @see R.ifElse, R.unless, R.when\n * @example\n *\n * const fn = R.cond([\n * [R.equals(0), R.always('water freezes at 0°C')],\n * [R.equals(100), R.always('water boils at 100°C')],\n * [R.T, temp => 'nothing special happens at ' + temp + '°C']\n * ]);\n * fn(0); //=> 'water freezes at 0°C'\n * fn(50); //=> 'nothing special happens at 50°C'\n * fn(100); //=> 'water boils at 100°C'\n */\nvar cond = /*#__PURE__*/_curry1(function cond(pairs) {\n var arity = reduce(max, 0, map(function (pair) {\n return pair[0].length;\n }, pairs));\n return _arity(arity, function () {\n var idx = 0;\n while (idx < pairs.length) {\n if (pairs[idx][0].apply(this, arguments)) {\n return pairs[idx][1].apply(this, arguments);\n }\n idx += 1;\n }\n });\n});\nexport default cond;","import _curry2 from \"./internal/_curry2.js\";\n\n/**\n * Returns the second argument if it is not `null`, `undefined` or `NaN`;\n * otherwise the first argument is returned.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Logic\n * @sig a -> b -> a | b\n * @param {a} default The default value.\n * @param {b} val `val` will be returned instead of `default` unless `val` is `null`, `undefined` or `NaN`.\n * @return {*} The second value if it is not `null`, `undefined` or `NaN`, otherwise the default value\n * @example\n *\n * const defaultTo42 = R.defaultTo(42);\n *\n * defaultTo42(null); //=> 42\n * defaultTo42(undefined); //=> 42\n * defaultTo42(false); //=> false\n * defaultTo42('Ramda'); //=> 'Ramda'\n * // parseInt('string') results in NaN\n * defaultTo42(parseInt('string')); //=> 42\n */\nvar defaultTo = /*#__PURE__*/_curry2(function defaultTo(d, v) {\n return v == null || v !== v ? d : v;\n});\nexport default defaultTo;","import _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\nvar XFindIndex = /*#__PURE__*/function () {\n function XFindIndex(f, xf) {\n this.xf = xf;\n this.f = f;\n this.idx = -1;\n this.found = false;\n }\n XFindIndex.prototype['@@transducer/init'] = _xfBase.init;\n XFindIndex.prototype['@@transducer/result'] = function (result) {\n if (!this.found) {\n result = this.xf['@@transducer/step'](result, -1);\n }\n return this.xf['@@transducer/result'](result);\n };\n XFindIndex.prototype['@@transducer/step'] = function (result, input) {\n this.idx += 1;\n if (this.f(input)) {\n this.found = true;\n result = _reduced(this.xf['@@transducer/step'](result, this.idx));\n }\n return result;\n };\n return XFindIndex;\n}();\nexport default function _xfindIndex(f) {\n return function (xf) {\n return new XFindIndex(f, xf);\n };\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xfindIndex from \"./internal/_xfindIndex.js\";\n\n/**\n * Returns the index of the first element of the list which matches the\n * predicate, or `-1` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> Number\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Number} The index of the element found, or `-1`.\n * @see R.transduce, R.indexOf\n * @example\n *\n * const xs = [{a: 1}, {a: 2}, {a: 3}];\n * R.findIndex(R.propEq(2, 'a'))(xs); //=> 1\n * R.findIndex(R.propEq(4, 'a'))(xs); //=> -1\n */\nvar findIndex = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindIndex, function findIndex(fn, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n if (fn(list[idx])) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n}));\nexport default findIndex;","import _curry1 from \"./internal/_curry1.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns the first element of the given list or string. In some libraries\n * this function is named `first`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> a | Undefined\n * @sig String -> String | Undefined\n * @param {Array|String} list\n * @return {*}\n * @see R.tail, R.init, R.last\n * @example\n *\n * R.head(['fi', 'fo', 'fum']); //=> 'fi'\n * R.head([]); //=> undefined\n *\n * R.head('abc'); //=> 'a'\n * R.head(''); //=> undefined\n */\nvar head = /*#__PURE__*/_curry1(function (list) {\n return _nth(0, list);\n});\nexport default head;","export default function _identity(x) {\n return x;\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _identity from \"./internal/_identity.js\";\n\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n * R.identity(1); //=> 1\n *\n * const obj = {};\n * R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\nvar identity = /*#__PURE__*/_curry1(_identity);\nexport default identity;","import _curry3 from \"./internal/_curry3.js\";\nimport curryN from \"./curryN.js\";\n\n/**\n * Creates a function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n *\n * Note that `ifElse` takes its arity from the longest of the three functions passed to it.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Logic\n * @sig (*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *)\n * @param {Function} condition A predicate function\n * @param {Function} onTrue A function to invoke when the `condition` evaluates to a truthy value.\n * @param {Function} onFalse A function to invoke when the `condition` evaluates to a falsy value.\n * @return {Function} A new function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n * @see R.unless, R.when, R.cond\n * @example\n *\n * const incCount = R.ifElse(\n * R.has('count'),\n * R.over(R.lensProp('count'), R.inc),\n * R.assoc('count', 1)\n * );\n * incCount({ count: 1 }); //=> { count: 2 }\n * incCount({}); //=> { count: 1 }\n */\nvar ifElse = /*#__PURE__*/_curry3(function ifElse(condition, onTrue, onFalse) {\n return curryN(Math.max(condition.length, onTrue.length, onFalse.length), function _ifElse() {\n return condition.apply(this, arguments) ? onTrue.apply(this, arguments) : onFalse.apply(this, arguments);\n });\n});\nexport default ifElse;","import _isArray from \"./_isArray.js\";\n\n/**\n * This checks whether a function has a [methodname] function. If it isn't an\n * array it will execute that function otherwise it will default to the ramda\n * implementation.\n *\n * @private\n * @param {Function} fn ramda implementation\n * @param {String} methodname property to check for a custom implementation\n * @return {Object} Whatever the return value of the method is.\n */\nexport default function _checkForMethod(methodname, fn) {\n return function () {\n var length = arguments.length;\n if (length === 0) {\n return fn();\n }\n var obj = arguments[length - 1];\n return _isArray(obj) || typeof obj[methodname] !== 'function' ? fn.apply(this, arguments) : obj[methodname].apply(obj, Array.prototype.slice.call(arguments, 0, length - 1));\n };\n}","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry3 from \"./internal/_curry3.js\";\n\n/**\n * Returns the elements of the given list or string (or object with a `slice`\n * method) from `fromIndex` (inclusive) to `toIndex` (exclusive).\n *\n * Dispatches to the `slice` method of the third argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig Number -> Number -> [a] -> [a]\n * @sig Number -> Number -> String -> String\n * @param {Number} fromIndex The start index (inclusive).\n * @param {Number} toIndex The end index (exclusive).\n * @param {*} list\n * @return {*}\n * @example\n *\n * R.slice(1, 3, ['a', 'b', 'c', 'd']); //=> ['b', 'c']\n * R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd']\n * R.slice(0, -1, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c']\n * R.slice(-3, -1, ['a', 'b', 'c', 'd']); //=> ['b', 'c']\n * R.slice(0, 3, 'ramda'); //=> 'ram'\n */\nvar slice = /*#__PURE__*/_curry3( /*#__PURE__*/_checkForMethod('slice', function slice(fromIndex, toIndex, list) {\n return Array.prototype.slice.call(list, fromIndex, toIndex);\n}));\nexport default slice;","import slice from \"./slice.js\";\n\n/**\n * Returns all but the last element of the given list or string.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.last, R.head, R.tail\n * @example\n *\n * R.init([1, 2, 3]); //=> [1, 2]\n * R.init([1, 2]); //=> [1]\n * R.init([1]); //=> []\n * R.init([]); //=> []\n *\n * R.init('abc'); //=> 'ab'\n * R.init('ab'); //=> 'a'\n * R.init('a'); //=> ''\n * R.init(''); //=> ''\n */\nvar init = /*#__PURE__*/slice(0, -1);\nexport default init;","/**\n * Tests whether or not an object is a typed array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is a typed array, `false` otherwise.\n * @example\n *\n * _isTypedArray(new Uint8Array([])); //=> true\n * _isTypedArray(new Float32Array([])); //=> true\n * _isTypedArray([]); //=> false\n * _isTypedArray(null); //=> false\n * _isTypedArray({}); //=> false\n */\nexport default function _isTypedArray(val) {\n var type = Object.prototype.toString.call(val);\n return type === '[object Uint8ClampedArray]' || type === '[object Int8Array]' || type === '[object Uint8Array]' || type === '[object Int16Array]' || type === '[object Uint16Array]' || type === '[object Int32Array]' || type === '[object Uint32Array]' || type === '[object Float32Array]' || type === '[object Float64Array]' || type === '[object BigInt64Array]' || type === '[object BigUint64Array]';\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _isArguments from \"./internal/_isArguments.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _isString from \"./internal/_isString.js\";\nimport _isTypedArray from \"./internal/_isTypedArray.js\";\n\n/**\n * Returns the empty value of its argument's type. Ramda defines the empty\n * value of Array (`[]`), Object (`{}`), String (`''`),\n * TypedArray (`Uint8Array []`, `Float32Array []`, etc), and Arguments. Other\n * types are supported if they define `<Type>.empty`,\n * `<Type>.prototype.empty` or implement the\n * [FantasyLand Monoid spec](https://github.com/fantasyland/fantasy-land#monoid).\n *\n * Dispatches to the `empty` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig a -> a\n * @param {*} x\n * @return {*}\n * @example\n *\n * R.empty(Just(42)); //=> Nothing()\n * R.empty([1, 2, 3]); //=> []\n * R.empty('unicorns'); //=> ''\n * R.empty({x: 1, y: 2}); //=> {}\n * R.empty(Uint8Array.from('123')); //=> Uint8Array []\n */\nvar empty = /*#__PURE__*/_curry1(function empty(x) {\n return x != null && typeof x['fantasy-land/empty'] === 'function' ? x['fantasy-land/empty']() : x != null && x.constructor != null && typeof x.constructor['fantasy-land/empty'] === 'function' ? x.constructor['fantasy-land/empty']() : x != null && typeof x.empty === 'function' ? x.empty() : x != null && x.constructor != null && typeof x.constructor.empty === 'function' ? x.constructor.empty() : _isArray(x) ? [] : _isString(x) ? '' : _isObject(x) ? {} : _isArguments(x) ? function () {\n return arguments;\n }() : _isTypedArray(x) ? x.constructor.from('') : void 0 // else\n ;\n});\n\nexport default empty;","import _curry1 from \"./internal/_curry1.js\";\nimport empty from \"./empty.js\";\nimport equals from \"./equals.js\";\n\n/**\n * Returns `true` if the given value is its type's empty value; `false`\n * otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig a -> Boolean\n * @param {*} x\n * @return {Boolean}\n * @see R.empty, R.isNotEmpty\n * @example\n *\n * R.isEmpty([1, 2, 3]); //=> false\n * R.isEmpty([]); //=> true\n * R.isEmpty(''); //=> true\n * R.isEmpty(null); //=> false\n * R.isEmpty({}); //=> true\n * R.isEmpty({length: 0}); //=> false\n * R.isEmpty(Uint8Array.from('')); //=> true\n */\nvar isEmpty = /*#__PURE__*/_curry1(function isEmpty(x) {\n return x != null && equals(x, empty(x));\n});\nexport default isEmpty;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\nvar isNil = /*#__PURE__*/_curry1(function isNil(x) {\n return x == null;\n});\nexport default isNil;","import _curry1 from \"./internal/_curry1.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns the last element of the given list or string.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig [a] -> a | Undefined\n * @sig String -> String | Undefined\n * @param {*} list\n * @return {*}\n * @see R.init, R.head, R.tail\n * @example\n *\n * R.last(['fi', 'fo', 'fum']); //=> 'fum'\n * R.last([]); //=> undefined\n *\n * R.last('abc'); //=> 'c'\n * R.last(''); //=> undefined\n */\nvar last = /*#__PURE__*/_curry1(function (list) {\n return _nth(-1, list);\n});\nexport default last;","export default function _pipe(f, g) {\n return function () {\n return g.call(this, f.apply(this, arguments));\n };\n}","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport slice from \"./slice.js\";\n\n/**\n * Returns all but the first element of the given list or string (or object\n * with a `tail` method).\n *\n * Dispatches to the `slice` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.head, R.init, R.last\n * @example\n *\n * R.tail([1, 2, 3]); //=> [2, 3]\n * R.tail([1, 2]); //=> [2]\n * R.tail([1]); //=> []\n * R.tail([]); //=> []\n *\n * R.tail('abc'); //=> 'bc'\n * R.tail('ab'); //=> 'b'\n * R.tail('a'); //=> ''\n * R.tail(''); //=> ''\n */\nvar tail = /*#__PURE__*/_curry1( /*#__PURE__*/_checkForMethod('tail', /*#__PURE__*/slice(1, Infinity)));\nexport default tail;","import _arity from \"./internal/_arity.js\";\nimport _pipe from \"./internal/_pipe.js\";\nimport reduce from \"./reduce.js\";\nimport tail from \"./tail.js\";\n\n/**\n * Performs left-to-right function composition. The first argument may have\n * any arity; the remaining arguments must be unary.\n *\n * In some libraries this function is named `sequence`.\n *\n * **Note:** The result of pipe is not automatically curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)\n * @param {...Function} functions\n * @return {Function}\n * @see R.compose\n * @example\n *\n * const f = R.pipe(Math.pow, R.negate, R.inc);\n *\n * f(3, 4); // -(3^4) + 1\n * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b)))\n * @symb R.pipe(f, g, h)(a)(b) = h(g(f(a)))(b)\n */\nexport default function pipe() {\n if (arguments.length === 0) {\n throw new Error('pipe requires at least one argument');\n }\n return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments)));\n}","import { filter } from './fp'\n\nconst isPresentClassName = (value: string) => value.trim().length > 0\n\nexport const classNames = (values: readonly string[]) =>\n filter(isPresentClassName, [...values]).join(' ')\n","import { always, ifElse, isNil } from './fp'\n\nexport type Some<TValue> = {\n readonly status: 'some'\n readonly value: TValue\n}\n\nexport type None = {\n readonly status: 'none'\n}\n\nexport type Option<TValue> = Some<TValue> | None\n\nexport type OptionMatcher<TValue, TOutput> = {\n readonly some: (value: TValue) => TOutput\n readonly none: () => TOutput\n}\n\nexport const none: None = { status: 'none' }\n\nexport function some<TValue>(value: TValue): Some<TValue> {\n return { status: 'some', value }\n}\n\nexport const isSome = <TValue>(option: Option<TValue>): option is Some<TValue> =>\n option.status === 'some'\n\nexport const isNone = <TValue>(option: Option<TValue>): option is None =>\n option.status === 'none'\n\nexport const fromNullable = <TValue>(value: TValue): Option<TValue> =>\n ifElse(\n isNil,\n always(none),\n some<TValue>,\n )(value)\n\nexport const getOrElse = <TValue>(fallback: TValue) => (option: Option<TValue>): TValue =>\n ifElse(\n isSome<TValue>,\n (someOption: Some<TValue>) => someOption.value,\n always(fallback),\n )(option)\n\nexport function matchOption<TValue, TOutput>(\n option: Option<TValue>,\n matcher: OptionMatcher<TValue, TOutput>,\n) {\n return ifElse(\n isSome<TValue>,\n (someOption: Some<TValue>) => matcher.some(someOption.value),\n matcher.none,\n )(option)\n}\n","import { always, defaultTo, ifElse } from './fp'\nimport { fromNullable, matchOption } from './option'\n\nconst isNumber = (value: unknown) => typeof value === 'number'\n\nexport const withNumberDefault = (fallback: number) => (value: unknown) =>\n matchOption(fromNullable(value), {\n none: () => fallback,\n some: (resolvedValue) =>\n ifElse(\n isNumber,\n (numberValue: number) => defaultTo(fallback, numberValue),\n always(fallback),\n )(resolvedValue),\n })\n","import { ifElse } from './fp'\n\nexport type Ok<TValue> = {\n readonly status: 'ok'\n readonly value: TValue\n}\n\nexport type Err<TError> = {\n readonly status: 'error'\n readonly error: TError\n}\n\nexport type Result<TValue, TError> = Ok<TValue> | Err<TError>\n\nexport type ResultMatcher<TValue, TError, TOutput> = {\n readonly ok: (value: TValue) => TOutput\n readonly error: (error: TError) => TOutput\n}\n\nexport function ok<TValue>(value: TValue): Ok<TValue> {\n return { status: 'ok', value }\n}\n\nexport function err<TError>(error: TError): Err<TError> {\n return { status: 'error', error }\n}\n\nexport const isOk = <TValue, TError>(\n result: Result<TValue, TError>,\n): result is Ok<TValue> => result.status === 'ok'\n\nexport const andThenResult =\n <TValue, TNextValue, TError>(\n transform: (value: TValue) => Result<TNextValue, TError>,\n ) =>\n (result: Result<TValue, TError>): Result<TNextValue, TError> =>\n matchResult(result, {\n error: err<TError>,\n ok: transform,\n })\n\nexport const mapResult =\n <TValue, TNextValue, TError>(transform: (value: TValue) => TNextValue) =>\n (result: Result<TValue, TError>): Result<TNextValue, TError> =>\n andThenResult<TValue, TNextValue, TError>((value) => ok(transform(value)))(result)\n\nexport const bindResult =\n <TContext extends object, TValue, TNextContext extends object, TError>(\n transform: (context: TContext) => Result<TValue, TError>,\n merge: (context: TContext, value: TValue) => TNextContext,\n ) =>\n (result: Result<TContext, TError>): Result<TNextContext, TError> =>\n andThenResult<TContext, TNextContext, TError>(\n (context) =>\n mapResult<TValue, TNextContext, TError>((value) => merge(context, value))(\n transform(context),\n ),\n )(result)\n\nexport function matchResult<TValue, TError, TOutput>(\n result: Result<TValue, TError>,\n matcher: ResultMatcher<TValue, TError, TOutput>,\n) {\n return ifElse(\n isOk<TValue, TError>,\n (okResult: Ok<TValue>) => matcher.ok(okResult.value),\n (errorResult: Err<TError>) => matcher.error(errorResult.error),\n )(result)\n}\n","import { classNames, matchOption } from '../shared'\nimport type { ChartErrorInputProps } from './ChartError.types'\n\nconst renderDetails = (details: ChartErrorInputProps['details']) =>\n matchOption(details, {\n none: () => null,\n some: (value) => <p className=\"pristine-chart-error__details\">{value}</p>,\n })\n\nexport function ChartError({\n title,\n message,\n details,\n className,\n role,\n}: ChartErrorInputProps) {\n return (\n <div className={classNames(['pristine-chart-error', className])} role={role}>\n <p className=\"pristine-chart-error__title\">{title}</p>\n <p className=\"pristine-chart-error__message\">{message}</p>\n {renderDetails(details)}\n </div>\n )\n}\n","import { andThenResult, err, getOrElse, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n AreaChartError,\n AreaChartInput,\n AreaChartPoint,\n AreaChartResult,\n Baseline,\n ClosingEdge,\n FilledRegion,\n SortedDataset,\n ValidatedAreaChartInput,\n ValidatedAreaChartPoint,\n ValidatedBaseline,\n ValidatedDataset,\n} from './AreaChart.types'\n\ntype DatasetResult = Result<ValidatedDataset, AreaChartError>\ntype AreaChartInputResult = Result<ValidatedAreaChartInput, AreaChartError>\ntype DatasetValidator = [\n (data: readonly AreaChartPoint[]) => boolean,\n (data: readonly AreaChartPoint[]) => DatasetResult,\n]\ntype BaselineValidator = [\n (input: ValidatedAreaChartInput) => boolean,\n (input: ValidatedAreaChartInput) => AreaChartInputResult,\n]\n\nconst MINIMUM_POINT_COUNT = 2\nconst DEFAULT_BASELINE = 0\n\nconst areaChartRules = {\n insufficientPoints: (): AreaChartError => ({\n type: 'InsufficientPoints',\n message: 'An area chart needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): AreaChartError => ({\n type: 'InvalidXValue',\n message: 'Every area chart x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): AreaChartError => ({\n type: 'InvalidYValue',\n message: 'Every area chart y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n duplicateXValue: (x: number): AreaChartError => ({\n type: 'DuplicateXValue',\n message: 'Area chart x values must be unique.',\n details: some(`Duplicate x value: ${String(x)}.`),\n }),\n invalidBaseline: (baseline: unknown): AreaChartError => ({\n type: 'InvalidBaseline',\n message: 'The area chart baseline must be a finite number.',\n details: some(`Invalid baseline: ${String(baseline)}.`),\n }),\n baselineExceedsData: (baseline: ValidatedBaseline, minimumYValue: number): AreaChartError => ({\n type: 'BaselineExceedsData',\n message: 'The area chart baseline must be less than or equal to the minimum y value.',\n details: some(\n `Baseline ${String(baseline)} exceeds minimum y value ${String(minimumYValue)}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughPoints = (data: readonly AreaChartPoint[]) =>\n data.length >= MINIMUM_POINT_COUNT\n\nconst getXValues = (data: readonly AreaChartPoint[]) => map(prop('x'), [...data])\n\nconst getYValues = (data: readonly AreaChartPoint[]) => map(prop('y'), [...data])\n\nconst hasOnlyFiniteXValues = (data: readonly AreaChartPoint[]) =>\n all(isFiniteNumber, getXValues(data))\n\nconst hasOnlyFiniteYValues = (data: readonly AreaChartPoint[]) =>\n all(isFiniteNumber, getYValues(data))\n\nconst findInvalidXValueIndex = (data: readonly AreaChartPoint[]) =>\n findIndex(complement(isFiniteNumber), getXValues(data))\n\nconst findInvalidYValueIndex = (data: readonly AreaChartPoint[]) =>\n findIndex(complement(isFiniteNumber), getYValues(data))\n\nconst hasUniqueXValues = (data: readonly AreaChartPoint[]) => {\n const xValues = getXValues(data)\n\n return xValues.length === new Set(xValues).size\n}\n\nconst findDuplicateXValue = (data: readonly AreaChartPoint[]) => {\n const xValues = getXValues(data)\n\n return defaultTo(\n 0,\n xValues.find((xValue, index) => xValues.indexOf(xValue) !== index),\n )\n}\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughPoints), () => err(areaChartRules.insufficientPoints())],\n [\n complement(hasOnlyFiniteXValues),\n (candidate: readonly AreaChartPoint[]) =>\n err(areaChartRules.invalidXValue(findInvalidXValueIndex(candidate))),\n ],\n [\n complement(hasOnlyFiniteYValues),\n (candidate: readonly AreaChartPoint[]) =>\n err(areaChartRules.invalidYValue(findInvalidYValueIndex(candidate))),\n ],\n [\n complement(hasUniqueXValues),\n (candidate: readonly AreaChartPoint[]) =>\n err(areaChartRules.duplicateXValue(findDuplicateXValue(candidate))),\n ],\n [always(true), (candidate: readonly AreaChartPoint[]) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly AreaChartPoint[]) => DatasetResult =\n cond(datasetValidators)\n\nconst toEffectiveBaseline = getOrElse<Baseline>(DEFAULT_BASELINE)\n\nconst hasFiniteBaseline = (input: ValidatedAreaChartInput) => isFiniteNumber(input.baseline)\n\nconst getMinimumYValue = (dataset: ValidatedDataset) =>\n Math.min(...map(prop('y'), [...dataset]))\n\nconst hasCoherentBaseline = (input: ValidatedAreaChartInput) =>\n input.baseline <= getMinimumYValue(input.dataset)\n\nconst baselineValidators: BaselineValidator[] = [\n [\n complement(hasFiniteBaseline),\n (input: ValidatedAreaChartInput) => err(areaChartRules.invalidBaseline(input.baseline)),\n ],\n [\n complement(hasCoherentBaseline),\n (input: ValidatedAreaChartInput) =>\n err(areaChartRules.baselineExceedsData(input.baseline, getMinimumYValue(input.dataset))),\n ],\n [always(true), (input: ValidatedAreaChartInput) => ok(input)],\n]\n\nconst validateBaseline: (input: ValidatedAreaChartInput) => AreaChartInputResult =\n cond(baselineValidators)\n\nexport function validateAreaChartInput(input: AreaChartInput): AreaChartInputResult {\n return andThenResult<ValidatedAreaChartInput, ValidatedAreaChartInput, AreaChartError>(\n validateBaseline,\n )(\n mapResult<ValidatedDataset, ValidatedAreaChartInput, AreaChartError>((dataset) => ({\n dataset,\n baseline: toEffectiveBaseline(input.baseline),\n }))(validateDataset(input.data)),\n )\n}\n\nconst byAscendingX = (left: AreaChartPoint, right: AreaChartPoint) => left.x - right.x\n\nconst sortByX = (dataset: ValidatedDataset): SortedDataset => [...dataset].sort(byAscendingX)\n\nconst toBaselinePoint = (point: ValidatedAreaChartPoint, baseline: ValidatedBaseline) => ({\n x: point.x,\n y: baseline,\n})\n\nconst toClosingEdge = (\n point: ValidatedAreaChartPoint,\n baseline: ValidatedBaseline,\n): ClosingEdge => ({\n start: point,\n end: toBaselinePoint(point, baseline),\n})\n\nconst computeFilledRegion = (input: ValidatedAreaChartInput): FilledRegion => {\n const points = sortByX(input.dataset)\n const leftPoint = points[0]\n const rightPoint = points[points.length - 1]\n\n return {\n points,\n baseline: input.baseline,\n leftClosingEdge: toClosingEdge(leftPoint, input.baseline),\n rightClosingEdge: toClosingEdge(rightPoint, input.baseline),\n }\n}\n\nexport function computeAreaChart(input: AreaChartInput): AreaChartResult {\n return mapResult<ValidatedAreaChartInput, FilledRegion, AreaChartError>(computeFilledRegion)(\n validateAreaChartInput(input),\n )\n}\n","import { area, extent, line, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { defaultTo, identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { AreaChartPoint, FilledRegion } from './AreaChart.types'\n\ntype ChartExtent = [number, number]\n\nexport const AREA_CHART_MARGIN = {\n top: 20,\n right: 18,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedAreaPoint = AreaChartPoint & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type AreaChartModel = {\n readonly plotBottom: number\n readonly points: readonly RenderedAreaPoint[]\n readonly baseline: number\n readonly baselineY: number\n readonly fillPath: string\n readonly linePath: string\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst renderLinePath = (points: readonly RenderedAreaPoint[]) =>\n defaultTo(\n '',\n line<RenderedAreaPoint>()\n .x((point) => point.cx)\n .y((point) => point.cy)(points),\n )\n\nconst renderFillPath = (baselineY: number) => (points: readonly RenderedAreaPoint[]) =>\n defaultTo(\n '',\n area<RenderedAreaPoint>()\n .x((point) => point.cx)\n .y0(baselineY)\n .y1((point) => point.cy)(points),\n )\n\nconst getXExtent = (points: readonly AreaChartPoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...points])))\n\nconst getYExtent = (region: FilledRegion) =>\n expandZeroWidthExtent(getExtent([region.baseline, ...map(prop('y'), [...region.points])]))\n\nexport const buildAreaChartModel = (\n region: FilledRegion,\n width: number,\n height: number,\n): AreaChartModel => {\n const plotBottom = height - AREA_CHART_MARGIN.bottom\n const xScale = scaleLinear()\n .domain(getXExtent(region.points))\n .nice()\n .range([AREA_CHART_MARGIN.left, width - AREA_CHART_MARGIN.right])\n const yScale = scaleLinear()\n .domain(getYExtent(region))\n .nice()\n .range([plotBottom, AREA_CHART_MARGIN.top])\n const baselineY = yScale(region.baseline)\n const toRenderedPoint = (point: AreaChartPoint): RenderedAreaPoint => ({\n ...point,\n cx: xScale(point.x),\n cy: yScale(point.y),\n })\n const renderedPoints = map(toRenderedPoint, [...region.points])\n\n return {\n plotBottom,\n points: renderedPoints,\n baseline: region.baseline,\n baselineY,\n fillPath: renderFillPath(baselineY)(renderedPoints),\n linePath: renderLinePath(renderedPoints),\n xTicks: xScale.ticks(Math.min(6, region.points.length)),\n yTicks: yScale.ticks(5),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { AreaChartProps } from '../AreaChart.types'\n\nexport function AreaChartCaption({ caption }: Pick<AreaChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-area-chart__caption\">{text}</figcaption>,\n })\n}\n","import { AREA_CHART_MARGIN } from '../AreaChart.model'\nimport type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartAxesProps = {\n readonly chart: AreaChartModel\n readonly width: number\n}\n\nexport function AreaChartAxes({ chart, width }: AreaChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-area-chart__axis\"\n x1={AREA_CHART_MARGIN.left}\n x2={width - AREA_CHART_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-area-chart__axis\"\n x1={AREA_CHART_MARGIN.left}\n x2={AREA_CHART_MARGIN.left}\n y1={AREA_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartFilledRegionProps = {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartFilledRegion({ chart }: AreaChartFilledRegionProps) {\n return <path className=\"pristine-area-chart__fill\" d={chart.fillPath} aria-hidden=\"true\" />\n}\n","import { AREA_CHART_MARGIN } from '../AreaChart.model'\nimport type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartGridLinesProps = {\n readonly chart: AreaChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nexport function AreaChartGridLines({\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: AreaChartGridLinesProps) {\n return (\n <>\n {chart.yTicks.map((tick) => (\n <g className=\"pristine-area-chart__grid-line\" key={`y:${tick}`}>\n <line\n x1={AREA_CHART_MARGIN.left}\n x2={width - AREA_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={AREA_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {formatYValue(tick)}\n </text>\n </g>\n ))}\n {chart.xTicks.map((tick) => (\n <g className=\"pristine-area-chart__grid-line\" key={`x:${tick}`}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={AREA_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n <text\n x={chart.xScale(tick)}\n y={height - AREA_CHART_MARGIN.bottom + 20}\n textAnchor=\"middle\"\n >\n {formatXValue(tick)}\n </text>\n </g>\n ))}\n </>\n )\n}\n","import type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartLineProps = {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartLine({ chart }: AreaChartLineProps) {\n return <path className=\"pristine-area-chart__line\" d={chart.linePath} aria-hidden=\"true\" />\n}\n","import { AREA_CHART_MARGIN } from '../AreaChart.model'\nimport type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartPlotAreaProps = {\n readonly chart: AreaChartModel\n readonly width: number\n}\n\nexport function AreaChartPlotArea({ chart, width }: AreaChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-area-chart__plot\"\n x={AREA_CHART_MARGIN.left}\n y={AREA_CHART_MARGIN.top}\n width={width - AREA_CHART_MARGIN.left - AREA_CHART_MARGIN.right}\n height={chart.plotBottom - AREA_CHART_MARGIN.top}\n />\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedAreaPoint } from '../AreaChart.model'\n\ntype AreaChartPointMarkerProps = {\n readonly active: boolean\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly point: RenderedAreaPoint\n readonly showPoints: boolean\n}\n\nexport function AreaChartPointMarker({\n active,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n point,\n showPoints,\n}: AreaChartPointMarkerProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-area-chart__point--active'),\n always(''),\n )(active)\n const visibleClassName = ifElse(\n always(showPoints),\n always('pristine-area-chart__point--visible'),\n always(''),\n )(showPoints)\n const accessibleLabel = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-area-chart__point',\n activeClassName,\n visibleClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-area-chart__point-hit-area\"\n cx={point.cx}\n cy={point.cy}\n r={10}\n />\n <circle\n className=\"pristine-area-chart__point-dot\"\n cx={point.cx}\n cy={point.cy}\n r={3.6}\n />\n </g>\n )\n}\n","import type { AreaChartModel } from '../AreaChart.model'\n\nimport { AreaChartPointMarker } from './AreaChartPointMarker'\n\ntype AreaChartPointsProps = {\n readonly activeXValue: number | null\n readonly chart: AreaChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: (xValue: number) => void\n readonly onDeactivate: () => void\n readonly showPoints: boolean\n}\n\nexport function AreaChartPoints({\n activeXValue,\n chart,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n showPoints,\n}: AreaChartPointsProps) {\n return chart.points.map((point) => (\n <AreaChartPointMarker\n active={activeXValue === point.x}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n key={point.x}\n onActivate={() => onActivate(point.x)}\n onDeactivate={onDeactivate}\n point={point}\n showPoints={showPoints}\n />\n ))\n}\n","import type { RenderedAreaPoint } from '../AreaChart.model'\n\ntype AreaChartTooltipProps = {\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly point: RenderedAreaPoint\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function AreaChartTooltip({\n formatXValue,\n formatYValue,\n height,\n point,\n width,\n}: AreaChartTooltipProps) {\n const label = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n point.cx - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n point.cy - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-area-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-area-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-area-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { AreaChartModel } from '../AreaChart.model'\nimport type { AreaChartProps } from '../AreaChart.types'\n\nimport { AreaChartAxes } from './AreaChartAxes'\nimport { AreaChartFilledRegion } from './AreaChartFilledRegion'\nimport { AreaChartGridLines } from './AreaChartGridLines'\nimport { AreaChartLine } from './AreaChartLine'\nimport { AreaChartPlotArea } from './AreaChartPlotArea'\nimport { AreaChartPoints } from './AreaChartPoints'\nimport { AreaChartTooltip } from './AreaChartTooltip'\n\ntype AreaChartSvgProps = Pick<\n AreaChartProps,\n 'ariaLabel' | 'formatXValue' | 'formatYValue' | 'height' | 'showPoints' | 'width'\n> & {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartSvg({\n ariaLabel,\n chart,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: AreaChartSvgProps) {\n const [activeXValue, setActiveXValue] = useState<number | null>(null)\n const activePoints = chart.points.filter((point) => point.x === activeXValue)\n\n return (\n <svg\n className=\"pristine-area-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <AreaChartPlotArea chart={chart} width={width} />\n <AreaChartGridLines\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <AreaChartAxes chart={chart} width={width} />\n <AreaChartFilledRegion chart={chart} />\n <AreaChartLine chart={chart} />\n <AreaChartPoints\n activeXValue={activeXValue}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n onActivate={setActiveXValue}\n onDeactivate={() => setActiveXValue(null)}\n showPoints={showPoints}\n />\n {activePoints.map((point) => (\n <AreaChartTooltip\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n key={point.x}\n point={point}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { AreaChartModel } from '../AreaChart.model'\nimport type { AreaChartProps } from '../AreaChart.types'\n\nimport { AreaChartCaption } from './AreaChartCaption'\nimport { AreaChartSvg } from './AreaChartSvg'\n\ntype AreaChartFigureProps = Pick<\n AreaChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatXValue'\n | 'formatYValue'\n | 'height'\n | 'showPoints'\n | 'width'\n> & {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: AreaChartFigureProps) {\n return (\n <figure className={classNames(['pristine-area-chart', className])} aria-label={ariaLabel}>\n <AreaChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n <AreaChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeAreaChart } from './AreaChart.domain'\nimport { buildAreaChartModel } from './AreaChart.model'\nimport type { AreaChartProps } from './AreaChart.types'\nimport { AreaChartFigure } from './components/AreaChartFigure'\n\nexport function AreaChart({\n ariaLabel,\n baseline,\n caption,\n className,\n data,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: AreaChartProps) {\n const result = useMemo(() => computeAreaChart({ data, baseline }), [baseline, data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-area-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (region) => {\n const chart = buildAreaChartModel(region, width, height)\n\n return (\n <AreaChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { AreaChartProps } from './AreaChart.types'\n\nexport const formatAreaChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_AREA_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Area chart',\n className: '',\n caption: none,\n baseline: none,\n showPoints: true,\n formatXValue: formatAreaChartNumber,\n formatYValue: formatAreaChartNumber,\n} satisfies Omit<AreaChartProps, 'data'>\n","import { bindResult, err, fromNullable, getOrElse, isNone, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n filter,\n findIndex,\n ifElse,\n isEmpty,\n map,\n pipe,\n prop,\n} from '../shared/fp'\n\nimport type {\n Bar,\n BarChartDatum,\n BarChartError,\n BarChartInput,\n BarChartResult,\n BarDirection,\n ByValueOrderStrategy,\n CustomOrderStrategy,\n OrderStrategy,\n SortDirection,\n ValidatedDataset,\n} from './BarChart.types'\n\ntype BarChartInputResult = Result<BarChartInput, BarChartError>\ntype DatasetResult = Result<ValidatedDataset, BarChartError>\ntype OrderStrategyResult = Result<OrderStrategy, BarChartError>\ntype DatasetValidator = [\n (data: readonly BarChartDatum[]) => boolean,\n (data: readonly BarChartDatum[]) => DatasetResult,\n]\ntype OrderStrategyValidator = [\n (input: BarChartInput) => boolean,\n (input: BarChartInput) => OrderStrategyResult,\n]\ntype BarDirectionRule = [\n (value: number) => boolean,\n (value: number) => BarDirection,\n]\n\nexport const DEFAULT_BAR_CHART_ORDER_STRATEGY: OrderStrategy = {\n kind: 'insertion',\n}\n\nconst VALUE_ORDER_FALLBACK: SortDirection = 'ascending'\n\nconst barChartRules = {\n emptyDataset: (): BarChartError => ({\n type: 'EmptyDataset',\n message: 'A bar chart needs at least one category.',\n details: none,\n }),\n invalidValue: (index: number): BarChartError => ({\n type: 'InvalidValue',\n message: 'Every bar chart value must be a finite number.',\n details: some(`Invalid value at index ${String(index)}.`),\n }),\n duplicateCategory: (category: string): BarChartError => ({\n type: 'DuplicateCategory',\n message: 'Bar chart categories must be unique.',\n details: some(`Duplicate category: ${category}.`),\n }),\n emptyCategoryName: (index: number): BarChartError => ({\n type: 'EmptyCategoryName',\n message: 'Every bar chart category needs a non-empty name.',\n details: some(`Empty category at index ${String(index)}.`),\n }),\n missingValueSortDirection: (): BarChartError => ({\n type: 'MissingValueSortDirection',\n message: 'Sorting by value requires an ascending or descending direction.',\n details: none,\n }),\n missingCategoriesInCustomOrder: (categories: readonly string[]): BarChartError => ({\n type: 'MissingCategoriesInCustomOrder',\n message: 'Custom bar chart ordering must include every category.',\n details: some(`Missing categories: ${categories.join(', ')}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonEmptyString = (value: string) => value.trim().length > 0\n\nconst getCategories = (data: readonly BarChartDatum[]) => map(prop('category'), [...data])\n\nconst getValues = (data: readonly BarChartDatum[]) => map(prop('value'), [...data])\n\nconst hasOnlyFiniteValues = (data: readonly BarChartDatum[]) =>\n all(isFiniteNumber, getValues(data))\n\nconst findInvalidValueIndex = (data: readonly BarChartDatum[]) =>\n findIndex(complement(isFiniteNumber), getValues(data))\n\nconst findEmptyCategoryIndex = (data: readonly BarChartDatum[]) =>\n findIndex(complement(isNonEmptyString), getCategories(data))\n\nconst hasOnlyNamedCategories = (data: readonly BarChartDatum[]) =>\n all(isNonEmptyString, getCategories(data))\n\nconst hasUniqueCategories = (data: readonly BarChartDatum[]) => {\n const categories = getCategories(data)\n\n return categories.length === new Set(categories).size\n}\n\nconst findDuplicateCategory = (data: readonly BarChartDatum[]) => {\n const categories = getCategories(data)\n\n return defaultTo(\n 'unknown category',\n categories.find((category, index) => categories.indexOf(category) !== index),\n )\n}\n\nconst isByValueOrderStrategy = (\n strategy: OrderStrategy,\n): strategy is ByValueOrderStrategy => strategy.kind === 'value'\n\nconst isCustomOrderStrategy = (\n strategy: OrderStrategy,\n): strategy is CustomOrderStrategy => strategy.kind === 'custom'\n\nconst getValueOrderDirection = (strategy: OrderStrategy) =>\n ifElse(\n isByValueOrderStrategy,\n (valueStrategy: ByValueOrderStrategy) => fromNullable(valueStrategy.direction),\n always(some(VALUE_ORDER_FALLBACK)),\n )(strategy)\n\nconst isMissingValueSortDirection = (strategy: OrderStrategy) =>\n allPass([\n isByValueOrderStrategy,\n pipe(getValueOrderDirection, isNone),\n ])(strategy)\n\nconst getCustomOrderCategories = (strategy: OrderStrategy) =>\n ifElse(\n isCustomOrderStrategy,\n (customStrategy: CustomOrderStrategy) => customStrategy.categories,\n always([]),\n )(strategy)\n\nconst includesCategory = (categories: readonly string[]) => (category: string) =>\n categories.includes(category)\n\nconst getMissingCustomCategories = (\n data: readonly BarChartDatum[],\n strategy: OrderStrategy,\n) =>\n filter(\n complement(includesCategory(getCustomOrderCategories(strategy))),\n getCategories(data),\n )\n\nconst isMissingCustomCategories = (input: BarChartInput) =>\n allPass([\n (candidate: BarChartInput) => isCustomOrderStrategy(candidate.orderStrategy),\n (candidate: BarChartInput) =>\n complement(isEmpty)(getMissingCustomCategories(candidate.data, candidate.orderStrategy)),\n ])(input)\n\nconst datasetValidators: DatasetValidator[] = [\n [isEmpty, () => err(barChartRules.emptyDataset())],\n [\n complement(hasOnlyFiniteValues),\n (candidate: readonly BarChartDatum[]) =>\n err(barChartRules.invalidValue(findInvalidValueIndex(candidate))),\n ],\n [\n complement(hasOnlyNamedCategories),\n (candidate: readonly BarChartDatum[]) =>\n err(barChartRules.emptyCategoryName(findEmptyCategoryIndex(candidate))),\n ],\n [\n complement(hasUniqueCategories),\n (candidate: readonly BarChartDatum[]) =>\n err(barChartRules.duplicateCategory(findDuplicateCategory(candidate))),\n ],\n [always(true), (candidate: readonly BarChartDatum[]) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly BarChartDatum[]) => DatasetResult = cond(datasetValidators)\n\nconst orderStrategyValidators: OrderStrategyValidator[] = [\n [\n (candidate: BarChartInput) => isMissingValueSortDirection(candidate.orderStrategy),\n () => err(barChartRules.missingValueSortDirection()),\n ],\n [\n isMissingCustomCategories,\n (candidate: BarChartInput) =>\n err(\n barChartRules.missingCategoriesInCustomOrder(\n getMissingCustomCategories(candidate.data, candidate.orderStrategy),\n ),\n ),\n ],\n [always(true), (candidate: BarChartInput) => ok(candidate.orderStrategy)],\n]\n\nconst validateOrderStrategy: (input: BarChartInput) => OrderStrategyResult =\n cond(orderStrategyValidators)\n\nexport function validateBarChartInput(input: BarChartInput): BarChartInputResult {\n return bindResult<\n { readonly data: ValidatedDataset },\n OrderStrategy,\n BarChartInput,\n BarChartError\n >(\n () => validateOrderStrategy(input),\n (context, orderStrategy) => ({ ...context, orderStrategy }),\n )(\n bindResult<object, ValidatedDataset, { readonly data: ValidatedDataset }, BarChartError>(\n () => validateDataset(input.data),\n (_, data) => ({ data }),\n )(ok({})),\n )\n}\n\nconst byCategory = (left: BarChartDatum, right: BarChartDatum) =>\n left.category.localeCompare(right.category)\n\nconst byAscendingValue = (left: BarChartDatum, right: BarChartDatum) =>\n left.value - right.value\n\nconst byDescendingValue = (left: BarChartDatum, right: BarChartDatum) =>\n right.value - left.value\n\nconst byCustomOrder = (categories: readonly string[]) => (\n left: BarChartDatum,\n right: BarChartDatum,\n) => categories.indexOf(left.category) - categories.indexOf(right.category)\n\nconst isAlphabeticalOrderStrategy = (strategy: OrderStrategy) =>\n strategy.kind === 'alphabetical'\n\nconst isInsertionOrderStrategy = (strategy: OrderStrategy) =>\n strategy.kind === 'insertion'\n\nconst isAscendingSortDirection = (direction: SortDirection) => direction === 'ascending'\n\nconst getOrderedData = (\n data: readonly BarChartDatum[],\n orderStrategy: OrderStrategy,\n) =>\n cond([\n [isInsertionOrderStrategy, always([...data])],\n [isAlphabeticalOrderStrategy, always([...data].sort(byCategory))],\n [\n isByValueOrderStrategy,\n (strategy: ByValueOrderStrategy) =>\n ifElse(\n isAscendingSortDirection,\n always([...data].sort(byAscendingValue)),\n always([...data].sort(byDescendingValue)),\n )(getOrElse<SortDirection>(VALUE_ORDER_FALLBACK)(getValueOrderDirection(strategy))),\n ],\n [\n isCustomOrderStrategy,\n (strategy: CustomOrderStrategy) => [...data].sort(byCustomOrder(strategy.categories)),\n ],\n ])(orderStrategy)\n\nconst POSITIVE_DIRECTION: BarDirection = 'positive'\nconst NEGATIVE_DIRECTION: BarDirection = 'negative'\nconst ZERO_DIRECTION: BarDirection = 'zero'\n\nconst barDirectionRules: BarDirectionRule[] = [\n [(candidate: number) => candidate > 0, always(POSITIVE_DIRECTION)],\n [(candidate: number) => candidate < 0, always(NEGATIVE_DIRECTION)],\n [always(true), always(ZERO_DIRECTION)],\n]\n\nconst getBarDirection: (value: number) => BarDirection = cond(barDirectionRules)\n\nconst toBar = (datum: BarChartDatum): Bar => ({\n ...datum,\n direction: getBarDirection(datum.value),\n})\n\nconst computeBars = (input: BarChartInput) =>\n map(toBar, getOrderedData(input.data, input.orderStrategy))\n\nexport function computeBarChart(input: BarChartInput): BarChartResult {\n return mapResult<BarChartInput, readonly Bar[], BarChartError>(computeBars)(\n validateBarChartInput(input),\n )\n}\n","import { max, min, scaleBand, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, ifElse, map, prop } from '../shared/fp'\n\nimport type { Bar } from './BarChart.types'\n\nexport const BAR_CHART_MARGIN = {\n top: 24,\n right: 16,\n bottom: 42,\n left: 42,\n}\n\nexport type RenderedBar = Bar & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly valueY: number\n}\n\nexport type BarChartModel = {\n readonly baselineY: number\n readonly plotBottom: number\n readonly yTicks: readonly number[]\n readonly bars: readonly RenderedBar[]\n readonly yScale: (value: number) => number\n}\n\nconst getMinValue = (bars: readonly Bar[]) =>\n withNumberDefault(0)(min(map(prop('value'), [...bars])))\n\nconst getMaxValue = (bars: readonly Bar[]) =>\n withNumberDefault(0)(max(map(prop('value'), [...bars])))\n\nconst getLowerDomain = (bars: readonly Bar[]) => Math.min(0, getMinValue(bars))\n\nconst getUpperDomain = (bars: readonly Bar[]) => Math.max(0, getMaxValue(bars))\n\nconst getCategory = (bar: Bar) => bar.category\n\nconst getValueY = (plotBottom: number) => (bar: Bar, y: number, height: number) =>\n ifElse(\n (candidate: Bar) => candidate.direction === 'negative',\n always(Math.min(plotBottom - 6, y + height + 12)),\n always(Math.max(BAR_CHART_MARGIN.top + 10, y - 6)),\n )(bar)\n\nexport const buildBarChartModel = (\n bars: readonly Bar[],\n width: number,\n height: number,\n): BarChartModel => {\n const plotBottom = height - BAR_CHART_MARGIN.bottom\n const xScale = scaleBand<string>()\n .domain(map(getCategory, [...bars]))\n .range([BAR_CHART_MARGIN.left, width - BAR_CHART_MARGIN.right])\n .padding(0.22)\n const yScale = scaleLinear()\n .domain([getLowerDomain(bars), getUpperDomain(bars)])\n .nice()\n .range([plotBottom, BAR_CHART_MARGIN.top])\n const baselineY = yScale(0)\n const toRenderedBar = (bar: Bar): RenderedBar => {\n const y = Math.min(yScale(bar.value), baselineY)\n const barHeight = Math.abs(baselineY - yScale(bar.value))\n\n return {\n ...bar,\n x: withNumberDefault(BAR_CHART_MARGIN.left)(xScale(bar.category)),\n y,\n width: xScale.bandwidth(),\n height: barHeight,\n valueY: getValueY(plotBottom)(bar, y, barHeight),\n }\n }\n\n return {\n baselineY,\n plotBottom,\n yTicks: yScale.ticks(5),\n bars: map(toRenderedBar, [...bars]),\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { BarChartProps } from '../BarChart.types'\n\nexport function BarChartCaption({ caption }: Pick<BarChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => <figcaption className=\"pristine-bar-chart__caption\">{value}</figcaption>,\n })\n}\n","import { BAR_CHART_MARGIN } from '../BarChart.model'\nimport type { BarChartModel } from '../BarChart.model'\n\ntype BarChartAxesProps = {\n readonly chart: BarChartModel\n readonly width: number\n}\n\nexport function BarChartAxes({ chart, width }: BarChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-bar-chart__axis\"\n x1={BAR_CHART_MARGIN.left}\n x2={width - BAR_CHART_MARGIN.right}\n y1={chart.baselineY}\n y2={chart.baselineY}\n />\n <line\n className=\"pristine-bar-chart__axis\"\n x1={BAR_CHART_MARGIN.left}\n x2={BAR_CHART_MARGIN.left}\n y1={BAR_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { ifElse } from '@/shared/fp'\n\nimport type { RenderedBar } from '../BarChart.model'\n\ntype BarChartBarProps = {\n readonly bar: RenderedBar\n}\n\nconst getHitAreaY = ifElse(\n (bar: RenderedBar) => bar.height > 0,\n (bar: RenderedBar) => bar.y,\n (bar: RenderedBar) => bar.y - 4,\n)\n\nexport function BarChartBar({ bar }: BarChartBarProps) {\n return (\n <>\n <rect\n className={`pristine-bar-chart__bar pristine-bar-chart__bar--${bar.direction}`}\n x={bar.x}\n y={bar.y}\n width={bar.width}\n height={bar.height}\n aria-hidden=\"true\"\n />\n <rect\n className=\"pristine-bar-chart__bar-hit-area\"\n x={bar.x}\n y={getHitAreaY(bar)}\n width={bar.width}\n height={Math.max(bar.height, 8)}\n aria-hidden=\"true\"\n />\n </>\n )\n}\n","import type { RenderedBar } from '../BarChart.model'\n\ntype BarChartCategoryLabelProps = {\n readonly bar: RenderedBar\n readonly height: number\n}\n\nexport function BarChartCategoryLabel({ bar, height }: BarChartCategoryLabelProps) {\n return (\n <text\n className=\"pristine-bar-chart__label\"\n x={bar.x + bar.width / 2}\n y={height - 12}\n textAnchor=\"middle\"\n >\n {bar.category}\n </text>\n )\n}\n","import type { RenderedBar } from '../BarChart.model'\n\ntype BarChartValueLabelProps = {\n readonly bar: RenderedBar\n readonly formatValue: (value: number) => string\n}\n\nexport function BarChartValueLabel({ bar, formatValue }: BarChartValueLabelProps) {\n return (\n <text\n className=\"pristine-bar-chart__value\"\n x={bar.x + bar.width / 2}\n y={bar.valueY}\n textAnchor=\"middle\"\n >\n {formatValue(bar.value)}\n </text>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport type { RenderedBar } from '../BarChart.model'\nimport { always, ifElse } from '@/shared/fp'\n\nimport { BarChartBar } from './BarChartBar'\nimport { BarChartCategoryLabel } from './BarChartCategoryLabel'\nimport { BarChartValueLabel } from './BarChartValueLabel'\n\ntype BarChartCategoryProps = {\n readonly active: boolean\n readonly bar: RenderedBar\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly showValues: boolean\n}\n\nexport function BarChartCategory({\n active,\n bar,\n formatValue,\n height,\n onActivate,\n onDeactivate,\n showValues,\n}: BarChartCategoryProps) {\n const renderValueLabel = ifElse(\n always(showValues),\n () => <BarChartValueLabel bar={bar} formatValue={formatValue} />,\n always(null),\n )\n const activeClassName = ifElse(\n always(active),\n always('pristine-bar-chart__category--active'),\n always(''),\n )(active)\n const accessibleLabel = `${bar.category}: ${formatValue(bar.value)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-bar-chart__category',\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <BarChartBar bar={bar} />\n {renderValueLabel()}\n <BarChartCategoryLabel bar={bar} height={height} />\n </g>\n )\n}\n","import type { BarChartModel } from '../BarChart.model'\n\nimport { BarChartCategory } from './BarChartCategory'\n\ntype BarChartCategoriesProps = {\n readonly activeCategory: string | null\n readonly chart: BarChartModel\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly onActivate: (category: string) => void\n readonly onDeactivate: () => void\n readonly showValues: boolean\n}\n\nexport function BarChartCategories({\n activeCategory,\n chart,\n formatValue,\n height,\n onActivate,\n onDeactivate,\n showValues,\n}: BarChartCategoriesProps) {\n return chart.bars.map((bar) => (\n <BarChartCategory\n active={activeCategory === bar.category}\n bar={bar}\n formatValue={formatValue}\n height={height}\n key={bar.category}\n onActivate={() => onActivate(bar.category)}\n onDeactivate={onDeactivate}\n showValues={showValues}\n />\n ))\n}\n","import { BAR_CHART_MARGIN } from '../BarChart.model'\nimport type { BarChartModel } from '../BarChart.model'\n\ntype BarChartGridLinesProps = {\n readonly chart: BarChartModel\n readonly width: number\n}\n\nexport function BarChartGridLines({ chart, width }: BarChartGridLinesProps) {\n return chart.yTicks.map((tick) => (\n <g className=\"pristine-bar-chart__grid-line\" key={tick}>\n <line\n x1={BAR_CHART_MARGIN.left}\n x2={width - BAR_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={BAR_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {tick}\n </text>\n </g>\n ))\n}\n","import { BAR_CHART_MARGIN } from '../BarChart.model'\nimport type { BarChartModel } from '../BarChart.model'\n\ntype BarChartPlotAreaProps = {\n readonly chart: BarChartModel\n readonly width: number\n}\n\nexport function BarChartPlotArea({ chart, width }: BarChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-bar-chart__plot\"\n x={BAR_CHART_MARGIN.left}\n y={BAR_CHART_MARGIN.top}\n width={width - BAR_CHART_MARGIN.left - BAR_CHART_MARGIN.right}\n height={chart.plotBottom - BAR_CHART_MARGIN.top}\n />\n )\n}\n","import type { RenderedBar } from '../BarChart.model'\n\ntype BarChartTooltipProps = {\n readonly bar: RenderedBar\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 30\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function BarChartTooltip({\n bar,\n formatValue,\n height,\n width,\n}: BarChartTooltipProps) {\n const label = formatValue(bar.value)\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n bar.x + bar.width / 2 - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n bar.valueY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-bar-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-bar-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-bar-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { BarChartModel } from '../BarChart.model'\nimport type { BarChartProps } from '../BarChart.types'\n\nimport { BarChartAxes } from './BarChartAxes'\nimport { BarChartCategories } from './BarChartCategories'\nimport { BarChartGridLines } from './BarChartGridLines'\nimport { BarChartPlotArea } from './BarChartPlotArea'\nimport { BarChartTooltip } from './BarChartTooltip'\n\ntype BarChartSvgProps = Pick<BarChartProps, 'ariaLabel' | 'formatValue' | 'height' | 'showValues' | 'width'> & {\n readonly chart: BarChartModel\n}\n\nexport function BarChartSvg({\n ariaLabel,\n chart,\n formatValue,\n height,\n showValues,\n width,\n}: BarChartSvgProps) {\n const [activeCategory, setActiveCategory] = useState<string | null>(null)\n const activeBars = chart.bars.filter((bar) => bar.category === activeCategory)\n\n return (\n <svg\n className=\"pristine-bar-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <BarChartPlotArea chart={chart} width={width} />\n <BarChartGridLines chart={chart} width={width} />\n <BarChartAxes chart={chart} width={width} />\n <BarChartCategories\n activeCategory={activeCategory}\n chart={chart}\n formatValue={formatValue}\n height={height}\n onActivate={setActiveCategory}\n onDeactivate={() => setActiveCategory(null)}\n showValues={showValues}\n />\n {activeBars.map((bar) => (\n <BarChartTooltip\n key={bar.category}\n bar={bar}\n formatValue={formatValue}\n height={height}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { BarChartModel } from '../BarChart.model'\nimport type { BarChartProps } from '../BarChart.types'\n\nimport { BarChartCaption } from './BarChartCaption'\nimport { BarChartSvg } from './BarChartSvg'\n\ntype BarChartFigureProps = Pick<\n BarChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'formatValue' | 'height' | 'showValues' | 'width'\n> & {\n readonly chart: BarChartModel\n}\n\nexport function BarChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatValue,\n height,\n showValues,\n width,\n}: BarChartFigureProps) {\n return (\n <figure className={classNames(['pristine-bar-chart', className])} aria-label={ariaLabel}>\n <BarChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatValue={formatValue}\n height={height}\n showValues={showValues}\n width={width}\n />\n <BarChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeBarChart } from './BarChart.domain'\nimport { buildBarChartModel } from './BarChart.model'\nimport { BarChartFigure } from './components/BarChartFigure'\nimport type { BarChartProps } from './BarChart.types'\n\nexport function BarChart({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n orderStrategy,\n showValues,\n formatValue,\n}: BarChartProps) {\n const result = useMemo(\n () => computeBarChart({ data, orderStrategy }),\n [data, orderStrategy],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-bar-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (bars) => {\n const chart = buildBarChartModel(bars, width, height)\n\n return (\n <BarChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatValue={formatValue}\n height={height}\n showValues={showValues}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\n\nimport { DEFAULT_BAR_CHART_ORDER_STRATEGY } from './BarChart.domain'\nimport type { BarChartProps } from './BarChart.types'\n\nexport const formatDefaultValue = (value: number) => String(value)\n\nexport const DEFAULT_BAR_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Bar chart',\n className: '',\n caption: none,\n orderStrategy: DEFAULT_BAR_CHART_ORDER_STRATEGY,\n showValues: false,\n formatValue: formatDefaultValue,\n} satisfies Omit<BarChartProps, 'data'>\n","import { err, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n complement,\n cond,\n defaultTo,\n findIndex,\n} from '../shared/fp'\n\nimport type {\n BulletChartError,\n BulletChartInput,\n BulletChartResult,\n BulletChartSummary,\n PerformanceBand,\n ScaleRange,\n ValidatedBulletChartInput,\n ValidatedPerformanceBand,\n} from './BulletChart.types'\n\ntype BulletChartInputResult = Result<ValidatedBulletChartInput, BulletChartError>\ntype BulletChartInputValidator = [\n (input: BulletChartInput) => boolean,\n (input: BulletChartInput) => BulletChartInputResult,\n]\n\nconst bulletChartRules = {\n invalidCurrentValue: (currentValue: unknown): BulletChartError => ({\n type: 'InvalidCurrentValue',\n message: 'Bullet chart current value must be a finite number.',\n details: some(`Invalid current value: ${String(currentValue)}.`),\n }),\n invalidTargetValue: (targetValue: unknown): BulletChartError => ({\n type: 'InvalidTargetValue',\n message: 'Bullet chart target value must be a finite number.',\n details: some(`Invalid target value: ${String(targetValue)}.`),\n }),\n noBandsProvided: (): BulletChartError => ({\n type: 'NoBandsProvided',\n message: 'A bullet chart needs at least one performance band.',\n details: none,\n }),\n emptyBandLabel: (index: number): BulletChartError => ({\n type: 'EmptyBandLabel',\n message: 'Every bullet chart performance band needs a non-empty label.',\n details: some(`Empty band label at index ${String(index)}.`),\n }),\n invalidBandOrder: (index: number): BulletChartError => ({\n type: 'InvalidBandOrder',\n message: 'Every bullet chart band lower bound must be less than its upper bound.',\n details: some(`Invalid band bounds at index ${String(index)}.`),\n }),\n nonContiguousBands: (index: number): BulletChartError => ({\n type: 'NonContiguousBands',\n message: 'Bullet chart bands must be contiguous and non-overlapping.',\n details: some(`Band at index ${String(index)} does not start at the previous upper bound.`),\n }),\n valueOutsideScale: (valueName: string, value: number, scaleRange: ScaleRange): BulletChartError => ({\n type: 'ValueOutsideScale',\n message: 'Bullet chart values must fall within the performance band scale.',\n details: some(\n `${valueName} ${String(value)} is outside ${String(scaleRange.lowerBound)} to ${String(\n scaleRange.upperBound,\n )}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasValidCurrentValue = (input: BulletChartInput) =>\n isFiniteNumber(input.currentValue)\n\nconst hasValidTargetValue = (input: BulletChartInput) =>\n isFiniteNumber(input.targetValue)\n\nconst hasBands = (input: BulletChartInput) => input.bands.length > 0\n\nconst hasNonEmptyLabel = (band: PerformanceBand) => band.label.trim().length > 0\n\nconst hasOnlyNonEmptyLabels = (input: BulletChartInput) =>\n all(hasNonEmptyLabel, [...input.bands])\n\nconst findEmptyBandLabelIndex = (bands: readonly PerformanceBand[]) =>\n findIndex(complement(hasNonEmptyLabel), [...bands])\n\nconst hasValidBandOrder = (band: PerformanceBand) =>\n allPass([\n (candidate: PerformanceBand) => isFiniteNumber(candidate.lowerBound),\n (candidate: PerformanceBand) => isFiniteNumber(candidate.upperBound),\n (candidate: PerformanceBand) => candidate.lowerBound < candidate.upperBound,\n ])(band)\n\nconst hasOnlyValidBandOrders = (input: BulletChartInput) =>\n all(hasValidBandOrder, [...input.bands])\n\nconst findInvalidBandOrderIndex = (bands: readonly PerformanceBand[]) =>\n findIndex(complement(hasValidBandOrder), [...bands])\n\ntype BandPair = readonly [PerformanceBand, PerformanceBand]\n\nconst toBandPair = (bands: readonly PerformanceBand[]) =>\n (rightBand: PerformanceBand, index: number): BandPair => [bands[index], rightBand]\n\nconst getBandPairs = (bands: readonly PerformanceBand[]): readonly BandPair[] =>\n bands.slice(1).map(toBandPair(bands))\n\nconst bandsAreContiguous = ([left, right]: BandPair) =>\n left.upperBound === right.lowerBound\n\nconst hasContiguousBands = (input: BulletChartInput) =>\n all(bandsAreContiguous, getBandPairs(input.bands))\n\nconst findNonContiguousBandIndex = (bands: readonly PerformanceBand[]) =>\n findIndex(\n complement(bandsAreContiguous),\n getBandPairs(bands),\n ) + 1\n\nconst toScaleRange = (bands: readonly ValidatedPerformanceBand[]): ScaleRange => ({\n lowerBound: bands[0].lowerBound,\n upperBound: bands[bands.length - 1].upperBound,\n})\n\nconst isWithinScaleRange = (scaleRange: ScaleRange) =>\n allPass([\n (value: number) => value >= scaleRange.lowerBound,\n (value: number) => value <= scaleRange.upperBound,\n ])\n\nconst toValidatedInput = (input: BulletChartInput): ValidatedBulletChartInput => ({\n currentValue: Number(input.currentValue),\n targetValue: Number(input.targetValue),\n bands: input.bands,\n})\n\nconst currentValueIsWithinScale = (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return isWithinScaleRange(toScaleRange(validatedInput.bands))(validatedInput.currentValue)\n}\n\nconst targetValueIsWithinScale = (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return isWithinScaleRange(toScaleRange(validatedInput.bands))(validatedInput.targetValue)\n}\n\nconst containsCurrentValue =\n (currentValue: number, scaleRange: ScaleRange) => (band: ValidatedPerformanceBand) =>\n allPass([\n (candidate: ValidatedPerformanceBand) => currentValue >= candidate.lowerBound,\n anyPass([\n (candidate: ValidatedPerformanceBand) => currentValue < candidate.upperBound,\n (candidate: ValidatedPerformanceBand) => candidate.upperBound === scaleRange.upperBound,\n ]),\n ])(band)\n\nconst getActiveBand = (\n currentValue: number,\n bands: readonly ValidatedPerformanceBand[],\n scaleRange: ScaleRange,\n) =>\n defaultTo(\n bands[bands.length - 1],\n bands.find(containsCurrentValue(currentValue, scaleRange)),\n )\n\nconst inputValidators: BulletChartInputValidator[] = [\n [\n complement(hasValidCurrentValue),\n (input: BulletChartInput) => err(bulletChartRules.invalidCurrentValue(input.currentValue)),\n ],\n [\n complement(hasValidTargetValue),\n (input: BulletChartInput) => err(bulletChartRules.invalidTargetValue(input.targetValue)),\n ],\n [\n complement(hasBands),\n () => err(bulletChartRules.noBandsProvided()),\n ],\n [\n complement(hasOnlyNonEmptyLabels),\n (input: BulletChartInput) =>\n err(bulletChartRules.emptyBandLabel(findEmptyBandLabelIndex(input.bands))),\n ],\n [\n complement(hasOnlyValidBandOrders),\n (input: BulletChartInput) =>\n err(bulletChartRules.invalidBandOrder(findInvalidBandOrderIndex(input.bands))),\n ],\n [\n complement(hasContiguousBands),\n (input: BulletChartInput) =>\n err(bulletChartRules.nonContiguousBands(findNonContiguousBandIndex(input.bands))),\n ],\n [\n complement(currentValueIsWithinScale),\n (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return err(\n bulletChartRules.valueOutsideScale(\n 'Current value',\n validatedInput.currentValue,\n toScaleRange(validatedInput.bands),\n ),\n )\n },\n ],\n [\n complement(targetValueIsWithinScale),\n (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return err(\n bulletChartRules.valueOutsideScale(\n 'Target value',\n validatedInput.targetValue,\n toScaleRange(validatedInput.bands),\n ),\n )\n },\n ],\n [always(true), (input: BulletChartInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateBulletChartInput: (\n input: BulletChartInput\n) => BulletChartInputResult = cond(inputValidators)\n\nconst summarizeBulletChart = (input: ValidatedBulletChartInput): BulletChartSummary => {\n const scaleRange = toScaleRange(input.bands)\n\n return {\n ...input,\n scaleRange,\n activeBand: getActiveBand(input.currentValue, input.bands, scaleRange),\n }\n}\n\nexport function computeBulletChart(input: BulletChartInput): BulletChartResult {\n return mapResult<ValidatedBulletChartInput, BulletChartSummary, BulletChartError>(\n summarizeBulletChart,\n )(validateBulletChartInput(input))\n}\n","import { scaleLinear } from 'd3'\n\nimport { always, cond, map } from '../shared/fp'\n\nimport type {\n BulletChartSummary,\n PerformanceBand,\n ScaleRange,\n} from './BulletChart.types'\n\nexport const BULLET_CHART_MARGIN = {\n top: 46,\n right: 40,\n bottom: 54,\n left: 40,\n}\n\nexport type RenderedBulletChartBand = PerformanceBand & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly labelX: number\n readonly labelY: number\n}\n\nexport type BulletChartTickTextAnchor = 'start' | 'middle' | 'end'\n\nexport type RenderedBulletChartTick = {\n readonly value: number\n readonly x: number\n readonly textAnchor: BulletChartTickTextAnchor\n}\n\nexport type BulletChartModel = {\n readonly currentValue: number\n readonly targetValue: number\n readonly scaleRange: ScaleRange\n readonly activeBand: PerformanceBand\n readonly bands: readonly RenderedBulletChartBand[]\n readonly ticks: readonly RenderedBulletChartTick[]\n readonly scaleX: (value: number) => number\n readonly plotX: number\n readonly plotY: number\n readonly plotWidth: number\n readonly bandHeight: number\n readonly trackRadius: number\n readonly currentBarX: number\n readonly currentBarY: number\n readonly currentBarWidth: number\n readonly currentBarHeight: number\n readonly targetX: number\n readonly targetY1: number\n readonly targetY2: number\n readonly axisY: number\n readonly tickLabelY: number\n readonly valueLabelY: number\n readonly currentLabel: string\n readonly targetLabel: string\n readonly activeBandLabel: string\n}\n\nconst BAND_HEIGHT = 38\nconst CURRENT_BAR_HEIGHT = 14\nconst TARGET_MARKER_OVERHANG = 9\nconst BAND_LABEL_OFFSET = 16\nconst AXIS_OFFSET = 30\nconst TICK_LABEL_OFFSET = 18\nconst MINIMUM_BAND_HEIGHT = 24\nconst VALUE_LABEL_Y = 22\nconst START_TICK_TEXT_ANCHOR: BulletChartTickTextAnchor = 'start'\nconst MIDDLE_TICK_TEXT_ANCHOR: BulletChartTickTextAnchor = 'middle'\nconst END_TICK_TEXT_ANCHOR: BulletChartTickTextAnchor = 'end'\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nconst getBaselineValue = (scaleRange: ScaleRange) =>\n clamp(scaleRange.lowerBound, scaleRange.upperBound, 0)\n\nconst getScaleMidpoint = (scaleRange: ScaleRange) =>\n scaleRange.lowerBound + (scaleRange.upperBound - scaleRange.lowerBound) / 2\n\nconst getScaleTicks = (scaleRange: ScaleRange) => [\n scaleRange.lowerBound,\n getScaleMidpoint(scaleRange),\n scaleRange.upperBound,\n]\n\nconst getTickTextAnchor: (\n index: number,\n ticks: readonly number[],\n) => BulletChartTickTextAnchor = (index, ticks) =>\n cond([\n [(candidate: number) => candidate === 0, always(START_TICK_TEXT_ANCHOR)],\n [(candidate: number) => candidate === ticks.length - 1, always(END_TICK_TEXT_ANCHOR)],\n [always(true), always(MIDDLE_TICK_TEXT_ANCHOR)],\n ])(index)\n\nexport const buildBulletChartModel = (\n summary: BulletChartSummary,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n): BulletChartModel => {\n const plotX = BULLET_CHART_MARGIN.left\n const plotY = BULLET_CHART_MARGIN.top\n const plotWidth = width - BULLET_CHART_MARGIN.left - BULLET_CHART_MARGIN.right\n const bandHeight = Math.max(\n MINIMUM_BAND_HEIGHT,\n Math.min(\n BAND_HEIGHT,\n height - BULLET_CHART_MARGIN.top - BULLET_CHART_MARGIN.bottom,\n ),\n )\n const scaleX = scaleLinear()\n .domain([summary.scaleRange.lowerBound, summary.scaleRange.upperBound])\n .range([plotX, plotX + plotWidth])\n const baselineX = scaleX(getBaselineValue(summary.scaleRange))\n const currentX = scaleX(summary.currentValue)\n const targetX = scaleX(summary.targetValue)\n const ticks = getScaleTicks(summary.scaleRange)\n\n const toRenderedBand = (band: PerformanceBand): RenderedBulletChartBand => {\n const startX = scaleX(band.lowerBound)\n const endX = scaleX(band.upperBound)\n\n return {\n ...band,\n x: startX,\n y: plotY,\n width: endX - startX,\n height: bandHeight,\n labelX: startX + (endX - startX) / 2,\n labelY: plotY + bandHeight + BAND_LABEL_OFFSET,\n }\n }\n\n return {\n currentValue: summary.currentValue,\n targetValue: summary.targetValue,\n scaleRange: summary.scaleRange,\n activeBand: summary.activeBand,\n bands: map(toRenderedBand, [...summary.bands]),\n ticks: ticks.map((tick, index) => ({\n value: tick,\n x: scaleX(tick),\n textAnchor: getTickTextAnchor(index, ticks),\n })),\n scaleX,\n plotX,\n plotY,\n plotWidth,\n bandHeight,\n trackRadius: Math.min(10, bandHeight / 2),\n currentBarX: Math.min(baselineX, currentX),\n currentBarY: plotY + (bandHeight - CURRENT_BAR_HEIGHT) / 2,\n currentBarWidth: Math.abs(currentX - baselineX),\n currentBarHeight: CURRENT_BAR_HEIGHT,\n targetX,\n targetY1: plotY - TARGET_MARKER_OVERHANG,\n targetY2: plotY + bandHeight + TARGET_MARKER_OVERHANG,\n axisY: plotY + bandHeight + AXIS_OFFSET,\n tickLabelY: plotY + bandHeight + AXIS_OFFSET + TICK_LABEL_OFFSET,\n valueLabelY: VALUE_LABEL_Y,\n currentLabel: `Current ${formatValue(summary.currentValue)}`,\n targetLabel: `Target ${formatValue(summary.targetValue)}`,\n activeBandLabel: summary.activeBand.label,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { BulletChartProps } from '../BulletChart.types'\n\ntype BulletChartCaptionProps = Pick<BulletChartProps, 'caption'>\n\nexport function BulletChartCaption({ caption }: BulletChartCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-bullet-chart__caption\">{value}</figcaption>\n ),\n })\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartAxisProps = {\n readonly chart: BulletChartModel\n readonly formatValue: (value: number) => string\n}\n\nexport function BulletChartAxis({ chart, formatValue }: BulletChartAxisProps) {\n return (\n <g className=\"pristine-bullet-chart__axis\" aria-hidden=\"true\">\n <line\n x1={chart.plotX}\n x2={chart.plotX + chart.plotWidth}\n y1={chart.axisY}\n y2={chart.axisY}\n />\n {chart.ticks.map((tick) => (\n <g className=\"pristine-bullet-chart__tick\" key={tick.value}>\n <line\n x1={tick.x}\n x2={tick.x}\n y1={chart.axisY}\n y2={chart.axisY + 5}\n />\n <text x={tick.x} y={chart.tickLabelY} textAnchor={tick.textAnchor}>\n {formatValue(tick.value)}\n </text>\n </g>\n ))}\n </g>\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\nimport { classNames } from '@/shared'\nimport { ifElse } from '@/shared/fp'\n\ntype BulletChartBandsProps = {\n readonly chart: BulletChartModel\n readonly showLabels: boolean\n}\n\nconst toBandClassName = (index: number) =>\n `pristine-bullet-chart__band pristine-bullet-chart__band--${String(index + 1)}`\n\nconst isActiveBand = (\n chart: BulletChartModel,\n band: BulletChartModel['bands'][number],\n) =>\n chart.activeBand.label === band.label\n\nconst toActiveBandClassName = ifElse(\n (candidate: boolean) => candidate,\n () => 'pristine-bullet-chart__band-group--active',\n () => '',\n)\n\nconst toBandGroupClassName = (\n chart: BulletChartModel,\n band: BulletChartModel['bands'][number],\n) =>\n classNames([\n 'pristine-bullet-chart__band-group',\n toActiveBandClassName(isActiveBand(chart, band)),\n ])\n\nconst renderLabel = (band: BulletChartModel['bands'][number]) =>\n ifElse(\n (candidate: boolean) => candidate,\n () => (\n <text\n className=\"pristine-bullet-chart__band-label\"\n x={band.labelX}\n y={band.labelY}\n textAnchor=\"middle\"\n aria-hidden=\"true\"\n >\n {band.label}\n </text>\n ),\n () => null,\n )\n\nexport function BulletChartBands({ chart, showLabels }: BulletChartBandsProps) {\n return (\n <g className=\"pristine-bullet-chart__bands\">\n {chart.bands.map((band, index) => (\n <g className={toBandGroupClassName(chart, band)} key={band.label}>\n <rect\n className={toBandClassName(index)}\n x={band.x}\n y={band.y}\n width={band.width}\n height={band.height}\n />\n {renderLabel(band)(showLabels)}\n </g>\n ))}\n </g>\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartCurrentBarProps = {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartCurrentBar({ chart }: BulletChartCurrentBarProps) {\n return (\n <rect\n className=\"pristine-bullet-chart__current-bar\"\n x={chart.currentBarX}\n y={chart.currentBarY}\n width={chart.currentBarWidth}\n height={chart.currentBarHeight}\n rx={chart.currentBarHeight / 2}\n />\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartTargetMarkerProps = {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartTargetMarker({ chart }: BulletChartTargetMarkerProps) {\n return (\n <g className=\"pristine-bullet-chart__target\" aria-hidden=\"true\">\n <line\n className=\"pristine-bullet-chart__target-marker-halo\"\n x1={chart.targetX}\n x2={chart.targetX}\n y1={chart.targetY1}\n y2={chart.targetY2}\n />\n <line\n className=\"pristine-bullet-chart__target-marker\"\n x1={chart.targetX}\n x2={chart.targetX}\n y1={chart.targetY1}\n y2={chart.targetY2}\n />\n </g>\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartValueLabelsProps = {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartValueLabels({ chart }: BulletChartValueLabelsProps) {\n return (\n <g className=\"pristine-bullet-chart__value-labels\" aria-hidden=\"true\">\n <text\n className=\"pristine-bullet-chart__value-label pristine-bullet-chart__value-label--current\"\n x={chart.plotX}\n y={chart.valueLabelY}\n >\n {chart.currentLabel}\n </text>\n <text\n className=\"pristine-bullet-chart__value-label pristine-bullet-chart__value-label--target\"\n x={chart.plotX + chart.plotWidth}\n y={chart.valueLabelY}\n textAnchor=\"end\"\n >\n {chart.targetLabel}\n </text>\n </g>\n )\n}\n","import { useId } from 'react'\n\nimport { ifElse } from '@/shared/fp'\n\nimport type { BulletChartModel } from '../BulletChart.model'\nimport type { BulletChartProps } from '../BulletChart.types'\n\nimport { BulletChartAxis } from './BulletChartAxis'\nimport { BulletChartBands } from './BulletChartBands'\nimport { BulletChartCurrentBar } from './BulletChartCurrentBar'\nimport { BulletChartTargetMarker } from './BulletChartTargetMarker'\nimport { BulletChartValueLabels } from './BulletChartValueLabels'\n\ntype BulletChartSvgProps = Pick<\n BulletChartProps,\n 'ariaLabel' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: BulletChartModel\n}\n\nconst hasCurrentBar = (chart: BulletChartModel) => chart.currentBarWidth > 0\n\nexport function BulletChartSvg({\n ariaLabel,\n chart,\n formatValue,\n height,\n showLabels,\n width,\n}: BulletChartSvgProps) {\n const clipPathId = `pristine-bullet-chart-track-${useId().replaceAll(':', '')}`\n const valueText = `${chart.currentLabel}, ${chart.targetLabel}, ${chart.activeBandLabel}`\n const renderCurrentBar = ifElse(\n hasCurrentBar,\n () => <BulletChartCurrentBar chart={chart} />,\n () => null,\n )\n\n return (\n <svg\n className=\"pristine-bullet-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <defs>\n <clipPath id={clipPathId}>\n <rect\n x={chart.plotX}\n y={chart.plotY}\n width={chart.plotWidth}\n height={chart.bandHeight}\n rx={chart.trackRadius}\n />\n </clipPath>\n </defs>\n <BulletChartValueLabels chart={chart} />\n <g\n className=\"pristine-bullet-chart__meter\"\n role=\"meter\"\n aria-label={ariaLabel}\n aria-valuemin={chart.scaleRange.lowerBound}\n aria-valuemax={chart.scaleRange.upperBound}\n aria-valuenow={chart.currentValue}\n aria-valuetext={valueText}\n >\n <rect\n className=\"pristine-bullet-chart__track-shell\"\n x={chart.plotX}\n y={chart.plotY}\n width={chart.plotWidth}\n height={chart.bandHeight}\n rx={chart.trackRadius}\n />\n <g clipPath={`url(#${clipPathId})`}>\n <BulletChartBands chart={chart} showLabels={showLabels} />\n {renderCurrentBar(chart)}\n </g>\n <BulletChartTargetMarker chart={chart} />\n </g>\n <BulletChartAxis chart={chart} formatValue={formatValue} />\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { BulletChartModel } from '../BulletChart.model'\nimport type { BulletChartProps } from '../BulletChart.types'\n\nimport { BulletChartCaption } from './BulletChartCaption'\nimport { BulletChartSvg } from './BulletChartSvg'\n\ntype BulletChartFigureProps = Pick<\n BulletChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatValue,\n height,\n showLabels,\n width,\n}: BulletChartFigureProps) {\n return (\n <figure className={classNames(['pristine-bullet-chart', className])} aria-label={ariaLabel}>\n <BulletChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n <BulletChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeBulletChart } from './BulletChart.domain'\nimport { buildBulletChartModel } from './BulletChart.model'\nimport { BulletChartFigure } from './components/BulletChartFigure'\nimport type { BulletChartProps } from './BulletChart.types'\n\nexport function BulletChart({\n currentValue,\n targetValue,\n bands,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showLabels,\n formatValue,\n}: BulletChartProps) {\n const result = useMemo(\n () => computeBulletChart({ currentValue, targetValue, bands }),\n [currentValue, targetValue, bands],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-bullet-chart__error', className])}\n title=\"Bullet chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const chart = buildBulletChartModel(summary, width, height, formatValue)\n\n return (\n <BulletChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { BulletChartProps } from './BulletChart.types'\n\nexport const formatBulletChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_BULLET_CHART_VIEW_PROPS = {\n width: 420,\n height: 150,\n ariaLabel: 'Bullet chart',\n className: '',\n caption: none,\n showLabels: true,\n formatValue: formatBulletChartNumber,\n} satisfies Omit<BulletChartProps, 'currentValue' | 'targetValue' | 'bands'>\n","import { err, mapResult, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n complement,\n cond,\n filter,\n findIndex,\n ifElse,\n} from '../shared/fp'\n\nimport type {\n BoxPlotError,\n BoxPlotInput,\n BoxPlotResult,\n FiveNumberSummary,\n SortedDataset,\n ValidatedBoxPlotInput,\n ValidatedDataset,\n} from './BoxPlot.types'\n\ntype DatasetResult = Result<ValidatedDataset, BoxPlotError>\ntype BoxPlotInputResult = Result<ValidatedBoxPlotInput, BoxPlotError>\ntype DatasetValidator = [\n (data: readonly unknown[]) => boolean,\n (data: readonly unknown[]) => DatasetResult,\n]\n\nconst MINIMUM_VALUE_COUNT = 5\nconst WHISKER_MULTIPLIER = 1.5\n\nconst detailsFromIndex = (index: number) => some(`Invalid value at index ${String(index)}.`)\n\nconst boxPlotRules = {\n insufficientData: (count: number): BoxPlotError => ({\n type: 'InsufficientData',\n message: 'A box plot needs at least five numeric values.',\n details: some(`Received ${String(count)}.`),\n }),\n nonNumericValue: (index: number): BoxPlotError => ({\n type: 'NonNumericValue',\n message: 'Every box plot value must be a finite number.',\n details: detailsFromIndex(index),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughValues = (data: readonly unknown[]) => data.length >= MINIMUM_VALUE_COUNT\n\nconst hasOnlyFiniteNumbers = (data: readonly unknown[]) => all(isFiniteNumber, [...data])\n\nconst findInvalidNumberIndex = (data: readonly unknown[]) =>\n findIndex(complement(isFiniteNumber), [...data])\n\nconst toValidatedDataset = (data: readonly unknown[]): ValidatedDataset =>\n filter((value): value is number => isFiniteNumber(value), [...data])\n\nconst datasetValidators: DatasetValidator[] = [\n [\n complement(hasOnlyFiniteNumbers),\n (data: readonly unknown[]) => err(boxPlotRules.nonNumericValue(findInvalidNumberIndex(data))),\n ],\n [\n complement(hasEnoughValues),\n (data: readonly unknown[]) => err(boxPlotRules.insufficientData(data.length)),\n ],\n [always(true), (data: readonly unknown[]) => ok(toValidatedDataset(data))],\n]\n\nconst validateDataset: (data: readonly unknown[]) => DatasetResult = cond(datasetValidators)\n\nexport function validateBoxPlotInput(input: BoxPlotInput): BoxPlotInputResult {\n return mapResult<ValidatedDataset, ValidatedBoxPlotInput, BoxPlotError>(\n (dataset) => ({ dataset }),\n )(validateDataset(input.data))\n}\n\nconst byAscendingValue = (left: number, right: number) => left - right\n\nconst sortDataset = (dataset: ValidatedDataset): SortedDataset =>\n [...dataset].sort(byAscendingValue)\n\nconst getMedian = (sortedValues: readonly number[]) => {\n const midpoint = Math.floor(sortedValues.length / 2)\n\n return ifElse(\n (values: readonly number[]) => values.length % 2 === 0,\n (values: readonly number[]) => (Number(values[midpoint - 1]) + Number(values[midpoint])) / 2,\n (values: readonly number[]) => Number(values[midpoint]),\n )(sortedValues)\n}\n\nconst getLowerHalf = (sortedValues: SortedDataset) =>\n sortedValues.slice(0, Math.floor(sortedValues.length / 2))\n\nconst getUpperHalf = (sortedValues: SortedDataset) =>\n sortedValues.slice(Math.ceil(sortedValues.length / 2))\n\nconst isInsideFences = (lowerFence: number, upperFence: number) => (value: number) =>\n allPass([\n (candidate: number) => candidate >= lowerFence,\n (candidate: number) => candidate <= upperFence,\n ])(value)\n\nconst isOutsideFences = (lowerFence: number, upperFence: number) => (value: number) =>\n anyPass([\n (candidate: number) => candidate < lowerFence,\n (candidate: number) => candidate > upperFence,\n ])(value)\n\nconst getFirstValue = (values: readonly number[]) => Number(values[0])\n\nconst getLastValue = (values: readonly number[]) => Number(values[values.length - 1])\n\nconst computeSummary = (input: ValidatedBoxPlotInput): FiveNumberSummary => {\n const sortedDataset = sortDataset(input.dataset)\n const q1 = getMedian(getLowerHalf(sortedDataset))\n const median = getMedian(sortedDataset)\n const q3 = getMedian(getUpperHalf(sortedDataset))\n const interquartileRange = q3 - q1\n const lowerFence = q1 - WHISKER_MULTIPLIER * interquartileRange\n const upperFence = q3 + WHISKER_MULTIPLIER * interquartileRange\n const normalValues = filter(isInsideFences(lowerFence, upperFence), [...sortedDataset])\n\n return {\n q1,\n median,\n q3,\n interquartileRange,\n lowerFence,\n upperFence,\n lowerWhisker: getFirstValue(normalValues),\n upperWhisker: getLastValue(normalValues),\n outliers: filter(isOutsideFences(lowerFence, upperFence), [...sortedDataset]),\n }\n}\n\nexport function computeBoxPlot(input: BoxPlotInput): BoxPlotResult {\n return mapResult<ValidatedBoxPlotInput, FiveNumberSummary, BoxPlotError>(computeSummary)(\n validateBoxPlotInput(input),\n )\n}\n","import { extent, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { identity, ifElse } from '../shared/fp'\n\nimport type { FiveNumberSummary } from './BoxPlot.types'\n\ntype ChartExtent = [number, number]\n\nexport const BOX_PLOT_MARGIN = {\n top: 24,\n right: 20,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedBoxPlotPart = {\n readonly key: string\n readonly label: string\n readonly tooltipX: number\n readonly tooltipY: number\n}\n\nexport type RenderedOutlier = RenderedBoxPlotPart & {\n readonly value: number\n readonly cx: number\n readonly cy: number\n}\n\nexport type BoxPlotModel = {\n readonly plotBottom: number\n readonly plotCenter: number\n readonly boxTop: number\n readonly boxHeight: number\n readonly q1X: number\n readonly medianX: number\n readonly q3X: number\n readonly lowerWhiskerX: number\n readonly upperWhiskerX: number\n readonly lowerCapTop: number\n readonly lowerCapBottom: number\n readonly upperCapTop: number\n readonly upperCapBottom: number\n readonly boxPart: RenderedBoxPlotPart\n readonly medianPart: RenderedBoxPlotPart\n readonly lowerWhiskerPart: RenderedBoxPlotPart\n readonly upperWhiskerPart: RenderedBoxPlotPart\n readonly outliers: readonly RenderedOutlier[]\n readonly parts: readonly RenderedBoxPlotPart[]\n readonly xTicks: readonly number[]\n readonly xScale: (value: number) => number\n}\n\nconst BOX_HEIGHT = 56\nconst WHISKER_CAP_HEIGHT = 38\nconst DOMAIN_PADDING_RATIO = 0.08\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst padExtent = ([lowerBound, upperBound]: ChartExtent): ChartExtent => {\n const width = upperBound - lowerBound\n const padding = width * DOMAIN_PADDING_RATIO\n\n return [lowerBound - padding, upperBound + padding]\n}\n\nconst getSummaryValues = (summary: FiveNumberSummary) => [\n summary.lowerWhisker,\n summary.q1,\n summary.median,\n summary.q3,\n summary.upperWhisker,\n ...summary.outliers,\n]\n\nconst createPart = (\n key: string,\n label: string,\n tooltipX: number,\n tooltipY: number,\n): RenderedBoxPlotPart => ({\n key,\n label,\n tooltipX,\n tooltipY,\n})\n\nexport const buildBoxPlotModel = (\n summary: FiveNumberSummary,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n): BoxPlotModel => {\n const plotBottom = height - BOX_PLOT_MARGIN.bottom\n const plotCenter = BOX_PLOT_MARGIN.top + (plotBottom - BOX_PLOT_MARGIN.top) / 2\n const boxTop = plotCenter - BOX_HEIGHT / 2\n const xScale = scaleLinear()\n .domain(padExtent(expandZeroWidthExtent(getExtent(getSummaryValues(summary)))))\n .nice()\n .range([BOX_PLOT_MARGIN.left, width - BOX_PLOT_MARGIN.right])\n const q1X = xScale(summary.q1)\n const medianX = xScale(summary.median)\n const q3X = xScale(summary.q3)\n const lowerWhiskerX = xScale(summary.lowerWhisker)\n const upperWhiskerX = xScale(summary.upperWhisker)\n const lowerCapTop = plotCenter - WHISKER_CAP_HEIGHT / 2\n const lowerCapBottom = plotCenter + WHISKER_CAP_HEIGHT / 2\n const upperCapTop = lowerCapTop\n const upperCapBottom = lowerCapBottom\n const boxPart = createPart(\n 'box',\n `Q1 ${formatValue(summary.q1)} to Q3 ${formatValue(summary.q3)}`,\n q1X + (q3X - q1X) / 2,\n boxTop,\n )\n const medianPart = createPart(\n 'median',\n `Median: ${formatValue(summary.median)}`,\n medianX,\n boxTop,\n )\n const lowerWhiskerPart = createPart(\n 'lower-whisker',\n `Lower whisker: ${formatValue(summary.lowerWhisker)}`,\n lowerWhiskerX,\n plotCenter,\n )\n const upperWhiskerPart = createPart(\n 'upper-whisker',\n `Upper whisker: ${formatValue(summary.upperWhisker)}`,\n upperWhiskerX,\n plotCenter,\n )\n const outliers = summary.outliers.map(\n (value, index): RenderedOutlier => ({\n ...createPart(\n `outlier-${String(index)}`,\n `Outlier: ${formatValue(value)}`,\n xScale(value),\n plotCenter,\n ),\n value,\n cx: xScale(value),\n cy: plotCenter,\n }),\n )\n\n return {\n plotBottom,\n plotCenter,\n boxTop,\n boxHeight: BOX_HEIGHT,\n q1X,\n medianX,\n q3X,\n lowerWhiskerX,\n upperWhiskerX,\n lowerCapTop,\n lowerCapBottom,\n upperCapTop,\n upperCapBottom,\n boxPart,\n medianPart,\n lowerWhiskerPart,\n upperWhiskerPart,\n outliers,\n parts: [boxPart, medianPart, lowerWhiskerPart, upperWhiskerPart, ...outliers],\n xTicks: xScale.ticks(6),\n xScale,\n }\n}\n","import { matchOption } from '@/shared'\nimport type { BoxPlotProps } from '../BoxPlot.types'\n\ntype BoxPlotCaptionProps = Pick<BoxPlotProps, 'caption'>\n\nexport function BoxPlotCaption({ caption }: BoxPlotCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (content) => (\n <figcaption className=\"pristine-box-plot__caption\">{content}</figcaption>\n ),\n })\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotAxesProps = {\n readonly chart: BoxPlotModel\n readonly width: number\n}\n\nexport function BoxPlotAxes({ chart, width }: BoxPlotAxesProps) {\n return (\n <line\n className=\"pristine-box-plot__axis\"\n x1={BOX_PLOT_MARGIN.left}\n x2={width - BOX_PLOT_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n )\n}\n","import type { KeyboardEvent, ReactNode } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { BoxPlotModel, RenderedBoxPlotPart, RenderedOutlier } from '../BoxPlot.model'\n\ntype BoxPlotDistributionProps = {\n readonly activePartKey: string | null\n readonly chart: BoxPlotModel\n readonly onActivate: (partKey: string) => void\n readonly onDeactivate: () => void\n}\n\ntype InteractivePartProps = {\n readonly activePartKey: string | null\n readonly children: ReactNode\n readonly part: RenderedBoxPlotPart\n readonly onActivate: (partKey: string) => void\n readonly onDeactivate: () => void\n}\n\nconst getActiveClassName = (active: boolean) =>\n ifElse(\n always(active),\n always('pristine-box-plot__part--active'),\n always(''),\n )(active)\n\nfunction InteractivePart({\n activePartKey,\n children,\n part,\n onActivate,\n onDeactivate,\n}: InteractivePartProps) {\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-box-plot__part',\n getActiveClassName(activePartKey === part.key),\n ])}\n role=\"img\"\n aria-label={part.label}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={() => onActivate(part.key)}\n onFocus={() => onActivate(part.key)}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => onActivate(part.key)}\n onMouseLeave={onDeactivate}\n >\n {children}\n </g>\n )\n}\n\nconst getOutlierClassName = (activePartKey: string | null, outlier: RenderedOutlier) =>\n classNames([\n 'pristine-box-plot__outlier',\n getActiveClassName(activePartKey === outlier.key),\n ])\n\nconst handleOutlierKeyDown = (onDeactivate: () => void) => (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\nexport function BoxPlotDistribution({\n activePartKey,\n chart,\n onActivate,\n onDeactivate,\n}: BoxPlotDistributionProps) {\n return (\n <>\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.lowerWhiskerPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <line\n className=\"pristine-box-plot__whisker\"\n x1={chart.lowerWhiskerX}\n x2={chart.q1X}\n y1={chart.plotCenter}\n y2={chart.plotCenter}\n />\n <line\n className=\"pristine-box-plot__whisker-cap\"\n x1={chart.lowerWhiskerX}\n x2={chart.lowerWhiskerX}\n y1={chart.lowerCapTop}\n y2={chart.lowerCapBottom}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={Math.min(chart.lowerWhiskerX, chart.q1X)}\n y={chart.lowerCapTop - 8}\n width={Math.abs(chart.q1X - chart.lowerWhiskerX) + 16}\n height={chart.lowerCapBottom - chart.lowerCapTop + 16}\n />\n </InteractivePart>\n\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.upperWhiskerPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <line\n className=\"pristine-box-plot__whisker\"\n x1={chart.q3X}\n x2={chart.upperWhiskerX}\n y1={chart.plotCenter}\n y2={chart.plotCenter}\n />\n <line\n className=\"pristine-box-plot__whisker-cap\"\n x1={chart.upperWhiskerX}\n x2={chart.upperWhiskerX}\n y1={chart.upperCapTop}\n y2={chart.upperCapBottom}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={Math.min(chart.q3X, chart.upperWhiskerX) - 8}\n y={chart.upperCapTop - 8}\n width={Math.abs(chart.upperWhiskerX - chart.q3X) + 16}\n height={chart.upperCapBottom - chart.upperCapTop + 16}\n />\n </InteractivePart>\n\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.boxPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <rect\n className=\"pristine-box-plot__box\"\n x={Math.min(chart.q1X, chart.q3X)}\n y={chart.boxTop}\n width={Math.abs(chart.q3X - chart.q1X)}\n height={chart.boxHeight}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={Math.min(chart.q1X, chart.q3X) - 8}\n y={chart.boxTop - 8}\n width={Math.abs(chart.q3X - chart.q1X) + 16}\n height={chart.boxHeight + 16}\n />\n </InteractivePart>\n\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.medianPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <line\n className=\"pristine-box-plot__median\"\n x1={chart.medianX}\n x2={chart.medianX}\n y1={chart.boxTop}\n y2={chart.boxTop + chart.boxHeight}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={chart.medianX - 8}\n y={chart.boxTop - 8}\n width={16}\n height={chart.boxHeight + 16}\n />\n </InteractivePart>\n\n {chart.outliers.map((outlier) => (\n <g\n className={getOutlierClassName(activePartKey, outlier)}\n key={outlier.key}\n role=\"img\"\n aria-label={outlier.label}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={() => onActivate(outlier.key)}\n onFocus={() => onActivate(outlier.key)}\n onKeyDown={handleOutlierKeyDown(onDeactivate)}\n onMouseEnter={() => onActivate(outlier.key)}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-box-plot__outlier-hit-area\"\n cx={outlier.cx}\n cy={outlier.cy}\n r={10}\n />\n <circle\n className=\"pristine-box-plot__outlier-mark\"\n cx={outlier.cx}\n cy={outlier.cy}\n r={4}\n />\n </g>\n ))}\n </>\n )\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotGridLinesProps = {\n readonly chart: BoxPlotModel\n}\n\nexport function BoxPlotGridLines({ chart }: BoxPlotGridLinesProps) {\n return chart.xTicks.map((tick) => (\n <g className=\"pristine-box-plot__grid-line\" key={tick}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={BOX_PLOT_MARGIN.top}\n y2={chart.plotBottom}\n />\n </g>\n ))\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotPlotAreaProps = {\n readonly chart: BoxPlotModel\n readonly width: number\n}\n\nexport function BoxPlotPlotArea({ chart, width }: BoxPlotPlotAreaProps) {\n return (\n <rect\n className=\"pristine-box-plot__plot\"\n x={BOX_PLOT_MARGIN.left}\n y={BOX_PLOT_MARGIN.top}\n width={width - BOX_PLOT_MARGIN.left - BOX_PLOT_MARGIN.right}\n height={chart.plotBottom - BOX_PLOT_MARGIN.top}\n />\n )\n}\n","import type { RenderedBoxPlotPart } from '../BoxPlot.model'\n\ntype BoxPlotTooltipProps = {\n readonly height: number\n readonly part: RenderedBoxPlotPart\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function BoxPlotTooltip({\n height,\n part,\n width,\n}: BoxPlotTooltipProps) {\n const tooltipWidth = getTooltipWidth(part.label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n part.tooltipX - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n part.tooltipY - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-box-plot__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-box-plot__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-box-plot__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {part.label}\n </text>\n </g>\n )\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotXTicksProps = {\n readonly chart: BoxPlotModel\n readonly height: number\n}\n\nexport function BoxPlotXTicks({ chart, height }: BoxPlotXTicksProps) {\n return chart.xTicks.map((tick) => (\n <g className=\"pristine-box-plot__tick\" key={tick}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={chart.plotBottom}\n y2={chart.plotBottom + 5}\n />\n <text\n x={chart.xScale(tick)}\n y={height - BOX_PLOT_MARGIN.bottom + 18}\n textAnchor=\"middle\"\n >\n {tick}\n </text>\n </g>\n ))\n}\n","import { useState } from 'react'\n\nimport type { BoxPlotModel } from '../BoxPlot.model'\nimport type { BoxPlotProps } from '../BoxPlot.types'\n\nimport { BoxPlotAxes } from './BoxPlotAxes'\nimport { BoxPlotDistribution } from './BoxPlotDistribution'\nimport { BoxPlotGridLines } from './BoxPlotGridLines'\nimport { BoxPlotPlotArea } from './BoxPlotPlotArea'\nimport { BoxPlotTooltip } from './BoxPlotTooltip'\nimport { BoxPlotXTicks } from './BoxPlotXTicks'\n\ntype BoxPlotSvgProps = Pick<BoxPlotProps, 'ariaLabel' | 'height' | 'width'> & {\n readonly chart: BoxPlotModel\n}\n\nexport function BoxPlotSvg({\n ariaLabel,\n chart,\n height,\n width,\n}: BoxPlotSvgProps) {\n const [activePartKey, setActivePartKey] = useState<string | null>(null)\n const activeParts = chart.parts.filter((part) => part.key === activePartKey)\n\n return (\n <svg\n className=\"pristine-box-plot__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <BoxPlotPlotArea chart={chart} width={width} />\n <BoxPlotGridLines chart={chart} />\n <BoxPlotAxes chart={chart} width={width} />\n <BoxPlotDistribution\n activePartKey={activePartKey}\n chart={chart}\n onActivate={setActivePartKey}\n onDeactivate={() => setActivePartKey(null)}\n />\n <BoxPlotXTicks chart={chart} height={height} />\n {activeParts.map((part) => (\n <BoxPlotTooltip\n key={part.key}\n height={height}\n part={part}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { BoxPlotModel } from '../BoxPlot.model'\nimport type { BoxPlotProps } from '../BoxPlot.types'\n\nimport { BoxPlotCaption } from './BoxPlotCaption'\nimport { BoxPlotSvg } from './BoxPlotSvg'\n\ntype BoxPlotFigureProps = Pick<\n BoxPlotProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'width'\n> & {\n readonly chart: BoxPlotModel\n}\n\nexport function BoxPlotFigure({\n ariaLabel,\n caption,\n chart,\n className,\n height,\n width,\n}: BoxPlotFigureProps) {\n return (\n <figure className={classNames(['pristine-box-plot', className])} aria-label={ariaLabel}>\n <BoxPlotSvg\n ariaLabel={ariaLabel}\n chart={chart}\n height={height}\n width={width}\n />\n <BoxPlotCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeBoxPlot } from './BoxPlot.domain'\nimport { buildBoxPlotModel } from './BoxPlot.model'\nimport { BoxPlotFigure } from './components/BoxPlotFigure'\nimport type { BoxPlotProps } from './BoxPlot.types'\n\nexport function BoxPlot({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n formatValue,\n}: BoxPlotProps) {\n const result = useMemo(\n () => computeBoxPlot({ data }),\n [data],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-box-plot__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const chart = buildBoxPlotModel(summary, width, height, formatValue)\n\n return (\n <BoxPlotFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n height={height}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { BoxPlotProps } from './BoxPlot.types'\n\nexport const formatBoxPlotNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_BOX_PLOT_VIEW_PROPS = {\n width: 480,\n height: 240,\n ariaLabel: 'Box plot',\n className: '',\n caption: none,\n formatValue: formatBoxPlotNumber,\n} satisfies Omit<BoxPlotProps, 'data'>\n","import { bin as createD3Bin, extent } from 'd3'\nimport type { Bin } from 'd3'\n\nimport { bindResult, err, fromNullable, mapResult, matchOption, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n aperture,\n complement,\n cond,\n defaultTo,\n filter,\n findIndex,\n identity,\n ifElse,\n init,\n isEmpty,\n last,\n map,\n tail,\n} from '../shared/fp'\n\nimport type {\n AutoBinStrategy,\n BinStrategy,\n HistogramBin,\n HistogramError,\n HistogramInput,\n HistogramResult,\n ManualBinStrategy,\n Thresholds,\n ValidatedAutoBinStrategy,\n ValidatedBinStrategy,\n ValidatedDataset,\n ValidatedHistogramInput,\n ValidatedManualBinStrategy,\n} from './HistogramChart.types'\n\ntype HistogramExtent = [number, number]\ntype HistogramInputResult = Result<ValidatedHistogramInput, HistogramError>\ntype DatasetResult = Result<ValidatedDataset, HistogramError>\ntype BinStrategyResult = Result<ValidatedBinStrategy, HistogramError>\ntype StrategyMatcher<TOutput> = {\n readonly auto: (strategy: AutoBinStrategy) => TOutput\n readonly manual: (strategy: ManualBinStrategy) => TOutput\n}\ntype ValidatedStrategyMatcher<TOutput> = {\n readonly auto: (strategy: ValidatedAutoBinStrategy) => TOutput\n readonly manual: (strategy: ValidatedManualBinStrategy) => TOutput\n}\n\nexport const DEFAULT_HISTOGRAM_BIN_STRATEGY: BinStrategy = {\n kind: 'auto',\n binCount: 10,\n}\n\nconst detailsFromIndex = ifElse(\n (index: number) => index >= 0,\n (index: number) => some(`Invalid value at index ${index}.`),\n always(none),\n)\n\nconst histogramRules = {\n emptyDataset: (): HistogramError => ({\n type: 'EmptyDataset',\n message: 'A histogram needs at least one numeric value.',\n details: none,\n }),\n nonNumericValue: (index: number): HistogramError => ({\n type: 'NonNumericValue',\n message: 'Every histogram value must be a finite number.',\n details: detailsFromIndex(index),\n }),\n invalidBinCount: (binCount: number): HistogramError => ({\n type: 'InvalidBinCount',\n message: 'Auto bin count must be a positive integer.',\n details: some(`Received ${String(binCount)}.`),\n }),\n invalidBinBoundaries: (): HistogramError => ({\n type: 'InvalidBinBoundaries',\n message: 'Manual thresholds must be finite numbers in strictly ascending order.',\n details: none,\n }),\n boundariesOutsideDatasetRange: (): HistogramError => ({\n type: 'BoundariesOutsideDatasetRange',\n message: 'Manual thresholds must fully cover the dataset range.',\n details: none,\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isPositiveInteger = (value: number) =>\n allPass([Number.isInteger, (candidate: number) => candidate > 0])(value)\n\nconst isAscendingPair = ([left, right]: readonly number[]) =>\n allPass([\n (candidate: unknown) => Number.isFinite(candidate),\n () => Number.isFinite(right),\n (candidate: unknown) => Number(candidate) < Number(right),\n ])(left)\n\nconst areStrictlyAscending = (values: readonly number[]) =>\n all(isAscendingPair, aperture(2, [...values]))\n\nconst hasEnoughThresholds = (values: readonly number[]) => values.length >= 2\n\nconst hasOnlyFiniteNumbers = (values: readonly unknown[]) => all(isFiniteNumber, [...values])\n\nconst findInvalidNumberIndex = (values: readonly unknown[]) =>\n findIndex(complement(isFiniteNumber), [...values])\n\nconst toValidatedDataset = (values: readonly unknown[]): ValidatedDataset =>\n filter((value): value is number => isFiniteNumber(value), [...values])\n\nconst toThresholds = (values: readonly number[]): Thresholds => filter(isFiniteNumber, [...values])\n\nconst isNumber = (value: unknown) => typeof value === 'number'\n\nconst withNumberDefault = (fallback: number) => (value: unknown) =>\n matchOption(fromNullable(value), {\n none: () => fallback,\n some: (resolvedValue) =>\n ifElse(\n isNumber,\n (numberValue: number) => defaultTo(fallback, numberValue),\n always(fallback),\n )(resolvedValue),\n })\n\nconst getExtent = (values: readonly number[]): HistogramExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: HistogramExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: HistogramExtent): HistogramExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst getManualDomain = (thresholds: Thresholds): HistogramExtent => [\n withNumberDefault(0)(thresholds[0]),\n withNumberDefault(1)(last([...thresholds])),\n]\n\nconst getInteriorThresholds = (thresholds: Thresholds): readonly number[] =>\n init(tail([...thresholds]))\n\nconst fullyCoversDataset = (dataset: ValidatedDataset, thresholds: Thresholds) => {\n const [datasetMin, datasetMax] = getExtent(dataset)\n const [thresholdMin, thresholdMax] = getManualDomain(thresholds)\n\n return all(identity, [\n thresholdMin <= datasetMin,\n thresholdMax >= datasetMax,\n ])\n}\n\ntype DatasetValidator = [\n (data: readonly unknown[]) => boolean,\n (data: readonly unknown[]) => DatasetResult,\n]\n\nconst datasetValidators: DatasetValidator[] = [\n [isEmpty, () => err(histogramRules.emptyDataset())],\n [\n complement(hasOnlyFiniteNumbers),\n (data: readonly unknown[]) => err(histogramRules.nonNumericValue(findInvalidNumberIndex(data))),\n ],\n [() => true, (data: readonly unknown[]) => ok(toValidatedDataset(data))],\n]\n\nconst validateDataset: (data: readonly unknown[]) => DatasetResult = cond(datasetValidators)\n\nconst createValidatedAutoStrategy = (binCount: number): ValidatedAutoBinStrategy => ({\n kind: 'auto',\n binCount,\n})\n\nconst createValidatedManualStrategy = (thresholds: Thresholds): ValidatedManualBinStrategy => ({\n kind: 'manual',\n thresholds,\n})\n\nconst validateAutoBinStrategy = (binStrategy: AutoBinStrategy): BinStrategyResult =>\n ifElse(\n isPositiveInteger,\n (binCount: number) => ok(createValidatedAutoStrategy(binCount)),\n (binCount: number) => err(histogramRules.invalidBinCount(binCount)),\n )(binStrategy.binCount)\n\nconst hasInvalidManualThresholds = anyPass([\n complement(hasEnoughThresholds),\n complement(hasOnlyFiniteNumbers),\n complement(areStrictlyAscending),\n])\n\nconst validateManualCoverage = (dataset: ValidatedDataset) => (\n binStrategy: ManualBinStrategy,\n): BinStrategyResult => {\n const thresholds = toThresholds(binStrategy.thresholds)\n\n return ifElse(\n (candidate: Thresholds) => fullyCoversDataset(dataset, candidate),\n (candidate: Thresholds) => ok(createValidatedManualStrategy(candidate)),\n () => err(histogramRules.boundariesOutsideDatasetRange()),\n )(thresholds)\n}\n\nconst validateManualBinStrategy = (\n binStrategy: ManualBinStrategy,\n dataset: ValidatedDataset,\n): BinStrategyResult =>\n ifElse(\n (strategy: ManualBinStrategy) => hasInvalidManualThresholds(strategy.thresholds),\n () => err(histogramRules.invalidBinBoundaries()),\n validateManualCoverage(dataset),\n )(binStrategy)\n\nconst isAutoStrategy = (strategy: BinStrategy): strategy is AutoBinStrategy => strategy.kind === 'auto'\n\nconst isValidatedAutoStrategy = (\n strategy: ValidatedBinStrategy,\n): strategy is ValidatedAutoBinStrategy => strategy.kind === 'auto'\n\nconst matchBinStrategy = <TOutput>(\n binStrategy: BinStrategy,\n matcher: StrategyMatcher<TOutput>,\n) => ifElse(isAutoStrategy, matcher.auto, matcher.manual)(binStrategy)\n\nconst matchValidatedBinStrategy = <TOutput>(\n binStrategy: ValidatedBinStrategy,\n matcher: ValidatedStrategyMatcher<TOutput>,\n) => ifElse(isValidatedAutoStrategy, matcher.auto, matcher.manual)(binStrategy)\n\nfunction validateBinStrategy(\n binStrategy: BinStrategy,\n dataset: ValidatedDataset,\n): BinStrategyResult {\n return matchBinStrategy(binStrategy, {\n auto: validateAutoBinStrategy,\n manual: (strategy) => validateManualBinStrategy(strategy, dataset),\n })\n}\n\nexport function validateHistogramInput(input: HistogramInput): HistogramInputResult {\n return bindResult<\n { readonly dataset: ValidatedDataset },\n ValidatedBinStrategy,\n ValidatedHistogramInput,\n HistogramError\n >(\n ({ dataset }) => validateBinStrategy(input.binStrategy, dataset),\n (context, binStrategy) => ({ ...context, binStrategy }),\n )(\n bindResult<object, ValidatedDataset, { readonly dataset: ValidatedDataset }, HistogramError>(\n () => validateDataset(input.data),\n (_, dataset) => ({ dataset }),\n )(ok({})),\n )\n}\n\nconst isValidD3Bin = (bin: Bin<number, number>) =>\n allPass([\n (candidate: Bin<number, number>) => Number.isFinite(candidate.x0),\n (candidate: Bin<number, number>) => Number.isFinite(candidate.x1),\n (candidate: Bin<number, number>) => Number(candidate.x0) < Number(candidate.x1),\n ])(bin)\n\nconst createHistogramBin = (bin: Bin<number, number>): HistogramBin => ({\n lowerBound: Number(bin.x0),\n upperBound: Number(bin.x1),\n count: bin.length,\n})\n\nconst hasZeroWidthDataset = (dataset: ValidatedDataset) => isZeroWidthExtent(getExtent(dataset))\n\nconst computeZeroWidthAutoBins = (dataset: ValidatedDataset) =>\n createD3Bin<number, number>()\n .domain(expandZeroWidthExtent(getExtent(dataset)))\n .thresholds([])([...dataset])\n\nconst computeRegularAutoBins = (\n dataset: ValidatedDataset,\n binStrategy: ValidatedAutoBinStrategy,\n) =>\n createD3Bin<number, number>()\n .domain(expandZeroWidthExtent(getExtent(dataset)))\n .thresholds(binStrategy.binCount)([...dataset])\n\nconst computeAutoBins = (\n dataset: ValidatedDataset,\n binStrategy: ValidatedAutoBinStrategy,\n) =>\n ifElse(\n hasZeroWidthDataset,\n computeZeroWidthAutoBins,\n (validDataset: ValidatedDataset) => computeRegularAutoBins(validDataset, binStrategy),\n )(dataset)\n\nconst computeManualBins = (\n dataset: ValidatedDataset,\n binStrategy: ValidatedManualBinStrategy,\n) =>\n createD3Bin<number, number>()\n .domain(getManualDomain(binStrategy.thresholds))\n .thresholds(getInteriorThresholds(binStrategy.thresholds))([...dataset])\n\nconst computeD3Bins = (input: ValidatedHistogramInput) =>\n matchValidatedBinStrategy(input.binStrategy, {\n auto: (strategy) => computeAutoBins(input.dataset, strategy),\n manual: (strategy) => computeManualBins(input.dataset, strategy),\n })\n\nconst computeBins = (input: ValidatedHistogramInput) =>\n map(createHistogramBin, filter(isValidD3Bin, computeD3Bins(input)))\n\nexport function computeHistogram(input: HistogramInput): HistogramResult {\n return mapResult<ValidatedHistogramInput, readonly HistogramBin[], HistogramError>(computeBins)(\n validateHistogramInput(input),\n )\n}\n","import { max, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { head, last, map, prop } from '../shared/fp'\n\nimport type { HistogramBin } from './HistogramChart.types'\n\nexport const HISTOGRAM_CHART_MARGIN = {\n top: 20,\n right: 16,\n bottom: 32,\n left: 32,\n}\n\nexport type RenderedHistogramBin = HistogramBin & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly label: string\n}\n\nexport type HistogramChartModel = {\n readonly plotBottom: number\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly bars: readonly RenderedHistogramBin[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst getFirstLowerBound = (bins: readonly HistogramBin[]) =>\n withNumberDefault(0)(head([...bins])?.lowerBound)\n\nconst getLastUpperBound = (bins: readonly HistogramBin[]) =>\n withNumberDefault(1)(last([...bins])?.upperBound)\n\nconst getMaxCount = (bins: readonly HistogramBin[]) =>\n withNumberDefault(0)(max(map(prop('count'), [...bins])))\n\nexport const buildHistogramChartModel = (\n bins: readonly HistogramBin[],\n width: number,\n height: number,\n formatBinLabel: (bin: HistogramBin) => string,\n): HistogramChartModel => {\n const plotBottom = height - HISTOGRAM_CHART_MARGIN.bottom\n const xScale = scaleLinear()\n .domain([getFirstLowerBound(bins), getLastUpperBound(bins)])\n .range([HISTOGRAM_CHART_MARGIN.left, width - HISTOGRAM_CHART_MARGIN.right])\n const yScale = scaleLinear()\n .domain([0, getMaxCount(bins)])\n .nice()\n .range([plotBottom, HISTOGRAM_CHART_MARGIN.top])\n const toBar = (bin: HistogramBin): RenderedHistogramBin => {\n const x = xScale(bin.lowerBound)\n const barWidth = Math.max(0, xScale(bin.upperBound) - x)\n const y = yScale(bin.count)\n\n return {\n ...bin,\n x,\n y,\n width: barWidth,\n height: plotBottom - y,\n label: formatBinLabel(bin),\n }\n }\n\n return {\n plotBottom,\n xTicks: xScale.ticks(Math.min(6, bins.length + 1)),\n yTicks: yScale.ticks(4),\n bars: map(toBar, [...bins]),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { HistogramChartProps } from '../HistogramChart.types'\n\nexport function HistogramChartCaption({ caption }: Pick<HistogramChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-histogram-chart__caption\">{value}</figcaption>\n ),\n })\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartAxesProps = {\n readonly chart: HistogramChartModel\n readonly width: number\n}\n\nexport function HistogramChartAxes({ chart, width }: HistogramChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-histogram-chart__axis\"\n x1={HISTOGRAM_CHART_MARGIN.left}\n x2={width - HISTOGRAM_CHART_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-histogram-chart__axis\"\n x1={HISTOGRAM_CHART_MARGIN.left}\n x2={HISTOGRAM_CHART_MARGIN.left}\n y1={HISTOGRAM_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { ifElse } from '@/shared/fp'\n\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\n\ntype HistogramChartBarProps = {\n readonly bar: RenderedHistogramBin\n}\n\nconst getHitAreaY = ifElse(\n (bar: RenderedHistogramBin) => bar.height > 0,\n (bar: RenderedHistogramBin) => bar.y,\n (bar: RenderedHistogramBin) => bar.y - 8,\n)\n\nexport function HistogramChartBar({ bar }: HistogramChartBarProps) {\n return (\n <>\n <rect\n className=\"pristine-histogram-chart__bar\"\n x={bar.x}\n y={bar.y}\n width={bar.width}\n height={bar.height}\n aria-hidden=\"true\"\n />\n <rect\n className=\"pristine-histogram-chart__bar-hit-area\"\n x={bar.x}\n y={getHitAreaY(bar)}\n width={bar.width}\n height={Math.max(bar.height, 8)}\n aria-hidden=\"true\"\n />\n </>\n )\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\n\ntype HistogramChartCountLabelProps = {\n readonly bar: RenderedHistogramBin\n}\n\nexport function HistogramChartCountLabel({ bar }: HistogramChartCountLabelProps) {\n return (\n <text\n className=\"pristine-histogram-chart__count\"\n x={bar.x + bar.width / 2}\n y={Math.max(HISTOGRAM_CHART_MARGIN.top + 10, bar.y - 6)}\n textAnchor=\"middle\"\n >\n {bar.count}\n </text>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\nimport { always, ifElse } from '@/shared/fp'\n\nimport { HistogramChartBar } from './HistogramChartBar'\nimport { HistogramChartCountLabel } from './HistogramChartCountLabel'\n\ntype HistogramChartBinProps = {\n readonly active: boolean\n readonly bar: RenderedHistogramBin\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly showCounts: boolean\n}\n\nexport function HistogramChartBin({\n active,\n bar,\n onActivate,\n onDeactivate,\n showCounts,\n}: HistogramChartBinProps) {\n const renderCountLabel = ifElse(\n always(showCounts),\n () => <HistogramChartCountLabel bar={bar} />,\n always(null),\n )\n const activeClassName = ifElse(\n always(active),\n always('pristine-histogram-chart__bin--active'),\n always(''),\n )(active)\n const accessibleLabel = `${bar.label}: ${bar.count}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-histogram-chart__bin',\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <HistogramChartBar bar={bar} />\n {renderCountLabel()}\n </g>\n )\n}\n","import type { HistogramChartModel } from '../HistogramChart.model'\n\nimport { HistogramChartBin } from './HistogramChartBin'\n\ntype HistogramChartBinsProps = {\n readonly activeBin: string | null\n readonly chart: HistogramChartModel\n readonly onActivate: (bin: string) => void\n readonly onDeactivate: () => void\n readonly showCounts: boolean\n}\n\nconst getBinKey = (bar: HistogramChartModel['bars'][number]) =>\n `${bar.lowerBound}:${bar.upperBound}`\n\nexport function HistogramChartBins({\n activeBin,\n chart,\n onActivate,\n onDeactivate,\n showCounts,\n}: HistogramChartBinsProps) {\n return chart.bars.map((bar) => {\n const binKey = getBinKey(bar)\n\n return (\n <HistogramChartBin\n active={activeBin === binKey}\n bar={bar}\n key={binKey}\n onActivate={() => onActivate(binKey)}\n onDeactivate={onDeactivate}\n showCounts={showCounts}\n />\n )\n })\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartGridLinesProps = {\n readonly chart: HistogramChartModel\n readonly width: number\n}\n\nexport function HistogramChartGridLines({ chart, width }: HistogramChartGridLinesProps) {\n return chart.yTicks.map((tick) => (\n <g className=\"pristine-histogram-chart__grid-line\" key={tick}>\n <line\n x1={HISTOGRAM_CHART_MARGIN.left}\n x2={width - HISTOGRAM_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={HISTOGRAM_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {tick}\n </text>\n </g>\n ))\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartPlotAreaProps = {\n readonly chart: HistogramChartModel\n readonly width: number\n}\n\nexport function HistogramChartPlotArea({ chart, width }: HistogramChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-histogram-chart__plot\"\n x={HISTOGRAM_CHART_MARGIN.left}\n y={HISTOGRAM_CHART_MARGIN.top}\n width={width - HISTOGRAM_CHART_MARGIN.left - HISTOGRAM_CHART_MARGIN.right}\n height={chart.plotBottom - HISTOGRAM_CHART_MARGIN.top}\n />\n )\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\n\ntype HistogramChartTooltipProps = {\n readonly bar: RenderedHistogramBin\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 30\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function HistogramChartTooltip({\n bar,\n height,\n width,\n}: HistogramChartTooltipProps) {\n const label = String(bar.count)\n const tooltipWidth = getTooltipWidth(label)\n const labelY = Math.max(HISTOGRAM_CHART_MARGIN.top + 10, bar.y - 6)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n bar.x + bar.width / 2 - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n labelY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-histogram-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-histogram-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-histogram-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport { DEFAULT_HISTOGRAM_BIN_STRATEGY } from './HistogramChart.domain'\nimport type { HistogramBin, HistogramChartProps } from './HistogramChart.types'\n\nexport const formatIntegerOrDecimal = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatDefaultBinLabel = (bin: HistogramBin) =>\n `${formatIntegerOrDecimal(bin.lowerBound)}-${formatIntegerOrDecimal(bin.upperBound)}`\n\nexport const DEFAULT_HISTOGRAM_CHART_VIEW_PROPS = {\n binStrategy: DEFAULT_HISTOGRAM_BIN_STRATEGY,\n width: 480,\n height: 260,\n ariaLabel: 'Histogram chart',\n className: '',\n caption: none,\n showCounts: false,\n formatBinLabel: formatDefaultBinLabel,\n} satisfies Omit<HistogramChartProps, 'data'>\n","import { formatIntegerOrDecimal } from '../HistogramChart.defaults'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartXTicksProps = {\n readonly chart: HistogramChartModel\n readonly height: number\n}\n\nexport function HistogramChartXTicks({ chart, height }: HistogramChartXTicksProps) {\n return chart.xTicks.map((tick) => (\n <g className=\"pristine-histogram-chart__tick\" key={tick}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={chart.plotBottom}\n y2={chart.plotBottom + 4}\n />\n <text x={chart.xScale(tick)} y={height - 10} textAnchor=\"middle\">\n {formatIntegerOrDecimal(tick)}\n </text>\n </g>\n ))\n}\n","import { useState } from 'react'\n\nimport type { HistogramChartModel } from '../HistogramChart.model'\nimport type { HistogramChartProps } from '../HistogramChart.types'\n\nimport { HistogramChartAxes } from './HistogramChartAxes'\nimport { HistogramChartBins } from './HistogramChartBins'\nimport { HistogramChartGridLines } from './HistogramChartGridLines'\nimport { HistogramChartPlotArea } from './HistogramChartPlotArea'\nimport { HistogramChartTooltip } from './HistogramChartTooltip'\nimport { HistogramChartXTicks } from './HistogramChartXTicks'\n\ntype HistogramChartSvgProps = Pick<HistogramChartProps, 'ariaLabel' | 'height' | 'showCounts' | 'width'> & {\n readonly chart: HistogramChartModel\n}\n\nconst getBinKey = (bar: HistogramChartModel['bars'][number]) =>\n `${bar.lowerBound}:${bar.upperBound}`\n\nexport function HistogramChartSvg({\n ariaLabel,\n chart,\n height,\n showCounts,\n width,\n}: HistogramChartSvgProps) {\n const [activeBin, setActiveBin] = useState<string | null>(null)\n const activeBars = chart.bars.filter((bar) => getBinKey(bar) === activeBin)\n\n return (\n <svg\n className=\"pristine-histogram-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <HistogramChartPlotArea chart={chart} width={width} />\n <HistogramChartGridLines chart={chart} width={width} />\n <HistogramChartAxes chart={chart} width={width} />\n <HistogramChartBins\n activeBin={activeBin}\n chart={chart}\n onActivate={setActiveBin}\n onDeactivate={() => setActiveBin(null)}\n showCounts={showCounts}\n />\n <HistogramChartXTicks chart={chart} height={height} />\n {activeBars.map((bar) => (\n <HistogramChartTooltip\n key={getBinKey(bar)}\n bar={bar}\n height={height}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { HistogramChartModel } from '../HistogramChart.model'\nimport type { HistogramChartProps } from '../HistogramChart.types'\n\nimport { HistogramChartCaption } from './HistogramChartCaption'\nimport { HistogramChartSvg } from './HistogramChartSvg'\n\ntype HistogramChartFigureProps = Pick<\n HistogramChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'showCounts' | 'width'\n> & {\n readonly chart: HistogramChartModel\n}\n\nexport function HistogramChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n height,\n showCounts,\n width,\n}: HistogramChartFigureProps) {\n return (\n <figure className={classNames(['pristine-histogram-chart', className])} aria-label={ariaLabel}>\n <HistogramChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n height={height}\n showCounts={showCounts}\n width={width}\n />\n <HistogramChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeHistogram } from './HistogramChart.domain'\nimport { buildHistogramChartModel } from './HistogramChart.model'\nimport { HistogramChartFigure } from './components/HistogramChartFigure'\nimport type { HistogramChartProps } from './HistogramChart.types'\n\nexport function HistogramChart({\n data,\n binStrategy,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showCounts,\n formatBinLabel,\n}: HistogramChartProps) {\n const result = useMemo(\n () => computeHistogram({ data, binStrategy }),\n [binStrategy, data],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-histogram-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (bins) => {\n const chart = buildHistogramChartModel(bins, width, height, formatBinLabel)\n\n return (\n <HistogramChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n height={height}\n showCounts={showCounts}\n width={width}\n />\n )\n },\n })\n}\n","import { err, getOrElse, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport { allPass, always, complement, cond } from '../shared/fp'\n\nimport type {\n ChangeDirection,\n KPICardError,\n KPICardInput,\n KPICardResult,\n KPISummary,\n MetricPolarity,\n ValidatedKPICardInput,\n} from './KPICard.types'\n\ntype KPICardInputResult = Result<ValidatedKPICardInput, KPICardError>\ntype KPICardInputValidator = [\n (input: KPICardInput) => boolean,\n (input: KPICardInput) => KPICardInputResult,\n]\ntype ChangeDirectionContext = {\n readonly changeAmount: number\n readonly polarity: MetricPolarity\n}\ntype ChangeDirectionRule = [\n (context: ChangeDirectionContext) => boolean,\n (context: ChangeDirectionContext) => ChangeDirection,\n]\n\nexport const HIGHER_IS_BETTER: MetricPolarity = 'HigherIsBetter'\nexport const LOWER_IS_BETTER: MetricPolarity = 'LowerIsBetter'\nexport const DEFAULT_KPI_CARD_POLARITY: MetricPolarity = HIGHER_IS_BETTER\n\nconst kpiCardRules = {\n emptyMetricName: (): KPICardError => ({\n type: 'EmptyMetricName',\n message: 'A KPI card needs a non-empty metric name.',\n details: none,\n }),\n invalidCurrentValue: (currentValue: unknown): KPICardError => ({\n type: 'InvalidCurrentValue',\n message: 'KPI card current value must be a finite number.',\n details: some(`Invalid current value: ${String(currentValue)}.`),\n }),\n invalidReferenceValue: (referenceValue: unknown): KPICardError => ({\n type: 'InvalidReferenceValue',\n message: 'KPI card reference value must be a non-zero finite number.',\n details: some(`Invalid reference value: ${String(referenceValue)}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonZeroFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) !== 0,\n ])(value)\n\nconst isNonEmptyString = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'string',\n (candidate: unknown) => String(candidate).trim().length > 0,\n ])(value)\n\nconst hasValidMetricName = (input: KPICardInput) => isNonEmptyString(input.metricName)\n\nconst hasValidCurrentValue = (input: KPICardInput) => isFiniteNumber(input.currentValue)\n\nconst hasValidReferenceValue = (input: KPICardInput) =>\n isNonZeroFiniteNumber(input.referenceValue)\n\nconst toValidatedInput = (input: KPICardInput): ValidatedKPICardInput => ({\n metricName: String(input.metricName).trim(),\n currentValue: Number(input.currentValue),\n referenceValue: Number(input.referenceValue),\n polarity: getOrElse<MetricPolarity>(DEFAULT_KPI_CARD_POLARITY)(input.polarity),\n})\n\nconst inputValidators: KPICardInputValidator[] = [\n [\n complement(hasValidMetricName),\n () => err(kpiCardRules.emptyMetricName()),\n ],\n [\n complement(hasValidCurrentValue),\n (input: KPICardInput) => err(kpiCardRules.invalidCurrentValue(input.currentValue)),\n ],\n [\n complement(hasValidReferenceValue),\n (input: KPICardInput) => err(kpiCardRules.invalidReferenceValue(input.referenceValue)),\n ],\n [always(true), (input: KPICardInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateKPICardInput: (input: KPICardInput) => KPICardInputResult =\n cond(inputValidators)\n\nconst isHigherIsBetter = (polarity: MetricPolarity) => polarity === HIGHER_IS_BETTER\n\nconst isLowerIsBetter = (polarity: MetricPolarity) => polarity === LOWER_IS_BETTER\n\nconst isUnchanged = (context: ChangeDirectionContext) => context.changeAmount === 0\n\nconst isImprovedForHigherIsBetter = (context: ChangeDirectionContext) =>\n allPass([\n (candidate: ChangeDirectionContext) => isHigherIsBetter(candidate.polarity),\n (candidate: ChangeDirectionContext) => candidate.changeAmount > 0,\n ])(context)\n\nconst isImprovedForLowerIsBetter = (context: ChangeDirectionContext) =>\n allPass([\n (candidate: ChangeDirectionContext) => isLowerIsBetter(candidate.polarity),\n (candidate: ChangeDirectionContext) => candidate.changeAmount < 0,\n ])(context)\n\nconst changeDirectionRules: ChangeDirectionRule[] = [\n [isUnchanged, always('Unchanged')],\n [isImprovedForHigherIsBetter, always('Improved')],\n [isImprovedForLowerIsBetter, always('Improved')],\n [always(true), always('Declined')],\n]\n\nconst deriveChangeDirection: (context: ChangeDirectionContext) => ChangeDirection =\n cond(changeDirectionRules)\n\nconst computeChangeAmount = (input: ValidatedKPICardInput) =>\n input.currentValue - input.referenceValue\n\nconst computeChangePercentage = (\n changeAmount: number,\n input: ValidatedKPICardInput,\n) => (changeAmount / input.referenceValue) * 100\n\nconst toKPISummary = (input: ValidatedKPICardInput): KPISummary => {\n const changeAmount = computeChangeAmount(input)\n const changePercentage = computeChangePercentage(changeAmount, input)\n\n return {\n metricName: input.metricName,\n currentValue: input.currentValue,\n referenceValue: input.referenceValue,\n changeAmount,\n changePercentage,\n changeDirection: deriveChangeDirection({ changeAmount, polarity: input.polarity }),\n }\n}\n\nexport function computeKPICard(input: KPICardInput): KPICardResult {\n return mapResult<ValidatedKPICardInput, KPISummary, KPICardError>(toKPISummary)(\n validateKPICardInput(input),\n )\n}\n","import { ifElse } from '../shared/fp'\n\nimport type { ChangeDirection, KPISummary } from './KPICard.types'\n\nexport type KPICardModel = {\n readonly metricName: string\n readonly currentValueLabel: string\n readonly referenceValueLabel: string\n readonly changeAmountLabel: string\n readonly changePercentageLabel: string\n readonly changeDirection: ChangeDirection\n readonly changeDirectionLabel: string\n readonly changeDirectionClassName: string\n readonly comparisonLabel: string\n readonly changeLabel: string\n readonly summaryLabel: string\n}\n\nconst getChangeDirectionClassName = (direction: ChangeDirection) =>\n direction.toLowerCase()\n\nconst getComparisonParts = (comparisonLabel: string) =>\n ifElse(\n (candidate: string) => candidate.trim().length > 0,\n (candidate: string) => [candidate.trim()],\n () => [],\n )(comparisonLabel)\n\nconst joinLabels = (parts: readonly string[]) => parts.join(' ')\n\nexport const buildKPICardModel = (\n summary: KPISummary,\n comparisonLabel: string,\n formatValue: (value: number) => string,\n formatChangeAmount: (value: number) => string,\n formatChangePercentage: (percentage: number) => string,\n): KPICardModel => {\n const currentValueLabel = formatValue(summary.currentValue)\n const referenceValueLabel = formatValue(summary.referenceValue)\n const changeAmountLabel = formatChangeAmount(summary.changeAmount)\n const changePercentageLabel = formatChangePercentage(summary.changePercentage)\n const normalizedComparisonLabel = comparisonLabel.trim()\n const changeDirectionLabel = summary.changeDirection\n const changeLabel = joinLabels([\n changeDirectionLabel,\n changePercentageLabel,\n `(${changeAmountLabel})`,\n ...getComparisonParts(normalizedComparisonLabel),\n ])\n\n return {\n metricName: summary.metricName,\n currentValueLabel,\n referenceValueLabel,\n changeAmountLabel,\n changePercentageLabel,\n changeDirection: summary.changeDirection,\n changeDirectionLabel,\n changeDirectionClassName: getChangeDirectionClassName(summary.changeDirection),\n comparisonLabel: normalizedComparisonLabel,\n changeLabel,\n summaryLabel: joinLabels([\n `${summary.metricName}:`,\n `${currentValueLabel}.`,\n `${changeLabel}.`,\n `Reference value ${referenceValueLabel}.`,\n ]),\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { KPICardProps } from '../KPICard.types'\n\ntype KPICardCaptionProps = Pick<KPICardProps, 'caption'>\n\nexport function KPICardCaption({ caption }: KPICardCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (content) => (\n <figcaption className=\"pristine-kpi-card__caption\">{content}</figcaption>\n ),\n })\n}\n","import type { CSSProperties } from 'react'\n\nimport { classNames } from '@/shared'\n\nimport type { KPICardModel } from '../KPICard.model'\nimport type { KPICardProps } from '../KPICard.types'\n\nimport { KPICardCaption } from './KPICardCaption'\n\ntype KPICardStyle = CSSProperties & {\n readonly '--pristine-kpi-card-width': string\n readonly '--pristine-kpi-card-min-height': string\n}\n\ntype KPICardFigureProps = Pick<\n KPICardProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'width'\n> & {\n readonly kpi: KPICardModel\n}\n\nconst toCardStyle = (width: number, height: number): KPICardStyle => ({\n '--pristine-kpi-card-width': `${String(width)}px`,\n '--pristine-kpi-card-min-height': `${String(height)}px`,\n})\n\nexport function KPICardFigure({\n ariaLabel,\n caption,\n className,\n height,\n kpi,\n width,\n}: KPICardFigureProps) {\n const changeClassName = classNames([\n 'pristine-kpi-card__change',\n `pristine-kpi-card__change--${kpi.changeDirectionClassName}`,\n ])\n\n return (\n <figure\n className={classNames(['pristine-kpi-card', className])}\n aria-label={ariaLabel}\n style={toCardStyle(width, height)}\n >\n <div className=\"pristine-kpi-card__body\" role=\"group\" aria-label={kpi.summaryLabel}>\n <p className=\"pristine-kpi-card__metric\">{kpi.metricName}</p>\n <p className=\"pristine-kpi-card__value\">{kpi.currentValueLabel}</p>\n <p className={changeClassName} aria-label={kpi.changeLabel}>\n <span className=\"pristine-kpi-card__direction\">{kpi.changeDirectionLabel}</span>\n <span className=\"pristine-kpi-card__percentage\">\n {kpi.changePercentageLabel}\n </span>\n <span className=\"pristine-kpi-card__amount\">({kpi.changeAmountLabel})</span>\n <span className=\"pristine-kpi-card__comparison\">{kpi.comparisonLabel}</span>\n </p>\n </div>\n <KPICardCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeKPICard } from './KPICard.domain'\nimport { buildKPICardModel } from './KPICard.model'\nimport { KPICardFigure } from './components/KPICardFigure'\nimport type { KPICardProps } from './KPICard.types'\n\nexport function KPICard({\n metricName,\n currentValue,\n referenceValue,\n polarity,\n width,\n height,\n ariaLabel,\n className,\n caption,\n comparisonLabel,\n formatValue,\n formatChangeAmount,\n formatChangePercentage,\n}: KPICardProps) {\n const result = useMemo(\n () => computeKPICard({ metricName, currentValue, referenceValue, polarity }),\n [currentValue, metricName, polarity, referenceValue],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-kpi-card__error', className])}\n title=\"KPI unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const kpi = buildKPICardModel(\n summary,\n comparisonLabel,\n formatValue,\n formatChangeAmount,\n formatChangePercentage,\n )\n\n return (\n <KPICardFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n kpi={kpi}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { KPICardProps } from './KPICard.types'\n\nexport const formatKPICardNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatKPICardSignedNumber = (value: number) =>\n ifElse(\n (candidate: number) => candidate > 0,\n (candidate: number) => `+${formatKPICardNumber(candidate)}`,\n formatKPICardNumber,\n )(value)\n\nexport const formatKPICardPercentage = (percentage: number) =>\n `${formatKPICardSignedNumber(percentage)}%`\n\nexport const DEFAULT_KPI_CARD_VIEW_PROPS = {\n width: 360,\n height: 140,\n ariaLabel: 'KPI card',\n className: '',\n caption: none,\n polarity: none,\n comparisonLabel: 'vs reference',\n formatValue: formatKPICardNumber,\n formatChangeAmount: formatKPICardSignedNumber,\n formatChangePercentage: formatKPICardPercentage,\n} satisfies Omit<KPICardProps, 'metricName' | 'currentValue' | 'referenceValue'>\n","import { err, ok } from './result'\nimport type { Result } from './result'\nimport {\n all,\n allPass,\n always,\n aperture,\n complement,\n cond,\n defaultTo,\n findIndex,\n map,\n prop,\n} from './fp'\n\nexport type LinearSeriesCoordinateValue = number\n\nexport type LinearSeriesPoint = {\n readonly x: LinearSeriesCoordinateValue\n readonly y: LinearSeriesCoordinateValue\n}\n\nexport type ValidatedLinearSeriesPoint = LinearSeriesPoint\n\nexport type ValidatedLinearSeriesDataset = readonly ValidatedLinearSeriesPoint[]\n\nexport type SortedLinearSeriesDataset = readonly ValidatedLinearSeriesPoint[]\n\nexport type LinearSeriesSegment = {\n readonly start: ValidatedLinearSeriesPoint\n readonly end: ValidatedLinearSeriesPoint\n}\n\nexport type LinearSeriesErrorRules<TError> = {\n readonly insufficientPoints: () => TError\n readonly invalidXValue: (index: number) => TError\n readonly invalidYValue: (index: number) => TError\n readonly duplicateXValue: (x: number) => TError\n}\n\ntype DatasetResult<TError> = Result<ValidatedLinearSeriesDataset, TError>\ntype DatasetValidator<TError> = [\n (data: readonly LinearSeriesPoint[]) => boolean,\n (data: readonly LinearSeriesPoint[]) => DatasetResult<TError>,\n]\ntype SegmentPair = readonly [ValidatedLinearSeriesPoint, ValidatedLinearSeriesPoint]\n\nconst MINIMUM_POINT_COUNT = 2\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughPoints = (data: readonly LinearSeriesPoint[]) =>\n data.length >= MINIMUM_POINT_COUNT\n\nconst getXValues = (data: readonly LinearSeriesPoint[]) => map(prop('x'), [...data])\n\nconst getYValues = (data: readonly LinearSeriesPoint[]) => map(prop('y'), [...data])\n\nconst hasOnlyFiniteXValues = (data: readonly LinearSeriesPoint[]) =>\n all(isFiniteNumber, getXValues(data))\n\nconst hasOnlyFiniteYValues = (data: readonly LinearSeriesPoint[]) =>\n all(isFiniteNumber, getYValues(data))\n\nconst findInvalidXValueIndex = (data: readonly LinearSeriesPoint[]) =>\n findIndex(complement(isFiniteNumber), getXValues(data))\n\nconst findInvalidYValueIndex = (data: readonly LinearSeriesPoint[]) =>\n findIndex(complement(isFiniteNumber), getYValues(data))\n\nconst hasUniqueXValues = (data: readonly LinearSeriesPoint[]) => {\n const xValues = getXValues(data)\n\n return xValues.length === new Set(xValues).size\n}\n\nconst findDuplicateXValue = (data: readonly LinearSeriesPoint[]) => {\n const xValues = getXValues(data)\n\n return defaultTo(\n 0,\n xValues.find((xValue, index) => xValues.indexOf(xValue) !== index),\n )\n}\n\nconst byAscendingX = (\n left: ValidatedLinearSeriesPoint,\n right: ValidatedLinearSeriesPoint,\n) => left.x - right.x\n\nconst sortByX = (\n dataset: ValidatedLinearSeriesDataset,\n): SortedLinearSeriesDataset => [...dataset].sort(byAscendingX)\n\nconst isSegmentPair = (\n points: readonly ValidatedLinearSeriesPoint[],\n): points is SegmentPair => points.length === 2\n\nconst toLinearSeriesSegment = ([start, end]: SegmentPair): LinearSeriesSegment => ({\n start,\n end,\n})\n\nexport const validateLinearSeriesDataset = <TError>(\n data: readonly LinearSeriesPoint[],\n rules: LinearSeriesErrorRules<TError>,\n): DatasetResult<TError> => {\n const datasetValidators: DatasetValidator<TError>[] = [\n [complement(hasEnoughPoints), () => err(rules.insufficientPoints())],\n [\n complement(hasOnlyFiniteXValues),\n (candidate: readonly LinearSeriesPoint[]) =>\n err(rules.invalidXValue(findInvalidXValueIndex(candidate))),\n ],\n [\n complement(hasOnlyFiniteYValues),\n (candidate: readonly LinearSeriesPoint[]) =>\n err(rules.invalidYValue(findInvalidYValueIndex(candidate))),\n ],\n [\n complement(hasUniqueXValues),\n (candidate: readonly LinearSeriesPoint[]) =>\n err(rules.duplicateXValue(findDuplicateXValue(candidate))),\n ],\n [always(true), (candidate: readonly LinearSeriesPoint[]) => ok(candidate)],\n ]\n const validateDataset: (candidate: readonly LinearSeriesPoint[]) => DatasetResult<TError> =\n cond(datasetValidators)\n\n return validateDataset(data)\n}\n\nexport const computeLinearSeriesSegments = (\n dataset: ValidatedLinearSeriesDataset,\n): readonly LinearSeriesSegment[] =>\n map(toLinearSeriesSegment, aperture(2, sortByX(dataset)).filter(isSegmentPair))\n","import { mapResult, none, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n computeLinearSeriesSegments,\n validateLinearSeriesDataset,\n} from '../shared/linearSeries'\nimport type { LinearSeriesErrorRules } from '../shared/linearSeries'\n\nimport type {\n LineChartError,\n LineChartInput,\n LineChartResult,\n LineSegment,\n ValidatedDataset,\n ValidatedLineChartInput,\n} from './LineChart.types'\n\ntype LineChartInputResult = Result<ValidatedLineChartInput, LineChartError>\n\nconst lineChartRules: LinearSeriesErrorRules<LineChartError> = {\n insufficientPoints: (): LineChartError => ({\n type: 'InsufficientPoints',\n message: 'A line chart needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): LineChartError => ({\n type: 'InvalidXValue',\n message: 'Every line chart x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): LineChartError => ({\n type: 'InvalidYValue',\n message: 'Every line chart y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n duplicateXValue: (x: number): LineChartError => ({\n type: 'DuplicateXValue',\n message: 'Line chart x values must be unique.',\n details: some(`Duplicate x value: ${String(x)}.`),\n }),\n}\n\nexport function validateLineChartInput(input: LineChartInput): LineChartInputResult {\n return mapResult<ValidatedDataset, ValidatedLineChartInput, LineChartError>(\n (dataset) => ({ dataset }),\n )(validateLinearSeriesDataset(input.data, lineChartRules))\n}\n\nconst computeSegments = (input: ValidatedLineChartInput) =>\n computeLinearSeriesSegments(input.dataset)\n\nexport function computeLineChart(input: LineChartInput): LineChartResult {\n return mapResult<ValidatedLineChartInput, readonly LineSegment[], LineChartError>(\n computeSegments,\n )(validateLineChartInput(input))\n}\n","import { extent, line, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, defaultTo, identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { LineChartPoint, LineSegment } from './LineChart.types'\n\ntype ChartExtent = [number, number]\n\nexport const LINE_CHART_MARGIN = {\n top: 20,\n right: 18,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedLinePoint = LineChartPoint & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type RenderedLineSegment = {\n readonly start: RenderedLinePoint\n readonly end: RenderedLinePoint\n}\n\nexport type LineChartModel = {\n readonly plotBottom: number\n readonly points: readonly RenderedLinePoint[]\n readonly segments: readonly RenderedLineSegment[]\n readonly path: string\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst isFirstSegmentIndex = (index: number) => index === 0\n\nconst getPointsForSegment = (segment: LineSegment) => (index: number) =>\n ifElse(\n isFirstSegmentIndex,\n always([segment.start, segment.end]),\n always([segment.end]),\n )(index)\n\nconst getPointsFromSegments = (segments: readonly LineSegment[]) =>\n segments.flatMap((segment, index) => getPointsForSegment(segment)(index))\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst renderLinePath = (points: readonly RenderedLinePoint[]) =>\n defaultTo(\n '',\n line<RenderedLinePoint>()\n .x((point) => point.cx)\n .y((point) => point.cy)(points),\n )\n\nconst getXExtent = (points: readonly LineChartPoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...points])))\n\nconst getYExtent = (points: readonly LineChartPoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('y'), [...points])))\n\nexport const buildLineChartModel = (\n segments: readonly LineSegment[],\n width: number,\n height: number,\n): LineChartModel => {\n const plotBottom = height - LINE_CHART_MARGIN.bottom\n const points = getPointsFromSegments(segments)\n const xScale = scaleLinear()\n .domain(getXExtent(points))\n .nice()\n .range([LINE_CHART_MARGIN.left, width - LINE_CHART_MARGIN.right])\n const yScale = scaleLinear()\n .domain(getYExtent(points))\n .nice()\n .range([plotBottom, LINE_CHART_MARGIN.top])\n const toRenderedPoint = (point: LineChartPoint): RenderedLinePoint => ({\n ...point,\n cx: xScale(point.x),\n cy: yScale(point.y),\n })\n const renderedPoints = map(toRenderedPoint, [...points])\n const renderedPath = renderLinePath(renderedPoints)\n const toRenderedSegment = (segment: LineSegment): RenderedLineSegment => ({\n start: toRenderedPoint(segment.start),\n end: toRenderedPoint(segment.end),\n })\n\n return {\n plotBottom,\n points: renderedPoints,\n segments: map(toRenderedSegment, [...segments]),\n path: renderedPath,\n xTicks: xScale.ticks(Math.min(6, points.length)),\n yTicks: yScale.ticks(5),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { LineChartProps } from '../LineChart.types'\n\nexport function LineChartCaption({ caption }: Pick<LineChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-line-chart__caption\">{text}</figcaption>,\n })\n}\n","import { LINE_CHART_MARGIN } from '../LineChart.model'\nimport type { LineChartModel } from '../LineChart.model'\n\ntype LineChartAxesProps = {\n readonly chart: LineChartModel\n readonly width: number\n}\n\nexport function LineChartAxes({ chart, width }: LineChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-line-chart__axis\"\n x1={LINE_CHART_MARGIN.left}\n x2={width - LINE_CHART_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-line-chart__axis\"\n x1={LINE_CHART_MARGIN.left}\n x2={LINE_CHART_MARGIN.left}\n y1={LINE_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { LINE_CHART_MARGIN } from '../LineChart.model'\nimport type { LineChartModel } from '../LineChart.model'\n\ntype LineChartGridLinesProps = {\n readonly chart: LineChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nexport function LineChartGridLines({\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: LineChartGridLinesProps) {\n return (\n <>\n {chart.yTicks.map((tick) => (\n <g className=\"pristine-line-chart__grid-line\" key={`y:${tick}`}>\n <line\n x1={LINE_CHART_MARGIN.left}\n x2={width - LINE_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={LINE_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {formatYValue(tick)}\n </text>\n </g>\n ))}\n {chart.xTicks.map((tick) => (\n <g className=\"pristine-line-chart__grid-line\" key={`x:${tick}`}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={LINE_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n <text\n x={chart.xScale(tick)}\n y={height - LINE_CHART_MARGIN.bottom + 20}\n textAnchor=\"middle\"\n >\n {formatXValue(tick)}\n </text>\n </g>\n ))}\n </>\n )\n}\n","import type { LineChartModel } from '../LineChart.model'\n\ntype LineChartPathProps = {\n readonly chart: LineChartModel\n}\n\nexport function LineChartPath({ chart }: LineChartPathProps) {\n return <path className=\"pristine-line-chart__path\" d={chart.path} aria-hidden=\"true\" />\n}\n","import { LINE_CHART_MARGIN } from '../LineChart.model'\nimport type { LineChartModel } from '../LineChart.model'\n\ntype LineChartPlotAreaProps = {\n readonly chart: LineChartModel\n readonly width: number\n}\n\nexport function LineChartPlotArea({ chart, width }: LineChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-line-chart__plot\"\n x={LINE_CHART_MARGIN.left}\n y={LINE_CHART_MARGIN.top}\n width={width - LINE_CHART_MARGIN.left - LINE_CHART_MARGIN.right}\n height={chart.plotBottom - LINE_CHART_MARGIN.top}\n />\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedLinePoint } from '../LineChart.model'\n\ntype LineChartPointMarkerProps = {\n readonly active: boolean\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly point: RenderedLinePoint\n readonly showPoints: boolean\n}\n\nexport function LineChartPointMarker({\n active,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n point,\n showPoints,\n}: LineChartPointMarkerProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-line-chart__point--active'),\n always(''),\n )(active)\n const visibleClassName = ifElse(\n always(showPoints),\n always('pristine-line-chart__point--visible'),\n always(''),\n )(showPoints)\n const accessibleLabel = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-line-chart__point',\n activeClassName,\n visibleClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-line-chart__point-hit-area\"\n cx={point.cx}\n cy={point.cy}\n r={10}\n />\n <circle\n className=\"pristine-line-chart__point-dot\"\n cx={point.cx}\n cy={point.cy}\n r={3.6}\n />\n </g>\n )\n}\n","import type { LineChartModel } from '../LineChart.model'\n\nimport { LineChartPointMarker } from './LineChartPointMarker'\n\ntype LineChartPointsProps = {\n readonly activeXValue: number | null\n readonly chart: LineChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: (xValue: number) => void\n readonly onDeactivate: () => void\n readonly showPoints: boolean\n}\n\nexport function LineChartPoints({\n activeXValue,\n chart,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n showPoints,\n}: LineChartPointsProps) {\n return chart.points.map((point) => (\n <LineChartPointMarker\n active={activeXValue === point.x}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n key={point.x}\n onActivate={() => onActivate(point.x)}\n onDeactivate={onDeactivate}\n point={point}\n showPoints={showPoints}\n />\n ))\n}\n","import type { RenderedLinePoint } from '../LineChart.model'\n\ntype LineChartTooltipProps = {\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly point: RenderedLinePoint\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function LineChartTooltip({\n formatXValue,\n formatYValue,\n height,\n point,\n width,\n}: LineChartTooltipProps) {\n const label = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n point.cx - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n point.cy - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-line-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-line-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-line-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { LineChartModel } from '../LineChart.model'\nimport type { LineChartProps } from '../LineChart.types'\n\nimport { LineChartAxes } from './LineChartAxes'\nimport { LineChartGridLines } from './LineChartGridLines'\nimport { LineChartPath } from './LineChartPath'\nimport { LineChartPlotArea } from './LineChartPlotArea'\nimport { LineChartPoints } from './LineChartPoints'\nimport { LineChartTooltip } from './LineChartTooltip'\n\ntype LineChartSvgProps = Pick<\n LineChartProps,\n 'ariaLabel' | 'formatXValue' | 'formatYValue' | 'height' | 'showPoints' | 'width'\n> & {\n readonly chart: LineChartModel\n}\n\nexport function LineChartSvg({\n ariaLabel,\n chart,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: LineChartSvgProps) {\n const [activeXValue, setActiveXValue] = useState<number | null>(null)\n const activePoints = chart.points.filter((point) => point.x === activeXValue)\n\n return (\n <svg\n className=\"pristine-line-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <LineChartPlotArea chart={chart} width={width} />\n <LineChartGridLines\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <LineChartAxes chart={chart} width={width} />\n <LineChartPath chart={chart} />\n <LineChartPoints\n activeXValue={activeXValue}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n onActivate={setActiveXValue}\n onDeactivate={() => setActiveXValue(null)}\n showPoints={showPoints}\n />\n {activePoints.map((point) => (\n <LineChartTooltip\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n key={point.x}\n point={point}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { LineChartModel } from '../LineChart.model'\nimport type { LineChartProps } from '../LineChart.types'\n\nimport { LineChartCaption } from './LineChartCaption'\nimport { LineChartSvg } from './LineChartSvg'\n\ntype LineChartFigureProps = Pick<\n LineChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatXValue'\n | 'formatYValue'\n | 'height'\n | 'showPoints'\n | 'width'\n> & {\n readonly chart: LineChartModel\n}\n\nexport function LineChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: LineChartFigureProps) {\n return (\n <figure className={classNames(['pristine-line-chart', className])} aria-label={ariaLabel}>\n <LineChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n <LineChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeLineChart } from './LineChart.domain'\nimport { buildLineChartModel } from './LineChart.model'\nimport type { LineChartProps } from './LineChart.types'\nimport { LineChartFigure } from './components/LineChartFigure'\n\nexport function LineChart({\n ariaLabel,\n caption,\n className,\n data,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: LineChartProps) {\n const result = useMemo(() => computeLineChart({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-line-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (segments) => {\n const chart = buildLineChartModel(segments, width, height)\n\n return (\n <LineChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { LineChartProps } from './LineChart.types'\n\nexport const formatLineChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_LINE_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Line chart',\n className: '',\n caption: none,\n showPoints: true,\n formatXValue: formatLineChartNumber,\n formatYValue: formatLineChartNumber,\n} satisfies Omit<LineChartProps, 'data'>\n","import { bindResult, err, getOrElse, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n ifElse,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n Arc,\n ChartVariant,\n DonutChartVariant,\n PieDonutChartError,\n PieDonutChartInput,\n PieDonutChartResult,\n SegmentedWhole,\n Slice,\n ValidatedChartVariant,\n ValidatedDataset,\n ValidatedPieDonutChartInput,\n} from './PieDonutChart.types'\n\ntype DatasetResult = Result<ValidatedDataset, PieDonutChartError>\ntype VariantResult = Result<ValidatedChartVariant, PieDonutChartError>\ntype PieDonutChartInputResult = Result<ValidatedPieDonutChartInput, PieDonutChartError>\ntype DatasetValidator = [\n (data: readonly Slice[]) => boolean,\n (data: readonly Slice[]) => DatasetResult,\n]\ntype VariantValidator = [\n (variant: ChartVariant) => boolean,\n (variant: ChartVariant) => VariantResult,\n]\n\nconst MINIMUM_SLICE_COUNT = 2\nconst TAU = Math.PI * 2\n\nexport const DEFAULT_PIE_DONUT_CHART_VARIANT: ChartVariant = {\n kind: 'pie',\n}\n\nconst pieDonutChartRules = {\n insufficientSlices: (): PieDonutChartError => ({\n type: 'InsufficientSlices',\n message: 'A pie or donut chart needs at least two slices.',\n details: none,\n }),\n nonPositiveValue: (category: string): PieDonutChartError => ({\n type: 'NonPositiveValue',\n message: 'Every pie or donut chart value must be a positive finite number.',\n details: some(`Invalid value for category: ${category}.`),\n }),\n duplicateCategory: (category: string): PieDonutChartError => ({\n type: 'DuplicateCategory',\n message: 'Pie and donut chart categories must be unique.',\n details: some(`Duplicate category: ${category}.`),\n }),\n emptyCategoryName: (index: number): PieDonutChartError => ({\n type: 'EmptyCategoryName',\n message: 'Every pie or donut chart category needs a non-empty name.',\n details: some(`Empty category at index ${String(index)}.`),\n }),\n invalidInnerRadius: (innerRadius: unknown): PieDonutChartError => ({\n type: 'InvalidInnerRadius',\n message: 'A donut chart inner radius must be greater than 0 and less than 1.',\n details: some(`Invalid inner radius: ${String(innerRadius)}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isPositiveFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) > 0,\n ])(value)\n\nconst isNonEmptyString = (value: string) => value.trim().length > 0\n\nconst hasEnoughSlices = (data: readonly Slice[]) => data.length >= MINIMUM_SLICE_COUNT\n\nconst getCategories = (data: readonly Slice[]) => map(prop('category'), [...data])\n\nconst getValues = (data: readonly Slice[]) => map(prop('value'), [...data])\n\nconst hasOnlyNamedCategories = (data: readonly Slice[]) =>\n all(isNonEmptyString, getCategories(data))\n\nconst findEmptyCategoryIndex = (data: readonly Slice[]) =>\n findIndex(complement(isNonEmptyString), getCategories(data))\n\nconst hasOnlyPositiveFiniteValues = (data: readonly Slice[]) =>\n all(isPositiveFiniteNumber, getValues(data))\n\nconst findInvalidValueCategory = (data: readonly Slice[]) =>\n defaultTo(\n 'unknown category',\n data.find((slice) => complement(isPositiveFiniteNumber)(slice.value))?.category,\n )\n\nconst hasUniqueCategories = (data: readonly Slice[]) => {\n const categories = getCategories(data)\n\n return categories.length === new Set(categories).size\n}\n\nconst findDuplicateCategory = (data: readonly Slice[]) => {\n const categories = getCategories(data)\n\n return defaultTo(\n 'unknown category',\n categories.find((category, index) => categories.indexOf(category) !== index),\n )\n}\n\nconst isDonutVariant = (variant: ChartVariant): variant is DonutChartVariant =>\n variant.kind === 'donut'\n\nconst hasValidDonutInnerRadius = allPass([\n (candidate: DonutChartVariant) => isFiniteNumber(candidate.innerRadius),\n (candidate: DonutChartVariant) => candidate.innerRadius > 0,\n (candidate: DonutChartVariant) => candidate.innerRadius < 1,\n])\n\nconst hasValidInnerRadius = (variant: ChartVariant) =>\n ifElse(\n isDonutVariant,\n hasValidDonutInnerRadius,\n always(true),\n )(variant)\n\nconst getInvalidInnerRadius = (variant: ChartVariant) =>\n ifElse(\n isDonutVariant,\n (candidate: DonutChartVariant) => candidate.innerRadius,\n always(undefined),\n )(variant)\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughSlices), () => err(pieDonutChartRules.insufficientSlices())],\n [\n complement(hasOnlyNamedCategories),\n (candidate: readonly Slice[]) =>\n err(pieDonutChartRules.emptyCategoryName(findEmptyCategoryIndex(candidate))),\n ],\n [\n complement(hasOnlyPositiveFiniteValues),\n (candidate: readonly Slice[]) =>\n err(pieDonutChartRules.nonPositiveValue(findInvalidValueCategory(candidate))),\n ],\n [\n complement(hasUniqueCategories),\n (candidate: readonly Slice[]) =>\n err(pieDonutChartRules.duplicateCategory(findDuplicateCategory(candidate))),\n ],\n [always(true), (candidate: readonly Slice[]) => ok(candidate)],\n]\n\nconst variantValidators: VariantValidator[] = [\n [\n complement(hasValidInnerRadius),\n (candidate: ChartVariant) =>\n err(pieDonutChartRules.invalidInnerRadius(getInvalidInnerRadius(candidate))),\n ],\n [always(true), (candidate: ChartVariant) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly Slice[]) => DatasetResult = cond(datasetValidators)\n\nconst validateVariant: (variant: ChartVariant) => VariantResult = cond(variantValidators)\n\nconst toEffectiveVariant = getOrElse<ChartVariant>(DEFAULT_PIE_DONUT_CHART_VARIANT)\n\nexport function validatePieDonutChartInput(\n input: PieDonutChartInput,\n): PieDonutChartInputResult {\n return bindResult<\n { readonly dataset: ValidatedDataset },\n ValidatedChartVariant,\n ValidatedPieDonutChartInput,\n PieDonutChartError\n >(\n () => validateVariant(toEffectiveVariant(input.variant)),\n (context, variant) => ({ ...context, variant }),\n )(\n bindResult<object, ValidatedDataset, { readonly dataset: ValidatedDataset }, PieDonutChartError>(\n () => validateDataset(input.data),\n (_, dataset) => ({ dataset }),\n )(ok({})),\n )\n}\n\nconst sumValues = (data: readonly Slice[]) =>\n data.reduce((total, slice) => total + slice.value, 0)\n\nconst toArc = (total: number) => (\n context: { readonly arcs: readonly Arc[]; readonly angle: number },\n slice: Slice,\n) => {\n const proportion = slice.value / total\n const startAngle = context.angle\n const endAngle = startAngle + proportion * TAU\n\n return {\n arcs: [\n ...context.arcs,\n {\n ...slice,\n proportion,\n startAngle,\n endAngle,\n },\n ],\n angle: endAngle,\n }\n}\n\nconst computeSegmentedWhole = (input: ValidatedPieDonutChartInput): SegmentedWhole => {\n const total = sumValues(input.dataset)\n const arcs = input.dataset.reduce(toArc(total), { arcs: [], angle: 0 }).arcs\n\n return {\n arcs,\n total,\n variant: input.variant,\n }\n}\n\nexport function computePieDonutChart(input: PieDonutChartInput): PieDonutChartResult {\n return mapResult<ValidatedPieDonutChartInput, SegmentedWhole, PieDonutChartError>(\n computeSegmentedWhole,\n )(validatePieDonutChartInput(input))\n}\n","import { arc as createArc } from 'd3'\n\nimport { always, cond, defaultTo, ifElse } from '../shared/fp'\n\nimport type { Arc, DonutChartVariant, SegmentedWhole } from './PieDonutChart.types'\n\nexport const PIE_DONUT_CHART_MARGIN = {\n top: 28,\n right: 28,\n bottom: 28,\n left: 28,\n}\n\nconst LABEL_GUTTER = 26 \nconst LABEL_GAP = 12\nconst MINIMUM_LABEL_PROPORTION = 0.04\n\ntype TextAnchor = 'start' | 'middle' | 'end'\n\nexport type RenderedArc = Arc & {\n readonly colorIndex: number\n readonly path: string\n readonly labelX: number\n readonly labelY: number\n readonly labelAnchor: TextAnchor\n readonly showLabel: boolean\n readonly tooltipX: number\n readonly tooltipY: number\n}\n\nexport type PieDonutChartModel = {\n readonly arcs: readonly RenderedArc[]\n readonly centerX: number\n readonly centerY: number\n readonly innerRadius: number\n readonly outerRadius: number\n readonly total: number\n readonly variantKind: 'pie' | 'donut'\n}\n\nconst getPlotWidth = (width: number) =>\n Math.max(0, width - PIE_DONUT_CHART_MARGIN.left - PIE_DONUT_CHART_MARGIN.right)\n\nconst getPlotHeight = (height: number) =>\n Math.max(0, height - PIE_DONUT_CHART_MARGIN.top - PIE_DONUT_CHART_MARGIN.bottom)\n\nconst getOuterRadius = (width: number, height: number) =>\n Math.max(0, Math.min(getPlotWidth(width), getPlotHeight(height)) / 2 - LABEL_GUTTER)\n\ntype DonutSegmentedWhole = SegmentedWhole & {\n readonly variant: DonutChartVariant\n}\n\nconst isDonutWhole = (whole: SegmentedWhole): whole is DonutSegmentedWhole =>\n whole.variant.kind === 'donut'\n\nconst getInnerRadius = (whole: SegmentedWhole, outerRadius: number) =>\n ifElse(\n isDonutWhole,\n (candidate: DonutSegmentedWhole) => outerRadius * candidate.variant.innerRadius,\n always(0),\n )(whole)\n\nconst getPolarPoint = (radius: number, angle: number) => ({\n x: Math.sin(angle) * radius,\n y: -Math.cos(angle) * radius,\n})\n\nconst getMidAngle = (arc: Arc) => (arc.startAngle + arc.endAngle) / 2\n\nconst isCloseToCenter = (x: number) => Math.abs(x) < 8\n\nconst getLabelAnchor: (x: number) => TextAnchor = cond([\n [isCloseToCenter, always('middle')],\n [(candidate: number) => candidate > 0, always('start')],\n [always(true), always('end')],\n])\n\nconst renderArcPath = (innerRadius: number, outerRadius: number) => (arc: Arc) =>\n defaultTo(\n '',\n createArc<Arc>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle((segment) => segment.startAngle)\n .endAngle((segment) => segment.endAngle)(arc),\n )\n\nexport const buildPieDonutChartModel = (\n whole: SegmentedWhole,\n width: number,\n height: number,\n): PieDonutChartModel => {\n const centerX = width / 2\n const centerY = height / 2\n const outerRadius = getOuterRadius(width, height)\n const innerRadius = getInnerRadius(whole, outerRadius)\n const arcPath = renderArcPath(innerRadius, outerRadius)\n const toRenderedArc = (arc: Arc, index: number): RenderedArc => {\n const midAngle = getMidAngle(arc)\n const labelPoint = getPolarPoint(outerRadius + LABEL_GAP, midAngle)\n const tooltipPoint = getPolarPoint((innerRadius + outerRadius) / 2, midAngle)\n\n return {\n ...arc,\n colorIndex: index % 8,\n path: arcPath(arc),\n labelX: labelPoint.x,\n labelY: labelPoint.y,\n labelAnchor: getLabelAnchor(labelPoint.x),\n showLabel: arc.proportion >= MINIMUM_LABEL_PROPORTION,\n tooltipX: centerX + tooltipPoint.x,\n tooltipY: centerY + tooltipPoint.y,\n }\n }\n\n return {\n arcs: whole.arcs.map(toRenderedArc),\n centerX,\n centerY,\n innerRadius,\n outerRadius,\n total: whole.total,\n variantKind: whole.variant.kind,\n }\n}\n","import { matchOption } from '@/shared'\nimport type { PieDonutChartProps } from '../PieDonutChart.types'\n\ntype PieDonutChartCaptionProps = Pick<PieDonutChartProps, 'caption'>\n\nexport function PieDonutChartCaption({ caption }: PieDonutChartCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-pie-donut-chart__caption\">{text}</figcaption>,\n })\n}\n","import { always, ifElse } from '@/shared/fp'\nimport type { PieDonutChartModel, RenderedArc } from '../PieDonutChart.model'\n\ntype PieDonutChartLabelsProps = {\n readonly chart: PieDonutChartModel\n readonly formatPercentage: (proportion: number) => string\n readonly showLabels: boolean\n}\n\nconst renderLabel = (formatPercentage: (proportion: number) => string) => (arc: RenderedArc) =>\n ifElse(\n (candidate: RenderedArc) => candidate.showLabel,\n (candidate: RenderedArc) => (\n <text\n className=\"pristine-pie-donut-chart__label\"\n key={candidate.category}\n x={candidate.labelX}\n y={candidate.labelY}\n textAnchor={candidate.labelAnchor}\n >\n <tspan x={candidate.labelX} dy=\"-0.3em\">\n {candidate.category}\n </tspan>\n <tspan x={candidate.labelX} dy=\"1.2em\">\n {formatPercentage(candidate.proportion)}\n </tspan>\n </text>\n ),\n always(null),\n )(arc)\n\nexport function PieDonutChartLabels({\n chart,\n formatPercentage,\n showLabels,\n}: PieDonutChartLabelsProps) {\n return ifElse(\n (candidate: boolean) => candidate,\n () => <g aria-hidden=\"true\">{chart.arcs.map(renderLabel(formatPercentage))}</g>,\n always(null),\n )(showLabels)\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedArc } from '../PieDonutChart.model'\n\ntype PieDonutChartSliceProps = {\n readonly active: boolean\n readonly arc: RenderedArc\n readonly formatPercentage: (proportion: number) => string\n readonly formatValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n}\n\nexport function PieDonutChartSlice({\n active,\n arc,\n formatPercentage,\n formatValue,\n onActivate,\n onDeactivate,\n}: PieDonutChartSliceProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-pie-donut-chart__slice--active'),\n always(''),\n )(active)\n const accessibleLabel = `${arc.category}: ${formatValue(arc.value)} (${formatPercentage(\n arc.proportion,\n )})`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-pie-donut-chart__slice',\n `pristine-pie-donut-chart__slice--tone-${String(arc.colorIndex)}`,\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <path className=\"pristine-pie-donut-chart__slice-path\" d={arc.path} />\n </g>\n )\n}\n","import type { PieDonutChartModel } from '../PieDonutChart.model'\n\nimport { PieDonutChartSlice } from './PieDonutChartSlice'\n\ntype PieDonutChartSlicesProps = {\n readonly activeCategory: string | null\n readonly chart: PieDonutChartModel\n readonly formatPercentage: (proportion: number) => string\n readonly formatValue: (value: number) => string\n readonly onActivate: (category: string) => void\n readonly onDeactivate: () => void\n}\n\nexport function PieDonutChartSlices({\n activeCategory,\n chart,\n formatPercentage,\n formatValue,\n onActivate,\n onDeactivate,\n}: PieDonutChartSlicesProps) {\n return chart.arcs.map((arc) => (\n <PieDonutChartSlice\n active={activeCategory === arc.category}\n arc={arc}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n key={arc.category}\n onActivate={() => onActivate(arc.category)}\n onDeactivate={onDeactivate}\n />\n ))\n}\n","import type { RenderedArc } from '../PieDonutChart.model'\n\ntype PieDonutChartTooltipProps = {\n readonly arc: RenderedArc\n readonly formatPercentage: (proportion: number) => string\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function PieDonutChartTooltip({\n arc,\n formatPercentage,\n formatValue,\n height,\n width,\n}: PieDonutChartTooltipProps) {\n const label = `${arc.category}: ${formatValue(arc.value)} (${formatPercentage(arc.proportion)})`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n arc.tooltipX - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n arc.tooltipY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-pie-donut-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-pie-donut-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-pie-donut-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { PieDonutChartModel } from '../PieDonutChart.model'\nimport type { PieDonutChartProps } from '../PieDonutChart.types'\n\nimport { PieDonutChartLabels } from './PieDonutChartLabels'\nimport { PieDonutChartSlices } from './PieDonutChartSlices'\nimport { PieDonutChartTooltip } from './PieDonutChartTooltip'\n\ntype PieDonutChartSvgProps = Pick<\n PieDonutChartProps,\n 'ariaLabel' | 'formatPercentage' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: PieDonutChartModel\n}\n\nexport function PieDonutChartSvg({\n ariaLabel,\n chart,\n formatPercentage,\n formatValue,\n height,\n showLabels,\n width,\n}: PieDonutChartSvgProps) {\n const [activeCategory, setActiveCategory] = useState<string | null>(null)\n const activeArcs = chart.arcs.filter((arc) => arc.category === activeCategory)\n\n return (\n <svg\n className=\"pristine-pie-donut-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <g transform={`translate(${chart.centerX} ${chart.centerY})`}>\n <PieDonutChartSlices\n activeCategory={activeCategory}\n chart={chart}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n onActivate={setActiveCategory}\n onDeactivate={() => setActiveCategory(null)}\n />\n <PieDonutChartLabels\n chart={chart}\n formatPercentage={formatPercentage}\n showLabels={showLabels}\n />\n </g>\n {activeArcs.map((arc) => (\n <PieDonutChartTooltip\n arc={arc}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n key={arc.category}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { PieDonutChartModel } from '../PieDonutChart.model'\nimport type { PieDonutChartProps } from '../PieDonutChart.types'\n\nimport { PieDonutChartCaption } from './PieDonutChartCaption'\nimport { PieDonutChartSvg } from './PieDonutChartSvg'\n\ntype PieDonutChartFigureProps = Pick<\n PieDonutChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatPercentage'\n | 'formatValue'\n | 'height'\n | 'showLabels'\n | 'width'\n> & {\n readonly chart: PieDonutChartModel\n}\n\nexport function PieDonutChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatPercentage,\n formatValue,\n height,\n showLabels,\n width,\n}: PieDonutChartFigureProps) {\n return (\n <figure className={classNames(['pristine-pie-donut-chart', className])} aria-label={ariaLabel}>\n <PieDonutChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n <PieDonutChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computePieDonutChart } from './PieDonutChart.domain'\nimport { buildPieDonutChartModel } from './PieDonutChart.model'\nimport type { PieDonutChartProps } from './PieDonutChart.types'\nimport { PieDonutChartFigure } from './components/PieDonutChartFigure'\n\nexport function PieDonutChart({\n ariaLabel,\n caption,\n className,\n data,\n formatPercentage,\n formatValue,\n height,\n showLabels,\n variant,\n width,\n}: PieDonutChartProps) {\n const result = useMemo(() => computePieDonutChart({ data, variant }), [data, variant])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-pie-donut-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (whole) => {\n const chart = buildPieDonutChartModel(whole, width, height)\n\n return (\n <PieDonutChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { PieDonutChartProps } from './PieDonutChart.types'\n\nexport const formatPieDonutChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatPieDonutChartPercentage = (proportion: number) =>\n `${formatPieDonutChartNumber(proportion * 100)}%`\n\nexport const DEFAULT_PIE_DONUT_CHART_VIEW_PROPS = {\n width: 360,\n height: 320,\n ariaLabel: 'Pie chart',\n className: '',\n caption: none,\n variant: none,\n showLabels: true,\n formatValue: formatPieDonutChartNumber,\n formatPercentage: formatPieDonutChartPercentage,\n} satisfies Omit<PieDonutChartProps, 'data'>\n","import { err, mapResult, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport { allPass, always, complement, cond } from '../shared/fp'\n\nimport type {\n ProgressBarError,\n ProgressBarInput,\n ProgressBarResult,\n ValidatedProgressBarInput,\n} from './ProgressBar.types'\n\ntype ProgressBarInputResult = Result<ValidatedProgressBarInput, ProgressBarError>\ntype ProgressBarInputValidator = [\n (input: ProgressBarInput) => boolean,\n (input: ProgressBarInput) => ProgressBarInputResult,\n]\n\nconst progressBarRules = {\n invalidCurrentValue: (currentValue: unknown): ProgressBarError => ({\n type: 'InvalidCurrentValue',\n message: 'Progress bar current value must be a finite number greater than or equal to zero.',\n details: some(`Invalid current value: ${String(currentValue)}.`),\n }),\n invalidTotal: (total: unknown): ProgressBarError => ({\n type: 'InvalidTotal',\n message: 'Progress bar total must be a positive finite number.',\n details: some(`Invalid total: ${String(total)}.`),\n }),\n currentExceedsTotal: (input: ValidatedProgressBarInput): ProgressBarError => ({\n type: 'CurrentExceedsTotal',\n message: 'Progress bar current value cannot exceed the total.',\n details: some(\n `Current value ${String(input.currentValue)} exceeds total ${String(input.total)}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonNegativeFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) >= 0,\n ])(value)\n\nconst isPositiveFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) > 0,\n ])(value)\n\nconst hasValidCurrentValue = (input: ProgressBarInput) =>\n isNonNegativeFiniteNumber(input.currentValue)\n\nconst hasValidTotal = (input: ProgressBarInput) => isPositiveFiniteNumber(input.total)\n\nconst toValidatedInput = (input: ProgressBarInput): ValidatedProgressBarInput => ({\n currentValue: Number(input.currentValue),\n total: Number(input.total),\n})\n\nconst currentExceedsTotal = (input: ValidatedProgressBarInput) =>\n input.currentValue > input.total\n\nconst inputValidators: ProgressBarInputValidator[] = [\n [\n complement(hasValidCurrentValue),\n (input: ProgressBarInput) => err(progressBarRules.invalidCurrentValue(input.currentValue)),\n ],\n [\n complement(hasValidTotal),\n (input: ProgressBarInput) => err(progressBarRules.invalidTotal(input.total)),\n ],\n [\n (input: ProgressBarInput) => currentExceedsTotal(toValidatedInput(input)),\n (input: ProgressBarInput) => err(progressBarRules.currentExceedsTotal(toValidatedInput(input))),\n ],\n [always(true), (input: ProgressBarInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateProgressBarInput: (\n input: ProgressBarInput\n) => ProgressBarInputResult = cond(inputValidators)\n\nconst computeRatio = (input: ValidatedProgressBarInput) => input.currentValue / input.total\n\nexport function computeProgressBar(input: ProgressBarInput): ProgressBarResult {\n return mapResult<ValidatedProgressBarInput, number, ProgressBarError>(computeRatio)(\n validateProgressBarInput(input),\n )\n}\n","export const PROGRESS_BAR_MARGIN = {\n top: 30,\n right: 16,\n bottom: 18,\n left: 16,\n}\n\nexport type ProgressBarModel = {\n readonly currentValue: number\n readonly total: number\n readonly ratio: number\n readonly trackX: number\n readonly trackY: number\n readonly trackWidth: number\n readonly trackHeight: number\n readonly trackRadius: number\n readonly fillWidth: number\n readonly valueLabel: string\n readonly percentageLabel: string\n readonly labelY: number\n}\n\nconst TRACK_HEIGHT = 18\n\nexport const buildProgressBarModel = (\n currentValue: number,\n total: number,\n ratio: number,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n formatPercentage: (ratio: number) => string,\n): ProgressBarModel => {\n const trackWidth = width - PROGRESS_BAR_MARGIN.left - PROGRESS_BAR_MARGIN.right\n const trackHeight = Math.min(\n TRACK_HEIGHT,\n height - PROGRESS_BAR_MARGIN.top - PROGRESS_BAR_MARGIN.bottom,\n )\n const trackX = PROGRESS_BAR_MARGIN.left\n const trackY = height - PROGRESS_BAR_MARGIN.bottom - trackHeight\n\n return {\n currentValue,\n total,\n ratio,\n trackX,\n trackY,\n trackWidth,\n trackHeight,\n trackRadius: trackHeight / 2,\n fillWidth: trackWidth * ratio,\n valueLabel: `${formatValue(currentValue)} of ${formatValue(total)}`,\n percentageLabel: formatPercentage(ratio),\n labelY: PROGRESS_BAR_MARGIN.top / 2,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { ProgressBarProps } from '../ProgressBar.types'\n\ntype ProgressBarCaptionProps = Pick<ProgressBarProps, 'caption'>\n\nexport function ProgressBarCaption({ caption }: ProgressBarCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (content) => (\n <figcaption className=\"pristine-progress-bar__caption\">{content}</figcaption>\n ),\n })\n}\n","import { useId } from 'react'\n\nimport { ifElse } from '@/shared/fp'\n\nimport type { ProgressBarModel } from '../ProgressBar.model'\nimport type { ProgressBarProps } from '../ProgressBar.types'\n\ntype ProgressBarSvgProps = Pick<\n ProgressBarProps,\n 'ariaLabel' | 'height' | 'showLabel' | 'width'\n> & {\n readonly progress: ProgressBarModel\n}\n\nconst hasFill = (progress: ProgressBarModel) => progress.fillWidth > 0\n\nexport function ProgressBarSvg({\n ariaLabel,\n height,\n progress,\n showLabel,\n width,\n}: ProgressBarSvgProps) {\n const clipPathId = `pristine-progress-bar-${useId().replaceAll(':', '')}`\n const valueText = `${progress.valueLabel} (${progress.percentageLabel})`\n const renderFill = ifElse(\n hasFill,\n () => (\n <rect\n className=\"pristine-progress-bar__fill\"\n x={progress.trackX}\n y={progress.trackY}\n width={progress.fillWidth}\n height={progress.trackHeight}\n clipPath={`url(#${clipPathId})`}\n />\n ),\n () => null,\n )\n const renderLabels = ifElse(\n (candidate: boolean) => candidate,\n () => (\n <g className=\"pristine-progress-bar__labels\" aria-hidden=\"true\">\n <text\n className=\"pristine-progress-bar__value\"\n x={progress.trackX}\n y={progress.labelY}\n >\n {progress.valueLabel}\n </text>\n <text\n className=\"pristine-progress-bar__percentage\"\n x={progress.trackX + progress.trackWidth}\n y={progress.labelY}\n textAnchor=\"end\"\n >\n {progress.percentageLabel}\n </text>\n </g>\n ),\n () => null,\n )\n\n return (\n <svg\n className=\"pristine-progress-bar__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <defs>\n <clipPath id={clipPathId}>\n <rect\n x={progress.trackX}\n y={progress.trackY}\n width={progress.trackWidth}\n height={progress.trackHeight}\n rx={progress.trackRadius}\n />\n </clipPath>\n </defs>\n {renderLabels(showLabel)}\n <g\n className=\"pristine-progress-bar__meter\"\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={progress.total}\n aria-valuenow={progress.currentValue}\n aria-valuetext={valueText}\n >\n <rect\n className=\"pristine-progress-bar__track\"\n x={progress.trackX}\n y={progress.trackY}\n width={progress.trackWidth}\n height={progress.trackHeight}\n rx={progress.trackRadius}\n />\n {renderFill(progress)}\n </g>\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { ProgressBarModel } from '../ProgressBar.model'\nimport type { ProgressBarProps } from '../ProgressBar.types'\n\nimport { ProgressBarCaption } from './ProgressBarCaption'\nimport { ProgressBarSvg } from './ProgressBarSvg'\n\ntype ProgressBarFigureProps = Pick<\n ProgressBarProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'showLabel' | 'width'\n> & {\n readonly progress: ProgressBarModel\n}\n\nexport function ProgressBarFigure({\n ariaLabel,\n caption,\n className,\n height,\n progress,\n showLabel,\n width,\n}: ProgressBarFigureProps) {\n return (\n <figure className={classNames(['pristine-progress-bar', className])} aria-label={ariaLabel}>\n <ProgressBarSvg\n ariaLabel={ariaLabel}\n height={height}\n progress={progress}\n showLabel={showLabel}\n width={width}\n />\n <ProgressBarCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeProgressBar } from './ProgressBar.domain'\nimport { buildProgressBarModel } from './ProgressBar.model'\nimport { ProgressBarFigure } from './components/ProgressBarFigure'\nimport type { ProgressBarProps } from './ProgressBar.types'\n\nexport function ProgressBar({\n currentValue,\n total,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showLabel,\n formatValue,\n formatPercentage,\n}: ProgressBarProps) {\n const result = useMemo(\n () => computeProgressBar({ currentValue, total }),\n [currentValue, total],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-progress-bar__error', className])}\n title=\"Progress unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (ratio) => {\n const progress = buildProgressBarModel(\n currentValue,\n total,\n ratio,\n width,\n height,\n formatValue,\n formatPercentage,\n )\n\n return (\n <ProgressBarFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n progress={progress}\n showLabel={showLabel}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { ProgressBarProps } from './ProgressBar.types'\n\nexport const formatProgressBarNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatProgressBarPercentage = (ratio: number) =>\n `${formatProgressBarNumber(ratio * 100)}%`\n\nexport const DEFAULT_PROGRESS_BAR_VIEW_PROPS = {\n width: 360,\n height: 92,\n ariaLabel: 'Progress bar',\n className: '',\n caption: none,\n showLabel: true,\n formatValue: formatProgressBarNumber,\n formatPercentage: formatProgressBarPercentage,\n} satisfies Omit<ProgressBarProps, 'currentValue' | 'total'>\n","import { err, isNone, isSome, mapResult, matchOption, none, ok, some } from '../shared'\nimport type { Option, Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n ifElse,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n PriorRank,\n Rank,\n RankedEntry,\n RankedItem,\n RankedListError,\n RankedListInput,\n RankedListResult,\n ValidatedDataset,\n ValidatedRankedItem,\n} from './RankedList.types'\n\ntype DatasetResult = Result<ValidatedDataset, RankedListError>\ntype DatasetValidator = [\n (data: readonly RankedItem[]) => boolean,\n (data: readonly RankedItem[]) => DatasetResult,\n]\ntype RankAccumulator = {\n readonly entries: readonly RankedEntry[]\n readonly previousRank: Rank\n readonly previousValue: Option<number>\n}\n\nconst rankedListRules = {\n insufficientItems: (): RankedListError => ({\n type: 'InsufficientItems',\n message: 'A ranked list needs at least two items.',\n details: none,\n }),\n invalidValue: (index: number): RankedListError => ({\n type: 'InvalidValue',\n message: 'Every ranked list value must be a finite number.',\n details: some(`Invalid value at index ${String(index)}.`),\n }),\n emptyLabel: (index: number): RankedListError => ({\n type: 'EmptyLabel',\n message: 'Every ranked list item needs a non-empty label.',\n details: some(`Empty label at index ${String(index)}.`),\n }),\n duplicateLabel: (label: string): RankedListError => ({\n type: 'DuplicateLabel',\n message: 'Ranked list labels must be unique.',\n details: some(`Duplicate label: ${label}.`),\n }),\n inconsistentPriorRanks: (): RankedListError => ({\n type: 'InconsistentPriorRanks',\n message: 'Prior ranks must be provided for every ranked list item or for none of them.',\n details: none,\n }),\n invalidPriorRank: (priorRank: unknown): RankedListError => ({\n type: 'InvalidPriorRank',\n message: 'Every ranked list prior rank must be a positive integer.',\n details: some(`Invalid prior rank: ${String(priorRank)}.`),\n }),\n}\n\nconst MINIMUM_ITEM_COUNT = 2\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isPositiveInteger = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isInteger(candidate),\n (candidate: unknown) => Number(candidate) > 0,\n ])(value)\n\nconst isNonEmptyString = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'string',\n (candidate: unknown) => String(candidate).trim().length > 0,\n ])(value)\n\nconst hasInsufficientItems = (data: readonly RankedItem[]) =>\n data.length < MINIMUM_ITEM_COUNT\n\nconst getLabels = (data: readonly RankedItem[]) => map(prop('label'), [...data])\n\nconst getNormalizedLabels = (data: readonly RankedItem[]) =>\n map((label: string) => label.trim(), getLabels(data))\n\nconst getValues = (data: readonly RankedItem[]) => map(prop('value'), [...data])\n\nconst getPriorRanks = (data: readonly RankedItem[]) =>\n map((item: RankedItem) => item.priorRank, [...data])\n\nconst getPriorRank = (item: RankedItem): ValidatedRankedItem['priorRank'] =>\n item.priorRank\n\nconst hasOnlyFiniteValues = (data: readonly RankedItem[]) =>\n all(isFiniteNumber, getValues(data))\n\nconst findInvalidValueIndex = (data: readonly RankedItem[]) =>\n findIndex(complement(isFiniteNumber), getValues(data))\n\nconst hasOnlyNonEmptyLabels = (data: readonly RankedItem[]) =>\n all(isNonEmptyString, getLabels(data))\n\nconst findEmptyLabelIndex = (data: readonly RankedItem[]) =>\n findIndex(complement(isNonEmptyString), getLabels(data))\n\nconst hasUniqueLabels = (data: readonly RankedItem[]) => {\n const labels = getNormalizedLabels(data)\n\n return labels.length === new Set(labels).size\n}\n\nconst findDuplicateLabel = (data: readonly RankedItem[]) => {\n const labels = getNormalizedLabels(data)\n\n return defaultTo(\n 'unknown label',\n labels.find((label, index) => labels.indexOf(label) !== index),\n )\n}\n\nconst hasNoPriorRanks = (data: readonly RankedItem[]) =>\n all(isNone, getPriorRanks(data))\n\nconst hasAllPriorRanks = (data: readonly RankedItem[]) =>\n all(isSome, getPriorRanks(data))\n\nconst hasInconsistentPriorRanks = (data: readonly RankedItem[]) =>\n allPass([complement(hasNoPriorRanks), complement(hasAllPriorRanks)])(data)\n\nconst hasValidPriorRank = (item: RankedItem) =>\n matchOption(getPriorRank(item), {\n none: always(true),\n some: isPositiveInteger,\n })\n\nconst hasOnlyValidPriorRanks = (data: readonly RankedItem[]) =>\n all(hasValidPriorRank, [...data])\n\nconst isRankedItem = (value: RankedItem | undefined): value is RankedItem =>\n value !== undefined\n\nconst toRankedItemOption = (value: RankedItem | undefined): Option<RankedItem> =>\n ifElse(\n isRankedItem,\n (item: RankedItem) => some(item),\n always(none),\n )(value)\n\nconst getPriorRankDetail = (item: RankedItem) =>\n matchOption<PriorRank, string | PriorRank>(item.priorRank, {\n none: always('missing prior rank'),\n some: (value) => value,\n })\n\nconst findInvalidPriorRank = (data: readonly RankedItem[]) =>\n matchOption(toRankedItemOption(data.find(complement(hasValidPriorRank))), {\n none: always('unknown prior rank'),\n some: getPriorRankDetail,\n })\n\nconst toValidatedItem = (item: RankedItem): ValidatedRankedItem => ({\n label: item.label.trim(),\n value: item.value,\n priorRank: getPriorRank(item),\n})\n\nconst datasetValidators: DatasetValidator[] = [\n [hasInsufficientItems, () => err(rankedListRules.insufficientItems())],\n [\n complement(hasOnlyFiniteValues),\n (data: readonly RankedItem[]) =>\n err(rankedListRules.invalidValue(findInvalidValueIndex(data))),\n ],\n [\n complement(hasOnlyNonEmptyLabels),\n (data: readonly RankedItem[]) =>\n err(rankedListRules.emptyLabel(findEmptyLabelIndex(data))),\n ],\n [\n complement(hasUniqueLabels),\n (data: readonly RankedItem[]) => err(rankedListRules.duplicateLabel(findDuplicateLabel(data))),\n ],\n [hasInconsistentPriorRanks, () => err(rankedListRules.inconsistentPriorRanks())],\n [\n complement(hasOnlyValidPriorRanks),\n (data: readonly RankedItem[]) =>\n err(rankedListRules.invalidPriorRank(findInvalidPriorRank(data))),\n ],\n [\n always(true),\n (data: readonly RankedItem[]) => ok(map(toValidatedItem, [...data])),\n ],\n]\n\nexport const validateRankedListInput: (\n input: RankedListInput\n) => DatasetResult = (input: RankedListInput) => cond(datasetValidators)(input.data)\n\nconst byDescendingValue = (left: ValidatedRankedItem, right: ValidatedRankedItem) =>\n right.value - left.value\n\nconst sortByRank = (data: ValidatedDataset) => [...data].sort(byDescendingValue)\n\nconst getRank = (\n item: ValidatedRankedItem,\n index: number,\n previousValue: Option<number>,\n previousRank: Rank,\n) =>\n matchOption(previousValue, {\n none: () => index + 1,\n some: (value) =>\n ifElse(\n (candidate: number) => candidate === item.value,\n always(previousRank),\n always(index + 1),\n )(value),\n })\n\nconst getRankChange = (rank: Rank) => (\n priorRank: ValidatedRankedItem['priorRank'],\n): RankedEntry['rankChange'] =>\n matchOption<PriorRank, RankedEntry['rankChange']>(priorRank, {\n none: () => none,\n some: (value) => some(value - rank),\n })\n\nconst toRankedEntry = (rank: Rank) => (item: ValidatedRankedItem): RankedEntry => ({\n label: item.label,\n value: item.value,\n rank,\n rankChange: getRankChange(rank)(item.priorRank),\n})\n\nconst appendRankedEntry = (\n accumulator: RankAccumulator,\n item: ValidatedRankedItem,\n index: number,\n): RankAccumulator => {\n const rank = getRank(item, index, accumulator.previousValue, accumulator.previousRank)\n\n return {\n entries: [...accumulator.entries, toRankedEntry(rank)(item)],\n previousRank: rank,\n previousValue: some(item.value),\n }\n}\n\nconst rankItems = (data: ValidatedDataset) =>\n sortByRank(data).reduce<RankAccumulator>(appendRankedEntry, {\n entries: [],\n previousRank: 1,\n previousValue: none,\n }).entries\n\nexport function computeRankedList(input: RankedListInput): RankedListResult {\n return mapResult<ValidatedDataset, readonly RankedEntry[], RankedListError>(rankItems)(\n validateRankedListInput(input),\n )\n}\n","import { matchOption, none, some } from '../shared'\nimport type { Option } from '../shared'\nimport { always, cond, ifElse, map } from '../shared/fp'\n\nimport type { RankChange, RankedEntry } from './RankedList.types'\n\nexport type RankChangeDirection = 'Improved' | 'Declined' | 'Unchanged'\n\nexport type RankedListValueDirection = 'positive' | 'negative' | 'zero'\n\nexport type RankedListModelChange = {\n readonly amount: RankChange\n readonly amountLabel: string\n readonly direction: RankChangeDirection\n readonly directionLabel: string\n readonly directionClassName: string\n readonly ariaLabel: string\n}\n\nexport type RankedListModelEntry = {\n readonly label: string\n readonly value: number\n readonly rank: number\n readonly rankLabel: string\n readonly valueLabel: string\n readonly valueBarWidth: string\n readonly valueDirectionClassName: RankedListValueDirection\n readonly rankChange: RankedEntry['rankChange']\n readonly change: Option<RankedListModelChange>\n readonly summaryLabel: string\n}\n\nexport type RankedListModel = {\n readonly entries: readonly RankedListModelEntry[]\n}\n\ntype RankChangeDirectionRule = [\n (change: RankChange) => boolean,\n (change: RankChange) => RankChangeDirection,\n]\ntype ValueDirectionRule = [\n (value: number) => boolean,\n (value: number) => RankedListValueDirection,\n]\ntype ValueRatioContext = {\n readonly minimumValue: number\n readonly maximumValue: number\n readonly value: number\n}\n\nconst rankChangeDirectionRules: RankChangeDirectionRule[] = [\n [(change: RankChange) => change > 0, always('Improved')],\n [(change: RankChange) => change < 0, always('Declined')],\n [always(true), always('Unchanged')],\n]\n\nconst valueDirectionRules: ValueDirectionRule[] = [\n [(value: number) => value > 0, always('positive')],\n [(value: number) => value < 0, always('negative')],\n [always(true), always('zero')],\n]\n\nconst getRankChangeDirection: (change: RankChange) => RankChangeDirection =\n cond(rankChangeDirectionRules)\n\nconst getValueDirection: (value: number) => RankedListValueDirection =\n cond(valueDirectionRules)\n\nconst getRankChangeDirectionClassName = (direction: RankChangeDirection) =>\n direction.toLowerCase()\n\nconst getRankChangeDirectionLabel = (direction: RankChangeDirection) =>\n cond([\n [(candidate: RankChangeDirection) => candidate === 'Improved', always('Up')],\n [(candidate: RankChangeDirection) => candidate === 'Declined', always('Down')],\n [always(true), always('Same')],\n ])(direction)\n\nconst getEntryValue = (entry: RankedEntry) => entry.value\n\nconst getValues = (entries: readonly RankedEntry[]) => map(getEntryValue, [...entries])\n\nconst hasEntries = (entries: readonly RankedEntry[]) => entries.length > 0\n\nconst getMinimumValue = (entries: readonly RankedEntry[]) =>\n ifElse(\n hasEntries,\n (rankedEntries: readonly RankedEntry[]) => Math.min(...getValues(rankedEntries)),\n always(0),\n )(entries)\n\nconst getMaximumValue = (entries: readonly RankedEntry[]) =>\n ifElse(\n hasEntries,\n (rankedEntries: readonly RankedEntry[]) => Math.max(...getValues(rankedEntries)),\n always(0),\n )(entries)\n\nconst toPercent = (value: number) => `${String(Math.round(value * 1000) / 10)}%`\n\nconst hasNoValueRange = (context: ValueRatioContext) =>\n context.minimumValue === context.maximumValue\n\nconst computeValueRatio = (context: ValueRatioContext) =>\n (context.value - context.minimumValue) / (context.maximumValue - context.minimumValue)\n\nconst getValueRatio = (minimumValue: number, maximumValue: number) => (value: number) =>\n ifElse(\n hasNoValueRange,\n always(1),\n computeValueRatio,\n )({ minimumValue, maximumValue, value })\n\nconst pluralizePositions = (count: number) =>\n ifElse(\n (candidate: number) => candidate === 1,\n always('position'),\n always('positions'),\n )(count)\n\nconst getChangeAriaLabel = (change: RankChange) => {\n const absoluteChange = Math.abs(change)\n\n return cond([\n [(candidate: RankChange) => candidate > 0, () =>\n `Rank improved by ${String(absoluteChange)} ${pluralizePositions(absoluteChange)}.`],\n [(candidate: RankChange) => candidate < 0, () =>\n `Rank declined by ${String(absoluteChange)} ${pluralizePositions(absoluteChange)}.`],\n [always(true), () => 'Rank did not change.'],\n ])(change)\n}\n\nconst buildChangeModel = (\n rankChange: RankChange,\n formatRankChange: (rankChange: number) => string,\n): RankedListModelChange => {\n const direction = getRankChangeDirection(rankChange)\n\n return {\n amount: rankChange,\n amountLabel: formatRankChange(rankChange),\n direction,\n directionLabel: getRankChangeDirectionLabel(direction),\n directionClassName: getRankChangeDirectionClassName(direction),\n ariaLabel: getChangeAriaLabel(rankChange),\n }\n}\n\nconst getChangeModel = (\n entry: RankedEntry,\n formatRankChange: (rankChange: number) => string,\n): Option<RankedListModelChange> =>\n matchOption<RankChange, Option<RankedListModelChange>>(entry.rankChange, {\n none: () => none,\n some: (value) => some(buildChangeModel(value, formatRankChange)),\n })\n\nconst getChangeSummary = (change: RankedListModelEntry['change']) =>\n matchOption(change, {\n none: always('No prior rank.'),\n some: (value) => value.ariaLabel,\n })\n\nconst toModelEntry = (\n minimumValue: number,\n maximumValue: number,\n formatValue: (value: number) => string,\n formatRank: (rank: number) => string,\n formatRankChange: (rankChange: number) => string,\n) => (entry: RankedEntry): RankedListModelEntry => {\n const valueRatio = getValueRatio(minimumValue, maximumValue)(entry.value)\n const rankLabel = formatRank(entry.rank)\n const valueLabel = formatValue(entry.value)\n const change = getChangeModel(entry, formatRankChange)\n\n return {\n label: entry.label,\n value: entry.value,\n rank: entry.rank,\n rankLabel,\n valueLabel,\n valueBarWidth: toPercent(valueRatio),\n valueDirectionClassName: getValueDirection(entry.value),\n rankChange: entry.rankChange,\n change,\n summaryLabel: `Rank ${rankLabel}, ${entry.label}: ${valueLabel}. ${getChangeSummary(change)}`,\n }\n}\n\nexport const buildRankedListModel = (\n entries: readonly RankedEntry[],\n formatValue: (value: number) => string,\n formatRank: (rank: number) => string,\n formatRankChange: (rankChange: number) => string,\n): RankedListModel => {\n const minimumValue = getMinimumValue(entries)\n const maximumValue = getMaximumValue(entries)\n\n return {\n entries: map(\n toModelEntry(minimumValue, maximumValue, formatValue, formatRank, formatRankChange),\n [...entries],\n ),\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { RankedListProps } from '../RankedList.types'\n\nexport function RankedListCaption({ caption }: Pick<RankedListProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-ranked-list__caption\">{value}</figcaption>\n ),\n })\n}\n","import type { CSSProperties } from 'react'\n\nimport { classNames, matchOption } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\n\nimport type { RankedListModelChange, RankedListModelEntry } from '../RankedList.model'\n\ntype RankedListEntryStyle = CSSProperties & {\n readonly '--pristine-ranked-list-value-width': string\n}\n\ntype RankedListEntryProps = {\n readonly entry: RankedListModelEntry\n readonly showRankChanges: boolean\n}\n\nconst toEntryStyle = (entry: RankedListModelEntry): RankedListEntryStyle => ({\n '--pristine-ranked-list-value-width': entry.valueBarWidth,\n})\n\nconst hasChangedRank = (change: RankedListModelChange) => change.amount !== 0\n\nconst renderChangeAmount = ifElse(\n hasChangedRank,\n (change: RankedListModelChange) => (\n <span className=\"pristine-ranked-list__change-amount\">{change.amountLabel}</span>\n ),\n always(null),\n)\n\nconst renderVisibleRankChange = (change: RankedListModelChange) => (\n <span\n className={classNames([\n 'pristine-ranked-list__change',\n `pristine-ranked-list__change--${change.directionClassName}`,\n ])}\n aria-label={change.ariaLabel}\n >\n <span className=\"pristine-ranked-list__change-direction\">{change.directionLabel}</span>\n {renderChangeAmount(change)}\n </span>\n)\n\nconst renderChangeWhenVisible = (showRankChanges: boolean) =>\n ifElse(\n always(showRankChanges),\n renderVisibleRankChange,\n always(null),\n )\n\nconst renderRankChange = (\n change: RankedListModelEntry['change'],\n showRankChanges: boolean,\n) =>\n matchOption(change, {\n none: always(null),\n some: (value) => renderChangeWhenVisible(showRankChanges)(value),\n })\n\nexport function RankedListEntry({ entry, showRankChanges }: RankedListEntryProps) {\n return (\n <li\n className=\"pristine-ranked-list__entry\"\n aria-label={entry.summaryLabel}\n style={toEntryStyle(entry)}\n >\n <span className=\"pristine-ranked-list__rank\">{entry.rankLabel}</span>\n <span className=\"pristine-ranked-list__item\">\n <span className=\"pristine-ranked-list__label\">{entry.label}</span>\n <span className=\"pristine-ranked-list__meter\" aria-hidden=\"true\">\n <span\n className={classNames([\n 'pristine-ranked-list__meter-fill',\n `pristine-ranked-list__meter-fill--${entry.valueDirectionClassName}`,\n ])}\n />\n </span>\n </span>\n <span\n className={classNames([\n 'pristine-ranked-list__value',\n `pristine-ranked-list__value--${entry.valueDirectionClassName}`,\n ])}\n >\n {entry.valueLabel}\n </span>\n {renderRankChange(entry.change, showRankChanges)}\n </li>\n )\n}\n","import type { CSSProperties } from 'react'\n\nimport { classNames } from '@/shared'\n\nimport type { RankedListModel } from '../RankedList.model'\nimport type { RankedListProps } from '../RankedList.types'\n\nimport { RankedListCaption } from './RankedListCaption'\nimport { RankedListEntry } from './RankedListEntry'\n\ntype RankedListStyle = CSSProperties & {\n readonly '--pristine-ranked-list-width': string\n readonly '--pristine-ranked-list-min-height': string\n}\n\ntype RankedListFigureProps = Pick<\n RankedListProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'showRankChanges' | 'width'\n> & {\n readonly rankedList: RankedListModel\n}\n\nconst toFigureStyle = (width: number, height: number): RankedListStyle => ({\n '--pristine-ranked-list-width': `${String(width)}px`,\n '--pristine-ranked-list-min-height': `${String(height)}px`,\n})\n\nexport function RankedListFigure({\n ariaLabel,\n caption,\n className,\n height,\n rankedList,\n showRankChanges,\n width,\n}: RankedListFigureProps) {\n return (\n <figure\n className={classNames(['pristine-ranked-list', className])}\n aria-label={ariaLabel}\n style={toFigureStyle(width, height)}\n >\n <ol className=\"pristine-ranked-list__entries\">\n {rankedList.entries.map((entry) => (\n <RankedListEntry\n key={entry.label}\n entry={entry}\n showRankChanges={showRankChanges}\n />\n ))}\n </ol>\n <RankedListCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeRankedList } from './RankedList.domain'\nimport { buildRankedListModel } from './RankedList.model'\nimport { RankedListFigure } from './components/RankedListFigure'\nimport type { RankedListProps } from './RankedList.types'\n\nexport function RankedList({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showRankChanges,\n formatValue,\n formatRank,\n formatRankChange,\n}: RankedListProps) {\n const result = useMemo(() => computeRankedList({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-ranked-list__error', className])}\n title=\"Ranked list unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (entries) => {\n const rankedList = buildRankedListModel(\n entries,\n formatValue,\n formatRank,\n formatRankChange,\n )\n\n return (\n <RankedListFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n rankedList={rankedList}\n showRankChanges={showRankChanges}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { RankedListProps } from './RankedList.types'\n\nexport const formatRankedListNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatRankedListRank = (rank: number) => `#${String(rank)}`\n\nexport const formatRankedListRankChange = (rankChange: number) =>\n ifElse(\n (candidate: number) => candidate > 0,\n (candidate: number) => `+${String(candidate)}`,\n String,\n )(rankChange)\n\nexport const DEFAULT_RANKED_LIST_VIEW_PROPS = {\n width: 420,\n height: 260,\n ariaLabel: 'Ranked list',\n className: '',\n caption: none,\n showRankChanges: true,\n formatValue: formatRankedListNumber,\n formatRank: formatRankedListRank,\n formatRankChange: formatRankedListRankChange,\n} satisfies Omit<RankedListProps, 'data'>\n","import { err, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n findIndex,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n ScatterPlotDot,\n ScatterPlotError,\n ScatterPlotInput,\n ScatterPlotPoint,\n ScatterPlotResult,\n ValidatedDataset,\n ValidatedScatterPlotInput,\n} from './ScatterPlot.types'\n\ntype DatasetResult = Result<ValidatedDataset, ScatterPlotError>\ntype ScatterPlotInputResult = Result<ValidatedScatterPlotInput, ScatterPlotError>\ntype DatasetValidator = [\n (data: readonly ScatterPlotPoint[]) => boolean,\n (data: readonly ScatterPlotPoint[]) => DatasetResult,\n]\n\nconst MINIMUM_POINT_COUNT = 2\n\nconst scatterPlotRules = {\n insufficientPoints: (): ScatterPlotError => ({\n type: 'InsufficientPoints',\n message: 'A scatter plot needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): ScatterPlotError => ({\n type: 'InvalidXValue',\n message: 'Every scatter plot x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): ScatterPlotError => ({\n type: 'InvalidYValue',\n message: 'Every scatter plot y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughPoints = (data: readonly ScatterPlotPoint[]) =>\n data.length >= MINIMUM_POINT_COUNT\n\nconst getXValues = (data: readonly ScatterPlotPoint[]) => map(prop('x'), [...data])\n\nconst getYValues = (data: readonly ScatterPlotPoint[]) => map(prop('y'), [...data])\n\nconst hasOnlyFiniteXValues = (data: readonly ScatterPlotPoint[]) =>\n all(isFiniteNumber, getXValues(data))\n\nconst hasOnlyFiniteYValues = (data: readonly ScatterPlotPoint[]) =>\n all(isFiniteNumber, getYValues(data))\n\nconst findInvalidXValueIndex = (data: readonly ScatterPlotPoint[]) =>\n findIndex(complement(isFiniteNumber), getXValues(data))\n\nconst findInvalidYValueIndex = (data: readonly ScatterPlotPoint[]) =>\n findIndex(complement(isFiniteNumber), getYValues(data))\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughPoints), () => err(scatterPlotRules.insufficientPoints())],\n [\n complement(hasOnlyFiniteXValues),\n (candidate: readonly ScatterPlotPoint[]) =>\n err(scatterPlotRules.invalidXValue(findInvalidXValueIndex(candidate))),\n ],\n [\n complement(hasOnlyFiniteYValues),\n (candidate: readonly ScatterPlotPoint[]) =>\n err(scatterPlotRules.invalidYValue(findInvalidYValueIndex(candidate))),\n ],\n [always(true), (candidate: readonly ScatterPlotPoint[]) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly ScatterPlotPoint[]) => DatasetResult =\n cond(datasetValidators)\n\nexport function validateScatterPlotInput(input: ScatterPlotInput): ScatterPlotInputResult {\n return mapResult<ValidatedDataset, ValidatedScatterPlotInput, ScatterPlotError>(\n (dataset) => ({ dataset }),\n )(validateDataset(input.data))\n}\n\nconst toScatterPlotDot = (\n point: ValidatedDataset[number],\n index: number,\n): ScatterPlotDot => ({\n ...point,\n index,\n})\n\nconst computeDots = (input: ValidatedScatterPlotInput) =>\n input.dataset.map(toScatterPlotDot)\n\nexport function computeScatterPlot(input: ScatterPlotInput): ScatterPlotResult {\n return mapResult<ValidatedScatterPlotInput, readonly ScatterPlotDot[], ScatterPlotError>(\n computeDots,\n )(validateScatterPlotInput(input))\n}\n","import { extent, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { ScatterPlotDot } from './ScatterPlot.types'\n\ntype ChartExtent = [number, number]\n\nexport const SCATTER_PLOT_MARGIN = {\n top: 20,\n right: 18,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedScatterPlotDot = ScatterPlotDot & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type ScatterPlotModel = {\n readonly plotBottom: number\n readonly dots: readonly RenderedScatterPlotDot[]\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst getXExtent = (dots: readonly ScatterPlotDot[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...dots])))\n\nconst getYExtent = (dots: readonly ScatterPlotDot[]) =>\n expandZeroWidthExtent(getExtent(map(prop('y'), [...dots])))\n\nexport const buildScatterPlotModel = (\n dots: readonly ScatterPlotDot[],\n width: number,\n height: number,\n): ScatterPlotModel => {\n const plotBottom = height - SCATTER_PLOT_MARGIN.bottom\n const xScale = scaleLinear()\n .domain(getXExtent(dots))\n .nice()\n .range([SCATTER_PLOT_MARGIN.left, width - SCATTER_PLOT_MARGIN.right])\n const yScale = scaleLinear()\n .domain(getYExtent(dots))\n .nice()\n .range([plotBottom, SCATTER_PLOT_MARGIN.top])\n const toRenderedDot = (dot: ScatterPlotDot): RenderedScatterPlotDot => ({\n ...dot,\n cx: xScale(dot.x),\n cy: yScale(dot.y),\n })\n\n return {\n plotBottom,\n dots: map(toRenderedDot, [...dots]),\n xTicks: xScale.ticks(Math.min(6, dots.length)),\n yTicks: yScale.ticks(5),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { ScatterPlotProps } from '../ScatterPlot.types'\n\nexport function ScatterPlotCaption({ caption }: Pick<ScatterPlotProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-scatter-plot__caption\">{text}</figcaption>,\n })\n}\n","import { SCATTER_PLOT_MARGIN } from '../ScatterPlot.model'\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\n\ntype ScatterPlotAxesProps = {\n readonly chart: ScatterPlotModel\n readonly width: number\n}\n\nexport function ScatterPlotAxes({ chart, width }: ScatterPlotAxesProps) {\n return (\n <>\n <line\n className=\"pristine-scatter-plot__axis\"\n x1={SCATTER_PLOT_MARGIN.left}\n x2={width - SCATTER_PLOT_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-scatter-plot__axis\"\n x1={SCATTER_PLOT_MARGIN.left}\n x2={SCATTER_PLOT_MARGIN.left}\n y1={SCATTER_PLOT_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedScatterPlotDot } from '../ScatterPlot.model'\n\ntype ScatterPlotDotMarkerProps = {\n readonly active: boolean\n readonly dot: RenderedScatterPlotDot\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n}\n\nexport function ScatterPlotDotMarker({\n active,\n dot,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n}: ScatterPlotDotMarkerProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-scatter-plot__dot--active'),\n always(''),\n )(active)\n const accessibleLabel = `${formatXValue(dot.x)}: ${formatYValue(dot.y)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames(['pristine-scatter-plot__dot', activeClassName])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-scatter-plot__dot-hit-area\"\n cx={dot.cx}\n cy={dot.cy}\n r={10}\n />\n <circle\n className=\"pristine-scatter-plot__dot-mark\"\n cx={dot.cx}\n cy={dot.cy}\n r={4}\n />\n </g>\n )\n}\n","import type { ScatterPlotModel } from '../ScatterPlot.model'\n\nimport { ScatterPlotDotMarker } from './ScatterPlotDotMarker'\n\ntype ScatterPlotDotsProps = {\n readonly activeDotIndex: number | null\n readonly chart: ScatterPlotModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: (dotIndex: number) => void\n readonly onDeactivate: () => void\n}\n\nexport function ScatterPlotDots({\n activeDotIndex,\n chart,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n}: ScatterPlotDotsProps) {\n return chart.dots.map((dot) => (\n <ScatterPlotDotMarker\n active={activeDotIndex === dot.index}\n dot={dot}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n key={dot.index}\n onActivate={() => onActivate(dot.index)}\n onDeactivate={onDeactivate}\n />\n ))\n}\n","import { SCATTER_PLOT_MARGIN } from '../ScatterPlot.model'\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\n\ntype ScatterPlotGridLinesProps = {\n readonly chart: ScatterPlotModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nexport function ScatterPlotGridLines({\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotGridLinesProps) {\n return (\n <>\n {chart.yTicks.map((tick) => (\n <g className=\"pristine-scatter-plot__grid-line\" key={`y:${tick}`}>\n <line\n x1={SCATTER_PLOT_MARGIN.left}\n x2={width - SCATTER_PLOT_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={SCATTER_PLOT_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {formatYValue(tick)}\n </text>\n </g>\n ))}\n {chart.xTicks.map((tick) => (\n <g className=\"pristine-scatter-plot__grid-line\" key={`x:${tick}`}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={SCATTER_PLOT_MARGIN.top}\n y2={chart.plotBottom}\n />\n <text\n x={chart.xScale(tick)}\n y={height - SCATTER_PLOT_MARGIN.bottom + 20}\n textAnchor=\"middle\"\n >\n {formatXValue(tick)}\n </text>\n </g>\n ))}\n </>\n )\n}\n","import { SCATTER_PLOT_MARGIN } from '../ScatterPlot.model'\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\n\ntype ScatterPlotPlotAreaProps = {\n readonly chart: ScatterPlotModel\n readonly width: number\n}\n\nexport function ScatterPlotPlotArea({ chart, width }: ScatterPlotPlotAreaProps) {\n return (\n <rect\n className=\"pristine-scatter-plot__plot\"\n x={SCATTER_PLOT_MARGIN.left}\n y={SCATTER_PLOT_MARGIN.top}\n width={width - SCATTER_PLOT_MARGIN.left - SCATTER_PLOT_MARGIN.right}\n height={chart.plotBottom - SCATTER_PLOT_MARGIN.top}\n />\n )\n}\n","import type { RenderedScatterPlotDot } from '../ScatterPlot.model'\n\ntype ScatterPlotTooltipProps = {\n readonly dot: RenderedScatterPlotDot\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function ScatterPlotTooltip({\n dot,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotTooltipProps) {\n const label = `${formatXValue(dot.x)}: ${formatYValue(dot.y)}`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n dot.cx - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n dot.cy - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-scatter-plot__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-scatter-plot__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-scatter-plot__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\nimport type { ScatterPlotProps } from '../ScatterPlot.types'\n\nimport { ScatterPlotAxes } from './ScatterPlotAxes'\nimport { ScatterPlotDots } from './ScatterPlotDots'\nimport { ScatterPlotGridLines } from './ScatterPlotGridLines'\nimport { ScatterPlotPlotArea } from './ScatterPlotPlotArea'\nimport { ScatterPlotTooltip } from './ScatterPlotTooltip'\n\ntype ScatterPlotSvgProps = Pick<\n ScatterPlotProps,\n 'ariaLabel' | 'formatXValue' | 'formatYValue' | 'height' | 'width'\n> & {\n readonly chart: ScatterPlotModel\n}\n\nexport function ScatterPlotSvg({\n ariaLabel,\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotSvgProps) {\n const [activeDotIndex, setActiveDotIndex] = useState<number | null>(null)\n const activeDots = chart.dots.filter((dot) => dot.index === activeDotIndex)\n\n return (\n <svg\n className=\"pristine-scatter-plot__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <ScatterPlotPlotArea chart={chart} width={width} />\n <ScatterPlotGridLines\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <ScatterPlotAxes chart={chart} width={width} />\n <ScatterPlotDots\n activeDotIndex={activeDotIndex}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n onActivate={setActiveDotIndex}\n onDeactivate={() => setActiveDotIndex(null)}\n />\n {activeDots.map((dot) => (\n <ScatterPlotTooltip\n dot={dot}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n key={dot.index}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\nimport type { ScatterPlotProps } from '../ScatterPlot.types'\n\nimport { ScatterPlotCaption } from './ScatterPlotCaption'\nimport { ScatterPlotSvg } from './ScatterPlotSvg'\n\ntype ScatterPlotFigureProps = Pick<\n ScatterPlotProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatXValue'\n | 'formatYValue'\n | 'height'\n | 'width'\n> & {\n readonly chart: ScatterPlotModel\n}\n\nexport function ScatterPlotFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotFigureProps) {\n return (\n <figure className={classNames(['pristine-scatter-plot', className])} aria-label={ariaLabel}>\n <ScatterPlotSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <ScatterPlotCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeScatterPlot } from './ScatterPlot.domain'\nimport { buildScatterPlotModel } from './ScatterPlot.model'\nimport type { ScatterPlotProps } from './ScatterPlot.types'\nimport { ScatterPlotFigure } from './components/ScatterPlotFigure'\n\nexport function ScatterPlot({\n ariaLabel,\n caption,\n className,\n data,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotProps) {\n const result = useMemo(() => computeScatterPlot({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-scatter-plot__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (dots) => {\n const chart = buildScatterPlotModel(dots, width, height)\n\n return (\n <ScatterPlotFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { ScatterPlotProps } from './ScatterPlot.types'\n\nexport const formatScatterPlotNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_SCATTER_PLOT_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Scatter plot',\n className: '',\n caption: none,\n formatXValue: formatScatterPlotNumber,\n formatYValue: formatScatterPlotNumber,\n} satisfies Omit<ScatterPlotProps, 'data'>\n","import { mapResult, none, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n computeLinearSeriesSegments,\n validateLinearSeriesDataset,\n} from '../shared/linearSeries'\nimport type { LinearSeriesErrorRules } from '../shared/linearSeries'\n\nimport type {\n SparklineError,\n SparklineInput,\n SparklineResult,\n SparklineSegment,\n ValidatedDataset,\n ValidatedSparklineInput,\n} from './Sparkline.types'\n\ntype SparklineInputResult = Result<ValidatedSparklineInput, SparklineError>\n\nconst sparklineRules: LinearSeriesErrorRules<SparklineError> = {\n insufficientPoints: (): SparklineError => ({\n type: 'InsufficientPoints',\n message: 'A sparkline needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): SparklineError => ({\n type: 'InvalidXValue',\n message: 'Every sparkline x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): SparklineError => ({\n type: 'InvalidYValue',\n message: 'Every sparkline y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n duplicateXValue: (x: number): SparklineError => ({\n type: 'DuplicateXValue',\n message: 'Sparkline x values must be unique.',\n details: some(`Duplicate x value: ${String(x)}.`),\n }),\n}\n\nexport function validateSparklineInput(input: SparklineInput): SparklineInputResult {\n return mapResult<ValidatedDataset, ValidatedSparklineInput, SparklineError>(\n (dataset) => ({ dataset }),\n )(validateLinearSeriesDataset(input.data, sparklineRules))\n}\n\nconst computeSegments = (input: ValidatedSparklineInput) =>\n computeLinearSeriesSegments(input.dataset)\n\nexport function computeSparkline(input: SparklineInput): SparklineResult {\n return mapResult<ValidatedSparklineInput, readonly SparklineSegment[], SparklineError>(\n computeSegments,\n )(validateSparklineInput(input))\n}\n","import { extent, line, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, defaultTo, identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { SparklinePoint, SparklineSegment } from './Sparkline.types'\n\ntype ChartExtent = [number, number]\n\nexport const SPARKLINE_PADDING = {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4,\n}\n\nexport type RenderedSparklinePoint = SparklinePoint & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type RenderedSparklineSegment = {\n readonly start: RenderedSparklinePoint\n readonly end: RenderedSparklinePoint\n}\n\nexport type SparklineModel = {\n readonly points: readonly RenderedSparklinePoint[]\n readonly segments: readonly RenderedSparklineSegment[]\n readonly path: string\n}\n\nconst isFirstSegmentIndex = (index: number) => index === 0\n\nconst getPointsForSegment = (segment: SparklineSegment) => (index: number) =>\n ifElse(\n isFirstSegmentIndex,\n always([segment.start, segment.end]),\n always([segment.end]),\n )(index)\n\nconst getPointsFromSegments = (segments: readonly SparklineSegment[]) =>\n segments.flatMap((segment, index) => getPointsForSegment(segment)(index))\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst renderSparklinePath = (points: readonly RenderedSparklinePoint[]) =>\n defaultTo(\n '',\n line<RenderedSparklinePoint>()\n .x((point) => point.cx)\n .y((point) => point.cy)(points),\n )\n\nconst getXExtent = (points: readonly SparklinePoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...points])))\n\nconst getYExtent = (points: readonly SparklinePoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('y'), [...points])))\n\nexport const buildSparklineModel = (\n segments: readonly SparklineSegment[],\n width: number,\n height: number,\n): SparklineModel => {\n const points = getPointsFromSegments(segments)\n const xScale = scaleLinear()\n .domain(getXExtent(points))\n .range([SPARKLINE_PADDING.left, width - SPARKLINE_PADDING.right])\n const yScale = scaleLinear()\n .domain(getYExtent(points))\n .range([height - SPARKLINE_PADDING.bottom, SPARKLINE_PADDING.top])\n const toRenderedPoint = (point: SparklinePoint): RenderedSparklinePoint => ({\n ...point,\n cx: xScale(point.x),\n cy: yScale(point.y),\n })\n const renderedPoints = map(toRenderedPoint, [...points])\n const toRenderedSegment = (segment: SparklineSegment): RenderedSparklineSegment => ({\n start: toRenderedPoint(segment.start),\n end: toRenderedPoint(segment.end),\n })\n\n return {\n points: renderedPoints,\n segments: map(toRenderedSegment, [...segments]),\n path: renderSparklinePath(renderedPoints),\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { SparklineProps } from '../Sparkline.types'\n\nexport function SparklineCaption({ caption }: Pick<SparklineProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-sparkline__caption\">{text}</figcaption>,\n })\n}\n","import type { SparklineModel } from '../Sparkline.model'\n\ntype SparklinePathProps = {\n readonly sparkline: SparklineModel\n}\n\nexport function SparklinePath({ sparkline }: SparklinePathProps) {\n return <path className=\"pristine-sparkline__path\" d={sparkline.path} aria-hidden=\"true\" />\n}\n","import type { SparklineModel } from '../Sparkline.model'\nimport type { SparklineProps } from '../Sparkline.types'\n\nimport { SparklinePath } from './SparklinePath'\n\ntype SparklineSvgProps = Pick<SparklineProps, 'ariaLabel' | 'height' | 'width'> & {\n readonly sparkline: SparklineModel\n}\n\nexport function SparklineSvg({\n ariaLabel,\n height,\n sparkline,\n width,\n}: SparklineSvgProps) {\n return (\n <svg\n className=\"pristine-sparkline__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <SparklinePath sparkline={sparkline} />\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { SparklineModel } from '../Sparkline.model'\nimport type { SparklineProps } from '../Sparkline.types'\n\nimport { SparklineCaption } from './SparklineCaption'\nimport { SparklineSvg } from './SparklineSvg'\n\ntype SparklineFigureProps = Pick<\n SparklineProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'width'\n> & {\n readonly sparkline: SparklineModel\n}\n\nexport function SparklineFigure({\n ariaLabel,\n caption,\n className,\n height,\n sparkline,\n width,\n}: SparklineFigureProps) {\n return (\n <figure className={classNames(['pristine-sparkline', className])} aria-label={ariaLabel}>\n <SparklineSvg\n ariaLabel={ariaLabel}\n height={height}\n sparkline={sparkline}\n width={width}\n />\n <SparklineCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeSparkline } from './Sparkline.domain'\nimport { buildSparklineModel } from './Sparkline.model'\nimport type { SparklineProps } from './Sparkline.types'\nimport { SparklineFigure } from './components/SparklineFigure'\n\nexport function Sparkline({\n ariaLabel,\n caption,\n className,\n data,\n height,\n width,\n}: SparklineProps) {\n const result = useMemo(() => computeSparkline({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-sparkline__error', className])}\n title=\"Sparkline unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (segments) => {\n const sparkline = buildSparklineModel(segments, width, height)\n\n return (\n <SparklineFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n sparkline={sparkline}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\n\nimport type { SparklineProps } from './Sparkline.types'\n\nexport const DEFAULT_SPARKLINE_VIEW_PROPS = {\n width: 240,\n height: 72,\n ariaLabel: 'Sparkline',\n className: '',\n caption: none,\n} satisfies Omit<SparklineProps, 'data'>\n"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isPlaceholder.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curry1.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curry2.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isArray.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isTransformer.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_dispatchable.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_reduced.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xfBase.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xall.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/all.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_arity.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curryN.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/curryN.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_arrayFromIterator.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_includesWith.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_functionName.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_has.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_objectIs.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isArguments.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/keys.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/type.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_equals.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/equals.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_indexOf.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_includes.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_map.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_quote.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_toISOString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_complement.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_arrayReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_filter.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isObject.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xfilter.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/filter.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/reject.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_toString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/toString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/max.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xmap.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/map.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isInteger.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isString.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_nth.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/prop.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/pluck.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_curry3.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isArrayLike.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_createReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xArrayReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/bind.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xReduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xwrap.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/reduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/allPass.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/always.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/anyPass.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_aperture.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_concat.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xaperture.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/aperture.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_reduce.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/ap.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/liftN.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/lift.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/not.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/complement.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/cond.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/defaultTo.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_xfindIndex.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/findIndex.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/head.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_identity.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/identity.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/ifElse.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_checkForMethod.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/slice.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/init.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_isTypedArray.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/empty.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/isEmpty.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/isNil.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/last.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/internal/_pipe.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/tail.js","../node_modules/.pnpm/ramda@0.30.1/node_modules/ramda/es/pipe.js","../src/shared/className.ts","../src/shared/option.ts","../src/shared/number.ts","../src/shared/result.ts","../src/chart-error/ChartError.tsx","../src/area-chart/AreaChart.domain.ts","../src/area-chart/AreaChart.model.ts","../src/area-chart/components/AreaChartCaption.tsx","../src/area-chart/components/AreaChartAxes.tsx","../src/area-chart/components/AreaChartFilledRegion.tsx","../src/area-chart/components/AreaChartGridLines.tsx","../src/area-chart/components/AreaChartLine.tsx","../src/area-chart/components/AreaChartPlotArea.tsx","../src/area-chart/components/AreaChartPointMarker.tsx","../src/area-chart/components/AreaChartPoints.tsx","../src/area-chart/components/AreaChartTooltip.tsx","../src/area-chart/components/AreaChartSvg.tsx","../src/area-chart/components/AreaChartFigure.tsx","../src/area-chart/AreaChart.tsx","../src/area-chart/AreaChart.defaults.ts","../src/bar-chart/BarChart.domain.ts","../src/bar-chart/BarChart.model.ts","../src/bar-chart/components/BarChartCaption.tsx","../src/bar-chart/components/BarChartAxes.tsx","../src/bar-chart/components/BarChartBar.tsx","../src/bar-chart/components/BarChartCategoryLabel.tsx","../src/bar-chart/components/BarChartValueLabel.tsx","../src/bar-chart/components/BarChartCategory.tsx","../src/bar-chart/components/BarChartCategories.tsx","../src/bar-chart/components/BarChartGridLines.tsx","../src/bar-chart/components/BarChartPlotArea.tsx","../src/bar-chart/components/BarChartTooltip.tsx","../src/bar-chart/components/BarChartSvg.tsx","../src/bar-chart/components/BarChartFigure.tsx","../src/bar-chart/BarChart.tsx","../src/bar-chart/BarChart.defaults.ts","../src/bullet-chart/BulletChart.domain.ts","../src/bullet-chart/BulletChart.model.ts","../src/bullet-chart/components/BulletChartCaption.tsx","../src/bullet-chart/components/BulletChartAxis.tsx","../src/bullet-chart/components/BulletChartBands.tsx","../src/bullet-chart/components/BulletChartCurrentBar.tsx","../src/bullet-chart/components/BulletChartTargetMarker.tsx","../src/bullet-chart/components/BulletChartValueLabels.tsx","../src/bullet-chart/components/BulletChartSvg.tsx","../src/bullet-chart/components/BulletChartFigure.tsx","../src/bullet-chart/BulletChart.tsx","../src/bullet-chart/BulletChart.defaults.ts","../src/funnel-chart/FunnelChart.domain.ts","../src/funnel-chart/FunnelChart.model.ts","../src/funnel-chart/components/FunnelChartCaption.tsx","../src/funnel-chart/components/FunnelChartSegment.tsx","../src/funnel-chart/components/FunnelChartStageLabel.tsx","../src/funnel-chart/components/FunnelChartValueLabel.tsx","../src/funnel-chart/components/FunnelChartStage.tsx","../src/funnel-chart/components/FunnelChartStages.tsx","../src/funnel-chart/components/FunnelChartTooltip.tsx","../src/funnel-chart/components/FunnelChartSvg.tsx","../src/funnel-chart/components/FunnelChartFigure.tsx","../src/funnel-chart/FunnelChart.tsx","../src/funnel-chart/FunnelChart.defaults.ts","../src/gauge-chart/GaugeChart.domain.ts","../src/gauge-chart/GaugeChart.model.ts","../src/gauge-chart/components/GaugeChartCaption.tsx","../src/gauge-chart/components/GaugeChartAxis.tsx","../src/gauge-chart/components/GaugeChartNeedle.tsx","../src/gauge-chart/components/GaugeChartValueLabels.tsx","../src/gauge-chart/components/GaugeChartZones.tsx","../src/gauge-chart/components/GaugeChartSvg.tsx","../src/gauge-chart/components/GaugeChartFigure.tsx","../src/gauge-chart/GaugeChart.tsx","../src/gauge-chart/GaugeChart.defaults.ts","../src/box-plot/BoxPlot.domain.ts","../src/box-plot/BoxPlot.model.ts","../src/box-plot/components/BoxPlotCaption.tsx","../src/box-plot/components/BoxPlotAxes.tsx","../src/box-plot/components/BoxPlotDistribution.tsx","../src/box-plot/components/BoxPlotGridLines.tsx","../src/box-plot/components/BoxPlotPlotArea.tsx","../src/box-plot/components/BoxPlotTooltip.tsx","../src/box-plot/components/BoxPlotXTicks.tsx","../src/box-plot/components/BoxPlotSvg.tsx","../src/box-plot/components/BoxPlotFigure.tsx","../src/box-plot/BoxPlot.tsx","../src/box-plot/BoxPlot.defaults.ts","../src/histogram-chart/HistogramChart.domain.ts","../src/histogram-chart/HistogramChart.model.ts","../src/histogram-chart/components/HistogramChartCaption.tsx","../src/histogram-chart/components/HistogramChartAxes.tsx","../src/histogram-chart/components/HistogramChartBar.tsx","../src/histogram-chart/components/HistogramChartCountLabel.tsx","../src/histogram-chart/components/HistogramChartBin.tsx","../src/histogram-chart/components/HistogramChartBins.tsx","../src/histogram-chart/components/HistogramChartGridLines.tsx","../src/histogram-chart/components/HistogramChartPlotArea.tsx","../src/histogram-chart/components/HistogramChartTooltip.tsx","../src/histogram-chart/HistogramChart.defaults.ts","../src/histogram-chart/components/HistogramChartXTicks.tsx","../src/histogram-chart/components/HistogramChartSvg.tsx","../src/histogram-chart/components/HistogramChartFigure.tsx","../src/histogram-chart/HistogramChart.tsx","../src/kpi-card/KPICard.domain.ts","../src/kpi-card/KPICard.model.ts","../src/kpi-card/components/KPICardCaption.tsx","../src/kpi-card/components/KPICardFigure.tsx","../src/kpi-card/KPICard.tsx","../src/kpi-card/KPICard.defaults.ts","../src/shared/linearSeries.ts","../src/line-chart/LineChart.domain.ts","../src/line-chart/LineChart.model.ts","../src/line-chart/components/LineChartCaption.tsx","../src/line-chart/components/LineChartAxes.tsx","../src/line-chart/components/LineChartGridLines.tsx","../src/line-chart/components/LineChartPath.tsx","../src/line-chart/components/LineChartPlotArea.tsx","../src/line-chart/components/LineChartPointMarker.tsx","../src/line-chart/components/LineChartPoints.tsx","../src/line-chart/components/LineChartTooltip.tsx","../src/line-chart/components/LineChartSvg.tsx","../src/line-chart/components/LineChartFigure.tsx","../src/line-chart/LineChart.tsx","../src/line-chart/LineChart.defaults.ts","../src/pie-donut-chart/PieDonutChart.domain.ts","../src/pie-donut-chart/PieDonutChart.model.ts","../src/pie-donut-chart/components/PieDonutChartCaption.tsx","../src/pie-donut-chart/components/PieDonutChartLabels.tsx","../src/pie-donut-chart/components/PieDonutChartSlice.tsx","../src/pie-donut-chart/components/PieDonutChartSlices.tsx","../src/pie-donut-chart/components/PieDonutChartTooltip.tsx","../src/pie-donut-chart/components/PieDonutChartSvg.tsx","../src/pie-donut-chart/components/PieDonutChartFigure.tsx","../src/pie-donut-chart/PieDonutChart.tsx","../src/pie-donut-chart/PieDonutChart.defaults.ts","../src/progress-bar/ProgressBar.domain.ts","../src/progress-bar/ProgressBar.model.ts","../src/progress-bar/components/ProgressBarCaption.tsx","../src/progress-bar/components/ProgressBarSvg.tsx","../src/progress-bar/components/ProgressBarFigure.tsx","../src/progress-bar/ProgressBar.tsx","../src/progress-bar/ProgressBar.defaults.ts","../src/ranked-list/RankedList.domain.ts","../src/ranked-list/RankedList.model.ts","../src/ranked-list/components/RankedListCaption.tsx","../src/ranked-list/components/RankedListEntry.tsx","../src/ranked-list/components/RankedListFigure.tsx","../src/ranked-list/RankedList.tsx","../src/ranked-list/RankedList.defaults.ts","../src/scatter-plot/ScatterPlot.domain.ts","../src/scatter-plot/ScatterPlot.model.ts","../src/scatter-plot/components/ScatterPlotCaption.tsx","../src/scatter-plot/components/ScatterPlotAxes.tsx","../src/scatter-plot/components/ScatterPlotDotMarker.tsx","../src/scatter-plot/components/ScatterPlotDots.tsx","../src/scatter-plot/components/ScatterPlotGridLines.tsx","../src/scatter-plot/components/ScatterPlotPlotArea.tsx","../src/scatter-plot/components/ScatterPlotTooltip.tsx","../src/scatter-plot/components/ScatterPlotSvg.tsx","../src/scatter-plot/components/ScatterPlotFigure.tsx","../src/scatter-plot/ScatterPlot.tsx","../src/scatter-plot/ScatterPlot.defaults.ts","../src/sparkline/Sparkline.domain.ts","../src/sparkline/Sparkline.model.ts","../src/sparkline/components/SparklineCaption.tsx","../src/sparkline/components/SparklinePath.tsx","../src/sparkline/components/SparklineSvg.tsx","../src/sparkline/components/SparklineFigure.tsx","../src/sparkline/Sparkline.tsx","../src/sparkline/Sparkline.defaults.ts","../src/variance-chart/VarianceChart.domain.ts","../src/variance-chart/VarianceChart.model.ts","../src/variance-chart/components/VarianceChartCaption.tsx","../src/variance-chart/components/VarianceChartAxes.tsx","../src/variance-chart/components/VarianceChartBar.tsx","../src/variance-chart/components/VarianceChartCategoryLabel.tsx","../src/variance-chart/components/VarianceChartValueLabel.tsx","../src/variance-chart/components/VarianceChartEntry.tsx","../src/variance-chart/components/VarianceChartEntries.tsx","../src/variance-chart/components/VarianceChartGridLines.tsx","../src/variance-chart/components/VarianceChartPlotArea.tsx","../src/variance-chart/components/VarianceChartTooltip.tsx","../src/variance-chart/components/VarianceChartSvg.tsx","../src/variance-chart/components/VarianceChartFigure.tsx","../src/variance-chart/VarianceChart.tsx","../src/variance-chart/VarianceChart.defaults.ts"],"names":["XAll","all","curryN","prop","_isArguments","contains","keys","type","b","equals","pad","_toISOString","XFilter","reject","recur","toString","max","XMap","_xmap","map","pluck","_reduce","bind","XWrap","allPass","always","anyPass","XAperture","reduce_default","ap","liftN","lift","not","cond","defaultTo","XFindIndex","findIndex","ifElse","slice","empty","isEmpty","isNil","jsx","jsxs","Fragment","isFiniteNumber","datasetValidators","validateDataset","scaleLinear","TOOLTIP_HEIGHT","TOOLTIP_MIN_WIDTH","TOOLTIP_PADDING_X","TOOLTIP_CHAR_WIDTH","VIEWBOX_PADDING","getTooltipWidth","clamp","useState","useMemo","isNonEmptyString","getValues","toScaleRange","isWithinScaleRange","currentValueIsWithinScale","hasNonEmptyLabel","hasOnlyNonEmptyLabels","toValidatedInput","inputValidators","containsCurrentValue","TICK_LABEL_OFFSET","getScaleMidpoint","getScaleTicks","createArc","renderLabel","byAscendingValue","getExtent","extent","isZeroWidthExtent","expandZeroWidthExtent","detailsFromIndex","hasOnlyFiniteNumbers","findInvalidNumberIndex","toValidatedDataset","isNumber","withNumberDefault","createD3Bin","toBar","getHitAreaY","getBinKey","hasValidCurrentValue","MINIMUM_POINT_COUNT","hasEnoughPoints","getXValues","getYValues","hasOnlyFiniteXValues","hasOnlyFiniteYValues","findInvalidXValueIndex","findInvalidYValueIndex","hasUniqueXValues","findDuplicateXValue","byAscendingX","sortByX","renderLinePath","line","getXExtent","getYExtent","getCategories","hasOnlyNamedCategories","findEmptyCategoryIndex","hasUniqueCategories","findDuplicateCategory","getPlotWidth","getOuterRadius","getPolarPoint","getLabelAnchor","arc","isNonNegativeFiniteNumber","isPositiveFiniteNumber","useId","isPositiveInteger","hasOnlyFiniteValues","findInvalidValueIndex","byDescendingValue","getMaximumValue","computeSegments","isFirstSegmentIndex","getPointsForSegment","getPointsFromSegments","isNonZeroFiniteNumber","isHigherIsBetter","isLowerIsBetter","getMinValue","min","getMaxValue","getLowerDomain","getUpperDomain","getCategory","getValueY","scaleBand","getDisplayedVariance"],"mappings":"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","file":"index.js","sourcesContent":["export default function _isPlaceholder(a) {\n return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true;\n}","import _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal one-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry1(fn) {\n return function f1(a) {\n if (arguments.length === 0 || _isPlaceholder(a)) {\n return f1;\n } else {\n return fn.apply(this, arguments);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal two-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry2(fn) {\n return function f2(a, b) {\n switch (arguments.length) {\n case 0:\n return f2;\n case 1:\n return _isPlaceholder(a) ? f2 : _curry1(function (_b) {\n return fn(a, _b);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f2 : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b);\n }) : fn(a, b);\n }\n };\n}","/**\n * Tests whether or not an object is an array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is an array, `false` otherwise.\n * @example\n *\n * _isArray([]); //=> true\n * _isArray(null); //=> false\n * _isArray({}); //=> false\n */\nexport default Array.isArray || function _isArray(val) {\n return val != null && val.length >= 0 && Object.prototype.toString.call(val) === '[object Array]';\n};","export default function _isTransformer(obj) {\n return obj != null && typeof obj['@@transducer/step'] === 'function';\n}","import _isArray from \"./_isArray.js\";\nimport _isTransformer from \"./_isTransformer.js\";\n\n/**\n * Returns a function that dispatches with different strategies based on the\n * object in list position (last argument). If it is an array, executes [fn].\n * Otherwise, if it has a function with one of the given method names, it will\n * execute that function (functor case). Otherwise, if it is a transformer,\n * uses transducer created by [transducerCreator] to return a new transformer\n * (transducer case).\n * Otherwise, it will default to executing [fn].\n *\n * @private\n * @param {Array} methodNames properties to check for a custom implementation\n * @param {Function} transducerCreator transducer factory if object is transformer\n * @param {Function} fn default ramda implementation\n * @return {Function} A function that dispatches on object in list position\n */\nexport default function _dispatchable(methodNames, transducerCreator, fn) {\n return function () {\n if (arguments.length === 0) {\n return fn();\n }\n var obj = arguments[arguments.length - 1];\n if (!_isArray(obj)) {\n var idx = 0;\n while (idx < methodNames.length) {\n if (typeof obj[methodNames[idx]] === 'function') {\n return obj[methodNames[idx]].apply(obj, Array.prototype.slice.call(arguments, 0, -1));\n }\n idx += 1;\n }\n if (_isTransformer(obj)) {\n var transducer = transducerCreator.apply(null, Array.prototype.slice.call(arguments, 0, -1));\n return transducer(obj);\n }\n }\n return fn.apply(this, arguments);\n };\n}","export default function _reduced(x) {\n return x && x['@@transducer/reduced'] ? x : {\n '@@transducer/value': x,\n '@@transducer/reduced': true\n };\n}","export default {\n init: function () {\n return this.xf['@@transducer/init']();\n },\n result: function (result) {\n return this.xf['@@transducer/result'](result);\n }\n};","import _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\nvar XAll = /*#__PURE__*/function () {\n function XAll(f, xf) {\n this.xf = xf;\n this.f = f;\n this.all = true;\n }\n XAll.prototype['@@transducer/init'] = _xfBase.init;\n XAll.prototype['@@transducer/result'] = function (result) {\n if (this.all) {\n result = this.xf['@@transducer/step'](result, true);\n }\n return this.xf['@@transducer/result'](result);\n };\n XAll.prototype['@@transducer/step'] = function (result, input) {\n if (!this.f(input)) {\n this.all = false;\n result = _reduced(this.xf['@@transducer/step'](result, false));\n }\n return result;\n };\n return XAll;\n}();\nexport default function _xall(f) {\n return function (xf) {\n return new XAll(f, xf);\n };\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xall from \"./internal/_xall.js\";\n\n/**\n * Returns `true` if all elements of the list match the predicate, `false` if\n * there are any that don't.\n *\n * Dispatches to the `all` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig (a -> Boolean) -> [a] -> Boolean\n * @param {Function} fn The predicate function.\n * @param {Array} list The array to consider.\n * @return {Boolean} `true` if the predicate is satisfied by every element, `false`\n * otherwise.\n * @see R.any, R.none, R.transduce\n * @example\n *\n * const equals3 = R.equals(3);\n * R.all(equals3)([3, 3, 3, 3]); //=> true\n * R.all(equals3)([3, 3, 1, 3]); //=> false\n */\nvar all = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['all'], _xall, function all(fn, list) {\n var idx = 0;\n while (idx < list.length) {\n if (!fn(list[idx])) {\n return false;\n }\n idx += 1;\n }\n return true;\n}));\nexport default all;","export default function _arity(n, fn) {\n /* eslint-disable no-unused-vars */\n switch (n) {\n case 0:\n return function () {\n return fn.apply(this, arguments);\n };\n case 1:\n return function (a0) {\n return fn.apply(this, arguments);\n };\n case 2:\n return function (a0, a1) {\n return fn.apply(this, arguments);\n };\n case 3:\n return function (a0, a1, a2) {\n return fn.apply(this, arguments);\n };\n case 4:\n return function (a0, a1, a2, a3) {\n return fn.apply(this, arguments);\n };\n case 5:\n return function (a0, a1, a2, a3, a4) {\n return fn.apply(this, arguments);\n };\n case 6:\n return function (a0, a1, a2, a3, a4, a5) {\n return fn.apply(this, arguments);\n };\n case 7:\n return function (a0, a1, a2, a3, a4, a5, a6) {\n return fn.apply(this, arguments);\n };\n case 8:\n return function (a0, a1, a2, a3, a4, a5, a6, a7) {\n return fn.apply(this, arguments);\n };\n case 9:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8) {\n return fn.apply(this, arguments);\n };\n case 10:\n return function (a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {\n return fn.apply(this, arguments);\n };\n default:\n throw new Error('First argument to _arity must be a non-negative integer no greater than ten');\n }\n}","import _arity from \"./_arity.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Internal curryN function.\n *\n * @private\n * @category Function\n * @param {Number} length The arity of the curried function.\n * @param {Array} received An array of arguments received thus far.\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curryN(length, received, fn) {\n return function () {\n var combined = [];\n var argsIdx = 0;\n var left = length;\n var combinedIdx = 0;\n var hasPlaceholder = false;\n while (combinedIdx < received.length || argsIdx < arguments.length) {\n var result;\n if (combinedIdx < received.length && (!_isPlaceholder(received[combinedIdx]) || argsIdx >= arguments.length)) {\n result = received[combinedIdx];\n } else {\n result = arguments[argsIdx];\n argsIdx += 1;\n }\n combined[combinedIdx] = result;\n if (!_isPlaceholder(result)) {\n left -= 1;\n } else {\n hasPlaceholder = true;\n }\n combinedIdx += 1;\n }\n return !hasPlaceholder && left <= 0 ? fn.apply(this, combined) : _arity(Math.max(0, left), _curryN(length, combined, fn));\n };\n}","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _curryN from \"./internal/_curryN.js\";\n\n/**\n * Returns a curried equivalent of the provided function, with the specified\n * arity. The curried function has two unusual capabilities. First, its\n * arguments needn't be provided one at a time. If `g` is `R.curryN(3, f)`, the\n * following are equivalent:\n *\n * - `g(1)(2)(3)`\n * - `g(1)(2, 3)`\n * - `g(1, 2)(3)`\n * - `g(1, 2, 3)`\n *\n * Secondly, the special placeholder value [`R.__`](#__) may be used to specify\n * \"gaps\", allowing partial application of any combination of arguments,\n * regardless of their positions. If `g` is as above and `_` is [`R.__`](#__),\n * the following are equivalent:\n *\n * - `g(1, 2, 3)`\n * - `g(_, 2, 3)(1)`\n * - `g(_, _, 3)(1)(2)`\n * - `g(_, _, 3)(1, 2)`\n * - `g(_, 2)(1)(3)`\n * - `g(_, 2)(1, 3)`\n * - `g(_, 2)(_, 3)(1)`\n *\n * @func\n * @memberOf R\n * @since v0.5.0\n * @category Function\n * @sig Number -> (* -> a) -> (* -> a)\n * @param {Number} length The arity for the returned function.\n * @param {Function} fn The function to curry.\n * @return {Function} A new, curried function.\n * @see R.curry\n * @example\n *\n * const sumArgs = (...args) => R.sum(args);\n *\n * const curriedAddFourNumbers = R.curryN(4, sumArgs);\n * const f = curriedAddFourNumbers(1, 2);\n * const g = f(3);\n * g(4); //=> 10\n */\nvar curryN = /*#__PURE__*/_curry2(function curryN(length, fn) {\n if (length === 1) {\n return _curry1(fn);\n }\n return _arity(length, _curryN(length, [], fn));\n});\nexport default curryN;","export default function _arrayFromIterator(iter) {\n var list = [];\n var next;\n while (!(next = iter.next()).done) {\n list.push(next.value);\n }\n return list;\n}","export default function _includesWith(pred, x, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n if (pred(x, list[idx])) {\n return true;\n }\n idx += 1;\n }\n return false;\n}","export default function _functionName(f) {\n // String(x => x) evaluates to \"x => x\", so the pattern may not match.\n var match = String(f).match(/^function (\\w*)/);\n return match == null ? '' : match[1];\n}","export default function _has(prop, obj) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}","// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\nfunction _objectIs(a, b) {\n // SameValue algorithm\n if (a === b) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n return a !== 0 || 1 / a === 1 / b;\n } else {\n // Step 6.a: NaN == NaN\n return a !== a && b !== b;\n }\n}\nexport default typeof Object.is === 'function' ? Object.is : _objectIs;","import _has from \"./_has.js\";\nvar toString = Object.prototype.toString;\nvar _isArguments = /*#__PURE__*/function () {\n return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) {\n return toString.call(x) === '[object Arguments]';\n } : function _isArguments(x) {\n return _has('callee', x);\n };\n}();\nexport default _isArguments;","import _curry1 from \"./internal/_curry1.js\";\nimport _has from \"./internal/_has.js\";\nimport _isArguments from \"./internal/_isArguments.js\";\n\n// cover IE < 9 keys issues\nvar hasEnumBug = ! /*#__PURE__*/{\n toString: null\n}.propertyIsEnumerable('toString');\nvar nonEnumerableProps = ['constructor', 'valueOf', 'isPrototypeOf', 'toString', 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];\n// Safari bug\nvar hasArgsEnumBug = /*#__PURE__*/function () {\n 'use strict';\n\n return arguments.propertyIsEnumerable('length');\n}();\nvar contains = function contains(list, item) {\n var idx = 0;\n while (idx < list.length) {\n if (list[idx] === item) {\n return true;\n }\n idx += 1;\n }\n return false;\n};\n\n/**\n * Returns a list containing the names of all the enumerable own properties of\n * the supplied object.\n * Note that the order of the output array is not guaranteed to be consistent\n * across different JS platforms.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @sig {k: v} -> [k]\n * @param {Object} obj The object to extract properties from\n * @return {Array} An array of the object's own properties.\n * @see R.keysIn, R.values, R.toPairs\n * @example\n *\n * R.keys({a: 1, b: 2, c: 3}); //=> ['a', 'b', 'c']\n */\nvar keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? /*#__PURE__*/_curry1(function keys(obj) {\n return Object(obj) !== obj ? [] : Object.keys(obj);\n}) : /*#__PURE__*/_curry1(function keys(obj) {\n if (Object(obj) !== obj) {\n return [];\n }\n var prop, nIdx;\n var ks = [];\n var checkArgsLength = hasArgsEnumBug && _isArguments(obj);\n for (prop in obj) {\n if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) {\n ks[ks.length] = prop;\n }\n }\n if (hasEnumBug) {\n nIdx = nonEnumerableProps.length - 1;\n while (nIdx >= 0) {\n prop = nonEnumerableProps[nIdx];\n if (_has(prop, obj) && !contains(ks, prop)) {\n ks[ks.length] = prop;\n }\n nIdx -= 1;\n }\n }\n return ks;\n});\nexport default keys;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Gives a single-word string description of the (native) type of a value,\n * returning such answers as 'Object', 'Number', 'Array', or 'Null'. Does not\n * attempt to distinguish user Object types any further, reporting them all as\n * 'Object'.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Type\n * @sig * -> String\n * @param {*} val The value to test\n * @return {String}\n * @example\n *\n * R.type({}); //=> \"Object\"\n * R.type(1); //=> \"Number\"\n * R.type(false); //=> \"Boolean\"\n * R.type('s'); //=> \"String\"\n * R.type(null); //=> \"Null\"\n * R.type([]); //=> \"Array\"\n * R.type(/[A-z]/); //=> \"RegExp\"\n * R.type(() => {}); //=> \"Function\"\n * R.type(async () => {}); //=> \"AsyncFunction\"\n * R.type(undefined); //=> \"Undefined\"\n * R.type(BigInt(123)); //=> \"BigInt\"\n */\nvar type = /*#__PURE__*/_curry1(function type(val) {\n return val === null ? 'Null' : val === undefined ? 'Undefined' : Object.prototype.toString.call(val).slice(8, -1);\n});\nexport default type;","import _arrayFromIterator from \"./_arrayFromIterator.js\";\nimport _includesWith from \"./_includesWith.js\";\nimport _functionName from \"./_functionName.js\";\nimport _has from \"./_has.js\";\nimport _objectIs from \"./_objectIs.js\";\nimport keys from \"../keys.js\";\nimport type from \"../type.js\";\n\n/**\n * private _uniqContentEquals function.\n * That function is checking equality of 2 iterator contents with 2 assumptions\n * - iterators lengths are the same\n * - iterators values are unique\n *\n * false-positive result will be returned for comparison of, e.g.\n * - [1,2,3] and [1,2,3,4]\n * - [1,1,1] and [1,2,3]\n * */\n\nfunction _uniqContentEquals(aIterator, bIterator, stackA, stackB) {\n var a = _arrayFromIterator(aIterator);\n var b = _arrayFromIterator(bIterator);\n function eq(_a, _b) {\n return _equals(_a, _b, stackA.slice(), stackB.slice());\n }\n\n // if *a* array contains any element that is not included in *b*\n return !_includesWith(function (b, aItem) {\n return !_includesWith(eq, aItem, b);\n }, b, a);\n}\nexport default function _equals(a, b, stackA, stackB) {\n if (_objectIs(a, b)) {\n return true;\n }\n var typeA = type(a);\n if (typeA !== type(b)) {\n return false;\n }\n if (typeof a['fantasy-land/equals'] === 'function' || typeof b['fantasy-land/equals'] === 'function') {\n return typeof a['fantasy-land/equals'] === 'function' && a['fantasy-land/equals'](b) && typeof b['fantasy-land/equals'] === 'function' && b['fantasy-land/equals'](a);\n }\n if (typeof a.equals === 'function' || typeof b.equals === 'function') {\n return typeof a.equals === 'function' && a.equals(b) && typeof b.equals === 'function' && b.equals(a);\n }\n switch (typeA) {\n case 'Arguments':\n case 'Array':\n case 'Object':\n if (typeof a.constructor === 'function' && _functionName(a.constructor) === 'Promise') {\n return a === b;\n }\n break;\n case 'Boolean':\n case 'Number':\n case 'String':\n if (!(typeof a === typeof b && _objectIs(a.valueOf(), b.valueOf()))) {\n return false;\n }\n break;\n case 'Date':\n if (!_objectIs(a.valueOf(), b.valueOf())) {\n return false;\n }\n break;\n case 'Error':\n return a.name === b.name && a.message === b.message;\n case 'RegExp':\n if (!(a.source === b.source && a.global === b.global && a.ignoreCase === b.ignoreCase && a.multiline === b.multiline && a.sticky === b.sticky && a.unicode === b.unicode)) {\n return false;\n }\n break;\n }\n var idx = stackA.length - 1;\n while (idx >= 0) {\n if (stackA[idx] === a) {\n return stackB[idx] === b;\n }\n idx -= 1;\n }\n switch (typeA) {\n case 'Map':\n if (a.size !== b.size) {\n return false;\n }\n return _uniqContentEquals(a.entries(), b.entries(), stackA.concat([a]), stackB.concat([b]));\n case 'Set':\n if (a.size !== b.size) {\n return false;\n }\n return _uniqContentEquals(a.values(), b.values(), stackA.concat([a]), stackB.concat([b]));\n case 'Arguments':\n case 'Array':\n case 'Object':\n case 'Boolean':\n case 'Number':\n case 'String':\n case 'Date':\n case 'Error':\n case 'RegExp':\n case 'Int8Array':\n case 'Uint8Array':\n case 'Uint8ClampedArray':\n case 'Int16Array':\n case 'Uint16Array':\n case 'Int32Array':\n case 'Uint32Array':\n case 'Float32Array':\n case 'Float64Array':\n case 'ArrayBuffer':\n break;\n default:\n // Values of other types are only equal if identical.\n return false;\n }\n var keysA = keys(a);\n if (keysA.length !== keys(b).length) {\n return false;\n }\n var extendedStackA = stackA.concat([a]);\n var extendedStackB = stackB.concat([b]);\n idx = keysA.length - 1;\n while (idx >= 0) {\n var key = keysA[idx];\n if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) {\n return false;\n }\n idx -= 1;\n }\n return true;\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _equals from \"./internal/_equals.js\";\n\n/**\n * Returns `true` if its arguments are equivalent, `false` otherwise. Handles\n * cyclical data structures.\n *\n * Dispatches symmetrically to the `equals` methods of both arguments, if\n * present.\n *\n * @func\n * @memberOf R\n * @since v0.15.0\n * @category Relation\n * @sig a -> b -> Boolean\n * @param {*} a\n * @param {*} b\n * @return {Boolean}\n * @example\n *\n * R.equals(1, 1); //=> true\n * R.equals(1, '1'); //=> false\n * R.equals([1, 2, 3], [1, 2, 3]); //=> true\n *\n * const a = {}; a.v = a;\n * const b = {}; b.v = b;\n * R.equals(a, b); //=> true\n */\nvar equals = /*#__PURE__*/_curry2(function equals(a, b) {\n return _equals(a, b, [], []);\n});\nexport default equals;","import equals from \"../equals.js\";\nexport default function _indexOf(list, a, idx) {\n var inf, item;\n // Array.prototype.indexOf doesn't exist below IE9\n if (typeof list.indexOf === 'function') {\n switch (typeof a) {\n case 'number':\n if (a === 0) {\n // manually crawl the list to distinguish between +0 and -0\n inf = 1 / a;\n while (idx < list.length) {\n item = list[idx];\n if (item === 0 && 1 / item === inf) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n } else if (a !== a) {\n // NaN\n while (idx < list.length) {\n item = list[idx];\n if (typeof item === 'number' && item !== item) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n }\n // non-zero numbers can utilise Set\n return list.indexOf(a, idx);\n\n // all these types can utilise Set\n case 'string':\n case 'boolean':\n case 'function':\n case 'undefined':\n return list.indexOf(a, idx);\n case 'object':\n if (a === null) {\n // null can utilise Set\n return list.indexOf(a, idx);\n }\n }\n }\n // anything else not covered above, defer to R.equals\n while (idx < list.length) {\n if (equals(list[idx], a)) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n}","import _indexOf from \"./_indexOf.js\";\nexport default function _includes(a, list) {\n return _indexOf(list, a, 0) >= 0;\n}","export default function _map(fn, functor) {\n var idx = 0;\n var len = functor.length;\n var result = Array(len);\n while (idx < len) {\n result[idx] = fn(functor[idx]);\n idx += 1;\n }\n return result;\n}","export default function _quote(s) {\n var escaped = s.replace(/\\\\/g, '\\\\\\\\').replace(/[\\b]/g, '\\\\b') // \\b matches word boundary; [\\b] matches backspace\n .replace(/\\f/g, '\\\\f').replace(/\\n/g, '\\\\n').replace(/\\r/g, '\\\\r').replace(/\\t/g, '\\\\t').replace(/\\v/g, '\\\\v').replace(/\\0/g, '\\\\0');\n return '\"' + escaped.replace(/\"/g, '\\\\\"') + '\"';\n}","/**\n * Polyfill from <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString>.\n */\nvar pad = function pad(n) {\n return (n < 10 ? '0' : '') + n;\n};\nvar _toISOString = typeof Date.prototype.toISOString === 'function' ? function _toISOString(d) {\n return d.toISOString();\n} : function _toISOString(d) {\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) + 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) + '.' + (d.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z';\n};\nexport default _toISOString;","export default function _complement(f) {\n return function () {\n return !f.apply(this, arguments);\n };\n}","export default function _arrayReduce(reducer, acc, list) {\n var index = 0;\n var length = list.length;\n while (index < length) {\n acc = reducer(acc, list[index]);\n index += 1;\n }\n return acc;\n}","export default function _filter(fn, list) {\n var idx = 0;\n var len = list.length;\n var result = [];\n while (idx < len) {\n if (fn(list[idx])) {\n result[result.length] = list[idx];\n }\n idx += 1;\n }\n return result;\n}","export default function _isObject(x) {\n return Object.prototype.toString.call(x) === '[object Object]';\n}","import _xfBase from \"./_xfBase.js\";\nvar XFilter = /*#__PURE__*/function () {\n function XFilter(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XFilter.prototype['@@transducer/init'] = _xfBase.init;\n XFilter.prototype['@@transducer/result'] = _xfBase.result;\n XFilter.prototype['@@transducer/step'] = function (result, input) {\n return this.f(input) ? this.xf['@@transducer/step'](result, input) : result;\n };\n return XFilter;\n}();\nexport default function _xfilter(f) {\n return function (xf) {\n return new XFilter(f, xf);\n };\n}","import _arrayReduce from \"./internal/_arrayReduce.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _filter from \"./internal/_filter.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _xfilter from \"./internal/_xfilter.js\";\nimport keys from \"./keys.js\";\n\n/**\n * Takes a predicate and a `Filterable`, and returns a new filterable of the\n * same type containing the members of the given filterable which satisfy the\n * given predicate. Filterable objects include plain objects or any object\n * that has a filter method such as `Array`.\n *\n * Dispatches to the `filter` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @category Object\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array} Filterable\n * @see R.reject, R.transduce, R.addIndex\n * @example\n *\n * const isEven = n => n % 2 === 0;\n *\n * R.filter(isEven, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.filter(isEven, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nvar filter = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/filter', 'filter'], _xfilter, function (pred, filterable) {\n return _isObject(filterable) ? _arrayReduce(function (acc, key) {\n if (pred(filterable[key])) {\n acc[key] = filterable[key];\n }\n return acc;\n }, {}, keys(filterable)) :\n // else\n _filter(pred, filterable);\n}));\nexport default filter;","import _complement from \"./internal/_complement.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport filter from \"./filter.js\";\n\n/**\n * The complement of [`filter`](#filter).\n *\n * Acts as a transducer if a transformer is given in list position. Filterable\n * objects include plain objects or any object that has a filter method such\n * as `Array`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Filterable f => (a -> Boolean) -> f a -> f a\n * @param {Function} pred\n * @param {Array} filterable\n * @return {Array}\n * @see R.filter, R.transduce, R.addIndex\n * @example\n *\n * const isOdd = (n) => n % 2 !== 0;\n *\n * R.reject(isOdd, [1, 2, 3, 4]); //=> [2, 4]\n *\n * R.reject(isOdd, {a: 1, b: 2, c: 3, d: 4}); //=> {b: 2, d: 4}\n */\nvar reject = /*#__PURE__*/_curry2(function reject(pred, filterable) {\n return filter(_complement(pred), filterable);\n});\nexport default reject;","import _includes from \"./_includes.js\";\nimport _map from \"./_map.js\";\nimport _quote from \"./_quote.js\";\nimport _toISOString from \"./_toISOString.js\";\nimport keys from \"../keys.js\";\nimport reject from \"../reject.js\";\nexport default function _toString(x, seen) {\n var recur = function recur(y) {\n var xs = seen.concat([x]);\n return _includes(y, xs) ? '<Circular>' : _toString(y, xs);\n };\n\n // mapPairs :: (Object, [String]) -> [String]\n var mapPairs = function (obj, keys) {\n return _map(function (k) {\n return _quote(k) + ': ' + recur(obj[k]);\n }, keys.slice().sort());\n };\n switch (Object.prototype.toString.call(x)) {\n case '[object Arguments]':\n return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';\n case '[object Array]':\n return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) {\n return /^\\d+$/.test(k);\n }, keys(x)))).join(', ') + ']';\n case '[object Boolean]':\n return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();\n case '[object Date]':\n return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';\n case '[object Map]':\n return 'new Map(' + recur(Array.from(x)) + ')';\n case '[object Null]':\n return 'null';\n case '[object Number]':\n return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);\n case '[object Set]':\n return 'new Set(' + recur(Array.from(x).sort()) + ')';\n case '[object String]':\n return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);\n case '[object Undefined]':\n return 'undefined';\n default:\n if (typeof x.toString === 'function') {\n var repr = x.toString();\n if (repr !== '[object Object]') {\n return repr;\n }\n }\n return '{' + mapPairs(x, keys(x)).join(', ') + '}';\n }\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _toString from \"./internal/_toString.js\";\n\n/**\n * Returns the string representation of the given value. `eval`'ing the output\n * should result in a value equivalent to the input value. Many of the built-in\n * `toString` methods do not satisfy this requirement.\n *\n * If the given value is an `[object Object]` with a `toString` method other\n * than `Object.prototype.toString`, this method is invoked with no arguments\n * to produce the return value. This means user-defined constructor functions\n * can provide a suitable `toString` method. For example:\n *\n * function Point(x, y) {\n * this.x = x;\n * this.y = y;\n * }\n *\n * Point.prototype.toString = function() {\n * return 'new Point(' + this.x + ', ' + this.y + ')';\n * };\n *\n * R.toString(new Point(1, 2)); //=> 'new Point(1, 2)'\n *\n * @func\n * @memberOf R\n * @since v0.14.0\n * @category String\n * @sig * -> String\n * @param {*} val\n * @return {String}\n * @example\n *\n * R.toString(42); //=> '42'\n * R.toString('abc'); //=> '\"abc\"'\n * R.toString([1, 2, 3]); //=> '[1, 2, 3]'\n * R.toString({foo: 1, bar: 2, baz: 3}); //=> '{\"bar\": 2, \"baz\": 3, \"foo\": 1}'\n * R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date(\"2001-02-03T04:05:06.000Z\")'\n */\nvar toString = /*#__PURE__*/_curry1(function toString(val) {\n return _toString(val, []);\n});\nexport default toString;","import _curry2 from \"./internal/_curry2.js\";\nimport toString from \"./toString.js\";\n\n/**\n * Returns the larger of its two arguments.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Relation\n * @sig Ord a => a -> a -> a\n * @param {*} a\n * @param {*} b\n * @return {*}\n * @see R.maxBy, R.min\n * @example\n *\n * R.max(789, 123); //=> 789\n * R.max('a', 'b'); //=> 'b'\n */\nvar max = /*#__PURE__*/_curry2(function max(a, b) {\n if (a === b) {\n return b;\n }\n function safeMax(x, y) {\n if (x > y !== y > x) {\n return y > x ? y : x;\n }\n return undefined;\n }\n var maxByValue = safeMax(a, b);\n if (maxByValue !== undefined) {\n return maxByValue;\n }\n var maxByType = safeMax(typeof a, typeof b);\n if (maxByType !== undefined) {\n return maxByType === typeof a ? a : b;\n }\n var stringA = toString(a);\n var maxByStringValue = safeMax(stringA, toString(b));\n if (maxByStringValue !== undefined) {\n return maxByStringValue === stringA ? a : b;\n }\n return b;\n});\nexport default max;","import _xfBase from \"./_xfBase.js\";\nvar XMap = /*#__PURE__*/function () {\n function XMap(f, xf) {\n this.xf = xf;\n this.f = f;\n }\n XMap.prototype['@@transducer/init'] = _xfBase.init;\n XMap.prototype['@@transducer/result'] = _xfBase.result;\n XMap.prototype['@@transducer/step'] = function (result, input) {\n return this.xf['@@transducer/step'](result, this.f(input));\n };\n return XMap;\n}();\nvar _xmap = function _xmap(f) {\n return function (xf) {\n return new XMap(f, xf);\n };\n};\nexport default _xmap;","import _arrayReduce from \"./internal/_arrayReduce.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _map from \"./internal/_map.js\";\nimport _xmap from \"./internal/_xmap.js\";\nimport curryN from \"./curryN.js\";\nimport keys from \"./keys.js\";\n\n/**\n * Takes a function and\n * a [functor](https://github.com/fantasyland/fantasy-land#functor),\n * applies the function to each of the functor's values, and returns\n * a functor of the same shape.\n *\n * Ramda provides suitable `map` implementations for `Array` and `Object`,\n * so this function may be applied to `[1, 2, 3]` or `{x: 1, y: 2, z: 3}`.\n *\n * Dispatches to the `map` method of the second argument, if present.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * Also treats functions as functors and will compose them together.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => (a -> b) -> f a -> f b\n * @param {Function} fn The function to be called on every element of the input `list`.\n * @param {Array} list The list to be iterated over.\n * @return {Array} The new list.\n * @see R.transduce, R.addIndex, R.pluck, R.project\n * @example\n *\n * const double = x => x * 2;\n *\n * R.map(double, [1, 2, 3]); //=> [2, 4, 6]\n *\n * R.map(double, {x: 1, y: 2, z: 3}); //=> {x: 2, y: 4, z: 6}\n * @symb R.map(f, [a, b]) = [f(a), f(b)]\n * @symb R.map(f, { x: a, y: b }) = { x: f(a), y: f(b) }\n * @symb R.map(f, functor_o) = functor_o.map(f)\n */\nvar map = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable(['fantasy-land/map', 'map'], _xmap, function map(fn, functor) {\n switch (Object.prototype.toString.call(functor)) {\n case '[object Function]':\n return curryN(functor.length, function () {\n return fn.call(this, functor.apply(this, arguments));\n });\n case '[object Object]':\n return _arrayReduce(function (acc, key) {\n acc[key] = fn(functor[key]);\n return acc;\n }, {}, keys(functor));\n default:\n return _map(fn, functor);\n }\n}));\nexport default map;","/**\n * Determine if the passed argument is an integer.\n *\n * @private\n * @param {*} n\n * @category Type\n * @return {Boolean}\n */\nexport default Number.isInteger || function _isInteger(n) {\n return n << 0 === n;\n};","export default function _isString(x) {\n return Object.prototype.toString.call(x) === '[object String]';\n}","import _isString from \"./_isString.js\";\nexport default function _nth(offset, list) {\n var idx = offset < 0 ? list.length + offset : offset;\n return _isString(list) ? list.charAt(idx) : list[idx];\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _isInteger from \"./internal/_isInteger.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns a function that when supplied an object returns the indicated\n * property of that object, if it exists.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Object\n * @typedefn Idx = String | Int | Symbol\n * @sig Idx -> {s: a} -> a | Undefined\n * @param {String|Number} p The property name or array index\n * @param {Object} obj The object to query\n * @return {*} The value at `obj.p`.\n * @see R.path, R.props, R.pluck, R.project, R.nth\n * @example\n *\n * R.prop('x', {x: 100}); //=> 100\n * R.prop('x', {}); //=> undefined\n * R.prop(0, [100]); //=> 100\n * R.compose(R.inc, R.prop('x'))({ x: 3 }) //=> 4\n */\n\nvar prop = /*#__PURE__*/_curry2(function prop(p, obj) {\n if (obj == null) {\n return;\n }\n return _isInteger(p) ? _nth(p, obj) : obj[p];\n});\nexport default prop;","import _curry2 from \"./internal/_curry2.js\";\nimport map from \"./map.js\";\nimport prop from \"./prop.js\";\n\n/**\n * Returns a new list by plucking the same named property off all objects in\n * the list supplied.\n *\n * `pluck` will work on\n * any [functor](https://github.com/fantasyland/fantasy-land#functor) in\n * addition to arrays, as it is equivalent to `R.map(R.prop(k), f)`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig Functor f => k -> f {k: v} -> f v\n * @param {Number|String} key The key name to pluck off of each object.\n * @param {Array} f The array or functor to consider.\n * @return {Array} The list of values for the given key.\n * @see R.project, R.prop, R.props\n * @example\n *\n * var getAges = R.pluck('age');\n * getAges([{name: 'fred', age: 29}, {name: 'wilma', age: 27}]); //=> [29, 27]\n *\n * R.pluck(0, [[1, 2], [3, 4]]); //=> [1, 3]\n * R.pluck('val', {a: {val: 3}, b: {val: 5}}); //=> {a: 3, b: 5}\n * @symb R.pluck('x', [{x: 1, y: 2}, {x: 3, y: 4}, {x: 5, y: 6}]) = [1, 3, 5]\n * @symb R.pluck(0, [[1, 2], [3, 4], [5, 6]]) = [1, 3, 5]\n */\nvar pluck = /*#__PURE__*/_curry2(function pluck(p, list) {\n return map(prop(p), list);\n});\nexport default pluck;","import _curry1 from \"./_curry1.js\";\nimport _curry2 from \"./_curry2.js\";\nimport _isPlaceholder from \"./_isPlaceholder.js\";\n\n/**\n * Optimized internal three-arity curry function.\n *\n * @private\n * @category Function\n * @param {Function} fn The function to curry.\n * @return {Function} The curried function.\n */\nexport default function _curry3(fn) {\n return function f3(a, b, c) {\n switch (arguments.length) {\n case 0:\n return f3;\n case 1:\n return _isPlaceholder(a) ? f3 : _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n });\n case 2:\n return _isPlaceholder(a) && _isPlaceholder(b) ? f3 : _isPlaceholder(a) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _curry1(function (_c) {\n return fn(a, b, _c);\n });\n default:\n return _isPlaceholder(a) && _isPlaceholder(b) && _isPlaceholder(c) ? f3 : _isPlaceholder(a) && _isPlaceholder(b) ? _curry2(function (_a, _b) {\n return fn(_a, _b, c);\n }) : _isPlaceholder(a) && _isPlaceholder(c) ? _curry2(function (_a, _c) {\n return fn(_a, b, _c);\n }) : _isPlaceholder(b) && _isPlaceholder(c) ? _curry2(function (_b, _c) {\n return fn(a, _b, _c);\n }) : _isPlaceholder(a) ? _curry1(function (_a) {\n return fn(_a, b, c);\n }) : _isPlaceholder(b) ? _curry1(function (_b) {\n return fn(a, _b, c);\n }) : _isPlaceholder(c) ? _curry1(function (_c) {\n return fn(a, b, _c);\n }) : fn(a, b, c);\n }\n };\n}","import _curry1 from \"./_curry1.js\";\nimport _isArray from \"./_isArray.js\";\nimport _isString from \"./_isString.js\";\n\n/**\n * Tests whether or not an object is similar to an array.\n *\n * @private\n * @category Type\n * @category List\n * @sig * -> Boolean\n * @param {*} x The object to test.\n * @return {Boolean} `true` if `x` has a numeric length property and extreme indices defined; `false` otherwise.\n * @example\n *\n * _isArrayLike([]); //=> true\n * _isArrayLike(true); //=> false\n * _isArrayLike({}); //=> false\n * _isArrayLike({length: 10}); //=> false\n * _isArrayLike({0: 'zero', 9: 'nine', length: 10}); //=> true\n * _isArrayLike({nodeType: 1, length: 1}) // => false\n */\nvar _isArrayLike = /*#__PURE__*/_curry1(function isArrayLike(x) {\n if (_isArray(x)) {\n return true;\n }\n if (!x) {\n return false;\n }\n if (typeof x !== 'object') {\n return false;\n }\n if (_isString(x)) {\n return false;\n }\n if (x.length === 0) {\n return true;\n }\n if (x.length > 0) {\n return x.hasOwnProperty(0) && x.hasOwnProperty(x.length - 1);\n }\n return false;\n});\nexport default _isArrayLike;","import _isArrayLike from \"./_isArrayLike.js\";\nvar symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator';\nexport default function _createReduce(arrayReduce, methodReduce, iterableReduce) {\n return function _reduce(xf, acc, list) {\n if (_isArrayLike(list)) {\n return arrayReduce(xf, acc, list);\n }\n if (list == null) {\n return acc;\n }\n if (typeof list['fantasy-land/reduce'] === 'function') {\n return methodReduce(xf, acc, list, 'fantasy-land/reduce');\n }\n if (list[symIterator] != null) {\n return iterableReduce(xf, acc, list[symIterator]());\n }\n if (typeof list.next === 'function') {\n return iterableReduce(xf, acc, list);\n }\n if (typeof list.reduce === 'function') {\n return methodReduce(xf, acc, list, 'reduce');\n }\n throw new TypeError('reduce: list must be array or iterable');\n };\n}","export default function _xArrayReduce(xf, acc, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n acc = xf['@@transducer/step'](acc, list[idx]);\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n idx += 1;\n }\n return xf['@@transducer/result'](acc);\n}","import _arity from \"./internal/_arity.js\";\nimport _curry2 from \"./internal/_curry2.js\";\n\n/**\n * Creates a function that is bound to a context.\n * Note: `R.bind` does not provide the additional argument-binding capabilities of\n * [Function.prototype.bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Function\n * @category Object\n * @sig (* -> *) -> {*} -> (* -> *)\n * @param {Function} fn The function to bind to context\n * @param {Object} thisObj The context to bind `fn` to\n * @return {Function} A function that will execute in the context of `thisObj`.\n * @see R.partial\n * @example\n *\n * const log = R.bind(console.log, console);\n * R.pipe(R.assoc('a', 2), R.tap(log), R.assoc('a', 3))({a: 1}); //=> {a: 3}\n * // logs {a: 2}\n * @symb R.bind(f, o)(a, b) = f.call(o, a, b)\n */\nvar bind = /*#__PURE__*/_curry2(function bind(fn, thisObj) {\n return _arity(fn.length, function () {\n return fn.apply(thisObj, arguments);\n });\n});\nexport default bind;","import _createReduce from \"./_createReduce.js\";\nimport _xArrayReduce from \"./_xArrayReduce.js\";\nimport bind from \"../bind.js\";\nfunction _xIterableReduce(xf, acc, iter) {\n var step = iter.next();\n while (!step.done) {\n acc = xf['@@transducer/step'](acc, step.value);\n if (acc && acc['@@transducer/reduced']) {\n acc = acc['@@transducer/value'];\n break;\n }\n step = iter.next();\n }\n return xf['@@transducer/result'](acc);\n}\nfunction _xMethodReduce(xf, acc, obj, methodName) {\n return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc));\n}\nvar _xReduce = /*#__PURE__*/_createReduce(_xArrayReduce, _xMethodReduce, _xIterableReduce);\nexport default _xReduce;","var XWrap = /*#__PURE__*/function () {\n function XWrap(fn) {\n this.f = fn;\n }\n XWrap.prototype['@@transducer/init'] = function () {\n throw new Error('init not implemented on XWrap');\n };\n XWrap.prototype['@@transducer/result'] = function (acc) {\n return acc;\n };\n XWrap.prototype['@@transducer/step'] = function (acc, x) {\n return this.f(acc, x);\n };\n return XWrap;\n}();\nexport default function _xwrap(fn) {\n return new XWrap(fn);\n}","import _curry3 from \"./internal/_curry3.js\";\nimport _xReduce from \"./internal/_xReduce.js\";\nimport _xwrap from \"./internal/_xwrap.js\";\n\n/**\n * Returns a single item by iterating through the list, successively calling\n * the iterator function and passing it an accumulator value and the current\n * value from the array, and then passing the result to the next call.\n *\n * The iterator function receives two values: *(acc, value)*. It may use\n * [`R.reduced`](#reduced) to shortcut the iteration.\n *\n * The arguments' order of [`reduceRight`](#reduceRight)'s iterator function\n * is *(value, acc)*.\n *\n * Note: `R.reduce` does not skip deleted or unassigned indices (sparse\n * arrays), unlike the native `Array.prototype.reduce` method. For more details\n * on this behavior, see:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Description\n *\n * Be cautious of mutating and returning the accumulator. If you reuse it across\n * invocations, it will continue to accumulate onto the same value. The general\n * recommendation is to always return a new value. If you can't do so for\n * performance reasons, then be sure to reinitialize the accumulator on each\n * invocation.\n *\n * Dispatches to the `reduce` method of the third argument, if present. When\n * doing so, it is up to the user to handle the [`R.reduced`](#reduced)\n * shortcuting, as this is not implemented by `reduce`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig ((a, b) -> a) -> a -> [b] -> a\n * @param {Function} fn The iterator function. Receives two values, the accumulator and the\n * current element from the array.\n * @param {*} acc The accumulator value.\n * @param {Array} list The list to iterate over.\n * @return {*} The final, accumulated value.\n * @see R.reduced, R.addIndex, R.reduceRight\n * @example\n *\n * R.reduce(R.subtract, 0, [1, 2, 3, 4]) // => ((((0 - 1) - 2) - 3) - 4) = -10\n * // - -10\n * // / \\ / \\\n * // - 4 -6 4\n * // / \\ / \\\n * // - 3 ==> -3 3\n * // / \\ / \\\n * // - 2 -1 2\n * // / \\ / \\\n * // 0 1 0 1\n *\n * @symb R.reduce(f, a, [b, c, d]) = f(f(f(a, b), c), d)\n */\nvar reduce = /*#__PURE__*/_curry3(function (xf, acc, list) {\n return _xReduce(typeof xf === 'function' ? _xwrap(xf) : xf, acc, list);\n});\nexport default reduce;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Takes a list of predicates and returns a predicate that returns true for a\n * given list of arguments if every one of the provided predicates is satisfied\n * by those arguments.\n *\n * The function returned is a curried function whose arity matches that of the\n * highest-arity predicate.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Logic\n * @sig [(*... -> Boolean)] -> (*... -> Boolean)\n * @param {Array} predicates An array of predicates to check\n * @return {Function} The combined predicate\n * @see R.anyPass, R.both\n * @example\n *\n * const isQueen = R.propEq('Q', 'rank');\n * const isSpade = R.propEq('♠︎', 'suit');\n * const isQueenOfSpades = R.allPass([isQueen, isSpade]);\n *\n * isQueenOfSpades({rank: 'Q', suit: '♣︎'}); //=> false\n * isQueenOfSpades({rank: 'Q', suit: '♠︎'}); //=> true\n */\nvar allPass = /*#__PURE__*/_curry1(function allPass(preds) {\n return curryN(reduce(max, 0, pluck('length', preds)), function () {\n var idx = 0;\n var len = preds.length;\n while (idx < len) {\n if (!preds[idx].apply(this, arguments)) {\n return false;\n }\n idx += 1;\n }\n return true;\n });\n});\nexport default allPass;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Returns a function that always returns the given value. Note that for\n * non-primitives the value returned is a reference to the original value.\n *\n * This function is known as `const`, `constant`, or `K` (for K combinator) in\n * other languages and libraries.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> (* -> a)\n * @param {*} val The value to wrap in a function\n * @return {Function} A Function :: * -> val.\n * @example\n *\n * const t = R.always('Tee');\n * t(); //=> 'Tee'\n */\nvar always = /*#__PURE__*/_curry1(function always(val) {\n return function () {\n return val;\n };\n});\nexport default always;","import _curry1 from \"./internal/_curry1.js\";\nimport curryN from \"./curryN.js\";\nimport max from \"./max.js\";\nimport pluck from \"./pluck.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Takes a list of predicates and returns a predicate that returns true for a\n * given list of arguments if at least one of the provided predicates is\n * satisfied by those arguments.\n *\n * The function returned is a curried function whose arity matches that of the\n * highest-arity predicate.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Logic\n * @sig [(*... -> Boolean)] -> (*... -> Boolean)\n * @param {Array} predicates An array of predicates to check\n * @return {Function} The combined predicate\n * @see R.allPass, R.either\n * @example\n *\n * const isClub = R.propEq('♣', 'suit');\n * const isSpade = R.propEq('♠', 'suit');\n * const isBlackCard = R.anyPass([isClub, isSpade]);\n *\n * isBlackCard({rank: '10', suit: '♣'}); //=> true\n * isBlackCard({rank: 'Q', suit: '♠'}); //=> true\n * isBlackCard({rank: 'Q', suit: '♦'}); //=> false\n */\nvar anyPass = /*#__PURE__*/_curry1(function anyPass(preds) {\n return curryN(reduce(max, 0, pluck('length', preds)), function () {\n var idx = 0;\n var len = preds.length;\n while (idx < len) {\n if (preds[idx].apply(this, arguments)) {\n return true;\n }\n idx += 1;\n }\n return false;\n });\n});\nexport default anyPass;","export default function _aperture(n, list) {\n var idx = 0;\n var limit = list.length - (n - 1);\n var acc = new Array(limit >= 0 ? limit : 0);\n while (idx < limit) {\n acc[idx] = Array.prototype.slice.call(list, idx, idx + n);\n idx += 1;\n }\n return acc;\n}","/**\n * Private `concat` function to merge two array-like objects.\n *\n * @private\n * @param {Array|Arguments} [set1=[]] An array-like object.\n * @param {Array|Arguments} [set2=[]] An array-like object.\n * @return {Array} A new, merged array.\n * @example\n *\n * _concat([4, 5, 6], [1, 2, 3]); //=> [4, 5, 6, 1, 2, 3]\n */\nexport default function _concat(set1, set2) {\n set1 = set1 || [];\n set2 = set2 || [];\n var idx;\n var len1 = set1.length;\n var len2 = set2.length;\n var result = [];\n idx = 0;\n while (idx < len1) {\n result[result.length] = set1[idx];\n idx += 1;\n }\n idx = 0;\n while (idx < len2) {\n result[result.length] = set2[idx];\n idx += 1;\n }\n return result;\n}","import _concat from \"./_concat.js\";\nimport _xfBase from \"./_xfBase.js\";\nvar XAperture = /*#__PURE__*/function () {\n function XAperture(n, xf) {\n this.xf = xf;\n this.pos = 0;\n this.full = false;\n this.acc = new Array(n);\n }\n XAperture.prototype['@@transducer/init'] = _xfBase.init;\n XAperture.prototype['@@transducer/result'] = function (result) {\n this.acc = null;\n return this.xf['@@transducer/result'](result);\n };\n XAperture.prototype['@@transducer/step'] = function (result, input) {\n this.store(input);\n return this.full ? this.xf['@@transducer/step'](result, this.getCopy()) : result;\n };\n XAperture.prototype.store = function (input) {\n this.acc[this.pos] = input;\n this.pos += 1;\n if (this.pos === this.acc.length) {\n this.pos = 0;\n this.full = true;\n }\n };\n XAperture.prototype.getCopy = function () {\n return _concat(Array.prototype.slice.call(this.acc, this.pos), Array.prototype.slice.call(this.acc, 0, this.pos));\n };\n return XAperture;\n}();\nexport default function _xaperture(n) {\n return function (xf) {\n return new XAperture(n, xf);\n };\n}","import _aperture from \"./internal/_aperture.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xaperture from \"./internal/_xaperture.js\";\n\n/**\n * Returns a new list, composed of n-tuples of consecutive elements. If `n` is\n * greater than the length of the list, an empty list is returned.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category List\n * @sig Number -> [a] -> [[a]]\n * @param {Number} n The size of the tuples to create\n * @param {Array} list The list to split into `n`-length tuples\n * @return {Array} The resulting list of `n`-length tuples\n * @see R.transduce\n * @example\n *\n * R.aperture(2, [1, 2, 3, 4, 5]); //=> [[1, 2], [2, 3], [3, 4], [4, 5]]\n * R.aperture(3, [1, 2, 3, 4, 5]); //=> [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * R.aperture(7, [1, 2, 3, 4, 5]); //=> []\n */\nvar aperture = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xaperture, _aperture));\nexport default aperture;","import _arrayReduce from \"./_arrayReduce.js\";\nimport _createReduce from \"./_createReduce.js\";\nfunction _iterableReduce(reducer, acc, iter) {\n var step = iter.next();\n while (!step.done) {\n acc = reducer(acc, step.value);\n step = iter.next();\n }\n return acc;\n}\nfunction _methodReduce(reducer, acc, obj, methodName) {\n return obj[methodName](reducer, acc);\n}\nvar _reduce = /*#__PURE__*/_createReduce(_arrayReduce, _methodReduce, _iterableReduce);\nexport default _reduce;","import _concat from \"./internal/_concat.js\";\nimport _curry2 from \"./internal/_curry2.js\";\nimport _reduce from \"./internal/_reduce.js\";\nimport map from \"./map.js\";\n\n/**\n * ap applies a list of functions to a list of values.\n *\n * Dispatches to the `ap` method of the first argument, if present. Also\n * treats curried functions as applicatives.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig [a -> b] -> [a] -> [b]\n * @sig Apply f => f (a -> b) -> f a -> f b\n * @sig (r -> a -> b) -> (r -> a) -> (r -> b)\n * @param {*} applyF\n * @param {*} applyX\n * @return {*}\n * @example\n *\n * R.ap([R.multiply(2), R.add(3)], [1,2,3]); //=> [2, 4, 6, 4, 5, 6]\n * R.ap([R.concat('tasty '), R.toUpper], ['pizza', 'salad']); //=> [\"tasty pizza\", \"tasty salad\", \"PIZZA\", \"SALAD\"]\n *\n * // R.ap can also be used as S combinator\n * // when only two functions are passed\n * R.ap(R.concat, R.toUpper)('Ramda') //=> 'RamdaRAMDA'\n * @symb R.ap([f, g], [a, b]) = [f(a), f(b), g(a), g(b)]\n */\nvar ap = /*#__PURE__*/_curry2(function ap(applyF, applyX) {\n return typeof applyX['fantasy-land/ap'] === 'function' ? applyX['fantasy-land/ap'](applyF) : typeof applyF.ap === 'function' ? applyF.ap(applyX) : typeof applyF === 'function' ? function (x) {\n return applyF(x)(applyX(x));\n } : _reduce(function (acc, f) {\n return _concat(acc, map(f, applyX));\n }, [], applyF);\n});\nexport default ap;","import _curry2 from \"./internal/_curry2.js\";\nimport _arrayReduce from \"./internal/_arrayReduce.js\";\nimport ap from \"./ap.js\";\nimport curryN from \"./curryN.js\";\nimport map from \"./map.js\";\n\n/**\n * \"lifts\" a function to be the specified arity, so that it may \"map over\" that\n * many lists, Functions or other objects that satisfy the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig Number -> (*... -> *) -> ([*]... -> [*])\n * @param {Function} fn The function to lift into higher context\n * @return {Function} The lifted function.\n * @see R.lift, R.ap\n * @example\n *\n * const madd3 = R.liftN(3, (...args) => R.sum(args));\n * madd3([1,2,3], [1,2,3], [1]); //=> [3, 4, 5, 4, 5, 6, 5, 6, 7]\n */\nvar liftN = /*#__PURE__*/_curry2(function liftN(arity, fn) {\n var lifted = curryN(arity, fn);\n return curryN(arity, function () {\n return _arrayReduce(ap, map(lifted, arguments[0]), Array.prototype.slice.call(arguments, 1));\n });\n});\nexport default liftN;","import _curry1 from \"./internal/_curry1.js\";\nimport liftN from \"./liftN.js\";\n\n/**\n * \"lifts\" a function of arity >= 1 so that it may \"map over\" a list, Function or other\n * object that satisfies the [FantasyLand Apply spec](https://github.com/fantasyland/fantasy-land#apply).\n *\n * @func\n * @memberOf R\n * @since v0.7.0\n * @category Function\n * @sig (*... -> *) -> ([*]... -> [*])\n * @param {Function} fn The function to lift into higher context\n * @return {Function} The lifted function.\n * @see R.liftN\n * @example\n *\n * const madd3 = R.lift((a, b, c) => a + b + c);\n *\n * madd3([100, 200], [30, 40], [5, 6, 7]); //=> [135, 136, 137, 145, 146, 147, 235, 236, 237, 245, 246, 247]\n *\n * const madd5 = R.lift((a, b, c, d, e) => a + b + c + d + e);\n *\n * madd5([10, 20], [1], [2, 3], [4], [100, 200]); //=> [117, 217, 118, 218, 127, 227, 128, 228]\n */\nvar lift = /*#__PURE__*/_curry1(function lift(fn) {\n return liftN(fn.length, fn);\n});\nexport default lift;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * A function that returns the `!` of its argument. It will return `true` when\n * passed false-y value, and `false` when passed a truth-y one.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig * -> Boolean\n * @param {*} a any value\n * @return {Boolean} the logical inverse of passed argument.\n * @see R.complement\n * @example\n *\n * R.not(true); //=> false\n * R.not(false); //=> true\n * R.not(0); //=> true\n * R.not(1); //=> false\n */\nvar not = /*#__PURE__*/_curry1(function not(a) {\n return !a;\n});\nexport default not;","import lift from \"./lift.js\";\nimport not from \"./not.js\";\n\n/**\n * Takes a function `f` and returns a function `g` such that if called with the same arguments\n * when `f` returns a \"truthy\" value, `g` returns `false` and when `f` returns a \"falsy\" value `g` returns `true`.\n *\n * `R.complement` may be applied to any functor\n *\n * @func\n * @memberOf R\n * @since v0.12.0\n * @category Logic\n * @sig (*... -> *) -> (*... -> Boolean)\n * @param {Function} f\n * @return {Function}\n * @see R.not\n * @example\n *\n * const isNotNil = R.complement(R.isNil);\n * R.isNil(null); //=> true\n * isNotNil(null); //=> false\n * R.isNil(7); //=> false\n * isNotNil(7); //=> true\n */\nvar complement = /*#__PURE__*/lift(not);\nexport default complement;","import _arity from \"./internal/_arity.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport map from \"./map.js\";\nimport max from \"./max.js\";\nimport reduce from \"./reduce.js\";\n\n/**\n * Returns a function, `fn`, which encapsulates `if/else, if/else, ...` logic.\n * `R.cond` takes a list of [predicate, transformer] pairs. All of the arguments\n * to `fn` are applied to each of the predicates in turn until one returns a\n * \"truthy\" value, at which point `fn` returns the result of applying its\n * arguments to the corresponding transformer. If none of the predicates\n * matches, `fn` returns undefined.\n *\n * **Please note**: This is not a direct substitute for a `switch` statement.\n * Remember that both elements of every pair passed to `cond` are *functions*,\n * and `cond` returns a function.\n *\n * @func\n * @memberOf R\n * @since v0.6.0\n * @category Logic\n * @sig [[(*... -> Boolean),(*... -> *)]] -> (*... -> *)\n * @param {Array} pairs A list of [predicate, transformer]\n * @return {Function}\n * @see R.ifElse, R.unless, R.when\n * @example\n *\n * const fn = R.cond([\n * [R.equals(0), R.always('water freezes at 0°C')],\n * [R.equals(100), R.always('water boils at 100°C')],\n * [R.T, temp => 'nothing special happens at ' + temp + '°C']\n * ]);\n * fn(0); //=> 'water freezes at 0°C'\n * fn(50); //=> 'nothing special happens at 50°C'\n * fn(100); //=> 'water boils at 100°C'\n */\nvar cond = /*#__PURE__*/_curry1(function cond(pairs) {\n var arity = reduce(max, 0, map(function (pair) {\n return pair[0].length;\n }, pairs));\n return _arity(arity, function () {\n var idx = 0;\n while (idx < pairs.length) {\n if (pairs[idx][0].apply(this, arguments)) {\n return pairs[idx][1].apply(this, arguments);\n }\n idx += 1;\n }\n });\n});\nexport default cond;","import _curry2 from \"./internal/_curry2.js\";\n\n/**\n * Returns the second argument if it is not `null`, `undefined` or `NaN`;\n * otherwise the first argument is returned.\n *\n * @func\n * @memberOf R\n * @since v0.10.0\n * @category Logic\n * @sig a -> b -> a | b\n * @param {a} default The default value.\n * @param {b} val `val` will be returned instead of `default` unless `val` is `null`, `undefined` or `NaN`.\n * @return {*} The second value if it is not `null`, `undefined` or `NaN`, otherwise the default value\n * @example\n *\n * const defaultTo42 = R.defaultTo(42);\n *\n * defaultTo42(null); //=> 42\n * defaultTo42(undefined); //=> 42\n * defaultTo42(false); //=> false\n * defaultTo42('Ramda'); //=> 'Ramda'\n * // parseInt('string') results in NaN\n * defaultTo42(parseInt('string')); //=> 42\n */\nvar defaultTo = /*#__PURE__*/_curry2(function defaultTo(d, v) {\n return v == null || v !== v ? d : v;\n});\nexport default defaultTo;","import _reduced from \"./_reduced.js\";\nimport _xfBase from \"./_xfBase.js\";\nvar XFindIndex = /*#__PURE__*/function () {\n function XFindIndex(f, xf) {\n this.xf = xf;\n this.f = f;\n this.idx = -1;\n this.found = false;\n }\n XFindIndex.prototype['@@transducer/init'] = _xfBase.init;\n XFindIndex.prototype['@@transducer/result'] = function (result) {\n if (!this.found) {\n result = this.xf['@@transducer/step'](result, -1);\n }\n return this.xf['@@transducer/result'](result);\n };\n XFindIndex.prototype['@@transducer/step'] = function (result, input) {\n this.idx += 1;\n if (this.f(input)) {\n this.found = true;\n result = _reduced(this.xf['@@transducer/step'](result, this.idx));\n }\n return result;\n };\n return XFindIndex;\n}();\nexport default function _xfindIndex(f) {\n return function (xf) {\n return new XFindIndex(f, xf);\n };\n}","import _curry2 from \"./internal/_curry2.js\";\nimport _dispatchable from \"./internal/_dispatchable.js\";\nimport _xfindIndex from \"./internal/_xfindIndex.js\";\n\n/**\n * Returns the index of the first element of the list which matches the\n * predicate, or `-1` if no element matches.\n *\n * Acts as a transducer if a transformer is given in list position.\n *\n * @func\n * @memberOf R\n * @since v0.1.1\n * @category List\n * @sig (a -> Boolean) -> [a] -> Number\n * @param {Function} fn The predicate function used to determine if the element is the\n * desired one.\n * @param {Array} list The array to consider.\n * @return {Number} The index of the element found, or `-1`.\n * @see R.transduce, R.indexOf\n * @example\n *\n * const xs = [{a: 1}, {a: 2}, {a: 3}];\n * R.findIndex(R.propEq(2, 'a'))(xs); //=> 1\n * R.findIndex(R.propEq(4, 'a'))(xs); //=> -1\n */\nvar findIndex = /*#__PURE__*/_curry2( /*#__PURE__*/_dispatchable([], _xfindIndex, function findIndex(fn, list) {\n var idx = 0;\n var len = list.length;\n while (idx < len) {\n if (fn(list[idx])) {\n return idx;\n }\n idx += 1;\n }\n return -1;\n}));\nexport default findIndex;","import _curry1 from \"./internal/_curry1.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns the first element of the given list or string. In some libraries\n * this function is named `first`.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> a | Undefined\n * @sig String -> String | Undefined\n * @param {Array|String} list\n * @return {*}\n * @see R.tail, R.init, R.last\n * @example\n *\n * R.head(['fi', 'fo', 'fum']); //=> 'fi'\n * R.head([]); //=> undefined\n *\n * R.head('abc'); //=> 'a'\n * R.head(''); //=> undefined\n */\nvar head = /*#__PURE__*/_curry1(function (list) {\n return _nth(0, list);\n});\nexport default head;","export default function _identity(x) {\n return x;\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _identity from \"./internal/_identity.js\";\n\n/**\n * A function that does nothing but return the parameter supplied to it. Good\n * as a default or placeholder function.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig a -> a\n * @param {*} x The value to return.\n * @return {*} The input value, `x`.\n * @example\n *\n * R.identity(1); //=> 1\n *\n * const obj = {};\n * R.identity(obj) === obj; //=> true\n * @symb R.identity(a) = a\n */\nvar identity = /*#__PURE__*/_curry1(_identity);\nexport default identity;","import _curry3 from \"./internal/_curry3.js\";\nimport curryN from \"./curryN.js\";\n\n/**\n * Creates a function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n *\n * Note that `ifElse` takes its arity from the longest of the three functions passed to it.\n *\n * @func\n * @memberOf R\n * @since v0.8.0\n * @category Logic\n * @sig (*... -> Boolean) -> (*... -> *) -> (*... -> *) -> (*... -> *)\n * @param {Function} condition A predicate function\n * @param {Function} onTrue A function to invoke when the `condition` evaluates to a truthy value.\n * @param {Function} onFalse A function to invoke when the `condition` evaluates to a falsy value.\n * @return {Function} A new function that will process either the `onTrue` or the `onFalse`\n * function depending upon the result of the `condition` predicate.\n * @see R.unless, R.when, R.cond\n * @example\n *\n * const incCount = R.ifElse(\n * R.has('count'),\n * R.over(R.lensProp('count'), R.inc),\n * R.assoc('count', 1)\n * );\n * incCount({ count: 1 }); //=> { count: 2 }\n * incCount({}); //=> { count: 1 }\n */\nvar ifElse = /*#__PURE__*/_curry3(function ifElse(condition, onTrue, onFalse) {\n return curryN(Math.max(condition.length, onTrue.length, onFalse.length), function _ifElse() {\n return condition.apply(this, arguments) ? onTrue.apply(this, arguments) : onFalse.apply(this, arguments);\n });\n});\nexport default ifElse;","import _isArray from \"./_isArray.js\";\n\n/**\n * This checks whether a function has a [methodname] function. If it isn't an\n * array it will execute that function otherwise it will default to the ramda\n * implementation.\n *\n * @private\n * @param {Function} fn ramda implementation\n * @param {String} methodname property to check for a custom implementation\n * @return {Object} Whatever the return value of the method is.\n */\nexport default function _checkForMethod(methodname, fn) {\n return function () {\n var length = arguments.length;\n if (length === 0) {\n return fn();\n }\n var obj = arguments[length - 1];\n return _isArray(obj) || typeof obj[methodname] !== 'function' ? fn.apply(this, arguments) : obj[methodname].apply(obj, Array.prototype.slice.call(arguments, 0, length - 1));\n };\n}","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry3 from \"./internal/_curry3.js\";\n\n/**\n * Returns the elements of the given list or string (or object with a `slice`\n * method) from `fromIndex` (inclusive) to `toIndex` (exclusive).\n *\n * Dispatches to the `slice` method of the third argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig Number -> Number -> [a] -> [a]\n * @sig Number -> Number -> String -> String\n * @param {Number} fromIndex The start index (inclusive).\n * @param {Number} toIndex The end index (exclusive).\n * @param {*} list\n * @return {*}\n * @example\n *\n * R.slice(1, 3, ['a', 'b', 'c', 'd']); //=> ['b', 'c']\n * R.slice(1, Infinity, ['a', 'b', 'c', 'd']); //=> ['b', 'c', 'd']\n * R.slice(0, -1, ['a', 'b', 'c', 'd']); //=> ['a', 'b', 'c']\n * R.slice(-3, -1, ['a', 'b', 'c', 'd']); //=> ['b', 'c']\n * R.slice(0, 3, 'ramda'); //=> 'ram'\n */\nvar slice = /*#__PURE__*/_curry3( /*#__PURE__*/_checkForMethod('slice', function slice(fromIndex, toIndex, list) {\n return Array.prototype.slice.call(list, fromIndex, toIndex);\n}));\nexport default slice;","import slice from \"./slice.js\";\n\n/**\n * Returns all but the last element of the given list or string.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.last, R.head, R.tail\n * @example\n *\n * R.init([1, 2, 3]); //=> [1, 2]\n * R.init([1, 2]); //=> [1]\n * R.init([1]); //=> []\n * R.init([]); //=> []\n *\n * R.init('abc'); //=> 'ab'\n * R.init('ab'); //=> 'a'\n * R.init('a'); //=> ''\n * R.init(''); //=> ''\n */\nvar init = /*#__PURE__*/slice(0, -1);\nexport default init;","/**\n * Tests whether or not an object is a typed array.\n *\n * @private\n * @param {*} val The object to test.\n * @return {Boolean} `true` if `val` is a typed array, `false` otherwise.\n * @example\n *\n * _isTypedArray(new Uint8Array([])); //=> true\n * _isTypedArray(new Float32Array([])); //=> true\n * _isTypedArray([]); //=> false\n * _isTypedArray(null); //=> false\n * _isTypedArray({}); //=> false\n */\nexport default function _isTypedArray(val) {\n var type = Object.prototype.toString.call(val);\n return type === '[object Uint8ClampedArray]' || type === '[object Int8Array]' || type === '[object Uint8Array]' || type === '[object Int16Array]' || type === '[object Uint16Array]' || type === '[object Int32Array]' || type === '[object Uint32Array]' || type === '[object Float32Array]' || type === '[object Float64Array]' || type === '[object BigInt64Array]' || type === '[object BigUint64Array]';\n}","import _curry1 from \"./internal/_curry1.js\";\nimport _isArguments from \"./internal/_isArguments.js\";\nimport _isArray from \"./internal/_isArray.js\";\nimport _isObject from \"./internal/_isObject.js\";\nimport _isString from \"./internal/_isString.js\";\nimport _isTypedArray from \"./internal/_isTypedArray.js\";\n\n/**\n * Returns the empty value of its argument's type. Ramda defines the empty\n * value of Array (`[]`), Object (`{}`), String (`''`),\n * TypedArray (`Uint8Array []`, `Float32Array []`, etc), and Arguments. Other\n * types are supported if they define `<Type>.empty`,\n * `<Type>.prototype.empty` or implement the\n * [FantasyLand Monoid spec](https://github.com/fantasyland/fantasy-land#monoid).\n *\n * Dispatches to the `empty` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.3.0\n * @category Function\n * @sig a -> a\n * @param {*} x\n * @return {*}\n * @example\n *\n * R.empty(Just(42)); //=> Nothing()\n * R.empty([1, 2, 3]); //=> []\n * R.empty('unicorns'); //=> ''\n * R.empty({x: 1, y: 2}); //=> {}\n * R.empty(Uint8Array.from('123')); //=> Uint8Array []\n */\nvar empty = /*#__PURE__*/_curry1(function empty(x) {\n return x != null && typeof x['fantasy-land/empty'] === 'function' ? x['fantasy-land/empty']() : x != null && x.constructor != null && typeof x.constructor['fantasy-land/empty'] === 'function' ? x.constructor['fantasy-land/empty']() : x != null && typeof x.empty === 'function' ? x.empty() : x != null && x.constructor != null && typeof x.constructor.empty === 'function' ? x.constructor.empty() : _isArray(x) ? [] : _isString(x) ? '' : _isObject(x) ? {} : _isArguments(x) ? function () {\n return arguments;\n }() : _isTypedArray(x) ? x.constructor.from('') : void 0 // else\n ;\n});\n\nexport default empty;","import _curry1 from \"./internal/_curry1.js\";\nimport empty from \"./empty.js\";\nimport equals from \"./equals.js\";\n\n/**\n * Returns `true` if the given value is its type's empty value; `false`\n * otherwise.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Logic\n * @sig a -> Boolean\n * @param {*} x\n * @return {Boolean}\n * @see R.empty, R.isNotEmpty\n * @example\n *\n * R.isEmpty([1, 2, 3]); //=> false\n * R.isEmpty([]); //=> true\n * R.isEmpty(''); //=> true\n * R.isEmpty(null); //=> false\n * R.isEmpty({}); //=> true\n * R.isEmpty({length: 0}); //=> false\n * R.isEmpty(Uint8Array.from('')); //=> true\n */\nvar isEmpty = /*#__PURE__*/_curry1(function isEmpty(x) {\n return x != null && equals(x, empty(x));\n});\nexport default isEmpty;","import _curry1 from \"./internal/_curry1.js\";\n\n/**\n * Checks if the input value is `null` or `undefined`.\n *\n * @func\n * @memberOf R\n * @since v0.9.0\n * @category Type\n * @sig * -> Boolean\n * @param {*} x The value to test.\n * @return {Boolean} `true` if `x` is `undefined` or `null`, otherwise `false`.\n * @example\n *\n * R.isNil(null); //=> true\n * R.isNil(undefined); //=> true\n * R.isNil(0); //=> false\n * R.isNil([]); //=> false\n */\nvar isNil = /*#__PURE__*/_curry1(function isNil(x) {\n return x == null;\n});\nexport default isNil;","import _curry1 from \"./internal/_curry1.js\";\nimport _nth from \"./internal/_nth.js\";\n\n/**\n * Returns the last element of the given list or string.\n *\n * @func\n * @memberOf R\n * @since v0.1.4\n * @category List\n * @sig [a] -> a | Undefined\n * @sig String -> String | Undefined\n * @param {*} list\n * @return {*}\n * @see R.init, R.head, R.tail\n * @example\n *\n * R.last(['fi', 'fo', 'fum']); //=> 'fum'\n * R.last([]); //=> undefined\n *\n * R.last('abc'); //=> 'c'\n * R.last(''); //=> undefined\n */\nvar last = /*#__PURE__*/_curry1(function (list) {\n return _nth(-1, list);\n});\nexport default last;","export default function _pipe(f, g) {\n return function () {\n return g.call(this, f.apply(this, arguments));\n };\n}","import _checkForMethod from \"./internal/_checkForMethod.js\";\nimport _curry1 from \"./internal/_curry1.js\";\nimport slice from \"./slice.js\";\n\n/**\n * Returns all but the first element of the given list or string (or object\n * with a `tail` method).\n *\n * Dispatches to the `slice` method of the first argument, if present.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category List\n * @sig [a] -> [a]\n * @sig String -> String\n * @param {*} list\n * @return {*}\n * @see R.head, R.init, R.last\n * @example\n *\n * R.tail([1, 2, 3]); //=> [2, 3]\n * R.tail([1, 2]); //=> [2]\n * R.tail([1]); //=> []\n * R.tail([]); //=> []\n *\n * R.tail('abc'); //=> 'bc'\n * R.tail('ab'); //=> 'b'\n * R.tail('a'); //=> ''\n * R.tail(''); //=> ''\n */\nvar tail = /*#__PURE__*/_curry1( /*#__PURE__*/_checkForMethod('tail', /*#__PURE__*/slice(1, Infinity)));\nexport default tail;","import _arity from \"./internal/_arity.js\";\nimport _pipe from \"./internal/_pipe.js\";\nimport reduce from \"./reduce.js\";\nimport tail from \"./tail.js\";\n\n/**\n * Performs left-to-right function composition. The first argument may have\n * any arity; the remaining arguments must be unary.\n *\n * In some libraries this function is named `sequence`.\n *\n * **Note:** The result of pipe is not automatically curried.\n *\n * @func\n * @memberOf R\n * @since v0.1.0\n * @category Function\n * @sig (((a, b, ..., n) -> o), (o -> p), ..., (x -> y), (y -> z)) -> ((a, b, ..., n) -> z)\n * @param {...Function} functions\n * @return {Function}\n * @see R.compose\n * @example\n *\n * const f = R.pipe(Math.pow, R.negate, R.inc);\n *\n * f(3, 4); // -(3^4) + 1\n * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b)))\n * @symb R.pipe(f, g, h)(a)(b) = h(g(f(a)))(b)\n */\nexport default function pipe() {\n if (arguments.length === 0) {\n throw new Error('pipe requires at least one argument');\n }\n return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments)));\n}","import { filter } from './fp'\n\nconst isPresentClassName = (value: string) => value.trim().length > 0\n\nexport const classNames = (values: readonly string[]) =>\n filter(isPresentClassName, [...values]).join(' ')\n","import { always, ifElse, isNil } from './fp'\n\nexport type Some<TValue> = {\n readonly status: 'some'\n readonly value: TValue\n}\n\nexport type None = {\n readonly status: 'none'\n}\n\nexport type Option<TValue> = Some<TValue> | None\n\nexport type OptionMatcher<TValue, TOutput> = {\n readonly some: (value: TValue) => TOutput\n readonly none: () => TOutput\n}\n\nexport const none: None = { status: 'none' }\n\nexport function some<TValue>(value: TValue): Some<TValue> {\n return { status: 'some', value }\n}\n\nexport const isSome = <TValue>(option: Option<TValue>): option is Some<TValue> =>\n option.status === 'some'\n\nexport const isNone = <TValue>(option: Option<TValue>): option is None =>\n option.status === 'none'\n\nexport const fromNullable = <TValue>(value: TValue): Option<TValue> =>\n ifElse(\n isNil,\n always(none),\n some<TValue>,\n )(value)\n\nexport const getOrElse = <TValue>(fallback: TValue) => (option: Option<TValue>): TValue =>\n ifElse(\n isSome<TValue>,\n (someOption: Some<TValue>) => someOption.value,\n always(fallback),\n )(option)\n\nexport function matchOption<TValue, TOutput>(\n option: Option<TValue>,\n matcher: OptionMatcher<TValue, TOutput>,\n) {\n return ifElse(\n isSome<TValue>,\n (someOption: Some<TValue>) => matcher.some(someOption.value),\n matcher.none,\n )(option)\n}\n","import { always, defaultTo, ifElse } from './fp'\nimport { fromNullable, matchOption } from './option'\n\nconst isNumber = (value: unknown) => typeof value === 'number'\n\nexport const withNumberDefault = (fallback: number) => (value: unknown) =>\n matchOption(fromNullable(value), {\n none: () => fallback,\n some: (resolvedValue) =>\n ifElse(\n isNumber,\n (numberValue: number) => defaultTo(fallback, numberValue),\n always(fallback),\n )(resolvedValue),\n })\n","import { ifElse } from './fp'\n\nexport type Ok<TValue> = {\n readonly status: 'ok'\n readonly value: TValue\n}\n\nexport type Err<TError> = {\n readonly status: 'error'\n readonly error: TError\n}\n\nexport type Result<TValue, TError> = Ok<TValue> | Err<TError>\n\nexport type ResultMatcher<TValue, TError, TOutput> = {\n readonly ok: (value: TValue) => TOutput\n readonly error: (error: TError) => TOutput\n}\n\nexport function ok<TValue>(value: TValue): Ok<TValue> {\n return { status: 'ok', value }\n}\n\nexport function err<TError>(error: TError): Err<TError> {\n return { status: 'error', error }\n}\n\nexport const isOk = <TValue, TError>(\n result: Result<TValue, TError>,\n): result is Ok<TValue> => result.status === 'ok'\n\nexport const andThenResult =\n <TValue, TNextValue, TError>(\n transform: (value: TValue) => Result<TNextValue, TError>,\n ) =>\n (result: Result<TValue, TError>): Result<TNextValue, TError> =>\n matchResult(result, {\n error: err<TError>,\n ok: transform,\n })\n\nexport const mapResult =\n <TValue, TNextValue, TError>(transform: (value: TValue) => TNextValue) =>\n (result: Result<TValue, TError>): Result<TNextValue, TError> =>\n andThenResult<TValue, TNextValue, TError>((value) => ok(transform(value)))(result)\n\nexport const bindResult =\n <TContext extends object, TValue, TNextContext extends object, TError>(\n transform: (context: TContext) => Result<TValue, TError>,\n merge: (context: TContext, value: TValue) => TNextContext,\n ) =>\n (result: Result<TContext, TError>): Result<TNextContext, TError> =>\n andThenResult<TContext, TNextContext, TError>(\n (context) =>\n mapResult<TValue, TNextContext, TError>((value) => merge(context, value))(\n transform(context),\n ),\n )(result)\n\nexport function matchResult<TValue, TError, TOutput>(\n result: Result<TValue, TError>,\n matcher: ResultMatcher<TValue, TError, TOutput>,\n) {\n return ifElse(\n isOk<TValue, TError>,\n (okResult: Ok<TValue>) => matcher.ok(okResult.value),\n (errorResult: Err<TError>) => matcher.error(errorResult.error),\n )(result)\n}\n","import { classNames, matchOption } from '../shared'\nimport type { ChartErrorInputProps } from './ChartError.types'\n\nconst renderDetails = (details: ChartErrorInputProps['details']) =>\n matchOption(details, {\n none: () => null,\n some: (value) => <p className=\"pristine-chart-error__details\">{value}</p>,\n })\n\nexport function ChartError({\n title,\n message,\n details,\n className,\n role,\n}: ChartErrorInputProps) {\n return (\n <div className={classNames(['pristine-chart-error', className])} role={role}>\n <p className=\"pristine-chart-error__title\">{title}</p>\n <p className=\"pristine-chart-error__message\">{message}</p>\n {renderDetails(details)}\n </div>\n )\n}\n","import { andThenResult, err, getOrElse, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n AreaChartError,\n AreaChartInput,\n AreaChartPoint,\n AreaChartResult,\n Baseline,\n ClosingEdge,\n FilledRegion,\n SortedDataset,\n ValidatedAreaChartInput,\n ValidatedAreaChartPoint,\n ValidatedBaseline,\n ValidatedDataset,\n} from './AreaChart.types'\n\ntype DatasetResult = Result<ValidatedDataset, AreaChartError>\ntype AreaChartInputResult = Result<ValidatedAreaChartInput, AreaChartError>\ntype DatasetValidator = [\n (data: readonly AreaChartPoint[]) => boolean,\n (data: readonly AreaChartPoint[]) => DatasetResult,\n]\ntype BaselineValidator = [\n (input: ValidatedAreaChartInput) => boolean,\n (input: ValidatedAreaChartInput) => AreaChartInputResult,\n]\n\nconst MINIMUM_POINT_COUNT = 2\nconst DEFAULT_BASELINE = 0\n\nconst areaChartRules = {\n insufficientPoints: (): AreaChartError => ({\n type: 'InsufficientPoints',\n message: 'An area chart needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): AreaChartError => ({\n type: 'InvalidXValue',\n message: 'Every area chart x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): AreaChartError => ({\n type: 'InvalidYValue',\n message: 'Every area chart y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n duplicateXValue: (x: number): AreaChartError => ({\n type: 'DuplicateXValue',\n message: 'Area chart x values must be unique.',\n details: some(`Duplicate x value: ${String(x)}.`),\n }),\n invalidBaseline: (baseline: unknown): AreaChartError => ({\n type: 'InvalidBaseline',\n message: 'The area chart baseline must be a finite number.',\n details: some(`Invalid baseline: ${String(baseline)}.`),\n }),\n baselineExceedsData: (baseline: ValidatedBaseline, minimumYValue: number): AreaChartError => ({\n type: 'BaselineExceedsData',\n message: 'The area chart baseline must be less than or equal to the minimum y value.',\n details: some(\n `Baseline ${String(baseline)} exceeds minimum y value ${String(minimumYValue)}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughPoints = (data: readonly AreaChartPoint[]) =>\n data.length >= MINIMUM_POINT_COUNT\n\nconst getXValues = (data: readonly AreaChartPoint[]) => map(prop('x'), [...data])\n\nconst getYValues = (data: readonly AreaChartPoint[]) => map(prop('y'), [...data])\n\nconst hasOnlyFiniteXValues = (data: readonly AreaChartPoint[]) =>\n all(isFiniteNumber, getXValues(data))\n\nconst hasOnlyFiniteYValues = (data: readonly AreaChartPoint[]) =>\n all(isFiniteNumber, getYValues(data))\n\nconst findInvalidXValueIndex = (data: readonly AreaChartPoint[]) =>\n findIndex(complement(isFiniteNumber), getXValues(data))\n\nconst findInvalidYValueIndex = (data: readonly AreaChartPoint[]) =>\n findIndex(complement(isFiniteNumber), getYValues(data))\n\nconst hasUniqueXValues = (data: readonly AreaChartPoint[]) => {\n const xValues = getXValues(data)\n\n return xValues.length === new Set(xValues).size\n}\n\nconst findDuplicateXValue = (data: readonly AreaChartPoint[]) => {\n const xValues = getXValues(data)\n\n return defaultTo(\n 0,\n xValues.find((xValue, index) => xValues.indexOf(xValue) !== index),\n )\n}\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughPoints), () => err(areaChartRules.insufficientPoints())],\n [\n complement(hasOnlyFiniteXValues),\n (candidate: readonly AreaChartPoint[]) =>\n err(areaChartRules.invalidXValue(findInvalidXValueIndex(candidate))),\n ],\n [\n complement(hasOnlyFiniteYValues),\n (candidate: readonly AreaChartPoint[]) =>\n err(areaChartRules.invalidYValue(findInvalidYValueIndex(candidate))),\n ],\n [\n complement(hasUniqueXValues),\n (candidate: readonly AreaChartPoint[]) =>\n err(areaChartRules.duplicateXValue(findDuplicateXValue(candidate))),\n ],\n [always(true), (candidate: readonly AreaChartPoint[]) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly AreaChartPoint[]) => DatasetResult =\n cond(datasetValidators)\n\nconst toEffectiveBaseline = getOrElse<Baseline>(DEFAULT_BASELINE)\n\nconst hasFiniteBaseline = (input: ValidatedAreaChartInput) => isFiniteNumber(input.baseline)\n\nconst getMinimumYValue = (dataset: ValidatedDataset) =>\n Math.min(...map(prop('y'), [...dataset]))\n\nconst hasCoherentBaseline = (input: ValidatedAreaChartInput) =>\n input.baseline <= getMinimumYValue(input.dataset)\n\nconst baselineValidators: BaselineValidator[] = [\n [\n complement(hasFiniteBaseline),\n (input: ValidatedAreaChartInput) => err(areaChartRules.invalidBaseline(input.baseline)),\n ],\n [\n complement(hasCoherentBaseline),\n (input: ValidatedAreaChartInput) =>\n err(areaChartRules.baselineExceedsData(input.baseline, getMinimumYValue(input.dataset))),\n ],\n [always(true), (input: ValidatedAreaChartInput) => ok(input)],\n]\n\nconst validateBaseline: (input: ValidatedAreaChartInput) => AreaChartInputResult =\n cond(baselineValidators)\n\nexport function validateAreaChartInput(input: AreaChartInput): AreaChartInputResult {\n return andThenResult<ValidatedAreaChartInput, ValidatedAreaChartInput, AreaChartError>(\n validateBaseline,\n )(\n mapResult<ValidatedDataset, ValidatedAreaChartInput, AreaChartError>((dataset) => ({\n dataset,\n baseline: toEffectiveBaseline(input.baseline),\n }))(validateDataset(input.data)),\n )\n}\n\nconst byAscendingX = (left: AreaChartPoint, right: AreaChartPoint) => left.x - right.x\n\nconst sortByX = (dataset: ValidatedDataset): SortedDataset => [...dataset].sort(byAscendingX)\n\nconst toBaselinePoint = (point: ValidatedAreaChartPoint, baseline: ValidatedBaseline) => ({\n x: point.x,\n y: baseline,\n})\n\nconst toClosingEdge = (\n point: ValidatedAreaChartPoint,\n baseline: ValidatedBaseline,\n): ClosingEdge => ({\n start: point,\n end: toBaselinePoint(point, baseline),\n})\n\nconst computeFilledRegion = (input: ValidatedAreaChartInput): FilledRegion => {\n const points = sortByX(input.dataset)\n const leftPoint = points[0]\n const rightPoint = points[points.length - 1]\n\n return {\n points,\n baseline: input.baseline,\n leftClosingEdge: toClosingEdge(leftPoint, input.baseline),\n rightClosingEdge: toClosingEdge(rightPoint, input.baseline),\n }\n}\n\nexport function computeAreaChart(input: AreaChartInput): AreaChartResult {\n return mapResult<ValidatedAreaChartInput, FilledRegion, AreaChartError>(computeFilledRegion)(\n validateAreaChartInput(input),\n )\n}\n","import { area, extent, line, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { defaultTo, identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { AreaChartPoint, FilledRegion } from './AreaChart.types'\n\ntype ChartExtent = [number, number]\n\nexport const AREA_CHART_MARGIN = {\n top: 20,\n right: 18,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedAreaPoint = AreaChartPoint & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type AreaChartModel = {\n readonly plotBottom: number\n readonly points: readonly RenderedAreaPoint[]\n readonly baseline: number\n readonly baselineY: number\n readonly fillPath: string\n readonly linePath: string\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst renderLinePath = (points: readonly RenderedAreaPoint[]) =>\n defaultTo(\n '',\n line<RenderedAreaPoint>()\n .x((point) => point.cx)\n .y((point) => point.cy)(points),\n )\n\nconst renderFillPath = (baselineY: number) => (points: readonly RenderedAreaPoint[]) =>\n defaultTo(\n '',\n area<RenderedAreaPoint>()\n .x((point) => point.cx)\n .y0(baselineY)\n .y1((point) => point.cy)(points),\n )\n\nconst getXExtent = (points: readonly AreaChartPoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...points])))\n\nconst getYExtent = (region: FilledRegion) =>\n expandZeroWidthExtent(getExtent([region.baseline, ...map(prop('y'), [...region.points])]))\n\nexport const buildAreaChartModel = (\n region: FilledRegion,\n width: number,\n height: number,\n): AreaChartModel => {\n const plotBottom = height - AREA_CHART_MARGIN.bottom\n const xScale = scaleLinear()\n .domain(getXExtent(region.points))\n .nice()\n .range([AREA_CHART_MARGIN.left, width - AREA_CHART_MARGIN.right])\n const yScale = scaleLinear()\n .domain(getYExtent(region))\n .nice()\n .range([plotBottom, AREA_CHART_MARGIN.top])\n const baselineY = yScale(region.baseline)\n const toRenderedPoint = (point: AreaChartPoint): RenderedAreaPoint => ({\n ...point,\n cx: xScale(point.x),\n cy: yScale(point.y),\n })\n const renderedPoints = map(toRenderedPoint, [...region.points])\n\n return {\n plotBottom,\n points: renderedPoints,\n baseline: region.baseline,\n baselineY,\n fillPath: renderFillPath(baselineY)(renderedPoints),\n linePath: renderLinePath(renderedPoints),\n xTicks: xScale.ticks(Math.min(6, region.points.length)),\n yTicks: yScale.ticks(5),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { AreaChartProps } from '../AreaChart.types'\n\nexport function AreaChartCaption({ caption }: Pick<AreaChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-area-chart__caption\">{text}</figcaption>,\n })\n}\n","import { AREA_CHART_MARGIN } from '../AreaChart.model'\nimport type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartAxesProps = {\n readonly chart: AreaChartModel\n readonly width: number\n}\n\nexport function AreaChartAxes({ chart, width }: AreaChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-area-chart__axis\"\n x1={AREA_CHART_MARGIN.left}\n x2={width - AREA_CHART_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-area-chart__axis\"\n x1={AREA_CHART_MARGIN.left}\n x2={AREA_CHART_MARGIN.left}\n y1={AREA_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartFilledRegionProps = {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartFilledRegion({ chart }: AreaChartFilledRegionProps) {\n return <path className=\"pristine-area-chart__fill\" d={chart.fillPath} aria-hidden=\"true\" />\n}\n","import { AREA_CHART_MARGIN } from '../AreaChart.model'\nimport type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartGridLinesProps = {\n readonly chart: AreaChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nexport function AreaChartGridLines({\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: AreaChartGridLinesProps) {\n return (\n <>\n {chart.yTicks.map((tick) => (\n <g className=\"pristine-area-chart__grid-line\" key={`y:${tick}`}>\n <line\n x1={AREA_CHART_MARGIN.left}\n x2={width - AREA_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={AREA_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {formatYValue(tick)}\n </text>\n </g>\n ))}\n {chart.xTicks.map((tick) => (\n <g className=\"pristine-area-chart__grid-line\" key={`x:${tick}`}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={AREA_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n <text\n x={chart.xScale(tick)}\n y={height - AREA_CHART_MARGIN.bottom + 20}\n textAnchor=\"middle\"\n >\n {formatXValue(tick)}\n </text>\n </g>\n ))}\n </>\n )\n}\n","import type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartLineProps = {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartLine({ chart }: AreaChartLineProps) {\n return <path className=\"pristine-area-chart__line\" d={chart.linePath} aria-hidden=\"true\" />\n}\n","import { AREA_CHART_MARGIN } from '../AreaChart.model'\nimport type { AreaChartModel } from '../AreaChart.model'\n\ntype AreaChartPlotAreaProps = {\n readonly chart: AreaChartModel\n readonly width: number\n}\n\nexport function AreaChartPlotArea({ chart, width }: AreaChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-area-chart__plot\"\n x={AREA_CHART_MARGIN.left}\n y={AREA_CHART_MARGIN.top}\n width={width - AREA_CHART_MARGIN.left - AREA_CHART_MARGIN.right}\n height={chart.plotBottom - AREA_CHART_MARGIN.top}\n />\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedAreaPoint } from '../AreaChart.model'\n\ntype AreaChartPointMarkerProps = {\n readonly active: boolean\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly point: RenderedAreaPoint\n readonly showPoints: boolean\n}\n\nexport function AreaChartPointMarker({\n active,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n point,\n showPoints,\n}: AreaChartPointMarkerProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-area-chart__point--active'),\n always(''),\n )(active)\n const visibleClassName = ifElse(\n always(showPoints),\n always('pristine-area-chart__point--visible'),\n always(''),\n )(showPoints)\n const accessibleLabel = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-area-chart__point',\n activeClassName,\n visibleClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-area-chart__point-hit-area\"\n cx={point.cx}\n cy={point.cy}\n r={10}\n />\n <circle\n className=\"pristine-area-chart__point-dot\"\n cx={point.cx}\n cy={point.cy}\n r={3.6}\n />\n </g>\n )\n}\n","import type { AreaChartModel } from '../AreaChart.model'\n\nimport { AreaChartPointMarker } from './AreaChartPointMarker'\n\ntype AreaChartPointsProps = {\n readonly activeXValue: number | null\n readonly chart: AreaChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: (xValue: number) => void\n readonly onDeactivate: () => void\n readonly showPoints: boolean\n}\n\nexport function AreaChartPoints({\n activeXValue,\n chart,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n showPoints,\n}: AreaChartPointsProps) {\n return chart.points.map((point) => (\n <AreaChartPointMarker\n active={activeXValue === point.x}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n key={point.x}\n onActivate={() => onActivate(point.x)}\n onDeactivate={onDeactivate}\n point={point}\n showPoints={showPoints}\n />\n ))\n}\n","import type { RenderedAreaPoint } from '../AreaChart.model'\n\ntype AreaChartTooltipProps = {\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly point: RenderedAreaPoint\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function AreaChartTooltip({\n formatXValue,\n formatYValue,\n height,\n point,\n width,\n}: AreaChartTooltipProps) {\n const label = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n point.cx - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n point.cy - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-area-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-area-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-area-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { AreaChartModel } from '../AreaChart.model'\nimport type { AreaChartProps } from '../AreaChart.types'\n\nimport { AreaChartAxes } from './AreaChartAxes'\nimport { AreaChartFilledRegion } from './AreaChartFilledRegion'\nimport { AreaChartGridLines } from './AreaChartGridLines'\nimport { AreaChartLine } from './AreaChartLine'\nimport { AreaChartPlotArea } from './AreaChartPlotArea'\nimport { AreaChartPoints } from './AreaChartPoints'\nimport { AreaChartTooltip } from './AreaChartTooltip'\n\ntype AreaChartSvgProps = Pick<\n AreaChartProps,\n 'ariaLabel' | 'formatXValue' | 'formatYValue' | 'height' | 'showPoints' | 'width'\n> & {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartSvg({\n ariaLabel,\n chart,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: AreaChartSvgProps) {\n const [activeXValue, setActiveXValue] = useState<number | null>(null)\n const activePoints = chart.points.filter((point) => point.x === activeXValue)\n\n return (\n <svg\n className=\"pristine-area-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <AreaChartPlotArea chart={chart} width={width} />\n <AreaChartGridLines\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <AreaChartAxes chart={chart} width={width} />\n <AreaChartFilledRegion chart={chart} />\n <AreaChartLine chart={chart} />\n <AreaChartPoints\n activeXValue={activeXValue}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n onActivate={setActiveXValue}\n onDeactivate={() => setActiveXValue(null)}\n showPoints={showPoints}\n />\n {activePoints.map((point) => (\n <AreaChartTooltip\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n key={point.x}\n point={point}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { AreaChartModel } from '../AreaChart.model'\nimport type { AreaChartProps } from '../AreaChart.types'\n\nimport { AreaChartCaption } from './AreaChartCaption'\nimport { AreaChartSvg } from './AreaChartSvg'\n\ntype AreaChartFigureProps = Pick<\n AreaChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatXValue'\n | 'formatYValue'\n | 'height'\n | 'showPoints'\n | 'width'\n> & {\n readonly chart: AreaChartModel\n}\n\nexport function AreaChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: AreaChartFigureProps) {\n return (\n <figure className={classNames(['pristine-area-chart', className])} aria-label={ariaLabel}>\n <AreaChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n <AreaChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeAreaChart } from './AreaChart.domain'\nimport { buildAreaChartModel } from './AreaChart.model'\nimport type { AreaChartProps } from './AreaChart.types'\nimport { AreaChartFigure } from './components/AreaChartFigure'\n\nexport function AreaChart({\n ariaLabel,\n baseline,\n caption,\n className,\n data,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: AreaChartProps) {\n const result = useMemo(() => computeAreaChart({ data, baseline }), [baseline, data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-area-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (region) => {\n const chart = buildAreaChartModel(region, width, height)\n\n return (\n <AreaChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { AreaChartProps } from './AreaChart.types'\n\nexport const formatAreaChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_AREA_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Area chart',\n className: '',\n caption: none,\n baseline: none,\n showPoints: true,\n formatXValue: formatAreaChartNumber,\n formatYValue: formatAreaChartNumber,\n} satisfies Omit<AreaChartProps, 'data'>\n","import { bindResult, err, fromNullable, getOrElse, isNone, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n filter,\n findIndex,\n ifElse,\n isEmpty,\n map,\n pipe,\n prop,\n} from '../shared/fp'\n\nimport type {\n Bar,\n BarChartDatum,\n BarChartError,\n BarChartInput,\n BarChartResult,\n BarDirection,\n ByValueOrderStrategy,\n CustomOrderStrategy,\n OrderStrategy,\n SortDirection,\n ValidatedDataset,\n} from './BarChart.types'\n\ntype BarChartInputResult = Result<BarChartInput, BarChartError>\ntype DatasetResult = Result<ValidatedDataset, BarChartError>\ntype OrderStrategyResult = Result<OrderStrategy, BarChartError>\ntype DatasetValidator = [\n (data: readonly BarChartDatum[]) => boolean,\n (data: readonly BarChartDatum[]) => DatasetResult,\n]\ntype OrderStrategyValidator = [\n (input: BarChartInput) => boolean,\n (input: BarChartInput) => OrderStrategyResult,\n]\ntype BarDirectionRule = [\n (value: number) => boolean,\n (value: number) => BarDirection,\n]\n\nexport const DEFAULT_BAR_CHART_ORDER_STRATEGY: OrderStrategy = {\n kind: 'insertion',\n}\n\nconst VALUE_ORDER_FALLBACK: SortDirection = 'ascending'\n\nconst barChartRules = {\n emptyDataset: (): BarChartError => ({\n type: 'EmptyDataset',\n message: 'A bar chart needs at least one category.',\n details: none,\n }),\n invalidValue: (index: number): BarChartError => ({\n type: 'InvalidValue',\n message: 'Every bar chart value must be a finite number.',\n details: some(`Invalid value at index ${String(index)}.`),\n }),\n duplicateCategory: (category: string): BarChartError => ({\n type: 'DuplicateCategory',\n message: 'Bar chart categories must be unique.',\n details: some(`Duplicate category: ${category}.`),\n }),\n emptyCategoryName: (index: number): BarChartError => ({\n type: 'EmptyCategoryName',\n message: 'Every bar chart category needs a non-empty name.',\n details: some(`Empty category at index ${String(index)}.`),\n }),\n missingValueSortDirection: (): BarChartError => ({\n type: 'MissingValueSortDirection',\n message: 'Sorting by value requires an ascending or descending direction.',\n details: none,\n }),\n missingCategoriesInCustomOrder: (categories: readonly string[]): BarChartError => ({\n type: 'MissingCategoriesInCustomOrder',\n message: 'Custom bar chart ordering must include every category.',\n details: some(`Missing categories: ${categories.join(', ')}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonEmptyString = (value: string) => value.trim().length > 0\n\nconst getCategories = (data: readonly BarChartDatum[]) => map(prop('category'), [...data])\n\nconst getValues = (data: readonly BarChartDatum[]) => map(prop('value'), [...data])\n\nconst hasOnlyFiniteValues = (data: readonly BarChartDatum[]) =>\n all(isFiniteNumber, getValues(data))\n\nconst findInvalidValueIndex = (data: readonly BarChartDatum[]) =>\n findIndex(complement(isFiniteNumber), getValues(data))\n\nconst findEmptyCategoryIndex = (data: readonly BarChartDatum[]) =>\n findIndex(complement(isNonEmptyString), getCategories(data))\n\nconst hasOnlyNamedCategories = (data: readonly BarChartDatum[]) =>\n all(isNonEmptyString, getCategories(data))\n\nconst hasUniqueCategories = (data: readonly BarChartDatum[]) => {\n const categories = getCategories(data)\n\n return categories.length === new Set(categories).size\n}\n\nconst findDuplicateCategory = (data: readonly BarChartDatum[]) => {\n const categories = getCategories(data)\n\n return defaultTo(\n 'unknown category',\n categories.find((category, index) => categories.indexOf(category) !== index),\n )\n}\n\nconst isByValueOrderStrategy = (\n strategy: OrderStrategy,\n): strategy is ByValueOrderStrategy => strategy.kind === 'value'\n\nconst isCustomOrderStrategy = (\n strategy: OrderStrategy,\n): strategy is CustomOrderStrategy => strategy.kind === 'custom'\n\nconst getValueOrderDirection = (strategy: OrderStrategy) =>\n ifElse(\n isByValueOrderStrategy,\n (valueStrategy: ByValueOrderStrategy) => fromNullable(valueStrategy.direction),\n always(some(VALUE_ORDER_FALLBACK)),\n )(strategy)\n\nconst isMissingValueSortDirection = (strategy: OrderStrategy) =>\n allPass([\n isByValueOrderStrategy,\n pipe(getValueOrderDirection, isNone),\n ])(strategy)\n\nconst getCustomOrderCategories = (strategy: OrderStrategy) =>\n ifElse(\n isCustomOrderStrategy,\n (customStrategy: CustomOrderStrategy) => customStrategy.categories,\n always([]),\n )(strategy)\n\nconst includesCategory = (categories: readonly string[]) => (category: string) =>\n categories.includes(category)\n\nconst getMissingCustomCategories = (\n data: readonly BarChartDatum[],\n strategy: OrderStrategy,\n) =>\n filter(\n complement(includesCategory(getCustomOrderCategories(strategy))),\n getCategories(data),\n )\n\nconst isMissingCustomCategories = (input: BarChartInput) =>\n allPass([\n (candidate: BarChartInput) => isCustomOrderStrategy(candidate.orderStrategy),\n (candidate: BarChartInput) =>\n complement(isEmpty)(getMissingCustomCategories(candidate.data, candidate.orderStrategy)),\n ])(input)\n\nconst datasetValidators: DatasetValidator[] = [\n [isEmpty, () => err(barChartRules.emptyDataset())],\n [\n complement(hasOnlyFiniteValues),\n (candidate: readonly BarChartDatum[]) =>\n err(barChartRules.invalidValue(findInvalidValueIndex(candidate))),\n ],\n [\n complement(hasOnlyNamedCategories),\n (candidate: readonly BarChartDatum[]) =>\n err(barChartRules.emptyCategoryName(findEmptyCategoryIndex(candidate))),\n ],\n [\n complement(hasUniqueCategories),\n (candidate: readonly BarChartDatum[]) =>\n err(barChartRules.duplicateCategory(findDuplicateCategory(candidate))),\n ],\n [always(true), (candidate: readonly BarChartDatum[]) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly BarChartDatum[]) => DatasetResult = cond(datasetValidators)\n\nconst orderStrategyValidators: OrderStrategyValidator[] = [\n [\n (candidate: BarChartInput) => isMissingValueSortDirection(candidate.orderStrategy),\n () => err(barChartRules.missingValueSortDirection()),\n ],\n [\n isMissingCustomCategories,\n (candidate: BarChartInput) =>\n err(\n barChartRules.missingCategoriesInCustomOrder(\n getMissingCustomCategories(candidate.data, candidate.orderStrategy),\n ),\n ),\n ],\n [always(true), (candidate: BarChartInput) => ok(candidate.orderStrategy)],\n]\n\nconst validateOrderStrategy: (input: BarChartInput) => OrderStrategyResult =\n cond(orderStrategyValidators)\n\nexport function validateBarChartInput(input: BarChartInput): BarChartInputResult {\n return bindResult<\n { readonly data: ValidatedDataset },\n OrderStrategy,\n BarChartInput,\n BarChartError\n >(\n () => validateOrderStrategy(input),\n (context, orderStrategy) => ({ ...context, orderStrategy }),\n )(\n bindResult<object, ValidatedDataset, { readonly data: ValidatedDataset }, BarChartError>(\n () => validateDataset(input.data),\n (_, data) => ({ data }),\n )(ok({})),\n )\n}\n\nconst byCategory = (left: BarChartDatum, right: BarChartDatum) =>\n left.category.localeCompare(right.category)\n\nconst byAscendingValue = (left: BarChartDatum, right: BarChartDatum) =>\n left.value - right.value\n\nconst byDescendingValue = (left: BarChartDatum, right: BarChartDatum) =>\n right.value - left.value\n\nconst byCustomOrder = (categories: readonly string[]) => (\n left: BarChartDatum,\n right: BarChartDatum,\n) => categories.indexOf(left.category) - categories.indexOf(right.category)\n\nconst isAlphabeticalOrderStrategy = (strategy: OrderStrategy) =>\n strategy.kind === 'alphabetical'\n\nconst isInsertionOrderStrategy = (strategy: OrderStrategy) =>\n strategy.kind === 'insertion'\n\nconst isAscendingSortDirection = (direction: SortDirection) => direction === 'ascending'\n\nconst getOrderedData = (\n data: readonly BarChartDatum[],\n orderStrategy: OrderStrategy,\n) =>\n cond([\n [isInsertionOrderStrategy, always([...data])],\n [isAlphabeticalOrderStrategy, always([...data].sort(byCategory))],\n [\n isByValueOrderStrategy,\n (strategy: ByValueOrderStrategy) =>\n ifElse(\n isAscendingSortDirection,\n always([...data].sort(byAscendingValue)),\n always([...data].sort(byDescendingValue)),\n )(getOrElse<SortDirection>(VALUE_ORDER_FALLBACK)(getValueOrderDirection(strategy))),\n ],\n [\n isCustomOrderStrategy,\n (strategy: CustomOrderStrategy) => [...data].sort(byCustomOrder(strategy.categories)),\n ],\n ])(orderStrategy)\n\nconst POSITIVE_DIRECTION: BarDirection = 'positive'\nconst NEGATIVE_DIRECTION: BarDirection = 'negative'\nconst ZERO_DIRECTION: BarDirection = 'zero'\n\nconst barDirectionRules: BarDirectionRule[] = [\n [(candidate: number) => candidate > 0, always(POSITIVE_DIRECTION)],\n [(candidate: number) => candidate < 0, always(NEGATIVE_DIRECTION)],\n [always(true), always(ZERO_DIRECTION)],\n]\n\nconst getBarDirection: (value: number) => BarDirection = cond(barDirectionRules)\n\nconst toBar = (datum: BarChartDatum): Bar => ({\n ...datum,\n direction: getBarDirection(datum.value),\n})\n\nconst computeBars = (input: BarChartInput) =>\n map(toBar, getOrderedData(input.data, input.orderStrategy))\n\nexport function computeBarChart(input: BarChartInput): BarChartResult {\n return mapResult<BarChartInput, readonly Bar[], BarChartError>(computeBars)(\n validateBarChartInput(input),\n )\n}\n","import { max, min, scaleBand, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, ifElse, map, prop } from '../shared/fp'\n\nimport type { Bar } from './BarChart.types'\n\nexport const BAR_CHART_MARGIN = {\n top: 24,\n right: 16,\n bottom: 42,\n left: 42,\n}\n\nexport type RenderedBar = Bar & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly valueY: number\n}\n\nexport type BarChartModel = {\n readonly baselineY: number\n readonly plotBottom: number\n readonly yTicks: readonly number[]\n readonly bars: readonly RenderedBar[]\n readonly yScale: (value: number) => number\n}\n\nconst getMinValue = (bars: readonly Bar[]) =>\n withNumberDefault(0)(min(map(prop('value'), [...bars])))\n\nconst getMaxValue = (bars: readonly Bar[]) =>\n withNumberDefault(0)(max(map(prop('value'), [...bars])))\n\nconst getLowerDomain = (bars: readonly Bar[]) => Math.min(0, getMinValue(bars))\n\nconst getUpperDomain = (bars: readonly Bar[]) => Math.max(0, getMaxValue(bars))\n\nconst getCategory = (bar: Bar) => bar.category\n\nconst getValueY = (plotBottom: number) => (bar: Bar, y: number, height: number) =>\n ifElse(\n (candidate: Bar) => candidate.direction === 'negative',\n always(Math.min(plotBottom - 6, y + height + 12)),\n always(Math.max(BAR_CHART_MARGIN.top + 10, y - 6)),\n )(bar)\n\nexport const buildBarChartModel = (\n bars: readonly Bar[],\n width: number,\n height: number,\n): BarChartModel => {\n const plotBottom = height - BAR_CHART_MARGIN.bottom\n const xScale = scaleBand<string>()\n .domain(map(getCategory, [...bars]))\n .range([BAR_CHART_MARGIN.left, width - BAR_CHART_MARGIN.right])\n .padding(0.22)\n const yScale = scaleLinear()\n .domain([getLowerDomain(bars), getUpperDomain(bars)])\n .nice()\n .range([plotBottom, BAR_CHART_MARGIN.top])\n const baselineY = yScale(0)\n const toRenderedBar = (bar: Bar): RenderedBar => {\n const y = Math.min(yScale(bar.value), baselineY)\n const barHeight = Math.abs(baselineY - yScale(bar.value))\n\n return {\n ...bar,\n x: withNumberDefault(BAR_CHART_MARGIN.left)(xScale(bar.category)),\n y,\n width: xScale.bandwidth(),\n height: barHeight,\n valueY: getValueY(plotBottom)(bar, y, barHeight),\n }\n }\n\n return {\n baselineY,\n plotBottom,\n yTicks: yScale.ticks(5),\n bars: map(toRenderedBar, [...bars]),\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { BarChartProps } from '../BarChart.types'\n\nexport function BarChartCaption({ caption }: Pick<BarChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => <figcaption className=\"pristine-bar-chart__caption\">{value}</figcaption>,\n })\n}\n","import { BAR_CHART_MARGIN } from '../BarChart.model'\nimport type { BarChartModel } from '../BarChart.model'\n\ntype BarChartAxesProps = {\n readonly chart: BarChartModel\n readonly width: number\n}\n\nexport function BarChartAxes({ chart, width }: BarChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-bar-chart__axis\"\n x1={BAR_CHART_MARGIN.left}\n x2={width - BAR_CHART_MARGIN.right}\n y1={chart.baselineY}\n y2={chart.baselineY}\n />\n <line\n className=\"pristine-bar-chart__axis\"\n x1={BAR_CHART_MARGIN.left}\n x2={BAR_CHART_MARGIN.left}\n y1={BAR_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { ifElse } from '@/shared/fp'\n\nimport type { RenderedBar } from '../BarChart.model'\n\ntype BarChartBarProps = {\n readonly bar: RenderedBar\n}\n\nconst getHitAreaY = ifElse(\n (bar: RenderedBar) => bar.height > 0,\n (bar: RenderedBar) => bar.y,\n (bar: RenderedBar) => bar.y - 4,\n)\n\nexport function BarChartBar({ bar }: BarChartBarProps) {\n return (\n <>\n <rect\n className={`pristine-bar-chart__bar pristine-bar-chart__bar--${bar.direction}`}\n x={bar.x}\n y={bar.y}\n width={bar.width}\n height={bar.height}\n aria-hidden=\"true\"\n />\n <rect\n className=\"pristine-bar-chart__bar-hit-area\"\n x={bar.x}\n y={getHitAreaY(bar)}\n width={bar.width}\n height={Math.max(bar.height, 8)}\n aria-hidden=\"true\"\n />\n </>\n )\n}\n","import type { RenderedBar } from '../BarChart.model'\n\ntype BarChartCategoryLabelProps = {\n readonly bar: RenderedBar\n readonly height: number\n}\n\nexport function BarChartCategoryLabel({ bar, height }: BarChartCategoryLabelProps) {\n return (\n <text\n className=\"pristine-bar-chart__label\"\n x={bar.x + bar.width / 2}\n y={height - 12}\n textAnchor=\"middle\"\n >\n {bar.category}\n </text>\n )\n}\n","import type { RenderedBar } from '../BarChart.model'\n\ntype BarChartValueLabelProps = {\n readonly bar: RenderedBar\n readonly formatValue: (value: number) => string\n}\n\nexport function BarChartValueLabel({ bar, formatValue }: BarChartValueLabelProps) {\n return (\n <text\n className=\"pristine-bar-chart__value\"\n x={bar.x + bar.width / 2}\n y={bar.valueY}\n textAnchor=\"middle\"\n >\n {formatValue(bar.value)}\n </text>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport type { RenderedBar } from '../BarChart.model'\nimport { always, ifElse } from '@/shared/fp'\n\nimport { BarChartBar } from './BarChartBar'\nimport { BarChartCategoryLabel } from './BarChartCategoryLabel'\nimport { BarChartValueLabel } from './BarChartValueLabel'\n\ntype BarChartCategoryProps = {\n readonly active: boolean\n readonly bar: RenderedBar\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly showValues: boolean\n}\n\nexport function BarChartCategory({\n active,\n bar,\n formatValue,\n height,\n onActivate,\n onDeactivate,\n showValues,\n}: BarChartCategoryProps) {\n const renderValueLabel = ifElse(\n always(showValues),\n () => <BarChartValueLabel bar={bar} formatValue={formatValue} />,\n always(null),\n )\n const activeClassName = ifElse(\n always(active),\n always('pristine-bar-chart__category--active'),\n always(''),\n )(active)\n const accessibleLabel = `${bar.category}: ${formatValue(bar.value)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-bar-chart__category',\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <BarChartBar bar={bar} />\n {renderValueLabel()}\n <BarChartCategoryLabel bar={bar} height={height} />\n </g>\n )\n}\n","import type { BarChartModel } from '../BarChart.model'\n\nimport { BarChartCategory } from './BarChartCategory'\n\ntype BarChartCategoriesProps = {\n readonly activeCategory: string | null\n readonly chart: BarChartModel\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly onActivate: (category: string) => void\n readonly onDeactivate: () => void\n readonly showValues: boolean\n}\n\nexport function BarChartCategories({\n activeCategory,\n chart,\n formatValue,\n height,\n onActivate,\n onDeactivate,\n showValues,\n}: BarChartCategoriesProps) {\n return chart.bars.map((bar) => (\n <BarChartCategory\n active={activeCategory === bar.category}\n bar={bar}\n formatValue={formatValue}\n height={height}\n key={bar.category}\n onActivate={() => onActivate(bar.category)}\n onDeactivate={onDeactivate}\n showValues={showValues}\n />\n ))\n}\n","import { BAR_CHART_MARGIN } from '../BarChart.model'\nimport type { BarChartModel } from '../BarChart.model'\n\ntype BarChartGridLinesProps = {\n readonly chart: BarChartModel\n readonly width: number\n}\n\nexport function BarChartGridLines({ chart, width }: BarChartGridLinesProps) {\n return chart.yTicks.map((tick) => (\n <g className=\"pristine-bar-chart__grid-line\" key={tick}>\n <line\n x1={BAR_CHART_MARGIN.left}\n x2={width - BAR_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={BAR_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {tick}\n </text>\n </g>\n ))\n}\n","import { BAR_CHART_MARGIN } from '../BarChart.model'\nimport type { BarChartModel } from '../BarChart.model'\n\ntype BarChartPlotAreaProps = {\n readonly chart: BarChartModel\n readonly width: number\n}\n\nexport function BarChartPlotArea({ chart, width }: BarChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-bar-chart__plot\"\n x={BAR_CHART_MARGIN.left}\n y={BAR_CHART_MARGIN.top}\n width={width - BAR_CHART_MARGIN.left - BAR_CHART_MARGIN.right}\n height={chart.plotBottom - BAR_CHART_MARGIN.top}\n />\n )\n}\n","import type { RenderedBar } from '../BarChart.model'\n\ntype BarChartTooltipProps = {\n readonly bar: RenderedBar\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 30\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function BarChartTooltip({\n bar,\n formatValue,\n height,\n width,\n}: BarChartTooltipProps) {\n const label = formatValue(bar.value)\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n bar.x + bar.width / 2 - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n bar.valueY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-bar-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-bar-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-bar-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { BarChartModel } from '../BarChart.model'\nimport type { BarChartProps } from '../BarChart.types'\n\nimport { BarChartAxes } from './BarChartAxes'\nimport { BarChartCategories } from './BarChartCategories'\nimport { BarChartGridLines } from './BarChartGridLines'\nimport { BarChartPlotArea } from './BarChartPlotArea'\nimport { BarChartTooltip } from './BarChartTooltip'\n\ntype BarChartSvgProps = Pick<BarChartProps, 'ariaLabel' | 'formatValue' | 'height' | 'showValues' | 'width'> & {\n readonly chart: BarChartModel\n}\n\nexport function BarChartSvg({\n ariaLabel,\n chart,\n formatValue,\n height,\n showValues,\n width,\n}: BarChartSvgProps) {\n const [activeCategory, setActiveCategory] = useState<string | null>(null)\n const activeBars = chart.bars.filter((bar) => bar.category === activeCategory)\n\n return (\n <svg\n className=\"pristine-bar-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <BarChartPlotArea chart={chart} width={width} />\n <BarChartGridLines chart={chart} width={width} />\n <BarChartAxes chart={chart} width={width} />\n <BarChartCategories\n activeCategory={activeCategory}\n chart={chart}\n formatValue={formatValue}\n height={height}\n onActivate={setActiveCategory}\n onDeactivate={() => setActiveCategory(null)}\n showValues={showValues}\n />\n {activeBars.map((bar) => (\n <BarChartTooltip\n key={bar.category}\n bar={bar}\n formatValue={formatValue}\n height={height}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { BarChartModel } from '../BarChart.model'\nimport type { BarChartProps } from '../BarChart.types'\n\nimport { BarChartCaption } from './BarChartCaption'\nimport { BarChartSvg } from './BarChartSvg'\n\ntype BarChartFigureProps = Pick<\n BarChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'formatValue' | 'height' | 'showValues' | 'width'\n> & {\n readonly chart: BarChartModel\n}\n\nexport function BarChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatValue,\n height,\n showValues,\n width,\n}: BarChartFigureProps) {\n return (\n <figure className={classNames(['pristine-bar-chart', className])} aria-label={ariaLabel}>\n <BarChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatValue={formatValue}\n height={height}\n showValues={showValues}\n width={width}\n />\n <BarChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeBarChart } from './BarChart.domain'\nimport { buildBarChartModel } from './BarChart.model'\nimport { BarChartFigure } from './components/BarChartFigure'\nimport type { BarChartProps } from './BarChart.types'\n\nexport function BarChart({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n orderStrategy,\n showValues,\n formatValue,\n}: BarChartProps) {\n const result = useMemo(\n () => computeBarChart({ data, orderStrategy }),\n [data, orderStrategy],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-bar-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (bars) => {\n const chart = buildBarChartModel(bars, width, height)\n\n return (\n <BarChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatValue={formatValue}\n height={height}\n showValues={showValues}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\n\nimport { DEFAULT_BAR_CHART_ORDER_STRATEGY } from './BarChart.domain'\nimport type { BarChartProps } from './BarChart.types'\n\nexport const formatDefaultValue = (value: number) => String(value)\n\nexport const DEFAULT_BAR_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Bar chart',\n className: '',\n caption: none,\n orderStrategy: DEFAULT_BAR_CHART_ORDER_STRATEGY,\n showValues: false,\n formatValue: formatDefaultValue,\n} satisfies Omit<BarChartProps, 'data'>\n","import { err, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n complement,\n cond,\n defaultTo,\n findIndex,\n} from '../shared/fp'\n\nimport type {\n BulletChartError,\n BulletChartInput,\n BulletChartResult,\n BulletChartSummary,\n PerformanceBand,\n ScaleRange,\n ValidatedBulletChartInput,\n ValidatedPerformanceBand,\n} from './BulletChart.types'\n\ntype BulletChartInputResult = Result<ValidatedBulletChartInput, BulletChartError>\ntype BulletChartInputValidator = [\n (input: BulletChartInput) => boolean,\n (input: BulletChartInput) => BulletChartInputResult,\n]\n\nconst bulletChartRules = {\n invalidCurrentValue: (currentValue: unknown): BulletChartError => ({\n type: 'InvalidCurrentValue',\n message: 'Bullet chart current value must be a finite number.',\n details: some(`Invalid current value: ${String(currentValue)}.`),\n }),\n invalidTargetValue: (targetValue: unknown): BulletChartError => ({\n type: 'InvalidTargetValue',\n message: 'Bullet chart target value must be a finite number.',\n details: some(`Invalid target value: ${String(targetValue)}.`),\n }),\n noBandsProvided: (): BulletChartError => ({\n type: 'NoBandsProvided',\n message: 'A bullet chart needs at least one performance band.',\n details: none,\n }),\n emptyBandLabel: (index: number): BulletChartError => ({\n type: 'EmptyBandLabel',\n message: 'Every bullet chart performance band needs a non-empty label.',\n details: some(`Empty band label at index ${String(index)}.`),\n }),\n invalidBandOrder: (index: number): BulletChartError => ({\n type: 'InvalidBandOrder',\n message: 'Every bullet chart band lower bound must be less than its upper bound.',\n details: some(`Invalid band bounds at index ${String(index)}.`),\n }),\n nonContiguousBands: (index: number): BulletChartError => ({\n type: 'NonContiguousBands',\n message: 'Bullet chart bands must be contiguous and non-overlapping.',\n details: some(`Band at index ${String(index)} does not start at the previous upper bound.`),\n }),\n valueOutsideScale: (valueName: string, value: number, scaleRange: ScaleRange): BulletChartError => ({\n type: 'ValueOutsideScale',\n message: 'Bullet chart values must fall within the performance band scale.',\n details: some(\n `${valueName} ${String(value)} is outside ${String(scaleRange.lowerBound)} to ${String(\n scaleRange.upperBound,\n )}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasValidCurrentValue = (input: BulletChartInput) =>\n isFiniteNumber(input.currentValue)\n\nconst hasValidTargetValue = (input: BulletChartInput) =>\n isFiniteNumber(input.targetValue)\n\nconst hasBands = (input: BulletChartInput) => input.bands.length > 0\n\nconst hasNonEmptyLabel = (band: PerformanceBand) => band.label.trim().length > 0\n\nconst hasOnlyNonEmptyLabels = (input: BulletChartInput) =>\n all(hasNonEmptyLabel, [...input.bands])\n\nconst findEmptyBandLabelIndex = (bands: readonly PerformanceBand[]) =>\n findIndex(complement(hasNonEmptyLabel), [...bands])\n\nconst hasValidBandOrder = (band: PerformanceBand) =>\n allPass([\n (candidate: PerformanceBand) => isFiniteNumber(candidate.lowerBound),\n (candidate: PerformanceBand) => isFiniteNumber(candidate.upperBound),\n (candidate: PerformanceBand) => candidate.lowerBound < candidate.upperBound,\n ])(band)\n\nconst hasOnlyValidBandOrders = (input: BulletChartInput) =>\n all(hasValidBandOrder, [...input.bands])\n\nconst findInvalidBandOrderIndex = (bands: readonly PerformanceBand[]) =>\n findIndex(complement(hasValidBandOrder), [...bands])\n\ntype BandPair = readonly [PerformanceBand, PerformanceBand]\n\nconst toBandPair = (bands: readonly PerformanceBand[]) =>\n (rightBand: PerformanceBand, index: number): BandPair => [bands[index], rightBand]\n\nconst getBandPairs = (bands: readonly PerformanceBand[]): readonly BandPair[] =>\n bands.slice(1).map(toBandPair(bands))\n\nconst bandsAreContiguous = ([left, right]: BandPair) =>\n left.upperBound === right.lowerBound\n\nconst hasContiguousBands = (input: BulletChartInput) =>\n all(bandsAreContiguous, getBandPairs(input.bands))\n\nconst findNonContiguousBandIndex = (bands: readonly PerformanceBand[]) =>\n findIndex(\n complement(bandsAreContiguous),\n getBandPairs(bands),\n ) + 1\n\nconst toScaleRange = (bands: readonly ValidatedPerformanceBand[]): ScaleRange => ({\n lowerBound: bands[0].lowerBound,\n upperBound: bands[bands.length - 1].upperBound,\n})\n\nconst isWithinScaleRange = (scaleRange: ScaleRange) =>\n allPass([\n (value: number) => value >= scaleRange.lowerBound,\n (value: number) => value <= scaleRange.upperBound,\n ])\n\nconst toValidatedInput = (input: BulletChartInput): ValidatedBulletChartInput => ({\n currentValue: Number(input.currentValue),\n targetValue: Number(input.targetValue),\n bands: input.bands,\n})\n\nconst currentValueIsWithinScale = (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return isWithinScaleRange(toScaleRange(validatedInput.bands))(validatedInput.currentValue)\n}\n\nconst targetValueIsWithinScale = (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return isWithinScaleRange(toScaleRange(validatedInput.bands))(validatedInput.targetValue)\n}\n\nconst containsCurrentValue =\n (currentValue: number, scaleRange: ScaleRange) => (band: ValidatedPerformanceBand) =>\n allPass([\n (candidate: ValidatedPerformanceBand) => currentValue >= candidate.lowerBound,\n anyPass([\n (candidate: ValidatedPerformanceBand) => currentValue < candidate.upperBound,\n (candidate: ValidatedPerformanceBand) => candidate.upperBound === scaleRange.upperBound,\n ]),\n ])(band)\n\nconst getActiveBand = (\n currentValue: number,\n bands: readonly ValidatedPerformanceBand[],\n scaleRange: ScaleRange,\n) =>\n defaultTo(\n bands[bands.length - 1],\n bands.find(containsCurrentValue(currentValue, scaleRange)),\n )\n\nconst inputValidators: BulletChartInputValidator[] = [\n [\n complement(hasValidCurrentValue),\n (input: BulletChartInput) => err(bulletChartRules.invalidCurrentValue(input.currentValue)),\n ],\n [\n complement(hasValidTargetValue),\n (input: BulletChartInput) => err(bulletChartRules.invalidTargetValue(input.targetValue)),\n ],\n [\n complement(hasBands),\n () => err(bulletChartRules.noBandsProvided()),\n ],\n [\n complement(hasOnlyNonEmptyLabels),\n (input: BulletChartInput) =>\n err(bulletChartRules.emptyBandLabel(findEmptyBandLabelIndex(input.bands))),\n ],\n [\n complement(hasOnlyValidBandOrders),\n (input: BulletChartInput) =>\n err(bulletChartRules.invalidBandOrder(findInvalidBandOrderIndex(input.bands))),\n ],\n [\n complement(hasContiguousBands),\n (input: BulletChartInput) =>\n err(bulletChartRules.nonContiguousBands(findNonContiguousBandIndex(input.bands))),\n ],\n [\n complement(currentValueIsWithinScale),\n (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return err(\n bulletChartRules.valueOutsideScale(\n 'Current value',\n validatedInput.currentValue,\n toScaleRange(validatedInput.bands),\n ),\n )\n },\n ],\n [\n complement(targetValueIsWithinScale),\n (input: BulletChartInput) => {\n const validatedInput = toValidatedInput(input)\n\n return err(\n bulletChartRules.valueOutsideScale(\n 'Target value',\n validatedInput.targetValue,\n toScaleRange(validatedInput.bands),\n ),\n )\n },\n ],\n [always(true), (input: BulletChartInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateBulletChartInput: (\n input: BulletChartInput\n) => BulletChartInputResult = cond(inputValidators)\n\nconst summarizeBulletChart = (input: ValidatedBulletChartInput): BulletChartSummary => {\n const scaleRange = toScaleRange(input.bands)\n\n return {\n ...input,\n scaleRange,\n activeBand: getActiveBand(input.currentValue, input.bands, scaleRange),\n }\n}\n\nexport function computeBulletChart(input: BulletChartInput): BulletChartResult {\n return mapResult<ValidatedBulletChartInput, BulletChartSummary, BulletChartError>(\n summarizeBulletChart,\n )(validateBulletChartInput(input))\n}\n","import { scaleLinear } from 'd3'\n\nimport { always, cond, map } from '../shared/fp'\n\nimport type {\n BulletChartSummary,\n PerformanceBand,\n ScaleRange,\n} from './BulletChart.types'\n\nexport const BULLET_CHART_MARGIN = {\n top: 46,\n right: 40,\n bottom: 54,\n left: 40,\n}\n\nexport type RenderedBulletChartBand = PerformanceBand & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly labelX: number\n readonly labelY: number\n}\n\nexport type BulletChartTickTextAnchor = 'start' | 'middle' | 'end'\n\nexport type RenderedBulletChartTick = {\n readonly value: number\n readonly x: number\n readonly textAnchor: BulletChartTickTextAnchor\n}\n\nexport type BulletChartModel = {\n readonly currentValue: number\n readonly targetValue: number\n readonly scaleRange: ScaleRange\n readonly activeBand: PerformanceBand\n readonly bands: readonly RenderedBulletChartBand[]\n readonly ticks: readonly RenderedBulletChartTick[]\n readonly scaleX: (value: number) => number\n readonly plotX: number\n readonly plotY: number\n readonly plotWidth: number\n readonly bandHeight: number\n readonly trackRadius: number\n readonly currentBarX: number\n readonly currentBarY: number\n readonly currentBarWidth: number\n readonly currentBarHeight: number\n readonly targetX: number\n readonly targetY1: number\n readonly targetY2: number\n readonly axisY: number\n readonly tickLabelY: number\n readonly valueLabelY: number\n readonly currentLabel: string\n readonly targetLabel: string\n readonly activeBandLabel: string\n}\n\nconst BAND_HEIGHT = 38\nconst CURRENT_BAR_HEIGHT = 14\nconst TARGET_MARKER_OVERHANG = 9\nconst BAND_LABEL_OFFSET = 16\nconst AXIS_OFFSET = 30\nconst TICK_LABEL_OFFSET = 18\nconst MINIMUM_BAND_HEIGHT = 24\nconst VALUE_LABEL_Y = 22\nconst START_TICK_TEXT_ANCHOR: BulletChartTickTextAnchor = 'start'\nconst MIDDLE_TICK_TEXT_ANCHOR: BulletChartTickTextAnchor = 'middle'\nconst END_TICK_TEXT_ANCHOR: BulletChartTickTextAnchor = 'end'\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nconst getBaselineValue = (scaleRange: ScaleRange) =>\n clamp(scaleRange.lowerBound, scaleRange.upperBound, 0)\n\nconst getScaleMidpoint = (scaleRange: ScaleRange) =>\n scaleRange.lowerBound + (scaleRange.upperBound - scaleRange.lowerBound) / 2\n\nconst getScaleTicks = (scaleRange: ScaleRange) => [\n scaleRange.lowerBound,\n getScaleMidpoint(scaleRange),\n scaleRange.upperBound,\n]\n\nconst getTickTextAnchor: (\n index: number,\n ticks: readonly number[],\n) => BulletChartTickTextAnchor = (index, ticks) =>\n cond([\n [(candidate: number) => candidate === 0, always(START_TICK_TEXT_ANCHOR)],\n [(candidate: number) => candidate === ticks.length - 1, always(END_TICK_TEXT_ANCHOR)],\n [always(true), always(MIDDLE_TICK_TEXT_ANCHOR)],\n ])(index)\n\nexport const buildBulletChartModel = (\n summary: BulletChartSummary,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n): BulletChartModel => {\n const plotX = BULLET_CHART_MARGIN.left\n const plotY = BULLET_CHART_MARGIN.top\n const plotWidth = width - BULLET_CHART_MARGIN.left - BULLET_CHART_MARGIN.right\n const bandHeight = Math.max(\n MINIMUM_BAND_HEIGHT,\n Math.min(\n BAND_HEIGHT,\n height - BULLET_CHART_MARGIN.top - BULLET_CHART_MARGIN.bottom,\n ),\n )\n const scaleX = scaleLinear()\n .domain([summary.scaleRange.lowerBound, summary.scaleRange.upperBound])\n .range([plotX, plotX + plotWidth])\n const baselineX = scaleX(getBaselineValue(summary.scaleRange))\n const currentX = scaleX(summary.currentValue)\n const targetX = scaleX(summary.targetValue)\n const ticks = getScaleTicks(summary.scaleRange)\n\n const toRenderedBand = (band: PerformanceBand): RenderedBulletChartBand => {\n const startX = scaleX(band.lowerBound)\n const endX = scaleX(band.upperBound)\n\n return {\n ...band,\n x: startX,\n y: plotY,\n width: endX - startX,\n height: bandHeight,\n labelX: startX + (endX - startX) / 2,\n labelY: plotY + bandHeight + BAND_LABEL_OFFSET,\n }\n }\n\n return {\n currentValue: summary.currentValue,\n targetValue: summary.targetValue,\n scaleRange: summary.scaleRange,\n activeBand: summary.activeBand,\n bands: map(toRenderedBand, [...summary.bands]),\n ticks: ticks.map((tick, index) => ({\n value: tick,\n x: scaleX(tick),\n textAnchor: getTickTextAnchor(index, ticks),\n })),\n scaleX,\n plotX,\n plotY,\n plotWidth,\n bandHeight,\n trackRadius: Math.min(10, bandHeight / 2),\n currentBarX: Math.min(baselineX, currentX),\n currentBarY: plotY + (bandHeight - CURRENT_BAR_HEIGHT) / 2,\n currentBarWidth: Math.abs(currentX - baselineX),\n currentBarHeight: CURRENT_BAR_HEIGHT,\n targetX,\n targetY1: plotY - TARGET_MARKER_OVERHANG,\n targetY2: plotY + bandHeight + TARGET_MARKER_OVERHANG,\n axisY: plotY + bandHeight + AXIS_OFFSET,\n tickLabelY: plotY + bandHeight + AXIS_OFFSET + TICK_LABEL_OFFSET,\n valueLabelY: VALUE_LABEL_Y,\n currentLabel: `Current ${formatValue(summary.currentValue)}`,\n targetLabel: `Target ${formatValue(summary.targetValue)}`,\n activeBandLabel: summary.activeBand.label,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { BulletChartProps } from '../BulletChart.types'\n\ntype BulletChartCaptionProps = Pick<BulletChartProps, 'caption'>\n\nexport function BulletChartCaption({ caption }: BulletChartCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-bullet-chart__caption\">{value}</figcaption>\n ),\n })\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartAxisProps = {\n readonly chart: BulletChartModel\n readonly formatValue: (value: number) => string\n}\n\nexport function BulletChartAxis({ chart, formatValue }: BulletChartAxisProps) {\n return (\n <g className=\"pristine-bullet-chart__axis\" aria-hidden=\"true\">\n <line\n x1={chart.plotX}\n x2={chart.plotX + chart.plotWidth}\n y1={chart.axisY}\n y2={chart.axisY}\n />\n {chart.ticks.map((tick) => (\n <g className=\"pristine-bullet-chart__tick\" key={tick.value}>\n <line\n x1={tick.x}\n x2={tick.x}\n y1={chart.axisY}\n y2={chart.axisY + 5}\n />\n <text x={tick.x} y={chart.tickLabelY} textAnchor={tick.textAnchor}>\n {formatValue(tick.value)}\n </text>\n </g>\n ))}\n </g>\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\nimport { classNames } from '@/shared'\nimport { ifElse } from '@/shared/fp'\n\ntype BulletChartBandsProps = {\n readonly chart: BulletChartModel\n readonly showLabels: boolean\n}\n\nconst toBandClassName = (index: number) =>\n `pristine-bullet-chart__band pristine-bullet-chart__band--${String(index + 1)}`\n\nconst isActiveBand = (\n chart: BulletChartModel,\n band: BulletChartModel['bands'][number],\n) =>\n chart.activeBand.label === band.label\n\nconst toActiveBandClassName = ifElse(\n (candidate: boolean) => candidate,\n () => 'pristine-bullet-chart__band-group--active',\n () => '',\n)\n\nconst toBandGroupClassName = (\n chart: BulletChartModel,\n band: BulletChartModel['bands'][number],\n) =>\n classNames([\n 'pristine-bullet-chart__band-group',\n toActiveBandClassName(isActiveBand(chart, band)),\n ])\n\nconst renderLabel = (band: BulletChartModel['bands'][number]) =>\n ifElse(\n (candidate: boolean) => candidate,\n () => (\n <text\n className=\"pristine-bullet-chart__band-label\"\n x={band.labelX}\n y={band.labelY}\n textAnchor=\"middle\"\n aria-hidden=\"true\"\n >\n {band.label}\n </text>\n ),\n () => null,\n )\n\nexport function BulletChartBands({ chart, showLabels }: BulletChartBandsProps) {\n return (\n <g className=\"pristine-bullet-chart__bands\">\n {chart.bands.map((band, index) => (\n <g className={toBandGroupClassName(chart, band)} key={band.label}>\n <rect\n className={toBandClassName(index)}\n x={band.x}\n y={band.y}\n width={band.width}\n height={band.height}\n />\n {renderLabel(band)(showLabels)}\n </g>\n ))}\n </g>\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartCurrentBarProps = {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartCurrentBar({ chart }: BulletChartCurrentBarProps) {\n return (\n <rect\n className=\"pristine-bullet-chart__current-bar\"\n x={chart.currentBarX}\n y={chart.currentBarY}\n width={chart.currentBarWidth}\n height={chart.currentBarHeight}\n rx={chart.currentBarHeight / 2}\n />\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartTargetMarkerProps = {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartTargetMarker({ chart }: BulletChartTargetMarkerProps) {\n return (\n <g className=\"pristine-bullet-chart__target\" aria-hidden=\"true\">\n <line\n className=\"pristine-bullet-chart__target-marker-halo\"\n x1={chart.targetX}\n x2={chart.targetX}\n y1={chart.targetY1}\n y2={chart.targetY2}\n />\n <line\n className=\"pristine-bullet-chart__target-marker\"\n x1={chart.targetX}\n x2={chart.targetX}\n y1={chart.targetY1}\n y2={chart.targetY2}\n />\n </g>\n )\n}\n","import type { BulletChartModel } from '../BulletChart.model'\n\ntype BulletChartValueLabelsProps = {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartValueLabels({ chart }: BulletChartValueLabelsProps) {\n return (\n <g className=\"pristine-bullet-chart__value-labels\" aria-hidden=\"true\">\n <text\n className=\"pristine-bullet-chart__value-label pristine-bullet-chart__value-label--current\"\n x={chart.plotX}\n y={chart.valueLabelY}\n >\n {chart.currentLabel}\n </text>\n <text\n className=\"pristine-bullet-chart__value-label pristine-bullet-chart__value-label--target\"\n x={chart.plotX + chart.plotWidth}\n y={chart.valueLabelY}\n textAnchor=\"end\"\n >\n {chart.targetLabel}\n </text>\n </g>\n )\n}\n","import { useId } from 'react'\n\nimport { ifElse } from '@/shared/fp'\n\nimport type { BulletChartModel } from '../BulletChart.model'\nimport type { BulletChartProps } from '../BulletChart.types'\n\nimport { BulletChartAxis } from './BulletChartAxis'\nimport { BulletChartBands } from './BulletChartBands'\nimport { BulletChartCurrentBar } from './BulletChartCurrentBar'\nimport { BulletChartTargetMarker } from './BulletChartTargetMarker'\nimport { BulletChartValueLabels } from './BulletChartValueLabels'\n\ntype BulletChartSvgProps = Pick<\n BulletChartProps,\n 'ariaLabel' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: BulletChartModel\n}\n\nconst hasCurrentBar = (chart: BulletChartModel) => chart.currentBarWidth > 0\n\nexport function BulletChartSvg({\n ariaLabel,\n chart,\n formatValue,\n height,\n showLabels,\n width,\n}: BulletChartSvgProps) {\n const clipPathId = `pristine-bullet-chart-track-${useId().replaceAll(':', '')}`\n const valueText = `${chart.currentLabel}, ${chart.targetLabel}, ${chart.activeBandLabel}`\n const renderCurrentBar = ifElse(\n hasCurrentBar,\n () => <BulletChartCurrentBar chart={chart} />,\n () => null,\n )\n\n return (\n <svg\n className=\"pristine-bullet-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <defs>\n <clipPath id={clipPathId}>\n <rect\n x={chart.plotX}\n y={chart.plotY}\n width={chart.plotWidth}\n height={chart.bandHeight}\n rx={chart.trackRadius}\n />\n </clipPath>\n </defs>\n <BulletChartValueLabels chart={chart} />\n <g\n className=\"pristine-bullet-chart__meter\"\n role=\"meter\"\n aria-label={ariaLabel}\n aria-valuemin={chart.scaleRange.lowerBound}\n aria-valuemax={chart.scaleRange.upperBound}\n aria-valuenow={chart.currentValue}\n aria-valuetext={valueText}\n >\n <rect\n className=\"pristine-bullet-chart__track-shell\"\n x={chart.plotX}\n y={chart.plotY}\n width={chart.plotWidth}\n height={chart.bandHeight}\n rx={chart.trackRadius}\n />\n <g clipPath={`url(#${clipPathId})`}>\n <BulletChartBands chart={chart} showLabels={showLabels} />\n {renderCurrentBar(chart)}\n </g>\n <BulletChartTargetMarker chart={chart} />\n </g>\n <BulletChartAxis chart={chart} formatValue={formatValue} />\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { BulletChartModel } from '../BulletChart.model'\nimport type { BulletChartProps } from '../BulletChart.types'\n\nimport { BulletChartCaption } from './BulletChartCaption'\nimport { BulletChartSvg } from './BulletChartSvg'\n\ntype BulletChartFigureProps = Pick<\n BulletChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: BulletChartModel\n}\n\nexport function BulletChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatValue,\n height,\n showLabels,\n width,\n}: BulletChartFigureProps) {\n return (\n <figure className={classNames(['pristine-bullet-chart', className])} aria-label={ariaLabel}>\n <BulletChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n <BulletChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeBulletChart } from './BulletChart.domain'\nimport { buildBulletChartModel } from './BulletChart.model'\nimport { BulletChartFigure } from './components/BulletChartFigure'\nimport type { BulletChartProps } from './BulletChart.types'\n\nexport function BulletChart({\n currentValue,\n targetValue,\n bands,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showLabels,\n formatValue,\n}: BulletChartProps) {\n const result = useMemo(\n () => computeBulletChart({ currentValue, targetValue, bands }),\n [currentValue, targetValue, bands],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-bullet-chart__error', className])}\n title=\"Bullet chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const chart = buildBulletChartModel(summary, width, height, formatValue)\n\n return (\n <BulletChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { BulletChartProps } from './BulletChart.types'\n\nexport const formatBulletChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_BULLET_CHART_VIEW_PROPS = {\n width: 420,\n height: 150,\n ariaLabel: 'Bullet chart',\n className: '',\n caption: none,\n showLabels: true,\n formatValue: formatBulletChartNumber,\n} satisfies Omit<BulletChartProps, 'currentValue' | 'targetValue' | 'bands'>\n","import { err, fromNullable, mapResult, matchOption, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n ifElse,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n ConversionRate,\n DropOff,\n DropOffRate,\n FunnelChartDatum,\n FunnelChartError,\n FunnelChartInput,\n FunnelChartResult,\n FunnelStage,\n ValidatedDataset,\n} from './FunnelChart.types'\n\ntype DatasetResult = Result<ValidatedDataset, FunnelChartError>\ntype DatasetValidator = [\n (data: readonly FunnelChartDatum[]) => boolean,\n (data: readonly FunnelChartDatum[]) => DatasetResult,\n]\ntype StagePair = readonly [FunnelChartDatum, FunnelChartDatum]\n\nconst MINIMUM_STAGE_COUNT = 2\n\nconst funnelChartRules = {\n insufficientStages: (): FunnelChartError => ({\n type: 'InsufficientStages',\n message: 'A funnel chart needs at least two stages.',\n details: none,\n }),\n invalidStageValue: (stage: string, value: unknown): FunnelChartError => ({\n type: 'InvalidStageValue',\n message: 'Every funnel chart stage value must be a non-negative finite number.',\n details: some(`Invalid value for stage ${stage}: ${String(value)}.`),\n }),\n monotonicDecreaseViolation: (stage: string, previousStage: string): FunnelChartError => ({\n type: 'MonotonicDecreaseViolation',\n message: 'Funnel chart stage values must not increase as the funnel progresses.',\n details: some(`${stage} is greater than previous stage ${previousStage}.`),\n }),\n emptyStageName: (index: number): FunnelChartError => ({\n type: 'EmptyStageName',\n message: 'Every funnel chart stage needs a non-empty name.',\n details: some(`Empty stage at index ${String(index)}.`),\n }),\n duplicateStageName: (stage: string): FunnelChartError => ({\n type: 'DuplicateStageName',\n message: 'Funnel chart stage names must be unique.',\n details: some(`Duplicate stage: ${stage}.`),\n }),\n zeroInitialValue: (): FunnelChartError => ({\n type: 'ZeroInitialValue',\n message: 'A funnel chart must start with a value greater than zero.',\n details: none,\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonNegativeFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) >= 0,\n ])(value)\n\nconst isNonEmptyString = (value: string) => value.trim().length > 0\n\nconst hasEnoughStages = (data: readonly FunnelChartDatum[]) =>\n data.length >= MINIMUM_STAGE_COUNT\n\nconst getStages = (data: readonly FunnelChartDatum[]) => map(prop('stage'), [...data])\n\nconst getValues = (data: readonly FunnelChartDatum[]) => map(prop('value'), [...data])\n\nconst hasOnlyNamedStages = (data: readonly FunnelChartDatum[]) =>\n all(isNonEmptyString, getStages(data))\n\nconst findEmptyStageIndex = (data: readonly FunnelChartDatum[]) =>\n findIndex(complement(isNonEmptyString), getStages(data))\n\nconst hasOnlyValidValues = (data: readonly FunnelChartDatum[]) =>\n all(isNonNegativeFiniteNumber, getValues(data))\n\nconst findInvalidValueStage = (data: readonly FunnelChartDatum[]) =>\n defaultTo(\n { stage: 'unknown stage', value: undefined },\n data.find((datum) => complement(isNonNegativeFiniteNumber)(datum.value)),\n )\n\nconst hasUniqueStages = (data: readonly FunnelChartDatum[]) => {\n const stages = getStages(data)\n\n return stages.length === new Set(stages).size\n}\n\nconst findDuplicateStage = (data: readonly FunnelChartDatum[]) => {\n const stages = getStages(data)\n\n return defaultTo(\n 'unknown stage',\n stages.find((stage, index) => stages.indexOf(stage) !== index),\n )\n}\n\nconst firstStageValueIsPositive = (data: readonly FunnelChartDatum[]) => data[0].value > 0\n\nconst toStagePair = (data: readonly FunnelChartDatum[]) =>\n (rightStage: FunnelChartDatum, index: number): StagePair => [data[index], rightStage]\n\nconst getStagePairs = (data: readonly FunnelChartDatum[]): readonly StagePair[] =>\n data.slice(1).map(toStagePair(data))\n\nconst isMonotonicallyNonIncreasing = ([previous, current]: StagePair) =>\n current.value <= previous.value\n\nconst hasMonotonicDecrease = (data: readonly FunnelChartDatum[]) =>\n all(isMonotonicallyNonIncreasing, getStagePairs(data))\n\nconst firstStagePair = (data: readonly FunnelChartDatum[]): StagePair => [data[0], data[1]]\n\nconst findMonotonicViolation = (data: readonly FunnelChartDatum[]) =>\n defaultTo(\n firstStagePair(data),\n getStagePairs(data).find(complement(isMonotonicallyNonIncreasing)),\n )\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughStages), () => err(funnelChartRules.insufficientStages())],\n [\n complement(hasOnlyNamedStages),\n (candidate: readonly FunnelChartDatum[]) =>\n err(funnelChartRules.emptyStageName(findEmptyStageIndex(candidate))),\n ],\n [\n complement(hasOnlyValidValues),\n (candidate: readonly FunnelChartDatum[]) => {\n const invalidStage = findInvalidValueStage(candidate)\n\n return err(funnelChartRules.invalidStageValue(invalidStage.stage, invalidStage.value))\n },\n ],\n [\n complement(hasUniqueStages),\n (candidate: readonly FunnelChartDatum[]) =>\n err(funnelChartRules.duplicateStageName(findDuplicateStage(candidate))),\n ],\n [complement(firstStageValueIsPositive), () => err(funnelChartRules.zeroInitialValue())],\n [\n complement(hasMonotonicDecrease),\n (candidate: readonly FunnelChartDatum[]) => {\n const [previousStage, stage] = findMonotonicViolation(candidate)\n\n return err(funnelChartRules.monotonicDecreaseViolation(stage.stage, previousStage.stage))\n },\n ],\n [always(true), (candidate: readonly FunnelChartDatum[]) => ok(candidate)],\n]\n\nexport const validateFunnelChartInput: (\n input: FunnelChartInput\n) => DatasetResult = (input: FunnelChartInput) => cond(datasetValidators)(input.data)\n\nconst toDropOff = (previous: FunnelChartDatum, current: FunnelChartDatum): DropOff =>\n previous.value - current.value\n\nconst previousStageIsZero = (previous: FunnelChartDatum) => previous.value === 0\n\nconst toDropOffRate = (previous: FunnelChartDatum, dropOff: DropOff): DropOffRate =>\n ifElse(\n previousStageIsZero,\n always(0),\n (candidate: FunnelChartDatum) => dropOff / candidate.value,\n )(previous)\n\nconst toConversionRate = (\n previous: FunnelChartDatum,\n current: FunnelChartDatum,\n): ConversionRate =>\n ifElse(\n previousStageIsZero,\n always(1),\n (candidate: FunnelChartDatum) => current.value / candidate.value,\n )(previous)\n\nconst toFunnelStage = (data: readonly FunnelChartDatum[]) => (\n datum: FunnelChartDatum,\n index: number,\n): FunnelStage => {\n return matchOption<FunnelChartDatum, FunnelStage>(fromNullable(data[index - 1]), {\n none: () => ({\n ...datum,\n index,\n dropOff: none,\n dropOffRate: none,\n conversionRate: none,\n }),\n some: (previousStage) => {\n const dropOff = toDropOff(previousStage, datum)\n\n return {\n ...datum,\n index,\n dropOff: some(dropOff),\n dropOffRate: some(toDropOffRate(previousStage, dropOff)),\n conversionRate: some(toConversionRate(previousStage, datum)),\n }\n },\n })\n}\n\nconst computeFunnelStages = (data: ValidatedDataset) => data.map(toFunnelStage(data))\n\nexport function computeFunnelChart(input: FunnelChartInput): FunnelChartResult {\n return mapResult<ValidatedDataset, readonly FunnelStage[], FunnelChartError>(\n computeFunnelStages,\n )(validateFunnelChartInput(input))\n}\n","import { max } from 'd3'\n\nimport { fromNullable, matchOption, withNumberDefault } from '../shared'\nimport { always, ifElse, map, prop } from '../shared/fp'\n\nimport type { FunnelStage } from './FunnelChart.types'\n\nexport const FUNNEL_CHART_MARGIN = {\n top: 22,\n right: 132,\n bottom: 22,\n left: 120,\n}\n\nconst STAGE_GAP = 4\n\nexport type RenderedFunnelStage = FunnelStage & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly centerX: number\n readonly centerY: number\n readonly path: string\n readonly hitAreaX: number\n readonly hitAreaWidth: number\n readonly labelX: number\n readonly valueX: number\n}\n\nexport type FunnelChartModel = {\n readonly stages: readonly RenderedFunnelStage[]\n readonly plotLeft: number\n readonly plotRight: number\n readonly plotTop: number\n readonly plotBottom: number\n}\n\nconst getMaximumValue = (stages: readonly FunnelStage[]) =>\n withNumberDefault(0)(max(map(prop('value'), [...stages])))\n\nconst isZero = (value: number) => value === 0\n\nconst toScaledWidth = (plotWidth: number, maximumValue: number) => (value: number) =>\n ifElse(\n isZero,\n always(0),\n (candidate: number) => (value / candidate) * plotWidth,\n )(maximumValue)\n\nconst toPath = (\n centerX: number,\n y: number,\n height: number,\n topWidth: number,\n bottomWidth: number,\n) => {\n const topLeft = centerX - topWidth / 2\n const topRight = centerX + topWidth / 2\n const bottomLeft = centerX - bottomWidth / 2\n const bottomRight = centerX + bottomWidth / 2\n\n return `M ${topLeft} ${y} L ${topRight} ${y} L ${bottomRight} ${y + height} L ${bottomLeft} ${y + height} Z`\n}\n\nconst getNextStageValue = (stages: readonly FunnelStage[], stage: FunnelStage) =>\n matchOption(fromNullable(stages[stage.index + 1]), {\n none: () => stage.value,\n some: (nextStage) => nextStage.value,\n })\n\nexport const buildFunnelChartModel = (\n stages: readonly FunnelStage[],\n width: number,\n height: number,\n): FunnelChartModel => {\n const plotLeft = FUNNEL_CHART_MARGIN.left\n const plotRight = width - FUNNEL_CHART_MARGIN.right\n const plotTop = FUNNEL_CHART_MARGIN.top\n const plotBottom = height - FUNNEL_CHART_MARGIN.bottom\n const plotWidth = plotRight - plotLeft\n const centerX = plotLeft + plotWidth / 2\n const totalGap = Math.max(0, stages.length - 1) * STAGE_GAP\n const stageHeight = (plotBottom - plotTop - totalGap) / stages.length\n const maximumValue = getMaximumValue(stages)\n const scaledWidth = toScaledWidth(plotWidth, maximumValue)\n const toRenderedStage = (stage: FunnelStage): RenderedFunnelStage => {\n const y = plotTop + stage.index * (stageHeight + STAGE_GAP)\n const topWidth = scaledWidth(stage.value)\n const bottomWidth = scaledWidth(getNextStageValue(stages, stage))\n const stageWidth = Math.max(topWidth, bottomWidth)\n\n return {\n ...stage,\n x: centerX - stageWidth / 2,\n y,\n width: stageWidth,\n height: stageHeight,\n centerX,\n centerY: y + stageHeight / 2,\n path: toPath(centerX, y, stageHeight, topWidth, bottomWidth),\n hitAreaX: plotLeft,\n hitAreaWidth: plotWidth,\n labelX: plotLeft - 12,\n valueX: plotRight + 12,\n }\n }\n\n return {\n stages: map(toRenderedStage, [...stages]),\n plotLeft,\n plotRight,\n plotTop,\n plotBottom,\n }\n}\n","import { matchOption } from '@/shared'\nimport type { FunnelChartProps } from '../FunnelChart.types'\n\ntype FunnelChartCaptionProps = Pick<FunnelChartProps, 'caption'>\n\nexport function FunnelChartCaption({ caption }: FunnelChartCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => (\n <figcaption className=\"pristine-funnel-chart__caption\">{text}</figcaption>\n ),\n })\n}\n","import type { RenderedFunnelStage } from '../FunnelChart.model'\n\ntype FunnelChartSegmentProps = {\n readonly stage: RenderedFunnelStage\n}\n\nexport function FunnelChartSegment({ stage }: FunnelChartSegmentProps) {\n return (\n <>\n <path className=\"pristine-funnel-chart__segment\" d={stage.path} />\n <rect\n className=\"pristine-funnel-chart__hit-area\"\n x={stage.hitAreaX}\n y={stage.y}\n width={stage.hitAreaWidth}\n height={stage.height}\n />\n </>\n )\n}\n","import type { RenderedFunnelStage } from '../FunnelChart.model'\n\ntype FunnelChartStageLabelProps = {\n readonly stage: RenderedFunnelStage\n}\n\nexport function FunnelChartStageLabel({ stage }: FunnelChartStageLabelProps) {\n return (\n <text\n className=\"pristine-funnel-chart__label\"\n x={stage.labelX}\n y={stage.centerY}\n textAnchor=\"end\"\n >\n {stage.stage}\n </text>\n )\n}\n","import { matchOption } from '@/shared'\n\nimport type { RenderedFunnelStage } from '../FunnelChart.model'\n\ntype FunnelChartValueLabelProps = {\n readonly stage: RenderedFunnelStage\n readonly formatValue: (value: number) => string\n readonly formatPercentage: (rate: number) => string\n}\n\nexport function FunnelChartValueLabel({\n stage,\n formatValue,\n formatPercentage,\n}: FunnelChartValueLabelProps) {\n return (\n <text\n className=\"pristine-funnel-chart__value\"\n x={stage.valueX}\n y={stage.centerY - 5}\n textAnchor=\"start\"\n >\n <tspan x={stage.valueX}>{formatValue(stage.value)}</tspan>\n {matchOption(stage.conversionRate, {\n none: () => null,\n some: (conversionRate) => (\n <tspan\n className=\"pristine-funnel-chart__conversion\"\n x={stage.valueX}\n dy={14}\n >\n {formatPercentage(conversionRate)}\n </tspan>\n ),\n })}\n </text>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames, matchOption } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\n\nimport type { RenderedFunnelStage } from '../FunnelChart.model'\n\nimport { FunnelChartSegment } from './FunnelChartSegment'\nimport { FunnelChartStageLabel } from './FunnelChartStageLabel'\nimport { FunnelChartValueLabel } from './FunnelChartValueLabel'\n\ntype FunnelChartStageProps = {\n readonly active: boolean\n readonly stage: RenderedFunnelStage\n readonly formatValue: (value: number) => string\n readonly formatPercentage: (rate: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly showValues: boolean\n}\n\nconst getAccessibleLabel = (\n stage: RenderedFunnelStage,\n formatValue: (value: number) => string,\n formatPercentage: (rate: number) => string,\n) =>\n matchOption(stage.dropOff, {\n none: () => `${stage.stage}: ${formatValue(stage.value)}`,\n some: (dropOff) =>\n `${stage.stage}: ${formatValue(stage.value)}, drop-off ${formatValue(dropOff)}, conversion ${matchOption(\n stage.conversionRate,\n {\n none: () => 'not available',\n some: formatPercentage,\n },\n )}`,\n })\n\nexport function FunnelChartStage({\n active,\n stage,\n formatValue,\n formatPercentage,\n onActivate,\n onDeactivate,\n showValues,\n}: FunnelChartStageProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-funnel-chart__stage--active'),\n always(''),\n )(active)\n const renderValueLabel = ifElse(\n always(showValues),\n () => (\n <FunnelChartValueLabel\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n stage={stage}\n />\n ),\n always(null),\n )\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-funnel-chart__stage',\n `pristine-funnel-chart__stage--tone-${String((stage.index % 5) + 1)}`,\n activeClassName,\n ])}\n role=\"img\"\n aria-label={getAccessibleLabel(stage, formatValue, formatPercentage)}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <FunnelChartSegment stage={stage} />\n <FunnelChartStageLabel stage={stage} />\n {renderValueLabel()}\n </g>\n )\n}\n","import type { FunnelChartModel } from '../FunnelChart.model'\nimport type { FunnelChartProps } from '../FunnelChart.types'\n\nimport { FunnelChartStage } from './FunnelChartStage'\n\ntype FunnelChartStagesProps = Pick<\n FunnelChartProps,\n 'formatPercentage' | 'formatValue' | 'showValues'\n> & {\n readonly activeStage: string | null\n readonly chart: FunnelChartModel\n readonly onActivate: (stage: string) => void\n readonly onDeactivate: () => void\n}\n\nexport function FunnelChartStages({\n activeStage,\n chart,\n formatPercentage,\n formatValue,\n onActivate,\n onDeactivate,\n showValues,\n}: FunnelChartStagesProps) {\n return (\n <g className=\"pristine-funnel-chart__stages\">\n {chart.stages.map((stage) => (\n <FunnelChartStage\n active={stage.stage === activeStage}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n key={stage.stage}\n onActivate={() => onActivate(stage.stage)}\n onDeactivate={onDeactivate}\n showValues={showValues}\n stage={stage}\n />\n ))}\n </g>\n )\n}\n","import { matchOption } from '@/shared'\n\nimport type { RenderedFunnelStage } from '../FunnelChart.model'\n\ntype FunnelChartTooltipProps = {\n readonly stage: RenderedFunnelStage\n readonly formatValue: (value: number) => string\n readonly formatPercentage: (rate: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 64\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nconst getTooltipLabel = (\n stage: RenderedFunnelStage,\n formatValue: (value: number) => string,\n formatPercentage: (rate: number) => string,\n) =>\n matchOption(stage.dropOff, {\n none: () => `${stage.stage}: ${formatValue(stage.value)}`,\n some: (dropOff) =>\n `${stage.stage}: ${formatValue(stage.value)} | Drop-off ${formatValue(dropOff)} | ${matchOption(\n stage.dropOffRate,\n {\n none: () => '0%',\n some: formatPercentage,\n },\n )} lost`,\n })\n\nexport function FunnelChartTooltip({\n stage,\n formatValue,\n formatPercentage,\n height,\n width,\n}: FunnelChartTooltipProps) {\n const label = getTooltipLabel(stage, formatValue, formatPercentage)\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n stage.centerX - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n stage.centerY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-funnel-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-funnel-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-funnel-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { FunnelChartModel } from '../FunnelChart.model'\nimport type { FunnelChartProps } from '../FunnelChart.types'\n\nimport { FunnelChartStages } from './FunnelChartStages'\nimport { FunnelChartTooltip } from './FunnelChartTooltip'\n\ntype FunnelChartSvgProps = Pick<\n FunnelChartProps,\n 'ariaLabel' | 'formatPercentage' | 'formatValue' | 'height' | 'showValues' | 'width'\n> & {\n readonly chart: FunnelChartModel\n}\n\nexport function FunnelChartSvg({\n ariaLabel,\n chart,\n formatPercentage,\n formatValue,\n height,\n showValues,\n width,\n}: FunnelChartSvgProps) {\n const [activeStage, setActiveStage] = useState<string | null>(null)\n const activeStages = chart.stages.filter((stage) => stage.stage === activeStage)\n\n return (\n <svg\n className=\"pristine-funnel-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <rect\n className=\"pristine-funnel-chart__plot\"\n x={chart.plotLeft}\n y={chart.plotTop}\n width={chart.plotRight - chart.plotLeft}\n height={chart.plotBottom - chart.plotTop}\n />\n <FunnelChartStages\n activeStage={activeStage}\n chart={chart}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n onActivate={setActiveStage}\n onDeactivate={() => setActiveStage(null)}\n showValues={showValues}\n />\n {activeStages.map((stage) => (\n <FunnelChartTooltip\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n key={stage.stage}\n stage={stage}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { FunnelChartModel } from '../FunnelChart.model'\nimport type { FunnelChartProps } from '../FunnelChart.types'\n\nimport { FunnelChartCaption } from './FunnelChartCaption'\nimport { FunnelChartSvg } from './FunnelChartSvg'\n\ntype FunnelChartFigureProps = Pick<\n FunnelChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatPercentage'\n | 'formatValue'\n | 'height'\n | 'showValues'\n | 'width'\n> & {\n readonly chart: FunnelChartModel\n}\n\nexport function FunnelChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatPercentage,\n formatValue,\n height,\n showValues,\n width,\n}: FunnelChartFigureProps) {\n return (\n <figure className={classNames(['pristine-funnel-chart', className])} aria-label={ariaLabel}>\n <FunnelChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n showValues={showValues}\n width={width}\n />\n <FunnelChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeFunnelChart } from './FunnelChart.domain'\nimport { buildFunnelChartModel } from './FunnelChart.model'\nimport { FunnelChartFigure } from './components/FunnelChartFigure'\nimport type { FunnelChartProps } from './FunnelChart.types'\n\nexport function FunnelChart({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showValues,\n formatValue,\n formatPercentage,\n}: FunnelChartProps) {\n const result = useMemo(() => computeFunnelChart({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-funnel-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (stages) => {\n const chart = buildFunnelChartModel(stages, width, height)\n\n return (\n <FunnelChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n showValues={showValues}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\n\nimport type { FunnelChartProps } from './FunnelChart.types'\n\nexport const formatFunnelChartNumber = (value: number) => String(value)\n\nexport const formatFunnelChartPercentage = (rate: number) =>\n `${(rate * 100).toFixed(0)}%`\n\nexport const DEFAULT_FUNNEL_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Funnel chart',\n className: '',\n caption: none,\n showValues: true,\n formatValue: formatFunnelChartNumber,\n formatPercentage: formatFunnelChartPercentage,\n} satisfies Omit<FunnelChartProps, 'data'>\n","import { err, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n complement,\n cond,\n defaultTo,\n findIndex,\n} from '../shared/fp'\n\nimport type {\n GaugeChartError,\n GaugeChartInput,\n GaugeChartResult,\n GaugeChartSummary,\n PerformanceZone,\n ScaleRange,\n ValidatedGaugeChartInput,\n ValidatedPerformanceZone,\n} from './GaugeChart.types'\n\ntype GaugeChartInputResult = Result<ValidatedGaugeChartInput, GaugeChartError>\ntype GaugeChartInputValidator = [\n (input: GaugeChartInput) => boolean,\n (input: GaugeChartInput) => GaugeChartInputResult,\n]\ntype ZonePair = readonly [PerformanceZone, PerformanceZone]\n\nconst gaugeChartRules = {\n invalidScaleMinimum: (minimum: unknown): GaugeChartError => ({\n type: 'InvalidScaleMinimum',\n message: 'Gauge chart minimum must be a finite number.',\n details: some(`Invalid minimum: ${String(minimum)}.`),\n }),\n invalidScaleMaximum: (maximum: unknown, minimum: unknown): GaugeChartError => ({\n type: 'InvalidScaleMaximum',\n message: 'Gauge chart maximum must be a finite number greater than the minimum.',\n details: some(`Invalid maximum: ${String(maximum)} for minimum ${String(minimum)}.`),\n }),\n currentValueOutOfRange: (value: unknown, scaleRange: ScaleRange): GaugeChartError => ({\n type: 'CurrentValueOutOfRange',\n message: 'Gauge chart current value must be a finite number within the scale range.',\n details: some(\n `Current value ${String(value)} is outside ${String(scaleRange.minimum)} to ${String(\n scaleRange.maximum,\n )}.`,\n ),\n }),\n noZonesProvided: (): GaugeChartError => ({\n type: 'NoZonesProvided',\n message: 'A gauge chart needs at least one performance zone.',\n details: none,\n }),\n emptyZoneLabel: (index: number): GaugeChartError => ({\n type: 'EmptyZoneLabel',\n message: 'Every gauge chart performance zone needs a non-empty label.',\n details: some(`Empty zone label at index ${String(index)}.`),\n }),\n invalidZoneBounds: (index: number): GaugeChartError => ({\n type: 'InvalidZoneBounds',\n message: 'Every gauge chart zone lower bound must be less than its upper bound.',\n details: some(`Invalid zone bounds at index ${String(index)}.`),\n }),\n zonesDoNotCoverScale: (scaleRange: ScaleRange): GaugeChartError => ({\n type: 'ZonesDoNotCoverScale',\n message: 'Gauge chart zones must exactly cover the scale with no gaps or overlaps.',\n details: some(\n `Expected zones to cover ${String(scaleRange.minimum)} to ${String(\n scaleRange.maximum,\n )}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasValidScaleMinimum = (input: GaugeChartInput) => isFiniteNumber(input.minimum)\n\nconst hasValidScaleMaximum = (input: GaugeChartInput) =>\n allPass([\n (candidate: GaugeChartInput) => isFiniteNumber(candidate.maximum),\n (candidate: GaugeChartInput) => Number(candidate.maximum) > Number(candidate.minimum),\n ])(input)\n\nconst toScaleRange = (input: GaugeChartInput): ScaleRange => ({\n minimum: Number(input.minimum),\n maximum: Number(input.maximum),\n})\n\nconst isWithinScaleRange = (scaleRange: ScaleRange) =>\n allPass([\n (value: number) => value >= scaleRange.minimum,\n (value: number) => value <= scaleRange.maximum,\n ])\n\nconst currentValueIsWithinScale = (input: GaugeChartInput) =>\n allPass([\n (candidate: GaugeChartInput) => isFiniteNumber(candidate.currentValue),\n (candidate: GaugeChartInput) =>\n isWithinScaleRange(toScaleRange(candidate))(Number(candidate.currentValue)),\n ])(input)\n\nconst hasZones = (input: GaugeChartInput) => input.zones.length > 0\n\nconst hasNonEmptyLabel = (zone: PerformanceZone) => zone.label.trim().length > 0\n\nconst hasOnlyNonEmptyLabels = (input: GaugeChartInput) =>\n all(hasNonEmptyLabel, [...input.zones])\n\nconst findEmptyZoneLabelIndex = (zones: readonly PerformanceZone[]) =>\n findIndex(complement(hasNonEmptyLabel), [...zones])\n\nconst hasValidZoneBounds = (zone: PerformanceZone) =>\n allPass([\n (candidate: PerformanceZone) => isFiniteNumber(candidate.lowerBound),\n (candidate: PerformanceZone) => isFiniteNumber(candidate.upperBound),\n (candidate: PerformanceZone) => candidate.lowerBound < candidate.upperBound,\n ])(zone)\n\nconst hasOnlyValidZoneBounds = (input: GaugeChartInput) =>\n all(hasValidZoneBounds, [...input.zones])\n\nconst findInvalidZoneBoundsIndex = (zones: readonly PerformanceZone[]) =>\n findIndex(complement(hasValidZoneBounds), [...zones])\n\nconst toZonePair = (zones: readonly PerformanceZone[]) =>\n (rightZone: PerformanceZone, index: number): ZonePair => [zones[index], rightZone]\n\nconst getZonePairs = (zones: readonly PerformanceZone[]): readonly ZonePair[] =>\n zones.slice(1).map(toZonePair(zones))\n\nconst zonesAreContiguous = ([left, right]: ZonePair) =>\n left.upperBound === right.lowerBound\n\nconst hasContiguousZones = (zones: readonly PerformanceZone[]) =>\n all(zonesAreContiguous, getZonePairs(zones))\n\nconst zonesCoverScale = (input: GaugeChartInput) =>\n allPass([\n (candidate: GaugeChartInput) => candidate.zones[0].lowerBound === Number(candidate.minimum),\n (candidate: GaugeChartInput) =>\n candidate.zones[candidate.zones.length - 1].upperBound === Number(candidate.maximum),\n (candidate: GaugeChartInput) => hasContiguousZones(candidate.zones),\n ])(input)\n\nconst toValidatedInput = (input: GaugeChartInput): ValidatedGaugeChartInput => ({\n currentValue: Number(input.currentValue),\n minimum: Number(input.minimum),\n maximum: Number(input.maximum),\n zones: input.zones,\n})\n\nconst inputValidators: GaugeChartInputValidator[] = [\n [\n complement(hasValidScaleMinimum),\n (input: GaugeChartInput) => err(gaugeChartRules.invalidScaleMinimum(input.minimum)),\n ],\n [\n complement(hasValidScaleMaximum),\n (input: GaugeChartInput) =>\n err(gaugeChartRules.invalidScaleMaximum(input.maximum, input.minimum)),\n ],\n [\n complement(currentValueIsWithinScale),\n (input: GaugeChartInput) =>\n err(gaugeChartRules.currentValueOutOfRange(input.currentValue, toScaleRange(input))),\n ],\n [complement(hasZones), () => err(gaugeChartRules.noZonesProvided())],\n [\n complement(hasOnlyNonEmptyLabels),\n (input: GaugeChartInput) =>\n err(gaugeChartRules.emptyZoneLabel(findEmptyZoneLabelIndex(input.zones))),\n ],\n [\n complement(hasOnlyValidZoneBounds),\n (input: GaugeChartInput) =>\n err(gaugeChartRules.invalidZoneBounds(findInvalidZoneBoundsIndex(input.zones))),\n ],\n [\n complement(zonesCoverScale),\n (input: GaugeChartInput) => err(gaugeChartRules.zonesDoNotCoverScale(toScaleRange(input))),\n ],\n [always(true), (input: GaugeChartInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateGaugeChartInput: (\n input: GaugeChartInput\n) => GaugeChartInputResult = cond(inputValidators)\n\nconst toNeedlePosition = (currentValue: number, scaleRange: ScaleRange) =>\n (currentValue - scaleRange.minimum) / (scaleRange.maximum - scaleRange.minimum)\n\nconst containsCurrentValue =\n (currentValue: number, scaleRange: ScaleRange) => (zone: ValidatedPerformanceZone) =>\n allPass([\n (candidate: ValidatedPerformanceZone) => currentValue >= candidate.lowerBound,\n anyPass([\n (candidate: ValidatedPerformanceZone) => currentValue < candidate.upperBound,\n (candidate: ValidatedPerformanceZone) => candidate.upperBound === scaleRange.maximum,\n ]),\n ])(zone)\n\nconst getActiveZone = (\n currentValue: number,\n zones: readonly ValidatedPerformanceZone[],\n scaleRange: ScaleRange,\n) =>\n defaultTo(\n zones[zones.length - 1],\n zones.find(containsCurrentValue(currentValue, scaleRange)),\n )\n\nconst summarizeGaugeChart = (input: ValidatedGaugeChartInput): GaugeChartSummary => {\n const scaleRange = {\n minimum: input.minimum,\n maximum: input.maximum,\n }\n\n return {\n ...input,\n scaleRange,\n activeZone: getActiveZone(input.currentValue, input.zones, scaleRange),\n needlePosition: toNeedlePosition(input.currentValue, scaleRange),\n }\n}\n\nexport function computeGaugeChart(input: GaugeChartInput): GaugeChartResult {\n return mapResult<ValidatedGaugeChartInput, GaugeChartSummary, GaugeChartError>(\n summarizeGaugeChart,\n )(validateGaugeChartInput(input))\n}\n","import { arc as createArc } from 'd3'\n\nimport { always, cond, defaultTo } from '../shared/fp'\n\nimport type {\n GaugeChartSummary,\n PerformanceZone,\n ScaleRange,\n} from './GaugeChart.types'\n\nexport const GAUGE_CHART_MARGIN = {\n top: 34,\n right: 42,\n bottom: 54,\n left: 42,\n}\n\nexport type GaugeChartTextAnchor = 'start' | 'middle' | 'end'\n\nexport type RenderedGaugeChartZone = PerformanceZone & {\n readonly colorIndex: number\n readonly startAngle: number\n readonly endAngle: number\n readonly path: string\n readonly labelX: number\n readonly labelY: number\n readonly labelAnchor: GaugeChartTextAnchor\n}\n\nexport type RenderedGaugeChartTick = {\n readonly value: number\n readonly x: number\n readonly y: number\n readonly textAnchor: GaugeChartTextAnchor\n}\n\nexport type GaugeChartModel = {\n readonly currentValue: number\n readonly scaleRange: ScaleRange\n readonly activeZone: PerformanceZone\n readonly needlePosition: number\n readonly zones: readonly RenderedGaugeChartZone[]\n readonly ticks: readonly RenderedGaugeChartTick[]\n readonly centerX: number\n readonly centerY: number\n readonly innerRadius: number\n readonly outerRadius: number\n readonly needleAngle: number\n readonly needleX: number\n readonly needleY: number\n readonly valueLabelX: number\n readonly valueLabelY: number\n readonly zoneLabelX: number\n readonly zoneLabelY: number\n readonly currentLabel: string\n readonly activeZoneLabel: string\n}\n\nconst START_ANGLE = -Math.PI / 2\nconst END_ANGLE = Math.PI / 2\nconst ARC_THICKNESS_RATIO = 0.25\nconst MINIMUM_ARC_THICKNESS = 20 \nconst MAXIMUM_ARC_THICKNESS = 30\nconst NEEDLE_INSET = 18\nconst ZONE_LABEL_OFFSET = 22\nconst TICK_LABEL_OFFSET = 18\nconst END_TICK_LABEL_GUTTER = 18\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nconst getPlotWidth = (width: number) =>\n Math.max(0, width - GAUGE_CHART_MARGIN.left - GAUGE_CHART_MARGIN.right)\n\nconst getCenterY = (height: number) => height - GAUGE_CHART_MARGIN.bottom\n\nconst getOuterRadius = (width: number, height: number) =>\n Math.max(\n 0,\n Math.min(\n getPlotWidth(width) / 2 - END_TICK_LABEL_GUTTER,\n getCenterY(height) - GAUGE_CHART_MARGIN.top,\n ),\n )\n\nconst getArcThickness = (outerRadius: number) =>\n clamp(MINIMUM_ARC_THICKNESS, MAXIMUM_ARC_THICKNESS, outerRadius * ARC_THICKNESS_RATIO)\n\nconst getAngle = (position: number) =>\n START_ANGLE + position * (END_ANGLE - START_ANGLE)\n\nconst toPosition = (scaleRange: ScaleRange) => (value: number) =>\n (value - scaleRange.minimum) / (scaleRange.maximum - scaleRange.minimum)\n\nconst getPolarPoint = (\n centerX: number,\n centerY: number,\n radius: number,\n angle: number,\n) => ({\n x: centerX + Math.sin(angle) * radius,\n y: centerY - Math.cos(angle) * radius,\n})\n\nconst getScaleMidpoint = (scaleRange: ScaleRange) =>\n scaleRange.minimum + (scaleRange.maximum - scaleRange.minimum) / 2\n\nconst getScaleTicks = (scaleRange: ScaleRange) => [\n scaleRange.minimum,\n getScaleMidpoint(scaleRange),\n scaleRange.maximum,\n]\n\nconst getLabelAnchor: (x: number, centerX: number) => GaugeChartTextAnchor = cond([\n [\n (x: number, centerX: number) => Math.abs(x - centerX) < 8,\n always('middle'),\n ],\n [(x: number, centerX: number) => x > centerX, always('start')],\n [always(true), always('end')],\n])\n\nconst renderZonePath = (innerRadius: number, outerRadius: number) =>\n (zone: Pick<RenderedGaugeChartZone, 'startAngle' | 'endAngle'>) =>\n defaultTo(\n '',\n createArc<typeof zone>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle((candidate) => candidate.startAngle)\n .endAngle((candidate) => candidate.endAngle)\n .cornerRadius(2)(zone),\n )\n\nexport const buildGaugeChartModel = (\n summary: GaugeChartSummary,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n): GaugeChartModel => {\n const centerX = width / 2\n const centerY = getCenterY(height)\n const outerRadius = getOuterRadius(width, height)\n const innerRadius = Math.max(0, outerRadius - getArcThickness(outerRadius))\n const toScalePosition = toPosition(summary.scaleRange)\n const toAngle = (value: number) => getAngle(toScalePosition(value))\n const zonePath = renderZonePath(innerRadius, outerRadius)\n const needleAngle = getAngle(summary.needlePosition)\n const needlePoint = getPolarPoint(\n centerX,\n centerY,\n Math.max(0, outerRadius - NEEDLE_INSET),\n needleAngle,\n )\n const toRenderedZone = (\n zone: PerformanceZone,\n index: number,\n ): RenderedGaugeChartZone => {\n const startAngle = toAngle(zone.lowerBound)\n const endAngle = toAngle(zone.upperBound)\n const labelPoint = getPolarPoint(\n 0,\n 0,\n outerRadius + ZONE_LABEL_OFFSET,\n (startAngle + endAngle) / 2,\n )\n const renderedZone = {\n ...zone,\n colorIndex: index % 8,\n startAngle,\n endAngle,\n path: '',\n labelX: labelPoint.x,\n labelY: labelPoint.y,\n labelAnchor: getLabelAnchor(labelPoint.x, 0),\n }\n\n return {\n ...renderedZone,\n path: zonePath(renderedZone),\n }\n }\n\n return {\n currentValue: summary.currentValue,\n scaleRange: summary.scaleRange,\n activeZone: summary.activeZone,\n needlePosition: summary.needlePosition,\n zones: summary.zones.map(toRenderedZone),\n ticks: getScaleTicks(summary.scaleRange).map((tick) => {\n const point = getPolarPoint(centerX, centerY, outerRadius + TICK_LABEL_OFFSET, toAngle(tick))\n\n return {\n value: tick,\n x: point.x,\n y: point.y,\n textAnchor: getLabelAnchor(point.x, centerX),\n }\n }),\n centerX,\n centerY,\n innerRadius,\n outerRadius,\n needleAngle,\n needleX: needlePoint.x,\n needleY: needlePoint.y,\n valueLabelX: centerX,\n valueLabelY: centerY - outerRadius * 0.36,\n zoneLabelX: centerX,\n zoneLabelY: centerY - outerRadius * 0.18,\n currentLabel: formatValue(summary.currentValue),\n activeZoneLabel: summary.activeZone.label,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { GaugeChartProps } from '../GaugeChart.types'\n\ntype GaugeChartCaptionProps = Pick<GaugeChartProps, 'caption'>\n\nexport function GaugeChartCaption({ caption }: GaugeChartCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-gauge-chart__caption\">{text}</figcaption>,\n })\n}\n","import type { GaugeChartModel } from '../GaugeChart.model'\n\ntype GaugeChartAxisProps = {\n readonly chart: GaugeChartModel\n readonly formatValue: (value: number) => string\n}\n\nexport function GaugeChartAxis({ chart, formatValue }: GaugeChartAxisProps) {\n return (\n <g className=\"pristine-gauge-chart__axis\" aria-hidden=\"true\">\n {chart.ticks.map((tick) => (\n <text\n className=\"pristine-gauge-chart__tick\"\n key={tick.value}\n x={tick.x}\n y={tick.y}\n textAnchor={tick.textAnchor}\n >\n {formatValue(tick.value)}\n </text>\n ))}\n </g>\n )\n}\n","import type { GaugeChartModel } from '../GaugeChart.model'\n\ntype GaugeChartNeedleProps = {\n readonly chart: GaugeChartModel\n}\n\nexport function GaugeChartNeedle({ chart }: GaugeChartNeedleProps) {\n return (\n <g className=\"pristine-gauge-chart__needle\" aria-hidden=\"true\">\n <line\n className=\"pristine-gauge-chart__needle-halo\"\n x1={chart.centerX}\n x2={chart.needleX}\n y1={chart.centerY}\n y2={chart.needleY}\n />\n <line\n className=\"pristine-gauge-chart__needle-line\"\n x1={chart.centerX}\n x2={chart.needleX}\n y1={chart.centerY}\n y2={chart.needleY}\n />\n <circle\n className=\"pristine-gauge-chart__needle-cap-halo\"\n cx={chart.centerX}\n cy={chart.centerY}\n r=\"8\"\n />\n <circle\n className=\"pristine-gauge-chart__needle-cap\"\n cx={chart.centerX}\n cy={chart.centerY}\n r=\"5\"\n />\n </g>\n )\n}\n","import type { GaugeChartModel } from '../GaugeChart.model'\n\ntype GaugeChartValueLabelsProps = {\n readonly chart: GaugeChartModel\n}\n\nexport function GaugeChartValueLabels({ chart }: GaugeChartValueLabelsProps) {\n return (\n <g className=\"pristine-gauge-chart__value-labels\" aria-hidden=\"true\">\n <text\n className=\"pristine-gauge-chart__value-label\"\n x={chart.valueLabelX}\n y={chart.valueLabelY}\n textAnchor=\"middle\"\n >\n {chart.currentLabel}\n </text>\n <text\n className=\"pristine-gauge-chart__active-zone-label\"\n x={chart.zoneLabelX}\n y={chart.zoneLabelY}\n textAnchor=\"middle\"\n >\n {chart.activeZoneLabel}\n </text>\n </g>\n )\n}\n","import { classNames } from '@/shared'\nimport { ifElse } from '@/shared/fp'\n\nimport type { GaugeChartModel } from '../GaugeChart.model'\n\ntype GaugeChartZonesProps = {\n readonly chart: GaugeChartModel\n readonly showLabels: boolean\n}\n\nconst isActiveZone = (\n chart: GaugeChartModel,\n zone: GaugeChartModel['zones'][number],\n) =>\n chart.activeZone.label === zone.label\n\nconst toActiveZoneClassName = ifElse(\n (candidate: boolean) => candidate,\n () => 'pristine-gauge-chart__zone-group--active',\n () => '',\n)\n\nconst toZoneGroupClassName = (\n chart: GaugeChartModel,\n zone: GaugeChartModel['zones'][number],\n) =>\n classNames([\n 'pristine-gauge-chart__zone-group',\n toActiveZoneClassName(isActiveZone(chart, zone)),\n ])\n\nconst toZoneClassName = (index: number) =>\n `pristine-gauge-chart__zone pristine-gauge-chart__zone--tone-${String(index)}`\n\nconst renderLabel = (zone: GaugeChartModel['zones'][number]) =>\n ifElse(\n (candidate: boolean) => candidate,\n () => (\n <text\n className=\"pristine-gauge-chart__zone-label\"\n x={zone.labelX}\n y={zone.labelY}\n textAnchor={zone.labelAnchor}\n aria-hidden=\"true\"\n >\n {zone.label}\n </text>\n ),\n () => null,\n )\n\nexport function GaugeChartZones({ chart, showLabels }: GaugeChartZonesProps) {\n return (\n <g className=\"pristine-gauge-chart__zones\">\n {chart.zones.map((zone) => (\n <g className={toZoneGroupClassName(chart, zone)} key={zone.label}>\n <path className={toZoneClassName(zone.colorIndex)} d={zone.path} />\n {renderLabel(zone)(showLabels)}\n </g>\n ))}\n </g>\n )\n}\n","import type { GaugeChartModel } from '../GaugeChart.model'\nimport type { GaugeChartProps } from '../GaugeChart.types'\n\nimport { GaugeChartAxis } from './GaugeChartAxis'\nimport { GaugeChartNeedle } from './GaugeChartNeedle'\nimport { GaugeChartValueLabels } from './GaugeChartValueLabels'\nimport { GaugeChartZones } from './GaugeChartZones'\n\ntype GaugeChartSvgProps = Pick<\n GaugeChartProps,\n 'ariaLabel' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: GaugeChartModel\n}\n\nexport function GaugeChartSvg({\n ariaLabel,\n chart,\n formatValue,\n height,\n showLabels,\n width,\n}: GaugeChartSvgProps) {\n const valueText = `${chart.currentLabel}, ${chart.activeZoneLabel}`\n\n return (\n <svg\n className=\"pristine-gauge-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <g\n className=\"pristine-gauge-chart__meter\"\n role=\"meter\"\n aria-label={ariaLabel}\n aria-valuemin={chart.scaleRange.minimum}\n aria-valuemax={chart.scaleRange.maximum}\n aria-valuenow={chart.currentValue}\n aria-valuetext={valueText}\n >\n <g transform={`translate(${chart.centerX} ${chart.centerY})`}>\n <GaugeChartZones chart={chart} showLabels={showLabels} />\n </g>\n <GaugeChartNeedle chart={chart} />\n <GaugeChartValueLabels chart={chart} />\n </g>\n <GaugeChartAxis chart={chart} formatValue={formatValue} />\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { GaugeChartModel } from '../GaugeChart.model'\nimport type { GaugeChartProps } from '../GaugeChart.types'\n\nimport { GaugeChartCaption } from './GaugeChartCaption'\nimport { GaugeChartSvg } from './GaugeChartSvg'\n\ntype GaugeChartFigureProps = Pick<\n GaugeChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: GaugeChartModel\n}\n\nexport function GaugeChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatValue,\n height,\n showLabels,\n width,\n}: GaugeChartFigureProps) {\n return (\n <figure className={classNames(['pristine-gauge-chart', className])} aria-label={ariaLabel}>\n <GaugeChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n <GaugeChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeGaugeChart } from './GaugeChart.domain'\nimport { buildGaugeChartModel } from './GaugeChart.model'\nimport type { GaugeChartProps } from './GaugeChart.types'\nimport { GaugeChartFigure } from './components/GaugeChartFigure'\n\nexport function GaugeChart({\n currentValue,\n minimum,\n maximum,\n zones,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showLabels,\n formatValue,\n}: GaugeChartProps) {\n const result = useMemo(\n () => computeGaugeChart({ currentValue, minimum, maximum, zones }),\n [currentValue, minimum, maximum, zones],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-gauge-chart__error', className])}\n title=\"Gauge chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const chart = buildGaugeChartModel(summary, width, height, formatValue)\n\n return (\n <GaugeChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { GaugeChartProps } from './GaugeChart.types'\n\nexport const formatGaugeChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_GAUGE_CHART_VIEW_PROPS = {\n width: 420,\n height: 260,\n ariaLabel: 'Gauge chart',\n className: '',\n caption: none,\n showLabels: true,\n formatValue: formatGaugeChartNumber,\n} satisfies Omit<GaugeChartProps, 'currentValue' | 'minimum' | 'maximum' | 'zones'>\n","import { err, mapResult, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n complement,\n cond,\n filter,\n findIndex,\n ifElse,\n} from '../shared/fp'\n\nimport type {\n BoxPlotError,\n BoxPlotInput,\n BoxPlotResult,\n FiveNumberSummary,\n SortedDataset,\n ValidatedBoxPlotInput,\n ValidatedDataset,\n} from './BoxPlot.types'\n\ntype DatasetResult = Result<ValidatedDataset, BoxPlotError>\ntype BoxPlotInputResult = Result<ValidatedBoxPlotInput, BoxPlotError>\ntype DatasetValidator = [\n (data: readonly unknown[]) => boolean,\n (data: readonly unknown[]) => DatasetResult,\n]\n\nconst MINIMUM_VALUE_COUNT = 5\nconst WHISKER_MULTIPLIER = 1.5\n\nconst detailsFromIndex = (index: number) => some(`Invalid value at index ${String(index)}.`)\n\nconst boxPlotRules = {\n insufficientData: (count: number): BoxPlotError => ({\n type: 'InsufficientData',\n message: 'A box plot needs at least five numeric values.',\n details: some(`Received ${String(count)}.`),\n }),\n nonNumericValue: (index: number): BoxPlotError => ({\n type: 'NonNumericValue',\n message: 'Every box plot value must be a finite number.',\n details: detailsFromIndex(index),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughValues = (data: readonly unknown[]) => data.length >= MINIMUM_VALUE_COUNT\n\nconst hasOnlyFiniteNumbers = (data: readonly unknown[]) => all(isFiniteNumber, [...data])\n\nconst findInvalidNumberIndex = (data: readonly unknown[]) =>\n findIndex(complement(isFiniteNumber), [...data])\n\nconst toValidatedDataset = (data: readonly unknown[]): ValidatedDataset =>\n filter((value): value is number => isFiniteNumber(value), [...data])\n\nconst datasetValidators: DatasetValidator[] = [\n [\n complement(hasOnlyFiniteNumbers),\n (data: readonly unknown[]) => err(boxPlotRules.nonNumericValue(findInvalidNumberIndex(data))),\n ],\n [\n complement(hasEnoughValues),\n (data: readonly unknown[]) => err(boxPlotRules.insufficientData(data.length)),\n ],\n [always(true), (data: readonly unknown[]) => ok(toValidatedDataset(data))],\n]\n\nconst validateDataset: (data: readonly unknown[]) => DatasetResult = cond(datasetValidators)\n\nexport function validateBoxPlotInput(input: BoxPlotInput): BoxPlotInputResult {\n return mapResult<ValidatedDataset, ValidatedBoxPlotInput, BoxPlotError>(\n (dataset) => ({ dataset }),\n )(validateDataset(input.data))\n}\n\nconst byAscendingValue = (left: number, right: number) => left - right\n\nconst sortDataset = (dataset: ValidatedDataset): SortedDataset =>\n [...dataset].sort(byAscendingValue)\n\nconst getMedian = (sortedValues: readonly number[]) => {\n const midpoint = Math.floor(sortedValues.length / 2)\n\n return ifElse(\n (values: readonly number[]) => values.length % 2 === 0,\n (values: readonly number[]) => (Number(values[midpoint - 1]) + Number(values[midpoint])) / 2,\n (values: readonly number[]) => Number(values[midpoint]),\n )(sortedValues)\n}\n\nconst getLowerHalf = (sortedValues: SortedDataset) =>\n sortedValues.slice(0, Math.floor(sortedValues.length / 2))\n\nconst getUpperHalf = (sortedValues: SortedDataset) =>\n sortedValues.slice(Math.ceil(sortedValues.length / 2))\n\nconst isInsideFences = (lowerFence: number, upperFence: number) => (value: number) =>\n allPass([\n (candidate: number) => candidate >= lowerFence,\n (candidate: number) => candidate <= upperFence,\n ])(value)\n\nconst isOutsideFences = (lowerFence: number, upperFence: number) => (value: number) =>\n anyPass([\n (candidate: number) => candidate < lowerFence,\n (candidate: number) => candidate > upperFence,\n ])(value)\n\nconst getFirstValue = (values: readonly number[]) => Number(values[0])\n\nconst getLastValue = (values: readonly number[]) => Number(values[values.length - 1])\n\nconst computeSummary = (input: ValidatedBoxPlotInput): FiveNumberSummary => {\n const sortedDataset = sortDataset(input.dataset)\n const q1 = getMedian(getLowerHalf(sortedDataset))\n const median = getMedian(sortedDataset)\n const q3 = getMedian(getUpperHalf(sortedDataset))\n const interquartileRange = q3 - q1\n const lowerFence = q1 - WHISKER_MULTIPLIER * interquartileRange\n const upperFence = q3 + WHISKER_MULTIPLIER * interquartileRange\n const normalValues = filter(isInsideFences(lowerFence, upperFence), [...sortedDataset])\n\n return {\n q1,\n median,\n q3,\n interquartileRange,\n lowerFence,\n upperFence,\n lowerWhisker: getFirstValue(normalValues),\n upperWhisker: getLastValue(normalValues),\n outliers: filter(isOutsideFences(lowerFence, upperFence), [...sortedDataset]),\n }\n}\n\nexport function computeBoxPlot(input: BoxPlotInput): BoxPlotResult {\n return mapResult<ValidatedBoxPlotInput, FiveNumberSummary, BoxPlotError>(computeSummary)(\n validateBoxPlotInput(input),\n )\n}\n","import { extent, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { identity, ifElse } from '../shared/fp'\n\nimport type { FiveNumberSummary } from './BoxPlot.types'\n\ntype ChartExtent = [number, number]\n\nexport const BOX_PLOT_MARGIN = {\n top: 24,\n right: 20,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedBoxPlotPart = {\n readonly key: string\n readonly label: string\n readonly tooltipX: number\n readonly tooltipY: number\n}\n\nexport type RenderedOutlier = RenderedBoxPlotPart & {\n readonly value: number\n readonly cx: number\n readonly cy: number\n}\n\nexport type BoxPlotModel = {\n readonly plotBottom: number\n readonly plotCenter: number\n readonly boxTop: number\n readonly boxHeight: number\n readonly q1X: number\n readonly medianX: number\n readonly q3X: number\n readonly lowerWhiskerX: number\n readonly upperWhiskerX: number\n readonly lowerCapTop: number\n readonly lowerCapBottom: number\n readonly upperCapTop: number\n readonly upperCapBottom: number\n readonly boxPart: RenderedBoxPlotPart\n readonly medianPart: RenderedBoxPlotPart\n readonly lowerWhiskerPart: RenderedBoxPlotPart\n readonly upperWhiskerPart: RenderedBoxPlotPart\n readonly outliers: readonly RenderedOutlier[]\n readonly parts: readonly RenderedBoxPlotPart[]\n readonly xTicks: readonly number[]\n readonly xScale: (value: number) => number\n}\n\nconst BOX_HEIGHT = 56\nconst WHISKER_CAP_HEIGHT = 38\nconst DOMAIN_PADDING_RATIO = 0.08\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst padExtent = ([lowerBound, upperBound]: ChartExtent): ChartExtent => {\n const width = upperBound - lowerBound\n const padding = width * DOMAIN_PADDING_RATIO\n\n return [lowerBound - padding, upperBound + padding]\n}\n\nconst getSummaryValues = (summary: FiveNumberSummary) => [\n summary.lowerWhisker,\n summary.q1,\n summary.median,\n summary.q3,\n summary.upperWhisker,\n ...summary.outliers,\n]\n\nconst createPart = (\n key: string,\n label: string,\n tooltipX: number,\n tooltipY: number,\n): RenderedBoxPlotPart => ({\n key,\n label,\n tooltipX,\n tooltipY,\n})\n\nexport const buildBoxPlotModel = (\n summary: FiveNumberSummary,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n): BoxPlotModel => {\n const plotBottom = height - BOX_PLOT_MARGIN.bottom\n const plotCenter = BOX_PLOT_MARGIN.top + (plotBottom - BOX_PLOT_MARGIN.top) / 2\n const boxTop = plotCenter - BOX_HEIGHT / 2\n const xScale = scaleLinear()\n .domain(padExtent(expandZeroWidthExtent(getExtent(getSummaryValues(summary)))))\n .nice()\n .range([BOX_PLOT_MARGIN.left, width - BOX_PLOT_MARGIN.right])\n const q1X = xScale(summary.q1)\n const medianX = xScale(summary.median)\n const q3X = xScale(summary.q3)\n const lowerWhiskerX = xScale(summary.lowerWhisker)\n const upperWhiskerX = xScale(summary.upperWhisker)\n const lowerCapTop = plotCenter - WHISKER_CAP_HEIGHT / 2\n const lowerCapBottom = plotCenter + WHISKER_CAP_HEIGHT / 2\n const upperCapTop = lowerCapTop\n const upperCapBottom = lowerCapBottom\n const boxPart = createPart(\n 'box',\n `Q1 ${formatValue(summary.q1)} to Q3 ${formatValue(summary.q3)}`,\n q1X + (q3X - q1X) / 2,\n boxTop,\n )\n const medianPart = createPart(\n 'median',\n `Median: ${formatValue(summary.median)}`,\n medianX,\n boxTop,\n )\n const lowerWhiskerPart = createPart(\n 'lower-whisker',\n `Lower whisker: ${formatValue(summary.lowerWhisker)}`,\n lowerWhiskerX,\n plotCenter,\n )\n const upperWhiskerPart = createPart(\n 'upper-whisker',\n `Upper whisker: ${formatValue(summary.upperWhisker)}`,\n upperWhiskerX,\n plotCenter,\n )\n const outliers = summary.outliers.map(\n (value, index): RenderedOutlier => ({\n ...createPart(\n `outlier-${String(index)}`,\n `Outlier: ${formatValue(value)}`,\n xScale(value),\n plotCenter,\n ),\n value,\n cx: xScale(value),\n cy: plotCenter,\n }),\n )\n\n return {\n plotBottom,\n plotCenter,\n boxTop,\n boxHeight: BOX_HEIGHT,\n q1X,\n medianX,\n q3X,\n lowerWhiskerX,\n upperWhiskerX,\n lowerCapTop,\n lowerCapBottom,\n upperCapTop,\n upperCapBottom,\n boxPart,\n medianPart,\n lowerWhiskerPart,\n upperWhiskerPart,\n outliers,\n parts: [boxPart, medianPart, lowerWhiskerPart, upperWhiskerPart, ...outliers],\n xTicks: xScale.ticks(6),\n xScale,\n }\n}\n","import { matchOption } from '@/shared'\nimport type { BoxPlotProps } from '../BoxPlot.types'\n\ntype BoxPlotCaptionProps = Pick<BoxPlotProps, 'caption'>\n\nexport function BoxPlotCaption({ caption }: BoxPlotCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (content) => (\n <figcaption className=\"pristine-box-plot__caption\">{content}</figcaption>\n ),\n })\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotAxesProps = {\n readonly chart: BoxPlotModel\n readonly width: number\n}\n\nexport function BoxPlotAxes({ chart, width }: BoxPlotAxesProps) {\n return (\n <line\n className=\"pristine-box-plot__axis\"\n x1={BOX_PLOT_MARGIN.left}\n x2={width - BOX_PLOT_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n )\n}\n","import type { KeyboardEvent, ReactNode } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { BoxPlotModel, RenderedBoxPlotPart, RenderedOutlier } from '../BoxPlot.model'\n\ntype BoxPlotDistributionProps = {\n readonly activePartKey: string | null\n readonly chart: BoxPlotModel\n readonly onActivate: (partKey: string) => void\n readonly onDeactivate: () => void\n}\n\ntype InteractivePartProps = {\n readonly activePartKey: string | null\n readonly children: ReactNode\n readonly part: RenderedBoxPlotPart\n readonly onActivate: (partKey: string) => void\n readonly onDeactivate: () => void\n}\n\nconst getActiveClassName = (active: boolean) =>\n ifElse(\n always(active),\n always('pristine-box-plot__part--active'),\n always(''),\n )(active)\n\nfunction InteractivePart({\n activePartKey,\n children,\n part,\n onActivate,\n onDeactivate,\n}: InteractivePartProps) {\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-box-plot__part',\n getActiveClassName(activePartKey === part.key),\n ])}\n role=\"img\"\n aria-label={part.label}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={() => onActivate(part.key)}\n onFocus={() => onActivate(part.key)}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => onActivate(part.key)}\n onMouseLeave={onDeactivate}\n >\n {children}\n </g>\n )\n}\n\nconst getOutlierClassName = (activePartKey: string | null, outlier: RenderedOutlier) =>\n classNames([\n 'pristine-box-plot__outlier',\n getActiveClassName(activePartKey === outlier.key),\n ])\n\nconst handleOutlierKeyDown = (onDeactivate: () => void) => (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\nexport function BoxPlotDistribution({\n activePartKey,\n chart,\n onActivate,\n onDeactivate,\n}: BoxPlotDistributionProps) {\n return (\n <>\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.lowerWhiskerPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <line\n className=\"pristine-box-plot__whisker\"\n x1={chart.lowerWhiskerX}\n x2={chart.q1X}\n y1={chart.plotCenter}\n y2={chart.plotCenter}\n />\n <line\n className=\"pristine-box-plot__whisker-cap\"\n x1={chart.lowerWhiskerX}\n x2={chart.lowerWhiskerX}\n y1={chart.lowerCapTop}\n y2={chart.lowerCapBottom}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={Math.min(chart.lowerWhiskerX, chart.q1X)}\n y={chart.lowerCapTop - 8}\n width={Math.abs(chart.q1X - chart.lowerWhiskerX) + 16}\n height={chart.lowerCapBottom - chart.lowerCapTop + 16}\n />\n </InteractivePart>\n\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.upperWhiskerPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <line\n className=\"pristine-box-plot__whisker\"\n x1={chart.q3X}\n x2={chart.upperWhiskerX}\n y1={chart.plotCenter}\n y2={chart.plotCenter}\n />\n <line\n className=\"pristine-box-plot__whisker-cap\"\n x1={chart.upperWhiskerX}\n x2={chart.upperWhiskerX}\n y1={chart.upperCapTop}\n y2={chart.upperCapBottom}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={Math.min(chart.q3X, chart.upperWhiskerX) - 8}\n y={chart.upperCapTop - 8}\n width={Math.abs(chart.upperWhiskerX - chart.q3X) + 16}\n height={chart.upperCapBottom - chart.upperCapTop + 16}\n />\n </InteractivePart>\n\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.boxPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <rect\n className=\"pristine-box-plot__box\"\n x={Math.min(chart.q1X, chart.q3X)}\n y={chart.boxTop}\n width={Math.abs(chart.q3X - chart.q1X)}\n height={chart.boxHeight}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={Math.min(chart.q1X, chart.q3X) - 8}\n y={chart.boxTop - 8}\n width={Math.abs(chart.q3X - chart.q1X) + 16}\n height={chart.boxHeight + 16}\n />\n </InteractivePart>\n\n <InteractivePart\n activePartKey={activePartKey}\n part={chart.medianPart}\n onActivate={onActivate}\n onDeactivate={onDeactivate}\n >\n <line\n className=\"pristine-box-plot__median\"\n x1={chart.medianX}\n x2={chart.medianX}\n y1={chart.boxTop}\n y2={chart.boxTop + chart.boxHeight}\n />\n <rect\n className=\"pristine-box-plot__hit-area\"\n x={chart.medianX - 8}\n y={chart.boxTop - 8}\n width={16}\n height={chart.boxHeight + 16}\n />\n </InteractivePart>\n\n {chart.outliers.map((outlier) => (\n <g\n className={getOutlierClassName(activePartKey, outlier)}\n key={outlier.key}\n role=\"img\"\n aria-label={outlier.label}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={() => onActivate(outlier.key)}\n onFocus={() => onActivate(outlier.key)}\n onKeyDown={handleOutlierKeyDown(onDeactivate)}\n onMouseEnter={() => onActivate(outlier.key)}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-box-plot__outlier-hit-area\"\n cx={outlier.cx}\n cy={outlier.cy}\n r={10}\n />\n <circle\n className=\"pristine-box-plot__outlier-mark\"\n cx={outlier.cx}\n cy={outlier.cy}\n r={4}\n />\n </g>\n ))}\n </>\n )\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotGridLinesProps = {\n readonly chart: BoxPlotModel\n}\n\nexport function BoxPlotGridLines({ chart }: BoxPlotGridLinesProps) {\n return chart.xTicks.map((tick) => (\n <g className=\"pristine-box-plot__grid-line\" key={tick}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={BOX_PLOT_MARGIN.top}\n y2={chart.plotBottom}\n />\n </g>\n ))\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotPlotAreaProps = {\n readonly chart: BoxPlotModel\n readonly width: number\n}\n\nexport function BoxPlotPlotArea({ chart, width }: BoxPlotPlotAreaProps) {\n return (\n <rect\n className=\"pristine-box-plot__plot\"\n x={BOX_PLOT_MARGIN.left}\n y={BOX_PLOT_MARGIN.top}\n width={width - BOX_PLOT_MARGIN.left - BOX_PLOT_MARGIN.right}\n height={chart.plotBottom - BOX_PLOT_MARGIN.top}\n />\n )\n}\n","import type { RenderedBoxPlotPart } from '../BoxPlot.model'\n\ntype BoxPlotTooltipProps = {\n readonly height: number\n readonly part: RenderedBoxPlotPart\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function BoxPlotTooltip({\n height,\n part,\n width,\n}: BoxPlotTooltipProps) {\n const tooltipWidth = getTooltipWidth(part.label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n part.tooltipX - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n part.tooltipY - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-box-plot__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-box-plot__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-box-plot__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {part.label}\n </text>\n </g>\n )\n}\n","import { BOX_PLOT_MARGIN } from '../BoxPlot.model'\nimport type { BoxPlotModel } from '../BoxPlot.model'\n\ntype BoxPlotXTicksProps = {\n readonly chart: BoxPlotModel\n readonly height: number\n}\n\nexport function BoxPlotXTicks({ chart, height }: BoxPlotXTicksProps) {\n return chart.xTicks.map((tick) => (\n <g className=\"pristine-box-plot__tick\" key={tick}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={chart.plotBottom}\n y2={chart.plotBottom + 5}\n />\n <text\n x={chart.xScale(tick)}\n y={height - BOX_PLOT_MARGIN.bottom + 18}\n textAnchor=\"middle\"\n >\n {tick}\n </text>\n </g>\n ))\n}\n","import { useState } from 'react'\n\nimport type { BoxPlotModel } from '../BoxPlot.model'\nimport type { BoxPlotProps } from '../BoxPlot.types'\n\nimport { BoxPlotAxes } from './BoxPlotAxes'\nimport { BoxPlotDistribution } from './BoxPlotDistribution'\nimport { BoxPlotGridLines } from './BoxPlotGridLines'\nimport { BoxPlotPlotArea } from './BoxPlotPlotArea'\nimport { BoxPlotTooltip } from './BoxPlotTooltip'\nimport { BoxPlotXTicks } from './BoxPlotXTicks'\n\ntype BoxPlotSvgProps = Pick<BoxPlotProps, 'ariaLabel' | 'height' | 'width'> & {\n readonly chart: BoxPlotModel\n}\n\nexport function BoxPlotSvg({\n ariaLabel,\n chart,\n height,\n width,\n}: BoxPlotSvgProps) {\n const [activePartKey, setActivePartKey] = useState<string | null>(null)\n const activeParts = chart.parts.filter((part) => part.key === activePartKey)\n\n return (\n <svg\n className=\"pristine-box-plot__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <BoxPlotPlotArea chart={chart} width={width} />\n <BoxPlotGridLines chart={chart} />\n <BoxPlotAxes chart={chart} width={width} />\n <BoxPlotDistribution\n activePartKey={activePartKey}\n chart={chart}\n onActivate={setActivePartKey}\n onDeactivate={() => setActivePartKey(null)}\n />\n <BoxPlotXTicks chart={chart} height={height} />\n {activeParts.map((part) => (\n <BoxPlotTooltip\n key={part.key}\n height={height}\n part={part}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { BoxPlotModel } from '../BoxPlot.model'\nimport type { BoxPlotProps } from '../BoxPlot.types'\n\nimport { BoxPlotCaption } from './BoxPlotCaption'\nimport { BoxPlotSvg } from './BoxPlotSvg'\n\ntype BoxPlotFigureProps = Pick<\n BoxPlotProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'width'\n> & {\n readonly chart: BoxPlotModel\n}\n\nexport function BoxPlotFigure({\n ariaLabel,\n caption,\n chart,\n className,\n height,\n width,\n}: BoxPlotFigureProps) {\n return (\n <figure className={classNames(['pristine-box-plot', className])} aria-label={ariaLabel}>\n <BoxPlotSvg\n ariaLabel={ariaLabel}\n chart={chart}\n height={height}\n width={width}\n />\n <BoxPlotCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeBoxPlot } from './BoxPlot.domain'\nimport { buildBoxPlotModel } from './BoxPlot.model'\nimport { BoxPlotFigure } from './components/BoxPlotFigure'\nimport type { BoxPlotProps } from './BoxPlot.types'\n\nexport function BoxPlot({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n formatValue,\n}: BoxPlotProps) {\n const result = useMemo(\n () => computeBoxPlot({ data }),\n [data],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-box-plot__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const chart = buildBoxPlotModel(summary, width, height, formatValue)\n\n return (\n <BoxPlotFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n height={height}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { BoxPlotProps } from './BoxPlot.types'\n\nexport const formatBoxPlotNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_BOX_PLOT_VIEW_PROPS = {\n width: 480,\n height: 240,\n ariaLabel: 'Box plot',\n className: '',\n caption: none,\n formatValue: formatBoxPlotNumber,\n} satisfies Omit<BoxPlotProps, 'data'>\n","import { bin as createD3Bin, extent } from 'd3'\nimport type { Bin } from 'd3'\n\nimport { bindResult, err, fromNullable, mapResult, matchOption, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n anyPass,\n aperture,\n complement,\n cond,\n defaultTo,\n filter,\n findIndex,\n identity,\n ifElse,\n init,\n isEmpty,\n last,\n map,\n tail,\n} from '../shared/fp'\n\nimport type {\n AutoBinStrategy,\n BinStrategy,\n HistogramBin,\n HistogramError,\n HistogramInput,\n HistogramResult,\n ManualBinStrategy,\n Thresholds,\n ValidatedAutoBinStrategy,\n ValidatedBinStrategy,\n ValidatedDataset,\n ValidatedHistogramInput,\n ValidatedManualBinStrategy,\n} from './HistogramChart.types'\n\ntype HistogramExtent = [number, number]\ntype HistogramInputResult = Result<ValidatedHistogramInput, HistogramError>\ntype DatasetResult = Result<ValidatedDataset, HistogramError>\ntype BinStrategyResult = Result<ValidatedBinStrategy, HistogramError>\ntype StrategyMatcher<TOutput> = {\n readonly auto: (strategy: AutoBinStrategy) => TOutput\n readonly manual: (strategy: ManualBinStrategy) => TOutput\n}\ntype ValidatedStrategyMatcher<TOutput> = {\n readonly auto: (strategy: ValidatedAutoBinStrategy) => TOutput\n readonly manual: (strategy: ValidatedManualBinStrategy) => TOutput\n}\n\nexport const DEFAULT_HISTOGRAM_BIN_STRATEGY: BinStrategy = {\n kind: 'auto',\n binCount: 10,\n}\n\nconst detailsFromIndex = ifElse(\n (index: number) => index >= 0,\n (index: number) => some(`Invalid value at index ${index}.`),\n always(none),\n)\n\nconst histogramRules = {\n emptyDataset: (): HistogramError => ({\n type: 'EmptyDataset',\n message: 'A histogram needs at least one numeric value.',\n details: none,\n }),\n nonNumericValue: (index: number): HistogramError => ({\n type: 'NonNumericValue',\n message: 'Every histogram value must be a finite number.',\n details: detailsFromIndex(index),\n }),\n invalidBinCount: (binCount: number): HistogramError => ({\n type: 'InvalidBinCount',\n message: 'Auto bin count must be a positive integer.',\n details: some(`Received ${String(binCount)}.`),\n }),\n invalidBinBoundaries: (): HistogramError => ({\n type: 'InvalidBinBoundaries',\n message: 'Manual thresholds must be finite numbers in strictly ascending order.',\n details: none,\n }),\n boundariesOutsideDatasetRange: (): HistogramError => ({\n type: 'BoundariesOutsideDatasetRange',\n message: 'Manual thresholds must fully cover the dataset range.',\n details: none,\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isPositiveInteger = (value: number) =>\n allPass([Number.isInteger, (candidate: number) => candidate > 0])(value)\n\nconst isAscendingPair = ([left, right]: readonly number[]) =>\n allPass([\n (candidate: unknown) => Number.isFinite(candidate),\n () => Number.isFinite(right),\n (candidate: unknown) => Number(candidate) < Number(right),\n ])(left)\n\nconst areStrictlyAscending = (values: readonly number[]) =>\n all(isAscendingPair, aperture(2, [...values]))\n\nconst hasEnoughThresholds = (values: readonly number[]) => values.length >= 2\n\nconst hasOnlyFiniteNumbers = (values: readonly unknown[]) => all(isFiniteNumber, [...values])\n\nconst findInvalidNumberIndex = (values: readonly unknown[]) =>\n findIndex(complement(isFiniteNumber), [...values])\n\nconst toValidatedDataset = (values: readonly unknown[]): ValidatedDataset =>\n filter((value): value is number => isFiniteNumber(value), [...values])\n\nconst toThresholds = (values: readonly number[]): Thresholds => filter(isFiniteNumber, [...values])\n\nconst isNumber = (value: unknown) => typeof value === 'number'\n\nconst withNumberDefault = (fallback: number) => (value: unknown) =>\n matchOption(fromNullable(value), {\n none: () => fallback,\n some: (resolvedValue) =>\n ifElse(\n isNumber,\n (numberValue: number) => defaultTo(fallback, numberValue),\n always(fallback),\n )(resolvedValue),\n })\n\nconst getExtent = (values: readonly number[]): HistogramExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: HistogramExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: HistogramExtent): HistogramExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst getManualDomain = (thresholds: Thresholds): HistogramExtent => [\n withNumberDefault(0)(thresholds[0]),\n withNumberDefault(1)(last([...thresholds])),\n]\n\nconst getInteriorThresholds = (thresholds: Thresholds): readonly number[] =>\n init(tail([...thresholds]))\n\nconst fullyCoversDataset = (dataset: ValidatedDataset, thresholds: Thresholds) => {\n const [datasetMin, datasetMax] = getExtent(dataset)\n const [thresholdMin, thresholdMax] = getManualDomain(thresholds)\n\n return all(identity, [\n thresholdMin <= datasetMin,\n thresholdMax >= datasetMax,\n ])\n}\n\ntype DatasetValidator = [\n (data: readonly unknown[]) => boolean,\n (data: readonly unknown[]) => DatasetResult,\n]\n\nconst datasetValidators: DatasetValidator[] = [\n [isEmpty, () => err(histogramRules.emptyDataset())],\n [\n complement(hasOnlyFiniteNumbers),\n (data: readonly unknown[]) => err(histogramRules.nonNumericValue(findInvalidNumberIndex(data))),\n ],\n [() => true, (data: readonly unknown[]) => ok(toValidatedDataset(data))],\n]\n\nconst validateDataset: (data: readonly unknown[]) => DatasetResult = cond(datasetValidators)\n\nconst createValidatedAutoStrategy = (binCount: number): ValidatedAutoBinStrategy => ({\n kind: 'auto',\n binCount,\n})\n\nconst createValidatedManualStrategy = (thresholds: Thresholds): ValidatedManualBinStrategy => ({\n kind: 'manual',\n thresholds,\n})\n\nconst validateAutoBinStrategy = (binStrategy: AutoBinStrategy): BinStrategyResult =>\n ifElse(\n isPositiveInteger,\n (binCount: number) => ok(createValidatedAutoStrategy(binCount)),\n (binCount: number) => err(histogramRules.invalidBinCount(binCount)),\n )(binStrategy.binCount)\n\nconst hasInvalidManualThresholds = anyPass([\n complement(hasEnoughThresholds),\n complement(hasOnlyFiniteNumbers),\n complement(areStrictlyAscending),\n])\n\nconst validateManualCoverage = (dataset: ValidatedDataset) => (\n binStrategy: ManualBinStrategy,\n): BinStrategyResult => {\n const thresholds = toThresholds(binStrategy.thresholds)\n\n return ifElse(\n (candidate: Thresholds) => fullyCoversDataset(dataset, candidate),\n (candidate: Thresholds) => ok(createValidatedManualStrategy(candidate)),\n () => err(histogramRules.boundariesOutsideDatasetRange()),\n )(thresholds)\n}\n\nconst validateManualBinStrategy = (\n binStrategy: ManualBinStrategy,\n dataset: ValidatedDataset,\n): BinStrategyResult =>\n ifElse(\n (strategy: ManualBinStrategy) => hasInvalidManualThresholds(strategy.thresholds),\n () => err(histogramRules.invalidBinBoundaries()),\n validateManualCoverage(dataset),\n )(binStrategy)\n\nconst isAutoStrategy = (strategy: BinStrategy): strategy is AutoBinStrategy => strategy.kind === 'auto'\n\nconst isValidatedAutoStrategy = (\n strategy: ValidatedBinStrategy,\n): strategy is ValidatedAutoBinStrategy => strategy.kind === 'auto'\n\nconst matchBinStrategy = <TOutput>(\n binStrategy: BinStrategy,\n matcher: StrategyMatcher<TOutput>,\n) => ifElse(isAutoStrategy, matcher.auto, matcher.manual)(binStrategy)\n\nconst matchValidatedBinStrategy = <TOutput>(\n binStrategy: ValidatedBinStrategy,\n matcher: ValidatedStrategyMatcher<TOutput>,\n) => ifElse(isValidatedAutoStrategy, matcher.auto, matcher.manual)(binStrategy)\n\nfunction validateBinStrategy(\n binStrategy: BinStrategy,\n dataset: ValidatedDataset,\n): BinStrategyResult {\n return matchBinStrategy(binStrategy, {\n auto: validateAutoBinStrategy,\n manual: (strategy) => validateManualBinStrategy(strategy, dataset),\n })\n}\n\nexport function validateHistogramInput(input: HistogramInput): HistogramInputResult {\n return bindResult<\n { readonly dataset: ValidatedDataset },\n ValidatedBinStrategy,\n ValidatedHistogramInput,\n HistogramError\n >(\n ({ dataset }) => validateBinStrategy(input.binStrategy, dataset),\n (context, binStrategy) => ({ ...context, binStrategy }),\n )(\n bindResult<object, ValidatedDataset, { readonly dataset: ValidatedDataset }, HistogramError>(\n () => validateDataset(input.data),\n (_, dataset) => ({ dataset }),\n )(ok({})),\n )\n}\n\nconst isValidD3Bin = (bin: Bin<number, number>) =>\n allPass([\n (candidate: Bin<number, number>) => Number.isFinite(candidate.x0),\n (candidate: Bin<number, number>) => Number.isFinite(candidate.x1),\n (candidate: Bin<number, number>) => Number(candidate.x0) < Number(candidate.x1),\n ])(bin)\n\nconst createHistogramBin = (bin: Bin<number, number>): HistogramBin => ({\n lowerBound: Number(bin.x0),\n upperBound: Number(bin.x1),\n count: bin.length,\n})\n\nconst hasZeroWidthDataset = (dataset: ValidatedDataset) => isZeroWidthExtent(getExtent(dataset))\n\nconst computeZeroWidthAutoBins = (dataset: ValidatedDataset) =>\n createD3Bin<number, number>()\n .domain(expandZeroWidthExtent(getExtent(dataset)))\n .thresholds([])([...dataset])\n\nconst computeRegularAutoBins = (\n dataset: ValidatedDataset,\n binStrategy: ValidatedAutoBinStrategy,\n) =>\n createD3Bin<number, number>()\n .domain(expandZeroWidthExtent(getExtent(dataset)))\n .thresholds(binStrategy.binCount)([...dataset])\n\nconst computeAutoBins = (\n dataset: ValidatedDataset,\n binStrategy: ValidatedAutoBinStrategy,\n) =>\n ifElse(\n hasZeroWidthDataset,\n computeZeroWidthAutoBins,\n (validDataset: ValidatedDataset) => computeRegularAutoBins(validDataset, binStrategy),\n )(dataset)\n\nconst computeManualBins = (\n dataset: ValidatedDataset,\n binStrategy: ValidatedManualBinStrategy,\n) =>\n createD3Bin<number, number>()\n .domain(getManualDomain(binStrategy.thresholds))\n .thresholds(getInteriorThresholds(binStrategy.thresholds))([...dataset])\n\nconst computeD3Bins = (input: ValidatedHistogramInput) =>\n matchValidatedBinStrategy(input.binStrategy, {\n auto: (strategy) => computeAutoBins(input.dataset, strategy),\n manual: (strategy) => computeManualBins(input.dataset, strategy),\n })\n\nconst computeBins = (input: ValidatedHistogramInput) =>\n map(createHistogramBin, filter(isValidD3Bin, computeD3Bins(input)))\n\nexport function computeHistogram(input: HistogramInput): HistogramResult {\n return mapResult<ValidatedHistogramInput, readonly HistogramBin[], HistogramError>(computeBins)(\n validateHistogramInput(input),\n )\n}\n","import { max, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { head, last, map, prop } from '../shared/fp'\n\nimport type { HistogramBin } from './HistogramChart.types'\n\nexport const HISTOGRAM_CHART_MARGIN = {\n top: 20,\n right: 16,\n bottom: 32,\n left: 32,\n}\n\nexport type RenderedHistogramBin = HistogramBin & {\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly label: string\n}\n\nexport type HistogramChartModel = {\n readonly plotBottom: number\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly bars: readonly RenderedHistogramBin[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst getFirstLowerBound = (bins: readonly HistogramBin[]) =>\n withNumberDefault(0)(head([...bins])?.lowerBound)\n\nconst getLastUpperBound = (bins: readonly HistogramBin[]) =>\n withNumberDefault(1)(last([...bins])?.upperBound)\n\nconst getMaxCount = (bins: readonly HistogramBin[]) =>\n withNumberDefault(0)(max(map(prop('count'), [...bins])))\n\nexport const buildHistogramChartModel = (\n bins: readonly HistogramBin[],\n width: number,\n height: number,\n formatBinLabel: (bin: HistogramBin) => string,\n): HistogramChartModel => {\n const plotBottom = height - HISTOGRAM_CHART_MARGIN.bottom\n const xScale = scaleLinear()\n .domain([getFirstLowerBound(bins), getLastUpperBound(bins)])\n .range([HISTOGRAM_CHART_MARGIN.left, width - HISTOGRAM_CHART_MARGIN.right])\n const yScale = scaleLinear()\n .domain([0, getMaxCount(bins)])\n .nice()\n .range([plotBottom, HISTOGRAM_CHART_MARGIN.top])\n const toBar = (bin: HistogramBin): RenderedHistogramBin => {\n const x = xScale(bin.lowerBound)\n const barWidth = Math.max(0, xScale(bin.upperBound) - x)\n const y = yScale(bin.count)\n\n return {\n ...bin,\n x,\n y,\n width: barWidth,\n height: plotBottom - y,\n label: formatBinLabel(bin),\n }\n }\n\n return {\n plotBottom,\n xTicks: xScale.ticks(Math.min(6, bins.length + 1)),\n yTicks: yScale.ticks(4),\n bars: map(toBar, [...bins]),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { HistogramChartProps } from '../HistogramChart.types'\n\nexport function HistogramChartCaption({ caption }: Pick<HistogramChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-histogram-chart__caption\">{value}</figcaption>\n ),\n })\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartAxesProps = {\n readonly chart: HistogramChartModel\n readonly width: number\n}\n\nexport function HistogramChartAxes({ chart, width }: HistogramChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-histogram-chart__axis\"\n x1={HISTOGRAM_CHART_MARGIN.left}\n x2={width - HISTOGRAM_CHART_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-histogram-chart__axis\"\n x1={HISTOGRAM_CHART_MARGIN.left}\n x2={HISTOGRAM_CHART_MARGIN.left}\n y1={HISTOGRAM_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { ifElse } from '@/shared/fp'\n\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\n\ntype HistogramChartBarProps = {\n readonly bar: RenderedHistogramBin\n}\n\nconst getHitAreaY = ifElse(\n (bar: RenderedHistogramBin) => bar.height > 0,\n (bar: RenderedHistogramBin) => bar.y,\n (bar: RenderedHistogramBin) => bar.y - 8,\n)\n\nexport function HistogramChartBar({ bar }: HistogramChartBarProps) {\n return (\n <>\n <rect\n className=\"pristine-histogram-chart__bar\"\n x={bar.x}\n y={bar.y}\n width={bar.width}\n height={bar.height}\n aria-hidden=\"true\"\n />\n <rect\n className=\"pristine-histogram-chart__bar-hit-area\"\n x={bar.x}\n y={getHitAreaY(bar)}\n width={bar.width}\n height={Math.max(bar.height, 8)}\n aria-hidden=\"true\"\n />\n </>\n )\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\n\ntype HistogramChartCountLabelProps = {\n readonly bar: RenderedHistogramBin\n}\n\nexport function HistogramChartCountLabel({ bar }: HistogramChartCountLabelProps) {\n return (\n <text\n className=\"pristine-histogram-chart__count\"\n x={bar.x + bar.width / 2}\n y={Math.max(HISTOGRAM_CHART_MARGIN.top + 10, bar.y - 6)}\n textAnchor=\"middle\"\n >\n {bar.count}\n </text>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\nimport { always, ifElse } from '@/shared/fp'\n\nimport { HistogramChartBar } from './HistogramChartBar'\nimport { HistogramChartCountLabel } from './HistogramChartCountLabel'\n\ntype HistogramChartBinProps = {\n readonly active: boolean\n readonly bar: RenderedHistogramBin\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly showCounts: boolean\n}\n\nexport function HistogramChartBin({\n active,\n bar,\n onActivate,\n onDeactivate,\n showCounts,\n}: HistogramChartBinProps) {\n const renderCountLabel = ifElse(\n always(showCounts),\n () => <HistogramChartCountLabel bar={bar} />,\n always(null),\n )\n const activeClassName = ifElse(\n always(active),\n always('pristine-histogram-chart__bin--active'),\n always(''),\n )(active)\n const accessibleLabel = `${bar.label}: ${bar.count}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-histogram-chart__bin',\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <HistogramChartBar bar={bar} />\n {renderCountLabel()}\n </g>\n )\n}\n","import type { HistogramChartModel } from '../HistogramChart.model'\n\nimport { HistogramChartBin } from './HistogramChartBin'\n\ntype HistogramChartBinsProps = {\n readonly activeBin: string | null\n readonly chart: HistogramChartModel\n readonly onActivate: (bin: string) => void\n readonly onDeactivate: () => void\n readonly showCounts: boolean\n}\n\nconst getBinKey = (bar: HistogramChartModel['bars'][number]) =>\n `${bar.lowerBound}:${bar.upperBound}`\n\nexport function HistogramChartBins({\n activeBin,\n chart,\n onActivate,\n onDeactivate,\n showCounts,\n}: HistogramChartBinsProps) {\n return chart.bars.map((bar) => {\n const binKey = getBinKey(bar)\n\n return (\n <HistogramChartBin\n active={activeBin === binKey}\n bar={bar}\n key={binKey}\n onActivate={() => onActivate(binKey)}\n onDeactivate={onDeactivate}\n showCounts={showCounts}\n />\n )\n })\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartGridLinesProps = {\n readonly chart: HistogramChartModel\n readonly width: number\n}\n\nexport function HistogramChartGridLines({ chart, width }: HistogramChartGridLinesProps) {\n return chart.yTicks.map((tick) => (\n <g className=\"pristine-histogram-chart__grid-line\" key={tick}>\n <line\n x1={HISTOGRAM_CHART_MARGIN.left}\n x2={width - HISTOGRAM_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={HISTOGRAM_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {tick}\n </text>\n </g>\n ))\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartPlotAreaProps = {\n readonly chart: HistogramChartModel\n readonly width: number\n}\n\nexport function HistogramChartPlotArea({ chart, width }: HistogramChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-histogram-chart__plot\"\n x={HISTOGRAM_CHART_MARGIN.left}\n y={HISTOGRAM_CHART_MARGIN.top}\n width={width - HISTOGRAM_CHART_MARGIN.left - HISTOGRAM_CHART_MARGIN.right}\n height={chart.plotBottom - HISTOGRAM_CHART_MARGIN.top}\n />\n )\n}\n","import { HISTOGRAM_CHART_MARGIN } from '../HistogramChart.model'\nimport type { RenderedHistogramBin } from '../HistogramChart.model'\n\ntype HistogramChartTooltipProps = {\n readonly bar: RenderedHistogramBin\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 30\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function HistogramChartTooltip({\n bar,\n height,\n width,\n}: HistogramChartTooltipProps) {\n const label = String(bar.count)\n const tooltipWidth = getTooltipWidth(label)\n const labelY = Math.max(HISTOGRAM_CHART_MARGIN.top + 10, bar.y - 6)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n bar.x + bar.width / 2 - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n labelY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-histogram-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-histogram-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-histogram-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport { DEFAULT_HISTOGRAM_BIN_STRATEGY } from './HistogramChart.domain'\nimport type { HistogramBin, HistogramChartProps } from './HistogramChart.types'\n\nexport const formatIntegerOrDecimal = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatDefaultBinLabel = (bin: HistogramBin) =>\n `${formatIntegerOrDecimal(bin.lowerBound)}-${formatIntegerOrDecimal(bin.upperBound)}`\n\nexport const DEFAULT_HISTOGRAM_CHART_VIEW_PROPS = {\n binStrategy: DEFAULT_HISTOGRAM_BIN_STRATEGY,\n width: 480,\n height: 260,\n ariaLabel: 'Histogram chart',\n className: '',\n caption: none,\n showCounts: false,\n formatBinLabel: formatDefaultBinLabel,\n} satisfies Omit<HistogramChartProps, 'data'>\n","import { formatIntegerOrDecimal } from '../HistogramChart.defaults'\nimport type { HistogramChartModel } from '../HistogramChart.model'\n\ntype HistogramChartXTicksProps = {\n readonly chart: HistogramChartModel\n readonly height: number\n}\n\nexport function HistogramChartXTicks({ chart, height }: HistogramChartXTicksProps) {\n return chart.xTicks.map((tick) => (\n <g className=\"pristine-histogram-chart__tick\" key={tick}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={chart.plotBottom}\n y2={chart.plotBottom + 4}\n />\n <text x={chart.xScale(tick)} y={height - 10} textAnchor=\"middle\">\n {formatIntegerOrDecimal(tick)}\n </text>\n </g>\n ))\n}\n","import { useState } from 'react'\n\nimport type { HistogramChartModel } from '../HistogramChart.model'\nimport type { HistogramChartProps } from '../HistogramChart.types'\n\nimport { HistogramChartAxes } from './HistogramChartAxes'\nimport { HistogramChartBins } from './HistogramChartBins'\nimport { HistogramChartGridLines } from './HistogramChartGridLines'\nimport { HistogramChartPlotArea } from './HistogramChartPlotArea'\nimport { HistogramChartTooltip } from './HistogramChartTooltip'\nimport { HistogramChartXTicks } from './HistogramChartXTicks'\n\ntype HistogramChartSvgProps = Pick<HistogramChartProps, 'ariaLabel' | 'height' | 'showCounts' | 'width'> & {\n readonly chart: HistogramChartModel\n}\n\nconst getBinKey = (bar: HistogramChartModel['bars'][number]) =>\n `${bar.lowerBound}:${bar.upperBound}`\n\nexport function HistogramChartSvg({\n ariaLabel,\n chart,\n height,\n showCounts,\n width,\n}: HistogramChartSvgProps) {\n const [activeBin, setActiveBin] = useState<string | null>(null)\n const activeBars = chart.bars.filter((bar) => getBinKey(bar) === activeBin)\n\n return (\n <svg\n className=\"pristine-histogram-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <HistogramChartPlotArea chart={chart} width={width} />\n <HistogramChartGridLines chart={chart} width={width} />\n <HistogramChartAxes chart={chart} width={width} />\n <HistogramChartBins\n activeBin={activeBin}\n chart={chart}\n onActivate={setActiveBin}\n onDeactivate={() => setActiveBin(null)}\n showCounts={showCounts}\n />\n <HistogramChartXTicks chart={chart} height={height} />\n {activeBars.map((bar) => (\n <HistogramChartTooltip\n key={getBinKey(bar)}\n bar={bar}\n height={height}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { HistogramChartModel } from '../HistogramChart.model'\nimport type { HistogramChartProps } from '../HistogramChart.types'\n\nimport { HistogramChartCaption } from './HistogramChartCaption'\nimport { HistogramChartSvg } from './HistogramChartSvg'\n\ntype HistogramChartFigureProps = Pick<\n HistogramChartProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'showCounts' | 'width'\n> & {\n readonly chart: HistogramChartModel\n}\n\nexport function HistogramChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n height,\n showCounts,\n width,\n}: HistogramChartFigureProps) {\n return (\n <figure className={classNames(['pristine-histogram-chart', className])} aria-label={ariaLabel}>\n <HistogramChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n height={height}\n showCounts={showCounts}\n width={width}\n />\n <HistogramChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeHistogram } from './HistogramChart.domain'\nimport { buildHistogramChartModel } from './HistogramChart.model'\nimport { HistogramChartFigure } from './components/HistogramChartFigure'\nimport type { HistogramChartProps } from './HistogramChart.types'\n\nexport function HistogramChart({\n data,\n binStrategy,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showCounts,\n formatBinLabel,\n}: HistogramChartProps) {\n const result = useMemo(\n () => computeHistogram({ data, binStrategy }),\n [binStrategy, data],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-histogram-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (bins) => {\n const chart = buildHistogramChartModel(bins, width, height, formatBinLabel)\n\n return (\n <HistogramChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n height={height}\n showCounts={showCounts}\n width={width}\n />\n )\n },\n })\n}\n","import { err, getOrElse, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport { allPass, always, complement, cond } from '../shared/fp'\n\nimport type {\n ChangeDirection,\n KPICardError,\n KPICardInput,\n KPICardResult,\n KPISummary,\n MetricPolarity,\n ValidatedKPICardInput,\n} from './KPICard.types'\n\ntype KPICardInputResult = Result<ValidatedKPICardInput, KPICardError>\ntype KPICardInputValidator = [\n (input: KPICardInput) => boolean,\n (input: KPICardInput) => KPICardInputResult,\n]\ntype ChangeDirectionContext = {\n readonly changeAmount: number\n readonly polarity: MetricPolarity\n}\ntype ChangeDirectionRule = [\n (context: ChangeDirectionContext) => boolean,\n (context: ChangeDirectionContext) => ChangeDirection,\n]\n\nexport const HIGHER_IS_BETTER: MetricPolarity = 'HigherIsBetter'\nexport const LOWER_IS_BETTER: MetricPolarity = 'LowerIsBetter'\nexport const DEFAULT_KPI_CARD_POLARITY: MetricPolarity = HIGHER_IS_BETTER\n\nconst kpiCardRules = {\n emptyMetricName: (): KPICardError => ({\n type: 'EmptyMetricName',\n message: 'A KPI card needs a non-empty metric name.',\n details: none,\n }),\n invalidCurrentValue: (currentValue: unknown): KPICardError => ({\n type: 'InvalidCurrentValue',\n message: 'KPI card current value must be a finite number.',\n details: some(`Invalid current value: ${String(currentValue)}.`),\n }),\n invalidReferenceValue: (referenceValue: unknown): KPICardError => ({\n type: 'InvalidReferenceValue',\n message: 'KPI card reference value must be a non-zero finite number.',\n details: some(`Invalid reference value: ${String(referenceValue)}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonZeroFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) !== 0,\n ])(value)\n\nconst isNonEmptyString = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'string',\n (candidate: unknown) => String(candidate).trim().length > 0,\n ])(value)\n\nconst hasValidMetricName = (input: KPICardInput) => isNonEmptyString(input.metricName)\n\nconst hasValidCurrentValue = (input: KPICardInput) => isFiniteNumber(input.currentValue)\n\nconst hasValidReferenceValue = (input: KPICardInput) =>\n isNonZeroFiniteNumber(input.referenceValue)\n\nconst toValidatedInput = (input: KPICardInput): ValidatedKPICardInput => ({\n metricName: String(input.metricName).trim(),\n currentValue: Number(input.currentValue),\n referenceValue: Number(input.referenceValue),\n polarity: getOrElse<MetricPolarity>(DEFAULT_KPI_CARD_POLARITY)(input.polarity),\n})\n\nconst inputValidators: KPICardInputValidator[] = [\n [\n complement(hasValidMetricName),\n () => err(kpiCardRules.emptyMetricName()),\n ],\n [\n complement(hasValidCurrentValue),\n (input: KPICardInput) => err(kpiCardRules.invalidCurrentValue(input.currentValue)),\n ],\n [\n complement(hasValidReferenceValue),\n (input: KPICardInput) => err(kpiCardRules.invalidReferenceValue(input.referenceValue)),\n ],\n [always(true), (input: KPICardInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateKPICardInput: (input: KPICardInput) => KPICardInputResult =\n cond(inputValidators)\n\nconst isHigherIsBetter = (polarity: MetricPolarity) => polarity === HIGHER_IS_BETTER\n\nconst isLowerIsBetter = (polarity: MetricPolarity) => polarity === LOWER_IS_BETTER\n\nconst isUnchanged = (context: ChangeDirectionContext) => context.changeAmount === 0\n\nconst isImprovedForHigherIsBetter = (context: ChangeDirectionContext) =>\n allPass([\n (candidate: ChangeDirectionContext) => isHigherIsBetter(candidate.polarity),\n (candidate: ChangeDirectionContext) => candidate.changeAmount > 0,\n ])(context)\n\nconst isImprovedForLowerIsBetter = (context: ChangeDirectionContext) =>\n allPass([\n (candidate: ChangeDirectionContext) => isLowerIsBetter(candidate.polarity),\n (candidate: ChangeDirectionContext) => candidate.changeAmount < 0,\n ])(context)\n\nconst changeDirectionRules: ChangeDirectionRule[] = [\n [isUnchanged, always('Unchanged')],\n [isImprovedForHigherIsBetter, always('Improved')],\n [isImprovedForLowerIsBetter, always('Improved')],\n [always(true), always('Declined')],\n]\n\nconst deriveChangeDirection: (context: ChangeDirectionContext) => ChangeDirection =\n cond(changeDirectionRules)\n\nconst computeChangeAmount = (input: ValidatedKPICardInput) =>\n input.currentValue - input.referenceValue\n\nconst computeChangePercentage = (\n changeAmount: number,\n input: ValidatedKPICardInput,\n) => (changeAmount / input.referenceValue) * 100\n\nconst toKPISummary = (input: ValidatedKPICardInput): KPISummary => {\n const changeAmount = computeChangeAmount(input)\n const changePercentage = computeChangePercentage(changeAmount, input)\n\n return {\n metricName: input.metricName,\n currentValue: input.currentValue,\n referenceValue: input.referenceValue,\n changeAmount,\n changePercentage,\n changeDirection: deriveChangeDirection({ changeAmount, polarity: input.polarity }),\n }\n}\n\nexport function computeKPICard(input: KPICardInput): KPICardResult {\n return mapResult<ValidatedKPICardInput, KPISummary, KPICardError>(toKPISummary)(\n validateKPICardInput(input),\n )\n}\n","import { ifElse } from '../shared/fp'\n\nimport type { ChangeDirection, KPISummary } from './KPICard.types'\n\nexport type KPICardModel = {\n readonly metricName: string\n readonly currentValueLabel: string\n readonly referenceValueLabel: string\n readonly changeAmountLabel: string\n readonly changePercentageLabel: string\n readonly changeDirection: ChangeDirection\n readonly changeDirectionLabel: string\n readonly changeDirectionClassName: string\n readonly comparisonLabel: string\n readonly changeLabel: string\n readonly summaryLabel: string\n}\n\nconst getChangeDirectionClassName = (direction: ChangeDirection) =>\n direction.toLowerCase()\n\nconst getComparisonParts = (comparisonLabel: string) =>\n ifElse(\n (candidate: string) => candidate.trim().length > 0,\n (candidate: string) => [candidate.trim()],\n () => [],\n )(comparisonLabel)\n\nconst joinLabels = (parts: readonly string[]) => parts.join(' ')\n\nexport const buildKPICardModel = (\n summary: KPISummary,\n comparisonLabel: string,\n formatValue: (value: number) => string,\n formatChangeAmount: (value: number) => string,\n formatChangePercentage: (percentage: number) => string,\n): KPICardModel => {\n const currentValueLabel = formatValue(summary.currentValue)\n const referenceValueLabel = formatValue(summary.referenceValue)\n const changeAmountLabel = formatChangeAmount(summary.changeAmount)\n const changePercentageLabel = formatChangePercentage(summary.changePercentage)\n const normalizedComparisonLabel = comparisonLabel.trim()\n const changeDirectionLabel = summary.changeDirection\n const changeLabel = joinLabels([\n changeDirectionLabel,\n changePercentageLabel,\n `(${changeAmountLabel})`,\n ...getComparisonParts(normalizedComparisonLabel),\n ])\n\n return {\n metricName: summary.metricName,\n currentValueLabel,\n referenceValueLabel,\n changeAmountLabel,\n changePercentageLabel,\n changeDirection: summary.changeDirection,\n changeDirectionLabel,\n changeDirectionClassName: getChangeDirectionClassName(summary.changeDirection),\n comparisonLabel: normalizedComparisonLabel,\n changeLabel,\n summaryLabel: joinLabels([\n `${summary.metricName}:`,\n `${currentValueLabel}.`,\n `${changeLabel}.`,\n `Reference value ${referenceValueLabel}.`,\n ]),\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { KPICardProps } from '../KPICard.types'\n\ntype KPICardCaptionProps = Pick<KPICardProps, 'caption'>\n\nexport function KPICardCaption({ caption }: KPICardCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (content) => (\n <figcaption className=\"pristine-kpi-card__caption\">{content}</figcaption>\n ),\n })\n}\n","import type { CSSProperties } from 'react'\n\nimport { classNames } from '@/shared'\n\nimport type { KPICardModel } from '../KPICard.model'\nimport type { KPICardProps } from '../KPICard.types'\n\nimport { KPICardCaption } from './KPICardCaption'\n\ntype KPICardStyle = CSSProperties & {\n readonly '--pristine-kpi-card-width': string\n readonly '--pristine-kpi-card-min-height': string\n}\n\ntype KPICardFigureProps = Pick<\n KPICardProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'width'\n> & {\n readonly kpi: KPICardModel\n}\n\nconst toCardStyle = (width: number, height: number): KPICardStyle => ({\n '--pristine-kpi-card-width': `${String(width)}px`,\n '--pristine-kpi-card-min-height': `${String(height)}px`,\n})\n\nexport function KPICardFigure({\n ariaLabel,\n caption,\n className,\n height,\n kpi,\n width,\n}: KPICardFigureProps) {\n const changeClassName = classNames([\n 'pristine-kpi-card__change',\n `pristine-kpi-card__change--${kpi.changeDirectionClassName}`,\n ])\n\n return (\n <figure\n className={classNames(['pristine-kpi-card', className])}\n aria-label={ariaLabel}\n style={toCardStyle(width, height)}\n >\n <div className=\"pristine-kpi-card__body\" role=\"group\" aria-label={kpi.summaryLabel}>\n <p className=\"pristine-kpi-card__metric\">{kpi.metricName}</p>\n <p className=\"pristine-kpi-card__value\">{kpi.currentValueLabel}</p>\n <p className={changeClassName} aria-label={kpi.changeLabel}>\n <span className=\"pristine-kpi-card__direction\">{kpi.changeDirectionLabel}</span>\n <span className=\"pristine-kpi-card__percentage\">\n {kpi.changePercentageLabel}\n </span>\n <span className=\"pristine-kpi-card__amount\">({kpi.changeAmountLabel})</span>\n <span className=\"pristine-kpi-card__comparison\">{kpi.comparisonLabel}</span>\n </p>\n </div>\n <KPICardCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeKPICard } from './KPICard.domain'\nimport { buildKPICardModel } from './KPICard.model'\nimport { KPICardFigure } from './components/KPICardFigure'\nimport type { KPICardProps } from './KPICard.types'\n\nexport function KPICard({\n metricName,\n currentValue,\n referenceValue,\n polarity,\n width,\n height,\n ariaLabel,\n className,\n caption,\n comparisonLabel,\n formatValue,\n formatChangeAmount,\n formatChangePercentage,\n}: KPICardProps) {\n const result = useMemo(\n () => computeKPICard({ metricName, currentValue, referenceValue, polarity }),\n [currentValue, metricName, polarity, referenceValue],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-kpi-card__error', className])}\n title=\"KPI unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (summary) => {\n const kpi = buildKPICardModel(\n summary,\n comparisonLabel,\n formatValue,\n formatChangeAmount,\n formatChangePercentage,\n )\n\n return (\n <KPICardFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n kpi={kpi}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { KPICardProps } from './KPICard.types'\n\nexport const formatKPICardNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatKPICardSignedNumber = (value: number) =>\n ifElse(\n (candidate: number) => candidate > 0,\n (candidate: number) => `+${formatKPICardNumber(candidate)}`,\n formatKPICardNumber,\n )(value)\n\nexport const formatKPICardPercentage = (percentage: number) =>\n `${formatKPICardSignedNumber(percentage)}%`\n\nexport const DEFAULT_KPI_CARD_VIEW_PROPS = {\n width: 360,\n height: 140,\n ariaLabel: 'KPI card',\n className: '',\n caption: none,\n polarity: none,\n comparisonLabel: 'vs reference',\n formatValue: formatKPICardNumber,\n formatChangeAmount: formatKPICardSignedNumber,\n formatChangePercentage: formatKPICardPercentage,\n} satisfies Omit<KPICardProps, 'metricName' | 'currentValue' | 'referenceValue'>\n","import { err, ok } from './result'\nimport type { Result } from './result'\nimport {\n all,\n allPass,\n always,\n aperture,\n complement,\n cond,\n defaultTo,\n findIndex,\n map,\n prop,\n} from './fp'\n\nexport type LinearSeriesCoordinateValue = number\n\nexport type LinearSeriesPoint = {\n readonly x: LinearSeriesCoordinateValue\n readonly y: LinearSeriesCoordinateValue\n}\n\nexport type ValidatedLinearSeriesPoint = LinearSeriesPoint\n\nexport type ValidatedLinearSeriesDataset = readonly ValidatedLinearSeriesPoint[]\n\nexport type SortedLinearSeriesDataset = readonly ValidatedLinearSeriesPoint[]\n\nexport type LinearSeriesSegment = {\n readonly start: ValidatedLinearSeriesPoint\n readonly end: ValidatedLinearSeriesPoint\n}\n\nexport type LinearSeriesErrorRules<TError> = {\n readonly insufficientPoints: () => TError\n readonly invalidXValue: (index: number) => TError\n readonly invalidYValue: (index: number) => TError\n readonly duplicateXValue: (x: number) => TError\n}\n\ntype DatasetResult<TError> = Result<ValidatedLinearSeriesDataset, TError>\ntype DatasetValidator<TError> = [\n (data: readonly LinearSeriesPoint[]) => boolean,\n (data: readonly LinearSeriesPoint[]) => DatasetResult<TError>,\n]\ntype SegmentPair = readonly [ValidatedLinearSeriesPoint, ValidatedLinearSeriesPoint]\n\nconst MINIMUM_POINT_COUNT = 2\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughPoints = (data: readonly LinearSeriesPoint[]) =>\n data.length >= MINIMUM_POINT_COUNT\n\nconst getXValues = (data: readonly LinearSeriesPoint[]) => map(prop('x'), [...data])\n\nconst getYValues = (data: readonly LinearSeriesPoint[]) => map(prop('y'), [...data])\n\nconst hasOnlyFiniteXValues = (data: readonly LinearSeriesPoint[]) =>\n all(isFiniteNumber, getXValues(data))\n\nconst hasOnlyFiniteYValues = (data: readonly LinearSeriesPoint[]) =>\n all(isFiniteNumber, getYValues(data))\n\nconst findInvalidXValueIndex = (data: readonly LinearSeriesPoint[]) =>\n findIndex(complement(isFiniteNumber), getXValues(data))\n\nconst findInvalidYValueIndex = (data: readonly LinearSeriesPoint[]) =>\n findIndex(complement(isFiniteNumber), getYValues(data))\n\nconst hasUniqueXValues = (data: readonly LinearSeriesPoint[]) => {\n const xValues = getXValues(data)\n\n return xValues.length === new Set(xValues).size\n}\n\nconst findDuplicateXValue = (data: readonly LinearSeriesPoint[]) => {\n const xValues = getXValues(data)\n\n return defaultTo(\n 0,\n xValues.find((xValue, index) => xValues.indexOf(xValue) !== index),\n )\n}\n\nconst byAscendingX = (\n left: ValidatedLinearSeriesPoint,\n right: ValidatedLinearSeriesPoint,\n) => left.x - right.x\n\nconst sortByX = (\n dataset: ValidatedLinearSeriesDataset,\n): SortedLinearSeriesDataset => [...dataset].sort(byAscendingX)\n\nconst isSegmentPair = (\n points: readonly ValidatedLinearSeriesPoint[],\n): points is SegmentPair => points.length === 2\n\nconst toLinearSeriesSegment = ([start, end]: SegmentPair): LinearSeriesSegment => ({\n start,\n end,\n})\n\nexport const validateLinearSeriesDataset = <TError>(\n data: readonly LinearSeriesPoint[],\n rules: LinearSeriesErrorRules<TError>,\n): DatasetResult<TError> => {\n const datasetValidators: DatasetValidator<TError>[] = [\n [complement(hasEnoughPoints), () => err(rules.insufficientPoints())],\n [\n complement(hasOnlyFiniteXValues),\n (candidate: readonly LinearSeriesPoint[]) =>\n err(rules.invalidXValue(findInvalidXValueIndex(candidate))),\n ],\n [\n complement(hasOnlyFiniteYValues),\n (candidate: readonly LinearSeriesPoint[]) =>\n err(rules.invalidYValue(findInvalidYValueIndex(candidate))),\n ],\n [\n complement(hasUniqueXValues),\n (candidate: readonly LinearSeriesPoint[]) =>\n err(rules.duplicateXValue(findDuplicateXValue(candidate))),\n ],\n [always(true), (candidate: readonly LinearSeriesPoint[]) => ok(candidate)],\n ]\n const validateDataset: (candidate: readonly LinearSeriesPoint[]) => DatasetResult<TError> =\n cond(datasetValidators)\n\n return validateDataset(data)\n}\n\nexport const computeLinearSeriesSegments = (\n dataset: ValidatedLinearSeriesDataset,\n): readonly LinearSeriesSegment[] =>\n map(toLinearSeriesSegment, aperture(2, sortByX(dataset)).filter(isSegmentPair))\n","import { mapResult, none, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n computeLinearSeriesSegments,\n validateLinearSeriesDataset,\n} from '../shared/linearSeries'\nimport type { LinearSeriesErrorRules } from '../shared/linearSeries'\n\nimport type {\n LineChartError,\n LineChartInput,\n LineChartResult,\n LineSegment,\n ValidatedDataset,\n ValidatedLineChartInput,\n} from './LineChart.types'\n\ntype LineChartInputResult = Result<ValidatedLineChartInput, LineChartError>\n\nconst lineChartRules: LinearSeriesErrorRules<LineChartError> = {\n insufficientPoints: (): LineChartError => ({\n type: 'InsufficientPoints',\n message: 'A line chart needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): LineChartError => ({\n type: 'InvalidXValue',\n message: 'Every line chart x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): LineChartError => ({\n type: 'InvalidYValue',\n message: 'Every line chart y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n duplicateXValue: (x: number): LineChartError => ({\n type: 'DuplicateXValue',\n message: 'Line chart x values must be unique.',\n details: some(`Duplicate x value: ${String(x)}.`),\n }),\n}\n\nexport function validateLineChartInput(input: LineChartInput): LineChartInputResult {\n return mapResult<ValidatedDataset, ValidatedLineChartInput, LineChartError>(\n (dataset) => ({ dataset }),\n )(validateLinearSeriesDataset(input.data, lineChartRules))\n}\n\nconst computeSegments = (input: ValidatedLineChartInput) =>\n computeLinearSeriesSegments(input.dataset)\n\nexport function computeLineChart(input: LineChartInput): LineChartResult {\n return mapResult<ValidatedLineChartInput, readonly LineSegment[], LineChartError>(\n computeSegments,\n )(validateLineChartInput(input))\n}\n","import { extent, line, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, defaultTo, identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { LineChartPoint, LineSegment } from './LineChart.types'\n\ntype ChartExtent = [number, number]\n\nexport const LINE_CHART_MARGIN = {\n top: 20,\n right: 18,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedLinePoint = LineChartPoint & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type RenderedLineSegment = {\n readonly start: RenderedLinePoint\n readonly end: RenderedLinePoint\n}\n\nexport type LineChartModel = {\n readonly plotBottom: number\n readonly points: readonly RenderedLinePoint[]\n readonly segments: readonly RenderedLineSegment[]\n readonly path: string\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst isFirstSegmentIndex = (index: number) => index === 0\n\nconst getPointsForSegment = (segment: LineSegment) => (index: number) =>\n ifElse(\n isFirstSegmentIndex,\n always([segment.start, segment.end]),\n always([segment.end]),\n )(index)\n\nconst getPointsFromSegments = (segments: readonly LineSegment[]) =>\n segments.flatMap((segment, index) => getPointsForSegment(segment)(index))\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst renderLinePath = (points: readonly RenderedLinePoint[]) =>\n defaultTo(\n '',\n line<RenderedLinePoint>()\n .x((point) => point.cx)\n .y((point) => point.cy)(points),\n )\n\nconst getXExtent = (points: readonly LineChartPoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...points])))\n\nconst getYExtent = (points: readonly LineChartPoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('y'), [...points])))\n\nexport const buildLineChartModel = (\n segments: readonly LineSegment[],\n width: number,\n height: number,\n): LineChartModel => {\n const plotBottom = height - LINE_CHART_MARGIN.bottom\n const points = getPointsFromSegments(segments)\n const xScale = scaleLinear()\n .domain(getXExtent(points))\n .nice()\n .range([LINE_CHART_MARGIN.left, width - LINE_CHART_MARGIN.right])\n const yScale = scaleLinear()\n .domain(getYExtent(points))\n .nice()\n .range([plotBottom, LINE_CHART_MARGIN.top])\n const toRenderedPoint = (point: LineChartPoint): RenderedLinePoint => ({\n ...point,\n cx: xScale(point.x),\n cy: yScale(point.y),\n })\n const renderedPoints = map(toRenderedPoint, [...points])\n const renderedPath = renderLinePath(renderedPoints)\n const toRenderedSegment = (segment: LineSegment): RenderedLineSegment => ({\n start: toRenderedPoint(segment.start),\n end: toRenderedPoint(segment.end),\n })\n\n return {\n plotBottom,\n points: renderedPoints,\n segments: map(toRenderedSegment, [...segments]),\n path: renderedPath,\n xTicks: xScale.ticks(Math.min(6, points.length)),\n yTicks: yScale.ticks(5),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { LineChartProps } from '../LineChart.types'\n\nexport function LineChartCaption({ caption }: Pick<LineChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-line-chart__caption\">{text}</figcaption>,\n })\n}\n","import { LINE_CHART_MARGIN } from '../LineChart.model'\nimport type { LineChartModel } from '../LineChart.model'\n\ntype LineChartAxesProps = {\n readonly chart: LineChartModel\n readonly width: number\n}\n\nexport function LineChartAxes({ chart, width }: LineChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-line-chart__axis\"\n x1={LINE_CHART_MARGIN.left}\n x2={width - LINE_CHART_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-line-chart__axis\"\n x1={LINE_CHART_MARGIN.left}\n x2={LINE_CHART_MARGIN.left}\n y1={LINE_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { LINE_CHART_MARGIN } from '../LineChart.model'\nimport type { LineChartModel } from '../LineChart.model'\n\ntype LineChartGridLinesProps = {\n readonly chart: LineChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nexport function LineChartGridLines({\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: LineChartGridLinesProps) {\n return (\n <>\n {chart.yTicks.map((tick) => (\n <g className=\"pristine-line-chart__grid-line\" key={`y:${tick}`}>\n <line\n x1={LINE_CHART_MARGIN.left}\n x2={width - LINE_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={LINE_CHART_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {formatYValue(tick)}\n </text>\n </g>\n ))}\n {chart.xTicks.map((tick) => (\n <g className=\"pristine-line-chart__grid-line\" key={`x:${tick}`}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={LINE_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n <text\n x={chart.xScale(tick)}\n y={height - LINE_CHART_MARGIN.bottom + 20}\n textAnchor=\"middle\"\n >\n {formatXValue(tick)}\n </text>\n </g>\n ))}\n </>\n )\n}\n","import type { LineChartModel } from '../LineChart.model'\n\ntype LineChartPathProps = {\n readonly chart: LineChartModel\n}\n\nexport function LineChartPath({ chart }: LineChartPathProps) {\n return <path className=\"pristine-line-chart__path\" d={chart.path} aria-hidden=\"true\" />\n}\n","import { LINE_CHART_MARGIN } from '../LineChart.model'\nimport type { LineChartModel } from '../LineChart.model'\n\ntype LineChartPlotAreaProps = {\n readonly chart: LineChartModel\n readonly width: number\n}\n\nexport function LineChartPlotArea({ chart, width }: LineChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-line-chart__plot\"\n x={LINE_CHART_MARGIN.left}\n y={LINE_CHART_MARGIN.top}\n width={width - LINE_CHART_MARGIN.left - LINE_CHART_MARGIN.right}\n height={chart.plotBottom - LINE_CHART_MARGIN.top}\n />\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedLinePoint } from '../LineChart.model'\n\ntype LineChartPointMarkerProps = {\n readonly active: boolean\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n readonly point: RenderedLinePoint\n readonly showPoints: boolean\n}\n\nexport function LineChartPointMarker({\n active,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n point,\n showPoints,\n}: LineChartPointMarkerProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-line-chart__point--active'),\n always(''),\n )(active)\n const visibleClassName = ifElse(\n always(showPoints),\n always('pristine-line-chart__point--visible'),\n always(''),\n )(showPoints)\n const accessibleLabel = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-line-chart__point',\n activeClassName,\n visibleClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-line-chart__point-hit-area\"\n cx={point.cx}\n cy={point.cy}\n r={10}\n />\n <circle\n className=\"pristine-line-chart__point-dot\"\n cx={point.cx}\n cy={point.cy}\n r={3.6}\n />\n </g>\n )\n}\n","import type { LineChartModel } from '../LineChart.model'\n\nimport { LineChartPointMarker } from './LineChartPointMarker'\n\ntype LineChartPointsProps = {\n readonly activeXValue: number | null\n readonly chart: LineChartModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: (xValue: number) => void\n readonly onDeactivate: () => void\n readonly showPoints: boolean\n}\n\nexport function LineChartPoints({\n activeXValue,\n chart,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n showPoints,\n}: LineChartPointsProps) {\n return chart.points.map((point) => (\n <LineChartPointMarker\n active={activeXValue === point.x}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n key={point.x}\n onActivate={() => onActivate(point.x)}\n onDeactivate={onDeactivate}\n point={point}\n showPoints={showPoints}\n />\n ))\n}\n","import type { RenderedLinePoint } from '../LineChart.model'\n\ntype LineChartTooltipProps = {\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly point: RenderedLinePoint\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function LineChartTooltip({\n formatXValue,\n formatYValue,\n height,\n point,\n width,\n}: LineChartTooltipProps) {\n const label = `${formatXValue(point.x)}: ${formatYValue(point.y)}`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n point.cx - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n point.cy - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-line-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-line-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-line-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { LineChartModel } from '../LineChart.model'\nimport type { LineChartProps } from '../LineChart.types'\n\nimport { LineChartAxes } from './LineChartAxes'\nimport { LineChartGridLines } from './LineChartGridLines'\nimport { LineChartPath } from './LineChartPath'\nimport { LineChartPlotArea } from './LineChartPlotArea'\nimport { LineChartPoints } from './LineChartPoints'\nimport { LineChartTooltip } from './LineChartTooltip'\n\ntype LineChartSvgProps = Pick<\n LineChartProps,\n 'ariaLabel' | 'formatXValue' | 'formatYValue' | 'height' | 'showPoints' | 'width'\n> & {\n readonly chart: LineChartModel\n}\n\nexport function LineChartSvg({\n ariaLabel,\n chart,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: LineChartSvgProps) {\n const [activeXValue, setActiveXValue] = useState<number | null>(null)\n const activePoints = chart.points.filter((point) => point.x === activeXValue)\n\n return (\n <svg\n className=\"pristine-line-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <LineChartPlotArea chart={chart} width={width} />\n <LineChartGridLines\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <LineChartAxes chart={chart} width={width} />\n <LineChartPath chart={chart} />\n <LineChartPoints\n activeXValue={activeXValue}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n onActivate={setActiveXValue}\n onDeactivate={() => setActiveXValue(null)}\n showPoints={showPoints}\n />\n {activePoints.map((point) => (\n <LineChartTooltip\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n key={point.x}\n point={point}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { LineChartModel } from '../LineChart.model'\nimport type { LineChartProps } from '../LineChart.types'\n\nimport { LineChartCaption } from './LineChartCaption'\nimport { LineChartSvg } from './LineChartSvg'\n\ntype LineChartFigureProps = Pick<\n LineChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatXValue'\n | 'formatYValue'\n | 'height'\n | 'showPoints'\n | 'width'\n> & {\n readonly chart: LineChartModel\n}\n\nexport function LineChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: LineChartFigureProps) {\n return (\n <figure className={classNames(['pristine-line-chart', className])} aria-label={ariaLabel}>\n <LineChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n <LineChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeLineChart } from './LineChart.domain'\nimport { buildLineChartModel } from './LineChart.model'\nimport type { LineChartProps } from './LineChart.types'\nimport { LineChartFigure } from './components/LineChartFigure'\n\nexport function LineChart({\n ariaLabel,\n caption,\n className,\n data,\n formatXValue,\n formatYValue,\n height,\n showPoints,\n width,\n}: LineChartProps) {\n const result = useMemo(() => computeLineChart({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-line-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (segments) => {\n const chart = buildLineChartModel(segments, width, height)\n\n return (\n <LineChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n showPoints={showPoints}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { LineChartProps } from './LineChart.types'\n\nexport const formatLineChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_LINE_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Line chart',\n className: '',\n caption: none,\n showPoints: true,\n formatXValue: formatLineChartNumber,\n formatYValue: formatLineChartNumber,\n} satisfies Omit<LineChartProps, 'data'>\n","import { bindResult, err, getOrElse, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n ifElse,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n Arc,\n ChartVariant,\n DonutChartVariant,\n PieDonutChartError,\n PieDonutChartInput,\n PieDonutChartResult,\n SegmentedWhole,\n Slice,\n ValidatedChartVariant,\n ValidatedDataset,\n ValidatedPieDonutChartInput,\n} from './PieDonutChart.types'\n\ntype DatasetResult = Result<ValidatedDataset, PieDonutChartError>\ntype VariantResult = Result<ValidatedChartVariant, PieDonutChartError>\ntype PieDonutChartInputResult = Result<ValidatedPieDonutChartInput, PieDonutChartError>\ntype DatasetValidator = [\n (data: readonly Slice[]) => boolean,\n (data: readonly Slice[]) => DatasetResult,\n]\ntype VariantValidator = [\n (variant: ChartVariant) => boolean,\n (variant: ChartVariant) => VariantResult,\n]\n\nconst MINIMUM_SLICE_COUNT = 2\nconst TAU = Math.PI * 2\n\nexport const DEFAULT_PIE_DONUT_CHART_VARIANT: ChartVariant = {\n kind: 'pie',\n}\n\nconst pieDonutChartRules = {\n insufficientSlices: (): PieDonutChartError => ({\n type: 'InsufficientSlices',\n message: 'A pie or donut chart needs at least two slices.',\n details: none,\n }),\n nonPositiveValue: (category: string): PieDonutChartError => ({\n type: 'NonPositiveValue',\n message: 'Every pie or donut chart value must be a positive finite number.',\n details: some(`Invalid value for category: ${category}.`),\n }),\n duplicateCategory: (category: string): PieDonutChartError => ({\n type: 'DuplicateCategory',\n message: 'Pie and donut chart categories must be unique.',\n details: some(`Duplicate category: ${category}.`),\n }),\n emptyCategoryName: (index: number): PieDonutChartError => ({\n type: 'EmptyCategoryName',\n message: 'Every pie or donut chart category needs a non-empty name.',\n details: some(`Empty category at index ${String(index)}.`),\n }),\n invalidInnerRadius: (innerRadius: unknown): PieDonutChartError => ({\n type: 'InvalidInnerRadius',\n message: 'A donut chart inner radius must be greater than 0 and less than 1.',\n details: some(`Invalid inner radius: ${String(innerRadius)}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isPositiveFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) > 0,\n ])(value)\n\nconst isNonEmptyString = (value: string) => value.trim().length > 0\n\nconst hasEnoughSlices = (data: readonly Slice[]) => data.length >= MINIMUM_SLICE_COUNT\n\nconst getCategories = (data: readonly Slice[]) => map(prop('category'), [...data])\n\nconst getValues = (data: readonly Slice[]) => map(prop('value'), [...data])\n\nconst hasOnlyNamedCategories = (data: readonly Slice[]) =>\n all(isNonEmptyString, getCategories(data))\n\nconst findEmptyCategoryIndex = (data: readonly Slice[]) =>\n findIndex(complement(isNonEmptyString), getCategories(data))\n\nconst hasOnlyPositiveFiniteValues = (data: readonly Slice[]) =>\n all(isPositiveFiniteNumber, getValues(data))\n\nconst findInvalidValueCategory = (data: readonly Slice[]) =>\n defaultTo(\n 'unknown category',\n data.find((slice) => complement(isPositiveFiniteNumber)(slice.value))?.category,\n )\n\nconst hasUniqueCategories = (data: readonly Slice[]) => {\n const categories = getCategories(data)\n\n return categories.length === new Set(categories).size\n}\n\nconst findDuplicateCategory = (data: readonly Slice[]) => {\n const categories = getCategories(data)\n\n return defaultTo(\n 'unknown category',\n categories.find((category, index) => categories.indexOf(category) !== index),\n )\n}\n\nconst isDonutVariant = (variant: ChartVariant): variant is DonutChartVariant =>\n variant.kind === 'donut'\n\nconst hasValidDonutInnerRadius = allPass([\n (candidate: DonutChartVariant) => isFiniteNumber(candidate.innerRadius),\n (candidate: DonutChartVariant) => candidate.innerRadius > 0,\n (candidate: DonutChartVariant) => candidate.innerRadius < 1,\n])\n\nconst hasValidInnerRadius = (variant: ChartVariant) =>\n ifElse(\n isDonutVariant,\n hasValidDonutInnerRadius,\n always(true),\n )(variant)\n\nconst getInvalidInnerRadius = (variant: ChartVariant) =>\n ifElse(\n isDonutVariant,\n (candidate: DonutChartVariant) => candidate.innerRadius,\n always(undefined),\n )(variant)\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughSlices), () => err(pieDonutChartRules.insufficientSlices())],\n [\n complement(hasOnlyNamedCategories),\n (candidate: readonly Slice[]) =>\n err(pieDonutChartRules.emptyCategoryName(findEmptyCategoryIndex(candidate))),\n ],\n [\n complement(hasOnlyPositiveFiniteValues),\n (candidate: readonly Slice[]) =>\n err(pieDonutChartRules.nonPositiveValue(findInvalidValueCategory(candidate))),\n ],\n [\n complement(hasUniqueCategories),\n (candidate: readonly Slice[]) =>\n err(pieDonutChartRules.duplicateCategory(findDuplicateCategory(candidate))),\n ],\n [always(true), (candidate: readonly Slice[]) => ok(candidate)],\n]\n\nconst variantValidators: VariantValidator[] = [\n [\n complement(hasValidInnerRadius),\n (candidate: ChartVariant) =>\n err(pieDonutChartRules.invalidInnerRadius(getInvalidInnerRadius(candidate))),\n ],\n [always(true), (candidate: ChartVariant) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly Slice[]) => DatasetResult = cond(datasetValidators)\n\nconst validateVariant: (variant: ChartVariant) => VariantResult = cond(variantValidators)\n\nconst toEffectiveVariant = getOrElse<ChartVariant>(DEFAULT_PIE_DONUT_CHART_VARIANT)\n\nexport function validatePieDonutChartInput(\n input: PieDonutChartInput,\n): PieDonutChartInputResult {\n return bindResult<\n { readonly dataset: ValidatedDataset },\n ValidatedChartVariant,\n ValidatedPieDonutChartInput,\n PieDonutChartError\n >(\n () => validateVariant(toEffectiveVariant(input.variant)),\n (context, variant) => ({ ...context, variant }),\n )(\n bindResult<object, ValidatedDataset, { readonly dataset: ValidatedDataset }, PieDonutChartError>(\n () => validateDataset(input.data),\n (_, dataset) => ({ dataset }),\n )(ok({})),\n )\n}\n\nconst sumValues = (data: readonly Slice[]) =>\n data.reduce((total, slice) => total + slice.value, 0)\n\nconst toArc = (total: number) => (\n context: { readonly arcs: readonly Arc[]; readonly angle: number },\n slice: Slice,\n) => {\n const proportion = slice.value / total\n const startAngle = context.angle\n const endAngle = startAngle + proportion * TAU\n\n return {\n arcs: [\n ...context.arcs,\n {\n ...slice,\n proportion,\n startAngle,\n endAngle,\n },\n ],\n angle: endAngle,\n }\n}\n\nconst computeSegmentedWhole = (input: ValidatedPieDonutChartInput): SegmentedWhole => {\n const total = sumValues(input.dataset)\n const arcs = input.dataset.reduce(toArc(total), { arcs: [], angle: 0 }).arcs\n\n return {\n arcs,\n total,\n variant: input.variant,\n }\n}\n\nexport function computePieDonutChart(input: PieDonutChartInput): PieDonutChartResult {\n return mapResult<ValidatedPieDonutChartInput, SegmentedWhole, PieDonutChartError>(\n computeSegmentedWhole,\n )(validatePieDonutChartInput(input))\n}\n","import { arc as createArc } from 'd3'\n\nimport { always, cond, defaultTo, ifElse } from '../shared/fp'\n\nimport type { Arc, DonutChartVariant, SegmentedWhole } from './PieDonutChart.types'\n\nexport const PIE_DONUT_CHART_MARGIN = {\n top: 28,\n right: 28,\n bottom: 28,\n left: 28,\n}\n\nconst LABEL_GUTTER = 26 \nconst LABEL_GAP = 12\nconst MINIMUM_LABEL_PROPORTION = 0.04\n\ntype TextAnchor = 'start' | 'middle' | 'end'\n\nexport type RenderedArc = Arc & {\n readonly colorIndex: number\n readonly path: string\n readonly labelX: number\n readonly labelY: number\n readonly labelAnchor: TextAnchor\n readonly showLabel: boolean\n readonly tooltipX: number\n readonly tooltipY: number\n}\n\nexport type PieDonutChartModel = {\n readonly arcs: readonly RenderedArc[]\n readonly centerX: number\n readonly centerY: number\n readonly innerRadius: number\n readonly outerRadius: number\n readonly total: number\n readonly variantKind: 'pie' | 'donut'\n}\n\nconst getPlotWidth = (width: number) =>\n Math.max(0, width - PIE_DONUT_CHART_MARGIN.left - PIE_DONUT_CHART_MARGIN.right)\n\nconst getPlotHeight = (height: number) =>\n Math.max(0, height - PIE_DONUT_CHART_MARGIN.top - PIE_DONUT_CHART_MARGIN.bottom)\n\nconst getOuterRadius = (width: number, height: number) =>\n Math.max(0, Math.min(getPlotWidth(width), getPlotHeight(height)) / 2 - LABEL_GUTTER)\n\ntype DonutSegmentedWhole = SegmentedWhole & {\n readonly variant: DonutChartVariant\n}\n\nconst isDonutWhole = (whole: SegmentedWhole): whole is DonutSegmentedWhole =>\n whole.variant.kind === 'donut'\n\nconst getInnerRadius = (whole: SegmentedWhole, outerRadius: number) =>\n ifElse(\n isDonutWhole,\n (candidate: DonutSegmentedWhole) => outerRadius * candidate.variant.innerRadius,\n always(0),\n )(whole)\n\nconst getPolarPoint = (radius: number, angle: number) => ({\n x: Math.sin(angle) * radius,\n y: -Math.cos(angle) * radius,\n})\n\nconst getMidAngle = (arc: Arc) => (arc.startAngle + arc.endAngle) / 2\n\nconst isCloseToCenter = (x: number) => Math.abs(x) < 8\n\nconst getLabelAnchor: (x: number) => TextAnchor = cond([\n [isCloseToCenter, always('middle')],\n [(candidate: number) => candidate > 0, always('start')],\n [always(true), always('end')],\n])\n\nconst renderArcPath = (innerRadius: number, outerRadius: number) => (arc: Arc) =>\n defaultTo(\n '',\n createArc<Arc>()\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle((segment) => segment.startAngle)\n .endAngle((segment) => segment.endAngle)(arc),\n )\n\nexport const buildPieDonutChartModel = (\n whole: SegmentedWhole,\n width: number,\n height: number,\n): PieDonutChartModel => {\n const centerX = width / 2\n const centerY = height / 2\n const outerRadius = getOuterRadius(width, height)\n const innerRadius = getInnerRadius(whole, outerRadius)\n const arcPath = renderArcPath(innerRadius, outerRadius)\n const toRenderedArc = (arc: Arc, index: number): RenderedArc => {\n const midAngle = getMidAngle(arc)\n const labelPoint = getPolarPoint(outerRadius + LABEL_GAP, midAngle)\n const tooltipPoint = getPolarPoint((innerRadius + outerRadius) / 2, midAngle)\n\n return {\n ...arc,\n colorIndex: index % 8,\n path: arcPath(arc),\n labelX: labelPoint.x,\n labelY: labelPoint.y,\n labelAnchor: getLabelAnchor(labelPoint.x),\n showLabel: arc.proportion >= MINIMUM_LABEL_PROPORTION,\n tooltipX: centerX + tooltipPoint.x,\n tooltipY: centerY + tooltipPoint.y,\n }\n }\n\n return {\n arcs: whole.arcs.map(toRenderedArc),\n centerX,\n centerY,\n innerRadius,\n outerRadius,\n total: whole.total,\n variantKind: whole.variant.kind,\n }\n}\n","import { matchOption } from '@/shared'\nimport type { PieDonutChartProps } from '../PieDonutChart.types'\n\ntype PieDonutChartCaptionProps = Pick<PieDonutChartProps, 'caption'>\n\nexport function PieDonutChartCaption({ caption }: PieDonutChartCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-pie-donut-chart__caption\">{text}</figcaption>,\n })\n}\n","import { always, ifElse } from '@/shared/fp'\nimport type { PieDonutChartModel, RenderedArc } from '../PieDonutChart.model'\n\ntype PieDonutChartLabelsProps = {\n readonly chart: PieDonutChartModel\n readonly formatPercentage: (proportion: number) => string\n readonly showLabels: boolean\n}\n\nconst renderLabel = (formatPercentage: (proportion: number) => string) => (arc: RenderedArc) =>\n ifElse(\n (candidate: RenderedArc) => candidate.showLabel,\n (candidate: RenderedArc) => (\n <text\n className=\"pristine-pie-donut-chart__label\"\n key={candidate.category}\n x={candidate.labelX}\n y={candidate.labelY}\n textAnchor={candidate.labelAnchor}\n >\n <tspan x={candidate.labelX} dy=\"-0.3em\">\n {candidate.category}\n </tspan>\n <tspan x={candidate.labelX} dy=\"1.2em\">\n {formatPercentage(candidate.proportion)}\n </tspan>\n </text>\n ),\n always(null),\n )(arc)\n\nexport function PieDonutChartLabels({\n chart,\n formatPercentage,\n showLabels,\n}: PieDonutChartLabelsProps) {\n return ifElse(\n (candidate: boolean) => candidate,\n () => <g aria-hidden=\"true\">{chart.arcs.map(renderLabel(formatPercentage))}</g>,\n always(null),\n )(showLabels)\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedArc } from '../PieDonutChart.model'\n\ntype PieDonutChartSliceProps = {\n readonly active: boolean\n readonly arc: RenderedArc\n readonly formatPercentage: (proportion: number) => string\n readonly formatValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n}\n\nexport function PieDonutChartSlice({\n active,\n arc,\n formatPercentage,\n formatValue,\n onActivate,\n onDeactivate,\n}: PieDonutChartSliceProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-pie-donut-chart__slice--active'),\n always(''),\n )(active)\n const accessibleLabel = `${arc.category}: ${formatValue(arc.value)} (${formatPercentage(\n arc.proportion,\n )})`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-pie-donut-chart__slice',\n `pristine-pie-donut-chart__slice--tone-${String(arc.colorIndex)}`,\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <path className=\"pristine-pie-donut-chart__slice-path\" d={arc.path} />\n </g>\n )\n}\n","import type { PieDonutChartModel } from '../PieDonutChart.model'\n\nimport { PieDonutChartSlice } from './PieDonutChartSlice'\n\ntype PieDonutChartSlicesProps = {\n readonly activeCategory: string | null\n readonly chart: PieDonutChartModel\n readonly formatPercentage: (proportion: number) => string\n readonly formatValue: (value: number) => string\n readonly onActivate: (category: string) => void\n readonly onDeactivate: () => void\n}\n\nexport function PieDonutChartSlices({\n activeCategory,\n chart,\n formatPercentage,\n formatValue,\n onActivate,\n onDeactivate,\n}: PieDonutChartSlicesProps) {\n return chart.arcs.map((arc) => (\n <PieDonutChartSlice\n active={activeCategory === arc.category}\n arc={arc}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n key={arc.category}\n onActivate={() => onActivate(arc.category)}\n onDeactivate={onDeactivate}\n />\n ))\n}\n","import type { RenderedArc } from '../PieDonutChart.model'\n\ntype PieDonutChartTooltipProps = {\n readonly arc: RenderedArc\n readonly formatPercentage: (proportion: number) => string\n readonly formatValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function PieDonutChartTooltip({\n arc,\n formatPercentage,\n formatValue,\n height,\n width,\n}: PieDonutChartTooltipProps) {\n const label = `${arc.category}: ${formatValue(arc.value)} (${formatPercentage(arc.proportion)})`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n arc.tooltipX - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n arc.tooltipY - TOOLTIP_HEIGHT / 2,\n )\n\n return (\n <g className=\"pristine-pie-donut-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-pie-donut-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-pie-donut-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { PieDonutChartModel } from '../PieDonutChart.model'\nimport type { PieDonutChartProps } from '../PieDonutChart.types'\n\nimport { PieDonutChartLabels } from './PieDonutChartLabels'\nimport { PieDonutChartSlices } from './PieDonutChartSlices'\nimport { PieDonutChartTooltip } from './PieDonutChartTooltip'\n\ntype PieDonutChartSvgProps = Pick<\n PieDonutChartProps,\n 'ariaLabel' | 'formatPercentage' | 'formatValue' | 'height' | 'showLabels' | 'width'\n> & {\n readonly chart: PieDonutChartModel\n}\n\nexport function PieDonutChartSvg({\n ariaLabel,\n chart,\n formatPercentage,\n formatValue,\n height,\n showLabels,\n width,\n}: PieDonutChartSvgProps) {\n const [activeCategory, setActiveCategory] = useState<string | null>(null)\n const activeArcs = chart.arcs.filter((arc) => arc.category === activeCategory)\n\n return (\n <svg\n className=\"pristine-pie-donut-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <g transform={`translate(${chart.centerX} ${chart.centerY})`}>\n <PieDonutChartSlices\n activeCategory={activeCategory}\n chart={chart}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n onActivate={setActiveCategory}\n onDeactivate={() => setActiveCategory(null)}\n />\n <PieDonutChartLabels\n chart={chart}\n formatPercentage={formatPercentage}\n showLabels={showLabels}\n />\n </g>\n {activeArcs.map((arc) => (\n <PieDonutChartTooltip\n arc={arc}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n key={arc.category}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { PieDonutChartModel } from '../PieDonutChart.model'\nimport type { PieDonutChartProps } from '../PieDonutChart.types'\n\nimport { PieDonutChartCaption } from './PieDonutChartCaption'\nimport { PieDonutChartSvg } from './PieDonutChartSvg'\n\ntype PieDonutChartFigureProps = Pick<\n PieDonutChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatPercentage'\n | 'formatValue'\n | 'height'\n | 'showLabels'\n | 'width'\n> & {\n readonly chart: PieDonutChartModel\n}\n\nexport function PieDonutChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatPercentage,\n formatValue,\n height,\n showLabels,\n width,\n}: PieDonutChartFigureProps) {\n return (\n <figure className={classNames(['pristine-pie-donut-chart', className])} aria-label={ariaLabel}>\n <PieDonutChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n <PieDonutChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computePieDonutChart } from './PieDonutChart.domain'\nimport { buildPieDonutChartModel } from './PieDonutChart.model'\nimport type { PieDonutChartProps } from './PieDonutChart.types'\nimport { PieDonutChartFigure } from './components/PieDonutChartFigure'\n\nexport function PieDonutChart({\n ariaLabel,\n caption,\n className,\n data,\n formatPercentage,\n formatValue,\n height,\n showLabels,\n variant,\n width,\n}: PieDonutChartProps) {\n const result = useMemo(() => computePieDonutChart({ data, variant }), [data, variant])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-pie-donut-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (whole) => {\n const chart = buildPieDonutChartModel(whole, width, height)\n\n return (\n <PieDonutChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n height={height}\n showLabels={showLabels}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { PieDonutChartProps } from './PieDonutChart.types'\n\nexport const formatPieDonutChartNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatPieDonutChartPercentage = (proportion: number) =>\n `${formatPieDonutChartNumber(proportion * 100)}%`\n\nexport const DEFAULT_PIE_DONUT_CHART_VIEW_PROPS = {\n width: 360,\n height: 320,\n ariaLabel: 'Pie chart',\n className: '',\n caption: none,\n variant: none,\n showLabels: true,\n formatValue: formatPieDonutChartNumber,\n formatPercentage: formatPieDonutChartPercentage,\n} satisfies Omit<PieDonutChartProps, 'data'>\n","import { err, mapResult, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport { allPass, always, complement, cond } from '../shared/fp'\n\nimport type {\n ProgressBarError,\n ProgressBarInput,\n ProgressBarResult,\n ValidatedProgressBarInput,\n} from './ProgressBar.types'\n\ntype ProgressBarInputResult = Result<ValidatedProgressBarInput, ProgressBarError>\ntype ProgressBarInputValidator = [\n (input: ProgressBarInput) => boolean,\n (input: ProgressBarInput) => ProgressBarInputResult,\n]\n\nconst progressBarRules = {\n invalidCurrentValue: (currentValue: unknown): ProgressBarError => ({\n type: 'InvalidCurrentValue',\n message: 'Progress bar current value must be a finite number greater than or equal to zero.',\n details: some(`Invalid current value: ${String(currentValue)}.`),\n }),\n invalidTotal: (total: unknown): ProgressBarError => ({\n type: 'InvalidTotal',\n message: 'Progress bar total must be a positive finite number.',\n details: some(`Invalid total: ${String(total)}.`),\n }),\n currentExceedsTotal: (input: ValidatedProgressBarInput): ProgressBarError => ({\n type: 'CurrentExceedsTotal',\n message: 'Progress bar current value cannot exceed the total.',\n details: some(\n `Current value ${String(input.currentValue)} exceeds total ${String(input.total)}.`,\n ),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonNegativeFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) >= 0,\n ])(value)\n\nconst isPositiveFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) > 0,\n ])(value)\n\nconst hasValidCurrentValue = (input: ProgressBarInput) =>\n isNonNegativeFiniteNumber(input.currentValue)\n\nconst hasValidTotal = (input: ProgressBarInput) => isPositiveFiniteNumber(input.total)\n\nconst toValidatedInput = (input: ProgressBarInput): ValidatedProgressBarInput => ({\n currentValue: Number(input.currentValue),\n total: Number(input.total),\n})\n\nconst currentExceedsTotal = (input: ValidatedProgressBarInput) =>\n input.currentValue > input.total\n\nconst inputValidators: ProgressBarInputValidator[] = [\n [\n complement(hasValidCurrentValue),\n (input: ProgressBarInput) => err(progressBarRules.invalidCurrentValue(input.currentValue)),\n ],\n [\n complement(hasValidTotal),\n (input: ProgressBarInput) => err(progressBarRules.invalidTotal(input.total)),\n ],\n [\n (input: ProgressBarInput) => currentExceedsTotal(toValidatedInput(input)),\n (input: ProgressBarInput) => err(progressBarRules.currentExceedsTotal(toValidatedInput(input))),\n ],\n [always(true), (input: ProgressBarInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateProgressBarInput: (\n input: ProgressBarInput\n) => ProgressBarInputResult = cond(inputValidators)\n\nconst computeRatio = (input: ValidatedProgressBarInput) => input.currentValue / input.total\n\nexport function computeProgressBar(input: ProgressBarInput): ProgressBarResult {\n return mapResult<ValidatedProgressBarInput, number, ProgressBarError>(computeRatio)(\n validateProgressBarInput(input),\n )\n}\n","export const PROGRESS_BAR_MARGIN = {\n top: 30,\n right: 16,\n bottom: 18,\n left: 16,\n}\n\nexport type ProgressBarModel = {\n readonly currentValue: number\n readonly total: number\n readonly ratio: number\n readonly trackX: number\n readonly trackY: number\n readonly trackWidth: number\n readonly trackHeight: number\n readonly trackRadius: number\n readonly fillWidth: number\n readonly valueLabel: string\n readonly percentageLabel: string\n readonly labelY: number\n}\n\nconst TRACK_HEIGHT = 18\n\nexport const buildProgressBarModel = (\n currentValue: number,\n total: number,\n ratio: number,\n width: number,\n height: number,\n formatValue: (value: number) => string,\n formatPercentage: (ratio: number) => string,\n): ProgressBarModel => {\n const trackWidth = width - PROGRESS_BAR_MARGIN.left - PROGRESS_BAR_MARGIN.right\n const trackHeight = Math.min(\n TRACK_HEIGHT,\n height - PROGRESS_BAR_MARGIN.top - PROGRESS_BAR_MARGIN.bottom,\n )\n const trackX = PROGRESS_BAR_MARGIN.left\n const trackY = height - PROGRESS_BAR_MARGIN.bottom - trackHeight\n\n return {\n currentValue,\n total,\n ratio,\n trackX,\n trackY,\n trackWidth,\n trackHeight,\n trackRadius: trackHeight / 2,\n fillWidth: trackWidth * ratio,\n valueLabel: `${formatValue(currentValue)} of ${formatValue(total)}`,\n percentageLabel: formatPercentage(ratio),\n labelY: PROGRESS_BAR_MARGIN.top / 2,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { ProgressBarProps } from '../ProgressBar.types'\n\ntype ProgressBarCaptionProps = Pick<ProgressBarProps, 'caption'>\n\nexport function ProgressBarCaption({ caption }: ProgressBarCaptionProps) {\n return matchOption(caption, {\n none: () => null,\n some: (content) => (\n <figcaption className=\"pristine-progress-bar__caption\">{content}</figcaption>\n ),\n })\n}\n","import { useId } from 'react'\n\nimport { ifElse } from '@/shared/fp'\n\nimport type { ProgressBarModel } from '../ProgressBar.model'\nimport type { ProgressBarProps } from '../ProgressBar.types'\n\ntype ProgressBarSvgProps = Pick<\n ProgressBarProps,\n 'ariaLabel' | 'height' | 'showLabel' | 'width'\n> & {\n readonly progress: ProgressBarModel\n}\n\nconst hasFill = (progress: ProgressBarModel) => progress.fillWidth > 0\n\nexport function ProgressBarSvg({\n ariaLabel,\n height,\n progress,\n showLabel,\n width,\n}: ProgressBarSvgProps) {\n const clipPathId = `pristine-progress-bar-${useId().replaceAll(':', '')}`\n const valueText = `${progress.valueLabel} (${progress.percentageLabel})`\n const renderFill = ifElse(\n hasFill,\n () => (\n <rect\n className=\"pristine-progress-bar__fill\"\n x={progress.trackX}\n y={progress.trackY}\n width={progress.fillWidth}\n height={progress.trackHeight}\n clipPath={`url(#${clipPathId})`}\n />\n ),\n () => null,\n )\n const renderLabels = ifElse(\n (candidate: boolean) => candidate,\n () => (\n <g className=\"pristine-progress-bar__labels\" aria-hidden=\"true\">\n <text\n className=\"pristine-progress-bar__value\"\n x={progress.trackX}\n y={progress.labelY}\n >\n {progress.valueLabel}\n </text>\n <text\n className=\"pristine-progress-bar__percentage\"\n x={progress.trackX + progress.trackWidth}\n y={progress.labelY}\n textAnchor=\"end\"\n >\n {progress.percentageLabel}\n </text>\n </g>\n ),\n () => null,\n )\n\n return (\n <svg\n className=\"pristine-progress-bar__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <defs>\n <clipPath id={clipPathId}>\n <rect\n x={progress.trackX}\n y={progress.trackY}\n width={progress.trackWidth}\n height={progress.trackHeight}\n rx={progress.trackRadius}\n />\n </clipPath>\n </defs>\n {renderLabels(showLabel)}\n <g\n className=\"pristine-progress-bar__meter\"\n role=\"progressbar\"\n aria-label={ariaLabel}\n aria-valuemin={0}\n aria-valuemax={progress.total}\n aria-valuenow={progress.currentValue}\n aria-valuetext={valueText}\n >\n <rect\n className=\"pristine-progress-bar__track\"\n x={progress.trackX}\n y={progress.trackY}\n width={progress.trackWidth}\n height={progress.trackHeight}\n rx={progress.trackRadius}\n />\n {renderFill(progress)}\n </g>\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { ProgressBarModel } from '../ProgressBar.model'\nimport type { ProgressBarProps } from '../ProgressBar.types'\n\nimport { ProgressBarCaption } from './ProgressBarCaption'\nimport { ProgressBarSvg } from './ProgressBarSvg'\n\ntype ProgressBarFigureProps = Pick<\n ProgressBarProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'showLabel' | 'width'\n> & {\n readonly progress: ProgressBarModel\n}\n\nexport function ProgressBarFigure({\n ariaLabel,\n caption,\n className,\n height,\n progress,\n showLabel,\n width,\n}: ProgressBarFigureProps) {\n return (\n <figure className={classNames(['pristine-progress-bar', className])} aria-label={ariaLabel}>\n <ProgressBarSvg\n ariaLabel={ariaLabel}\n height={height}\n progress={progress}\n showLabel={showLabel}\n width={width}\n />\n <ProgressBarCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeProgressBar } from './ProgressBar.domain'\nimport { buildProgressBarModel } from './ProgressBar.model'\nimport { ProgressBarFigure } from './components/ProgressBarFigure'\nimport type { ProgressBarProps } from './ProgressBar.types'\n\nexport function ProgressBar({\n currentValue,\n total,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showLabel,\n formatValue,\n formatPercentage,\n}: ProgressBarProps) {\n const result = useMemo(\n () => computeProgressBar({ currentValue, total }),\n [currentValue, total],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-progress-bar__error', className])}\n title=\"Progress unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (ratio) => {\n const progress = buildProgressBarModel(\n currentValue,\n total,\n ratio,\n width,\n height,\n formatValue,\n formatPercentage,\n )\n\n return (\n <ProgressBarFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n progress={progress}\n showLabel={showLabel}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { ProgressBarProps } from './ProgressBar.types'\n\nexport const formatProgressBarNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatProgressBarPercentage = (ratio: number) =>\n `${formatProgressBarNumber(ratio * 100)}%`\n\nexport const DEFAULT_PROGRESS_BAR_VIEW_PROPS = {\n width: 360,\n height: 92,\n ariaLabel: 'Progress bar',\n className: '',\n caption: none,\n showLabel: true,\n formatValue: formatProgressBarNumber,\n formatPercentage: formatProgressBarPercentage,\n} satisfies Omit<ProgressBarProps, 'currentValue' | 'total'>\n","import { err, isNone, isSome, mapResult, matchOption, none, ok, some } from '../shared'\nimport type { Option, Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n ifElse,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n PriorRank,\n Rank,\n RankedEntry,\n RankedItem,\n RankedListError,\n RankedListInput,\n RankedListResult,\n ValidatedDataset,\n ValidatedRankedItem,\n} from './RankedList.types'\n\ntype DatasetResult = Result<ValidatedDataset, RankedListError>\ntype DatasetValidator = [\n (data: readonly RankedItem[]) => boolean,\n (data: readonly RankedItem[]) => DatasetResult,\n]\ntype RankAccumulator = {\n readonly entries: readonly RankedEntry[]\n readonly previousRank: Rank\n readonly previousValue: Option<number>\n}\n\nconst rankedListRules = {\n insufficientItems: (): RankedListError => ({\n type: 'InsufficientItems',\n message: 'A ranked list needs at least two items.',\n details: none,\n }),\n invalidValue: (index: number): RankedListError => ({\n type: 'InvalidValue',\n message: 'Every ranked list value must be a finite number.',\n details: some(`Invalid value at index ${String(index)}.`),\n }),\n emptyLabel: (index: number): RankedListError => ({\n type: 'EmptyLabel',\n message: 'Every ranked list item needs a non-empty label.',\n details: some(`Empty label at index ${String(index)}.`),\n }),\n duplicateLabel: (label: string): RankedListError => ({\n type: 'DuplicateLabel',\n message: 'Ranked list labels must be unique.',\n details: some(`Duplicate label: ${label}.`),\n }),\n inconsistentPriorRanks: (): RankedListError => ({\n type: 'InconsistentPriorRanks',\n message: 'Prior ranks must be provided for every ranked list item or for none of them.',\n details: none,\n }),\n invalidPriorRank: (priorRank: unknown): RankedListError => ({\n type: 'InvalidPriorRank',\n message: 'Every ranked list prior rank must be a positive integer.',\n details: some(`Invalid prior rank: ${String(priorRank)}.`),\n }),\n}\n\nconst MINIMUM_ITEM_COUNT = 2\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isPositiveInteger = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isInteger(candidate),\n (candidate: unknown) => Number(candidate) > 0,\n ])(value)\n\nconst isNonEmptyString = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'string',\n (candidate: unknown) => String(candidate).trim().length > 0,\n ])(value)\n\nconst hasInsufficientItems = (data: readonly RankedItem[]) =>\n data.length < MINIMUM_ITEM_COUNT\n\nconst getLabels = (data: readonly RankedItem[]) => map(prop('label'), [...data])\n\nconst getNormalizedLabels = (data: readonly RankedItem[]) =>\n map((label: string) => label.trim(), getLabels(data))\n\nconst getValues = (data: readonly RankedItem[]) => map(prop('value'), [...data])\n\nconst getPriorRanks = (data: readonly RankedItem[]) =>\n map((item: RankedItem) => item.priorRank, [...data])\n\nconst getPriorRank = (item: RankedItem): ValidatedRankedItem['priorRank'] =>\n item.priorRank\n\nconst hasOnlyFiniteValues = (data: readonly RankedItem[]) =>\n all(isFiniteNumber, getValues(data))\n\nconst findInvalidValueIndex = (data: readonly RankedItem[]) =>\n findIndex(complement(isFiniteNumber), getValues(data))\n\nconst hasOnlyNonEmptyLabels = (data: readonly RankedItem[]) =>\n all(isNonEmptyString, getLabels(data))\n\nconst findEmptyLabelIndex = (data: readonly RankedItem[]) =>\n findIndex(complement(isNonEmptyString), getLabels(data))\n\nconst hasUniqueLabels = (data: readonly RankedItem[]) => {\n const labels = getNormalizedLabels(data)\n\n return labels.length === new Set(labels).size\n}\n\nconst findDuplicateLabel = (data: readonly RankedItem[]) => {\n const labels = getNormalizedLabels(data)\n\n return defaultTo(\n 'unknown label',\n labels.find((label, index) => labels.indexOf(label) !== index),\n )\n}\n\nconst hasNoPriorRanks = (data: readonly RankedItem[]) =>\n all(isNone, getPriorRanks(data))\n\nconst hasAllPriorRanks = (data: readonly RankedItem[]) =>\n all(isSome, getPriorRanks(data))\n\nconst hasInconsistentPriorRanks = (data: readonly RankedItem[]) =>\n allPass([complement(hasNoPriorRanks), complement(hasAllPriorRanks)])(data)\n\nconst hasValidPriorRank = (item: RankedItem) =>\n matchOption(getPriorRank(item), {\n none: always(true),\n some: isPositiveInteger,\n })\n\nconst hasOnlyValidPriorRanks = (data: readonly RankedItem[]) =>\n all(hasValidPriorRank, [...data])\n\nconst isRankedItem = (value: RankedItem | undefined): value is RankedItem =>\n value !== undefined\n\nconst toRankedItemOption = (value: RankedItem | undefined): Option<RankedItem> =>\n ifElse(\n isRankedItem,\n (item: RankedItem) => some(item),\n always(none),\n )(value)\n\nconst getPriorRankDetail = (item: RankedItem) =>\n matchOption<PriorRank, string | PriorRank>(item.priorRank, {\n none: always('missing prior rank'),\n some: (value) => value,\n })\n\nconst findInvalidPriorRank = (data: readonly RankedItem[]) =>\n matchOption(toRankedItemOption(data.find(complement(hasValidPriorRank))), {\n none: always('unknown prior rank'),\n some: getPriorRankDetail,\n })\n\nconst toValidatedItem = (item: RankedItem): ValidatedRankedItem => ({\n label: item.label.trim(),\n value: item.value,\n priorRank: getPriorRank(item),\n})\n\nconst datasetValidators: DatasetValidator[] = [\n [hasInsufficientItems, () => err(rankedListRules.insufficientItems())],\n [\n complement(hasOnlyFiniteValues),\n (data: readonly RankedItem[]) =>\n err(rankedListRules.invalidValue(findInvalidValueIndex(data))),\n ],\n [\n complement(hasOnlyNonEmptyLabels),\n (data: readonly RankedItem[]) =>\n err(rankedListRules.emptyLabel(findEmptyLabelIndex(data))),\n ],\n [\n complement(hasUniqueLabels),\n (data: readonly RankedItem[]) => err(rankedListRules.duplicateLabel(findDuplicateLabel(data))),\n ],\n [hasInconsistentPriorRanks, () => err(rankedListRules.inconsistentPriorRanks())],\n [\n complement(hasOnlyValidPriorRanks),\n (data: readonly RankedItem[]) =>\n err(rankedListRules.invalidPriorRank(findInvalidPriorRank(data))),\n ],\n [\n always(true),\n (data: readonly RankedItem[]) => ok(map(toValidatedItem, [...data])),\n ],\n]\n\nexport const validateRankedListInput: (\n input: RankedListInput\n) => DatasetResult = (input: RankedListInput) => cond(datasetValidators)(input.data)\n\nconst byDescendingValue = (left: ValidatedRankedItem, right: ValidatedRankedItem) =>\n right.value - left.value\n\nconst sortByRank = (data: ValidatedDataset) => [...data].sort(byDescendingValue)\n\nconst getRank = (\n item: ValidatedRankedItem,\n index: number,\n previousValue: Option<number>,\n previousRank: Rank,\n) =>\n matchOption(previousValue, {\n none: () => index + 1,\n some: (value) =>\n ifElse(\n (candidate: number) => candidate === item.value,\n always(previousRank),\n always(index + 1),\n )(value),\n })\n\nconst getRankChange = (rank: Rank) => (\n priorRank: ValidatedRankedItem['priorRank'],\n): RankedEntry['rankChange'] =>\n matchOption<PriorRank, RankedEntry['rankChange']>(priorRank, {\n none: () => none,\n some: (value) => some(value - rank),\n })\n\nconst toRankedEntry = (rank: Rank) => (item: ValidatedRankedItem): RankedEntry => ({\n label: item.label,\n value: item.value,\n rank,\n rankChange: getRankChange(rank)(item.priorRank),\n})\n\nconst appendRankedEntry = (\n accumulator: RankAccumulator,\n item: ValidatedRankedItem,\n index: number,\n): RankAccumulator => {\n const rank = getRank(item, index, accumulator.previousValue, accumulator.previousRank)\n\n return {\n entries: [...accumulator.entries, toRankedEntry(rank)(item)],\n previousRank: rank,\n previousValue: some(item.value),\n }\n}\n\nconst rankItems = (data: ValidatedDataset) =>\n sortByRank(data).reduce<RankAccumulator>(appendRankedEntry, {\n entries: [],\n previousRank: 1,\n previousValue: none,\n }).entries\n\nexport function computeRankedList(input: RankedListInput): RankedListResult {\n return mapResult<ValidatedDataset, readonly RankedEntry[], RankedListError>(rankItems)(\n validateRankedListInput(input),\n )\n}\n","import { matchOption, none, some } from '../shared'\nimport type { Option } from '../shared'\nimport { always, cond, ifElse, map } from '../shared/fp'\n\nimport type { RankChange, RankedEntry } from './RankedList.types'\n\nexport type RankChangeDirection = 'Improved' | 'Declined' | 'Unchanged'\n\nexport type RankedListValueDirection = 'positive' | 'negative' | 'zero'\n\nexport type RankedListModelChange = {\n readonly amount: RankChange\n readonly amountLabel: string\n readonly direction: RankChangeDirection\n readonly directionLabel: string\n readonly directionClassName: string\n readonly ariaLabel: string\n}\n\nexport type RankedListModelEntry = {\n readonly label: string\n readonly value: number\n readonly rank: number\n readonly rankLabel: string\n readonly valueLabel: string\n readonly valueBarWidth: string\n readonly valueDirectionClassName: RankedListValueDirection\n readonly rankChange: RankedEntry['rankChange']\n readonly change: Option<RankedListModelChange>\n readonly summaryLabel: string\n}\n\nexport type RankedListModel = {\n readonly entries: readonly RankedListModelEntry[]\n}\n\ntype RankChangeDirectionRule = [\n (change: RankChange) => boolean,\n (change: RankChange) => RankChangeDirection,\n]\ntype ValueDirectionRule = [\n (value: number) => boolean,\n (value: number) => RankedListValueDirection,\n]\ntype ValueRatioContext = {\n readonly minimumValue: number\n readonly maximumValue: number\n readonly value: number\n}\n\nconst rankChangeDirectionRules: RankChangeDirectionRule[] = [\n [(change: RankChange) => change > 0, always('Improved')],\n [(change: RankChange) => change < 0, always('Declined')],\n [always(true), always('Unchanged')],\n]\n\nconst valueDirectionRules: ValueDirectionRule[] = [\n [(value: number) => value > 0, always('positive')],\n [(value: number) => value < 0, always('negative')],\n [always(true), always('zero')],\n]\n\nconst getRankChangeDirection: (change: RankChange) => RankChangeDirection =\n cond(rankChangeDirectionRules)\n\nconst getValueDirection: (value: number) => RankedListValueDirection =\n cond(valueDirectionRules)\n\nconst getRankChangeDirectionClassName = (direction: RankChangeDirection) =>\n direction.toLowerCase()\n\nconst getRankChangeDirectionLabel = (direction: RankChangeDirection) =>\n cond([\n [(candidate: RankChangeDirection) => candidate === 'Improved', always('Up')],\n [(candidate: RankChangeDirection) => candidate === 'Declined', always('Down')],\n [always(true), always('Same')],\n ])(direction)\n\nconst getEntryValue = (entry: RankedEntry) => entry.value\n\nconst getValues = (entries: readonly RankedEntry[]) => map(getEntryValue, [...entries])\n\nconst hasEntries = (entries: readonly RankedEntry[]) => entries.length > 0\n\nconst getMinimumValue = (entries: readonly RankedEntry[]) =>\n ifElse(\n hasEntries,\n (rankedEntries: readonly RankedEntry[]) => Math.min(...getValues(rankedEntries)),\n always(0),\n )(entries)\n\nconst getMaximumValue = (entries: readonly RankedEntry[]) =>\n ifElse(\n hasEntries,\n (rankedEntries: readonly RankedEntry[]) => Math.max(...getValues(rankedEntries)),\n always(0),\n )(entries)\n\nconst toPercent = (value: number) => `${String(Math.round(value * 1000) / 10)}%`\n\nconst hasNoValueRange = (context: ValueRatioContext) =>\n context.minimumValue === context.maximumValue\n\nconst computeValueRatio = (context: ValueRatioContext) =>\n (context.value - context.minimumValue) / (context.maximumValue - context.minimumValue)\n\nconst getValueRatio = (minimumValue: number, maximumValue: number) => (value: number) =>\n ifElse(\n hasNoValueRange,\n always(1),\n computeValueRatio,\n )({ minimumValue, maximumValue, value })\n\nconst pluralizePositions = (count: number) =>\n ifElse(\n (candidate: number) => candidate === 1,\n always('position'),\n always('positions'),\n )(count)\n\nconst getChangeAriaLabel = (change: RankChange) => {\n const absoluteChange = Math.abs(change)\n\n return cond([\n [(candidate: RankChange) => candidate > 0, () =>\n `Rank improved by ${String(absoluteChange)} ${pluralizePositions(absoluteChange)}.`],\n [(candidate: RankChange) => candidate < 0, () =>\n `Rank declined by ${String(absoluteChange)} ${pluralizePositions(absoluteChange)}.`],\n [always(true), () => 'Rank did not change.'],\n ])(change)\n}\n\nconst buildChangeModel = (\n rankChange: RankChange,\n formatRankChange: (rankChange: number) => string,\n): RankedListModelChange => {\n const direction = getRankChangeDirection(rankChange)\n\n return {\n amount: rankChange,\n amountLabel: formatRankChange(rankChange),\n direction,\n directionLabel: getRankChangeDirectionLabel(direction),\n directionClassName: getRankChangeDirectionClassName(direction),\n ariaLabel: getChangeAriaLabel(rankChange),\n }\n}\n\nconst getChangeModel = (\n entry: RankedEntry,\n formatRankChange: (rankChange: number) => string,\n): Option<RankedListModelChange> =>\n matchOption<RankChange, Option<RankedListModelChange>>(entry.rankChange, {\n none: () => none,\n some: (value) => some(buildChangeModel(value, formatRankChange)),\n })\n\nconst getChangeSummary = (change: RankedListModelEntry['change']) =>\n matchOption(change, {\n none: always('No prior rank.'),\n some: (value) => value.ariaLabel,\n })\n\nconst toModelEntry = (\n minimumValue: number,\n maximumValue: number,\n formatValue: (value: number) => string,\n formatRank: (rank: number) => string,\n formatRankChange: (rankChange: number) => string,\n) => (entry: RankedEntry): RankedListModelEntry => {\n const valueRatio = getValueRatio(minimumValue, maximumValue)(entry.value)\n const rankLabel = formatRank(entry.rank)\n const valueLabel = formatValue(entry.value)\n const change = getChangeModel(entry, formatRankChange)\n\n return {\n label: entry.label,\n value: entry.value,\n rank: entry.rank,\n rankLabel,\n valueLabel,\n valueBarWidth: toPercent(valueRatio),\n valueDirectionClassName: getValueDirection(entry.value),\n rankChange: entry.rankChange,\n change,\n summaryLabel: `Rank ${rankLabel}, ${entry.label}: ${valueLabel}. ${getChangeSummary(change)}`,\n }\n}\n\nexport const buildRankedListModel = (\n entries: readonly RankedEntry[],\n formatValue: (value: number) => string,\n formatRank: (rank: number) => string,\n formatRankChange: (rankChange: number) => string,\n): RankedListModel => {\n const minimumValue = getMinimumValue(entries)\n const maximumValue = getMaximumValue(entries)\n\n return {\n entries: map(\n toModelEntry(minimumValue, maximumValue, formatValue, formatRank, formatRankChange),\n [...entries],\n ),\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { RankedListProps } from '../RankedList.types'\n\nexport function RankedListCaption({ caption }: Pick<RankedListProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-ranked-list__caption\">{value}</figcaption>\n ),\n })\n}\n","import type { CSSProperties } from 'react'\n\nimport { classNames, matchOption } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\n\nimport type { RankedListModelChange, RankedListModelEntry } from '../RankedList.model'\n\ntype RankedListEntryStyle = CSSProperties & {\n readonly '--pristine-ranked-list-value-width': string\n}\n\ntype RankedListEntryProps = {\n readonly entry: RankedListModelEntry\n readonly showRankChanges: boolean\n}\n\nconst toEntryStyle = (entry: RankedListModelEntry): RankedListEntryStyle => ({\n '--pristine-ranked-list-value-width': entry.valueBarWidth,\n})\n\nconst hasChangedRank = (change: RankedListModelChange) => change.amount !== 0\n\nconst renderChangeAmount = ifElse(\n hasChangedRank,\n (change: RankedListModelChange) => (\n <span className=\"pristine-ranked-list__change-amount\">{change.amountLabel}</span>\n ),\n always(null),\n)\n\nconst renderVisibleRankChange = (change: RankedListModelChange) => (\n <span\n className={classNames([\n 'pristine-ranked-list__change',\n `pristine-ranked-list__change--${change.directionClassName}`,\n ])}\n aria-label={change.ariaLabel}\n >\n <span className=\"pristine-ranked-list__change-direction\">{change.directionLabel}</span>\n {renderChangeAmount(change)}\n </span>\n)\n\nconst renderChangeWhenVisible = (showRankChanges: boolean) =>\n ifElse(\n always(showRankChanges),\n renderVisibleRankChange,\n always(null),\n )\n\nconst renderRankChange = (\n change: RankedListModelEntry['change'],\n showRankChanges: boolean,\n) =>\n matchOption(change, {\n none: always(null),\n some: (value) => renderChangeWhenVisible(showRankChanges)(value),\n })\n\nexport function RankedListEntry({ entry, showRankChanges }: RankedListEntryProps) {\n return (\n <li\n className=\"pristine-ranked-list__entry\"\n aria-label={entry.summaryLabel}\n style={toEntryStyle(entry)}\n >\n <span className=\"pristine-ranked-list__rank\">{entry.rankLabel}</span>\n <span className=\"pristine-ranked-list__item\">\n <span className=\"pristine-ranked-list__label\">{entry.label}</span>\n <span className=\"pristine-ranked-list__meter\" aria-hidden=\"true\">\n <span\n className={classNames([\n 'pristine-ranked-list__meter-fill',\n `pristine-ranked-list__meter-fill--${entry.valueDirectionClassName}`,\n ])}\n />\n </span>\n </span>\n <span\n className={classNames([\n 'pristine-ranked-list__value',\n `pristine-ranked-list__value--${entry.valueDirectionClassName}`,\n ])}\n >\n {entry.valueLabel}\n </span>\n {renderRankChange(entry.change, showRankChanges)}\n </li>\n )\n}\n","import type { CSSProperties } from 'react'\n\nimport { classNames } from '@/shared'\n\nimport type { RankedListModel } from '../RankedList.model'\nimport type { RankedListProps } from '../RankedList.types'\n\nimport { RankedListCaption } from './RankedListCaption'\nimport { RankedListEntry } from './RankedListEntry'\n\ntype RankedListStyle = CSSProperties & {\n readonly '--pristine-ranked-list-width': string\n readonly '--pristine-ranked-list-min-height': string\n}\n\ntype RankedListFigureProps = Pick<\n RankedListProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'showRankChanges' | 'width'\n> & {\n readonly rankedList: RankedListModel\n}\n\nconst toFigureStyle = (width: number, height: number): RankedListStyle => ({\n '--pristine-ranked-list-width': `${String(width)}px`,\n '--pristine-ranked-list-min-height': `${String(height)}px`,\n})\n\nexport function RankedListFigure({\n ariaLabel,\n caption,\n className,\n height,\n rankedList,\n showRankChanges,\n width,\n}: RankedListFigureProps) {\n return (\n <figure\n className={classNames(['pristine-ranked-list', className])}\n aria-label={ariaLabel}\n style={toFigureStyle(width, height)}\n >\n <ol className=\"pristine-ranked-list__entries\">\n {rankedList.entries.map((entry) => (\n <RankedListEntry\n key={entry.label}\n entry={entry}\n showRankChanges={showRankChanges}\n />\n ))}\n </ol>\n <RankedListCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeRankedList } from './RankedList.domain'\nimport { buildRankedListModel } from './RankedList.model'\nimport { RankedListFigure } from './components/RankedListFigure'\nimport type { RankedListProps } from './RankedList.types'\n\nexport function RankedList({\n data,\n width,\n height,\n ariaLabel,\n className,\n caption,\n showRankChanges,\n formatValue,\n formatRank,\n formatRankChange,\n}: RankedListProps) {\n const result = useMemo(() => computeRankedList({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-ranked-list__error', className])}\n title=\"Ranked list unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (entries) => {\n const rankedList = buildRankedListModel(\n entries,\n formatValue,\n formatRank,\n formatRankChange,\n )\n\n return (\n <RankedListFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n rankedList={rankedList}\n showRankChanges={showRankChanges}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { RankedListProps } from './RankedList.types'\n\nexport const formatRankedListNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const formatRankedListRank = (rank: number) => `#${String(rank)}`\n\nexport const formatRankedListRankChange = (rankChange: number) =>\n ifElse(\n (candidate: number) => candidate > 0,\n (candidate: number) => `+${String(candidate)}`,\n String,\n )(rankChange)\n\nexport const DEFAULT_RANKED_LIST_VIEW_PROPS = {\n width: 420,\n height: 260,\n ariaLabel: 'Ranked list',\n className: '',\n caption: none,\n showRankChanges: true,\n formatValue: formatRankedListNumber,\n formatRank: formatRankedListRank,\n formatRankChange: formatRankedListRankChange,\n} satisfies Omit<RankedListProps, 'data'>\n","import { err, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n findIndex,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n ScatterPlotDot,\n ScatterPlotError,\n ScatterPlotInput,\n ScatterPlotPoint,\n ScatterPlotResult,\n ValidatedDataset,\n ValidatedScatterPlotInput,\n} from './ScatterPlot.types'\n\ntype DatasetResult = Result<ValidatedDataset, ScatterPlotError>\ntype ScatterPlotInputResult = Result<ValidatedScatterPlotInput, ScatterPlotError>\ntype DatasetValidator = [\n (data: readonly ScatterPlotPoint[]) => boolean,\n (data: readonly ScatterPlotPoint[]) => DatasetResult,\n]\n\nconst MINIMUM_POINT_COUNT = 2\n\nconst scatterPlotRules = {\n insufficientPoints: (): ScatterPlotError => ({\n type: 'InsufficientPoints',\n message: 'A scatter plot needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): ScatterPlotError => ({\n type: 'InvalidXValue',\n message: 'Every scatter plot x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): ScatterPlotError => ({\n type: 'InvalidYValue',\n message: 'Every scatter plot y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst hasEnoughPoints = (data: readonly ScatterPlotPoint[]) =>\n data.length >= MINIMUM_POINT_COUNT\n\nconst getXValues = (data: readonly ScatterPlotPoint[]) => map(prop('x'), [...data])\n\nconst getYValues = (data: readonly ScatterPlotPoint[]) => map(prop('y'), [...data])\n\nconst hasOnlyFiniteXValues = (data: readonly ScatterPlotPoint[]) =>\n all(isFiniteNumber, getXValues(data))\n\nconst hasOnlyFiniteYValues = (data: readonly ScatterPlotPoint[]) =>\n all(isFiniteNumber, getYValues(data))\n\nconst findInvalidXValueIndex = (data: readonly ScatterPlotPoint[]) =>\n findIndex(complement(isFiniteNumber), getXValues(data))\n\nconst findInvalidYValueIndex = (data: readonly ScatterPlotPoint[]) =>\n findIndex(complement(isFiniteNumber), getYValues(data))\n\nconst datasetValidators: DatasetValidator[] = [\n [complement(hasEnoughPoints), () => err(scatterPlotRules.insufficientPoints())],\n [\n complement(hasOnlyFiniteXValues),\n (candidate: readonly ScatterPlotPoint[]) =>\n err(scatterPlotRules.invalidXValue(findInvalidXValueIndex(candidate))),\n ],\n [\n complement(hasOnlyFiniteYValues),\n (candidate: readonly ScatterPlotPoint[]) =>\n err(scatterPlotRules.invalidYValue(findInvalidYValueIndex(candidate))),\n ],\n [always(true), (candidate: readonly ScatterPlotPoint[]) => ok(candidate)],\n]\n\nconst validateDataset: (data: readonly ScatterPlotPoint[]) => DatasetResult =\n cond(datasetValidators)\n\nexport function validateScatterPlotInput(input: ScatterPlotInput): ScatterPlotInputResult {\n return mapResult<ValidatedDataset, ValidatedScatterPlotInput, ScatterPlotError>(\n (dataset) => ({ dataset }),\n )(validateDataset(input.data))\n}\n\nconst toScatterPlotDot = (\n point: ValidatedDataset[number],\n index: number,\n): ScatterPlotDot => ({\n ...point,\n index,\n})\n\nconst computeDots = (input: ValidatedScatterPlotInput) =>\n input.dataset.map(toScatterPlotDot)\n\nexport function computeScatterPlot(input: ScatterPlotInput): ScatterPlotResult {\n return mapResult<ValidatedScatterPlotInput, readonly ScatterPlotDot[], ScatterPlotError>(\n computeDots,\n )(validateScatterPlotInput(input))\n}\n","import { extent, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { ScatterPlotDot } from './ScatterPlot.types'\n\ntype ChartExtent = [number, number]\n\nexport const SCATTER_PLOT_MARGIN = {\n top: 20,\n right: 18,\n bottom: 36,\n left: 42,\n}\n\nexport type RenderedScatterPlotDot = ScatterPlotDot & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type ScatterPlotModel = {\n readonly plotBottom: number\n readonly dots: readonly RenderedScatterPlotDot[]\n readonly xTicks: readonly number[]\n readonly yTicks: readonly number[]\n readonly xScale: (value: number) => number\n readonly yScale: (value: number) => number\n}\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst getXExtent = (dots: readonly ScatterPlotDot[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...dots])))\n\nconst getYExtent = (dots: readonly ScatterPlotDot[]) =>\n expandZeroWidthExtent(getExtent(map(prop('y'), [...dots])))\n\nexport const buildScatterPlotModel = (\n dots: readonly ScatterPlotDot[],\n width: number,\n height: number,\n): ScatterPlotModel => {\n const plotBottom = height - SCATTER_PLOT_MARGIN.bottom\n const xScale = scaleLinear()\n .domain(getXExtent(dots))\n .nice()\n .range([SCATTER_PLOT_MARGIN.left, width - SCATTER_PLOT_MARGIN.right])\n const yScale = scaleLinear()\n .domain(getYExtent(dots))\n .nice()\n .range([plotBottom, SCATTER_PLOT_MARGIN.top])\n const toRenderedDot = (dot: ScatterPlotDot): RenderedScatterPlotDot => ({\n ...dot,\n cx: xScale(dot.x),\n cy: yScale(dot.y),\n })\n\n return {\n plotBottom,\n dots: map(toRenderedDot, [...dots]),\n xTicks: xScale.ticks(Math.min(6, dots.length)),\n yTicks: yScale.ticks(5),\n xScale,\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { ScatterPlotProps } from '../ScatterPlot.types'\n\nexport function ScatterPlotCaption({ caption }: Pick<ScatterPlotProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-scatter-plot__caption\">{text}</figcaption>,\n })\n}\n","import { SCATTER_PLOT_MARGIN } from '../ScatterPlot.model'\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\n\ntype ScatterPlotAxesProps = {\n readonly chart: ScatterPlotModel\n readonly width: number\n}\n\nexport function ScatterPlotAxes({ chart, width }: ScatterPlotAxesProps) {\n return (\n <>\n <line\n className=\"pristine-scatter-plot__axis\"\n x1={SCATTER_PLOT_MARGIN.left}\n x2={width - SCATTER_PLOT_MARGIN.right}\n y1={chart.plotBottom}\n y2={chart.plotBottom}\n />\n <line\n className=\"pristine-scatter-plot__axis\"\n x1={SCATTER_PLOT_MARGIN.left}\n x2={SCATTER_PLOT_MARGIN.left}\n y1={SCATTER_PLOT_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\nimport type { RenderedScatterPlotDot } from '../ScatterPlot.model'\n\ntype ScatterPlotDotMarkerProps = {\n readonly active: boolean\n readonly dot: RenderedScatterPlotDot\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n}\n\nexport function ScatterPlotDotMarker({\n active,\n dot,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n}: ScatterPlotDotMarkerProps) {\n const activeClassName = ifElse(\n always(active),\n always('pristine-scatter-plot__dot--active'),\n always(''),\n )(active)\n const accessibleLabel = `${formatXValue(dot.x)}: ${formatYValue(dot.y)}`\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames(['pristine-scatter-plot__dot', activeClassName])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <circle\n className=\"pristine-scatter-plot__dot-hit-area\"\n cx={dot.cx}\n cy={dot.cy}\n r={10}\n />\n <circle\n className=\"pristine-scatter-plot__dot-mark\"\n cx={dot.cx}\n cy={dot.cy}\n r={4}\n />\n </g>\n )\n}\n","import type { ScatterPlotModel } from '../ScatterPlot.model'\n\nimport { ScatterPlotDotMarker } from './ScatterPlotDotMarker'\n\ntype ScatterPlotDotsProps = {\n readonly activeDotIndex: number | null\n readonly chart: ScatterPlotModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly onActivate: (dotIndex: number) => void\n readonly onDeactivate: () => void\n}\n\nexport function ScatterPlotDots({\n activeDotIndex,\n chart,\n formatXValue,\n formatYValue,\n onActivate,\n onDeactivate,\n}: ScatterPlotDotsProps) {\n return chart.dots.map((dot) => (\n <ScatterPlotDotMarker\n active={activeDotIndex === dot.index}\n dot={dot}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n key={dot.index}\n onActivate={() => onActivate(dot.index)}\n onDeactivate={onDeactivate}\n />\n ))\n}\n","import { SCATTER_PLOT_MARGIN } from '../ScatterPlot.model'\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\n\ntype ScatterPlotGridLinesProps = {\n readonly chart: ScatterPlotModel\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nexport function ScatterPlotGridLines({\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotGridLinesProps) {\n return (\n <>\n {chart.yTicks.map((tick) => (\n <g className=\"pristine-scatter-plot__grid-line\" key={`y:${tick}`}>\n <line\n x1={SCATTER_PLOT_MARGIN.left}\n x2={width - SCATTER_PLOT_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text x={SCATTER_PLOT_MARGIN.left - 8} y={chart.yScale(tick)} textAnchor=\"end\">\n {formatYValue(tick)}\n </text>\n </g>\n ))}\n {chart.xTicks.map((tick) => (\n <g className=\"pristine-scatter-plot__grid-line\" key={`x:${tick}`}>\n <line\n x1={chart.xScale(tick)}\n x2={chart.xScale(tick)}\n y1={SCATTER_PLOT_MARGIN.top}\n y2={chart.plotBottom}\n />\n <text\n x={chart.xScale(tick)}\n y={height - SCATTER_PLOT_MARGIN.bottom + 20}\n textAnchor=\"middle\"\n >\n {formatXValue(tick)}\n </text>\n </g>\n ))}\n </>\n )\n}\n","import { SCATTER_PLOT_MARGIN } from '../ScatterPlot.model'\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\n\ntype ScatterPlotPlotAreaProps = {\n readonly chart: ScatterPlotModel\n readonly width: number\n}\n\nexport function ScatterPlotPlotArea({ chart, width }: ScatterPlotPlotAreaProps) {\n return (\n <rect\n className=\"pristine-scatter-plot__plot\"\n x={SCATTER_PLOT_MARGIN.left}\n y={SCATTER_PLOT_MARGIN.top}\n width={width - SCATTER_PLOT_MARGIN.left - SCATTER_PLOT_MARGIN.right}\n height={chart.plotBottom - SCATTER_PLOT_MARGIN.top}\n />\n )\n}\n","import type { RenderedScatterPlotDot } from '../ScatterPlot.model'\n\ntype ScatterPlotTooltipProps = {\n readonly dot: RenderedScatterPlotDot\n readonly formatXValue: (value: number) => string\n readonly formatYValue: (value: number) => string\n readonly height: number\n readonly width: number\n}\n\nconst TOOLTIP_HEIGHT = 22\nconst TOOLTIP_MIN_WIDTH = 44\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_CHAR_WIDTH = 7\nconst VIEWBOX_PADDING = 4\n\nconst getTooltipWidth = (label: string) =>\n Math.max(TOOLTIP_MIN_WIDTH, label.length * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2)\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function ScatterPlotTooltip({\n dot,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotTooltipProps) {\n const label = `${formatXValue(dot.x)}: ${formatYValue(dot.y)}`\n const tooltipWidth = getTooltipWidth(label)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n dot.cx - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - TOOLTIP_HEIGHT - VIEWBOX_PADDING,\n dot.cy - TOOLTIP_HEIGHT - 10,\n )\n\n return (\n <g className=\"pristine-scatter-plot__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-scatter-plot__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={TOOLTIP_HEIGHT}\n rx={4}\n />\n <text\n className=\"pristine-scatter-plot__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_HEIGHT / 2}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\nimport type { ScatterPlotProps } from '../ScatterPlot.types'\n\nimport { ScatterPlotAxes } from './ScatterPlotAxes'\nimport { ScatterPlotDots } from './ScatterPlotDots'\nimport { ScatterPlotGridLines } from './ScatterPlotGridLines'\nimport { ScatterPlotPlotArea } from './ScatterPlotPlotArea'\nimport { ScatterPlotTooltip } from './ScatterPlotTooltip'\n\ntype ScatterPlotSvgProps = Pick<\n ScatterPlotProps,\n 'ariaLabel' | 'formatXValue' | 'formatYValue' | 'height' | 'width'\n> & {\n readonly chart: ScatterPlotModel\n}\n\nexport function ScatterPlotSvg({\n ariaLabel,\n chart,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotSvgProps) {\n const [activeDotIndex, setActiveDotIndex] = useState<number | null>(null)\n const activeDots = chart.dots.filter((dot) => dot.index === activeDotIndex)\n\n return (\n <svg\n className=\"pristine-scatter-plot__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <ScatterPlotPlotArea chart={chart} width={width} />\n <ScatterPlotGridLines\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <ScatterPlotAxes chart={chart} width={width} />\n <ScatterPlotDots\n activeDotIndex={activeDotIndex}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n onActivate={setActiveDotIndex}\n onDeactivate={() => setActiveDotIndex(null)}\n />\n {activeDots.map((dot) => (\n <ScatterPlotTooltip\n dot={dot}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n key={dot.index}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { ScatterPlotModel } from '../ScatterPlot.model'\nimport type { ScatterPlotProps } from '../ScatterPlot.types'\n\nimport { ScatterPlotCaption } from './ScatterPlotCaption'\nimport { ScatterPlotSvg } from './ScatterPlotSvg'\n\ntype ScatterPlotFigureProps = Pick<\n ScatterPlotProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'formatXValue'\n | 'formatYValue'\n | 'height'\n | 'width'\n> & {\n readonly chart: ScatterPlotModel\n}\n\nexport function ScatterPlotFigure({\n ariaLabel,\n caption,\n chart,\n className,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotFigureProps) {\n return (\n <figure className={classNames(['pristine-scatter-plot', className])} aria-label={ariaLabel}>\n <ScatterPlotSvg\n ariaLabel={ariaLabel}\n chart={chart}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n <ScatterPlotCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeScatterPlot } from './ScatterPlot.domain'\nimport { buildScatterPlotModel } from './ScatterPlot.model'\nimport type { ScatterPlotProps } from './ScatterPlot.types'\nimport { ScatterPlotFigure } from './components/ScatterPlotFigure'\n\nexport function ScatterPlot({\n ariaLabel,\n caption,\n className,\n data,\n formatXValue,\n formatYValue,\n height,\n width,\n}: ScatterPlotProps) {\n const result = useMemo(() => computeScatterPlot({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-scatter-plot__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (dots) => {\n const chart = buildScatterPlotModel(dots, width, height)\n\n return (\n <ScatterPlotFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n formatXValue={formatXValue}\n formatYValue={formatYValue}\n height={height}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { ifElse } from '../shared/fp'\n\nimport type { ScatterPlotProps } from './ScatterPlot.types'\n\nexport const formatScatterPlotNumber = ifElse(\n Number.isInteger,\n String,\n (value: number) => value.toFixed(2).replace(/\\.?0+$/, ''),\n)\n\nexport const DEFAULT_SCATTER_PLOT_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Scatter plot',\n className: '',\n caption: none,\n formatXValue: formatScatterPlotNumber,\n formatYValue: formatScatterPlotNumber,\n} satisfies Omit<ScatterPlotProps, 'data'>\n","import { mapResult, none, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n computeLinearSeriesSegments,\n validateLinearSeriesDataset,\n} from '../shared/linearSeries'\nimport type { LinearSeriesErrorRules } from '../shared/linearSeries'\n\nimport type {\n SparklineError,\n SparklineInput,\n SparklineResult,\n SparklineSegment,\n ValidatedDataset,\n ValidatedSparklineInput,\n} from './Sparkline.types'\n\ntype SparklineInputResult = Result<ValidatedSparklineInput, SparklineError>\n\nconst sparklineRules: LinearSeriesErrorRules<SparklineError> = {\n insufficientPoints: (): SparklineError => ({\n type: 'InsufficientPoints',\n message: 'A sparkline needs at least two points.',\n details: none,\n }),\n invalidXValue: (index: number): SparklineError => ({\n type: 'InvalidXValue',\n message: 'Every sparkline x value must be a finite number.',\n details: some(`Invalid x value at index ${String(index)}.`),\n }),\n invalidYValue: (index: number): SparklineError => ({\n type: 'InvalidYValue',\n message: 'Every sparkline y value must be a finite number.',\n details: some(`Invalid y value at index ${String(index)}.`),\n }),\n duplicateXValue: (x: number): SparklineError => ({\n type: 'DuplicateXValue',\n message: 'Sparkline x values must be unique.',\n details: some(`Duplicate x value: ${String(x)}.`),\n }),\n}\n\nexport function validateSparklineInput(input: SparklineInput): SparklineInputResult {\n return mapResult<ValidatedDataset, ValidatedSparklineInput, SparklineError>(\n (dataset) => ({ dataset }),\n )(validateLinearSeriesDataset(input.data, sparklineRules))\n}\n\nconst computeSegments = (input: ValidatedSparklineInput) =>\n computeLinearSeriesSegments(input.dataset)\n\nexport function computeSparkline(input: SparklineInput): SparklineResult {\n return mapResult<ValidatedSparklineInput, readonly SparklineSegment[], SparklineError>(\n computeSegments,\n )(validateSparklineInput(input))\n}\n","import { extent, line, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, defaultTo, identity, ifElse, map, prop } from '../shared/fp'\n\nimport type { SparklinePoint, SparklineSegment } from './Sparkline.types'\n\ntype ChartExtent = [number, number]\n\nexport const SPARKLINE_PADDING = {\n top: 4,\n right: 4,\n bottom: 4,\n left: 4,\n}\n\nexport type RenderedSparklinePoint = SparklinePoint & {\n readonly cx: number\n readonly cy: number\n}\n\nexport type RenderedSparklineSegment = {\n readonly start: RenderedSparklinePoint\n readonly end: RenderedSparklinePoint\n}\n\nexport type SparklineModel = {\n readonly points: readonly RenderedSparklinePoint[]\n readonly segments: readonly RenderedSparklineSegment[]\n readonly path: string\n}\n\nconst isFirstSegmentIndex = (index: number) => index === 0\n\nconst getPointsForSegment = (segment: SparklineSegment) => (index: number) =>\n ifElse(\n isFirstSegmentIndex,\n always([segment.start, segment.end]),\n always([segment.end]),\n )(index)\n\nconst getPointsFromSegments = (segments: readonly SparklineSegment[]) =>\n segments.flatMap((segment, index) => getPointsForSegment(segment)(index))\n\nconst getExtent = (values: readonly number[]): ChartExtent => {\n const [lowerBound, upperBound] = extent(values)\n\n return [withNumberDefault(0)(lowerBound), withNumberDefault(1)(upperBound)]\n}\n\nconst isZeroWidthExtent = ([lowerBound, upperBound]: ChartExtent) => lowerBound === upperBound\n\nconst expandZeroWidthExtent: (extent: ChartExtent) => ChartExtent = ifElse(\n isZeroWidthExtent,\n ([lowerBound, upperBound]: ChartExtent): ChartExtent => [lowerBound - 0.5, upperBound + 0.5],\n identity,\n)\n\nconst renderSparklinePath = (points: readonly RenderedSparklinePoint[]) =>\n defaultTo(\n '',\n line<RenderedSparklinePoint>()\n .x((point) => point.cx)\n .y((point) => point.cy)(points),\n )\n\nconst getXExtent = (points: readonly SparklinePoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('x'), [...points])))\n\nconst getYExtent = (points: readonly SparklinePoint[]) =>\n expandZeroWidthExtent(getExtent(map(prop('y'), [...points])))\n\nexport const buildSparklineModel = (\n segments: readonly SparklineSegment[],\n width: number,\n height: number,\n): SparklineModel => {\n const points = getPointsFromSegments(segments)\n const xScale = scaleLinear()\n .domain(getXExtent(points))\n .range([SPARKLINE_PADDING.left, width - SPARKLINE_PADDING.right])\n const yScale = scaleLinear()\n .domain(getYExtent(points))\n .range([height - SPARKLINE_PADDING.bottom, SPARKLINE_PADDING.top])\n const toRenderedPoint = (point: SparklinePoint): RenderedSparklinePoint => ({\n ...point,\n cx: xScale(point.x),\n cy: yScale(point.y),\n })\n const renderedPoints = map(toRenderedPoint, [...points])\n const toRenderedSegment = (segment: SparklineSegment): RenderedSparklineSegment => ({\n start: toRenderedPoint(segment.start),\n end: toRenderedPoint(segment.end),\n })\n\n return {\n points: renderedPoints,\n segments: map(toRenderedSegment, [...segments]),\n path: renderSparklinePath(renderedPoints),\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { SparklineProps } from '../Sparkline.types'\n\nexport function SparklineCaption({ caption }: Pick<SparklineProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (text) => <figcaption className=\"pristine-sparkline__caption\">{text}</figcaption>,\n })\n}\n","import type { SparklineModel } from '../Sparkline.model'\n\ntype SparklinePathProps = {\n readonly sparkline: SparklineModel\n}\n\nexport function SparklinePath({ sparkline }: SparklinePathProps) {\n return <path className=\"pristine-sparkline__path\" d={sparkline.path} aria-hidden=\"true\" />\n}\n","import type { SparklineModel } from '../Sparkline.model'\nimport type { SparklineProps } from '../Sparkline.types'\n\nimport { SparklinePath } from './SparklinePath'\n\ntype SparklineSvgProps = Pick<SparklineProps, 'ariaLabel' | 'height' | 'width'> & {\n readonly sparkline: SparklineModel\n}\n\nexport function SparklineSvg({\n ariaLabel,\n height,\n sparkline,\n width,\n}: SparklineSvgProps) {\n return (\n <svg\n className=\"pristine-sparkline__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <SparklinePath sparkline={sparkline} />\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { SparklineModel } from '../Sparkline.model'\nimport type { SparklineProps } from '../Sparkline.types'\n\nimport { SparklineCaption } from './SparklineCaption'\nimport { SparklineSvg } from './SparklineSvg'\n\ntype SparklineFigureProps = Pick<\n SparklineProps,\n 'ariaLabel' | 'caption' | 'className' | 'height' | 'width'\n> & {\n readonly sparkline: SparklineModel\n}\n\nexport function SparklineFigure({\n ariaLabel,\n caption,\n className,\n height,\n sparkline,\n width,\n}: SparklineFigureProps) {\n return (\n <figure className={classNames(['pristine-sparkline', className])} aria-label={ariaLabel}>\n <SparklineSvg\n ariaLabel={ariaLabel}\n height={height}\n sparkline={sparkline}\n width={width}\n />\n <SparklineCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeSparkline } from './Sparkline.domain'\nimport { buildSparklineModel } from './Sparkline.model'\nimport type { SparklineProps } from './Sparkline.types'\nimport { SparklineFigure } from './components/SparklineFigure'\n\nexport function Sparkline({\n ariaLabel,\n caption,\n className,\n data,\n height,\n width,\n}: SparklineProps) {\n const result = useMemo(() => computeSparkline({ data }), [data])\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-sparkline__error', className])}\n title=\"Sparkline unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (segments) => {\n const sparkline = buildSparklineModel(segments, width, height)\n\n return (\n <SparklineFigure\n ariaLabel={ariaLabel}\n caption={caption}\n className={className}\n height={height}\n sparkline={sparkline}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\n\nimport type { SparklineProps } from './Sparkline.types'\n\nexport const DEFAULT_SPARKLINE_VIEW_PROPS = {\n width: 240,\n height: 72,\n ariaLabel: 'Sparkline',\n className: '',\n caption: none,\n} satisfies Omit<SparklineProps, 'data'>\n","import { err, getOrElse, isNone, mapResult, none, ok, some } from '../shared'\nimport type { Result } from '../shared'\nimport {\n all,\n allPass,\n always,\n complement,\n cond,\n defaultTo,\n findIndex,\n map,\n prop,\n} from '../shared/fp'\n\nimport type {\n Favourability,\n ValidatedVarianceChartInput,\n VarianceChartError,\n VarianceChartInput,\n VarianceChartResult,\n VarianceEntry,\n VarianceItem,\n VarianceMetricPolarity,\n} from './VarianceChart.types'\n\ntype VarianceChartInputResult = Result<ValidatedVarianceChartInput, VarianceChartError>\ntype VarianceChartInputValidator = [\n (input: VarianceChartInput) => boolean,\n (input: VarianceChartInput) => VarianceChartInputResult,\n]\ntype FavourabilityContext = {\n readonly variance: number\n readonly polarity: VarianceMetricPolarity\n}\ntype FavourabilityRule = [\n (context: FavourabilityContext) => boolean,\n (context: FavourabilityContext) => Favourability,\n]\n\nexport const VARIANCE_HIGHER_IS_BETTER: VarianceMetricPolarity = 'HigherIsBetter'\nexport const VARIANCE_LOWER_IS_BETTER: VarianceMetricPolarity = 'LowerIsBetter'\n\nconst varianceChartRules = {\n emptyDataset: (): VarianceChartError => ({\n type: 'EmptyDataset',\n message: 'A variance chart needs at least one category.',\n details: none,\n }),\n invalidActualValue: (category: string, value: unknown): VarianceChartError => ({\n type: 'InvalidActualValue',\n message: 'Every variance chart actual value must be a finite number.',\n details: some(`Invalid actual value for ${category}: ${String(value)}.`),\n }),\n invalidBudgetValue: (category: string, value: unknown): VarianceChartError => ({\n type: 'InvalidBudgetValue',\n message: 'Every variance chart budget value must be a non-zero finite number.',\n details: some(`Invalid budget value for ${category}: ${String(value)}.`),\n }),\n emptyCategoryName: (index: number): VarianceChartError => ({\n type: 'EmptyCategoryName',\n message: 'Every variance chart category needs a non-empty name.',\n details: some(`Empty category at index ${String(index)}.`),\n }),\n duplicateCategory: (category: string): VarianceChartError => ({\n type: 'DuplicateCategory',\n message: 'Variance chart categories must be unique.',\n details: some(`Duplicate category: ${category}.`),\n }),\n missingMetricPolarity: (): VarianceChartError => ({\n type: 'MissingMetricPolarity',\n message: 'Variance chart polarity must be explicitly provided.',\n details: none,\n }),\n}\n\nconst isFiniteNumber = (value: unknown) =>\n allPass([\n (candidate: unknown) => typeof candidate === 'number',\n (candidate: unknown) => Number.isFinite(candidate),\n ])(value)\n\nconst isNonZeroFiniteNumber = (value: unknown) =>\n allPass([\n isFiniteNumber,\n (candidate: unknown) => Number(candidate) !== 0,\n ])(value)\n\nconst isNonEmptyString = (value: string) => value.trim().length > 0\n\nconst getCategories = (data: readonly VarianceItem[]) => map(prop('category'), [...data])\n\nconst hasOnlyFiniteActualValues = (data: readonly VarianceItem[]) =>\n all((item: VarianceItem) => isFiniteNumber(item.actualValue), [...data])\n\nconst hasOnlyValidBudgetValues = (data: readonly VarianceItem[]) =>\n all((item: VarianceItem) => isNonZeroFiniteNumber(item.budgetValue), [...data])\n\nconst findInvalidActualValueIndex = (data: readonly VarianceItem[]) =>\n findIndex((item: VarianceItem) => complement(isFiniteNumber)(item.actualValue), [...data])\n\nconst findInvalidBudgetValueIndex = (data: readonly VarianceItem[]) =>\n findIndex((item: VarianceItem) => complement(isNonZeroFiniteNumber)(item.budgetValue), [...data])\n\nconst findEmptyCategoryIndex = (data: readonly VarianceItem[]) =>\n findIndex(complement(isNonEmptyString), getCategories(data))\n\nconst hasOnlyNamedCategories = (data: readonly VarianceItem[]) =>\n all(isNonEmptyString, getCategories(data))\n\nconst hasUniqueCategories = (data: readonly VarianceItem[]) => {\n const categories = getCategories(data)\n\n return categories.length === new Set(categories).size\n}\n\nconst findDuplicateCategory = (data: readonly VarianceItem[]) => {\n const categories = getCategories(data)\n\n return defaultTo(\n 'unknown category',\n categories.find((category, index) => categories.indexOf(category) !== index),\n )\n}\n\nconst getIndexedItem = (data: readonly VarianceItem[], index: number) =>\n defaultTo({ category: 'unknown category', actualValue: 0, budgetValue: 0 }, data[index])\n\nconst toValidatedInput = (input: VarianceChartInput): ValidatedVarianceChartInput => ({\n data: input.data,\n polarity: getOrElse<VarianceMetricPolarity>(VARIANCE_HIGHER_IS_BETTER)(input.polarity),\n})\n\nconst inputValidators: VarianceChartInputValidator[] = [\n [\n (candidate: VarianceChartInput) => candidate.data.length === 0,\n () => err(varianceChartRules.emptyDataset()),\n ],\n [\n (candidate: VarianceChartInput) => isNone(candidate.polarity),\n () => err(varianceChartRules.missingMetricPolarity()),\n ],\n [\n (candidate: VarianceChartInput) => complement(hasOnlyFiniteActualValues)(candidate.data),\n (candidate: VarianceChartInput) => {\n const item = getIndexedItem(candidate.data, findInvalidActualValueIndex(candidate.data))\n\n return err(varianceChartRules.invalidActualValue(item.category, item.actualValue))\n },\n ],\n [\n (candidate: VarianceChartInput) => complement(hasOnlyValidBudgetValues)(candidate.data),\n (candidate: VarianceChartInput) => {\n const item = getIndexedItem(candidate.data, findInvalidBudgetValueIndex(candidate.data))\n\n return err(varianceChartRules.invalidBudgetValue(item.category, item.budgetValue))\n },\n ],\n [\n (candidate: VarianceChartInput) => complement(hasOnlyNamedCategories)(candidate.data),\n (candidate: VarianceChartInput) =>\n err(varianceChartRules.emptyCategoryName(findEmptyCategoryIndex(candidate.data))),\n ],\n [\n (candidate: VarianceChartInput) => complement(hasUniqueCategories)(candidate.data),\n (candidate: VarianceChartInput) =>\n err(varianceChartRules.duplicateCategory(findDuplicateCategory(candidate.data))),\n ],\n [always(true), (input: VarianceChartInput) => ok(toValidatedInput(input))],\n]\n\nexport const validateVarianceChartInput: (\n input: VarianceChartInput\n) => VarianceChartInputResult = cond(inputValidators)\n\nconst isHigherIsBetter = (polarity: VarianceMetricPolarity) =>\n polarity === VARIANCE_HIGHER_IS_BETTER\n\nconst isLowerIsBetter = (polarity: VarianceMetricPolarity) =>\n polarity === VARIANCE_LOWER_IS_BETTER\n\nconst isOnBudget = (context: FavourabilityContext) => context.variance === 0\n\nconst isFavourableForHigherIsBetter = (context: FavourabilityContext) =>\n allPass([\n (candidate: FavourabilityContext) => isHigherIsBetter(candidate.polarity),\n (candidate: FavourabilityContext) => candidate.variance > 0,\n ])(context)\n\nconst isFavourableForLowerIsBetter = (context: FavourabilityContext) =>\n allPass([\n (candidate: FavourabilityContext) => isLowerIsBetter(candidate.polarity),\n (candidate: FavourabilityContext) => candidate.variance < 0,\n ])(context)\n\nconst favourabilityRules: FavourabilityRule[] = [\n [isOnBudget, always('OnBudget')],\n [isFavourableForHigherIsBetter, always('Favourable')],\n [isFavourableForLowerIsBetter, always('Favourable')],\n [always(true), always('Unfavourable')],\n]\n\nconst deriveFavourability: (context: FavourabilityContext) => Favourability =\n cond(favourabilityRules)\n\nconst toVarianceEntry = (polarity: VarianceMetricPolarity) => (\n item: VarianceItem,\n): VarianceEntry => {\n const variance = item.actualValue - item.budgetValue\n\n return {\n ...item,\n category: item.category.trim(),\n variance,\n variancePercentage: (variance / item.budgetValue) * 100,\n favourability: deriveFavourability({ variance, polarity }),\n }\n}\n\nconst computeEntries = (input: ValidatedVarianceChartInput) =>\n map(toVarianceEntry(input.polarity), [...input.data])\n\nexport function computeVarianceChart(input: VarianceChartInput): VarianceChartResult {\n return mapResult<ValidatedVarianceChartInput, readonly VarianceEntry[], VarianceChartError>(\n computeEntries,\n )(validateVarianceChartInput(input))\n}\n","import { max, min, scaleBand, scaleLinear } from 'd3'\n\nimport { withNumberDefault } from '../shared'\nimport { always, cond, ifElse, map, prop } from '../shared/fp'\n\nimport type {\n Favourability,\n VarianceChartProps,\n VarianceDisplayMode,\n VarianceEntry,\n} from './VarianceChart.types'\n\nexport const VARIANCE_CHART_MARGIN = {\n top: 24,\n right: 16,\n bottom: 42,\n left: 82,\n}\n\nexport type RenderedVarianceEntry = VarianceEntry & {\n readonly displayValue: number\n readonly favourabilityClassName: string\n readonly x: number\n readonly y: number\n readonly width: number\n readonly height: number\n readonly valueY: number\n}\n\nexport type VarianceChartModel = {\n readonly baselineY: number\n readonly plotBottom: number\n readonly yTicks: readonly number[]\n readonly entries: readonly RenderedVarianceEntry[]\n readonly yScale: (value: number) => number\n}\n\nconst getDisplayValue = (displayMode: VarianceDisplayMode) => (entry: VarianceEntry) =>\n ifElse(\n (candidate: VarianceDisplayMode) => candidate === 'percentage',\n always(entry.variancePercentage),\n always(entry.variance),\n )(displayMode)\n\nconst getDisplayValues = (\n entries: readonly VarianceEntry[],\n displayMode: VarianceDisplayMode,\n) => map(getDisplayValue(displayMode), [...entries])\n\nconst getMinValue = (\n entries: readonly VarianceEntry[],\n displayMode: VarianceDisplayMode,\n) => withNumberDefault(0)(min(getDisplayValues(entries, displayMode)))\n\nconst getMaxValue = (\n entries: readonly VarianceEntry[],\n displayMode: VarianceDisplayMode,\n) => withNumberDefault(0)(max(getDisplayValues(entries, displayMode)))\n\nconst getLowerDomain = (\n entries: readonly VarianceEntry[],\n displayMode: VarianceDisplayMode,\n) => Math.min(0, getMinValue(entries, displayMode))\n\nconst getUpperDomain = (\n entries: readonly VarianceEntry[],\n displayMode: VarianceDisplayMode,\n) => Math.max(0, getMaxValue(entries, displayMode))\n\nconst getCategory = (entry: VarianceEntry) => entry.category\n\nconst getFavourabilityClassName: (favourability: Favourability) => string = cond([\n [(candidate: Favourability) => candidate === 'Favourable', always('favourable')],\n [(candidate: Favourability) => candidate === 'Unfavourable', always('unfavourable')],\n [always(true), always('on-budget')],\n])\n\nconst getValueY = (\n plotBottom: number,\n displayValue: number,\n y: number,\n height: number,\n) =>\n ifElse(\n (candidate: number) => candidate < 0,\n always(Math.min(plotBottom - 6, y + height + 12)),\n always(Math.max(VARIANCE_CHART_MARGIN.top + 10, y - 6)),\n )(displayValue)\n\nexport const buildVarianceChartModel = (\n entries: readonly VarianceEntry[],\n width: number,\n height: number,\n displayMode: VarianceChartProps['displayMode'],\n): VarianceChartModel => {\n const plotBottom = height - VARIANCE_CHART_MARGIN.bottom\n const xScale = scaleBand<string>()\n .domain(map(prop('category'), [...entries]))\n .range([VARIANCE_CHART_MARGIN.left, width - VARIANCE_CHART_MARGIN.right])\n .padding(0.22)\n const yScale = scaleLinear()\n .domain([getLowerDomain(entries, displayMode), getUpperDomain(entries, displayMode)])\n .nice()\n .range([plotBottom, VARIANCE_CHART_MARGIN.top])\n const baselineY = yScale(0)\n const toRenderedEntry = (entry: VarianceEntry): RenderedVarianceEntry => {\n const displayValue = getDisplayValue(displayMode)(entry)\n const y = Math.min(yScale(displayValue), baselineY)\n const entryHeight = Math.abs(baselineY - yScale(displayValue))\n\n return {\n ...entry,\n displayValue,\n favourabilityClassName: getFavourabilityClassName(entry.favourability),\n x: withNumberDefault(VARIANCE_CHART_MARGIN.left)(xScale(getCategory(entry))),\n y,\n width: xScale.bandwidth(),\n height: entryHeight,\n valueY: getValueY(plotBottom, displayValue, y, entryHeight),\n }\n }\n\n return {\n baselineY,\n plotBottom,\n yTicks: yScale.ticks(5),\n entries: map(toRenderedEntry, [...entries]),\n yScale,\n }\n}\n","import { matchOption } from '@/shared'\n\nimport type { VarianceChartProps } from '../VarianceChart.types'\n\nexport function VarianceChartCaption({ caption }: Pick<VarianceChartProps, 'caption'>) {\n return matchOption(caption, {\n none: () => null,\n some: (value) => (\n <figcaption className=\"pristine-variance-chart__caption\">{value}</figcaption>\n ),\n })\n}\n","import { VARIANCE_CHART_MARGIN } from '../VarianceChart.model'\nimport type { VarianceChartModel } from '../VarianceChart.model'\n\ntype VarianceChartAxesProps = {\n readonly chart: VarianceChartModel\n readonly width: number\n}\n\nexport function VarianceChartAxes({ chart, width }: VarianceChartAxesProps) {\n return (\n <>\n <line\n className=\"pristine-variance-chart__axis\"\n x1={VARIANCE_CHART_MARGIN.left}\n x2={width - VARIANCE_CHART_MARGIN.right}\n y1={chart.baselineY}\n y2={chart.baselineY}\n />\n <line\n className=\"pristine-variance-chart__axis\"\n x1={VARIANCE_CHART_MARGIN.left}\n x2={VARIANCE_CHART_MARGIN.left}\n y1={VARIANCE_CHART_MARGIN.top}\n y2={chart.plotBottom}\n />\n </>\n )\n}\n","import { ifElse } from '@/shared/fp'\n\nimport type { RenderedVarianceEntry } from '../VarianceChart.model'\n\ntype VarianceChartBarProps = {\n readonly entry: RenderedVarianceEntry\n}\n\nconst getHitAreaY = ifElse(\n (entry: RenderedVarianceEntry) => entry.height > 0,\n (entry: RenderedVarianceEntry) => entry.y,\n (entry: RenderedVarianceEntry) => entry.y - 4,\n)\n\nexport function VarianceChartBar({ entry }: VarianceChartBarProps) {\n return (\n <>\n <rect\n className={`pristine-variance-chart__bar pristine-variance-chart__bar--${entry.favourabilityClassName}`}\n x={entry.x}\n y={entry.y}\n width={entry.width}\n height={entry.height}\n aria-hidden=\"true\"\n />\n <rect\n className=\"pristine-variance-chart__bar-hit-area\"\n x={entry.x}\n y={getHitAreaY(entry)}\n width={entry.width}\n height={Math.max(entry.height, 8)}\n aria-hidden=\"true\"\n />\n </>\n )\n}\n","import type { RenderedVarianceEntry } from '../VarianceChart.model'\n\ntype VarianceChartCategoryLabelProps = {\n readonly entry: RenderedVarianceEntry\n readonly height: number\n}\n\nexport function VarianceChartCategoryLabel({ entry, height }: VarianceChartCategoryLabelProps) {\n return (\n <text\n className=\"pristine-variance-chart__label\"\n x={entry.x + entry.width / 2}\n y={height - 12}\n textAnchor=\"middle\"\n >\n {entry.category}\n </text>\n )\n}\n","import type { RenderedVarianceEntry } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\nimport { always, ifElse } from '@/shared/fp'\n\ntype VarianceChartValueLabelProps = Pick<\n VarianceChartProps,\n 'displayMode' | 'formatPercentage' | 'formatVariance'\n> & {\n readonly entry: RenderedVarianceEntry\n}\n\nconst getLabel = (\n entry: RenderedVarianceEntry,\n displayMode: VarianceChartProps['displayMode'],\n formatVariance: VarianceChartProps['formatVariance'],\n formatPercentage: VarianceChartProps['formatPercentage'],\n) =>\n ifElse(\n (candidate: VarianceChartProps['displayMode']) => candidate === 'percentage',\n always(formatPercentage(entry.variancePercentage)),\n always(formatVariance(entry.variance)),\n )(displayMode)\n\nexport function VarianceChartValueLabel({\n displayMode,\n entry,\n formatPercentage,\n formatVariance,\n}: VarianceChartValueLabelProps) {\n return (\n <text\n className=\"pristine-variance-chart__value\"\n x={entry.x + entry.width / 2}\n y={entry.valueY}\n textAnchor=\"middle\"\n >\n {getLabel(entry, displayMode, formatVariance, formatPercentage)}\n </text>\n )\n}\n","import type { KeyboardEvent } from 'react'\n\nimport { classNames } from '@/shared'\nimport { always, ifElse } from '@/shared/fp'\n\nimport type { RenderedVarianceEntry } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\n\nimport { VarianceChartBar } from './VarianceChartBar'\nimport { VarianceChartCategoryLabel } from './VarianceChartCategoryLabel'\nimport { VarianceChartValueLabel } from './VarianceChartValueLabel'\n\ntype VarianceChartEntryProps = Pick<\n VarianceChartProps,\n 'displayMode' | 'formatPercentage' | 'formatValue' | 'formatVariance' | 'showValues'\n> & {\n readonly active: boolean\n readonly entry: RenderedVarianceEntry\n readonly height: number\n readonly onActivate: () => void\n readonly onDeactivate: () => void\n}\n\nconst getDisplayedVariance = (\n entry: RenderedVarianceEntry,\n displayMode: VarianceChartProps['displayMode'],\n formatVariance: VarianceChartProps['formatVariance'],\n formatPercentage: VarianceChartProps['formatPercentage'],\n) =>\n ifElse(\n (candidate: VarianceChartProps['displayMode']) => candidate === 'percentage',\n always(formatPercentage(entry.variancePercentage)),\n always(formatVariance(entry.variance)),\n )(displayMode)\n\nexport function VarianceChartEntry({\n active,\n displayMode,\n entry,\n formatPercentage,\n formatValue,\n formatVariance,\n height,\n onActivate,\n onDeactivate,\n showValues,\n}: VarianceChartEntryProps) {\n const renderValueLabel = ifElse(\n always(showValues),\n () => (\n <VarianceChartValueLabel\n displayMode={displayMode}\n entry={entry}\n formatPercentage={formatPercentage}\n formatVariance={formatVariance}\n />\n ),\n always(null),\n )\n const activeClassName = ifElse(\n always(active),\n always('pristine-variance-chart__entry--active'),\n always(''),\n )(active)\n const accessibleLabel = [\n `${entry.category}: ${getDisplayedVariance(entry, displayMode, formatVariance, formatPercentage)}`,\n `actual ${formatValue(entry.actualValue)}`,\n `budget ${formatValue(entry.budgetValue)}`,\n entry.favourability,\n ].join(', ')\n const handleKeyDown = (event: KeyboardEvent<SVGGElement>) =>\n ifElse(\n (candidate: KeyboardEvent<SVGGElement>) => candidate.key === 'Escape',\n () => onDeactivate(),\n always(undefined),\n )(event)\n\n return (\n <g\n className={classNames([\n 'pristine-variance-chart__entry',\n activeClassName,\n ])}\n role=\"img\"\n aria-label={accessibleLabel}\n tabIndex={0}\n onBlur={onDeactivate}\n onClick={onActivate}\n onFocus={onActivate}\n onKeyDown={handleKeyDown}\n onMouseEnter={onActivate}\n onMouseLeave={onDeactivate}\n >\n <VarianceChartBar entry={entry} />\n {renderValueLabel()}\n <VarianceChartCategoryLabel entry={entry} height={height} />\n </g>\n )\n}\n","import type { VarianceChartModel } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\n\nimport { VarianceChartEntry } from './VarianceChartEntry'\n\ntype VarianceChartEntriesProps = Pick<\n VarianceChartProps,\n | 'displayMode'\n | 'formatPercentage'\n | 'formatValue'\n | 'formatVariance'\n | 'showValues'\n> & {\n readonly activeCategory: string | null\n readonly chart: VarianceChartModel\n readonly height: number\n readonly onActivate: (category: string) => void\n readonly onDeactivate: () => void\n}\n\nexport function VarianceChartEntries({\n activeCategory,\n chart,\n displayMode,\n formatPercentage,\n formatValue,\n formatVariance,\n height,\n onActivate,\n onDeactivate,\n showValues,\n}: VarianceChartEntriesProps) {\n return chart.entries.map((entry) => (\n <VarianceChartEntry\n active={activeCategory === entry.category}\n displayMode={displayMode}\n entry={entry}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n formatVariance={formatVariance}\n height={height}\n key={entry.category}\n onActivate={() => onActivate(entry.category)}\n onDeactivate={onDeactivate}\n showValues={showValues}\n />\n ))\n}\n","import { VARIANCE_CHART_MARGIN } from '../VarianceChart.model'\nimport type { VarianceChartModel } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\nimport { always, ifElse } from '@/shared/fp'\n\ntype VarianceChartGridLinesProps = Pick<\n VarianceChartProps,\n 'displayMode' | 'formatPercentage' | 'formatVariance'\n> & {\n readonly chart: VarianceChartModel\n readonly width: number\n}\n\nconst getTickLabel = (\n displayMode: VarianceChartProps['displayMode'],\n formatVariance: VarianceChartProps['formatVariance'],\n formatPercentage: VarianceChartProps['formatPercentage'],\n) => (tick: number) =>\n ifElse(\n (candidate: VarianceChartProps['displayMode']) => candidate === 'percentage',\n always(formatPercentage(tick)),\n always(formatVariance(tick)),\n )(displayMode)\n\nexport function VarianceChartGridLines({\n chart,\n displayMode,\n formatPercentage,\n formatVariance,\n width,\n}: VarianceChartGridLinesProps) {\n const formatTick = getTickLabel(displayMode, formatVariance, formatPercentage)\n\n return chart.yTicks.map((tick) => (\n <g className=\"pristine-variance-chart__grid-line\" key={tick}>\n <line\n x1={VARIANCE_CHART_MARGIN.left}\n x2={width - VARIANCE_CHART_MARGIN.right}\n y1={chart.yScale(tick)}\n y2={chart.yScale(tick)}\n />\n <text\n className=\"pristine-variance-chart__tick-label\"\n x={VARIANCE_CHART_MARGIN.left - 8}\n y={chart.yScale(tick)}\n textAnchor=\"end\"\n >\n {formatTick(tick)}\n </text>\n </g>\n ))\n}\n","import { VARIANCE_CHART_MARGIN } from '../VarianceChart.model'\nimport type { VarianceChartModel } from '../VarianceChart.model'\n\ntype VarianceChartPlotAreaProps = {\n readonly chart: VarianceChartModel\n readonly width: number\n}\n\nexport function VarianceChartPlotArea({ chart, width }: VarianceChartPlotAreaProps) {\n return (\n <rect\n className=\"pristine-variance-chart__plot\"\n x={VARIANCE_CHART_MARGIN.left}\n y={VARIANCE_CHART_MARGIN.top}\n width={width - VARIANCE_CHART_MARGIN.left - VARIANCE_CHART_MARGIN.right}\n height={chart.plotBottom - VARIANCE_CHART_MARGIN.top}\n />\n )\n}\n","import type { RenderedVarianceEntry } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\nimport { always, ifElse } from '@/shared/fp'\n\ntype VarianceChartTooltipProps = Pick<\n VarianceChartProps,\n 'displayMode' | 'formatPercentage' | 'formatValue' | 'formatVariance' | 'height' | 'width'\n> & {\n readonly entry: RenderedVarianceEntry\n}\n\nconst TOOLTIP_LINE_HEIGHT = 14\nconst TOOLTIP_PADDING_X = 8\nconst TOOLTIP_PADDING_Y = 6\nconst TOOLTIP_MIN_WIDTH = 88\nconst TOOLTIP_CHAR_WIDTH = 6.5\nconst VIEWBOX_PADDING = 4\n\nconst getDisplayedVariance = (\n entry: RenderedVarianceEntry,\n displayMode: VarianceChartProps['displayMode'],\n formatVariance: VarianceChartProps['formatVariance'],\n formatPercentage: VarianceChartProps['formatPercentage'],\n) =>\n ifElse(\n (candidate: VarianceChartProps['displayMode']) => candidate === 'percentage',\n always(formatPercentage(entry.variancePercentage)),\n always(formatVariance(entry.variance)),\n )(displayMode)\n\nconst getTooltipWidth = (labels: readonly string[]) =>\n Math.max(\n TOOLTIP_MIN_WIDTH,\n Math.max(...labels.map((label) => label.length)) * TOOLTIP_CHAR_WIDTH + TOOLTIP_PADDING_X * 2,\n )\n\nconst getTooltipHeight = (labels: readonly string[]) =>\n labels.length * TOOLTIP_LINE_HEIGHT + TOOLTIP_PADDING_Y * 2\n\nconst clamp = (minimum: number, maximum: number, value: number) =>\n Math.min(Math.max(value, minimum), maximum)\n\nexport function VarianceChartTooltip({\n displayMode,\n entry,\n formatPercentage,\n formatValue,\n formatVariance,\n height,\n width,\n}: VarianceChartTooltipProps) {\n const labels = [\n `${entry.category}: ${getDisplayedVariance(entry, displayMode, formatVariance, formatPercentage)}`,\n `Actual ${formatValue(entry.actualValue)}`,\n `Budget ${formatValue(entry.budgetValue)}`,\n entry.favourability,\n ]\n const tooltipWidth = getTooltipWidth(labels)\n const tooltipHeight = getTooltipHeight(labels)\n const x = clamp(\n VIEWBOX_PADDING,\n width - tooltipWidth - VIEWBOX_PADDING,\n entry.x + entry.width / 2 - tooltipWidth / 2,\n )\n const y = clamp(\n VIEWBOX_PADDING,\n height - tooltipHeight - VIEWBOX_PADDING,\n entry.valueY - tooltipHeight / 2,\n )\n\n return (\n <g className=\"pristine-variance-chart__tooltip\" aria-hidden=\"true\">\n <rect\n className=\"pristine-variance-chart__tooltip-background\"\n x={x}\n y={y}\n width={tooltipWidth}\n height={tooltipHeight}\n rx={4}\n />\n {labels.map((label, index) => (\n <text\n className=\"pristine-variance-chart__tooltip-text\"\n x={x + tooltipWidth / 2}\n y={y + TOOLTIP_PADDING_Y + TOOLTIP_LINE_HEIGHT * index + TOOLTIP_LINE_HEIGHT / 2}\n key={label}\n textAnchor=\"middle\"\n >\n {label}\n </text>\n ))}\n </g>\n )\n}\n","import { useState } from 'react'\n\nimport type { VarianceChartModel } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\n\nimport { VarianceChartAxes } from './VarianceChartAxes'\nimport { VarianceChartEntries } from './VarianceChartEntries'\nimport { VarianceChartGridLines } from './VarianceChartGridLines'\nimport { VarianceChartPlotArea } from './VarianceChartPlotArea'\nimport { VarianceChartTooltip } from './VarianceChartTooltip'\n\ntype VarianceChartSvgProps = Pick<\n VarianceChartProps,\n | 'ariaLabel'\n | 'displayMode'\n | 'formatPercentage'\n | 'formatValue'\n | 'formatVariance'\n | 'height'\n | 'showValues'\n | 'width'\n> & {\n readonly chart: VarianceChartModel\n}\n\nexport function VarianceChartSvg({\n ariaLabel,\n chart,\n displayMode,\n formatPercentage,\n formatValue,\n formatVariance,\n height,\n showValues,\n width,\n}: VarianceChartSvgProps) {\n const [activeCategory, setActiveCategory] = useState<string | null>(null)\n const activeEntries = chart.entries.filter((entry) => entry.category === activeCategory)\n\n return (\n <svg\n className=\"pristine-variance-chart__svg\"\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={ariaLabel}\n >\n <VarianceChartPlotArea chart={chart} width={width} />\n <VarianceChartGridLines\n chart={chart}\n displayMode={displayMode}\n formatPercentage={formatPercentage}\n formatVariance={formatVariance}\n width={width}\n />\n <VarianceChartAxes chart={chart} width={width} />\n <VarianceChartEntries\n activeCategory={activeCategory}\n chart={chart}\n displayMode={displayMode}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n formatVariance={formatVariance}\n height={height}\n onActivate={setActiveCategory}\n onDeactivate={() => setActiveCategory(null)}\n showValues={showValues}\n />\n {activeEntries.map((entry) => (\n <VarianceChartTooltip\n displayMode={displayMode}\n entry={entry}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n formatVariance={formatVariance}\n height={height}\n key={entry.category}\n width={width}\n />\n ))}\n </svg>\n )\n}\n","import { classNames } from '@/shared'\n\nimport type { VarianceChartModel } from '../VarianceChart.model'\nimport type { VarianceChartProps } from '../VarianceChart.types'\n\nimport { VarianceChartCaption } from './VarianceChartCaption'\nimport { VarianceChartSvg } from './VarianceChartSvg'\n\ntype VarianceChartFigureProps = Pick<\n VarianceChartProps,\n | 'ariaLabel'\n | 'caption'\n | 'className'\n | 'displayMode'\n | 'formatPercentage'\n | 'formatValue'\n | 'formatVariance'\n | 'height'\n | 'showValues'\n | 'width'\n> & {\n readonly chart: VarianceChartModel\n}\n\nexport function VarianceChartFigure({\n ariaLabel,\n caption,\n chart,\n className,\n displayMode,\n formatPercentage,\n formatValue,\n formatVariance,\n height,\n showValues,\n width,\n}: VarianceChartFigureProps) {\n return (\n <figure className={classNames(['pristine-variance-chart', className])} aria-label={ariaLabel}>\n <VarianceChartSvg\n ariaLabel={ariaLabel}\n chart={chart}\n displayMode={displayMode}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n formatVariance={formatVariance}\n height={height}\n showValues={showValues}\n width={width}\n />\n <VarianceChartCaption caption={caption} />\n </figure>\n )\n}\n","import { useMemo } from 'react'\n\nimport { ChartError } from '../chart-error'\nimport { classNames, matchResult } from '../shared'\n\nimport { computeVarianceChart } from './VarianceChart.domain'\nimport { buildVarianceChartModel } from './VarianceChart.model'\nimport { VarianceChartFigure } from './components/VarianceChartFigure'\nimport type { VarianceChartProps } from './VarianceChart.types'\n\nexport function VarianceChart({\n data,\n polarity,\n width,\n height,\n ariaLabel,\n className,\n caption,\n displayMode,\n showValues,\n formatValue,\n formatVariance,\n formatPercentage,\n}: VarianceChartProps) {\n const result = useMemo(\n () => computeVarianceChart({ data, polarity }),\n [data, polarity],\n )\n\n return matchResult(result, {\n error: (error) => (\n <ChartError\n className={classNames(['pristine-variance-chart__error', className])}\n title=\"Chart unavailable\"\n message={error.message}\n details={error.details}\n role=\"alert\"\n />\n ),\n ok: (entries) => {\n const chart = buildVarianceChartModel(entries, width, height, displayMode)\n\n return (\n <VarianceChartFigure\n ariaLabel={ariaLabel}\n caption={caption}\n chart={chart}\n className={className}\n displayMode={displayMode}\n formatPercentage={formatPercentage}\n formatValue={formatValue}\n formatVariance={formatVariance}\n height={height}\n showValues={showValues}\n width={width}\n />\n )\n },\n })\n}\n","import { none } from '../shared'\nimport { cond, ifElse } from '../shared/fp'\n\nimport type { VarianceChartProps } from './VarianceChart.types'\n\nexport const DEFAULT_VARIANCE_CHART_DISPLAY_MODE = 'absolute'\n\nexport const formatVarianceChartNumber = (value: number) =>\n ifElse(\n Number.isInteger,\n String,\n (candidate: number) => candidate.toFixed(2).replace(/\\.?0+$/, ''),\n )(value)\n\nexport const formatVarianceChartSignedNumber = (value: number) => {\n const sign = cond([\n [(candidate: number) => candidate > 0, () => '+'],\n [(candidate: number) => candidate < 0, () => '-'],\n [() => true, () => ''],\n ])(value)\n\n return `${sign}${formatVarianceChartNumber(Math.abs(value))}`\n}\n\nexport const formatVarianceChartPercentage = (percentage: number) =>\n `${formatVarianceChartSignedNumber(percentage)}%`\n\nexport const DEFAULT_VARIANCE_CHART_VIEW_PROPS = {\n width: 480,\n height: 280,\n ariaLabel: 'Variance chart',\n className: '',\n caption: none,\n polarity: none,\n displayMode: DEFAULT_VARIANCE_CHART_DISPLAY_MODE,\n showValues: false,\n formatValue: formatVarianceChartNumber,\n formatVariance: formatVarianceChartSignedNumber,\n formatPercentage: formatVarianceChartPercentage,\n} satisfies Omit<VarianceChartProps, 'data'>\n"]}