@d3plus/core 3.1.1 → 3.1.3
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/README.md +5092 -5092
- package/es/index.js +2 -0
- package/es/index.js.map +1 -0
- package/es/src/charts/AreaPlot.js +2 -0
- package/es/src/charts/AreaPlot.js.map +1 -0
- package/es/src/charts/BarChart.js +2 -0
- package/es/src/charts/BarChart.js.map +1 -0
- package/es/src/charts/BoxWhisker.js +2 -0
- package/es/src/charts/BoxWhisker.js.map +1 -0
- package/es/src/charts/BumpChart.js +2 -0
- package/es/src/charts/BumpChart.js.map +1 -0
- package/es/src/charts/Donut.js +2 -0
- package/es/src/charts/Donut.js.map +1 -0
- package/es/src/charts/Geomap.js +2 -0
- package/es/src/charts/Geomap.js.map +1 -0
- package/es/src/charts/LinePlot.js +2 -0
- package/es/src/charts/LinePlot.js.map +1 -0
- package/es/src/charts/Matrix.js +2 -0
- package/es/src/charts/Matrix.js.map +1 -0
- package/es/src/charts/Network.js +2 -0
- package/es/src/charts/Network.js.map +1 -0
- package/es/src/charts/Pack.js +2 -0
- package/es/src/charts/Pack.js.map +1 -0
- package/es/src/charts/Pie.js +2 -0
- package/es/src/charts/Pie.js.map +1 -0
- package/es/src/charts/Plot.js +2 -0
- package/es/src/charts/Plot.js.map +1 -0
- package/es/src/charts/Priestley.js +2 -0
- package/es/src/charts/Priestley.js.map +1 -0
- package/es/src/charts/Radar.js +2 -0
- package/es/src/charts/Radar.js.map +1 -0
- package/es/src/charts/RadialMatrix.js +2 -0
- package/es/src/charts/RadialMatrix.js.map +1 -0
- package/es/src/charts/Rings.js +2 -0
- package/es/src/charts/Rings.js.map +1 -0
- package/es/src/charts/Sankey.js +2 -0
- package/es/src/charts/Sankey.js.map +1 -0
- package/es/src/charts/StackedArea.js +2 -0
- package/es/src/charts/StackedArea.js.map +1 -0
- package/es/src/charts/Tree.js +2 -0
- package/es/src/charts/Tree.js.map +1 -0
- package/es/src/charts/Treemap.js +2 -0
- package/es/src/charts/Treemap.js.map +1 -0
- package/es/src/charts/Viz.js +2 -0
- package/es/src/charts/Viz.js.map +1 -0
- package/es/src/charts/drawSteps/drawAttribution.js +2 -0
- package/es/src/charts/drawSteps/drawAttribution.js.map +1 -0
- package/es/src/charts/drawSteps/drawBack.js +2 -0
- package/es/src/charts/drawSteps/drawBack.js.map +1 -0
- package/es/src/charts/drawSteps/drawColorScale.js +2 -0
- package/es/src/charts/drawSteps/drawColorScale.js.map +1 -0
- package/es/src/charts/drawSteps/drawLegend.js +2 -0
- package/es/src/charts/drawSteps/drawLegend.js.map +1 -0
- package/es/src/charts/drawSteps/drawSubtitle.js +2 -0
- package/es/src/charts/drawSteps/drawSubtitle.js.map +1 -0
- package/es/src/charts/drawSteps/drawTimeline.js +2 -0
- package/es/src/charts/drawSteps/drawTimeline.js.map +1 -0
- package/es/src/charts/drawSteps/drawTitle.js +2 -0
- package/es/src/charts/drawSteps/drawTitle.js.map +1 -0
- package/es/src/charts/drawSteps/drawTotal.js +2 -0
- package/es/src/charts/drawSteps/drawTotal.js.map +1 -0
- package/es/src/charts/drawSteps/zoomControls.js +2 -0
- package/es/src/charts/drawSteps/zoomControls.js.map +1 -0
- package/es/src/charts/events/click.legend.js +2 -0
- package/es/src/charts/events/click.legend.js.map +1 -0
- package/es/src/charts/events/click.shape.js +2 -0
- package/es/src/charts/events/click.shape.js.map +1 -0
- package/es/src/charts/events/mouseenter.js +2 -0
- package/es/src/charts/events/mouseenter.js.map +1 -0
- package/es/src/charts/events/mouseleave.js +2 -0
- package/es/src/charts/events/mouseleave.js.map +1 -0
- package/es/src/charts/events/mousemove.legend.js +2 -0
- package/es/src/charts/events/mousemove.legend.js.map +1 -0
- package/es/src/charts/events/mousemove.shape.js +2 -0
- package/es/src/charts/events/mousemove.shape.js.map +1 -0
- package/es/src/charts/events/touchstart.body.js +2 -0
- package/es/src/charts/events/touchstart.body.js.map +1 -0
- package/es/src/charts/helpers/matrixData.js +2 -0
- package/es/src/charts/helpers/matrixData.js.map +1 -0
- package/es/src/charts/helpers/tileAttributions.js +2 -0
- package/es/src/charts/helpers/tileAttributions.js.map +1 -0
- package/es/src/charts/index.js +2 -0
- package/es/src/charts/index.js.map +1 -0
- package/es/src/charts/plotBuffers/Bar.js +2 -0
- package/es/src/charts/plotBuffers/Bar.js.map +1 -0
- package/es/src/charts/plotBuffers/Box.js +2 -0
- package/es/src/charts/plotBuffers/Box.js.map +1 -0
- package/es/src/charts/plotBuffers/Circle.js +2 -0
- package/es/src/charts/plotBuffers/Circle.js.map +1 -0
- package/es/src/charts/plotBuffers/Line.js +2 -0
- package/es/src/charts/plotBuffers/Line.js.map +1 -0
- package/es/src/charts/plotBuffers/Rect.js +2 -0
- package/es/src/charts/plotBuffers/Rect.js.map +1 -0
- package/es/src/charts/plotBuffers/discreteBuffer.js +2 -0
- package/es/src/charts/plotBuffers/discreteBuffer.js.map +1 -0
- package/es/src/charts/plotBuffers/numericBuffer.js +2 -0
- package/es/src/charts/plotBuffers/numericBuffer.js.map +1 -0
- package/es/src/components/Axis.js +2 -0
- package/es/src/components/Axis.js.map +1 -0
- package/es/src/components/AxisBottom.js +2 -0
- package/es/src/components/AxisBottom.js.map +1 -0
- package/es/src/components/AxisLeft.js +2 -0
- package/es/src/components/AxisLeft.js.map +1 -0
- package/es/src/components/AxisRight.js +2 -0
- package/es/src/components/AxisRight.js.map +1 -0
- package/es/src/components/AxisTop.js +2 -0
- package/es/src/components/AxisTop.js.map +1 -0
- package/es/src/components/ColorScale.js +2 -0
- package/es/src/components/ColorScale.js.map +1 -0
- package/es/src/components/Legend.js +2 -0
- package/es/src/components/Legend.js.map +1 -0
- package/es/src/components/Message.js +2 -0
- package/es/src/components/Message.js.map +1 -0
- package/es/src/components/TextBox.js +2 -0
- package/es/src/components/TextBox.js.map +1 -0
- package/es/src/components/Timeline.js +2 -0
- package/es/src/components/Timeline.js.map +1 -0
- package/es/src/components/Tooltip.js +2 -0
- package/es/src/components/Tooltip.js.map +1 -0
- package/es/src/components/index.js +2 -0
- package/es/src/components/index.js.map +1 -0
- package/es/src/shapes/Area.js +2 -0
- package/es/src/shapes/Area.js.map +1 -0
- package/es/src/shapes/Bar.js +2 -0
- package/es/src/shapes/Bar.js.map +1 -0
- package/es/src/shapes/Box.js +2 -0
- package/es/src/shapes/Box.js.map +1 -0
- package/es/src/shapes/Circle.js +2 -0
- package/es/src/shapes/Circle.js.map +1 -0
- package/es/src/shapes/Image.js +2 -0
- package/es/src/shapes/Image.js.map +1 -0
- package/es/src/shapes/Line.js +2 -0
- package/es/src/shapes/Line.js.map +1 -0
- package/es/src/shapes/Path.js +2 -0
- package/es/src/shapes/Path.js.map +1 -0
- package/es/src/shapes/Rect.js +2 -0
- package/es/src/shapes/Rect.js.map +1 -0
- package/es/src/shapes/Shape.js +2 -0
- package/es/src/shapes/Shape.js.map +1 -0
- package/es/src/shapes/Whisker.js +2 -0
- package/es/src/shapes/Whisker.js.map +1 -0
- package/es/src/shapes/index.js +2 -0
- package/es/src/shapes/index.js.map +1 -0
- package/es/src/utils/AccessorFn.js +2 -0
- package/es/src/utils/AccessorFn.js.map +1 -0
- package/es/src/utils/BaseClass.js +2 -0
- package/es/src/utils/BaseClass.js.map +1 -0
- package/es/src/utils/D3plusConfig.js +2 -0
- package/es/src/utils/D3plusConfig.js.map +1 -0
- package/es/src/utils/RESET.js +2 -0
- package/es/src/utils/RESET.js.map +1 -0
- package/es/src/utils/accessor.js +2 -0
- package/es/src/utils/accessor.js.map +1 -0
- package/es/src/utils/configPrep.js +2 -0
- package/es/src/utils/configPrep.js.map +1 -0
- package/es/src/utils/constant.js +2 -0
- package/es/src/utils/constant.js.map +1 -0
- package/es/src/utils/getProp.js +2 -0
- package/es/src/utils/getProp.js.map +1 -0
- package/es/src/utils/index.js +2 -0
- package/es/src/utils/index.js.map +1 -0
- package/package.json +8 -8
- package/umd/d3plus-core.full.js +4197 -507
- package/umd/d3plus-core.full.js.map +1 -1
- package/umd/d3plus-core.full.min.js +792 -765
- package/umd/d3plus-core.js +1 -1
- package/umd/d3plus-core.min.js +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Timeline.ts"],"sourcesContent":["import {extent, max, min} from \"d3-array\";\nimport {brushX} from \"d3-brush\";\nimport {scaleTime} from \"d3-scale\";\nimport {pointers} from \"d3-selection\";\n\nimport {colorContrast, colorDefaults} from \"@d3plus/color\";\nimport {assign, attrize, backgroundColor, date, elem, textWidth} from \"@d3plus/dom\";\nimport {formatDate} from \"@d3plus/format\";\nimport {locale} from \"@d3plus/locales\";\nimport {closest} from \"@d3plus/math\";\nimport {textWrap} from \"@d3plus/text\";\n\nimport {Axis, TextBox} from \"../components/index.js\";\nimport {configPrep, constant} from \"../utils/index.js\";\n\nconst colorMid = \"#bbb\";\n\n/**\n Creates an interactive timeline brush component for selecting time periods within a visualization.\n*/\nexport default class Timeline extends Axis {\n _brushing: boolean;\n \n _brushFilter: (event: unknown) => boolean;\n _brushMin: () => number;\n _buttonAlign: string;\n _buttonBehavior: string;\n _buttonBehaviorCurrent: string;\n _buttonPadding: number;\n _buttonHeight: number;\n \n _handleConfig: Record<string, unknown>;\n _handleSize: number;\n _hiddenHandles: boolean;\n \n declare _on: Record<string, (...args: unknown[]) => unknown>;\n _playButton: boolean;\n _playButtonClass: TextBox;\n \n _playButtonConfig: Record<string, unknown>;\n _playButtonInterval: number;\n _playTimer!: ReturnType<typeof setInterval> | false;\n _selection: unknown;\n \n _selectionConfig: Record<string, unknown>;\n _snapping: boolean;\n \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _brush: any;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _brushGroup: any;\n _paddingLeft: number;\n _ticksWidth: number;\n\n /**\n Invoked when creating a new class instance, and overrides any default parameters inherited from Axis.\n @private\n*/\n constructor() {\n super();\n\n this._barConfig = assign({}, this._barConfig, {\n stroke: () =>\n this._buttonBehaviorCurrent === \"buttons\" ? \"transparent\" : colorMid,\n \"stroke-width\": () => (this._buttonBehaviorCurrent === \"buttons\" ? 0 : 1),\n });\n this._brushing = true;\n \n this._brushFilter = (event: unknown) => {\n const e = event as Record<string, unknown>;\n return !e.button && (e.detail as number) < 2;\n };\n this._brushMin = constant(1);\n this._buttonAlign = \"middle\";\n this._buttonBehavior = \"auto\";\n this._buttonPadding = 10;\n this._buttonHeight = 24;\n this._domain = [2001, 2010];\n this._gridSize = 0;\n this._handleConfig = {\n fill: colorDefaults.light,\n stroke: \"#228be6\",\n \"stroke-width\": 2,\n rx: 2,\n ry: 2,\n };\n this._handleSize = 6;\n this._height = 100;\n this._labelOffset = false;\n this._on = {};\n this.orient(\"bottom\");\n this._playButton = true;\n this._playButtonClass = new TextBox()\n .on(\"click\", () => {\n // if playing, pause\n if (this._playTimer) {\n if (this._playTimer) clearInterval(this._playTimer);\n this._playTimer = false;\n this._playButtonClass.render();\n }\n // otherwise, start playing\n else {\n let firstTime = true;\n const nextYear = () => {\n let selection: unknown[] = (this._selection || [\n this._domain[this._domain.length - 1],\n ]) as unknown[];\n if (!(selection instanceof Array)) selection = [selection];\n selection = (selection as (string | number | false | undefined)[]).map(date).map(Number);\n if (selection.length === 1) selection.push(selection[0]);\n const ticks = this._ticks!.map(Number);\n const firstIndex = ticks.indexOf(selection[0] as number);\n const lastIndex = ticks.indexOf(selection[selection.length - 1] as number);\n if (lastIndex === ticks.length - 1) {\n if (!firstTime) {\n if (this._playTimer) clearInterval(this._playTimer);\n this._playTimer = false;\n this._playButtonClass.render();\n } else {\n this.selection([\n this._ticks![0],\n this._ticks![lastIndex - firstIndex],\n ]).render();\n }\n } else {\n if (lastIndex + 1 === ticks.length - 1) {\n if (this._playTimer) clearInterval(this._playTimer);\n this._playTimer = false;\n }\n this.selection([\n this._ticks![firstIndex + 1],\n this._ticks![lastIndex + 1],\n ]).render();\n }\n firstTime = false;\n };\n this._playTimer = setInterval(nextYear, this._playButtonInterval);\n nextYear();\n }\n })\n .on(\"mousemove\", () =>\n this._playButtonClass.select().style(\"cursor\", \"pointer\"),\n );\n this._playButtonConfig = {\n fontColor: colorDefaults.dark,\n fontSize: 15,\n text: () => (this._playTimer ? \"\\u23F8\" : \"\\u23F5\"),\n textAnchor: \"middle\",\n verticalAlign: \"middle\",\n };\n this._playButtonInterval = 1000;\n this._selectionConfig = {\n fill: \"#228be6\",\n \"fill-opacity\": () =>\n this._buttonBehaviorCurrent === \"buttons\" ? 0.3 : 1,\n \"stroke-width\": 0,\n };\n this._shape = \"Rect\";\n this._shapeConfig = assign({}, this._shapeConfig, {\n labelBounds: (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? {\n x: (d.labelBounds as Record<string, unknown>).x,\n y: -this._buttonHeight / 2 + 1,\n width: (d.labelBounds as Record<string, unknown>).width,\n height: this._buttonHeight,\n }\n : d.labelBounds,\n labelConfig: {\n fontColor: () => {\n const bg = this._select ? backgroundColor(this._select.node()) : \"rgb(255, 255, 255)\";\n return colorContrast(bg);\n },\n fontSize: () => 12,\n verticalAlign: () =>\n this._buttonBehaviorCurrent === \"buttons\" ? \"middle\" : \"top\",\n },\n fill: () =>\n this._buttonBehaviorCurrent === \"buttons\" ? \"#fff\" : colorMid,\n stroke: () =>\n this._buttonBehaviorCurrent === \"buttons\" ? colorMid : \"transparent\",\n height: (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._buttonHeight\n : d.tick\n ? this._handleSize\n : 0,\n width: (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._ticksWidth / this._availableTicks.length\n : d.tick\n ? this._domain.map(Number).includes(d.id as number)\n ? 2\n : 1\n : 0,\n y: (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._align === \"middle\"\n ? this._height / 2\n : this._align === \"start\"\n ? this._margin.top + this._buttonHeight / 2\n : this._height - this._buttonHeight / 2 - this._margin.bottom\n : d.y,\n rx: (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? 0\n : this._domain.map(Number).includes(d.id as number)\n ? 1\n : 0,\n ry: (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? 0\n : this._domain.map(Number).includes(d.id as number)\n ? 1\n : 0,\n });\n this._snapping = true;\n this._buttonBehaviorCurrent = \"auto\";\n this._hiddenHandles = false;\n this._paddingLeft = 0;\n this._ticksWidth = 0;\n }\n\n /**\n Triggered on brush \"brush\".\n @private\n*/\n \n _brushBrush(event: Record<string, unknown>): void {\n if (\n event.sourceEvent &&\n (event.sourceEvent as Record<string, unknown>).offsetX &&\n event.selection !== null &&\n (!this._brushing || this._snapping)\n ) {\n if (this._playTimer) clearInterval(this._playTimer);\n this._playTimer = false;\n this._playButtonClass.render();\n\n const domain = this._updateDomain(event);\n this._brushGroup.call(this._brush.move, this._updateBrushLimit(domain));\n }\n\n this._brushStyle();\n if (this._on.brush) (this._on.brush as (...args: unknown[]) => unknown)(this._selection);\n }\n\n /**\n Triggered on brush \"end\".\n @private\n*/\n \n _brushEnd(event: Record<string, unknown>): void {\n if (!event.sourceEvent) return; // Only transition after input.\n\n const domain = this._updateDomain(event);\n\n this._brushStyle();\n\n if (this._brushing || !this._snapping)\n this._brushGroup\n .transition(this._transition)\n .call(this._brush.move, this._updateBrushLimit(domain));\n\n if (this._on.end) (this._on.end as (...args: unknown[]) => unknown)(this._selection);\n }\n\n /**\n Triggered on brush \"start\".\n @private\n*/\n \n _brushStart(event: Record<string, unknown>): void {\n if (event.sourceEvent !== null && (!this._brushing || this._snapping)) {\n if (this._playTimer) clearInterval(this._playTimer);\n this._playTimer = false;\n this._playButtonClass.render();\n\n const domain = this._updateDomain(event);\n this._brushGroup.call(this._brush.move, this._updateBrushLimit(domain));\n }\n\n this._brushStyle();\n if (this._on.start) (this._on.start as (...args: unknown[]) => unknown)(event);\n }\n\n /**\n Overrides the default brush styles.\n @private\n*/\n _brushStyle(): void {\n const {height} = this._position;\n const timelineHeight =\n this._shape === \"Circle\"\n ? typeof this._shapeConfig.r === \"function\"\n ? this._shapeConfig.r({tick: true}) * 2\n : this._shapeConfig.r\n : this._shape === \"Rect\"\n ? typeof this._shapeConfig[height] === \"function\"\n ? this._shapeConfig[height]({tick: true})\n : this._shapeConfig[height]\n : this._tickSize;\n\n const brushSelection = this._brushGroup\n .selectAll(\".selection\")\n .call(attrize, this._selectionConfig)\n .attr(\"transform\", \"translate(0,-1)\")\n .attr(\"height\", timelineHeight + 2);\n\n const brushHandle = this._brushGroup\n .selectAll(\".handle\")\n .call(attrize, this._handleConfig)\n .attr(\"display\", this._hiddenHandles ? \"none\" : \"block\")\n .attr(\"transform\", (d: Record<string, unknown>) =>\n this._buttonBehaviorCurrent === \"buttons\"\n ? `translate(${d.type === \"w\" ? -this._handleSize / 2 : 0},-1)`\n : \"\",\n )\n .attr(\n \"height\",\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._buttonHeight + 2\n : timelineHeight + this._handleSize,\n );\n\n this._brushGroup\n .selectAll(\".overlay\")\n .attr(\"x\", this._paddingLeft)\n .attr(\"cursor\", \"pointer\")\n .attr(\n \"transform\",\n `translate(0,${\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._buttonHeight / 2\n : -this._handleSize\n })`,\n )\n .attr(\n \"width\",\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._ticksWidth\n : this._width,\n )\n .attr(\n \"height\",\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._buttonHeight\n : this._handleSize * 2,\n );\n\n if (this._buttonBehaviorCurrent === \"buttons\") {\n const yTransform =\n this._align === \"middle\"\n ? this._height / 2 - this._buttonHeight / 2\n : this._align === \"start\"\n ? this._margin.top\n : this._height - this._buttonHeight - this._margin.bottom;\n\n brushHandle.attr(\"y\", yTransform);\n brushSelection.attr(\"y\", yTransform);\n }\n }\n\n /**\n Updates domain of the timeline used in brush functions.\n @private\n*/\n \n _updateDomain(event: Record<string, unknown>): unknown[] {\n const x = pointers(event, this._select.node());\n let domain: unknown[] =\n (event.selection && this._brushing) || !x.length\n ? (event.selection as unknown[])\n : [x[0][0], x[0][0]];\n\n if (this._buttonBehaviorCurrent === \"ticks\")\n domain = domain.map(this._d3Scale.invert);\n domain = domain.map(Number);\n\n if (\n event.type === \"brush\" &&\n this._brushing &&\n this._buttonBehaviorCurrent === \"buttons\"\n ) {\n const diffs = (event.selection as number[]).map((d: number) =>\n Math.abs(d - ((event.sourceEvent as Record<string, unknown>).offsetX as number)),\n );\n\n const sel = event.selection as number[];\n const offsetX = (event.sourceEvent as Record<string, unknown>).offsetX as number;\n domain =\n diffs[1] <= diffs[0]\n ? [sel[0], offsetX].sort(\n (a: number, b: number) => a - b,\n )\n : [offsetX, sel[1]].sort(\n (a: number, b: number) => a - b,\n );\n }\n\n const ticks =\n this._buttonBehaviorCurrent === \"ticks\"\n ? this._availableTicks.map(Number)\n : this._d3Scale.range();\n\n if (this._buttonBehaviorCurrent === \"ticks\") {\n // find closest min and max ticks from data\n // and their indices in the ticks Array\n let minDomain: unknown = date(closest(domain[0] as number, ticks));\n let minIndex = ticks.indexOf(+(minDomain as number));\n let maxDomain: unknown = date(closest(domain[1] as number, ticks));\n let maxIndex = ticks.indexOf(+(maxDomain as number));\n\n // using the indices, determine if the 2 ends of the brush\n // are too close to each other. \"ticksApart\" always needs to\n // be less than the current current brushMin minus 1. For\n // example, a brushMin of \"2\" means that the min and max domain\n // values need to be \"1\" space apart from eachother.\n let ticksApart = Math.abs(maxIndex - minIndex);\n const minTicksAllowed = this._brushMin() - 1;\n\n // if the min and max are not far enough apart to satisfy\n // brushMin, then forcibly extend the domain.\n if (ticksApart < minTicksAllowed) {\n // push the maxDomain out as far as possible to account for brushMin\n maxIndex = min([\n ticks.length - 1,\n maxIndex + (minTicksAllowed - ticksApart),\n ])!;\n maxDomain = ticks[maxIndex];\n ticksApart = Math.abs(maxIndex - minIndex);\n\n // if the domain is still not far enough apart, extent the minDomain\n // as far as possible to allow for brushMin\n if (ticksApart < minTicksAllowed) {\n minIndex = max([0, minIndex - (minTicksAllowed - ticksApart)])!;\n minDomain = ticks[minIndex];\n }\n }\n\n domain[0] = minDomain;\n domain[1] = maxDomain;\n } else {\n domain[0] = closest(domain[0] as number, ticks as number[]);\n domain[1] = closest(domain[1] as number, ticks as number[]);\n }\n\n // if the brush event has finished, update the current \"selection\" value\n const single = +(domain[0] as number) === +(domain[1] as number);\n if (event.type === \"brush\" || event.type === \"end\") {\n this._selection =\n this._buttonBehaviorCurrent === \"ticks\"\n ? single\n ? domain[0]\n : domain\n : single\n ? date(\n this._availableTicks[\n ticks.indexOf(domain[0] as unknown as string | number | false)\n ] as string | number | false,\n )\n : [\n date(\n this._availableTicks[\n ticks.indexOf(\n domain[0] as unknown as string | number | false,\n )\n ] as string | number | false,\n ),\n date(\n this._availableTicks[\n ticks.indexOf(\n domain[1] as unknown as string | number | false,\n )\n ] as string | number | false,\n ),\n ];\n }\n\n return domain;\n }\n\n /**\n Updates limits of the brush.\n @private\n*/\n \n _updateBrushLimit(domain: unknown[]): unknown[] {\n const selection =\n this._buttonBehaviorCurrent === \"ticks\"\n ? (domain as (string | number | false | undefined)[]).map(date).map(this._d3Scale) as number[]\n : domain as number[];\n\n if (selection[0] === selection[1]) {\n selection[0] -= 0.1;\n selection[1] += 0.1;\n }\n\n if (this._buttonBehaviorCurrent === \"buttons\") {\n const handleSize = this._hiddenHandles ? 0 : this._handleSize;\n const buttonWidth =\n 0.5 * (this._ticksWidth / this._availableTicks.length - handleSize);\n selection[0] -= buttonWidth;\n selection[1] += buttonWidth;\n }\n\n return selection;\n }\n\n /**\n Draws the timeline.\n @param callback Optional callback invoked after rendering completes.\n*/\n render(callback?: (...args: unknown[]) => unknown): this {\n const {height, y} = this._position;\n\n if (this._ticks) this._ticks = (this._ticks as (string | number | false | undefined)[]).map(date);\n if (this._data) this._data = (this._data as (string | number | false | undefined)[]).map(date);\n\n let ticks = this._ticks ? this._ticks : this._domain.map(date);\n if (!this._ticks) {\n const d3Scale = scaleTime()\n .domain(ticks as Date[])\n .range([0, this._width]);\n ticks = d3Scale.ticks();\n }\n\n const timeLocale =\n this._timeLocale || locale[this._locale] || locale[\"en-US\"];\n if (this._userFormat === undefined)\n this._userFormat = this._tickFormat || false;\n const tickFormat = (this._tickFormat = this._userFormat\n ? this._userFormat\n : (d: Date) =>\n formatDate(d, ticks as Date[]).replace(\n /^Q/g,\n timeLocale.quarter as string,\n ));\n\n // Measures size of ticks\n this._ticksWidth = this._width;\n if ([\"auto\", \"buttons\"].includes(this._buttonBehavior)) {\n let maxLabel = 0;\n ticks.forEach((d: unknown, i: number) => {\n const {fontFamily, fontSize} = this._shapeConfig.labelConfig;\n\n const f =\n typeof fontFamily === \"function\" ? fontFamily(d, i) : fontFamily,\n s = typeof fontSize === \"function\" ? fontSize(d, i) : fontSize;\n\n const wrap = textWrap()\n .fontFamily(f)\n .fontSize(s)\n .lineHeight(\n this._shapeConfig.lineHeight\n ? this._shapeConfig.lineHeight(d, i)\n : undefined,\n );\n\n const res = wrap(tickFormat(d as Date));\n\n let width = res.lines.length\n ? Math.ceil(\n max(\n res.lines.map((line: string) =>\n textWidth(line, {\"font-family\": f, \"font-size\": s}),\n ),\n )!,\n ) +\n s / 4\n : 0;\n\n if (width % 2) width++;\n if (maxLabel < width) maxLabel = width + 2 * this._buttonPadding;\n });\n this._ticksWidth = maxLabel * ticks.length;\n }\n\n const playButtonWidth: number = this._playButton\n ? (this._playButtonConfig.width as number) || this._buttonHeight\n : 0;\n const space = this._width - playButtonWidth;\n\n this._buttonBehaviorCurrent =\n this._buttonBehavior === \"auto\"\n ? this._ticksWidth < space\n ? \"buttons\"\n : \"ticks\"\n : this._buttonBehavior;\n const hiddenHandles = (this._hiddenHandles =\n this._buttonBehaviorCurrent === \"buttons\" && !this._brushing);\n\n if (this._buttonBehaviorCurrent === \"buttons\") {\n this._scale = \"ordinal\";\n const domain = scaleTime()\n .domain(this._domain.map(date) as Date[])\n .ticks()\n .map(Number);\n\n this._domain = this._ticks\n ? this._ticks\n : Array.from(\n Array(domain[domain.length - 1] - domain[0] + 1),\n (_: unknown, x: number) => domain[0] + x,\n ).map(date);\n\n this._ticks = this._domain;\n\n const buttonMargin = (0.5 * this._ticksWidth) / this._ticks.length;\n\n const emptySpace = this._width - this._ticksWidth - playButtonWidth;\n\n this._paddingLeft =\n this._buttonAlign === \"middle\"\n ? emptySpace / 2 + playButtonWidth\n : this._buttonAlign === \"end\"\n ? emptySpace + playButtonWidth\n : playButtonWidth;\n\n this._range = [\n this._paddingLeft + buttonMargin,\n this._paddingLeft + this._ticksWidth - buttonMargin,\n ];\n } else {\n this._scale = \"time\";\n this._domain = extent(ticks as Date[]) as unknown as (string | number | boolean | Date)[];\n this._range = [\n playButtonWidth ? playButtonWidth * 1.5 : undefined,\n undefined,\n ];\n this._paddingLeft = playButtonWidth;\n }\n\n super.render(callback);\n\n const offset = this._outerBounds[y],\n range = this._d3Scale.range();\n\n const brush = (this._brush = brushX()\n .extent([\n [range[0], offset],\n [range[range.length - 1], offset + this._outerBounds[height]],\n ])\n .filter(this._brushFilter)\n .handleSize(hiddenHandles ? 0 : this._handleSize)\n .on(\"start\", this._brushStart.bind(this))\n .on(\"brush\", this._brushBrush.bind(this))\n .on(\"end\", this._brushEnd.bind(this)));\n\n // data Array to be used when detecting the default value\n const defaultData =\n this._buttonBehaviorCurrent === \"ticks\" ? this._availableTicks : range;\n\n // the default selection, if needed\n const defaultSelection = [\n this._brushMin() > defaultData.length\n ? defaultData[0]\n : defaultData[defaultData.length - this._brushMin()],\n defaultData[defaultData.length - 1],\n ];\n\n // the current selection, considering user input, defaults, and data\n const selection: unknown[] =\n this._selection === void 0\n ? defaultSelection\n : this._selection instanceof Array\n ? this._buttonBehaviorCurrent === \"buttons\"\n ? this._selection\n .map(date)\n .map((d: unknown) => range[this._ticks!.map(Number).indexOf(+(d as number))])\n : this._selection.map(date)\n : this._buttonBehaviorCurrent === \"buttons\"\n ? [range[this._ticks!.map(Number).indexOf(+(this._selection as number))]]\n : [this._selection];\n\n if (selection.length === 1) selection.push(selection[0]);\n this._updateBrushLimit(selection);\n\n this._brushGroup = elem(\"g.brushGroup\", {parent: this._group});\n this._brushGroup\n .call(brush)\n .transition(this._transition)\n .call(\n brush.move,\n this._buttonBehaviorCurrent === \"ticks\"\n ? this._updateBrushLimit(selection)\n : selection,\n );\n\n this._outerBounds.y -= this._handleSize / 2;\n this._outerBounds.height += this._handleSize / 2;\n\n const playButtonGroup = elem(\"g.d3plus-Timeline-play\", {\n parent: this._group,\n });\n\n this._playButtonClass\n .data(\n this._playButton\n ? [\n {\n x: this._paddingLeft - playButtonWidth,\n y:\n this._buttonBehaviorCurrent === \"buttons\"\n ? this._align === \"middle\"\n ? this._height / 2 - this._buttonHeight / 2\n : this._align === \"start\"\n ? this._margin.top\n : this._height -\n this._buttonHeight -\n this._margin.bottom\n : this._outerBounds.y,\n width: playButtonWidth,\n height: this._buttonHeight,\n },\n ]\n : [],\n )\n .select(playButtonGroup.node())\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .config(configPrep.bind(this as any)(this._playButtonConfig))\n .render();\n\n return this;\n }\n\n /**\n Button padding.\n*/\n buttonPadding(): number;\n buttonPadding(_: number): this;\n buttonPadding(_?: number): number | this {\n return arguments.length\n ? ((this._buttonPadding = _!), this)\n : this._buttonPadding;\n }\n\n /**\n Toggles the brushing value.\n*/\n brushing(): boolean;\n brushing(_: boolean): this;\n brushing(_?: boolean): boolean | this {\n return arguments.length ? ((this._brushing = _!), this) : this._brushing;\n }\n\n /**\n Brush event filter.\n\n@example\nfunction() {\n return !event.button && event.detail < 2;\n}\n*/\n \n brushFilter(): (event: unknown) => boolean;\n\n brushFilter(_: (event: unknown) => boolean): this;\n\n brushFilter(_?: (event: unknown) => boolean): unknown {\n return arguments.length\n ? ((this._brushFilter = _!), this)\n : this._brushFilter;\n }\n\n /**\n The minimum number of ticks that can be highlighted when using \"ticks\" buttonBehavior. Helpful when using x/y plots where you don't want the user to select less than 2 time periods.\n*/\n brushMin(): () => number;\n brushMin(_: (() => number) | number): this;\n brushMin(_?: (() => number) | number): unknown {\n return arguments.length\n ? ((this._brushMin = typeof _ === \"function\" ? _ : constant(_!)), this)\n : this._brushMin;\n }\n\n /**\n Toggles the horizontal alignment of the button timeline. Accepted values are `\"start\"`, `\"middle\"` and `\"end\"`.\n*/\n buttonAlign(): string;\n buttonAlign(_: string): this;\n buttonAlign(_?: string): string | this {\n return arguments.length\n ? ((this._buttonAlign = _!), this)\n : this._buttonAlign;\n }\n\n /**\n Toggles the style of the timeline. Accepted values are `\"auto\"`, `\"buttons\"` and `\"ticks\"`.\n*/\n buttonBehavior(): string;\n buttonBehavior(_: string): this;\n buttonBehavior(_?: string): string | this {\n return arguments.length\n ? ((this._buttonBehavior = _!), this)\n : this._buttonBehavior;\n }\n\n /**\n Button height.\n*/\n buttonHeight(): number;\n buttonHeight(_: number): this;\n buttonHeight(_?: number): number | this {\n return arguments.length\n ? ((this._buttonHeight = _!), this)\n : this._buttonHeight;\n }\n\n /**\n Handle style.\n*/\n handleConfig(): Record<string, unknown>;\n handleConfig(_: Record<string, unknown>): this;\n handleConfig(_?: Record<string, unknown>): unknown {\n return arguments.length\n ? ((this._handleConfig = assign(this._handleConfig, _!)), this)\n : this._handleConfig;\n }\n\n /**\n Handle size.\n*/\n handleSize(): number;\n handleSize(_: number): this;\n handleSize(_?: number): number | this {\n return arguments.length\n ? ((this._handleSize = _!), this)\n : this._handleSize;\n }\n\n /**\n Event listener for the specified brush event *typename*. Mirrors the core [d3-brush](https://github.com/d3/d3-brush#brush_on) behavior.\n*/\n \n on(): Record<string, (...args: unknown[]) => unknown>;\n on(_: string): ((...args: unknown[]) => unknown) | undefined;\n on(_: string, f: (...args: unknown[]) => unknown): this;\n on(_: Record<string, (...args: unknown[]) => unknown>): this;\n on(\n _?: string | Record<string, (...args: unknown[]) => unknown>,\n f?: (...args: unknown[]) => unknown,\n ): Record<string, (...args: unknown[]) => unknown> | ((...args: unknown[]) => unknown) | undefined | this {\n return arguments.length === 2\n ? ((this._on[_ as string] = f!), this)\n : arguments.length\n ? typeof _ === \"string\"\n ? this._on[_]\n : ((this._on = assign({} as Record<string, unknown>, this._on, _ as Record<string, unknown>) as Record<string, (...args: unknown[]) => unknown>), this)\n : this._on;\n }\n\n /**\n Determines the visibility of the play button to the left the of timeline, which will cycle through the available periods at a rate defined by the playButtonInterval method.\n*/\n playButton(): boolean;\n playButton(_: boolean): this;\n playButton(_?: boolean): boolean | this {\n return arguments.length\n ? ((this._playButton = _!), this)\n : this._playButton;\n }\n\n /**\n The config Object for the Rect class used to create the playButton.\n*/\n playButtonConfig(): Record<string, unknown>;\n playButtonConfig(_: Record<string, unknown>): this;\n playButtonConfig(_?: Record<string, unknown>): unknown {\n return arguments.length\n ? ((this._playButtonConfig = assign(this._playButtonConfig, _!)), this)\n : this._playButtonConfig;\n }\n\n /**\n The value, in milliseconds, to use when cycling through the available time periods when the user clicks the playButton.\n*/\n playButtonInterval(): number;\n playButtonInterval(_: number): this;\n playButtonInterval(_?: number): number | this {\n return arguments.length\n ? ((this._playButtonInterval = _!), this)\n : this._playButtonInterval;\n }\n\n /**\n Selection style.\n*/\n selectionConfig(): Record<string, unknown>;\n selectionConfig(_: Record<string, unknown>): this;\n selectionConfig(_?: Record<string, unknown>): unknown {\n return arguments.length\n ? ((this._selectionConfig = assign(this._selectionConfig, _!)), this)\n : this._selectionConfig;\n }\n\n /**\n Selection. Defaults to the most recent year in the timeline.\n*/\n selection(): unknown;\n selection(_: unknown): this;\n selection(_?: unknown): unknown {\n return arguments.length ? ((this._selection = _), this) : this._selection;\n }\n\n /**\n Toggles the snapping value.\n*/\n snapping(): boolean;\n snapping(_: boolean): this;\n snapping(_?: boolean): boolean | this {\n return arguments.length ? ((this._snapping = _!), this) : this._snapping;\n }\n}\n"],"names":["extent","max","min","brushX","scaleTime","pointers","colorContrast","colorDefaults","assign","attrize","backgroundColor","date","elem","textWidth","formatDate","locale","closest","textWrap","Axis","TextBox","configPrep","constant","colorMid","Timeline","_brushing","_brushFilter","_brushMin","_buttonAlign","_buttonBehavior","_buttonBehaviorCurrent","_buttonPadding","_buttonHeight","_handleConfig","_handleSize","_hiddenHandles","_playButton","_playButtonClass","_playButtonConfig","_playButtonInterval","_playTimer","_selection","_selectionConfig","_snapping","_brush","_brushGroup","_paddingLeft","_ticksWidth","_barConfig","stroke","event","e","button","detail","_domain","_gridSize","fill","light","rx","ry","_height","_labelOffset","_on","orient","on","clearInterval","render","firstTime","nextYear","selection","length","Array","map","Number","push","ticks","_ticks","firstIndex","indexOf","lastIndex","setInterval","select","style","fontColor","dark","fontSize","text","textAnchor","verticalAlign","_shape","_shapeConfig","labelBounds","d","x","y","width","height","labelConfig","bg","_select","node","tick","_availableTicks","includes","id","_align","_margin","top","bottom","_brushBrush","sourceEvent","offsetX","domain","_updateDomain","call","move","_updateBrushLimit","_brushStyle","brush","_brushEnd","transition","_transition","end","_brushStart","start","_position","timelineHeight","r","_tickSize","brushSelection","selectAll","attr","brushHandle","type","_width","yTransform","_d3Scale","invert","diffs","Math","abs","sel","sort","a","b","range","minDomain","minIndex","maxDomain","maxIndex","ticksApart","minTicksAllowed","single","handleSize","buttonWidth","callback","_data","d3Scale","timeLocale","_timeLocale","_locale","_userFormat","undefined","_tickFormat","tickFormat","replace","quarter","maxLabel","forEach","i","fontFamily","f","s","wrap","lineHeight","res","lines","ceil","line","playButtonWidth","space","hiddenHandles","_scale","from","_","buttonMargin","emptySpace","_range","offset","_outerBounds","filter","bind","defaultData","defaultSelection","parent","_group","playButtonGroup","data","config","buttonPadding","arguments","brushing","brushFilter","brushMin","buttonAlign","buttonBehavior","buttonHeight","handleConfig","playButton","playButtonConfig","playButtonInterval","selectionConfig","snapping"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/Tooltip.ts"],"sourcesContent":["import {select} from \"d3-selection\";\nimport {computePosition, arrow as arrowMiddleware, offset, flip, shift} from \"@floating-ui/dom\";\nimport type {VirtualElement} from \"@floating-ui/dom\";\n\nimport {colorContrast, colorDefaults} from \"@d3plus/color\";\nimport type {DataPoint} from \"@d3plus/data\";\nimport {elem, stylize} from \"@d3plus/dom\";\nimport type {D3Selection} from \"@d3plus/dom\";\nimport {fontFamily, fontFamilyStringify} from \"@d3plus/text\";\n\nimport {accessor, BaseClass, constant} from \"../utils/index.js\";\n\n/**\n * Creates a virtual reference element for Floating UI.\n * @param {Number[]} position\n * @private\n*/\nfunction generateReference(\n position: number[] = [0, 0],\n): VirtualElement {\n return {\n getBoundingClientRect: () => ({\n width: 0,\n height: 0,\n x: position[0],\n y: position[1],\n top: position[1],\n right: position[0],\n bottom: position[1],\n left: position[0],\n }),\n };\n}\n\n/**\n * Positions a tooltip using Floating UI.\n * @private\n */\nasync function positionTooltip(\n reference: VirtualElement | HTMLElement,\n tooltip: HTMLElement,\n arrowEl: HTMLElement,\n offsetVal: number,\n arrowDistance: number,\n arrowHeight: number,\n) {\n const {x, y, placement, middlewareData} = await computePosition(reference, tooltip, {\n placement: \"top\",\n middleware: [\n offset(offsetVal + arrowDistance),\n flip({fallbackPlacements: [\"bottom\"], padding: 5}),\n shift({padding: 5}),\n arrowMiddleware({element: arrowEl}),\n ],\n });\n\n Object.assign(tooltip.style, {\n position: \"absolute\",\n left: `${x}px`,\n top: `${y}px`,\n visibility: \"visible\",\n });\n\n const flipped = placement === \"bottom\";\n const border = parseFloat(arrowEl.style.borderRightWidth) || 0;\n if (flipped) {\n arrowEl.style.transform = \"rotate(225deg)\";\n arrowEl.style.top = `-${arrowHeight / 2 + border}px`;\n arrowEl.style.bottom = \"\";\n } else {\n arrowEl.style.transform = \"rotate(45deg)\";\n arrowEl.style.bottom = `-${arrowHeight / 2 + border}px`;\n arrowEl.style.top = \"\";\n }\n arrowEl.style.left = middlewareData.arrow?.x != null ? `${middlewareData.arrow.x}px` : \"\";\n}\n\n/**\n Creates HTML tooltips in the body of a webpage.\n*/\nexport default class Tooltip extends BaseClass {\n _arrow: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _arrowStyle: Record<string, string>;\n _background: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _body: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _bodyStyle: Record<string, string>;\n _border: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _borderRadius: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _className: string;\n _data: DataPoint[];\n _footer: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _footerStyle: Record<string, string>;\n _height: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _id: (d: DataPoint, i: number) => string;\n \n _offset: (d: DataPoint, i?: number) => number;\n _padding: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _pointerEvents: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _tooltipRefs: Record<string, {reference: VirtualElement | HTMLElement; arrowEl: HTMLElement; tooltip: HTMLElement; arrowHeight: number; arrowDistance: number}>;\n _position: (d: DataPoint, i?: number) => number[] | HTMLElement;\n _tableStyle: Record<string, string>;\n _tbody: unknown[];\n _tbodyStyle: Record<string, string>;\n _thead: unknown[];\n _theadStyle: Record<string, string>;\n _title: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _titleStyle: Record<string, string>;\n _tooltipStyle: Record<string, string>;\n \n _trStyle: Record<string, unknown>;\n _tdStyle: Record<string, string>;\n _maxWidth: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _minWidth: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n _width: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n\n /**\n Invoked when creating a new class instance, and sets any default parameters.\n @private\n*/\n constructor() {\n super();\n\n this._arrow = accessor(\"arrow\", \"\");\n this._arrowStyle = {\n content: \"\",\n background: \"inherit\",\n border: \"inherit\",\n \"border-width\": \"0 1px 1px 0\",\n height: \"10px\",\n position: \"absolute\",\n transform: \"rotate(45deg)\",\n width: \"10px\",\n };\n this._background = constant(colorDefaults.light);\n this._body = accessor(\"body\", \"\");\n this._bodyStyle = {\n \"font-size\": \"12px\",\n \"font-weight\": \"400\",\n \"z-index\": \"1\",\n };\n this._border = constant(\"1px solid rgba(0, 0, 0, 0.25)\");\n this._borderRadius = constant(\"4px\");\n this._className = \"d3plus-tooltip\";\n this._data = [];\n this._footer = accessor(\"footer\", \"\");\n this._footerStyle = {\n \"font-size\": \"9px\",\n \"font-weight\": \"400\",\n \"margin-top\": \"5px\",\n \"z-index\": \"1\",\n };\n this._height = constant(\"auto\");\n this._id = (d: DataPoint, i: number) => `${i}`;\n this._offset = constant(5);\n this._padding = constant(\"10px\");\n this._pointerEvents = constant(\"auto\");\n this._tooltipRefs = {};\n this._position = (d: DataPoint) => [d.x as number, d.y as number];\n this._tableStyle = {\n \"border-collapse\": \"collapse\",\n \"border-spacing\": \"0\",\n width: \"100%\",\n };\n this._tbody = [];\n this._tbodyStyle = {\n \"font-size\": \"12px\",\n \"text-align\": \"center\",\n };\n this._thead = [];\n this._theadStyle = {\n \"font-size\": \"12px\",\n \"font-weight\": \"600\",\n \"text-align\": \"center\",\n };\n this._title = accessor(\"title\", \"\");\n this._titleStyle = {\n \"font-size\": \"14px\",\n \"font-weight\": \"600\",\n \"margin-bottom\": \"5px\",\n \"text-align\": \"center\"\n };\n this._tooltipStyle = {\n \"box-shadow\": \"0 1px 5px rgba(0, 0, 0, 0.25)\",\n color: ((d: DataPoint, i: number) => colorContrast(this._background(d, i) as string)) as unknown as string,\n \"font-family\": fontFamilyStringify(fontFamily),\n };\n this._trStyle = {\n \"border-top\": (d: unknown, i: number) =>\n i ? \"1px solid rgba(0, 0, 0, 0.1)\" : \"none\",\n };\n this._tdStyle = {};\n this._maxWidth = constant(\"200px\");\n this._minWidth = constant(\"100px\");\n this._width = constant(\"auto\");\n }\n\n /**\n The inner return object and draw function that gets assigned the public methods.\n @private\n*/\n render(callback?: (...args: unknown[]) => unknown): this {\n const that = this;\n\n const portal = elem(\"div#d3plus-portal\");\n const tooltips = portal\n .selectAll(`.${this._className}`)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .data(this._data, this._id as any);\n\n const enter = tooltips.enter().append(\"div\").attr(\"class\", this._className);\n\n const update = tooltips.merge(enter as never);\n stylize(update, this._tooltipStyle);\n\n /**\n Creates DIV elements with a unique class and styles.\n @private\n*/\n function divElement(cat: string): void {\n enter\n .append(\"div\")\n .attr(\"class\", `d3plus-tooltip-${cat}`)\n .attr(\n \"id\",\n (d: DataPoint, i: number) =>\n `d3plus-tooltip-${cat}-${d ? that._id(d, i) : \"\"}`,\n );\n\n const div = update\n .select(`.d3plus-tooltip-${cat}`)\n .html(\n (d: DataPoint, i: number) =>\n (\n that as unknown as Record<\n string,\n (d: DataPoint, i: number) => unknown\n >\n )[`_${cat}`](d, i) as string,\n )\n .style(\"display\", (d: DataPoint, i: number) => {\n const val = (\n that as unknown as Record<\n string,\n (d: DataPoint, i: number) => unknown\n >\n )[`_${cat}`](d, i);\n const visible = val !== false && val !== undefined && val !== null;\n return visible ? \"block\" : \"none\";\n });\n\n stylize(\n div,\n (that as unknown as Record<string, Record<string, string>>)[\n `_${cat}Style`\n ],\n );\n }\n\n /**\n Fetches table contents given functions or values.\n @private\n*/\n function cellContent(this: HTMLElement, d: unknown): string {\n if (typeof d === \"function\") {\n const datum = select(\n this.parentNode!.parentNode! as Element,\n ).datum() as DataPoint;\n return d(datum, that._data.indexOf(datum)) as string;\n } else return d as string;\n }\n\n /**\n Sets styles for both enter and update.\n @private\n*/\n function boxStyles(box: D3Selection): void {\n box\n .style(\"background\", that._background as never)\n .style(\"border-radius\", that._borderRadius as never)\n .style(\"pointer-events\", that._pointerEvents as never)\n .style(\"padding\", that._padding as never)\n .style(\"max-width\", that._maxWidth as never)\n .style(\"min-width\", that._minWidth as never)\n .style(\"width\", that._width as never)\n .style(\"height\", that._height as never)\n .style(\"border\", that._border as never);\n }\n\n divElement(\"title\");\n divElement(\"body\");\n\n const tableEnter = enter\n .append(\"table\")\n .attr(\"class\", \"d3plus-tooltip-table\");\n const table = update.select(\".d3plus-tooltip-table\");\n stylize(table, this._tableStyle);\n\n tableEnter.append(\"thead\").attr(\"class\", \"d3plus-tooltip-thead\");\n const tableHead = update.select(\".d3plus-tooltip-thead\");\n stylize(tableHead, this._theadStyle);\n const theadTr = tableHead.selectAll(\"tr\").data([0]);\n const theadTrEnter = theadTr.enter().append(\"tr\");\n theadTr.exit().remove();\n const theadTrUpdate = theadTr.merge(theadTrEnter as never);\n stylize(theadTrUpdate as never, this._trStyle as Record<string, string | number | boolean | null>);\n const th = theadTrUpdate.selectAll(\"th\").data(this._thead);\n th.enter()\n .append(\"th\")\n .merge(th as never)\n .html(cellContent as never);\n th.exit().remove();\n\n tableEnter.append(\"tbody\").attr(\"class\", \"d3plus-tooltip-tbody\");\n const tableBody = update.select(\".d3plus-tooltip-tbody\");\n stylize(tableBody, this._tbodyStyle);\n const tr = tableBody.selectAll(\"tr\").data(this._tbody);\n const trEnter = tr.enter().append(\"tr\");\n tr.exit().remove();\n const trUpdate = tr.merge(trEnter as never);\n stylize(trUpdate as never, this._trStyle as Record<string, string | number | boolean | null>);\n const td = trUpdate.selectAll(\"td\").data((d: unknown) => d as unknown[]);\n td.enter()\n .append(\"td\")\n .merge(td as never)\n .html(cellContent as never);\n stylize(td, this._tdStyle);\n\n divElement(\"footer\");\n\n divElement(\"arrow\");\n\n enter\n .attr(\n \"id\",\n (d: DataPoint, i: number) =>\n `d3plus-tooltip-${d ? this._id(d, i) : \"\"}`,\n )\n .style(\"visibility\", \"hidden\")\n .call(boxStyles)\n .each((d: DataPoint, i: number) => {\n const id = that._id(d, i);\n const tooltip = document.getElementById(`d3plus-tooltip-${id}`)!;\n const arrowEl = document.getElementById(`d3plus-tooltip-arrow-${id}`)!;\n const arrowHeight = arrowEl.offsetHeight;\n const arrowDistance = arrowEl.getBoundingClientRect().height / 2;\n arrowEl.style.bottom = `-${arrowHeight / 2}px`;\n\n const position = that._position(d, i);\n const reference: VirtualElement | HTMLElement = Array.isArray(position)\n ? generateReference(position)\n : position as HTMLElement;\n\n this._tooltipRefs[id] = {reference, arrowEl, tooltip, arrowHeight, arrowDistance};\n positionTooltip(reference, tooltip, arrowEl, that._offset(d, i), arrowDistance, arrowHeight);\n });\n\n update\n .each((d: DataPoint, i: number) => {\n const id = that._id(d, i);\n const position = that._position(d, i);\n const ref = this._tooltipRefs[id];\n\n if (ref) {\n ref.reference = Array.isArray(position)\n ? generateReference(position as number[])\n : position as HTMLElement;\n positionTooltip(ref.reference, ref.tooltip, ref.arrowEl, that._offset(d, i), ref.arrowDistance, ref.arrowHeight);\n }\n })\n .call(boxStyles);\n\n tooltips\n .exit()\n .each((d: unknown, i: number) => {\n const id = that._id(d as DataPoint, i);\n delete this._tooltipRefs[id];\n })\n .remove();\n\n if (callback) setTimeout(callback, 100);\n\n return this;\n }\n\n /**\n The inner HTML content of the arrow element, empty by default.\n\n@example <caption>default accessor</caption>\n function value(d) {\n return d.arrow || \"\";\n}\n*/\n arrow(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n arrow(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n arrow(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._arrow = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._arrow;\n }\n\n /**\n CSS styles applied to the arrow element.\n\n@example <caption>default styles</caption>\n {\n \"content\": \"\",\n \"border-width\": \"10px\",\n \"border-style\": \"solid\",\n \"border-color\": \"rgba(255, 255, 255, 0.75) transparent transparent transparent\",\n \"position\": \"absolute\"\n }\n*/\n arrowStyle(): Record<string, string>;\n arrowStyle(_: Record<string, string>): this;\n arrowStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._arrowStyle = Object.assign(this._arrowStyle, _)), this)\n : this._arrowStyle;\n }\n\n /**\n The background color accessor for each tooltip.\n*/\n background(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n background(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n background(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._background = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._background;\n }\n\n /**\n The body content accessor for each tooltip.\n\n@example <caption>default accessor</caption>\nfunction value(d) {\n return d.body || \"\";\n}\n*/\n body(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n body(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n body(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._body = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._body;\n }\n\n /**\n CSS styles applied to the body element.\n\n@example <caption>default styles</caption>\n{\n \"font-size\": \"12px\",\n \"font-weight\": \"400\"\n}\n*/\n bodyStyle(): Record<string, string>;\n bodyStyle(_: Record<string, string>): this;\n bodyStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._bodyStyle = Object.assign(this._bodyStyle, _)), this)\n : this._bodyStyle;\n }\n\n /**\n The border accessor for each tooltip.\n*/\n border(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n border(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n border(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._border = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._border;\n }\n\n /**\n The border-radius accessor for each tooltip.\n*/\n borderRadius(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n borderRadius(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n borderRadius(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._borderRadius = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._borderRadius;\n }\n\n /**\n The CSS class name applied to the tooltip container.\n*/\n className(): string;\n className(_: string): this;\n className(_?: string): unknown {\n return arguments.length ? ((this._className = _!), this) : this._className;\n }\n\n /**\n The data array used to create tooltips.\n*/\n data(): DataPoint[];\n data(_: DataPoint[]): this;\n data(_?: DataPoint[]): unknown {\n return arguments.length ? ((this._data = _!), this) : this._data;\n }\n\n /**\n The footer content accessor for each tooltip.\n\n@example <caption>default accessor</caption>\nfunction value(d) {\n return d.footer || \"\";\n}\n*/\n footer(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n footer(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n footer(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._footer = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._footer;\n }\n\n /**\n CSS styles applied to the footer element.\n\n@example <caption>default styles</caption>\n{\n \"font-size\": \"12px\",\n \"font-weight\": \"400\"\n}\n*/\n footerStyle(): Record<string, string>;\n footerStyle(_: Record<string, string>): this;\n footerStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._footerStyle = Object.assign(this._footerStyle, _)), this)\n : this._footerStyle;\n }\n\n /**\n The height accessor for each tooltip.\n*/\n height(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n height(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n height(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._height = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._height;\n }\n\n /**\n The unique id accessor for each tooltip.\n\n@example <caption>default accessor</caption>\nfunction value(d, i) {\n return d.id || \"\" + i;\n}\n*/\n id(): (d: DataPoint, i: number) => string;\n id(_: ((d: DataPoint, i: number) => string) | string): this;\n id(_?: ((d: DataPoint, i: number) => string) | string): unknown {\n return arguments.length\n ? ((this._id = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._id;\n }\n\n /**\n The pixel offset between the tooltip and its anchor point.\n*/\n offset(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n offset(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | number,\n ): this;\n offset(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | number,\n ): unknown {\n return arguments.length\n ? ((this._offset = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._offset;\n }\n\n /**\n The inner padding of each tooltip.\n*/\n padding(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n padding(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n padding(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._padding = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._padding;\n }\n\n /**\n The pointer-events CSS property for each tooltip.\n*/\n pointerEvents(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n pointerEvents(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n pointerEvents(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._pointerEvents = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any),\n this)\n : this._pointerEvents;\n }\n\n /**\n The position of each tooltip. Can be an HTMLElement to anchor to, a selection string, or coordinate points in reference to the client viewport (not the overall page).\n\n@example <caption>default accessor</caption>\n function value(d) {\n return [d.x, d.y];\n }\n*/\n position(): (d: DataPoint, i?: number) => number[] | HTMLElement;\n position(\n _:\n | ((d: DataPoint, i?: number) => number[] | HTMLElement)\n | number[]\n | HTMLElement\n | string,\n ): this;\n position(\n _?:\n | ((d: DataPoint, i?: number) => number[] | HTMLElement)\n | number[]\n | HTMLElement\n | string,\n ): unknown {\n return arguments.length\n ? ((this._position =\n typeof _ === \"string\"\n ? (constant((select(_).node() || [0, 0]) as HTMLElement) as (\n d: DataPoint,\n i?: number,\n ) => number[] | HTMLElement)\n : typeof _ === \"function\"\n ? _\n : (constant(_) as (\n d: DataPoint,\n i?: number,\n ) => number[] | HTMLElement)),\n this)\n : this._position;\n }\n\n /**\n CSS styles applied to the table element.\n\n@example <caption>default styles</caption>\n{\n \"border-collapse\": \"collapse\",\n \"border-spacing\": \"0\",\n \"width\": \"100%\"\n}\n*/\n tableStyle(): Record<string, string>;\n tableStyle(_: Record<string, string>): this;\n tableStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._tableStyle = Object.assign(this._tableStyle, _)), this)\n : this._tableStyle;\n }\n\n /**\n The table body contents as an array of functions or strings.\n*/\n tbody(): unknown[];\n tbody(_: unknown[]): this;\n tbody(_?: unknown[]): unknown {\n return arguments.length ? ((this._tbody = _!), this) : this._tbody;\n }\n\n /**\n CSS styles applied to the table body element.\n\n@example <caption>default styles</caption>\n{\n \"font-size\": \"12px\",\n \"font-weight\": \"600\",\n \"text-align\": \"center\"\n}\n*/\n tbodyStyle(): Record<string, string>;\n tbodyStyle(_: Record<string, string>): this;\n tbodyStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._tbodyStyle = Object.assign(this._tbodyStyle, _)), this)\n : this._tbodyStyle;\n }\n\n /**\n The table head contents as an array of functions or strings.\n*/\n thead(): unknown[];\n thead(_: unknown[]): this;\n thead(_?: unknown[]): unknown {\n return arguments.length ? ((this._thead = _!), this) : this._thead;\n }\n\n /**\n CSS styles applied to the table head element.\n\n@example <caption>default styles</caption>\n{\n \"font-size\": \"12px\",\n \"font-weight\": \"600\",\n \"text-align\": \"center\"\n}\n*/\n theadStyle(): Record<string, string>;\n theadStyle(_: Record<string, string>): this;\n theadStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._theadStyle = Object.assign(this._theadStyle, _)), this)\n : this._theadStyle;\n }\n\n /**\n The title content accessor for each tooltip.\n\n@example <caption>default accessor</caption>\nfunction value(d) {\n return d.title || \"\";\n}\n*/\n title(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n title(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n title(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._title = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._title;\n }\n\n /**\n CSS styles applied to the title element.\n\n@example <caption>default styles</caption>\n{\n \"font-size\": \"14px\",\n \"font-weight\": \"600\",\n \"padding-bottom\": \"5px\"\n}\n*/\n titleStyle(): Record<string, string>;\n titleStyle(_: Record<string, string>): this;\n titleStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._titleStyle = Object.assign(this._titleStyle, _)), this)\n : this._titleStyle;\n }\n\n /**\n Overall CSS styles applied to the tooltip container.\n\n@example <caption>default styles</caption>\n{\n \"font-family\": \"'Inter', 'Helvetica Neue', 'HelveticaNeue', 'Helvetica', 'Arial', sans-serif\",\n \"font-size\": \"14px\",\n \"font-weight\": \"600\",\n \"padding-bottom\": \"5px\"\n}\n*/\n tooltipStyle(): Record<string, string>;\n tooltipStyle(_: Record<string, string>): this;\n tooltipStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._tooltipStyle = Object.assign(this._tooltipStyle, _)), this)\n : this._tooltipStyle;\n }\n\n /**\n An object with CSS keys and values to be applied to all <tr> elements inside of each <tbody>.\n\n@example <caption>default styles</caption>\n {\n \"border-top\": \"1px solid rgba(0, 0, 0, 0.1)\"\n }\n*/\n \n trStyle(): Record<string, unknown>;\n trStyle(_: Record<string, unknown>): this;\n trStyle(_?: Record<string, unknown>): unknown {\n return arguments.length\n ? ((this._trStyle = Object.assign(this._trStyle, _)), this)\n : this._trStyle;\n }\n\n /**\n An object with CSS keys and values to be applied to all <td> elements inside of each <tr>.\n*/\n tdStyle(): Record<string, string>;\n tdStyle(_: Record<string, string>): this;\n tdStyle(_?: Record<string, string>): unknown {\n return arguments.length\n ? ((this._tdStyle = Object.assign(this._tdStyle, _)), this)\n : this._tdStyle;\n }\n\n /**\n The max-width accessor for each tooltip.\n*/\n maxWidth(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n maxWidth(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n maxWidth(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._maxWidth = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._maxWidth;\n }\n\n /**\n The min-width accessor for each tooltip.\n*/\n minWidth(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n minWidth(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n minWidth(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._minWidth = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._minWidth;\n }\n\n /**\n The width accessor for each tooltip.\n*/\n width(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];\n width(\n _: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): this;\n width(\n _?: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string,\n ): unknown {\n return arguments.length\n ? ((this._width = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (typeof _ === \"function\" ? _ : constant(_)) as any), this)\n : this._width;\n }\n}\n"],"names":["select","computePosition","arrow","arrowMiddleware","offset","flip","shift","colorContrast","colorDefaults","elem","stylize","fontFamily","fontFamilyStringify","accessor","BaseClass","constant","generateReference","position","getBoundingClientRect","width","height","x","y","top","right","bottom","left","positionTooltip","reference","tooltip","arrowEl","offsetVal","arrowDistance","arrowHeight","middlewareData","placement","flipped","border","middleware","fallbackPlacements","padding","element","Object","assign","style","visibility","parseFloat","borderRightWidth","transform","Tooltip","_arrow","_arrowStyle","_background","_body","_bodyStyle","_border","_borderRadius","_className","_data","_footer","_footerStyle","_height","_id","_offset","_padding","_pointerEvents","_tooltipRefs","_position","_tableStyle","_tbody","_tbodyStyle","_thead","_theadStyle","_title","_titleStyle","_tooltipStyle","_trStyle","_tdStyle","_maxWidth","_minWidth","_width","content","background","light","d","i","color","render","callback","that","portal","tooltips","selectAll","data","enter","append","attr","update","merge","divElement","cat","div","html","val","visible","undefined","cellContent","datum","parentNode","indexOf","boxStyles","box","tableEnter","table","tableHead","theadTr","theadTrEnter","exit","remove","theadTrUpdate","th","tableBody","tr","trEnter","trUpdate","td","call","each","id","document","getElementById","offsetHeight","Array","isArray","ref","setTimeout","_","arguments","length","arrowStyle","body","bodyStyle","borderRadius","className","footer","footerStyle","pointerEvents","node","tableStyle","tbody","tbodyStyle","thead","theadStyle","title","titleStyle","tooltipStyle","trStyle","tdStyle","maxWidth","minWidth"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/index.ts"],"sourcesContent":["export {default as Axis} from \"./Axis.js\";\nexport {default as AxisBottom} from \"./AxisBottom.js\";\nexport {default as AxisLeft} from \"./AxisLeft.js\";\nexport {default as AxisRight} from \"./AxisRight.js\";\nexport {default as AxisTop} from \"./AxisTop.js\";\n\nexport {default as ColorScale} from \"./ColorScale.js\";\nexport {default as Legend} from \"./Legend.js\";\n\nexport {default as Message} from \"./Message.js\";\n\nexport {default as TextBox} from \"./TextBox.js\";\n\nexport {default as Timeline} from \"./Timeline.js\";\n\nexport {default as Tooltip} from \"./Tooltip.js\";\n"],"names":["default","Axis","AxisBottom","AxisLeft","AxisRight","AxisTop","ColorScale","Legend","Message","TextBox","Timeline","Tooltip"],"mappings":"AAAA,SAAQA,WAAWC,IAAI,QAAO,YAAY;AAC1C,SAAQD,WAAWE,UAAU,QAAO,kBAAkB;AACtD,SAAQF,WAAWG,QAAQ,QAAO,gBAAgB;AAClD,SAAQH,WAAWI,SAAS,QAAO,iBAAiB;AACpD,SAAQJ,WAAWK,OAAO,QAAO,eAAe;AAEhD,SAAQL,WAAWM,UAAU,QAAO,kBAAkB;AACtD,SAAQN,WAAWO,MAAM,QAAO,cAAc;AAE9C,SAAQP,WAAWQ,OAAO,QAAO,eAAe;AAEhD,SAAQR,WAAWS,OAAO,QAAO,eAAe;AAEhD,SAAQT,WAAWU,QAAQ,QAAO,gBAAgB;AAElD,SAAQV,WAAWW,OAAO,QAAO,eAAe"}
|
package/es/src/shapes/Area.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shapes/Area.ts"],"sourcesContent":["import {extent, groups} from \"d3-array\";\nimport {interpolatePath} from \"d3-interpolate-path\";\nimport {select} from \"d3-selection\";\nimport * as paths from \"d3-shape\";\n\nimport type {DataPoint} from \"@d3plus/data\";\nimport {merge} from \"@d3plus/data\";\nimport {largestRect} from \"@d3plus/math\";\nimport {accessor, constant} from \"../utils/index.js\";\nimport type {AccessorFn} from \"../utils/index.js\";\n\nimport Shape, {type ShapeAes} from \"./Shape.js\";\n\n/**\n Creates SVG areas based on an array of data.\n*/\nexport default class Area extends Shape {\n _curve: AccessorFn;\n _defined: (d: DataPoint) => boolean;\n declare _labelBounds:\n | ((\n d: DataPoint,\n i: number,\n aes: ShapeAes,\n ) => Record<string, unknown> | null | false)\n | null;\n declare _labelConfig: Record<string, unknown>;\n declare _name: string;\n declare _x: AccessorFn;\n _x0: AccessorFn;\n _x1: AccessorFn | null;\n declare _y: AccessorFn;\n _y0: AccessorFn;\n _y1: AccessorFn | null;\n declare _path: Record<string, unknown>;\n\n /**\n Invoked when creating a new class instance, and overrides any default parameters inherited from Shape.\n @private\n*/\n constructor() {\n super();\n\n this._curve = constant(\"linear\");\n this._defined = () => true;\n this._labelBounds = (\n d: DataPoint,\n i: number,\n aes: ShapeAes,\n ) => {\n const r = largestRect(aes.points as unknown as [number, number][]);\n if (!r) return null;\n return {\n angle: r.angle,\n width: r.width,\n height: r.height,\n x: r.cx - r.width / 2 - (this._x(d, i) as number),\n y: r.cy - r.height / 2 - (this._y(d, i) as number),\n };\n };\n this._labelConfig = Object.assign(this._labelConfig, {\n textAnchor: \"middle\",\n verticalAlign: \"middle\",\n });\n this._name = \"Area\";\n this._x = accessor(\"x\");\n this._x0 = accessor(\"x\");\n this._x1 = null;\n this._y = constant(0);\n this._y0 = constant(0);\n this._y1 = accessor(\"y\");\n }\n\n /**\n Given a specific data point and index, returns the aesthetic properties of the shape.\n @param data point*\n @param index @private\n*/\n _aes(d: DataPoint): ShapeAes {\n const values = (d.values as unknown as DataPoint[])\n .slice()\n .sort((a: DataPoint, b: DataPoint) =>\n this._y1\n ? (this._x(a) as number) - (this._x(b) as number)\n : (this._y(a) as number) - (this._y(b) as number),\n );\n const points1: [number, number][] = values.map(\n (v: DataPoint, z: number) => [\n this._x0(v, z) as number,\n this._y0(v, z) as number,\n ],\n );\n const points2: [number, number][] = values\n .reverse()\n .map((v: DataPoint, z: number) =>\n this._y1\n ? [this._x(v, z) as number, this._y1!(v, z) as number]\n : [this._x1!(v, z) as number, this._y(v, z) as number],\n );\n let points = points1.concat(points2);\n if (points1[0][1] > points2[0][1]) points = points.reverse();\n points.push(points[0]);\n return {points};\n }\n\n /**\n Filters/manipulates the data array before binding each point to an SVG group.\n @param data @private\n*/\n _dataFilter(data: DataPoint[]): DataPoint[] {\n const areas: DataPoint[] & {\n key?: (d: DataPoint) => DataPoint[keyof DataPoint];\n } = groups(data, this._id).map(\n ([key, values]: [DataPoint[keyof DataPoint], DataPoint[]]) => {\n const d: DataPoint = {key, values} as unknown as DataPoint;\n (d as Record<string, unknown>).data = merge(\n d.values as unknown as DataPoint[],\n );\n (d as Record<string, unknown>).i = data.indexOf(\n (d.values as unknown as DataPoint[])[0],\n );\n\n const x = extent(\n (d.values as unknown as DataPoint[])\n .map(this._x)\n .concat((d.values as unknown as DataPoint[]).map(this._x0))\n .concat(\n this._x1\n ? (d.values as unknown as DataPoint[]).map(this._x1)\n : [],\n ) as number[],\n );\n (d as Record<string, unknown>).xR = x;\n (d as Record<string, unknown>).width =\n (x[1] as number) - (x[0] as number);\n (d as Record<string, unknown>).x =\n (x[0] as number) + (d.width as number) / 2;\n\n const y = extent(\n (d.values as unknown as DataPoint[])\n .map(this._y)\n .concat((d.values as unknown as DataPoint[]).map(this._y0))\n .concat(\n this._y1\n ? (d.values as unknown as DataPoint[]).map(this._y1)\n : [],\n ) as number[],\n );\n (d as Record<string, unknown>).yR = y;\n (d as Record<string, unknown>).height =\n (y[1] as number) - (y[0] as number);\n (d as Record<string, unknown>).y =\n (y[0] as number) + (d.height as number) / 2;\n\n (d as Record<string, unknown>).nested = true;\n (d as Record<string, unknown>).translate = [d.x, d.y];\n (d as Record<string, unknown>).__d3plusShape__ = true;\n\n return d;\n },\n );\n\n areas.key = (d: DataPoint) => d.key;\n return areas;\n }\n\n /**\n Draws the area polygons.\n @param callback Optional callback invoked after rendering completes.\n*/\n render(callback?: () => void): this {\n super.render(callback);\n\n const userCurve = this._curve.bind(this)(\n this.config() as DataPoint,\n ) as string;\n const curve = (paths as Record<string, unknown>)[\n `curve${userCurve.charAt(0).toUpperCase()}${userCurve.slice(1)}`\n ];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const path = (this._path = (paths as any)\n .area()\n .defined(this._defined)\n .curve(curve)\n .x(this._x)\n .x0(this._x0)\n .x1(this._x1)\n .y(this._y)\n .y0(this._y0)\n .y1(this._y1) as unknown as Record<string, unknown>);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const exitPath = (paths as any)\n .area()\n .defined((d: DataPoint) => d)\n .curve(curve)\n .x(this._x)\n .y(this._y)\n .x0((d: DataPoint, i: number) =>\n this._x1\n ? (this._x0(d, i) as number) +\n ((this._x1!(d, i) as number) - (this._x0(d, i) as number)) / 2\n : this._x0(d, i),\n )\n .x1((d: DataPoint, i: number) =>\n this._x1\n ? (this._x0(d, i) as number) +\n ((this._x1!(d, i) as number) - (this._x0(d, i) as number)) / 2\n : this._x0(d, i),\n )\n .y0((d: DataPoint, i: number) =>\n this._y1\n ? (this._y0(d, i) as number) +\n ((this._y1!(d, i) as number) - (this._y0(d, i) as number)) / 2\n : this._y0(d, i),\n )\n .y1((d: DataPoint, i: number) =>\n this._y1\n ? (this._y0(d, i) as number) +\n ((this._y1!(d, i) as number) - (this._y0(d, i) as number)) / 2\n : this._y0(d, i),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._enter\n .append(\"path\")\n .attr(\n \"transform\",\n (d: DataPoint) =>\n `translate(${-(d.xR as unknown as number[])[0] - (d.width as number) / 2}, ${-(d.yR as unknown as number[])[0] - (d.height as number) / 2})`,\n )\n .attr(\"d\", (d: DataPoint) => exitPath(d.values))\n .call(this._applyStyle.bind(this))\n .transition(this._transition) as any)\n .attrTween(\"d\", function (this: Element, d: DataPoint) {\n return interpolatePath(\n select(this).attr(\"d\"),\n (path as unknown as (v: unknown) => string)(\n (d as Record<string, unknown>).values,\n ),\n );\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._update\n .select(\"path\")\n .transition(this._transition)\n .attr(\n \"transform\",\n (d: DataPoint) =>\n `translate(${-(d.xR as unknown as number[])[0] - (d.width as number) / 2}, ${-(d.yR as unknown as number[])[0] - (d.height as number) / 2})`,\n ) as any)\n .attrTween(\"d\", function (this: Element, d: DataPoint) {\n return interpolatePath(\n select(this).attr(\"d\"),\n (path as unknown as (v: unknown) => string)(\n (d as Record<string, unknown>).values,\n ),\n );\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .call(this._applyStyle.bind(this) as any);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._exit\n .select(\"path\")\n .transition(this._transition) as any)\n .attrTween(\"d\", function (this: Element, d: DataPoint) {\n return interpolatePath(\n select(this).attr(\"d\"),\n exitPath((d as Record<string, unknown>).values),\n );\n });\n\n return this;\n }\n\n /**\n The d3 curve function used to interpolate the area.\n*/\n curve(): AccessorFn;\n curve(_: AccessorFn | string): this;\n curve(_?: AccessorFn | string): AccessorFn | this {\n return arguments.length\n ? ((this._curve = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._curve;\n }\n\n /**\n An accessor function that determines whether a data point is defined (not a gap in the area).\n*/\n defined(): (d: DataPoint) => boolean;\n defined(_: (d: DataPoint) => boolean): this;\n defined(_?: (d: DataPoint) => boolean): ((d: DataPoint) => boolean) | this {\n return arguments.length ? ((this._defined = _!), this) : this._defined;\n }\n\n /**\n The x position accessor. Also sets x0 to the same value.\n*/\n x(): AccessorFn;\n x(_: AccessorFn | number): this;\n x(_?: AccessorFn | number): AccessorFn | this {\n if (!arguments.length) return this._x;\n this._x = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn;\n this._x0 = this._x;\n return this;\n }\n\n /**\n The x0 (left edge) position accessor for the area.\n*/\n x0(): AccessorFn;\n x0(_: AccessorFn | number): this;\n x0(_?: AccessorFn | number): AccessorFn | this {\n if (!arguments.length) return this._x0;\n this._x0 =\n typeof _ === \"function\" ? _ : (constant(_) as unknown as AccessorFn);\n this._x = this._x0;\n return this;\n }\n\n /**\n The x1 (right edge) position accessor for the area.\n*/\n x1(): AccessorFn | null;\n x1(_: AccessorFn | number | null): this;\n x1(_?: AccessorFn | number | null): AccessorFn | null | this {\n return arguments.length\n ? ((this._x1 =\n typeof _ === \"function\"\n ? _\n : _ === null\n ? null\n : (constant(_) as unknown as AccessorFn)),\n this)\n : this._x1;\n }\n\n /**\n The y position accessor. Also sets y0 to the same value.\n*/\n y(): AccessorFn;\n y(_: AccessorFn | number): this;\n y(_?: AccessorFn | number): AccessorFn | this {\n if (!arguments.length) return this._y;\n this._y = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn;\n this._y0 = this._y;\n return this;\n }\n\n /**\n The y0 (top edge) position accessor for the area.\n*/\n y0(): AccessorFn;\n y0(_: AccessorFn | number): this;\n y0(_?: AccessorFn | number): AccessorFn | this {\n if (!arguments.length) return this._y0;\n this._y0 =\n typeof _ === \"function\" ? _ : (constant(_) as unknown as AccessorFn);\n this._y = this._y0;\n return this;\n }\n\n /**\n The y1 (bottom edge) position accessor for the area.\n*/\n y1(): AccessorFn | null;\n y1(_: AccessorFn | number | null): this;\n y1(_?: AccessorFn | number | null): AccessorFn | null | this {\n return arguments.length\n ? ((this._y1 =\n typeof _ === \"function\"\n ? _\n : _ === null\n ? null\n : (constant(_) as unknown as AccessorFn)),\n this)\n : this._y1;\n }\n}\n"],"names":["extent","groups","interpolatePath","select","paths","merge","largestRect","accessor","constant","Shape","Area","_curve","_defined","_x0","_x1","_y0","_y1","_labelBounds","d","i","aes","r","points","angle","width","height","x","cx","_x","y","cy","_y","_labelConfig","Object","assign","textAnchor","verticalAlign","_name","_aes","values","slice","sort","a","b","points1","map","v","z","points2","reverse","concat","push","_dataFilter","data","areas","_id","key","indexOf","xR","yR","nested","translate","__d3plusShape__","render","callback","userCurve","bind","config","curve","charAt","toUpperCase","path","_path","area","defined","x0","x1","y0","y1","exitPath","_enter","append","attr","call","_applyStyle","transition","_transition","attrTween","_update","_exit","_","arguments","length"],"mappings":"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"}
|
package/es/src/shapes/Bar.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shapes/Bar.ts"],"sourcesContent":["import type {DataPoint} from \"@d3plus/data\";\nimport type {D3Selection} from \"@d3plus/dom\";\nimport {accessor, constant} from \"../utils/index.js\";\nimport type {AccessorFn} from \"../utils/index.js\";\n\nimport Shape, {type ShapeAes} from \"./Shape.js\";\n\n/**\n Creates SVG areas based on an array of data.\n*/\nexport default class Bar extends Shape {\n _height: AccessorFn;\n declare _labelBounds:\n | ((\n d: DataPoint,\n i: number,\n aes: ShapeAes,\n ) => Record<string, unknown> | null | false)\n | null;\n declare _name: string;\n _width: AccessorFn;\n declare _x: AccessorFn;\n _x0: AccessorFn;\n _x1: AccessorFn | null;\n declare _y: AccessorFn;\n _y0: AccessorFn;\n _y1: AccessorFn | null;\n\n /**\n Invoked when creating a new class instance, and overrides any default parameters inherited from Shape.\n @private\n*/\n constructor() {\n super(\"rect\");\n\n this._name = \"Bar\";\n this._height = constant(10);\n this._labelBounds = (\n d: DataPoint,\n i: number,\n s: ShapeAes,\n ) => ({\n width: s.width,\n height: s.height,\n x: this._x1 !== null ? this._getX(d, i) : -(s.width as number) / 2,\n y: this._x1 === null ? this._getY(d, i) : -(s.height as number) / 2,\n });\n this._width = constant(10);\n this._x = accessor(\"x\");\n this._x0 = accessor(\"x\");\n this._x1 = null;\n this._y = constant(0);\n this._y0 = constant(0);\n this._y1 = accessor(\"y\");\n }\n\n /**\n Draws the bars.\n @param callback Optional callback invoked after rendering completes.\n*/\n render(callback?: () => void): this {\n super.render(callback);\n\n let enter: D3Selection = this._enter\n .attr(\"width\", (d: DataPoint, i: number) =>\n this._x1 === null ? this._getWidth(d, i) : 0,\n )\n .attr(\"height\", (d: DataPoint, i: number) =>\n this._x1 !== null ? this._getHeight(d, i) : 0,\n )\n .attr(\"x\", (d: DataPoint, i: number) =>\n this._x1 === null ? -this._getWidth(d, i) / 2 : 0,\n )\n .attr(\"y\", (d: DataPoint, i: number) =>\n this._x1 !== null ? -this._getHeight(d, i) / 2 : 0,\n )\n .call(this._applyStyle.bind(this));\n\n let update: D3Selection = this._update;\n\n if (this._duration) {\n enter = enter.transition(this._transition) as unknown as D3Selection;\n update = update.transition(this._transition) as unknown as D3Selection;\n this._exit\n .transition(this._transition)\n .attr(\"width\", (d: DataPoint, i: number) =>\n this._x1 === null ? this._getWidth(d, i) : 0,\n )\n .attr(\"height\", (d: DataPoint, i: number) =>\n this._x1 !== null ? this._getHeight(d, i) : 0,\n )\n .attr(\"x\", (d: DataPoint, i: number) =>\n this._x1 === null ? -this._getWidth(d, i) / 2 : 0,\n )\n .attr(\"y\", (d: DataPoint, i: number) =>\n this._x1 !== null ? -this._getHeight(d, i) / 2 : 0,\n );\n }\n\n enter.call(this._applyPosition.bind(this));\n\n update\n .call(this._applyStyle.bind(this))\n .call(this._applyPosition.bind(this));\n\n return this;\n }\n\n /**\n Given a specific data point and index, returns the aesthetic properties of the shape.\n @param data point*\n @param index @private\n*/\n _aes(d: DataPoint, i: number): ShapeAes {\n return {\n height: this._getHeight(d, i) as number,\n width: this._getWidth(d, i) as number,\n };\n }\n\n /**\n Provides the default positioning to the <rect> elements.\n @param elem @private\n*/\n _applyPosition(elem: D3Selection): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (elem as any)\n .attr(\"width\", (d: DataPoint, i: number) => this._getWidth(d, i))\n .attr(\"height\", (d: DataPoint, i: number) => this._getHeight(d, i))\n .attr(\"x\", (d: DataPoint, i: number) =>\n this._x1 !== null ? this._getX(d, i) : -this._getWidth(d, i) / 2,\n )\n .attr(\"y\", (d: DataPoint, i: number) =>\n this._x1 === null ? this._getY(d, i) : -this._getHeight(d, i) / 2,\n );\n }\n\n /**\n Calculates the height of the <rect> by assessing the x and y properties.\n\n @private\n*/\n _getHeight(d: DataPoint, i: number): number {\n if (this._x1 !== null) return this._height(d, i) as number;\n return Math.abs((this._y1!(d, i) as number) - (this._y(d, i) as number));\n }\n\n /**\n Calculates the width of the <rect> by assessing the x and y properties.\n\n @private\n*/\n _getWidth(d: DataPoint, i: number): number {\n if (this._x1 === null) return this._width(d, i) as number;\n return Math.abs((this._x1!(d, i) as number) - (this._x(d, i) as number));\n }\n\n /**\n Calculates the x of the <rect> by assessing the x and width properties.\n\n @private\n*/\n _getX(d: DataPoint, i: number): number {\n const w =\n this._x1 === null\n ? (this._x(d, i) as number)\n : (this._x1!(d, i) as number) - (this._x(d, i) as number);\n if (w < 0) return w;\n else return 0;\n }\n\n /**\n Calculates the y of the <rect> by assessing the y and height properties.\n\n @private\n*/\n _getY(d: DataPoint, i: number): number {\n const h =\n this._x1 !== null\n ? (this._y(d, i) as number)\n : (this._y1!(d, i) as number) - (this._y(d, i) as number);\n if (h < 0) return h;\n else return 0;\n }\n\n /**\n The height accessor for each bar.\n\n@example\nfunction(d) {\n return d.height;\n}\n*/\n height(): AccessorFn;\n height(_: AccessorFn | number): this;\n height(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._height = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._height;\n }\n\n /**\n The width accessor for each bar.\n\n@example\nfunction(d) {\n return d.width;\n}\n*/\n width(): AccessorFn;\n width(_: AccessorFn | number): this;\n width(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._width = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._width;\n }\n\n /**\n The x0 (left edge) position accessor for each bar.\n*/\n x0(): AccessorFn;\n x0(_: AccessorFn | number): this;\n x0(_?: AccessorFn | number): AccessorFn | this {\n if (!arguments.length) return this._x0;\n this._x0 =\n typeof _ === \"function\" ? _ : (constant(_) as unknown as AccessorFn);\n this._x = this._x0;\n return this;\n }\n\n /**\n The x1 (right edge) position accessor for each bar.\n*/\n x1(): AccessorFn | null;\n x1(_: AccessorFn | number | null): this;\n x1(_?: AccessorFn | number | null): AccessorFn | null | this {\n return arguments.length\n ? ((this._x1 =\n typeof _ === \"function\"\n ? _\n : _ === null\n ? null\n : (constant(_) as unknown as AccessorFn)),\n this)\n : this._x1;\n }\n\n /**\n The y0 (top edge) position accessor for each bar.\n*/\n y0(): AccessorFn;\n y0(_: AccessorFn | number): this;\n y0(_?: AccessorFn | number): AccessorFn | this {\n if (!arguments.length) return this._y0;\n this._y0 =\n typeof _ === \"function\" ? _ : (constant(_) as unknown as AccessorFn);\n this._y = this._y0;\n return this;\n }\n\n /**\n The y1 (bottom edge) position accessor for each bar.\n*/\n y1(): AccessorFn | null;\n y1(_: AccessorFn | number | null): this;\n y1(_?: AccessorFn | number | null): AccessorFn | null | this {\n return arguments.length\n ? ((this._y1 =\n typeof _ === \"function\"\n ? _\n : _ === null\n ? null\n : (constant(_) as unknown as AccessorFn)),\n this)\n : this._y1;\n }\n}\n"],"names":["accessor","constant","Shape","Bar","_height","_width","_x0","_x1","_y0","_y1","_name","_labelBounds","d","i","s","width","height","x","_getX","y","_getY","_x","_y","render","callback","enter","_enter","attr","_getWidth","_getHeight","call","_applyStyle","bind","update","_update","_duration","transition","_transition","_exit","_applyPosition","_aes","elem","Math","abs","w","h","_","arguments","length","x0","x1","y0","y1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAQA,QAAQ,EAAEC,QAAQ,QAAO,oBAAoB;AAGrD,OAAOC,WAA4B,aAAa;AAKjC,IAAA,AAAMC,oBAAN;;cAAMA;aAAAA;gCAAAA;;gBAuBjB,kBAvBiBA;YAuBX;YAtBRC,wBAAAA,WAAAA,KAAAA,IASAC,wBAAAA,UAAAA,KAAAA,IAEAC,wBAAAA,OAAAA,KAAAA,IACAC,wBAAAA,OAAAA,KAAAA,IAEAC,wBAAAA,OAAAA,KAAAA,IACAC,wBAAAA,OAAAA,KAAAA;QASE,MAAKC,KAAK,GAAG;QACb,MAAKN,OAAO,GAAGH,SAAS;QACxB,MAAKU,YAAY,GAAG,SAClBC,GACAC,GACAC;mBACI;gBACJC,OAAOD,EAAEC,KAAK;gBACdC,QAAQF,EAAEE,MAAM;gBAChBC,GAAG,MAAKV,GAAG,KAAK,OAAO,MAAKW,KAAK,CAACN,GAAGC,KAAK,CAAEC,EAAEC,KAAK,GAAc;gBACjEI,GAAG,MAAKZ,GAAG,KAAK,OAAO,MAAKa,KAAK,CAACR,GAAGC,KAAK,CAAEC,EAAEE,MAAM,GAAc;YACpE;;QACA,MAAKX,MAAM,GAAGJ,SAAS;QACvB,MAAKoB,EAAE,GAAGrB,SAAS;QACnB,MAAKM,GAAG,GAAGN,SAAS;QACpB,MAAKO,GAAG,GAAG;QACX,MAAKe,EAAE,GAAGrB,SAAS;QACnB,MAAKO,GAAG,GAAGP,SAAS;QACpB,MAAKQ,GAAG,GAAGT,SAAS;;;kBA3CHG;;YA8CnB;;;AAGF,GACEoB,KAAAA;mBAAAA,SAAAA,OAAOC,QAAqB;;gBAC1B,uBAnDiBrB,gBAmDXoB,UAAN,IAAK,aAAQC;gBAEb,IAAIC,QAAqB,IAAI,CAACC,MAAM,CACjCC,IAAI,CAAC,SAAS,SAACf,GAAcC;2BAC5B,MAAKN,GAAG,KAAK,OAAO,MAAKqB,SAAS,CAAChB,GAAGC,KAAK;mBAE5Cc,IAAI,CAAC,UAAU,SAACf,GAAcC;2BAC7B,MAAKN,GAAG,KAAK,OAAO,MAAKsB,UAAU,CAACjB,GAAGC,KAAK;mBAE7Cc,IAAI,CAAC,KAAK,SAACf,GAAcC;2BACxB,MAAKN,GAAG,KAAK,OAAO,CAAC,MAAKqB,SAAS,CAAChB,GAAGC,KAAK,IAAI;mBAEjDc,IAAI,CAAC,KAAK,SAACf,GAAcC;2BACxB,MAAKN,GAAG,KAAK,OAAO,CAAC,MAAKsB,UAAU,CAACjB,GAAGC,KAAK,IAAI;mBAElDiB,IAAI,CAAC,IAAI,CAACC,WAAW,CAACC,IAAI,CAAC,IAAI;gBAElC,IAAIC,SAAsB,IAAI,CAACC,OAAO;gBAEtC,IAAI,IAAI,CAACC,SAAS,EAAE;oBAClBV,QAAQA,MAAMW,UAAU,CAAC,IAAI,CAACC,WAAW;oBACzCJ,SAASA,OAAOG,UAAU,CAAC,IAAI,CAACC,WAAW;oBAC3C,IAAI,CAACC,KAAK,CACPF,UAAU,CAAC,IAAI,CAACC,WAAW,EAC3BV,IAAI,CAAC,SAAS,SAACf,GAAcC;+BAC5B,MAAKN,GAAG,KAAK,OAAO,MAAKqB,SAAS,CAAChB,GAAGC,KAAK;uBAE5Cc,IAAI,CAAC,UAAU,SAACf,GAAcC;+BAC7B,MAAKN,GAAG,KAAK,OAAO,MAAKsB,UAAU,CAACjB,GAAGC,KAAK;uBAE7Cc,IAAI,CAAC,KAAK,SAACf,GAAcC;+BACxB,MAAKN,GAAG,KAAK,OAAO,CAAC,MAAKqB,SAAS,CAAChB,GAAGC,KAAK,IAAI;uBAEjDc,IAAI,CAAC,KAAK,SAACf,GAAcC;+BACxB,MAAKN,GAAG,KAAK,OAAO,CAAC,MAAKsB,UAAU,CAACjB,GAAGC,KAAK,IAAI;;gBAEvD;gBAEAY,MAAMK,IAAI,CAAC,IAAI,CAACS,cAAc,CAACP,IAAI,CAAC,IAAI;gBAExCC,OACGH,IAAI,CAAC,IAAI,CAACC,WAAW,CAACC,IAAI,CAAC,IAAI,GAC/BF,IAAI,CAAC,IAAI,CAACS,cAAc,CAACP,IAAI,CAAC,IAAI;gBAErC,OAAO,IAAI;YACb;;;YAEA;;;;AAIF,GACEQ,KAAAA;mBAAAA,SAAAA,KAAK5B,CAAY,EAAEC,CAAS;gBAC1B,OAAO;oBACLG,QAAQ,IAAI,CAACa,UAAU,CAACjB,GAAGC;oBAC3BE,OAAO,IAAI,CAACa,SAAS,CAAChB,GAAGC;gBAC3B;YACF;;;YAEA;;;AAGF,GACE0B,KAAAA;mBAAAA,SAAAA,eAAeE,IAAiB;;gBAC9B,8DAA8D;gBAC7DA,KACEd,IAAI,CAAC,SAAS,SAACf,GAAcC;2BAAc,MAAKe,SAAS,CAAChB,GAAGC;mBAC7Dc,IAAI,CAAC,UAAU,SAACf,GAAcC;2BAAc,MAAKgB,UAAU,CAACjB,GAAGC;mBAC/Dc,IAAI,CAAC,KAAK,SAACf,GAAcC;2BACxB,MAAKN,GAAG,KAAK,OAAO,MAAKW,KAAK,CAACN,GAAGC,KAAK,CAAC,MAAKe,SAAS,CAAChB,GAAGC,KAAK;mBAEhEc,IAAI,CAAC,KAAK,SAACf,GAAcC;2BACxB,MAAKN,GAAG,KAAK,OAAO,MAAKa,KAAK,CAACR,GAAGC,KAAK,CAAC,MAAKgB,UAAU,CAACjB,GAAGC,KAAK;;YAEtE;;;YAEA;;;;AAIF,GACEgB,KAAAA;mBAAAA,SAAAA,WAAWjB,CAAY,EAAEC,CAAS;gBAChC,IAAI,IAAI,CAACN,GAAG,KAAK,MAAM,OAAO,IAAI,CAACH,OAAO,CAACQ,GAAGC;gBAC9C,OAAO6B,KAAKC,GAAG,CAAC,AAAC,IAAI,CAAClC,GAAG,CAAEG,GAAGC,KAAiB,IAAI,CAACS,EAAE,CAACV,GAAGC;YAC5D;;;YAEA;;;;AAIF,GACEe,KAAAA;mBAAAA,SAAAA,UAAUhB,CAAY,EAAEC,CAAS;gBAC/B,IAAI,IAAI,CAACN,GAAG,KAAK,MAAM,OAAO,IAAI,CAACF,MAAM,CAACO,GAAGC;gBAC7C,OAAO6B,KAAKC,GAAG,CAAC,AAAC,IAAI,CAACpC,GAAG,CAAEK,GAAGC,KAAiB,IAAI,CAACQ,EAAE,CAACT,GAAGC;YAC5D;;;YAEA;;;;AAIF,GACEK,KAAAA;mBAAAA,SAAAA,MAAMN,CAAY,EAAEC,CAAS;gBAC3B,IAAM+B,IACJ,IAAI,CAACrC,GAAG,KAAK,OACR,IAAI,CAACc,EAAE,CAACT,GAAGC,KACZ,AAAC,IAAI,CAACN,GAAG,CAAEK,GAAGC,KAAiB,IAAI,CAACQ,EAAE,CAACT,GAAGC;gBAChD,IAAI+B,IAAI,GAAG,OAAOA;qBACb,OAAO;YACd;;;YAEA;;;;AAIF,GACExB,KAAAA;mBAAAA,SAAAA,MAAMR,CAAY,EAAEC,CAAS;gBAC3B,IAAMgC,IACJ,IAAI,CAACtC,GAAG,KAAK,OACR,IAAI,CAACe,EAAE,CAACV,GAAGC,KACZ,AAAC,IAAI,CAACJ,GAAG,CAAEG,GAAGC,KAAiB,IAAI,CAACS,EAAE,CAACV,GAAGC;gBAChD,IAAIgC,IAAI,GAAG,OAAOA;qBACb,OAAO;YACd;;;YAYA7B,KAAAA;mBAAAA,SAAAA,OAAO8B,CAAuB;gBAC5B,OAAOC,UAAUC,MAAM,GAClB,CAAA,AAAC,IAAI,CAAC5C,OAAO,GAAG,OAAO0C,MAAM,aAAaA,IAAI7C,SAAS6C,IAA8B,IAAI,AAAD,IACzF,IAAI,CAAC1C,OAAO;YAClB;;;YAYAW,KAAAA;mBAAAA,SAAAA,MAAM+B,CAAuB;gBAC3B,OAAOC,UAAUC,MAAM,GAClB,CAAA,AAAC,IAAI,CAAC3C,MAAM,GAAG,OAAOyC,MAAM,aAAaA,IAAI7C,SAAS6C,IAA8B,IAAI,AAAD,IACxF,IAAI,CAACzC,MAAM;YACjB;;;YAOA4C,KAAAA;mBAAAA,SAAAA,GAAGH,CAAuB;gBACxB,IAAI,CAACC,UAAUC,MAAM,EAAE,OAAO,IAAI,CAAC1C,GAAG;gBACtC,IAAI,CAACA,GAAG,GACN,OAAOwC,MAAM,aAAaA,IAAK7C,SAAS6C;gBAC1C,IAAI,CAACzB,EAAE,GAAG,IAAI,CAACf,GAAG;gBAClB,OAAO,IAAI;YACb;;;YAOA4C,KAAAA;mBAAAA,SAAAA,GAAGJ,CAA8B;gBAC/B,OAAOC,UAAUC,MAAM,GAClB,CAAA,AAAC,IAAI,CAACzC,GAAG,GACR,OAAOuC,MAAM,aACTA,IACAA,MAAM,OACJ,OACC7C,SAAS6C,IAClB,IAAI,AAAD,IACH,IAAI,CAACvC,GAAG;YACd;;;YAOA4C,KAAAA;mBAAAA,SAAAA,GAAGL,CAAuB;gBACxB,IAAI,CAACC,UAAUC,MAAM,EAAE,OAAO,IAAI,CAACxC,GAAG;gBACtC,IAAI,CAACA,GAAG,GACN,OAAOsC,MAAM,aAAaA,IAAK7C,SAAS6C;gBAC1C,IAAI,CAACxB,EAAE,GAAG,IAAI,CAACd,GAAG;gBAClB,OAAO,IAAI;YACb;;;YAOA4C,KAAAA;mBAAAA,SAAAA,GAAGN,CAA8B;gBAC/B,OAAOC,UAAUC,MAAM,GAClB,CAAA,AAAC,IAAI,CAACvC,GAAG,GACR,OAAOqC,MAAM,aACTA,IACAA,MAAM,OACJ,OACC7C,SAAS6C,IAClB,IAAI,AAAD,IACH,IAAI,CAACrC,GAAG;YACd;;;WAzQmBN;EAAYD;AAHjC;;AAEA,GACA,SAAqBC,iBA0QpB"}
|
package/es/src/shapes/Box.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shapes/Box.ts"],"sourcesContent":["import {groups, max, min, quantile} from \"d3-array\";\nimport {select} from \"d3-selection\";\n\nimport type {DataPoint} from \"@d3plus/data\";\nimport {merge} from \"@d3plus/data\";\nimport {assign, elem} from \"@d3plus/dom\";\nimport type {D3Selection} from \"@d3plus/dom\";\nimport {accessor, BaseClass, configPrep, constant} from \"../utils/index.js\";\nimport type {AccessorFn} from \"../utils/index.js\";\n\nimport Circle from \"./Circle.js\";\nimport Rect from \"./Rect.js\";\nimport Whisker from \"./Whisker.js\";\n\nconst shapes: Record<string, typeof Circle | typeof Rect> = {Circle, Rect};\n\n/**\n Creates SVG box based on an array of data.\n*/\nexport default class Box extends BaseClass {\n _medianConfig: Record<string, unknown>;\n _orient: AccessorFn;\n _outlier: AccessorFn;\n _outlierConfig: Record<string, unknown>;\n _rectConfig: Record<string, unknown>;\n _rectWidth: AccessorFn;\n _whiskerConfig: Record<string, unknown>;\n _whiskerMode: (string | number)[];\n _x: AccessorFn;\n _y: AccessorFn;\n _data!: DataPoint[];\n _select!: D3Selection;\n _box!: Rect;\n _median!: Rect;\n _whisker!: Whisker;\n _whiskerEndpoint: (Circle | Rect)[];\n _duration!: number;\n\n /**\n Invoked when creating a new class instance, and overrides any default parameters inherited from BaseClass.\n @private\n*/\n constructor() {\n super();\n\n this._medianConfig = {\n fill: constant(\"black\"),\n };\n this._orient = accessor(\"orient\", \"vertical\");\n this._outlier = accessor(\"outlier\", \"Circle\");\n this._outlierConfig = {\n Circle: {\n r: accessor(\"r\", 5),\n },\n Rect: {\n height: (d: DataPoint, i: number) =>\n this._orient(d, i) === \"vertical\" ? 5 : 20,\n width: (d: DataPoint, i: number) =>\n this._orient(d, i) === \"vertical\" ? 20 : 5,\n },\n };\n this._rectConfig = {\n fill: constant(\"white\"),\n stroke: constant(\"black\"),\n strokeWidth: constant(1),\n };\n this._rectWidth = constant(50);\n this._whiskerConfig = {};\n this._whiskerMode = [\"tukey\", \"tukey\"];\n this._x = accessor(\"x\", 250);\n this._y = accessor(\"y\", 250);\n this._whiskerEndpoint = [];\n }\n\n /**\n Draws the Box.\n*/\n render(): this {\n if (this._select === void 0) {\n this.select(\n select(\"body\")\n .append(\"svg\")\n .style(\"width\", `${window.innerWidth}px`)\n .style(\"height\", `${window.innerHeight}px`)\n .style(\"display\", \"block\")\n .node(),\n );\n }\n\n const outlierData: DataPoint[] = [];\n\n const filteredData = groups(this._data, (d: DataPoint, i: number) =>\n this._orient(d, i) === \"vertical\" ? this._x(d, i) : this._y(d, i),\n ).map(([key, groupData]: [DataPoint[keyof DataPoint], DataPoint[]]) => {\n const d: DataPoint = {key, values: groupData} as unknown as DataPoint;\n (d as Record<string, unknown>).data = merge(\n d.values as unknown as DataPoint[],\n );\n (d as Record<string, unknown>).i = this._data.indexOf(\n (d.values as unknown as DataPoint[])[0],\n );\n (d as Record<string, unknown>).orient = this._orient(\n d.data as DataPoint,\n d.i as number,\n );\n const values: number[] = (d.values as unknown as DataPoint[]).map(\n (d as Record<string, unknown>).orient === \"vertical\"\n ? this._y\n : this._x,\n ) as unknown as number[];\n values.sort((a: number, b: number) => a - b);\n\n (d as Record<string, unknown>).first = quantile(values, 0.25);\n (d as Record<string, unknown>).median = quantile(values, 0.5);\n (d as Record<string, unknown>).third = quantile(values, 0.75);\n\n const mode = this._whiskerMode;\n\n if (mode[0] === \"tukey\") {\n (d as Record<string, unknown>).lowerLimit =\n (d.first as number) -\n ((d.third as number) - (d.first as number)) * 1.5;\n if ((d.lowerLimit as number) < min(values)!)\n (d as Record<string, unknown>).lowerLimit = min(values);\n } else if (mode[0] === \"extent\")\n (d as Record<string, unknown>).lowerLimit = min(values);\n else if (typeof mode[0] === \"number\")\n (d as Record<string, unknown>).lowerLimit = quantile(values, mode[0]);\n\n if (mode[1] === \"tukey\") {\n (d as Record<string, unknown>).upperLimit =\n (d.third as number) +\n ((d.third as number) - (d.first as number)) * 1.5;\n if ((d.upperLimit as number) > max(values)!)\n (d as Record<string, unknown>).upperLimit = max(values);\n } else if (mode[1] === \"extent\")\n (d as Record<string, unknown>).upperLimit = max(values);\n else if (typeof mode[1] === \"number\")\n (d as Record<string, unknown>).upperLimit = quantile(values, mode[1]);\n\n const rectLength = (d.third as number) - (d.first as number);\n\n // Compute values for vertical orientation.\n if (d.orient === \"vertical\") {\n (d as Record<string, unknown>).height = rectLength;\n (d as Record<string, unknown>).width = this._rectWidth(\n d.data as DataPoint,\n d.i as number,\n );\n (d as Record<string, unknown>).x = this._x(\n d.data as DataPoint,\n d.i as number,\n );\n (d as Record<string, unknown>).y = (d.first as number) + rectLength / 2;\n } else if (d.orient === \"horizontal\") {\n // Compute values for horizontal orientation.\n (d as Record<string, unknown>).height = this._rectWidth(\n d.data as DataPoint,\n d.i as number,\n );\n (d as Record<string, unknown>).width = rectLength;\n (d as Record<string, unknown>).x = (d.first as number) + rectLength / 2;\n (d as Record<string, unknown>).y = this._y(\n d.data as DataPoint,\n d.i as number,\n );\n }\n\n // Compute data for outliers.\n (d.values as unknown as DataPoint[]).forEach(\n (eachValue: DataPoint, index: number) => {\n const value =\n d.orient === \"vertical\"\n ? (this._y(eachValue, index) as number)\n : (this._x(eachValue, index) as number);\n\n if (\n value < (d.lowerLimit as number) ||\n value > (d.upperLimit as number)\n ) {\n const dataObj: DataPoint = {} as DataPoint;\n (dataObj as Record<string, unknown>).__d3plus__ = true;\n (dataObj as Record<string, unknown>).data = eachValue;\n (dataObj as Record<string, unknown>).i = index;\n (dataObj as Record<string, unknown>).outlier = this._outlier(\n eachValue,\n index,\n );\n\n if (d.orient === \"vertical\") {\n (dataObj as Record<string, unknown>).x = d.x;\n (dataObj as Record<string, unknown>).y = value;\n outlierData.push(dataObj);\n } else if (d.orient === \"horizontal\") {\n (dataObj as Record<string, unknown>).y = d.y;\n (dataObj as Record<string, unknown>).x = value;\n outlierData.push(dataObj);\n }\n }\n },\n );\n\n (d as Record<string, unknown>).__d3plus__ = true;\n\n return d;\n });\n\n // Draw box.\n this._box = new Rect()\n .data(filteredData)\n .x((d: DataPoint) => d.x)\n .y((d: DataPoint) => d.y)\n .select(elem(\"g.d3plus-Box\", {parent: this._select}).node())\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .config(configPrep.bind(this as any)(this._rectConfig, \"shape\")!)\n .render();\n\n // Draw median.\n this._median = new Rect()\n .data(filteredData)\n .x((d: DataPoint) => (d.orient === \"vertical\" ? d.x : d.median))\n .y((d: DataPoint) => (d.orient === \"vertical\" ? d.median : d.y))\n .height((d: DataPoint) => (d.orient === \"vertical\" ? 1 : d.height))\n .width((d: DataPoint) => (d.orient === \"vertical\" ? d.width : 1))\n .select(elem(\"g.d3plus-Box-Median\", {parent: this._select}).node())\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .config(configPrep.bind(this as any)(this._medianConfig, \"shape\")!)\n .render();\n\n // Draw 2 lines using Whisker class.\n // Construct coordinates for whisker startpoints and push it to the whiskerData.\n const whiskerData: DataPoint[] = [];\n filteredData.forEach((d: DataPoint, i: number) => {\n const x = d.x;\n const y = d.y;\n const topLength = (d.first as number) - (d.lowerLimit as number);\n const bottomLength = (d.upperLimit as number) - (d.third as number);\n\n if (d.orient === \"vertical\") {\n const topY = (y as number) - (d.height as number) / 2;\n const bottomY = (y as number) + (d.height as number) / 2;\n whiskerData.push(\n {\n __d3plus__: true,\n data: d,\n i,\n x,\n y: topY,\n length: topLength,\n orient: \"top\",\n } as unknown as DataPoint,\n {\n __d3plus__: true,\n data: d,\n i,\n x,\n y: bottomY,\n length: bottomLength,\n orient: \"bottom\",\n } as unknown as DataPoint,\n );\n } else if (d.orient === \"horizontal\") {\n const topX = (x as number) + (d.width as number) / 2;\n const bottomX = (x as number) - (d.width as number) / 2;\n whiskerData.push(\n {\n __d3plus__: true,\n data: d,\n i,\n x: topX,\n y,\n length: bottomLength,\n orient: \"right\",\n } as unknown as DataPoint,\n {\n __d3plus__: true,\n data: d,\n i,\n x: bottomX,\n y,\n length: topLength,\n orient: \"left\",\n } as unknown as DataPoint,\n );\n }\n });\n\n // Draw whiskers.\n this._whisker = new Whisker()\n .data(whiskerData)\n .select(elem(\"g.d3plus-Box-Whisker\", {parent: this._select}).node())\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .config(configPrep.bind(this as any)(this._whiskerConfig, \"shape\")!)\n .render();\n\n // Draw outliers.\n this._whiskerEndpoint = [];\n groups(outlierData, (d: DataPoint) => d.outlier).forEach(\n ([shapeName, values]: [DataPoint[keyof DataPoint], DataPoint[]]) => {\n this._whiskerEndpoint.push(\n new shapes[shapeName as string]()\n .data(values)\n .select(\n elem(`g.d3plus-Box-Outlier-${shapeName}`, {\n parent: this._select,\n }).node(),\n )\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .config(configPrep.bind(this as any)(this._outlierConfig, \"shape\", shapeName as string)!)\n .render(),\n );\n },\n );\n\n return this;\n }\n\n /**\n The active highlight state for all sub-shapes in this Box.\n*/\n active(_: ((d: DataPoint, i: number) => boolean) | null): void {\n if (this._box) this._box.active(_);\n if (this._median) this._median.active(_);\n if (this._whisker) this._whisker.active(_);\n if (this._whiskerEndpoint)\n this._whiskerEndpoint.forEach((endPoint: Circle | Rect) =>\n endPoint.active(_),\n );\n }\n\n /**\n The data array used to create shapes.\n*/\n data(): DataPoint[];\n data(_: DataPoint[]): this;\n data(_?: DataPoint[]): DataPoint[] | this {\n return arguments.length ? ((this._data = _!), this) : this._data;\n }\n\n /**\n The hover highlight state for all sub-shapes in this Box.\n*/\n hover(_: ((d: DataPoint, i: number) => boolean) | null): void {\n if (this._box) this._box.hover(_);\n if (this._median) this._median.hover(_);\n if (this._whisker) this._whisker.hover(_);\n if (this._whiskerEndpoint)\n this._whiskerEndpoint.forEach((endPoint: Circle | Rect) =>\n endPoint.hover(_),\n );\n }\n\n /**\n Configuration object for the median line.\n*/\n medianConfig(): Record<string, unknown>;\n medianConfig(_: Record<string, unknown>): this;\n medianConfig(_?: Record<string, unknown>): Record<string, unknown> | this {\n return arguments.length\n ? ((this._medianConfig = assign(this._medianConfig, _!)), this)\n : this._medianConfig;\n }\n\n /**\n The orientation of the box shape.\n*/\n orient(): AccessorFn;\n orient(_: AccessorFn | string): this;\n orient(_?: AccessorFn | string): AccessorFn | this {\n return arguments.length\n ? ((this._orient = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._orient;\n }\n\n /**\n Whether to show outlier points.\n*/\n outlier(): AccessorFn;\n outlier(_: AccessorFn | string): this;\n outlier(_?: AccessorFn | string): AccessorFn | this {\n return arguments.length\n ? ((this._outlier = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._outlier;\n }\n\n /**\n Configuration object for each outlier point.\n*/\n outlierConfig(): Record<string, unknown>;\n outlierConfig(_: Record<string, unknown>): this;\n outlierConfig(_?: Record<string, unknown>): Record<string, unknown> | this {\n return arguments.length\n ? ((this._outlierConfig = assign(this._outlierConfig, _!)), this)\n : this._outlierConfig;\n }\n\n /**\n Configuration object for the rect shape.\n*/\n rectConfig(): Record<string, unknown>;\n rectConfig(_: Record<string, unknown>): this;\n rectConfig(_?: Record<string, unknown>): Record<string, unknown> | this {\n return arguments.length\n ? ((this._rectConfig = assign(this._rectConfig, _!)), this)\n : this._rectConfig;\n }\n\n /**\n The width accessor for each box.\n\n@example\nfunction(d) {\n return d.width;\n}\n*/\n rectWidth(): AccessorFn;\n rectWidth(_: AccessorFn | number): this;\n rectWidth(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._rectWidth = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._rectWidth;\n }\n\n /**\n The SVG container element for this visualization. 3 selector or DOM element.\n*/\n select(): D3Selection;\n select(_: string | HTMLElement | SVGElement | null): this;\n select(_?: string | HTMLElement | SVGElement | null): D3Selection | this {\n return arguments.length\n ? ((this._select = select(_ as string) as unknown as D3Selection), this)\n : this._select;\n }\n\n /**\n Configuration object for the whisker.\n*/\n whiskerConfig(): Record<string, unknown>;\n whiskerConfig(_: Record<string, unknown>): this;\n whiskerConfig(_?: Record<string, unknown>): Record<string, unknown> | this {\n return arguments.length\n ? ((this._whiskerConfig = assign(this._whiskerConfig, _!)), this)\n : this._whiskerConfig;\n }\n\n /**\n Determines the value used for each whisker. Can be passed a single value to apply for both whiskers, or an Array of 2 values for the lower and upper whiskers (in that order). Accepted values are `\"tukey\"`, `\"extent\"`, or a Number representing a quantile.\n*/\n whiskerMode(): (string | number)[];\n whiskerMode(_: (string | number)[] | string | number): this;\n whiskerMode(\n _?: (string | number)[] | string | number,\n ): (string | number)[] | this {\n return arguments.length\n ? ((this._whiskerMode = _ instanceof Array ? _ : [_!, _!]), this)\n : this._whiskerMode;\n }\n\n /**\n The x position accessor for each box.\n\n@example\nfunction(d) {\n return d.x;\n}\n*/\n x(): AccessorFn;\n x(_: AccessorFn | number): this;\n x(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._x =\n typeof _ === \"function\" ? _ : accessor(_ as unknown as string)),\n this)\n : this._x;\n }\n\n /**\n The y position accessor for each box.\n\n@example\nfunction(d) {\n return d.y;\n}\n*/\n y(): AccessorFn;\n y(_: AccessorFn | number): this;\n y(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._y =\n typeof _ === \"function\" ? _ : accessor(_ as unknown as string)),\n this)\n : this._y;\n }\n}\n"],"names":["groups","max","min","quantile","select","merge","assign","elem","accessor","BaseClass","configPrep","constant","Circle","Rect","Whisker","shapes","Box","_medianConfig","_orient","_outlier","_outlierConfig","_rectConfig","_rectWidth","_whiskerConfig","_whiskerMode","_x","_y","_data","_select","_box","_median","_whisker","_whiskerEndpoint","_duration","fill","r","height","d","i","width","stroke","strokeWidth","render","append","style","window","innerWidth","innerHeight","node","outlierData","filteredData","map","key","groupData","values","data","indexOf","orient","sort","a","b","first","median","third","mode","lowerLimit","upperLimit","rectLength","x","y","forEach","eachValue","index","value","dataObj","__d3plus__","outlier","push","parent","config","bind","whiskerData","topLength","bottomLength","topY","bottomY","length","topX","bottomX","shapeName","active","_","endPoint","arguments","hover","medianConfig","outlierConfig","rectConfig","rectWidth","whiskerConfig","whiskerMode","Array"],"mappings":"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"}
|
package/es/src/shapes/Circle.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shapes/Circle.ts"],"sourcesContent":["import type {DataPoint} from \"@d3plus/data\";\nimport {assign} from \"@d3plus/dom\";\nimport type {D3Selection} from \"@d3plus/dom\";\nimport {accessor, constant} from \"../utils/index.js\";\nimport type {AccessorFn} from \"../utils/index.js\";\n\nimport Shape, {type ShapeAes} from \"./Shape.js\";\n\n/**\n Creates SVG circles based on an array of data.\n*/\nexport default class Circle extends Shape {\n declare _labelBounds:\n | ((\n d: DataPoint,\n i: number,\n aes: ShapeAes,\n ) => Record<string, unknown> | null | false)\n | null;\n declare _labelConfig: Record<string, unknown>;\n declare _name: string;\n _r: AccessorFn;\n\n /**\n Invoked when creating a new class instance, and overrides any default parameters inherited from Shape.\n @private\n*/\n constructor() {\n super(\"circle\");\n this._labelBounds = (\n _d: DataPoint,\n _i: number,\n s: ShapeAes,\n ) => ({\n width: (s.r as number) * 1.5,\n height: (s.r as number) * 1.5,\n x: -(s.r as number) * 0.75,\n y: -(s.r as number) * 0.75,\n });\n this._labelConfig = assign(this._labelConfig, {\n textAnchor: \"middle\",\n verticalAlign: \"middle\",\n });\n this._name = \"Circle\";\n this._r = accessor(\"r\");\n }\n\n /**\n Provides the default positioning to the <rect> elements.\n @private\n*/\n _applyPosition(elem: D3Selection): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (elem as any)\n .attr(\"r\", (d: DataPoint, i: number) => this._r(d, i))\n .attr(\"x\", (d: DataPoint, i: number) => -(this._r(d, i) as number) / 2)\n .attr(\"y\", (d: DataPoint, i: number) => -(this._r(d, i) as number) / 2);\n }\n\n /**\n Draws the circles.\n @param callback Optional callback invoked after rendering completes.\n*/\n render(callback?: () => void): this {\n super.render(callback);\n\n const enter = this._enter.call(this._applyStyle.bind(this));\n\n let update: D3Selection = this._update;\n\n if (this._duration) {\n enter\n .attr(\"r\", 0)\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .transition(this._transition)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .call(this._applyPosition.bind(this) as any);\n update = update.transition(this._transition) as unknown as D3Selection;\n this._exit\n .transition(this._transition)\n .attr(\"r\", 0)\n .attr(\"x\", 0)\n .attr(\"y\", 0);\n } else {\n enter.call(this._applyPosition.bind(this));\n }\n\n update\n .call(this._applyStyle.bind(this))\n .call(this._applyPosition.bind(this));\n\n return this;\n }\n\n /**\n Given a specific data point and index, returns the aesthetic properties of the shape.\n @param data point*\n @param index @private\n*/\n _aes(d: DataPoint, i: number): ShapeAes {\n return {r: this._r(d, i) as number};\n }\n\n /**\n The radius accessor for each circle.\n\n@example\nfunction(d) {\n return d.r;\n}\n*/\n r(): AccessorFn;\n r(_: AccessorFn | number): this;\n r(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._r = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._r;\n }\n}\n"],"names":["assign","accessor","constant","Shape","Circle","_r","_labelBounds","_d","_i","s","width","r","height","x","y","_labelConfig","textAnchor","verticalAlign","_name","_applyPosition","elem","attr","d","i","render","callback","enter","_enter","call","_applyStyle","bind","update","_update","_duration","transition","_transition","_exit","_aes","_","arguments","length"],"mappings":"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"}
|
package/es/src/shapes/Image.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shapes/Image.ts"],"sourcesContent":["import {select} from \"d3-selection\";\nimport {transition} from \"d3-transition\";\n\nimport type {DataPoint} from \"@d3plus/data\";\nimport type {D3Selection} from \"@d3plus/dom\";\nimport {accessor, constant} from \"../utils/index.js\";\nimport type {AccessorFn} from \"../utils/index.js\";\n\n/**\n Creates SVG images based on an array of data.\n @example <caption>a sample row of data</caption>\nvar data = {\"url\": \"file.png\", \"width\": \"100\", \"height\": \"50\"};\n@example <caption>passed to the generator</caption>\nnew Image().data([data]).render();\n@example <caption>creates the following</caption>\n<image class=\"d3plus-Image\" opacity=\"1\" href=\"file.png\" width=\"100\" height=\"50\" x=\"0\" y=\"0\"></image>\n@example <caption>this is shorthand for the following</caption>\nimage().data([data])();\n@example <caption>which also allows a post-draw callback function</caption>\nimage().data([data])(function() { alert(\"draw complete!\"); })\n*/\nexport default class Image {\n _duration: number;\n _height: AccessorFn;\n _id: AccessorFn;\n _opacity: AccessorFn;\n _pointerEvents: AccessorFn;\n _select!: D3Selection;\n _url: AccessorFn;\n _width: AccessorFn;\n _x: AccessorFn;\n _y: AccessorFn;\n _data!: DataPoint[];\n\n /**\n Invoked when creating a new class instance, and sets any default parameters.\n @private\n*/\n constructor() {\n this._duration = 600;\n this._height = accessor(\"height\");\n this._id = accessor(\"id\");\n this._opacity = constant(1);\n this._pointerEvents = constant(\"auto\");\n this._url = accessor(\"url\");\n this._width = accessor(\"width\");\n this._x = accessor(\"x\", 0);\n this._y = accessor(\"y\", 0);\n }\n\n /**\n Renders the current Image to the page. If a *callback* is specified, it will be called once the images are done drawing.\n @param callback Optional callback invoked after rendering completes.\n*/\n render(callback?: () => void): this {\n if (this._select === void 0)\n this.select(\n select(\"body\")\n .append(\"svg\")\n .style(\"width\", `${window.innerWidth}px`)\n .style(\"height\", `${window.innerHeight}px`)\n .style(\"display\", \"block\")\n .node(),\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const images = (this._select as any)\n .selectAll(\".d3plus-Image\")\n .data(this._data, this._id);\n\n const enter = images\n .enter()\n .append(\"image\")\n .attr(\"class\", \"d3plus-Image\")\n .attr(\"opacity\", 0)\n .attr(\"width\", 0)\n .attr(\"height\", 0)\n .attr(\n \"x\",\n (d: DataPoint, i: number) =>\n (this._x(d, i) as number) + (this._width(d, i) as number) / 2,\n )\n .attr(\n \"y\",\n (d: DataPoint, i: number) =>\n (this._y(d, i) as number) + (this._height(d, i) as number) / 2,\n );\n\n const t = transition().duration(this._duration),\n that = this,\n update = enter.merge(images);\n\n update\n .attr(\"xlink:href\", this._url)\n .style(\"pointer-events\", this._pointerEvents)\n .transition(t)\n .attr(\"opacity\", this._opacity)\n .attr(\"width\", (d: DataPoint, i: number) => this._width(d, i))\n .attr(\"height\", (d: DataPoint, i: number) => this._height(d, i))\n .attr(\"x\", (d: DataPoint, i: number) => this._x(d, i))\n .attr(\"y\", (d: DataPoint, i: number) => this._y(d, i))\n .each(function (this: Element, d: DataPoint, i: number) {\n const image = select(this),\n link = that._url(d, i) as string;\n const fullAddress =\n link.indexOf(\"http://\") === 0 || link.indexOf(\"https://\") === 0;\n if (!fullAddress || link.indexOf(window.location.hostname) === 0) {\n const img = new (\n window as unknown as Record<string, unknown> & {\n Image: new () => HTMLImageElement;\n }\n ).Image();\n img.src = link;\n img.crossOrigin = \"Anonymous\";\n img.onload = function () {\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const context = canvas.getContext(\"2d\")!;\n context.drawImage(img, 0, 0);\n image.attr(\"xlink:href\", canvas.toDataURL(\"image/png\"));\n };\n }\n });\n\n images\n .exit()\n .transition(t)\n .attr(\"width\", (d: DataPoint, i: number) => this._width(d, i))\n .attr(\"height\", (d: DataPoint, i: number) => this._height(d, i))\n .attr(\"x\", (d: DataPoint, i: number) => this._x(d, i))\n .attr(\"y\", (d: DataPoint, i: number) => this._y(d, i))\n .attr(\"opacity\", 0)\n .remove();\n\n if (callback) setTimeout(callback, this._duration + 100);\n\n return this;\n }\n\n /**\n The data array used to create image shapes. An <image> tag will be drawn for each object in the array.\n*/\n data(): DataPoint[];\n data(_: DataPoint[]): this;\n data(_?: DataPoint[]): DataPoint[] | this {\n return arguments.length ? ((this._data = _!), this) : this._data;\n }\n\n /**\n The animation duration in milliseconds.\n*/\n duration(): number;\n duration(_: number): this;\n duration(_?: number): number | this {\n return arguments.length ? ((this._duration = _!), this) : this._duration;\n }\n\n /**\n The height accessor for each image.\n\n@example\nfunction(d) {\n return d.height;\n}\n*/\n height(): AccessorFn;\n height(_: AccessorFn | number): this;\n height(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._height = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._height;\n }\n\n /**\n The unique id accessor for each image.\n\n@example\nfunction(d) {\n return d.id;\n}\n*/\n id(): AccessorFn;\n id(_: AccessorFn): this;\n id(_?: AccessorFn): AccessorFn | this {\n return arguments.length ? ((this._id = _!), this) : this._id;\n }\n\n /**\n The opacity of each image.\n*/\n opacity(): AccessorFn;\n opacity(_: AccessorFn | number): this;\n opacity(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._opacity = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._opacity;\n }\n\n /**\n The pointer-events.\n*/\n pointerEvents(): AccessorFn;\n pointerEvents(_: AccessorFn | string): this;\n pointerEvents(_?: AccessorFn | string): AccessorFn | this {\n return arguments.length\n ? ((this._pointerEvents = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn),\n this)\n : this._pointerEvents;\n }\n\n /**\n The SVG container element as a d3 selector or DOM element.\n*/\n select(): D3Selection;\n select(_: string | HTMLElement | SVGElement | null): this;\n select(_?: string | HTMLElement | SVGElement | null): D3Selection | this {\n return arguments.length\n ? ((this._select = select(_ as string) as unknown as D3Selection), this)\n : this._select;\n }\n\n /**\n Accessor function for the URL of each image.\n\n@example\nfunction(d) {\n return d.url;\n}\n*/\n url(): AccessorFn;\n url(_: AccessorFn): this;\n url(_?: AccessorFn): AccessorFn | this {\n return arguments.length ? ((this._url = _!), this) : this._url;\n }\n\n /**\n The width accessor for each image.\n\n@example\nfunction(d) {\n return d.width;\n}\n*/\n width(): AccessorFn;\n width(_: AccessorFn | number): this;\n width(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._width = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._width;\n }\n\n /**\n The x position accessor for each image.\n\n@example\nfunction(d) {\n return d.x || 0;\n}\n*/\n x(): AccessorFn;\n x(_: AccessorFn | number): this;\n x(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._x = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._x;\n }\n\n /**\n The y position accessor for each image.\n\n@example\nfunction(d) {\n return d.y || 0;\n}\n*/\n y(): AccessorFn;\n y(_: AccessorFn | number): this;\n y(_?: AccessorFn | number): AccessorFn | this {\n return arguments.length\n ? ((this._y = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._y;\n }\n}\n"],"names":["select","transition","accessor","constant","Image","_duration","_height","_id","_opacity","_pointerEvents","_select","_url","_width","_x","_y","_data","render","callback","append","style","window","innerWidth","innerHeight","node","images","selectAll","data","enter","attr","d","i","t","duration","that","update","merge","each","image","link","fullAddress","indexOf","location","hostname","img","src","crossOrigin","onload","canvas","document","createElement","width","height","context","getContext","drawImage","toDataURL","exit","remove","setTimeout","_","arguments","length","id","opacity","pointerEvents","url","x","y"],"mappings":"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"}
|
package/es/src/shapes/Line.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/shapes/Line.ts"],"sourcesContent":["import {extent, groups, sum} from \"d3-array\";\nimport {interpolatePath} from \"d3-interpolate-path\";\nimport {select} from \"d3-selection\";\nimport * as paths from \"d3-shape\";\n\nimport type {DataPoint} from \"@d3plus/data\";\nimport {merge} from \"@d3plus/data\";\nimport type {D3Selection} from \"@d3plus/dom\";\nimport {constant} from \"../utils/index.js\";\nimport type {AccessorFn} from \"../utils/index.js\";\n\nimport Shape, {type ShapeAes} from \"./Shape.js\";\n\n/**\n Creates SVG lines based on an array of data.\n*/\nexport default class Line extends Shape {\n declare _curve: AccessorFn;\n declare _defined: AccessorFn;\n declare _fill: AccessorFn;\n declare _hitArea:\n | ((\n d: DataPoint,\n i: number,\n aes: ShapeAes,\n ) => Record<string, unknown>)\n | null;\n declare _name: string;\n declare _path: Record<string, unknown>;\n declare _stroke: AccessorFn;\n declare _strokeWidth: AccessorFn;\n declare _strokeDasharray: AccessorFn;\n\n /**\n Invoked when creating a new class instance, and overrides any default parameters inherited from Shape.\n @private\n*/\n constructor() {\n super();\n\n this._curve = constant(\"linear\");\n this._defined = (d: DataPoint) =>\n d as unknown as DataPoint[keyof DataPoint];\n this._fill = constant(\"none\");\n this._hitArea = constant({\n d: (d: DataPoint) =>\n (this._path as unknown as (v: unknown) => string)(\n (d as Record<string, unknown>).values,\n ),\n fill: \"none\",\n \"stroke-width\": 10,\n transform: null,\n }) as unknown as (\n d: DataPoint,\n i: number,\n aes: ShapeAes,\n ) => Record<string, unknown>;\n this._name = \"Line\";\n this._path = (\n paths as unknown as Record<string, unknown> & {\n line: () => Record<string, unknown>;\n }\n ).line() as unknown as Record<string, unknown>;\n this._stroke = constant(\"black\");\n this._strokeWidth = constant(1);\n }\n\n /**\n Filters/manipulates the data array before binding each point to an SVG group.\n @param data @private\n*/\n _dataFilter(data: DataPoint[]): DataPoint[] {\n const lines: DataPoint[] & {\n key?: (d: DataPoint) => DataPoint[keyof DataPoint];\n } = groups(data, this._id).map(\n ([key, values]: [DataPoint[keyof DataPoint], DataPoint[]]) => {\n const d: DataPoint = {key, values} as unknown as DataPoint;\n (d as Record<string, unknown>).data = merge(\n d.values as unknown as DataPoint[],\n );\n (d as Record<string, unknown>).i = data.indexOf(\n (d.values as unknown as DataPoint[])[0],\n );\n\n const x = extent(\n d.values as unknown as DataPoint[],\n this._x as unknown as (d: DataPoint) => number,\n );\n (d as Record<string, unknown>).xR = x;\n (d as Record<string, unknown>).width =\n (x[1] as number) - (x[0] as number);\n (d as Record<string, unknown>).x =\n (x[0] as number) + (d.width as number) / 2;\n\n const y = extent(\n d.values as unknown as DataPoint[],\n this._y as unknown as (d: DataPoint) => number,\n );\n (d as Record<string, unknown>).yR = y;\n (d as Record<string, unknown>).height =\n (y[1] as number) - (y[0] as number);\n (d as Record<string, unknown>).y =\n (y[0] as number) + (d.height as number) / 2;\n\n (d as Record<string, unknown>).nested = true;\n (d as Record<string, unknown>).translate = [d.x, d.y];\n (d as Record<string, unknown>).__d3plusShape__ = true;\n\n return d;\n },\n );\n\n lines.key = (d: DataPoint) => d.key;\n return lines;\n }\n\n /**\n Draws the lines.\n @param callback Optional callback invoked after rendering completes.\n*/\n render(callback?: () => void): this {\n super.render(callback);\n\n const that = this;\n\n /**\n Calculates the stroke-dasharray used for animations\n @param d data point\n @private\n*/\n function calculateStrokeDashArray(\n this: SVGPathElement,\n d: DataPoint,\n ): void {\n (d as Record<string, unknown>).initialLength = this.getTotalLength();\n\n let strokeArray: number[] = (\n that._strokeDasharray(\n (d.values as unknown as DataPoint[])[0],\n that._data.indexOf((d.values as unknown as DataPoint[])[0]),\n ) as string\n )\n .split(\" \")\n .map(Number);\n\n if (strokeArray.length === 1 && strokeArray[0] === 0)\n strokeArray = [d.initialLength as number];\n else if (strokeArray.length === 1) strokeArray.push(strokeArray[0]);\n else if (strokeArray.length % 2)\n strokeArray = strokeArray.concat(strokeArray);\n\n const newStrokeArray: number[] = [];\n let strokeLength = 0;\n while (strokeLength < (d.initialLength as number)) {\n for (let i = 0; i < strokeArray.length; i++) {\n const num = strokeArray[i];\n strokeLength += num;\n newStrokeArray.push(num);\n if (strokeLength >= (d.initialLength as number)) break;\n }\n }\n\n if (newStrokeArray.length > 1 && newStrokeArray.length % 2)\n newStrokeArray.pop();\n newStrokeArray[newStrokeArray.length - 1] +=\n (d.initialLength as number) - sum(newStrokeArray);\n if (newStrokeArray.length % 2 === 0) newStrokeArray.push(0);\n (d as Record<string, unknown>).initialStrokeArray =\n newStrokeArray.join(\" \");\n }\n\n const userCurve = this._curve.bind(this)(\n this.config() as DataPoint,\n ) as string;\n const curve = (paths as Record<string, unknown>)[\n `curve${userCurve.charAt(0).toUpperCase()}${userCurve.slice(1)}`\n ];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._path as any)\n .curve(curve)\n .defined(this._defined)\n .x(this._x)\n .y(this._y);\n\n const enter = this._enter\n .append(\"path\")\n .attr(\n \"transform\",\n (d: DataPoint) =>\n `translate(${-(d.xR as unknown as number[])[0] - (d.width as number) / 2}, ${-(d.yR as unknown as number[])[0] - (d.height as number) / 2})`,\n )\n .attr(\"d\", (d: DataPoint) =>\n (this._path as unknown as (v: unknown) => string)(\n (d as Record<string, unknown>).values,\n ),\n )\n .call(this._applyStyle.bind(this));\n\n let update: D3Selection = this._update\n .select(\"path\")\n .attr(\n \"stroke-dasharray\",\n (d: DataPoint) =>\n that._strokeDasharray(\n (d.values as unknown as DataPoint[])[0],\n that._data.indexOf((d.values as unknown as DataPoint[])[0]),\n ) as string,\n );\n\n if (this._duration) {\n enter\n .each(calculateStrokeDashArray)\n .attr(\n \"stroke-dasharray\",\n (d: DataPoint) => `${d.initialStrokeArray} ${d.initialLength}`,\n )\n .attr(\"stroke-dashoffset\", (d: DataPoint) => d.initialLength as never)\n .transition(this._transition)\n .attr(\"stroke-dashoffset\", 0);\n update = update\n .transition(this._transition)\n .attrTween(\"d\", function (this: Element, d: DataPoint) {\n return interpolatePath(\n select(this).attr(\"d\"),\n (that._path as unknown as (v: unknown) => string)(\n (d as Record<string, unknown>).values,\n ),\n );\n }) as unknown as D3Selection;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (this._exit.selectAll(\"path\") as any)\n .each(calculateStrokeDashArray)\n .attr(\n \"stroke-dasharray\",\n (d: DataPoint) => `${d.initialStrokeArray} ${d.initialLength}`,\n )\n .transition(this._transition)\n .attr(\n \"stroke-dashoffset\",\n (d: DataPoint) => -(d.initialLength as number),\n );\n } else {\n update = update.attr(\"d\", (d: DataPoint) =>\n (that._path as unknown as (v: unknown) => string)(\n (d as Record<string, unknown>).values,\n ),\n );\n }\n\n update\n .attr(\n \"transform\",\n (d: DataPoint) =>\n `translate(${-(d.xR as unknown as number[])[0] - (d.width as number) / 2}, ${-(d.yR as unknown as number[])[0] - (d.height as number) / 2})`,\n )\n .call(this._applyStyle.bind(this));\n\n return this;\n }\n\n /**\n Given a specific data point and index, returns the aesthetic properties of the shape.\n @param data point*\n @param index @private\n*/\n _aes(d: DataPoint, i: number): ShapeAes {\n return {\n points: (d.values as unknown as DataPoint[]).map((p: DataPoint) => [\n this._x(p, i) as number,\n this._y(p, i) as number,\n ]),\n };\n }\n\n /**\n The d3 curve function used to interpolate the line.\n*/\n curve(): AccessorFn;\n curve(_: AccessorFn | string): this;\n curve(_?: AccessorFn | string): AccessorFn | this {\n return arguments.length\n ? ((this._curve = typeof _ === \"function\" ? _ : constant(_) as unknown as AccessorFn), this)\n : this._curve;\n }\n\n /**\n An accessor function that determines whether a data point is defined (not a gap in the line).\n*/\n defined(): AccessorFn;\n defined(_: AccessorFn): this;\n defined(_?: AccessorFn): AccessorFn | this {\n return arguments.length ? ((this._defined = _!), this) : this._defined;\n }\n}\n"],"names":["extent","groups","sum","interpolatePath","select","paths","merge","constant","Shape","Line","_curve","_defined","d","_fill","_hitArea","_path","values","fill","transform","_name","line","_stroke","_strokeWidth","_dataFilter","data","lines","_id","map","key","i","indexOf","x","_x","xR","width","y","_y","yR","height","nested","translate","__d3plusShape__","render","callback","that","calculateStrokeDashArray","initialLength","getTotalLength","strokeArray","_strokeDasharray","_data","split","Number","length","push","concat","newStrokeArray","strokeLength","num","pop","initialStrokeArray","join","userCurve","bind","config","curve","charAt","toUpperCase","slice","defined","enter","_enter","append","attr","call","_applyStyle","update","_update","_duration","each","transition","_transition","attrTween","_exit","selectAll","_aes","points","p","_","arguments"],"mappings":"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"}
|