@hpcc-js/timeline 3.2.3 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +1 -1
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +9 -9
- package/src/ReactAxisGanttSeries.ts +3 -0
- package/src/ReactGantt.ts +78 -5
- package/types/ReactAxisGanttSeries.d.ts +2 -0
- package/types/ReactGantt.d.ts +6 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/MiniGantt.ts","../src/ReactGantt.ts","../src/ReactAxisGantt.ts","../src/ReactAxisGanttSeries.ts","../src/ReactTimeline.ts","../src/ReactTimelineSeries.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { ITooltip } from \"@hpcc-js/api\";\nimport { Axis } from \"@hpcc-js/chart\";\nimport { d3Event, EntityPin, EntityRect, local as d3Local, select as d3Select, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleBand as d3ScaleBand } from \"d3-scale\";\nimport { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from \"d3-zoom\";\n\nimport \"../src/MiniGantt.css\";\n\nexport class MiniGantt extends SVGWidget {\n protected tlAxis: Axis;\n protected brAxis: Axis;\n protected verticalBands;\n protected _zoom;\n protected gUpperContent;\n protected gUpperAxis;\n protected gMiddleContent;\n protected gLowerAxis;\n protected gLowerContent;\n private localRect = d3Local<EntityRect>();\n private localEntityPin = d3Local<EntityPin>();\n private tooltipFormatter: (date: Date) => string;\n private _dateCache;\n\n protected rootExtent;\n protected _title_idx = 0;\n protected _startDate_idx = 1;\n protected _endDate_idx = 2;\n protected _icon_idx = -1;\n protected _color_idx = -1;\n protected _yoffset_idx = -1;\n\n constructor() {\n super();\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n this.tooltipHTML((d: any) => `<center>${d[this._title_idx]}</center><br>${this.tooltipFormatter(this.brAxis.parse(d[this._startDate_idx]))} -> ${this.tooltipFormatter(this.brAxis.parse(d[this._endDate_idx]))}`);\n\n this.tlAxis = new Axis()\n .type(\"time\")\n ;\n this.brAxis = new Axis()\n .type(\"time\")\n ;\n this.verticalBands = d3ScaleBand()\n .paddingOuter(0.2)\n .paddingInner(0.2)\n ;\n }\n\n isHorizontal(): boolean {\n return this.orientation() === \"horizontal\";\n }\n\n fullExtent() {\n const data = [...this.data().map(d => d[this._startDate_idx]), ...this.data().filter(d => !!d[this._endDate_idx]).map(d => d[this._endDate_idx])];\n return d3Extent(data);\n }\n\n extent() {\n const extent = this.rootExtent ? [this.rootExtent[1], this.rootExtent[2]] : this.fullExtent();\n if (extent[0] !== undefined && extent[1] !== undefined) {\n if (extent[0] === extent[1] || this.centerOnMostRecent()) {\n const parser = d3TimeParse(this.timePattern());\n const formatter = d3TimeFormat(this.timePattern());\n const date1 = parser(extent[0]);\n const date2 = parser(extent[1]);\n if (extent[0] === extent[1]) {\n extent[0] = formatter(new Date(date1.setFullYear(date1.getFullYear() - 1)));\n extent[1] = formatter(new Date(date1.setFullYear(date1.getFullYear() + 2)));\n } else {\n const time1 = date1.getTime();\n const timeDiff = date2.getTime() - time1;\n extent[0] = formatter(date1);\n extent[1] = formatter(new Date(time1 + (timeDiff * 2)));\n }\n }\n }\n return extent;\n }\n\n dataStartPos(d) {\n if (typeof this._dateCache[d[this._startDate_idx]] !== \"undefined\") {\n return this._dateCache[d[this._startDate_idx]];\n }\n const pos = this.brAxis.scalePos(d[this._startDate_idx]);\n this._dateCache[d[this._startDate_idx]] = pos;\n return pos;\n }\n\n dataEndPos(d) {\n if (typeof this._dateCache[d[this._endDate_idx]] !== \"undefined\") {\n return this._dateCache[d[this._endDate_idx]];\n }\n const pos = this.brAxis.scalePos(d[this._endDate_idx]);\n this._dateCache[d[this._endDate_idx]] = pos;\n return pos;\n }\n\n dataWidth(d) {\n return this.dataEndPos(d) - this.dataStartPos(d);\n }\n\n private transform;\n resetZoom() {\n // Triggers a \"zoomed\" event ---\n this._zoom.transform(this.element(), d3ZoomIdentity.translate(0, this.isHorizontal() ? 0 : this.height()));\n }\n\n zoomed() {\n this.transform = d3Event().transform;\n this.render();\n }\n\n private background;\n enter(domNode, element) {\n super.enter(domNode, element);\n this._zoom = d3Zoom()\n .scaleExtent([0, this.maxZoom()])\n .on(\"zoom\", () => {\n this.zoomed();\n })\n ;\n\n this.background = element.append(\"rect\")\n .attr(\"fill\", \"white\")\n .attr(\"opacity\", 0)\n .on(\"dblclick\", () => {\n d3Event().stopPropagation();\n delete this.rootExtent;\n this.resetZoom();\n })\n ;\n this.gUpperContent = element.append(\"g\").attr(\"class\", \"gUpperContent\");\n this.gUpperAxis = element.append(\"g\").attr(\"class\", \"gUpperAxis\");\n this.gMiddleContent = element.append(\"g\").attr(\"class\", \"gMiddleContent\");\n this.gLowerAxis = element.append(\"g\").attr(\"class\", \"gLowerAxis\");\n this.gLowerContent = element.append(\"g\").attr(\"class\", \"gLowerContent\");\n this.tlAxis\n .target(this.gUpperAxis.node())\n .tickFormat(this.tickFormat())\n .guideTarget(this.gUpperAxis.append(\"g\").node())\n .shrinkToFit(\"none\")\n .overlapMode(this.tickFormat_exists() ? \"stagger\" : \"none\")\n .extend(0.1)\n ;\n this.brAxis\n .target(this.gLowerAxis.node())\n .tickFormat(this.tickFormat())\n .guideTarget(this.gLowerAxis.append(\"g\").node())\n .shrinkToFit(\"none\")\n .overlapMode(this.tickFormat_exists() ? \"stagger\" : \"none\")\n .extend(0.1)\n ;\n\n element.call(this._zoom);\n this._selection.widgetElement(this.gMiddleContent);\n }\n\n private _prevIsHorizontal;\n update(domNode, element) {\n super.update(domNode, element);\n\n this._dateCache = {};\n\n this._title_idx = this.titleColumn() !== null ? this.columns().indexOf(this.titleColumn()) : this._title_idx;\n this._startDate_idx = this.startDateColumn() !== null ? this.columns().indexOf(this.startDateColumn()) : this._startDate_idx;\n this._endDate_idx = this.endDateColumn() !== null ? this.columns().indexOf(this.endDateColumn()) : this._endDate_idx;\n this._icon_idx = this.iconColumn() !== null ? this.columns().indexOf(this.iconColumn()) : this._icon_idx;\n this._color_idx = this.colorColumn() !== null ? this.columns().indexOf(this.colorColumn()) : this._color_idx;\n this._yoffset_idx = this.yOffsetColumn() !== null ? this.columns().indexOf(this.yOffsetColumn()) : this._yoffset_idx;\n\n if (this._prevIsHorizontal !== this.isHorizontal()) {\n this._prevIsHorizontal = this.isHorizontal();\n this.resetZoom();\n return;\n }\n\n this.tooltipFormatter = d3TimeFormat(this.tooltipTimeFormat());\n\n const width = this.width();\n const height = this.height();\n\n this.background\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", width)\n .attr(\"height\", height)\n ;\n\n const extent = this.extent();\n this.tlAxis\n .x(width / 2)\n .orientation(this.isHorizontal() ? \"top\" : \"left\")\n .reverse(!this.isHorizontal())\n .timePattern(this.timePattern()) // \"%Y-%m-%dT%H:%M:%S.%LZ\"\n .width(width - 1)\n .low(extent[0])\n .high(extent[1])\n .updateScale()\n ;\n\n this.brAxis\n .x(width / 2)\n .y(height / 2)\n .orientation(this.isHorizontal() ? \"bottom\" : \"right\")\n .reverse(!this.isHorizontal())\n .timePattern(this.timePattern()) // \"%Y-%m-%dT%H:%M:%S.%LZ\"\n .width(width - 1)\n .height(height)\n .low(extent[0])\n .high(extent[1])\n .updateScale()\n ;\n\n if (this.transform) {\n let low;\n let hi;\n if (this.isHorizontal()) {\n low = this.tlAxis.parseInvert(this.tlAxis.invert(this.transform.invertX(0)));\n hi = this.tlAxis.parseInvert(this.tlAxis.invert(this.transform.invertX(width - 1)));\n } else {\n low = this.tlAxis.parseInvert(this.tlAxis.invert(- this.transform.invertY(0)));\n hi = this.tlAxis.parseInvert(this.tlAxis.invert(- this.transform.invertY(height - 1)));\n }\n this.tlAxis\n .low(low)\n .high(hi)\n .updateScale()\n ;\n this.brAxis\n .low(low)\n .high(hi)\n .updateScale()\n ;\n }\n\n const data = this.data().sort(this.isHorizontal() ? (l, r) => {\n const retVal = this.brAxis.scalePos(l[1]) - this.brAxis.scalePos(r[1]);\n if (retVal === 0) {\n return (\"\" + l[0]).localeCompare(\"\" + r[0]);\n }\n return retVal;\n } : (l, r) => {\n return this.brAxis.scalePos(r[1]) - this.brAxis.scalePos(l[1]);\n });\n const events = data.filter(d => !d[this._endDate_idx]);\n const ranges = data.filter(d => !!d[this._endDate_idx]);\n\n this.tlAxis\n .render()\n ;\n this.brAxis\n .render()\n ;\n const brAxisBBox = this.brAxis.getBBox();\n\n let upperContentHeight = this.updateEntityPins(events);\n const lowerAxisHeight = brAxisBBox.height;\n let lowerHeight = height - upperContentHeight;\n const minYOffset = this._yoffset_idx !== -1 ? Math.min.apply(undefined, this.data().filter(row => !isNaN(row[this._yoffset_idx])).map(row => row[this._yoffset_idx])) : 0;\n if (events.length > 0 && ranges.length === 0) {\n // ONLY EVENTS\n this.tlAxis.visible(false);\n let y_offset = upperContentHeight / 4;\n if (y_offset > (height / 2) - lowerAxisHeight) {\n y_offset = (height / 2) - lowerAxisHeight;\n }\n const upperContentYOffset = (height / 2) + y_offset;\n const lowerAxisYOffset = ((height / 2) - lowerAxisHeight - y_offset) * -1;\n const halfMinYOffset = minYOffset !== 0 ? minYOffset / 2 : 0;\n this.gUpperContent.attr(\"transform\", `translate(0, ${upperContentYOffset - halfMinYOffset})`);\n this.gLowerAxis.attr(\"transform\", `translate(0, ${lowerAxisYOffset - halfMinYOffset})`);\n } else if (events.length === 0 && ranges.length > 0) {\n // ONLY RANGES\n this.tlAxis.visible(true);\n this.gUpperContent.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n this.gUpperAxis.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n } else {\n upperContentHeight -= minYOffset;\n lowerHeight += minYOffset;\n // BOTH\n this.tlAxis.visible(true);\n this.gUpperContent.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n this.gUpperAxis.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n this.gMiddleContent.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n }\n this.tlAxis\n .render()\n ;\n const tlAxisBBox = this.tlAxis.getBBox();\n interface BucketInfo {\n endPos: number;\n }\n const bucketData: BucketInfo[] = [];\n const bucketIndex = {};\n for (const range of ranges) {\n for (let i = 0; i < bucketData.length; ++i) {\n const bucket = bucketData[i];\n if (bucket.endPos + this.overlapTolerence() <= this.dataStartPos(range)) {\n bucketIndex[range] = i;\n bucket.endPos = this.dataEndPos(range);\n break;\n }\n }\n\n if (bucketIndex[range] === undefined) {\n bucketIndex[range] = bucketData.length;\n bucketData.push({\n endPos: this.dataEndPos(range)\n });\n }\n }\n\n const vbLower = this.isHorizontal() ? 0 + tlAxisBBox.height : 0 + tlAxisBBox.width;\n const vbHigher = this.isHorizontal() ? lowerHeight - brAxisBBox.height : width - brAxisBBox.width;\n this.verticalBands\n .range([vbLower, vbHigher])\n .domain(bucketData.map((_d, i) => i))\n ;\n\n if (ranges.length > 0) {\n this.updateEventRanges(events, ranges, bucketIndex, lowerHeight, tlAxisBBox, brAxisBBox, width);\n }\n }\n\n updateEntityPins(events) {\n let event_height = 0;\n const context = this;\n const entityPins = this.gUpperContent.selectAll(\".entity_pin\").data(events, d => d[0] + \":\" + d[1]);\n const eventFontColor_idx = this.eventFontColorColumn() ? this.columns().indexOf(this.eventFontColorColumn()) : -1;\n const eventBorderColor_idx = this.eventBorderColorColumn() ? this.columns().indexOf(this.eventBorderColorColumn()) : -1;\n const eventBackgroundColor_idx = this.eventBackgroundColorColumn() ? this.columns().indexOf(this.eventBackgroundColorColumn()) : -1;\n const title_counts = {};\n for (const d of events) {\n const type = typeof d[context._title_idx] !== \"undefined\" ? d[context._title_idx] : d[0];\n title_counts[type] = title_counts[type] ? title_counts[type] + 1 : 1;\n }\n const title_types = Object.keys(title_counts);\n const title_group_offset = context.eventGroupOffset();\n const entityPinsEnter = entityPins.enter().append(\"g\")\n .attr(\"class\", \"entity_pin\");\n entityPinsEnter.append(\"line\")\n .attr(\"class\", \"entity_line\");\n\n entityPinsEnter\n .on(\"mouseover\", function (d) {\n d3Select(this).raise();\n })\n .each(function (d, i) {\n const entityPin = new EntityPin()\n .target(this)\n .icon(\"\")\n .iconOnlyShowOnHover(context.hideIconWhenCollapsed())\n .titleOnlyShowOnHover(context.hideTitleWhenCollapsed())\n .descriptionOnlyShowOnHover(context.hideDescriptionWhenCollapsed())\n .annotationOnlyShowOnHover(context.hideAnnotationsWhenCollapsed())\n .iconDiameter(18)\n .iconPaddingPercent(1)\n .titleFontSize(14)\n .descriptionColor(\"#333\")\n .descriptionFontSize(15)\n .iconColor(eventFontColor_idx === -1 ? \"#333\" : d[eventFontColor_idx])\n .titleColor(eventFontColor_idx === -1 ? \"#333\" : d[eventFontColor_idx])\n .descriptionColor(eventFontColor_idx === -1 ? \"#333\" : d[eventFontColor_idx])\n .backgroundShape(\"pin\")\n .backgroundColorFill(eventFontColor_idx === -1 ? \"#f8f8f8\" : d[eventBackgroundColor_idx])\n .backgroundColorStroke(eventFontColor_idx === -1 ? \"#ccc\" : d[eventBorderColor_idx])\n .cornerRadius(5)\n .arrowHeight(10)\n .arrowWidth(16)\n ;\n context.localEntityPin.set(this, entityPin);\n })\n .merge(entityPins)\n .each(function (d, i) {\n const entityPin = context.localEntityPin.get(this);\n const _title = typeof d[context._title_idx] !== \"undefined\" ? d[context._title_idx] : entityPin.title();\n const x_offset = context.dataStartPos(d) - 0;\n let y_offset = ((title_types.indexOf(_title) % context.eventGroupMod()) * title_group_offset) - 5;\n if (typeof d[context._yoffset_idx] !== \"undefined\") y_offset += d[context._yoffset_idx] ? d[context._yoffset_idx] : 0;\n if (d[context._title_idx] !== entityPin.title() && d[context._startDate_idx] !== entityPin.description()) {\n const parsed_start_time = context.brAxis.parse(d[context._startDate_idx]);\n const formatted_start_time = context.tooltipFormatter(parsed_start_time);\n entityPin\n .x(x_offset)\n .y(y_offset)\n .iconOnlyShowOnHover(context.hideIconWhenCollapsed())\n .titleOnlyShowOnHover(context.hideTitleWhenCollapsed())\n .descriptionOnlyShowOnHover(context.hideDescriptionWhenCollapsed())\n .annotationOnlyShowOnHover(context.hideAnnotationsWhenCollapsed())\n .icon(typeof d[context._icon_idx] !== \"undefined\" ? d[context._icon_idx] : entityPin.icon())\n .title(_title)\n .description(formatted_start_time)\n .animationFrameRender()\n ;\n } else {\n entityPin.move({ x: x_offset, y: y_offset });\n }\n const calc_height = entityPin.calcHeight();\n if (event_height < calc_height) event_height = calc_height;\n\n d3Select(this).selectAll(\".entity_line\")\n .attr(\"x1\", x_offset)\n .attr(\"x2\", x_offset)\n .attr(\"y1\", 0)\n .attr(\"y2\", y_offset)\n .style(\"stroke\", eventFontColor_idx === -1 ? \"#ccc\" : d[eventBorderColor_idx])\n .style(\"stroke-width\", 1)\n ;\n })\n ;\n entityPins.exit()\n .each(function (d, i) {\n const entityPin = context.localEntityPin.get(this);\n entityPin.target(null);\n\n })\n .remove();\n const event_offset = Math.abs(Math.min(events.length, context.eventGroupMod()) * context.eventGroupOffset());\n return event_height + event_offset;\n }\n\n updateEventRanges(events, ranges, bucketIndex, eventRangeHeight, tlAxisBBox, brAxisBBox, width) {\n const context = this;\n\n const lines = this.gMiddleContent.selectAll(\".line\").data(events, d => {\n return d[context._title_idx];\n });\n lines.enter().append(\"line\")\n .attr(\"class\", \"line\")\n .merge(lines)\n .attr(this.isHorizontal() ? \"x1\" : \"y1\", d => this.dataStartPos(d) - 0)\n .attr(this.isHorizontal() ? \"x2\" : \"y2\", d => this.dataStartPos(d) - 0)\n .attr(this.isHorizontal() ? \"y1\" : \"x1\", this.isHorizontal() ? tlAxisBBox.height : tlAxisBBox.width)\n .attr(this.isHorizontal() ? \"y2\" : \"x2\", this.isHorizontal() ? eventRangeHeight - brAxisBBox.height : width - brAxisBBox.width)\n ;\n lines.exit().remove();\n const buckets = this.gMiddleContent.selectAll(\".buckets\").data(ranges, d => d[context._title_idx]);\n buckets.enter().append(\"g\")\n .attr(\"class\", \"buckets\")\n .call(this._selection.enter.bind(this._selection))\n .each(function (d) {\n const entityRect = new EntityRect()\n .target(this)\n .iconDiameter(28)\n .iconPaddingPercent(0)\n .titleFontSize(28)\n .titleColor(context.rangeFontColor())\n .descriptionColor(context.rangeFontColor())\n .iconColor(context.rangeFontColor())\n .backgroundShape(\"rect\")\n .backgroundColorFill(d[context._color_idx])\n ;\n context.localRect.set(this, entityRect);\n context.enterEntityRect(entityRect, d);\n })\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d), \"range\", context._selection.selected(this));\n }, false)\n .on(\"dblclick\", function (d) {\n context.rootExtent = d;\n context.resetZoom();\n context.dblclick(context.rowToObj(d), \"range\", context._selection.selected(this));\n }, true)\n .on(\"mouseout.tooltip\", this.tooltip.hide)\n .on(\"mousemove.tooltip\", this.tooltip.show)\n .merge(buckets)\n .attr(\"transform\", d => context.isHorizontal() ?\n `translate(${this.dataStartPos(d)}, ${this.verticalBands(bucketIndex[d])}) ` :\n `translate(${this.verticalBands(bucketIndex[d])}, ${this.dataStartPos(d)}) `)\n .each(function (d) {\n const textBox = context.localRect.get(this);\n const x = context.dataWidth(d) / 2;\n const y = context.verticalBands.bandwidth() / 2;\n const rectWidth = Math.max(context.dataWidth(d), 2);\n const rectHeight = Math.max(context.verticalBands.bandwidth(), 2);\n const fontHeightRatio = 0.618;\n const paddingRatio = ((1 - fontHeightRatio) / 2);\n const paddingSize = paddingRatio * rectHeight;\n const fontSize = rectHeight * fontHeightRatio;\n const iconSize = fontSize;\n textBox\n .pos(context.isHorizontal() ? { x, y } : { x: y, y: x })\n .fixedHeight(context.isHorizontal() ? rectHeight : rectWidth)\n .fixedWidth(context.isHorizontal() ? rectWidth : rectHeight)\n .icon(typeof d[context._icon_idx] !== \"undefined\" ? d[context._icon_idx] : \"\")\n .title(typeof d[context._title_idx] !== \"undefined\" ? d[context._title_idx] : \"\")\n .padding(paddingSize)\n .iconDiameter(iconSize)\n .titleFontSize(fontSize)\n ;\n if (iconSize * 1.5 > rectWidth) {\n textBox.icon(null);\n }\n context.updateEntityRect(textBox, d[context._icon_idx]);\n textBox\n .render()\n ;\n });\n buckets.exit().remove();\n }\n\n exit(domNode, element) {\n this.brAxis.target(null);\n this.tlAxis.target(null);\n super.exit(domNode, element);\n }\n\n // Events ---\n click(row, col, sel) {\n }\n\n dblclick(row, col, sel) {\n }\n\n enterEntityRect(textbox: EntityRect, d) {\n }\n\n updateEntityRect(textbox: EntityRect, d) {\n }\n}\nMiniGantt.prototype._class += \" timeline_MiniGantt\";\nMiniGantt.prototype.implements(ITooltip.prototype);\nMiniGantt.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface MiniGantt {\n // ITooltip ---\n tooltip;\n tooltipHTML(_): string;\n tooltipFormat(_): string;\n\n // SimpleSelectionMixin\n _selection;\n\n // Properties ---\n timePattern(): string;\n timePattern(_: string): this;\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n orientation(): string;\n orientation(_: string): this;\n rangeFontColor(): string;\n rangeFontColor(_: string): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n yOffsetColumn(): string;\n yOffsetColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n eventGroupMod(): number;\n eventGroupMod(_: number): this;\n eventGroupOffset(): number;\n eventGroupOffset(_: number): this;\n eventFontColorColumn(): string;\n eventFontColorColumn(_: string): this;\n eventBorderColorColumn(): string;\n eventBorderColorColumn(_: string): this;\n eventBackgroundColorColumn(): string;\n eventBackgroundColorColumn(_: string): this;\n hideIconWhenCollapsed(): boolean;\n hideIconWhenCollapsed(_: boolean): this;\n hideTitleWhenCollapsed(): boolean;\n hideTitleWhenCollapsed(_: boolean): this;\n hideDescriptionWhenCollapsed(): boolean;\n hideDescriptionWhenCollapsed(_: boolean): this;\n hideAnnotationsWhenCollapsed(): boolean;\n hideAnnotationsWhenCollapsed(_: boolean): this;\n centerOnMostRecent(): boolean;\n centerOnMostRecent(_: boolean): this;\n\n}\n\nMiniGantt.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"timePattern\");\nMiniGantt.prototype.publish(\"tickFormat\", null, \"string\", \"tickFormat\", undefined, { optional: true });\nMiniGantt.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"tooltipTimeFormat\");\nMiniGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nMiniGantt.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"orientation\", [\"horizontal\", \"vertical\"]);\nMiniGantt.prototype.publish(\"rangeFontColor\", \"#ecf0f1\", \"html-color\", \"rangeFontColor\");\nMiniGantt.prototype.publish(\"titleColumn\", null, \"string\", \"titleColumn\");\nMiniGantt.prototype.publish(\"startDateColumn\", null, \"string\", \"startDateColumn\");\nMiniGantt.prototype.publish(\"endDateColumn\", null, \"string\", \"endDateColumn\");\nMiniGantt.prototype.publish(\"iconColumn\", null, \"string\", \"iconColumn\");\nMiniGantt.prototype.publish(\"colorColumn\", null, \"string\", \"colorColumn\");\nMiniGantt.prototype.publish(\"yOffsetColumn\", null, \"string\", \"yOffsetColumn\");\nMiniGantt.prototype.publish(\"maxZoom\", 16, \"number\", \"maxZoom\");\nMiniGantt.prototype.publish(\"eventGroupOffset\", -50, \"number\", \"eventGroupOffset\");\nMiniGantt.prototype.publish(\"eventGroupMod\", 5, \"number\", \"eventGroupMod\");\nMiniGantt.prototype.publish(\"eventFontColorColumn\", null, \"string\", \"eventFontColorColumn\");\nMiniGantt.prototype.publish(\"eventBorderColorColumn\", null, \"string\", \"eventBorderColorColumn\");\nMiniGantt.prototype.publish(\"eventBackgroundColorColumn\", null, \"string\", \"eventBackgroundColorColumn\");\nMiniGantt.prototype.publish(\"hideIconWhenCollapsed\", false, \"boolean\", \"hideIconWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideTitleWhenCollapsed\", false, \"boolean\", \"hideTitleWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideDescriptionWhenCollapsed\", false, \"boolean\", \"hideDescriptionWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideAnnotationsWhenCollapsed\", true, \"boolean\", \"hideAnnotationsWhenCollapsed\");\nMiniGantt.prototype.publish(\"centerOnMostRecent\", false, \"boolean\", \"If true, the timeline will be centered on the most recent data point\");\n","import { d3Event, select as d3Select, SVGZoomWidget, Utility } from \"@hpcc-js/common\";\nimport { HTMLTooltip } from \"@hpcc-js/html\";\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\nimport { React, render, LabelledRect } from \"@hpcc-js/react\";\n\nexport type IGanttData = [string, number, number, any?];\n\nexport interface IRangeOptions {\n rangePadding: number;\n fontFamily: string;\n fontSize: number;\n strokeWidth?: number;\n fill: string;\n stroke: string;\n textFill: string;\n cornerRadius: number;\n}\n\nexport class ReactGantt extends SVGZoomWidget {\n\n protected _selection = new Utility.Selection(this);\n\n protected _buckets;\n protected _interpolateX;\n protected _interpolateY;\n\n protected _bucketsBySeries;\n protected _dataBySeries;\n protected _origIdxMap;\n private _seriesBackgrounds;\n\n protected _maxFontSize;\n\n public _tooltip;\n\n public _minStart: number;\n public _maxEnd: number;\n\n protected _title_idx = 0;\n protected _startDate_idx = 1;\n protected _endDate_idx = 2;\n protected _icon_idx = -1;\n protected _color_idx = -1;\n protected _series_idx = -1;\n protected _bucket_idx = -1;\n protected _yoffset_idx = -1;\n\n protected _maxX: number;\n protected _maxY: number;\n\n private _rangeOptions: IRangeOptions = {\n rangePadding: 2,\n fontFamily: \"Verdana\",\n fontSize: 12,\n fill: \"white\",\n stroke: \"black\",\n textFill: \"black\",\n cornerRadius: 3,\n strokeWidth: 0\n };\n\n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n super();\n this._drawStartPos = drawStartPosition;\n\n this.showToolbar_default(false);\n\n this._tooltip = new HTMLTooltip();\n this._tooltip\n .tooltipHTML(d => {\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${d[1]} -> ${d[2]}</div>`;\n });\n this._tooltip\n .followCursor(true)\n ;\n }\n\n selection(_: any[]): this;\n selection(): any[];\n selection(_?: any[]): any[] | this {\n if (!arguments.length) return this._selection.get();\n this._selection.set(_);\n return this;\n }\n\n private _rangeRenderer: React.FunctionComponent = LabelledRect;\n rangeRenderer(): React.FunctionComponent;\n rangeRenderer(_: React.FunctionComponent): this;\n rangeRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n if (!arguments.length) return this._rangeRenderer;\n this._rangeRenderer = _;\n return this._rangeRenderer;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n const context = this;\n element\n .on(\"click\", function (this: SVGElement, d) {\n context._selection.clear();\n });\n\n this._tooltip.target(domNode);\n }\n update(domNode, element) {\n super.update(domNode, element);\n\n this.zoomExtent([0.05, this.maxZoom()]);\n\n this._title_idx = this.titleColumn() !== null ? this.columns().indexOf(this.titleColumn()) : this._title_idx;\n this._startDate_idx = this.startDateColumn() !== null ? this.columns().indexOf(this.startDateColumn()) : this._startDate_idx;\n this._endDate_idx = this.endDateColumn() !== null ? this.columns().indexOf(this.endDateColumn()) : this._endDate_idx;\n this._icon_idx = this.iconColumn() !== null ? this.columns().indexOf(this.iconColumn()) : this._icon_idx;\n this._color_idx = this.colorColumn() !== null ? this.columns().indexOf(this.colorColumn()) : this._color_idx;\n this._series_idx = this.seriesColumn() !== null ? this.columns().indexOf(this.seriesColumn()) : this._series_idx;\n this._bucket_idx = this.bucketColumn() !== null ? this.columns().indexOf(this.bucketColumn()) : -1;\n\n const context = this;\n const w = this.width();\n\n const x0 = 0;\n const x1 = w;\n\n this._interpolateX = d3ScaleLinear()\n .domain([this._minStart, this._maxEnd])\n .range([x0, x1])\n ;\n\n this.data().sort((a, b) => a[1] - b[1]);\n\n if (this._series_idx > -1) {\n this._origIdxMap = {};\n this._dataBySeries = {};\n this._bucketsBySeries = {};\n this.data().forEach((dataRow, origIdx) => {\n const seriesKey = dataRow[this._series_idx];\n if (!this._dataBySeries[seriesKey]) {\n this._origIdxMap[seriesKey] = {};\n this._dataBySeries[seriesKey] = [];\n }\n this._dataBySeries[seriesKey].push({\n dataRow,\n origIdx\n });\n });\n const gutter = this.gutter();\n let bucketOffset = 0;\n const seriesKeys = Object.keys(this._dataBySeries);\n seriesKeys.forEach(seriesKey => {\n this._dataBySeries[seriesKey].sort((a, b) => a.dataRow[1] - b.dataRow[1]);\n this._bucketsBySeries[seriesKey] = this.calcBuckets(this._dataBySeries[seriesKey].map(n => n.dataRow), 1, 2);\n this._bucketsBySeries[seriesKey].bucketHeight = this.bucketHeight();\n this._bucketsBySeries[seriesKey].bucketOffset = bucketOffset;\n bucketOffset += (this._bucketsBySeries[seriesKey].bucketHeight + this.strokeWidth() + this.gutter()) * (this._bucketsBySeries[seriesKey].maxBucket + 1);\n this._dataBySeries[seriesKey].forEach((n, i) => {\n this._origIdxMap[seriesKey][n.origIdx] = i;\n });\n });\n this._seriesBackgrounds = this._renderElement.selectAll(\".series-background\")\n .data(seriesKeys.map(key => {\n return this._bucketsBySeries[key];\n }))\n ;\n this._seriesBackgrounds\n .join(\n enter => enter.append(\"rect\")\n .attr(\"class\", \"series-background\"),\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .attr(\"opacity\", d => d.props && d.props.hidden ? 0 : 1)\n .each(function (this: SVGGElement, d, i) {\n d3Select(this)\n .attr(\"x\", 0)\n .attr(\"y\", d.bucketOffset - (gutter / 2))\n .attr(\"width\", w)\n .attr(\"height\", ((d.bucketHeight + gutter) * (d.maxBucket + 1)) + gutter)\n .attr(\"fill\", i % 2 ? context.oddSeriesBackground() : context.evenSeriesBackground())\n ;\n });\n } else {\n if (this._bucket_idx !== -1) {\n this._buckets = this.calcBuckets(this.data(), this._startDate_idx, this._endDate_idx, this._bucket_idx);\n } else {\n this._buckets = this.calcBuckets(this.data(), this._startDate_idx, this._endDate_idx);\n }\n }\n const interpedStart = this._interpolateX(this._minStart);\n\n this.zoomTo(\n [interpedStart, 0],\n 1\n );\n\n const bucketHeight = this.bucketHeight();\n\n this.setRangeOptions();\n\n this._maxFontScale = (bucketHeight - (this.rangePadding() * 2));\n this.measureDataText();\n\n const itemSelection = this._renderElement.selectAll(\".item\")\n .data(this.data())\n ;\n const borderOffset1 = this.strokeWidth();\n const borderOffset2 = borderOffset1 * 2;\n itemSelection\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"item\")\n .on(\"click.selectionBag\", function (d, i) {\n const _id = d.id === undefined ? i : d.id;\n if (context._selection.isSelected({ _id, element: d.element })) {\n context._selection.clear();\n } else {\n context._selection.click(\n {\n _id,\n element: () => d.element\n },\n d3Event\n );\n }\n context.selectionChanged();\n d3Event().stopPropagation();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n if (d[context.columns().length]) {\n d.__lparam = d[context.columns().length];\n }\n context.click(d, \"\", selected);\n })\n .on(\"dblclick\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n if (d[context.columns().length]) {\n d.__lparam = d[context.columns().length];\n }\n context.click(d, \"\", selected);\n })\n .on(\"mousein\", function (d) {\n context.highlightItem(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n context.mousein(d, \"\", selected);\n })\n .on(\"mouseover\", function (d) {\n const d3evt = d3Event();\n context._tooltip._triggerElement = d.element;\n context._tooltip._cursorLoc = [\n d3evt.clientX,\n d3evt.clientY\n ];\n context._tooltip\n .data(d)\n .visible(true)\n .fitContent(true)\n .render()\n ;\n context.highlightItem(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n context.mouseover(d, \"\", selected);\n })\n .on(\"mouseout\", function (d) {\n context._tooltip\n .visible(false)\n .render()\n ;\n context.highlightItem(null, null);\n const selected = d.element.classed(\"selected\");\n context.mouseout(d, \"\", selected);\n })\n .each(function (d, i) {\n d.that = this;\n d.element = d3Select(this);\n d.x = context._interpolateX(d[1]);\n const endX = context._interpolateX(d[2]);\n if (context._series_idx > -1) {\n const seriesKey = d[context._series_idx];\n const bucket = context._bucketsBySeries[seriesKey].bucketMap[context._origIdxMap[seriesKey][i]];\n d.y = context._bucketsBySeries[seriesKey].interpolateY(bucket) + context._bucketsBySeries[seriesKey].bucketOffset;\n } else {\n const _i = context._bucket_idx === -1 ? i : d[context._bucket_idx];\n d.y = context._buckets.interpolateY(context._buckets.bucketMap[_i]);\n }\n d.props = {\n ...d[3],\n text: d[0]\n };\n d.props.width = endX - d.x;\n d.props.height = bucketHeight;\n d.x += borderOffset1;\n d.y += borderOffset1;\n d.props.width -= borderOffset2;\n d.props.height -= borderOffset2;\n d.element.attr(\"transform\", `translate(${d.x + (d.props.width / 2)} ${d.y + (d.props.height / 2)})`);\n }),\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .attr(\"opacity\", d => d.props && d.props.hidden ? 0 : 1)\n .each(function (this: SVGGElement, d, i) {\n d.that = this;\n if (context._series_idx > -1) {\n const seriesKey = d[context._series_idx];\n d.x = context.renderRangeElement(d, i, false, context._rangeOptions, seriesKey);\n } else {\n d.x = context.renderRangeElement(d, i, false, context._rangeOptions);\n }\n })\n .on(\"dblclick.zoom\", d => {\n const x1 = this._interpolateX(d[1]);\n const x2 = this._interpolateX(d[2]);\n const xRange = x2 - x1;\n const xScale = w / xRange;\n this.zoomTo(\n [\n -x1 * xScale,\n 0\n ],\n xScale\n );\n })\n ;\n element.on(\"dblclick.zoom\", null);\n }\n exit(domNode, element) {\n this._tooltip.target(null);\n super.exit(domNode, element);\n }\n renderRangeElement(d, i, transformEach = false, options: any = {}, seriesKey?: string) {\n const borderOffset1 = options.strokeWidth;\n const borderOffset2 = borderOffset1 * 2;\n const padding = options.rangePadding;\n let endX;\n const x = isNaN(this._transform.x) ? 0 : this._transform.x;\n const k = isNaN(this._transform.k) ? 1 : this._transform.k;\n let b;\n const bucketHeight = this.bucketHeight();\n d.that.setAttribute(\"data-series\", seriesKey);\n\n if (this._color_idx > -1) {\n d.that.setAttribute(\"data-color\", d[this._color_idx]);\n }\n\n if (seriesKey !== undefined) {\n b = this._bucketsBySeries[seriesKey].bucketMap[this._origIdxMap[seriesKey][i]];\n d.that.setAttribute(\"data-b\", b);\n d.that.setAttribute(\"data-bucketOffset\", this._bucketsBySeries[seriesKey].bucketOffset);\n d.y = this._bucketsBySeries[seriesKey].interpolateY(b) + this._bucketsBySeries[seriesKey].bucketOffset;\n d.that.setAttribute(\"data-dy\", d.y);\n } else {\n b = this._buckets.bucketMap[i];\n d.y = this._buckets.interpolateY(b);\n }\n if (this._color_idx > -1) {\n options.fill = d[this._color_idx];\n }\n if (!transformEach) {\n d.x = this._interpolateX(d[1]);\n endX = this._interpolateX(d[2]);\n d.props = {\n ...d[3],\n text: d[0]\n };\n d.props.width = (endX - d.x) / k;\n } else {\n d.x = this._interpolateX(d[1]) * k;\n endX = this._interpolateX(d[2]) * k;\n d.props = {\n ...d[3],\n text: d[0]\n };\n d.props.width = (endX - d.x) / k;\n d.x += x;\n d.props.width *= k;\n }\n d.props.height = bucketHeight;\n if (seriesKey === undefined && this._buckets.bucketScale < 1) {\n d.props.height = this._buckets.bucketScale * bucketHeight;\n }\n if (d.element === undefined && d.that) {\n d.element = d3Select(d.that);\n }\n d.element.attr(\"transform\", `translate(${d.x + (d.props.width / 2)} ${d.y + (d.props.height / 2)})`);\n\n d.x += borderOffset1;\n d.y += borderOffset1;\n d.props.width -= borderOffset2;\n d.props.height -= borderOffset2;\n d.props.width = d.props.width < 1 ? 1 : d.props.width;\n d.props.height = d.props.height < 1 ? 1 : d.props.height;\n\n let text = this.truncateText(d.props.text, d.props.width - padding, this._maxFontScale);\n\n if (text !== d.props.text) {\n text = this.truncateText(d.props.text, d.props.width - padding);\n } else {\n d.props.fontSize = this._maxFontScale * options.fontSize;\n }\n if (seriesKey === undefined && this._buckets.bucketScale < 1) {\n d.props.fontSize = Math.min(this._maxFontScale, this._buckets.bucketScale) * options.fontSize;\n }\n if (!this._maxY || this._maxY < d.y + d.props.height) {\n this._maxY = d.y + d.props.height;\n }\n if (!this._maxX || this._maxX < d.x + d.props.width) {\n this._maxX = d.x + d.props.width;\n }\n render(\n this._rangeRenderer,\n {\n ...options,\n ...d.props,\n text,\n },\n d.that\n );\n }\n\n setRangeOptions() {\n this._rangeOptions = {\n rangePadding: this.rangePadding(),\n fontFamily: this.fontFamily(),\n fontSize: this.fontSize(),\n strokeWidth: this.strokeWidth(),\n fill: this.fill(),\n stroke: this.stroke(),\n textFill: this.rangeFontColor(),\n cornerRadius: this.cornerRadius(),\n };\n }\n\n public _transform = { k: 1, x: 0, y: 0 };\n zoomed(transform) {\n this._transform = transform;\n switch (this.renderMode()) {\n case \"scale-all\":\n this._zoomScale = transform.k;\n this._zoomTranslate = [transform.x, 0];\n this._zoomG.attr(\"transform\", `translate(${transform.x} ${0})scale(${transform.k} 1)`);\n break;\n default:\n const options = this._rangeOptions;\n this.data().forEach((d, i) => {\n if (this._color_idx > -1) {\n options.fill = d[this._color_idx];\n }\n if (this._series_idx > -1) {\n const seriesKey = d[this._series_idx];\n this.renderRangeElement(d, i, true, options, seriesKey);\n } else {\n this.renderRangeElement(d, i, true, options);\n }\n });\n }\n\n this.zoomedHook(transform);\n }\n\n zoomedHook(transform) {\n\n }\n\n private calcBuckets(data, startKey: string | number, endKey: string | number, bucketKey?: string | number) {\n const bucketMap = {};\n const bucketKeyMap = {};\n const tol = this.overlapTolerence();\n const buckets = [{ end: -Infinity }];\n let maxBucket = 0;\n if (bucketKey !== undefined) {\n data.forEach((d, i) => {\n bucketMap[i] = d[bucketKey];\n bucketKeyMap[d[bucketKey]] = true;\n });\n maxBucket = Object.keys(bucketKeyMap).length;\n } else {\n data.forEach((d, i) => {\n for (let i2 = 0; i2 < buckets.length; ++i2) {\n if (i === 0 || buckets[i2][endKey] + tol <= d[startKey]) {\n bucketMap[i] = i2;\n if (maxBucket < i2) maxBucket = i2;\n buckets[i2][endKey] = d[endKey];\n break;\n }\n }\n if (bucketMap[i] === undefined) {\n bucketMap[i] = buckets.length;\n const b = {};\n b[endKey] = d[endKey];\n buckets.push(b as any);\n }\n\n if (maxBucket < bucketMap[i]) maxBucket = bucketMap[i];\n });\n }\n const height = (maxBucket + 1) * (this.bucketHeight() + this.gutter());\n return {\n bucketMap,\n maxBucket,\n bucketScale: this.height() / height,\n interpolateY: d3ScaleLinear()\n .domain([0, maxBucket + 1])\n .range([0, Math.min(this.height(), height)])\n };\n }\n\n data(): IGanttData[];\n data(_: IGanttData[]): this;\n data(_?: IGanttData[]): this | IGanttData[] {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length > 0) {\n this._minStart = Math.min(...this.data().map(n => n[1])) ?? 0;\n this._maxEnd = Math.max(...this.data().map(n => n[2])) ?? 1;\n this.measureDataText(true);\n }\n return retVal;\n }\n\n protected _textWidths;\n protected _maxFontScale;\n protected _characterWidths;\n protected _prevFontFamily;\n protected _prevFontSize;\n measureDataText(forceMeasure = false) {\n const textWidths = {};\n const characterWidths = {};\n const fontFamily = this.fontFamily();\n const fontSize = this.fontSize();\n const bucketHeight = this.bucketHeight();\n\n if (bucketHeight) {\n this._maxFontScale = (bucketHeight - (this.rangePadding() * 2)) / fontSize;\n }\n\n if (forceMeasure || this._prevFontFamily !== fontFamily || this._prevFontSize !== fontSize) {\n characterWidths[\".\"] = Utility.textSize(\".\", fontFamily, fontSize).width;\n this.data().forEach(d => {\n if (!textWidths[d[0]]) {\n textWidths[d[0]] = Utility.textSize(d[0], fontFamily, fontSize).width;\n }\n d[0].split(\"\").forEach(char => {\n if (!characterWidths[char]) {\n characterWidths[char] = Utility.textSize(char, fontFamily, fontSize).width;\n }\n });\n });\n this._textWidths = textWidths;\n this._characterWidths = characterWidths;\n }\n this._prevFontFamily = fontFamily;\n this._prevFontSize = fontSize;\n }\n\n truncateText(text, width, scale = 1) {\n const textFits = this._textWidths[text] * scale < width;\n if (textFits) {\n return text;\n }\n let ret = \"\";\n let sum = 0;\n const _width = width - (this._characterWidths[\".\"] * 3);\n for (const char of text) {\n sum += this._characterWidths[char];\n if (sum < _width) {\n ret += char;\n } else {\n break;\n }\n }\n return _width < 0 ? \"\" : ret + \"...\";\n }\n\n resize(_size?: { width: number, height: number }) {\n let retVal;\n if (this.fitWidthToContent() || this.fitHeightToContent()) {\n retVal = super.resize.call(this, {\n width: _size.width,\n height: this._maxY\n });\n } else {\n retVal = super.resize.apply(this, arguments);\n }\n return retVal;\n }\n\n selectionChanged() {\n\n }\n\n highlightItem(_element, d) {\n\n }\n\n click(row, _col, sel) {\n\n }\n\n dblclick(row, _col, sel) {\n\n }\n\n mousein(row, _col, sel) {\n }\n\n mouseover(row, _col, sel) {\n }\n\n mouseout(row, _col, sel) {\n }\n}\nReactGantt.prototype._class += \" timeline_ReactGantt\";\n\nexport interface ReactGantt {\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n seriesColumn(): string;\n seriesColumn(_: string): this;\n bucketColumn(): string;\n bucketColumn(_: string): this;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n smallestRangeWidth(): number;\n smallestRangeWidth(_: number): this;\n bucketHeight(): number;\n bucketHeight(_: number): this;\n gutter(): number;\n gutter(_: number): this;\n showToolbar_default(_: boolean): this;\n fontSize(): number;\n fontSize(_: number): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n strokeWidth(): number;\n strokeWidth(_: number): this;\n stroke(): string;\n stroke(_: string): this;\n cornerRadius(): number;\n cornerRadius(_: number): this;\n fill(): string;\n fill(_: string): this;\n rangeFontColor(): string;\n rangeFontColor(_: string): this;\n rangePadding(): number;\n rangePadding(_: number): this;\n renderMode(): \"default\" | \"scale-all\";\n renderMode(_: \"default\" | \"scale-all\"): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n fitWidthToContent(): boolean;\n fitWidthToContent(_: boolean): this;\n fitHeightToContent(): boolean;\n fitHeightToContent(_: boolean): this;\n evenSeriesBackground(): string;\n evenSeriesBackground(_: string): this;\n oddSeriesBackground(): string;\n oddSeriesBackground(_: string): this;\n}\n\nReactGantt.prototype.publish(\"fitWidthToContent\", false, \"boolean\", \"If true, resize will simply reapply the bounding box width\");\nReactGantt.prototype.publish(\"fitHeightToContent\", false, \"boolean\", \"If true, resize will simply reapply the bounding box height\");\nReactGantt.prototype.publish(\"titleColumn\", null, \"string\", \"Column name to for the title\");\nReactGantt.prototype.publish(\"startDateColumn\", null, \"string\", \"Column name to for the start date\");\nReactGantt.prototype.publish(\"endDateColumn\", null, \"string\", \"Column name to for the end date\");\nReactGantt.prototype.publish(\"iconColumn\", null, \"string\", \"Column name to for the icon\");\nReactGantt.prototype.publish(\"colorColumn\", null, \"string\", \"Column name to for the color\");\nReactGantt.prototype.publish(\"seriesColumn\", null, \"string\", \"Column name to for the series identifier\");\nReactGantt.prototype.publish(\"bucketColumn\", null, \"string\", \"Column name to for the bucket identifier\");\nReactGantt.prototype.publish(\"renderMode\", \"default\", \"set\", \"Render modes vary in features and performance\", [\"default\", \"scale-all\"]);\nReactGantt.prototype.publish(\"rangePadding\", 3, \"number\", \"Padding within each range rectangle (pixels)\");\nReactGantt.prototype.publish(\"fill\", \"#1f77b4\", \"string\", \"Background color of range rectangle\");\nReactGantt.prototype.publish(\"stroke\", null, \"string\", \"Color of range rectangle border\");\nReactGantt.prototype.publish(\"strokeWidth\", null, \"number\", \"Width of range rectangle border (pixels)\");\nReactGantt.prototype.publish(\"cornerRadius\", 3, \"number\", \"Space between range buckets (pixels)\");\nReactGantt.prototype.publish(\"fontFamily\", null, \"string\", \"Font family within range rectangle\", null, { optional: true });\nReactGantt.prototype.publish(\"fontSize\", 10, \"number\", \"Size of font within range rectangle (pixels)\");\nReactGantt.prototype.publish(\"rangeFontColor\", \"#ecf0f1\", \"html-color\", \"rangeFontColor\");\nReactGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nReactGantt.prototype.publish(\"smallestRangeWidth\", 10, \"number\", \"Width of the shortest range (pixels)\");\nReactGantt.prototype.publish(\"bucketHeight\", 100, \"number\", \"Max height of range element (pixels)\");\nReactGantt.prototype.publish(\"gutter\", 2, \"number\", \"Space between range buckets (pixels)\");\nReactGantt.prototype.publish(\"maxZoom\", 16, \"number\", \"Maximum zoom\");\nReactGantt.prototype.publish(\"evenSeriesBackground\", \"#FFFFFF\", \"html-color\", \"Background color of even series rows\");\nReactGantt.prototype.publish(\"oddSeriesBackground\", \"#DDDDDD\", \"html-color\", \"Background color of odd series rows\");\n","import { Axis } from \"@hpcc-js/chart\";\nimport { SVGWidget } from \"@hpcc-js/common\";\nimport { ReactGantt } from \"./ReactGantt.ts\";\n\nexport type IAxisGanttData = [string, number | string, number | string, any?] | any[];\n\nexport class ReactAxisGantt extends SVGWidget {\n\n protected _topAxis: Axis = new Axis(\"center\")\n .orientation(\"top\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n protected _gantt: ReactGantt = new ReactGantt(\"center\")\n .stroke(\"#000000\")\n ;\n protected _bottomAxis: Axis = new Axis(\"center\")\n .orientation(\"bottom\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n\n protected _topAxisElement;\n protected _contentElement;\n protected _bottomAxisElement;\n protected _topRect;\n protected _contentRect;\n protected _bottomRect;\n\n protected rangeRenderer;\n\n constructor() {\n super();\n this._drawStartPos = \"origin\";\n this.rangeRenderer = function () {\n const ret = this._gantt.rangeRenderer.apply(this._gantt, arguments);\n if (!arguments.length) return ret;\n return this;\n };\n }\n\n selection(_: any[]): this;\n selection(): any[];\n selection(_?: any[]): any[] | this {\n if (!arguments.length) return this._gantt.selection();\n this._gantt.selection(_);\n return this;\n }\n\n resizeWrappers() {\n\n const w = this.width();\n const h = this.height();\n\n const axisHeight = this.axisHeight(); //TODO: Dynamic scaling to allow for small resolutions?\n\n const contentHeight = (h - (axisHeight * 2));\n const borderOffset1 = this.strokeWidth();\n this._topRect\n .attr(\"height\", axisHeight)\n .attr(\"width\", w)\n .attr(\"fill\", \"transparent\")\n ;\n this._topAxisElement.attr(\"transform\", \"translate(0 0)\");\n this._topAxis.resize({ height: axisHeight, width: w });\n this._contentRect\n .attr(\"height\", contentHeight)\n .attr(\"width\", w)\n .attr(\"fill\", \"transparent\")\n ;\n this._contentElement.attr(\"transform\", `translate(0 ${axisHeight + borderOffset1})`);\n this._gantt.resize({ height: contentHeight, width: w });\n this._bottomRect\n .attr(\"height\", axisHeight)\n .attr(\"width\", w)\n .attr(\"fill\", \"transparent\")\n ;\n this._bottomAxisElement.attr(\"transform\", `translate(0 ${axisHeight + contentHeight + borderOffset1})`);\n this._bottomAxis.resize({ height: axisHeight, width: w });\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._gantt.click = (row, col, sel) => {\n this.click(row, col, sel);\n };\n\n this._gantt.dblclick = (row, col, sel) => {\n this.dblclick(row, col, sel);\n };\n\n this._topAxisElement = element.append(\"g\")\n .attr(\"class\", \"top-axis-wrapper\")\n ;\n this._topRect = this._topAxisElement.append(\"rect\")\n .attr(\"class\", \"top-axis-rect\")\n ;\n this._contentElement = element.append(\"g\")\n .attr(\"class\", \"content-wrapper\")\n ;\n this._contentRect = this._contentElement.append(\"rect\")\n .attr(\"class\", \"content-rect\")\n ;\n this._bottomAxisElement = element.append(\"g\")\n .attr(\"class\", \"bottom-axis-wrapper\")\n ;\n this._bottomRect = this._bottomAxisElement.append(\"rect\")\n .attr(\"class\", \"top-axis-rect\")\n ;\n this._topAxis.target(this._topAxisElement.node());\n this._gantt.target(this._contentElement.node()).bucketHeight(30);\n this._bottomAxis.target(this._bottomAxisElement.node());\n\n this.resizeWrappers();\n\n this._gantt.zoomedHook = (transform) => {\n this.onzoom(transform);\n };\n }\n\n onzoom(transform) {\n\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .render()\n ;\n this._bottomAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .render()\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._topAxis.tickFormat(this.tickFormat()).render();\n this._bottomAxis.tickFormat(this.tickFormat()).render();\n this._gantt.render();\n }\n\n exit(domNode, element) {\n this._bottomAxis.target(null);\n this._gantt.target(null);\n this._topAxis.target(null);\n super.exit(domNode, element);\n }\n\n columns(): string[];\n columns(_: string[]): this;\n columns(_?: string[]): this | string[] {\n const retVal = super.columns.apply(this, arguments);\n if (arguments.length > 0) {\n this._gantt.columns(_);\n }\n return retVal;\n }\n\n data(): IAxisGanttData[];\n data(_: IAxisGanttData[]): this;\n data(_?: IAxisGanttData[]): this | IAxisGanttData[] {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length > 0) {\n const ganttData: any[] = this.data().map(n => {\n const ret = [...n];\n ret[1] = isNaN(n[1] as any) ? new Date(n[1]).getTime() : Number(n[1]);\n ret[2] = isNaN(n[2] as any) ? new Date(n[2]).getTime() : Number(n[2]);\n return ret;\n });\n this._gantt._minStart = Math.min(...ganttData.map(n => n[1])) ?? 0;\n this._gantt._maxEnd = Math.max(...ganttData.map(n => n[2])) ?? 1;\n this._gantt.data(ganttData);\n }\n return retVal;\n }\n\n resize(_size?: { width: number, height: number }) {\n const retVal = super.resize.apply(this, arguments);\n\n if (this._topAxisElement) {\n this.resizeWrappers();\n }\n\n return retVal;\n }\n\n click(row, col, sel) {\n\n }\n\n dblclick(row, col, sel) {\n\n }\n\n tooltip() {\n return this._gantt._tooltip;\n }\n}\nReactAxisGantt.prototype._class += \" timeline_ReactAxisGantt\";\n\nexport interface ReactAxisGantt {\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n smallestRangeWidth(): number;\n smallestRangeWidth(_: number): this;\n scaleMode(): boolean;\n scaleMode(_: boolean): this;\n fontSize(): number;\n fontSize(_: number): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n strokeWidth(): number;\n strokeWidth(_: number): this;\n stroke(): string;\n stroke(_: string): this;\n cornerRadius(): number;\n cornerRadius(_: number): this;\n axisFontSize(): number;\n axisFontSize(_: number): this;\n axisFontFamily(): string;\n axisFontFamily(_: string): this;\n axisTickLength(): number;\n axisTickLength(_: number): this;\n axisHeight(): number;\n axisHeight(_: number): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n bucketColumn(): string;\n bucketColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n}\nReactAxisGantt.prototype.publish(\"tickFormat\", null, \"string\", \"Format rule applied to axis tick labels\", undefined, { optional: true });\nReactAxisGantt.prototype.publish(\"axisHeight\", 22, \"number\", \"Height of axes (pixels)\");\nReactAxisGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nReactAxisGantt.prototype.publish(\"smallestRangeWidth\", 10, \"number\", \"Width of the shortest range (pixels)\");\nReactAxisGantt.prototype.publish(\"axisFontSize\", null, \"number\", \"Font size of axis tick labels\");\nReactAxisGantt.prototype.publish(\"axisFontFamily\", null, \"string\", \"Font family of axis tick labels\");\nReactAxisGantt.prototype.publish(\"axisTickLength\", null, \"number\", \"Length of axis ticks\");\nReactAxisGantt.prototype.publishProxy(\"gutter\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"renderMode\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"strokeWidth\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"fontSize\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"fontFamily\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"stroke\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"cornerRadius\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"titleColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"startDateColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"endDateColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"iconColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"colorColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"bucketColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"maxZoom\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"bucketHeight\", \"_gantt\");\n","import { min as d3Min, max as d3Max } from \"d3-array\";\nimport { Axis } from \"@hpcc-js/chart\";\nimport { Border2 } from \"@hpcc-js/layout\";\nimport { React } from \"@hpcc-js/react\";\nimport { ReactGantt } from \"./ReactGantt.ts\";\nimport { IAxisGanttData } from \"./ReactAxisGantt.ts\";\n\nexport class ReactAxisGanttSeries extends Border2 {\n\n protected _topAxis: Axis = new Axis(\"origin\")\n .orientation(\"top\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n protected _gantt: ReactGantt = new ReactGantt(\"origin\")\n .stroke(\"#000000\")\n .fitHeightToContent(true)\n ;\n protected _bottomAxis: Axis = new Axis(\"origin\")\n .orientation(\"bottom\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n\n protected _topAxisElement;\n protected _contentElement;\n protected _bottomAxisElement;\n protected _topRect;\n protected _contentRect;\n protected _bottomRect;\n\n constructor() {\n super();\n this.centerOverflowX_default(\"hidden\");\n this.centerOverflowY_default(\"auto\");\n }\n\n selection(_: any[]): this;\n selection(): any[];\n selection(_?: any[]): any[] | this {\n if (!arguments.length) return this._gantt.selection();\n this._gantt.selection(_);\n return this;\n }\n\n rangeRenderer(): React.FunctionComponent;\n rangeRenderer(_: React.FunctionComponent): this;\n rangeRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n const ret = this._gantt.rangeRenderer.apply(this._gantt, arguments);\n if (!arguments.length) return ret;\n return this;\n }\n\n resizeWrappers() {\n\n const w = this.width();\n const h = this.height();\n\n const axisHeight = this.axisHeight(); //TODO: Dynamic scaling to allow for small resolutions?\n const contentHeight = (h - (axisHeight * 2));\n\n this.bottomHeight(axisHeight);\n\n this._topWA.resize({\n width: w,\n height: axisHeight\n });\n this._centerWA.resize({\n width: w,\n height: contentHeight\n });\n this._bottomWA.resize({\n width: w,\n height: axisHeight\n });\n this.top().render();\n this.bottom().render();\n this.center().render();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._gantt.click = (row, col, sel) => {\n this.click(row, col, sel);\n };\n\n this._gantt.dblclick = (row, col, sel) => {\n this.dblclick(row, col, sel);\n };\n\n this.top(this._topAxis);\n this.center(this._gantt);\n this.bottom(this._bottomAxis);\n\n this.resizeWrappers();\n\n this._gantt.zoomedHook = (transform) => {\n this.onzoom(transform);\n };\n }\n\n onzoom(transform) {\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .lazyRender()\n ;\n this._bottomAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .lazyRender()\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._topAxis.tickFormat(this.tickFormat()).render();\n this._bottomAxis.tickFormat(this.tickFormat()).render();\n this._gantt.render();\n }\n\n columns(): string[];\n columns(_: string[]): this;\n columns(_?: string[]): this | string[] {\n const retVal = super.columns.apply(this, arguments);\n if (arguments.length > 0) {\n this._gantt.columns(_);\n }\n return retVal;\n }\n\n data(): IAxisGanttData[];\n data(_: IAxisGanttData[]): this;\n data(_?: IAxisGanttData[]): this | IAxisGanttData[] {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length > 0) {\n const ganttData: any[] = this.data().map(n => {\n const ret = [...n];\n ret[1] = isNaN(n[1] as any) ? new Date(n[1]).getTime() : Number(n[1]);\n ret[2] = isNaN(n[2] as any) ? new Date(n[2]).getTime() : Number(n[2]);\n return ret;\n });\n\n this._gantt._minStart = d3Min(ganttData, n => n[1]);\n this._gantt._maxEnd = d3Max(ganttData, n => n[2]);\n this._gantt.data(ganttData);\n }\n return retVal;\n }\n\n resize(_size?: { width: number, height: number }) {\n const retVal = super.resize.apply(this, arguments);\n\n if (this._topAxisElement) {\n this.resizeWrappers();\n }\n\n return retVal;\n }\n\n click(row, col, sel) {\n\n }\n\n dblclick(row, col, sel) {\n\n }\n\n tooltip() {\n return this._gantt._tooltip;\n }\n}\nReactAxisGanttSeries.prototype._class += \" timeline_ReactAxisGanttSeries\";\n\nexport interface ReactAxisGanttSeries {\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n smallestRangeWidth(): number;\n smallestRangeWidth(_: number): this;\n scaleMode(): boolean;\n scaleMode(_: boolean): this;\n fontSize(): number;\n fontSize(_: number): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n strokeWidth(): number;\n strokeWidth(_: number): this;\n stroke(): string;\n stroke(_: string): this;\n cornerRadius(): number;\n cornerRadius(_: number): this;\n axisFontSize(): number;\n axisFontSize(_: number): this;\n axisFontFamily(): string;\n axisFontFamily(_: string): this;\n axisTickLength(): number;\n axisTickLength(_: number): this;\n axisHeight(): number;\n axisHeight(_: number): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n seriesColumn(): string;\n seriesColumn(_: string): this;\n bucketColumn(): string;\n bucketColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n}\nReactAxisGanttSeries.prototype.publish(\"tickFormat\", null, \"string\", \"Format rule applied to axis tick labels\", undefined, { optional: true });\nReactAxisGanttSeries.prototype.publish(\"axisHeight\", 22, \"number\", \"Height of axes (pixels)\");\nReactAxisGanttSeries.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nReactAxisGanttSeries.prototype.publish(\"smallestRangeWidth\", 10, \"number\", \"Width of the shortest range (pixels)\");\nReactAxisGanttSeries.prototype.publish(\"axisFontSize\", null, \"number\", \"Font size of axis tick labels\");\nReactAxisGanttSeries.prototype.publish(\"axisFontFamily\", null, \"string\", \"Font family of axis tick labels\");\nReactAxisGanttSeries.prototype.publish(\"axisTickLength\", null, \"number\", \"Length of axis ticks\");\nReactAxisGanttSeries.prototype.publishProxy(\"gutter\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"renderMode\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"strokeWidth\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"fontSize\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"fontFamily\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"stroke\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"cornerRadius\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"titleColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"startDateColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"endDateColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"iconColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"colorColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"seriesColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"bucketColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"maxZoom\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"evenSeriesBackground\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"oddSeriesBackground\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"bucketHeight\", \"_gantt\");\n","import { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\nimport { ReactAxisGantt } from \"./ReactAxisGantt.ts\";\n\nexport class ReactTimeline extends ReactAxisGantt {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor() {\n super();\n this._drawStartPos = \"origin\";\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const parser = d3TimeParse(\"%Q\");\n const startTime = parser(d[1]);\n const endTime = parser(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if (this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().map(n => {\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if (minTimestamp > start) {\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if (maxTimestamp < end) {\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n\n const axisTickFormat = this._axisLabelFormatter\n ? this._axisLabelFormatter\n : (this.tickFormat_exists && this.tickFormat_exists() ? this.tickFormat() : undefined);\n\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n\n if (axisTickFormat) {\n this._topAxis.tickFormat(axisTickFormat);\n this._bottomAxis.tickFormat(axisTickFormat);\n } else {\n this._topAxis.tickFormat_reset();\n this._bottomAxis.tickFormat_reset();\n }\n this._gantt._minStart = minTimestamp;\n this._gantt._maxEnd = maxTimestamp;\n }\n }\n\n tooltipHTML(callback) {\n this._tooltipHTML = callback;\n this.tooltip().tooltipHTML(this._tooltipHTML);\n return this;\n }\n\n parseAxisValue(v) {\n const parseTime = d3TimeParse(\"%Q\");\n const parsedTime = parseTime(v);\n\n const formatTime = d3TimeFormat(this.timePattern());\n return formatTime(parsedTime);\n }\n\n onzoom(transform) {\n\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n this._bottomAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n }\n}\nReactTimeline.prototype._class += \" timeline_ReactTimeline\";\n\nexport interface ReactTimeline {\n _tooltipHTML(_): string;\n\n timePattern(): string;\n timePattern(_: string): this;\n timePattern_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n}\nReactTimeline.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"Time pattern used for parsing datetime strings on each data row\", null, { optional: true });\nReactTimeline.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"Time format used in the default html tooltip\");\n\n","import { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\nimport { ReactAxisGanttSeries } from \"./ReactAxisGanttSeries.ts\";\n\nconst parseTime = d3TimeParse(\"%Q\");\nexport class ReactTimelineSeries extends ReactAxisGanttSeries {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor() {\n super();\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const startTime = parseTime(d[1]);\n const endTime = parseTime(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if (this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().forEach(n => {\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if (minTimestamp > start) {\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if (maxTimestamp < end) {\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n\n const axisTickFormat = this._axisLabelFormatter\n ? this._axisLabelFormatter\n : (this.tickFormat_exists && this.tickFormat_exists() ? this.tickFormat() : undefined);\n\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n\n if (axisTickFormat) {\n this._topAxis.tickFormat(axisTickFormat);\n this._bottomAxis.tickFormat(axisTickFormat);\n } else {\n this._topAxis.tickFormat_reset();\n this._bottomAxis.tickFormat_reset();\n }\n this._gantt._minStart = minTimestamp;\n this._gantt._maxEnd = maxTimestamp;\n }\n }\n\n tickFormatFunc(fn: (d: any) => string): this;\n tickFormatFunc(): ((d: any) => string) | undefined;\n tickFormatFunc(fn?: (d: any) => string): this | ((d: any) => string) | undefined {\n if (!arguments.length) {\n return this._axisLabelFormatter;\n }\n this._axisLabelFormatter = fn;\n\n // Delegate to underlying Axis instances using the proper method\n this._topAxis.tickFormatFunc(fn);\n this._bottomAxis.tickFormatFunc(fn);\n\n return this;\n }\n\n tooltipHTML(callback) {\n this._tooltipHTML = callback;\n this.tooltip().tooltipHTML(this._tooltipHTML);\n return this;\n }\n\n parseAxisValue(v) {\n const parsedTime = parseTime(v);\n\n const formatTime = d3TimeFormat(this.timePattern());\n return formatTime(parsedTime);\n }\n\n onzoom(transform) {\n\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n this._bottomAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n }\n\n _tooltipHTML: (_) => string;\n}\nReactTimelineSeries.prototype._class += \" timeline_ReactTimelineSeries\";\n\nexport interface ReactTimelineSeries {\n timePattern(): string;\n timePattern(_: string): this;\n timePattern_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n tickFormatFunc(fn: (d: any) => string): this;\n tickFormatFunc(): ((d: any) => string) | undefined;\n}\nReactTimelineSeries.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"Time pattern used for parsing datetime strings on each data row\", null, { optional: true });\nReactTimelineSeries.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"Time format used in the default html tooltip\");\n\n"],"names":["PKG_NAME","PKG_VERSION","BUILD_VERSION","_MiniGantt","SVGWidget","tlAxis","brAxis","verticalBands","_zoom","gUpperContent","gUpperAxis","gMiddleContent","gLowerAxis","gLowerContent","localRect","d3Local","localEntityPin","tooltipFormatter","_dateCache","rootExtent","_title_idx","_startDate_idx","_endDate_idx","_icon_idx","_color_idx","_yoffset_idx","constructor","super","ITooltip","call","this","Utility","SimpleSelectionMixin","_drawStartPos","tooltipHTML","d","parse","Axis","type","d3ScaleBand","paddingOuter","paddingInner","isHorizontal","orientation","fullExtent","data","map","filter","d3Extent","extent","centerOnMostRecent","parser","d3TimeParse","timePattern","formatter","d3TimeFormat","date1","date2","Date","setFullYear","getFullYear","time1","getTime","timeDiff","dataStartPos","pos","scalePos","dataEndPos","dataWidth","transform","resetZoom","element","d3ZoomIdentity","translate","height","zoomed","d3Event","render","background","enter","domNode","d3Zoom","scaleExtent","maxZoom","on","append","attr","stopPropagation","target","node","tickFormat","guideTarget","shrinkToFit","overlapMode","tickFormat_exists","extend","_selection","widgetElement","_prevIsHorizontal","update","titleColumn","columns","indexOf","startDateColumn","endDateColumn","iconColumn","colorColumn","yOffsetColumn","tooltipTimeFormat","width","x","reverse","low","high","updateScale","y","hi","parseInvert","invert","invertX","invertY","sort","l","r","retVal","localeCompare","events","ranges","brAxisBBox","getBBox","upperContentHeight","updateEntityPins","lowerAxisHeight","lowerHeight","minYOffset","Math","min","apply","row","isNaN","length","visible","y_offset","upperContentYOffset","lowerAxisYOffset","halfMinYOffset","tlAxisBBox","bucketData","bucketIndex","range","i","bucket","endPos","overlapTolerence","push","vbLower","vbHigher","domain","_d","updateEventRanges","event_height","context","entityPins","selectAll","eventFontColor_idx","eventFontColorColumn","eventBorderColor_idx","eventBorderColorColumn","eventBackgroundColor_idx","eventBackgroundColorColumn","title_counts","title_types","Object","keys","title_group_offset","eventGroupOffset","entityPinsEnter","d3Select","raise","each","entityPin","EntityPin","icon","iconOnlyShowOnHover","hideIconWhenCollapsed","titleOnlyShowOnHover","hideTitleWhenCollapsed","descriptionOnlyShowOnHover","hideDescriptionWhenCollapsed","annotationOnlyShowOnHover","hideAnnotationsWhenCollapsed","iconDiameter","iconPaddingPercent","titleFontSize","descriptionColor","descriptionFontSize","iconColor","titleColor","backgroundShape","backgroundColorFill","backgroundColorStroke","cornerRadius","arrowHeight","arrowWidth","set","merge","get","_title","title","x_offset","eventGroupMod","description","parsed_start_time","formatted_start_time","animationFrameRender","move","calc_height","calcHeight","style","exit","remove","event_offset","abs","eventRangeHeight","lines","buckets","bind","entityRect","EntityRect","rangeFontColor","enterEntityRect","click","rowToObj","selected","dblclick","tooltip","hide","show","textBox","bandwidth","rectWidth","max","rectHeight","paddingSize","fontSize","iconSize","fixedHeight","fixedWidth","padding","updateEntityRect","col","sel","textbox","__name","MiniGantt","prototype","_class","implements","mixin","publish","optional","_ReactGantt","SVGZoomWidget","Selection","_buckets","_interpolateX","_interpolateY","_bucketsBySeries","_dataBySeries","_origIdxMap","_seriesBackgrounds","_maxFontSize","_tooltip","_minStart","_maxEnd","_series_idx","_bucket_idx","_maxX","_maxY","_rangeOptions","rangePadding","fontFamily","fill","stroke","textFill","strokeWidth","drawStartPosition","showToolbar_default","HTMLTooltip","followCursor","selection","_","arguments","_rangeRenderer","LabelledRect","rangeRenderer","clear","zoomExtent","seriesColumn","bucketColumn","w","x1","d3ScaleLinear","a","b","forEach","dataRow","origIdx","seriesKey","gutter","bucketOffset","seriesKeys","calcBuckets","n","bucketHeight","maxBucket","_renderElement","key","join","props","hidden","oddSeriesBackground","evenSeriesBackground","interpedStart","zoomTo","setRangeOptions","_maxFontScale","measureDataText","itemSelection","borderOffset1","borderOffset2","_id","id","isSelected","selectionChanged","classed","__lparam","highlightItem","mousein","d3evt","_triggerElement","_cursorLoc","clientX","clientY","fitContent","mouseover","mouseout","that","endX","bucketMap","interpolateY","_i","text","renderRangeElement","x2","xScale","transformEach","options","_transform","k","setAttribute","bucketScale","truncateText","renderMode","_zoomScale","_zoomTranslate","_zoomG","zoomedHook","startKey","endKey","bucketKey","bucketKeyMap","tol","end","i2","_textWidths","_characterWidths","_prevFontFamily","_prevFontSize","forceMeasure","textWidths","characterWidths","textSize","split","char","scale","ret","sum","_width","resize","_size","fitWidthToContent","fitHeightToContent","_element","_col","ReactGantt","_ReactAxisGantt","_topAxis","_gantt","_bottomAxis","_topAxisElement","_contentElement","_bottomAxisElement","_topRect","_contentRect","_bottomRect","resizeWrappers","h","axisHeight","contentHeight","onzoom","wpp","nextLow","floor","nextHigh","ceil","axisFontFamily","axisFontSize","tickLength","axisTickLength","ganttData","Number","ReactAxisGantt","publishProxy","_ReactAxisGanttSeries","Border2","centerOverflowX_default","centerOverflowY_default","bottomHeight","_topWA","_centerWA","_bottomWA","top","bottom","center","lazyRender","d3Min","d3Max","ReactAxisGanttSeries","_ReactTimeline","_axisLabelFormatter","startTime","endTime","timePattern_exists","minTimestamp","Infinity","maxTimestamp","lowDateStr","highDateStr","start","axisTickFormat","tickFormat_reset","callback","_tooltipHTML","parseAxisValue","v","parsedTime","parseTime","formatTime","ReactTimeline","_ReactTimelineSeries","tickFormatFunc","fn","ReactTimelineSeries"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/MiniGantt.ts","../src/ReactGantt.ts","../src/ReactAxisGantt.ts","../src/ReactAxisGanttSeries.ts","../src/ReactTimeline.ts","../src/ReactTimelineSeries.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { ITooltip } from \"@hpcc-js/api\";\nimport { Axis } from \"@hpcc-js/chart\";\nimport { d3Event, EntityPin, EntityRect, local as d3Local, select as d3Select, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleBand as d3ScaleBand } from \"d3-scale\";\nimport { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\nimport { zoom as d3Zoom, zoomIdentity as d3ZoomIdentity } from \"d3-zoom\";\n\nimport \"../src/MiniGantt.css\";\n\nexport class MiniGantt extends SVGWidget {\n protected tlAxis: Axis;\n protected brAxis: Axis;\n protected verticalBands;\n protected _zoom;\n protected gUpperContent;\n protected gUpperAxis;\n protected gMiddleContent;\n protected gLowerAxis;\n protected gLowerContent;\n private localRect = d3Local<EntityRect>();\n private localEntityPin = d3Local<EntityPin>();\n private tooltipFormatter: (date: Date) => string;\n private _dateCache;\n\n protected rootExtent;\n protected _title_idx = 0;\n protected _startDate_idx = 1;\n protected _endDate_idx = 2;\n protected _icon_idx = -1;\n protected _color_idx = -1;\n protected _yoffset_idx = -1;\n\n constructor() {\n super();\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n this.tooltipHTML((d: any) => `<center>${d[this._title_idx]}</center><br>${this.tooltipFormatter(this.brAxis.parse(d[this._startDate_idx]))} -> ${this.tooltipFormatter(this.brAxis.parse(d[this._endDate_idx]))}`);\n\n this.tlAxis = new Axis()\n .type(\"time\")\n ;\n this.brAxis = new Axis()\n .type(\"time\")\n ;\n this.verticalBands = d3ScaleBand()\n .paddingOuter(0.2)\n .paddingInner(0.2)\n ;\n }\n\n isHorizontal(): boolean {\n return this.orientation() === \"horizontal\";\n }\n\n fullExtent() {\n const data = [...this.data().map(d => d[this._startDate_idx]), ...this.data().filter(d => !!d[this._endDate_idx]).map(d => d[this._endDate_idx])];\n return d3Extent(data);\n }\n\n extent() {\n const extent = this.rootExtent ? [this.rootExtent[1], this.rootExtent[2]] : this.fullExtent();\n if (extent[0] !== undefined && extent[1] !== undefined) {\n if (extent[0] === extent[1] || this.centerOnMostRecent()) {\n const parser = d3TimeParse(this.timePattern());\n const formatter = d3TimeFormat(this.timePattern());\n const date1 = parser(extent[0]);\n const date2 = parser(extent[1]);\n if (extent[0] === extent[1]) {\n extent[0] = formatter(new Date(date1.setFullYear(date1.getFullYear() - 1)));\n extent[1] = formatter(new Date(date1.setFullYear(date1.getFullYear() + 2)));\n } else {\n const time1 = date1.getTime();\n const timeDiff = date2.getTime() - time1;\n extent[0] = formatter(date1);\n extent[1] = formatter(new Date(time1 + (timeDiff * 2)));\n }\n }\n }\n return extent;\n }\n\n dataStartPos(d) {\n if (typeof this._dateCache[d[this._startDate_idx]] !== \"undefined\") {\n return this._dateCache[d[this._startDate_idx]];\n }\n const pos = this.brAxis.scalePos(d[this._startDate_idx]);\n this._dateCache[d[this._startDate_idx]] = pos;\n return pos;\n }\n\n dataEndPos(d) {\n if (typeof this._dateCache[d[this._endDate_idx]] !== \"undefined\") {\n return this._dateCache[d[this._endDate_idx]];\n }\n const pos = this.brAxis.scalePos(d[this._endDate_idx]);\n this._dateCache[d[this._endDate_idx]] = pos;\n return pos;\n }\n\n dataWidth(d) {\n return this.dataEndPos(d) - this.dataStartPos(d);\n }\n\n private transform;\n resetZoom() {\n // Triggers a \"zoomed\" event ---\n this._zoom.transform(this.element(), d3ZoomIdentity.translate(0, this.isHorizontal() ? 0 : this.height()));\n }\n\n zoomed() {\n this.transform = d3Event().transform;\n this.render();\n }\n\n private background;\n enter(domNode, element) {\n super.enter(domNode, element);\n this._zoom = d3Zoom()\n .scaleExtent([0, this.maxZoom()])\n .on(\"zoom\", () => {\n this.zoomed();\n })\n ;\n\n this.background = element.append(\"rect\")\n .attr(\"fill\", \"white\")\n .attr(\"opacity\", 0)\n .on(\"dblclick\", () => {\n d3Event().stopPropagation();\n delete this.rootExtent;\n this.resetZoom();\n })\n ;\n this.gUpperContent = element.append(\"g\").attr(\"class\", \"gUpperContent\");\n this.gUpperAxis = element.append(\"g\").attr(\"class\", \"gUpperAxis\");\n this.gMiddleContent = element.append(\"g\").attr(\"class\", \"gMiddleContent\");\n this.gLowerAxis = element.append(\"g\").attr(\"class\", \"gLowerAxis\");\n this.gLowerContent = element.append(\"g\").attr(\"class\", \"gLowerContent\");\n this.tlAxis\n .target(this.gUpperAxis.node())\n .tickFormat(this.tickFormat())\n .guideTarget(this.gUpperAxis.append(\"g\").node())\n .shrinkToFit(\"none\")\n .overlapMode(this.tickFormat_exists() ? \"stagger\" : \"none\")\n .extend(0.1)\n ;\n this.brAxis\n .target(this.gLowerAxis.node())\n .tickFormat(this.tickFormat())\n .guideTarget(this.gLowerAxis.append(\"g\").node())\n .shrinkToFit(\"none\")\n .overlapMode(this.tickFormat_exists() ? \"stagger\" : \"none\")\n .extend(0.1)\n ;\n\n element.call(this._zoom);\n this._selection.widgetElement(this.gMiddleContent);\n }\n\n private _prevIsHorizontal;\n update(domNode, element) {\n super.update(domNode, element);\n\n this._dateCache = {};\n\n this._title_idx = this.titleColumn() !== null ? this.columns().indexOf(this.titleColumn()) : this._title_idx;\n this._startDate_idx = this.startDateColumn() !== null ? this.columns().indexOf(this.startDateColumn()) : this._startDate_idx;\n this._endDate_idx = this.endDateColumn() !== null ? this.columns().indexOf(this.endDateColumn()) : this._endDate_idx;\n this._icon_idx = this.iconColumn() !== null ? this.columns().indexOf(this.iconColumn()) : this._icon_idx;\n this._color_idx = this.colorColumn() !== null ? this.columns().indexOf(this.colorColumn()) : this._color_idx;\n this._yoffset_idx = this.yOffsetColumn() !== null ? this.columns().indexOf(this.yOffsetColumn()) : this._yoffset_idx;\n\n if (this._prevIsHorizontal !== this.isHorizontal()) {\n this._prevIsHorizontal = this.isHorizontal();\n this.resetZoom();\n return;\n }\n\n this.tooltipFormatter = d3TimeFormat(this.tooltipTimeFormat());\n\n const width = this.width();\n const height = this.height();\n\n this.background\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n .attr(\"width\", width)\n .attr(\"height\", height)\n ;\n\n const extent = this.extent();\n this.tlAxis\n .x(width / 2)\n .orientation(this.isHorizontal() ? \"top\" : \"left\")\n .reverse(!this.isHorizontal())\n .timePattern(this.timePattern()) // \"%Y-%m-%dT%H:%M:%S.%LZ\"\n .width(width - 1)\n .low(extent[0])\n .high(extent[1])\n .updateScale()\n ;\n\n this.brAxis\n .x(width / 2)\n .y(height / 2)\n .orientation(this.isHorizontal() ? \"bottom\" : \"right\")\n .reverse(!this.isHorizontal())\n .timePattern(this.timePattern()) // \"%Y-%m-%dT%H:%M:%S.%LZ\"\n .width(width - 1)\n .height(height)\n .low(extent[0])\n .high(extent[1])\n .updateScale()\n ;\n\n if (this.transform) {\n let low;\n let hi;\n if (this.isHorizontal()) {\n low = this.tlAxis.parseInvert(this.tlAxis.invert(this.transform.invertX(0)));\n hi = this.tlAxis.parseInvert(this.tlAxis.invert(this.transform.invertX(width - 1)));\n } else {\n low = this.tlAxis.parseInvert(this.tlAxis.invert(- this.transform.invertY(0)));\n hi = this.tlAxis.parseInvert(this.tlAxis.invert(- this.transform.invertY(height - 1)));\n }\n this.tlAxis\n .low(low)\n .high(hi)\n .updateScale()\n ;\n this.brAxis\n .low(low)\n .high(hi)\n .updateScale()\n ;\n }\n\n const data = this.data().sort(this.isHorizontal() ? (l, r) => {\n const retVal = this.brAxis.scalePos(l[1]) - this.brAxis.scalePos(r[1]);\n if (retVal === 0) {\n return (\"\" + l[0]).localeCompare(\"\" + r[0]);\n }\n return retVal;\n } : (l, r) => {\n return this.brAxis.scalePos(r[1]) - this.brAxis.scalePos(l[1]);\n });\n const events = data.filter(d => !d[this._endDate_idx]);\n const ranges = data.filter(d => !!d[this._endDate_idx]);\n\n this.tlAxis\n .render()\n ;\n this.brAxis\n .render()\n ;\n const brAxisBBox = this.brAxis.getBBox();\n\n let upperContentHeight = this.updateEntityPins(events);\n const lowerAxisHeight = brAxisBBox.height;\n let lowerHeight = height - upperContentHeight;\n const minYOffset = this._yoffset_idx !== -1 ? Math.min.apply(undefined, this.data().filter(row => !isNaN(row[this._yoffset_idx])).map(row => row[this._yoffset_idx])) : 0;\n if (events.length > 0 && ranges.length === 0) {\n // ONLY EVENTS\n this.tlAxis.visible(false);\n let y_offset = upperContentHeight / 4;\n if (y_offset > (height / 2) - lowerAxisHeight) {\n y_offset = (height / 2) - lowerAxisHeight;\n }\n const upperContentYOffset = (height / 2) + y_offset;\n const lowerAxisYOffset = ((height / 2) - lowerAxisHeight - y_offset) * -1;\n const halfMinYOffset = minYOffset !== 0 ? minYOffset / 2 : 0;\n this.gUpperContent.attr(\"transform\", `translate(0, ${upperContentYOffset - halfMinYOffset})`);\n this.gLowerAxis.attr(\"transform\", `translate(0, ${lowerAxisYOffset - halfMinYOffset})`);\n } else if (events.length === 0 && ranges.length > 0) {\n // ONLY RANGES\n this.tlAxis.visible(true);\n this.gUpperContent.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n this.gUpperAxis.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n } else {\n upperContentHeight -= minYOffset;\n lowerHeight += minYOffset;\n // BOTH\n this.tlAxis.visible(true);\n this.gUpperContent.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n this.gUpperAxis.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n this.gMiddleContent.attr(\"transform\", `translate(0, ${upperContentHeight})`);\n }\n this.tlAxis\n .render()\n ;\n const tlAxisBBox = this.tlAxis.getBBox();\n interface BucketInfo {\n endPos: number;\n }\n const bucketData: BucketInfo[] = [];\n const bucketIndex = {};\n for (const range of ranges) {\n for (let i = 0; i < bucketData.length; ++i) {\n const bucket = bucketData[i];\n if (bucket.endPos + this.overlapTolerence() <= this.dataStartPos(range)) {\n bucketIndex[range] = i;\n bucket.endPos = this.dataEndPos(range);\n break;\n }\n }\n\n if (bucketIndex[range] === undefined) {\n bucketIndex[range] = bucketData.length;\n bucketData.push({\n endPos: this.dataEndPos(range)\n });\n }\n }\n\n const vbLower = this.isHorizontal() ? 0 + tlAxisBBox.height : 0 + tlAxisBBox.width;\n const vbHigher = this.isHorizontal() ? lowerHeight - brAxisBBox.height : width - brAxisBBox.width;\n this.verticalBands\n .range([vbLower, vbHigher])\n .domain(bucketData.map((_d, i) => i))\n ;\n\n if (ranges.length > 0) {\n this.updateEventRanges(events, ranges, bucketIndex, lowerHeight, tlAxisBBox, brAxisBBox, width);\n }\n }\n\n updateEntityPins(events) {\n let event_height = 0;\n const context = this;\n const entityPins = this.gUpperContent.selectAll(\".entity_pin\").data(events, d => d[0] + \":\" + d[1]);\n const eventFontColor_idx = this.eventFontColorColumn() ? this.columns().indexOf(this.eventFontColorColumn()) : -1;\n const eventBorderColor_idx = this.eventBorderColorColumn() ? this.columns().indexOf(this.eventBorderColorColumn()) : -1;\n const eventBackgroundColor_idx = this.eventBackgroundColorColumn() ? this.columns().indexOf(this.eventBackgroundColorColumn()) : -1;\n const title_counts = {};\n for (const d of events) {\n const type = typeof d[context._title_idx] !== \"undefined\" ? d[context._title_idx] : d[0];\n title_counts[type] = title_counts[type] ? title_counts[type] + 1 : 1;\n }\n const title_types = Object.keys(title_counts);\n const title_group_offset = context.eventGroupOffset();\n const entityPinsEnter = entityPins.enter().append(\"g\")\n .attr(\"class\", \"entity_pin\");\n entityPinsEnter.append(\"line\")\n .attr(\"class\", \"entity_line\");\n\n entityPinsEnter\n .on(\"mouseover\", function (d) {\n d3Select(this).raise();\n })\n .each(function (d, i) {\n const entityPin = new EntityPin()\n .target(this)\n .icon(\"\")\n .iconOnlyShowOnHover(context.hideIconWhenCollapsed())\n .titleOnlyShowOnHover(context.hideTitleWhenCollapsed())\n .descriptionOnlyShowOnHover(context.hideDescriptionWhenCollapsed())\n .annotationOnlyShowOnHover(context.hideAnnotationsWhenCollapsed())\n .iconDiameter(18)\n .iconPaddingPercent(1)\n .titleFontSize(14)\n .descriptionColor(\"#333\")\n .descriptionFontSize(15)\n .iconColor(eventFontColor_idx === -1 ? \"#333\" : d[eventFontColor_idx])\n .titleColor(eventFontColor_idx === -1 ? \"#333\" : d[eventFontColor_idx])\n .descriptionColor(eventFontColor_idx === -1 ? \"#333\" : d[eventFontColor_idx])\n .backgroundShape(\"pin\")\n .backgroundColorFill(eventFontColor_idx === -1 ? \"#f8f8f8\" : d[eventBackgroundColor_idx])\n .backgroundColorStroke(eventFontColor_idx === -1 ? \"#ccc\" : d[eventBorderColor_idx])\n .cornerRadius(5)\n .arrowHeight(10)\n .arrowWidth(16)\n ;\n context.localEntityPin.set(this, entityPin);\n })\n .merge(entityPins)\n .each(function (d, i) {\n const entityPin = context.localEntityPin.get(this);\n const _title = typeof d[context._title_idx] !== \"undefined\" ? d[context._title_idx] : entityPin.title();\n const x_offset = context.dataStartPos(d) - 0;\n let y_offset = ((title_types.indexOf(_title) % context.eventGroupMod()) * title_group_offset) - 5;\n if (typeof d[context._yoffset_idx] !== \"undefined\") y_offset += d[context._yoffset_idx] ? d[context._yoffset_idx] : 0;\n if (d[context._title_idx] !== entityPin.title() && d[context._startDate_idx] !== entityPin.description()) {\n const parsed_start_time = context.brAxis.parse(d[context._startDate_idx]);\n const formatted_start_time = context.tooltipFormatter(parsed_start_time);\n entityPin\n .x(x_offset)\n .y(y_offset)\n .iconOnlyShowOnHover(context.hideIconWhenCollapsed())\n .titleOnlyShowOnHover(context.hideTitleWhenCollapsed())\n .descriptionOnlyShowOnHover(context.hideDescriptionWhenCollapsed())\n .annotationOnlyShowOnHover(context.hideAnnotationsWhenCollapsed())\n .icon(typeof d[context._icon_idx] !== \"undefined\" ? d[context._icon_idx] : entityPin.icon())\n .title(_title)\n .description(formatted_start_time)\n .animationFrameRender()\n ;\n } else {\n entityPin.move({ x: x_offset, y: y_offset });\n }\n const calc_height = entityPin.calcHeight();\n if (event_height < calc_height) event_height = calc_height;\n\n d3Select(this).selectAll(\".entity_line\")\n .attr(\"x1\", x_offset)\n .attr(\"x2\", x_offset)\n .attr(\"y1\", 0)\n .attr(\"y2\", y_offset)\n .style(\"stroke\", eventFontColor_idx === -1 ? \"#ccc\" : d[eventBorderColor_idx])\n .style(\"stroke-width\", 1)\n ;\n })\n ;\n entityPins.exit()\n .each(function (d, i) {\n const entityPin = context.localEntityPin.get(this);\n entityPin.target(null);\n\n })\n .remove();\n const event_offset = Math.abs(Math.min(events.length, context.eventGroupMod()) * context.eventGroupOffset());\n return event_height + event_offset;\n }\n\n updateEventRanges(events, ranges, bucketIndex, eventRangeHeight, tlAxisBBox, brAxisBBox, width) {\n const context = this;\n\n const lines = this.gMiddleContent.selectAll(\".line\").data(events, d => {\n return d[context._title_idx];\n });\n lines.enter().append(\"line\")\n .attr(\"class\", \"line\")\n .merge(lines)\n .attr(this.isHorizontal() ? \"x1\" : \"y1\", d => this.dataStartPos(d) - 0)\n .attr(this.isHorizontal() ? \"x2\" : \"y2\", d => this.dataStartPos(d) - 0)\n .attr(this.isHorizontal() ? \"y1\" : \"x1\", this.isHorizontal() ? tlAxisBBox.height : tlAxisBBox.width)\n .attr(this.isHorizontal() ? \"y2\" : \"x2\", this.isHorizontal() ? eventRangeHeight - brAxisBBox.height : width - brAxisBBox.width)\n ;\n lines.exit().remove();\n const buckets = this.gMiddleContent.selectAll(\".buckets\").data(ranges, d => d[context._title_idx]);\n buckets.enter().append(\"g\")\n .attr(\"class\", \"buckets\")\n .call(this._selection.enter.bind(this._selection))\n .each(function (d) {\n const entityRect = new EntityRect()\n .target(this)\n .iconDiameter(28)\n .iconPaddingPercent(0)\n .titleFontSize(28)\n .titleColor(context.rangeFontColor())\n .descriptionColor(context.rangeFontColor())\n .iconColor(context.rangeFontColor())\n .backgroundShape(\"rect\")\n .backgroundColorFill(d[context._color_idx])\n ;\n context.localRect.set(this, entityRect);\n context.enterEntityRect(entityRect, d);\n })\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d), \"range\", context._selection.selected(this));\n }, false)\n .on(\"dblclick\", function (d) {\n context.rootExtent = d;\n context.resetZoom();\n context.dblclick(context.rowToObj(d), \"range\", context._selection.selected(this));\n }, true)\n .on(\"mouseout.tooltip\", this.tooltip.hide)\n .on(\"mousemove.tooltip\", this.tooltip.show)\n .merge(buckets)\n .attr(\"transform\", d => context.isHorizontal() ?\n `translate(${this.dataStartPos(d)}, ${this.verticalBands(bucketIndex[d])}) ` :\n `translate(${this.verticalBands(bucketIndex[d])}, ${this.dataStartPos(d)}) `)\n .each(function (d) {\n const textBox = context.localRect.get(this);\n const x = context.dataWidth(d) / 2;\n const y = context.verticalBands.bandwidth() / 2;\n const rectWidth = Math.max(context.dataWidth(d), 2);\n const rectHeight = Math.max(context.verticalBands.bandwidth(), 2);\n const fontHeightRatio = 0.618;\n const paddingRatio = ((1 - fontHeightRatio) / 2);\n const paddingSize = paddingRatio * rectHeight;\n const fontSize = rectHeight * fontHeightRatio;\n const iconSize = fontSize;\n textBox\n .pos(context.isHorizontal() ? { x, y } : { x: y, y: x })\n .fixedHeight(context.isHorizontal() ? rectHeight : rectWidth)\n .fixedWidth(context.isHorizontal() ? rectWidth : rectHeight)\n .icon(typeof d[context._icon_idx] !== \"undefined\" ? d[context._icon_idx] : \"\")\n .title(typeof d[context._title_idx] !== \"undefined\" ? d[context._title_idx] : \"\")\n .padding(paddingSize)\n .iconDiameter(iconSize)\n .titleFontSize(fontSize)\n ;\n if (iconSize * 1.5 > rectWidth) {\n textBox.icon(null);\n }\n context.updateEntityRect(textBox, d[context._icon_idx]);\n textBox\n .render()\n ;\n });\n buckets.exit().remove();\n }\n\n exit(domNode, element) {\n this.brAxis.target(null);\n this.tlAxis.target(null);\n super.exit(domNode, element);\n }\n\n // Events ---\n click(row, col, sel) {\n }\n\n dblclick(row, col, sel) {\n }\n\n enterEntityRect(textbox: EntityRect, d) {\n }\n\n updateEntityRect(textbox: EntityRect, d) {\n }\n}\nMiniGantt.prototype._class += \" timeline_MiniGantt\";\nMiniGantt.prototype.implements(ITooltip.prototype);\nMiniGantt.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface MiniGantt {\n // ITooltip ---\n tooltip;\n tooltipHTML(_): string;\n tooltipFormat(_): string;\n\n // SimpleSelectionMixin\n _selection;\n\n // Properties ---\n timePattern(): string;\n timePattern(_: string): this;\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n orientation(): string;\n orientation(_: string): this;\n rangeFontColor(): string;\n rangeFontColor(_: string): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n yOffsetColumn(): string;\n yOffsetColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n eventGroupMod(): number;\n eventGroupMod(_: number): this;\n eventGroupOffset(): number;\n eventGroupOffset(_: number): this;\n eventFontColorColumn(): string;\n eventFontColorColumn(_: string): this;\n eventBorderColorColumn(): string;\n eventBorderColorColumn(_: string): this;\n eventBackgroundColorColumn(): string;\n eventBackgroundColorColumn(_: string): this;\n hideIconWhenCollapsed(): boolean;\n hideIconWhenCollapsed(_: boolean): this;\n hideTitleWhenCollapsed(): boolean;\n hideTitleWhenCollapsed(_: boolean): this;\n hideDescriptionWhenCollapsed(): boolean;\n hideDescriptionWhenCollapsed(_: boolean): this;\n hideAnnotationsWhenCollapsed(): boolean;\n hideAnnotationsWhenCollapsed(_: boolean): this;\n centerOnMostRecent(): boolean;\n centerOnMostRecent(_: boolean): this;\n\n}\n\nMiniGantt.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"timePattern\");\nMiniGantt.prototype.publish(\"tickFormat\", null, \"string\", \"tickFormat\", undefined, { optional: true });\nMiniGantt.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"tooltipTimeFormat\");\nMiniGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nMiniGantt.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"orientation\", [\"horizontal\", \"vertical\"]);\nMiniGantt.prototype.publish(\"rangeFontColor\", \"#ecf0f1\", \"html-color\", \"rangeFontColor\");\nMiniGantt.prototype.publish(\"titleColumn\", null, \"string\", \"titleColumn\");\nMiniGantt.prototype.publish(\"startDateColumn\", null, \"string\", \"startDateColumn\");\nMiniGantt.prototype.publish(\"endDateColumn\", null, \"string\", \"endDateColumn\");\nMiniGantt.prototype.publish(\"iconColumn\", null, \"string\", \"iconColumn\");\nMiniGantt.prototype.publish(\"colorColumn\", null, \"string\", \"colorColumn\");\nMiniGantt.prototype.publish(\"yOffsetColumn\", null, \"string\", \"yOffsetColumn\");\nMiniGantt.prototype.publish(\"maxZoom\", 16, \"number\", \"maxZoom\");\nMiniGantt.prototype.publish(\"eventGroupOffset\", -50, \"number\", \"eventGroupOffset\");\nMiniGantt.prototype.publish(\"eventGroupMod\", 5, \"number\", \"eventGroupMod\");\nMiniGantt.prototype.publish(\"eventFontColorColumn\", null, \"string\", \"eventFontColorColumn\");\nMiniGantt.prototype.publish(\"eventBorderColorColumn\", null, \"string\", \"eventBorderColorColumn\");\nMiniGantt.prototype.publish(\"eventBackgroundColorColumn\", null, \"string\", \"eventBackgroundColorColumn\");\nMiniGantt.prototype.publish(\"hideIconWhenCollapsed\", false, \"boolean\", \"hideIconWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideTitleWhenCollapsed\", false, \"boolean\", \"hideTitleWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideDescriptionWhenCollapsed\", false, \"boolean\", \"hideDescriptionWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideAnnotationsWhenCollapsed\", true, \"boolean\", \"hideAnnotationsWhenCollapsed\");\nMiniGantt.prototype.publish(\"centerOnMostRecent\", false, \"boolean\", \"If true, the timeline will be centered on the most recent data point\");\n","import { d3Event, select as d3Select, SVGZoomWidget, Utility } from \"@hpcc-js/common\";\nimport { HTMLTooltip } from \"@hpcc-js/html\";\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\nimport { React, render, LabelledRect } from \"@hpcc-js/react\";\n\nexport type IGanttData = [string, number, number, any?];\n\nexport interface IRangeOptions {\n rangePadding: number;\n fontFamily: string;\n fontSize: number;\n strokeWidth?: number;\n fill: string;\n stroke: string;\n textFill: string;\n cornerRadius: number;\n}\n\nexport class ReactGantt extends SVGZoomWidget {\n\n protected _selection = new Utility.Selection(this);\n\n protected _buckets;\n protected _interpolateX;\n protected _interpolateY;\n\n protected _bucketsBySeries;\n protected _dataBySeries;\n protected _origIdxMap;\n private _seriesBackgrounds;\n\n protected _maxFontSize;\n\n public _tooltip;\n\n public _minStart: number;\n public _maxEnd: number;\n\n protected _prevZoomState: { visibleStart: number; visibleEnd: number } | null = null;\n\n protected _title_idx = 0;\n protected _startDate_idx = 1;\n protected _endDate_idx = 2;\n protected _icon_idx = -1;\n protected _color_idx = -1;\n protected _series_idx = -1;\n protected _bucket_idx = -1;\n protected _yoffset_idx = -1;\n\n protected _maxX: number;\n protected _maxY: number;\n\n private _rangeOptions: IRangeOptions = {\n rangePadding: 2,\n fontFamily: \"Verdana\",\n fontSize: 12,\n fill: \"white\",\n stroke: \"black\",\n textFill: \"black\",\n cornerRadius: 3,\n strokeWidth: 0\n };\n\n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n super();\n this._drawStartPos = drawStartPosition;\n\n this.showToolbar_default(false);\n\n this._tooltip = new HTMLTooltip();\n this._tooltip\n .tooltipHTML(d => {\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${d[1]} -> ${d[2]}</div>`;\n });\n this._tooltip\n .followCursor(true)\n ;\n }\n\n selection(_: any[]): this;\n selection(): any[];\n selection(_?: any[]): any[] | this {\n if (!arguments.length) return this._selection.get();\n this._selection.set(_);\n return this;\n }\n\n private _rangeRenderer: React.FunctionComponent = LabelledRect;\n rangeRenderer(): React.FunctionComponent;\n rangeRenderer(_: React.FunctionComponent): this;\n rangeRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n if (!arguments.length) return this._rangeRenderer;\n this._rangeRenderer = _;\n return this._rangeRenderer;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n const context = this;\n element\n .on(\"click\", function (this: SVGElement, d) {\n context._selection.clear();\n });\n\n this._tooltip.target(domNode);\n }\n update(domNode, element) {\n super.update(domNode, element);\n\n this.zoomExtent([0.05, this.maxZoom()]);\n\n this._title_idx = this.titleColumn() !== null ? this.columns().indexOf(this.titleColumn()) : this._title_idx;\n this._startDate_idx = this.startDateColumn() !== null ? this.columns().indexOf(this.startDateColumn()) : this._startDate_idx;\n this._endDate_idx = this.endDateColumn() !== null ? this.columns().indexOf(this.endDateColumn()) : this._endDate_idx;\n this._icon_idx = this.iconColumn() !== null ? this.columns().indexOf(this.iconColumn()) : this._icon_idx;\n this._color_idx = this.colorColumn() !== null ? this.columns().indexOf(this.colorColumn()) : this._color_idx;\n this._series_idx = this.seriesColumn() !== null ? this.columns().indexOf(this.seriesColumn()) : this._series_idx;\n this._bucket_idx = this.bucketColumn() !== null ? this.columns().indexOf(this.bucketColumn()) : -1;\n\n const context = this;\n const w = this.width();\n\n const x0 = 0;\n const x1 = w;\n\n this._interpolateX = d3ScaleLinear()\n .domain([this._minStart, this._maxEnd])\n .range([x0, x1])\n ;\n\n this.data().sort((a, b) => a[1] - b[1]);\n\n if (this._series_idx > -1) {\n this._origIdxMap = {};\n this._dataBySeries = {};\n this._bucketsBySeries = {};\n this.data().forEach((dataRow, origIdx) => {\n const seriesKey = dataRow[this._series_idx];\n if (!this._dataBySeries[seriesKey]) {\n this._origIdxMap[seriesKey] = {};\n this._dataBySeries[seriesKey] = [];\n }\n this._dataBySeries[seriesKey].push({\n dataRow,\n origIdx\n });\n });\n const gutter = this.gutter();\n let bucketOffset = 0;\n const seriesKeys = Object.keys(this._dataBySeries);\n seriesKeys.forEach(seriesKey => {\n this._dataBySeries[seriesKey].sort((a, b) => a.dataRow[1] - b.dataRow[1]);\n this._bucketsBySeries[seriesKey] = this.calcBuckets(this._dataBySeries[seriesKey].map(n => n.dataRow), 1, 2);\n this._bucketsBySeries[seriesKey].bucketHeight = this.bucketHeight();\n this._bucketsBySeries[seriesKey].bucketOffset = bucketOffset;\n bucketOffset += (this._bucketsBySeries[seriesKey].bucketHeight + this.strokeWidth() + this.gutter()) * (this._bucketsBySeries[seriesKey].maxBucket + 1);\n this._dataBySeries[seriesKey].forEach((n, i) => {\n this._origIdxMap[seriesKey][n.origIdx] = i;\n });\n });\n this._seriesBackgrounds = this._renderElement.selectAll(\".series-background\")\n .data(seriesKeys.map(key => {\n return this._bucketsBySeries[key];\n }))\n ;\n this._seriesBackgrounds\n .join(\n enter => enter.append(\"rect\")\n .attr(\"class\", \"series-background\"),\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .attr(\"opacity\", d => d.props && d.props.hidden ? 0 : 1)\n .each(function (this: SVGGElement, d, i) {\n d3Select(this)\n .attr(\"x\", 0)\n .attr(\"y\", d.bucketOffset - (gutter / 2))\n .attr(\"width\", w)\n .attr(\"height\", ((d.bucketHeight + gutter) * (d.maxBucket + 1)) + gutter)\n .attr(\"fill\", i % 2 ? context.oddSeriesBackground() : context.evenSeriesBackground())\n ;\n });\n } else {\n if (this._bucket_idx !== -1) {\n this._buckets = this.calcBuckets(this.data(), this._startDate_idx, this._endDate_idx, this._bucket_idx);\n } else {\n this._buckets = this.calcBuckets(this.data(), this._startDate_idx, this._endDate_idx);\n }\n }\n\n if (!this.preserveZoom() || !this._prevZoomState) {\n const interpedStart = this._interpolateX(this._minStart);\n this.zoomTo(\n [interpedStart, 0],\n 1\n );\n }\n\n const bucketHeight = this.bucketHeight();\n\n this.setRangeOptions();\n\n this._maxFontScale = (bucketHeight - (this.rangePadding() * 2));\n this.measureDataText();\n\n const itemSelection = this._renderElement.selectAll(\".item\")\n .data(this.data())\n ;\n const borderOffset1 = this.strokeWidth();\n const borderOffset2 = borderOffset1 * 2;\n itemSelection\n .join(\n enter => enter.append(\"g\")\n .attr(\"class\", \"item\")\n .on(\"click.selectionBag\", function (d, i) {\n const _id = d.id === undefined ? i : d.id;\n if (context._selection.isSelected({ _id, element: d.element })) {\n context._selection.clear();\n } else {\n context._selection.click(\n {\n _id,\n element: () => d.element\n },\n d3Event\n );\n }\n context.selectionChanged();\n d3Event().stopPropagation();\n })\n .on(\"click\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n if (d[context.columns().length]) {\n d.__lparam = d[context.columns().length];\n }\n context.click(d, \"\", selected);\n })\n .on(\"dblclick\", function (this: SVGElement, d) {\n const selected = d.element.classed(\"selected\");\n if (d[context.columns().length]) {\n d.__lparam = d[context.columns().length];\n }\n context.click(d, \"\", selected);\n })\n .on(\"mousein\", function (d) {\n context.highlightItem(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n context.mousein(d, \"\", selected);\n })\n .on(\"mouseover\", function (d) {\n const d3evt = d3Event();\n context._tooltip._triggerElement = d.element;\n context._tooltip._cursorLoc = [\n d3evt.clientX,\n d3evt.clientY\n ];\n context._tooltip\n .data(d)\n .visible(true)\n .fitContent(true)\n .render()\n ;\n context.highlightItem(d3Select(this), d);\n const selected = d.element.classed(\"selected\");\n context.mouseover(d, \"\", selected);\n })\n .on(\"mouseout\", function (d) {\n context._tooltip\n .visible(false)\n .render()\n ;\n context.highlightItem(null, null);\n const selected = d.element.classed(\"selected\");\n context.mouseout(d, \"\", selected);\n })\n .each(function (d, i) {\n d.that = this;\n d.element = d3Select(this);\n d.x = context._interpolateX(d[1]);\n const endX = context._interpolateX(d[2]);\n if (context._series_idx > -1) {\n const seriesKey = d[context._series_idx];\n const bucket = context._bucketsBySeries[seriesKey].bucketMap[context._origIdxMap[seriesKey][i]];\n d.y = context._bucketsBySeries[seriesKey].interpolateY(bucket) + context._bucketsBySeries[seriesKey].bucketOffset;\n } else {\n const _i = context._bucket_idx === -1 ? i : d[context._bucket_idx];\n d.y = context._buckets.interpolateY(context._buckets.bucketMap[_i]);\n }\n d.props = {\n ...d[3],\n text: d[0]\n };\n d.props.width = endX - d.x;\n d.props.height = bucketHeight;\n d.x += borderOffset1;\n d.y += borderOffset1;\n d.props.width -= borderOffset2;\n d.props.height -= borderOffset2;\n d.element.attr(\"transform\", `translate(${d.x + (d.props.width / 2)} ${d.y + (d.props.height / 2)})`);\n }),\n update => update,\n exit => exit\n .each(function (d) {\n delete d.element;\n })\n .remove()\n )\n .attr(\"opacity\", d => d.props && d.props.hidden ? 0 : 1)\n .each(function (this: SVGGElement, d, i) {\n d.that = this;\n if (context._series_idx > -1) {\n const seriesKey = d[context._series_idx];\n d.x = context.renderRangeElement(d, i, false, context._rangeOptions, seriesKey);\n } else {\n d.x = context.renderRangeElement(d, i, false, context._rangeOptions);\n }\n })\n .on(\"dblclick.zoom\", d => {\n const x1 = this._interpolateX(d[1]);\n const x2 = this._interpolateX(d[2]);\n const xRange = x2 - x1;\n const xScale = w / xRange;\n this.zoomTo(\n [\n -x1 * xScale,\n 0\n ],\n xScale\n );\n })\n ;\n element.on(\"dblclick.zoom\", null);\n\n // restore zoom state after all rendering is set up\n if (this.preserveZoom() && this._prevZoomState && this._interpolateX) {\n const width = this.width();\n if (width > 0) {\n const visibleStart = this._minStart;\n const visibleEnd = this._maxEnd;\n const clampedStart = Math.max(visibleStart, Math.min(visibleEnd, this._prevZoomState.visibleStart));\n let clampedEnd = Math.max(visibleStart, Math.min(visibleEnd, this._prevZoomState.visibleEnd));\n if (clampedEnd <= clampedStart) {\n const visibleWidth = visibleEnd - visibleStart;\n const epsilon = visibleWidth * 1e-6 || 1e-6;\n clampedEnd = Math.min(visibleEnd, clampedStart + epsilon);\n }\n const startPixel = this._interpolateX(clampedStart);\n const endPixel = this._interpolateX(clampedEnd);\n const span = endPixel - startPixel;\n if (isFinite(span) && Math.abs(span) > 1e-9) {\n const rawScale = width / span;\n const minScale = 0.05; // must match zoomExtent minimum set at start of update()\n const maxScale = this.maxZoom();\n const targetScale = Math.max(minScale, Math.min(maxScale, rawScale));\n\n if (targetScale > 0 && isFinite(targetScale)) {\n const centerPixel = (startPixel + endPixel) / 2;\n const halfViewport = width / (2 * targetScale);\n const x0 = this._interpolateX(visibleStart);\n const x1 = this._interpolateX(visibleEnd);\n\n let clampedCenter = centerPixel;\n if (clampedCenter - halfViewport < x0) {\n clampedCenter = x0 + halfViewport;\n }\n if (clampedCenter + halfViewport > x1) {\n clampedCenter = x1 - halfViewport;\n }\n\n const translateX = (width / 2) - (targetScale * clampedCenter);\n if (isFinite(translateX)) {\n this.zoomTo([translateX, 0], targetScale);\n }\n }\n }\n }\n }\n }\n exit(domNode, element) {\n this._tooltip.target(null);\n super.exit(domNode, element);\n }\n renderRangeElement(d, i, transformEach = false, options: any = {}, seriesKey?: string) {\n const borderOffset1 = options.strokeWidth;\n const borderOffset2 = borderOffset1 * 2;\n const padding = options.rangePadding;\n let endX;\n const x = isNaN(this._transform.x) ? 0 : this._transform.x;\n const k = isNaN(this._transform.k) ? 1 : this._transform.k;\n let b;\n const bucketHeight = this.bucketHeight();\n d.that.setAttribute(\"data-series\", seriesKey);\n\n if (this._color_idx > -1) {\n d.that.setAttribute(\"data-color\", d[this._color_idx]);\n }\n\n if (seriesKey !== undefined) {\n b = this._bucketsBySeries[seriesKey].bucketMap[this._origIdxMap[seriesKey][i]];\n d.that.setAttribute(\"data-b\", b);\n d.that.setAttribute(\"data-bucketOffset\", this._bucketsBySeries[seriesKey].bucketOffset);\n d.y = this._bucketsBySeries[seriesKey].interpolateY(b) + this._bucketsBySeries[seriesKey].bucketOffset;\n d.that.setAttribute(\"data-dy\", d.y);\n } else {\n b = this._buckets.bucketMap[i];\n d.y = this._buckets.interpolateY(b);\n }\n if (this._color_idx > -1) {\n options.fill = d[this._color_idx];\n }\n if (!transformEach) {\n d.x = this._interpolateX(d[1]);\n endX = this._interpolateX(d[2]);\n d.props = {\n ...d[3],\n text: d[0]\n };\n d.props.width = (endX - d.x) / k;\n } else {\n d.x = this._interpolateX(d[1]) * k;\n endX = this._interpolateX(d[2]) * k;\n d.props = {\n ...d[3],\n text: d[0]\n };\n d.props.width = (endX - d.x) / k;\n d.x += x;\n d.props.width *= k;\n }\n d.props.height = bucketHeight;\n if (seriesKey === undefined && this._buckets.bucketScale < 1) {\n d.props.height = this._buckets.bucketScale * bucketHeight;\n }\n if (d.element === undefined && d.that) {\n d.element = d3Select(d.that);\n }\n d.element.attr(\"transform\", `translate(${d.x + (d.props.width / 2)} ${d.y + (d.props.height / 2)})`);\n\n d.x += borderOffset1;\n d.y += borderOffset1;\n d.props.width -= borderOffset2;\n d.props.height -= borderOffset2;\n d.props.width = d.props.width < 1 ? 1 : d.props.width;\n d.props.height = d.props.height < 1 ? 1 : d.props.height;\n\n let text = this.truncateText(d.props.text, d.props.width - padding, this._maxFontScale);\n\n if (text !== d.props.text) {\n text = this.truncateText(d.props.text, d.props.width - padding);\n } else {\n d.props.fontSize = this._maxFontScale * options.fontSize;\n }\n if (seriesKey === undefined && this._buckets.bucketScale < 1) {\n d.props.fontSize = Math.min(this._maxFontScale, this._buckets.bucketScale) * options.fontSize;\n }\n if (!this._maxY || this._maxY < d.y + d.props.height) {\n this._maxY = d.y + d.props.height;\n }\n if (!this._maxX || this._maxX < d.x + d.props.width) {\n this._maxX = d.x + d.props.width;\n }\n render(\n this._rangeRenderer,\n {\n ...options,\n ...d.props,\n text,\n },\n d.that\n );\n }\n\n setRangeOptions() {\n this._rangeOptions = {\n rangePadding: this.rangePadding(),\n fontFamily: this.fontFamily(),\n fontSize: this.fontSize(),\n strokeWidth: this.strokeWidth(),\n fill: this.fill(),\n stroke: this.stroke(),\n textFill: this.rangeFontColor(),\n cornerRadius: this.cornerRadius(),\n };\n }\n\n public _transform = { k: 1, x: 0, y: 0 };\n zoomed(transform) {\n this._transform = transform;\n // store current visible range for zoom preservation\n if (this._interpolateX && typeof this._interpolateX.invert === \"function\") {\n const width = this.width();\n if (width > 0 && isFinite(transform.k) && transform.k !== 0) {\n const startPixel = (0 - transform.x) / transform.k;\n const endPixel = (width - transform.x) / transform.k;\n let visibleStart = this._interpolateX.invert(startPixel);\n let visibleEnd = this._interpolateX.invert(endPixel);\n if (isFinite(visibleStart) && isFinite(visibleEnd)) {\n if (visibleStart > visibleEnd) {\n const tmp = visibleStart;\n visibleStart = visibleEnd;\n visibleEnd = tmp;\n }\n this._prevZoomState = {\n visibleStart,\n visibleEnd\n };\n }\n }\n }\n switch (this.renderMode()) {\n case \"scale-all\":\n this._zoomScale = transform.k;\n this._zoomTranslate = [transform.x, 0];\n this._zoomG.attr(\"transform\", `translate(${transform.x} ${0})scale(${transform.k} 1)`);\n break;\n default:\n const options = this._rangeOptions;\n this.data().forEach((d, i) => {\n if (this._color_idx > -1) {\n options.fill = d[this._color_idx];\n }\n if (this._series_idx > -1) {\n const seriesKey = d[this._series_idx];\n this.renderRangeElement(d, i, true, options, seriesKey);\n } else {\n this.renderRangeElement(d, i, true, options);\n }\n });\n }\n\n this.zoomedHook(transform);\n }\n\n zoomedHook(transform) {\n\n }\n\n private calcBuckets(data, startKey: string | number, endKey: string | number, bucketKey?: string | number) {\n const bucketMap = {};\n const bucketKeyMap = {};\n const tol = this.overlapTolerence();\n const buckets = [{ end: -Infinity }];\n let maxBucket = 0;\n if (bucketKey !== undefined) {\n data.forEach((d, i) => {\n bucketMap[i] = d[bucketKey];\n bucketKeyMap[d[bucketKey]] = true;\n });\n maxBucket = Object.keys(bucketKeyMap).length;\n } else {\n data.forEach((d, i) => {\n for (let i2 = 0; i2 < buckets.length; ++i2) {\n if (i === 0 || buckets[i2][endKey] + tol <= d[startKey]) {\n bucketMap[i] = i2;\n if (maxBucket < i2) maxBucket = i2;\n buckets[i2][endKey] = d[endKey];\n break;\n }\n }\n if (bucketMap[i] === undefined) {\n bucketMap[i] = buckets.length;\n const b = {};\n b[endKey] = d[endKey];\n buckets.push(b as any);\n }\n\n if (maxBucket < bucketMap[i]) maxBucket = bucketMap[i];\n });\n }\n const height = (maxBucket + 1) * (this.bucketHeight() + this.gutter());\n return {\n bucketMap,\n maxBucket,\n bucketScale: this.height() / height,\n interpolateY: d3ScaleLinear()\n .domain([0, maxBucket + 1])\n .range([0, Math.min(this.height(), height)])\n };\n }\n\n data(): IGanttData[];\n data(_: IGanttData[]): this;\n data(_?: IGanttData[]): this | IGanttData[] {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length > 0) {\n this._minStart = Math.min(...this.data().map(n => n[1])) ?? 0;\n this._maxEnd = Math.max(...this.data().map(n => n[2])) ?? 1;\n this.measureDataText(true);\n }\n return retVal;\n }\n\n protected _textWidths;\n protected _maxFontScale;\n protected _characterWidths;\n protected _prevFontFamily;\n protected _prevFontSize;\n measureDataText(forceMeasure = false) {\n const textWidths = {};\n const characterWidths = {};\n const fontFamily = this.fontFamily();\n const fontSize = this.fontSize();\n const bucketHeight = this.bucketHeight();\n\n if (bucketHeight) {\n this._maxFontScale = (bucketHeight - (this.rangePadding() * 2)) / fontSize;\n }\n\n if (forceMeasure || this._prevFontFamily !== fontFamily || this._prevFontSize !== fontSize) {\n characterWidths[\".\"] = Utility.textSize(\".\", fontFamily, fontSize).width;\n this.data().forEach(d => {\n if (!textWidths[d[0]]) {\n textWidths[d[0]] = Utility.textSize(d[0], fontFamily, fontSize).width;\n }\n d[0].split(\"\").forEach(char => {\n if (!characterWidths[char]) {\n characterWidths[char] = Utility.textSize(char, fontFamily, fontSize).width;\n }\n });\n });\n this._textWidths = textWidths;\n this._characterWidths = characterWidths;\n }\n this._prevFontFamily = fontFamily;\n this._prevFontSize = fontSize;\n }\n\n truncateText(text, width, scale = 1) {\n const textFits = this._textWidths[text] * scale < width;\n if (textFits) {\n return text;\n }\n let ret = \"\";\n let sum = 0;\n const _width = width - (this._characterWidths[\".\"] * 3);\n for (const char of text) {\n sum += this._characterWidths[char];\n if (sum < _width) {\n ret += char;\n } else {\n break;\n }\n }\n return _width < 0 ? \"\" : ret + \"...\";\n }\n\n resize(_size?: { width: number, height: number }) {\n let retVal;\n if (this.fitWidthToContent() || this.fitHeightToContent()) {\n retVal = super.resize.call(this, {\n width: _size.width,\n height: this._maxY\n });\n } else {\n retVal = super.resize.apply(this, arguments);\n }\n return retVal;\n }\n\n selectionChanged() {\n\n }\n\n highlightItem(_element, d) {\n\n }\n\n click(row, _col, sel) {\n\n }\n\n dblclick(row, _col, sel) {\n\n }\n\n mousein(row, _col, sel) {\n }\n\n mouseover(row, _col, sel) {\n }\n\n mouseout(row, _col, sel) {\n }\n}\nReactGantt.prototype._class += \" timeline_ReactGantt\";\n\nexport interface ReactGantt {\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n seriesColumn(): string;\n seriesColumn(_: string): this;\n bucketColumn(): string;\n bucketColumn(_: string): this;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n smallestRangeWidth(): number;\n smallestRangeWidth(_: number): this;\n bucketHeight(): number;\n bucketHeight(_: number): this;\n gutter(): number;\n gutter(_: number): this;\n showToolbar_default(_: boolean): this;\n fontSize(): number;\n fontSize(_: number): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n strokeWidth(): number;\n strokeWidth(_: number): this;\n stroke(): string;\n stroke(_: string): this;\n cornerRadius(): number;\n cornerRadius(_: number): this;\n fill(): string;\n fill(_: string): this;\n rangeFontColor(): string;\n rangeFontColor(_: string): this;\n rangePadding(): number;\n rangePadding(_: number): this;\n renderMode(): \"default\" | \"scale-all\";\n renderMode(_: \"default\" | \"scale-all\"): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n fitWidthToContent(): boolean;\n fitWidthToContent(_: boolean): this;\n fitHeightToContent(): boolean;\n fitHeightToContent(_: boolean): this;\n preserveZoom(): boolean;\n preserveZoom(_: boolean): this;\n evenSeriesBackground(): string;\n evenSeriesBackground(_: string): this;\n oddSeriesBackground(): string;\n oddSeriesBackground(_: string): this;\n}\n\nReactGantt.prototype.publish(\"fitWidthToContent\", false, \"boolean\", \"If true, resize will simply reapply the bounding box width\");\nReactGantt.prototype.publish(\"fitHeightToContent\", false, \"boolean\", \"If true, resize will simply reapply the bounding box height\");\nReactGantt.prototype.publish(\"preserveZoom\", false, \"boolean\", \"If true, maintain zoom level when data is updated\");\nReactGantt.prototype.publish(\"titleColumn\", null, \"string\", \"Column name to for the title\");\nReactGantt.prototype.publish(\"startDateColumn\", null, \"string\", \"Column name to for the start date\");\nReactGantt.prototype.publish(\"endDateColumn\", null, \"string\", \"Column name to for the end date\");\nReactGantt.prototype.publish(\"iconColumn\", null, \"string\", \"Column name to for the icon\");\nReactGantt.prototype.publish(\"colorColumn\", null, \"string\", \"Column name to for the color\");\nReactGantt.prototype.publish(\"seriesColumn\", null, \"string\", \"Column name to for the series identifier\");\nReactGantt.prototype.publish(\"bucketColumn\", null, \"string\", \"Column name to for the bucket identifier\");\nReactGantt.prototype.publish(\"renderMode\", \"default\", \"set\", \"Render modes vary in features and performance\", [\"default\", \"scale-all\"]);\nReactGantt.prototype.publish(\"rangePadding\", 3, \"number\", \"Padding within each range rectangle (pixels)\");\nReactGantt.prototype.publish(\"fill\", \"#1f77b4\", \"string\", \"Background color of range rectangle\");\nReactGantt.prototype.publish(\"stroke\", null, \"string\", \"Color of range rectangle border\");\nReactGantt.prototype.publish(\"strokeWidth\", null, \"number\", \"Width of range rectangle border (pixels)\");\nReactGantt.prototype.publish(\"cornerRadius\", 3, \"number\", \"Space between range buckets (pixels)\");\nReactGantt.prototype.publish(\"fontFamily\", null, \"string\", \"Font family within range rectangle\", null, { optional: true });\nReactGantt.prototype.publish(\"fontSize\", 10, \"number\", \"Size of font within range rectangle (pixels)\");\nReactGantt.prototype.publish(\"rangeFontColor\", \"#ecf0f1\", \"html-color\", \"rangeFontColor\");\nReactGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nReactGantt.prototype.publish(\"smallestRangeWidth\", 10, \"number\", \"Width of the shortest range (pixels)\");\nReactGantt.prototype.publish(\"bucketHeight\", 100, \"number\", \"Max height of range element (pixels)\");\nReactGantt.prototype.publish(\"gutter\", 2, \"number\", \"Space between range buckets (pixels)\");\nReactGantt.prototype.publish(\"maxZoom\", 16, \"number\", \"Maximum zoom\");\nReactGantt.prototype.publish(\"evenSeriesBackground\", \"#FFFFFF\", \"html-color\", \"Background color of even series rows\");\nReactGantt.prototype.publish(\"oddSeriesBackground\", \"#DDDDDD\", \"html-color\", \"Background color of odd series rows\");\n","import { Axis } from \"@hpcc-js/chart\";\nimport { SVGWidget } from \"@hpcc-js/common\";\nimport { ReactGantt } from \"./ReactGantt.ts\";\n\nexport type IAxisGanttData = [string, number | string, number | string, any?] | any[];\n\nexport class ReactAxisGantt extends SVGWidget {\n\n protected _topAxis: Axis = new Axis(\"center\")\n .orientation(\"top\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n protected _gantt: ReactGantt = new ReactGantt(\"center\")\n .stroke(\"#000000\")\n ;\n protected _bottomAxis: Axis = new Axis(\"center\")\n .orientation(\"bottom\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n\n protected _topAxisElement;\n protected _contentElement;\n protected _bottomAxisElement;\n protected _topRect;\n protected _contentRect;\n protected _bottomRect;\n\n protected rangeRenderer;\n\n constructor() {\n super();\n this._drawStartPos = \"origin\";\n this.rangeRenderer = function () {\n const ret = this._gantt.rangeRenderer.apply(this._gantt, arguments);\n if (!arguments.length) return ret;\n return this;\n };\n }\n\n selection(_: any[]): this;\n selection(): any[];\n selection(_?: any[]): any[] | this {\n if (!arguments.length) return this._gantt.selection();\n this._gantt.selection(_);\n return this;\n }\n\n resizeWrappers() {\n\n const w = this.width();\n const h = this.height();\n\n const axisHeight = this.axisHeight(); //TODO: Dynamic scaling to allow for small resolutions?\n\n const contentHeight = (h - (axisHeight * 2));\n const borderOffset1 = this.strokeWidth();\n this._topRect\n .attr(\"height\", axisHeight)\n .attr(\"width\", w)\n .attr(\"fill\", \"transparent\")\n ;\n this._topAxisElement.attr(\"transform\", \"translate(0 0)\");\n this._topAxis.resize({ height: axisHeight, width: w });\n this._contentRect\n .attr(\"height\", contentHeight)\n .attr(\"width\", w)\n .attr(\"fill\", \"transparent\")\n ;\n this._contentElement.attr(\"transform\", `translate(0 ${axisHeight + borderOffset1})`);\n this._gantt.resize({ height: contentHeight, width: w });\n this._bottomRect\n .attr(\"height\", axisHeight)\n .attr(\"width\", w)\n .attr(\"fill\", \"transparent\")\n ;\n this._bottomAxisElement.attr(\"transform\", `translate(0 ${axisHeight + contentHeight + borderOffset1})`);\n this._bottomAxis.resize({ height: axisHeight, width: w });\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._gantt.click = (row, col, sel) => {\n this.click(row, col, sel);\n };\n\n this._gantt.dblclick = (row, col, sel) => {\n this.dblclick(row, col, sel);\n };\n\n this._topAxisElement = element.append(\"g\")\n .attr(\"class\", \"top-axis-wrapper\")\n ;\n this._topRect = this._topAxisElement.append(\"rect\")\n .attr(\"class\", \"top-axis-rect\")\n ;\n this._contentElement = element.append(\"g\")\n .attr(\"class\", \"content-wrapper\")\n ;\n this._contentRect = this._contentElement.append(\"rect\")\n .attr(\"class\", \"content-rect\")\n ;\n this._bottomAxisElement = element.append(\"g\")\n .attr(\"class\", \"bottom-axis-wrapper\")\n ;\n this._bottomRect = this._bottomAxisElement.append(\"rect\")\n .attr(\"class\", \"top-axis-rect\")\n ;\n this._topAxis.target(this._topAxisElement.node());\n this._gantt.target(this._contentElement.node()).bucketHeight(30);\n this._bottomAxis.target(this._bottomAxisElement.node());\n\n this.resizeWrappers();\n\n this._gantt.zoomedHook = (transform) => {\n this.onzoom(transform);\n };\n }\n\n onzoom(transform) {\n\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .render()\n ;\n this._bottomAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .render()\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._topAxis.tickFormat(this.tickFormat()).render();\n this._bottomAxis.tickFormat(this.tickFormat()).render();\n this._gantt.render();\n }\n\n exit(domNode, element) {\n this._bottomAxis.target(null);\n this._gantt.target(null);\n this._topAxis.target(null);\n super.exit(domNode, element);\n }\n\n columns(): string[];\n columns(_: string[]): this;\n columns(_?: string[]): this | string[] {\n const retVal = super.columns.apply(this, arguments);\n if (arguments.length > 0) {\n this._gantt.columns(_);\n }\n return retVal;\n }\n\n data(): IAxisGanttData[];\n data(_: IAxisGanttData[]): this;\n data(_?: IAxisGanttData[]): this | IAxisGanttData[] {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length > 0) {\n const ganttData: any[] = this.data().map(n => {\n const ret = [...n];\n ret[1] = isNaN(n[1] as any) ? new Date(n[1]).getTime() : Number(n[1]);\n ret[2] = isNaN(n[2] as any) ? new Date(n[2]).getTime() : Number(n[2]);\n return ret;\n });\n this._gantt._minStart = Math.min(...ganttData.map(n => n[1])) ?? 0;\n this._gantt._maxEnd = Math.max(...ganttData.map(n => n[2])) ?? 1;\n this._gantt.data(ganttData);\n }\n return retVal;\n }\n\n resize(_size?: { width: number, height: number }) {\n const retVal = super.resize.apply(this, arguments);\n\n if (this._topAxisElement) {\n this.resizeWrappers();\n }\n\n return retVal;\n }\n\n click(row, col, sel) {\n\n }\n\n dblclick(row, col, sel) {\n\n }\n\n tooltip() {\n return this._gantt._tooltip;\n }\n}\nReactAxisGantt.prototype._class += \" timeline_ReactAxisGantt\";\n\nexport interface ReactAxisGantt {\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n smallestRangeWidth(): number;\n smallestRangeWidth(_: number): this;\n scaleMode(): boolean;\n scaleMode(_: boolean): this;\n fontSize(): number;\n fontSize(_: number): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n strokeWidth(): number;\n strokeWidth(_: number): this;\n stroke(): string;\n stroke(_: string): this;\n cornerRadius(): number;\n cornerRadius(_: number): this;\n axisFontSize(): number;\n axisFontSize(_: number): this;\n axisFontFamily(): string;\n axisFontFamily(_: string): this;\n axisTickLength(): number;\n axisTickLength(_: number): this;\n axisHeight(): number;\n axisHeight(_: number): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n bucketColumn(): string;\n bucketColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n}\nReactAxisGantt.prototype.publish(\"tickFormat\", null, \"string\", \"Format rule applied to axis tick labels\", undefined, { optional: true });\nReactAxisGantt.prototype.publish(\"axisHeight\", 22, \"number\", \"Height of axes (pixels)\");\nReactAxisGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nReactAxisGantt.prototype.publish(\"smallestRangeWidth\", 10, \"number\", \"Width of the shortest range (pixels)\");\nReactAxisGantt.prototype.publish(\"axisFontSize\", null, \"number\", \"Font size of axis tick labels\");\nReactAxisGantt.prototype.publish(\"axisFontFamily\", null, \"string\", \"Font family of axis tick labels\");\nReactAxisGantt.prototype.publish(\"axisTickLength\", null, \"number\", \"Length of axis ticks\");\nReactAxisGantt.prototype.publishProxy(\"gutter\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"renderMode\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"strokeWidth\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"fontSize\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"fontFamily\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"stroke\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"cornerRadius\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"titleColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"startDateColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"endDateColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"iconColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"colorColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"bucketColumn\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"maxZoom\", \"_gantt\");\nReactAxisGantt.prototype.publishProxy(\"bucketHeight\", \"_gantt\");\n","import { min as d3Min, max as d3Max } from \"d3-array\";\nimport { Axis } from \"@hpcc-js/chart\";\nimport { Border2 } from \"@hpcc-js/layout\";\nimport { React } from \"@hpcc-js/react\";\nimport { ReactGantt } from \"./ReactGantt.ts\";\nimport { IAxisGanttData } from \"./ReactAxisGantt.ts\";\n\nexport class ReactAxisGanttSeries extends Border2 {\n\n protected _topAxis: Axis = new Axis(\"origin\")\n .orientation(\"top\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n protected _gantt: ReactGantt = new ReactGantt(\"origin\")\n .stroke(\"#000000\")\n .fitHeightToContent(true)\n ;\n protected _bottomAxis: Axis = new Axis(\"origin\")\n .orientation(\"bottom\")\n .type(\"linear\")\n .shrinkToFit(\"none\")\n .overlapMode(\"hide\")\n .extend(0)\n .tickFormat(\"d\")\n ;\n\n protected _topAxisElement;\n protected _contentElement;\n protected _bottomAxisElement;\n protected _topRect;\n protected _contentRect;\n protected _bottomRect;\n\n constructor() {\n super();\n this.centerOverflowX_default(\"hidden\");\n this.centerOverflowY_default(\"auto\");\n }\n\n selection(_: any[]): this;\n selection(): any[];\n selection(_?: any[]): any[] | this {\n if (!arguments.length) return this._gantt.selection();\n this._gantt.selection(_);\n return this;\n }\n\n rangeRenderer(): React.FunctionComponent;\n rangeRenderer(_: React.FunctionComponent): this;\n rangeRenderer(_?: React.FunctionComponent): this | React.FunctionComponent {\n const ret = this._gantt.rangeRenderer.apply(this._gantt, arguments);\n if (!arguments.length) return ret;\n return this;\n }\n\n resizeWrappers() {\n\n const w = this.width();\n const h = this.height();\n\n const axisHeight = this.axisHeight(); //TODO: Dynamic scaling to allow for small resolutions?\n const contentHeight = (h - (axisHeight * 2));\n\n this.bottomHeight(axisHeight);\n\n this._topWA.resize({\n width: w,\n height: axisHeight\n });\n this._centerWA.resize({\n width: w,\n height: contentHeight\n });\n this._bottomWA.resize({\n width: w,\n height: axisHeight\n });\n this.top().render();\n this.bottom().render();\n this.center().render();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._gantt.click = (row, col, sel) => {\n this.click(row, col, sel);\n };\n\n this._gantt.dblclick = (row, col, sel) => {\n this.dblclick(row, col, sel);\n };\n\n this.top(this._topAxis);\n this.center(this._gantt);\n this.bottom(this._bottomAxis);\n\n this.resizeWrappers();\n\n this._gantt.zoomedHook = (transform) => {\n this.onzoom(transform);\n };\n }\n\n onzoom(transform) {\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .lazyRender()\n ;\n this._bottomAxis\n .fontFamily(this.axisFontFamily())\n .fontSize(this.axisFontSize())\n .tickLength(this.axisTickLength())\n .low(nextLow)\n .high(nextHigh)\n .lazyRender()\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._topAxis.tickFormat(this.tickFormat()).render();\n this._bottomAxis.tickFormat(this.tickFormat()).render();\n this._gantt.render();\n }\n\n columns(): string[];\n columns(_: string[]): this;\n columns(_?: string[]): this | string[] {\n const retVal = super.columns.apply(this, arguments);\n if (arguments.length > 0) {\n this._gantt.columns(_);\n }\n return retVal;\n }\n\n data(): IAxisGanttData[];\n data(_: IAxisGanttData[]): this;\n data(_?: IAxisGanttData[]): this | IAxisGanttData[] {\n const retVal = super.data.apply(this, arguments);\n if (arguments.length > 0) {\n const ganttData: any[] = this.data().map(n => {\n const ret = [...n];\n ret[1] = isNaN(n[1] as any) ? new Date(n[1]).getTime() : Number(n[1]);\n ret[2] = isNaN(n[2] as any) ? new Date(n[2]).getTime() : Number(n[2]);\n return ret;\n });\n\n this._gantt._minStart = d3Min(ganttData, n => n[1]);\n this._gantt._maxEnd = d3Max(ganttData, n => n[2]);\n this._gantt.data(ganttData);\n }\n return retVal;\n }\n\n resize(_size?: { width: number, height: number }) {\n const retVal = super.resize.apply(this, arguments);\n\n if (this._topAxisElement) {\n this.resizeWrappers();\n }\n\n return retVal;\n }\n\n click(row, col, sel) {\n\n }\n\n dblclick(row, col, sel) {\n\n }\n\n tooltip() {\n return this._gantt._tooltip;\n }\n}\nReactAxisGanttSeries.prototype._class += \" timeline_ReactAxisGanttSeries\";\n\nexport interface ReactAxisGanttSeries {\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n smallestRangeWidth(): number;\n smallestRangeWidth(_: number): this;\n scaleMode(): boolean;\n scaleMode(_: boolean): this;\n fontSize(): number;\n fontSize(_: number): this;\n fontFamily(): string;\n fontFamily(_: string): this;\n strokeWidth(): number;\n strokeWidth(_: number): this;\n stroke(): string;\n stroke(_: string): this;\n cornerRadius(): number;\n cornerRadius(_: number): this;\n axisFontSize(): number;\n axisFontSize(_: number): this;\n axisFontFamily(): string;\n axisFontFamily(_: string): this;\n axisTickLength(): number;\n axisTickLength(_: number): this;\n axisHeight(): number;\n axisHeight(_: number): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n seriesColumn(): string;\n seriesColumn(_: string): this;\n bucketColumn(): string;\n bucketColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n preserveZoom(): boolean;\n preserveZoom(_: boolean): this;\n}\nReactAxisGanttSeries.prototype.publish(\"tickFormat\", null, \"string\", \"Format rule applied to axis tick labels\", undefined, { optional: true });\nReactAxisGanttSeries.prototype.publish(\"axisHeight\", 22, \"number\", \"Height of axes (pixels)\");\nReactAxisGanttSeries.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nReactAxisGanttSeries.prototype.publish(\"smallestRangeWidth\", 10, \"number\", \"Width of the shortest range (pixels)\");\nReactAxisGanttSeries.prototype.publish(\"axisFontSize\", null, \"number\", \"Font size of axis tick labels\");\nReactAxisGanttSeries.prototype.publish(\"axisFontFamily\", null, \"string\", \"Font family of axis tick labels\");\nReactAxisGanttSeries.prototype.publish(\"axisTickLength\", null, \"number\", \"Length of axis ticks\");\nReactAxisGanttSeries.prototype.publishProxy(\"gutter\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"renderMode\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"strokeWidth\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"fontSize\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"fontFamily\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"stroke\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"cornerRadius\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"titleColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"startDateColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"endDateColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"iconColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"colorColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"seriesColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"bucketColumn\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"maxZoom\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"preserveZoom\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"evenSeriesBackground\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"oddSeriesBackground\", \"_gantt\");\nReactAxisGanttSeries.prototype.publishProxy(\"bucketHeight\", \"_gantt\");\n","import { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\nimport { ReactAxisGantt } from \"./ReactAxisGantt.ts\";\n\nexport class ReactTimeline extends ReactAxisGantt {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor() {\n super();\n this._drawStartPos = \"origin\";\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const parser = d3TimeParse(\"%Q\");\n const startTime = parser(d[1]);\n const endTime = parser(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if (this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().map(n => {\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if (minTimestamp > start) {\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if (maxTimestamp < end) {\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n\n const axisTickFormat = this._axisLabelFormatter\n ? this._axisLabelFormatter\n : (this.tickFormat_exists && this.tickFormat_exists() ? this.tickFormat() : undefined);\n\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n\n if (axisTickFormat) {\n this._topAxis.tickFormat(axisTickFormat);\n this._bottomAxis.tickFormat(axisTickFormat);\n } else {\n this._topAxis.tickFormat_reset();\n this._bottomAxis.tickFormat_reset();\n }\n this._gantt._minStart = minTimestamp;\n this._gantt._maxEnd = maxTimestamp;\n }\n }\n\n tooltipHTML(callback) {\n this._tooltipHTML = callback;\n this.tooltip().tooltipHTML(this._tooltipHTML);\n return this;\n }\n\n parseAxisValue(v) {\n const parseTime = d3TimeParse(\"%Q\");\n const parsedTime = parseTime(v);\n\n const formatTime = d3TimeFormat(this.timePattern());\n return formatTime(parsedTime);\n }\n\n onzoom(transform) {\n\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n this._bottomAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n }\n}\nReactTimeline.prototype._class += \" timeline_ReactTimeline\";\n\nexport interface ReactTimeline {\n _tooltipHTML(_): string;\n\n timePattern(): string;\n timePattern(_: string): this;\n timePattern_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n}\nReactTimeline.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"Time pattern used for parsing datetime strings on each data row\", null, { optional: true });\nReactTimeline.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"Time format used in the default html tooltip\");\n\n","import { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\nimport { ReactAxisGanttSeries } from \"./ReactAxisGanttSeries.ts\";\n\nconst parseTime = d3TimeParse(\"%Q\");\nexport class ReactTimelineSeries extends ReactAxisGanttSeries {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor() {\n super();\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const startTime = parseTime(d[1]);\n const endTime = parseTime(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if (this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().forEach(n => {\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if (minTimestamp > start) {\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if (maxTimestamp < end) {\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n\n const axisTickFormat = this._axisLabelFormatter\n ? this._axisLabelFormatter\n : (this.tickFormat_exists && this.tickFormat_exists() ? this.tickFormat() : undefined);\n\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .low(lowDateStr)\n .high(highDateStr)\n ;\n\n if (axisTickFormat) {\n this._topAxis.tickFormat(axisTickFormat);\n this._bottomAxis.tickFormat(axisTickFormat);\n } else {\n this._topAxis.tickFormat_reset();\n this._bottomAxis.tickFormat_reset();\n }\n this._gantt._minStart = minTimestamp;\n this._gantt._maxEnd = maxTimestamp;\n }\n }\n\n tickFormatFunc(fn: (d: any) => string): this;\n tickFormatFunc(): ((d: any) => string) | undefined;\n tickFormatFunc(fn?: (d: any) => string): this | ((d: any) => string) | undefined {\n if (!arguments.length) {\n return this._axisLabelFormatter;\n }\n this._axisLabelFormatter = fn;\n\n // Delegate to underlying Axis instances using the proper method\n this._topAxis.tickFormatFunc(fn);\n this._bottomAxis.tickFormatFunc(fn);\n\n return this;\n }\n\n tooltipHTML(callback) {\n this._tooltipHTML = callback;\n this.tooltip().tooltipHTML(this._tooltipHTML);\n return this;\n }\n\n parseAxisValue(v) {\n const parsedTime = parseTime(v);\n\n const formatTime = d3TimeFormat(this.timePattern());\n return formatTime(parsedTime);\n }\n\n onzoom(transform) {\n\n const w = this.width();\n const low = this._gantt._minStart;\n const high = this._gantt._maxEnd;\n const range = high - low;\n const wpp = range / w;\n const nextLow = Math.floor(low - (wpp * (transform.x / transform.k)));\n const nextHigh = Math.ceil((range / transform.k) + nextLow);\n\n this._topAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n this._bottomAxis\n .low(this.parseAxisValue(nextLow))\n .high(this.parseAxisValue(nextHigh))\n .render()\n ;\n }\n\n _tooltipHTML: (_) => string;\n}\nReactTimelineSeries.prototype._class += \" timeline_ReactTimelineSeries\";\n\nexport interface ReactTimelineSeries {\n timePattern(): string;\n timePattern(_: string): this;\n timePattern_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n tickFormatFunc(fn: (d: any) => string): this;\n tickFormatFunc(): ((d: any) => string) | undefined;\n}\nReactTimelineSeries.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"Time pattern used for parsing datetime strings on each data row\", null, { optional: true });\nReactTimelineSeries.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"Time format used in the default html tooltip\");\n\n"],"names":["PKG_NAME","PKG_VERSION","BUILD_VERSION","_MiniGantt","SVGWidget","tlAxis","brAxis","verticalBands","_zoom","gUpperContent","gUpperAxis","gMiddleContent","gLowerAxis","gLowerContent","localRect","d3Local","localEntityPin","tooltipFormatter","_dateCache","rootExtent","_title_idx","_startDate_idx","_endDate_idx","_icon_idx","_color_idx","_yoffset_idx","constructor","super","ITooltip","call","this","Utility","SimpleSelectionMixin","_drawStartPos","tooltipHTML","d","parse","Axis","type","d3ScaleBand","paddingOuter","paddingInner","isHorizontal","orientation","fullExtent","data","map","filter","d3Extent","extent","centerOnMostRecent","parser","d3TimeParse","timePattern","formatter","d3TimeFormat","date1","date2","Date","setFullYear","getFullYear","time1","getTime","timeDiff","dataStartPos","pos","scalePos","dataEndPos","dataWidth","transform","resetZoom","element","d3ZoomIdentity","translate","height","zoomed","d3Event","render","background","enter","domNode","d3Zoom","scaleExtent","maxZoom","on","append","attr","stopPropagation","target","node","tickFormat","guideTarget","shrinkToFit","overlapMode","tickFormat_exists","extend","_selection","widgetElement","_prevIsHorizontal","update","titleColumn","columns","indexOf","startDateColumn","endDateColumn","iconColumn","colorColumn","yOffsetColumn","tooltipTimeFormat","width","x","reverse","low","high","updateScale","y","hi","parseInvert","invert","invertX","invertY","sort","l","r","retVal","localeCompare","events","ranges","brAxisBBox","getBBox","upperContentHeight","updateEntityPins","lowerAxisHeight","lowerHeight","minYOffset","Math","min","apply","row","isNaN","length","visible","y_offset","upperContentYOffset","lowerAxisYOffset","halfMinYOffset","tlAxisBBox","bucketData","bucketIndex","range","i","bucket","endPos","overlapTolerence","push","vbLower","vbHigher","domain","_d","updateEventRanges","event_height","context","entityPins","selectAll","eventFontColor_idx","eventFontColorColumn","eventBorderColor_idx","eventBorderColorColumn","eventBackgroundColor_idx","eventBackgroundColorColumn","title_counts","title_types","Object","keys","title_group_offset","eventGroupOffset","entityPinsEnter","d3Select","raise","each","entityPin","EntityPin","icon","iconOnlyShowOnHover","hideIconWhenCollapsed","titleOnlyShowOnHover","hideTitleWhenCollapsed","descriptionOnlyShowOnHover","hideDescriptionWhenCollapsed","annotationOnlyShowOnHover","hideAnnotationsWhenCollapsed","iconDiameter","iconPaddingPercent","titleFontSize","descriptionColor","descriptionFontSize","iconColor","titleColor","backgroundShape","backgroundColorFill","backgroundColorStroke","cornerRadius","arrowHeight","arrowWidth","set","merge","get","_title","title","x_offset","eventGroupMod","description","parsed_start_time","formatted_start_time","animationFrameRender","move","calc_height","calcHeight","style","exit","remove","event_offset","abs","eventRangeHeight","lines","buckets","bind","entityRect","EntityRect","rangeFontColor","enterEntityRect","click","rowToObj","selected","dblclick","tooltip","hide","show","textBox","bandwidth","rectWidth","max","rectHeight","paddingSize","fontSize","iconSize","fixedHeight","fixedWidth","padding","updateEntityRect","col","sel","textbox","__name","MiniGantt","prototype","_class","implements","mixin","publish","optional","_ReactGantt","SVGZoomWidget","Selection","_buckets","_interpolateX","_interpolateY","_bucketsBySeries","_dataBySeries","_origIdxMap","_seriesBackgrounds","_maxFontSize","_tooltip","_minStart","_maxEnd","_prevZoomState","_series_idx","_bucket_idx","_maxX","_maxY","_rangeOptions","rangePadding","fontFamily","fill","stroke","textFill","strokeWidth","drawStartPosition","showToolbar_default","HTMLTooltip","followCursor","selection","_","arguments","_rangeRenderer","LabelledRect","rangeRenderer","clear","zoomExtent","seriesColumn","bucketColumn","w","x1","d3ScaleLinear","a","b","forEach","dataRow","origIdx","seriesKey","gutter","bucketOffset","seriesKeys","calcBuckets","n","bucketHeight","maxBucket","_renderElement","key","join","props","hidden","oddSeriesBackground","evenSeriesBackground","preserveZoom","interpedStart","zoomTo","setRangeOptions","_maxFontScale","measureDataText","itemSelection","borderOffset1","borderOffset2","_id","id","isSelected","selectionChanged","classed","__lparam","highlightItem","mousein","d3evt","_triggerElement","_cursorLoc","clientX","clientY","fitContent","mouseover","mouseout","that","endX","bucketMap","interpolateY","_i","text","renderRangeElement","x2","xScale","visibleStart","visibleEnd","clampedStart","clampedEnd","epsilon","startPixel","endPixel","span","isFinite","rawScale","minScale","maxScale","targetScale","centerPixel","halfViewport","x0","clampedCenter","translateX","transformEach","options","_transform","k","setAttribute","bucketScale","truncateText","tmp","renderMode","_zoomScale","_zoomTranslate","_zoomG","zoomedHook","startKey","endKey","bucketKey","bucketKeyMap","tol","end","i2","_textWidths","_characterWidths","_prevFontFamily","_prevFontSize","forceMeasure","textWidths","characterWidths","textSize","split","char","scale","ret","sum","_width","resize","_size","fitWidthToContent","fitHeightToContent","_element","_col","ReactGantt","_ReactAxisGantt","_topAxis","_gantt","_bottomAxis","_topAxisElement","_contentElement","_bottomAxisElement","_topRect","_contentRect","_bottomRect","resizeWrappers","h","axisHeight","contentHeight","onzoom","wpp","nextLow","floor","nextHigh","ceil","axisFontFamily","axisFontSize","tickLength","axisTickLength","ganttData","Number","ReactAxisGantt","publishProxy","_ReactAxisGanttSeries","Border2","centerOverflowX_default","centerOverflowY_default","bottomHeight","_topWA","_centerWA","_bottomWA","top","bottom","center","lazyRender","d3Min","d3Max","ReactAxisGanttSeries","_ReactTimeline","_axisLabelFormatter","startTime","endTime","timePattern_exists","minTimestamp","Infinity","maxTimestamp","lowDateStr","highDateStr","start","axisTickFormat","tickFormat_reset","callback","_tooltipHTML","parseAxisValue","v","parsedTime","parseTime","formatTime","ReactTimeline","_ReactTimelineSeries","tickFormatFunc","fn","ReactTimelineSeries"],"mappings":"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"}
|