@hpcc-js/timeline 2.51.10 → 2.51.11
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.es6.js +2 -2
- package/dist/index.es6.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +3 -3
- package/src/__package__.ts +2 -2
- package/types/__package__.d.ts +2 -2
- package/types-3.4/__package__.d.ts +2 -2
package/dist/index.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__spreadArray","to","from","pack","ar","l","slice","concat","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","MiniGantt","_super","_this","localRect","d3Local","localEntityPin","_title_idx","_startDate_idx","_endDate_idx","_icon_idx","_color_idx","_yoffset_idx","ITooltip","Utility","SimpleSelectionMixin","_drawStartPos","tooltipHTML","tooltipFormatter","brAxis","parse","tlAxis","Axis","verticalBands","d3ScaleBand","paddingOuter","paddingInner","isHorizontal","orientation","fullExtent","data","map","filter","d3Extent","extent","rootExtent","undefined","centerOnMostRecent","parser","d3TimeParse","timePattern","formatter","d3TimeFormat","date1","date2","Date","setFullYear","getFullYear","time1","getTime","timeDiff","dataStartPos","_dateCache","pos","scalePos","dataEndPos","dataWidth","resetZoom","_zoom","transform","element","d3ZoomIdentity","translate","height","zoomed","d3Event","render","enter","domNode","d3Zoom","scaleExtent","maxZoom","on","background","append","attr","stopPropagation","gUpperContent","gUpperAxis","gMiddleContent","gLowerAxis","gLowerContent","target","node","tickFormat","guideTarget","shrinkToFit","overlapMode","tickFormat_exists","extend","_selection","widgetElement","update","titleColumn","columns","indexOf","startDateColumn","endDateColumn","iconColumn","colorColumn","yOffsetColumn","_prevIsHorizontal","tooltipTimeFormat","width","x","reverse","low","high","updateScale","y","hi","parseInvert","invert","invertX","invertY","sort","r","retVal","localeCompare","events","ranges","brAxisBBox","getBBox","upperContentHeight","updateEntityPins","lowerAxisHeight","lowerHeight","minYOffset","Math","min","row","isNaN","visible","y_offset","upperContentYOffset","lowerAxisYOffset","halfMinYOffset","tlAxisBBox","bucketData","bucketIndex","_i","ranges_1","range","bucket","endPos","overlapTolerence","push","vbLower","vbHigher","domain","_d","updateEventRanges","event_height","context","entityPins","selectAll","eventFontColor_idx","eventFontColorColumn","eventBorderColor_idx","eventBorderColorColumn","eventBackgroundColor_idx","eventBackgroundColorColumn","title_counts","events_1","title_types","keys","title_group_offset","eventGroupOffset","entityPinsEnter","d3Select","raise","each","entityPin","EntityPin","icon","iconOnlyShowOnHover","hideIconWhenCollapsed","titleOnlyShowOnHover","hideTitleWhenCollapsed","descriptionOnlyShowOnHover","hideDescriptionWhenCollapsed","annotationOnlyShowOnHover","hideAnnotationsWhenCollapsed","iconDiameter","iconPaddingPercent","titleFontSize","descriptionColor","descriptionFontSize","iconColor","titleColor","backgroundShape","backgroundColorFill","backgroundColorStroke","cornerRadius","arrowHeight","arrowWidth","set","merge","get","_title","title","x_offset","eventGroupMod","description","parsed_start_time","formatted_start_time","animationFrameRender","move","calc_height","calcHeight","exit","remove","event_offset","abs","eventRangeHeight","lines","buckets","bind","entityRect","EntityRect","rangeFontColor","enterEntityRect","click","rowToObj","selected","dblclick","tooltip","hide","show","textBox","bandwidth","rectWidth","max","rectHeight","paddingSize","fontSize","iconSize","fixedHeight","fixedWidth","padding","updateEntityRect","col","sel","textbox","SVGWidget","_class","implements","mixin","publish","optional","ReactGantt","drawStartPosition","Selection","_series_idx","_bucket_idx","_rangeOptions","rangePadding","fontFamily","fill","stroke","textFill","strokeWidth","_rangeRenderer","LabelledRect","_transform","k","showToolbar_default","_tooltip","HTMLTooltip","followCursor","rangeRenderer","_","clear","zoomExtent","seriesColumn","bucketColumn","w","x1","_interpolateX","d3ScaleLinear","_minStart","_maxEnd","a","_origIdxMap","_dataBySeries","_bucketsBySeries","forEach","dataRow","origIdx","seriesKey","gutter_1","gutter","bucketOffset_1","seriesKeys","calcBuckets","bucketHeight","bucketOffset","maxBucket","_seriesBackgrounds","_renderElement","key","join","props","hidden","oddSeriesBackground","evenSeriesBackground","_buckets","interpedStart","zoomTo","setRangeOptions","_maxFontScale","measureDataText","itemSelection","borderOffset1","borderOffset2","_id","id","isSelected","selectionChanged","classed","__lparam","highlightItem","mousein","d3evt","_triggerElement","_cursorLoc","clientX","clientY","fitContent","mouseover","mouseout","that","endX","bucketMap","interpolateY","text","renderRangeElement","x2","xScale","transformEach","options","setAttribute","bucketScale","truncateText","_maxY","_maxX","renderMode","_zoomScale","_zoomTranslate","_zoomG","options_1","zoomedHook","startKey","endKey","bucketKey","bucketKeyMap","tol","end","Infinity","i2","_a","_b","forceMeasure","textWidths","characterWidths","_prevFontFamily","_prevFontSize","textSize","split","char","_textWidths","_characterWidths","scale","ret","sum","_width","text_1","resize","_size","fitWidthToContent","fitHeightToContent","_element","_col","SVGZoomWidget","ReactAxisGantt","_topAxis","_gantt","_bottomAxis","resizeWrappers","h","axisHeight","contentHeight","_topRect","_topAxisElement","_contentRect","_contentElement","_bottomRect","_bottomAxisElement","onzoom","wpp","nextLow","floor","nextHigh","ceil","axisFontFamily","axisFontSize","tickLength","axisTickLength","ganttData","Number","publishProxy","ReactAxisGanttSeries","centerOverflowX_default","centerOverflowY_default","bottomHeight","_topWA","_centerWA","_bottomWA","top","bottom","center","lazyRender","d3Min","d3Max","Border2","ReactTimeline","startTime","endTime","timePattern_exists","minTimestamp_1","maxTimestamp_1","lowDateStr_1","highDateStr_1","start","_axisLabelFormatter","callback","_tooltipHTML","parseAxisValue","v","parsedTime","parseTime","formatTime","ReactTimelineSeries"],"sources":["../src/__package__.ts","../node_modules/tslib/tslib.es6.js","../../../node_modules/style-inject/dist/style-inject.es.js","../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\";\r\nexport const PKG_VERSION = \"2.51.10\";\r\nexport const BUILD_VERSION = \"2.104.18\";\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\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\n // ITooltip ---\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n\n // SimpleSelectionMixin\n _selection;\n}\nMiniGantt.prototype._class += \" timeline_MiniGantt\";\nMiniGantt.prototype.implements(ITooltip.prototype);\nMiniGantt.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface MiniGantt {\n timePattern(): string;\n timePattern(_: string): this;\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n orientation(): string;\n orientation(_: string): this;\n rangeFontColor(): string;\n rangeFontColor(_: string): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n yOffsetColumn(): string;\n yOffsetColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n eventGroupMod(): number;\n eventGroupMod(_: number): this;\n eventGroupOffset(): number;\n eventGroupOffset(_: number): this;\n eventFontColorColumn(): string;\n eventFontColorColumn(_: string): this;\n eventBorderColorColumn(): string;\n eventBorderColorColumn(_: string): this;\n eventBackgroundColorColumn(): string;\n eventBackgroundColorColumn(_: string): this;\n hideIconWhenCollapsed(): boolean;\n hideIconWhenCollapsed(_: boolean): this;\n hideTitleWhenCollapsed(): boolean;\n hideTitleWhenCollapsed(_: boolean): this;\n hideDescriptionWhenCollapsed(): boolean;\n hideDescriptionWhenCollapsed(_: boolean): this;\n hideAnnotationsWhenCollapsed(): boolean;\n hideAnnotationsWhenCollapsed(_: boolean): this;\n centerOnMostRecent(): boolean;\n centerOnMostRecent(_: boolean): this;\n\n}\n\nMiniGantt.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"timePattern\");\nMiniGantt.prototype.publish(\"tickFormat\", null, \"string\", \"tickFormat\", undefined, { optional: true });\nMiniGantt.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"tooltipTimeFormat\");\nMiniGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nMiniGantt.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"orientation\", [\"horizontal\", \"vertical\"]);\nMiniGantt.prototype.publish(\"rangeFontColor\", \"#ecf0f1\", \"html-color\", \"rangeFontColor\");\nMiniGantt.prototype.publish(\"titleColumn\", null, \"string\", \"titleColumn\");\nMiniGantt.prototype.publish(\"startDateColumn\", null, \"string\", \"startDateColumn\");\nMiniGantt.prototype.publish(\"endDateColumn\", null, \"string\", \"endDateColumn\");\nMiniGantt.prototype.publish(\"iconColumn\", null, \"string\", \"iconColumn\");\nMiniGantt.prototype.publish(\"colorColumn\", null, \"string\", \"colorColumn\");\nMiniGantt.prototype.publish(\"yOffsetColumn\", null, \"string\", \"yOffsetColumn\");\nMiniGantt.prototype.publish(\"maxZoom\", 16, \"number\", \"maxZoom\");\nMiniGantt.prototype.publish(\"eventGroupOffset\", -50, \"number\", \"eventGroupOffset\");\nMiniGantt.prototype.publish(\"eventGroupMod\", 5, \"number\", \"eventGroupMod\");\nMiniGantt.prototype.publish(\"eventFontColorColumn\", null, \"string\", \"eventFontColorColumn\");\nMiniGantt.prototype.publish(\"eventBorderColorColumn\", null, \"string\", \"eventBorderColorColumn\");\nMiniGantt.prototype.publish(\"eventBackgroundColorColumn\", null, \"string\", \"eventBackgroundColorColumn\");\nMiniGantt.prototype.publish(\"hideIconWhenCollapsed\", false, \"boolean\", \"hideIconWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideTitleWhenCollapsed\", false, \"boolean\", \"hideTitleWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideDescriptionWhenCollapsed\", false, \"boolean\", \"hideDescriptionWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideAnnotationsWhenCollapsed\", true, \"boolean\", \"hideAnnotationsWhenCollapsed\");\nMiniGantt.prototype.publish(\"centerOnMostRecent\", false, \"boolean\", \"If true, the timeline will be centered on the most recent data point\");\n","import { d3Event, select as d3Select, SVGZoomWidget, Utility } from \"@hpcc-js/common\";\nimport { HTMLTooltip } from \"@hpcc-js/html\";\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\nimport { React, render, LabelledRect } from \"@hpcc-js/react\";\n\nexport type IGanttData = [ string, number, number, any? ];\n\nexport interface IRangeOptions {\n rangePadding: number;\n fontFamily: string;\n fontSize: number;\n strokeWidth?: number;\n fill: string;\n stroke: string;\n textFill: string;\n cornerRadius: number;\n}\n\nexport class ReactGantt extends SVGZoomWidget {\n\n protected _selection = new Utility.Selection(this);\n\n protected _buckets;\n protected _interpolateX;\n protected _interpolateY;\n \n protected _bucketsBySeries;\n protected _dataBySeries;\n protected _origIdxMap;\n private _seriesBackgrounds;\n\n protected _maxFontSize;\n\n public _tooltip;\n\n public _minStart: number;\n public _maxEnd: number;\n\n protected _title_idx = 0;\n protected _startDate_idx = 1;\n protected _endDate_idx = 2;\n protected _icon_idx = -1;\n protected _color_idx = -1;\n protected _series_idx = -1;\n protected _bucket_idx = -1;\n protected _yoffset_idx = -1;\n\n protected _maxX: number;\n protected _maxY: number;\n\n private _rangeOptions: IRangeOptions = {\n rangePadding: 2,\n fontFamily: \"Verdana\",\n fontSize: 12,\n fill: \"white\",\n stroke: \"black\",\n textFill: \"black\",\n cornerRadius: 3,\n strokeWidth: 0\n };\n \n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n super();\n this._drawStartPos = drawStartPosition;\n\n this.showToolbar_default(false);\n\n this._tooltip = new HTMLTooltip();\n this._tooltip\n .tooltipHTML(d => {\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${d[1]} -> ${d[2]}</div>`;\n });\n this._tooltip\n .followCursor(true)\n ;\n }\n\n 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 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\";\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 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 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 { ReactGantt } from \"./ReactGantt\";\nimport { IAxisGanttData } from \"./ReactAxisGantt\";\nimport { React } from \"@hpcc-js/react\";\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 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\";\n\nexport class ReactTimeline extends ReactAxisGantt {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor(){\n super();\n this._drawStartPos = \"origin\";\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const parser = d3TimeParse(\"%Q\");\n const startTime = parser(d[1]);\n const endTime = parser(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if(this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().map(n=>{\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if(minTimestamp > start){\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if(maxTimestamp < end){\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\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\n _tooltipHTML: (_) => string;\n}\nReactTimeline.prototype._class += \" timeline_ReactTimeline\";\n\nexport interface ReactTimeline {\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\";\n\nconst parseTime = d3TimeParse(\"%Q\");\nexport class ReactTimelineSeries extends ReactAxisGanttSeries {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor(){\n super();\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const startTime = parseTime(d[1]);\n const endTime = parseTime(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if(this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().forEach(n=>{\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if(minTimestamp > start){\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if(maxTimestamp < end){\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\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,"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","t","s","i","n","arguments","length","apply","__spreadArray","to","from","pack","ar","l","slice","concat","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","MiniGantt","_super","_this","localRect","d3Local","localEntityPin","_title_idx","_startDate_idx","_endDate_idx","_icon_idx","_color_idx","_yoffset_idx","ITooltip","Utility","SimpleSelectionMixin","_drawStartPos","tooltipHTML","tooltipFormatter","brAxis","parse","tlAxis","Axis","verticalBands","d3ScaleBand","paddingOuter","paddingInner","isHorizontal","orientation","fullExtent","data","map","filter","d3Extent","extent","rootExtent","undefined","centerOnMostRecent","parser","d3TimeParse","timePattern","formatter","d3TimeFormat","date1","date2","Date","setFullYear","getFullYear","time1","getTime","timeDiff","dataStartPos","_dateCache","pos","scalePos","dataEndPos","dataWidth","resetZoom","_zoom","transform","element","d3ZoomIdentity","translate","height","zoomed","d3Event","render","enter","domNode","d3Zoom","scaleExtent","maxZoom","on","background","append","attr","stopPropagation","gUpperContent","gUpperAxis","gMiddleContent","gLowerAxis","gLowerContent","target","node","tickFormat","guideTarget","shrinkToFit","overlapMode","tickFormat_exists","extend","_selection","widgetElement","update","titleColumn","columns","indexOf","startDateColumn","endDateColumn","iconColumn","colorColumn","yOffsetColumn","_prevIsHorizontal","tooltipTimeFormat","width","x","reverse","low","high","updateScale","y","hi","parseInvert","invert","invertX","invertY","sort","r","retVal","localeCompare","events","ranges","brAxisBBox","getBBox","upperContentHeight","updateEntityPins","lowerAxisHeight","lowerHeight","minYOffset","Math","min","row","isNaN","visible","y_offset","upperContentYOffset","lowerAxisYOffset","halfMinYOffset","tlAxisBBox","bucketData","bucketIndex","_i","ranges_1","range","bucket","endPos","overlapTolerence","push","vbLower","vbHigher","domain","_d","updateEventRanges","event_height","context","entityPins","selectAll","eventFontColor_idx","eventFontColorColumn","eventBorderColor_idx","eventBorderColorColumn","eventBackgroundColor_idx","eventBackgroundColorColumn","title_counts","events_1","title_types","keys","title_group_offset","eventGroupOffset","entityPinsEnter","d3Select","raise","each","entityPin","EntityPin","icon","iconOnlyShowOnHover","hideIconWhenCollapsed","titleOnlyShowOnHover","hideTitleWhenCollapsed","descriptionOnlyShowOnHover","hideDescriptionWhenCollapsed","annotationOnlyShowOnHover","hideAnnotationsWhenCollapsed","iconDiameter","iconPaddingPercent","titleFontSize","descriptionColor","descriptionFontSize","iconColor","titleColor","backgroundShape","backgroundColorFill","backgroundColorStroke","cornerRadius","arrowHeight","arrowWidth","set","merge","get","_title","title","x_offset","eventGroupMod","description","parsed_start_time","formatted_start_time","animationFrameRender","move","calc_height","calcHeight","exit","remove","event_offset","abs","eventRangeHeight","lines","buckets","bind","entityRect","EntityRect","rangeFontColor","enterEntityRect","click","rowToObj","selected","dblclick","tooltip","hide","show","textBox","bandwidth","rectWidth","max","rectHeight","paddingSize","fontSize","iconSize","fixedHeight","fixedWidth","padding","updateEntityRect","col","sel","textbox","SVGWidget","_class","implements","mixin","publish","optional","ReactGantt","drawStartPosition","Selection","_series_idx","_bucket_idx","_rangeOptions","rangePadding","fontFamily","fill","stroke","textFill","strokeWidth","_rangeRenderer","LabelledRect","_transform","k","showToolbar_default","_tooltip","HTMLTooltip","followCursor","rangeRenderer","_","clear","zoomExtent","seriesColumn","bucketColumn","w","x1","_interpolateX","d3ScaleLinear","_minStart","_maxEnd","a","_origIdxMap","_dataBySeries","_bucketsBySeries","forEach","dataRow","origIdx","seriesKey","gutter_1","gutter","bucketOffset_1","seriesKeys","calcBuckets","bucketHeight","bucketOffset","maxBucket","_seriesBackgrounds","_renderElement","key","join","props","hidden","oddSeriesBackground","evenSeriesBackground","_buckets","interpedStart","zoomTo","setRangeOptions","_maxFontScale","measureDataText","itemSelection","borderOffset1","borderOffset2","_id","id","isSelected","selectionChanged","classed","__lparam","highlightItem","mousein","d3evt","_triggerElement","_cursorLoc","clientX","clientY","fitContent","mouseover","mouseout","that","endX","bucketMap","interpolateY","text","renderRangeElement","x2","xScale","transformEach","options","setAttribute","bucketScale","truncateText","_maxY","_maxX","renderMode","_zoomScale","_zoomTranslate","_zoomG","options_1","zoomedHook","startKey","endKey","bucketKey","bucketKeyMap","tol","end","Infinity","i2","_a","_b","forceMeasure","textWidths","characterWidths","_prevFontFamily","_prevFontSize","textSize","split","char","_textWidths","_characterWidths","scale","ret","sum","_width","text_1","resize","_size","fitWidthToContent","fitHeightToContent","_element","_col","SVGZoomWidget","ReactAxisGantt","_topAxis","_gantt","_bottomAxis","resizeWrappers","h","axisHeight","contentHeight","_topRect","_topAxisElement","_contentRect","_contentElement","_bottomRect","_bottomAxisElement","onzoom","wpp","nextLow","floor","nextHigh","ceil","axisFontFamily","axisFontSize","tickLength","axisTickLength","ganttData","Number","publishProxy","ReactAxisGanttSeries","centerOverflowX_default","centerOverflowY_default","bottomHeight","_topWA","_centerWA","_bottomWA","top","bottom","center","lazyRender","d3Min","d3Max","Border2","ReactTimeline","startTime","endTime","timePattern_exists","minTimestamp_1","maxTimestamp_1","lowDateStr_1","highDateStr_1","start","_axisLabelFormatter","callback","_tooltipHTML","parseAxisValue","v","parsedTime","parseTime","formatTime","ReactTimelineSeries"],"sources":["../src/__package__.ts","../node_modules/tslib/tslib.es6.js","../../../node_modules/style-inject/dist/style-inject.es.js","../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\";\r\nexport const PKG_VERSION = \"2.51.11\";\r\nexport const BUILD_VERSION = \"2.104.19\";\r\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\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\n // ITooltip ---\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n\n // SimpleSelectionMixin\n _selection;\n}\nMiniGantt.prototype._class += \" timeline_MiniGantt\";\nMiniGantt.prototype.implements(ITooltip.prototype);\nMiniGantt.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface MiniGantt {\n timePattern(): string;\n timePattern(_: string): this;\n tickFormat(): string;\n tickFormat(_: string): this;\n tickFormat_exists(): boolean;\n tooltipTimeFormat(): string;\n tooltipTimeFormat(_: string): this;\n overlapTolerence(): number;\n overlapTolerence(_: number): this;\n orientation(): string;\n orientation(_: string): this;\n rangeFontColor(): string;\n rangeFontColor(_: string): this;\n titleColumn(): string;\n titleColumn(_: string): this;\n startDateColumn(): string;\n startDateColumn(_: string): this;\n endDateColumn(): string;\n endDateColumn(_: string): this;\n iconColumn(): string;\n iconColumn(_: string): this;\n colorColumn(): string;\n colorColumn(_: string): this;\n yOffsetColumn(): string;\n yOffsetColumn(_: string): this;\n maxZoom(): number;\n maxZoom(_: number): this;\n eventGroupMod(): number;\n eventGroupMod(_: number): this;\n eventGroupOffset(): number;\n eventGroupOffset(_: number): this;\n eventFontColorColumn(): string;\n eventFontColorColumn(_: string): this;\n eventBorderColorColumn(): string;\n eventBorderColorColumn(_: string): this;\n eventBackgroundColorColumn(): string;\n eventBackgroundColorColumn(_: string): this;\n hideIconWhenCollapsed(): boolean;\n hideIconWhenCollapsed(_: boolean): this;\n hideTitleWhenCollapsed(): boolean;\n hideTitleWhenCollapsed(_: boolean): this;\n hideDescriptionWhenCollapsed(): boolean;\n hideDescriptionWhenCollapsed(_: boolean): this;\n hideAnnotationsWhenCollapsed(): boolean;\n hideAnnotationsWhenCollapsed(_: boolean): this;\n centerOnMostRecent(): boolean;\n centerOnMostRecent(_: boolean): this;\n\n}\n\nMiniGantt.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"timePattern\");\nMiniGantt.prototype.publish(\"tickFormat\", null, \"string\", \"tickFormat\", undefined, { optional: true });\nMiniGantt.prototype.publish(\"tooltipTimeFormat\", \"%Y-%m-%d\", \"string\", \"tooltipTimeFormat\");\nMiniGantt.prototype.publish(\"overlapTolerence\", 2, \"number\", \"overlapTolerence\");\nMiniGantt.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"orientation\", [\"horizontal\", \"vertical\"]);\nMiniGantt.prototype.publish(\"rangeFontColor\", \"#ecf0f1\", \"html-color\", \"rangeFontColor\");\nMiniGantt.prototype.publish(\"titleColumn\", null, \"string\", \"titleColumn\");\nMiniGantt.prototype.publish(\"startDateColumn\", null, \"string\", \"startDateColumn\");\nMiniGantt.prototype.publish(\"endDateColumn\", null, \"string\", \"endDateColumn\");\nMiniGantt.prototype.publish(\"iconColumn\", null, \"string\", \"iconColumn\");\nMiniGantt.prototype.publish(\"colorColumn\", null, \"string\", \"colorColumn\");\nMiniGantt.prototype.publish(\"yOffsetColumn\", null, \"string\", \"yOffsetColumn\");\nMiniGantt.prototype.publish(\"maxZoom\", 16, \"number\", \"maxZoom\");\nMiniGantt.prototype.publish(\"eventGroupOffset\", -50, \"number\", \"eventGroupOffset\");\nMiniGantt.prototype.publish(\"eventGroupMod\", 5, \"number\", \"eventGroupMod\");\nMiniGantt.prototype.publish(\"eventFontColorColumn\", null, \"string\", \"eventFontColorColumn\");\nMiniGantt.prototype.publish(\"eventBorderColorColumn\", null, \"string\", \"eventBorderColorColumn\");\nMiniGantt.prototype.publish(\"eventBackgroundColorColumn\", null, \"string\", \"eventBackgroundColorColumn\");\nMiniGantt.prototype.publish(\"hideIconWhenCollapsed\", false, \"boolean\", \"hideIconWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideTitleWhenCollapsed\", false, \"boolean\", \"hideTitleWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideDescriptionWhenCollapsed\", false, \"boolean\", \"hideDescriptionWhenCollapsed\");\nMiniGantt.prototype.publish(\"hideAnnotationsWhenCollapsed\", true, \"boolean\", \"hideAnnotationsWhenCollapsed\");\nMiniGantt.prototype.publish(\"centerOnMostRecent\", false, \"boolean\", \"If true, the timeline will be centered on the most recent data point\");\n","import { d3Event, select as d3Select, SVGZoomWidget, Utility } from \"@hpcc-js/common\";\nimport { HTMLTooltip } from \"@hpcc-js/html\";\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\nimport { React, render, LabelledRect } from \"@hpcc-js/react\";\n\nexport type IGanttData = [ string, number, number, any? ];\n\nexport interface IRangeOptions {\n rangePadding: number;\n fontFamily: string;\n fontSize: number;\n strokeWidth?: number;\n fill: string;\n stroke: string;\n textFill: string;\n cornerRadius: number;\n}\n\nexport class ReactGantt extends SVGZoomWidget {\n\n protected _selection = new Utility.Selection(this);\n\n protected _buckets;\n protected _interpolateX;\n protected _interpolateY;\n \n protected _bucketsBySeries;\n protected _dataBySeries;\n protected _origIdxMap;\n private _seriesBackgrounds;\n\n protected _maxFontSize;\n\n public _tooltip;\n\n public _minStart: number;\n public _maxEnd: number;\n\n protected _title_idx = 0;\n protected _startDate_idx = 1;\n protected _endDate_idx = 2;\n protected _icon_idx = -1;\n protected _color_idx = -1;\n protected _series_idx = -1;\n protected _bucket_idx = -1;\n protected _yoffset_idx = -1;\n\n protected _maxX: number;\n protected _maxY: number;\n\n private _rangeOptions: IRangeOptions = {\n rangePadding: 2,\n fontFamily: \"Verdana\",\n fontSize: 12,\n fill: \"white\",\n stroke: \"black\",\n textFill: \"black\",\n cornerRadius: 3,\n strokeWidth: 0\n };\n \n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n super();\n this._drawStartPos = drawStartPosition;\n\n this.showToolbar_default(false);\n\n this._tooltip = new HTMLTooltip();\n this._tooltip\n .tooltipHTML(d => {\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${d[1]} -> ${d[2]}</div>`;\n });\n this._tooltip\n .followCursor(true)\n ;\n }\n\n 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 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\";\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 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 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 { ReactGantt } from \"./ReactGantt\";\nimport { IAxisGanttData } from \"./ReactAxisGantt\";\nimport { React } from \"@hpcc-js/react\";\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 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\";\n\nexport class ReactTimeline extends ReactAxisGantt {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor(){\n super();\n this._drawStartPos = \"origin\";\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const parser = d3TimeParse(\"%Q\");\n const startTime = parser(d[1]);\n const endTime = parser(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if(this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().map(n=>{\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if(minTimestamp > start){\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if(maxTimestamp < end){\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\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\n _tooltipHTML: (_) => string;\n}\nReactTimeline.prototype._class += \" timeline_ReactTimeline\";\n\nexport interface ReactTimeline {\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\";\n\nconst parseTime = d3TimeParse(\"%Q\");\nexport class ReactTimelineSeries extends ReactAxisGanttSeries {\n\n protected _axisLabelFormatter;//TODO: add a type to this? d3 time formatting function type?\n\n constructor(){\n super();\n this._topAxis.type(\"time\");\n this._bottomAxis.type(\"time\");\n\n this.tooltipHTML((d: any) => {\n const startTime = parseTime(d[1]);\n const endTime = parseTime(d[2]);\n\n const formatter = d3TimeFormat(this.tooltipTimeFormat());\n return `<div style=\"text-align:center;\">${d[0]}<br/><br/>${formatter(startTime)} -> ${formatter(endTime)}</div>`;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n if(this.timePattern_exists()) {\n\n let minTimestamp = Infinity;\n let maxTimestamp = -Infinity;\n let lowDateStr = \"\";\n let highDateStr = \"\";\n this.data().forEach(n=>{\n const start = new Date(n[1]).getTime();\n const end = new Date(n[2]).getTime();\n if(minTimestamp > start){\n minTimestamp = start;\n lowDateStr = \"\" + n[1];\n }\n if(maxTimestamp < end){\n maxTimestamp = end;\n highDateStr = \"\" + n[2];\n }\n });\n this._topAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\n ;\n this._bottomAxis\n .type(\"time\")\n .timePattern(this.timePattern())\n .overlapMode(\"none\")\n .tickFormat(this._axisLabelFormatter)\n .low(lowDateStr)\n .high(highDateStr)\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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"}
|