@unovis/ts 1.6.6-stellar.1 → 1.6.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/components/area/index.js +8 -6
  2. package/components/area/index.js.map +1 -1
  3. package/components/area/style.js +3 -1
  4. package/components/area/style.js.map +1 -1
  5. package/components/axis/config.d.ts +10 -7
  6. package/components/axis/config.js +1 -1
  7. package/components/axis/config.js.map +1 -1
  8. package/components/axis/index.d.ts +1 -0
  9. package/components/axis/index.js +44 -53
  10. package/components/axis/index.js.map +1 -1
  11. package/components/axis/style.d.ts +2 -38
  12. package/components/axis/style.js +28 -24
  13. package/components/axis/style.js.map +1 -1
  14. package/components/brush/config.d.ts +3 -0
  15. package/components/brush/config.js +1 -1
  16. package/components/brush/config.js.map +1 -1
  17. package/components/brush/index.d.ts +1 -0
  18. package/components/brush/index.js +7 -3
  19. package/components/brush/index.js.map +1 -1
  20. package/components/bullet-legend/style.js +2 -1
  21. package/components/bullet-legend/style.js.map +1 -1
  22. package/components/chord-diagram/style.js +3 -2
  23. package/components/chord-diagram/style.js.map +1 -1
  24. package/components/crosshair/config.d.ts +8 -0
  25. package/components/crosshair/config.js +1 -1
  26. package/components/crosshair/config.js.map +1 -1
  27. package/components/crosshair/index.d.ts +2 -0
  28. package/components/crosshair/index.js +18 -5
  29. package/components/crosshair/index.js.map +1 -1
  30. package/components/donut/style.js +2 -1
  31. package/components/donut/style.js.map +1 -1
  32. package/components/flow-legend/style.js +2 -1
  33. package/components/flow-legend/style.js.map +1 -1
  34. package/components/free-brush/style.js +2 -1
  35. package/components/free-brush/style.js.map +1 -1
  36. package/components/graph/index.js +2 -0
  37. package/components/graph/index.js.map +1 -1
  38. package/components/graph/modules/link/style.js +3 -2
  39. package/components/graph/modules/link/style.js.map +1 -1
  40. package/components/graph/modules/node/style.js +3 -2
  41. package/components/graph/modules/node/style.js.map +1 -1
  42. package/components/graph/modules/panel/style.js +2 -1
  43. package/components/graph/modules/panel/style.js.map +1 -1
  44. package/components/grouped-bar/style.js +2 -1
  45. package/components/grouped-bar/style.js.map +1 -1
  46. package/components/leaflet-map/index.js +4 -2
  47. package/components/leaflet-map/index.js.map +1 -1
  48. package/components/plotband/style.js +2 -1
  49. package/components/plotband/style.js.map +1 -1
  50. package/components/plotline/style.js +2 -1
  51. package/components/plotline/style.js.map +1 -1
  52. package/components/sankey/config.d.ts +2 -0
  53. package/components/sankey/config.js +1 -1
  54. package/components/sankey/config.js.map +1 -1
  55. package/components/sankey/index.d.ts +3 -2
  56. package/components/sankey/index.js +18 -8
  57. package/components/sankey/index.js.map +1 -1
  58. package/components/sankey/modules/label.js +8 -2
  59. package/components/sankey/modules/label.js.map +1 -1
  60. package/components/sankey/types.d.ts +4 -0
  61. package/components/sankey/types.js +7 -2
  62. package/components/sankey/types.js.map +1 -1
  63. package/components/scatter/index.d.ts +4 -1
  64. package/components/scatter/index.js +20 -11
  65. package/components/scatter/index.js.map +1 -1
  66. package/components/stacked-bar/index.d.ts +4 -1
  67. package/components/stacked-bar/index.js +17 -6
  68. package/components/stacked-bar/index.js.map +1 -1
  69. package/components/stacked-bar/style.js +2 -1
  70. package/components/stacked-bar/style.js.map +1 -1
  71. package/components/timeline/config.d.ts +8 -2
  72. package/components/timeline/config.js +2 -2
  73. package/components/timeline/config.js.map +1 -1
  74. package/components/timeline/index.d.ts +2 -2
  75. package/components/timeline/index.js +63 -32
  76. package/components/timeline/index.js.map +1 -1
  77. package/components/timeline/style.d.ts +6 -1
  78. package/components/timeline/style.js +40 -46
  79. package/components/timeline/style.js.map +1 -1
  80. package/components/tooltip/style.js +3 -2
  81. package/components/tooltip/style.js.map +1 -1
  82. package/components/topojson-map/index.js +2 -0
  83. package/components/topojson-map/index.js.map +1 -1
  84. package/components/vis-controls/style.js +2 -1
  85. package/components/vis-controls/style.js.map +1 -1
  86. package/core/component/index.d.ts +4 -1
  87. package/core/component/index.js +6 -6
  88. package/core/component/index.js.map +1 -1
  89. package/index.js +3 -2
  90. package/index.js.map +1 -1
  91. package/package.json +10 -8
  92. package/styles/index.js +2 -1
  93. package/styles/index.js.map +1 -1
  94. package/types/misc.js +2 -0
  95. package/types/misc.js.map +1 -0
  96. package/types/style.d.ts +1 -0
  97. package/types.d.ts +1 -0
  98. package/types.js +2 -1
  99. package/types.js.map +1 -1
  100. package/utils/index.d.ts +1 -0
  101. package/utils/index.js +2 -1
  102. package/utils/index.js.map +1 -1
  103. package/utils/style.d.ts +1 -0
  104. package/utils/style.js +8 -2
  105. package/utils/style.js.map +1 -1
  106. package/utils/text.js +6 -2
  107. package/utils/text.js.map +1 -1
  108. package/utils/theme.d.ts +1 -0
  109. package/utils/theme.js +4 -0
  110. package/utils/theme.js.map +1 -0
