@unovis/ts 1.6.6-stellar.1 → 1.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/components/area/index.js +8 -6
  2. package/components/area/index.js.map +1 -1
  3. package/components/area/style.js +3 -1
  4. package/components/area/style.js.map +1 -1
  5. package/components/axis/config.d.ts +10 -7
  6. package/components/axis/config.js +1 -1
  7. package/components/axis/config.js.map +1 -1
  8. package/components/axis/index.d.ts +1 -0
  9. package/components/axis/index.js +44 -53
  10. package/components/axis/index.js.map +1 -1
  11. package/components/axis/style.d.ts +2 -38
  12. package/components/axis/style.js +28 -24
  13. package/components/axis/style.js.map +1 -1
  14. package/components/brush/config.d.ts +3 -0
  15. package/components/brush/config.js +1 -1
  16. package/components/brush/config.js.map +1 -1
  17. package/components/brush/index.d.ts +1 -0
  18. package/components/brush/index.js +7 -3
  19. package/components/brush/index.js.map +1 -1
  20. package/components/bullet-legend/style.js +2 -1
  21. package/components/bullet-legend/style.js.map +1 -1
  22. package/components/chord-diagram/style.js +3 -2
  23. package/components/chord-diagram/style.js.map +1 -1
  24. package/components/crosshair/config.d.ts +8 -0
  25. package/components/crosshair/config.js +1 -1
  26. package/components/crosshair/config.js.map +1 -1
  27. package/components/crosshair/index.d.ts +2 -0
  28. package/components/crosshair/index.js +18 -5
  29. package/components/crosshair/index.js.map +1 -1
  30. package/components/donut/style.js +2 -1
  31. package/components/donut/style.js.map +1 -1
  32. package/components/flow-legend/style.js +2 -1
  33. package/components/flow-legend/style.js.map +1 -1
  34. package/components/free-brush/style.js +2 -1
  35. package/components/free-brush/style.js.map +1 -1
  36. package/components/graph/index.js +2 -0
  37. package/components/graph/index.js.map +1 -1
  38. package/components/graph/modules/link/style.js +3 -2
  39. package/components/graph/modules/link/style.js.map +1 -1
  40. package/components/graph/modules/node/style.js +3 -2
  41. package/components/graph/modules/node/style.js.map +1 -1
  42. package/components/graph/modules/panel/style.js +2 -1
  43. package/components/graph/modules/panel/style.js.map +1 -1
  44. package/components/grouped-bar/style.js +2 -1
  45. package/components/grouped-bar/style.js.map +1 -1
  46. package/components/leaflet-map/index.js +4 -2
  47. package/components/leaflet-map/index.js.map +1 -1
  48. package/components/plotband/style.js +2 -1
  49. package/components/plotband/style.js.map +1 -1
  50. package/components/plotline/style.js +2 -1
  51. package/components/plotline/style.js.map +1 -1
  52. package/components/sankey/config.d.ts +2 -0
  53. package/components/sankey/config.js +1 -1
  54. package/components/sankey/config.js.map +1 -1
  55. package/components/sankey/index.d.ts +3 -2
  56. package/components/sankey/index.js +18 -8
  57. package/components/sankey/index.js.map +1 -1
  58. package/components/sankey/modules/label.js +8 -2
  59. package/components/sankey/modules/label.js.map +1 -1
  60. package/components/sankey/types.d.ts +4 -0
  61. package/components/sankey/types.js +7 -2
  62. package/components/sankey/types.js.map +1 -1
  63. package/components/scatter/index.d.ts +4 -1
  64. package/components/scatter/index.js +20 -11
  65. package/components/scatter/index.js.map +1 -1
  66. package/components/stacked-bar/index.d.ts +4 -1
  67. package/components/stacked-bar/index.js +17 -6
  68. package/components/stacked-bar/index.js.map +1 -1
  69. package/components/stacked-bar/style.js +2 -1
  70. package/components/stacked-bar/style.js.map +1 -1
  71. package/components/timeline/config.d.ts +8 -2
  72. package/components/timeline/config.js +2 -2
  73. package/components/timeline/config.js.map +1 -1
  74. package/components/timeline/index.d.ts +2 -2
  75. package/components/timeline/index.js +63 -32
  76. package/components/timeline/index.js.map +1 -1
  77. package/components/timeline/style.d.ts +6 -1
  78. package/components/timeline/style.js +40 -46
  79. package/components/timeline/style.js.map +1 -1
  80. package/components/tooltip/style.js +3 -2
  81. package/components/tooltip/style.js.map +1 -1
  82. package/components/topojson-map/index.js +2 -0
  83. package/components/topojson-map/index.js.map +1 -1
  84. package/components/vis-controls/style.js +2 -1
  85. package/components/vis-controls/style.js.map +1 -1
  86. package/core/component/index.d.ts +4 -1
  87. package/core/component/index.js +6 -6
  88. package/core/component/index.js.map +1 -1
  89. package/index.js +3 -2
  90. package/index.js.map +1 -1
  91. package/package.json +10 -8
  92. package/styles/index.js +2 -1
  93. package/styles/index.js.map +1 -1
  94. package/types/misc.js +2 -0
  95. package/types/misc.js.map +1 -0
  96. package/types/style.d.ts +1 -0
  97. package/types.d.ts +1 -0
  98. package/types.js +2 -1
  99. package/types.js.map +1 -1
  100. package/utils/index.d.ts +1 -0
  101. package/utils/index.js +2 -1
  102. package/utils/index.js.map +1 -1
  103. package/utils/style.d.ts +1 -0
  104. package/utils/style.js +8 -2
  105. package/utils/style.js.map +1 -1
  106. package/utils/text.js +6 -2
  107. package/utils/text.js.map +1 -1
  108. package/utils/theme.d.ts +1 -0
  109. package/utils/theme.js +4 -0
  110. package/utils/theme.js.map +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { Axis as D3Axis, axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis'\nimport { NumberValue } from 'd3-scale'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Types\nimport { Position } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\nimport { Spacing } from 'types/spacing'\nimport { FitMode, TextAlign, TrimMode, UnovisText, UnovisTextOptions, VerticalAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { renderTextToSvgTextElement, textAlignToAnchor, trimSVGText, wrapSVGText } from 'utils/text'\nimport { isEqual } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\nimport { getFontWidthToHeightRatio } from 'styles/index'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisDefaultConfig, AxisConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Axis<Datum> extends XYComponentCore<Datum, AxisConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig: AxisConfigInterface<Datum> = AxisDefaultConfig\n public config: AxisConfigInterface<Datum> = this._defaultConfig\n private axisGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private gridGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n\n private _axisRawBBox: DOMRect\n private _axisSizeBBox: SVGRect\n private _requiredMargin: Spacing\n private _defaultNumTicks = 3\n private _collideTickLabelsAnimFrameId: ReturnType<typeof requestAnimationFrame>\n private _tickTextStyleCached: {\n fontSize: number;\n fontFamily: string;\n fontWidthToHeightRatio: number;\n }\n\n protected events = {}\n\n constructor (config?: AxisConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n this.axisGroup = this.g.append('g')\n this.gridGroup = this.g.append('g')\n .attr('class', s.grid)\n }\n\n /** Renders axis to an invisible grouped to calculate automatic chart margins */\n public preRender (): void {\n const { config } = this\n const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0)\n\n this._renderAxis(axisRenderHelperGroup, 0)\n\n // Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)\n this._axisRawBBox = axisRenderHelperGroup.node().getBBox()\n\n // Align tick text\n if (config.tickTextAlign) this._alignTickLabels()\n // Render label and store total axis size and required margins\n this._renderAxisLabel(axisRenderHelperGroup)\n this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup)\n this._requiredMargin = this._getRequiredMargin(this._axisSizeBBox)\n\n axisRenderHelperGroup.remove()\n }\n\n public getPosition (): Position {\n const { config: { type, position } } = this\n return (position ?? ((type === AxisType.X) ? Position.Bottom : Position.Left)) as Position\n }\n\n private _getAxisSize (selection: Selection<SVGGElement, unknown, SVGGElement, undefined>): SVGRect {\n const bBox = selection.node().getBBox()\n return bBox\n }\n\n private _getRequiredMargin (axisSize = this._axisSizeBBox): Spacing {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X: {\n const tolerancePx = 1\n const xEnd = this._axisSizeBBox.x + this._axisSizeBBox.width\n\n const left = this._axisSizeBBox.x < 0 ? Math.abs(this._axisSizeBBox.x) : 0\n const right = (xEnd - this._width) > tolerancePx ? xEnd - this._width : 0\n\n switch (position) {\n case Position.Top: return { top: axisSize.height, left, right }\n case Position.Bottom: default: return { bottom: axisSize.height, left, right }\n }\n }\n case AxisType.Y: {\n const bleedY = axisSize.height > this._height ? (axisSize.height - this._height) / 2 : 0\n const top = bleedY\n const bottom = bleedY\n\n switch (position) {\n case Position.Right: return { right: axisSize.width, top, bottom }\n case Position.Left: default: return { left: axisSize.width, top, bottom }\n }\n }\n }\n }\n\n getRequiredMargin (): Spacing {\n return this._requiredMargin\n }\n\n /** Calculates axis transform:translate offset based on passed container margins */\n getOffset (containerMargin: Spacing): {left: number; top: number} {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return { top: containerMargin.top, left: containerMargin.left }\n case Position.Bottom: default: return { top: containerMargin.top + this._height, left: containerMargin.left }\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return { top: containerMargin.top, left: containerMargin.left + this._width }\n case Position.Left: default: return { top: containerMargin.top, left: containerMargin.left }\n }\n }\n }\n\n public _render (duration = this.config.duration, selection = this.axisGroup): void {\n const { config } = this\n\n this._renderAxis(selection, duration)\n this._renderAxisLabel(selection)\n\n if (config.gridLine) {\n const gridGen = this._buildGrid()\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n this.gridGroup.selectAll('*').interrupt()\n smartTransition(this.gridGroup, duration).call(gridGen).style('opacity', 1)\n } else {\n smartTransition(this.gridGroup, duration).style('opacity', 0)\n }\n\n if (config.tickTextAlign) this._alignTickLabels()\n this._resolveTickLabelOverlap(selection)\n }\n\n private _buildAxis (): D3Axis<any> {\n const { config: { type, position, tickPadding } } = this\n\n const ticks = this._getNumTicks()\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return axisTop(this.xScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Bottom: default: return axisBottom(this.xScale).ticks(ticks).tickPadding(tickPadding)\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return axisRight(this.yScale).ticks(ticks).tickPadding(tickPadding)\n case Position.Left: default: return axisLeft(this.yScale).ticks(ticks).tickPadding(tickPadding)\n }\n }\n }\n\n private _buildGrid (): D3Axis<NumberValue | Date> {\n const { config } = this\n\n let gridGen: D3Axis<NumberValue | Date>\n switch (config.type) {\n case AxisType.X:\n switch (config.position) {\n case Position.Top: { gridGen = axisTop(this.xScale); break }\n case Position.Bottom: default: { gridGen = axisBottom(this.xScale); break }\n }\n gridGen.tickSize(-this._height)\n break\n case AxisType.Y:\n switch (config.position) {\n case Position.Right: { gridGen = axisRight(this.yScale); break }\n case Position.Left: default: { gridGen = axisLeft(this.yScale); break }\n }\n gridGen.tickSize(-this._width)\n }\n gridGen\n .tickSizeOuter(0)\n .tickFormat(() => '')\n\n const numTicks = this._getNumTicks() * 2\n const gridScale = gridGen.scale<ContinuousScale>()\n const scaleDomain = gridScale.domain()\n\n const getGridMinMaxTicksOnlyValues = (): number[] | Date[] => {\n if (!config.minMaxTicksOnlyShowGridLines) return scaleDomain\n\n const tickValues = gridScale.ticks(numTicks)\n if (tickValues.length < 2) return scaleDomain\n\n // If the last tick is far enough from the domain max value, we add it to the tick values to draw the grid line\n const tickValuesStep = +tickValues[1] - +tickValues[0]\n const domainMaxValue = scaleDomain[1]\n const diff = +domainMaxValue - +tickValues[tickValues.length - 1]\n\n return diff > tickValuesStep / 2 ? [...tickValues, domainMaxValue] as (number[] | Date[]) : tickValues\n }\n\n const tickValues = config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? getGridMinMaxTicksOnlyValues()\n : gridScale.ticks(numTicks)\n\n gridGen.tickValues(tickValues)\n\n return gridGen\n }\n\n private _renderAxis (selection = this.axisGroup, duration = this.config.duration): void {\n const { config } = this\n\n const axisGen = this._buildAxis()\n const axisScale = axisGen.scale<ContinuousScale>()\n const tickValues: (number[] | Date[]) =\n config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? axisScale.domain()\n : axisScale.ticks(this._getNumTicks())\n const tickCount = tickValues.length\n axisGen.tickValues(tickValues)\n\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n selection.selectAll('*').interrupt()\n const transition = smartTransition(selection, duration).call(axisGen)\n\n // Unset D3's default y and dy attributes because we're going to set them manually in the renderTextToSvgTextElement function\n selection.selectAll<SVGTextElement, number | Date>('text')\n .attr('dy', null)\n .attr('y', null)\n\n // Resolving tick label overlap after the animation is over\n transition.on('end', () => {\n this._resolveTickLabelOverlap(selection)\n })\n\n const ticks = selection.selectAll<SVGGElement, number | Date>('g.tick')\n\n ticks\n .classed(s.tick, true)\n .style('font-size', config.tickTextFontSize)\n\n // Selecting the <text> elements of the ticks to apply formatting. By default, this selection\n // will include exiting elements, so we're filtering them out.\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => tickValues.some((t: number | Date) => isEqual(tickValue, t))) // We use isEqual to compare Dates\n .classed(s.tickLabel, true)\n .classed(s.tickLabelHideable, Boolean(config.tickTextHideOverlapping))\n .style('fill', config.tickTextColor) as Selection<SVGTextElement, number, SVGGElement, unknown> | Selection<SVGTextElement, Date, SVGGElement, unknown>\n\n // Marking exiting elements\n selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => !tickValues.some((t: number | Date) => isEqual(tickValue, t)))\n .classed(s.tickTextExiting, true)\n\n // We interrupt the transition on tick's <text> to make it 'wrappable'\n tickText.nodes().forEach(node => interrupt(node))\n\n const tickSize = axisGen.tickSize()\n const axisPosition = this.getPosition()\n const textMaxWidth = config.tickTextWidth || (config.type === AxisType.X ? this._containerWidth / (tickCount + 1) : this._containerWidth / 5)\n tickText.each((value: number | Date, i: number, elements: ArrayLike<SVGTextElement>) => {\n let text = config.tickFormat?.(value, i, tickValues) ?? `${value}`\n const textElement = elements[i] as SVGTextElement\n\n // Get and cache the tick text style\n if (!this._tickTextStyleCached) {\n const styleDeclaration = getComputedStyle(textElement)\n this._tickTextStyleCached = {\n fontSize: Number.parseFloat(styleDeclaration.fontSize),\n fontFamily: styleDeclaration.fontFamily,\n fontWidthToHeightRatio: getFontWidthToHeightRatio(),\n }\n }\n\n // Calculate the text offset based on the axis position and the tick size\n const [textOffsetX, textOffsetY] = this._getTickTextOffset(axisPosition, tickSize, this._tickTextStyleCached.fontSize)\n\n // Prepare the Unovis text options\n const textOptions: UnovisTextOptions = {\n verticalAlign: config.type === AxisType.X ? VerticalAlign.Top : VerticalAlign.Middle,\n width: textMaxWidth,\n textRotationAngle: config.tickTextAngle,\n separator: config.tickTextSeparator,\n wordBreak: config.tickTextForceWordBreak,\n x: textOffsetX,\n y: textOffsetY,\n }\n\n if (config.tickTextFitMode === FitMode.Trim) {\n const textElementSelection = select<SVGTextElement, string>(textElement).text(text)\n trimSVGText(textElementSelection, textMaxWidth, config.tickTextTrimType as TrimMode, true, this._tickTextStyleCached.fontSize, 0.58)\n text = select<SVGTextElement, string>(textElement).text()\n }\n\n const textBlock: UnovisText = { text, ...this._tickTextStyleCached }\n const dominantBaseline = config.type === AxisType.X ? 'central' : 'hanging'\n renderTextToSvgTextElement(textElement, textBlock, textOptions, dominantBaseline)\n })\n\n selection\n .classed(s.axis, true)\n .classed(s.hideTickLine, !config.tickLine)\n .classed(s.hideDomain, !config.domainLine)\n\n if (config.fullSize) {\n const path = this._getFullDomainPath(0)\n smartTransition(selection.select('.domain'), duration).attr('d', path)\n }\n }\n\n private _resolveTickLabelOverlap (selection = this.axisGroup): void {\n const { config } = this\n const tickTextSelection = selection.selectAll<SVGTextElement, number | Date>(`g.tick > text:not(.${s.tickTextExiting})`)\n\n if (!config.tickTextHideOverlapping) {\n tickTextSelection.style('opacity', null)\n return\n }\n\n cancelAnimationFrame(this._collideTickLabelsAnimFrameId)\n // Colliding labels in the next frame to prevent forced reflow\n this._collideTickLabelsAnimFrameId = requestAnimationFrame(() => {\n this._collideTickLabels(tickTextSelection)\n })\n }\n\n private _collideTickLabels (selection: Selection<SVGTextElement, number | Date, SVGGElement, unknown>): void {\n type SVGOverlappingTextElement = SVGTextElement & {\n _visible: boolean;\n }\n\n // Reset visibility of all labels\n selection.each((d, i, elements) => {\n const node = elements[i] as SVGOverlappingTextElement\n node._visible = true\n })\n\n // We do three iterations because not all overlapping labels can be resolved in the first iteration\n const numIterations = 3\n for (let i = 0; i < numIterations; i += 1) {\n // Run collision detection and set labels visibility\n selection.each((d, i, elements) => {\n const label1 = elements[i] as SVGOverlappingTextElement\n const isLabel1Visible = label1._visible\n if (!isLabel1Visible) return\n\n // Calculate bounding rect of point's label\n const label1BoundingRect = label1.getBoundingClientRect()\n\n for (let j = i + 1; j < elements.length; j += 1) {\n if (i === j) continue\n const label2 = elements[j] as SVGOverlappingTextElement\n const isLabel2Visible = label2._visible\n if (isLabel2Visible) {\n const label2BoundingRect = label2.getBoundingClientRect()\n const intersect = rectIntersect(label1BoundingRect, label2BoundingRect, -5)\n if (intersect) {\n label2._visible = false\n break\n }\n }\n }\n })\n }\n\n // Hide the overlapping labels\n selection.each((d, i, elements) => {\n const label = elements[i] as SVGOverlappingTextElement\n select(label).style('opacity', label._visible ? 1 : 0)\n })\n }\n\n private _getNumTicks (): number {\n const { config: { type, numTicks } } = this\n\n if (numTicks) return numTicks\n\n if (type === AxisType.X) {\n const xRange = this.xScale.range() as [number, number]\n const width = xRange[1] - xRange[0]\n return Math.floor(width / 175)\n }\n\n if (type === AxisType.Y) {\n const yRange = this.yScale.range() as [number, number]\n const height = Math.abs(yRange[0] - yRange[1])\n return Math.pow(height, 0.85) / 25\n }\n\n return this._defaultNumTicks\n }\n\n private _getConfiguredTickValues (): number[] | null {\n const { config } = this\n const scale = config.type === AxisType.X ? this.xScale : this.yScale\n const scaleDomain = scale?.domain() as [number, number]\n\n if (config.tickValues) {\n return config.tickValues.filter(v => (v >= scaleDomain[0]) && (v <= scaleDomain[1]))\n }\n\n return null\n }\n\n private _shouldRenderMinMaxTicksOnly (): boolean {\n const { config } = this\n return config.minMaxTicksOnly || (config.type === AxisType.X && this._width < config.minMaxTicksOnlyWhenWidthIsLess)\n }\n\n private _getFullDomainPath (tickSize = 0): string {\n const { config: { type } } = this\n switch (type) {\n case AxisType.X: return `M0.5, ${tickSize} V0.5 H${this._width + 0.5} V${tickSize}`\n case AxisType.Y: return `M${-tickSize}, ${this._height + 0.5} H0.5 V0.5 H${-tickSize}`\n }\n }\n\n private _renderAxisLabel (selection = this.axisGroup): void {\n const { type, label, labelMargin, labelFontSize, labelTextFitMode } = this.config\n\n // Remove the old label first to calculate the axis size properly\n selection.selectAll(`.${s.label}`).remove()\n\n if (!label) return\n\n // Calculate label position and rotation\n const axisPosition = this.getPosition()\n // We always use this.axisRenderHelperGroup to calculate the size of the axis because\n // this.axisGroup will give us incorrect values due to animation\n const { width: axisWidth, height: axisHeight } = this._axisRawBBox ?? selection.node().getBBox()\n\n const rotation = type === AxisType.Y ? -90 : 0\n\n // Create the text element (without transform first)\n const textElement = selection\n .append('text')\n .attr('class', s.label)\n .attr('dy', `${this._getLabelDY()}em`)\n .style('font-size', labelFontSize)\n .style('fill', this.config.labelColor)\n\n // Set the text content\n textElement.text(label)\n\n let isWrapped = false\n if (labelTextFitMode === FitMode.Wrap) {\n // For Y-axis, use the chart height as the maximum width before rotation\n const maxWidth = type === AxisType.Y ? this._height : this._width\n const currentTextWidth = textElement.node().getComputedTextLength()\n\n if (currentTextWidth > maxWidth) {\n wrapSVGText(textElement, maxWidth)\n isWrapped = true\n }\n }\n\n // Calculate offset after wrapping to get accurate dimensions\n let labelWidth = axisWidth\n let labelHeight = axisHeight\n if (labelTextFitMode === FitMode.Wrap) {\n const labelBBox = textElement.node().getBBox()\n labelWidth = labelBBox.width\n labelHeight = labelBBox.height\n } else {\n const trimWidth = type === AxisType.X ? labelWidth : labelHeight\n const styleDeclaration = getComputedStyle(textElement.node())\n const fontSize = Number.parseFloat(styleDeclaration.fontSize)\n // Use the default fontWidthToHeightRatio\n trimSVGText(\n textElement,\n trimWidth,\n this.config.labelTextTrimType as TrimMode,\n true,\n fontSize\n )\n const trimmedBBox = textElement.node().getBBox()\n labelWidth = trimmedBBox.width\n labelHeight = trimmedBBox.height\n }\n\n /*\n we need to calculate the offset for the label based on the position and the fit mode\n for offsetX, applying Y label we need to check if it's wrap or trim, then set the offset accordingly.\n Same for offsetY, need to consider x label.\n */\n const offsetX = type === AxisType.X\n ? this._width / 2\n : type === AxisType.Y && labelTextFitMode === FitMode.Wrap && isWrapped\n ? (axisPosition === Position.Left)\n ? -axisWidth - labelHeight / 2 - 10 // there's a 10px gap between tick label and Position.Right Y label, so offset as well in the Position.Left case\n : axisWidth\n : (-1) ** (+(axisPosition === Position.Left)) * axisWidth\n const offsetY = type === AxisType.Y\n ? this._height / 2\n : type === AxisType.X && labelTextFitMode === FitMode.Wrap\n ? (axisPosition === Position.Top) ? -axisHeight - labelHeight / 2 : axisHeight\n : (-1) ** (+(axisPosition === Position.Top)) * axisHeight\n\n const marginX = type === AxisType.X ? 0 : (-1) ** (+(axisPosition === Position.Left)) * labelMargin\n const marginY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * labelMargin : 0\n\n // Apply transform and rotation after all calculations\n textElement.attr('transform', `translate(${offsetX + marginX},${offsetY + marginY}) rotate(${rotation})`)\n }\n\n private _getLabelDY (): number {\n const { type, position } = this.config\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return 0\n case Position.Bottom: default: return 0.75\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return 0.75\n case Position.Left: default: return -0.25\n }\n }\n }\n\n private _getTickTextOffset (axisPosition: Position, tickSize: number, fontSize: number): [number, number] {\n const { config } = this\n const angleRad = (config.tickTextAngle ?? 0) / 180 * Math.PI\n const baseOffset = tickSize + config.tickPadding\n\n if (config.type === AxisType.X) {\n const direction = axisPosition === Position.Bottom ? 1 : -1\n return [\n direction * baseOffset * Math.sin(angleRad),\n direction * (baseOffset + fontSize / 2) * Math.cos(angleRad),\n ]\n } else {\n const direction = axisPosition === Position.Right ? 1 : -1\n return [\n direction * baseOffset * Math.cos(angleRad),\n direction * baseOffset * Math.sin(angleRad),\n ]\n }\n }\n\n private _alignTickLabels (): void {\n const { config: { type, tickTextAlign, tickTextAngle, position } } = this\n const tickText = this.g.selectAll('g.tick > text')\n\n const textAnchor = textAlignToAnchor(tickTextAlign as TextAlign)\n const translateX = type === AxisType.X\n ? 0\n : this._getYTickTextTranslate(tickTextAlign as TextAlign, position as Position)\n\n const translateValue = tickTextAngle ? `translate(${translateX},0) rotate(${tickTextAngle})` : `translate(${translateX},0)`\n tickText\n .attr('transform', translateValue)\n .attr('text-anchor', textAnchor)\n }\n\n private _getYTickTextTranslate (textAlign: TextAlign, axisPosition: Position = Position.Left): number {\n /*\n Default in D3 is 9, tickPadding is the spacing in pixels between the tick and it's label. Default: `8`\n */\n const defaultTickTextSpacingPx = this.config.tickPadding + 1\n\n // this._axisRawBBox will be undefined when autoMargin is undefined\n const width = (this._axisRawBBox?.width ?? this.axisGroup.node()?.getBBox().width ?? 0) - defaultTickTextSpacingPx\n\n switch (textAlign) {\n case TextAlign.Left: return axisPosition === Position.Left ? width * -1 : 0\n case TextAlign.Right: return axisPosition === Position.Left ? 0 : width\n case TextAlign.Center: return axisPosition === Position.Left ? width * (-0.5) : width * 0.5\n default: return 0\n }\n }\n}\n"],"names":["s.grid","s.tick","s.tickLabel","s.tickLabelHideable","s.tickTextExiting","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/axis/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { interrupt } from 'd3-transition'\nimport { Axis as D3Axis, axisBottom, axisLeft, axisRight, axisTop } from 'd3-axis'\nimport { NumberValue } from 'd3-scale'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Types\nimport { Position } from 'types/position'\nimport { ContinuousScale } from 'types/scale'\nimport { Spacing } from 'types/spacing'\nimport { FitMode, TextAlign, TrimMode, UnovisText, UnovisTextOptions, VerticalAlign } from 'types/text'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\nimport { renderTextToSvgTextElement, textAlignToAnchor, trimSVGText, wrapSVGText } from 'utils/text'\nimport { isEqual, isFunction } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\nimport { getFontWidthToHeightRatio } from 'styles/index'\n\n// Local Types\nimport { AxisType } from './types'\n\n// Config\nimport { AxisDefaultConfig, AxisConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Axis<Datum> extends XYComponentCore<Datum, AxisConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig: AxisConfigInterface<Datum> = AxisDefaultConfig\n public config: AxisConfigInterface<Datum> = this._defaultConfig\n private axisGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private gridGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n\n private _axisRawBBox: DOMRect\n private _axisSizeBBox: SVGRect\n private _requiredMargin: Spacing\n private _defaultNumTicks = 3\n private _collideTickLabelsAnimFrameId: ReturnType<typeof requestAnimationFrame>\n private _tickTextStyleCached: {\n fontSize: number;\n fontFamily: string;\n fontWidthToHeightRatio: number;\n }\n\n protected events = {}\n\n constructor (config?: AxisConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n this.g.attr('axis-type', this.config.type)\n\n this.axisGroup = this.g.append('g')\n this.gridGroup = this.g.append('g')\n .attr('class', s.grid)\n }\n\n /** Renders axis to an invisible grouped to calculate automatic chart margins */\n public preRender (): void {\n const { config } = this\n const axisRenderHelperGroup = this.g.append('g').attr('opacity', 0)\n\n this._renderAxis(axisRenderHelperGroup, 0)\n\n // Align tick text\n if (config.tickTextAlign) this._alignTickLabels(axisRenderHelperGroup)\n\n // Store axis raw BBox (without the label) for further label positioning (see _renderAxisLabel)\n this._axisRawBBox = axisRenderHelperGroup.node().getBBox()\n\n // Render label and store total axis size and required margins\n this._renderAxisLabel(axisRenderHelperGroup)\n this._axisSizeBBox = this._getAxisSize(axisRenderHelperGroup)\n this._requiredMargin = this._getRequiredMargin(this._axisSizeBBox)\n\n axisRenderHelperGroup.remove()\n }\n\n public getPosition (): Position {\n const { config: { type, position } } = this\n return (position ?? ((type === AxisType.X) ? Position.Bottom : Position.Left)) as Position\n }\n\n private _getAxisSize (selection: Selection<SVGGElement, unknown, SVGGElement, undefined>): SVGRect {\n const bBox = selection.node().getBBox()\n return bBox\n }\n\n private _getRequiredMargin (axisSize = this._axisSizeBBox): Spacing {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X: {\n const tolerancePx = 1\n const xEnd = this._axisSizeBBox.x + this._axisSizeBBox.width\n\n const left = this._axisSizeBBox.x < 0 ? Math.abs(this._axisSizeBBox.x) : 0\n const right = (xEnd - this._width) > tolerancePx ? xEnd - this._width : 0\n\n switch (position) {\n case Position.Top: return { top: axisSize.height, left, right }\n case Position.Bottom: default: return { bottom: axisSize.height, left, right }\n }\n }\n case AxisType.Y: {\n const bleedY = axisSize.height > this._height ? (axisSize.height - this._height) / 2 : 0\n const top = bleedY\n const bottom = bleedY\n\n switch (position) {\n case Position.Right: return { right: axisSize.width, top, bottom }\n case Position.Left: default: return { left: axisSize.width, top, bottom }\n }\n }\n }\n }\n\n getRequiredMargin (): Spacing {\n return this._requiredMargin\n }\n\n /** Calculates axis transform:translate offset based on passed container margins */\n getOffset (containerMargin: Spacing): {left: number; top: number} {\n const { config: { type, position } } = this\n\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return { top: containerMargin.top, left: containerMargin.left }\n case Position.Bottom: default: return { top: containerMargin.top + this._height, left: containerMargin.left }\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return { top: containerMargin.top, left: containerMargin.left + this._width }\n case Position.Left: default: return { top: containerMargin.top, left: containerMargin.left }\n }\n }\n }\n\n public _render (duration = this.config.duration, selection = this.axisGroup): void {\n const { config } = this\n\n this._renderAxis(selection, duration)\n this._renderAxisLabel(selection)\n\n if (config.gridLine) {\n const gridGen = this._buildGrid()\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n this.gridGroup.selectAll('*').interrupt()\n smartTransition(this.gridGroup, duration).call(gridGen).style('opacity', 1)\n } else {\n smartTransition(this.gridGroup, duration).style('opacity', 0)\n }\n\n if (config.tickTextAlign) this._alignTickLabels()\n this._resolveTickLabelOverlap(selection)\n }\n\n private _getAxisGen (): D3Axis<NumberValue | Date> {\n const { config } = this\n\n switch (config.type) {\n case AxisType.X:\n switch (config.position) {\n case Position.Top: return axisTop(this.xScale)\n case Position.Bottom: default: return axisBottom(this.xScale)\n }\n case AxisType.Y:\n switch (config.position) {\n case Position.Right: return axisRight(this.yScale)\n case Position.Left: default: return axisLeft(this.yScale)\n }\n }\n }\n\n private _buildAxis (): D3Axis<NumberValue | Date> {\n const { config: { tickPadding, tickSize } } = this\n\n const tickSizeInner = Array.isArray(tickSize) ? tickSize[0] : tickSize\n const tickSizeOuter = Array.isArray(tickSize) ? tickSize[1] : tickSize\n const ticks = this._getNumTicks()\n const axisGen = this._getAxisGen()\n axisGen.ticks(ticks).tickPadding(tickPadding).tickSizeInner(tickSizeInner).tickSizeOuter(tickSizeOuter)\n\n return axisGen\n }\n\n private _buildGrid (): D3Axis<NumberValue | Date> {\n const { config } = this\n\n const gridGen = this._getAxisGen()\n gridGen\n .tickSize(config.type === AxisType.X ? -this._height : -this._width)\n .tickSizeOuter(0)\n .tickFormat(() => '')\n\n const numTicks = this._getNumTicks() * 2\n const gridScale = gridGen.scale<ContinuousScale>()\n const scaleDomain = gridScale.domain()\n\n const getGridMinMaxTicksOnlyValues = (): number[] | Date[] => {\n if (!config.minMaxTicksOnlyShowGridLines) return scaleDomain\n\n const tickValues = gridScale.ticks(numTicks)\n if (tickValues.length < 2) return scaleDomain\n\n // If the last tick is far enough from the domain max value, we add it to the tick values to draw the grid line\n const tickValuesStep = +tickValues[1] - +tickValues[0]\n const domainMaxValue = scaleDomain[1]\n const diff = +domainMaxValue - +tickValues[tickValues.length - 1]\n\n return diff > tickValuesStep / 2 ? [...tickValues, domainMaxValue] as (number[] | Date[]) : tickValues\n }\n\n const tickValues = config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? getGridMinMaxTicksOnlyValues()\n : gridScale.ticks(numTicks)\n\n gridGen.tickValues(tickValues)\n\n return gridGen\n }\n\n private _renderAxis (selection = this.axisGroup, duration = this.config.duration): void {\n const { config } = this\n\n const axisGen = this._buildAxis()\n const axisScale = axisGen.scale<ContinuousScale>()\n const tickValues: (number[] | Date[]) =\n config.tickValues\n ? this._getConfiguredTickValues()\n : this._shouldRenderMinMaxTicksOnly()\n ? axisScale.domain()\n : axisScale.ticks(this._getNumTicks())\n const tickCount = tickValues.length\n axisGen.tickValues(tickValues)\n\n // Interrupting all active transitions first to prevent them from being stuck.\n // Somehow we see it happening in Angular apps.\n selection.selectAll('*').interrupt()\n const transition = smartTransition(selection, duration).call(axisGen)\n\n // Unset D3's default y and dy attributes because we're going to set them manually in the renderTextToSvgTextElement function\n selection.selectAll<SVGTextElement, number | Date>('text')\n .attr('dy', null)\n .attr('y', null)\n\n // Resolving tick label overlap after the animation is over\n transition.on('end', () => {\n this._resolveTickLabelOverlap(selection)\n })\n\n const ticks = selection.selectAll<SVGGElement, number | Date>('g.tick')\n\n ticks\n .classed(s.tick, true)\n .style('font-size', config.tickTextFontSize)\n\n // Selecting the <text> elements of the ticks to apply formatting. By default, this selection\n // will include exiting elements, so we're filtering them out.\n const tickText = selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => tickValues.some((t: number | Date) => isEqual(tickValue, t))) // We use isEqual to compare Dates\n .classed(s.tickLabel, true)\n .classed(s.tickLabelHideable, Boolean(config.tickTextHideOverlapping))\n .classed(s.tickTextExiting, false)\n .style('fill', config.tickTextColor) as Selection<SVGTextElement, number, SVGGElement, unknown> | Selection<SVGTextElement, Date, SVGGElement, unknown>\n\n // Marking exiting elements\n selection.selectAll<SVGTextElement, number | Date>('g.tick > text')\n .filter(tickValue => !tickValues.some((t: number | Date) => isEqual(tickValue, t)))\n .classed(s.tickTextExiting, true)\n\n // We interrupt the transition on tick's <text> to make it 'wrappable'\n tickText.nodes().forEach(node => interrupt(node))\n\n const tickSize = axisGen.tickSize()\n const axisPosition = this.getPosition()\n const textMaxWidth = config.tickTextWidth || (config.type === AxisType.X ? this._containerWidth / (tickCount + 1) : this._containerWidth / 5)\n tickText.each((value: number | Date, i: number, elements: ArrayLike<SVGTextElement>) => {\n let text = config.tickFormat?.(value, i, tickValues) ?? `${value}`\n const textElement = elements[i] as SVGTextElement\n\n // Get and cache the tick text style\n if (!this._tickTextStyleCached) {\n const styleDeclaration = getComputedStyle(textElement)\n this._tickTextStyleCached = {\n fontSize: Number.parseFloat(styleDeclaration.fontSize),\n fontFamily: styleDeclaration.fontFamily,\n fontWidthToHeightRatio: getFontWidthToHeightRatio(),\n }\n }\n\n // Calculate the text offset based on the axis position and the tick size\n const [textOffsetX, textOffsetY] = this._getTickTextOffset(axisPosition, tickSize, this._tickTextStyleCached.fontSize)\n\n // Prepare the Unovis text options\n const textOptions: UnovisTextOptions = {\n verticalAlign: config.type === AxisType.X ? VerticalAlign.Top : VerticalAlign.Middle,\n width: textMaxWidth,\n textRotationAngle: config.tickTextAngle,\n separator: config.tickTextSeparator,\n wordBreak: config.tickTextForceWordBreak,\n x: textOffsetX,\n y: textOffsetY,\n }\n\n if (config.tickTextFitMode === FitMode.Trim) {\n const textElementSelection = select<SVGTextElement, string>(textElement).text(text)\n trimSVGText(textElementSelection, textMaxWidth, config.tickTextTrimType as TrimMode, true, this._tickTextStyleCached.fontSize, 0.58)\n text = select<SVGTextElement, string>(textElement).text()\n }\n\n const textBlock: UnovisText = { text, ...this._tickTextStyleCached }\n const dominantBaseline = config.type === AxisType.X ? 'central' : 'hanging'\n renderTextToSvgTextElement(textElement, textBlock, textOptions, dominantBaseline)\n })\n\n selection\n .classed(s.axis, true)\n .classed(s.hideTickLine, !config.tickLine)\n .classed(s.hideDomain, !config.domainLine)\n\n if (config.fullSize) {\n const path = this._getFullDomainPath(0)\n smartTransition(selection.select('.domain'), duration).attr('d', path)\n }\n }\n\n private _resolveTickLabelOverlap (selection = this.axisGroup): void {\n const { config } = this\n const tickTextSelection = selection.selectAll<SVGTextElement, number | Date>(`g.tick > text:not(.${s.tickTextExiting})`)\n\n if (!config.tickTextHideOverlapping) {\n tickTextSelection.style('opacity', null)\n return\n }\n\n cancelAnimationFrame(this._collideTickLabelsAnimFrameId)\n // Colliding labels in the next frame to prevent forced reflow\n this._collideTickLabelsAnimFrameId = requestAnimationFrame(() => {\n this._collideTickLabels(tickTextSelection)\n })\n }\n\n private _collideTickLabels (selection: Selection<SVGTextElement, number | Date, SVGGElement, unknown>): void {\n type SVGOverlappingTextElement = SVGTextElement & {\n _visible: boolean;\n }\n\n // Reset visibility of all labels\n selection.each((d, i, elements) => {\n const node = elements[i] as SVGOverlappingTextElement\n node._visible = true\n })\n\n // We do three iterations because not all overlapping labels can be resolved in the first iteration\n const numIterations = 3\n for (let i = 0; i < numIterations; i += 1) {\n // Run collision detection and set labels visibility\n selection.each((d, i, elements) => {\n const label1 = elements[i] as SVGOverlappingTextElement\n const isLabel1Visible = label1._visible\n if (!isLabel1Visible) return\n\n // Calculate bounding rect of point's label\n const label1BoundingRect = label1.getBoundingClientRect()\n\n for (let j = i + 1; j < elements.length; j += 1) {\n if (i === j) continue\n const label2 = elements[j] as SVGOverlappingTextElement\n const isLabel2Visible = label2._visible\n if (isLabel2Visible) {\n const label2BoundingRect = label2.getBoundingClientRect()\n const intersect = rectIntersect(label1BoundingRect, label2BoundingRect, -5)\n if (intersect) {\n label2._visible = false\n break\n }\n }\n }\n })\n }\n\n // Hide the overlapping labels\n selection.each((d, i, elements) => {\n const label = elements[i] as SVGOverlappingTextElement\n select(label).style('opacity', label._visible ? 1 : 0)\n })\n }\n\n private _getNumTicks (): number {\n const { config: { type, numTicks } } = this\n\n if (numTicks) return numTicks\n\n if (type === AxisType.X) {\n const xRange = this.xScale.range() as [number, number]\n const width = xRange[1] - xRange[0]\n return Math.floor(width / 175)\n }\n\n if (type === AxisType.Y) {\n const yRange = this.yScale.range() as [number, number]\n const height = Math.abs(yRange[0] - yRange[1])\n return Math.pow(height, 0.85) / 25\n }\n\n return this._defaultNumTicks\n }\n\n private _getConfiguredTickValues (): number[] | null {\n const { config } = this\n const scale = config.type === AxisType.X ? this.xScale : this.yScale\n const scaleDomain = scale?.domain() as [number, number]\n\n if (config.tickValues) {\n return config.tickValues.filter(v => (v >= scaleDomain[0]) && (v <= scaleDomain[1]))\n }\n\n return null\n }\n\n private _shouldRenderMinMaxTicksOnly (): boolean {\n const { config } = this\n return config.minMaxTicksOnly || (config.type === AxisType.X && this._width < config.minMaxTicksOnlyWhenWidthIsLess)\n }\n\n private _getFullDomainPath (tickSize = 0): string {\n const { config: { type } } = this\n switch (type) {\n case AxisType.X: return `M0.5, ${tickSize} V0.5 H${this._width + 0.5} V${tickSize}`\n case AxisType.Y: return `M${-tickSize}, ${this._height + 0.5} H0.5 V0.5 H${-tickSize}`\n }\n }\n\n private _renderAxisLabel (selection = this.axisGroup): void {\n const { type, label, labelMargin, labelFontSize, labelTextFitMode } = this.config\n\n // Remove the old label first to calculate the axis size properly\n selection.selectAll(`.${s.label}`).remove()\n\n if (!label) return\n\n // Calculate label position and rotation\n const axisPosition = this.getPosition()\n // We always use this.axisRenderHelperGroup to calculate the size of the axis because\n // this.axisGroup will give us incorrect values due to animation\n const { width: axisWidth, height: axisHeight } = this._axisRawBBox ?? selection.node().getBBox()\n\n const rotation = type === AxisType.Y ? -90 : 0\n\n // Create the text element (without transform first)\n const textElement = selection\n .append('text')\n .attr('class', s.label)\n .attr('dy', `${this._getLabelDY()}em`)\n .style('font-size', labelFontSize)\n .style('fill', this.config.labelColor)\n\n // Set the text content\n textElement.text(label)\n\n let isWrapped = false\n if (labelTextFitMode === FitMode.Wrap) {\n // For Y-axis, use the chart height as the maximum width before rotation\n const maxWidth = type === AxisType.Y ? this._height : this._width\n const currentTextWidth = textElement.node().getComputedTextLength()\n\n if (currentTextWidth > maxWidth) {\n wrapSVGText(textElement, maxWidth)\n isWrapped = true\n }\n }\n\n // Calculate offset after wrapping to get accurate dimensions\n let labelWidth = axisWidth\n let labelHeight = axisHeight\n if (labelTextFitMode === FitMode.Wrap) {\n const labelBBox = textElement.node().getBBox()\n labelWidth = labelBBox.width\n labelHeight = labelBBox.height\n } else {\n const trimWidth = type === AxisType.X ? labelWidth : labelHeight\n const styleDeclaration = getComputedStyle(textElement.node())\n const fontSize = Number.parseFloat(styleDeclaration.fontSize)\n // Use the default fontWidthToHeightRatio\n trimSVGText(\n textElement,\n trimWidth,\n this.config.labelTextTrimType as TrimMode,\n true,\n fontSize\n )\n const trimmedBBox = textElement.node().getBBox()\n labelWidth = trimmedBBox.width\n labelHeight = trimmedBBox.height\n }\n\n /*\n we need to calculate the offset for the label based on the position and the fit mode\n for offsetX, applying Y label we need to check if it's wrap or trim, then set the offset accordingly.\n Same for offsetY, need to consider x label.\n */\n const offsetX = type === AxisType.X\n ? this._width / 2\n : type === AxisType.Y && labelTextFitMode === FitMode.Wrap && isWrapped\n ? (axisPosition === Position.Left)\n ? -axisWidth - labelHeight / 2 - 10 // there's a 10px gap between tick label and Position.Right Y label, so offset as well in the Position.Left case\n : axisWidth\n : (-1) ** (+(axisPosition === Position.Left)) * axisWidth\n const offsetY = type === AxisType.Y\n ? this._height / 2\n : type === AxisType.X && labelTextFitMode === FitMode.Wrap\n ? (axisPosition === Position.Top) ? -axisHeight - labelHeight / 2 : axisHeight\n : (-1) ** (+(axisPosition === Position.Top)) * axisHeight\n\n const marginX = type === AxisType.X ? 0 : (-1) ** (+(axisPosition === Position.Left)) * labelMargin\n const marginY = type === AxisType.X ? (-1) ** (+(axisPosition === Position.Top)) * labelMargin : 0\n\n // Apply transform and rotation after all calculations\n textElement.attr('transform', `translate(${offsetX + marginX},${offsetY + marginY}) rotate(${rotation})`)\n }\n\n private _getLabelDY (): number {\n const { type, position } = this.config\n switch (type) {\n case AxisType.X:\n switch (position) {\n case Position.Top: return 0\n case Position.Bottom: default: return 0.75\n }\n case AxisType.Y:\n switch (position) {\n case Position.Right: return 0.75\n case Position.Left: default: return -0.25\n }\n }\n }\n\n private _getTickTextOffset (axisPosition: Position, tickSize: number, fontSize: number): [number, number] {\n const { config } = this\n const angleRad = (config.tickTextAngle ?? 0) / 180 * Math.PI\n const baseOffset = tickSize + config.tickPadding\n\n if (config.type === AxisType.X) {\n const direction = axisPosition === Position.Bottom ? 1 : -1\n return [\n direction * baseOffset * Math.sin(angleRad),\n direction * (baseOffset + fontSize / 2) * Math.cos(angleRad),\n ]\n } else {\n const direction = axisPosition === Position.Right ? 1 : -1\n return [\n direction * baseOffset * Math.cos(angleRad),\n direction * baseOffset * Math.sin(angleRad),\n ]\n }\n }\n\n private _alignTickLabels (axisGroup = this.axisGroup): void {\n const { config: { type, tickTextAlign, tickTextAngle, position } } = this\n const activeTickTexts = axisGroup.selectAll<SVGTextElement, number | Date>(`g.tick > text:not(.${s.tickTextExiting})`)\n const ticksData = activeTickTexts.data() as number[] | Date[]\n\n activeTickTexts.each((_, i, elements) => {\n const tickTextElement = elements[i] as SVGTextElement\n const tickDatum = ticksData[i]\n // Compute the tick's target position from the scale rather than reading the DOM transform,\n // which would return an interpolated value during a transition.\n const tickPosition: [number, number] = type === AxisType.X\n ? [this.xScale(tickDatum as never), 0]\n : [0, this.yScale(tickDatum as never)]\n const textAlign = (isFunction(tickTextAlign) ? tickTextAlign(tickDatum, i, ticksData, tickPosition, this._width, this._height) : tickTextAlign) as TextAlign\n const textAnchor = textAlignToAnchor(textAlign)\n const translateX = type === AxisType.X ? 0 : this._getYTickTextTranslate(textAlign, position as Position)\n\n const translateValue = tickTextAngle ? `translate(${translateX},0) rotate(${tickTextAngle})` : `translate(${translateX},0)`\n select(tickTextElement)\n .attr('transform', translateValue)\n .attr('text-anchor', textAnchor)\n })\n }\n\n private _getYTickTextTranslate (textAlign: TextAlign, axisPosition: Position = Position.Left): number {\n /*\n Default in D3 is 9, tickPadding is the spacing in pixels between the tick and it's label. Default: `8`\n */\n const defaultTickTextSpacingPx = this.config.tickPadding + 1\n\n // this._axisRawBBox will be undefined when autoMargin is undefined\n const width = (this._axisRawBBox?.width ?? this.axisGroup.node()?.getBBox().width ?? 0) - defaultTickTextSpacingPx\n\n switch (textAlign) {\n case TextAlign.Left: return axisPosition === Position.Left ? width * -1 : 0\n case TextAlign.Right: return axisPosition === Position.Left ? 0 : width\n case TextAlign.Center: return axisPosition === Position.Left ? width * (-0.5) : width * 0.5\n default: return 0\n }\n }\n}\n"],"names":["s.grid","s.tick","s.tickLabel","s.tickLabelHideable","s.tickTextExiting","s.axis","s.hideTickLine","s.hideDomain","label","s.label","s"],"mappings":"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"}
