@unovis/ts 1.6.5 → 1.6.6-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/axis/config.d.ts +10 -7
- package/components/axis/config.js +1 -1
- package/components/axis/config.js.map +1 -1
- package/components/axis/index.d.ts +1 -0
- package/components/axis/index.js +44 -53
- package/components/axis/index.js.map +1 -1
- package/components/axis/style.d.ts +2 -38
- package/components/axis/style.js +28 -24
- package/components/axis/style.js.map +1 -1
- package/components/brush/config.d.ts +3 -0
- package/components/brush/config.js +1 -1
- package/components/brush/config.js.map +1 -1
- package/components/brush/index.d.ts +1 -0
- package/components/brush/index.js +7 -3
- package/components/brush/index.js.map +1 -1
- package/components/crosshair/config.d.ts +2 -0
- package/components/crosshair/config.js +1 -1
- package/components/crosshair/config.js.map +1 -1
- package/components/crosshair/index.d.ts +2 -0
- package/components/crosshair/index.js +8 -1
- package/components/crosshair/index.js.map +1 -1
- package/components/sankey/config.d.ts +2 -0
- package/components/sankey/config.js +1 -1
- package/components/sankey/config.js.map +1 -1
- package/components/sankey/index.d.ts +2 -2
- package/components/sankey/index.js +12 -5
- package/components/sankey/index.js.map +1 -1
- package/components/sankey/types.d.ts +4 -0
- package/components/sankey/types.js +7 -2
- package/components/sankey/types.js.map +1 -1
- package/components/scatter/index.js +2 -0
- package/components/scatter/index.js.map +1 -1
- package/components/timeline/config.d.ts +5 -1
- package/components/timeline/config.js +2 -2
- package/components/timeline/config.js.map +1 -1
- package/components/timeline/index.d.ts +2 -2
- package/components/timeline/index.js +64 -31
- package/components/timeline/index.js.map +1 -1
- package/components/timeline/style.d.ts +6 -1
- package/components/timeline/style.js +40 -46
- package/components/timeline/style.js.map +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/types/style.d.ts +1 -0
- package/types.js +1 -1
- package/utils/text.js +6 -2
- 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 { 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 || 1))\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) {\n lineBleed[0] = config.showEmptySegmentsCorrectPosition ? firstItemHeight / 2 : 0\n }\n\n if ((lastItemEnd - lastItemStart) / fullTimeRange * this._width < lastItemHeight) {\n lineBleed[1] = config.showEmptySegmentsCorrectPosition ? lastItemHeight / 2 : lastItemHeight\n }\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)) || 0\n }\n\n if (config.lineEndIcon) {\n iconBleed[1] = max(data, (d, i) => getIconBleed(d, i, config.lineEndIcon, config.lineEndIconSize, config.lineEndIconArrangement, rowHeight)) || 0\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 || 1))\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 absoluteContentHeight = recordTypes.length * rowHeight\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 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\n const isLineTooShort = config.showEmptySegments && config.showEmptySegmentsCorrectPosition && config.lineCap && (lineLength < lineWidth)\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 arrowHeadLength = a.arrowHeadLength ?? TIMELINE_DEFAULT_ARROW_HEAD_LENGTH\n const isForwardArrow = x1 < x2 && !isX2OutsideTargetLineStart\n const threshold = arrowHeadLength + (isForwardArrow ? targetMargin : 0)\n\n const points = [[x1, y1]] as [number, number][]\n if (Math.abs(x2 - x1) > threshold) {\n if (isForwardArrow) {\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 const verticalOffset = Math.sign(targetLineY - sourceLineY) * (rowHeight / 4)\n points.push([x1, y2 - verticalOffset])\n points.push([x2, y2 - verticalOffset])\n points.push([x2, y2])\n }\n } else {\n const quarterOffset = (y2 - y1) / 4\n points.push([x1, y1 + quarterOffset]) // A dummy point to enable smooth transitions\n points.push([x1, y1 + 3 * quarterOffset]) // 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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"}
|
|
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, TrimMode, 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.labelBackground]: {\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 _labelWidth = 0 // Will be overridden in `get bleed ()`\n private _lineIconBleed: [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 || 1))\n const hasRowIcons = rowLabels.some(l => l.iconHref)\n const maxRowIconSize = 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 const [marginLeft, marginRight] = this._getRowLabelMargin()\n if (config.rowLabelWidth ?? config.labelWidth) {\n // We add a little of extra space to take into account the fact that `trimSVGText` is not always precise\n const tolerance = 1.1\n this._labelWidth = tolerance * (config.rowLabelWidth ?? config.labelWidth) + marginLeft + marginRight\n } else {\n const labels = rowLabels.map(l => this._labelsGroup.append('text')\n .attr('class', s.label)\n .text(l.formattedLabel || '')\n .call(trimSVGText, config.rowMaxLabelWidth ?? config.maxLabelWidth, config.rowLabelTrimMode as TrimMode))\n\n const labelWidth = max(labels.map(l => l.node().getBBox().width)) || 0\n labels.forEach(l => l.remove())\n\n this._labelWidth = labelWidth ? labelWidth + marginLeft + marginRight : 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) {\n lineBleed[0] = config.showEmptySegmentsCorrectPosition ? firstItemHeight / 2 : 0\n }\n\n if ((lastItemEnd - lastItemStart) / fullTimeRange * this._width < lastItemHeight) {\n lineBleed[1] = config.showEmptySegmentsCorrectPosition ? lastItemHeight / 2 : lastItemHeight\n }\n }\n this._lineBleed = lineBleed\n\n // Icon bleed\n const lineIconBleed = [0, 0] as [number, number]\n if (config.lineStartIcon) {\n lineIconBleed[0] = max(data, (d, i) => getIconBleed(d, i, config.lineStartIcon, config.lineStartIconSize, config.lineStartIconArrangement, rowHeight)) || 0\n }\n\n if (config.lineEndIcon) {\n lineIconBleed[1] = max(data, (d, i) => getIconBleed(d, i, config.lineEndIcon, config.lineEndIconSize, config.lineEndIconArrangement, rowHeight)) || 0\n }\n\n this._lineIconBleed = lineIconBleed\n\n return {\n top: 0,\n bottom: 0,\n left: this._labelWidth + lineIconBleed[0] + (hasRowIcons ? maxRowIconSize : 0) + lineBleed[0],\n right: this._scrollBarWidth + this._scrollBarMargin + lineIconBleed[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 || 1))\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('color', l => l.iconColor)\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 [labelMarginLeft, labelMarginRight] = this._getRowLabelMargin()\n const labelOffset = config.rowLabelTextAlign === TextAlign.Center ? this._labelWidth / 2\n : config.rowLabelTextAlign === TextAlign.Left ? this._labelWidth - labelMarginLeft\n : labelMarginRight\n\n const xStart = xRange[0] - this._lineBleed[0] - this._lineIconBleed[0]\n const labelXStart = xStart - labelOffset\n\n // Invisible background rects covering the full label column width for pointer events\n const labelBackgrounds = this._labelsGroup\n .selectAll<SVGRectElement, TimelineRowLabel<Datum>>(`.${s.labelBackground}`)\n .data((config.showRowLabels ?? config.showLabels) ? rowLabels : [], l => l?.label)\n\n const labelBackgroundsEnter = labelBackgrounds.enter().append('rect')\n .attr('class', s.labelBackground)\n .attr('x', xStart - this._labelWidth)\n .attr('y', l => yStart + yOrdinalScale(l.label) * rowHeight)\n .attr('width', this._labelWidth)\n .attr('height', rowHeight)\n\n labelBackgroundsEnter.merge(labelBackgrounds)\n .attr('x', xStart - this._labelWidth)\n .attr('y', l => yStart + yOrdinalScale(l.label) * rowHeight)\n .attr('width', this._labelWidth)\n .attr('height', rowHeight)\n\n labelBackgrounds.exit().remove()\n\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 const maxLabelWidth = (config.rowLabelWidth ?? config.labelWidth) || (config.rowMaxLabelWidth ?? config.maxLabelWidth)\n trimSVGText(labelSelection, maxLabelWidth, config.rowLabelTrimMode as TrimMode)\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._lineIconBleed[0] + this._lineIconBleed[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 absoluteContentHeight = recordTypes.length * rowHeight\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 // Arrowheads can get cut off when they are too close to the edges, so we extend the clip path to account for them.\n // TODO: In rare scenarios this can have unwanted side effects, so we might need to create a dedicated clip path for arrows.\n const maxArrowHeadWidth = max(arrowsData ?? [], a => a.arrowHeadWidth ?? TIMELINE_DEFAULT_ARROW_HEAD_WIDTH) ?? 0\n const clipPathRect = this._clipPath.select('rect')\n smartTransition(clipPathRect, clipPathRect.attr('width') ? duration : 0)\n .attr('x', xStart - maxArrowHeadWidth / 2)\n .attr('width', timelineWidth + maxArrowHeadWidth)\n .attr('height', this._height)\n }\n\n private _getRowLabelMargin (): [number, number] {\n const m = this.config.rowLabelMargin\n return Array.isArray(m) ? m : [m, m]\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 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\n const isLineTooShort = config.showEmptySegments && config.showEmptySegmentsCorrectPosition && config.lineCap && (lineLength < lineWidth)\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 arrowHeadLength = a.arrowHeadLength ?? TIMELINE_DEFAULT_ARROW_HEAD_LENGTH\n const isForwardArrow = x1 < x2 && !isX2OutsideTargetLineStart\n const threshold = arrowHeadLength + (isForwardArrow ? targetMargin : 0)\n\n const points = [[x1, y1]] as [number, number][]\n if (Math.abs(x2 - x1) > threshold) {\n if (isForwardArrow) {\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 const verticalOffset = Math.sign(targetLineY - sourceLineY) * (rowHeight / 4)\n points.push([x1, y2 - verticalOffset])\n points.push([x2, y2 - verticalOffset])\n points.push([x2, y2])\n }\n } else {\n const quarterOffset = (y2 - y1) / 4\n points.push([x1, y1 + quarterOffset]) // A dummy point to enable smooth transitions\n points.push([x1, y1 + 3 * quarterOffset]) // 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","s.label","s.rowIcon","s.labelBackground","s.row","s.rowOdd","s.lineGroup","s.line","s.lineStartIcon","s.lineEndIcon","s.arrow","s"],"mappings":"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"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import type { UnovisCssVariablesDefinition } from "../../types/style";
|
|
1
2
|
export declare const root: string;
|
|
2
|
-
export declare const
|
|
3
|
+
export declare const cssVarDefaults: UnovisCssVariablesDefinition;
|
|
4
|
+
export declare const variables: {
|
|
5
|
+
[x: string]: string;
|
|
6
|
+
};
|
|
3
7
|
export declare const background: string;
|
|
4
8
|
export declare const lines: string;
|
|
5
9
|
export declare const lineGroup: string;
|
|
@@ -16,5 +20,6 @@ export declare const scrollbarHandle: string;
|
|
|
16
20
|
export declare const scrollbarBackground: string;
|
|
17
21
|
export declare const labels: string;
|
|
18
22
|
export declare const label: string;
|
|
23
|
+
export declare const labelBackground: string;
|
|
19
24
|
export declare const rowIcons: string;
|
|
20
25
|
export declare const rowIcon: string;
|
|
@@ -1,51 +1,38 @@
|
|
|
1
|
-
import { css
|
|
1
|
+
import { css } from '@emotion/css';
|
|
2
|
+
import { getCssVarNames, injectGlobalCssVariables } from '../../utils/style.js';
|
|
2
3
|
|
|
3
4
|
const root = css `
|
|
4
5
|
label: timeline-component;
|
|
5
6
|
`;
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
--vis-timeline-row-
|
|
9
|
-
--vis-timeline-row-
|
|
10
|
-
--vis-timeline-
|
|
11
|
-
--vis-timeline-scrollbar-
|
|
12
|
-
--vis-timeline-
|
|
13
|
-
|
|
14
|
-
--vis-timeline-label-
|
|
15
|
-
--vis-timeline-label-
|
|
16
|
-
|
|
17
|
-
--vis-timeline-arrow-
|
|
18
|
-
--vis-timeline-
|
|
19
|
-
|
|
20
|
-
--vis-timeline-
|
|
21
|
-
--vis-timeline-line-
|
|
22
|
-
--vis-timeline-line-stroke-width: 0
|
|
23
|
-
--vis-timeline-line-hover-stroke-
|
|
24
|
-
--vis-timeline-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
--vis-dark-timeline-
|
|
31
|
-
--vis-dark-timeline-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
--vis-dark-timeline-arrow-color: #EFF5F8;
|
|
36
|
-
--vis-dark-timeline-line-hover-stroke-color: #EFF5F8;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
body.theme-dark ${`.${root}`} {
|
|
40
|
-
--vis-timeline-row-even-fill-color: var(--vis-dark-timeline-row-even-fill-color);
|
|
41
|
-
--vis-timeline-row-odd-fill-color: var(--vis-dark-timeline-row-odd-fill-color);
|
|
42
|
-
--vis-timeline-scrollbar-background-color: var(--vis-dark-timeline-scrollbar-background-color);
|
|
43
|
-
--vis-timeline-scrollbar-color: var(--vis-dark-timeline-scrollbar-color);
|
|
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);
|
|
47
|
-
}
|
|
48
|
-
`;
|
|
7
|
+
const cssVarDefaults = {
|
|
8
|
+
'--vis-timeline-row-even-fill-color': '#FFFFFF',
|
|
9
|
+
'--vis-timeline-row-odd-fill-color': '#F7FAFC',
|
|
10
|
+
'--vis-timeline-row-background-opacity': '1',
|
|
11
|
+
'--vis-timeline-scrollbar-background-color': '#E6E9F3',
|
|
12
|
+
'--vis-timeline-scrollbar-color': '#9EA7B8',
|
|
13
|
+
'--vis-timeline-label-font-size': '12px',
|
|
14
|
+
'--vis-timeline-label-color': '#6C778C',
|
|
15
|
+
'--vis-timeline-label-user-select': 'none',
|
|
16
|
+
'--vis-timeline-label-pointer-events': 'all',
|
|
17
|
+
'--vis-timeline-arrow-color': '#6C778C',
|
|
18
|
+
'--vis-timeline-arrow-stroke-width': '1.5',
|
|
19
|
+
'--vis-timeline-cursor': 'default',
|
|
20
|
+
'--vis-timeline-line-color': 'var(--vis-color-main)',
|
|
21
|
+
'--vis-timeline-line-stroke-color': undefined,
|
|
22
|
+
'--vis-timeline-line-stroke-width': '0',
|
|
23
|
+
'--vis-timeline-line-hover-stroke-width': '0',
|
|
24
|
+
'--vis-timeline-line-hover-stroke-color': '#6C778C',
|
|
25
|
+
'--vis-timeline-row-icon-cursor': 'default',
|
|
26
|
+
'--vis-dark-timeline-row-even-fill-color': '#292B34',
|
|
27
|
+
'--vis-dark-timeline-row-odd-fill-color': '#333742',
|
|
28
|
+
'--vis-dark-timeline-scrollbar-background-color': '#292B34',
|
|
29
|
+
'--vis-dark-timeline-scrollbar-color': '#6C778C',
|
|
30
|
+
'--vis-dark-timeline-label-color': '#EFF5F8',
|
|
31
|
+
'--vis-dark-timeline-arrow-color': '#EFF5F8',
|
|
32
|
+
'--vis-dark-timeline-line-hover-stroke-color': '#EFF5F8',
|
|
33
|
+
};
|
|
34
|
+
const variables = getCssVarNames(cssVarDefaults);
|
|
35
|
+
injectGlobalCssVariables(cssVarDefaults, root);
|
|
49
36
|
const background = css `
|
|
50
37
|
label: background;
|
|
51
38
|
`;
|
|
@@ -119,14 +106,21 @@ const label = css `
|
|
|
119
106
|
font-size: var(--vis-timeline-label-font-size);
|
|
120
107
|
fill: var(--vis-timeline-label-color);
|
|
121
108
|
text-anchor: end;
|
|
122
|
-
user-select:
|
|
109
|
+
user-select: var(--vis-timeline-label-user-select);
|
|
110
|
+
pointer-events: var(--vis-timeline-label-pointer-events);
|
|
111
|
+
`;
|
|
112
|
+
const labelBackground = css `
|
|
113
|
+
label: label-background;
|
|
114
|
+
fill: transparent;
|
|
115
|
+
pointer-events: all;
|
|
123
116
|
`;
|
|
124
117
|
const rowIcons = css `
|
|
125
118
|
label: row-icons;
|
|
126
119
|
`;
|
|
127
120
|
const rowIcon = css `
|
|
128
121
|
label: row-icon;
|
|
122
|
+
cursor: var(--vis-timeline-row-icon-cursor);
|
|
129
123
|
`;
|
|
130
124
|
|
|
131
|
-
export { arrow, arrows, background,
|
|
125
|
+
export { arrow, arrows, background, cssVarDefaults, label, labelBackground, labels, line, lineEndIcon, lineGroup, lineStartIcon, lines, root, row, rowIcon, rowIcons, rowOdd, rows, scrollbar, scrollbarBackground, scrollbarHandle, variables };
|
|
132
126
|
//# sourceMappingURL=style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.js","sources":["../../../src/components/timeline/style.ts"],"sourcesContent":["import { css
|
|
1
|
+
{"version":3,"file":"style.js","sources":["../../../src/components/timeline/style.ts"],"sourcesContent":["import { css } from '@emotion/css'\nimport type { UnovisCssVariablesDefinition } from 'types/style'\nimport { getCssVarNames, injectGlobalCssVariables } from 'utils/style'\n\nexport const root = css`\n label: timeline-component;\n`\n\nexport const cssVarDefaults: UnovisCssVariablesDefinition = {\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 '--vis-timeline-label-user-select': 'none',\n '--vis-timeline-label-pointer-events': 'all',\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-color': undefined,\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 '--vis-timeline-row-icon-cursor': 'default',\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\nexport const variables = getCssVarNames(cssVarDefaults)\ninjectGlobalCssVariables(cssVarDefaults, root)\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: var(--vis-timeline-label-user-select);\n pointer-events: var(--vis-timeline-label-pointer-events);\n`\n\nexport const labelBackground = css`\n label: label-background;\n fill: transparent;\n pointer-events: all;\n`\n\nexport const rowIcons = css`\n label: row-icons;\n`\n\nexport const rowIcon = css`\n label: row-icon;\n cursor: var(--vis-timeline-row-icon-cursor);\n`\n"],"names":[],"mappings":";;;AAIO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEY,MAAA,cAAc,GAAiC;AAC1D,IAAA,oCAAoC,EAAE,SAAS;AAC/C,IAAA,mCAAmC,EAAE,SAAS;AAC9C,IAAA,uCAAuC,EAAE,GAAG;AAC5C,IAAA,2CAA2C,EAAE,SAAS;AACtD,IAAA,gCAAgC,EAAE,SAAS;AAE3C,IAAA,gCAAgC,EAAE,MAAM;AACxC,IAAA,4BAA4B,EAAE,SAAS;AACvC,IAAA,kCAAkC,EAAE,MAAM;AAC1C,IAAA,qCAAqC,EAAE,KAAK;AAE5C,IAAA,4BAA4B,EAAE,SAAS;AACvC,IAAA,mCAAmC,EAAE,KAAK;AAE1C,IAAA,uBAAuB,EAAE,SAAS;AAClC,IAAA,2BAA2B,EAAE,uBAAuB;AACpD,IAAA,kCAAkC,EAAE,SAAS;AAC7C,IAAA,kCAAkC,EAAE,GAAG;AACvC,IAAA,wCAAwC,EAAE,GAAG;AAC7C,IAAA,wCAAwC,EAAE,SAAS;AAEnD,IAAA,gCAAgC,EAAE,SAAS;AAE3C,IAAA,yCAAyC,EAAE,SAAS;AACpD,IAAA,wCAAwC,EAAE,SAAS;AACnD,IAAA,gDAAgD,EAAE,SAAS;AAC3D,IAAA,qCAAqC,EAAE,SAAS;AAChD,IAAA,iCAAiC,EAAE,SAAS;AAC5C,IAAA,iCAAiC,EAAE,SAAS;AAC5C,IAAA,6CAA6C,EAAE,SAAS;EACzD;MAEY,SAAS,GAAG,cAAc,CAAC,cAAc,EAAC;AACvD,wBAAwB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;AAEvC,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;;;;;;;;EAQvB;AAEM,MAAM,eAAe,GAAG,GAAG,CAAA,CAAA;;;;EAIjC;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;EAE1B;AAEM,MAAM,OAAO,GAAG,GAAG,CAAA,CAAA;;;;;;;"}
|
package/index.js
CHANGED
|
@@ -58,7 +58,7 @@ export { ChordLabelAlignment } from './components/chord-diagram/types.js';
|
|
|
58
58
|
export { MapPointLabelPosition, MapProjection, MapProjectionKind, TopoJSONMapPointShape } from './components/topojson-map/types.js';
|
|
59
59
|
export { LeafletMapPointShape, LeafletMapRenderer } from './components/leaflet-map/types.js';
|
|
60
60
|
export { GraphFitViewAlignment, GraphLayoutType, GraphLinkArrowStyle, GraphLinkStyle, GraphNodeSelectionHighlightMode, GraphNodeShape } from './components/graph/types.js';
|
|
61
|
-
export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode } from './components/sankey/types.js';
|
|
61
|
+
export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode, SankeyZoomOrigin } from './components/sankey/types.js';
|
|
62
62
|
export { VisControlsOrientation } from './components/vis-controls/types.js';
|
|
63
63
|
export { FreeBrushMode } from './components/free-brush/types.js';
|
|
64
64
|
export { BulletLegendOrientation, BulletShape } from './components/bullet-legend/types.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unovis/ts",
|
|
3
3
|
"description": "Modular data visualization framework for React, Angular, Svelte, Vue, Solid, and vanilla TypeScript or JavaScript",
|
|
4
|
-
"version": "1.6.
|
|
4
|
+
"version": "1.6.6-beta.0",
|
|
5
5
|
"packageManager": "pnpm@10.23.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
package/types/style.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare type UnovisCssVariablesDefinition = Record<string, string | undefined>;
|
package/types.js
CHANGED
|
@@ -19,7 +19,7 @@ export { MapPointLabelPosition, MapProjection, MapProjectionKind, TopoJSONMapPoi
|
|
|
19
19
|
export { LeafletMapPointShape, LeafletMapRenderer } from './components/leaflet-map/types.js';
|
|
20
20
|
export { MapLibreArcticDark, MapLibreArcticLight } from './components/leaflet-map/renderer/map-style.js';
|
|
21
21
|
export { GraphFitViewAlignment, GraphLayoutType, GraphLinkArrowStyle, GraphLinkStyle, GraphNodeSelectionHighlightMode, GraphNodeShape } from './components/graph/types.js';
|
|
22
|
-
export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode } from './components/sankey/types.js';
|
|
22
|
+
export { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyLayout, SankeyNodeAlign, SankeySubLabelPlacement, SankeyZoomMode, SankeyZoomOrigin } from './components/sankey/types.js';
|
|
23
23
|
export { VisControlsOrientation } from './components/vis-controls/types.js';
|
|
24
24
|
export { FreeBrushMode } from './components/free-brush/types.js';
|
|
25
25
|
export { BulletLegendOrientation, BulletShape } from './components/bullet-legend/types.js';
|
package/utils/text.js
CHANGED
|
@@ -3,7 +3,8 @@ import striptags from 'striptags';
|
|
|
3
3
|
import { TextAlign, TrimMode, VerticalAlign } from '../types/text.js';
|
|
4
4
|
import { flatten, isArray, merge } from './data.js';
|
|
5
5
|
import { getTextAnchorFromTextAlign } from '../types/svg.js';
|
|
6
|
-
import {
|
|
6
|
+
import { toPx } from './to-px.js';
|
|
7
|
+
import { UNOVIS_TEXT_DEFAULT, getFontWidthToHeightRatio, UNOVIS_TEXT_HYPHEN_CHARACTER_DEFAULT, UNOVIS_TEXT_SEPARATOR_DEFAULT } from '../styles/index.js';
|
|
7
8
|
|
|
8
9
|
const textAlignToAnchor = (textAlign) => {
|
|
9
10
|
switch (textAlign) {
|
|
@@ -148,6 +149,9 @@ function wrapSVGText(textElement, width, separator = [' ', '-', '.', ',']) {
|
|
|
148
149
|
tspanContent += word;
|
|
149
150
|
});
|
|
150
151
|
}
|
|
152
|
+
// TODO: When we calculate `maxCharacters` we don't take into account that the ellipsis character is wider than the regular characters,
|
|
153
|
+
// which sometimes leads to labels getting cut off. We should rethink the tolerance value and maybe subtract a few characters from `maxCharacters`,
|
|
154
|
+
// but this can be a breaking change and should be done carefully testing all components that use `trimSVGText`
|
|
151
155
|
/**
|
|
152
156
|
* Trims an SVG text element based on the specified max width, trim type, and other options.
|
|
153
157
|
* @param {Selection<SVGTextElement, any, SVGElement, any>} svgTextSelection - The D3 selection of the SVG text element to be trimmed.
|
|
@@ -163,7 +167,7 @@ function trimSVGText(svgTextSelection, maxWidth, trimType, fastMode, fontSize, f
|
|
|
163
167
|
if (maxWidth === void 0) { maxWidth = 50; }
|
|
164
168
|
if (trimType === void 0) { trimType = TrimMode.Middle; }
|
|
165
169
|
if (fastMode === void 0) { fastMode = true; }
|
|
166
|
-
if (fontSize === void 0) { fontSize =
|
|
170
|
+
if (fontSize === void 0) { fontSize = toPx(((_a = window.getComputedStyle(svgTextSelection.node())) === null || _a === void 0 ? void 0 : _a.fontSize) || UNOVIS_TEXT_DEFAULT.fontSize); }
|
|
167
171
|
if (fontWidthToHeightRatio === void 0) { fontWidthToHeightRatio = getFontWidthToHeightRatio(); }
|
|
168
172
|
const text = svgTextSelection.text() || '';
|
|
169
173
|
const textLength = text.length;
|