@@ -12,7 +12,7 @@ import { guid } from '../../utils/misc.js';
12
12
  import '../../types.js';
13
13
  import { TimelineDefaultConfig } from './config.js';
14
14
  import * as style from './style.js';
15
- import { background, rows, arrows, lines, labels, rowIcons, scrollbar, scrollbarBackground, scrollbarHandle, label, rowIcon, row, rowOdd, lineGroup, line, lineStartIcon, lineEndIcon, arrow } from './style.js';
15
+ import { background, rows, arrows, lines, labels, rowIcons, scrollbar, scrollbarBackground, scrollbarHandle, label, rowIcon, labelBackground, row, rowOdd, lineGroup, line, lineStartIcon, lineEndIcon, arrow } from './style.js';
16
16
  import { TIMELINE_DEFAULT_ARROW_HEAD_LENGTH, TIMELINE_DEFAULT_ARROW_HEAD_WIDTH, TIMELINE_DEFAULT_ARROW_MARGIN } from './constants.js';
17
17
  import { getIconBleed } from './utils.js';
18
18
  import { TextAlign } from '../../types/text.js';
@@ -30,6 +30,9 @@ class Timeline extends XYComponentCore {
30
30
  [Timeline.selectors.label]: {
31
31
  wheel: this._onMouseWheel.bind(this),
32
32
  },
33
+ [Timeline.selectors.labelBackground]: {
34
+ wheel: this._onMouseWheel.bind(this),
35
+ },
33
36
  [Timeline.selectors.rows]: {
34
37
  wheel: this._onMouseWheel.bind(this),
35
38
  },
@@ -42,9 +45,8 @@ class Timeline extends XYComponentCore {
42
45
  this._scrollBarMargin = 5;
43
46
  this._maxScroll = 0;
44
47
  this._scrollbarHeight = 0;
45
- this._labelMargin = 5;
46
48
  this._labelWidth = 0; // Will be overridden in `get bleed ()`
47
- this._rowIconBleed = [0, 0];
49
+ this._lineIconBleed = [0, 0];
48
50
  this._lineBleed = [0, 0];
49
51
  /** We define a dedicated clipping path for this component because it needs to behave
50
52
  * differently than the regular XYContainer's clipPath */
@@ -84,26 +86,29 @@ class Timeline extends XYComponentCore {
84
86
  super.setData(data);
85
87
  }
86
88
  get bleed() {
87
- var _a, _b, _c, _d;
89
+ var _a, _b, _c;
88
90
  const { config, datamodel: { data } } = this;
89
91
  const rowLabels = this._getRowLabels(data);
90
92
  const rowHeight = config.rowHeight || (this._height / (rowLabels.length || 1));
91
- const hasIcons = rowLabels.some(l => l.iconHref);
92
- const maxIconSize = max(rowLabels.map(l => l.iconSize || 0));
93
+ const hasRowIcons = rowLabels.some(l => l.iconHref);
94
+ const maxRowIconSize = max(rowLabels.map(l => l.iconSize || 0));
93
95
  // We calculate the longest label width to set the bleed values accordingly
94
96
  if ((_a = config.showRowLabels) !== null && _a !== void 0 ? _a : config.showLabels) {
95
- if ((_b = config.rowLabelWidth) !== null && _b !== void 0 ? _b : config.labelWidth)
96
- this._labelWidth = ((_c = config.rowLabelWidth) !== null && _c !== void 0 ? _c : config.labelWidth) + this._labelMargin;
97
+ const [marginLeft, marginRight] = this._getRowLabelMargin();
98
+ if ((_b = config.rowLabelWidth) !== null && _b !== void 0 ? _b : config.labelWidth) {
99
+ this._labelWidth = ((_c = config.rowLabelWidth) !== null && _c !== void 0 ? _c : config.labelWidth) + marginLeft + marginRight;
100
+ }
97
101
  else {
98
- const longestLabel = rowLabels.reduce((longestLabel, l) => longestLabel.formattedLabel.length > l.formattedLabel.length ? longestLabel : l, rowLabels[0]);
99
- const label$1 = this._labelsGroup.append('text')
100
- .attr('class', label)
101
- .text((longestLabel === null || longestLabel === void 0 ? void 0 : longestLabel.formattedLabel) || '')
102
- .call(trimSVGText, (_d = config.rowMaxLabelWidth) !== null && _d !== void 0 ? _d : config.maxLabelWidth);
103
- const labelWidth = label$1.node().getBBox().width;
104
- label$1.remove();
105
- const tolerance = 1.15; // Some characters are wider than others so we add a little of extra space to take that into account
106
- this._labelWidth = labelWidth ? tolerance * labelWidth + this._labelMargin : 0;
102
+ const labels = rowLabels.map(l => {
103
+ var _a;
104
+ return this._labelsGroup.append('text')
105
+ .attr('class', label)
106
+ .text(l.formattedLabel || '')
107
+ .call(trimSVGText, (_a = config.rowMaxLabelWidth) !== null && _a !== void 0 ? _a : config.maxLabelWidth, config.rowLabelTrimMode);
108
+ });
109
+ const labelWidth = max(labels.map(l => l.node().getBBox().width)) || 0;
110
+ labels.forEach(l => l.remove());
111
+ this._labelWidth = labelWidth ? labelWidth + marginLeft + marginRight : 0;
107
112
  }
108
113
  }
109
114
  // There can be multiple start / end items with the same timestamp, so we need to find the shortest one
@@ -136,23 +141,23 @@ class Timeline extends XYComponentCore {
136
141
  }
137
142
  this._lineBleed = lineBleed;
138
143
  // Icon bleed
139
- const iconBleed = [0, 0];
144
+ const lineIconBleed = [0, 0];
140
145
  if (config.lineStartIcon) {
141
- iconBleed[0] = max(data, (d, i) => getIconBleed(d, i, config.lineStartIcon, config.lineStartIconSize, config.lineStartIconArrangement, rowHeight)) || 0;
146
+ lineIconBleed[0] = max(data, (d, i) => getIconBleed(d, i, config.lineStartIcon, config.lineStartIconSize, config.lineStartIconArrangement, rowHeight)) || 0;
142
147
  }
143
148
  if (config.lineEndIcon) {
144
- iconBleed[1] = max(data, (d, i) => getIconBleed(d, i, config.lineEndIcon, config.lineEndIconSize, config.lineEndIconArrangement, rowHeight)) || 0;
149
+ lineIconBleed[1] = max(data, (d, i) => getIconBleed(d, i, config.lineEndIcon, config.lineEndIconSize, config.lineEndIconArrangement, rowHeight)) || 0;
145
150
  }
146
- this._rowIconBleed = iconBleed;
151
+ this._lineIconBleed = lineIconBleed;
147
152
  return {
148
153
  top: 0,
149
154
  bottom: 0,
150
- left: this._labelWidth + iconBleed[0] + (hasIcons ? maxIconSize : 0) + lineBleed[0],
151
- right: this._scrollBarWidth + this._scrollBarMargin + iconBleed[1] + lineBleed[1],
155
+ left: this._labelWidth + lineIconBleed[0] + (hasRowIcons ? maxRowIconSize : 0) + lineBleed[0],
156
+ right: this._scrollBarWidth + this._scrollBarMargin + lineIconBleed[1] + lineBleed[1],
152
157
  };
153
158
  }
154
159
  _render(customDuration) {
155
- var _a;
160
+ var _a, _b, _c;
156
161
  super._render(customDuration);
157
162
  const { config, datamodel: { data } } = this;
158
163
  const duration = isNumber(customDuration) ? customDuration : config.duration;
@@ -181,6 +186,7 @@ class Timeline extends XYComponentCore {
181
186
  .attr('width', l => l.iconSize)
182
187
  .attr('height', l => l.iconSize)
183
188
  .attr('y', l => yStart + (yOrdinalScale(l.label) + 0.5) * rowHeight - l.iconSize / 2)
189
+ .style('color', l => l.iconColor)
184
190
  .style('opacity', 0);
185
191
  smartTransition(rowIconsEnter.merge(rowIcons), duration)
186
192
  .attr('href', l => l.iconHref)
@@ -196,11 +202,28 @@ class Timeline extends XYComponentCore {
196
202
  // Labels
197
203
  const labels = this._labelsGroup.selectAll(`.${label}`)
198
204
  .data(((_a = config.showRowLabels) !== null && _a !== void 0 ? _a : config.showLabels) ? rowLabels : [], l => l === null || l === void 0 ? void 0 : l.label);
205
+ const [labelMarginLeft, labelMarginRight] = this._getRowLabelMargin();
199
206
  const labelOffset = config.rowLabelTextAlign === TextAlign.Center ? this._labelWidth / 2
200
- : config.rowLabelTextAlign === TextAlign.Left ? this._labelWidth
201
- : this._labelMargin;
202
- const xStart = xRange[0] - this._rowIconBleed[0] - this._lineBleed[0];
207
+ : config.rowLabelTextAlign === TextAlign.Left ? this._labelWidth - labelMarginLeft
208
+ : labelMarginRight;
209
+ const xStart = xRange[0] - this._lineBleed[0] - this._lineIconBleed[0];
203
210
  const labelXStart = xStart - labelOffset;
211
+ // Invisible background rects covering the full label column width for pointer events
212
+ const labelBackgrounds = this._labelsGroup
213
+ .selectAll(`.${labelBackground}`)
214
+ .data(((_b = config.showRowLabels) !== null && _b !== void 0 ? _b : config.showLabels) ? rowLabels : [], l => l === null || l === void 0 ? void 0 : l.label);
215
+ const labelBackgroundsEnter = labelBackgrounds.enter().append('rect')
216
+ .attr('class', labelBackground)
217
+ .attr('x', xStart - this._labelWidth)
218
+ .attr('y', l => yStart + yOrdinalScale(l.label) * rowHeight)
219
+ .attr('width', this._labelWidth)
220
+ .attr('height', rowHeight);
221
+ labelBackgroundsEnter.merge(labelBackgrounds)
222
+ .attr('x', xStart - this._labelWidth)
223
+ .attr('y', l => yStart + yOrdinalScale(l.label) * rowHeight)
224
+ .attr('width', this._labelWidth)
225
+ .attr('height', rowHeight);
226
+ labelBackgrounds.exit().remove();
204
227
  const labelsEnter = labels.enter().append('text')
205
228
  .attr('class', label)
206
229
  .attr('x', labelXStart)
@@ -211,7 +234,8 @@ class Timeline extends XYComponentCore {
211
234
  .each((label, i, els) => {
212
235
  var _a, _b;
213
236
  const labelSelection = select(els[i]);
214
- trimSVGText(labelSelection, ((_a = config.rowLabelWidth) !== null && _a !== void 0 ? _a : config.labelWidth) || ((_b = config.rowMaxLabelWidth) !== null && _b !== void 0 ? _b : config.maxLabelWidth));
237
+ const maxLabelWidth = ((_a = config.rowLabelWidth) !== null && _a !== void 0 ? _a : config.labelWidth) || ((_b = config.rowMaxLabelWidth) !== null && _b !== void 0 ? _b : config.maxLabelWidth);
238
+ trimSVGText(labelSelection, maxLabelWidth, config.rowLabelTrimMode);
215
239
  // Apply custom label style if it has been provided
216
240
  const customStyle = getValue(label, config.rowLabelStyle);
217
241
  if (!isPlainObject(customStyle))
@@ -229,8 +253,8 @@ class Timeline extends XYComponentCore {
229
253
  .style('opacity', 0)
230
254
  .remove();
231
255
  // Row background rects
232
- const timelineWidth = xRange[1] - xRange[0] + this._rowIconBleed[0] + this._rowIconBleed[1] + this._lineBleed[0] + this._lineBleed[1];
233
- const numRows = Math.max(Math.floor(yHeight / rowHeight), numRowLabels);
256
+ const timelineWidth = xRange[1] - xRange[0] + this._lineIconBleed[0] + this._lineIconBleed[1] + this._lineBleed[0] + this._lineBleed[1];
257
+ const numRows = config.rowFillEmptySpace ? Math.max(Math.floor(yHeight / rowHeight), numRowLabels) : numRowLabels;
234
258
  const recordTypes = Array(numRows).fill(null).map((_, i) => rowLabels[i]);
235
259
  const rects = this._rowsGroup.selectAll(`.${row}`)
236
260
  .data(recordTypes);
@@ -360,12 +384,19 @@ class Timeline extends XYComponentCore {
360
384
  .attr('ry', this._scrollBarWidth / 2);
361
385
  this._updateScrollPosition(0);
362
386
  // Clip path
387
+ // Arrowheads can get cut off when they are too close to the edges, so we extend the clip path to account for them.
388
+ // TODO: In rare scenarios this can have unwanted side effects, so we might need to create a dedicated clip path for arrows.
389
+ const maxArrowHeadWidth = (_c = max(arrowsData !== null && arrowsData !== void 0 ? arrowsData : [], a => { var _a; return (_a = a.arrowHeadWidth) !== null && _a !== void 0 ? _a : TIMELINE_DEFAULT_ARROW_HEAD_WIDTH; })) !== null && _c !== void 0 ? _c : 0;
363
390
  const clipPathRect = this._clipPath.select('rect');
364
391
  smartTransition(clipPathRect, clipPathRect.attr('width') ? duration : 0)
365
- .attr('x', xStart)
366
- .attr('width', timelineWidth)
392
+ .attr('x', xStart - maxArrowHeadWidth / 2)
393
+ .attr('width', timelineWidth + maxArrowHeadWidth)
367
394
  .attr('height', this._height);
368
395
  }
396
+ _getRowLabelMargin() {
397
+ const m = this.config.rowLabelMargin;
398
+ return Array.isArray(m) ? m : [m, m];
399
+ }
369
400
  _getLineLength(d, i) {
370
401
  var _a, _b;
371
402
  const { config, xScale } = this;
@@ -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":";;;;;;;;;;;;;;;;;;;;AAmCM,MAAO,QAAgB,SAAQ,eAAsD,CAAA;AA4CzF,IAAA,WAAA,CAAa,MAAuC,EAAA;AAClD,QAAA,KAAK,EAAE,CAAA;QA3CC,IAAc,CAAA,cAAA,GAAG,qBAAuD,CAAA;AAC3E,QAAA,IAAA,CAAA,MAAM,GAAmC,IAAI,CAAC,cAAc,CAAA;AAEnE,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG;gBAC/B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG;gBAC1B,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG;gBACzB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;AACD,YAAA,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG;gBACzB,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;AACrC,aAAA;SACF,CAAA;QAWO,IAAe,CAAA,eAAA,GAAG,CAAC,CAAA;QACnB,IAAe,CAAA,eAAA,GAAG,CAAC,CAAA;QACnB,IAAgB,CAAA,gBAAA,GAAG,CAAC,CAAA;QACpB,IAAU,CAAA,UAAA,GAAG,CAAC,CAAA;QACd,IAAgB,CAAA,gBAAA,GAAG,CAAC,CAAA;QACpB,IAAY,CAAA,YAAA,GAAG,CAAC,CAAA;AAChB,QAAA,IAAA,CAAA,WAAW,GAAG,CAAC,CAAA;AACf,QAAA,IAAA,CAAA,aAAa,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACxC,QAAA,IAAA,CAAA,UAAU,GAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE7C;AACyD;QACjD,IAAW,CAAA,WAAA,GAAG,IAAI,EAAE,CAAA;AAK1B,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;;QAGlC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,UAAY,CAAC,CAAA;;QAGpE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;AACvC,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;AAC/B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;;AAG7B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,IAAM,CAAC;aACvD,KAAK,CAAC,WAAW,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,WAAW,CAAG,CAAA,CAAA,CAAC,CAAA;AAClD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,MAAQ,CAAC;aAC3D,KAAK,CAAC,WAAW,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,WAAW,CAAG,CAAA,CAAA,CAAC,CAAA;AAClD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,KAAO,CAAC;aACzD,KAAK,CAAC,WAAW,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAC,WAAW,CAAG,CAAA,CAAA,CAAC,CAAA;QAClD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,MAAQ,CAAC,CAAA;QAC9D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,QAAU,CAAC,CAAA;QAClE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,SAAW,CAAC,CAAA;;QAGpE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5D,aAAA,IAAI,CAAC,OAAO,EAAEC,mBAAqB,CAAC,CAAA;QAEvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AACxD,aAAA,IAAI,CAAC,OAAO,EAAEC,eAAiB,CAAC,CAAA;;QAGnC,MAAM,aAAa,GAAG,IAAI,EAA2B;AAClD,aAAA,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE/C,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;KAC1C;AAEM,IAAA,SAAS,CAAE,MAAsC,EAAA;AACtD,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;KACxB;AAEM,IAAA,OAAO,CAAE,IAAa,EAAA;AAC3B,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;KACpB;AAED,IAAA,IAAI,KAAK,GAAA;;QACP,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAA;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAC1C,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;AAC9E,QAAA,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;AAChD,QAAA,MAAM,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAA;;QAG5D,IAAI,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,mCAAI,MAAM,CAAC,UAAU,EAAE;AAC7C,YAAA,IAAI,MAAA,MAAM,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,CAAA;AAC5H,iBAAA;AACH,gBAAA,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,KAAK,YAAY,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;gBACzJ,MAAMC,OAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC;AAC3C,qBAAA,IAAI,CAAC,OAAO,EAAEC,KAAO,CAAC;qBACtB,IAAI,CAAC,CAAA,YAAY,KAAZ,IAAA,IAAA,YAAY,KAAZ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,YAAY,CAAE,cAAc,KAAI,EAAE,CAAC;AACxC,qBAAA,IAAI,CAAC,WAAW,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,aAAa,CAAC,CAAA;gBAErE,MAAM,UAAU,GAAGD,OAAK,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,CAAA;gBAC/CA,OAAK,CAAC,MAAM,EAAE,CAAA;AAEd,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAA;AACtB,gBAAA,IAAI,CAAC,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;AAC/E,aAAA;AACF,SAAA;;QAGD,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAA;QACjF,MAAM,sBAAsB,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACvF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC/E,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;AAEpC,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACjG,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,YAAY,CAAC,CAAA;QAC/G,MAAM,sBAAsB,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;AACvF,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAA;AAC9E,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAA;;AAGlC,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAA;QAC5C,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,OAAO,IAAI,SAAS,IAAI,QAAQ,EAAE;AACvE,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;YACnE,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;AAClH,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;YAChE,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;AAC7G,YAAA,MAAM,aAAa,GAAG,WAAW,GAAG,cAAc,CAAA;AAClD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAA;AAC9E,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;AAE3E,YAAA,IAAI,CAAC,YAAY,GAAG,cAAc,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe,EAAE;AACnF,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gCAAgC,GAAG,eAAe,GAAG,CAAC,GAAG,CAAC,CAAA;AACjF,aAAA;AAED,YAAA,IAAI,CAAC,WAAW,GAAG,aAAa,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE;AAChF,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,gCAAgC,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc,CAAA;AAC7F,aAAA;AACF,SAAA;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;;AAG3B,QAAA,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAqB,CAAA;QAC5C,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,YAAA,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAA;AACxJ,SAAA;QAED,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,YAAA,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,sBAAsB,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,CAAA;AAClJ,SAAA;AAED,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;QAE9B,OAAO;AACL,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;AACnF,YAAA,KAAK,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;SAClF,CAAA;KACF;AAED,IAAA,OAAO,CAAE,cAAuB,EAAA;;AAC9B,QAAA,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;QAC7B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,IAAI,CAAA;AAC5C,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;AAC1C,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,CAAA;AACrC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,OAAO,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,CAAA;QAErE,MAAM,aAAa,GAAG,YAAY,EAAkB;AACjD,aAAA,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AACnC,aAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAEtC,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAA;;AAG/E,QAAA,IAAI,CAAC,WAAW;AACb,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5B,aAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;;AAGrB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAyC,CAAI,CAAA,EAAAE,OAAS,EAAE,CAAC;aACpG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,KAAA,IAAA,IAAD,CAAC,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAD,CAAC,CAAE,KAAK,CAAC,CAAA;QAEzD,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AACjD,aAAA,IAAI,CAAC,OAAO,EAAEA,OAAS,CAAC;AACxB,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;aAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;aAC/B,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpF,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEtB,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;aACrD,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;AAC7B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACZ,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,SAAS,GAAG,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;aACpF,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;aAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC;aAC/B,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AAChC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,eAAe,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC;AACvC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAA;;AAGX,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAA0C,CAAI,CAAA,EAAAD,KAAO,EAAE,CAAC;AAC/F,aAAA,IAAI,CAAC,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,UAAU,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAD,IAAA,IAAA,CAAC,KAAD,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAC,CAAE,KAAK,CAAC,CAAA;AAEpF,QAAA,MAAM,WAAW,GAAG,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC;AACtF,cAAE,MAAM,CAAC,iBAAiB,KAAK,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW;AAC9D,kBAAE,IAAI,CAAC,YAAY,CAAA;QAEvB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACrE,QAAA,MAAM,WAAW,GAAG,MAAM,GAAG,WAAW,CAAA;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,aAAA,IAAI,CAAC,OAAO,EAAEA,KAAO,CAAC;AACtB,aAAA,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC;AACnE,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC;aAC3C,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;aAC3B,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,KAAI;;YACtB,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAM,CAAA,EAAA,GAAA,MAAM,CAAC,gBAAgB,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;;YAG7H,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,CAAA;AACzD,YAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;gBAAE,OAAM;AAEvC,YAAA,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACvD,gBAAA,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAClC,aAAA;AACH,SAAC,CAAC;aACD,KAAK,CAAC,aAAa,EAAE,iBAAiB,CAAC,MAAM,CAAC,iBAA8B,CAAC,CAAC,CAAA;AAEjF,QAAA,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC;AACpC,aAAA,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;aACtB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,IAAI,SAAS,CAAC;AACnE,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC;AACrC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAA;;AAGX,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;AACrI,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;QACvE,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;AACzE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAyB,CAAI,CAAA,EAAAE,GAAK,EAAE,CAAC;aACzE,IAAI,CAAC,WAAW,CAAC,CAAA;QAEpB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5C,aAAA,IAAI,CAAC,OAAO,EAAEA,GAAK,CAAC;AACpB,aAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AACjB,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;AAC3C,aAAA,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AACzB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;AACxC,aAAA,OAAO,CAACC,MAAQ,EAAE,MAAM,CAAC,oBAAoB,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAE7E,QAAA,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC;AACnC,aAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AACjB,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC;AAC3C,aAAA,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AACzB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC;AACpC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAA;;AAGX,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+C,CAAI,CAAA,EAAAC,SAAW,EAAE,CAAC;AACtG,aAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAkC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;QAExE,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AACzC,aAAA,IAAI,CAAC,OAAO,EAAEA,SAAW,CAAC;AAC1B,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;;AAC1B,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,0BAA0B,CAAC;kBAC/D,MAAM,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC;AAC3D,kBAAE,MAAM,CAAC,0BAA0B,CAAA;AACrC,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,aAAa,aAAb,aAAa,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAb,aAAa,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,IAAI,EAAE,CAAA,EAAA,GAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3E,YAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAK,EAAA,EAAA,CAAC,GAAG,CAAA;AAChC,SAAC,CAAC,CAAA;AAEJ,QAAA,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AACtB,aAAA,IAAI,CAAC,OAAO,EAAEC,IAAM,CAAC;AACrB,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,aAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAA;AAEhD,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,aAAe,CAAC,CAAA;AACvD,QAAA,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,WAAa,CAAC,CAAA;QAErD,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAC3C,QAAA,eAAe,CAAC,WAAW,EAAE,QAAQ,CAAC;aACnC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,GAAG,CAAC;AACxE,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEtB,MAAM,yBAAyB,GAAG,WAAW,CAAC,SAAS,CAAkD,CAAA,CAAA,EAAIF,IAAM,CAAA,CAAE,CAAC;aACnH,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;AACjB,QAAA,eAAe,CAAC,yBAAyB,EAAE,QAAQ,CAAC;AACjD,aAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3F,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI,EAAA,IAAA,EAAA,CAAA,CAAC,OAAA,SAAS,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA,EAAA,CAAC;AAC9E,aAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAA;QAEhD,WAAW,CAAC,SAAS,CAAiD,CAAA,CAAA,EAAIC,aAAe,EAAE,CAAC;aACzF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;aAC7D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAA;AACjC,YAAA,MAAM,eAAe,GAAG,CAAC,CAAC,qBAAqB,CAAA;YAC/C,MAAM,MAAM,GAAG,eAAe,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC;AACvD,kBAAE,eAAe,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC;sBACpD,CAAC,QAAQ,CAAA;AACf,YAAA,OAAO,MAAM,CAAA;AACf,SAAC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC1D,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;aACpC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;aACrC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,CAAA;QAEzC,WAAW,CAAC,SAAS,CAAiD,CAAA,CAAA,EAAIC,WAAa,EAAE,CAAC;aACvF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACd,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;aAC3D,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;AAClB,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,gBAAgB,CAAA;AACrC,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAA;AAC/B,YAAA,MAAM,eAAe,GAAG,CAAC,CAAC,mBAAmB,CAAA;YAC7C,MAAM,MAAM,GAAG,eAAe,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ;AAC/D,kBAAE,eAAe,KAAK,WAAW,CAAC,MAAM,GAAG,CAAC,QAAQ,GAAG,CAAC;sBACpD,CAAC,CAAA;YACP,OAAO,UAAU,GAAG,MAAM,CAAA;AAC5B,SAAC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;aACxD,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;aAClC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;aACnC,KAAK,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAA;AAEvC,QAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAmC,CAAA;AAC/D,QAAA,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC;AACjC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;aACnB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;;AAC1B,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,yBAAyB,CAAC;kBAC9D,MAAM,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC;AAC1D,kBAAE,MAAM,CAAC,yBAAyB,CAAA;AACpC,YAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAA,EAAA,GAAA,aAAa,aAAb,aAAa,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAb,aAAa,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,IAAI,EAAE,CAAA,EAAA,GAAA,aAAa,KAAA,IAAA,IAAb,aAAa,KAAb,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,aAAa,CAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3E,YAAA,OAAO,CAAa,UAAA,EAAA,CAAC,CAAK,EAAA,EAAA,CAAC,GAAG,CAAA;AAChC,SAAC,CAAC;AACD,aAAA,MAAM,EAAE,CAAA;;AAGX,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,CAAA;AAC1E,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAA2D,CAAI,CAAA,EAAAC,KAAO,EAAE,CAAC;AAChH,aAAA,IAAI,CAAC,UAAU,KAAA,IAAA,IAAV,UAAU,KAAA,KAAA,CAAA,GAAV,UAAU,GAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;QAEpC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9C,aAAA,IAAI,CAAC,OAAO,EAAEA,KAAO,CAAC;AACtB,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEtB,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;AACjD,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAI;;YAAC,OAAA,iBAAiB,CACjC,CAAC,CAAC,OAAO,EACT,CAAA,EAAA,GAAA,CAAC,CAAC,eAAe,mCAAI,kCAAkC,EACvD,MAAA,CAAC,CAAC,cAAc,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,iCAAiC,CACtD,CAAA;SAAA,CAAC;AACD,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAEtB,QAAA,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,QAAQ,CAAC;AACrC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAA;;AAGX,QAAA,MAAM,qBAAqB,GAAG,WAAW,CAAC,MAAM,GAAG,SAAS,CAAA;QAC5D,IAAI,CAAC,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,qBAAqB,IAAI,CAAC,CAAA;AACtE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,EAAE,CAAC,CAAC,CAAA;AAE9D,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAK,EAAA,EAAA,MAAM,GAAG,CAAC;AAChF,aAAA,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAE3C,QAAA,IAAI,CAAC,oBAAoB;AACtB,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;AACnC,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;aAC5B,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;aACpC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAA;AAEvC,QAAA,IAAI,CAAC,gBAAgB;AAClB,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC;AACnC,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC;aACrC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;aACpC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAA;AAEvC,QAAA,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;;QAG7B,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAClD,QAAA,eAAe,CAAC,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;AACrE,aAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AACjB,aAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;KAChC;IAEO,cAAc,CAAE,CAAQ,EAAE,CAAS,EAAA;;AACzC,QAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAC/B,QAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAA,MAAM,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA;AAEzE,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AACjD,QAAA,OAAO,UAAU,CAAA;KAClB;AAEO,IAAA,aAAa,CAAE,CAAQ,EAAE,CAAS,EAAE,SAAiB,EAAA;;AAC3D,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,OAAO,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;KACnF;IAEO,gBAAgB,CAAE,CAAQ,EAAE,CAAS,EAAA;;AAC3C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,OAAO,MAAA,SAAS,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA;KAClE;AAEO,IAAA,iBAAiB,CAAE,IAAa,EAAE,eAA6C,EAAE,SAAiB,EAAA;QACxG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;QAElC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;;AACvB,YAAA,MAAM,EAAE,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA;AACvC,gBAAA,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACpD,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEX,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAA;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAE5C,IAAI,UAAU,GAAG,CAAC,EAAE;AAClB,gBAAA,OAAO,CAAC,IAAI,CAAC,kFAAkF,CAAC,CAAA;AACjG,aAAA;AAED,YAAA,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB;AAClD,kBAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,SAAS,GAAG,CAAC,EAAE,UAAU,CAAC;kBACpD,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AAE3B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC3C,MAAM,CAAC,GAAG,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,SAAS,GAAG,SAAS,IAAI,CAAC,CAAA;AAEtG,YAAA,MAAM,cAAc,GAAG,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,gCAAgC,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,GAAG,SAAS,CAAC,CAAA;AACxI,YAAA,MAAM,OAAO,GAAG,cAAc,GAAG,EAAE,mBAAmB,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAE5E,OACK,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,CAAC,CACJ,EAAA,EAAA,GAAG,EAAE,EAAE,EACP,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,OAAO,EACnB,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,SAAS,EAClB,gBAAgB,EAAE,mBAAmB,EACrC,cAAc,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,EACtE,YAAY,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,SAAS,EAClE,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAC3D,aAAa,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,EACvD,qBAAqB,EAAE,CAAA,EAAA,GAAA,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,wBAAwB,EAAE,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,WAAW,CAAC,OAAO,EAC7F,mBAAmB,EAAE,CAAA,EAAA,GAAA,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,EAAE,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,WAAW,CAAC,OAAO,EAC1F,CAAA,CAAA;AACH,SAAC,CAAC,CAAA;KACH;AAEO,IAAA,kBAAkB,CAAE,IAAa,EAAE,eAA6C,EAAE,SAAiB,EAAA;;AACzG,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,MAAM,UAAU,GAAiD,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,GAAG,CAAC,CAAC,IAAG;;AACtF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAA;AAC/F,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAA;AAC/F,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,CAAA;AACxC,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,CAAA;AAExC,YAAA,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;AAC9B,gBAAA,OAAO,CAAC,IAAI,CAAC,sEAAsE,EAAE,CAAC,CAAC,CAAA;AACvF,gBAAA,OAAO,SAAS,CAAA;AACjB,aAAA;AAED,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAA;AAChH,YAAA,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAA;AAChH,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;AAClF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,CAAC,CAAA;AAElF,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO;kBACjB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;AACxB,kBAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,KAC/G,CAAA,EAAA,GAAA,CAAC,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAA;YAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;AACzE,YAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,OAAO,KAAK,gBAAgB,GAAG,eAAe,CAAC,CAAA;AAC/G,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,IAAI,oBAAoB,GAAG,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AACzI,YAAA,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,eAAe,KAAK,CAAA,EAAA,GAAA,CAAC,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,CAAC,CAAA;AAC5F,YAAA,MAAM,0BAA0B,GAAG,CAAC,EAAE,GAAG,eAAe,MAAM,EAAE,GAAG,eAAe,CAAC,CAAA;;YAGnF,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,6BAA6B,CAAA;YAC1E,MAAM,YAAY,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,6BAA6B,CAAA;YAC1E,MAAM,EAAE,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,CAAC,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,CAAC,GAAG,YAAY,CAAA;YAC1I,MAAM,EAAE,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,eAAe,GAAG,CAAC,GAAG,YAAY,GAAG,WAAW,GAAG,eAAe,GAAG,CAAC,GAAG,YAAY,CAAA;YAC1I,MAAM,eAAe,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,kCAAkC,CAAA;YAC/E,MAAM,cAAc,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,0BAA0B,CAAA;AAC7D,YAAA,MAAM,SAAS,GAAG,eAAe,IAAI,cAAc,GAAG,YAAY,GAAG,CAAC,CAAC,CAAA;YAEvE,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAuB,CAAA;YAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,EAAE;AACjC,gBAAA,IAAI,cAAc,EAAE;AAClB,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,WAAW,IAAI,CAAC,CAAC,CAAC,CAAA;oBACzC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAA;oBAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;AAC9C,iBAAA;AAAM,qBAAA;AACL,oBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAA;oBAC7E,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,CAAA;oBACtC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC,CAAC,CAAA;oBACtC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AACtB,iBAAA;AACF,aAAA;AAAM,iBAAA;gBACL,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACnC,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,CAAC,CAAA;AACrC,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;gBACzC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AACtB,aAAA;AAED,YAAA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACK,CAAC,CAAA,EAAA,EACJ,OAAO,EAAE,MAAM,EAChB,CAAA,CAAA;AACH,SAAC,CAAE,CAAA,MAAM,CAAC,OAAO,CAAC,CAAA;AAClB,QAAA,OAAO,UAAU,CAAA;KAClB;AAGO,IAAA,YAAY,CAClB,SAA+K,EAAA;AAE/K,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,SAAS;aACN,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC;aACtC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;aAC9B,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;KAC1D;AAEO,IAAA,gBAAgB,CAAE,KAAiC,EAAA;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/C,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;KAC3F;IAEO,aAAa,CAAE,CAAU,EAAE,KAAiB,EAAA;;AAClD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QAEvB,IAAI,CAAC,qBAAqB,CAAC,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,MAAM,CAAC,CAAA;AACzC,QAAA,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU;AAAE,YAAA,KAAK,aAAL,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAL,KAAK,CAAE,cAAc,EAAE,CAAA;QAE/F,CAAA,EAAA,GAAA,MAAM,CAAC,QAAQ,MAAf,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAM,EAAY,IAAI,CAAC,eAAe,CAAC,CAAA;;AAGvC,QAAA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;AAChC,QAAA,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAA;KAC9B;AAEO,IAAA,qBAAqB,CAAE,IAAY,EAAA;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,QAAA,IAAI,CAAC,eAAe,IAAI,IAAI,CAAA;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;AACxD,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;AAEtE,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,YAAA,EAAe,IAAI,CAAC,eAAe,CAAA,CAAA,CAAG,CAAC,CAAA;AACxE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAe,YAAA,EAAA,CAAC,IAAI,CAAC,eAAe,CAAA,CAAA,CAAG,CAAC,CAAA;AAC3E,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAe,YAAA,EAAA,CAAC,IAAI,CAAC,eAAe,CAAA,CAAA,CAAG,CAAC,CAAA;AAC1E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAe,YAAA,EAAA,CAAC,IAAI,CAAC,eAAe,CAAA,CAAA,CAAG,CAAC,CAAA;AAC5E,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,CAAe,YAAA,EAAA,CAAC,IAAI,CAAC,eAAe,CAAA,CAAA,CAAG,CAAC,CAAA;AAC9E,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,CAAe,YAAA,EAAA,CAAC,IAAI,CAAC,eAAe,CAAA,CAAA,CAAG,CAAC,CAAA;QAC5E,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA;QAC3G,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;KACnD;IAEO,aAAa,CAAE,CAAQ,EAAE,CAAS,EAAA;;QACxC,OAAO,SAAS,CAAC,CAAC,EAAE,MAAA,IAAI,CAAC,MAAM,CAAC,OAAO,mCAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;KACzE;AAEO,IAAA,aAAa,CAAE,IAAa,EAAA;AAClC,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,SAAS,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAA,EAAG,CAAC,GAAG,CAAC,EAAE,CAAA,EAAA,CAAC,CAAA;QAE5G,MAAM,SAAS,GAA8B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAI;;AAC3F,YAAA,MAAM,IAAI,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;YACjD,OAAO;AACL,gBAAA,KAAK,EAAE,GAAG;AACV,gBAAA,cAAc,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,mCAAI,GAAG;AACrE,gBAAA,QAAQ,EAAE,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,IAAI;AACpB,gBAAA,QAAQ,EAAE,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,IAAI;AACpB,gBAAA,SAAS,EAAE,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,KAAK;AACtB,gBAAA,IAAI,EAAE,KAAK;aACZ,CAAA;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,OAAO,SAAS,CAAA;KACjB;;IAGD,cAAc,GAAA;AACZ,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAClC,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;QAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAA,OAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAA,SAAS,CAAC,CAAC,EAAE,CAAA,EAAA,GAAA,MAAM,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC,CAAA,EAAA,CAAC,CAAA;AACtI,QAAA,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KAClB;;AAjnBM,QAAS,CAAA,SAAA,GAAGC,KAAC;;;;"}
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 this._labelWidth = (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 = config.rowFillEmptySpace ? Math.max(Math.floor(yHeight / rowHeight), numRowLabels) : 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 globalStyles: void;
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;