@hpcc-js/timeline 3.1.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["bucketData: BucketInfo[]","ganttData: any[]","ganttData: any[]"],"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 = \"@hpcc-js/timeline\";\nexport const PKG_VERSION = \"3.0.0\";\nexport const BUILD_VERSION = \"3.2.1\";\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]} -&gt; ${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)} -&gt; ${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)} -&gt; ${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 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}\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"],"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 _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]} -&gt; ${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)} -&gt; ${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)} -&gt; ${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 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}\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":["d3Local","d3ScaleBand","d3Extent","extent","d3TimeParse","d3TimeFormat","d3ZoomIdentity","d3Zoom","d3Select","d3ScaleLinear","x1","d3Min","d3Max","parseTime"],"mappings":"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"}