@@ -1,43 +1,7 @@
1
1
  export declare const root: string;
2
- export declare const cssVarDefaults: {
3
- '--vis-axis-tick-color': string;
4
- '--vis-axis-grid-color': string;
5
- '--vis-axis-grid-line-width': string;
6
- '--vis-axis-grid-line-dasharray': string;
7
- '--vis-axis-label-font-size': string;
8
- '--vis-axis-label-color': string;
9
- '--vis-axis-label-weight': string;
10
- '--vis-axis-tick-label-color': string;
11
- '--vis-axis-tick-label-font-size': string;
12
- '--vis-axis-tick-label-weight': string;
13
- '--vis-axis-tick-label-cursor': string;
14
- '--vis-axis-tick-label-text-decoration': string;
15
- '--vis-axis-tick-line-width': string;
16
- '--vis-axis-tick-label-hide-transition': string;
17
- '--vis-dark-axis-tick-color': string;
18
- '--vis-dark-axis-tick-label-color': string;
19
- '--vis-dark-axis-grid-color': string;
20
- '--vis-dark-axis-label-color': string;
21
- };
2
+ export declare const cssVarDefaults: Record<string, string | undefined>;
22
3
  export declare const variables: {
23
- axisTickColor: "--vis-axis-tick-color";
24
- axisGridColor: "--vis-axis-grid-color";
25
- axisGridLineWidth: "--vis-axis-grid-line-width";
26
- axisGridLineDasharray: "--vis-axis-grid-line-dasharray";
27
- axisLabelFontSize: "--vis-axis-label-font-size";
28
- axisLabelColor: "--vis-axis-label-color";
29
- axisLabelWeight: "--vis-axis-label-weight";
30
- axisTickLabelColor: "--vis-axis-tick-label-color";
31
- axisTickLabelFontSize: "--vis-axis-tick-label-font-size";
32
- axisTickLabelWeight: "--vis-axis-tick-label-weight";
33
- axisTickLabelCursor: "--vis-axis-tick-label-cursor";
34
- axisTickLabelTextDecoration: "--vis-axis-tick-label-text-decoration";
35
- axisTickLineWidth: "--vis-axis-tick-line-width";
36
- axisTickLabelHideTransition: "--vis-axis-tick-label-hide-transition";
37
- darkAxisTickColor: "--vis-dark-axis-tick-color";
38
- darkAxisTickLabelColor: "--vis-dark-axis-tick-label-color";
39
- darkAxisGridColor: "--vis-dark-axis-grid-color";
40
- darkAxisLabelColor: "--vis-dark-axis-label-color";
4
+ [x: string]: string;
41
5
  };
