@unovis/ts 1.5.1-ql.2 → 1.5.1-xplg.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/area/index.js +1 -1
- package/components/area/index.js.map +1 -1
- package/components/axis/config.d.ts +1 -1
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +0 -1
- package/components/axis/index.js +2 -10
- package/components/axis/index.js.map +1 -1
- package/components/brush/config.d.ts +1 -1
- package/components/brush/config.js.map +1 -1
- package/components/donut/config.d.ts +4 -0
- package/components/donut/config.js +1 -1
- package/components/donut/config.js.map +1 -1
- package/components/donut/constants.d.ts +2 -0
- package/components/donut/constants.js +8 -0
- package/components/donut/constants.js.map +1 -0
- package/components/donut/index.js +35 -5
- package/components/donut/index.js.map +1 -1
- package/components/graph/config.d.ts +28 -4
- package/components/graph/config.js +5 -2
- package/components/graph/config.js.map +1 -1
- package/components/graph/index.d.ts +12 -9
- package/components/graph/index.js +48 -25
- package/components/graph/index.js.map +1 -1
- package/components/graph/modules/layout-helpers.js +1 -1
- package/components/graph/modules/layout-helpers.js.map +1 -1
- package/components/graph/modules/layout.js +1 -1
- package/components/graph/modules/layout.js.map +1 -1
- package/components/graph/modules/link/index.d.ts +3 -2
- package/components/graph/modules/link/index.js +53 -28
- package/components/graph/modules/link/index.js.map +1 -1
- package/components/graph/modules/link/style.js +4 -3
- package/components/graph/modules/link/style.js.map +1 -1
- package/components/graph/modules/node/index.d.ts +2 -0
- package/components/graph/modules/node/index.js +7 -4
- package/components/graph/modules/node/index.js.map +1 -1
- package/components/graph/modules/panel/index.js +2 -2
- package/components/graph/modules/panel/index.js.map +1 -1
- package/components/graph/types.d.ts +5 -0
- package/components/graph/types.js.map +1 -1
- package/components/nested-donut/config.d.ts +1 -1
- package/components/nested-donut/config.js.map +1 -1
- package/components/stacked-bar/index.js +7 -5
- package/components/stacked-bar/index.js.map +1 -1
- package/components/stacked-bar/types.d.ts +1 -1
- package/components/timeline/config.d.ts +65 -14
- package/components/timeline/config.js +15 -1
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/constants.d.ts +3 -0
- package/components/timeline/constants.js +6 -0
- package/components/timeline/constants.js.map +1 -0
- package/components/timeline/index.d.ts +21 -10
- package/components/timeline/index.js +375 -93
- package/components/timeline/index.js.map +1 -1
- package/components/timeline/style.d.ts +7 -0
- package/components/timeline/style.js +40 -1
- package/components/timeline/style.js.map +1 -1
- package/components/timeline/types.d.ts +62 -0
- package/components/timeline/types.js +2 -0
- package/components/timeline/types.js.map +1 -0
- package/components/timeline/utils.d.ts +2 -0
- package/components/timeline/utils.js +16 -0
- package/components/timeline/utils.js.map +1 -0
- package/components/treemap/config.d.ts +44 -0
- package/components/treemap/config.js +6 -0
- package/components/treemap/config.js.map +1 -0
- package/components/treemap/index.d.ts +16 -0
- package/components/treemap/index.js +263 -0
- package/components/treemap/index.js.map +1 -0
- package/components/treemap/style.d.ts +22 -0
- package/components/treemap/style.js +62 -0
- package/components/treemap/style.js.map +1 -0
- package/components/treemap/types.d.ts +11 -0
- package/components/treemap/types.js +2 -0
- package/components/treemap/types.js.map +1 -0
- package/components.d.ts +3 -0
- package/components.js +2 -0
- package/components.js.map +1 -1
- package/containers/single-container/config.d.ts +3 -0
- package/containers/single-container/config.js.map +1 -1
- package/containers/single-container/index.js +2 -1
- package/containers/single-container/index.js.map +1 -1
- package/containers/xy-container/config.d.ts +5 -0
- package/containers/xy-container/config.js +1 -1
- package/containers/xy-container/config.js.map +1 -1
- package/containers/xy-container/index.d.ts +1 -0
- package/containers/xy-container/index.js +15 -11
- package/containers/xy-container/index.js.map +1 -1
- package/data-models/graph.d.ts +3 -2
- package/data-models/graph.js +15 -6
- package/data-models/graph.js.map +1 -1
- package/data-models/index.d.ts +4 -0
- package/data-models/index.js +5 -0
- package/data-models/index.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +10 -3
- package/index.js.map +1 -1
- package/package.json +4 -5
- package/types/data.d.ts +1 -2
- package/types/graph.d.ts +4 -0
- package/types/position.d.ts +2 -1
- package/types/position.js +1 -0
- package/types/position.js.map +1 -1
- package/types.d.ts +2 -0
- package/types.js +2 -0
- package/types.js.map +1 -1
- package/utils/color.d.ts +14 -0
- package/utils/color.js +26 -2
- package/utils/color.js.map +1 -1
- package/utils/data.d.ts +2 -2
- package/utils/data.js +10 -17
- package/utils/data.js.map +1 -1
- package/utils/index.js +3 -3
- package/utils/path.d.ts +8 -0
- package/utils/path.js +109 -1
- package/utils/path.js.map +1 -1
- package/utils/text.d.ts +10 -9
- package/utils/text.js +26 -10
- package/utils/text.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/timeline/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { scaleOrdinal, ScaleOrdinal } from 'd3-scale'\nimport { drag, D3DragEvent } from 'd3-drag'\nimport { max } from 'd3-array'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, unique, arrayOfIndices, getMin, getMax, getString, getNumber } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\nimport { trimSVGText } from 'utils/text'\n\n// Config\nimport { TimelineDefaultConfig, TimelineConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class Timeline<Datum> extends XYComponentCore<Datum, TimelineConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = TimelineDefaultConfig as TimelineConfigInterface<Datum>\n public config: TimelineConfigInterface<Datum> = this._defaultConfig\n\n events = {\n [Timeline.selectors.rows]: {\n wheel: this._onMouseWheel.bind(this),\n },\n [Timeline.selectors.line]: {\n wheel: this._onMouseWheel.bind(this),\n },\n }\n\n private _background: Selection<SVGRectElement, unknown, SVGGElement, unknown>\n private _rowsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _linesGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _labelsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _scrollBarGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _scrollBarBackground: Selection<SVGRectElement, unknown, SVGGElement, unknown>\n private _scrollBarHandle: Selection<SVGRectElement, unknown, SVGGElement, unknown>\n private _scrollBarWidth = 5\n private _scrollDistance = 0\n private _scrollBarMargin = 5\n private _maxScroll = 0\n private _scrollbarHeight = 0\n private _labelMargin = 5\n\n constructor (config?: TimelineConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n // Invisible background rect to track events\n this._background = this.g.append('rect').attr('class', s.background)\n\n // Group for content\n this._rowsGroup = this.g.append('g').attr('class', s.rows)\n this._linesGroup = this.g.append('g').attr('class', s.lines)\n this._labelsGroup = this.g.append('g').attr('class', s.labels)\n this._scrollBarGroup = this.g.append('g').attr('class', s.scrollbar)\n\n // Scroll bar\n this._scrollBarBackground = this._scrollBarGroup.append('rect')\n .attr('class', s.scrollbarBackground)\n\n this._scrollBarHandle = this._scrollBarGroup.append('rect')\n .attr('class', s.scrollbarHandle)\n\n // Set up scrollbar drag event\n const dragBehaviour = drag<SVGRectElement, unknown>()\n .on('drag', this._onScrollbarDrag.bind(this))\n\n this._scrollBarHandle.call(dragBehaviour)\n }\n\n get bleed (): { top: number; bottom: number; left: number; right: number } {\n const { config, datamodel: { data } } = this\n\n // We calculate the longest label width to set the bleed values accordingly\n let labelsBleed = 0\n if (config.showLabels) {\n if (config.labelWidth) labelsBleed = config.labelWidth + this._labelMargin\n else {\n const recordLabels = this._getRecordLabels(data)\n const longestLabel = recordLabels.reduce((acc, val) => acc.length > val.length ? acc : val, '')\n const label = this._labelsGroup.append('text')\n .attr('class', s.label)\n .text(longestLabel)\n .call(trimSVGText, config.maxLabelWidth)\n const labelWidth = label.node().getBBox().width\n this._labelsGroup.empty()\n\n const tolerance = 1.15 // Some characters are wider than others so we add a little of extra space to take that into account\n labelsBleed = labelWidth ? tolerance * labelWidth + this._labelMargin : 0\n }\n }\n\n const maxLineWidth = this._getMaxLineWidth()\n return {\n top: 0,\n bottom: 0,\n left: maxLineWidth / 2 + labelsBleed,\n right: maxLineWidth / 2 + this._scrollBarWidth + this._scrollBarMargin,\n }\n }\n\n _render (customDuration?: number): void {\n super._render(customDuration)\n const { config, datamodel: { data } } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n const xRange = this.xScale.range()\n const yRange = this.yScale.range()\n const yStart = Math.min(...yRange)\n const yHeight = Math.abs(yRange[1] - yRange[0])\n const maxLineWidth = this._getMaxLineWidth()\n const recordLabels = this._getRecordLabels(data)\n const recordLabelsUnique = unique(recordLabels)\n const numUniqueRecords = recordLabelsUnique.length\n\n // Ordinal scale to handle records on the same type\n const ordinalScale: ScaleOrdinal<string, number> = scaleOrdinal()\n ordinalScale.range(arrayOfIndices(numUniqueRecords))\n\n // Invisible Background rect to track events\n this._background\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('opacity', 0)\n\n // Labels\n const labels = this._labelsGroup.selectAll<SVGTextElement, string>(`.${s.label}`)\n .data(config.showLabels ? recordLabelsUnique : [])\n\n const labelsEnter = labels.enter().append('text')\n .attr('class', s.label)\n\n labelsEnter.merge(labels)\n .attr('x', xRange[0] - maxLineWidth / 2 - this._labelMargin)\n .attr('y', (label, i) => yStart + (ordinalScale(label) + 0.5) * config.rowHeight)\n .text(label => label)\n .each((label, i, els) => {\n trimSVGText(select(els[i]), config.labelWidth || config.maxLabelWidth)\n })\n\n labels.exit().remove()\n\n // Row background rects\n const xStart = xRange[0]\n const numRows = Math.max(Math.floor(yHeight / config.rowHeight), numUniqueRecords)\n const recordTypes: (string | undefined)[] = Array(numRows).fill(null).map((_, i) => recordLabelsUnique[i])\n const rects = this._rowsGroup.selectAll<SVGRectElement, number>(`.${s.row}`)\n .data(recordTypes)\n\n const rectsEnter = rects.enter().append('rect')\n .attr('class', s.row)\n\n rectsEnter.merge(rects)\n .classed(s.rowOdd, config.alternatingRowColors ? (_, i) => !(i % 2) : null)\n .attr('x', xStart - maxLineWidth / 2)\n .attr('width', xRange[1] - xStart + maxLineWidth)\n .attr('y', (_, i) => yStart + i * config.rowHeight)\n .attr('height', config.rowHeight)\n\n rects.exit().remove()\n\n // Lines\n const lines = this._linesGroup.selectAll<SVGRectElement, Datum>(`.${s.line}`)\n .data(data, (d: Datum, i) => getString(d, config.id, i) ?? [\n this._getRecordType(d, i), getNumber(d, config.x, i),\n ].join('-'))\n\n const linesEnter = lines.enter().append('rect')\n .attr('class', s.line)\n .classed(s.rowOdd, config.alternatingRowColors\n ? (d, i) => !(recordLabelsUnique.indexOf(this._getRecordType(d, i)) % 2)\n : null)\n .style('fill', (d, i) => getColor(d, config.color, ordinalScale(this._getRecordType(d, i))))\n .call(this._positionLines.bind(this), ordinalScale)\n .attr('transform', 'translate(0, 10)')\n .style('opacity', 0)\n\n const linesMerged = linesEnter.merge(lines)\n .style('fill', (d, i) => getColor(d, config.color, ordinalScale(this._getRecordType(d, i))))\n .style('cursor', (d, i) => getString(d, config.cursor, i))\n .call(this._positionLines.bind(this), ordinalScale)\n\n smartTransition(linesMerged, duration)\n .attr('transform', 'translate(0, 0)')\n .style('opacity', 1)\n\n smartTransition(lines.exit(), duration)\n .style('opacity', 0)\n .remove()\n\n // Scroll Bar\n const contentBBox = this._rowsGroup.node().getBBox() // We determine content size using the rects group because lines are animated\n const absoluteContentHeight = contentBBox.height\n this._scrollbarHeight = yHeight * yHeight / absoluteContentHeight || 0\n this._maxScroll = Math.max(absoluteContentHeight - yHeight, 0)\n\n this._scrollBarGroup\n .attr('transform', `translate(${this._width - this._scrollBarWidth}, ${yStart})`)\n .attr('opacity', this._maxScroll ? 1 : 0)\n\n this._scrollBarBackground\n .attr('width', this._scrollBarWidth)\n .attr('height', this._height)\n .attr('rx', this._scrollBarWidth / 2)\n .attr('ry', this._scrollBarWidth / 2)\n\n this._scrollBarHandle\n .attr('width', this._scrollBarWidth)\n .attr('height', this._scrollbarHeight)\n .attr('rx', this._scrollBarWidth / 2)\n .attr('ry', this._scrollBarWidth / 2)\n\n this._updateScrollPosition(0)\n }\n\n private _positionLines (\n selection: Selection<SVGRectElement, Datum, SVGGElement, unknown> | Transition<SVGRectElement, Datum, SVGGElement, unknown>,\n ordinalScale: ScaleOrdinal<string, number>\n ): void {\n const { config, xScale, yScale } = this\n const yRange = yScale.range()\n const yStart = Math.min(...yRange)\n\n selection.each((d, i, elements) => {\n const x = getNumber(d, config.x, i)\n const y = ordinalScale(this._getRecordType(d, i)) * config.rowHeight\n const length = getNumber(d, config.length, i) ?? 0\n\n // Rect dimensions\n const height = getNumber(d, config.lineWidth, i)\n const width = xScale(x + length) - xScale(x)\n\n if (width < 0) {\n console.warn('Unovis | Timeline: Line segments should not have negative lengths. Setting to 0.')\n }\n\n select(elements[i])\n .attr('x', xScale(x))\n .attr('y', yStart + y + (config.rowHeight - height) / 2)\n .attr('width', config.showEmptySegments\n ? Math.max(config.lineCap ? height : 1, width)\n : Math.max(0, width))\n .attr('height', height)\n .attr('rx', config.lineCap ? height / 2 : null)\n })\n }\n\n private _onScrollbarDrag (event: D3DragEvent<any, any, any>): void {\n const yRange = this.yScale.range()\n const yHeight = Math.abs(yRange[1] - yRange[0])\n this._updateScrollPosition(event.dy * this._maxScroll / (yHeight - this._scrollbarHeight))\n }\n\n private _onMouseWheel (d: unknown, event: WheelEvent): void {\n const { config } = this\n\n this._updateScrollPosition(event?.deltaY)\n if (this._scrollDistance > 0 && this._scrollDistance < this._maxScroll) event?.preventDefault()\n\n config.onScroll?.(this._scrollDistance)\n\n // Programmatically trigger a mousemove event to update Tooltip or Crosshair if they were set up\n const e = new Event('mousemove')\n this.element.dispatchEvent(e)\n }\n\n private _updateScrollPosition (diff: number): void {\n const yRange = this.yScale.range()\n const yHeight = Math.abs(yRange[1] - yRange[0])\n\n this._scrollDistance += diff\n this._scrollDistance = Math.max(0, this._scrollDistance)\n this._scrollDistance = Math.min(this._maxScroll, this._scrollDistance)\n\n this._linesGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n this._rowsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n this._labelsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n const scrollBarPosition = (this._scrollDistance / this._maxScroll * (yHeight - this._scrollbarHeight)) || 0\n this._scrollBarHandle.attr('y', scrollBarPosition)\n }\n\n private _getMaxLineWidth (): number {\n const { config, datamodel: { data } } = this\n return max(data, (d, i) => getNumber(d, config.lineWidth, i)) ?? 0\n }\n\n private _getRecordType (d: Datum, i: number): string {\n return getString(d, this.config.type) || `__${i}`\n }\n\n private _getRecordLabels (data: Datum[]): string[] {\n return data.map((d, i) => getString(d, this.config.type) || `${i + 1}`)\n }\n\n // Override the default XYComponent getXDataExtent method to take into account line lengths\n getXDataExtent (): number[] {\n const { config, datamodel } = this\n const min = getMin(datamodel.data, config.x)\n const max = getMax(datamodel.data, (d, i) => getNumber(d, config.x, i) + (getNumber(d, config.length, i) ?? 0))\n return [min, max]\n }\n}\n"],"names":["s.background","s.rows","s.lines","s.labels","s.scrollbar","s.scrollbarBackground","s.scrollbarHandle","label","s.label","s.row","s.rowOdd","s.line","s"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/timeline/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { max, min, minIndex } from 'd3-array'\nimport { scaleOrdinal, ScaleOrdinal } from 'd3-scale'\nimport { drag, D3DragEvent } from 'd3-drag'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, arrayOfIndices, getMin, getMax, getString, getNumber, getValue, groupBy, isPlainObject, isFunction } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\nimport { textAlignToAnchor, trimSVGText } from 'utils/text'\nimport { arrowPolylinePath } from 'utils/path'\nimport { guid } from 'utils/misc'\n\n// Types\nimport { TextAlign, Spacing, Arrangement } from 'types'\n\n// Config\nimport { TimelineDefaultConfig, TimelineConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\n// Local Types\nimport type { TimelineArrow, TimelineArrowRenderState, TimelineLineRenderState, TimelineRowLabel } from './types'\n\n// Constants\nimport { TIMELINE_DEFAULT_ARROW_HEAD_LENGTH, TIMELINE_DEFAULT_ARROW_HEAD_WIDTH, TIMELINE_DEFAULT_ARROW_MARGIN } from './constants'\n\n// Utils\nimport { getIconBleed } from './utils'\n\nexport class Timeline<Datum> extends XYComponentCore<Datum, TimelineConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = TimelineDefaultConfig as TimelineConfigInterface<Datum>\n public config: TimelineConfigInterface<Datum> = this._defaultConfig\n\n events = {\n [Timeline.selectors.background]: {\n wheel: this._onMouseWheel.bind(this),\n },\n [Timeline.selectors.label]: {\n wheel: this._onMouseWheel.bind(this),\n },\n [Timeline.selectors.rows]: {\n wheel: this._onMouseWheel.bind(this),\n },\n [Timeline.selectors.line]: {\n wheel: this._onMouseWheel.bind(this),\n },\n }\n\n private _background: Selection<SVGRectElement, unknown, SVGGElement, unknown>\n private _rowsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _arrowsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _linesGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _labelsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _rowIconsGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _scrollBarGroup: Selection<SVGGElement, unknown, SVGGElement, unknown>\n private _scrollBarBackground: Selection<SVGRectElement, unknown, SVGGElement, unknown>\n private _scrollBarHandle: Selection<SVGRectElement, unknown, SVGGElement, unknown>\n private _scrollBarWidth = 5\n private _scrollDistance = 0\n private _scrollBarMargin = 5\n private _maxScroll = 0\n private _scrollbarHeight = 0\n private _labelMargin = 5\n private _labelWidth = 0 // Will be overridden in `get bleed ()`\n private _rowIconBleed: [number, number] = [0, 0]\n private _lineBleed: [number, number] = [0, 0]\n\n /** We define a dedicated clipping path for this component because it needs to behave\n * differently than the regular XYContainer's clipPath */\n private _clipPathId = guid()\n private _clipPath: Selection<SVGClipPathElement, unknown, null, undefined>\n\n constructor (config?: TimelineConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n\n // Invisible background rect to track events\n this._background = this.g.append('rect').attr('class', s.background)\n\n // Clip path\n this._clipPath = this.g.append('clipPath')\n .attr('id', this._clipPathId)\n this._clipPath.append('rect')\n\n // Group for content\n this._rowsGroup = this.g.append('g').attr('class', s.rows)\n .style('clip-path', `url(#${this._clipPathId})`)\n this._arrowsGroup = this.g.append('g').attr('class', s.arrows)\n .style('clip-path', `url(#${this._clipPathId})`)\n this._linesGroup = this.g.append('g').attr('class', s.lines)\n .style('clip-path', `url(#${this._clipPathId})`)\n this._labelsGroup = this.g.append('g').attr('class', s.labels)\n this._rowIconsGroup = this.g.append('g').attr('class', s.rowIcons)\n this._scrollBarGroup = this.g.append('g').attr('class', s.scrollbar)\n\n // Scroll bar\n this._scrollBarBackground = this._scrollBarGroup.append('rect')\n .attr('class', s.scrollbarBackground)\n\n this._scrollBarHandle = this._scrollBarGroup.append('rect')\n .attr('class', s.scrollbarHandle)\n\n // Set up scrollbar drag event\n const dragBehaviour = drag<SVGRectElement, unknown>()\n .on('drag', this._onScrollbarDrag.bind(this))\n\n this._scrollBarHandle.call(dragBehaviour)\n }\n\n public setConfig (config: TimelineConfigInterface<Datum>): void {\n super.setConfig(config)\n }\n\n public setData (data: Datum[]): void {\n super.setData(data)\n }\n\n get bleed (): Spacing {\n const { config, datamodel: { data } } = this\n const rowLabels = this._getRowLabels(data)\n const rowHeight = config.rowHeight || (this._height / rowLabels.length)\n const hasIcons = rowLabels.some(l => l.iconHref)\n const maxIconSize = max(rowLabels.map(l => l.iconSize || 0))\n\n // We calculate the longest label width to set the bleed values accordingly\n if (config.showRowLabels ?? config.showLabels) {\n if (config.rowLabelWidth ?? config.labelWidth) this._labelWidth = (config.rowLabelWidth ?? config.labelWidth) + this._labelMargin\n else {\n const longestLabel = rowLabels.reduce((longestLabel, l) => longestLabel.formattedLabel.length > l.formattedLabel.length ? longestLabel : l, rowLabels[0])\n const label = this._labelsGroup.append('text')\n .attr('class', s.label)\n .text(longestLabel?.formattedLabel || '')\n .call(trimSVGText, config.rowMaxLabelWidth ?? config.maxLabelWidth)\n\n const labelWidth = label.node().getBBox().width\n label.remove()\n\n const tolerance = 1.15 // Some characters are wider than others so we add a little of extra space to take that into account\n this._labelWidth = labelWidth ? tolerance * labelWidth + this._labelMargin : 0\n }\n }\n\n // There can be multiple start / end items with the same timestamp, so we need to find the shortest one\n const minTimestamp = min(data, (d, i) => getNumber(d, config.x, i))\n const dataMin = data.filter((d, i) => getNumber(d, config.x, i) === minTimestamp)\n const dataMinShortestItemIdx = minIndex(dataMin, (d, i) => this._getLineDuration(d, i))\n const firstItemIdx = data.findIndex(d => d === dataMin[dataMinShortestItemIdx])\n const firstItem = data[firstItemIdx]\n\n const maxTimestamp = max(data, (d, i) => getNumber(d, config.x, i) + this._getLineDuration(d, i))\n const dataMax = data.filter((d, i) => getNumber(d, config.x, i) + this._getLineDuration(d, i) === maxTimestamp)\n const dataMaxShortestItemIdx = minIndex(dataMax, (d, i) => this._getLineDuration(d, i))\n const lastItemIdx = data.findIndex(d => d === dataMax[dataMaxShortestItemIdx])\n const lastItem = data[lastItemIdx]\n\n // Small segments bleed\n const lineBleed = [1, 1] as [number, number]\n if (config.showEmptySegments && config.lineCap && firstItem && lastItem) {\n const firstItemStart = getNumber(firstItem, config.x, firstItemIdx)\n const firstItemEnd = getNumber(firstItem, config.x, firstItemIdx) + this._getLineDuration(firstItem, firstItemIdx)\n const lastItemStart = getNumber(lastItem, config.x, lastItemIdx)\n const lastItemEnd = getNumber(lastItem, config.x, lastItemIdx) + this._getLineDuration(lastItem, lastItemIdx)\n const fullTimeRange = lastItemEnd - firstItemStart\n const firstItemHeight = this._getLineWidth(firstItem, firstItemIdx, rowHeight)\n const lastItemHeight = this._getLineWidth(lastItem, lastItemIdx, rowHeight)\n\n if ((firstItemEnd - firstItemStart) / fullTimeRange * this._width < firstItemHeight) lineBleed[0] = firstItemHeight / 2\n if ((lastItemEnd - lastItemStart) / fullTimeRange * this._width < lastItemHeight) lineBleed[1] = lastItemHeight / 2\n }\n this._lineBleed = lineBleed\n\n // Icon bleed\n const iconBleed = [0, 0] as [number, number]\n if (config.lineStartIcon) {\n iconBleed[0] = max(data, (d, i) => getIconBleed(d, i, config.lineStartIcon, config.lineStartIconSize, config.lineStartIconArrangement, rowHeight))\n }\n\n if (config.lineEndIcon) {\n iconBleed[1] = max(data, (d, i) => getIconBleed(d, i, config.lineEndIcon, config.lineEndIconSize, config.lineEndIconArrangement, rowHeight))\n }\n\n this._rowIconBleed = iconBleed\n\n return {\n top: 0,\n bottom: 0,\n left: this._labelWidth + iconBleed[0] + (hasIcons ? maxIconSize : 0) + lineBleed[0],\n right: this._scrollBarWidth + this._scrollBarMargin + iconBleed[1] + lineBleed[1],\n }\n }\n\n _render (customDuration?: number): void {\n super._render(customDuration)\n const { config, datamodel: { data } } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n const xRange = this.xScale.range()\n const yRange = this.yScale.range()\n const yStart = Math.min(...yRange)\n const yHeight = Math.abs(yRange[1] - yRange[0])\n const rowLabels = this._getRowLabels(data)\n const numRowLabels = rowLabels.length\n const rowHeight = config.rowHeight || (yHeight / numRowLabels)\n\n const yOrdinalScale = scaleOrdinal<string, number>()\n .range(arrayOfIndices(numRowLabels))\n .domain(rowLabels.map(l => l.label))\n\n const lineDataPrepared = this._prepareLinesData(data, yOrdinalScale, rowHeight)\n\n // Invisible Background rect to track events\n this._background\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('opacity', 0)\n\n // Row Icons\n const rowIcons = this._rowIconsGroup.selectAll<SVGUseElement, TimelineRowLabel<Datum>>(`.${s.rowIcon}`)\n .data(rowLabels.filter(d => d.iconSize), l => l?.label)\n\n const rowIconsEnter = rowIcons.enter().append('use')\n .attr('class', s.rowIcon)\n .attr('x', 0)\n .attr('width', l => l.iconSize)\n .attr('height', l => l.iconSize)\n .attr('y', l => yStart + (yOrdinalScale(l.label) + 0.5) * rowHeight - l.iconSize / 2)\n .style('opacity', 0)\n\n smartTransition(rowIconsEnter.merge(rowIcons), duration)\n .attr('href', l => l.iconHref)\n .attr('x', 0)\n .attr('y', l => yStart + (yOrdinalScale(l.label) + 0.5) * rowHeight - l.iconSize / 2)\n .attr('width', l => l.iconSize)\n .attr('height', l => l.iconSize)\n .style('color', l => l.iconColor)\n .style('opacity', 1)\n\n smartTransition(rowIcons.exit(), duration)\n .style('opacity', 0)\n .remove()\n\n // Labels\n const labels = this._labelsGroup.selectAll<SVGTextElement, TimelineRowLabel<Datum>>(`.${s.label}`)\n .data((config.showRowLabels ?? config.showLabels) ? rowLabels : [], l => l?.label)\n\n const labelOffset = config.rowLabelTextAlign === TextAlign.Center ? this._labelWidth / 2\n : config.rowLabelTextAlign === TextAlign.Left ? this._labelWidth\n : this._labelMargin\n\n const xStart = xRange[0] - this._rowIconBleed[0] - this._lineBleed[0]\n const labelXStart = xStart - labelOffset\n const labelsEnter = labels.enter().append('text')\n .attr('class', s.label)\n .attr('x', labelXStart)\n .attr('y', l => yStart + (yOrdinalScale(l.label) + 0.5) * rowHeight)\n .style('opacity', 0)\n\n const labelsMerged = labelsEnter.merge(labels)\n .text(l => l.formattedLabel)\n .each((label, i, els) => {\n const labelSelection = select(els[i])\n trimSVGText(labelSelection, (config.rowLabelWidth ?? config.labelWidth) || (config.rowMaxLabelWidth ?? config.maxLabelWidth))\n\n // Apply custom label style if it has been provided\n const customStyle = getValue(label, config.rowLabelStyle)\n if (!isPlainObject(customStyle)) return\n\n for (const [prop, value] of Object.entries(customStyle)) {\n labelSelection.style(prop, value)\n }\n })\n .style('text-anchor', textAlignToAnchor(config.rowLabelTextAlign as TextAlign))\n\n smartTransition(labelsMerged, duration)\n .attr('x', labelXStart)\n .attr('y', l => yStart + (yOrdinalScale(l.label) + 0.5) * rowHeight)\n .style('opacity', 1)\n\n smartTransition(labels.exit(), duration)\n .style('opacity', 0)\n .remove()\n\n // Row background rects\n const timelineWidth = xRange[1] - xRange[0] + this._rowIconBleed[0] + this._rowIconBleed[1] + this._lineBleed[0] + this._lineBleed[1]\n const numRows = Math.max(Math.floor(yHeight / rowHeight), numRowLabels)\n const recordTypes = Array(numRows).fill(null).map((_, i) => rowLabels[i])\n const rects = this._rowsGroup.selectAll<SVGRectElement, number>(`.${s.row}`)\n .data(recordTypes)\n\n const rectsEnter = rects.enter().append('rect')\n .attr('class', s.row)\n .attr('x', xStart)\n .attr('width', timelineWidth)\n .attr('y', (_, i) => yStart + i * rowHeight)\n .attr('height', rowHeight)\n .style('opacity', 0)\n\n const rectsMerged = rectsEnter.merge(rects)\n .classed(s.rowOdd, config.alternatingRowColors ? (_, i) => !(i % 2) : null)\n\n smartTransition(rectsMerged, duration)\n .attr('x', xStart)\n .attr('width', timelineWidth)\n .attr('y', (_, i) => yStart + i * rowHeight)\n .attr('height', rowHeight)\n .style('opacity', 1)\n\n smartTransition(rects.exit(), duration)\n .style('opacity', 0)\n .remove()\n\n // Lines\n const lines = this._linesGroup.selectAll<SVGGElement, Datum & TimelineLineRenderState>(`.${s.lineGroup}`)\n .data(lineDataPrepared, (d: Datum & TimelineLineRenderState) => d._id)\n\n const linesEnter = lines.enter().append('g')\n .attr('class', s.lineGroup)\n .style('opacity', 0)\n .attr('transform', (d, i) => {\n const configuredPos = isFunction(config.animationLineEnterPosition)\n ? config.animationLineEnterPosition(d, i, lineDataPrepared)\n : config.animationLineEnterPosition\n const [x, y] = [configuredPos?.[0] ?? d._xPx, configuredPos?.[1] ?? d._yPx]\n return `translate(${x}, ${y})`\n })\n\n linesEnter.append('rect')\n .attr('class', s.line)\n .style('fill', (d, i) => getColor(d, config.color, yOrdinalScale(this._getRecordKey(d, i))))\n .call(this._renderLines.bind(this), rowHeight)\n\n linesEnter.append('use').attr('class', s.lineStartIcon)\n linesEnter.append('use').attr('class', s.lineEndIcon)\n\n const linesMerged = linesEnter.merge(lines)\n smartTransition(linesMerged, duration)\n .attr('transform', d => `translate(${d._xPx + d._xOffsetPx}, ${d._yPx})`)\n .style('opacity', 1)\n\n const lineRectElementsSelection = linesMerged.selectAll<SVGRectElement, Datum & TimelineLineRenderState>(`.${s.line}`)\n .data(d => [d])\n smartTransition(lineRectElementsSelection, duration)\n .style('fill', (d, i) => getColor(d, config.color, yOrdinalScale(this._getRecordKey(d, i))))\n .style('cursor', (d, i) => getString(d, config.lineCursor ?? config.cursor, i))\n .call(this._renderLines.bind(this), rowHeight)\n\n linesMerged.selectAll<SVGUseElement, Datum & TimelineLineRenderState>(`.${s.lineStartIcon}`)\n .data(d => [d])\n .attr('href', (d, i) => getString(d, config.lineStartIcon, i))\n .attr('x', (d, i) => {\n const iconSize = d._startIconSize\n const iconArrangement = d._startIconArrangement\n const offset = iconArrangement === Arrangement.Inside ? 0\n : iconArrangement === Arrangement.Center ? -iconSize / 2\n : -iconSize\n return offset\n })\n .attr('y', d => (-(d._startIconSize - d._height) / 2) || 0)\n .attr('width', d => d._startIconSize)\n .attr('height', d => d._startIconSize)\n .style('color', d => d._startIconColor)\n\n linesMerged.selectAll<SVGUseElement, Datum & TimelineLineRenderState>(`.${s.lineEndIcon}`)\n .data(d => [d])\n .attr('href', (d, i) => getString(d, config.lineEndIcon, i))\n .attr('x', (d, i) => {\n const lineLength = d._lengthCorrected\n const iconSize = d._endIconSize\n const iconArrangement = d._endIconArrangement\n const offset = iconArrangement === Arrangement.Inside ? -iconSize\n : iconArrangement === Arrangement.Center ? -iconSize / 2\n : 0\n return lineLength + offset\n })\n .attr('y', d => -((d._endIconSize - d._height) / 2) || 0)\n .attr('width', d => d._endIconSize)\n .attr('height', d => d._endIconSize)\n .style('color', d => d._endIconColor)\n\n const linesExit = lines.exit<Datum & TimelineLineRenderState>()\n smartTransition(linesExit, duration)\n .style('opacity', 0)\n .attr('transform', (d, i) => {\n const configuredPos = isFunction(config.animationLineExitPosition)\n ? config.animationLineExitPosition(d, i, lineDataPrepared)\n : config.animationLineExitPosition\n const [x, y] = [configuredPos?.[0] ?? d._xPx, configuredPos?.[1] ?? d._yPx]\n return `translate(${x}, ${y})`\n })\n .remove()\n\n // Arrows\n const arrowsData = this._prepareArrowsData(data, yOrdinalScale, rowHeight)\n const arrows = this._arrowsGroup.selectAll<SVGPathElement, TimelineArrow & TimelineArrowRenderState>(`.${s.arrow}`)\n .data(arrowsData ?? [], d => d.id)\n\n const arrowsEnter = arrows.enter().append('path')\n .attr('class', s.arrow)\n .style('opacity', 0)\n\n smartTransition(arrowsEnter.merge(arrows), duration)\n .attr('d', (d) => arrowPolylinePath(\n d._points,\n d.arrowHeadLength ?? TIMELINE_DEFAULT_ARROW_HEAD_LENGTH,\n d.arrowHeadWidth ?? TIMELINE_DEFAULT_ARROW_HEAD_WIDTH\n ))\n .style('opacity', 1)\n\n smartTransition(arrows.exit(), duration)\n .style('opacity', 0)\n .remove()\n\n // Scroll Bar\n const contentBBox = this._rowsGroup.node().getBBox() // We determine content size using the rects group because lines are animated\n const absoluteContentHeight = contentBBox.height\n this._scrollbarHeight = yHeight * yHeight / absoluteContentHeight || 0\n this._maxScroll = Math.max(absoluteContentHeight - yHeight, 0)\n\n this._scrollBarGroup\n .attr('transform', `translate(${this._width - this._scrollBarWidth}, ${yStart})`)\n .attr('opacity', this._maxScroll ? 1 : 0)\n\n this._scrollBarBackground\n .attr('width', this._scrollBarWidth)\n .attr('height', this._height)\n .attr('rx', this._scrollBarWidth / 2)\n .attr('ry', this._scrollBarWidth / 2)\n\n this._scrollBarHandle\n .attr('width', this._scrollBarWidth)\n .attr('height', this._scrollbarHeight)\n .attr('rx', this._scrollBarWidth / 2)\n .attr('ry', this._scrollBarWidth / 2)\n\n this._updateScrollPosition(0)\n\n // Clip path\n const clipPathRect = this._clipPath.select('rect')\n smartTransition(clipPathRect, clipPathRect.attr('width') ? duration : 0)\n .attr('x', xStart)\n .attr('width', timelineWidth)\n .attr('height', this._height)\n }\n\n private _getLineLength (d: Datum, i: number): number {\n const { config, xScale } = this\n const x = getNumber(d, config.x, i)\n const length = getNumber(d, config.lineDuration ?? config.length, i) ?? 0\n\n const lineLength = xScale(x + length) - xScale(x)\n return lineLength\n }\n\n private _getLineWidth (d: Datum, i: number, rowHeight: number): number {\n const { config } = this\n return getNumber(d, config.lineWidth, i) ?? Math.max(Math.floor(rowHeight / 2), 1)\n }\n\n private _getLineDuration (d: Datum, i: number): number {\n const { config } = this\n return getNumber(d, config.lineDuration ?? config.length, i) ?? 0\n }\n\n private _prepareLinesData (data: Datum[], rowOrdinalScale: ScaleOrdinal<string, number>, rowHeight: number): (Datum & TimelineLineRenderState)[] {\n const { config, xScale, yScale } = this\n const yRange = yScale.range()\n const yStart = Math.min(...yRange)\n\n return data.map((d, i) => {\n const id = getString(d, config.id, i) ?? [\n this._getRecordKey(d, i), getNumber(d, config.x, i),\n ].join('-')\n\n const lineWidth = this._getLineWidth(d, i, rowHeight)\n const lineLength = this._getLineLength(d, i)\n\n if (lineLength < 0) {\n console.warn('Unovis | Timeline: Line segments should not have negative lengths. Setting to 0.')\n }\n\n const isLineTooShort = config.showEmptySegments && config.lineCap && (lineLength < lineWidth)\n const lineLengthCorrected = config.showEmptySegments\n ? Math.max(config.lineCap ? lineWidth : 1, lineLength)\n : Math.max(0, lineLength)\n\n const x = xScale(getNumber(d, config.x, i))\n const y = yStart + rowOrdinalScale(this._getRecordKey(d, i)) * rowHeight + (rowHeight - lineWidth) / 2\n const xOffset = isLineTooShort ? -(lineLengthCorrected - lineLength) / 2 : 0\n\n return {\n ...d,\n _id: id,\n _xPx: x,\n _yPx: y,\n _xOffsetPx: xOffset,\n _length: lineLength,\n _height: lineWidth,\n _lengthCorrected: lineLengthCorrected,\n _startIconSize: getNumber(d, config.lineStartIconSize, i) ?? lineWidth,\n _endIconSize: getNumber(d, config.lineEndIconSize, i) ?? lineWidth,\n _startIconColor: getString(d, config.lineStartIconColor, i),\n _endIconColor: getString(d, config.lineEndIconColor, i),\n _startIconArrangement: getValue(d, config.lineStartIconArrangement, i) ?? Arrangement.Outside,\n _endIconArrangement: getValue(d, config.lineEndIconArrangement, i) ?? Arrangement.Outside,\n }\n })\n }\n\n private _prepareArrowsData (data: Datum[], rowOrdinalScale: ScaleOrdinal<string, number>, rowHeight: number): (TimelineArrow & TimelineArrowRenderState)[] {\n const { config } = this\n\n const arrowsData: (TimelineArrow & TimelineArrowRenderState)[] = config.arrows?.map(a => {\n const sourceLineIndex = data.findIndex((d, i) => getString(d, config.id, i) === a.lineSourceId)\n const targetLineIndex = data.findIndex((d, i) => getString(d, config.id, i) === a.lineTargetId)\n const sourceLine = data[sourceLineIndex]\n const targetLine = data[targetLineIndex]\n\n if (!sourceLine || !targetLine) {\n console.warn('Unovis | Timeline: Arrow references a non-existent line. Skipping...', a)\n return undefined\n }\n\n const sourceLineY = rowOrdinalScale(this._getRecordKey(sourceLine, sourceLineIndex)) * rowHeight + rowHeight / 2\n const targetLineY = rowOrdinalScale(this._getRecordKey(targetLine, targetLineIndex)) * rowHeight + rowHeight / 2\n const sourceLineWidth = this._getLineWidth(sourceLine, sourceLineIndex, rowHeight)\n const targetLineWidth = this._getLineWidth(targetLine, targetLineIndex, rowHeight)\n\n const x1 = (a.xSource\n ? this.xScale(a.xSource)\n : this.xScale(getNumber(sourceLine, config.x, sourceLineIndex)) + this._getLineLength(sourceLine, sourceLineIndex)\n ) + (a.xSourceOffsetPx ?? 0)\n const targetLineLength = this._getLineLength(targetLine, targetLineIndex)\n const isTargetLineTooShort = config.showEmptySegments && config.lineCap && (targetLineLength < targetLineWidth)\n const targetLineStart = this.xScale(getNumber(targetLine, config.x, targetLineIndex)) + (isTargetLineTooShort ? -targetLineWidth / 2 : 0)\n const x2 = (a.xTarget ? this.xScale(a.xTarget) : targetLineStart) + (a.xTargetOffsetPx ?? 0)\n const isX2OutsideTargetLineStart = (x2 < targetLineStart) || (x2 > targetLineStart)\n\n // Points array\n const sourceMargin = a.lineSourceMarginPx ?? TIMELINE_DEFAULT_ARROW_MARGIN\n const targetMargin = a.lineTargetMarginPx ?? TIMELINE_DEFAULT_ARROW_MARGIN\n const y1 = sourceLineY < targetLineY ? sourceLineY + sourceLineWidth / 2 + sourceMargin : sourceLineY - sourceLineWidth / 2 - sourceMargin\n const y2 = sourceLineY < targetLineY ? targetLineY - targetLineWidth / 2 - targetMargin : targetLineY + targetLineWidth / 2 + targetMargin\n const points = [[x1, y1]] as [number, number][]\n const threshold = a.arrowHeadLength ?? TIMELINE_DEFAULT_ARROW_HEAD_LENGTH\n if (Math.abs(x2 - x1) > threshold) {\n if ((x1 < x2) && !isX2OutsideTargetLineStart) {\n points.push([x1, (y1 + targetLineY) / 2]) // A dummy point to enable smooth transitions when arrows change\n points.push([x1, targetLineY])\n points.push([x2 - targetMargin, targetLineY])\n } else {\n points.push([x1, y2 - Math.sign(targetLineY - sourceLineY) * (rowHeight / 4)])\n points.push([x2, y2 - Math.sign(targetLineY - sourceLineY) * (rowHeight / 4)])\n points.push([x2, y2])\n }\n } else {\n points.push([x1, y1 + (y2 - y1) / 4]) // A dummy point to enable smooth transitions\n points.push([x1, y1 + 3 * (y2 - y1) / 4]) // A dummy point to enable smooth transitions\n points.push([x1, y2])\n }\n\n return {\n ...a,\n _points: points,\n }\n }).filter(Boolean)\n return arrowsData\n }\n\n\n private _renderLines (\n selection: Selection<SVGRectElement, Datum & TimelineLineRenderState, SVGGElement, unknown> | Transition<SVGRectElement, Datum & TimelineLineRenderState, SVGGElement, unknown>\n ): void {\n const { config } = this\n\n selection\n .attr('width', d => d._lengthCorrected)\n .attr('height', d => d._height)\n .attr('rx', d => config.lineCap ? d._height / 2 : null)\n }\n\n private _onScrollbarDrag (event: D3DragEvent<any, any, any>): void {\n const yRange = this.yScale.range()\n const yHeight = Math.abs(yRange[1] - yRange[0])\n this._updateScrollPosition(event.dy * this._maxScroll / (yHeight - this._scrollbarHeight))\n }\n\n private _onMouseWheel (d: unknown, event: WheelEvent): void {\n const { config } = this\n\n this._updateScrollPosition(event?.deltaY)\n if (this._scrollDistance > 0 && this._scrollDistance < this._maxScroll) event?.preventDefault()\n\n config.onScroll?.(this._scrollDistance)\n\n // Programmatically trigger a mousemove event to update Tooltip or Crosshair if they were set up\n const e = new Event('mousemove')\n this.element.dispatchEvent(e)\n }\n\n private _updateScrollPosition (diff: number): void {\n const yRange = this.yScale.range()\n const yHeight = Math.abs(yRange[1] - yRange[0])\n\n this._scrollDistance += diff\n this._scrollDistance = Math.max(0, this._scrollDistance)\n this._scrollDistance = Math.min(this._maxScroll, this._scrollDistance)\n\n this._clipPath.attr('transform', `translate(0,${this._scrollDistance})`)\n this._linesGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n this._rowsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n this._labelsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n this._rowIconsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n this._arrowsGroup.attr('transform', `translate(0,${-this._scrollDistance})`)\n const scrollBarPosition = (this._scrollDistance / this._maxScroll * (yHeight - this._scrollbarHeight)) || 0\n this._scrollBarHandle.attr('y', scrollBarPosition)\n }\n\n private _getRecordKey (d: Datum, i: number): string {\n return getString(d, this.config.lineRow ?? this.config.type) || `__${i}`\n }\n\n private _getRowLabels (data: Datum[]): TimelineRowLabel<Datum>[] {\n const grouped = groupBy(data, (d, i) => getString(d, this.config.lineRow ?? this.config.type) || `${i + 1}`)\n\n const rowLabels: TimelineRowLabel<Datum>[] = Object.entries(grouped).map(([key, items], i) => {\n const icon = this.config.rowIcon?.(key, items, i)\n return {\n label: key,\n formattedLabel: this.config.rowLabelFormatter?.(key, items, i) ?? key,\n iconHref: icon?.href,\n iconSize: icon?.size,\n iconColor: icon?.color,\n data: items,\n }\n })\n\n return rowLabels\n }\n\n // Override the default XYComponent getXDataExtent method to take into account line lengths\n getXDataExtent (): number[] {\n const { config, datamodel } = this\n const min = getMin(datamodel.data, config.x)\n const max = getMax(datamodel.data, (d, i) => getNumber(d, config.x, i) + (getNumber(d, config.lineDuration ?? config.length, i) ?? 0))\n return [min, max]\n }\n}\n"],"names":["s.background","s.rows","s.arrows","s.lines","s.labels","s.rowIcons","s.scrollbar","s.scrollbarBackground","s.scrollbarHandle","label","s.label","s.rowIcon","s.row","s.rowOdd","s.lineGroup","s.line","s.lineStartIcon","s.lineEndIcon","s.arrow","s"],"mappings":"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"}
|
|
@@ -2,7 +2,12 @@ export declare const root: string;
|
|
|
2
2
|
export declare const globalStyles: void;
|
|
3
3
|
export declare const background: string;
|
|
4
4
|
export declare const lines: string;
|
|
5
|
+
export declare const lineGroup: string;
|
|
5
6
|
export declare const line: string;
|
|
7
|
+
export declare const lineStartIcon: string;
|
|
8
|
+
export declare const lineEndIcon: string;
|
|
9
|
+
export declare const arrows: string;
|
|
10
|
+
export declare const arrow: string;
|
|
6
11
|
export declare const rows: string;
|
|
7
12
|
export declare const row: string;
|
|
8
13
|
export declare const rowOdd: string;
|
|
@@ -11,3 +16,5 @@ export declare const scrollbarHandle: string;
|
|
|
11
16
|
export declare const scrollbarBackground: string;
|
|
12
17
|
export declare const labels: string;
|
|
13
18
|
export declare const label: string;
|
|
19
|
+
export declare const rowIcons: string;
|
|
20
|
+
export declare const rowIcon: string;
|
|
@@ -14,9 +14,15 @@ const globalStyles = injectGlobal `
|
|
|
14
14
|
--vis-timeline-label-font-size: 12px;
|
|
15
15
|
--vis-timeline-label-color: #6C778C;
|
|
16
16
|
|
|
17
|
+
--vis-timeline-arrow-color: #6C778C;
|
|
18
|
+
--vis-timeline-arrow-stroke-width: 1.5;
|
|
19
|
+
|
|
17
20
|
--vis-timeline-cursor: default;
|
|
18
21
|
--vis-timeline-line-color: var(--vis-color-main);
|
|
19
22
|
--vis-timeline-line-stroke-width: 0;
|
|
23
|
+
--vis-timeline-line-hover-stroke-width: 0;
|
|
24
|
+
--vis-timeline-line-hover-stroke-color: #6C778C;
|
|
25
|
+
|
|
20
26
|
// The line stroke color variable is not defined by default
|
|
21
27
|
// to allow it to fallback to the corresponding row background color
|
|
22
28
|
/* --vis-timeline-line-stroke-color: none; */
|
|
@@ -26,6 +32,8 @@ const globalStyles = injectGlobal `
|
|
|
26
32
|
--vis-dark-timeline-scrollbar-background-color: #292B34;
|
|
27
33
|
--vis-dark-timeline-scrollbar-color: #6C778C;
|
|
28
34
|
--vis-dark-timeline-label-color: #EFF5F8;
|
|
35
|
+
--vis-dark-timeline-arrow-color: #EFF5F8;
|
|
36
|
+
--vis-dark-timeline-line-hover-stroke-color: #EFF5F8;
|
|
29
37
|
}
|
|
30
38
|
|
|
31
39
|
body.theme-dark ${`.${root}`} {
|
|
@@ -34,6 +42,8 @@ const globalStyles = injectGlobal `
|
|
|
34
42
|
--vis-timeline-scrollbar-background-color: var(--vis-dark-timeline-scrollbar-background-color);
|
|
35
43
|
--vis-timeline-scrollbar-color: var(--vis-dark-timeline-scrollbar-color);
|
|
36
44
|
--vis-timeline-label-color: var(--vis-dark-timeline-label-color);
|
|
45
|
+
--vis-timeline-arrow-color: var(--vis-dark-timeline-arrow-color);
|
|
46
|
+
--vis-timeline-line-hover-stroke-color: var(--vis-dark-timeline-line-hover-stroke-color);
|
|
37
47
|
}
|
|
38
48
|
`;
|
|
39
49
|
const background = css `
|
|
@@ -42,6 +52,9 @@ const background = css `
|
|
|
42
52
|
const lines = css `
|
|
43
53
|
label: lines;
|
|
44
54
|
`;
|
|
55
|
+
const lineGroup = css `
|
|
56
|
+
label: line-group;
|
|
57
|
+
`;
|
|
45
58
|
const line = css `
|
|
46
59
|
label: line;
|
|
47
60
|
fill: var(--vis-timeline-line-color);
|
|
@@ -53,6 +66,26 @@ const line = css `
|
|
|
53
66
|
&.odd {
|
|
54
67
|
stroke: var(--vis-timeline-line-stroke-color, var(--vis-timeline-row-odd-fill-color));
|
|
55
68
|
}
|
|
69
|
+
|
|
70
|
+
:hover {
|
|
71
|
+
stroke-width: var(--vis-timeline-line-hover-stroke-width);
|
|
72
|
+
stroke: var(--vis-timeline-line-hover-stroke-color);
|
|
73
|
+
}
|
|
74
|
+
`;
|
|
75
|
+
const lineStartIcon = css `
|
|
76
|
+
label: line-start-icon;
|
|
77
|
+
`;
|
|
78
|
+
const lineEndIcon = css `
|
|
79
|
+
label: line-end-icon;
|
|
80
|
+
`;
|
|
81
|
+
const arrows = css `
|
|
82
|
+
label: arrows;
|
|
83
|
+
`;
|
|
84
|
+
const arrow = css `
|
|
85
|
+
label: arrow;
|
|
86
|
+
fill: none;
|
|
87
|
+
stroke: var(--vis-timeline-arrow-color);
|
|
88
|
+
stroke-width: var(--vis-timeline-arrow-stroke-width);
|
|
56
89
|
`;
|
|
57
90
|
const rows = css `
|
|
58
91
|
label: rows;
|
|
@@ -87,7 +120,13 @@ const label = css `
|
|
|
87
120
|
fill: var(--vis-timeline-label-color);
|
|
88
121
|
text-anchor: end;
|
|
89
122
|
user-select: none;
|
|
123
|
+
`;
|
|
124
|
+
const rowIcons = css `
|
|
125
|
+
label: row-icons;
|
|
126
|
+
`;
|
|
127
|
+
const rowIcon = css `
|
|
128
|
+
label: row-icon;
|
|
90
129
|
`;
|
|
91
130
|
|
|
92
|
-
export { background, globalStyles, label, labels, line, lines, root, row, rowOdd, rows, scrollbar, scrollbarBackground, scrollbarHandle };
|
|
131
|
+
export { arrow, arrows, background, globalStyles, label, labels, line, lineEndIcon, lineGroup, lineStartIcon, lines, root, row, rowIcon, rowIcons, rowOdd, rows, scrollbar, scrollbarBackground, scrollbarHandle };
|
|
93
132
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sources":["../../../src/components/timeline/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: timeline-component;\n`\n\nexport const globalStyles = injectGlobal`\n :root {\n --vis-timeline-row-even-fill-color: #FFFFFF;\n --vis-timeline-row-odd-fill-color: #F7FAFC;\n --vis-timeline-row-background-opacity: 1;\n --vis-timeline-scrollbar-background-color: #E6E9F3;\n --vis-timeline-scrollbar-color: #9EA7B8;\n\n --vis-timeline-label-font-size: 12px;\n --vis-timeline-label-color: #6C778C;\n\n --vis-timeline-cursor: default;\n --vis-timeline-line-color: var(--vis-color-main);\n --vis-timeline-line-stroke-width: 0;\n // The line stroke color variable is not defined by default\n // to allow it to fallback to the corresponding row background color\n /* --vis-timeline-line-stroke-color: none; */\n\n --vis-dark-timeline-row-even-fill-color: #292B34;\n --vis-dark-timeline-row-odd-fill-color: #333742;\n --vis-dark-timeline-scrollbar-background-color: #292B34;\n --vis-dark-timeline-scrollbar-color: #6C778C;\n --vis-dark-timeline-label-color: #EFF5F8;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-timeline-row-even-fill-color: var(--vis-dark-timeline-row-even-fill-color);\n --vis-timeline-row-odd-fill-color: var(--vis-dark-timeline-row-odd-fill-color);\n --vis-timeline-scrollbar-background-color: var(--vis-dark-timeline-scrollbar-background-color);\n --vis-timeline-scrollbar-color: var(--vis-dark-timeline-scrollbar-color);\n --vis-timeline-label-color: var(--vis-dark-timeline-label-color);\n }\n`\n\nexport const background = css`\n label: background;\n`\n\nexport const lines = css`\n label: lines;\n`\n\nexport const line = css`\n label: line;\n fill: var(--vis-timeline-line-color);\n cursor: var(--vis-timeline-cursor);\n\n stroke: var(--vis-timeline-line-stroke-color, var(--vis-timeline-row-even-fill-color));\n stroke-width: var(--vis-timeline-line-stroke-width);\n\n &.odd {\n stroke: var(--vis-timeline-line-stroke-color, var(--vis-timeline-row-odd-fill-color));\n }\n`\n\nexport const rows = css`\n label: rows;\n`\n\nexport const row = css`\n label: row;\n fill: var(--vis-timeline-row-even-fill-color);\n opacity: var(--vis-timeline-row-background-opacity);\n`\n\nexport const rowOdd = css`\n label: row-odd;\n fill: var(--vis-timeline-row-odd-fill-color);\n`\n\nexport const scrollbar = css`\n label: scroll-bar;\n`\n\nexport const scrollbarHandle = css`\n label: scroll-bar-handle;\n fill: var(--vis-timeline-scrollbar-color);\n`\n\nexport const scrollbarBackground = css`\n label: scroll-bar-background;\n fill: var(--vis-timeline-scrollbar-background-color);\n`\n\nexport const labels = css`\n label: labels;\n`\n\nexport const label = css`\n label: label;\n dominant-baseline: middle;\n font-size: var(--vis-timeline-label-font-size);\n fill: var(--vis-timeline-label-color);\n text-anchor: end;\n user-select: none;\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,YAAY,GAAG,YAAY,CAAA,CAAA
|
|
1
|
+
{"version":3,"file":"style.js","sources":["../../../src/components/timeline/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: timeline-component;\n`\n\nexport const globalStyles = injectGlobal`\n :root {\n --vis-timeline-row-even-fill-color: #FFFFFF;\n --vis-timeline-row-odd-fill-color: #F7FAFC;\n --vis-timeline-row-background-opacity: 1;\n --vis-timeline-scrollbar-background-color: #E6E9F3;\n --vis-timeline-scrollbar-color: #9EA7B8;\n\n --vis-timeline-label-font-size: 12px;\n --vis-timeline-label-color: #6C778C;\n\n --vis-timeline-arrow-color: #6C778C;\n --vis-timeline-arrow-stroke-width: 1.5;\n\n --vis-timeline-cursor: default;\n --vis-timeline-line-color: var(--vis-color-main);\n --vis-timeline-line-stroke-width: 0;\n --vis-timeline-line-hover-stroke-width: 0;\n --vis-timeline-line-hover-stroke-color: #6C778C;\n\n // The line stroke color variable is not defined by default\n // to allow it to fallback to the corresponding row background color\n /* --vis-timeline-line-stroke-color: none; */\n\n --vis-dark-timeline-row-even-fill-color: #292B34;\n --vis-dark-timeline-row-odd-fill-color: #333742;\n --vis-dark-timeline-scrollbar-background-color: #292B34;\n --vis-dark-timeline-scrollbar-color: #6C778C;\n --vis-dark-timeline-label-color: #EFF5F8;\n --vis-dark-timeline-arrow-color: #EFF5F8;\n --vis-dark-timeline-line-hover-stroke-color: #EFF5F8;\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-timeline-row-even-fill-color: var(--vis-dark-timeline-row-even-fill-color);\n --vis-timeline-row-odd-fill-color: var(--vis-dark-timeline-row-odd-fill-color);\n --vis-timeline-scrollbar-background-color: var(--vis-dark-timeline-scrollbar-background-color);\n --vis-timeline-scrollbar-color: var(--vis-dark-timeline-scrollbar-color);\n --vis-timeline-label-color: var(--vis-dark-timeline-label-color);\n --vis-timeline-arrow-color: var(--vis-dark-timeline-arrow-color);\n --vis-timeline-line-hover-stroke-color: var(--vis-dark-timeline-line-hover-stroke-color);\n }\n`\n\nexport const background = css`\n label: background;\n`\n\nexport const lines = css`\n label: lines;\n`\n\nexport const lineGroup = css`\n label: line-group;\n`\n\nexport const line = css`\n label: line;\n fill: var(--vis-timeline-line-color);\n cursor: var(--vis-timeline-cursor);\n\n stroke: var(--vis-timeline-line-stroke-color, var(--vis-timeline-row-even-fill-color));\n stroke-width: var(--vis-timeline-line-stroke-width);\n\n &.odd {\n stroke: var(--vis-timeline-line-stroke-color, var(--vis-timeline-row-odd-fill-color));\n }\n\n :hover {\n stroke-width: var(--vis-timeline-line-hover-stroke-width);\n stroke: var(--vis-timeline-line-hover-stroke-color);\n }\n`\n\nexport const lineStartIcon = css`\n label: line-start-icon;\n`\n\nexport const lineEndIcon = css`\n label: line-end-icon;\n`\n\nexport const arrows = css`\n label: arrows;\n`\n\nexport const arrow = css`\n label: arrow;\n fill: none;\n stroke: var(--vis-timeline-arrow-color);\n stroke-width: var(--vis-timeline-arrow-stroke-width);\n`\n\nexport const rows = css`\n label: rows;\n`\n\nexport const row = css`\n label: row;\n fill: var(--vis-timeline-row-even-fill-color);\n opacity: var(--vis-timeline-row-background-opacity);\n`\n\nexport const rowOdd = css`\n label: row-odd;\n fill: var(--vis-timeline-row-odd-fill-color);\n`\n\nexport const scrollbar = css`\n label: scroll-bar;\n`\n\nexport const scrollbarHandle = css`\n label: scroll-bar-handle;\n fill: var(--vis-timeline-scrollbar-color);\n`\n\nexport const scrollbarBackground = css`\n label: scroll-bar-background;\n fill: var(--vis-timeline-scrollbar-background-color);\n`\n\nexport const labels = css`\n label: labels;\n`\n\nexport const label = css`\n label: label;\n dominant-baseline: middle;\n font-size: var(--vis-timeline-label-font-size);\n fill: var(--vis-timeline-label-color);\n text-anchor: end;\n user-select: none;\n`\n\nexport const rowIcons = css`\n label: row-icons;\n`\n\nexport const rowIcon = css`\n label: row-icon;\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,YAAY,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCpB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;;;;;EAS7B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;EAE5B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;EAgBtB;AAEM,MAAM,aAAa,GAAG,GAAG,CAAA,CAAA;;EAE/B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;EAE7B;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;EAKvB;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,GAAG,GAAG,GAAG,CAAA,CAAA;;;;EAIrB;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;;EAGxB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;EAE3B;AAEM,MAAM,eAAe,GAAG,GAAG,CAAA,CAAA;;;EAGjC;AAEM,MAAM,mBAAmB,GAAG,GAAG,CAAA,CAAA;;;EAGrC;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;;;;;;EAOvB;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;EAE1B;AAEM,MAAM,OAAO,GAAG,GAAG,CAAA,CAAA;;;;;;"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Arrangement } from "../../types/position";
|
|
2
|
+
export declare type TimelineRowIcon = {
|
|
3
|
+
href: string;
|
|
4
|
+
size: number;
|
|
5
|
+
color: string;
|
|
6
|
+
};
|
|
7
|
+
export declare type TimelineRowLabel<D> = {
|
|
8
|
+
label: string;
|
|
9
|
+
formattedLabel: string;
|
|
10
|
+
data: D[];
|
|
11
|
+
iconHref?: string;
|
|
12
|
+
iconSize?: number;
|
|
13
|
+
iconColor?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare type TimelineArrow = {
|
|
16
|
+
id?: string;
|
|
17
|
+
/** The optional x position of the arrow start. By default the arrow will be placed at the source line's end */
|
|
18
|
+
xSource?: number;
|
|
19
|
+
/** The optional x position of the arrow end. By default the arrow will be placed at the target line's start */
|
|
20
|
+
xTarget?: number;
|
|
21
|
+
/** The horizontal offset of the arrow in pixels. Default: `undefined` */
|
|
22
|
+
xSourceOffsetPx?: number;
|
|
23
|
+
/** The horizontal offset of the arrow in pixels. Default: `undefined` */
|
|
24
|
+
xTargetOffsetPx?: number;
|
|
25
|
+
/** The id of the line start element. */
|
|
26
|
+
lineSourceId: string;
|
|
27
|
+
/** The id of the line end element. */
|
|
28
|
+
lineTargetId: string;
|
|
29
|
+
/** The margin between the line source and the arrow in pixels. Default: `undefined` */
|
|
30
|
+
lineSourceMarginPx?: number;
|
|
31
|
+
/** The margin between the line target and the arrow in pixels. Default: `undefined` */
|
|
32
|
+
lineTargetMarginPx?: number;
|
|
33
|
+
/** The length of the arrowhead in pixels. Default: `8` */
|
|
34
|
+
arrowHeadLength?: number;
|
|
35
|
+
/** The width of the arrowhead in pixels. Default: `6` */
|
|
36
|
+
arrowHeadWidth?: number;
|
|
37
|
+
};
|
|
38
|
+
export declare type TimelineArrowRenderState = {
|
|
39
|
+
_points: [number, number][];
|
|
40
|
+
};
|
|
41
|
+
export declare type TimelineLineRenderState = {
|
|
42
|
+
_id: string;
|
|
43
|
+
/** The x position of the line start pixels. */
|
|
44
|
+
_xPx: number;
|
|
45
|
+
/** The y position of the line in pixels. */
|
|
46
|
+
_yPx: number;
|
|
47
|
+
/** The x offset of the line in pixels. Applied the the lines is too short. See the `_lengthCorrected` property */
|
|
48
|
+
_xOffsetPx: number;
|
|
49
|
+
/** The height of the line in pixels. */
|
|
50
|
+
_height: number;
|
|
51
|
+
/** The length of the line in pixels. */
|
|
52
|
+
_length: number;
|
|
53
|
+
/** When the line is too short, the length is corrected to be
|
|
54
|
+
* at least the line height when `config.lineCap` is set to `true` */
|
|
55
|
+
_lengthCorrected: number;
|
|
56
|
+
_startIconSize: number;
|
|
57
|
+
_endIconSize: number;
|
|
58
|
+
_startIconColor: string;
|
|
59
|
+
_endIconColor: string;
|
|
60
|
+
_startIconArrangement: `${Arrangement}`;
|
|
61
|
+
_endIconArrangement: `${Arrangement}`;
|
|
62
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { NumericAccessor, StringAccessor } from "../../types/accessor";
|
|
2
|
+
export declare const getIconBleed: <Datum>(datum: Datum, idx: number, icon: StringAccessor<Datum>, iconSize: NumericAccessor<Datum>, iconArrangement: StringAccessor<Datum>, rowHeight: number) => number;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Arrangement } from '../../types/position.js';
|
|
2
|
+
import { getString, getNumber, getValue } from '../../utils/data.js';
|
|
3
|
+
|
|
4
|
+
const getIconBleed = (datum, idx, icon, iconSize, iconArrangement, rowHeight) => {
|
|
5
|
+
const iconValue = getString(datum, icon, idx);
|
|
6
|
+
if (!iconValue)
|
|
7
|
+
return 0;
|
|
8
|
+
const size = getNumber(datum, iconSize, idx) || rowHeight / 2;
|
|
9
|
+
const arrangement = getValue(datum, iconArrangement, idx);
|
|
10
|
+
return (arrangement === Arrangement.Outside) ? size
|
|
11
|
+
: (arrangement === Arrangement.Center) ? size / 2
|
|
12
|
+
: 0;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export { getIconBleed };
|
|
16
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../src/components/timeline/utils.ts"],"sourcesContent":["import type { NumericAccessor, StringAccessor } from 'types/accessor'\nimport { Arrangement } from 'types/position'\nimport { getNumber, getString, getValue } from 'utils/data'\n\nexport const getIconBleed = <Datum>(\n datum: Datum,\n idx: number,\n icon: StringAccessor<Datum>,\n iconSize: NumericAccessor<Datum>,\n iconArrangement: StringAccessor<Datum>,\n rowHeight: number\n): number => {\n const iconValue = getString(datum, icon, idx)\n if (!iconValue) return 0\n\n const size = getNumber(datum, iconSize, idx) || rowHeight / 2\n const arrangement = getValue(datum, iconArrangement, idx)\n\n return (arrangement === Arrangement.Outside) ? size\n : (arrangement === Arrangement.Center) ? size / 2\n : 0\n}\n"],"names":[],"mappings":";;;AAIa,MAAA,YAAY,GAAG,CAC1B,KAAY,EACZ,GAAW,EACX,IAA2B,EAC3B,QAAgC,EAChC,eAAsC,EACtC,SAAiB,KACP;IACV,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;AAC7C,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,CAAC,CAAA;AAExB,IAAA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,CAAA;IAC7D,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,CAAA;IAEzD,OAAO,CAAC,WAAW,KAAK,WAAW,CAAC,OAAO,IAAI,IAAI;AACjD,UAAE,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC;cAC7C,CAAC,CAAA;AACT;;;;"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ComponentConfigInterface } from "../../core/component/config";
|
|
2
|
+
import { ColorAccessor, NumericAccessor, StringAccessor } from "../../types/accessor";
|
|
3
|
+
import { TreemapNode } from './types';
|
|
4
|
+
export interface TreemapConfigInterface<Datum> extends ComponentConfigInterface {
|
|
5
|
+
id?: ((d: Datum, i: number) => string | number);
|
|
6
|
+
value?: NumericAccessor<Datum>;
|
|
7
|
+
/** Array of accessor functions to defined the nested groups. Default: `[]` */
|
|
8
|
+
layers: StringAccessor<Datum>[];
|
|
9
|
+
/** A function that accepts a value number and returns a string. Default: `undefined` */
|
|
10
|
+
numberFormat?: (value: number) => string;
|
|
11
|
+
/** Color accessor function for tiles. Default: `undefined` */
|
|
12
|
+
tileColor?: ColorAccessor<TreemapNode<Datum>>;
|
|
13
|
+
/** Padding passed to D3 treemap layout. Default: `2` */
|
|
14
|
+
tilePadding?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Top padding passed to D3 treemap layout.
|
|
17
|
+
* Useful to make room for internal node labels.
|
|
18
|
+
* Default: `undefined`
|
|
19
|
+
*/
|
|
20
|
+
tilePaddingTop?: number;
|
|
21
|
+
/** Label internal nodes. Default: `false` */
|
|
22
|
+
labelInternalNodes?: boolean;
|
|
23
|
+
/** Label offset in the X direction. Default: `4` */
|
|
24
|
+
labelOffsetX?: number;
|
|
25
|
+
/** Label offset in the Y direction. Default: `4` */
|
|
26
|
+
labelOffsetY?: number;
|
|
27
|
+
/** Border radius of the tiles in pixels. Default: `2` */
|
|
28
|
+
tileBorderRadius?: number;
|
|
29
|
+
/** Minimum fraction of width for border radius. Default: `1/8` */
|
|
30
|
+
tileBorderRadiusFactor?: number;
|
|
31
|
+
/** Enable lightness variance for sibling tiles. Default: `false` */
|
|
32
|
+
enableLightnessVariance?: boolean;
|
|
33
|
+
/** Enable font size variation for leaf node labels based on value. Default: `false` */
|
|
34
|
+
enableTileLabelFontSizeVariation?: boolean;
|
|
35
|
+
/** Small font size for leaf labels (used when enableTileLabelFontSizeVariation is true). Default: `8` */
|
|
36
|
+
tileLabelSmallFontSize?: number;
|
|
37
|
+
/** Medium font size for leaf labels (used when enableTileLabelFontSizeVariation is true). Default: `12` */
|
|
38
|
+
tileLabelMediumFontSize?: number;
|
|
39
|
+
/** Large font size for leaf labels (used when enableTileLabelFontSizeVariation is true). Default: `24` */
|
|
40
|
+
tileLabelLargeFontSize?: number;
|
|
41
|
+
/** Flag for showing cursor:pointer to indicate leaf tiles are clickable. Default: `undefined` */
|
|
42
|
+
showTileClickAffordance?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare const TreemapDefaultConfig: TreemapConfigInterface<unknown>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { ComponentDefaultConfig } from '../../core/component/config.js';
|
|
2
|
+
|
|
3
|
+
const TreemapDefaultConfig = Object.assign(Object.assign({}, ComponentDefaultConfig), { id: (d, i) => { var _a; return (_a = d.id) !== null && _a !== void 0 ? _a : i; }, value: undefined, tileColor: undefined, layers: [], tilePadding: 2, tilePaddingTop: undefined, labelInternalNodes: false, labelOffsetX: 4, labelOffsetY: 4, tileBorderRadius: 2, tileBorderRadiusFactor: 1 / 8, enableLightnessVariance: false, enableTileLabelFontSizeVariation: true, tileLabelSmallFontSize: 8, tileLabelMediumFontSize: 12, tileLabelLargeFontSize: 22, showTileClickAffordance: false });
|
|
4
|
+
|
|
5
|
+
export { TreemapDefaultConfig };
|
|
6
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/components/treemap/config.ts"],"sourcesContent":["import { ComponentConfigInterface, ComponentDefaultConfig } from 'core/component/config'\nimport { ColorAccessor, NumericAccessor, StringAccessor } from 'types/accessor'\nimport { TreemapNode } from './types'\n\nexport interface TreemapConfigInterface<Datum> extends ComponentConfigInterface {\n id?: ((d: Datum, i: number) => string | number);\n /* Numeric accessor for segment size value. Default: `undefined`. */\n value?: NumericAccessor<Datum>;\n\n /** Array of accessor functions to defined the nested groups. Default: `[]` */\n layers: StringAccessor<Datum>[];\n\n /** A function that accepts a value number and returns a string. Default: `undefined` */\n numberFormat?: (value: number) => string;\n\n /** Color accessor function for tiles. Default: `undefined` */\n tileColor?: ColorAccessor<TreemapNode<Datum>>;\n\n /** Padding passed to D3 treemap layout. Default: `2` */\n tilePadding?: number;\n\n /**\n * Top padding passed to D3 treemap layout.\n * Useful to make room for internal node labels.\n * Default: `undefined`\n */\n tilePaddingTop?: number;\n\n /** Label internal nodes. Default: `false` */\n labelInternalNodes?: boolean;\n\n /** Label offset in the X direction. Default: `4` */\n labelOffsetX?: number;\n\n /** Label offset in the Y direction. Default: `4` */\n labelOffsetY?: number;\n\n /** Border radius of the tiles in pixels. Default: `2` */\n tileBorderRadius?: number;\n\n /** Minimum fraction of width for border radius. Default: `1/8` */\n tileBorderRadiusFactor?: number;\n\n /** Enable lightness variance for sibling tiles. Default: `false` */\n enableLightnessVariance?: boolean;\n\n /** Enable font size variation for leaf node labels based on value. Default: `false` */\n enableTileLabelFontSizeVariation?: boolean;\n\n /** Small font size for leaf labels (used when enableTileLabelFontSizeVariation is true). Default: `8` */\n tileLabelSmallFontSize?: number;\n\n /** Medium font size for leaf labels (used when enableTileLabelFontSizeVariation is true). Default: `12` */\n tileLabelMediumFontSize?: number;\n\n /** Large font size for leaf labels (used when enableTileLabelFontSizeVariation is true). Default: `24` */\n tileLabelLargeFontSize?: number;\n\n\n /** Flag for showing cursor:pointer to indicate leaf tiles are clickable. Default: `undefined` */\n showTileClickAffordance?: boolean;\n}\n\nexport const TreemapDefaultConfig: TreemapConfigInterface<unknown> = {\n ...ComponentDefaultConfig,\n id: (d: unknown, i: number): string | number => (d as { id: string }).id ?? i,\n value: undefined,\n tileColor: undefined,\n layers: [],\n tilePadding: 2,\n tilePaddingTop: undefined,\n labelInternalNodes: false,\n labelOffsetX: 4,\n labelOffsetY: 4,\n tileBorderRadius: 2,\n tileBorderRadiusFactor: 1 / 8,\n enableLightnessVariance: false,\n enableTileLabelFontSizeVariation: true,\n tileLabelSmallFontSize: 8,\n tileLabelMediumFontSize: 12,\n tileLabelLargeFontSize: 22,\n showTileClickAffordance: false,\n}\n"],"names":[],"mappings":";;AA+Da,MAAA,oBAAoB,mCAC5B,sBAAsB,CAAA,EAAA,EACzB,EAAE,EAAE,CAAC,CAAU,EAAE,CAAS,KAAqB,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,CAAC,EAAA,GAAA,CAAoB,CAAC,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA,EAAA,EAC7E,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,EAAE,EACV,WAAW,EAAE,CAAC,EACd,cAAc,EAAE,SAAS,EACzB,kBAAkB,EAAE,KAAK,EACzB,YAAY,EAAE,CAAC,EACf,YAAY,EAAE,CAAC,EACf,gBAAgB,EAAE,CAAC,EACnB,sBAAsB,EAAE,CAAC,GAAG,CAAC,EAC7B,uBAAuB,EAAE,KAAK,EAC9B,gCAAgC,EAAE,IAAI,EACtC,sBAAsB,EAAE,CAAC,EACzB,uBAAuB,EAAE,EAAE,EAC3B,sBAAsB,EAAE,EAAE,EAC1B,uBAAuB,EAAE,KAAK;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Selection } from 'd3-selection';
|
|
2
|
+
import { ComponentCore } from "../../core/component";
|
|
3
|
+
import { SeriesDataModel } from "../../data-models/series";
|
|
4
|
+
import { TreemapConfigInterface } from './config';
|
|
5
|
+
import * as s from './style';
|
|
6
|
+
export declare class Treemap<Datum> extends ComponentCore<Datum[], TreemapConfigInterface<Datum>> {
|
|
7
|
+
static selectors: typeof s;
|
|
8
|
+
protected _defaultConfig: TreemapConfigInterface<Datum>;
|
|
9
|
+
config: TreemapConfigInterface<Datum>;
|
|
10
|
+
datamodel: SeriesDataModel<Datum>;
|
|
11
|
+
tiles: Selection<SVGGElement, unknown, SVGGElement, unknown>;
|
|
12
|
+
private isTileLargeEnough;
|
|
13
|
+
private getTileLightness;
|
|
14
|
+
constructor(config?: TreemapConfigInterface<Datum>);
|
|
15
|
+
_render(): void;
|
|
16
|
+
}
|