42
6
  export declare const hideTickLine: string;
43
7
  export declare const hideDomain: string;
@@ -5,13 +5,15 @@ const root = css `
5
5
  label: axis-component;
6
6
  `;
7
7
  const cssVarDefaults = {
8
- // Undefined by default to allow proper fallback to var(--vis-font-family)
9
- /* --vis-axis-font-family: */
8
+ '--vis-axis-font-family': undefined,
10
9
  '--vis-axis-tick-color': '#e8e9ef',
11
- /* --vis-axis-domain-color: // Undefined by default to allow fallback to var(--vis-axis-tick-color) */
10
+ '--vis-axis-domain-color': undefined,
11
+ '--vis-axis-domain-line-dasharray': undefined,
12
12
  '--vis-axis-grid-color': '#e8e9ef',
13
13
  '--vis-axis-grid-line-width': '1px',
14
14
  '--vis-axis-grid-line-dasharray': 'none',
15
+ '--vis-axis-grid-opacity': '1',
16
+ '--vis-axis-grid-transition': 'none',
15
17
  '--vis-axis-label-font-size': '14px',
16
18
  '--vis-axis-label-color': '#6c778c',
17
19
  '--vis-axis-label-weight': '500',
@@ -22,9 +24,9 @@ const cssVarDefaults = {
22
24
  '--vis-axis-tick-label-text-decoration': 'none',
23
25
  '--vis-axis-tick-line-width': '1px',
24
26
  '--vis-axis-tick-label-hide-transition': 'opacity 400ms ease-in-out',
25
- /* --vis-axis-domain-line-width: // Undefined by default to allow fallback to var(--vis-axis-grid-line-width) */
27
+ '--vis-axis-domain-line-width': undefined,
26
28
  '--vis-dark-axis-tick-color': '#6c778c',
27
- /* --vis-dark-axis-domain-color: // Undefined by default to allow fallback to var(--vis-dark-axis-tick-color) */
29
+ '--vis-dark-axis-domain-color': undefined,
28
30
  '--vis-dark-axis-tick-label-color': '#e8e9ef',
29
31
  '--vis-dark-axis-grid-color': '#6c778c',
30
32
  '--vis-dark-axis-label-color': '#fefefe',
@@ -43,9 +45,9 @@ const axis = css `
43
45
  user-select: none;
44
46
 
45
47
  .domain {
46
- stroke: var(--vis-axis-domain-color, var(--vis-axis-tick-color));
47
- stroke-width: var(--vis-axis-domain-line-width, var(--vis-axis-grid-line-width));
48
- stroke-dasharray: var(--vis-axis-domain-line-dasharray, var(--vis-axis-grid-line-dasharray));
48
+ stroke: var(${variables.axisDomainColor}, var(${variables.axisTickColor}));
49
+ stroke-width: var(${variables.axisDomainLineWidth}, var(${variables.axisGridLineWidth}));
50
+ stroke-dasharray: var(${variables.axisDomainLineDasharray}, var(${variables.axisGridLineDasharray}));
49
51
  }
50
52
 
51
53
  &${`.${hideTickLine}`} {
@@ -68,28 +70,30 @@ const grid = css `
68
70
  }
69
71
 
70
72
  line {
71
- stroke: var(--vis-axis-grid-color);
72
- stroke-width: var(--vis-axis-grid-line-width);
73
- stroke-dasharray: var(--vis-axis-grid-line-dasharray);
73
+ stroke: var(${variables.axisGridColor});
74
+ stroke-width: var(${variables.axisGridLineWidth});
75
+ stroke-dasharray: var(${variables.axisGridLineDasharray});
76
+ opacity: var(${variables.axisGridOpacity});
77
+ transition: var(${variables.axisGridTransition});
74
78
  }
75
79
  `;
76
80
  const tick = css `
77
81
  label: tick;
78
82
 
79
83
  stroke: none;
80
- font-size: var(--vis-axis-tick-label-font-size);
81
- font-weight: var(--vis-axis-tick-label-weight);
84
+ font-size: var(${variables.axisTickLabelFontSize});
85
+ font-weight: var(${variables.axisTickLabelWeight});
82
86
 
83
87
  line {
84
- stroke: var(--vis-axis-tick-color);
85
- stroke-width: var(--vis-axis-tick-line-width);
88
+ stroke: var(${variables.axisTickColor});
89
+ stroke-width: var(${variables.axisTickLineWidth});
86
90
  }
87
91
 
88
92
  text {
89
- fill: var(--vis-axis-tick-label-color);
90
- cursor: var(--vis-axis-tick-label-cursor);
91
- font-family: var(--vis-axis-font-family, var(--vis-font-family));
92
- text-decoration: var(--vis-axis-tick-label-text-decoration);
93
+ fill: var(${variables.axisTickLabelColor});
94
+ cursor: var(${variables.axisTickLabelCursor});
95
+ font-family: var(${variables.axisFontFamily}, var(--vis-font-family));
96
+ text-decoration: var(${variables.axisTickLabelTextDecoration});
93
97
  stroke: none;
94
98
  }
95
99
  `;
@@ -98,10 +102,10 @@ const tickTextExiting = css `
98
102
  `;
99
103
  const label = css `
100
104
  label: label;
101
- fill: var(--vis-axis-label-color);
102
- font-size: var(--vis-axis-label-font-size);
103
- font-weight: var(--vis-axis-label-weight);
104
- font-family: var(--vis-axis-font-family, var(--vis-font-family));
105
+ fill: var(${variables.axisLabelColor});
106
+ font-size: var(${variables.axisLabelFontSize});
107
+ font-weight: var(${variables.axisLabelWeight});
108
+ font-family: var(${variables.axisFontFamily}, var(--vis-font-family));
105
109
  text-anchor: middle;
106
110
  `;
107
111
  const tickLabel = css `
@@ -110,7 +114,7 @@ const tickLabel = css `
110
114
  const tickLabelHideable = css `
111
115
  label: tick-label-hideable;
112
116
  opacity: 0;
113
- transition: var(--vis-axis-tick-label-hide-transition);
117
+ transition: var(${variables.axisTickLabelHideTransition});
114
118
  `;
115
119
 
116
120
  export { axis, cssVarDefaults, grid, hideDomain, hideTickLine, label, root, tick, tickLabel, tickLabelHideable, tickTextExiting, variables };
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../src/components/axis/style.ts"],"sourcesContent":["import { css } from '@emotion/css'\nimport { getCssVarNames, injectGlobalCssVariables } from 'utils/style'\n\nexport const root = css`\n label: axis-component;\n`\n\nexport const cssVarDefaults = {\n // Undefined by default to allow proper fallback to var(--vis-font-family)\n /* --vis-axis-font-family: */\n '--vis-axis-tick-color': '#e8e9ef',\n /* --vis-axis-domain-color: // Undefined by default to allow fallback to var(--vis-axis-tick-color) */\n '--vis-axis-grid-color': '#e8e9ef',\n '--vis-axis-grid-line-width': '1px',\n '--vis-axis-grid-line-dasharray': 'none',\n\n '--vis-axis-label-font-size': '14px',\n '--vis-axis-label-color': '#6c778c',\n '--vis-axis-label-weight': '500',\n\n '--vis-axis-tick-label-color': '#6c778c',\n '--vis-axis-tick-label-font-size': '12px',\n '--vis-axis-tick-label-weight': '500',\n '--vis-axis-tick-label-cursor': 'default',\n '--vis-axis-tick-label-text-decoration': 'none',\n\n '--vis-axis-tick-line-width': '1px',\n '--vis-axis-tick-label-hide-transition': 'opacity 400ms ease-in-out',\n\n /* --vis-axis-domain-line-width: // Undefined by default to allow fallback to var(--vis-axis-grid-line-width) */\n\n '--vis-dark-axis-tick-color': '#6c778c',\n /* --vis-dark-axis-domain-color: // Undefined by default to allow fallback to var(--vis-dark-axis-tick-color) */\n '--vis-dark-axis-tick-label-color': '#e8e9ef',\n '--vis-dark-axis-grid-color': '#6c778c',\n '--vis-dark-axis-label-color': '#fefefe',\n}\n\nexport const variables = getCssVarNames(cssVarDefaults)\ninjectGlobalCssVariables(cssVarDefaults, root)\n\nexport const hideTickLine = css`\n label: hide-tick-line;\n`\n\nexport const hideDomain = css`\n label: hide-domain;\n`\n\nexport const axis = css`\n label: axis;\n\n user-select: none;\n\n .domain {\n stroke: var(--vis-axis-domain-color, var(--vis-axis-tick-color));\n stroke-width: var(--vis-axis-domain-line-width, var(--vis-axis-grid-line-width));\n stroke-dasharray: var(--vis-axis-domain-line-dasharray, var(--vis-axis-grid-line-dasharray));\n }\n\n &${`.${hideTickLine}`} {\n .tick > line {\n opacity: 0;\n }\n }\n\n &${`.${hideDomain}`} {\n .domain {\n opacity: 0;\n }\n }\n`\n\nexport const grid = css`\n label: grid;\n\n .domain {\n opacity: 0;\n }\n\n line {\n stroke: var(--vis-axis-grid-color);\n stroke-width: var(--vis-axis-grid-line-width);\n stroke-dasharray: var(--vis-axis-grid-line-dasharray);\n }\n`\n\nexport const tick = css`\n label: tick;\n\n stroke: none;\n font-size: var(--vis-axis-tick-label-font-size);\n font-weight: var(--vis-axis-tick-label-weight);\n\n line {\n stroke: var(--vis-axis-tick-color);\n stroke-width: var(--vis-axis-tick-line-width);\n }\n\n text {\n fill: var(--vis-axis-tick-label-color);\n cursor: var(--vis-axis-tick-label-cursor);\n font-family: var(--vis-axis-font-family, var(--vis-font-family));\n text-decoration: var(--vis-axis-tick-label-text-decoration);\n stroke: none;\n }\n`\n\nexport const tickTextExiting = css`\n label: tick-text-exiting;\n`\n\nexport const label = css`\n label: label;\n fill: var(--vis-axis-label-color);\n font-size: var(--vis-axis-label-font-size);\n font-weight: var(--vis-axis-label-weight);\n font-family: var(--vis-axis-font-family, var(--vis-font-family));\n text-anchor: middle;\n`\n\nexport const tickLabel = css`\n label: tick-label;\n`\n\nexport const tickLabelHideable = css`\n label: tick-label-hideable;\n opacity: 0;\n transition: var(--vis-axis-tick-label-hide-transition);\n`\n"],"names":[],"mappings":";;;AAGO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEY,MAAA,cAAc,GAAG;;;AAG5B,IAAA,uBAAuB,EAAE,SAAS;;AAElC,IAAA,uBAAuB,EAAE,SAAS;AAClC,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,gCAAgC,EAAE,MAAM;AAExC,IAAA,4BAA4B,EAAE,MAAM;AACpC,IAAA,wBAAwB,EAAE,SAAS;AACnC,IAAA,yBAAyB,EAAE,KAAK;AAEhC,IAAA,6BAA6B,EAAE,SAAS;AACxC,IAAA,iCAAiC,EAAE,MAAM;AACzC,IAAA,8BAA8B,EAAE,KAAK;AACrC,IAAA,8BAA8B,EAAE,SAAS;AACzC,IAAA,uCAAuC,EAAE,MAAM;AAE/C,IAAA,4BAA4B,EAAE,KAAK;AACnC,IAAA,uCAAuC,EAAE,2BAA2B;;AAIpE,IAAA,4BAA4B,EAAE,SAAS;;AAEvC,IAAA,kCAAkC,EAAE,SAAS;AAC7C,IAAA,4BAA4B,EAAE,SAAS;AACvC,IAAA,6BAA6B,EAAE,SAAS;EACzC;MAEY,SAAS,GAAG,cAAc,CAAC,cAAc,EAAC;AACvD,wBAAwB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;AAEvC,MAAM,YAAY,GAAG,GAAG,CAAA,CAAA;;EAE9B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;EAE5B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;AAWlB,GAAA,EAAA,CAAA,CAAA,EAAI,YAAY,CAAE,CAAA,CAAA;;;;;;AAMlB,GAAA,EAAA,CAAA,CAAA,EAAI,UAAU,CAAE,CAAA,CAAA;;;;;EAKpB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;EAYtB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;;;;EAmBtB;AAEM,MAAM,eAAe,GAAG,GAAG,CAAA,CAAA;;EAEjC;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;EAOvB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,iBAAiB,GAAG,GAAG,CAAA,CAAA;;;;;;;;"}
1
+ {"version":3,"file":"style.js","sources":["../../../src/components/axis/style.ts"],"sourcesContent":["import { css } from '@emotion/css'\nimport { getCssVarNames, injectGlobalCssVariables } from 'utils/style'\n\nexport const root = css`\n label: axis-component;\n`\n\nexport const cssVarDefaults: Record<string, string | undefined> = {\n '--vis-axis-font-family': undefined, // Undefined by default to allow proper fallback to var(--vis-font-family)\n '--vis-axis-tick-color': '#e8e9ef',\n '--vis-axis-domain-color': undefined, // Undefined by default to allow fallback to var(--vis-axis-tick-color)\n '--vis-axis-domain-line-dasharray': undefined, // Undefined by default to allow fallback to var(--vis-axis-grid-line-dasharray)\n '--vis-axis-grid-color': '#e8e9ef',\n '--vis-axis-grid-line-width': '1px',\n '--vis-axis-grid-line-dasharray': 'none',\n '--vis-axis-grid-opacity': '1',\n '--vis-axis-grid-transition': 'none',\n\n '--vis-axis-label-font-size': '14px',\n '--vis-axis-label-color': '#6c778c',\n '--vis-axis-label-weight': '500',\n\n '--vis-axis-tick-label-color': '#6c778c',\n '--vis-axis-tick-label-font-size': '12px',\n '--vis-axis-tick-label-weight': '500',\n '--vis-axis-tick-label-cursor': 'default',\n '--vis-axis-tick-label-text-decoration': 'none',\n\n '--vis-axis-tick-line-width': '1px',\n '--vis-axis-tick-label-hide-transition': 'opacity 400ms ease-in-out',\n\n '--vis-axis-domain-line-width': undefined, // Undefined by default to allow fallback to var(--vis-axis-grid-line-width)\n\n '--vis-dark-axis-tick-color': '#6c778c',\n '--vis-dark-axis-domain-color': undefined, // Undefined by default to allow fallback to var(--vis-dark-axis-tick-color)\n '--vis-dark-axis-tick-label-color': '#e8e9ef',\n '--vis-dark-axis-grid-color': '#6c778c',\n '--vis-dark-axis-label-color': '#fefefe',\n}\n\nexport const variables = getCssVarNames(cssVarDefaults)\ninjectGlobalCssVariables(cssVarDefaults, root)\n\nexport const hideTickLine = css`\n label: hide-tick-line;\n`\n\nexport const hideDomain = css`\n label: hide-domain;\n`\n\nexport const axis = css`\n label: axis;\n\n user-select: none;\n\n .domain {\n stroke: var(${variables.axisDomainColor}, var(${variables.axisTickColor}));\n stroke-width: var(${variables.axisDomainLineWidth}, var(${variables.axisGridLineWidth}));\n stroke-dasharray: var(${variables.axisDomainLineDasharray}, var(${variables.axisGridLineDasharray}));\n }\n\n &${`.${hideTickLine}`} {\n .tick > line {\n opacity: 0;\n }\n }\n\n &${`.${hideDomain}`} {\n .domain {\n opacity: 0;\n }\n }\n`\n\nexport const grid = css`\n label: grid;\n\n .domain {\n opacity: 0;\n }\n\n line {\n stroke: var(${variables.axisGridColor});\n stroke-width: var(${variables.axisGridLineWidth});\n stroke-dasharray: var(${variables.axisGridLineDasharray});\n opacity: var(${variables.axisGridOpacity});\n transition: var(${variables.axisGridTransition});\n }\n`\n\nexport const tick = css`\n label: tick;\n\n stroke: none;\n font-size: var(${variables.axisTickLabelFontSize});\n font-weight: var(${variables.axisTickLabelWeight});\n\n line {\n stroke: var(${variables.axisTickColor});\n stroke-width: var(${variables.axisTickLineWidth});\n }\n\n text {\n fill: var(${variables.axisTickLabelColor});\n cursor: var(${variables.axisTickLabelCursor});\n font-family: var(${variables.axisFontFamily}, var(--vis-font-family));\n text-decoration: var(${variables.axisTickLabelTextDecoration});\n stroke: none;\n }\n`\n\nexport const tickTextExiting = css`\n label: tick-text-exiting;\n`\n\nexport const label = css`\n label: label;\n fill: var(${variables.axisLabelColor});\n font-size: var(${variables.axisLabelFontSize});\n font-weight: var(${variables.axisLabelWeight});\n font-family: var(${variables.axisFontFamily}, var(--vis-font-family));\n text-anchor: middle;\n`\n\nexport const tickLabel = css`\n label: tick-label;\n`\n\nexport const tickLabelHideable = css`\n label: tick-label-hideable;\n opacity: 0;\n transition: var(${variables.axisTickLabelHideTransition});\n`\n"],"names":[],"mappings":"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"}
@@ -28,5 +28,8 @@ export interface BrushConfigInterface<Datum> extends Partial<XYComponentConfigIn
28
28
  handlePosition?: Arrangement.Inside | Arrangement.Outside | string;
29
29
  /** Constraint Brush selection to a minimal length in data units. Default: `undefined` */
30
30
  selectionMinLength?: number;
31
+ /** Extend the brush height by the specified number of pixels. This can be convenient when you have thick lines
32
+ * at the bottom of the chart and you want to ensure they stay fully covered by the brush. Default: `0` */
33
+ brushHeightExtend?: number;
31
34
  }
32
35
  export declare const BrushDefaultConfig: BrushConfigInterface<unknown>;
@@ -9,7 +9,7 @@ const BrushDefaultConfig = Object.assign(Object.assign({}, XYComponentDefaultCon
9
9
  /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */
10
10
  onBrushMove: (s, e, userDriven) => { },
11
11
  /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */
12
- onBrushEnd: (s, e, userDriven) => { }, handleWidth: 9, selection: null, draggable: false, handlePosition: Arrangement.Inside, selectionMinLength: undefined });
12
+ onBrushEnd: (s, e, userDriven) => { }, handleWidth: 9, selection: null, draggable: false, handlePosition: Arrangement.Inside, selectionMinLength: undefined, brushHeightExtend: 0 });
13
13
 
14
14
  export { BrushDefaultConfig };
15
15
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/components/brush/config.ts"],"sourcesContent":["import { D3BrushEvent } from 'd3-brush'\nimport { XYComponentConfigInterface, XYComponentDefaultConfig } from 'core/xy-component/config'\n\n// Types\nimport { Arrangement } from 'types/position'\n\n// We extend partial XY config interface because x and y properties are optional for Brush\nexport interface BrushConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {\n /** Callback function to be called on any Brush event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrush?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Callback function to be called on the Brush start event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrushStart?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Callback function to be called on the Brush move event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrushMove?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Callback function to be called on the Brush end event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrushEnd?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Width of the Brush handle. Default: `1` */\n handleWidth?: number;\n /** Brush selection in the data space coordinates, can be used to control the selection. Default: `undefined` */\n selection?: [number, number] | null;\n /** Allow dragging the selected area as a whole in order to change the selected range. Default: `false` */\n draggable?: boolean;\n /** Position of the handle: `Arrangement.Inside` or `Arrangement.Outside`. Default: `Arrangement.Inside` */\n handlePosition?: Arrangement.Inside | Arrangement.Outside | string;\n /** Constraint Brush selection to a minimal length in data units. Default: `undefined` */\n selectionMinLength?: number;\n}\n\nexport const BrushDefaultConfig: BrushConfigInterface<unknown> = {\n ...XYComponentDefaultConfig,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrush: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrushStart: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrushMove: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrushEnd: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n handleWidth: 9,\n selection: null,\n draggable: false,\n handlePosition: Arrangement.Inside,\n selectionMinLength: undefined,\n}\n"],"names":[],"mappings":";;;AAoCO,MAAM,kBAAkB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC1B,wBAAwB,CAAA,EAAA;;IAE3B,OAAO,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG;;IAE1G,YAAY,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG;;IAE/G,WAAW,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG;;AAE9G,IAAA,UAAU,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,QAAa,EAC7G,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,KAAK,EAChB,cAAc,EAAE,WAAW,CAAC,MAAM,EAClC,kBAAkB,EAAE,SAAS;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/components/brush/config.ts"],"sourcesContent":["import { D3BrushEvent } from 'd3-brush'\nimport { XYComponentConfigInterface, XYComponentDefaultConfig } from 'core/xy-component/config'\n\n// Types\nimport { Arrangement } from 'types/position'\n\n// We extend partial XY config interface because x and y properties are optional for Brush\nexport interface BrushConfigInterface<Datum> extends Partial<XYComponentConfigInterface<Datum>> {\n /** Callback function to be called on any Brush event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrush?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Callback function to be called on the Brush start event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrushStart?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Callback function to be called on the Brush move event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrushMove?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Callback function to be called on the Brush end event.\n * Default: `(selection: [number, number], event: D3BrushEvent<Datum>, userDriven: boolean): void => {}`\n */\n onBrushEnd?: ((selection: [number, number] | undefined, event: D3BrushEvent<Datum>, userDriven: boolean) => void);\n /** Width of the Brush handle. Default: `1` */\n handleWidth?: number;\n /** Brush selection in the data space coordinates, can be used to control the selection. Default: `undefined` */\n selection?: [number, number] | null;\n /** Allow dragging the selected area as a whole in order to change the selected range. Default: `false` */\n draggable?: boolean;\n /** Position of the handle: `Arrangement.Inside` or `Arrangement.Outside`. Default: `Arrangement.Inside` */\n handlePosition?: Arrangement.Inside | Arrangement.Outside | string;\n /** Constraint Brush selection to a minimal length in data units. Default: `undefined` */\n selectionMinLength?: number;\n /** Extend the brush height by the specified number of pixels. This can be convenient when you have thick lines\n * at the bottom of the chart and you want to ensure they stay fully covered by the brush. Default: `0` */\n brushHeightExtend?: number;\n}\n\nexport const BrushDefaultConfig: BrushConfigInterface<unknown> = {\n ...XYComponentDefaultConfig,\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrush: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrushStart: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrushMove: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function */\n onBrushEnd: <Datum>(s: [number, number] | undefined, e: D3BrushEvent<Datum>, userDriven: boolean): void => {},\n handleWidth: 9,\n selection: null,\n draggable: false,\n handlePosition: Arrangement.Inside,\n selectionMinLength: undefined,\n brushHeightExtend: 0,\n}\n"],"names":[],"mappings":";;;AAuCO,MAAM,kBAAkB,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAC1B,wBAAwB,CAAA,EAAA;;IAE3B,OAAO,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG;;IAE1G,YAAY,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG;;IAE/G,WAAW,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG;;AAE9G,IAAA,UAAU,EAAE,CAAQ,CAA+B,EAAE,CAAsB,EAAE,UAAmB,KAAU,GAAG,EAC7G,WAAW,EAAE,CAAC,EACd,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,KAAK,EAChB,cAAc,EAAE,WAAW,CAAC,MAAM,EAClC,kBAAkB,EAAE,SAAS,EAC7B,iBAAiB,EAAE,CAAC;;;;"}
@@ -21,6 +21,7 @@ export declare class Brush<Datum> extends XYComponentCore<Datum, BrushConfigInte
21
21
  constructor(config?: BrushConfigInterface<Datum>);
22
22
  _render(customDuration?: number): void;
23
23
  _updateSelection(s: [number, number]): void;
24
+ private _getBrushHeight;
24
25
  private _positionHandles;
25
26
  _onBrush(event: D3BrushEvent<Datum>): void;
26
27
  _onBrushStart(event: D3BrushEvent<Datum>): void;
@@ -42,15 +42,16 @@ class Brush extends XYComponentCore {
42
42
  const { brushBehaviour, config } = this;
43
43
  const duration = isNumber(customDuration) ? customDuration : config.duration;
44
44
  const xScale = this.xScale;
45
+ const height = this._getBrushHeight();
45
46
  brushBehaviour
46
- .extent([[0, 0], [this._width, this._height]])
47
+ .extent([[0, 0], [this._width, height]])
47
48
  .on('start', this._onBrushStart.bind(this))
48
49
  .on('brush', this._onBrushMove.bind(this))
49
50
  .on('end', this._onBrushEnd.bind(this));
50
51
  this.brush
51
52
  .call(brushBehaviour)
52
53
  .classed('non-draggable', !config.draggable);
53
- const yRange = [this._height, 0];
54
+ const yRange = [height, 0];
54
55
  const h = yRange[0] - yRange[1];
55
56
  this.g.selectAll('.handle')
56
57
  .attr('y', yRange[1])
@@ -89,12 +90,15 @@ class Brush extends XYComponentCore {
89
90
  });
90
91
  this._positionHandles(s);
91
92
  // D3 sets brush handle height to be too long, so we need to update it
92
- const yRange = [this._height, 0];
93
+ const yRange = [this._getBrushHeight(), 0];
93
94
  const h = yRange[0] - yRange[1];
94
95
  this.g.selectAll('.handle')
95
96
  .attr('y', yRange[1])
96
97
  .attr('height', h);
97
98
  }
99
+ _getBrushHeight() {
100
+ return this._height + this.config.brushHeightExtend;
101
+ }
98
102
  _positionHandles(s) {
99
103
  const { config } = this;
100
104
  this.brush.selectAll('.handle')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/brush/index.ts"],"sourcesContent":["import { BrushBehavior, brushX, D3BrushEvent } from 'd3-brush'\nimport { Selection } from 'd3-selection'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, clamp } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Arrangement } from 'types/position'\n\n// Config\nimport { BrushDefaultConfig, BrushConfigInterface } from './config'\n\n// Local Types\nimport { BrushDirection, BrushHandleType } from './types'\n\n// Styles\nimport * as s from './style'\n\nexport class Brush<Datum> extends XYComponentCore<Datum, BrushConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = BrushDefaultConfig as BrushConfigInterface<Datum>\n clippable = false // Don't apply clipping path to this component. See XYContainer\n public config: BrushConfigInterface<Datum> = this._defaultConfig\n brush: Selection<SVGGElement, unknown, SVGGElement, unknown>\n unselectedRange: Selection<SVGRectElement, BrushHandleType, SVGGElement, unknown>\n handleLines: Selection<SVGLineElement, BrushHandleType, SVGGElement, unknown>\n brushBehaviour: BrushBehavior<unknown> = brushX()\n events = {\n [Brush.selectors.brush]: {},\n }\n\n private _selection: [number, number] | null = null\n private _firstRender = true\n\n constructor (config?: BrushConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n const directions: BrushHandleType[] = [{ type: BrushDirection.West }, { type: BrushDirection.East }]\n this.unselectedRange = this.g\n .selectAll(`.${s.unselected}`)\n .data(directions)\n .enter().append('rect')\n .attr('class', s.unselected)\n\n this.brush = this.g\n .append('g')\n .attr('class', s.brush)\n\n this.handleLines = this.g\n .selectAll(`.${s.handleLine}`)\n .data(directions)\n .enter().append('line')\n .attr('class', s.handleLine)\n }\n\n _render (customDuration?: number): void {\n const { brushBehaviour, config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n const xScale = this.xScale\n\n brushBehaviour\n .extent([[0, 0], [this._width, this._height]])\n .on('start', this._onBrushStart.bind(this))\n .on('brush', this._onBrushMove.bind(this))\n .on('end', this._onBrushEnd.bind(this))\n\n this.brush\n .call(brushBehaviour)\n .classed('non-draggable', !config.draggable)\n\n const yRange = [this._height, 0]\n const h = yRange[0] - yRange[1]\n\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.unselectedRange\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.handleLines\n .attr('y1', yRange[1] + 10)\n .attr('y2', yRange[1] + h - 10)\n\n // We save the X scale range and set it to the available horizontal space to calculate the selection range in pixels correctly\n const xRange = [0, this._width]\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectionMin = clamp(xScale((config.selection || this._selection)?.[0]) ?? 0, xRange[0], xRange[1])\n const selectionMax = clamp(xScale((config.selection || this._selection)?.[1]) ?? 0, xRange[0], xRange[1])\n xScale.range(xScaleRange) // Restore the X scale range\n\n const selectionLength = selectionMax - selectionMin\n const brushRange = (selectionLength ? [selectionMin, selectionMax] : xRange) as [number, number]\n this._positionHandles(brushRange)\n\n smartTransition(this.brush, duration)\n .call(brushBehaviour.move, brushRange) // Sets up the brush and calls brush events\n .on('end interrupt', () => { this._firstRender = false })\n // We track the first render to not trigger user events on component initialization\n if (!duration) this._firstRender = false\n }\n\n _updateSelection (s: [number, number]): void {\n const xRange = [0, this._width]\n this.unselectedRange\n .attr('x', d => d.type === BrushDirection.West ? xRange[0] : s[1])\n .attr('width', d => {\n const length = d.type === BrushDirection.West ? s[0] - xRange[0] : xRange[1] - s[1]\n const lengthClamped = clamp(length, 0, xRange[1] - xRange[0])\n return lengthClamped\n })\n\n this._positionHandles(s)\n\n // D3 sets brush handle height to be too long, so we need to update it\n const yRange = [this._height, 0]\n const h = yRange[0] - yRange[1]\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n }\n\n private _positionHandles (s: [number, number]): void {\n const { config } = this\n\n this.brush.selectAll<SVGRectElement, BrushHandleType>('.handle')\n .attr('width', config.handleWidth)\n .attr('x', d => {\n if (!s) return 0\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n\n if (west) return s[0] + (inside ? 0 : -config.handleWidth)\n else return s[1] + (inside ? -config.handleWidth : 0)\n })\n\n this.handleLines\n .attr('transform', d => {\n if (!s) return null\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n return `translate(${west\n ? s[0] - (-1) ** Number(inside) * config.handleWidth / 2\n : s[1] + (-1) ** Number(inside) * config.handleWidth / 2},0)`\n })\n }\n\n _onBrush (event: D3BrushEvent<Datum>): void {\n const { config } = this\n const xScale = this.xScale\n const xRange = [0, this._width]\n const s = (event?.selection || xRange) as [number, number]\n const userDriven = !!event?.sourceEvent\n // Handle edge cases:\n // (event?.selection === null) happens when user clicks to reset the selection\n // (s?.[0] === s?.[1]) happens when user drags the selection out of range\n if (userDriven && (\n (event?.selection === null) || // happens when user clicks to reset the selection\n (s?.[0] === s?.[1]) || // happens when user drags the selection out of range\n (s?.[0] < xRange[0]) || //\n (s?.[0] > xRange[1]) || // happens when you drag the brush and the domain updates\n (s?.[1] < xRange[0]) || // to a smaller one and brush goes out of range\n (s?.[1] > xRange[1]) //\n )) {\n this.brush.call(this.brushBehaviour.move, xRange) // Will trigger the 'brush end' callback with `range`\n return\n }\n\n // When you reset selection by clicking on a non-selected brush area, D3 triggers the brush event twice.\n // The first call will have equal selection coordinates (e.g. [441, 441]), the second call will have the full range (e.g. [0, 700]).\n // To avoid unnecessary render from the first call we skip it\n if (s[0] !== s[1] && isNumber(s[0]) && isNumber(s[1])) {\n // We save the X scale range and set it to the available horizontal space to invert the selection correctly\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectedDomain = s.map(n => +xScale.invert(n)) as [number, number]\n\n if (userDriven) {\n // Constraint the selection if configured\n const xDomain = xScale.domain() as [number, number]\n const xDomainLength = Math.abs(xDomain[1] - xDomain[0])\n const selectionLength = Math.abs(selectedDomain[1] - selectedDomain[0])\n\n if (config.selectionMinLength >= xDomainLength) {\n console.warn('Unovis | Brush: Configured `selectionMinLength` is bigger than the brush domain')\n }\n\n if ((selectionLength < config.selectionMinLength) && (config.selectionMinLength < xDomainLength)) {\n const selection = config.selection ?? this._selection\n const range = [xScale(selection[0]), xScale(selection[1])] as [number, number]\n this.brush.call(this.brushBehaviour.move, range) // Will trigger the 'brush end' callback with `range`\n // Restore the X scale range\n xScale.range(xScaleRange)\n return\n } else {\n this._selection = selectedDomain\n // Restore the X scale range\n xScale.range(xScaleRange)\n }\n }\n\n this._updateSelection(s)\n if (!this._firstRender) config.onBrush(selectedDomain, event, userDriven)\n }\n }\n\n _onBrushStart (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushStart(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushMove (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushMove(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushEnd (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushEnd(this._selection, event, !!event?.sourceEvent)\n }\n}\n"],"names":["s.unselected","s.brush","s.handleLine","s"],"mappings":";;;;;;;;;;AAsBM,MAAO,KAAa,SAAQ,eAAmD,CAAA;AAgBnF,IAAA,WAAA,CAAa,MAAoC,EAAA;AAC/C,QAAA,KAAK,EAAE,CAAA;QAfC,IAAc,CAAA,cAAA,GAAG,kBAAiD,CAAA;AAC5E,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAA;AACV,QAAA,IAAA,CAAA,MAAM,GAAgC,IAAI,CAAC,cAAc,CAAA;QAIhE,IAAc,CAAA,cAAA,GAA2B,MAAM,EAAE,CAAA;AACjD,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;SAC5B,CAAA;QAEO,IAAU,CAAA,UAAA,GAA4B,IAAI,CAAA;QAC1C,IAAY,CAAA,YAAA,GAAG,IAAI,CAAA;AAIzB,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AAElC,QAAA,MAAM,UAAU,GAAsB,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;AACpG,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAC1B,aAAA,SAAS,CAAC,CAAI,CAAA,EAAAA,UAAY,EAAE,CAAC;aAC7B,IAAI,CAAC,UAAU,CAAC;AAChB,aAAA,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AACtB,aAAA,IAAI,CAAC,OAAO,EAAEA,UAAY,CAAC,CAAA;AAE9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;aAChB,MAAM,CAAC,GAAG,CAAC;AACX,aAAA,IAAI,CAAC,OAAO,EAAEC,KAAO,CAAC,CAAA;AAEzB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;AACtB,aAAA,SAAS,CAAC,CAAI,CAAA,EAAAC,UAAY,EAAE,CAAC;aAC7B,IAAI,CAAC,UAAU,CAAC;AAChB,aAAA,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AACtB,aAAA,IAAI,CAAC,OAAO,EAAEA,UAAY,CAAC,CAAA;KAC/B;AAED,IAAA,OAAO,CAAE,cAAuB,EAAA;;AAC9B,QAAA,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvC,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAA;AAC5E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAE1B,cAAc;AACX,aAAA,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aAC7C,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC1C,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,aAAA,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAEzC,QAAA,IAAI,CAAC,KAAK;aACP,IAAI,CAAC,cAAc,CAAC;aACpB,OAAO,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAE9C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE/B,QAAA,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;AACxB,aAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;AAEpB,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;AAEpB,QAAA,IAAI,CAAC,WAAW;aACb,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC1B,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;;QAGjC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAC/B,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;AAClC,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AACpB,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAA,MAAM,CAAC,CAAA,EAAA,IAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACzG,QAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAA,MAAM,CAAC,CAAA,EAAA,IAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACzG,QAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AAEzB,QAAA,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,CAAA;AACnD,QAAA,MAAM,UAAU,IAAI,eAAe,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,GAAG,MAAM,CAAqB,CAAA;AAChG,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;AAEjC,QAAA,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;aAClC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC;AACrC,aAAA,EAAE,CAAC,eAAe,EAAE,MAAQ,EAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA,EAAE,CAAC,CAAA;;AAE3D,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;KACzC;AAED,IAAA,gBAAgB,CAAE,CAAmB,EAAA;QACnC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAC/B,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACjE,aAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAG;AACjB,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACnF,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAC7D,YAAA,OAAO,aAAa,CAAA;AACtB,SAAC,CAAC,CAAA;AAEJ,QAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;;QAGxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAChC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAC/B,QAAA,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;AACxB,aAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;KACrB;AAEO,IAAA,gBAAgB,CAAE,CAAmB,EAAA;AAC3C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEvB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAkC,SAAS,CAAC;AAC7D,aAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC;AACjC,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAG;AACb,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAA;YAChB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAA;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,KAAK,WAAW,CAAC,MAAM,CAAA;AAE3D,YAAA,IAAI,IAAI;AAAE,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;;AACrD,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAA;AACvD,SAAC,CAAC,CAAA;AAEJ,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAG;AACrB,YAAA,IAAI,CAAC,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAA;YACnB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAA;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,KAAK,WAAW,CAAC,MAAM,CAAA;AAC3D,YAAA,OAAO,aAAa,IAAI;kBACpB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,CAAA,GAAA,EAAC,CAAC,CAAC,GAAK,MAAM,CAAC,MAAM,CAAC,CAAA,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC;kBACtD,CAAC,CAAC,CAAC,CAAC,GAAG,IAAA,CAAA,GAAA,EAAC,CAAC,CAAC,GAAK,MAAM,CAAC,MAAM,CAAC,CAAA,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAA,GAAA,CAAK,CAAA;AACjE,SAAC,CAAC,CAAA;KACL;AAED,IAAA,QAAQ,CAAE,KAA0B,EAAA;;AAClC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAC/B,QAAA,MAAM,CAAC,IAAI,CAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,SAAS,KAAI,MAAM,CAAqB,CAAA;AAC1D,QAAA,MAAM,UAAU,GAAG,CAAC,EAAC,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,WAAW,CAAA,CAAA;;;;AAIvC,QAAA,IAAI,UAAU,KACZ,CAAC,CAAA,KAAK,KAAL,IAAA,IAAA,KAAK,KAAL,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAK,CAAE,SAAS,MAAK,IAAI;aACzB,CAAA,CAAC,KAAD,IAAA,IAAA,CAAC,uBAAD,CAAC,CAAG,CAAC,CAAC,OAAK,CAAC,KAAD,IAAA,IAAA,CAAC,uBAAD,CAAC,CAAG,CAAC,CAAC,CAAA,CAAC;AACnB,aAAC,CAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAG,CAAC,CAAC,IAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,aAAC,CAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAG,CAAC,CAAC,IAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,aAAC,CAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAG,CAAC,CAAC,IAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,aAAC,CAAA,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAG,CAAC,CAAC,IAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SACrB,EAAE;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;YACjD,OAAM;AACP,SAAA;;;;QAKD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;;AAErD,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;AAClC,YAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AACpB,YAAA,MAAM,cAAc,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAqB,CAAA;AAExE,YAAA,IAAI,UAAU,EAAE;;AAEd,gBAAA,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAsB,CAAA;AACnD,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACvD,gBAAA,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;AAEvE,gBAAA,IAAI,MAAM,CAAC,kBAAkB,IAAI,aAAa,EAAE;AAC9C,oBAAA,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;AAChG,iBAAA;AAED,gBAAA,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,kBAAkB,MAAM,MAAM,CAAC,kBAAkB,GAAG,aAAa,CAAC,EAAE;oBAChG,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,SAAS,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,UAAU,CAAA;AACrD,oBAAA,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAqB,CAAA;AAC9E,oBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;;AAEhD,oBAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;oBACzB,OAAM;AACP,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,UAAU,GAAG,cAAc,CAAA;;AAEhC,oBAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;AAC1B,iBAAA;AACF,aAAA;AAED,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;YACxB,IAAI,CAAC,IAAI,CAAC,YAAY;gBAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;AAC1E,SAAA;KACF;AAED,IAAA,aAAa,CAAE,KAA0B,EAAA;AACvC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEvB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,WAAW,CAAA,CAAC,CAAA;KAC1F;AAED,IAAA,YAAY,CAAE,KAA0B,EAAA;AACtC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEvB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,WAAW,CAAA,CAAC,CAAA;KACzF;AAED,IAAA,WAAW,CAAE,KAA0B,EAAA;AACrC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEvB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACpB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,WAAW,CAAA,CAAC,CAAA;KACxF;;AAjNM,KAAS,CAAA,SAAA,GAAGC,KAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/brush/index.ts"],"sourcesContent":["import { BrushBehavior, brushX, D3BrushEvent } from 'd3-brush'\nimport { Selection } from 'd3-selection'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, clamp } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Arrangement } from 'types/position'\n\n// Config\nimport { BrushDefaultConfig, BrushConfigInterface } from './config'\n\n// Local Types\nimport { BrushDirection, BrushHandleType } from './types'\n\n// Styles\nimport * as s from './style'\n\nexport class Brush<Datum> extends XYComponentCore<Datum, BrushConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = BrushDefaultConfig as BrushConfigInterface<Datum>\n public clippable = false // Don't apply clipping path to this component. See XYContainer\n public config: BrushConfigInterface<Datum> = this._defaultConfig\n public brush: Selection<SVGGElement, unknown, SVGGElement, unknown>\n public unselectedRange: Selection<SVGRectElement, BrushHandleType, SVGGElement, unknown>\n public handleLines: Selection<SVGLineElement, BrushHandleType, SVGGElement, unknown>\n public brushBehaviour: BrushBehavior<unknown> = brushX()\n public events = {\n [Brush.selectors.brush]: {},\n }\n\n private _selection: [number, number] | null = null\n private _firstRender = true\n\n constructor (config?: BrushConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n const directions: BrushHandleType[] = [{ type: BrushDirection.West }, { type: BrushDirection.East }]\n this.unselectedRange = this.g\n .selectAll(`.${s.unselected}`)\n .data(directions)\n .enter().append('rect')\n .attr('class', s.unselected)\n\n this.brush = this.g\n .append('g')\n .attr('class', s.brush)\n\n this.handleLines = this.g\n .selectAll(`.${s.handleLine}`)\n .data(directions)\n .enter().append('line')\n .attr('class', s.handleLine)\n }\n\n _render (customDuration?: number): void {\n const { brushBehaviour, config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n const xScale = this.xScale\n const height = this._getBrushHeight()\n\n brushBehaviour\n .extent([[0, 0], [this._width, height]])\n .on('start', this._onBrushStart.bind(this))\n .on('brush', this._onBrushMove.bind(this))\n .on('end', this._onBrushEnd.bind(this))\n\n this.brush\n .call(brushBehaviour)\n .classed('non-draggable', !config.draggable)\n\n const yRange = [height, 0]\n const h = yRange[0] - yRange[1]\n\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.unselectedRange\n .attr('y', yRange[1])\n .attr('height', h)\n\n this.handleLines\n .attr('y1', yRange[1] + 10)\n .attr('y2', yRange[1] + h - 10)\n\n // We save the X scale range and set it to the available horizontal space to calculate the selection range in pixels correctly\n const xRange = [0, this._width]\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectionMin = clamp(xScale((config.selection || this._selection)?.[0]) ?? 0, xRange[0], xRange[1])\n const selectionMax = clamp(xScale((config.selection || this._selection)?.[1]) ?? 0, xRange[0], xRange[1])\n xScale.range(xScaleRange) // Restore the X scale range\n\n const selectionLength = selectionMax - selectionMin\n const brushRange = (selectionLength ? [selectionMin, selectionMax] : xRange) as [number, number]\n this._positionHandles(brushRange)\n\n smartTransition(this.brush, duration)\n .call(brushBehaviour.move, brushRange) // Sets up the brush and calls brush events\n .on('end interrupt', () => { this._firstRender = false })\n // We track the first render to not trigger user events on component initialization\n if (!duration) this._firstRender = false\n }\n\n _updateSelection (s: [number, number]): void {\n const xRange = [0, this._width]\n this.unselectedRange\n .attr('x', d => d.type === BrushDirection.West ? xRange[0] : s[1])\n .attr('width', d => {\n const length = d.type === BrushDirection.West ? s[0] - xRange[0] : xRange[1] - s[1]\n const lengthClamped = clamp(length, 0, xRange[1] - xRange[0])\n return lengthClamped\n })\n\n this._positionHandles(s)\n\n // D3 sets brush handle height to be too long, so we need to update it\n const yRange = [this._getBrushHeight(), 0]\n const h = yRange[0] - yRange[1]\n this.g.selectAll('.handle')\n .attr('y', yRange[1])\n .attr('height', h)\n }\n\n private _getBrushHeight (): number {\n return this._height + this.config.brushHeightExtend\n }\n\n private _positionHandles (s: [number, number]): void {\n const { config } = this\n\n this.brush.selectAll<SVGRectElement, BrushHandleType>('.handle')\n .attr('width', config.handleWidth)\n .attr('x', d => {\n if (!s) return 0\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n\n if (west) return s[0] + (inside ? 0 : -config.handleWidth)\n else return s[1] + (inside ? -config.handleWidth : 0)\n })\n\n this.handleLines\n .attr('transform', d => {\n if (!s) return null\n const west = d.type === BrushDirection.West\n const inside = config.handlePosition === Arrangement.Inside\n return `translate(${west\n ? s[0] - (-1) ** Number(inside) * config.handleWidth / 2\n : s[1] + (-1) ** Number(inside) * config.handleWidth / 2},0)`\n })\n }\n\n _onBrush (event: D3BrushEvent<Datum>): void {\n const { config } = this\n const xScale = this.xScale\n const xRange = [0, this._width]\n const s = (event?.selection || xRange) as [number, number]\n const userDriven = !!event?.sourceEvent\n // Handle edge cases:\n // (event?.selection === null) happens when user clicks to reset the selection\n // (s?.[0] === s?.[1]) happens when user drags the selection out of range\n if (userDriven && (\n (event?.selection === null) || // happens when user clicks to reset the selection\n (s?.[0] === s?.[1]) || // happens when user drags the selection out of range\n (s?.[0] < xRange[0]) || //\n (s?.[0] > xRange[1]) || // happens when you drag the brush and the domain updates\n (s?.[1] < xRange[0]) || // to a smaller one and brush goes out of range\n (s?.[1] > xRange[1]) //\n )) {\n this.brush.call(this.brushBehaviour.move, xRange) // Will trigger the 'brush end' callback with `range`\n return\n }\n\n // When you reset selection by clicking on a non-selected brush area, D3 triggers the brush event twice.\n // The first call will have equal selection coordinates (e.g. [441, 441]), the second call will have the full range (e.g. [0, 700]).\n // To avoid unnecessary render from the first call we skip it\n if (s[0] !== s[1] && isNumber(s[0]) && isNumber(s[1])) {\n // We save the X scale range and set it to the available horizontal space to invert the selection correctly\n const xScaleRange = xScale.range()\n xScale.range(xRange)\n const selectedDomain = s.map(n => +xScale.invert(n)) as [number, number]\n\n if (userDriven) {\n // Constraint the selection if configured\n const xDomain = xScale.domain() as [number, number]\n const xDomainLength = Math.abs(xDomain[1] - xDomain[0])\n const selectionLength = Math.abs(selectedDomain[1] - selectedDomain[0])\n\n if (config.selectionMinLength >= xDomainLength) {\n console.warn('Unovis | Brush: Configured `selectionMinLength` is bigger than the brush domain')\n }\n\n if ((selectionLength < config.selectionMinLength) && (config.selectionMinLength < xDomainLength)) {\n const selection = config.selection ?? this._selection\n const range = [xScale(selection[0]), xScale(selection[1])] as [number, number]\n this.brush.call(this.brushBehaviour.move, range) // Will trigger the 'brush end' callback with `range`\n // Restore the X scale range\n xScale.range(xScaleRange)\n return\n } else {\n this._selection = selectedDomain\n // Restore the X scale range\n xScale.range(xScaleRange)\n }\n }\n\n this._updateSelection(s)\n if (!this._firstRender) config.onBrush(selectedDomain, event, userDriven)\n }\n }\n\n _onBrushStart (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushStart(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushMove (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushMove(this._selection, event, !!event?.sourceEvent)\n }\n\n _onBrushEnd (event: D3BrushEvent<Datum>): void {\n const { config } = this\n\n this._onBrush(event)\n if (!this._firstRender) config.onBrushEnd(this._selection, event, !!event?.sourceEvent)\n }\n}\n"],"names":["s.unselected","s.brush","s.handleLine","s"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { css, injectGlobal } from '@emotion/css';
2
+ import { darkThemeCssSelectors } from '../../utils/theme.js';
2
3
 
3
4
  const root = css `
4
5
  label: bullet-legend-component;
@@ -20,7 +21,7 @@ const variables = injectGlobal `
20
21
  --vis-dark-legend-label-color: #eee;
21
22
  }
22
23
 
23
- body.theme-dark ${`.${root}`} {
24
+ ${darkThemeCssSelectors} ${`.${root}`} {
24
25
  --vis-legend-label-color: var(--vis-dark-legend-label-color);
25
26
  }
26
27