@hpcc-js/layout 3.5.14 → 3.5.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/__package__.ts","../src/AbsoluteSurface.ts","../src/Accordion.ts","../src/Surface.ts","../src/Cell.ts","../src/Border.ts","../src/Border2.ts","../src/Carousel.ts","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/symbol/cross.js","../../../node_modules/d3-shape/src/symbol/diamond.js","../../../node_modules/d3-shape/src/symbol/star.js","../../../node_modules/d3-shape/src/symbol/square.js","../../../node_modules/d3-shape/src/symbol/triangle.js","../../../node_modules/d3-shape/src/symbol/wye.js","../../../node_modules/d3-shape/src/symbol.js","../../../node_modules/d3-svg-legend/indexRollupNext.js","../src/Legend.ts","../src/Modal.ts","../src/ChartPanel.ts","../src/FlexGrid.ts","../../../node_modules/grid-list/src/gridList.js","../src/Grid.ts","../src/HorizontalList.ts","../src/Layered.ts","../src/Popup.ts","../src/Tabbed.ts","../src/Toolbar.ts","../src/VerticalList.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { HTMLWidget } from \"@hpcc-js/common\";\n\nimport \"../src/AbsoluteSurface.css\";\n\nexport class AbsoluteSurface extends HTMLWidget {\n constructor() {\n super();\n\n this._tag = \"div\";\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n let xPos = 0;\n let yPos = 0;\n let width = this.clientWidth();\n let height = this.clientHeight();\n switch (this.units()) {\n case \"pixels\":\n xPos = this.widgetX();\n yPos = this.widgetY();\n width = this.widgetWidth() === \"\" ? width - xPos : Number(this.widgetWidth());\n height = this.widgetHeight() === \"\" ? height - yPos : Number(this.widgetHeight());\n break;\n case \"percent\":\n xPos = this.widgetX() * width / 100;\n yPos = this.widgetY() * height / 100;\n width = this.widgetWidth() === \"\" ? width - xPos : Number(this.widgetWidth()) * width / 100;\n height = this.widgetHeight() === \"\" ? height - yPos : Number(this.widgetHeight()) * height / 100;\n break;\n }\n element.style(\"opacity\", this.opacity());\n\n const widgets = element.selectAll(\"#\" + this._id + \" > .placeholder\").data(this.widget() ? [this.widget()] : [], function (d) { return d._id; });\n widgets.enter().append(\"div\")\n .attr(\"class\", \"placeholder\")\n .each(function (d) {\n d.target(this);\n })\n .merge(widgets)\n .style(\"left\", xPos + \"px\")\n .style(\"top\", yPos + \"px\")\n .style(\"width\", width + \"px\")\n .style(\"bottom\", height + \"px\")\n .each(function (d) {\n d\n .resize({ width, height })\n ;\n })\n ;\n widgets.exit().each(function (d) {\n d.target(null);\n }).remove();\n }\n\n exit(domNode, element) {\n if (this.widget()) {\n this.widget().target(null);\n }\n super.exit(domNode, element);\n }\n}\nAbsoluteSurface.prototype._class += \" layout_AbsoluteSurface\";\n\nexport interface AbsoluteSurface {\n units(): string;\n units(_: string): this;\n widgetX(): number;\n widgetX(_: number): this;\n widgetY(): number;\n widgetY(_: number): this;\n widgetWidth(): string;\n widgetWidth(_: string): this;\n widgetHeight(): string;\n widgetHeight(_: string): this;\n widget(): any;\n widget(_: any): this;\n opacity(): number;\n opacity(_: number): this;\n}\n\nAbsoluteSurface.prototype.publish(\"units\", \"percent\", \"set\", \"Units\", [\"pixels\", \"percent\"]);\nAbsoluteSurface.prototype.publish(\"widgetX\", 0, \"number\", \"Widget XPos\");\nAbsoluteSurface.prototype.publish(\"widgetY\", 0, \"number\", \"Widget YPos\");\nAbsoluteSurface.prototype.publish(\"widgetWidth\", \"100\", \"string\", \"Widget Width, omit for full\");\nAbsoluteSurface.prototype.publish(\"widgetHeight\", \"100\", \"string\", \"Widget Height, omit for full\");\nAbsoluteSurface.prototype.publish(\"widget\", null, \"widget\", \"Widget\", null, { tags: [\"Private\"] });\nAbsoluteSurface.prototype.publish(\"opacity\", 1, \"number\", \"Opacity\");\n","import { FAChar, HTMLWidget } from \"@hpcc-js/common\";\n\nimport \"../src/Accordion.css\";\n\nexport class Accordion extends HTMLWidget {\n protected _isClosed: boolean;\n titleSpan;\n iconDiv;\n ul;\n icon;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n this._isClosed = false;\n }\n\n pushListItem(widget, prepend: boolean = false, protect: boolean = false) {\n const contentArr = this.content();\n\n widget._protected = protect;\n\n if (prepend) {\n contentArr.unshift(widget);\n } else {\n contentArr.push(widget);\n }\n this.content(contentArr);\n return this;\n }\n\n clearListItems() {\n const arr = [];\n for (const i in this.content()) {\n if (this.content()[i]._protected) {\n arr.push(this.content()[i]);\n }\n }\n this.content(arr);\n return this;\n }\n\n collapseClick(element) {\n if (element.classed(\"closed\")) {\n this._isClosed = false;\n element.classed(\"open\", true);\n element.classed(\"closed\", false);\n } else {\n this._isClosed = true;\n element.classed(\"open\", false);\n element.classed(\"closed\", true);\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n const context = this;\n this._isClosed = this.defaultCollapsed();\n element.classed(this._isClosed ? \"closed\" : \"open\", true);\n\n this.titleSpan = element.append(\"span\").classed(\"collapsible-title\", true);\n this.iconDiv = element.append(\"div\").classed(\"collapsible-icon\", true);\n this.ul = element.append(\"ul\");\n\n this.icon = new FAChar()\n .size({ height: 24, width: 24 })\n .target(this.iconDiv.node());\n\n this.iconDiv.on(\"click\", function () {\n context.collapseClick(element);\n context.render();\n });\n this.titleSpan.on(\"click\", function () {\n context.collapseClick(element);\n context.render();\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n const this_id = \"\";\n this.titleSpan.text(context.title().length > 0 ? context.title() + this_id : \"Accordion [\" + context._id + \"]\" + this_id);\n const rows = this.ul.selectAll(\"#\" + context._id + \" > ul > li\").data(this.content(), function (d) {\n return d._id;\n });\n rows.enter()\n .append(function (widget) {\n const li = document.createElement(\"li\");\n if (widget._target === null) {\n const wSize = widget.size();\n if (wSize.width === 0 || wSize.height === 0) {\n const cSize = context.size();\n widget.size({\n width: cSize.width,\n height: cSize.width\n });\n }\n widget.target(li);\n } else {\n return widget._target;\n }\n return li;\n })\n ;\n rows.exit().remove();\n\n this.icon\n .text_colorFill(this.titleFontColor())\n .char(this._isClosed ? this.closedIcon() : this.openIcon()).render()\n ;\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nAccordion.prototype._class += \" layout_Accordion\";\n\nexport interface Accordion {\n content(): any[];\n content(_: any[]): this;\n title(): string;\n title(_: string): this;\n openIcon(): string;\n openIcon(_: string): this;\n closedIcon(): string;\n closedIcon(_: string): this;\n titleFontColor(): string;\n titleFontColor(_: string): this;\n titleBackgroundColor(): string;\n titleBackgroundColor(_: string): this;\n\n defaultCollapsed(): boolean;\n defaultCollapsed(_: boolean): this;\n}\n\nAccordion.prototype.publish(\"content\", [], \"widgetArray\", \"Array of widgets\", null, { tags: [\"Basic\"] });\nAccordion.prototype.publish(\"title\", \"\", \"string\", \"Title of collapsible section\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"openIcon\", \"\\uf147\", \"string\", \"Icon to display when list is open\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"closedIcon\", \"\\uf196\", \"string\", \"Icon to display when list is closed\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"titleFontColor\", \"#FFFFFF\", \"html-color\", \"Title font color\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"titleBackgroundColor\", \"#333333\", \"html-color\", \"Title background color\", null, { tags: [\"Private\"] });\n\nAccordion.prototype.publish(\"defaultCollapsed\", false, \"boolean\", \"Collapsed by default if true\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Surface.css\";\n\nexport class Surface extends HTMLWidget {\n _surfaceButtons;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n this._surfaceButtons = [];\n }\n\n widgetSize(titleDiv, widgetDiv) {\n let width = this.clientWidth();\n let height = this.clientHeight();\n if (this.title()) {\n height -= this.calcHeight(titleDiv);\n }\n height -= this.calcFrameHeight(widgetDiv);\n width -= this.calcFrameWidth(widgetDiv);\n return { width, height };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n }\n\n update(domNode, element2) {\n super.update(domNode, element2);\n const context = this;\n\n element2\n .classed(\"shadow2\", this.surfaceShadow())\n .style(\"border-width\", this.surfaceBorderWidth_exists() ? this.surfaceBorderWidth() + \"px\" : null)\n .style(\"border-color\", this.surfaceBorderColor())\n .style(\"border-radius\", this.surfaceBorderRadius_exists() ? this.surfaceBorderRadius() + \"px\" : null)\n .style(\"background-color\", this.surfaceBackgroundColor())\n ;\n\n const titles = element2.selectAll(\".surfaceTitle\").data(this.title() ? [this.title()] : []);\n titles.enter().insert(\"h3\", \"div\")\n .attr(\"class\", \"surfaceTitle\")\n .merge(titles)\n .text(function (d) { return d; })\n .style(\"text-align\", this.surfaceTitleAlignment())\n .style(\"color\", this.surfaceTitleFontColor())\n .style(\"font-size\", this.surfaceTitleFontSize_exists() ? this.surfaceTitleFontSize() + \"px\" : null)\n .style(\"font-family\", this.surfaceTitleFontFamily())\n .style(\"font-weight\", this.surfaceTitleFontBold() ? \"bold\" : \"normal\")\n .style(\"background-color\", this.surfaceTitleBackgroundColor())\n .style(\"padding\", this.surfaceTitlePadding_exists() ? this.surfaceTitlePadding() + \"px\" : null)\n .style(\"title\", this.altText_exists() ? this.altText() : null)\n ;\n titles.exit().remove();\n\n const surfaceTitle = element2.select(\".surfaceTitle\");\n\n const surfaceButtons = surfaceTitle.append(\"div\").attr(\"class\", \"html-button-container\").selectAll(\".surface-button\").data(this.buttonAnnotations());\n surfaceButtons.enter().append(\"button\").classed(\"surface-button\", true)\n .each(function (button, idx) {\n const el = context._surfaceButtons[idx] = d3Select(this)\n .attr(\"class\", \"surface-button\" + (button.class ? \" \" + button.class : \"\"))\n .attr(\"id\", button.id)\n .style(\"padding\", button.padding)\n .style(\"width\", button.width)\n .style(\"height\", button.height)\n .style(\"cursor\", \"pointer\");\n if (button.font === \"FontAwesome\") {\n el\n .style(\"background\", \"transparent\")\n .style(\"border\", \"none\")\n .on(\"click\", function (d) { context.click(d); })\n .append(\"i\")\n .attr(\"class\", \"fa\")\n .text(function () { return button.label; });\n } else {\n el\n .text(function () { return button.label; })\n .on(\"click\", function (d) { context.click(d); });\n }\n })\n ;\n surfaceButtons.exit()\n .each(function (_d, idx) {\n const element = d3Select(this);\n delete context._surfaceButtons[idx];\n element.remove();\n })\n ;\n const widgets = element2.selectAll(\"#\" + this._id + \" > .surfaceWidget\").data(this.widget() ? [this.widget()] : [], function (d) { return d._id; });\n\n widgets.enter().append(\"div\")\n .attr(\"class\", \"surfaceWidget\")\n .each(function (d) {\n d3Select(context.element().node().parentElement).classed(\"content-icon content-icon-\" + (d.classID().split(\"_\")[1]), true);\n d.target(this);\n })\n .merge(widgets)\n .style(\"padding\", this.surfacePadding_exists() ? this.surfacePadding() + \"px\" : null)\n .each(function (d) {\n const widgetSize = context.widgetSize(element2.select(\"h3\"), d3Select(this));\n if (widgetSize.width < 0) widgetSize.width = 0;\n if (widgetSize.height < 0) widgetSize.height = 0;\n d\n .resize({ width: widgetSize.width, height: widgetSize.height })\n ;\n })\n ;\n widgets.exit().each(function (d) {\n d.target(null);\n }).remove();\n }\n\n exit(domNode, element) {\n if (this.widget()) {\n this.widget().target(null);\n }\n super.exit(domNode, element);\n }\n\n // Events ---\n click(obj) {\n }\n}\nSurface.prototype._class += \" layout_Surface\";\n\nexport interface Surface {\n /* \n title: { (): string; (_: string): Surface; };\n altText: { (): string; (_: string): Surface; };\n altText_exists: () => boolean;\n surfaceTitlePadding: { (): number; (_: number): Surface; };\n surfaceTitlePadding_exists: () => boolean;\n surfaceTitleFontSize: { (): number; (_: number): Surface; };\n surfaceTitleFontSize_exists: () => boolean;\n surfaceTitleFontColor: { (): string; (_: string): Surface; };\n surfaceTitleFontFamily: { (): string; (_: string): Surface; };\n surfaceTitleFontBold: { (): boolean; (_: boolean): Surface; };\n surfaceTitleBackgroundColor: { (): string; (_: string): Surface; };\n surfaceTitleAlignment: { (): string; (_: string): Surface; };\n\n surfaceShadow: { (): boolean; (_: boolean): Surface; };\n surfacePadding: { (): string; (_: string): Surface; };\n surfacePadding_exists: () => boolean;\n surfaceBackgroundColor: { (): string; (_: string): Surface; };\n surfaceBorderWidth: { (): number; (_: number): Surface; };\n surfaceBorderWidth_exists: () => boolean;\n surfaceBorderColor: { (): string; (_: string): Surface; };\n surfaceBorderRadius: { (): number; (_: number): Surface; };\n surfaceBorderRadius_exists: () => boolean;\n\n buttonAnnotations: { (): any[]; (_: any[]): Surface; };\n\n widget: { (): Widget; (_: Widget): Surface; };\n */\n title(): string;\n title(_: string): this;\n altText(): string;\n altText(_: string): this;\n altText_exists(): boolean;\n surfaceTitlePadding(): number;\n surfaceTitlePadding(_: number): this;\n surfaceTitlePadding_exists(): boolean;\n surfaceTitleFontSize(): number;\n surfaceTitleFontSize(_: number): this;\n surfaceTitleFontSize_exists(): boolean;\n surfaceTitleFontColor(): string;\n surfaceTitleFontColor(_: string): this;\n surfaceTitleFontFamily(): string;\n surfaceTitleFontFamily(_: string): this;\n surfaceTitleFontBold(): boolean;\n surfaceTitleFontBold(_: boolean): this;\n surfaceTitleBackgroundColor(): string;\n surfaceTitleBackgroundColor(_: string): this;\n surfaceTitleAlignment(): string;\n surfaceTitleAlignment(_: string): this;\n\n surfaceShadow(): boolean;\n surfaceShadow(_: boolean): this;\n surfacePadding(): string;\n surfacePadding(_: string): this;\n surfacePadding_exists(): boolean;\n surfaceBackgroundColor(): string;\n surfaceBackgroundColor(_: string): this;\n surfaceBorderWidth(): number;\n surfaceBorderWidth(_: number): this;\n surfaceBorderWidth_exists(): boolean;\n surfaceBorderColor(): string;\n surfaceBorderColor(_: string): this;\n surfaceBorderRadius(): number;\n surfaceBorderRadius(_: number): this;\n surfaceBorderRadius_exists(): boolean;\n\n buttonAnnotations(): any[];\n buttonAnnotations(_: any[]): this;\n\n widget(): Widget;\n widget(_: Widget): this;\n}\n\nSurface.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Intermediate\"] });\nSurface.prototype.publish(\"altText\", null, \"string\", \"Alt text\", null, { optional: true });\nSurface.prototype.publish(\"surfaceTitlePadding\", null, \"number\", \"Title Padding (px)\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontSize\", null, \"number\", \"Title Font Size (px)\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontColor\", null, \"html-color\", \"Title Font Color\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontFamily\", null, \"string\", \"Title Font Family\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontBold\", true, \"boolean\", \"Enable Bold Title Font\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleBackgroundColor\", null, \"html-color\", \"Title Background Color\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleAlignment\", \"center\", \"set\", \"Title Alignment\", [\"left\", \"right\", \"center\"], { tags: [\"Basic\"], disable: (w: any) => !w.title() });\n\nSurface.prototype.publish(\"surfaceShadow\", false, \"boolean\", \"3D Shadow\");\nSurface.prototype.publish(\"surfacePadding\", null, \"string\", \"Surface Padding (px)\", null, { tags: [\"Intermediate\"] });\nSurface.prototype.publish(\"surfaceBackgroundColor\", null, \"html-color\", \"Surface Background Color\", null, { tags: [\"Advanced\"] });\nSurface.prototype.publish(\"surfaceBorderWidth\", null, \"number\", \"Surface Border Width (px)\", null, { tags: [\"Advanced\"] });\nSurface.prototype.publish(\"surfaceBorderColor\", null, \"html-color\", \"Surface Border Color\", null, { tags: [\"Advanced\"] });\nSurface.prototype.publish(\"surfaceBorderRadius\", null, \"number\", \"Surface Border Radius (px)\", null, { tags: [\"Advanced\"] });\n\nSurface.prototype.publish(\"buttonAnnotations\", [], \"array\", \"Button Array\", null, { tags: [\"Private\"] });\n\nSurface.prototype.publish(\"widget\", null, \"widget\", \"Widget\", null, { tags: [\"Basic\"] });\n","import { Widget } from \"@hpcc-js/common\";\nimport { select as d3Select, selectAll as d3SelectAll } from \"d3-selection\";\nimport { Surface } from \"./Surface.ts\";\n\nimport \"../src/Cell.css\";\n\nexport class Cell extends Surface {\n _indicateTheseIds;\n\n constructor() {\n super();\n this._indicateTheseIds = [];\n }\n\n indicateTheseIds(): any[];\n indicateTheseIds(_: any[]): Cell;\n indicateTheseIds(_?: any[]): any[] | Cell {\n if (!arguments.length) return this._indicateTheseIds;\n this._indicateTheseIds = _;\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n const context = this;\n element\n .classed(\"layout_Surface\", true)\n .on(\"mouseenter\", function () { context.onMouseEnter(); })\n .on(\"mouseleave\", function () { context.onMouseLeave(); })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n onMouseEnter() {\n const arr = this.indicateTheseIds();\n const opacity = this.indicatorOpacity();\n const indicatorBorderColor = this.indicatorBorderColor();\n const indicatorGlowColor = this.indicatorGlowColor();\n for (let i = 0; i < arr.length; i++) {\n const otherElement = d3Select(\"#\" + arr[i]);\n const otherWidget: Widget = otherElement.datum() as Widget;\n if (otherElement && otherWidget) {\n otherElement.append(\"div\")\n .attr(\"class\", \"update-indicator\")\n .style(\"width\", otherWidget.width() + \"px\")\n .style(\"height\", otherWidget.height() + \"px\")\n .style(\"opacity\", opacity)\n .style(\"border-color\", indicatorBorderColor)\n .style(\"-webkit-box-shadow\", \"inset 0px 0px 30px 0px \" + indicatorGlowColor)\n .style(\"-moz-box-shadow\", \"inset 0px 0px 30px 0px \" + indicatorGlowColor)\n .style(\"box-shadow\", \"inset 0px 0px 30px 0px \" + indicatorGlowColor)\n ;\n }\n }\n }\n\n onMouseLeave() {\n const arr = this.indicateTheseIds();\n for (let i = 0; i < arr.length; i++) {\n d3SelectAll(\"#\" + arr[i] + \" > div.update-indicator\").remove();\n }\n }\n}\nCell.prototype._class += \" layout_Cell\";\n\nexport interface Cell {\n gridRow(): number;\n gridRow(_: number): this;\n gridCol(): number;\n gridCol(_: number): this;\n gridRowSpan(): number;\n gridRowSpan(_: number): this;\n gridColSpan(): number;\n gridColSpan(_: number): this;\n\n indicatorGlowColor(): string;\n indicatorGlowColor(_: string): this;\n indicatorBorderColor(): string;\n indicatorBorderColor(_: string): this;\n indicatorOpacity(): number;\n indicatorOpacity(_: number): this;\n}\n\nCell.prototype.publish(\"gridRow\", 0, \"number\", \"Grid Row Position\", null, { tags: [\"Private\"] });\nCell.prototype.publish(\"gridCol\", 0, \"number\", \"Grid Column Position\", null, { tags: [\"Private\"] });\nCell.prototype.publish(\"gridRowSpan\", 1, \"number\", \"Grid Row Span\", null, { tags: [\"Private\"] });\nCell.prototype.publish(\"gridColSpan\", 1, \"number\", \"Grid Column Span\", null, { tags: [\"Private\"] });\n\nCell.prototype.publish(\"indicatorGlowColor\", \"#EEEE11\", \"html-color\", \"Glow color of update-indicator\", null, { tags: [\"Basic\"] });\nCell.prototype.publish(\"indicatorBorderColor\", \"#F48A00\", \"html-color\", \"Border color of update-indicator\", null, { tags: [\"Basic\"] });\nCell.prototype.publish(\"indicatorOpacity\", 0.8, \"number\", \"Opacity of update-indicator\", null, { tags: [\"Basic\"] });\n","import { d3Event, HTMLWidget, Platform, select as d3Select, selectAll as d3SelectAll, Utility } from \"@hpcc-js/common\";\nimport { drag as d3Drag } from \"d3-drag\";\nimport { Cell } from \"./Cell.ts\";\n\nimport \"../src/Border.css\";\n\nexport class Border extends HTMLWidget {\n _colCount: number;\n _rowCount: number;\n _colSize: number;\n _rowSize: number;\n _shrinkWrapBoxes;\n _watch;\n _offsetX;\n _offsetY;\n _dragCell;\n _dragCellSize;\n _dragCellStartSize;\n _handleTop;\n _handleLeft;\n _dragPrevX;\n _dragPrevY;\n _cellSizes;\n contentDiv;\n _scrollBarWidth;\n _borderHandles;\n _sectionTypeArr;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n\n this._colCount = 0;\n this._rowCount = 0;\n this._colSize = 0;\n this._rowSize = 0;\n\n this._shrinkWrapBoxes = {};\n\n this.content([]);\n this.sectionTypes([]);\n }\n\n watchWidget(widget) {\n if (this._watch === undefined) {\n this._watch = {};\n }\n if (this._watch[widget.id()]) {\n this._watch[widget.id()].remove();\n delete this._watch[widget.id()];\n }\n if (widget) {\n const context = this;\n this._watch[widget.id()] = widget.monitor(function (paramId, newVal, oldVal) {\n if (oldVal !== newVal) {\n context.lazyPostUpdate();\n }\n });\n }\n }\n\n lazyPostUpdate = Utility.debounce(function () {\n this.postUpdate();\n }, 100);\n\n applyLayoutType() {\n const layoutObj = this.borderLayoutObject();\n this.content().forEach(function (cell, i) {\n cell._fixedLeft = layoutObj[this.sectionTypes()[i]].left;\n cell._fixedTop = layoutObj[this.sectionTypes()[i]].top;\n cell._fixedWidth = layoutObj[this.sectionTypes()[i]].width;\n cell._fixedHeight = layoutObj[this.sectionTypes()[i]].height;\n cell._dragHandles = this.cellSpecificDragHandles(this.sectionTypes()[i]);\n }, this);\n }\n cellSpecificDragHandles(sectionType) {\n switch (sectionType) {\n case \"top\": return [\"s\"];\n case \"right\": return [\"w\"];\n case \"bottom\": return [\"n\"];\n case \"left\": return [\"e\"];\n case \"center\": return [];\n }\n }\n\n borderLayoutObject(layoutType?) {\n const retObj = {};\n const context = this;\n let topSize;\n let topPerc;\n let bottomSize;\n let bottomPerc;\n let leftSize;\n let leftPerc;\n let rightSize;\n let rightPerc;\n\n const bcRect = this.target().getBoundingClientRect();\n const gridRect: any = {};\n gridRect.top = bcRect.top;\n gridRect.left = bcRect.left;\n gridRect.bottom = bcRect.bottom;\n gridRect.right = bcRect.right;\n if (this.target() instanceof SVGElement) {\n gridRect.width = parseFloat(this.target().getAttribute(\"width\"));\n gridRect.height = parseFloat(this.target().getAttribute(\"height\"));\n } else {\n gridRect.width = bcRect.width;\n gridRect.height = bcRect.height;\n }\n if (this.sectionTypes().indexOf(\"top\") !== -1) {\n topSize = this.topSize();\n topPerc = this.topPercentage();\n if (typeof (this._shrinkWrapBoxes[\"top\"]) !== \"undefined\") {\n topSize = this._shrinkWrapBoxes[\"top\"].height + this.gutter();\n topPerc = 0;\n }\n }\n if (this.sectionTypes().indexOf(\"bottom\") !== -1) {\n bottomSize = this.bottomSize();\n bottomPerc = this.bottomPercentage();\n if (typeof (this._shrinkWrapBoxes[\"bottom\"]) !== \"undefined\") {\n bottomSize = this._shrinkWrapBoxes[\"bottom\"].height + this.gutter();\n bottomPerc = 0;\n }\n }\n if (this.sectionTypes().indexOf(\"left\") !== -1) {\n leftSize = this.leftSize();\n leftPerc = this.leftPercentage();\n if (typeof (this._shrinkWrapBoxes[\"left\"]) !== \"undefined\") {\n leftSize = this._shrinkWrapBoxes[\"left\"].width + this.gutter();\n leftPerc = 0;\n }\n }\n if (this.sectionTypes().indexOf(\"right\") !== -1) {\n rightSize = this.rightSize();\n rightPerc = this.rightPercentage();\n if (typeof (this._shrinkWrapBoxes[\"right\"]) !== \"undefined\") {\n rightSize = this._shrinkWrapBoxes[\"right\"].width + this.gutter();\n rightPerc = 0;\n }\n }\n\n const t = _sectionPlacementObject({\n width: { \"px\": 0, \"%\": 100 },\n height: { \"px\": topSize, \"%\": topPerc },\n top: { \"px\": 0, \"%\": 0 },\n left: { \"px\": 0, \"%\": 0 }\n });\n const b = _sectionPlacementObject({\n width: { \"px\": 0, \"%\": 100 },\n height: { \"px\": bottomSize, \"%\": bottomPerc },\n top: { \"px\": 0, \"%\": 100 },\n left: { \"px\": 0, \"%\": 0 }\n });\n b.top -= b.height;\n const l = _sectionPlacementObject({\n width: { \"px\": leftSize, \"%\": leftPerc },\n height: { \"px\": -t.height - b.height, \"%\": 100 },\n top: { \"px\": t.height, \"%\": 0 },\n left: { \"px\": 0, \"%\": 0 }\n });\n const r = _sectionPlacementObject({\n width: { \"px\": rightSize, \"%\": rightPerc },\n height: { \"px\": -t.height - b.height, \"%\": 100 },\n top: { \"px\": t.height, \"%\": 0 },\n left: { \"px\": 0, \"%\": 100 }\n });\n r.left -= r.width;\n const c = _sectionPlacementObject({\n width: { \"px\": -r.width - l.width, \"%\": 100 },\n height: { \"px\": -t.height - b.height, \"%\": 100 },\n top: { \"px\": t.height, \"%\": 0 },\n left: { \"px\": l.width, \"%\": 0 }\n });\n retObj[\"top\"] = t;\n retObj[\"bottom\"] = b;\n retObj[\"right\"] = r;\n retObj[\"left\"] = l;\n retObj[\"center\"] = c;\n return retObj;\n\n function _sectionPlacementObject(obj) {\n obj.width[\"px\"] = typeof (obj.width[\"px\"]) !== \"undefined\" ? obj.width[\"px\"] : 0;\n obj.width[\"%\"] = typeof (obj.width[\"%\"]) !== \"undefined\" ? obj.width[\"%\"] : 0;\n obj.height[\"px\"] = typeof (obj.height[\"px\"]) !== \"undefined\" ? obj.height[\"px\"] : 0;\n obj.height[\"%\"] = typeof (obj.height[\"%\"]) !== \"undefined\" ? obj.height[\"%\"] : 0;\n const ret = {\n width: obj.width[\"px\"] + (obj.width[\"%\"] / 100 * context.width()),\n height: obj.height[\"px\"] + (obj.height[\"%\"] / 100 * context.height()),\n top: obj.top[\"px\"] + (obj.top[\"%\"] / 100 * context.height()) + context.gutter() / 2,\n left: obj.left[\"px\"] + (obj.left[\"%\"] / 100 * context.width()) + context.gutter() / 2\n };\n return ret;\n }\n }\n\n clearContent(sectionType) {\n if (!sectionType) {\n this.content().forEach(function (contentWidget) {\n contentWidget.target(null);\n return false;\n });\n d3Select(\"#\" + this.id() + \" > div.borderHandle\")\n .classed(\"borderHandleDisabled\", true)\n ;\n delete this._watch;\n this.content([]);\n this.sectionTypes([]);\n } else {\n const idx = this.sectionTypes().indexOf(sectionType);\n if (idx >= 0) {\n if (this._watch && this.content()[idx]) {\n delete this._watch[this.content()[idx].id()];\n }\n this.content()[idx].target(null);\n d3Select(\"#\" + this.id() + \" > div.borderHandle_\" + sectionType)\n .classed(\"borderHandleDisabled\", true)\n ;\n this.content().splice(idx, 1);\n this.sectionTypes().splice(idx, 1);\n }\n }\n }\n\n hasContent(sectionType, widget, title) {\n return this.sectionTypes().indexOf(sectionType) >= 0;\n }\n\n setContent(sectionType, widget, title?) {\n this.clearContent(sectionType);\n title = typeof (title) !== \"undefined\" ? title : \"\";\n if (widget) {\n const cell = new Cell()\n .surfaceBorderWidth(0)\n .widget(widget)\n .title(title)\n ;\n this.watchWidget(widget);\n this.content().push(cell);\n this.sectionTypes().push(sectionType);\n }\n return this;\n }\n\n getCell(id) {\n const idx = this.sectionTypes().indexOf(id);\n if (idx >= 0) {\n return this.content()[idx];\n }\n return null;\n }\n\n getContent(id) {\n const idx = this.sectionTypes().indexOf(id);\n if (idx >= 0) {\n return this.content()[idx].widget();\n }\n return null;\n }\n\n setLayoutOffsets() {\n this._offsetX = this._element.node().getBoundingClientRect().left + (this.gutter() / 2);\n this._offsetY = this._element.node().getBoundingClientRect().top + (this.gutter() / 2);\n }\n\n dragStart(handle) {\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n const context = this;\n\n this._dragCell = handle;\n this._dragCellStartSize = this[handle + \"Size\"]();\n\n if (this[handle + \"ShrinkWrap\"]()) {\n this[handle + \"Percentage\"](0);\n this[handle + \"ShrinkWrap\"](false);\n }\n\n const handleElm = d3Select(\"#\" + context.id() + \" > div.borderHandle_\" + handle);\n context._handleTop = parseFloat(handleElm.style(\"top\").split(\"px\")[0]);\n context._handleLeft = parseFloat(handleElm.style(\"left\").split(\"px\")[0]);\n\n this._dragPrevX = event.sourceEvent.clientX;\n this._dragPrevY = event.sourceEvent.clientY;\n }\n dragTick(handle) {\n const context = this;\n\n const event = d3Event();\n const xDelta = this._dragPrevX - event.sourceEvent.clientX;\n const yDelta = this._dragPrevY - event.sourceEvent.clientY;\n\n switch (handle) {\n case \"top\":\n case \"bottom\":\n _moveHandles(handle, yDelta);\n break;\n case \"right\":\n case \"left\":\n _moveHandles(handle, xDelta);\n break;\n }\n\n function _moveHandles(handle2, delta) {\n if (delta === 0) return;\n const handles = d3SelectAll(\"#\" + context.id() + \" > div.borderHandle\");\n const grabbedHandle = d3Select(\"#\" + context.id() + \" > div.borderHandle_\" + handle2);\n\n if (grabbedHandle.classed(\"borderHandle_top\")) {\n grabbedHandle.style(\"top\", (context._handleTop - delta) + \"px\");\n context._cellSizes.topHeight = context._handleTop - delta;\n context._cellSizes.leftHeight = context._cellSizes.height;\n context._cellSizes.leftHeight -= context._cellSizes.topHeight;\n context._cellSizes.leftHeight -= context._cellSizes.bottomHeight;\n context._cellSizes.rightHeight = context._cellSizes.leftHeight;\n } else if (grabbedHandle.classed(\"borderHandle_right\")) {\n grabbedHandle.style(\"left\", (context._handleLeft - delta) + \"px\");\n context._cellSizes.rightWidth = context._cellSizes.width - context._handleLeft + delta;\n } else if (grabbedHandle.classed(\"borderHandle_bottom\")) {\n grabbedHandle.style(\"top\", (context._handleTop - delta) + \"px\");\n context._cellSizes.bottomHeight = context._cellSizes.height - context._handleTop + delta;\n context._cellSizes.leftHeight = context._cellSizes.height;\n context._cellSizes.leftHeight -= context._cellSizes.bottomHeight;\n context._cellSizes.leftHeight -= context._cellSizes.topHeight;\n context._cellSizes.rightHeight = context._cellSizes.leftHeight;\n } else if (grabbedHandle.classed(\"borderHandle_left\")) {\n grabbedHandle.style(\"left\", (context._handleLeft - delta) + \"px\");\n context._cellSizes.leftWidth = context._handleLeft - delta;\n }\n\n handles.each(function () {\n const handle3 = d3Select(this);\n if (handle3.classed(\"borderHandle_top\")) {\n handle3.style(\"width\", context._cellSizes.width + \"px\");\n handle3.style(\"top\", (context._cellSizes.topHeight - 3) + \"px\");\n } else if (handle3.classed(\"borderHandle_right\")) {\n handle3.style(\"left\", (context._cellSizes.width - context._cellSizes.rightWidth) + \"px\");\n handle3.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n handle3.style(\"height\", context._cellSizes.rightHeight + \"px\");\n } else if (handle3.classed(\"borderHandle_bottom\")) {\n handle3.style(\"width\", context._cellSizes.width + \"px\");\n handle3.style(\"top\", (context._cellSizes.height - context._cellSizes.bottomHeight - 3) + \"px\");\n } else if (handle3.classed(\"borderHandle_left\")) {\n handle3.style(\"left\", context._cellSizes.leftWidth + \"px\");\n handle3.style(\"height\", context._cellSizes.leftHeight + \"px\");\n handle3.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n }\n });\n }\n }\n dragEnd(handle) {\n if (handle) {\n const event = d3Event();\n const xDelta = this._dragPrevX - event.sourceEvent.clientX;\n const yDelta = this._dragPrevY - event.sourceEvent.clientY;\n\n switch (handle) {\n case \"top\":\n if (yDelta !== 0) {\n this.topPercentage(0);\n this.topSize(this.topSize() === 0 ? this.getContent(\"top\").getBBox().height - yDelta : this.topSize() - yDelta);\n }\n break;\n case \"right\":\n if (xDelta !== 0) {\n this.rightPercentage(0);\n this.rightSize(this.rightSize() === 0 ? this.getContent(\"right\").getBBox().width + xDelta : this.rightSize() + xDelta);\n }\n break;\n case \"bottom\":\n if (yDelta !== 0) {\n this.bottomPercentage(0);\n this.bottomSize(this.bottomSize() === 0 ? this.getContent(\"bottom\").getBBox().height + yDelta : this.bottomSize() + yDelta);\n }\n break;\n case \"left\":\n if (xDelta !== 0) {\n this.leftPercentage(0);\n this.leftSize(this.leftSize() === 0 ? this.getContent(\"left\").getBBox().width - xDelta : this.leftSize() - xDelta);\n }\n break;\n }\n\n this._dragPrevX = event.sourceEvent.clientX;\n this._dragPrevY = event.sourceEvent.clientY;\n }\n this.render();\n }\n\n size(_?) {\n const retVal = HTMLWidget.prototype.size.apply(this, arguments);\n if (arguments.length && this.contentDiv) {\n this.contentDiv\n .style(\"width\", this._size.width + \"px\")\n .style(\"height\", this._size.height + \"px\")\n ;\n }\n return retVal;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n const context = this;\n element.style(\"position\", \"relative\");\n this.contentDiv = element.append(\"div\").classed(\"border-content\", true);\n this._scrollBarWidth = Platform.getScrollbarWidth();\n this._borderHandles = [\"top\", \"left\", \"right\", \"bottom\"];\n\n const handles = element.selectAll(\"div.borderHandle\").data(this._borderHandles);\n handles.enter().append(\"div\")\n .classed(\"borderHandle\", true)\n .each(function (handle) {\n const h = d3Select(this);\n h.classed(\"borderHandle_\" + handle, true)\n .classed(\"borderHandleDisabled\", context.getContent(handle) === null)\n ;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._sectionTypeArr = this.sectionTypes();\n const context = this;\n\n element.classed(\"design-mode\", this.designMode());\n\n this.setLayoutOffsets();\n\n const rows = this.contentDiv.selectAll(\".cell_\" + this._id).data(this.content(), function (d) { return d._id; });\n const rowsUpdate = rows.enter().append(\"div\")\n .classed(\"cell_\" + this._id, true)\n .style(\"position\", \"absolute\")\n .each(function (d, i) {\n d3Select(this).classed(\"border-cell border-cell-\" + context._sectionTypeArr[i], true);\n d.target(this);\n d3Select(\"#\" + context.id() + \" > div.borderHandle_\" + context._sectionTypeArr[i])\n .classed(\"borderHandleDisabled\", false);\n }).merge(rows);\n rowsUpdate\n .each(function (d, idx) {\n const sectionType = context.sectionTypes()[idx];\n if (typeof (context[sectionType + \"ShrinkWrap\"]) !== \"undefined\" && context[sectionType + \"ShrinkWrap\"]()) {\n d.render();\n context._shrinkWrapBoxes[sectionType] = d.widget().getBBox(true);\n } else {\n delete context._shrinkWrapBoxes[sectionType];\n }\n });\n\n const drag = d3Drag()\n .on(\"start\", function (d, i) { context.dragStart.call(context, d, i); })\n .on(\"drag\", function (d, i) { context.dragTick.call(context, d, i); })\n .on(\"end\", function (d, i) { context.dragEnd.call(context, d, i); })\n ;\n if (this.designMode()) {\n element.selectAll(\"#\" + this.id() + \" > div.borderHandle\").call(drag);\n } else {\n element.selectAll(\"#\" + this.id() + \" > div.borderHandle\").on(\".drag\", null);\n }\n\n const layoutObj = this.borderLayoutObject();\n this.content().forEach(function (cell, i) {\n cell._fixedLeft = layoutObj[this.sectionTypes()[i]].left;\n cell._fixedTop = layoutObj[this.sectionTypes()[i]].top;\n cell._fixedWidth = layoutObj[this.sectionTypes()[i]].width;\n cell._fixedHeight = layoutObj[this.sectionTypes()[i]].height;\n cell._dragHandles = [];\n }, this);\n\n rowsUpdate\n .style(\"left\", function (d) { return d._fixedLeft + \"px\"; })\n .style(\"top\", function (d) { return d._fixedTop + \"px\"; })\n .style(\"width\", function (d) { return d._fixedWidth - context.gutter() + \"px\"; })\n .style(\"height\", function (d) { return d._fixedHeight - context.gutter() + \"px\"; })\n .each(function (d) {\n d._placeholderElement\n .attr(\"draggable\", context.designMode())\n .selectAll(\".dragHandle\")\n .attr(\"draggable\", context.designMode())\n ;\n d\n .surfacePadding(context.surfacePadding())\n .resize()\n ;\n });\n rows.exit().each(function (d) {\n d.target(null);\n }).remove();\n\n this.getCellSizes();\n\n element\n .selectAll(\"#\" + this.id() + \" > div.borderHandle\")\n .each(function () {\n const handle = d3Select(this);\n if (handle.classed(\"borderHandle_top\")) {\n handle.style(\"width\", context._cellSizes.width + \"px\");\n handle.style(\"top\", (context._cellSizes.topHeight - 3) + \"px\");\n } else if (handle.classed(\"borderHandle_right\")) {\n handle.style(\"left\", (context._cellSizes.width - context._cellSizes.rightWidth) + \"px\");\n handle.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n handle.style(\"height\", context._cellSizes.rightHeight + \"px\");\n } else if (handle.classed(\"borderHandle_bottom\")) {\n handle.style(\"width\", context._cellSizes.width + \"px\");\n handle.style(\"top\", (context._cellSizes.height - context._cellSizes.bottomHeight - 3) + \"px\");\n } else if (handle.classed(\"borderHandle_left\")) {\n handle.style(\"left\", context._cellSizes.leftWidth + \"px\");\n handle.style(\"height\", context._cellSizes.leftHeight + \"px\");\n handle.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n }\n\n })\n ;\n }\n\n getCellSizes() {\n const context = this;\n context._cellSizes = {};\n const contentRect = this.element().node().getBoundingClientRect();\n context._cellSizes.width = contentRect.width;\n context._cellSizes.height = contentRect.height;\n this.element()\n .selectAll(\"#\" + this.id() + \" > div > div.border-cell\")\n .each(function () {\n const cell = d3Select(this);\n if (typeof cell.node === \"function\") {\n const rect = cell.node().getBoundingClientRect();\n if (cell.classed(\"border-cell-top\")) {\n context._cellSizes.topHeight = rect.height;\n } else if (cell.classed(\"border-cell-left\")) {\n context._cellSizes.leftWidth = rect.width;\n context._cellSizes.leftHeight = rect.height;\n } else if (cell.classed(\"border-cell-right\")) {\n context._cellSizes.rightWidth = rect.width;\n context._cellSizes.rightHeight = rect.height;\n } else if (cell.classed(\"border-cell-bottom\")) {\n context._cellSizes.bottomHeight = rect.height;\n }\n }\n });\n const sizes = [\"height\", \"width\", \"topHeight\", \"bottomHeight\", \"leftHeight\", \"rightHeight\", \"leftWidth\", \"rightWidth\"];\n sizes.forEach(function (size) {\n context._cellSizes[size] = context._cellSizes[size] === undefined ? 0 : context._cellSizes[size];\n });\n }\n\n postUpdate(domNode, element) {\n const context = this;\n this.content().forEach(function (n) {\n if (n._element.node() !== null && n.widget()) {\n const prevBox = n.widget().getBBox(false, true);\n const currBox = n.widget().getBBox(true, true);\n if (prevBox.width !== currBox.width || prevBox.height !== currBox.height) {\n context.lazyRender();\n }\n }\n });\n }\n\n exit(domNode, element) {\n this.content().forEach(w => w.target(null));\n super.exit(domNode, element);\n }\n}\nBorder.prototype._class += \" layout_Border\";\n\nexport interface Border {\n designMode(): boolean;\n designMode(_: boolean): this;\n\n content(): any[];\n content(_: any[]): this;\n\n gutter(): number;\n gutter(_: number): this;\n\n topShrinkWrap(): boolean;\n topShrinkWrap(_: boolean): this;\n leftShrinkWrap(): boolean;\n leftShrinkWrap(_: boolean): this;\n rightShrinkWrap(): boolean;\n rightShrinkWrap(_: boolean): this;\n bottomShrinkWrap(): boolean;\n bottomShrinkWrap(_: boolean): this;\n\n topSize(): number;\n topSize(_: number): this;\n leftSize(): number;\n leftSize(_: number): this;\n rightSize(): number;\n rightSize(_: number): this;\n bottomSize(): number;\n bottomSize(_: number): this;\n\n topPercentage(): number;\n topPercentage(_: number): this;\n leftPercentage(): number;\n leftPercentage(_: number): this;\n rightPercentage(): number;\n rightPercentage(_: number): this;\n bottomPercentage(): number;\n bottomPercentage(_: number): this;\n\n surfacePadding(): number;\n surfacePadding(_: number): this;\n\n sectionTypes(): any[];\n sectionTypes(_: any[]): this;\n}\n\nBorder.prototype.publish(\"designMode\", false, \"boolean\", \"Design Mode\", null, { tags: [\"Basic\"] });\n\nBorder.prototype.publish(\"content\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Intermediate\"] });\n\nBorder.prototype.publish(\"gutter\", 0, \"number\", \"Gap Between Widgets\", null, { tags: [\"Basic\"] });\n\nBorder.prototype.publish(\"topShrinkWrap\", false, \"boolean\", \"'Top' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\nBorder.prototype.publish(\"leftShrinkWrap\", false, \"boolean\", \"'Left' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\nBorder.prototype.publish(\"rightShrinkWrap\", false, \"boolean\", \"'Right' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\nBorder.prototype.publish(\"bottomShrinkWrap\", false, \"boolean\", \"'Bottom' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\n\nBorder.prototype.publish(\"topSize\", 0, \"number\", \"Height of the 'Top' Cell (px)\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"leftSize\", 0, \"number\", \"Width of the 'Left' Cell (px)\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"rightSize\", 0, \"number\", \"Width of the 'Right' Cell (px)\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"bottomSize\", 0, \"number\", \"Height of the 'Bottom' Cell (px)\", null, { tags: [\"Private\"] });\n\nBorder.prototype.publish(\"topPercentage\", 20, \"number\", \"Percentage (of parent) Height of the 'Top' Cell\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"leftPercentage\", 20, \"number\", \"Percentage (of parent) Width of the 'Left' Cell\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"rightPercentage\", 20, \"number\", \"Percentage (of parent) Width of the 'Right' Cell\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"bottomPercentage\", 20, \"number\", \"Percentage (of parent) Height of the 'Bottom' Cell\", null, { tags: [\"Private\"] });\n\nBorder.prototype.publish(\"surfacePadding\", 0, \"number\", \"Cell Padding (px)\", null, { tags: [\"Intermediate\"] });\n\nBorder.prototype.publish(\"sectionTypes\", [], \"array\", \"Section Types sharing an index with 'content' - Used to determine position/size.\", null, { tags: [\"Private\"] });\n","import { BBox, HTMLWidget, Platform, Widget } from \"@hpcc-js/common\";\n\nimport \"../src/Border2.css\";\n\nexport type OverflowT = \"hidden\" | \"scroll\" | \"visible\" | \"auto\";\nexport type ChartPanelSectionT = \"top\" | \"right\" | \"bottom\" | \"left\" | \"center\";\nexport class WidgetDiv {\n private _div;\n private _overlay: boolean = false;\n private _overflowX: OverflowT = \"visible\";\n private _overflowY: OverflowT = \"visible\";\n private _widget: Widget;\n\n constructor(div) {\n this._div = div;\n }\n\n overlay(): boolean;\n overlay(_: boolean): this;\n overlay(_?: boolean): boolean | this {\n if (!arguments.length) return this._overlay;\n this._overlay = _;\n return this;\n }\n\n overflowX(): OverflowT;\n overflowX(_: OverflowT): this;\n overflowX(_?: OverflowT): OverflowT | this {\n if (!arguments.length) return this._overflowX;\n this._overflowX = _;\n this._div.style(\"overflow-x\", _);\n return this;\n }\n overflowY(): OverflowT;\n overflowY(_: OverflowT): this;\n overflowY(_?: OverflowT): OverflowT | this {\n if (!arguments.length) return this._overflowY;\n this._overflowY = _;\n this._div.style(\"overflow-y\", _);\n return this;\n }\n\n element() {\n return this._div;\n }\n\n node(): SVGElement | HTMLElement {\n return this._div.node();\n }\n\n widget(): Widget;\n widget(_: Widget): this;\n widget(_?: Widget): Widget | this {\n if (!arguments.length) return this._widget;\n if (this._widget !== _) {\n if (this._widget) {\n this._widget.target(null);\n }\n this._widget = _;\n if (this._widget) {\n this._widget.target(this._div.node());\n }\n }\n return this;\n }\n\n resize(size: { width: number, height: number }) {\n if (this._widget) {\n this._div\n .style(\"width\", `${size.width}px`)\n .style(\"height\", `${size.height}px`)\n ;\n this._widget.resize(size);\n }\n return this;\n }\n\n async render(getBBox?, availableHeight?: number, availableWidth?: number): Promise<BBox | undefined> {\n let overflowX = this.overflowX();\n if(!this.overlay() && overflowX === \"visible\") {\n overflowX = null;\n }\n let overflowY = this.overflowY();\n if(!this.overlay() && overflowY === \"visible\") {\n overflowY = null;\n }\n this._div\n .style(\"height\", this.overlay() ? \"0px\" : null)\n .style(\"overflow-x\", overflowX)\n .style(\"overflow-y\", overflowY)\n ;\n if (this._widget) {\n return this._widget.renderPromise().then(w => {\n if (getBBox && this._widget.visible()) {\n const retVal = this._widget.getBBox();\n retVal.width += 8;\n if (availableHeight !== undefined && retVal.height > availableHeight) {\n retVal.width += Platform.getScrollbarWidth();\n }\n if (availableWidth !== undefined && retVal.width > availableWidth) {\n retVal.height += Platform.getScrollbarWidth();\n }\n if (this.overlay()) {\n retVal.height = 0;\n } else {\n retVal.height += 4;\n }\n return retVal;\n }\n return getBBox ? { x: 0, y: 0, width: 0, height: 0 } : undefined;\n });\n } else {\n return Promise.resolve(getBBox ? { x: 0, y: 0, width: 0, height: 0 } : undefined);\n }\n }\n}\n\nexport class Border2 extends HTMLWidget {\n\n protected _bodyElement;\n\n protected _topWA: WidgetDiv;\n protected _leftWA: WidgetDiv;\n protected _centerWA: WidgetDiv;\n protected _rightWA: WidgetDiv;\n protected _bottomWA: WidgetDiv;\n protected _topPrevOverflow: OverflowT;\n protected _leftPrevOverflow: OverflowT;\n protected _rightPrevOverflow: OverflowT;\n protected _bottomPrevOverflow: OverflowT;\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n \n const topElement = element.append(\"header\");\n\n this._bodyElement = element.append(\"div\").attr(\"class\", \"body\");\n const centerElement = this._bodyElement.append(\"div\").attr(\"class\", \"center\");\n const leftElement = this._bodyElement.append(\"div\").attr(\"class\", \"lhs\");\n const rightElement = this._bodyElement.append(\"div\").attr(\"class\", \"rhs\");\n\n const bottomElement = element.append(\"div\").attr(\"class\", \"footer\");\n\n this._topWA = new WidgetDiv(topElement);\n this._centerWA = new WidgetDiv(centerElement);\n this._leftWA = new WidgetDiv(leftElement);\n this._rightWA = new WidgetDiv(rightElement);\n this._bottomWA = new WidgetDiv(bottomElement);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._topWA.element().style(\"display\", this.showTop() ? null : \"none\");\n this._rightWA.element().style(\"display\", this.showRight() ? null : \"none\");\n this._bottomWA.element().style(\"display\", this.showBottom() ? null : \"none\");\n this._leftWA.element().style(\"display\", this.showLeft() ? null : \"none\");\n if(this.topOverflowX() !== this._topWA.overflowX()) {\n this._topWA.overflowX(this.topOverflowX());\n }\n if(this.rightOverflowX() !== this._rightWA.overflowX()) {\n this._rightWA.overflowX(this.rightOverflowX());\n }\n if(this.bottomOverflowX() !== this._bottomWA.overflowX()) {\n this._bottomWA.overflowX(this.bottomOverflowX());\n }\n if(this.leftOverflowX() !== this._leftWA.overflowX()) {\n this._leftWA.overflowX(this.leftOverflowX());\n }\n if(this.topOverflowY() !== this._topWA.overflowY()) {\n this._topWA.overflowY(this.topOverflowY());\n }\n if(this.rightOverflowY() !== this._rightWA.overflowY()) {\n this._rightWA.overflowY(this.rightOverflowY());\n }\n if(this.bottomOverflowY() !== this._bottomWA.overflowY()) {\n this._bottomWA.overflowY(this.bottomOverflowY());\n }\n if(this.leftOverflowY() !== this._leftWA.overflowY()) {\n this._leftWA.overflowY(this.leftOverflowY());\n }\n this.element()\n .style(\"width\", `${this.width()}px`)\n .style(\"height\", `${this.height()}px`)\n ;\n }\n\n private targetNull(w?: Widget) {\n if (w) {\n w.target(null);\n }\n }\n\n exit(domNode, element) {\n this.targetNull(this.center());\n this.targetNull(this.bottom());\n this.targetNull(this.right());\n this.targetNull(this.left());\n this.targetNull(this.top());\n super.exit(domNode, element);\n }\n\n swap(sectionA: ChartPanelSectionT, sectionB: ChartPanelSectionT): this {\n const a = this[sectionA]();\n const b = this[sectionB]();\n this.targetNull(a);\n this.targetNull(b);\n this[`_${sectionA}WA`].widget(null);\n this[`_${sectionB}WA`].widget(null);\n this[sectionA](b);\n this[sectionB](a);\n return this;\n }\n\n render(callback?: (w: Widget) => void): this {\n const retVal = super.render(w => {\n if (this._topWA) {\n this._topWA\n .widget(this.top())\n .overlay(this.topOverlay())\n .render(true).then(async topBBox => {\n const bottomBBox: BBox = await this._bottomWA.widget(this.bottom()).render(true, undefined, this.width()) as BBox;\n const availableHeight = this.height() - (topBBox.height + bottomBBox.height);\n const leftBBox: BBox = await this._leftWA.widget(this.left()).render(true, availableHeight) as BBox;\n const rightBBox: BBox = await this._rightWA.widget(this.right()).render(true, availableHeight) as BBox;\n \n if (this.bottomHeight_exists()) {\n bottomBBox.height = this.bottomHeight();\n }\n const bodyWidth = this.width() - (leftBBox.width + rightBBox.width);\n const bodyHeight = this.height() - (topBBox.height + bottomBBox.height);\n \n const centerOverflowX = this.centerOverflowX();\n const centerOverflowY = this.centerOverflowY();\n\n const scrollCenterX = [\"auto\", \"scroll\"].indexOf(centerOverflowX) !== -1;\n const scrollCenterY = [\"auto\", \"scroll\"].indexOf(centerOverflowY) !== -1;\n if(scrollCenterX || scrollCenterY) {\n this._centerWA\n .overflowX(this.centerOverflowX())\n .overflowY(this.centerOverflowY())\n .widget(this.center())\n .resize({\n width: bodyWidth,\n height: bodyHeight\n })\n .render()\n ;\n }\n this._bodyElement.style(\"height\", `${bodyHeight}px`);\n const promises = [\n this._topWA\n .overflowX(this.topOverflowX())\n .overflowY(this.topOverflowY())\n .resize({\n width: this.width(),\n height: topBBox.height\n })\n .render(),\n this._leftWA\n .overflowX(this.leftOverflowX())\n .overflowY(this.leftOverflowY())\n .resize({\n width: leftBBox.width,\n height: bodyHeight\n })\n .render(),\n this._rightWA\n .overflowX(this.rightOverflowX())\n .overflowY(this.rightOverflowY())\n .resize({\n width: rightBBox.width,\n height: bodyHeight\n })\n .render(),\n this._centerWA\n .overflowX(this.centerOverflowX())\n .overflowY(this.centerOverflowY())\n .widget(this.center())\n .resize({\n width: bodyWidth,\n height: bodyHeight\n })\n .render(),\n this._bottomWA\n .overflowX(this.bottomOverflowX())\n .overflowY(this.bottomOverflowY())\n .resize({\n width: this.width(),\n height: bottomBBox.height\n })\n .render()\n ];\n Promise.all(promises).then(promises => {\n if (callback) {\n callback(this);\n }\n });\n })\n ;\n } else {\n if (callback) {\n callback(this);\n }\n }\n });\n return retVal;\n }\n}\nBorder2.prototype._class += \" layout_Border2\";\n\nexport interface Border2 {\n top(): Widget;\n top(_: Widget): this;\n topOverlay(): boolean;\n topOverlay(_: boolean): this;\n left(): Widget;\n left(_: Widget): this;\n center(): Widget;\n center(_: Widget): this;\n right(): Widget;\n right(_: Widget): this;\n bottom(): Widget;\n bottom(_: Widget): this;\n bottomHeight(): number;\n bottomHeight(_: number): this;\n bottomHeight_exists(): boolean;\n topOverflowX(): OverflowT;\n topOverflowX(_: OverflowT): this;\n rightOverflowX(): OverflowT;\n rightOverflowX(_: OverflowT): this;\n bottomOverflowX(): OverflowT;\n bottomOverflowX(_: OverflowT): this;\n leftOverflowX(): OverflowT;\n leftOverflowX(_: OverflowT): this;\n centerOverflowX(): OverflowT;\n centerOverflowX(_: OverflowT): this;\n topOverflowY(): OverflowT;\n topOverflowY(_: OverflowT): this;\n rightOverflowY(): OverflowT;\n rightOverflowY(_: OverflowT): this;\n bottomOverflowY(): OverflowT;\n bottomOverflowY(_: OverflowT): this;\n leftOverflowY(): OverflowT;\n leftOverflowY(_: OverflowT): this;\n centerOverflowY(): OverflowT;\n centerOverflowY(_: OverflowT): this;\n showTop(): boolean;\n showTop(_: boolean): this;\n showRight(): boolean;\n showRight(_: boolean): this;\n showBottom(): boolean;\n showBottom(_: boolean): this;\n showLeft(): boolean;\n showLeft(_: boolean): this;\n topOverflowX_default(_: OverflowT);\n rightOverflowX_default(_: OverflowT);\n bottomOverflowX_default(_: OverflowT);\n leftOverflowX_default(_: OverflowT);\n centerOverflowX_default(_: OverflowT);\n topOverflowY_default(_: OverflowT);\n rightOverflowY_default(_: OverflowT);\n bottomOverflowY_default(_: OverflowT);\n leftOverflowY_default(_: OverflowT);\n centerOverflowY_default(_: OverflowT);\n}\nBorder2.prototype.publish(\"showTop\", true, \"boolean\", \"If true, top widget adapter will display\");\nBorder2.prototype.publish(\"showRight\", true, \"boolean\", \"If true, right widget adapter will display\");\nBorder2.prototype.publish(\"showBottom\", true, \"boolean\", \"If true, bottom widget adapter will display\");\nBorder2.prototype.publish(\"showLeft\", true, \"boolean\", \"If true, left widget adapter will display\");\nBorder2.prototype.publish(\"topOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the top widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"rightOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the right widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"bottomOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the bottom widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"leftOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the left widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"centerOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the center widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"topOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the top widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"rightOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the right widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"bottomOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the bottom widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"leftOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the left widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"centerOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the center widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"top\", null, \"widget\", \"Top Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"topOverlay\", false, \"boolean\", \"Overlay Top Widget\");\nBorder2.prototype.publish(\"left\", null, \"widget\", \"Left Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"center\", null, \"widget\", \"Center Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"right\", null, \"widget\", \"Right Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"bottom\", null, \"widget\", \"Bottom Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"bottomHeight\", null, \"number\", \"Bottom Fixed Height\", undefined, { optional: true });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport \"d3-transition\";\n\nimport \"../src/Carousel.css\";\n\nexport class Carousel extends HTMLWidget {\n\n protected _prevActive: number = 0;\n protected _root;\n\n activeWidget(): Widget {\n return this.widgets()[this.active()];\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._root = element.append(\"div\")\n .attr(\"id\", `${this.id()}_root`)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const active = this.active();\n const width = this.width();\n this._root\n .style(\"width\", `${width}px`)\n .style(\"height\", `${this.height()}px`)\n ;\n const widgetElements = this._root.selectAll(`#${this.id()}_root > .carouselItem`).data(this.widgets(), d => d.id());\n const update = widgetElements.enter().append(\"div\")\n .attr(\"class\", \"carouselItem\")\n .each(function (w) {\n w.target(this);\n })\n .merge(widgetElements)\n .style(\"left\", (d, i) => `${(i - this._prevActive) * width}px`)\n .style(\"width\", `${width}px`)\n ;\n if (this._prevActive !== active) {\n update\n .style(\"display\", (d, i) => i === this._prevActive || i === active ? null : \"none\") // Must be called before render callback (not inside transition)\n .transition().duration(this.transitionDuration())\n .style(\"left\", (d, i) => `${(i - active) * width}px`)\n .on(\"end\", function (d, i) {\n d3Select(this).style(\"display\", () => i === active ? null : \"none\");\n })\n ;\n this._prevActive = active;\n }\n widgetElements.exit()\n .each(function (w) {\n w.target(null);\n })\n .remove()\n ;\n }\n\n exit(domNode, element) {\n this.widgets().forEach(w => w.target(null));\n super.exit(domNode, element);\n }\n\n render(callback): this {\n return super.render(w => {\n if (!this.visible() || this.isDOMHidden()) {\n if (callback) {\n callback(w);\n }\n } else {\n const aw = this.activeWidget();\n if (aw) {\n aw\n .resize(this.size())\n .render(w2 => {\n if (callback) {\n callback(w);\n }\n })\n ;\n }\n }\n });\n }\n}\nCarousel.prototype._class += \" layout_Carousel\";\n\nexport interface Carousel {\n widgets(): Widget[];\n widgets(_: Widget[]): this;\n active(): number;\n active(_: number): this;\n transitionDuration(): Widget[];\n transitionDuration(_: Widget[]): this;\n}\n\nCarousel.prototype.publish(\"widgets\", [], \"widgetArray\", \"Widgets\", null, { render: false });\nCarousel.prototype.publish(\"active\", 0, \"number\", \"Active widget\");\nCarousel.prototype.publish(\"transitionDuration\", 500, \"number\", \"Transition duration\");\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { select } from 'd3-selection';\nimport { format, formatLocale, formatPrefix, formatSpecifier } from 'd3-format';\nimport { dispatch } from 'd3-dispatch';\nimport { scaleLinear } from 'd3-scale';\nimport { max, sum } from 'd3-array';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar d3_identity = function d3_identity(d) {\n return d;\n};\n\nvar d3_reverse = function d3_reverse(arr) {\n var mirror = [];\n for (var i = 0, l = arr.length; i < l; i++) {\n mirror[i] = arr[l - i - 1];\n }\n return mirror;\n};\n\n//Text wrapping code adapted from Mike Bostock\nvar d3_textWrapping = function d3_textWrapping(text, width) {\n text.each(function () {\n var text = select(this),\n words = text.text().split(/\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.2,\n //ems\n y = text.attr(\"y\"),\n dy = parseFloat(text.attr(\"dy\")) || 0,\n tspan = text.text(null).append(\"tspan\").attr(\"x\", 0).attr(\"dy\", dy + \"em\");\n\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (tspan.node().getComputedTextLength() > width && line.length > 1) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", lineHeight + dy + \"em\").text(word);\n }\n }\n });\n};\n\nvar d3_mergeLabels = function d3_mergeLabels() {\n var gen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var labels = arguments[1];\n var domain = arguments[2];\n var range = arguments[3];\n var labelDelimiter = arguments[4];\n\n if ((typeof labels === \"undefined\" ? \"undefined\" : _typeof(labels)) === \"object\") {\n if (labels.length === 0) return gen;\n\n var i = labels.length;\n for (; i < gen.length; i++) {\n labels.push(gen[i]);\n }\n return labels;\n } else if (typeof labels === \"function\") {\n var customLabels = [];\n var genLength = gen.length;\n for (var _i = 0; _i < genLength; _i++) {\n customLabels.push(labels({\n i: _i,\n genLength: genLength,\n generatedLabels: gen,\n domain: domain,\n range: range,\n labelDelimiter: labelDelimiter\n }));\n }\n return customLabels;\n }\n\n return gen;\n};\n\nvar d3_linearLegend = function d3_linearLegend(scale, cells, labelFormat) {\n var data = [];\n\n if (cells.length > 1) {\n data = cells;\n } else {\n var domain = scale.domain(),\n increment = (domain[domain.length - 1] - domain[0]) / (cells - 1);\n var i = 0;\n\n for (; i < cells; i++) {\n data.push(domain[0] + i * increment);\n }\n }\n\n var labels = data.map(labelFormat);\n return {\n data: data,\n labels: labels,\n feature: function feature(d) {\n return scale(d);\n }\n };\n};\n\nvar d3_quantLegend = function d3_quantLegend(scale, labelFormat, labelDelimiter) {\n var labels = scale.range().map(function (d) {\n var invert = scale.invertExtent(d);\n return labelFormat(invert[0]) + \" \" + labelDelimiter + \" \" + labelFormat(invert[1]);\n });\n\n return {\n data: scale.range(),\n labels: labels,\n feature: d3_identity\n };\n};\n\nvar d3_ordinalLegend = function d3_ordinalLegend(scale) {\n return {\n data: scale.domain(),\n labels: scale.domain(),\n feature: function feature(d) {\n return scale(d);\n }\n };\n};\n\nvar d3_cellOver = function d3_cellOver(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellover\", obj, d);\n};\n\nvar d3_cellOut = function d3_cellOut(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellout\", obj, d);\n};\n\nvar d3_cellClick = function d3_cellClick(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellclick\", obj, d);\n};\n\nvar helper = {\n d3_drawShapes: function d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path) {\n if (shape === \"rect\") {\n shapes.attr(\"height\", shapeHeight).attr(\"width\", shapeWidth);\n } else if (shape === \"circle\") {\n shapes.attr(\"r\", shapeRadius);\n } else if (shape === \"line\") {\n shapes.attr(\"x1\", 0).attr(\"x2\", shapeWidth).attr(\"y1\", 0).attr(\"y2\", 0);\n } else if (shape === \"path\") {\n shapes.attr(\"d\", path);\n }\n },\n\n d3_addText: function d3_addText(svg, enter, labels, classPrefix, labelWidth) {\n enter.append(\"text\").attr(\"class\", classPrefix + \"label\");\n var text = svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").data(labels).text(d3_identity);\n\n if (labelWidth) {\n svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").call(d3_textWrapping, labelWidth);\n }\n\n return text;\n },\n\n d3_calcType: function d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter) {\n var type = scale.invertExtent ? d3_quantLegend(scale, labelFormat, labelDelimiter) : scale.ticks ? d3_linearLegend(scale, cells, labelFormat) : d3_ordinalLegend(scale);\n\n //for d3.scaleSequential that doesn't have a range function\n var range = scale.range && scale.range() || scale.domain();\n type.labels = d3_mergeLabels(type.labels, labels, scale.domain(), range, labelDelimiter);\n\n if (ascending) {\n type.labels = d3_reverse(type.labels);\n type.data = d3_reverse(type.data);\n }\n\n return type;\n },\n\n d3_filterCells: function d3_filterCells(type, cellFilter) {\n var filterCells = type.data.map(function (d, i) {\n return { data: d, label: type.labels[i] };\n }).filter(cellFilter);\n var dataValues = filterCells.map(function (d) {\n return d.data;\n });\n var labelValues = filterCells.map(function (d) {\n return d.label;\n });\n type.data = type.data.filter(function (d) {\n return dataValues.indexOf(d) !== -1;\n });\n type.labels = type.labels.filter(function (d) {\n return labelValues.indexOf(d) !== -1;\n });\n return type;\n },\n\n d3_placement: function d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign) {\n cell.attr(\"transform\", cellTrans);\n text.attr(\"transform\", textTrans);\n if (orient === \"horizontal\") {\n text.style(\"text-anchor\", labelAlign);\n }\n },\n\n d3_addEvents: function d3_addEvents(cells, dispatcher) {\n cells.on(\"mouseover.legend\", function (d) {\n d3_cellOver(dispatcher, d, this);\n }).on(\"mouseout.legend\", function (d) {\n d3_cellOut(dispatcher, d, this);\n }).on(\"click.legend\", function (d) {\n d3_cellClick(dispatcher, d, this);\n });\n },\n\n d3_title: function d3_title(svg, title, classPrefix, titleWidth) {\n if (title !== \"\") {\n var titleText = svg.selectAll(\"text.\" + classPrefix + \"legendTitle\");\n\n titleText.data([title]).enter().append(\"text\").attr(\"class\", classPrefix + \"legendTitle\");\n\n svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").text(title);\n\n if (titleWidth) {\n svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").call(d3_textWrapping, titleWidth);\n }\n\n var cellsSvg = svg.select(\".\" + classPrefix + \"legendCells\");\n var yOffset = svg.select(\".\" + classPrefix + \"legendTitle\").nodes().map(function (d) {\n return d.getBBox().height;\n })[0],\n xOffset = -cellsSvg.nodes().map(function (d) {\n return d.getBBox().x;\n })[0];\n cellsSvg.attr(\"transform\", \"translate(\" + xOffset + \",\" + yOffset + \")\");\n }\n },\n\n d3_defaultLocale: {\n format: format,\n formatPrefix: formatPrefix\n },\n\n d3_defaultFormatSpecifier: \".01f\",\n\n d3_defaultDelimiter: \"to\"\n};\n\nfunction color() {\n var scale = scaleLinear(),\n shape = \"rect\",\n shapeWidth = 15,\n shapeHeight = 15,\n shapeRadius = 10,\n shapePadding = 2,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n useClass = false,\n title = \"\",\n locale = helper.d3_defaultLocale,\n specifier = helper.d3_defaultFormatSpecifier,\n labelOffset = 10,\n labelAlign = \"middle\",\n labelDelimiter = helper.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n path = void 0,\n titleWidth = void 0,\n legendDispatcher = dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n if (cellFilter) {\n helper.d3_filterCells(type, cellFilter);\n }\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\").data(type.data);\n\n //add event handlers\n helper.d3_addEvents(cellEnter, legendDispatcher);\n\n cell.exit().transition().style(\"opacity\", 0).remove();\n shapes.exit().transition().style(\"opacity\", 0).remove();\n\n shapes = shapes.merge(shapes);\n\n helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path);\n var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n // sets placement\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d) {\n return d.getBBox();\n });\n //sets scale\n //everything is fill except for line which is stroke,\n if (!useClass) {\n if (shape == \"line\") {\n shapes.style(\"stroke\", type.feature);\n } else {\n shapes.style(\"fill\", type.feature);\n }\n } else {\n shapes.attr(\"class\", function (d) {\n return classPrefix + \"swatch \" + type.feature(d);\n });\n }\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(d.height, shapeSize[i].height);\n });\n\n cellTrans = function cellTrans(d, i) {\n var height = sum(cellSize.slice(0, i));\n return \"translate(0, \" + (height + i * shapePadding) + \")\";\n };\n\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width + shapeSize[i].x + labelOffset) + \", \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n cellTrans = function cellTrans(d, i) {\n return \"translate(\" + i * (shapeSize[i].width + shapePadding) + \",0)\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate(\" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (shapeSize[i].height + shapeSize[i].y + labelOffset + 8) + \")\";\n };\n }\n\n helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n helper.d3_title(svg, title, classPrefix, titleWidth);\n\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shape = function (_, d) {\n if (!arguments.length) return shape;\n if (_ == \"rect\" || _ == \"circle\" || _ == \"line\" || _ == \"path\" && typeof d === \"string\") {\n shape = _;\n path = d;\n }\n return legend;\n };\n\n legend.shapeWidth = function (_) {\n if (!arguments.length) return shapeWidth;\n shapeWidth = +_;\n return legend;\n };\n\n legend.shapeHeight = function (_) {\n if (!arguments.length) return shapeHeight;\n shapeHeight = +_;\n return legend;\n };\n\n legend.shapeRadius = function (_) {\n if (!arguments.length) return shapeRadius;\n shapeRadius = +_;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = formatLocale(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = formatSpecifier(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.useClass = function (_) {\n if (!arguments.length) return useClass;\n if (_ === true || _ === false) {\n useClass = _;\n }\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.textWrap = function (_) {\n if (!arguments.length) return textWrap;\n textWrap = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\nfunction size() {\n var scale = scaleLinear(),\n shape = \"rect\",\n shapeWidth = 15,\n shapePadding = 2,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n title = \"\",\n locale = helper.d3_defaultLocale,\n specifier = helper.d3_defaultFormatSpecifier,\n labelOffset = 10,\n labelAlign = \"middle\",\n labelDelimiter = helper.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n path = void 0,\n titleWidth = void 0,\n legendDispatcher = dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n if (cellFilter) {\n helper.d3_filterCells(type, cellFilter);\n }\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n //add event handlers\n helper.d3_addEvents(cellEnter, legendDispatcher);\n\n cell.exit().transition().style(\"opacity\", 0).remove();\n\n shapes.exit().transition().style(\"opacity\", 0).remove();\n shapes = shapes.merge(shapes);\n\n //creates shape\n if (shape === \"line\") {\n helper.d3_drawShapes(shape, shapes, 0, shapeWidth);\n shapes.attr(\"stroke-width\", type.feature);\n } else {\n helper.d3_drawShapes(shape, shapes, type.feature, type.feature, type.feature, path);\n }\n\n var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n //sets placement\n\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d, i) {\n var bbox = d.getBBox();\n var stroke = scale(type.data[i]);\n\n if (shape === \"line\" && orient === \"horizontal\") {\n bbox.height = bbox.height + stroke;\n } else if (shape === \"line\" && orient === \"vertical\") {\n bbox.width = bbox.width;\n }\n return bbox;\n });\n\n var maxH = max(shapeSize, function (d) {\n return d.height + d.y;\n }),\n maxW = max(shapeSize, function (d) {\n return d.width + d.x;\n });\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(d.height, shapeSize[i].height);\n });\n var y = shape == \"circle\" || shape == \"line\" ? shapeSize[0].height / 2 : 0;\n cellTrans = function cellTrans(d, i) {\n var height = sum(cellSize.slice(0, i));\n\n return \"translate(0, \" + (y + height + i * shapePadding) + \")\";\n };\n\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (maxW + labelOffset) + \",\\n \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n (function () {\n cellTrans = function cellTrans(d, i) {\n var width = sum(shapeSize.slice(0, i), function (d) {\n return d.width;\n });\n var y = shape == \"circle\" || shape == \"line\" ? maxH / 2 : 0;\n return \"translate(\" + (width + i * shapePadding) + \", \" + y + \")\";\n };\n\n var offset = shape == \"line\" ? maxH / 2 : maxH;\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (offset + labelOffset) + \")\";\n };\n })();\n }\n\n helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n helper.d3_title(svg, title, classPrefix, titleWidth);\n\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shape = function (_, d) {\n if (!arguments.length) return shape;\n if (_ == \"rect\" || _ == \"circle\" || _ == \"line\") {\n shape = _;\n path = d;\n }\n return legend;\n };\n\n legend.shapeWidth = function (_) {\n if (!arguments.length) return shapeWidth;\n shapeWidth = +_;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = formatLocale(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = formatSpecifier(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\nfunction symbol() {\n var scale = scaleLinear(),\n shape = \"path\",\n shapeWidth = 15,\n shapeHeight = 15,\n shapeRadius = 10,\n shapePadding = 5,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n title = \"\",\n locale = helper.d3_defaultLocale,\n specifier = helper.d3_defaultFormatSpecifier,\n labelAlign = \"middle\",\n labelOffset = 10,\n labelDelimiter = helper.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n titleWidth = void 0,\n legendDispatcher = dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n if (cellFilter) {\n helper.d3_filterCells(type, cellFilter);\n }\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n //add event handlers\n helper.d3_addEvents(cellEnter, legendDispatcher);\n\n //remove old shapes\n cell.exit().transition().style(\"opacity\", 0).remove();\n shapes.exit().transition().style(\"opacity\", 0).remove();\n shapes = shapes.merge(shapes);\n\n helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, type.feature);\n var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n // sets placement\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d) {\n return d.getBBox();\n });\n\n var maxH = max(shapeSize, function (d) {\n return d.height;\n }),\n maxW = max(shapeSize, function (d) {\n return d.width;\n });\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(maxH, d.height);\n });\n\n cellTrans = function cellTrans(d, i) {\n var height = sum(cellSize.slice(0, i));\n return \"translate(0, \" + (height + i * shapePadding) + \" )\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (maxW + labelOffset) + \",\\n \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n cellTrans = function cellTrans(d, i) {\n return \"translate( \" + i * (maxW + shapePadding) + \",0)\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (maxH + labelOffset) + \")\";\n };\n }\n\n helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n helper.d3_title(svg, title, classPrefix, titleWidth);\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = formatLocale(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = formatSpecifier(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\nvar thresholdLabels = function thresholdLabels(_ref) {\n var i = _ref.i,\n genLength = _ref.genLength,\n generatedLabels = _ref.generatedLabels,\n labelDelimiter = _ref.labelDelimiter;\n\n if (i === 0) {\n var values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n return \"Less than \" + values[1];\n } else if (i === genLength - 1) {\n var _values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n return _values[0] + \" or more\";\n }\n return generatedLabels[i];\n};\n\nvar legendHelpers = {\n thresholdLabels: thresholdLabels\n};\n\nvar index = {\n legendColor: color,\n legendSize: size,\n legendSymbol: symbol,\n legendHelpers: legendHelpers\n};\n\nexport { color as legendColor, size as legendSize, symbol as legendSymbol, legendHelpers };export default index;\n//# sourceMappingURL=indexRollupNext.js.map\n","import { instanceOfIHighlight } from \"@hpcc-js/api\";\nimport { Database, Palette, SVGWidget, Widget } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { scaleOrdinal as d3ScaleOrdinal } from \"d3-scale\";\nimport {\n symbol as d3Symbol,\n symbolCircle as d3SymbolCircle,\n symbolCross as d3SymbolCross,\n symbolDiamond as d3SymbolDiamond,\n symbolSquare as d3SymbolSquare,\n symbolStar as d3SymbolStar,\n symbolTriangle as d3SymbolTriangle,\n symbolWye as d3SymbolWye\n} from \"d3-shape\";\nimport { legendColor as d3LegendColor } from \"d3-svg-legend\";\nimport { ChartPanel } from \"./ChartPanel.ts\";\n\nexport class Legend extends SVGWidget {\n _owner: ChartPanel;\n _targetWidget: Widget;\n _targetWidgetMonitor;\n _legendOrdinal;\n _disabled: string[] = [];\n\n private _symbolTypeMap = {\n \"circle\": d3SymbolCircle,\n \"cross\": d3SymbolCross,\n \"diamond\": d3SymbolDiamond,\n \"square\": d3SymbolSquare,\n \"star\": d3SymbolStar,\n \"triangle\": d3SymbolTriangle,\n \"wye\": d3SymbolWye\n };\n\n constructor(owner: ChartPanel) {\n super();\n this._owner = owner;\n this._drawStartPos = \"origin\";\n\n const context = this;\n this._legendOrdinal = d3LegendColor()\n .shape(\"path\", d3Symbol().type(d3SymbolCircle).size(150)())\n .shapePadding(10)\n .shapeRadius(10)\n .on(\"cellclick\", function (d) {\n context.onClick(d, this);\n })\n .on(\"cellover\", (d) => {\n context.onOver(d, this);\n })\n .on(\"cellout\", (d) => {\n context.onOut(d, this);\n })\n ;\n }\n\n isDisabled(d: string | Database.Field): boolean {\n if (typeof d === \"undefined\") {\n return false;\n } else if (typeof d === \"string\") {\n return d.indexOf(\"__\") === 0 || this._disabled.indexOf(d) >= 0;\n } else if (d instanceof Database.Field) {\n return d.id().indexOf(\"__\") === 0 || this._disabled.indexOf(d.id()) >= 0;\n }\n return this._disabled.indexOf(d) >= 0;\n }\n\n filteredFields(): Database.Field[] {\n switch (this.dataFamily()) {\n case \"2D\":\n return this.fields();\n case \"ND\":\n return this.fields().filter(d => !this.isDisabled(d));\n }\n return this.fields();\n }\n\n filteredColumns(): string[] {\n switch (this.dataFamily()) {\n case \"2D\":\n return this.columns();\n case \"ND\":\n return this.columns().filter(d => !this.isDisabled(d));\n }\n return this.columns();\n }\n\n filteredData(): any[][] {\n switch (this.dataFamily()) {\n case \"2D\":\n return this.data().filter(row => !this.isDisabled(row[0]));\n case \"ND\":\n const disabledCols: { [key: number]: boolean } = {};\n let anyDisabled: boolean = false;\n this.columns().forEach((col, idx) => {\n const disabled = this.isDisabled(col);\n disabledCols[idx] = disabled;\n if (disabled) {\n anyDisabled = true;\n }\n });\n return !anyDisabled ? this.data() : this.data().map(row => {\n return row.filter((cell, idx) => !disabledCols[idx]);\n });\n }\n return this.data();\n }\n\n isRainbow() {\n const widget = this.getWidget();\n return widget && widget._palette && widget._palette.type() === \"rainbow\";\n }\n\n targetWidget(): Widget;\n targetWidget(_: Widget): this;\n targetWidget(_?: Widget): Widget | this {\n if (!arguments.length) return this._targetWidget;\n this._targetWidget = _;\n if (this._targetWidgetMonitor) {\n this._targetWidgetMonitor.remove();\n delete this._targetWidgetMonitor;\n }\n if (this._targetWidget) {\n const context = this;\n this._targetWidgetMonitor = this._targetWidget.monitor(function (key, newProp, oldProp, source) {\n switch (key) {\n case \"chart\":\n case \"columns\":\n case \"data\":\n case \"paletteID\":\n context.lazyRender();\n break;\n }\n });\n }\n return this;\n }\n\n getWidget() {\n if (this._targetWidget) {\n switch (this._targetWidget.classID()) {\n case \"composite_MultiChart\":\n return (this._targetWidget as any).chart();\n }\n }\n return this._targetWidget;\n }\n\n getPalette(): Palette.OrdinalPaletteFunc | Palette.RainbowPaletteFunc {\n const widget = this.getWidget();\n if (widget && widget._palette) {\n switch (widget._palette.type()) {\n case \"ordinal\":\n return Palette.ordinal(widget._palette.id());\n case \"rainbow\":\n return Palette.rainbow(widget._palette.id());\n }\n }\n return Palette.ordinal(\"default\");\n }\n\n getPaletteType() {\n return this.getPalette().type();\n }\n\n fillColorFunc() {\n const widget = this.getWidget();\n if (widget && widget.fillColor) {\n // Legend will render before the widget, so its possible the widgets palette will not have switched yet...\n if (widget._palette && widget.paletteID && widget._palette.name !== widget.paletteID()) {\n widget._palette = widget._palette.switch(widget.paletteID());\n }\n return (row, col, sel) => {\n return widget.fillColor(row, col, sel);\n };\n }\n const palette = Palette.ordinal(widget && widget.paletteID ? widget.paletteID() || \"default\" : \"default\");\n return (row, col, sel) => {\n return palette(col);\n };\n }\n\n fillColor(row, col, sel) {\n return this.fillColorFunc()(row, col, sel);\n }\n\n protected _g;\n enter(domNode, element) {\n super.enter(domNode, element);\n this._g = element.append(\"g\")\n .attr(\"class\", \"legendOrdinal\")\n ;\n }\n\n calcMetaData() {\n let dataArr = [];\n let total = 0;\n let maxLabelWidth = 0;\n const colLength = this.columns().length;\n\n if (this._targetWidget) {\n const columns = this.columns();\n switch (this.getPaletteType()) {\n case \"ordinal\":\n const fillColor = this.fillColorFunc();\n let val = 0;\n switch (this.dataFamily()) {\n case \"2D\":\n dataArr = this.data().map(function (n, i) {\n val = this.data()[i].slice(1, colLength).reduce((acc, n) => acc + n, 0);\n const disabled = this.isDisabled(n[0]);\n if (!disabled) total += val;\n const label = n[0] + (!disabled && this.showSeriesTotal() ? ` (${val})` : \"\");\n const textSize = this.textSize(label);\n if (maxLabelWidth < textSize.width) maxLabelWidth = textSize.width;\n return [fillColor(n, n[0], false), n[0], label];\n }, this);\n break;\n case \"ND\":\n const widgetColumns = this.columns().filter(col => col.indexOf(\"__\") !== 0);\n dataArr = widgetColumns.filter(function (n, i) { return i > 0; }).map(function (n, i) {\n val = this.data().reduce((acc, n) => acc + n[i + 1], 0);\n const disabled = this.isDisabled(columns[i + 1]);\n const label = n + (!disabled && this.showSeriesTotal() ? ` (${val})` : \"\");\n if (!disabled) total += val;\n const textSize = this.textSize(label);\n if (maxLabelWidth < textSize.width) maxLabelWidth = textSize.width;\n return [fillColor(undefined, n, false), n, label];\n }, this);\n break;\n default:\n const widgetColumns2 = this.columns();\n dataArr = widgetColumns2.map(function (n) {\n return [fillColor(undefined, n, false), n];\n }, this);\n break;\n }\n break;\n case \"rainbow\":\n const palette = this.getPalette() as Palette.RainbowPaletteFunc;\n const format = d3Format(this.rainbowFormat());\n const widget = this.getWidget();\n const steps = this.rainbowBins();\n const weightMin: number = widget._dataMinWeight;\n const weightMax: number = widget._dataMaxWeight;\n const stepWeightDiff = (weightMax - weightMin) / (steps - 1);\n dataArr.push([palette(weightMin, weightMin, weightMax), format(weightMin)]);\n for (let x = 1; x < steps - 1; ++x) {\n let mid = stepWeightDiff * x;\n if (Math.floor(mid) > parseInt(dataArr[0][1])) {\n mid = Math.floor(mid);\n }\n dataArr.push([palette(mid, weightMin, weightMax), format(mid)]);\n }\n dataArr.push([palette(weightMax, weightMin, weightMax), format(weightMax)]);\n break;\n }\n }\n return {\n dataArr,\n total,\n maxLabelWidth\n };\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const { dataArr, maxLabelWidth, total } = this.calcMetaData();\n\n const radius = this.shapeRadius();\n const size = this.radiusToSymbolSize(radius);\n\n const strokeWidth = 1;\n\n let shapePadding = this.itemPadding();// + strokeWidth;\n if (this.orientation() === \"horizontal\") {\n shapePadding += maxLabelWidth - (radius * 2);\n }\n\n const ordinal = d3ScaleOrdinal()\n .domain(dataArr.map(row => row[1]))\n .range(dataArr.map(row => row[0]));\n this._legendOrdinal\n .shape(\"path\", d3Symbol().type(this._symbolTypeMap[this.symbolType()]).size(size)())\n .orient(this.orientation())\n .title(this.title())\n .labelWrap(this.labelMaxWidth())\n .labelAlign(this.labelAlign())\n .shapePadding(shapePadding)\n .scale(ordinal)\n .labels(d => dataArr[d.i][2])\n ;\n\n this._g.call(this._legendOrdinal);\n\n this.updateDisabled(element, dataArr);\n\n const legendCellsBbox = this._g.select(\".legendCells\").node().getBBox();\n let offsetX = Math.abs(legendCellsBbox.x);\n let offsetY = Math.abs(legendCellsBbox.y) + strokeWidth;\n\n if (this.orientation() === \"horizontal\") {\n if (this.labelAlign() === \"start\") {\n offsetX += strokeWidth;\n } else if (this.labelAlign() === \"end\") {\n offsetX -= strokeWidth;\n }\n if (this.width() > legendCellsBbox.width) {\n const extraWidth = this.width() - legendCellsBbox.width;\n offsetX += (extraWidth / 2);\n }\n } else if (this.orientation() === \"vertical\") {\n offsetX += strokeWidth;\n if (this._containerSize.height > legendCellsBbox.height) {\n const extraHeight = this.height() - legendCellsBbox.height;\n offsetY += (extraHeight / 2);\n }\n }\n\n this._g.attr(\"transform\", `translate(${offsetX}, ${offsetY})`);\n this.pos({\n x: 0,\n y: 0\n });\n this._legendOrdinal\n .labelOffset(this.itemPadding())\n ;\n const legendTotal = this._g.selectAll(\".legendTotal\").data(dataArr.length && this.showLegendTotal() ? [total] : []);\n const totalText = `Total: ${total}`;\n const totalOffsetX = -offsetX;\n const totalOffsetY = legendCellsBbox.height + this.itemPadding() + strokeWidth;\n this.enableOverflowScroll(false);\n this.enableOverflow(true);\n legendTotal\n .enter()\n .append(\"text\")\n .classed(\"legendTotal\", true)\n .merge(legendTotal)\n .attr(\"transform\", `translate(${totalOffsetX}, ${totalOffsetY})`)\n .text(totalText)\n ;\n legendTotal.exit().remove();\n }\n\n updateDisabled(element, dataArr) {\n element\n .style(\"cursor\", \"pointer\")\n .selectAll(\"path.swatch\").filter((d, i) => i < dataArr.length)\n .style(\"stroke\", (d, i) => dataArr[i][0])\n .style(\"fill\", (d, i) =>\n this._disabled.indexOf(d) < 0 ? dataArr[i][0] : \"white\"\n )\n ;\n }\n\n postUpdate(domNode, element) {\n let w;\n if (this._boundingBox) {\n w = this._boundingBox.width;\n this._boundingBox.width = this._size.width;\n }\n super.postUpdate(domNode, element);\n if (w !== undefined) {\n this._boundingBox.width = w;\n }\n this._parentRelativeDiv.style(\"overflow\", \"hidden\");\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n radiusToSymbolSize(radius) {\n const circleSize = Math.pow(radius, 2) * Math.PI;\n switch (this.symbolType()) {\n case \"star\":\n return circleSize * 0.45;\n case \"triangle\":\n return circleSize * 0.65;\n case \"cross\":\n case \"diamond\":\n case \"wye\":\n return circleSize * 0.75;\n case \"circle\":\n return circleSize;\n case \"square\":\n return circleSize * 1.3;\n }\n }\n\n onClick(d, domNode) {\n switch (this.getPaletteType()) {\n case \"ordinal\":\n switch (this.dataFamily()) {\n case \"2D\":\n case \"ND\":\n const disabledIdx = this._disabled.indexOf(d);\n if (disabledIdx < 0) {\n this._disabled.push(d);\n } else {\n this._disabled.splice(disabledIdx, 1);\n }\n this._owner.refreshColumns();\n this._owner.refreshData();\n this._owner.render();\n break;\n }\n break;\n }\n }\n\n onOver(d, domNode) {\n if (instanceOfIHighlight(this._owner)) {\n switch (this.getPaletteType()) {\n case \"ordinal\":\n switch (this.dataFamily()) {\n case \"2D\":\n case \"ND\":\n if (this._disabled.indexOf(d) < 0) {\n this._owner.highlightColumn(d);\n }\n break;\n }\n break;\n }\n }\n }\n\n onOut(d, domNode) {\n if (instanceOfIHighlight(this._owner)) {\n switch (this.getPaletteType()) {\n case \"ordinal\":\n switch (this.dataFamily()) {\n case \"2D\":\n case \"ND\":\n this._owner.highlightColumn();\n break;\n }\n break;\n }\n }\n }\n\n onDblClick(rowData, rowIdx) {\n }\n\n onMouseOver(rowData, rowIdx) {\n }\n private _containerSize;\n resize(_size?: { width: number, height: number }) {\n let retVal;\n if (this.fitToContent()) {\n this._containerSize = _size;\n const bbox = this.getBBox();\n if (_size.width > bbox.width) {\n bbox.width = _size.width;\n }\n if (_size.height > bbox.height) {\n bbox.height = _size.height;\n }\n retVal = super.resize.apply(this, [{ ...bbox }]);\n } else {\n retVal = super.resize.apply(this, arguments);\n }\n return retVal;\n }\n\n}\nLegend.prototype._class += \" layout_Legend\";\n\nexport interface Legend {\n title(): string;\n title(_: string): this;\n symbolType(): \"circle\" | \"cross\" | \"diamond\" | \"square\" | \"star\" | \"triangle\" | \"wye\";\n symbolType(_: \"circle\" | \"cross\" | \"diamond\" | \"square\" | \"star\" | \"triangle\" | \"wye\"): this;\n labelMaxWidth(): number;\n labelMaxWidth(_: number): this;\n orientation(): \"vertical\" | \"horizontal\";\n orientation(_: \"vertical\" | \"horizontal\"): this;\n orientation_exists: () => boolean;\n dataFamily(): \"1D\" | \"2D\" | \"ND\" | \"map\" | \"graph\" | \"any\";\n dataFamily(_: \"1D\" | \"2D\" | \"ND\" | \"map\" | \"graph\" | \"any\"): this;\n dataFamily_exists: () => boolean;\n rainbowFormat(): string;\n rainbowFormat(_: string): this;\n rainbowFormat_exists: () => boolean;\n rainbowBins(): number;\n rainbowBins(_: number): this;\n rainbowBins_exists: () => boolean;\n showSeriesTotal(): boolean;\n showSeriesTotal(_: boolean): this;\n showLegendTotal(): boolean;\n showLegendTotal(_: boolean): this;\n itemPadding(): number;\n itemPadding(_: number): this;\n shapeRadius(): number;\n shapeRadius(_: number): this;\n fitToContent(): boolean;\n fitToContent(_: boolean): this;\n labelAlign(): \"start\" | \"middle\" | \"end\";\n labelAlign(_: \"start\" | \"middle\" | \"end\"): this;\n}\nLegend.prototype.publish(\"title\", \"\", \"string\", \"Title\");\nLegend.prototype.publish(\"symbolType\", \"circle\", \"set\", \"Shape of each legend item\", [\"circle\", \"cross\", \"diamond\", \"square\", \"star\", \"triangle\", \"wye\"]);\nLegend.prototype.publish(\"labelMaxWidth\", null, \"number\", \"Max Label Width (pixels)\", null, { optional: true });\nLegend.prototype.publish(\"orientation\", \"vertical\", \"set\", \"Orientation of Legend rows\", [\"vertical\", \"horizontal\"], { tags: [\"Private\"] });\nLegend.prototype.publish(\"dataFamily\", \"ND\", \"set\", \"Type of data\", [\"1D\", \"2D\", \"ND\", \"map\", \"graph\", \"any\"], { tags: [\"Private\"] });\nLegend.prototype.publish(\"rainbowFormat\", \",\", \"string\", \"Rainbow number formatting\", null, { tags: [\"Private\"], optional: true, disable: w => !w.isRainbow() });\nLegend.prototype.publish(\"rainbowBins\", 8, \"number\", \"Number of rainbow bins\", null, { tags: [\"Private\"], disable: w => !w.isRainbow() });\nLegend.prototype.publish(\"showSeriesTotal\", false, \"boolean\", \"Show value next to series\");\nLegend.prototype.publish(\"showLegendTotal\", false, \"boolean\", \"Show a total of the series values under the legend\", null);\nLegend.prototype.publish(\"itemPadding\", 8, \"number\", \"Padding between legend items (pixels)\");\nLegend.prototype.publish(\"shapeRadius\", 7, \"number\", \"Radius of legend shape (pixels)\");\nLegend.prototype.publish(\"fitToContent\", true, \"boolean\", \"If true, resize will simply reapply the bounding box dimensions\");\nLegend.prototype.publish(\"labelAlign\", \"start\", \"set\", \"Horizontal alignment of legend item label (for horizontal orientation only)\", [\"start\", \"middle\", \"end\"], { optional: true, disable: (w: any) => w.orientation() === \"vertical\" });\n","import { HTMLWidget, ISize, Widget } from \"@hpcc-js/common\";\n\nimport \"../src/Modal.css\";\n\nexport class Modal extends HTMLWidget {\n\n protected _widget: Widget;\n\n protected _relativeTarget: HTMLElement;\n\n protected _fade;\n protected _modal;\n protected _modalHeader;\n protected _modalBody;\n protected _modalHeaderAnnotations;\n protected _modalHeaderCloseButton;\n _close: () => void;\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n closeModal() {\n this.visible(false);\n }\n\n getRelativeTarget() {\n let relativeTarget;\n if (this.relativeTargetId()) {\n relativeTarget = document.getElementById(this.relativeTargetId());\n if (relativeTarget) {\n return relativeTarget;\n }\n }\n if (!relativeTarget) {\n relativeTarget = this.locateAncestor(\"layout_Grid\");\n if (relativeTarget && relativeTarget.element) {\n return relativeTarget.element().node();\n }\n }\n return document.body;\n }\n\n setModalSize(): ISize {\n if (this.fixedHeight() !== null && this.fixedWidth() !== null) {\n this._modal\n .style(\"height\", this.fixedHeight())\n .style(\"width\", this.fixedWidth())\n .style(\"min-height\", null)\n .style(\"min-width\", null)\n .style(\"max-height\", null)\n .style(\"max-width\", null)\n ;\n } else if (this.minHeight() || this.minWidth()) {\n this._modal\n .style(\"min-height\", this.minHeight())\n .style(\"min-width\", this.minWidth())\n .style(\"max-height\", this.maxHeight())\n .style(\"max-width\", this.maxWidth())\n ;\n }\n const modalRect = this._modal.node().getBoundingClientRect();\n const headerRect = this._modalHeader.node().getBoundingClientRect();\n this._modalBody\n .style(\"height\", (modalRect.height - headerRect.height) + \"px\")\n .style(\"width\", modalRect.width);\n\n return modalRect;\n }\n\n setFadePosition(rect) {\n this._fade\n .style(\"top\", rect.top + \"px\")\n .style(\"left\", rect.left + \"px\")\n .style(\"width\", rect.width + \"px\")\n .style(\"height\", rect.height + \"px\")\n ;\n }\n\n setModalPosition(rect) {\n const modalRect = this.setModalSize();\n if (this.fixedTop() !== null && this.fixedLeft() !== null) {\n this._modal\n .style(\"top\", `calc(${this.fixedTop()} + ${rect.top}px)`)\n .style(\"left\", `calc(${this.fixedLeft()} + ${rect.left}px)`)\n ;\n } else if (this.fixedHeight() !== null && this.fixedWidth() !== null) {\n this._modal\n .style(\"top\", (rect.top + (rect.height / 2) - (modalRect.height / 2)) + \"px\")\n .style(\"left\", (rect.left + (rect.width / 2) - (modalRect.width / 2)) + \"px\")\n ;\n } else if (this.minHeight() || this.minWidth()) {\n const contentRect = this._modal.node().getBoundingClientRect();\n this._modal\n .style(\"top\", (rect.top + (rect.height / 2) - (contentRect.height / 2)) + \"px\")\n .style(\"left\", (rect.left + (rect.width / 2) - (contentRect.width / 2)) + \"px\")\n ;\n }\n }\n\n resize(size?: any): this {\n super.resize();\n if (this._modal) this.setModalSize();\n return this;\n }\n\n resizeBodySync(width: number, height: number): this {\n const header = this._modalHeader.node();\n const headerRect = header.getBoundingClientRect();\n\n this._modal\n .style(\"width\", width + \"px\")\n .style(\"height\", (height + headerRect.height) + \"px\")\n .style(\"min-width\", width + \"px\")\n .style(\"min-height\", (height + headerRect.height) + \"px\")\n ;\n this._modalHeader\n .style(\"width\", width + \"px\")\n ;\n this._modalBody\n .style(\"width\", width + \"px\")\n .style(\"height\", height + \"px\")\n ;\n return this\n .minWidth(width + \"px\")\n .minHeight((height + headerRect.height) + \"px\")\n .resize({\n height: height + headerRect.height,\n width\n })\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._fade = element.append(\"div\")\n .classed(\"layout_Modal-fade\", true)\n .classed(\"layout_Modal-fadeClickable\", this.enableClickFadeToClose())\n .classed(\"layout_Modal-fade-hidden\", !this.showFade())\n ;\n const header_h = this.titleFontSize() * 2;\n this._modal = element.append(\"div\")\n .classed(\"layout_Modal-content\", true)\n ;\n this._modalHeader = this._modal.append(\"div\")\n .classed(\"layout_Modal-header\", true)\n .style(\"color\", this.titleFontColor())\n .style(\"font-size\", this.titleFontSize() + \"px\")\n .style(\"height\", header_h + \"px\")\n ;\n this._modalBody = this._modal.append(\"div\")\n .classed(\"layout_Modal-body\", true)\n .style(\"height\", `calc( 100% - ${header_h}px )`)\n .style(\"overflow-x\", this.overflowX())\n .style(\"overflow-y\", this.overflowY())\n ;\n this._modalHeader.append(\"div\")\n .classed(\"layout_Modal-title\", true)\n .style(\"line-height\", this.titleFontSize() + \"px\")\n .style(\"top\", (this.titleFontSize() / 2) + \"px\")\n .style(\"left\", (this.titleFontSize() / 2) + \"px\")\n .text(this.formattedTitle())\n ;\n\n this._modalHeaderAnnotations = this._modalHeader.append(\"div\")\n .classed(\"layout_Modal-annotations\", true)\n ;\n this._modalHeaderCloseButton = this._modalHeaderAnnotations.append(\"div\")\n .classed(\"layout_Modal-closeButton\", true)\n .html(\"<i class=\\\"fa fa-close\\\"></i>\")\n ;\n\n this._modalHeaderAnnotations\n .style(\"line-height\", this.titleFontSize() + \"px\")\n .style(\"right\", (this.titleFontSize() / 2) + \"px\")\n .style(\"top\", (this.titleFontSize() / 2) + \"px\")\n ;\n this._modalHeaderCloseButton.on(\"click\", () => {\n this.closeModal();\n });\n this._fade.on(\"click\", n => {\n if (this.enableClickFadeToClose()) {\n this.closeModal();\n }\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n element.style(\"display\", this.show() ? null : \"none\");\n this._fade.classed(\"layout_Modal-fade-hidden\", !this.showFade());\n this._relativeTarget = this.getRelativeTarget();\n\n this.setModalSize();\n const rect = this._relativeTarget.getBoundingClientRect();\n this.setFadePosition(rect);\n this.setModalPosition(rect);\n\n if (this.show()) {\n if (!this._widget.target()) {\n this._widget.target(this._modalBody.node());\n }\n this._widget.resize().render();\n } else {\n this._widget\n .target(null)\n .render()\n ;\n }\n }\n\n exit(domNode, element) {\n if (this._widget) {\n this._widget.target(null);\n }\n super.exit(domNode, element);\n }\n\n formattedTitle() {\n const title = this.title_exists() ? this.title().trim() : \"\";\n if (title.length > 0 && title.slice(0, 1) === \"(\" && title.slice(-1) === \")\") {\n return title.slice(1, -1);\n }\n return this.title();\n }\n}\nModal.prototype._class += \" layout_Modal\";\n\nexport interface Modal {\n show(): boolean;\n show(_: boolean): this;\n showFade(): boolean;\n showFade(_: boolean): this;\n enableClickFadeToClose(): boolean;\n enableClickFadeToClose(_: boolean): this;\n title(): string;\n title(_: string): this;\n title_exists(): boolean;\n titleFontSize(): number;\n titleFontSize(_: number): this;\n titleFontColor(): string;\n titleFontColor(_: string): this;\n minWidth(): string;\n minWidth(_: string): this;\n minHeight(): string;\n minHeight(_: string): this;\n maxWidth(): string;\n maxWidth(_: string): this;\n maxHeight(): string;\n maxHeight(_: string): this;\n fixedWidth(): string;\n fixedWidth(_: string): this;\n fixedHeight(): string;\n fixedHeight(_: string): this;\n fixedTop(): string;\n fixedTop(_: string): this;\n fixedLeft(): string;\n fixedLeft(_: string): this;\n relativeTargetId(): string;\n relativeTargetId(_: string): this;\n widget(): Widget;\n widget(_: Widget): this;\n overflowX(): \"hidden\" | \"scroll\";\n overflowX(_: \"hidden\" | \"scroll\"): this;\n overflowY(): \"hidden\" | \"scroll\";\n overflowY(_: \"hidden\" | \"scroll\"): this;\n}\n\nModal.prototype.publish(\"title\", null, \"string\", \"title\");\nModal.prototype.publish(\"widget\", null, \"widget\", \"widget\");\nModal.prototype.publish(\"titleFontSize\", 18, \"number\", \"titleFontSize (in pixels)\");\nModal.prototype.publish(\"titleFontColor\", \"#ffffff\", \"html-color\", \"titleFontColor\");\nModal.prototype.publish(\"relativeTargetId\", null, \"string\", \"relativeTargetId\");\n\nModal.prototype.publish(\"show\", true, \"boolean\", \"show\");\nModal.prototype.publish(\"showFade\", true, \"boolean\", \"showFade\");\nModal.prototype.publish(\"enableClickFadeToClose\", true, \"boolean\", \"enableClickFadeToClose\");\n\nModal.prototype.publish(\"minWidth\", \"400px\", \"string\", \"minWidth\");\nModal.prototype.publish(\"minHeight\", \"400px\", \"string\", \"minHeight\");\nModal.prototype.publish(\"maxWidth\", \"800px\", \"string\", \"maxWidth\");\nModal.prototype.publish(\"maxHeight\", \"800px\", \"string\", \"maxHeight\");\nModal.prototype.publish(\"fixedWidth\", null, \"string\", \"fixedWidth\");\nModal.prototype.publish(\"fixedHeight\", null, \"string\", \"fixedHeight\");\nModal.prototype.publish(\"fixedTop\", null, \"string\", \"fixedTop\");\nModal.prototype.publish(\"fixedLeft\", null, \"string\", \"fixedLeft\");\nModal.prototype.publish(\"overflowX\", \"hidden\", \"string\", \"overflowX\");\nModal.prototype.publish(\"overflowY\", \"scroll\", \"string\", \"overflowY\");\n","import { IHighlight } from \"@hpcc-js/api\";\nimport { Button, Database, IconBar, ProgressBar, Spacer, SVGWidget, Text, TitleBar, ToggleButton, Utility, Widget } from \"@hpcc-js/common\";\nimport { Table } from \"@hpcc-js/dgrid2\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Border2 } from \"./Border2.ts\";\nimport { Carousel } from \"./Carousel.ts\";\nimport { Legend } from \"./Legend.ts\";\nimport { Modal } from \"./Modal.ts\";\n\nimport \"../src/ChartPanel.css\";\n\nexport class ChartPanel<T extends Widget = Widget> extends Border2 implements IHighlight {\n\n protected _legend = new Legend(this).enableOverflow(true);\n protected _progressBar = new ProgressBar();\n protected _autoScale = false;\n protected _resolutions = {\n tiny: { width: 100, height: 100 },\n small: { width: 300, height: 300 }\n };\n private _modal = new Modal();\n private _highlight: boolean;\n private _scale: number;\n private _orig_size: any;\n\n private _toggleInfo = new ToggleButton().faChar(\"fa-info-circle\").tooltip(\".Description\")\n .selected(false)\n .on(\"enabled\", () => {\n return this.description() !== \"\";\n })\n .on(\"click\", () => {\n if (this._toggleInfo.selected()) {\n this._modal\n .title(this.title())\n .widget(new Text().text(this.description()))\n .show(true)\n .render()\n ;\n\n const origCloseFunc = this._modal._close;\n this._modal._close = () => {\n this._toggleInfo\n .selected(false)\n .render()\n ;\n this._modal._close = origCloseFunc;\n };\n }\n })\n .on(\"mouseMove\", () => {\n /*\n this._modal.showPreview(true).render(n => {\n n.resize().render();\n });\n */\n })\n .on(\"mouseOut\", () => {\n /*\n if (this._modal.showPreview()) {\n this._modal.show(false).showPreview(false).render();\n }\n */\n });\n\n private _toggleData = new ToggleButton().faChar(\"fa-table\").tooltip(\"Data\")\n .on(\"click\", () => {\n this.dataVisible(this._toggleData.selected());\n this.render();\n });\n\n private _buttonDownload = new Button().faChar(\"fa-download\").tooltip(\"Download\")\n .on(\"click\", () => {\n this.downloadCSV();\n });\n\n private _buttonDownloadImage = new Button().faChar(\"fa-image\").tooltip(\"Download Image\")\n .on(\"click\", () => {\n this.downloadPNG();\n });\n\n private _toggleLegend = new ToggleButton().faChar(\"fa-list-ul\").tooltip(\"Legend\")\n .selected(false)\n .on(\"click\", () => {\n const selected = this._toggleLegend.selected();\n if (this.legendPosition() === \"bottom\") {\n this.showBottom(selected);\n } else if (this.legendPosition() === \"right\") {\n this.showRight(selected);\n }\n this.legendVisible(selected);\n this.render();\n });\n\n protected _spacer = new Spacer();\n\n _titleBar = new TitleBar().buttons([this._toggleData, this._buttonDownload, this._buttonDownloadImage, this._spacer, this._toggleLegend]);\n\n protected _carousel = new Carousel();\n protected _table = new Table();\n protected _widget: T;\n\n protected _hideLegendToggleList = [\"dgrid_Table\", \"dgrid2_Table\"];\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n fields(): Database.Field[];\n fields(_: Database.Field[]): this;\n fields(_?: Database.Field[]): this | Database.Field[] {\n if (!arguments.length) return super.fields();\n super.fields(_);\n this._legend.fields(_);\n this.refreshFields();\n return this;\n }\n refreshFields() {\n this._widget.fields(this._legend.filteredFields());\n this._table.fields(this._legend.filteredFields());\n return this;\n }\n\n columns(): string[];\n columns(_: string[], asDefault?: boolean): this;\n columns(_?: string[], asDefault?: boolean): string[] | this {\n if (!arguments.length) return super.columns();\n super.columns(_, asDefault);\n this._legend.columns(_, asDefault);\n this.refreshColumns();\n return this;\n }\n refreshColumns() {\n this._widget.columns(this._legend.filteredColumns());\n this._table.columns(this._legend.filteredColumns());\n return this;\n }\n\n data(_?) {\n if (!arguments.length) return super.data();\n super.data(_);\n this._legend.data(_);\n this.refreshData();\n return this;\n }\n refreshData() {\n this._widget.data(this._legend.filteredData());\n this._table.data(this._legend.filteredData());\n return this;\n }\n\n highlight(): boolean;\n highlight(_: boolean): this;\n highlight(_?: boolean): boolean | this {\n if (!arguments.length) return this._highlight;\n this._highlight = _;\n return this;\n }\n\n startProgress() {\n this._progressBar.start();\n }\n\n finishProgress() {\n this._progressBar.finish();\n }\n\n buttons(): Widget[];\n buttons(_: Widget[]): this;\n buttons(_?: Widget[]): this | Widget[] {\n if (!arguments.length) return this._titleBar.buttons();\n this._titleBar.buttons(_);\n return this;\n }\n\n downloadCSV() {\n const namePrefix = this.downloadTitle() ? this.downloadTitle() : this.title() ? this.title() : \"data\";\n const nameSuffix = this.downloadTimestampSuffix() ? \"_\" + Utility.timestamp() : \"\";\n Utility.downloadString(\"CSV\", this._widget.export(\"CSV\"), namePrefix + nameSuffix);\n return this;\n }\n\n downloadPNG() {\n const widget = this.widget();\n if (widget instanceof SVGWidget) {\n if (!this.legendVisible()) {\n widget.downloadPNG(this.title());\n } else {\n widget.downloadPNG(this.title(), undefined, this._legend);\n }\n }\n return this;\n }\n\n highlightColumn(column?: string): this {\n if (column) {\n const cssTag = `series-${this.cssTag(column)}`;\n this._centerWA.element().selectAll(\".series\")\n .each(function () {\n const element = d3Select(this);\n const highlight = element.classed(cssTag);\n element\n .classed(\"highlight\", highlight)\n .classed(\"lowlight\", !highlight)\n ;\n })\n ;\n } else {\n this._centerWA.element().selectAll(\".series\")\n .classed(\"highlight\", false)\n .classed(\"lowlight\", false)\n ;\n }\n return this;\n }\n\n getResponsiveMode(): \"tiny\" | \"small\" | \"regular\" | \"none\" {\n if (!this.enableAutoscaling()) return \"none\";\n if (!this._autoScale) return \"regular\";\n if (this.size().width <= this._resolutions.tiny.width || this.size().height <= this._resolutions.tiny.height) {\n return \"tiny\";\n } else if (this.size().width <= this._resolutions.small.width || this.size().height <= this._resolutions.small.height) {\n return \"small\";\n }\n return \"regular\";\n }\n\n setOrigSize() {\n this._orig_size = JSON.parse(JSON.stringify(this.size()));\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._modal\n .target(this.target())\n .relativeTargetId(this.id())\n ;\n\n this.top(this._titleBar);\n this.center(this._carousel);\n\n this._legend\n .targetWidget(this._widget)\n .orientation(\"vertical\")\n .title(\"\")\n .visible(false)\n ;\n\n this._progressBar.enter(domNode, element);\n this.setOrigSize();\n }\n\n preUpdateTiny(element) {\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"none\");\n }\n\n preUpdateSmall(element) {\n const scale_x = this._orig_size.width / this._resolutions.small.width;\n const scale_y = this._orig_size.height / this._resolutions.small.height;\n this._scale = Math.min(scale_x, scale_y);\n const x_is_smaller = this._scale === scale_x;\n this.size({\n width: x_is_smaller ? this._resolutions.small.width : this._orig_size.width * (1 / this._scale),\n height: !x_is_smaller ? this._resolutions.small.height : this._orig_size.height * (1 / this._scale)\n });\n element.select(\"div.title-icon\").style(\"position\", \"static\");\n element.selectAll(\"lhs\").style(\"display\", \"none\");\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n element.style(\"transform\", `scale(${this._scale})`);\n }\n\n preUpdateRegular(element) {\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n element.select(\"div.title-icon\").style(\"position\", \"static\");\n element.style(\"transform\", \"translate(0px,0px) scale(1)\");\n }\n\n private _prevdataVisible;\n private _prevlegendVisible;\n private _prevLegendPosition;\n private _prevChartDataFamily;\n private _prevChart;\n private _prevButtons;\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n preUpdate(domNode, element) {\n\n super.preUpdate(domNode, element);\n\n if (this._prevLegendPosition !== this.legendPosition()) {\n if (this._legend.target() !== null) this._legend.target(null);\n if (this._prevLegendPosition !== undefined) {\n this.swap(this._prevLegendPosition, this.legendPosition());\n } else {\n this[this.legendPosition()](this._legend);\n }\n if (this.legendPosition() === \"right\") {\n this.rightOverflowX(\"hidden\");\n this.rightOverflowY(\"auto\");\n this.bottomOverflowX(\"visible\");\n this.bottomOverflowY(\"visible\");\n } else {\n this.rightOverflowX(\"visible\");\n this.rightOverflowY(\"visible\");\n this.bottomOverflowX(\"auto\");\n this.bottomOverflowY(\"hidden\");\n }\n this._prevLegendPosition = this.legendPosition();\n }\n\n if (this._prevdataVisible !== this.dataVisible()) {\n this._prevdataVisible = this.dataVisible();\n this._toggleData.selected(this._prevdataVisible);\n this._legend.visible(this._prevlegendVisible && !this._prevdataVisible);\n this._carousel.active(this._prevdataVisible ? 1 : 0);\n }\n\n if (this._prevlegendVisible !== this.legendVisible()) {\n this._prevlegendVisible = this.legendVisible();\n this._toggleLegend.selected(this._prevlegendVisible);\n this._legend.visible(this._prevlegendVisible && !this._prevdataVisible);\n }\n\n this._legend.orientation(this.legendPosition() === \"bottom\" ? \"horizontal\" : \"vertical\");\n\n this.showLeft(!this.left());\n\n switch (this.getResponsiveMode()) {\n case \"tiny\":\n this.preUpdateTiny(element);\n break;\n case \"small\":\n this.preUpdateSmall(element);\n break;\n case \"regular\":\n this.preUpdateRegular(element);\n break;\n }\n\n const chart = this._widget.classID() === \"composite_MultiChart\" ? this._widget[\"chart\"]() : this._widget;\n this._legend.dataFamily(chart._dataFamily || \"any\");\n\n if (this._prevChartDataFamily !== this._legend.dataFamily()) {\n this._prevChartDataFamily = this._legend.dataFamily();\n switch (this._prevChartDataFamily) {\n case \"any\":\n this._toggleLegend.selected(false);\n this._legend.visible(false);\n break;\n }\n }\n element.style(\"box-shadow\", this.highlight() ? `inset 0px 0px 0px ${this.highlightSize()}px ${this.highlightColor()}` : \"none\");\n\n if (this._hideLegendToggleList.indexOf(chart.classID()) !== -1) {\n this._spacer.visible(false);\n this._toggleLegend.visible(false);\n } else {\n this._spacer.visible(true);\n this._toggleLegend.visible(true);\n }\n if (this._prevChart !== chart) {\n this._prevChart = chart;\n const widgetIconBar = chart ? chart[\"_titleBar\"] || chart[\"_iconBar\"] : undefined;\n if (widgetIconBar && widgetIconBar instanceof IconBar) {\n this._prevButtons = this._prevButtons || [...this.buttons()];\n const buttons: Widget[] = [\n ...widgetIconBar.buttons(),\n new Spacer(),\n ...this._prevButtons\n ];\n widgetIconBar.buttons([]).render();\n this.buttons(buttons);\n } else if (this._prevButtons) {\n this.buttons(this._prevButtons);\n }\n }\n\n const hiddenButtons = [];\n if (!this.dataButtonVisible()) hiddenButtons.push(this._toggleData);\n if (!this.downloadButtonVisible()) hiddenButtons.push(this._buttonDownload);\n if (!this.downloadImageButtonVisible()) hiddenButtons.push(this._buttonDownloadImage);\n if (!this.legendButtonVisible()) hiddenButtons.push(this._toggleLegend);\n this._buttonDownloadImage.enabled(this.widget() instanceof SVGWidget);\n this._titleBar\n .hiddenButtons(hiddenButtons)\n .visible(this.titleVisible())\n ;\n this.topOverlay(this.titleOverlay() || !this.titleVisible());\n }\n\n postUpdate(domNode, element) {\n super.postUpdate(domNode, element);\n\n switch (this.getResponsiveMode()) {\n case \"tiny\":\n this.postUpdateTiny(element);\n break;\n case \"small\":\n this.postUpdateSmall(element);\n break;\n case \"regular\":\n this.postUpdateRegular(element);\n break;\n }\n }\n\n postUpdateTiny(element) {\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"none\");\n element.selectAll(\"div.data-count\")\n .style(\"visibility\", \"visible\")\n .style(\"font-size\", (this.titleIconFontSize() / 3) + \"px\")\n .style(\"line-height\", (this.titleIconFontSize() / 3) + \"px\")\n .style(\"left\", this.titleIconFontSize() + \"px\")\n .text(this.data().length)\n ;\n element.style(\"transform\", \"translate(0px,0px) scale(1)\");\n const iconDiv = element.selectAll(\"div.title-icon\");\n const _node = iconDiv.node();\n const _container = element.node().parentElement;\n const containerRect = _container.getBoundingClientRect();\n if (_node) {\n const rect = iconDiv.node().getBoundingClientRect();\n const icon_top = containerRect.height / 2;\n iconDiv\n .style(\"position\", \"absolute\")\n .style(\"left\", `calc(50% - ${rect.width / 2}px)`)\n .style(\"top\", `${icon_top - (rect.height / 2)}px`)\n ;\n element.selectAll(\"div.data-count\")\n .style(\"position\", \"absolute\")\n .style(\"left\", `calc(50% + ${rect.width / 2}px)`)\n .style(\"top\", `${icon_top - (rect.height / 2)}px`)\n ;\n }\n }\n\n postUpdateSmall(element) {\n element.selectAll(\"lhs\").style(\"display\", \"none\"); // TODO: a bug in Border2?\n element.selectAll(\"div.title-icon\").style(\"position\", \"static\");\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n const rect = element.node().getBoundingClientRect();\n const parentRect = element.node().parentElement.getBoundingClientRect();\n element.style(\"transform\", `translate(${parentRect.x - rect.x}px, ${parentRect.y - rect.y}px) scale(${this._scale})`);\n }\n\n postUpdateRegular(element) {\n element.selectAll(\"div.title-icon\").style(\"position\", \"static\");\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n }\n\n exit(domNode, element) {\n this._progressBar.exit(domNode, element);\n\n this.right(null);\n this._legend.target(null);\n this.center(null);\n this._carousel.target(null);\n this.top(null);\n this._titleBar.target(null);\n\n this._modal.target(null);\n\n delete this._prevChart;\n delete this._prevButtons;\n delete this._prevChartDataFamily;\n delete this._prevPos;\n delete this._prevdataVisible;\n delete this._prevlegendVisible;\n\n super.exit(domNode, element);\n }\n\n // Event Handlers ---\n // Events ---\n click(row, column, selected) {\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n }\n\n dblclick(row, column, selected) {\n // console.log(\"Double click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n }\n\n vertex_click(row, col, sel, more) {\n if (more && more.vertex) {\n // console.log(\"Vertex click: \" + more.vertex.id());\n }\n }\n\n vertex_dblclick(row, col, sel, more) {\n if (more && more.vertex) {\n // console.log(\"Vertex double click: \" + more.vertex.id());\n }\n }\n\n edge_click(row, col, sel, more) {\n if (more && more.edge) {\n // console.log(\"Edge click: \" + more.edge.id());\n }\n }\n\n edge_dblclick(row, col, sel, more) {\n if (more && more.edge) {\n // console.log(\"Edge double click: \" + more.edge.id());\n }\n }\n}\nChartPanel.prototype._class += \" layout_ChartPanel\";\n\nexport interface ChartPanel<T extends Widget = Widget> {\n title(): string;\n title(_: string): this;\n titleVisible(): boolean;\n titleVisible(_: boolean): this;\n titleOverlay(): boolean;\n titleOverlay(_: boolean): this;\n title_exists(): boolean;\n titleFontSize(): number;\n titleFontSize(_: number): this;\n titleFontSize_exists(): boolean;\n titleIconFontSize(): number;\n titleIconFontSize(_: number): this;\n titleIconFontSize_exists(): boolean;\n dataVisible(): boolean;\n dataVisible(_: boolean): this;\n dataButtonVisible(): boolean;\n dataButtonVisible(_: boolean): this;\n downloadButtonVisible(): boolean;\n downloadButtonVisible(_: boolean): this;\n downloadImageButtonVisible(): boolean;\n downloadImageButtonVisible(_: boolean): this;\n downloadTitle(): string;\n downloadTitle(_: string): this;\n downloadTimestampSuffix(): boolean;\n downloadTimestampSuffix(_: boolean): this;\n legendVisible(): boolean;\n legendVisible(_: boolean): this;\n legendButtonVisible(): boolean;\n legendButtonVisible(_: boolean): this;\n legendPosition(): \"right\" | \"bottom\";\n legendPosition(_: \"right\" | \"bottom\"): this;\n description(): string;\n description(_: string): this;\n description_exists(): boolean;\n widget(): T;\n widget(_: T): this;\n widget_exists(): boolean;\n enableAutoscaling(): boolean;\n enableAutoscaling(_: boolean): this;\n enableAutoscaling_exists(): boolean;\n highlightSize(): number;\n highlightSize(_: number): this;\n highlightSize_exists(): boolean;\n highlightColor(): string;\n highlightColor(_: string): this;\n highlightColor_exists(): boolean;\n}\n\nChartPanel.prototype.publishReset();\nChartPanel.prototype.publishProxy(\"title\", \"_titleBar\");\nChartPanel.prototype.publish(\"titleVisible\", true, \"boolean\");\nChartPanel.prototype.publish(\"titleOverlay\", false, \"boolean\");\nChartPanel.prototype.publishProxy(\"titleIcon\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleIconFont\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleFont\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleIconFontSize\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleFontSize\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"description\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"descriptionFont\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"descriptionFontSize\", \"_titleBar\");\nChartPanel.prototype.publish(\"dataVisible\", false, \"boolean\", \"Show data table\");\nChartPanel.prototype.publish(\"dataButtonVisible\", true, \"boolean\", \"Show data table button\");\nChartPanel.prototype.publish(\"downloadButtonVisible\", true, \"boolean\", \"Show data download button\");\nChartPanel.prototype.publish(\"downloadImageButtonVisible\", false, \"boolean\", \"Show image download button\");\nChartPanel.prototype.publish(\"downloadTitle\", \"\", \"string\", \"File name when downloaded\");\nChartPanel.prototype.publish(\"downloadTimestampSuffix\", true, \"boolean\", \"Use timestamp as file name suffix\");\nChartPanel.prototype.publish(\"legendVisible\", false, \"boolean\", \"Show legend\");\nChartPanel.prototype.publish(\"legendButtonVisible\", true, \"boolean\", \"Show legend button\");\nChartPanel.prototype.publish(\"legendPosition\", \"right\", \"set\", \"Position of legend\", [\"right\", \"bottom\"]);\nChartPanel.prototype.publishProxy(\"legend_labelMaxWidth\", \"_legend\", \"labelMaxWidth\");\nChartPanel.prototype.publishProxy(\"legend_showSeriesTotal\", \"_legend\", \"showSeriesTotal\");\nChartPanel.prototype.publishProxy(\"legend_showLegendTotal\", \"_legend\", \"showLegendTotal\");\nChartPanel.prototype.publishProxy(\"legend_itemPadding\", \"_legend\", \"itemPadding\");\nChartPanel.prototype.publishProxy(\"legend_shapeRadius\", \"_legend\", \"shapeRadius\");\nChartPanel.prototype.publishProxy(\"legend_symbolType\", \"_legend\", \"symbolType\");\nChartPanel.prototype.publishProxy(\"legend_labelAlign\", \"_legend\", \"labelAlign\");\nChartPanel.prototype.publish(\"widget\", null, \"widget\", \"Widget\", undefined, { render: false });\nChartPanel.prototype.publish(\"enableAutoscaling\", false, \"boolean\");\nChartPanel.prototype.publish(\"highlightSize\", 4, \"number\");\nChartPanel.prototype.publish(\"highlightColor\", \"#e67e22\", \"html-color\");\nChartPanel.prototype.publishProxy(\"progress_halfLife\", \"_progressBar\", \"halfLife\");\nChartPanel.prototype.publishProxy(\"progress_decay\", \"_progressBar\", \"decay\");\nChartPanel.prototype.publishProxy(\"progress_size\", \"_progressBar\", \"size\");\nChartPanel.prototype.publishProxy(\"progress_color\", \"_progressBar\", \"color\");\nChartPanel.prototype.publishProxy(\"progress_blurBar\", \"_progressBar\", \"blurBar\");\nChartPanel.prototype.publishProxy(\"progress_blurSize\", \"_progressBar\", \"blurSize\");\nChartPanel.prototype.publishProxy(\"progress_blurColor\", \"_progressBar\", \"blurColor\");\nChartPanel.prototype.publishProxy(\"progress_blurOpacity\", \"_progressBar\", \"blurOpacity\");\n\nChartPanel.prototype.widget = function (_?) {\n if (!arguments.length) return this._widget;\n this._carousel.widgets([_, this._table]);\n this._widget = _;\n this._widget\n .fields(this._legend.filteredFields())\n .data(this._legend.filteredData())\n ;\n\n const context = this;\n const tmpAny = this._widget as any;\n tmpAny.click = function () {\n context.click.apply(context, arguments);\n };\n tmpAny.dblclick = function () {\n context.dblclick.apply(context, arguments);\n };\n tmpAny.vertex_click = function () {\n context.vertex_click.apply(context, arguments);\n };\n tmpAny.vertex_dblclick = function () {\n context.vertex_dblclick.apply(context, arguments);\n };\n tmpAny.edge_click = function () {\n context.edge_click.apply(context, arguments);\n };\n tmpAny.edge_dblclick = function () {\n context.edge_dblclick.apply(context, arguments);\n };\n return this;\n};\n","import { HTMLWidget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/FlexGrid.css\";\n\nexport class FlexGrid extends HTMLWidget {\n constructor() {\n super();\n }\n enter(domNode, element) {\n super.enter(domNode, element);\n d3Select(domNode.parentNode)\n .style(\"height\", \"100%\")\n .style(\"width\", \"100%\")\n ;\n }\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n const cachedSizes = [];\n this.updateFlexParent(element);\n const listItems = element.selectAll(\".FlexGrid-list-item\").data(this.widgets(), w => w.id());\n listItems.enter()\n .append(\"div\")\n .classed(\"FlexGrid-list-item\", true)\n .each(function (w) {\n w.target(this);\n })\n .merge(listItems)\n .style(\"min-height\", this.itemMinHeight() + \"px\")\n .style(\"min-width\", this.itemMinWidth() + \"px\")\n .style(\"flex-basis\", (n, i) => {\n const flexBasis = this.widgetsFlexBasis()[i];\n return typeof flexBasis !== \"undefined\" ? flexBasis : this.flexBasis();\n })\n .style(\"flex-grow\", (n, i) => {\n const flexGrow = this.widgetsFlexGrow()[i];\n return typeof flexGrow !== \"undefined\" ? flexGrow : this.flexGrow();\n })\n .style(\"border-width\", this.borderWidth() + \"px\")\n .style(\"border-color\", this.itemBorderColor())\n .each(function () {\n this.firstChild.style.display = \"none\";\n })\n .each(function () {\n const rect = this.getBoundingClientRect();\n cachedSizes.push([\n rect.width,\n rect.height\n ]);\n })\n .each(function (w, i) {\n this.firstChild.style.display = \"block\";\n w.resize({\n width: cachedSizes[i][0] - (2 * context.borderWidth()),\n height: cachedSizes[i][1] - (2 * context.borderWidth())\n });\n })\n ;\n listItems.exit().remove();\n }\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n updateFlexParent(element) {\n element\n .style(\"height\", \"100%\")\n .style(\"flex-direction\", this.orientation() === \"horizontal\" ? \"row\" : \"column\")\n .style(\"flex-wrap\", this.flexWrap())\n .style(\"align-items\", this.alignItems())\n .style(\"align-content\", this.alignContent())\n .style(\"overflow-x\", () => {\n if (this.forceXScroll() || (this.orientation() === \"horizontal\" && this.flexWrap() === \"nowrap\" && !this.disableScroll())) {\n return \"scroll\";\n }\n return \"hidden\";\n })\n .style(\"overflow-y\", () => {\n if (this.forceYScroll() || (this.orientation() === \"vertical\" && this.flexWrap() === \"nowrap\" && !this.disableScroll())) {\n return \"scroll\";\n }\n return \"hidden\";\n })\n ;\n }\n}\nFlexGrid.prototype._class += \" layout_FlexGrid\";\n\nexport interface FlexGrid {\n widgets(): any;\n widgets(_: any): this;\n orientation(): \"horizontal\" | \"vertical\";\n orientation(_: \"horizontal\" | \"vertical\"): this;\n flexWrap(): \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n flexWrap(_: \"nowrap\" | \"wrap\" | \"wrap-reverse\"): this;\n itemMinHeight(): number;\n itemMinHeight(_: number): this;\n itemMinWidth(): number;\n itemMinWidth(_: number): this;\n alignItems(): \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\";\n alignItems(_: \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\"): this;\n alignContent(): \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\" | \"space-between\" | \"space-around\";\n alignContent(_: \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\" | \"space-between\" | \"space-around\"): this;\n itemBorderColor(): string;\n itemBorderColor(_: string): this;\n borderWidth(): number;\n borderWidth(_: number): this;\n flexGrow(): number;\n flexGrow(_: number): this;\n widgetsFlexGrow(): number[];\n widgetsFlexGrow(_: number[]): this;\n flexBasis(): string;\n flexBasis(_: string): this;\n widgetsFlexBasis(): string[];\n widgetsFlexBasis(_: string[]): this;\n disableScroll(): boolean;\n disableScroll(_: boolean): this;\n forceXScroll(): boolean;\n forceXScroll(_: boolean): this;\n forceYScroll(): boolean;\n forceYScroll(_: boolean): this;\n}\n\nFlexGrid.prototype.publish(\"itemBorderColor\", \"transparent\", \"html-color\", \"Color of list item borders\");\nFlexGrid.prototype.publish(\"borderWidth\", 0, \"number\", \"Width of list item borders (pixels)\");\nFlexGrid.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Controls the flex-direction of the list items\", [\"horizontal\", \"vertical\"]);\nFlexGrid.prototype.publish(\"flexWrap\", \"wrap\", \"set\", \"Controls the line wrap when overflow occurs\", [\"nowrap\", \"wrap\", \"wrap-reverse\"]);\nFlexGrid.prototype.publish(\"disableScroll\", false, \"boolean\", \"If false, scrollbar will show (when flexWrap is set to 'nowrap')\", null, { disable: (w: any) => w.flexWrap() !== \"nowrap\" });\nFlexGrid.prototype.publish(\"forceXScroll\", false, \"boolean\", \"If true, horzontal scrollbar will show\");\nFlexGrid.prototype.publish(\"forceYScroll\", false, \"boolean\", \"If true, vertical scrollbar will show\");\nFlexGrid.prototype.publish(\"itemMinHeight\", 64, \"number\", \"Minimum height of a list item (pixels)\");\nFlexGrid.prototype.publish(\"itemMinWidth\", 64, \"number\", \"Minimum width of a list item (pixels)\");\nFlexGrid.prototype.publish(\"alignItems\", \"stretch\", \"set\", \"Controls normal alignment of items\", [\"flex-start\", \"center\", \"flex-end\", \"stretch\"]);\nFlexGrid.prototype.publish(\"alignContent\", \"stretch\", \"set\", \"Controls normal alignment of item rows\", [\"flex-start\", \"center\", \"flex-end\", \"stretch\", \"space-between\", \"space-around\"]);\nFlexGrid.prototype.publish(\"flexGrow\", 1, \"number\", \"Default flex-grow style for all list items\");\nFlexGrid.prototype.publish(\"flexBasis\", \"10%\", \"string\", \"Default flex-basis style for all list items\");\nFlexGrid.prototype.publish(\"widgetsFlexGrow\", [], \"array\", \"Array of flex-grow values keyed on the widgets array\");\nFlexGrid.prototype.publish(\"widgetsFlexBasis\", [], \"array\", \"Array of flex-basis values keyed on the widgets array\");\nFlexGrid.prototype.publish(\"widgets\", [], \"widgetArray\", \"Array of widgets to be rendered as list items\");\n","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.GridList = factory();\n }\n}(this, function() {\n\nvar GridList = function(items, options) {\n /**\n * A GridList manages the two-dimensional positions from a list of items,\n * within a virtual matrix.\n *\n * The GridList's main function is to convert the item positions from one\n * grid size to another, maintaining as much of their order as possible.\n *\n * The GridList's second function is to handle collisions when moving an item\n * over another.\n *\n * The positioning algorithm places items in columns. Starting from left to\n * right, going through each column top to bottom.\n *\n * The size of an item is expressed using the number of cols and rows it\n * takes up within the grid (w and h)\n *\n * The position of an item is express using the col and row position within\n * the grid (x and y)\n *\n * An item is an object of structure:\n * {\n * w: 3, h: 1,\n * x: 0, y: 1\n * }\n */\n\n this._options = options;\n for (var k in this.defaults) {\n if (!this._options.hasOwnProperty(k)) {\n this._options[k] = this.defaults[k];\n }\n }\n\n this.items = items;\n\n this._adjustSizeOfItems();\n\n this.generateGrid();\n};\n\nGridList.cloneItems = function(items, _items) {\n /**\n * Clone items with a deep level of one. Items are not referenced but their\n * properties are\n */\n var _item,\n i,\n k;\n if (_items === undefined) {\n _items = [];\n }\n for (i = 0; i < items.length; i++) {\n // XXX: this is good because we don't want to lose item reference, but\n // maybe we should clear their properties since some might be optional\n if (!_items[i]) {\n _items[i] = {};\n }\n for (k in items[i]) {\n _items[i][k] = items[i][k];\n }\n }\n return _items;\n};\n\nGridList.prototype = {\n\n defaults: {\n lanes: 5,\n direction: 'horizontal'\n },\n\n /**\n * Illustates grid as text-based table, using a number identifier for each\n * item. E.g.\n *\n * #| 0 1 2 3 4 5 6 7 8 9 10 11 12 13\n * --------------------------------------------\n * 0| 00 02 03 04 04 06 08 08 08 12 12 13 14 16\n * 1| 01 -- 03 05 05 07 09 10 11 11 -- 13 15 --\n *\n * Warn: Does not work if items don't have a width or height specified\n * besides their position in the grid.\n */\n toString: function() {\n var widthOfGrid = this.grid.length,\n output = '\\n #|',\n border = '\\n --',\n item,\n i,\n j;\n\n // Render the table header\n for (i = 0; i < widthOfGrid; i++) {\n output += ' ' + this._padNumber(i, ' ');\n border += '---';\n };\n output += border;\n\n // Render table contents row by row, as we go on the y axis\n for (i = 0; i < this._options.lanes; i++) {\n output += '\\n' + this._padNumber(i, ' ') + '|';\n for (j = 0; j < widthOfGrid; j++) {\n output += ' ';\n item = this.grid[j][i];\n output += item ? this._padNumber(this.items.indexOf(item), '0') : '--';\n }\n };\n output += '\\n';\n return output;\n },\n\n generateGrid: function() {\n /**\n * Build the grid structure from scratch, with the current item positions\n */\n var i;\n this._resetGrid();\n for (i = 0; i < this.items.length; i++) {\n this._markItemPositionToGrid(this.items[i]);\n }\n },\n\n resizeGrid: function(lanes) {\n var currentColumn = 0;\n\n this._options.lanes = lanes;\n this._adjustSizeOfItems();\n\n this._sortItemsByPosition();\n this._resetGrid();\n\n // The items will be sorted based on their index within the this.items array,\n // that is their \"1d position\"\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i],\n position = this._getItemPosition(item);\n\n this._updateItemPosition(\n item, this.findPositionForItem(item, {x: currentColumn, y: 0}));\n\n // New items should never be placed to the left of previous items\n currentColumn = Math.max(currentColumn, position.x);\n }\n\n this._pullItemsToLeft();\n },\n\n findPositionForItem: function(item, start, fixedRow) {\n /**\n * This method has two options for the position we want for the item:\n * - Starting from a certain row/column number and only looking for\n * positions to its right\n * - Accepting positions for a certain row number only (use-case: items\n * being shifted to the left/right as a result of collisions)\n *\n * @param {Object<x:Number, y:Number, w:Number, h:Number} item\n * @param {Object<x:Number, y:Number} start Position from which to start\n * the search.\n * @param {Number} [fixedRow] If provided, we're going to try to find a\n * position for the new item on it. If doesn't fit there, we're going\n * to put it on the first row.\n *\n * @returns {Number[2]} x and y.\n */\n\n var x, y, position;\n\n // Start searching for a position from the horizontal position of the\n // rightmost item from the grid\n for (x = start.x; x < this.grid.length; x++) {\n if (fixedRow !== undefined) {\n position = [x, fixedRow];\n\n if (this._itemFitsAtPosition(item, position)) {\n return position;\n }\n } else {\n for (y = start.y; y < this._options.lanes; y++) {\n position = [x, y];\n\n if (this._itemFitsAtPosition(item, position)) {\n return position;\n }\n }\n }\n }\n\n // If we've reached this point, we need to start a new column\n var newCol = this.grid.length,\n newRow = 0;\n\n if (fixedRow !== undefined &&\n this._itemFitsAtPosition(item, [newCol, fixedRow])) {\n newRow = fixedRow;\n }\n\n return [newCol, newRow];\n },\n\n moveItemToPosition: function(item, newPosition) {\n var position = this._getItemPosition({\n x: newPosition[0],\n y: newPosition[1],\n w: item.w,\n h: item.h\n });\n\n this._updateItemPosition(item, [position.x, position.y]);\n this._resolveCollisions(item);\n },\n\n resizeItem: function(item, size) {\n /**\n * Resize an item and resolve collisions.\n *\n * @param {Object} item A reference to an item that's part of the grid.\n * @param {Object} size\n * @param {Number} [size.w=item.w] The new width.\n * @param {Number} [size.h=item.h] The new height.\n */\n\n var width = size.w || item.w,\n height = size.h || item.h;\n\n this._updateItemSize(item, width, height);\n\n this._resolveCollisions(item);\n\n this._pullItemsToLeft();\n },\n\n getChangedItems: function(initialItems, idAttribute) {\n /**\n * Compare the current items against a previous snapshot and return only\n * the ones that changed their attributes in the meantime. This includes both\n * position (x, y) and size (w, h)\n *\n * Since both their position and size can change, the items need an\n * additional identifier attribute to match them with their previous state\n */\n var changedItems = [];\n\n for (var i = 0; i < initialItems.length; i++) {\n var item = this._getItemByAttribute(idAttribute,\n initialItems[i][idAttribute]);\n\n if (item.x !== initialItems[i].x ||\n item.y !== initialItems[i].y ||\n item.w !== initialItems[i].w ||\n item.h !== initialItems[i].h) {\n changedItems.push(item);\n }\n }\n\n return changedItems;\n },\n\n _sortItemsByPosition: function() {\n this.items.sort(function(item1, item2) {\n var position1 = this._getItemPosition(item1),\n position2 = this._getItemPosition(item2);\n\n // Try to preserve columns.\n if (position1.x != position2.x) {\n return position1.x - position2.x;\n }\n\n if (position1.y != position2.y) {\n return position1.y - position2.y;\n }\n\n // The items are placed on the same position.\n return 0;\n }.bind(this));\n },\n\n _adjustSizeOfItems: function() {\n /**\n * Some items can have 100% height or 100% width. Those dimmensions are\n * expressed as 0. We need to ensure a valid width and height for each of\n * those items as the number of items per lane.\n */\n\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n\n // This can happen only the first time items are checked.\n // We need the property to have a value for all the items so that the\n // `cloneItems` method will merge the properties properly. If we only set\n // it to the items that need it then the following can happen:\n //\n // cloneItems([{id: 1, autoSize: true}, {id: 2}],\n // [{id: 2}, {id: 1, autoSize: true}]);\n //\n // will result in\n //\n // [{id: 1, autoSize: true}, {id: 2, autoSize: true}]\n if (item.autoSize === undefined) {\n item.autoSize = item.w === 0 || item.h === 0;\n }\n\n if (item.autoSize) {\n if (this._options.direction === 'horizontal') {\n item.h = this._options.lanes;\n } else {\n item.w = this._options.lanes;\n }\n }\n }\n },\n\n _resetGrid: function() {\n this.grid = [];\n },\n\n _itemFitsAtPosition: function(item, newPosition) {\n /**\n * Check that an item wouldn't overlap with another one if placed at a\n * certain position within the grid\n */\n\n var position = this._getItemPosition(item),\n x, y, row;\n\n // No coordonate can be negative\n if (newPosition[0] < 0 || newPosition[1] < 0) {\n return false;\n }\n\n // Make sure the item isn't larger than the entire grid\n if (newPosition[1] + position.h > this._options.lanes) {\n return false;\n }\n\n // Make sure the position doesn't overlap with an already positioned\n // item.\n for (x = newPosition[0]; x < newPosition[0] + position.w; x++) {\n var col = this.grid[x];\n\n // Surely a column that hasn't even been created yet is available\n if (!col) {\n continue;\n }\n\n for (y = newPosition[1]; y < newPosition[1] + position.h; y++) {\n // Any space occupied by an item can continue to be occupied by the\n // same item.\n if (col[y] && col[y] !== item) {\n return false;\n }\n }\n }\n\n return true;\n },\n\n _updateItemPosition: function(item, position) {\n if (item.x !== null && item.y !== null) {\n this._deleteItemPositionFromGrid(item);\n }\n\n this._setItemPosition(item, position);\n\n this._markItemPositionToGrid(item);\n },\n\n _updateItemSize: function(item, width, height) {\n /**\n * @param {Object} item A reference to a grid item.\n * @param {Number} width The new width.\n * @param {Number} height The new height.\n */\n\n if (item.x !== null && item.y !== null) {\n this._deleteItemPositionFromGrid(item);\n }\n\n item.w = width;\n item.h = height;\n\n this._markItemPositionToGrid(item);\n },\n\n _markItemPositionToGrid: function(item) {\n /**\n * Mark the grid cells that are occupied by an item. This prevents items\n * from overlapping in the grid\n */\n\n var position = this._getItemPosition(item),\n x, y;\n\n // Ensure that the grid has enough columns to accomodate the current item.\n this._ensureColumns(position.x + position.w);\n\n for (x = position.x; x < position.x + position.w; x++) {\n for (y = position.y; y < position.y + position.h; y++) {\n this.grid[x][y] = item;\n }\n }\n },\n\n _deleteItemPositionFromGrid: function(item) {\n var position = this._getItemPosition(item),\n x, y;\n\n for (x = position.x; x < position.x + position.w; x++) {\n // It can happen to try to remove an item from a position not generated\n // in the grid, probably when loading a persisted grid of items. No need\n // to create a column to be able to remove something from it, though\n if (!this.grid[x]) {\n continue;\n }\n\n for (y = position.y; y < position.y + position.h; y++) {\n // Don't clear the cell if it's been occupied by a different widget in\n // the meantime (e.g. when an item has been moved over this one, and\n // thus by continuing to clear this item's previous position you would\n // cancel the first item's move, leaving it without any position even)\n if (this.grid[x][y] == item) {\n this.grid[x][y] = null;\n }\n }\n }\n },\n\n _ensureColumns: function(N) {\n /**\n * Ensure that the grid has at least N columns available.\n */\n var i;\n for (i = 0; i < N; i++) {\n if (!this.grid[i]) {\n this.grid.push(new GridCol(this._options.lanes));\n }\n }\n },\n\n _getItemsCollidingWithItem: function(item) {\n var collidingItems = [];\n for (var i = 0; i < this.items.length; i++) {\n if (item != this.items[i] &&\n this._itemsAreColliding(item, this.items[i])) {\n collidingItems.push(i);\n }\n }\n return collidingItems;\n },\n\n _itemsAreColliding: function(item1, item2) {\n var position1 = this._getItemPosition(item1),\n position2 = this._getItemPosition(item2);\n\n return !(position2.x >= position1.x + position1.w ||\n position2.x + position2.w <= position1.x ||\n position2.y >= position1.y + position1.h ||\n position2.y + position2.h <= position1.y);\n },\n\n _resolveCollisions: function(item) {\n if (!this._tryToResolveCollisionsLocally(item)) {\n this._pullItemsToLeft(item);\n }\n this._pullItemsToLeft();\n },\n\n _tryToResolveCollisionsLocally: function(item) {\n /**\n * Attempt to resolve the collisions after moving a an item over one or more\n * other items within the grid, by shifting the position of the colliding\n * items around the moving one. This might result in subsequent collisions,\n * in which case we will revert all position permutations. To be able to\n * revert to the initial item positions, we create a virtual grid in the\n * process\n */\n var collidingItems = this._getItemsCollidingWithItem(item);\n if (!collidingItems.length) {\n return true;\n }\n var _gridList = new GridList([], this._options),\n leftOfItem,\n rightOfItem,\n aboveOfItem,\n belowOfItem;\n\n GridList.cloneItems(this.items, _gridList.items);\n _gridList.generateGrid();\n\n for (var i = 0; i < collidingItems.length; i++) {\n var collidingItem = _gridList.items[collidingItems[i]],\n collidingPosition = this._getItemPosition(collidingItem);\n\n // We use a simple algorithm for moving items around when collisions occur:\n // In this prioritized order, we try to move a colliding item around the\n // moving one:\n // 1. to its left side\n // 2. above it\n // 3. under it\n // 4. to its right side\n var position = this._getItemPosition(item);\n\n leftOfItem = [position.x - collidingPosition.w, collidingPosition.y];\n rightOfItem = [position.x + position.w, collidingPosition.y];\n aboveOfItem = [collidingPosition.x, position.y - collidingPosition.h];\n belowOfItem = [collidingPosition.x, position.y + position.h];\n\n if (_gridList._itemFitsAtPosition(collidingItem, leftOfItem)) {\n _gridList._updateItemPosition(collidingItem, leftOfItem);\n } else if (_gridList._itemFitsAtPosition(collidingItem, aboveOfItem)) {\n _gridList._updateItemPosition(collidingItem, aboveOfItem);\n } else if (_gridList._itemFitsAtPosition(collidingItem, belowOfItem)) {\n _gridList._updateItemPosition(collidingItem, belowOfItem);\n } else if (_gridList._itemFitsAtPosition(collidingItem, rightOfItem)) {\n _gridList._updateItemPosition(collidingItem, rightOfItem);\n } else {\n // Collisions failed, we must use the pullItemsToLeft method to arrange\n // the other items around this item with fixed position. This is our\n // plan B for when local collision resolving fails.\n return false;\n }\n }\n // If we reached this point it means we managed to resolve the collisions\n // from one single iteration, just by moving the colliding items around. So\n // we accept this scenario and marge the brached-out grid instance into the\n // original one\n GridList.cloneItems(_gridList.items, this.items);\n this.generateGrid();\n return true;\n },\n\n _pullItemsToLeft: function(fixedItem) {\n /**\n * Build the grid from scratch, by using the current item positions and\n * pulling them as much to the left as possible, removing as space between\n * them as possible.\n *\n * If a \"fixed item\" is provided, its position will be kept intact and the\n * rest of the items will be layed around it.\n */\n\n\n // Start a fresh grid with the fixed item already placed inside\n this._sortItemsByPosition();\n this._resetGrid();\n\n // Start the grid with the fixed item as the first positioned item\n if (fixedItem) {\n var fixedPosition = this._getItemPosition(fixedItem);\n this._updateItemPosition(fixedItem, [fixedPosition.x, fixedPosition.y]);\n }\n\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i],\n position = this._getItemPosition(item);\n\n // The fixed item keeps its exact position\n if (fixedItem && item == fixedItem) {\n continue;\n }\n\n var x = this._findLeftMostPositionForItem(item),\n newPosition = this.findPositionForItem(\n item, {x: x, y: 0}, position.y);\n\n this._updateItemPosition(item, newPosition);\n }\n },\n\n _findLeftMostPositionForItem: function(item) {\n /**\n * When pulling items to the left, we need to find the leftmost position for\n * an item, with two considerations in mind:\n * - preserving its current row\n * - preserving the previous horizontal order between items\n */\n\n var tail = 0,\n position = this._getItemPosition(item);\n\n for (var i = 0; i < this.grid.length; i++) {\n for (var j = position.y; j < position.y + position.h; j++) {\n var otherItem = this.grid[i][j];\n\n if (!otherItem) {\n continue;\n }\n\n var otherPosition = this._getItemPosition(otherItem);\n\n if (this.items.indexOf(otherItem) < this.items.indexOf(item)) {\n tail = otherPosition.x + otherPosition.w;\n }\n }\n }\n\n return tail;\n },\n\n _getItemByAttribute: function(key, value) {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i][key] === value) {\n return this.items[i];\n }\n }\n return null;\n },\n\n _padNumber: function(nr, prefix) {\n // Currently works for 2-digit numbers (<100)\n return nr >= 10 ? nr : prefix + nr;\n },\n\n _getItemPosition: function(item) {\n /**\n * If the direction is vertical we need to rotate the grid 90 deg to the\n * left. Thus, we simulate the fact that items are being pulled to the top.\n *\n * Since the items have widths and heights, if we apply the classic\n * counter-clockwise 90 deg rotation\n *\n * [0 -1]\n * [1 0]\n *\n * then the top left point of an item will become the bottom left point of\n * the rotated item. To adjust for this, we need to subtract from the y\n * position the height of the original item - the width of the rotated item.\n *\n * However, if we do this then we'll reverse some actions: resizing the\n * width of an item will stretch the item to the left instead of to the\n * right; resizing an item that doesn't fit into the grid will push the\n * items around it instead of going on a new row, etc.\n *\n * We found it better to do a vertical flip of the grid after rotating it.\n * This restores the direction of the actions and greatly simplifies the\n * transformations.\n */\n\n if (this._options.direction === 'horizontal') {\n return item;\n } else {\n return {\n x: item.y,\n y: item.x,\n w: item.h,\n h: item.w\n };\n }\n },\n\n _setItemPosition: function(item, position) {\n /**\n * See _getItemPosition.\n */\n\n if (this._options.direction === 'horizontal') {\n item.x = position[0];\n item.y = position[1];\n } else {\n // We're supposed to subtract the rotated item's height which is actually\n // the non-rotated item's width.\n item.x = position[1];\n item.y = position[0];\n }\n }\n};\n\nvar GridCol = function(lanes) {\n for (var i = 0; i < lanes; i++) {\n this.push(null);\n }\n};\n\n// Extend the Array prototype\nGridCol.prototype = [];\n\n// This module will have direct access to the GridList class\nreturn GridList;\n\n}));\n","import { d3Event, drag as d3Drag, HTMLWidget, Platform, select as d3Select, Utility } from \"@hpcc-js/common\";\nimport * as _GridList from \"grid-list\";\nimport { Cell } from \"./Cell.ts\";\n\nimport \"../src/Grid.css\";\n\nconst GridList = (_GridList && _GridList.default) || _GridList;\n\nexport type ICellPosition = [number, number, number, number];\n\nexport class Grid extends HTMLWidget {\n divItems;\n\n gridList;\n items;\n itemsMap;\n origItems;\n cellWidth;\n cellHeight;\n dragItem;\n dragItemPos;\n\n _d3Drag;\n _d3DragResize;\n _selectionBag;\n _scrollBarWidth;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n this._selectionBag = new Utility.Selection(this);\n\n this.content([]);\n }\n\n getDimensions() {\n const size = { width: 0, height: 0 };\n this.content().forEach(function (cell) {\n if (size.width < cell.gridCol() + cell.gridColSpan()) {\n size.width = cell.gridCol() + cell.gridColSpan();\n }\n if (size.height < cell.gridRow() + cell.gridRowSpan()) {\n size.height = cell.gridRow() + cell.gridRowSpan();\n }\n }, this);\n return size;\n }\n\n clearContent(widget) {\n this.content(this.content().filter(function (contentWidget) {\n if (!widget) {\n contentWidget.target(null);\n return false;\n }\n let w: any = contentWidget;\n while (w) {\n if (widget === w) {\n contentWidget.target(null);\n return false;\n }\n w = w.widget ? w.widget() : null;\n }\n return true;\n }));\n }\n\n setContent(row, col, widget, title?, rowSpan?, colSpan?) {\n rowSpan = rowSpan || 1;\n colSpan = colSpan || 1;\n title = title || \"\";\n this.content(this.content().filter(function (contentWidget) {\n if (contentWidget.gridRow() === row && contentWidget.gridCol() === col) {\n contentWidget.target(null);\n return false;\n }\n return true;\n }));\n if (widget) {\n const cell = new Cell()\n .gridRow(row)\n .gridCol(col)\n .widget(widget)\n .title(title)\n .gridRowSpan(rowSpan)\n .gridColSpan(colSpan)\n ;\n this.content().push(cell);\n }\n return this;\n }\n\n sortedContent() {\n return this.content().sort(function (l, r) {\n if (l.gridRow() === r.gridRow()) {\n return l.gridCol() - r.gridCol();\n }\n return l.gridRow() - r.gridRow();\n });\n }\n\n getCell(row, col) {\n let retVal = null;\n this.content().some(function (cell) {\n if (row >= cell.gridRow() && row < cell.gridRow() + cell.gridRowSpan() &&\n col >= cell.gridCol() && col < cell.gridCol() + cell.gridColSpan()) {\n retVal = cell;\n return true;\n }\n return false;\n });\n return retVal;\n }\n\n getWidgetCell(id) {\n let retVal = null;\n this.content().some(function (cell) {\n if (cell.widget().id() === id) {\n retVal = cell;\n return true;\n }\n return false;\n });\n return retVal;\n }\n\n getContent(id) {\n let retVal = null;\n this.content().some(function (cell) {\n if (cell.widget().id() === id) {\n retVal = cell.widget();\n return true;\n }\n return false;\n });\n return retVal;\n }\n\n cellToGridItem(cell) {\n return {\n x: cell.gridCol(),\n y: cell.gridRow(),\n w: cell.gridColSpan(),\n h: cell.gridRowSpan(),\n id: cell.id(),\n cell\n };\n }\n\n gridItemToCell(item) {\n item.cell\n .gridCol(item.x)\n .gridRow(item.y)\n .gridColSpan(item.w)\n .gridRowSpan(item.h)\n ;\n }\n\n resetItemsPos() {\n this.origItems.forEach(function (origItem) {\n const item = this.itemsMap[origItem.id];\n item.x = origItem.x;\n item.y = origItem.y;\n }, this);\n }\n\n initGridList() {\n this.itemsMap = {};\n this.items = this.content().map(function (cell) {\n const retVal = this.cellToGridItem(cell);\n this.itemsMap[retVal.id] = retVal;\n return retVal;\n }, this);\n this.origItems = this.content().map(this.cellToGridItem);\n this.gridList = new GridList(this.items, {\n direction: this.snapping(),\n lanes: this.snapping() === \"horizontal\" ? this.snappingRows() : this.snappingColumns()\n });\n }\n\n killGridList() {\n this.gridList = null;\n delete this.items;\n delete this.itemsMap;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._scrollBarWidth = Platform.getScrollbarWidth();\n\n const context = this;\n this._d3Drag = d3Drag()\n .subject(function (_d) {\n const d = context.cellToGridItem(_d);\n return { x: d.x * context.cellWidth, y: d.y * context.cellHeight };\n })\n .on(\"start\", function (_d: any) {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.initGridList();\n const d = context.itemsMap[_d.id()];\n context.dragItem = element.append(\"div\")\n .attr(\"class\", \"dragging\")\n .style(\"transform\", function () { return \"translate(\" + d.x * context.cellWidth + \"px, \" + d.y * context.cellHeight + \"px)\"; })\n .style(\"width\", function () { return d.w * context.cellWidth - context.gutter() + \"px\"; })\n .style(\"height\", function () { return d.h * context.cellHeight - context.gutter() + \"px\"; })\n ;\n context.selectionBagClick(_d);\n })\n .on(\"drag\", function (_d: any) {\n if (!context.designMode()) return;\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n const d = context.itemsMap[_d.id()];\n if (event.x < 0) {\n event.x = 0;\n }\n if (event.x + d.w * context.cellWidth > context.snappingColumns() * context.cellWidth) {\n event.x = context.snappingColumns() * context.cellWidth - d.w * context.cellWidth;\n }\n if (event.y < 0) {\n event.y = 0;\n }\n if (event.y + d.h * context.cellWidth > context.snappingRows() * context.cellWidth) {\n event.y = context.snappingRows() * context.cellWidth - d.h * context.cellWidth;\n }\n const pos = [Math.max(0, Math.floor((event.x + context.cellWidth / 2) / context.cellWidth)), Math.max(0, Math.floor((event.y + context.cellHeight / 2) / context.cellHeight))];\n if (d.x !== pos[0] || d.y !== pos[1]) {\n if (context.snapping() !== \"none\") {\n context.resetItemsPos();\n context.gridList.moveItemToPosition(d, pos);\n } else {\n d.x = pos[0];\n d.y = pos[1];\n }\n if (_d.gridCol() !== d.x || _d.gridRow() !== d.y) {\n context.items.forEach(context.gridItemToCell);\n context.updateGrid(false, 100);\n }\n }\n context.dragItem\n .style(\"transform\", function () { return \"translate(\" + event.x + \"px, \" + event.y + \"px)\"; })\n .style(\"width\", function () { return d.w * context.cellWidth + \"px\"; })\n .style(\"height\", function () { return d.h * context.cellHeight + \"px\"; })\n ;\n })\n .on(\"end\", function () {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.dragItem.remove();\n context.dragItem = null;\n context.killGridList();\n })\n ;\n\n this._d3DragResize = d3Drag()\n .subject(function (_d) {\n const d = context.cellToGridItem(_d);\n return { x: (d.x + d.w - 1) * context.cellWidth, y: (d.y + d.h - 1) * context.cellHeight };\n })\n .on(\"start\", function (_d: any) {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.initGridList();\n const d = context.itemsMap[_d.id()];\n context.dragItem = element.append(\"div\")\n .attr(\"class\", \"resizing\")\n .style(\"transform\", function () { return \"translate(\" + d.x * context.cellWidth + \"px, \" + d.y * context.cellHeight + \"px)\"; })\n .style(\"width\", function () { return d.w * context.cellWidth - context.gutter() + \"px\"; })\n .style(\"height\", function () { return d.h * context.cellHeight - context.gutter() + \"px\"; })\n ;\n context.dragItemPos = { x: d.x, y: d.y };\n })\n .on(\"drag\", function (_d: any) {\n if (!context.designMode()) return;\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n const d = context.itemsMap[_d.id()];\n const pos = [Math.max(0, Math.round(event.x / context.cellWidth)), Math.max(0, Math.round(event.y / context.cellHeight))];\n const size = {\n w: Math.max(1, pos[0] - d.x + 1),\n h: Math.max(1, pos[1] - d.y + 1)\n };\n if (d.w !== size.w || d.h !== size.h) {\n if (context.snapping() !== \"none\") {\n context.resetItemsPos();\n context.gridList.resizeItem(d, size);\n } else {\n d.w = size.w;\n d.h = size.h;\n }\n if (_d.gridColSpan() !== d.w || _d.gridRowSpan() !== d.h) {\n context.items.forEach(context.gridItemToCell);\n context.updateGrid(d.id, 100);\n }\n }\n context.dragItem\n .style(\"width\", function () { return (-d.x + 1) * context.cellWidth + event.x - context.gutter() + \"px\"; })\n .style(\"height\", function () { return (-d.y + 1) * context.cellHeight + event.y - context.gutter() + \"px\"; })\n ;\n })\n .on(\"end\", function () {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.dragItem.remove();\n context.dragItem = null;\n context.killGridList();\n })\n ;\n }\n\n updateGrid(resize, transitionDuration: number = 0, _noRender: boolean = false) {\n transitionDuration = transitionDuration || 0;\n const context = this;\n this.divItems\n .classed(\"draggable\", this.designMode())\n .transition().duration(transitionDuration)\n .style(\"left\", function (d) { return d.gridCol() * context.cellWidth + context.gutter() / 2 + \"px\"; })\n .style(\"top\", function (d) { return d.gridRow() * context.cellHeight + context.gutter() / 2 + \"px\"; })\n .style(\"width\", function (d) { return d.gridColSpan() * context.cellWidth - context.gutter() + \"px\"; })\n .style(\"height\", function (d) { return d.gridRowSpan() * context.cellHeight - context.gutter() + \"px\"; })\n .on(\"end\", function (d) {\n d\n .surfaceShadow_default(context.surfaceShadow())\n .surfacePadding_default(context.surfacePadding())\n .surfaceBorderWidth_default(context.surfaceBorderWidth())\n .surfaceBackgroundColor_default(context.surfaceBackgroundColor())\n ;\n\n if (resize === true || resize === d.id()) {\n d\n .resize()\n .lazyRender()\n ;\n }\n })\n ;\n }\n\n update(domNode, element2) {\n super.update(domNode, element2);\n\n this._placeholderElement.style(\"overflow-x\", this.fitTo() === \"width\" ? \"hidden\" : null);\n this._placeholderElement.style(\"overflow-y\", this.fitTo() === \"width\" ? \"scroll\" : null);\n const dimensions = this.getDimensions();\n const clientWidth = this.width() - (this.fitTo() === \"width\" ? this._scrollBarWidth : 0);\n this.cellWidth = clientWidth / dimensions.width;\n this.cellHeight = this.fitTo() === \"all\" ? this.height() / dimensions.height : this.cellWidth;\n if (this.designMode()) {\n const cellLaneRatio = Math.min(this.width() / this.snappingColumns(), this.height() / this.snappingRows());\n const laneWidth = Math.floor(cellLaneRatio);\n this.cellWidth = laneWidth;\n this.cellHeight = this.cellWidth;\n }\n\n // Grid ---\n const context = this;\n const divItems = element2.selectAll(\"#\" + this.id() + \" > .ddCell\").data(this.content(), function (d) { return d.id(); });\n this.divItems = divItems.enter().append(\"div\")\n .attr(\"class\", \"ddCell\")\n .each(function (d) {\n d.target(this);\n d.__grid_watch = d.monitor(function (key, newVal, oldVal) {\n if (context._renderCount && (key === \"snapping\" || key.indexOf(\"grid\") === 0) && newVal !== oldVal) {\n if (!context.gridList) {\n // API Call (only needed when not dragging) ---\n context.initGridList();\n if (context.snapping() !== \"none\") {\n context.gridList.resizeGrid(context.snapping() === \"horizontal\" ? context.snappingRows() : context.snappingColumns());\n }\n context.items.forEach(context.gridItemToCell);\n context.updateGrid(d.id(), 100);\n context.killGridList();\n }\n }\n });\n const element = d3Select(this);\n element.append(\"div\")\n .attr(\"class\", \"resizeHandle\")\n .call(context._d3DragResize)\n .append(\"div\")\n .attr(\"class\", \"resizeHandleDisplay\")\n ;\n }).merge(divItems)\n ;\n this.divItems.each(function (d) {\n const element = d3Select(this);\n if (context.designMode()) {\n element.call(context._d3Drag);\n } else {\n element\n .on(\"mousedown.drag\", null)\n .on(\"touchstart.drag\", null)\n ;\n }\n });\n this.divItems.select(\".resizeHandle\")\n .style(\"display\", this.designMode() ? null : \"none\")\n ;\n\n this.updateGrid(true);\n divItems.exit()\n .each(function (d) {\n d.target(null);\n if (d.__grid_watch) {\n d.__grid_watch.remove();\n }\n })\n .remove()\n ;\n\n // Snapping ---\n const lanesBackground = element2.selectAll(\"#\" + this.id() + \" > .laneBackground\").data(this.designMode() ? [\"\"] : []);\n lanesBackground.enter().insert(\"div\", \":first-child\")\n .attr(\"class\", \"laneBackground\")\n .style(\"left\", \"1px\")\n .style(\"top\", \"1px\")\n .on(\"click\", function () {\n context.selectionBagClear();\n })\n .merge(lanesBackground)\n .style(\"width\", (this.snappingColumns() * this.cellWidth) + \"px\")\n .style(\"height\", (this.snappingRows() * this.cellHeight) + \"px\")\n ;\n lanesBackground.exit()\n .each(function () {\n context.selectionBagClear();\n })\n .remove()\n ;\n\n const lanes = element2.selectAll(\"#\" + this.id() + \" > .lane\").data(this.designMode() ? [\"\"] : []);\n lanes.enter().append(\"div\")\n .attr(\"class\", \"lane\")\n .style(\"left\", \"1px\")\n .style(\"top\", \"1px\")\n ;\n lanes\n .style(\"display\", this.showLanes() ? null : \"none\")\n .style(\"width\", (this.snappingColumns() * this.cellWidth) + \"px\")\n .style(\"height\", (this.snappingRows() * this.cellHeight) + \"px\")\n .style(\"background-image\", \"linear-gradient(to right, grey 1px, transparent 1px), linear-gradient(to bottom, grey 1px, transparent 1px)\")\n .style(\"background-size\", this.cellWidth + \"px \" + this.cellHeight + \"px\")\n ;\n lanes.exit()\n .remove()\n ;\n }\n\n exit(domNode, element) {\n this.content().forEach(w => w.target(null));\n super.exit(domNode, element);\n }\n\n _createSelectionObject(d) {\n return {\n _id: d._id,\n element: () => {\n return d._element;\n },\n widget: d\n };\n }\n\n selection(_) {\n if (!arguments.length) return this._selectionBag.get().map(function (d) { return d._id; });\n this._selectionBag.set(_.map(function (row) {\n return this._createSelectionObject(row);\n }, this));\n return this;\n }\n\n selectionBagClear() {\n if (!this._selectionBag.isEmpty()) {\n this._selectionBag.clear();\n this.postSelectionChange();\n }\n }\n\n selectionBagClick(d) {\n if (d !== null) {\n const selectionObj = this._createSelectionObject(d);\n if (d3Event().sourceEvent.ctrlKey) {\n if (this._selectionBag.isSelected(selectionObj)) {\n this._selectionBag.remove(selectionObj);\n this.postSelectionChange();\n } else {\n this._selectionBag.append(selectionObj);\n this.postSelectionChange();\n }\n } else {\n const selected = this._selectionBag.get();\n if (selected.length === 1 && selected[0]._id === selectionObj._id) {\n this.selectionBagClear();\n } else {\n this._selectionBag.set([selectionObj]);\n }\n this.postSelectionChange();\n }\n }\n }\n\n postSelectionChange() {\n }\n\n applyLayout(layoutArr: ICellPosition[]) {\n this.divItems.each((d, i) => {\n if (layoutArr[i]) {\n const [x, y, w, h] = layoutArr[i];\n d\n .gridCol(x)\n .gridRow(y)\n .gridColSpan(w)\n .gridRowSpan(h)\n ;\n }\n });\n this.updateGrid(true);\n }\n\n vizActivation(elem) {\n }\n}\nGrid.prototype._class += \" layout_Grid\";\n\nexport interface Grid {\n designMode(): boolean;\n designMode(_: boolean): this;\n showLanes(): boolean;\n showLanes(_: boolean): this;\n fitTo(): string;\n fitTo(_: string): this;\n\n snapping(): string;\n snapping(_: string): this;\n snappingColumns(): number;\n snappingColumns(_: number): this;\n snappingRows(): number;\n snappingRows(_: number): this;\n snappingColumns_default(): number;\n snappingColumns_default(_: number): this;\n snappingRows_default(): number;\n snappingRows_default(_: number): this;\n\n gutter(): number;\n gutter(_: number): this;\n\n surfaceShadow(): boolean;\n surfaceShadow(_: boolean): this;\n surfacePadding(): string;\n surfacePadding(_: string): this;\n surfaceBorderWidth(): number;\n surfaceBorderWidth(_: number): this;\n surfaceBackgroundColor(): string;\n surfaceBackgroundColor(_: string): this;\n\n content(): Cell[];\n content(_: Cell[]): this;\n}\n\nGrid.prototype.publish(\"designMode\", false, \"boolean\", \"Design Mode\", null, { tags: [\"Basic\"] });\nGrid.prototype.publish(\"showLanes\", true, \"boolean\", \"Show snapping lanes when in design mode\", null, { tags: [\"Basic\"], disable: w => !w.designMode() });\nGrid.prototype.publish(\"fitTo\", \"all\", \"set\", \"Sizing Strategy\", [\"all\", \"width\"], { tags: [\"Basic\"] });\nGrid.prototype.publish(\"snapping\", \"vertical\", \"set\", \"Snapping Strategy\", [\"vertical\", \"horizontal\", \"none\"]);\nGrid.prototype.publish(\"snappingColumns\", 12, \"number\", \"Snapping Columns\");\nGrid.prototype.publish(\"snappingRows\", 16, \"number\", \"Snapping Rows\");\n\nGrid.prototype.publish(\"gutter\", 6, \"number\", \"Gap Between Widgets\", null, { tags: [\"Basic\"] });\n\nGrid.prototype.publish(\"surfaceShadow\", true, \"boolean\", \"3D Shadow\");\nGrid.prototype.publish(\"surfacePadding\", null, \"string\", \"Cell Padding (px)\", null, { tags: [\"Intermediate\"] });\nGrid.prototype.publish(\"surfaceBorderWidth\", 1, \"number\", \"Width (px) of Cell Border\", null, { tags: [\"Intermediate\"] });\nGrid.prototype.publish(\"surfaceBackgroundColor\", null, \"html-color\", \"Surface Background Color\", null, { tags: [\"Advanced\"] });\n\nGrid.prototype.publish(\"content\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Basic\"], render: false });\n","import { FlexGrid } from \"./FlexGrid.ts\";\n\nexport class HorizontalList extends FlexGrid {\n constructor() {\n super();\n this.orientation_default(\"horizontal\");\n this.flexWrap_default(\"nowrap\");\n }\n}\nHorizontalList.prototype._class += \" layout_HorizontalList\";\n\nexport interface HorizontalList {\n orientation_default(_: \"horizontal\" | \"vertical\");\n flexWrap_default(_: \"nowrap\" | \"wrap\" | \"wrap-reverse\");\n}\n","import { HTMLWidget, Text } from \"@hpcc-js/common\";\n\nimport \"../src/Layered.css\";\n\nexport type LayerPlacement = \"default\" | \"top\" | \"right\" | \"bottom\" | \"left\" | \"center\";\n\nexport class Layered extends HTMLWidget {\n protected _contentContainer;\n _widgetPlacements;\n _widgetRatios;\n constructor() {\n super();\n\n this._tag = \"div\";\n this._widgetPlacements = [];\n this._widgetRatios = [];\n }\n\n addLayer(widget, placement: LayerPlacement = \"default\", widthRatio: number = 1, heightRatio: number = 1) {\n const widgets = this.widgets();\n widgets.push(widget ? widget : new Text().text(\"No widget defined for layer.\"));\n this.widgets(widgets);\n this._widgetPlacements.push(placement);\n this._widgetRatios.push([widthRatio, heightRatio]);\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._contentContainer = element.append(\"div\")\n .attr(\"class\", \"container\")\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n element.style(\"padding\", this.surfacePadding() + \"px\");\n\n const content = this._contentContainer.selectAll(\".content.id\" + this.id()).data(this.widgets(), function (d) { return d.id(); });\n content.enter().append(\"div\")\n .attr(\"class\", \"content id\" + this.id())\n .each(function (widget, idx) {\n widget.target(this);\n })\n .merge(content)\n .each(function (widget, idx) {\n const clientSize = {\n width: context.clientWidth(),\n height: context.clientHeight()\n };\n const widgetSize = context.widgetSize(idx, clientSize);\n const widgetPosition = context.widgetPosition(idx, clientSize, widgetSize);\n this.style.top = widgetPosition.y + \"px\";\n this.style.left = widgetPosition.x + \"px\";\n widget\n .resize(widgetSize)\n .render()\n ;\n })\n ;\n content.exit()\n .each(function (widget, idx) {\n widget\n .target(null)\n ;\n })\n .remove()\n ;\n content.order();\n }\n\n widgetSize(idx, clientSize) {\n if (this._widgetPlacements[idx] === \"default\") {\n return {\n width: clientSize.width * this._widgetRatios[idx][0],\n height: clientSize.height * this._widgetRatios[idx][1]\n };\n } else {\n return {\n width: clientSize.width * this._widgetRatios[idx][0],\n height: clientSize.height * this._widgetRatios[idx][1]\n };\n }\n }\n widgetPosition(idx, clientSize, widgetSize) {\n switch (this._widgetPlacements[idx]) {\n default:\n return {\n x: 0,\n y: 0\n };\n case \"top\":\n return {\n x: (clientSize.width / 2) - (widgetSize.width / 2),\n y: 0\n };\n case \"bottom\":\n return {\n x: (clientSize.width / 2) - (widgetSize.width / 2),\n y: clientSize.height - widgetSize.height\n };\n case \"left\":\n return {\n x: 0,\n y: (clientSize.height / 2) - (widgetSize.height / 2)\n };\n case \"right\":\n return {\n x: clientSize.width - widgetSize.width,\n y: (clientSize.height / 2) - (widgetSize.height / 2)\n };\n case \"center\":\n return {\n x: (clientSize.width / 2) - (widgetSize.width / 2),\n y: (clientSize.height / 2) - (widgetSize.height / 2)\n };\n }\n }\n}\nLayered.prototype._class += \" layout_Layered\";\n\nexport interface Layered {\n surfacePadding(): number;\n surfacePadding(_: number): this;\n widgets(): any;\n widgets(_: any): this;\n}\n\nLayered.prototype.publish(\"surfacePadding\", 0, \"number\", \"Padding\");\nLayered.prototype.publish(\"widgets\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\n\nexport class Popup extends HTMLWidget {\n _surfaceButtons;\n _originalPosition;\n\n constructor() {\n super();\n this._tag = \"div\";\n this._surfaceButtons = [];\n }\n\n updateState(visible) {\n visible = visible || !this.popupState();\n this.popupState(visible).render();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this.widget()\n .target(domNode)\n ;\n this._originalPosition = this.position();\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n element\n .style(\"visibility\", this.popupState() ? null : \"hidden\")\n .style(\"opacity\", this.popupState() ? null : 0)\n .style(\"width\", this.shrinkWrap() ? this.widget().width() + \"px\" : this._size.width + \"px\")\n .style(\"height\", this.shrinkWrap() ? this.widget().height() + \"px\" : this._size.height + \"px\")\n ;\n if (this.widget().size().height === 0) {\n this.widget().resize(this.size());\n }\n }\n\n postUpdate(domNode, element) {\n let left;\n let top;\n switch (this.centerPopup()) {\n case \"container\":\n if (this._placeholderElement) {\n left = parseInt(this._placeholderElement.style(\"width\")) / 2 - this.widget().width() / 2;\n top = parseInt(this._placeholderElement.style(\"height\")) / 2 - this.widget().height() / 2;\n }\n this.position(\"absolute\");\n break;\n\n case \"window\":\n left = window.innerWidth / 2 - this.widget().width() / 2;\n top = window.innerHeight / 2 - this.widget().height() / 2;\n this.position(\"fixed\");\n break;\n\n default:\n left = 0;\n top = 0;\n this.position(this._originalPosition);\n break;\n }\n\n this.pos({ x: left, y: top });\n\n super.postUpdate(domNode, element);\n\n element\n .style(\"position\", this.position())\n .style(\"left\", this.left() + \"px\")\n .style(\"right\", this.right() + \"px\")\n .style(\"top\", this.top() + \"px\")\n .style(\"bottom\", this.bottom() + \"px\")\n ;\n }\n\n exit(domNode, element) {\n if (this.widget()) {\n this.widget().target(null);\n }\n super.exit(domNode, element);\n }\n\n click(obj) {\n }\n}\nPopup.prototype._class += \" layout_Popup\";\n\nexport interface Popup {\n popupState(): boolean;\n popupState(_: boolean): this;\n shrinkWrap(): boolean;\n shrinkWrap(_: boolean): this;\n centerPopup(): \"none\" | \"container\" | \"window\";\n centerPopup(_: \"none\" | \"container\" | \"window\"): this;\n top(): number;\n top(_: number): this;\n bottom(): number;\n bottom(_: number): this;\n left(): number;\n left(_: number): this;\n right(): number;\n right(_: number): this;\n position(): string;\n position(_: string): this;\n\n widget(): Widget;\n widget(_: Widget): this;\n}\n\nPopup.prototype.publish(\"popupState\", false, \"boolean\", \"State of the popup, visible (true) or hidden (false)\", null, {});\nPopup.prototype.publish(\"shrinkWrap\", false, \"boolean\", \"The popup parent container either shrinks to the size of its contents (true) or expands to fit thge popup's parentDiv (false)\", null, {});\nPopup.prototype.publish(\"centerPopup\", \"none\", \"set\", \"Center the widget in its container element (target) or in the window\", [\"none\", \"container\", \"window\"], {});\nPopup.prototype.publish(\"top\", null, \"number\", \"Top position property of popup\", null, {});\nPopup.prototype.publish(\"bottom\", null, \"number\", \"Bottom position property of popup\", null, {});\nPopup.prototype.publish(\"left\", null, \"number\", \"Left position property of popup\", null, {});\nPopup.prototype.publish(\"right\", null, \"number\", \"Right position property of popup\", null, {});\nPopup.prototype.publish(\"position\", \"relative\", \"set\", \"Value of the 'position' property\", [\"absolute\", \"relative\", \"fixed\", \"static\", \"initial\", \"inherit\"], { tags: [\"Private\"] });\n\nPopup.prototype.publish(\"widget\", null, \"widget\", \"Widget\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Text, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Surface } from \"./Surface.ts\";\n\nimport \"../src/Tabbed.css\";\n\nexport class Tabbed extends HTMLWidget {\n _tabContainer;\n _contentContainer;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n }\n\n clearTabs() {\n this.labels([]);\n this.widgets([]);\n return this;\n }\n\n addTab(widget, label, isActive?, callback?) {\n const widgetSize = widget.size();\n if (widgetSize.width === 0 && widgetSize.height === 0) {\n widget.size({ width: \"100%\", height: \"100%\" });\n }\n const labels = this.labels();\n const widgets = this.widgets();\n if (isActive) {\n this.activeTabIdx(this.widgets().length);\n }\n labels.push(label);\n const surface = new Surface().widget(widget ? widget : new Text().text(\"No widget defined for tab\"));\n widgets.push(surface);\n this.labels(labels);\n this.widgets(widgets);\n if (callback) {\n callback(surface);\n }\n return this;\n }\n\n widgetSize(widgetDiv) {\n const width = this.clientWidth();\n let height = this.clientHeight();\n\n const tcBox = this._tabContainer.node().getBoundingClientRect();\n if (typeof (tcBox.height) !== \"undefined\") {\n height -= tcBox.height;\n }\n return { width, height };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._tabContainer = element.append(\"div\");\n this._contentContainer = element.append(\"div\");\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n element.style(\"padding\", this.surfacePadding_exists() ? this.surfacePadding() + \"px\" : null);\n\n const tabs = this._tabContainer.selectAll(\".tab-button.id\" + this.id()).data(this.showTabs() ? this.labels() : [], function (d) { return d; });\n tabs.enter().append(\"span\")\n .attr(\"class\", \"tab-button id\" + this.id())\n .style(\"cursor\", \"pointer\")\n .on(\"click\", function (d, idx) {\n context.click(context.widgets()[idx].widget(), d, idx);\n context\n .activeTabIdx(idx)\n .render()\n ;\n }).merge(tabs)\n .classed(\"active\", function (d, idx) { return context.activeTabIdx() === idx; })\n .text(function (d) { return d; })\n ;\n tabs.exit().remove();\n\n const content = this._contentContainer.selectAll(\".tab-content.id\" + this.id()).data(this.widgets(), function (d) { return d.id(); });\n content.enter().append(\"div\")\n .attr(\"class\", \"tab-content id\" + this.id())\n .each(function (widget, idx) {\n widget.target(this);\n }).merge(content)\n .classed(\"active\", function (d, idx) { return context.activeTabIdx() === idx; })\n .style(\"display\", function (d, idx) { return context.activeTabIdx() === idx ? \"block\" : \"none\"; })\n .each(function (surface, idx) {\n surface.visible(context.activeTabIdx() === idx);\n if (context.activeTabIdx() === idx) {\n const wSize = context.widgetSize(d3Select(this));\n surface\n .surfaceBorderWidth(context.showTabs() ? null : 0)\n .surfacePadding(context.showTabs() ? null : 0)\n .resize(wSize)\n ;\n }\n })\n ;\n content.exit()\n .each(function (widget, idx) {\n widget\n .target(null)\n ;\n })\n .remove();\n\n switch (this.tabLocation()) {\n case \"bottom\":\n this._tabContainer\n .attr(\"class\", \"on_bottom\")\n .style(\"top\", (this._contentContainer.node().offsetHeight + this.surfacePadding()) + \"px\")\n .style(\"position\", \"absolute\")\n ;\n this._contentContainer\n .style(\"top\", this.surfacePadding_exists() ? this.surfacePadding() + \"px\" : null)\n .style(\"position\", \"absolute\")\n ;\n break;\n default:\n this._tabContainer\n .attr(\"class\", \"on_top\")\n .style(\"top\", null)\n .style(\"position\", \"relative\")\n ;\n this._contentContainer\n .style(\"top\", (this._tabContainer.node().offsetHeight + this.surfacePadding()) + \"px\")\n .style(\"position\", \"absolute\")\n ;\n break;\n }\n }\n\n click(widget, column, idx) {\n }\n}\nTabbed.prototype._class += \" layout_Tabbed\";\n\nexport interface Tabbed {\n showTabs(): boolean;\n showTabs(_: boolean): this;\n surfacePadding(): number;\n surfacePadding(_: number): this;\n surfacePadding_exists(): boolean;\n activeTabIdx(): number;\n activeTabIdx(_: number): this;\n\n labels(): string[];\n labels(_: string[]): this;\n tabLocation(): \"top\" | \"bottom\";\n tabLocation(_: \"top\" | \"bottom\"): this;\n widgets(): any[];\n widgets(_: any[]): this;\n}\n\nTabbed.prototype.publish(\"showTabs\", true, \"boolean\", \"Show Tabs\", null, {});\nTabbed.prototype.publish(\"surfacePadding\", 4, \"number\", \"Padding\");\nTabbed.prototype.publish(\"activeTabIdx\", 0, \"number\", \"Index of active tab\", null, {});\n\nTabbed.prototype.publish(\"labels\", [], \"array\", \"Array of tab labels sharing an index with \", null, { tags: [\"Private\"] });\nTabbed.prototype.publish(\"tabLocation\", \"top\", \"set\", \"Position the tabs at the bottom of the widget\", [\"top\", \"bottom\"], { tags: [\"Private\"] });\nTabbed.prototype.publish(\"widgets\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Toolbar.css\";\n\nexport class Toolbar extends HTMLWidget {\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n element\n .attr(\"title\", context.title())\n .style(\"background-color\", this.backgroundColor())\n ;\n\n const title = element.selectAll(\"div.toolbar-title\")\n .data(this.title() ? [this.title()] : []);\n title.enter().append(\"div\")\n .classed(\"toolbar-title\", true)\n .append(\"span\")\n ;\n title.selectAll(\"div.toolbar-title > span\")\n .style(\"font-size\", this.fontSize_exists() ? this.fontSize() + \"px\" : null)\n .style(\"color\", this.fontColor_exists() ? this.fontColor() : null)\n .style(\"font-family\", this.fontFamily_exists() ? this.fontFamily() : null)\n .style(\"font-weight\", this.fontBold_exists() ? (this.fontBold() ? \"bold\" : \"normal\") : null)\n .style(\"background-color\", this.backgroundColor_exists() ? this.backgroundColor() : null)\n .text(context.title())\n ;\n title.exit().remove();\n\n const childWidgets = element.selectAll(\"div.toolbar-child\")\n .data(this.widgets() !== null ? this.widgets() : [], function (d) { return d.id(); });\n\n childWidgets.enter().insert(\"div\", \"div.toolbar-title\")\n .each(function (d, i) {\n const widgetClass = context.widgetClasses()[i] ? context.widgetClasses()[i] + \" toolbar-child\" : \"toolbar-child\";\n d3Select(this).classed(widgetClass, true);\n d.target(this);\n });\n childWidgets.exit().each(function (d) {\n d.target(null);\n }).remove();\n childWidgets.order();\n }\n\n render(callback?: (w: Widget) => void): this {\n const context = this;\n return super.render(function (w) {\n const toolbarBBox = context.element().node().getBoundingClientRect();\n let minX = toolbarBBox.left + toolbarBBox.width;\n context.element().selectAll(\"div.toolbar-child\")\n .each(function (d, i) {\n const childBBox = this.getBoundingClientRect();\n if (minX > childBBox.left)\n minX = childBBox.left;\n })\n ;\n context.element().select(\".toolbar-title\")\n .style(\"width\", (minX - toolbarBBox.left - 4) + \"px\")\n ;\n if (callback) {\n callback(w);\n }\n });\n }\n\n exit(domNode, element) {\n this.widgets().forEach(function (w) {\n w.target(null);\n });\n super.exit(domNode, element);\n }\n}\nToolbar.prototype._class += \" layout_Toolbar\";\n\nexport interface Toolbar {\n title(): string;\n title(_: string): this;\n\n fontSize(): number;\n fontSize(_: number): this;\n fontSize_exists(): boolean;\n fontColor(): string;\n fontColor(_: string): this;\n fontColor_exists(): boolean;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontFamily_exists(): boolean;\n fontBold(): boolean;\n fontBold(_: boolean): this;\n fontBold_exists(): boolean;\n backgroundColor(): string;\n backgroundColor(_: string): this;\n backgroundColor_exists(): boolean;\n\n responsive(): boolean;\n responsive(_: boolean): this;\n\n widgets(): any[];\n widgets(_: any[]): this;\n widgetClasses(): string[];\n widgetClasses(_: string[]): this;\n}\n\nToolbar.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Intermediate\"] });\n\nToolbar.prototype.publish(\"fontSize\", null, \"number\", \"Title Font Size (px)\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"fontColor\", null, \"html-color\", \"Title Font Color\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"fontFamily\", null, \"string\", \"Title Font Family\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"fontBold\", true, \"boolean\", \"Enable Bold Title Font\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"backgroundColor\", null, \"html-color\", \"Background Color\", null, { tags: [\"Intermediate\"], optional: true });\n\nToolbar.prototype.publish(\"responsive\", true, \"boolean\", \"Adapts to pixel width\", null, { tags: [\"Basic\"] });\n\nToolbar.prototype.publish(\"widgets\", [], \"widgetArray\", \"Child widgets of the toolbar\", null, { tags: [\"Basic\"] });\nToolbar.prototype.publish(\"widgetClasses\", [], \"array\", \"Array of Html Element classes to be assigned to the child widgets (shares index with widgets param)\", null, { tags: [\"Basic\"] });\n","import { FlexGrid } from \"./FlexGrid.ts\";\n\nexport class VerticalList extends FlexGrid {\n constructor() {\n super();\n this.orientation_default(\"vertical\");\n this.flexWrap_default(\"nowrap\");\n }\n}\nVerticalList.prototype._class += \" layout_VerticalList\";\n\nexport interface VerticalList {\n orientation_default(_: \"horizontal\" | \"vertical\");\n flexWrap_default(_: \"nowrap\" | \"wrap\" | \"wrap-reverse\");\n}\n"],"names":["PKG_NAME","PKG_VERSION","BUILD_VERSION","_AbsoluteSurface","HTMLWidget","constructor","super","this","_tag","enter","domNode","element","update","xPos","yPos","width","clientWidth","height","clientHeight","units","widgetX","widgetY","widgetWidth","Number","widgetHeight","style","opacity","widgets","selectAll","_id","data","widget","d","append","attr","each","target","merge","resize","exit","remove","__name","AbsoluteSurface","prototype","_class","publish","tags","_Accordion","_isClosed","titleSpan","iconDiv","ul","icon","pushListItem","prepend","protect","contentArr","content","_protected","unshift","push","clearListItems","arr","i","collapseClick","classed","context","defaultCollapsed","FAChar","size","node","on","render","text","title","length","rows","li","document","createElement","_target","wSize","cSize","text_colorFill","titleFontColor","char","closedIcon","openIcon","Accordion","_Surface","_surfaceButtons","widgetSize","titleDiv","widgetDiv","calcHeight","calcFrameHeight","calcFrameWidth","element2","surfaceShadow","surfaceBorderWidth_exists","surfaceBorderWidth","surfaceBorderColor","surfaceBorderRadius_exists","surfaceBorderRadius","surfaceBackgroundColor","titles","insert","surfaceTitleAlignment","surfaceTitleFontColor","surfaceTitleFontSize_exists","surfaceTitleFontSize","surfaceTitleFontFamily","surfaceTitleFontBold","surfaceTitleBackgroundColor","surfaceTitlePadding_exists","surfaceTitlePadding","altText_exists","altText","surfaceButtons","select","buttonAnnotations","button","idx","el","d3Select","class","id","padding","font","click","label","_d","parentElement","classID","split","surfacePadding_exists","surfacePadding","obj","Surface","optional","disable","w","_Cell","_indicateTheseIds","indicateTheseIds","_","arguments","onMouseEnter","onMouseLeave","indicatorOpacity","indicatorBorderColor","indicatorGlowColor","otherElement","otherWidget","datum","d3SelectAll","Cell","_Border","_colCount","_rowCount","_colSize","_rowSize","_shrinkWrapBoxes","_watch","_offsetX","_offsetY","_dragCell","_dragCellSize","_dragCellStartSize","_handleTop","_handleLeft","_dragPrevX","_dragPrevY","_cellSizes","contentDiv","_scrollBarWidth","_borderHandles","_sectionTypeArr","sectionTypes","watchWidget","monitor","paramId","newVal","oldVal","lazyPostUpdate","Utility","debounce","postUpdate","applyLayoutType","layoutObj","borderLayoutObject","forEach","cell","_fixedLeft","left","_fixedTop","top","_fixedWidth","_fixedHeight","_dragHandles","cellSpecificDragHandles","sectionType","layoutType","retObj","topSize","topPerc","bottomSize","bottomPerc","leftSize","leftPerc","rightSize","rightPerc","bcRect","getBoundingClientRect","bottom","right","SVGElement","parseFloat","getAttribute","indexOf","topPercentage","gutter","bottomPercentage","leftPercentage","rightPercentage","t","_sectionPlacementObject","px","b","l","r","c","clearContent","splice","contentWidget","hasContent","setContent","getCell","getContent","setLayoutOffsets","_element","dragStart","handle","event","d3Event","sourceEvent","stopPropagation","handleElm","clientX","clientY","dragTick","xDelta","yDelta","_moveHandles","handle2","delta","handles","grabbedHandle","topHeight","leftHeight","bottomHeight","rightHeight","rightWidth","leftWidth","handle3","dragEnd","getBBox","retVal","apply","_size","Platform","getScrollbarWidth","designMode","rowsUpdate","drag","d3Drag","call","_placeholderElement","getCellSizes","contentRect","rect","n","prevBox","currBox","lazyRender","Border","_WidgetDiv","_div","_overlay","_overflowX","_overflowY","_widget","div","overlay","overflowX","overflowY","availableHeight","availableWidth","renderPromise","then","visible","x","y","Promise","resolve","WidgetDiv","_Border2","_bodyElement","_topWA","_leftWA","_centerWA","_rightWA","_bottomWA","_topPrevOverflow","_leftPrevOverflow","_rightPrevOverflow","_bottomPrevOverflow","topElement","centerElement","leftElement","rightElement","bottomElement","showTop","showRight","showBottom","showLeft","topOverflowX","rightOverflowX","bottomOverflowX","leftOverflowX","topOverflowY","rightOverflowY","bottomOverflowY","leftOverflowY","targetNull","center","swap","sectionA","sectionB","a","callback","topOverlay","async","topBBox","bottomBBox","leftBBox","rightBBox","bottomHeight_exists","bodyWidth","bodyHeight","centerOverflowX","centerOverflowY","scrollCenterX","scrollCenterY","promises","all","Border2","_Carousel","_prevActive","_root","activeWidget","active","widgetElements","transition","duration","transitionDuration","isDOMHidden","aw","w2","Carousel","pi","Math","PI","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","path","constant","moveTo","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","Error","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","h","toString","d3SymbolCircle","draw","d3SymbolCross","tan30","tan30_2","d3SymbolDiamond","kr","kx","ky","d3SymbolStar","s","d3SymbolSquare","sqrt3","d3SymbolTriangle","k","d3SymbolWye","d3Symbol","type","circle","symbol","buffer","_typeof","Symbol","iterator","d3_identity","d3_reverse","mirror","d3_textWrapping","word","words","reverse","line","tspan","pop","join","getComputedTextLength","d3_mergeLabels","gen","labels","domain","range","labelDelimiter","customLabels","genLength","_i","generatedLabels","d3_linearLegend","scale","cells","labelFormat","increment","map","feature","d3_quantLegend","invert","invertExtent","d3_ordinalLegend","d3_cellOver","cellDispatcher","d3_cellOut","d3_cellClick","helper","d3_drawShapes","shape","shapes","shapeHeight","shapeWidth","shapeRadius","d3_addText","svg","classPrefix","labelWidth","d3_calcType","ascending","ticks","d3_filterCells","cellFilter","filterCells","filter","dataValues","labelValues","d3_placement","orient","cellTrans","textTrans","labelAlign","d3_addEvents","dispatcher","d3_title","titleWidth","cellsSvg","yOffset","nodes","xOffset","d3_defaultLocale","format","formatPrefix","d3_defaultFormatSpecifier","d3_defaultDelimiter","color","scaleLinear","shapePadding","useClass","locale","specifier","labelOffset","labelWrap","legendDispatcher","dispatch","legend","cellEnter","textSize","shapeSize","cellSize","textAlign","max","sum","slice","formatLocale","formatSpecifier","toLowerCase","textWrap","value","_Legend","SVGWidget","_owner","_targetWidget","_targetWidgetMonitor","_legendOrdinal","_disabled","_symbolTypeMap","cross","diamond","square","star","triangle","wye","owner","_drawStartPos","d3LegendColor","onClick","onOver","onOut","isDisabled","Database","Field","filteredFields","dataFamily","fields","filteredColumns","columns","filteredData","row","disabledCols","anyDisabled","col","disabled","isRainbow","getWidget","_palette","targetWidget","key","newProp","oldProp","source","chart","getPalette","Palette","ordinal","rainbow","getPaletteType","fillColorFunc","fillColor","paletteID","name","switch","sel","palette","_g","calcMetaData","dataArr","total","maxLabelWidth","colLength","val","reduce","acc","showSeriesTotal","d3Format","rainbowFormat","steps","rainbowBins","weightMin","_dataMinWeight","weightMax","_dataMaxWeight","stepWeightDiff","mid","floor","parseInt","radius","radiusToSymbolSize","itemPadding","orientation","d3ScaleOrdinal","symbolType","labelMaxWidth","updateDisabled","legendCellsBbox","offsetX","offsetY","_containerSize","pos","legendTotal","showLegendTotal","totalText","totalOffsetX","totalOffsetY","enableOverflowScroll","enableOverflow","_boundingBox","_parentRelativeDiv","circleSize","pow","disabledIdx","refreshColumns","refreshData","instanceOfIHighlight","highlightColumn","onDblClick","rowData","rowIdx","onMouseOver","fitToContent","bbox","Legend","_Modal","_relativeTarget","_fade","_modal","_modalHeader","_modalBody","_modalHeaderAnnotations","_modalHeaderCloseButton","_close","closeModal","getRelativeTarget","relativeTarget","relativeTargetId","getElementById","locateAncestor","body","setModalSize","fixedHeight","fixedWidth","minHeight","minWidth","maxHeight","maxWidth","modalRect","headerRect","setFadePosition","setModalPosition","fixedTop","fixedLeft","resizeBodySync","enableClickFadeToClose","showFade","header_h","titleFontSize","formattedTitle","html","show","title_exists","trim","Modal","_ChartPanel","_legend","_progressBar","ProgressBar","_autoScale","_resolutions","tiny","small","_highlight","_scale","_orig_size","_toggleInfo","ToggleButton","faChar","tooltip","selected","description","Text","origCloseFunc","_toggleData","dataVisible","_buttonDownload","Button","downloadCSV","_buttonDownloadImage","downloadPNG","_toggleLegend","legendPosition","legendVisible","_spacer","Spacer","_titleBar","TitleBar","buttons","_carousel","_table","Table","_hideLegendToggleList","refreshFields","asDefault","highlight","startProgress","start","finishProgress","finish","namePrefix","downloadTitle","nameSuffix","downloadTimestampSuffix","timestamp","downloadString","export","column","cssTag","getResponsiveMode","enableAutoscaling","setOrigSize","JSON","parse","stringify","preUpdateTiny","preUpdateSmall","scale_x","scale_y","min","x_is_smaller","preUpdateRegular","_prevdataVisible","_prevlegendVisible","_prevLegendPosition","_prevChartDataFamily","_prevChart","_prevButtons","preUpdate","_dataFamily","highlightSize","highlightColor","widgetIconBar","IconBar","hiddenButtons","dataButtonVisible","downloadButtonVisible","downloadImageButtonVisible","legendButtonVisible","enabled","titleVisible","titleOverlay","postUpdateTiny","postUpdateSmall","postUpdateRegular","titleIconFontSize","_node","containerRect","icon_top","parentRect","_prevPos","dblclick","vertex_click","more","vertex","vertex_dblclick","edge_click","edge","edge_dblclick","ChartPanel","publishReset","publishProxy","tmpAny","_FlexGrid","parentNode","cachedSizes","updateFlexParent","listItems","itemMinHeight","itemMinWidth","flexBasis","widgetsFlexBasis","flexGrow","widgetsFlexGrow","borderWidth","itemBorderColor","firstChild","display","flexWrap","alignItems","alignContent","forceXScroll","disableScroll","forceYScroll","FlexGrid","exports","GridList","items","options","_options","defaults","hasOwnProperty","_adjustSizeOfItems","generateGrid","cloneItems","_items","lanes","direction","item","j","widthOfGrid","grid","output","border","_padNumber","_resetGrid","_markItemPositionToGrid","resizeGrid","currentColumn","_sortItemsByPosition","position","_getItemPosition","_updateItemPosition","findPositionForItem","_pullItemsToLeft","fixedRow","_itemFitsAtPosition","newCol","newRow","moveItemToPosition","newPosition","_resolveCollisions","resizeItem","_updateItemSize","getChangedItems","initialItems","idAttribute","changedItems","_getItemByAttribute","sort","item1","item2","position1","position2","bind","autoSize","_deleteItemPositionFromGrid","_setItemPosition","_ensureColumns","N","GridCol","_getItemsCollidingWithItem","collidingItems","_itemsAreColliding","_tryToResolveCollisionsLocally","leftOfItem","rightOfItem","aboveOfItem","belowOfItem","_gridList","collidingItem","collidingPosition","fixedItem","fixedPosition","_findLeftMostPositionForItem","tail","otherItem","otherPosition","nr","prefix","factory","_GridList","_GridList.default","_Grid","divItems","gridList","itemsMap","origItems","cellWidth","cellHeight","dragItem","dragItemPos","_d3Drag","_d3DragResize","_selectionBag","Selection","getDimensions","gridCol","gridColSpan","gridRow","gridRowSpan","rowSpan","colSpan","sortedContent","some","getWidgetCell","cellToGridItem","gridItemToCell","resetItemsPos","origItem","initGridList","snapping","snappingRows","snappingColumns","killGridList","subject","selectionBagClick","updateGrid","round","_noRender","surfaceShadow_default","surfacePadding_default","surfaceBorderWidth_default","surfaceBackgroundColor_default","fitTo","dimensions","cellLaneRatio","laneWidth","__grid_watch","_renderCount","lanesBackground","selectionBagClear","showLanes","_createSelectionObject","selection","set","get","isEmpty","clear","postSelectionChange","selectionObj","ctrlKey","isSelected","applyLayout","layoutArr","vizActivation","elem","Grid","_HorizontalList","orientation_default","flexWrap_default","HorizontalList","_Layered","_contentContainer","_widgetPlacements","_widgetRatios","addLayer","placement","widthRatio","heightRatio","clientSize","widgetPosition","order","Layered","_Popup","_originalPosition","updateState","popupState","shrinkWrap","centerPopup","window","innerWidth","innerHeight","Popup","_Tabbed","_tabContainer","clearTabs","addTab","isActive","activeTabIdx","surface","tcBox","tabs","showTabs","tabLocation","offsetHeight","Tabbed","_Toolbar","backgroundColor","fontSize_exists","fontSize","fontColor_exists","fontColor","fontFamily_exists","fontFamily","fontBold_exists","fontBold","backgroundColor_exists","childWidgets","widgetClass","widgetClasses","toolbarBBox","minX","childBBox","Toolbar","_VerticalList","VerticalList"],"mappings":"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","x_google_ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,24]}
1
+ {"version":3,"file":"index.js","names":["pi","tau","constant","circle"],"sources":["../src/__package__.ts","../src/AbsoluteSurface.ts","../src/Accordion.ts","../src/Surface.ts","../src/Cell.ts","../src/Border.ts","../src/Border2.ts","../src/Carousel.ts","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/symbol/circle.js","../../../node_modules/d3-shape/src/symbol/cross.js","../../../node_modules/d3-shape/src/symbol/diamond.js","../../../node_modules/d3-shape/src/symbol/star.js","../../../node_modules/d3-shape/src/symbol/square.js","../../../node_modules/d3-shape/src/symbol/triangle.js","../../../node_modules/d3-shape/src/symbol/wye.js","../../../node_modules/d3-shape/src/symbol.js","../../../node_modules/d3-svg-legend/indexRollupNext.js","../src/Legend.ts","../src/Modal.ts","../src/ChartPanel.ts","../src/FlexGrid.ts","../../../node_modules/grid-list/src/gridList.js","../src/Grid.css","../src/Grid.ts","../src/HorizontalList.ts","../src/Layered.ts","../src/Popup.ts","../src/Tabbed.ts","../src/Toolbar.ts","../src/VerticalList.ts"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","import { HTMLWidget } from \"@hpcc-js/common\";\n\nimport \"../src/AbsoluteSurface.css\";\n\nexport class AbsoluteSurface extends HTMLWidget {\n constructor() {\n super();\n\n this._tag = \"div\";\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n let xPos = 0;\n let yPos = 0;\n let width = this.clientWidth();\n let height = this.clientHeight();\n switch (this.units()) {\n case \"pixels\":\n xPos = this.widgetX();\n yPos = this.widgetY();\n width = this.widgetWidth() === \"\" ? width - xPos : Number(this.widgetWidth());\n height = this.widgetHeight() === \"\" ? height - yPos : Number(this.widgetHeight());\n break;\n case \"percent\":\n xPos = this.widgetX() * width / 100;\n yPos = this.widgetY() * height / 100;\n width = this.widgetWidth() === \"\" ? width - xPos : Number(this.widgetWidth()) * width / 100;\n height = this.widgetHeight() === \"\" ? height - yPos : Number(this.widgetHeight()) * height / 100;\n break;\n }\n element.style(\"opacity\", this.opacity());\n\n const widgets = element.selectAll(\"#\" + this._id + \" > .placeholder\").data(this.widget() ? [this.widget()] : [], function (d) { return d._id; });\n widgets.enter().append(\"div\")\n .attr(\"class\", \"placeholder\")\n .each(function (d) {\n d.target(this);\n })\n .merge(widgets)\n .style(\"left\", xPos + \"px\")\n .style(\"top\", yPos + \"px\")\n .style(\"width\", width + \"px\")\n .style(\"bottom\", height + \"px\")\n .each(function (d) {\n d\n .resize({ width, height })\n ;\n })\n ;\n widgets.exit().each(function (d) {\n d.target(null);\n }).remove();\n }\n\n exit(domNode, element) {\n if (this.widget()) {\n this.widget().target(null);\n }\n super.exit(domNode, element);\n }\n}\nAbsoluteSurface.prototype._class += \" layout_AbsoluteSurface\";\n\nexport interface AbsoluteSurface {\n units(): string;\n units(_: string): this;\n widgetX(): number;\n widgetX(_: number): this;\n widgetY(): number;\n widgetY(_: number): this;\n widgetWidth(): string;\n widgetWidth(_: string): this;\n widgetHeight(): string;\n widgetHeight(_: string): this;\n widget(): any;\n widget(_: any): this;\n opacity(): number;\n opacity(_: number): this;\n}\n\nAbsoluteSurface.prototype.publish(\"units\", \"percent\", \"set\", \"Units\", [\"pixels\", \"percent\"]);\nAbsoluteSurface.prototype.publish(\"widgetX\", 0, \"number\", \"Widget XPos\");\nAbsoluteSurface.prototype.publish(\"widgetY\", 0, \"number\", \"Widget YPos\");\nAbsoluteSurface.prototype.publish(\"widgetWidth\", \"100\", \"string\", \"Widget Width, omit for full\");\nAbsoluteSurface.prototype.publish(\"widgetHeight\", \"100\", \"string\", \"Widget Height, omit for full\");\nAbsoluteSurface.prototype.publish(\"widget\", null, \"widget\", \"Widget\", null, { tags: [\"Private\"] });\nAbsoluteSurface.prototype.publish(\"opacity\", 1, \"number\", \"Opacity\");\n","import { FAChar, HTMLWidget } from \"@hpcc-js/common\";\n\nimport \"../src/Accordion.css\";\n\nexport class Accordion extends HTMLWidget {\n protected _isClosed: boolean;\n titleSpan;\n iconDiv;\n ul;\n icon;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n this._isClosed = false;\n }\n\n pushListItem(widget, prepend: boolean = false, protect: boolean = false) {\n const contentArr = this.content();\n\n widget._protected = protect;\n\n if (prepend) {\n contentArr.unshift(widget);\n } else {\n contentArr.push(widget);\n }\n this.content(contentArr);\n return this;\n }\n\n clearListItems() {\n const arr = [];\n for (const i in this.content()) {\n if (this.content()[i]._protected) {\n arr.push(this.content()[i]);\n }\n }\n this.content(arr);\n return this;\n }\n\n collapseClick(element) {\n if (element.classed(\"closed\")) {\n this._isClosed = false;\n element.classed(\"open\", true);\n element.classed(\"closed\", false);\n } else {\n this._isClosed = true;\n element.classed(\"open\", false);\n element.classed(\"closed\", true);\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n const context = this;\n this._isClosed = this.defaultCollapsed();\n element.classed(this._isClosed ? \"closed\" : \"open\", true);\n\n this.titleSpan = element.append(\"span\").classed(\"collapsible-title\", true);\n this.iconDiv = element.append(\"div\").classed(\"collapsible-icon\", true);\n this.ul = element.append(\"ul\");\n\n this.icon = new FAChar()\n .size({ height: 24, width: 24 })\n .target(this.iconDiv.node());\n\n this.iconDiv.on(\"click\", function () {\n context.collapseClick(element);\n context.render();\n });\n this.titleSpan.on(\"click\", function () {\n context.collapseClick(element);\n context.render();\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n const this_id = \"\";\n this.titleSpan.text(context.title().length > 0 ? context.title() + this_id : \"Accordion [\" + context._id + \"]\" + this_id);\n const rows = this.ul.selectAll(\"#\" + context._id + \" > ul > li\").data(this.content(), function (d) {\n return d._id;\n });\n rows.enter()\n .append(function (widget) {\n const li = document.createElement(\"li\");\n if (widget._target === null) {\n const wSize = widget.size();\n if (wSize.width === 0 || wSize.height === 0) {\n const cSize = context.size();\n widget.size({\n width: cSize.width,\n height: cSize.width\n });\n }\n widget.target(li);\n } else {\n return widget._target;\n }\n return li;\n })\n ;\n rows.exit().remove();\n\n this.icon\n .text_colorFill(this.titleFontColor())\n .char(this._isClosed ? this.closedIcon() : this.openIcon()).render()\n ;\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n}\nAccordion.prototype._class += \" layout_Accordion\";\n\nexport interface Accordion {\n content(): any[];\n content(_: any[]): this;\n title(): string;\n title(_: string): this;\n openIcon(): string;\n openIcon(_: string): this;\n closedIcon(): string;\n closedIcon(_: string): this;\n titleFontColor(): string;\n titleFontColor(_: string): this;\n titleBackgroundColor(): string;\n titleBackgroundColor(_: string): this;\n\n defaultCollapsed(): boolean;\n defaultCollapsed(_: boolean): this;\n}\n\nAccordion.prototype.publish(\"content\", [], \"widgetArray\", \"Array of widgets\", null, { tags: [\"Basic\"] });\nAccordion.prototype.publish(\"title\", \"\", \"string\", \"Title of collapsible section\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"openIcon\", \"\\uf147\", \"string\", \"Icon to display when list is open\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"closedIcon\", \"\\uf196\", \"string\", \"Icon to display when list is closed\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"titleFontColor\", \"#FFFFFF\", \"html-color\", \"Title font color\", null, { tags: [\"Private\"] });\nAccordion.prototype.publish(\"titleBackgroundColor\", \"#333333\", \"html-color\", \"Title background color\", null, { tags: [\"Private\"] });\n\nAccordion.prototype.publish(\"defaultCollapsed\", false, \"boolean\", \"Collapsed by default if true\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Surface.css\";\n\nexport class Surface extends HTMLWidget {\n _surfaceButtons;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n this._surfaceButtons = [];\n }\n\n widgetSize(titleDiv, widgetDiv) {\n let width = this.clientWidth();\n let height = this.clientHeight();\n if (this.title()) {\n height -= this.calcHeight(titleDiv);\n }\n height -= this.calcFrameHeight(widgetDiv);\n width -= this.calcFrameWidth(widgetDiv);\n return { width, height };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n }\n\n update(domNode, element2) {\n super.update(domNode, element2);\n const context = this;\n\n element2\n .classed(\"shadow2\", this.surfaceShadow())\n .style(\"border-width\", this.surfaceBorderWidth_exists() ? this.surfaceBorderWidth() + \"px\" : null)\n .style(\"border-color\", this.surfaceBorderColor())\n .style(\"border-radius\", this.surfaceBorderRadius_exists() ? this.surfaceBorderRadius() + \"px\" : null)\n .style(\"background-color\", this.surfaceBackgroundColor())\n ;\n\n const titles = element2.selectAll(\".surfaceTitle\").data(this.title() ? [this.title()] : []);\n titles.enter().insert(\"h3\", \"div\")\n .attr(\"class\", \"surfaceTitle\")\n .merge(titles)\n .text(function (d) { return d; })\n .style(\"text-align\", this.surfaceTitleAlignment())\n .style(\"color\", this.surfaceTitleFontColor())\n .style(\"font-size\", this.surfaceTitleFontSize_exists() ? this.surfaceTitleFontSize() + \"px\" : null)\n .style(\"font-family\", this.surfaceTitleFontFamily())\n .style(\"font-weight\", this.surfaceTitleFontBold() ? \"bold\" : \"normal\")\n .style(\"background-color\", this.surfaceTitleBackgroundColor())\n .style(\"padding\", this.surfaceTitlePadding_exists() ? this.surfaceTitlePadding() + \"px\" : null)\n .style(\"title\", this.altText_exists() ? this.altText() : null)\n ;\n titles.exit().remove();\n\n const surfaceTitle = element2.select(\".surfaceTitle\");\n\n const surfaceButtons = surfaceTitle.append(\"div\").attr(\"class\", \"html-button-container\").selectAll(\".surface-button\").data(this.buttonAnnotations());\n surfaceButtons.enter().append(\"button\").classed(\"surface-button\", true)\n .each(function (button, idx) {\n const el = context._surfaceButtons[idx] = d3Select(this)\n .attr(\"class\", \"surface-button\" + (button.class ? \" \" + button.class : \"\"))\n .attr(\"id\", button.id)\n .style(\"padding\", button.padding)\n .style(\"width\", button.width)\n .style(\"height\", button.height)\n .style(\"cursor\", \"pointer\");\n if (button.font === \"FontAwesome\") {\n el\n .style(\"background\", \"transparent\")\n .style(\"border\", \"none\")\n .on(\"click\", function (d) { context.click(d); })\n .append(\"i\")\n .attr(\"class\", \"fa\")\n .text(function () { return button.label; });\n } else {\n el\n .text(function () { return button.label; })\n .on(\"click\", function (d) { context.click(d); });\n }\n })\n ;\n surfaceButtons.exit()\n .each(function (_d, idx) {\n const element = d3Select(this);\n delete context._surfaceButtons[idx];\n element.remove();\n })\n ;\n const widgets = element2.selectAll(\"#\" + this._id + \" > .surfaceWidget\").data(this.widget() ? [this.widget()] : [], function (d) { return d._id; });\n\n widgets.enter().append(\"div\")\n .attr(\"class\", \"surfaceWidget\")\n .each(function (d) {\n d3Select(context.element().node().parentElement).classed(\"content-icon content-icon-\" + (d.classID().split(\"_\")[1]), true);\n d.target(this);\n })\n .merge(widgets)\n .style(\"padding\", this.surfacePadding_exists() ? this.surfacePadding() + \"px\" : null)\n .each(function (d) {\n const widgetSize = context.widgetSize(element2.select(\"h3\"), d3Select(this));\n if (widgetSize.width < 0) widgetSize.width = 0;\n if (widgetSize.height < 0) widgetSize.height = 0;\n d\n .resize({ width: widgetSize.width, height: widgetSize.height })\n ;\n })\n ;\n widgets.exit().each(function (d) {\n d.target(null);\n }).remove();\n }\n\n exit(domNode, element) {\n if (this.widget()) {\n this.widget().target(null);\n }\n super.exit(domNode, element);\n }\n\n // Events ---\n click(obj) {\n }\n}\nSurface.prototype._class += \" layout_Surface\";\n\nexport interface Surface {\n /* \n title: { (): string; (_: string): Surface; };\n altText: { (): string; (_: string): Surface; };\n altText_exists: () => boolean;\n surfaceTitlePadding: { (): number; (_: number): Surface; };\n surfaceTitlePadding_exists: () => boolean;\n surfaceTitleFontSize: { (): number; (_: number): Surface; };\n surfaceTitleFontSize_exists: () => boolean;\n surfaceTitleFontColor: { (): string; (_: string): Surface; };\n surfaceTitleFontFamily: { (): string; (_: string): Surface; };\n surfaceTitleFontBold: { (): boolean; (_: boolean): Surface; };\n surfaceTitleBackgroundColor: { (): string; (_: string): Surface; };\n surfaceTitleAlignment: { (): string; (_: string): Surface; };\n\n surfaceShadow: { (): boolean; (_: boolean): Surface; };\n surfacePadding: { (): string; (_: string): Surface; };\n surfacePadding_exists: () => boolean;\n surfaceBackgroundColor: { (): string; (_: string): Surface; };\n surfaceBorderWidth: { (): number; (_: number): Surface; };\n surfaceBorderWidth_exists: () => boolean;\n surfaceBorderColor: { (): string; (_: string): Surface; };\n surfaceBorderRadius: { (): number; (_: number): Surface; };\n surfaceBorderRadius_exists: () => boolean;\n\n buttonAnnotations: { (): any[]; (_: any[]): Surface; };\n\n widget: { (): Widget; (_: Widget): Surface; };\n */\n title(): string;\n title(_: string): this;\n altText(): string;\n altText(_: string): this;\n altText_exists(): boolean;\n surfaceTitlePadding(): number;\n surfaceTitlePadding(_: number): this;\n surfaceTitlePadding_exists(): boolean;\n surfaceTitleFontSize(): number;\n surfaceTitleFontSize(_: number): this;\n surfaceTitleFontSize_exists(): boolean;\n surfaceTitleFontColor(): string;\n surfaceTitleFontColor(_: string): this;\n surfaceTitleFontFamily(): string;\n surfaceTitleFontFamily(_: string): this;\n surfaceTitleFontBold(): boolean;\n surfaceTitleFontBold(_: boolean): this;\n surfaceTitleBackgroundColor(): string;\n surfaceTitleBackgroundColor(_: string): this;\n surfaceTitleAlignment(): string;\n surfaceTitleAlignment(_: string): this;\n\n surfaceShadow(): boolean;\n surfaceShadow(_: boolean): this;\n surfacePadding(): string;\n surfacePadding(_: string): this;\n surfacePadding_exists(): boolean;\n surfaceBackgroundColor(): string;\n surfaceBackgroundColor(_: string): this;\n surfaceBorderWidth(): number;\n surfaceBorderWidth(_: number): this;\n surfaceBorderWidth_exists(): boolean;\n surfaceBorderColor(): string;\n surfaceBorderColor(_: string): this;\n surfaceBorderRadius(): number;\n surfaceBorderRadius(_: number): this;\n surfaceBorderRadius_exists(): boolean;\n\n buttonAnnotations(): any[];\n buttonAnnotations(_: any[]): this;\n\n widget(): Widget;\n widget(_: Widget): this;\n}\n\nSurface.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Intermediate\"] });\nSurface.prototype.publish(\"altText\", null, \"string\", \"Alt text\", null, { optional: true });\nSurface.prototype.publish(\"surfaceTitlePadding\", null, \"number\", \"Title Padding (px)\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontSize\", null, \"number\", \"Title Font Size (px)\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontColor\", null, \"html-color\", \"Title Font Color\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontFamily\", null, \"string\", \"Title Font Family\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleFontBold\", true, \"boolean\", \"Enable Bold Title Font\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleBackgroundColor\", null, \"html-color\", \"Title Background Color\", null, { tags: [\"Advanced\"], disable: (w: any) => !w.title() });\nSurface.prototype.publish(\"surfaceTitleAlignment\", \"center\", \"set\", \"Title Alignment\", [\"left\", \"right\", \"center\"], { tags: [\"Basic\"], disable: (w: any) => !w.title() });\n\nSurface.prototype.publish(\"surfaceShadow\", false, \"boolean\", \"3D Shadow\");\nSurface.prototype.publish(\"surfacePadding\", null, \"string\", \"Surface Padding (px)\", null, { tags: [\"Intermediate\"] });\nSurface.prototype.publish(\"surfaceBackgroundColor\", null, \"html-color\", \"Surface Background Color\", null, { tags: [\"Advanced\"] });\nSurface.prototype.publish(\"surfaceBorderWidth\", null, \"number\", \"Surface Border Width (px)\", null, { tags: [\"Advanced\"] });\nSurface.prototype.publish(\"surfaceBorderColor\", null, \"html-color\", \"Surface Border Color\", null, { tags: [\"Advanced\"] });\nSurface.prototype.publish(\"surfaceBorderRadius\", null, \"number\", \"Surface Border Radius (px)\", null, { tags: [\"Advanced\"] });\n\nSurface.prototype.publish(\"buttonAnnotations\", [], \"array\", \"Button Array\", null, { tags: [\"Private\"] });\n\nSurface.prototype.publish(\"widget\", null, \"widget\", \"Widget\", null, { tags: [\"Basic\"] });\n","import { Widget } from \"@hpcc-js/common\";\nimport { select as d3Select, selectAll as d3SelectAll } from \"d3-selection\";\nimport { Surface } from \"./Surface.ts\";\n\nimport \"../src/Cell.css\";\n\nexport class Cell extends Surface {\n _indicateTheseIds;\n\n constructor() {\n super();\n this._indicateTheseIds = [];\n }\n\n indicateTheseIds(): any[];\n indicateTheseIds(_: any[]): Cell;\n indicateTheseIds(_?: any[]): any[] | Cell {\n if (!arguments.length) return this._indicateTheseIds;\n this._indicateTheseIds = _;\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n const context = this;\n element\n .classed(\"layout_Surface\", true)\n .on(\"mouseenter\", function () { context.onMouseEnter(); })\n .on(\"mouseleave\", function () { context.onMouseLeave(); })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n onMouseEnter() {\n const arr = this.indicateTheseIds();\n const opacity = this.indicatorOpacity();\n const indicatorBorderColor = this.indicatorBorderColor();\n const indicatorGlowColor = this.indicatorGlowColor();\n for (let i = 0; i < arr.length; i++) {\n const otherElement = d3Select(\"#\" + arr[i]);\n const otherWidget: Widget = otherElement.datum() as Widget;\n if (otherElement && otherWidget) {\n otherElement.append(\"div\")\n .attr(\"class\", \"update-indicator\")\n .style(\"width\", otherWidget.width() + \"px\")\n .style(\"height\", otherWidget.height() + \"px\")\n .style(\"opacity\", opacity)\n .style(\"border-color\", indicatorBorderColor)\n .style(\"-webkit-box-shadow\", \"inset 0px 0px 30px 0px \" + indicatorGlowColor)\n .style(\"-moz-box-shadow\", \"inset 0px 0px 30px 0px \" + indicatorGlowColor)\n .style(\"box-shadow\", \"inset 0px 0px 30px 0px \" + indicatorGlowColor)\n ;\n }\n }\n }\n\n onMouseLeave() {\n const arr = this.indicateTheseIds();\n for (let i = 0; i < arr.length; i++) {\n d3SelectAll(\"#\" + arr[i] + \" > div.update-indicator\").remove();\n }\n }\n}\nCell.prototype._class += \" layout_Cell\";\n\nexport interface Cell {\n gridRow(): number;\n gridRow(_: number): this;\n gridCol(): number;\n gridCol(_: number): this;\n gridRowSpan(): number;\n gridRowSpan(_: number): this;\n gridColSpan(): number;\n gridColSpan(_: number): this;\n\n indicatorGlowColor(): string;\n indicatorGlowColor(_: string): this;\n indicatorBorderColor(): string;\n indicatorBorderColor(_: string): this;\n indicatorOpacity(): number;\n indicatorOpacity(_: number): this;\n}\n\nCell.prototype.publish(\"gridRow\", 0, \"number\", \"Grid Row Position\", null, { tags: [\"Private\"] });\nCell.prototype.publish(\"gridCol\", 0, \"number\", \"Grid Column Position\", null, { tags: [\"Private\"] });\nCell.prototype.publish(\"gridRowSpan\", 1, \"number\", \"Grid Row Span\", null, { tags: [\"Private\"] });\nCell.prototype.publish(\"gridColSpan\", 1, \"number\", \"Grid Column Span\", null, { tags: [\"Private\"] });\n\nCell.prototype.publish(\"indicatorGlowColor\", \"#EEEE11\", \"html-color\", \"Glow color of update-indicator\", null, { tags: [\"Basic\"] });\nCell.prototype.publish(\"indicatorBorderColor\", \"#F48A00\", \"html-color\", \"Border color of update-indicator\", null, { tags: [\"Basic\"] });\nCell.prototype.publish(\"indicatorOpacity\", 0.8, \"number\", \"Opacity of update-indicator\", null, { tags: [\"Basic\"] });\n","import { d3Event, HTMLWidget, Platform, select as d3Select, selectAll as d3SelectAll, Utility } from \"@hpcc-js/common\";\nimport { drag as d3Drag } from \"d3-drag\";\nimport { Cell } from \"./Cell.ts\";\n\nimport \"../src/Border.css\";\n\nexport class Border extends HTMLWidget {\n _colCount: number;\n _rowCount: number;\n _colSize: number;\n _rowSize: number;\n _shrinkWrapBoxes;\n _watch;\n _offsetX;\n _offsetY;\n _dragCell;\n _dragCellSize;\n _dragCellStartSize;\n _handleTop;\n _handleLeft;\n _dragPrevX;\n _dragPrevY;\n _cellSizes;\n contentDiv;\n _scrollBarWidth;\n _borderHandles;\n _sectionTypeArr;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n\n this._colCount = 0;\n this._rowCount = 0;\n this._colSize = 0;\n this._rowSize = 0;\n\n this._shrinkWrapBoxes = {};\n\n this.content([]);\n this.sectionTypes([]);\n }\n\n watchWidget(widget) {\n if (this._watch === undefined) {\n this._watch = {};\n }\n if (this._watch[widget.id()]) {\n this._watch[widget.id()].remove();\n delete this._watch[widget.id()];\n }\n if (widget) {\n const context = this;\n this._watch[widget.id()] = widget.monitor(function (paramId, newVal, oldVal) {\n if (oldVal !== newVal) {\n context.lazyPostUpdate();\n }\n });\n }\n }\n\n lazyPostUpdate = Utility.debounce(function () {\n this.postUpdate();\n }, 100);\n\n applyLayoutType() {\n const layoutObj = this.borderLayoutObject();\n this.content().forEach(function (cell, i) {\n cell._fixedLeft = layoutObj[this.sectionTypes()[i]].left;\n cell._fixedTop = layoutObj[this.sectionTypes()[i]].top;\n cell._fixedWidth = layoutObj[this.sectionTypes()[i]].width;\n cell._fixedHeight = layoutObj[this.sectionTypes()[i]].height;\n cell._dragHandles = this.cellSpecificDragHandles(this.sectionTypes()[i]);\n }, this);\n }\n cellSpecificDragHandles(sectionType) {\n switch (sectionType) {\n case \"top\": return [\"s\"];\n case \"right\": return [\"w\"];\n case \"bottom\": return [\"n\"];\n case \"left\": return [\"e\"];\n case \"center\": return [];\n }\n }\n\n borderLayoutObject(layoutType?) {\n const retObj = {};\n const context = this;\n let topSize;\n let topPerc;\n let bottomSize;\n let bottomPerc;\n let leftSize;\n let leftPerc;\n let rightSize;\n let rightPerc;\n\n const bcRect = this.target().getBoundingClientRect();\n const gridRect: any = {};\n gridRect.top = bcRect.top;\n gridRect.left = bcRect.left;\n gridRect.bottom = bcRect.bottom;\n gridRect.right = bcRect.right;\n if (this.target() instanceof SVGElement) {\n gridRect.width = parseFloat(this.target().getAttribute(\"width\"));\n gridRect.height = parseFloat(this.target().getAttribute(\"height\"));\n } else {\n gridRect.width = bcRect.width;\n gridRect.height = bcRect.height;\n }\n if (this.sectionTypes().indexOf(\"top\") !== -1) {\n topSize = this.topSize();\n topPerc = this.topPercentage();\n if (typeof (this._shrinkWrapBoxes[\"top\"]) !== \"undefined\") {\n topSize = this._shrinkWrapBoxes[\"top\"].height + this.gutter();\n topPerc = 0;\n }\n }\n if (this.sectionTypes().indexOf(\"bottom\") !== -1) {\n bottomSize = this.bottomSize();\n bottomPerc = this.bottomPercentage();\n if (typeof (this._shrinkWrapBoxes[\"bottom\"]) !== \"undefined\") {\n bottomSize = this._shrinkWrapBoxes[\"bottom\"].height + this.gutter();\n bottomPerc = 0;\n }\n }\n if (this.sectionTypes().indexOf(\"left\") !== -1) {\n leftSize = this.leftSize();\n leftPerc = this.leftPercentage();\n if (typeof (this._shrinkWrapBoxes[\"left\"]) !== \"undefined\") {\n leftSize = this._shrinkWrapBoxes[\"left\"].width + this.gutter();\n leftPerc = 0;\n }\n }\n if (this.sectionTypes().indexOf(\"right\") !== -1) {\n rightSize = this.rightSize();\n rightPerc = this.rightPercentage();\n if (typeof (this._shrinkWrapBoxes[\"right\"]) !== \"undefined\") {\n rightSize = this._shrinkWrapBoxes[\"right\"].width + this.gutter();\n rightPerc = 0;\n }\n }\n\n const t = _sectionPlacementObject({\n width: { \"px\": 0, \"%\": 100 },\n height: { \"px\": topSize, \"%\": topPerc },\n top: { \"px\": 0, \"%\": 0 },\n left: { \"px\": 0, \"%\": 0 }\n });\n const b = _sectionPlacementObject({\n width: { \"px\": 0, \"%\": 100 },\n height: { \"px\": bottomSize, \"%\": bottomPerc },\n top: { \"px\": 0, \"%\": 100 },\n left: { \"px\": 0, \"%\": 0 }\n });\n b.top -= b.height;\n const l = _sectionPlacementObject({\n width: { \"px\": leftSize, \"%\": leftPerc },\n height: { \"px\": -t.height - b.height, \"%\": 100 },\n top: { \"px\": t.height, \"%\": 0 },\n left: { \"px\": 0, \"%\": 0 }\n });\n const r = _sectionPlacementObject({\n width: { \"px\": rightSize, \"%\": rightPerc },\n height: { \"px\": -t.height - b.height, \"%\": 100 },\n top: { \"px\": t.height, \"%\": 0 },\n left: { \"px\": 0, \"%\": 100 }\n });\n r.left -= r.width;\n const c = _sectionPlacementObject({\n width: { \"px\": -r.width - l.width, \"%\": 100 },\n height: { \"px\": -t.height - b.height, \"%\": 100 },\n top: { \"px\": t.height, \"%\": 0 },\n left: { \"px\": l.width, \"%\": 0 }\n });\n retObj[\"top\"] = t;\n retObj[\"bottom\"] = b;\n retObj[\"right\"] = r;\n retObj[\"left\"] = l;\n retObj[\"center\"] = c;\n return retObj;\n\n function _sectionPlacementObject(obj) {\n obj.width[\"px\"] = typeof (obj.width[\"px\"]) !== \"undefined\" ? obj.width[\"px\"] : 0;\n obj.width[\"%\"] = typeof (obj.width[\"%\"]) !== \"undefined\" ? obj.width[\"%\"] : 0;\n obj.height[\"px\"] = typeof (obj.height[\"px\"]) !== \"undefined\" ? obj.height[\"px\"] : 0;\n obj.height[\"%\"] = typeof (obj.height[\"%\"]) !== \"undefined\" ? obj.height[\"%\"] : 0;\n const ret = {\n width: obj.width[\"px\"] + (obj.width[\"%\"] / 100 * context.width()),\n height: obj.height[\"px\"] + (obj.height[\"%\"] / 100 * context.height()),\n top: obj.top[\"px\"] + (obj.top[\"%\"] / 100 * context.height()) + context.gutter() / 2,\n left: obj.left[\"px\"] + (obj.left[\"%\"] / 100 * context.width()) + context.gutter() / 2\n };\n return ret;\n }\n }\n\n clearContent(sectionType) {\n if (!sectionType) {\n this.content().forEach(function (contentWidget) {\n contentWidget.target(null);\n return false;\n });\n d3Select(\"#\" + this.id() + \" > div.borderHandle\")\n .classed(\"borderHandleDisabled\", true)\n ;\n delete this._watch;\n this.content([]);\n this.sectionTypes([]);\n } else {\n const idx = this.sectionTypes().indexOf(sectionType);\n if (idx >= 0) {\n if (this._watch && this.content()[idx]) {\n delete this._watch[this.content()[idx].id()];\n }\n this.content()[idx].target(null);\n d3Select(\"#\" + this.id() + \" > div.borderHandle_\" + sectionType)\n .classed(\"borderHandleDisabled\", true)\n ;\n this.content().splice(idx, 1);\n this.sectionTypes().splice(idx, 1);\n }\n }\n }\n\n hasContent(sectionType, widget, title) {\n return this.sectionTypes().indexOf(sectionType) >= 0;\n }\n\n setContent(sectionType, widget, title?) {\n this.clearContent(sectionType);\n title = typeof (title) !== \"undefined\" ? title : \"\";\n if (widget) {\n const cell = new Cell()\n .surfaceBorderWidth(0)\n .widget(widget)\n .title(title)\n ;\n this.watchWidget(widget);\n this.content().push(cell);\n this.sectionTypes().push(sectionType);\n }\n return this;\n }\n\n getCell(id) {\n const idx = this.sectionTypes().indexOf(id);\n if (idx >= 0) {\n return this.content()[idx];\n }\n return null;\n }\n\n getContent(id) {\n const idx = this.sectionTypes().indexOf(id);\n if (idx >= 0) {\n return this.content()[idx].widget();\n }\n return null;\n }\n\n setLayoutOffsets() {\n this._offsetX = this._element.node().getBoundingClientRect().left + (this.gutter() / 2);\n this._offsetY = this._element.node().getBoundingClientRect().top + (this.gutter() / 2);\n }\n\n dragStart(handle) {\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n const context = this;\n\n this._dragCell = handle;\n this._dragCellStartSize = this[handle + \"Size\"]();\n\n if (this[handle + \"ShrinkWrap\"]()) {\n this[handle + \"Percentage\"](0);\n this[handle + \"ShrinkWrap\"](false);\n }\n\n const handleElm = d3Select(\"#\" + context.id() + \" > div.borderHandle_\" + handle);\n context._handleTop = parseFloat(handleElm.style(\"top\").split(\"px\")[0]);\n context._handleLeft = parseFloat(handleElm.style(\"left\").split(\"px\")[0]);\n\n this._dragPrevX = event.sourceEvent.clientX;\n this._dragPrevY = event.sourceEvent.clientY;\n }\n dragTick(handle) {\n const context = this;\n\n const event = d3Event();\n const xDelta = this._dragPrevX - event.sourceEvent.clientX;\n const yDelta = this._dragPrevY - event.sourceEvent.clientY;\n\n switch (handle) {\n case \"top\":\n case \"bottom\":\n _moveHandles(handle, yDelta);\n break;\n case \"right\":\n case \"left\":\n _moveHandles(handle, xDelta);\n break;\n }\n\n function _moveHandles(handle2, delta) {\n if (delta === 0) return;\n const handles = d3SelectAll(\"#\" + context.id() + \" > div.borderHandle\");\n const grabbedHandle = d3Select(\"#\" + context.id() + \" > div.borderHandle_\" + handle2);\n\n if (grabbedHandle.classed(\"borderHandle_top\")) {\n grabbedHandle.style(\"top\", (context._handleTop - delta) + \"px\");\n context._cellSizes.topHeight = context._handleTop - delta;\n context._cellSizes.leftHeight = context._cellSizes.height;\n context._cellSizes.leftHeight -= context._cellSizes.topHeight;\n context._cellSizes.leftHeight -= context._cellSizes.bottomHeight;\n context._cellSizes.rightHeight = context._cellSizes.leftHeight;\n } else if (grabbedHandle.classed(\"borderHandle_right\")) {\n grabbedHandle.style(\"left\", (context._handleLeft - delta) + \"px\");\n context._cellSizes.rightWidth = context._cellSizes.width - context._handleLeft + delta;\n } else if (grabbedHandle.classed(\"borderHandle_bottom\")) {\n grabbedHandle.style(\"top\", (context._handleTop - delta) + \"px\");\n context._cellSizes.bottomHeight = context._cellSizes.height - context._handleTop + delta;\n context._cellSizes.leftHeight = context._cellSizes.height;\n context._cellSizes.leftHeight -= context._cellSizes.bottomHeight;\n context._cellSizes.leftHeight -= context._cellSizes.topHeight;\n context._cellSizes.rightHeight = context._cellSizes.leftHeight;\n } else if (grabbedHandle.classed(\"borderHandle_left\")) {\n grabbedHandle.style(\"left\", (context._handleLeft - delta) + \"px\");\n context._cellSizes.leftWidth = context._handleLeft - delta;\n }\n\n handles.each(function () {\n const handle3 = d3Select(this);\n if (handle3.classed(\"borderHandle_top\")) {\n handle3.style(\"width\", context._cellSizes.width + \"px\");\n handle3.style(\"top\", (context._cellSizes.topHeight - 3) + \"px\");\n } else if (handle3.classed(\"borderHandle_right\")) {\n handle3.style(\"left\", (context._cellSizes.width - context._cellSizes.rightWidth) + \"px\");\n handle3.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n handle3.style(\"height\", context._cellSizes.rightHeight + \"px\");\n } else if (handle3.classed(\"borderHandle_bottom\")) {\n handle3.style(\"width\", context._cellSizes.width + \"px\");\n handle3.style(\"top\", (context._cellSizes.height - context._cellSizes.bottomHeight - 3) + \"px\");\n } else if (handle3.classed(\"borderHandle_left\")) {\n handle3.style(\"left\", context._cellSizes.leftWidth + \"px\");\n handle3.style(\"height\", context._cellSizes.leftHeight + \"px\");\n handle3.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n }\n });\n }\n }\n dragEnd(handle) {\n if (handle) {\n const event = d3Event();\n const xDelta = this._dragPrevX - event.sourceEvent.clientX;\n const yDelta = this._dragPrevY - event.sourceEvent.clientY;\n\n switch (handle) {\n case \"top\":\n if (yDelta !== 0) {\n this.topPercentage(0);\n this.topSize(this.topSize() === 0 ? this.getContent(\"top\").getBBox().height - yDelta : this.topSize() - yDelta);\n }\n break;\n case \"right\":\n if (xDelta !== 0) {\n this.rightPercentage(0);\n this.rightSize(this.rightSize() === 0 ? this.getContent(\"right\").getBBox().width + xDelta : this.rightSize() + xDelta);\n }\n break;\n case \"bottom\":\n if (yDelta !== 0) {\n this.bottomPercentage(0);\n this.bottomSize(this.bottomSize() === 0 ? this.getContent(\"bottom\").getBBox().height + yDelta : this.bottomSize() + yDelta);\n }\n break;\n case \"left\":\n if (xDelta !== 0) {\n this.leftPercentage(0);\n this.leftSize(this.leftSize() === 0 ? this.getContent(\"left\").getBBox().width - xDelta : this.leftSize() - xDelta);\n }\n break;\n }\n\n this._dragPrevX = event.sourceEvent.clientX;\n this._dragPrevY = event.sourceEvent.clientY;\n }\n this.render();\n }\n\n size(_?) {\n const retVal = HTMLWidget.prototype.size.apply(this, arguments);\n if (arguments.length && this.contentDiv) {\n this.contentDiv\n .style(\"width\", this._size.width + \"px\")\n .style(\"height\", this._size.height + \"px\")\n ;\n }\n return retVal;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n const context = this;\n element.style(\"position\", \"relative\");\n this.contentDiv = element.append(\"div\").classed(\"border-content\", true);\n this._scrollBarWidth = Platform.getScrollbarWidth();\n this._borderHandles = [\"top\", \"left\", \"right\", \"bottom\"];\n\n const handles = element.selectAll(\"div.borderHandle\").data(this._borderHandles);\n handles.enter().append(\"div\")\n .classed(\"borderHandle\", true)\n .each(function (handle) {\n const h = d3Select(this);\n h.classed(\"borderHandle_\" + handle, true)\n .classed(\"borderHandleDisabled\", context.getContent(handle) === null)\n ;\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._sectionTypeArr = this.sectionTypes();\n const context = this;\n\n element.classed(\"design-mode\", this.designMode());\n\n this.setLayoutOffsets();\n\n const rows = this.contentDiv.selectAll(\".cell_\" + this._id).data(this.content(), function (d) { return d._id; });\n const rowsUpdate = rows.enter().append(\"div\")\n .classed(\"cell_\" + this._id, true)\n .style(\"position\", \"absolute\")\n .each(function (d, i) {\n d3Select(this).classed(\"border-cell border-cell-\" + context._sectionTypeArr[i], true);\n d.target(this);\n d3Select(\"#\" + context.id() + \" > div.borderHandle_\" + context._sectionTypeArr[i])\n .classed(\"borderHandleDisabled\", false);\n }).merge(rows);\n rowsUpdate\n .each(function (d, idx) {\n const sectionType = context.sectionTypes()[idx];\n if (typeof (context[sectionType + \"ShrinkWrap\"]) !== \"undefined\" && context[sectionType + \"ShrinkWrap\"]()) {\n d.render();\n context._shrinkWrapBoxes[sectionType] = d.widget().getBBox(true);\n } else {\n delete context._shrinkWrapBoxes[sectionType];\n }\n });\n\n const drag = d3Drag()\n .on(\"start\", function (d, i) { context.dragStart.call(context, d, i); })\n .on(\"drag\", function (d, i) { context.dragTick.call(context, d, i); })\n .on(\"end\", function (d, i) { context.dragEnd.call(context, d, i); })\n ;\n if (this.designMode()) {\n element.selectAll(\"#\" + this.id() + \" > div.borderHandle\").call(drag);\n } else {\n element.selectAll(\"#\" + this.id() + \" > div.borderHandle\").on(\".drag\", null);\n }\n\n const layoutObj = this.borderLayoutObject();\n this.content().forEach(function (cell, i) {\n cell._fixedLeft = layoutObj[this.sectionTypes()[i]].left;\n cell._fixedTop = layoutObj[this.sectionTypes()[i]].top;\n cell._fixedWidth = layoutObj[this.sectionTypes()[i]].width;\n cell._fixedHeight = layoutObj[this.sectionTypes()[i]].height;\n cell._dragHandles = [];\n }, this);\n\n rowsUpdate\n .style(\"left\", function (d) { return d._fixedLeft + \"px\"; })\n .style(\"top\", function (d) { return d._fixedTop + \"px\"; })\n .style(\"width\", function (d) { return d._fixedWidth - context.gutter() + \"px\"; })\n .style(\"height\", function (d) { return d._fixedHeight - context.gutter() + \"px\"; })\n .each(function (d) {\n d._placeholderElement\n .attr(\"draggable\", context.designMode())\n .selectAll(\".dragHandle\")\n .attr(\"draggable\", context.designMode())\n ;\n d\n .surfacePadding(context.surfacePadding())\n .resize()\n ;\n });\n rows.exit().each(function (d) {\n d.target(null);\n }).remove();\n\n this.getCellSizes();\n\n element\n .selectAll(\"#\" + this.id() + \" > div.borderHandle\")\n .each(function () {\n const handle = d3Select(this);\n if (handle.classed(\"borderHandle_top\")) {\n handle.style(\"width\", context._cellSizes.width + \"px\");\n handle.style(\"top\", (context._cellSizes.topHeight - 3) + \"px\");\n } else if (handle.classed(\"borderHandle_right\")) {\n handle.style(\"left\", (context._cellSizes.width - context._cellSizes.rightWidth) + \"px\");\n handle.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n handle.style(\"height\", context._cellSizes.rightHeight + \"px\");\n } else if (handle.classed(\"borderHandle_bottom\")) {\n handle.style(\"width\", context._cellSizes.width + \"px\");\n handle.style(\"top\", (context._cellSizes.height - context._cellSizes.bottomHeight - 3) + \"px\");\n } else if (handle.classed(\"borderHandle_left\")) {\n handle.style(\"left\", context._cellSizes.leftWidth + \"px\");\n handle.style(\"height\", context._cellSizes.leftHeight + \"px\");\n handle.style(\"top\", (context._cellSizes.topHeight + 3) + \"px\");\n }\n\n })\n ;\n }\n\n getCellSizes() {\n const context = this;\n context._cellSizes = {};\n const contentRect = this.element().node().getBoundingClientRect();\n context._cellSizes.width = contentRect.width;\n context._cellSizes.height = contentRect.height;\n this.element()\n .selectAll(\"#\" + this.id() + \" > div > div.border-cell\")\n .each(function () {\n const cell = d3Select(this);\n if (typeof cell.node === \"function\") {\n const rect = cell.node().getBoundingClientRect();\n if (cell.classed(\"border-cell-top\")) {\n context._cellSizes.topHeight = rect.height;\n } else if (cell.classed(\"border-cell-left\")) {\n context._cellSizes.leftWidth = rect.width;\n context._cellSizes.leftHeight = rect.height;\n } else if (cell.classed(\"border-cell-right\")) {\n context._cellSizes.rightWidth = rect.width;\n context._cellSizes.rightHeight = rect.height;\n } else if (cell.classed(\"border-cell-bottom\")) {\n context._cellSizes.bottomHeight = rect.height;\n }\n }\n });\n const sizes = [\"height\", \"width\", \"topHeight\", \"bottomHeight\", \"leftHeight\", \"rightHeight\", \"leftWidth\", \"rightWidth\"];\n sizes.forEach(function (size) {\n context._cellSizes[size] = context._cellSizes[size] === undefined ? 0 : context._cellSizes[size];\n });\n }\n\n postUpdate(domNode, element) {\n const context = this;\n this.content().forEach(function (n) {\n if (n._element.node() !== null && n.widget()) {\n const prevBox = n.widget().getBBox(false, true);\n const currBox = n.widget().getBBox(true, true);\n if (prevBox.width !== currBox.width || prevBox.height !== currBox.height) {\n context.lazyRender();\n }\n }\n });\n }\n\n exit(domNode, element) {\n this.content().forEach(w => w.target(null));\n super.exit(domNode, element);\n }\n}\nBorder.prototype._class += \" layout_Border\";\n\nexport interface Border {\n designMode(): boolean;\n designMode(_: boolean): this;\n\n content(): any[];\n content(_: any[]): this;\n\n gutter(): number;\n gutter(_: number): this;\n\n topShrinkWrap(): boolean;\n topShrinkWrap(_: boolean): this;\n leftShrinkWrap(): boolean;\n leftShrinkWrap(_: boolean): this;\n rightShrinkWrap(): boolean;\n rightShrinkWrap(_: boolean): this;\n bottomShrinkWrap(): boolean;\n bottomShrinkWrap(_: boolean): this;\n\n topSize(): number;\n topSize(_: number): this;\n leftSize(): number;\n leftSize(_: number): this;\n rightSize(): number;\n rightSize(_: number): this;\n bottomSize(): number;\n bottomSize(_: number): this;\n\n topPercentage(): number;\n topPercentage(_: number): this;\n leftPercentage(): number;\n leftPercentage(_: number): this;\n rightPercentage(): number;\n rightPercentage(_: number): this;\n bottomPercentage(): number;\n bottomPercentage(_: number): this;\n\n surfacePadding(): number;\n surfacePadding(_: number): this;\n\n sectionTypes(): any[];\n sectionTypes(_: any[]): this;\n}\n\nBorder.prototype.publish(\"designMode\", false, \"boolean\", \"Design Mode\", null, { tags: [\"Basic\"] });\n\nBorder.prototype.publish(\"content\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Intermediate\"] });\n\nBorder.prototype.publish(\"gutter\", 0, \"number\", \"Gap Between Widgets\", null, { tags: [\"Basic\"] });\n\nBorder.prototype.publish(\"topShrinkWrap\", false, \"boolean\", \"'Top' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\nBorder.prototype.publish(\"leftShrinkWrap\", false, \"boolean\", \"'Left' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\nBorder.prototype.publish(\"rightShrinkWrap\", false, \"boolean\", \"'Right' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\nBorder.prototype.publish(\"bottomShrinkWrap\", false, \"boolean\", \"'Bottom' Cell shrinks to fit content\", null, { tags: [\"Intermediate\"] });\n\nBorder.prototype.publish(\"topSize\", 0, \"number\", \"Height of the 'Top' Cell (px)\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"leftSize\", 0, \"number\", \"Width of the 'Left' Cell (px)\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"rightSize\", 0, \"number\", \"Width of the 'Right' Cell (px)\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"bottomSize\", 0, \"number\", \"Height of the 'Bottom' Cell (px)\", null, { tags: [\"Private\"] });\n\nBorder.prototype.publish(\"topPercentage\", 20, \"number\", \"Percentage (of parent) Height of the 'Top' Cell\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"leftPercentage\", 20, \"number\", \"Percentage (of parent) Width of the 'Left' Cell\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"rightPercentage\", 20, \"number\", \"Percentage (of parent) Width of the 'Right' Cell\", null, { tags: [\"Private\"] });\nBorder.prototype.publish(\"bottomPercentage\", 20, \"number\", \"Percentage (of parent) Height of the 'Bottom' Cell\", null, { tags: [\"Private\"] });\n\nBorder.prototype.publish(\"surfacePadding\", 0, \"number\", \"Cell Padding (px)\", null, { tags: [\"Intermediate\"] });\n\nBorder.prototype.publish(\"sectionTypes\", [], \"array\", \"Section Types sharing an index with 'content' - Used to determine position/size.\", null, { tags: [\"Private\"] });\n","import { BBox, HTMLWidget, Platform, Widget } from \"@hpcc-js/common\";\n\nimport \"../src/Border2.css\";\n\nexport type OverflowT = \"hidden\" | \"scroll\" | \"visible\" | \"auto\";\nexport type ChartPanelSectionT = \"top\" | \"right\" | \"bottom\" | \"left\" | \"center\";\nexport class WidgetDiv {\n private _div;\n private _overlay: boolean = false;\n private _overflowX: OverflowT = \"visible\";\n private _overflowY: OverflowT = \"visible\";\n private _widget: Widget;\n\n constructor(div) {\n this._div = div;\n }\n\n overlay(): boolean;\n overlay(_: boolean): this;\n overlay(_?: boolean): boolean | this {\n if (!arguments.length) return this._overlay;\n this._overlay = _;\n return this;\n }\n\n overflowX(): OverflowT;\n overflowX(_: OverflowT): this;\n overflowX(_?: OverflowT): OverflowT | this {\n if (!arguments.length) return this._overflowX;\n this._overflowX = _;\n this._div.style(\"overflow-x\", _);\n return this;\n }\n overflowY(): OverflowT;\n overflowY(_: OverflowT): this;\n overflowY(_?: OverflowT): OverflowT | this {\n if (!arguments.length) return this._overflowY;\n this._overflowY = _;\n this._div.style(\"overflow-y\", _);\n return this;\n }\n\n element() {\n return this._div;\n }\n\n node(): SVGElement | HTMLElement {\n return this._div.node();\n }\n\n widget(): Widget;\n widget(_: Widget): this;\n widget(_?: Widget): Widget | this {\n if (!arguments.length) return this._widget;\n if (this._widget !== _) {\n if (this._widget) {\n this._widget.target(null);\n }\n this._widget = _;\n if (this._widget) {\n this._widget.target(this._div.node());\n }\n }\n return this;\n }\n\n resize(size: { width: number, height: number }) {\n if (this._widget) {\n this._div\n .style(\"width\", `${size.width}px`)\n .style(\"height\", `${size.height}px`)\n ;\n this._widget.resize(size);\n }\n return this;\n }\n\n async render(getBBox?, availableHeight?: number, availableWidth?: number): Promise<BBox | undefined> {\n let overflowX = this.overflowX();\n if(!this.overlay() && overflowX === \"visible\") {\n overflowX = null;\n }\n let overflowY = this.overflowY();\n if(!this.overlay() && overflowY === \"visible\") {\n overflowY = null;\n }\n this._div\n .style(\"height\", this.overlay() ? \"0px\" : null)\n .style(\"overflow-x\", overflowX)\n .style(\"overflow-y\", overflowY)\n ;\n if (this._widget) {\n return this._widget.renderPromise().then(w => {\n if (getBBox && this._widget.visible()) {\n const retVal = this._widget.getBBox();\n retVal.width += 8;\n if (availableHeight !== undefined && retVal.height > availableHeight) {\n retVal.width += Platform.getScrollbarWidth();\n }\n if (availableWidth !== undefined && retVal.width > availableWidth) {\n retVal.height += Platform.getScrollbarWidth();\n }\n if (this.overlay()) {\n retVal.height = 0;\n } else {\n retVal.height += 4;\n }\n return retVal;\n }\n return getBBox ? { x: 0, y: 0, width: 0, height: 0 } : undefined;\n });\n } else {\n return Promise.resolve(getBBox ? { x: 0, y: 0, width: 0, height: 0 } : undefined);\n }\n }\n}\n\nexport class Border2 extends HTMLWidget {\n\n protected _bodyElement;\n\n protected _topWA: WidgetDiv;\n protected _leftWA: WidgetDiv;\n protected _centerWA: WidgetDiv;\n protected _rightWA: WidgetDiv;\n protected _bottomWA: WidgetDiv;\n protected _topPrevOverflow: OverflowT;\n protected _leftPrevOverflow: OverflowT;\n protected _rightPrevOverflow: OverflowT;\n protected _bottomPrevOverflow: OverflowT;\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n \n const topElement = element.append(\"header\");\n\n this._bodyElement = element.append(\"div\").attr(\"class\", \"body\");\n const centerElement = this._bodyElement.append(\"div\").attr(\"class\", \"center\");\n const leftElement = this._bodyElement.append(\"div\").attr(\"class\", \"lhs\");\n const rightElement = this._bodyElement.append(\"div\").attr(\"class\", \"rhs\");\n\n const bottomElement = element.append(\"div\").attr(\"class\", \"footer\");\n\n this._topWA = new WidgetDiv(topElement);\n this._centerWA = new WidgetDiv(centerElement);\n this._leftWA = new WidgetDiv(leftElement);\n this._rightWA = new WidgetDiv(rightElement);\n this._bottomWA = new WidgetDiv(bottomElement);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._topWA.element().style(\"display\", this.showTop() ? null : \"none\");\n this._rightWA.element().style(\"display\", this.showRight() ? null : \"none\");\n this._bottomWA.element().style(\"display\", this.showBottom() ? null : \"none\");\n this._leftWA.element().style(\"display\", this.showLeft() ? null : \"none\");\n if(this.topOverflowX() !== this._topWA.overflowX()) {\n this._topWA.overflowX(this.topOverflowX());\n }\n if(this.rightOverflowX() !== this._rightWA.overflowX()) {\n this._rightWA.overflowX(this.rightOverflowX());\n }\n if(this.bottomOverflowX() !== this._bottomWA.overflowX()) {\n this._bottomWA.overflowX(this.bottomOverflowX());\n }\n if(this.leftOverflowX() !== this._leftWA.overflowX()) {\n this._leftWA.overflowX(this.leftOverflowX());\n }\n if(this.topOverflowY() !== this._topWA.overflowY()) {\n this._topWA.overflowY(this.topOverflowY());\n }\n if(this.rightOverflowY() !== this._rightWA.overflowY()) {\n this._rightWA.overflowY(this.rightOverflowY());\n }\n if(this.bottomOverflowY() !== this._bottomWA.overflowY()) {\n this._bottomWA.overflowY(this.bottomOverflowY());\n }\n if(this.leftOverflowY() !== this._leftWA.overflowY()) {\n this._leftWA.overflowY(this.leftOverflowY());\n }\n this.element()\n .style(\"width\", `${this.width()}px`)\n .style(\"height\", `${this.height()}px`)\n ;\n }\n\n private targetNull(w?: Widget) {\n if (w) {\n w.target(null);\n }\n }\n\n exit(domNode, element) {\n this.targetNull(this.center());\n this.targetNull(this.bottom());\n this.targetNull(this.right());\n this.targetNull(this.left());\n this.targetNull(this.top());\n super.exit(domNode, element);\n }\n\n swap(sectionA: ChartPanelSectionT, sectionB: ChartPanelSectionT): this {\n const a = this[sectionA]();\n const b = this[sectionB]();\n this.targetNull(a);\n this.targetNull(b);\n this[`_${sectionA}WA`].widget(null);\n this[`_${sectionB}WA`].widget(null);\n this[sectionA](b);\n this[sectionB](a);\n return this;\n }\n\n render(callback?: (w: Widget) => void): this {\n const retVal = super.render(w => {\n if (this._topWA) {\n this._topWA\n .widget(this.top())\n .overlay(this.topOverlay())\n .render(true).then(async topBBox => {\n const bottomBBox: BBox = await this._bottomWA.widget(this.bottom()).render(true, undefined, this.width()) as BBox;\n const availableHeight = this.height() - (topBBox.height + bottomBBox.height);\n const leftBBox: BBox = await this._leftWA.widget(this.left()).render(true, availableHeight) as BBox;\n const rightBBox: BBox = await this._rightWA.widget(this.right()).render(true, availableHeight) as BBox;\n \n if (this.bottomHeight_exists()) {\n bottomBBox.height = this.bottomHeight();\n }\n const bodyWidth = this.width() - (leftBBox.width + rightBBox.width);\n const bodyHeight = this.height() - (topBBox.height + bottomBBox.height);\n \n const centerOverflowX = this.centerOverflowX();\n const centerOverflowY = this.centerOverflowY();\n\n const scrollCenterX = [\"auto\", \"scroll\"].indexOf(centerOverflowX) !== -1;\n const scrollCenterY = [\"auto\", \"scroll\"].indexOf(centerOverflowY) !== -1;\n if(scrollCenterX || scrollCenterY) {\n this._centerWA\n .overflowX(this.centerOverflowX())\n .overflowY(this.centerOverflowY())\n .widget(this.center())\n .resize({\n width: bodyWidth,\n height: bodyHeight\n })\n .render()\n ;\n }\n this._bodyElement.style(\"height\", `${bodyHeight}px`);\n const promises = [\n this._topWA\n .overflowX(this.topOverflowX())\n .overflowY(this.topOverflowY())\n .resize({\n width: this.width(),\n height: topBBox.height\n })\n .render(),\n this._leftWA\n .overflowX(this.leftOverflowX())\n .overflowY(this.leftOverflowY())\n .resize({\n width: leftBBox.width,\n height: bodyHeight\n })\n .render(),\n this._rightWA\n .overflowX(this.rightOverflowX())\n .overflowY(this.rightOverflowY())\n .resize({\n width: rightBBox.width,\n height: bodyHeight\n })\n .render(),\n this._centerWA\n .overflowX(this.centerOverflowX())\n .overflowY(this.centerOverflowY())\n .widget(this.center())\n .resize({\n width: bodyWidth,\n height: bodyHeight\n })\n .render(),\n this._bottomWA\n .overflowX(this.bottomOverflowX())\n .overflowY(this.bottomOverflowY())\n .resize({\n width: this.width(),\n height: bottomBBox.height\n })\n .render()\n ];\n Promise.all(promises).then(promises => {\n if (callback) {\n callback(this);\n }\n });\n })\n ;\n } else {\n if (callback) {\n callback(this);\n }\n }\n });\n return retVal;\n }\n}\nBorder2.prototype._class += \" layout_Border2\";\n\nexport interface Border2 {\n top(): Widget;\n top(_: Widget): this;\n topOverlay(): boolean;\n topOverlay(_: boolean): this;\n left(): Widget;\n left(_: Widget): this;\n center(): Widget;\n center(_: Widget): this;\n right(): Widget;\n right(_: Widget): this;\n bottom(): Widget;\n bottom(_: Widget): this;\n bottomHeight(): number;\n bottomHeight(_: number): this;\n bottomHeight_exists(): boolean;\n topOverflowX(): OverflowT;\n topOverflowX(_: OverflowT): this;\n rightOverflowX(): OverflowT;\n rightOverflowX(_: OverflowT): this;\n bottomOverflowX(): OverflowT;\n bottomOverflowX(_: OverflowT): this;\n leftOverflowX(): OverflowT;\n leftOverflowX(_: OverflowT): this;\n centerOverflowX(): OverflowT;\n centerOverflowX(_: OverflowT): this;\n topOverflowY(): OverflowT;\n topOverflowY(_: OverflowT): this;\n rightOverflowY(): OverflowT;\n rightOverflowY(_: OverflowT): this;\n bottomOverflowY(): OverflowT;\n bottomOverflowY(_: OverflowT): this;\n leftOverflowY(): OverflowT;\n leftOverflowY(_: OverflowT): this;\n centerOverflowY(): OverflowT;\n centerOverflowY(_: OverflowT): this;\n showTop(): boolean;\n showTop(_: boolean): this;\n showRight(): boolean;\n showRight(_: boolean): this;\n showBottom(): boolean;\n showBottom(_: boolean): this;\n showLeft(): boolean;\n showLeft(_: boolean): this;\n topOverflowX_default(_: OverflowT);\n rightOverflowX_default(_: OverflowT);\n bottomOverflowX_default(_: OverflowT);\n leftOverflowX_default(_: OverflowT);\n centerOverflowX_default(_: OverflowT);\n topOverflowY_default(_: OverflowT);\n rightOverflowY_default(_: OverflowT);\n bottomOverflowY_default(_: OverflowT);\n leftOverflowY_default(_: OverflowT);\n centerOverflowY_default(_: OverflowT);\n}\nBorder2.prototype.publish(\"showTop\", true, \"boolean\", \"If true, top widget adapter will display\");\nBorder2.prototype.publish(\"showRight\", true, \"boolean\", \"If true, right widget adapter will display\");\nBorder2.prototype.publish(\"showBottom\", true, \"boolean\", \"If true, bottom widget adapter will display\");\nBorder2.prototype.publish(\"showLeft\", true, \"boolean\", \"If true, left widget adapter will display\");\nBorder2.prototype.publish(\"topOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the top widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"rightOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the right widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"bottomOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the bottom widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"leftOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the left widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"centerOverflowX\", \"visible\", \"set\", \"Sets the overflow-x css style for the center widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"topOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the top widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"rightOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the right widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"bottomOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the bottom widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"leftOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the left widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"centerOverflowY\", \"visible\", \"set\", \"Sets the overflow-y css style for the center widget adapter\", [\"hidden\", \"scroll\", \"visible\", \"auto\"]);\nBorder2.prototype.publish(\"top\", null, \"widget\", \"Top Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"topOverlay\", false, \"boolean\", \"Overlay Top Widget\");\nBorder2.prototype.publish(\"left\", null, \"widget\", \"Left Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"center\", null, \"widget\", \"Center Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"right\", null, \"widget\", \"Right Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"bottom\", null, \"widget\", \"Bottom Widget\", undefined, { render: false });\nBorder2.prototype.publish(\"bottomHeight\", null, \"number\", \"Bottom Fixed Height\", undefined, { optional: true });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport \"d3-transition\";\n\nimport \"../src/Carousel.css\";\n\nexport class Carousel extends HTMLWidget {\n\n protected _prevActive: number = 0;\n protected _root;\n\n activeWidget(): Widget {\n return this.widgets()[this.active()];\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._root = element.append(\"div\")\n .attr(\"id\", `${this.id()}_root`)\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const active = this.active();\n const width = this.width();\n this._root\n .style(\"width\", `${width}px`)\n .style(\"height\", `${this.height()}px`)\n ;\n const widgetElements = this._root.selectAll(`#${this.id()}_root > .carouselItem`).data(this.widgets(), d => d.id());\n const update = widgetElements.enter().append(\"div\")\n .attr(\"class\", \"carouselItem\")\n .each(function (w) {\n w.target(this);\n })\n .merge(widgetElements)\n .style(\"left\", (d, i) => `${(i - this._prevActive) * width}px`)\n .style(\"width\", `${width}px`)\n ;\n if (this._prevActive !== active) {\n update\n .style(\"display\", (d, i) => i === this._prevActive || i === active ? null : \"none\") // Must be called before render callback (not inside transition)\n .transition().duration(this.transitionDuration())\n .style(\"left\", (d, i) => `${(i - active) * width}px`)\n .on(\"end\", function (d, i) {\n d3Select(this).style(\"display\", () => i === active ? null : \"none\");\n })\n ;\n this._prevActive = active;\n }\n widgetElements.exit()\n .each(function (w) {\n w.target(null);\n })\n .remove()\n ;\n }\n\n exit(domNode, element) {\n this.widgets().forEach(w => w.target(null));\n super.exit(domNode, element);\n }\n\n render(callback): this {\n return super.render(w => {\n if (!this.visible() || this.isDOMHidden()) {\n if (callback) {\n callback(w);\n }\n } else {\n const aw = this.activeWidget();\n if (aw) {\n aw\n .resize(this.size())\n .render(w2 => {\n if (callback) {\n callback(w);\n }\n })\n ;\n }\n }\n });\n }\n}\nCarousel.prototype._class += \" layout_Carousel\";\n\nexport interface Carousel {\n widgets(): Widget[];\n widgets(_: Widget[]): this;\n active(): number;\n active(_: number): this;\n transitionDuration(): Widget[];\n transitionDuration(_: Widget[]): this;\n}\n\nCarousel.prototype.publish(\"widgets\", [], \"widgetArray\", \"Widgets\", null, { render: false });\nCarousel.prototype.publish(\"active\", 0, \"number\", \"Active widget\");\nCarousel.prototype.publish(\"transitionDuration\", 500, \"number\", \"Transition duration\");\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {pi, tau} from \"../math.js\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","export default {\n draw: function(context, size) {\n var r = Math.sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math.js\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","export default {\n draw: function(context, size) {\n var w = Math.sqrt(size),\n x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport star from \"./symbol/star.js\";\nimport square from \"./symbol/square.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport wye from \"./symbol/wye.js\";\nimport constant from \"./constant.js\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","import { select } from 'd3-selection';\nimport { format, formatLocale, formatPrefix, formatSpecifier } from 'd3-format';\nimport { dispatch } from 'd3-dispatch';\nimport { scaleLinear } from 'd3-scale';\nimport { max, sum } from 'd3-array';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar d3_identity = function d3_identity(d) {\n return d;\n};\n\nvar d3_reverse = function d3_reverse(arr) {\n var mirror = [];\n for (var i = 0, l = arr.length; i < l; i++) {\n mirror[i] = arr[l - i - 1];\n }\n return mirror;\n};\n\n//Text wrapping code adapted from Mike Bostock\nvar d3_textWrapping = function d3_textWrapping(text, width) {\n text.each(function () {\n var text = select(this),\n words = text.text().split(/\\s+/).reverse(),\n word,\n line = [],\n lineNumber = 0,\n lineHeight = 1.2,\n //ems\n y = text.attr(\"y\"),\n dy = parseFloat(text.attr(\"dy\")) || 0,\n tspan = text.text(null).append(\"tspan\").attr(\"x\", 0).attr(\"dy\", dy + \"em\");\n\n while (word = words.pop()) {\n line.push(word);\n tspan.text(line.join(\" \"));\n if (tspan.node().getComputedTextLength() > width && line.length > 1) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", lineHeight + dy + \"em\").text(word);\n }\n }\n });\n};\n\nvar d3_mergeLabels = function d3_mergeLabels() {\n var gen = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var labels = arguments[1];\n var domain = arguments[2];\n var range = arguments[3];\n var labelDelimiter = arguments[4];\n\n if ((typeof labels === \"undefined\" ? \"undefined\" : _typeof(labels)) === \"object\") {\n if (labels.length === 0) return gen;\n\n var i = labels.length;\n for (; i < gen.length; i++) {\n labels.push(gen[i]);\n }\n return labels;\n } else if (typeof labels === \"function\") {\n var customLabels = [];\n var genLength = gen.length;\n for (var _i = 0; _i < genLength; _i++) {\n customLabels.push(labels({\n i: _i,\n genLength: genLength,\n generatedLabels: gen,\n domain: domain,\n range: range,\n labelDelimiter: labelDelimiter\n }));\n }\n return customLabels;\n }\n\n return gen;\n};\n\nvar d3_linearLegend = function d3_linearLegend(scale, cells, labelFormat) {\n var data = [];\n\n if (cells.length > 1) {\n data = cells;\n } else {\n var domain = scale.domain(),\n increment = (domain[domain.length - 1] - domain[0]) / (cells - 1);\n var i = 0;\n\n for (; i < cells; i++) {\n data.push(domain[0] + i * increment);\n }\n }\n\n var labels = data.map(labelFormat);\n return {\n data: data,\n labels: labels,\n feature: function feature(d) {\n return scale(d);\n }\n };\n};\n\nvar d3_quantLegend = function d3_quantLegend(scale, labelFormat, labelDelimiter) {\n var labels = scale.range().map(function (d) {\n var invert = scale.invertExtent(d);\n return labelFormat(invert[0]) + \" \" + labelDelimiter + \" \" + labelFormat(invert[1]);\n });\n\n return {\n data: scale.range(),\n labels: labels,\n feature: d3_identity\n };\n};\n\nvar d3_ordinalLegend = function d3_ordinalLegend(scale) {\n return {\n data: scale.domain(),\n labels: scale.domain(),\n feature: function feature(d) {\n return scale(d);\n }\n };\n};\n\nvar d3_cellOver = function d3_cellOver(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellover\", obj, d);\n};\n\nvar d3_cellOut = function d3_cellOut(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellout\", obj, d);\n};\n\nvar d3_cellClick = function d3_cellClick(cellDispatcher, d, obj) {\n cellDispatcher.call(\"cellclick\", obj, d);\n};\n\nvar helper = {\n d3_drawShapes: function d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path) {\n if (shape === \"rect\") {\n shapes.attr(\"height\", shapeHeight).attr(\"width\", shapeWidth);\n } else if (shape === \"circle\") {\n shapes.attr(\"r\", shapeRadius);\n } else if (shape === \"line\") {\n shapes.attr(\"x1\", 0).attr(\"x2\", shapeWidth).attr(\"y1\", 0).attr(\"y2\", 0);\n } else if (shape === \"path\") {\n shapes.attr(\"d\", path);\n }\n },\n\n d3_addText: function d3_addText(svg, enter, labels, classPrefix, labelWidth) {\n enter.append(\"text\").attr(\"class\", classPrefix + \"label\");\n var text = svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").data(labels).text(d3_identity);\n\n if (labelWidth) {\n svg.selectAll(\"g.\" + classPrefix + \"cell text.\" + classPrefix + \"label\").call(d3_textWrapping, labelWidth);\n }\n\n return text;\n },\n\n d3_calcType: function d3_calcType(scale, ascending, cells, labels, labelFormat, labelDelimiter) {\n var type = scale.invertExtent ? d3_quantLegend(scale, labelFormat, labelDelimiter) : scale.ticks ? d3_linearLegend(scale, cells, labelFormat) : d3_ordinalLegend(scale);\n\n //for d3.scaleSequential that doesn't have a range function\n var range = scale.range && scale.range() || scale.domain();\n type.labels = d3_mergeLabels(type.labels, labels, scale.domain(), range, labelDelimiter);\n\n if (ascending) {\n type.labels = d3_reverse(type.labels);\n type.data = d3_reverse(type.data);\n }\n\n return type;\n },\n\n d3_filterCells: function d3_filterCells(type, cellFilter) {\n var filterCells = type.data.map(function (d, i) {\n return { data: d, label: type.labels[i] };\n }).filter(cellFilter);\n var dataValues = filterCells.map(function (d) {\n return d.data;\n });\n var labelValues = filterCells.map(function (d) {\n return d.label;\n });\n type.data = type.data.filter(function (d) {\n return dataValues.indexOf(d) !== -1;\n });\n type.labels = type.labels.filter(function (d) {\n return labelValues.indexOf(d) !== -1;\n });\n return type;\n },\n\n d3_placement: function d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign) {\n cell.attr(\"transform\", cellTrans);\n text.attr(\"transform\", textTrans);\n if (orient === \"horizontal\") {\n text.style(\"text-anchor\", labelAlign);\n }\n },\n\n d3_addEvents: function d3_addEvents(cells, dispatcher) {\n cells.on(\"mouseover.legend\", function (d) {\n d3_cellOver(dispatcher, d, this);\n }).on(\"mouseout.legend\", function (d) {\n d3_cellOut(dispatcher, d, this);\n }).on(\"click.legend\", function (d) {\n d3_cellClick(dispatcher, d, this);\n });\n },\n\n d3_title: function d3_title(svg, title, classPrefix, titleWidth) {\n if (title !== \"\") {\n var titleText = svg.selectAll(\"text.\" + classPrefix + \"legendTitle\");\n\n titleText.data([title]).enter().append(\"text\").attr(\"class\", classPrefix + \"legendTitle\");\n\n svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").text(title);\n\n if (titleWidth) {\n svg.selectAll(\"text.\" + classPrefix + \"legendTitle\").call(d3_textWrapping, titleWidth);\n }\n\n var cellsSvg = svg.select(\".\" + classPrefix + \"legendCells\");\n var yOffset = svg.select(\".\" + classPrefix + \"legendTitle\").nodes().map(function (d) {\n return d.getBBox().height;\n })[0],\n xOffset = -cellsSvg.nodes().map(function (d) {\n return d.getBBox().x;\n })[0];\n cellsSvg.attr(\"transform\", \"translate(\" + xOffset + \",\" + yOffset + \")\");\n }\n },\n\n d3_defaultLocale: {\n format: format,\n formatPrefix: formatPrefix\n },\n\n d3_defaultFormatSpecifier: \".01f\",\n\n d3_defaultDelimiter: \"to\"\n};\n\nfunction color() {\n var scale = scaleLinear(),\n shape = \"rect\",\n shapeWidth = 15,\n shapeHeight = 15,\n shapeRadius = 10,\n shapePadding = 2,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n useClass = false,\n title = \"\",\n locale = helper.d3_defaultLocale,\n specifier = helper.d3_defaultFormatSpecifier,\n labelOffset = 10,\n labelAlign = \"middle\",\n labelDelimiter = helper.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n path = void 0,\n titleWidth = void 0,\n legendDispatcher = dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n if (cellFilter) {\n helper.d3_filterCells(type, cellFilter);\n }\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\").data(type.data);\n\n //add event handlers\n helper.d3_addEvents(cellEnter, legendDispatcher);\n\n cell.exit().transition().style(\"opacity\", 0).remove();\n shapes.exit().transition().style(\"opacity\", 0).remove();\n\n shapes = shapes.merge(shapes);\n\n helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, path);\n var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n // sets placement\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d) {\n return d.getBBox();\n });\n //sets scale\n //everything is fill except for line which is stroke,\n if (!useClass) {\n if (shape == \"line\") {\n shapes.style(\"stroke\", type.feature);\n } else {\n shapes.style(\"fill\", type.feature);\n }\n } else {\n shapes.attr(\"class\", function (d) {\n return classPrefix + \"swatch \" + type.feature(d);\n });\n }\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(d.height, shapeSize[i].height);\n });\n\n cellTrans = function cellTrans(d, i) {\n var height = sum(cellSize.slice(0, i));\n return \"translate(0, \" + (height + i * shapePadding) + \")\";\n };\n\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width + shapeSize[i].x + labelOffset) + \", \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n cellTrans = function cellTrans(d, i) {\n return \"translate(\" + i * (shapeSize[i].width + shapePadding) + \",0)\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate(\" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (shapeSize[i].height + shapeSize[i].y + labelOffset + 8) + \")\";\n };\n }\n\n helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n helper.d3_title(svg, title, classPrefix, titleWidth);\n\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shape = function (_, d) {\n if (!arguments.length) return shape;\n if (_ == \"rect\" || _ == \"circle\" || _ == \"line\" || _ == \"path\" && typeof d === \"string\") {\n shape = _;\n path = d;\n }\n return legend;\n };\n\n legend.shapeWidth = function (_) {\n if (!arguments.length) return shapeWidth;\n shapeWidth = +_;\n return legend;\n };\n\n legend.shapeHeight = function (_) {\n if (!arguments.length) return shapeHeight;\n shapeHeight = +_;\n return legend;\n };\n\n legend.shapeRadius = function (_) {\n if (!arguments.length) return shapeRadius;\n shapeRadius = +_;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = formatLocale(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = formatSpecifier(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.useClass = function (_) {\n if (!arguments.length) return useClass;\n if (_ === true || _ === false) {\n useClass = _;\n }\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.textWrap = function (_) {\n if (!arguments.length) return textWrap;\n textWrap = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\nfunction size() {\n var scale = scaleLinear(),\n shape = \"rect\",\n shapeWidth = 15,\n shapePadding = 2,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n title = \"\",\n locale = helper.d3_defaultLocale,\n specifier = helper.d3_defaultFormatSpecifier,\n labelOffset = 10,\n labelAlign = \"middle\",\n labelDelimiter = helper.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n path = void 0,\n titleWidth = void 0,\n legendDispatcher = dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n if (cellFilter) {\n helper.d3_filterCells(type, cellFilter);\n }\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n //add event handlers\n helper.d3_addEvents(cellEnter, legendDispatcher);\n\n cell.exit().transition().style(\"opacity\", 0).remove();\n\n shapes.exit().transition().style(\"opacity\", 0).remove();\n shapes = shapes.merge(shapes);\n\n //creates shape\n if (shape === \"line\") {\n helper.d3_drawShapes(shape, shapes, 0, shapeWidth);\n shapes.attr(\"stroke-width\", type.feature);\n } else {\n helper.d3_drawShapes(shape, shapes, type.feature, type.feature, type.feature, path);\n }\n\n var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n //sets placement\n\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d, i) {\n var bbox = d.getBBox();\n var stroke = scale(type.data[i]);\n\n if (shape === \"line\" && orient === \"horizontal\") {\n bbox.height = bbox.height + stroke;\n } else if (shape === \"line\" && orient === \"vertical\") {\n bbox.width = bbox.width;\n }\n return bbox;\n });\n\n var maxH = max(shapeSize, function (d) {\n return d.height + d.y;\n }),\n maxW = max(shapeSize, function (d) {\n return d.width + d.x;\n });\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(d.height, shapeSize[i].height);\n });\n var y = shape == \"circle\" || shape == \"line\" ? shapeSize[0].height / 2 : 0;\n cellTrans = function cellTrans(d, i) {\n var height = sum(cellSize.slice(0, i));\n\n return \"translate(0, \" + (y + height + i * shapePadding) + \")\";\n };\n\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (maxW + labelOffset) + \",\\n \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n (function () {\n cellTrans = function cellTrans(d, i) {\n var width = sum(shapeSize.slice(0, i), function (d) {\n return d.width;\n });\n var y = shape == \"circle\" || shape == \"line\" ? maxH / 2 : 0;\n return \"translate(\" + (width + i * shapePadding) + \", \" + y + \")\";\n };\n\n var offset = shape == \"line\" ? maxH / 2 : maxH;\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (offset + labelOffset) + \")\";\n };\n })();\n }\n\n helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n helper.d3_title(svg, title, classPrefix, titleWidth);\n\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shape = function (_, d) {\n if (!arguments.length) return shape;\n if (_ == \"rect\" || _ == \"circle\" || _ == \"line\") {\n shape = _;\n path = d;\n }\n return legend;\n };\n\n legend.shapeWidth = function (_) {\n if (!arguments.length) return shapeWidth;\n shapeWidth = +_;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = formatLocale(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = formatSpecifier(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\nfunction symbol() {\n var scale = scaleLinear(),\n shape = \"path\",\n shapeWidth = 15,\n shapeHeight = 15,\n shapeRadius = 10,\n shapePadding = 5,\n cells = [5],\n cellFilter = void 0,\n labels = [],\n classPrefix = \"\",\n title = \"\",\n locale = helper.d3_defaultLocale,\n specifier = helper.d3_defaultFormatSpecifier,\n labelAlign = \"middle\",\n labelOffset = 10,\n labelDelimiter = helper.d3_defaultDelimiter,\n labelWrap = void 0,\n orient = \"vertical\",\n ascending = false,\n titleWidth = void 0,\n legendDispatcher = dispatch(\"cellover\", \"cellout\", \"cellclick\");\n\n function legend(svg) {\n var type = helper.d3_calcType(scale, ascending, cells, labels, locale.format(specifier), labelDelimiter),\n legendG = svg.selectAll(\"g\").data([scale]);\n\n if (cellFilter) {\n helper.d3_filterCells(type, cellFilter);\n }\n\n legendG.enter().append(\"g\").attr(\"class\", classPrefix + \"legendCells\");\n\n var cell = svg.select(\".\" + classPrefix + \"legendCells\").selectAll(\".\" + classPrefix + \"cell\").data(type.data);\n var cellEnter = cell.enter().append(\"g\").attr(\"class\", classPrefix + \"cell\");\n cellEnter.append(shape).attr(\"class\", classPrefix + \"swatch\");\n\n var shapes = svg.selectAll(\"g.\" + classPrefix + \"cell \" + shape + \".\" + classPrefix + \"swatch\");\n\n //add event handlers\n helper.d3_addEvents(cellEnter, legendDispatcher);\n\n //remove old shapes\n cell.exit().transition().style(\"opacity\", 0).remove();\n shapes.exit().transition().style(\"opacity\", 0).remove();\n shapes = shapes.merge(shapes);\n\n helper.d3_drawShapes(shape, shapes, shapeHeight, shapeWidth, shapeRadius, type.feature);\n var text = helper.d3_addText(svg, cellEnter, type.labels, classPrefix, labelWrap);\n\n // we need to merge the selection, otherwise changes in the legend (e.g. change of orientation) are applied only to the new cells and not the existing ones.\n cell = cellEnter.merge(cell);\n\n // sets placement\n var textSize = text.nodes().map(function (d) {\n return d.getBBox();\n }),\n shapeSize = shapes.nodes().map(function (d) {\n return d.getBBox();\n });\n\n var maxH = max(shapeSize, function (d) {\n return d.height;\n }),\n maxW = max(shapeSize, function (d) {\n return d.width;\n });\n\n var cellTrans = void 0,\n textTrans = void 0,\n textAlign = labelAlign == \"start\" ? 0 : labelAlign == \"middle\" ? 0.5 : 1;\n\n //positions cells and text\n if (orient === \"vertical\") {\n (function () {\n var cellSize = textSize.map(function (d, i) {\n return Math.max(maxH, d.height);\n });\n\n cellTrans = function cellTrans(d, i) {\n var height = sum(cellSize.slice(0, i));\n return \"translate(0, \" + (height + i * shapePadding) + \" )\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (maxW + labelOffset) + \",\\n \" + (shapeSize[i].y + shapeSize[i].height / 2 + 5) + \")\";\n };\n })();\n } else if (orient === \"horizontal\") {\n cellTrans = function cellTrans(d, i) {\n return \"translate( \" + i * (maxW + shapePadding) + \",0)\";\n };\n textTrans = function textTrans(d, i) {\n return \"translate( \" + (shapeSize[i].width * textAlign + shapeSize[i].x) + \",\\n \" + (maxH + labelOffset) + \")\";\n };\n }\n\n helper.d3_placement(orient, cell, cellTrans, text, textTrans, labelAlign);\n helper.d3_title(svg, title, classPrefix, titleWidth);\n cell.transition().style(\"opacity\", 1);\n }\n\n legend.scale = function (_) {\n if (!arguments.length) return scale;\n scale = _;\n return legend;\n };\n\n legend.cells = function (_) {\n if (!arguments.length) return cells;\n if (_.length > 1 || _ >= 2) {\n cells = _;\n }\n return legend;\n };\n\n legend.cellFilter = function (_) {\n if (!arguments.length) return cellFilter;\n cellFilter = _;\n return legend;\n };\n\n legend.shapePadding = function (_) {\n if (!arguments.length) return shapePadding;\n shapePadding = +_;\n return legend;\n };\n\n legend.labels = function (_) {\n if (!arguments.length) return labels;\n labels = _;\n return legend;\n };\n\n legend.labelAlign = function (_) {\n if (!arguments.length) return labelAlign;\n if (_ == \"start\" || _ == \"end\" || _ == \"middle\") {\n labelAlign = _;\n }\n return legend;\n };\n\n legend.locale = function (_) {\n if (!arguments.length) return locale;\n locale = formatLocale(_);\n return legend;\n };\n\n legend.labelFormat = function (_) {\n if (!arguments.length) return legend.locale().format(specifier);\n specifier = formatSpecifier(_);\n return legend;\n };\n\n legend.labelOffset = function (_) {\n if (!arguments.length) return labelOffset;\n labelOffset = +_;\n return legend;\n };\n\n legend.labelDelimiter = function (_) {\n if (!arguments.length) return labelDelimiter;\n labelDelimiter = _;\n return legend;\n };\n\n legend.labelWrap = function (_) {\n if (!arguments.length) return labelWrap;\n labelWrap = _;\n return legend;\n };\n\n legend.orient = function (_) {\n if (!arguments.length) return orient;\n _ = _.toLowerCase();\n if (_ == \"horizontal\" || _ == \"vertical\") {\n orient = _;\n }\n return legend;\n };\n\n legend.ascending = function (_) {\n if (!arguments.length) return ascending;\n ascending = !!_;\n return legend;\n };\n\n legend.classPrefix = function (_) {\n if (!arguments.length) return classPrefix;\n classPrefix = _;\n return legend;\n };\n\n legend.title = function (_) {\n if (!arguments.length) return title;\n title = _;\n return legend;\n };\n\n legend.titleWidth = function (_) {\n if (!arguments.length) return titleWidth;\n titleWidth = _;\n return legend;\n };\n\n legend.on = function () {\n var value = legendDispatcher.on.apply(legendDispatcher, arguments);\n return value === legendDispatcher ? legend : value;\n };\n\n return legend;\n}\n\nvar thresholdLabels = function thresholdLabels(_ref) {\n var i = _ref.i,\n genLength = _ref.genLength,\n generatedLabels = _ref.generatedLabels,\n labelDelimiter = _ref.labelDelimiter;\n\n if (i === 0) {\n var values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n return \"Less than \" + values[1];\n } else if (i === genLength - 1) {\n var _values = generatedLabels[i].split(\" \" + labelDelimiter + \" \");\n return _values[0] + \" or more\";\n }\n return generatedLabels[i];\n};\n\nvar legendHelpers = {\n thresholdLabels: thresholdLabels\n};\n\nvar index = {\n legendColor: color,\n legendSize: size,\n legendSymbol: symbol,\n legendHelpers: legendHelpers\n};\n\nexport { color as legendColor, size as legendSize, symbol as legendSymbol, legendHelpers };export default index;\n//# sourceMappingURL=indexRollupNext.js.map\n","import { instanceOfIHighlight } from \"@hpcc-js/api\";\nimport { Database, Palette, SVGWidget, Widget } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { scaleOrdinal as d3ScaleOrdinal } from \"d3-scale\";\nimport {\n symbol as d3Symbol,\n symbolCircle as d3SymbolCircle,\n symbolCross as d3SymbolCross,\n symbolDiamond as d3SymbolDiamond,\n symbolSquare as d3SymbolSquare,\n symbolStar as d3SymbolStar,\n symbolTriangle as d3SymbolTriangle,\n symbolWye as d3SymbolWye\n} from \"d3-shape\";\nimport { legendColor as d3LegendColor } from \"d3-svg-legend\";\nimport { ChartPanel } from \"./ChartPanel.ts\";\n\nexport class Legend extends SVGWidget {\n _owner: ChartPanel;\n _targetWidget: Widget;\n _targetWidgetMonitor;\n _legendOrdinal;\n _disabled: string[] = [];\n\n private _symbolTypeMap = {\n \"circle\": d3SymbolCircle,\n \"cross\": d3SymbolCross,\n \"diamond\": d3SymbolDiamond,\n \"square\": d3SymbolSquare,\n \"star\": d3SymbolStar,\n \"triangle\": d3SymbolTriangle,\n \"wye\": d3SymbolWye\n };\n\n constructor(owner: ChartPanel) {\n super();\n this._owner = owner;\n this._drawStartPos = \"origin\";\n\n const context = this;\n this._legendOrdinal = d3LegendColor()\n .shape(\"path\", d3Symbol().type(d3SymbolCircle).size(150)())\n .shapePadding(10)\n .shapeRadius(10)\n .on(\"cellclick\", function (d) {\n context.onClick(d, this);\n })\n .on(\"cellover\", (d) => {\n context.onOver(d, this);\n })\n .on(\"cellout\", (d) => {\n context.onOut(d, this);\n })\n ;\n }\n\n isDisabled(d: string | Database.Field): boolean {\n if (typeof d === \"undefined\") {\n return false;\n } else if (typeof d === \"string\") {\n return d.indexOf(\"__\") === 0 || this._disabled.indexOf(d) >= 0;\n } else if (d instanceof Database.Field) {\n return d.id().indexOf(\"__\") === 0 || this._disabled.indexOf(d.id()) >= 0;\n }\n return this._disabled.indexOf(d) >= 0;\n }\n\n filteredFields(): Database.Field[] {\n switch (this.dataFamily()) {\n case \"2D\":\n return this.fields();\n case \"ND\":\n return this.fields().filter(d => !this.isDisabled(d));\n }\n return this.fields();\n }\n\n filteredColumns(): string[] {\n switch (this.dataFamily()) {\n case \"2D\":\n return this.columns();\n case \"ND\":\n return this.columns().filter(d => !this.isDisabled(d));\n }\n return this.columns();\n }\n\n filteredData(): any[][] {\n switch (this.dataFamily()) {\n case \"2D\":\n return this.data().filter(row => !this.isDisabled(row[0]));\n case \"ND\":\n const disabledCols: { [key: number]: boolean } = {};\n let anyDisabled: boolean = false;\n this.columns().forEach((col, idx) => {\n const disabled = this.isDisabled(col);\n disabledCols[idx] = disabled;\n if (disabled) {\n anyDisabled = true;\n }\n });\n return !anyDisabled ? this.data() : this.data().map(row => {\n return row.filter((cell, idx) => !disabledCols[idx]);\n });\n }\n return this.data();\n }\n\n isRainbow() {\n const widget = this.getWidget();\n return widget && widget._palette && widget._palette.type() === \"rainbow\";\n }\n\n targetWidget(): Widget;\n targetWidget(_: Widget): this;\n targetWidget(_?: Widget): Widget | this {\n if (!arguments.length) return this._targetWidget;\n this._targetWidget = _;\n if (this._targetWidgetMonitor) {\n this._targetWidgetMonitor.remove();\n delete this._targetWidgetMonitor;\n }\n if (this._targetWidget) {\n const context = this;\n this._targetWidgetMonitor = this._targetWidget.monitor(function (key, newProp, oldProp, source) {\n switch (key) {\n case \"chart\":\n case \"columns\":\n case \"data\":\n case \"paletteID\":\n context.lazyRender();\n break;\n }\n });\n }\n return this;\n }\n\n getWidget() {\n if (this._targetWidget) {\n switch (this._targetWidget.classID()) {\n case \"composite_MultiChart\":\n return (this._targetWidget as any).chart();\n }\n }\n return this._targetWidget;\n }\n\n getPalette(): Palette.OrdinalPaletteFunc | Palette.RainbowPaletteFunc {\n const widget = this.getWidget();\n if (widget && widget._palette) {\n switch (widget._palette.type()) {\n case \"ordinal\":\n return Palette.ordinal(widget._palette.id());\n case \"rainbow\":\n return Palette.rainbow(widget._palette.id());\n }\n }\n return Palette.ordinal(\"default\");\n }\n\n getPaletteType() {\n return this.getPalette().type();\n }\n\n fillColorFunc() {\n const widget = this.getWidget();\n if (widget && widget.fillColor) {\n // Legend will render before the widget, so its possible the widgets palette will not have switched yet...\n if (widget._palette && widget.paletteID && widget._palette.name !== widget.paletteID()) {\n widget._palette = widget._palette.switch(widget.paletteID());\n }\n return (row, col, sel) => {\n return widget.fillColor(row, col, sel);\n };\n }\n const palette = Palette.ordinal(widget && widget.paletteID ? widget.paletteID() || \"default\" : \"default\");\n return (row, col, sel) => {\n return palette(col);\n };\n }\n\n fillColor(row, col, sel) {\n return this.fillColorFunc()(row, col, sel);\n }\n\n protected _g;\n enter(domNode, element) {\n super.enter(domNode, element);\n this._g = element.append(\"g\")\n .attr(\"class\", \"legendOrdinal\")\n ;\n }\n\n calcMetaData() {\n let dataArr = [];\n let total = 0;\n let maxLabelWidth = 0;\n const colLength = this.columns().length;\n\n if (this._targetWidget) {\n const columns = this.columns();\n switch (this.getPaletteType()) {\n case \"ordinal\":\n const fillColor = this.fillColorFunc();\n let val = 0;\n switch (this.dataFamily()) {\n case \"2D\":\n dataArr = this.data().map(function (n, i) {\n val = this.data()[i].slice(1, colLength).reduce((acc, n) => acc + n, 0);\n const disabled = this.isDisabled(n[0]);\n if (!disabled) total += val;\n const label = n[0] + (!disabled && this.showSeriesTotal() ? ` (${val})` : \"\");\n const textSize = this.textSize(label);\n if (maxLabelWidth < textSize.width) maxLabelWidth = textSize.width;\n return [fillColor(n, n[0], false), n[0], label];\n }, this);\n break;\n case \"ND\":\n const widgetColumns = this.columns().filter(col => col.indexOf(\"__\") !== 0);\n dataArr = widgetColumns.filter(function (n, i) { return i > 0; }).map(function (n, i) {\n val = this.data().reduce((acc, n) => acc + n[i + 1], 0);\n const disabled = this.isDisabled(columns[i + 1]);\n const label = n + (!disabled && this.showSeriesTotal() ? ` (${val})` : \"\");\n if (!disabled) total += val;\n const textSize = this.textSize(label);\n if (maxLabelWidth < textSize.width) maxLabelWidth = textSize.width;\n return [fillColor(undefined, n, false), n, label];\n }, this);\n break;\n default:\n const widgetColumns2 = this.columns();\n dataArr = widgetColumns2.map(function (n) {\n return [fillColor(undefined, n, false), n];\n }, this);\n break;\n }\n break;\n case \"rainbow\":\n const palette = this.getPalette() as Palette.RainbowPaletteFunc;\n const format = d3Format(this.rainbowFormat());\n const widget = this.getWidget();\n const steps = this.rainbowBins();\n const weightMin: number = widget._dataMinWeight;\n const weightMax: number = widget._dataMaxWeight;\n const stepWeightDiff = (weightMax - weightMin) / (steps - 1);\n dataArr.push([palette(weightMin, weightMin, weightMax), format(weightMin)]);\n for (let x = 1; x < steps - 1; ++x) {\n let mid = stepWeightDiff * x;\n if (Math.floor(mid) > parseInt(dataArr[0][1])) {\n mid = Math.floor(mid);\n }\n dataArr.push([palette(mid, weightMin, weightMax), format(mid)]);\n }\n dataArr.push([palette(weightMax, weightMin, weightMax), format(weightMax)]);\n break;\n }\n }\n return {\n dataArr,\n total,\n maxLabelWidth\n };\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n const { dataArr, maxLabelWidth, total } = this.calcMetaData();\n\n const radius = this.shapeRadius();\n const size = this.radiusToSymbolSize(radius);\n\n const strokeWidth = 1;\n\n let shapePadding = this.itemPadding();// + strokeWidth;\n if (this.orientation() === \"horizontal\") {\n shapePadding += maxLabelWidth - (radius * 2);\n }\n\n const ordinal = d3ScaleOrdinal()\n .domain(dataArr.map(row => row[1]))\n .range(dataArr.map(row => row[0]));\n this._legendOrdinal\n .shape(\"path\", d3Symbol().type(this._symbolTypeMap[this.symbolType()]).size(size)())\n .orient(this.orientation())\n .title(this.title())\n .labelWrap(this.labelMaxWidth())\n .labelAlign(this.labelAlign())\n .shapePadding(shapePadding)\n .scale(ordinal)\n .labels(d => dataArr[d.i][2])\n ;\n\n this._g.call(this._legendOrdinal);\n\n this.updateDisabled(element, dataArr);\n\n const legendCellsBbox = this._g.select(\".legendCells\").node().getBBox();\n let offsetX = Math.abs(legendCellsBbox.x);\n let offsetY = Math.abs(legendCellsBbox.y) + strokeWidth;\n\n if (this.orientation() === \"horizontal\") {\n if (this.labelAlign() === \"start\") {\n offsetX += strokeWidth;\n } else if (this.labelAlign() === \"end\") {\n offsetX -= strokeWidth;\n }\n if (this.width() > legendCellsBbox.width) {\n const extraWidth = this.width() - legendCellsBbox.width;\n offsetX += (extraWidth / 2);\n }\n } else if (this.orientation() === \"vertical\") {\n offsetX += strokeWidth;\n if (this._containerSize.height > legendCellsBbox.height) {\n const extraHeight = this.height() - legendCellsBbox.height;\n offsetY += (extraHeight / 2);\n }\n }\n\n this._g.attr(\"transform\", `translate(${offsetX}, ${offsetY})`);\n this.pos({\n x: 0,\n y: 0\n });\n this._legendOrdinal\n .labelOffset(this.itemPadding())\n ;\n const legendTotal = this._g.selectAll(\".legendTotal\").data(dataArr.length && this.showLegendTotal() ? [total] : []);\n const totalText = `Total: ${total}`;\n const totalOffsetX = -offsetX;\n const totalOffsetY = legendCellsBbox.height + this.itemPadding() + strokeWidth;\n this.enableOverflowScroll(false);\n this.enableOverflow(true);\n legendTotal\n .enter()\n .append(\"text\")\n .classed(\"legendTotal\", true)\n .merge(legendTotal)\n .attr(\"transform\", `translate(${totalOffsetX}, ${totalOffsetY})`)\n .text(totalText)\n ;\n legendTotal.exit().remove();\n }\n\n updateDisabled(element, dataArr) {\n element\n .style(\"cursor\", \"pointer\")\n .selectAll(\"path.swatch\").filter((d, i) => i < dataArr.length)\n .style(\"stroke\", (d, i) => dataArr[i][0])\n .style(\"fill\", (d, i) =>\n this._disabled.indexOf(d) < 0 ? dataArr[i][0] : \"white\"\n )\n ;\n }\n\n postUpdate(domNode, element) {\n let w;\n if (this._boundingBox) {\n w = this._boundingBox.width;\n this._boundingBox.width = this._size.width;\n }\n super.postUpdate(domNode, element);\n if (w !== undefined) {\n this._boundingBox.width = w;\n }\n this._parentRelativeDiv.style(\"overflow\", \"hidden\");\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n radiusToSymbolSize(radius) {\n const circleSize = Math.pow(radius, 2) * Math.PI;\n switch (this.symbolType()) {\n case \"star\":\n return circleSize * 0.45;\n case \"triangle\":\n return circleSize * 0.65;\n case \"cross\":\n case \"diamond\":\n case \"wye\":\n return circleSize * 0.75;\n case \"circle\":\n return circleSize;\n case \"square\":\n return circleSize * 1.3;\n }\n }\n\n onClick(d, domNode) {\n switch (this.getPaletteType()) {\n case \"ordinal\":\n switch (this.dataFamily()) {\n case \"2D\":\n case \"ND\":\n const disabledIdx = this._disabled.indexOf(d);\n if (disabledIdx < 0) {\n this._disabled.push(d);\n } else {\n this._disabled.splice(disabledIdx, 1);\n }\n this._owner.refreshColumns();\n this._owner.refreshData();\n this._owner.render();\n break;\n }\n break;\n }\n }\n\n onOver(d, domNode) {\n if (instanceOfIHighlight(this._owner)) {\n switch (this.getPaletteType()) {\n case \"ordinal\":\n switch (this.dataFamily()) {\n case \"2D\":\n case \"ND\":\n if (this._disabled.indexOf(d) < 0) {\n this._owner.highlightColumn(d);\n }\n break;\n }\n break;\n }\n }\n }\n\n onOut(d, domNode) {\n if (instanceOfIHighlight(this._owner)) {\n switch (this.getPaletteType()) {\n case \"ordinal\":\n switch (this.dataFamily()) {\n case \"2D\":\n case \"ND\":\n this._owner.highlightColumn();\n break;\n }\n break;\n }\n }\n }\n\n onDblClick(rowData, rowIdx) {\n }\n\n onMouseOver(rowData, rowIdx) {\n }\n private _containerSize;\n resize(_size?: { width: number, height: number }) {\n let retVal;\n if (this.fitToContent()) {\n this._containerSize = _size;\n const bbox = this.getBBox();\n if (_size.width > bbox.width) {\n bbox.width = _size.width;\n }\n if (_size.height > bbox.height) {\n bbox.height = _size.height;\n }\n retVal = super.resize.apply(this, [{ ...bbox }]);\n } else {\n retVal = super.resize.apply(this, arguments);\n }\n return retVal;\n }\n\n}\nLegend.prototype._class += \" layout_Legend\";\n\nexport interface Legend {\n title(): string;\n title(_: string): this;\n symbolType(): \"circle\" | \"cross\" | \"diamond\" | \"square\" | \"star\" | \"triangle\" | \"wye\";\n symbolType(_: \"circle\" | \"cross\" | \"diamond\" | \"square\" | \"star\" | \"triangle\" | \"wye\"): this;\n labelMaxWidth(): number;\n labelMaxWidth(_: number): this;\n orientation(): \"vertical\" | \"horizontal\";\n orientation(_: \"vertical\" | \"horizontal\"): this;\n orientation_exists: () => boolean;\n dataFamily(): \"1D\" | \"2D\" | \"ND\" | \"map\" | \"graph\" | \"any\";\n dataFamily(_: \"1D\" | \"2D\" | \"ND\" | \"map\" | \"graph\" | \"any\"): this;\n dataFamily_exists: () => boolean;\n rainbowFormat(): string;\n rainbowFormat(_: string): this;\n rainbowFormat_exists: () => boolean;\n rainbowBins(): number;\n rainbowBins(_: number): this;\n rainbowBins_exists: () => boolean;\n showSeriesTotal(): boolean;\n showSeriesTotal(_: boolean): this;\n showLegendTotal(): boolean;\n showLegendTotal(_: boolean): this;\n itemPadding(): number;\n itemPadding(_: number): this;\n shapeRadius(): number;\n shapeRadius(_: number): this;\n fitToContent(): boolean;\n fitToContent(_: boolean): this;\n labelAlign(): \"start\" | \"middle\" | \"end\";\n labelAlign(_: \"start\" | \"middle\" | \"end\"): this;\n}\nLegend.prototype.publish(\"title\", \"\", \"string\", \"Title\");\nLegend.prototype.publish(\"symbolType\", \"circle\", \"set\", \"Shape of each legend item\", [\"circle\", \"cross\", \"diamond\", \"square\", \"star\", \"triangle\", \"wye\"]);\nLegend.prototype.publish(\"labelMaxWidth\", null, \"number\", \"Max Label Width (pixels)\", null, { optional: true });\nLegend.prototype.publish(\"orientation\", \"vertical\", \"set\", \"Orientation of Legend rows\", [\"vertical\", \"horizontal\"], { tags: [\"Private\"] });\nLegend.prototype.publish(\"dataFamily\", \"ND\", \"set\", \"Type of data\", [\"1D\", \"2D\", \"ND\", \"map\", \"graph\", \"any\"], { tags: [\"Private\"] });\nLegend.prototype.publish(\"rainbowFormat\", \",\", \"string\", \"Rainbow number formatting\", null, { tags: [\"Private\"], optional: true, disable: w => !w.isRainbow() });\nLegend.prototype.publish(\"rainbowBins\", 8, \"number\", \"Number of rainbow bins\", null, { tags: [\"Private\"], disable: w => !w.isRainbow() });\nLegend.prototype.publish(\"showSeriesTotal\", false, \"boolean\", \"Show value next to series\");\nLegend.prototype.publish(\"showLegendTotal\", false, \"boolean\", \"Show a total of the series values under the legend\", null);\nLegend.prototype.publish(\"itemPadding\", 8, \"number\", \"Padding between legend items (pixels)\");\nLegend.prototype.publish(\"shapeRadius\", 7, \"number\", \"Radius of legend shape (pixels)\");\nLegend.prototype.publish(\"fitToContent\", true, \"boolean\", \"If true, resize will simply reapply the bounding box dimensions\");\nLegend.prototype.publish(\"labelAlign\", \"start\", \"set\", \"Horizontal alignment of legend item label (for horizontal orientation only)\", [\"start\", \"middle\", \"end\"], { optional: true, disable: (w: any) => w.orientation() === \"vertical\" });\n","import { HTMLWidget, ISize, Widget } from \"@hpcc-js/common\";\n\nimport \"../src/Modal.css\";\n\nexport class Modal extends HTMLWidget {\n\n protected _widget: Widget;\n\n protected _relativeTarget: HTMLElement;\n\n protected _fade;\n protected _modal;\n protected _modalHeader;\n protected _modalBody;\n protected _modalHeaderAnnotations;\n protected _modalHeaderCloseButton;\n _close: () => void;\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n closeModal() {\n this.visible(false);\n }\n\n getRelativeTarget() {\n let relativeTarget;\n if (this.relativeTargetId()) {\n relativeTarget = document.getElementById(this.relativeTargetId());\n if (relativeTarget) {\n return relativeTarget;\n }\n }\n if (!relativeTarget) {\n relativeTarget = this.locateAncestor(\"layout_Grid\");\n if (relativeTarget && relativeTarget.element) {\n return relativeTarget.element().node();\n }\n }\n return document.body;\n }\n\n setModalSize(): ISize {\n if (this.fixedHeight() !== null && this.fixedWidth() !== null) {\n this._modal\n .style(\"height\", this.fixedHeight())\n .style(\"width\", this.fixedWidth())\n .style(\"min-height\", null)\n .style(\"min-width\", null)\n .style(\"max-height\", null)\n .style(\"max-width\", null)\n ;\n } else if (this.minHeight() || this.minWidth()) {\n this._modal\n .style(\"min-height\", this.minHeight())\n .style(\"min-width\", this.minWidth())\n .style(\"max-height\", this.maxHeight())\n .style(\"max-width\", this.maxWidth())\n ;\n }\n const modalRect = this._modal.node().getBoundingClientRect();\n const headerRect = this._modalHeader.node().getBoundingClientRect();\n this._modalBody\n .style(\"height\", (modalRect.height - headerRect.height) + \"px\")\n .style(\"width\", modalRect.width);\n\n return modalRect;\n }\n\n setFadePosition(rect) {\n this._fade\n .style(\"top\", rect.top + \"px\")\n .style(\"left\", rect.left + \"px\")\n .style(\"width\", rect.width + \"px\")\n .style(\"height\", rect.height + \"px\")\n ;\n }\n\n setModalPosition(rect) {\n const modalRect = this.setModalSize();\n if (this.fixedTop() !== null && this.fixedLeft() !== null) {\n this._modal\n .style(\"top\", `calc(${this.fixedTop()} + ${rect.top}px)`)\n .style(\"left\", `calc(${this.fixedLeft()} + ${rect.left}px)`)\n ;\n } else if (this.fixedHeight() !== null && this.fixedWidth() !== null) {\n this._modal\n .style(\"top\", (rect.top + (rect.height / 2) - (modalRect.height / 2)) + \"px\")\n .style(\"left\", (rect.left + (rect.width / 2) - (modalRect.width / 2)) + \"px\")\n ;\n } else if (this.minHeight() || this.minWidth()) {\n const contentRect = this._modal.node().getBoundingClientRect();\n this._modal\n .style(\"top\", (rect.top + (rect.height / 2) - (contentRect.height / 2)) + \"px\")\n .style(\"left\", (rect.left + (rect.width / 2) - (contentRect.width / 2)) + \"px\")\n ;\n }\n }\n\n resize(size?: any): this {\n super.resize();\n if (this._modal) this.setModalSize();\n return this;\n }\n\n resizeBodySync(width: number, height: number): this {\n const header = this._modalHeader.node();\n const headerRect = header.getBoundingClientRect();\n\n this._modal\n .style(\"width\", width + \"px\")\n .style(\"height\", (height + headerRect.height) + \"px\")\n .style(\"min-width\", width + \"px\")\n .style(\"min-height\", (height + headerRect.height) + \"px\")\n ;\n this._modalHeader\n .style(\"width\", width + \"px\")\n ;\n this._modalBody\n .style(\"width\", width + \"px\")\n .style(\"height\", height + \"px\")\n ;\n return this\n .minWidth(width + \"px\")\n .minHeight((height + headerRect.height) + \"px\")\n .resize({\n height: height + headerRect.height,\n width\n })\n ;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._fade = element.append(\"div\")\n .classed(\"layout_Modal-fade\", true)\n .classed(\"layout_Modal-fadeClickable\", this.enableClickFadeToClose())\n .classed(\"layout_Modal-fade-hidden\", !this.showFade())\n ;\n const header_h = this.titleFontSize() * 2;\n this._modal = element.append(\"div\")\n .classed(\"layout_Modal-content\", true)\n ;\n this._modalHeader = this._modal.append(\"div\")\n .classed(\"layout_Modal-header\", true)\n .style(\"color\", this.titleFontColor())\n .style(\"font-size\", this.titleFontSize() + \"px\")\n .style(\"height\", header_h + \"px\")\n ;\n this._modalBody = this._modal.append(\"div\")\n .classed(\"layout_Modal-body\", true)\n .style(\"height\", `calc( 100% - ${header_h}px )`)\n .style(\"overflow-x\", this.overflowX())\n .style(\"overflow-y\", this.overflowY())\n ;\n this._modalHeader.append(\"div\")\n .classed(\"layout_Modal-title\", true)\n .style(\"line-height\", this.titleFontSize() + \"px\")\n .style(\"top\", (this.titleFontSize() / 2) + \"px\")\n .style(\"left\", (this.titleFontSize() / 2) + \"px\")\n .text(this.formattedTitle())\n ;\n\n this._modalHeaderAnnotations = this._modalHeader.append(\"div\")\n .classed(\"layout_Modal-annotations\", true)\n ;\n this._modalHeaderCloseButton = this._modalHeaderAnnotations.append(\"div\")\n .classed(\"layout_Modal-closeButton\", true)\n .html(\"<i class=\\\"fa fa-close\\\"></i>\")\n ;\n\n this._modalHeaderAnnotations\n .style(\"line-height\", this.titleFontSize() + \"px\")\n .style(\"right\", (this.titleFontSize() / 2) + \"px\")\n .style(\"top\", (this.titleFontSize() / 2) + \"px\")\n ;\n this._modalHeaderCloseButton.on(\"click\", () => {\n this.closeModal();\n });\n this._fade.on(\"click\", n => {\n if (this.enableClickFadeToClose()) {\n this.closeModal();\n }\n });\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n element.style(\"display\", this.show() ? null : \"none\");\n this._fade.classed(\"layout_Modal-fade-hidden\", !this.showFade());\n this._relativeTarget = this.getRelativeTarget();\n\n this.setModalSize();\n const rect = this._relativeTarget.getBoundingClientRect();\n this.setFadePosition(rect);\n this.setModalPosition(rect);\n\n if (this.show()) {\n if (!this._widget.target()) {\n this._widget.target(this._modalBody.node());\n }\n this._widget.resize().render();\n } else {\n this._widget\n .target(null)\n .render()\n ;\n }\n }\n\n exit(domNode, element) {\n if (this._widget) {\n this._widget.target(null);\n }\n super.exit(domNode, element);\n }\n\n formattedTitle() {\n const title = this.title_exists() ? this.title().trim() : \"\";\n if (title.length > 0 && title.slice(0, 1) === \"(\" && title.slice(-1) === \")\") {\n return title.slice(1, -1);\n }\n return this.title();\n }\n}\nModal.prototype._class += \" layout_Modal\";\n\nexport interface Modal {\n show(): boolean;\n show(_: boolean): this;\n showFade(): boolean;\n showFade(_: boolean): this;\n enableClickFadeToClose(): boolean;\n enableClickFadeToClose(_: boolean): this;\n title(): string;\n title(_: string): this;\n title_exists(): boolean;\n titleFontSize(): number;\n titleFontSize(_: number): this;\n titleFontColor(): string;\n titleFontColor(_: string): this;\n minWidth(): string;\n minWidth(_: string): this;\n minHeight(): string;\n minHeight(_: string): this;\n maxWidth(): string;\n maxWidth(_: string): this;\n maxHeight(): string;\n maxHeight(_: string): this;\n fixedWidth(): string;\n fixedWidth(_: string): this;\n fixedHeight(): string;\n fixedHeight(_: string): this;\n fixedTop(): string;\n fixedTop(_: string): this;\n fixedLeft(): string;\n fixedLeft(_: string): this;\n relativeTargetId(): string;\n relativeTargetId(_: string): this;\n widget(): Widget;\n widget(_: Widget): this;\n overflowX(): \"hidden\" | \"scroll\";\n overflowX(_: \"hidden\" | \"scroll\"): this;\n overflowY(): \"hidden\" | \"scroll\";\n overflowY(_: \"hidden\" | \"scroll\"): this;\n}\n\nModal.prototype.publish(\"title\", null, \"string\", \"title\");\nModal.prototype.publish(\"widget\", null, \"widget\", \"widget\");\nModal.prototype.publish(\"titleFontSize\", 18, \"number\", \"titleFontSize (in pixels)\");\nModal.prototype.publish(\"titleFontColor\", \"#ffffff\", \"html-color\", \"titleFontColor\");\nModal.prototype.publish(\"relativeTargetId\", null, \"string\", \"relativeTargetId\");\n\nModal.prototype.publish(\"show\", true, \"boolean\", \"show\");\nModal.prototype.publish(\"showFade\", true, \"boolean\", \"showFade\");\nModal.prototype.publish(\"enableClickFadeToClose\", true, \"boolean\", \"enableClickFadeToClose\");\n\nModal.prototype.publish(\"minWidth\", \"400px\", \"string\", \"minWidth\");\nModal.prototype.publish(\"minHeight\", \"400px\", \"string\", \"minHeight\");\nModal.prototype.publish(\"maxWidth\", \"800px\", \"string\", \"maxWidth\");\nModal.prototype.publish(\"maxHeight\", \"800px\", \"string\", \"maxHeight\");\nModal.prototype.publish(\"fixedWidth\", null, \"string\", \"fixedWidth\");\nModal.prototype.publish(\"fixedHeight\", null, \"string\", \"fixedHeight\");\nModal.prototype.publish(\"fixedTop\", null, \"string\", \"fixedTop\");\nModal.prototype.publish(\"fixedLeft\", null, \"string\", \"fixedLeft\");\nModal.prototype.publish(\"overflowX\", \"hidden\", \"string\", \"overflowX\");\nModal.prototype.publish(\"overflowY\", \"scroll\", \"string\", \"overflowY\");\n","import { IHighlight } from \"@hpcc-js/api\";\nimport { Button, Database, IconBar, ProgressBar, Spacer, SVGWidget, Text, TitleBar, ToggleButton, Utility, Widget } from \"@hpcc-js/common\";\nimport { Table } from \"@hpcc-js/dgrid2\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Border2 } from \"./Border2.ts\";\nimport { Carousel } from \"./Carousel.ts\";\nimport { Legend } from \"./Legend.ts\";\nimport { Modal } from \"./Modal.ts\";\n\nimport \"../src/ChartPanel.css\";\n\nexport class ChartPanel<T extends Widget = Widget> extends Border2 implements IHighlight {\n\n protected _legend = new Legend(this).enableOverflow(true);\n protected _progressBar = new ProgressBar();\n protected _autoScale = false;\n protected _resolutions = {\n tiny: { width: 100, height: 100 },\n small: { width: 300, height: 300 }\n };\n private _modal = new Modal();\n private _highlight: boolean;\n private _scale: number;\n private _orig_size: any;\n\n private _toggleInfo = new ToggleButton().faChar(\"fa-info-circle\").tooltip(\".Description\")\n .selected(false)\n .on(\"enabled\", () => {\n return this.description() !== \"\";\n })\n .on(\"click\", () => {\n if (this._toggleInfo.selected()) {\n this._modal\n .title(this.title())\n .widget(new Text().text(this.description()))\n .show(true)\n .render()\n ;\n\n const origCloseFunc = this._modal._close;\n this._modal._close = () => {\n this._toggleInfo\n .selected(false)\n .render()\n ;\n this._modal._close = origCloseFunc;\n };\n }\n })\n .on(\"mouseMove\", () => {\n /*\n this._modal.showPreview(true).render(n => {\n n.resize().render();\n });\n */\n })\n .on(\"mouseOut\", () => {\n /*\n if (this._modal.showPreview()) {\n this._modal.show(false).showPreview(false).render();\n }\n */\n });\n\n private _toggleData = new ToggleButton().faChar(\"fa-table\").tooltip(\"Data\")\n .on(\"click\", () => {\n this.dataVisible(this._toggleData.selected());\n this.render();\n });\n\n private _buttonDownload = new Button().faChar(\"fa-download\").tooltip(\"Download\")\n .on(\"click\", () => {\n this.downloadCSV();\n });\n\n private _buttonDownloadImage = new Button().faChar(\"fa-image\").tooltip(\"Download Image\")\n .on(\"click\", () => {\n this.downloadPNG();\n });\n\n private _toggleLegend = new ToggleButton().faChar(\"fa-list-ul\").tooltip(\"Legend\")\n .selected(false)\n .on(\"click\", () => {\n const selected = this._toggleLegend.selected();\n if (this.legendPosition() === \"bottom\") {\n this.showBottom(selected);\n } else if (this.legendPosition() === \"right\") {\n this.showRight(selected);\n }\n this.legendVisible(selected);\n this.render();\n });\n\n protected _spacer = new Spacer();\n\n _titleBar = new TitleBar().buttons([this._toggleData, this._buttonDownload, this._buttonDownloadImage, this._spacer, this._toggleLegend]);\n\n protected _carousel = new Carousel();\n protected _table = new Table();\n protected _widget: T;\n\n protected _hideLegendToggleList = [\"dgrid_Table\", \"dgrid2_Table\"];\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n fields(): Database.Field[];\n fields(_: Database.Field[]): this;\n fields(_?: Database.Field[]): this | Database.Field[] {\n if (!arguments.length) return super.fields();\n super.fields(_);\n this._legend.fields(_);\n this.refreshFields();\n return this;\n }\n refreshFields() {\n this._widget.fields(this._legend.filteredFields());\n this._table.fields(this._legend.filteredFields());\n return this;\n }\n\n columns(): string[];\n columns(_: string[], asDefault?: boolean): this;\n columns(_?: string[], asDefault?: boolean): string[] | this {\n if (!arguments.length) return super.columns();\n super.columns(_, asDefault);\n this._legend.columns(_, asDefault);\n this.refreshColumns();\n return this;\n }\n refreshColumns() {\n this._widget.columns(this._legend.filteredColumns());\n this._table.columns(this._legend.filteredColumns());\n return this;\n }\n\n data(_?) {\n if (!arguments.length) return super.data();\n super.data(_);\n this._legend.data(_);\n this.refreshData();\n return this;\n }\n refreshData() {\n this._widget.data(this._legend.filteredData());\n this._table.data(this._legend.filteredData());\n return this;\n }\n\n highlight(): boolean;\n highlight(_: boolean): this;\n highlight(_?: boolean): boolean | this {\n if (!arguments.length) return this._highlight;\n this._highlight = _;\n return this;\n }\n\n startProgress() {\n this._progressBar.start();\n }\n\n finishProgress() {\n this._progressBar.finish();\n }\n\n buttons(): Widget[];\n buttons(_: Widget[]): this;\n buttons(_?: Widget[]): this | Widget[] {\n if (!arguments.length) return this._titleBar.buttons();\n this._titleBar.buttons(_);\n return this;\n }\n\n downloadCSV() {\n const namePrefix = this.downloadTitle() ? this.downloadTitle() : this.title() ? this.title() : \"data\";\n const nameSuffix = this.downloadTimestampSuffix() ? \"_\" + Utility.timestamp() : \"\";\n Utility.downloadString(\"CSV\", this._widget.export(\"CSV\"), namePrefix + nameSuffix);\n return this;\n }\n\n downloadPNG() {\n const widget = this.widget();\n if (widget instanceof SVGWidget) {\n if (!this.legendVisible()) {\n widget.downloadPNG(this.title());\n } else {\n widget.downloadPNG(this.title(), undefined, this._legend);\n }\n }\n return this;\n }\n\n highlightColumn(column?: string): this {\n if (column) {\n const cssTag = `series-${this.cssTag(column)}`;\n this._centerWA.element().selectAll(\".series\")\n .each(function () {\n const element = d3Select(this);\n const highlight = element.classed(cssTag);\n element\n .classed(\"highlight\", highlight)\n .classed(\"lowlight\", !highlight)\n ;\n })\n ;\n } else {\n this._centerWA.element().selectAll(\".series\")\n .classed(\"highlight\", false)\n .classed(\"lowlight\", false)\n ;\n }\n return this;\n }\n\n getResponsiveMode(): \"tiny\" | \"small\" | \"regular\" | \"none\" {\n if (!this.enableAutoscaling()) return \"none\";\n if (!this._autoScale) return \"regular\";\n if (this.size().width <= this._resolutions.tiny.width || this.size().height <= this._resolutions.tiny.height) {\n return \"tiny\";\n } else if (this.size().width <= this._resolutions.small.width || this.size().height <= this._resolutions.small.height) {\n return \"small\";\n }\n return \"regular\";\n }\n\n setOrigSize() {\n this._orig_size = JSON.parse(JSON.stringify(this.size()));\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._modal\n .target(this.target())\n .relativeTargetId(this.id())\n ;\n\n this.top(this._titleBar);\n this.center(this._carousel);\n\n this._legend\n .targetWidget(this._widget)\n .orientation(\"vertical\")\n .title(\"\")\n .visible(false)\n ;\n\n this._progressBar.enter(domNode, element);\n this.setOrigSize();\n }\n\n preUpdateTiny(element) {\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"none\");\n }\n\n preUpdateSmall(element) {\n const scale_x = this._orig_size.width / this._resolutions.small.width;\n const scale_y = this._orig_size.height / this._resolutions.small.height;\n this._scale = Math.min(scale_x, scale_y);\n const x_is_smaller = this._scale === scale_x;\n this.size({\n width: x_is_smaller ? this._resolutions.small.width : this._orig_size.width * (1 / this._scale),\n height: !x_is_smaller ? this._resolutions.small.height : this._orig_size.height * (1 / this._scale)\n });\n element.select(\"div.title-icon\").style(\"position\", \"static\");\n element.selectAll(\"lhs\").style(\"display\", \"none\");\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n element.style(\"transform\", `scale(${this._scale})`);\n }\n\n preUpdateRegular(element) {\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n element.select(\"div.title-icon\").style(\"position\", \"static\");\n element.style(\"transform\", \"translate(0px,0px) scale(1)\");\n }\n\n private _prevdataVisible;\n private _prevlegendVisible;\n private _prevLegendPosition;\n private _prevChartDataFamily;\n private _prevChart;\n private _prevButtons;\n update(domNode, element) {\n super.update(domNode, element);\n }\n\n preUpdate(domNode, element) {\n\n super.preUpdate(domNode, element);\n\n if (this._prevLegendPosition !== this.legendPosition()) {\n if (this._legend.target() !== null) this._legend.target(null);\n if (this._prevLegendPosition !== undefined) {\n this.swap(this._prevLegendPosition, this.legendPosition());\n } else {\n this[this.legendPosition()](this._legend);\n }\n if (this.legendPosition() === \"right\") {\n this.rightOverflowX(\"hidden\");\n this.rightOverflowY(\"auto\");\n this.bottomOverflowX(\"visible\");\n this.bottomOverflowY(\"visible\");\n } else {\n this.rightOverflowX(\"visible\");\n this.rightOverflowY(\"visible\");\n this.bottomOverflowX(\"auto\");\n this.bottomOverflowY(\"hidden\");\n }\n this._prevLegendPosition = this.legendPosition();\n }\n\n if (this._prevdataVisible !== this.dataVisible()) {\n this._prevdataVisible = this.dataVisible();\n this._toggleData.selected(this._prevdataVisible);\n this._legend.visible(this._prevlegendVisible && !this._prevdataVisible);\n this._carousel.active(this._prevdataVisible ? 1 : 0);\n }\n\n if (this._prevlegendVisible !== this.legendVisible()) {\n this._prevlegendVisible = this.legendVisible();\n this._toggleLegend.selected(this._prevlegendVisible);\n this._legend.visible(this._prevlegendVisible && !this._prevdataVisible);\n }\n\n this._legend.orientation(this.legendPosition() === \"bottom\" ? \"horizontal\" : \"vertical\");\n\n this.showLeft(!this.left());\n\n switch (this.getResponsiveMode()) {\n case \"tiny\":\n this.preUpdateTiny(element);\n break;\n case \"small\":\n this.preUpdateSmall(element);\n break;\n case \"regular\":\n this.preUpdateRegular(element);\n break;\n }\n\n const chart = this._widget.classID() === \"composite_MultiChart\" ? this._widget[\"chart\"]() : this._widget;\n this._legend.dataFamily(chart._dataFamily || \"any\");\n\n if (this._prevChartDataFamily !== this._legend.dataFamily()) {\n this._prevChartDataFamily = this._legend.dataFamily();\n switch (this._prevChartDataFamily) {\n case \"any\":\n this._toggleLegend.selected(false);\n this._legend.visible(false);\n break;\n }\n }\n element.style(\"box-shadow\", this.highlight() ? `inset 0px 0px 0px ${this.highlightSize()}px ${this.highlightColor()}` : \"none\");\n\n if (this._hideLegendToggleList.indexOf(chart.classID()) !== -1) {\n this._spacer.visible(false);\n this._toggleLegend.visible(false);\n } else {\n this._spacer.visible(true);\n this._toggleLegend.visible(true);\n }\n if (this._prevChart !== chart) {\n this._prevChart = chart;\n const widgetIconBar = chart ? chart[\"_titleBar\"] || chart[\"_iconBar\"] : undefined;\n if (widgetIconBar && widgetIconBar instanceof IconBar) {\n this._prevButtons = this._prevButtons || [...this.buttons()];\n const buttons: Widget[] = [\n ...widgetIconBar.buttons(),\n new Spacer(),\n ...this._prevButtons\n ];\n widgetIconBar.buttons([]).render();\n this.buttons(buttons);\n } else if (this._prevButtons) {\n this.buttons(this._prevButtons);\n }\n }\n\n const hiddenButtons = [];\n if (!this.dataButtonVisible()) hiddenButtons.push(this._toggleData);\n if (!this.downloadButtonVisible()) hiddenButtons.push(this._buttonDownload);\n if (!this.downloadImageButtonVisible()) hiddenButtons.push(this._buttonDownloadImage);\n if (!this.legendButtonVisible()) hiddenButtons.push(this._toggleLegend);\n this._buttonDownloadImage.enabled(this.widget() instanceof SVGWidget);\n this._titleBar\n .hiddenButtons(hiddenButtons)\n .visible(this.titleVisible())\n ;\n this.topOverlay(this.titleOverlay() || !this.titleVisible());\n }\n\n postUpdate(domNode, element) {\n super.postUpdate(domNode, element);\n\n switch (this.getResponsiveMode()) {\n case \"tiny\":\n this.postUpdateTiny(element);\n break;\n case \"small\":\n this.postUpdateSmall(element);\n break;\n case \"regular\":\n this.postUpdateRegular(element);\n break;\n }\n }\n\n postUpdateTiny(element) {\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"none\");\n element.selectAll(\"div.data-count\")\n .style(\"visibility\", \"visible\")\n .style(\"font-size\", (this.titleIconFontSize() / 3) + \"px\")\n .style(\"line-height\", (this.titleIconFontSize() / 3) + \"px\")\n .style(\"left\", this.titleIconFontSize() + \"px\")\n .text(this.data().length)\n ;\n element.style(\"transform\", \"translate(0px,0px) scale(1)\");\n const iconDiv = element.selectAll(\"div.title-icon\");\n const _node = iconDiv.node();\n const _container = element.node().parentElement;\n const containerRect = _container.getBoundingClientRect();\n if (_node) {\n const rect = iconDiv.node().getBoundingClientRect();\n const icon_top = containerRect.height / 2;\n iconDiv\n .style(\"position\", \"absolute\")\n .style(\"left\", `calc(50% - ${rect.width / 2}px)`)\n .style(\"top\", `${icon_top - (rect.height / 2)}px`)\n ;\n element.selectAll(\"div.data-count\")\n .style(\"position\", \"absolute\")\n .style(\"left\", `calc(50% + ${rect.width / 2}px)`)\n .style(\"top\", `${icon_top - (rect.height / 2)}px`)\n ;\n }\n }\n\n postUpdateSmall(element) {\n element.selectAll(\"lhs\").style(\"display\", \"none\"); // TODO: a bug in Border2?\n element.selectAll(\"div.title-icon\").style(\"position\", \"static\");\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n const rect = element.node().getBoundingClientRect();\n const parentRect = element.node().parentElement.getBoundingClientRect();\n element.style(\"transform\", `translate(${parentRect.x - rect.x}px, ${parentRect.y - rect.y}px) scale(${this._scale})`);\n }\n\n postUpdateRegular(element) {\n element.selectAll(\"div.title-icon\").style(\"position\", \"static\");\n element.selectAll(\"div.body,div.title-text,div.icon-bar\").style(\"display\", \"\");\n element.selectAll(\"div.data-count\").style(\"visibility\", \"hidden\");\n }\n\n exit(domNode, element) {\n this._progressBar.exit(domNode, element);\n\n this.right(null);\n this._legend.target(null);\n this.center(null);\n this._carousel.target(null);\n this.top(null);\n this._titleBar.target(null);\n\n this._modal.target(null);\n\n delete this._prevChart;\n delete this._prevButtons;\n delete this._prevChartDataFamily;\n delete this._prevPos;\n delete this._prevdataVisible;\n delete this._prevlegendVisible;\n\n super.exit(domNode, element);\n }\n\n // Event Handlers ---\n // Events ---\n click(row, column, selected) {\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n }\n\n dblclick(row, column, selected) {\n // console.log(\"Double click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n }\n\n vertex_click(row, col, sel, more) {\n if (more && more.vertex) {\n // console.log(\"Vertex click: \" + more.vertex.id());\n }\n }\n\n vertex_dblclick(row, col, sel, more) {\n if (more && more.vertex) {\n // console.log(\"Vertex double click: \" + more.vertex.id());\n }\n }\n\n edge_click(row, col, sel, more) {\n if (more && more.edge) {\n // console.log(\"Edge click: \" + more.edge.id());\n }\n }\n\n edge_dblclick(row, col, sel, more) {\n if (more && more.edge) {\n // console.log(\"Edge double click: \" + more.edge.id());\n }\n }\n}\nChartPanel.prototype._class += \" layout_ChartPanel\";\n\nexport interface ChartPanel<T extends Widget = Widget> {\n title(): string;\n title(_: string): this;\n titleVisible(): boolean;\n titleVisible(_: boolean): this;\n titleOverlay(): boolean;\n titleOverlay(_: boolean): this;\n title_exists(): boolean;\n titleFontSize(): number;\n titleFontSize(_: number): this;\n titleFontSize_exists(): boolean;\n titleIconFontSize(): number;\n titleIconFontSize(_: number): this;\n titleIconFontSize_exists(): boolean;\n dataVisible(): boolean;\n dataVisible(_: boolean): this;\n dataButtonVisible(): boolean;\n dataButtonVisible(_: boolean): this;\n downloadButtonVisible(): boolean;\n downloadButtonVisible(_: boolean): this;\n downloadImageButtonVisible(): boolean;\n downloadImageButtonVisible(_: boolean): this;\n downloadTitle(): string;\n downloadTitle(_: string): this;\n downloadTimestampSuffix(): boolean;\n downloadTimestampSuffix(_: boolean): this;\n legendVisible(): boolean;\n legendVisible(_: boolean): this;\n legendButtonVisible(): boolean;\n legendButtonVisible(_: boolean): this;\n legendPosition(): \"right\" | \"bottom\";\n legendPosition(_: \"right\" | \"bottom\"): this;\n description(): string;\n description(_: string): this;\n description_exists(): boolean;\n widget(): T;\n widget(_: T): this;\n widget_exists(): boolean;\n enableAutoscaling(): boolean;\n enableAutoscaling(_: boolean): this;\n enableAutoscaling_exists(): boolean;\n highlightSize(): number;\n highlightSize(_: number): this;\n highlightSize_exists(): boolean;\n highlightColor(): string;\n highlightColor(_: string): this;\n highlightColor_exists(): boolean;\n}\n\nChartPanel.prototype.publishReset();\nChartPanel.prototype.publishProxy(\"title\", \"_titleBar\");\nChartPanel.prototype.publish(\"titleVisible\", true, \"boolean\");\nChartPanel.prototype.publish(\"titleOverlay\", false, \"boolean\");\nChartPanel.prototype.publishProxy(\"titleIcon\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleIconFont\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleFont\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleIconFontSize\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"titleFontSize\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"description\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"descriptionFont\", \"_titleBar\");\nChartPanel.prototype.publishProxy(\"descriptionFontSize\", \"_titleBar\");\nChartPanel.prototype.publish(\"dataVisible\", false, \"boolean\", \"Show data table\");\nChartPanel.prototype.publish(\"dataButtonVisible\", true, \"boolean\", \"Show data table button\");\nChartPanel.prototype.publish(\"downloadButtonVisible\", true, \"boolean\", \"Show data download button\");\nChartPanel.prototype.publish(\"downloadImageButtonVisible\", false, \"boolean\", \"Show image download button\");\nChartPanel.prototype.publish(\"downloadTitle\", \"\", \"string\", \"File name when downloaded\");\nChartPanel.prototype.publish(\"downloadTimestampSuffix\", true, \"boolean\", \"Use timestamp as file name suffix\");\nChartPanel.prototype.publish(\"legendVisible\", false, \"boolean\", \"Show legend\");\nChartPanel.prototype.publish(\"legendButtonVisible\", true, \"boolean\", \"Show legend button\");\nChartPanel.prototype.publish(\"legendPosition\", \"right\", \"set\", \"Position of legend\", [\"right\", \"bottom\"]);\nChartPanel.prototype.publishProxy(\"legend_labelMaxWidth\", \"_legend\", \"labelMaxWidth\");\nChartPanel.prototype.publishProxy(\"legend_showSeriesTotal\", \"_legend\", \"showSeriesTotal\");\nChartPanel.prototype.publishProxy(\"legend_showLegendTotal\", \"_legend\", \"showLegendTotal\");\nChartPanel.prototype.publishProxy(\"legend_itemPadding\", \"_legend\", \"itemPadding\");\nChartPanel.prototype.publishProxy(\"legend_shapeRadius\", \"_legend\", \"shapeRadius\");\nChartPanel.prototype.publishProxy(\"legend_symbolType\", \"_legend\", \"symbolType\");\nChartPanel.prototype.publishProxy(\"legend_labelAlign\", \"_legend\", \"labelAlign\");\nChartPanel.prototype.publish(\"widget\", null, \"widget\", \"Widget\", undefined, { render: false });\nChartPanel.prototype.publish(\"enableAutoscaling\", false, \"boolean\");\nChartPanel.prototype.publish(\"highlightSize\", 4, \"number\");\nChartPanel.prototype.publish(\"highlightColor\", \"#e67e22\", \"html-color\");\nChartPanel.prototype.publishProxy(\"progress_halfLife\", \"_progressBar\", \"halfLife\");\nChartPanel.prototype.publishProxy(\"progress_decay\", \"_progressBar\", \"decay\");\nChartPanel.prototype.publishProxy(\"progress_size\", \"_progressBar\", \"size\");\nChartPanel.prototype.publishProxy(\"progress_color\", \"_progressBar\", \"color\");\nChartPanel.prototype.publishProxy(\"progress_blurBar\", \"_progressBar\", \"blurBar\");\nChartPanel.prototype.publishProxy(\"progress_blurSize\", \"_progressBar\", \"blurSize\");\nChartPanel.prototype.publishProxy(\"progress_blurColor\", \"_progressBar\", \"blurColor\");\nChartPanel.prototype.publishProxy(\"progress_blurOpacity\", \"_progressBar\", \"blurOpacity\");\n\nChartPanel.prototype.widget = function (_?) {\n if (!arguments.length) return this._widget;\n this._carousel.widgets([_, this._table]);\n this._widget = _;\n this._widget\n .fields(this._legend.filteredFields())\n .data(this._legend.filteredData())\n ;\n\n const context = this;\n const tmpAny = this._widget as any;\n tmpAny.click = function () {\n context.click.apply(context, arguments);\n };\n tmpAny.dblclick = function () {\n context.dblclick.apply(context, arguments);\n };\n tmpAny.vertex_click = function () {\n context.vertex_click.apply(context, arguments);\n };\n tmpAny.vertex_dblclick = function () {\n context.vertex_dblclick.apply(context, arguments);\n };\n tmpAny.edge_click = function () {\n context.edge_click.apply(context, arguments);\n };\n tmpAny.edge_dblclick = function () {\n context.edge_dblclick.apply(context, arguments);\n };\n return this;\n};\n","import { HTMLWidget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/FlexGrid.css\";\n\nexport class FlexGrid extends HTMLWidget {\n constructor() {\n super();\n }\n enter(domNode, element) {\n super.enter(domNode, element);\n d3Select(domNode.parentNode)\n .style(\"height\", \"100%\")\n .style(\"width\", \"100%\")\n ;\n }\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n const cachedSizes = [];\n this.updateFlexParent(element);\n const listItems = element.selectAll(\".FlexGrid-list-item\").data(this.widgets(), w => w.id());\n listItems.enter()\n .append(\"div\")\n .classed(\"FlexGrid-list-item\", true)\n .each(function (w) {\n w.target(this);\n })\n .merge(listItems)\n .style(\"min-height\", this.itemMinHeight() + \"px\")\n .style(\"min-width\", this.itemMinWidth() + \"px\")\n .style(\"flex-basis\", (n, i) => {\n const flexBasis = this.widgetsFlexBasis()[i];\n return typeof flexBasis !== \"undefined\" ? flexBasis : this.flexBasis();\n })\n .style(\"flex-grow\", (n, i) => {\n const flexGrow = this.widgetsFlexGrow()[i];\n return typeof flexGrow !== \"undefined\" ? flexGrow : this.flexGrow();\n })\n .style(\"border-width\", this.borderWidth() + \"px\")\n .style(\"border-color\", this.itemBorderColor())\n .each(function () {\n this.firstChild.style.display = \"none\";\n })\n .each(function () {\n const rect = this.getBoundingClientRect();\n cachedSizes.push([\n rect.width,\n rect.height\n ]);\n })\n .each(function (w, i) {\n this.firstChild.style.display = \"block\";\n w.resize({\n width: cachedSizes[i][0] - (2 * context.borderWidth()),\n height: cachedSizes[i][1] - (2 * context.borderWidth())\n });\n })\n ;\n listItems.exit().remove();\n }\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n updateFlexParent(element) {\n element\n .style(\"height\", \"100%\")\n .style(\"flex-direction\", this.orientation() === \"horizontal\" ? \"row\" : \"column\")\n .style(\"flex-wrap\", this.flexWrap())\n .style(\"align-items\", this.alignItems())\n .style(\"align-content\", this.alignContent())\n .style(\"overflow-x\", () => {\n if (this.forceXScroll() || (this.orientation() === \"horizontal\" && this.flexWrap() === \"nowrap\" && !this.disableScroll())) {\n return \"scroll\";\n }\n return \"hidden\";\n })\n .style(\"overflow-y\", () => {\n if (this.forceYScroll() || (this.orientation() === \"vertical\" && this.flexWrap() === \"nowrap\" && !this.disableScroll())) {\n return \"scroll\";\n }\n return \"hidden\";\n })\n ;\n }\n}\nFlexGrid.prototype._class += \" layout_FlexGrid\";\n\nexport interface FlexGrid {\n widgets(): any;\n widgets(_: any): this;\n orientation(): \"horizontal\" | \"vertical\";\n orientation(_: \"horizontal\" | \"vertical\"): this;\n flexWrap(): \"nowrap\" | \"wrap\" | \"wrap-reverse\";\n flexWrap(_: \"nowrap\" | \"wrap\" | \"wrap-reverse\"): this;\n itemMinHeight(): number;\n itemMinHeight(_: number): this;\n itemMinWidth(): number;\n itemMinWidth(_: number): this;\n alignItems(): \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\";\n alignItems(_: \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\"): this;\n alignContent(): \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\" | \"space-between\" | \"space-around\";\n alignContent(_: \"flex-start\" | \"center\" | \"flex-end\" | \"stretch\" | \"space-between\" | \"space-around\"): this;\n itemBorderColor(): string;\n itemBorderColor(_: string): this;\n borderWidth(): number;\n borderWidth(_: number): this;\n flexGrow(): number;\n flexGrow(_: number): this;\n widgetsFlexGrow(): number[];\n widgetsFlexGrow(_: number[]): this;\n flexBasis(): string;\n flexBasis(_: string): this;\n widgetsFlexBasis(): string[];\n widgetsFlexBasis(_: string[]): this;\n disableScroll(): boolean;\n disableScroll(_: boolean): this;\n forceXScroll(): boolean;\n forceXScroll(_: boolean): this;\n forceYScroll(): boolean;\n forceYScroll(_: boolean): this;\n}\n\nFlexGrid.prototype.publish(\"itemBorderColor\", \"transparent\", \"html-color\", \"Color of list item borders\");\nFlexGrid.prototype.publish(\"borderWidth\", 0, \"number\", \"Width of list item borders (pixels)\");\nFlexGrid.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Controls the flex-direction of the list items\", [\"horizontal\", \"vertical\"]);\nFlexGrid.prototype.publish(\"flexWrap\", \"wrap\", \"set\", \"Controls the line wrap when overflow occurs\", [\"nowrap\", \"wrap\", \"wrap-reverse\"]);\nFlexGrid.prototype.publish(\"disableScroll\", false, \"boolean\", \"If false, scrollbar will show (when flexWrap is set to 'nowrap')\", null, { disable: (w: any) => w.flexWrap() !== \"nowrap\" });\nFlexGrid.prototype.publish(\"forceXScroll\", false, \"boolean\", \"If true, horzontal scrollbar will show\");\nFlexGrid.prototype.publish(\"forceYScroll\", false, \"boolean\", \"If true, vertical scrollbar will show\");\nFlexGrid.prototype.publish(\"itemMinHeight\", 64, \"number\", \"Minimum height of a list item (pixels)\");\nFlexGrid.prototype.publish(\"itemMinWidth\", 64, \"number\", \"Minimum width of a list item (pixels)\");\nFlexGrid.prototype.publish(\"alignItems\", \"stretch\", \"set\", \"Controls normal alignment of items\", [\"flex-start\", \"center\", \"flex-end\", \"stretch\"]);\nFlexGrid.prototype.publish(\"alignContent\", \"stretch\", \"set\", \"Controls normal alignment of item rows\", [\"flex-start\", \"center\", \"flex-end\", \"stretch\", \"space-between\", \"space-around\"]);\nFlexGrid.prototype.publish(\"flexGrow\", 1, \"number\", \"Default flex-grow style for all list items\");\nFlexGrid.prototype.publish(\"flexBasis\", \"10%\", \"string\", \"Default flex-basis style for all list items\");\nFlexGrid.prototype.publish(\"widgetsFlexGrow\", [], \"array\", \"Array of flex-grow values keyed on the widgets array\");\nFlexGrid.prototype.publish(\"widgetsFlexBasis\", [], \"array\", \"Array of flex-basis values keyed on the widgets array\");\nFlexGrid.prototype.publish(\"widgets\", [], \"widgetArray\", \"Array of widgets to be rendered as list items\");\n","(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define([], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory();\n } else {\n // Browser globals (root is window)\n root.GridList = factory();\n }\n}(this, function() {\n\nvar GridList = function(items, options) {\n /**\n * A GridList manages the two-dimensional positions from a list of items,\n * within a virtual matrix.\n *\n * The GridList's main function is to convert the item positions from one\n * grid size to another, maintaining as much of their order as possible.\n *\n * The GridList's second function is to handle collisions when moving an item\n * over another.\n *\n * The positioning algorithm places items in columns. Starting from left to\n * right, going through each column top to bottom.\n *\n * The size of an item is expressed using the number of cols and rows it\n * takes up within the grid (w and h)\n *\n * The position of an item is express using the col and row position within\n * the grid (x and y)\n *\n * An item is an object of structure:\n * {\n * w: 3, h: 1,\n * x: 0, y: 1\n * }\n */\n\n this._options = options;\n for (var k in this.defaults) {\n if (!this._options.hasOwnProperty(k)) {\n this._options[k] = this.defaults[k];\n }\n }\n\n this.items = items;\n\n this._adjustSizeOfItems();\n\n this.generateGrid();\n};\n\nGridList.cloneItems = function(items, _items) {\n /**\n * Clone items with a deep level of one. Items are not referenced but their\n * properties are\n */\n var _item,\n i,\n k;\n if (_items === undefined) {\n _items = [];\n }\n for (i = 0; i < items.length; i++) {\n // XXX: this is good because we don't want to lose item reference, but\n // maybe we should clear their properties since some might be optional\n if (!_items[i]) {\n _items[i] = {};\n }\n for (k in items[i]) {\n _items[i][k] = items[i][k];\n }\n }\n return _items;\n};\n\nGridList.prototype = {\n\n defaults: {\n lanes: 5,\n direction: 'horizontal'\n },\n\n /**\n * Illustates grid as text-based table, using a number identifier for each\n * item. E.g.\n *\n * #| 0 1 2 3 4 5 6 7 8 9 10 11 12 13\n * --------------------------------------------\n * 0| 00 02 03 04 04 06 08 08 08 12 12 13 14 16\n * 1| 01 -- 03 05 05 07 09 10 11 11 -- 13 15 --\n *\n * Warn: Does not work if items don't have a width or height specified\n * besides their position in the grid.\n */\n toString: function() {\n var widthOfGrid = this.grid.length,\n output = '\\n #|',\n border = '\\n --',\n item,\n i,\n j;\n\n // Render the table header\n for (i = 0; i < widthOfGrid; i++) {\n output += ' ' + this._padNumber(i, ' ');\n border += '---';\n };\n output += border;\n\n // Render table contents row by row, as we go on the y axis\n for (i = 0; i < this._options.lanes; i++) {\n output += '\\n' + this._padNumber(i, ' ') + '|';\n for (j = 0; j < widthOfGrid; j++) {\n output += ' ';\n item = this.grid[j][i];\n output += item ? this._padNumber(this.items.indexOf(item), '0') : '--';\n }\n };\n output += '\\n';\n return output;\n },\n\n generateGrid: function() {\n /**\n * Build the grid structure from scratch, with the current item positions\n */\n var i;\n this._resetGrid();\n for (i = 0; i < this.items.length; i++) {\n this._markItemPositionToGrid(this.items[i]);\n }\n },\n\n resizeGrid: function(lanes) {\n var currentColumn = 0;\n\n this._options.lanes = lanes;\n this._adjustSizeOfItems();\n\n this._sortItemsByPosition();\n this._resetGrid();\n\n // The items will be sorted based on their index within the this.items array,\n // that is their \"1d position\"\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i],\n position = this._getItemPosition(item);\n\n this._updateItemPosition(\n item, this.findPositionForItem(item, {x: currentColumn, y: 0}));\n\n // New items should never be placed to the left of previous items\n currentColumn = Math.max(currentColumn, position.x);\n }\n\n this._pullItemsToLeft();\n },\n\n findPositionForItem: function(item, start, fixedRow) {\n /**\n * This method has two options for the position we want for the item:\n * - Starting from a certain row/column number and only looking for\n * positions to its right\n * - Accepting positions for a certain row number only (use-case: items\n * being shifted to the left/right as a result of collisions)\n *\n * @param {Object<x:Number, y:Number, w:Number, h:Number} item\n * @param {Object<x:Number, y:Number} start Position from which to start\n * the search.\n * @param {Number} [fixedRow] If provided, we're going to try to find a\n * position for the new item on it. If doesn't fit there, we're going\n * to put it on the first row.\n *\n * @returns {Number[2]} x and y.\n */\n\n var x, y, position;\n\n // Start searching for a position from the horizontal position of the\n // rightmost item from the grid\n for (x = start.x; x < this.grid.length; x++) {\n if (fixedRow !== undefined) {\n position = [x, fixedRow];\n\n if (this._itemFitsAtPosition(item, position)) {\n return position;\n }\n } else {\n for (y = start.y; y < this._options.lanes; y++) {\n position = [x, y];\n\n if (this._itemFitsAtPosition(item, position)) {\n return position;\n }\n }\n }\n }\n\n // If we've reached this point, we need to start a new column\n var newCol = this.grid.length,\n newRow = 0;\n\n if (fixedRow !== undefined &&\n this._itemFitsAtPosition(item, [newCol, fixedRow])) {\n newRow = fixedRow;\n }\n\n return [newCol, newRow];\n },\n\n moveItemToPosition: function(item, newPosition) {\n var position = this._getItemPosition({\n x: newPosition[0],\n y: newPosition[1],\n w: item.w,\n h: item.h\n });\n\n this._updateItemPosition(item, [position.x, position.y]);\n this._resolveCollisions(item);\n },\n\n resizeItem: function(item, size) {\n /**\n * Resize an item and resolve collisions.\n *\n * @param {Object} item A reference to an item that's part of the grid.\n * @param {Object} size\n * @param {Number} [size.w=item.w] The new width.\n * @param {Number} [size.h=item.h] The new height.\n */\n\n var width = size.w || item.w,\n height = size.h || item.h;\n\n this._updateItemSize(item, width, height);\n\n this._resolveCollisions(item);\n\n this._pullItemsToLeft();\n },\n\n getChangedItems: function(initialItems, idAttribute) {\n /**\n * Compare the current items against a previous snapshot and return only\n * the ones that changed their attributes in the meantime. This includes both\n * position (x, y) and size (w, h)\n *\n * Since both their position and size can change, the items need an\n * additional identifier attribute to match them with their previous state\n */\n var changedItems = [];\n\n for (var i = 0; i < initialItems.length; i++) {\n var item = this._getItemByAttribute(idAttribute,\n initialItems[i][idAttribute]);\n\n if (item.x !== initialItems[i].x ||\n item.y !== initialItems[i].y ||\n item.w !== initialItems[i].w ||\n item.h !== initialItems[i].h) {\n changedItems.push(item);\n }\n }\n\n return changedItems;\n },\n\n _sortItemsByPosition: function() {\n this.items.sort(function(item1, item2) {\n var position1 = this._getItemPosition(item1),\n position2 = this._getItemPosition(item2);\n\n // Try to preserve columns.\n if (position1.x != position2.x) {\n return position1.x - position2.x;\n }\n\n if (position1.y != position2.y) {\n return position1.y - position2.y;\n }\n\n // The items are placed on the same position.\n return 0;\n }.bind(this));\n },\n\n _adjustSizeOfItems: function() {\n /**\n * Some items can have 100% height or 100% width. Those dimmensions are\n * expressed as 0. We need to ensure a valid width and height for each of\n * those items as the number of items per lane.\n */\n\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i];\n\n // This can happen only the first time items are checked.\n // We need the property to have a value for all the items so that the\n // `cloneItems` method will merge the properties properly. If we only set\n // it to the items that need it then the following can happen:\n //\n // cloneItems([{id: 1, autoSize: true}, {id: 2}],\n // [{id: 2}, {id: 1, autoSize: true}]);\n //\n // will result in\n //\n // [{id: 1, autoSize: true}, {id: 2, autoSize: true}]\n if (item.autoSize === undefined) {\n item.autoSize = item.w === 0 || item.h === 0;\n }\n\n if (item.autoSize) {\n if (this._options.direction === 'horizontal') {\n item.h = this._options.lanes;\n } else {\n item.w = this._options.lanes;\n }\n }\n }\n },\n\n _resetGrid: function() {\n this.grid = [];\n },\n\n _itemFitsAtPosition: function(item, newPosition) {\n /**\n * Check that an item wouldn't overlap with another one if placed at a\n * certain position within the grid\n */\n\n var position = this._getItemPosition(item),\n x, y, row;\n\n // No coordonate can be negative\n if (newPosition[0] < 0 || newPosition[1] < 0) {\n return false;\n }\n\n // Make sure the item isn't larger than the entire grid\n if (newPosition[1] + position.h > this._options.lanes) {\n return false;\n }\n\n // Make sure the position doesn't overlap with an already positioned\n // item.\n for (x = newPosition[0]; x < newPosition[0] + position.w; x++) {\n var col = this.grid[x];\n\n // Surely a column that hasn't even been created yet is available\n if (!col) {\n continue;\n }\n\n for (y = newPosition[1]; y < newPosition[1] + position.h; y++) {\n // Any space occupied by an item can continue to be occupied by the\n // same item.\n if (col[y] && col[y] !== item) {\n return false;\n }\n }\n }\n\n return true;\n },\n\n _updateItemPosition: function(item, position) {\n if (item.x !== null && item.y !== null) {\n this._deleteItemPositionFromGrid(item);\n }\n\n this._setItemPosition(item, position);\n\n this._markItemPositionToGrid(item);\n },\n\n _updateItemSize: function(item, width, height) {\n /**\n * @param {Object} item A reference to a grid item.\n * @param {Number} width The new width.\n * @param {Number} height The new height.\n */\n\n if (item.x !== null && item.y !== null) {\n this._deleteItemPositionFromGrid(item);\n }\n\n item.w = width;\n item.h = height;\n\n this._markItemPositionToGrid(item);\n },\n\n _markItemPositionToGrid: function(item) {\n /**\n * Mark the grid cells that are occupied by an item. This prevents items\n * from overlapping in the grid\n */\n\n var position = this._getItemPosition(item),\n x, y;\n\n // Ensure that the grid has enough columns to accomodate the current item.\n this._ensureColumns(position.x + position.w);\n\n for (x = position.x; x < position.x + position.w; x++) {\n for (y = position.y; y < position.y + position.h; y++) {\n this.grid[x][y] = item;\n }\n }\n },\n\n _deleteItemPositionFromGrid: function(item) {\n var position = this._getItemPosition(item),\n x, y;\n\n for (x = position.x; x < position.x + position.w; x++) {\n // It can happen to try to remove an item from a position not generated\n // in the grid, probably when loading a persisted grid of items. No need\n // to create a column to be able to remove something from it, though\n if (!this.grid[x]) {\n continue;\n }\n\n for (y = position.y; y < position.y + position.h; y++) {\n // Don't clear the cell if it's been occupied by a different widget in\n // the meantime (e.g. when an item has been moved over this one, and\n // thus by continuing to clear this item's previous position you would\n // cancel the first item's move, leaving it without any position even)\n if (this.grid[x][y] == item) {\n this.grid[x][y] = null;\n }\n }\n }\n },\n\n _ensureColumns: function(N) {\n /**\n * Ensure that the grid has at least N columns available.\n */\n var i;\n for (i = 0; i < N; i++) {\n if (!this.grid[i]) {\n this.grid.push(new GridCol(this._options.lanes));\n }\n }\n },\n\n _getItemsCollidingWithItem: function(item) {\n var collidingItems = [];\n for (var i = 0; i < this.items.length; i++) {\n if (item != this.items[i] &&\n this._itemsAreColliding(item, this.items[i])) {\n collidingItems.push(i);\n }\n }\n return collidingItems;\n },\n\n _itemsAreColliding: function(item1, item2) {\n var position1 = this._getItemPosition(item1),\n position2 = this._getItemPosition(item2);\n\n return !(position2.x >= position1.x + position1.w ||\n position2.x + position2.w <= position1.x ||\n position2.y >= position1.y + position1.h ||\n position2.y + position2.h <= position1.y);\n },\n\n _resolveCollisions: function(item) {\n if (!this._tryToResolveCollisionsLocally(item)) {\n this._pullItemsToLeft(item);\n }\n this._pullItemsToLeft();\n },\n\n _tryToResolveCollisionsLocally: function(item) {\n /**\n * Attempt to resolve the collisions after moving a an item over one or more\n * other items within the grid, by shifting the position of the colliding\n * items around the moving one. This might result in subsequent collisions,\n * in which case we will revert all position permutations. To be able to\n * revert to the initial item positions, we create a virtual grid in the\n * process\n */\n var collidingItems = this._getItemsCollidingWithItem(item);\n if (!collidingItems.length) {\n return true;\n }\n var _gridList = new GridList([], this._options),\n leftOfItem,\n rightOfItem,\n aboveOfItem,\n belowOfItem;\n\n GridList.cloneItems(this.items, _gridList.items);\n _gridList.generateGrid();\n\n for (var i = 0; i < collidingItems.length; i++) {\n var collidingItem = _gridList.items[collidingItems[i]],\n collidingPosition = this._getItemPosition(collidingItem);\n\n // We use a simple algorithm for moving items around when collisions occur:\n // In this prioritized order, we try to move a colliding item around the\n // moving one:\n // 1. to its left side\n // 2. above it\n // 3. under it\n // 4. to its right side\n var position = this._getItemPosition(item);\n\n leftOfItem = [position.x - collidingPosition.w, collidingPosition.y];\n rightOfItem = [position.x + position.w, collidingPosition.y];\n aboveOfItem = [collidingPosition.x, position.y - collidingPosition.h];\n belowOfItem = [collidingPosition.x, position.y + position.h];\n\n if (_gridList._itemFitsAtPosition(collidingItem, leftOfItem)) {\n _gridList._updateItemPosition(collidingItem, leftOfItem);\n } else if (_gridList._itemFitsAtPosition(collidingItem, aboveOfItem)) {\n _gridList._updateItemPosition(collidingItem, aboveOfItem);\n } else if (_gridList._itemFitsAtPosition(collidingItem, belowOfItem)) {\n _gridList._updateItemPosition(collidingItem, belowOfItem);\n } else if (_gridList._itemFitsAtPosition(collidingItem, rightOfItem)) {\n _gridList._updateItemPosition(collidingItem, rightOfItem);\n } else {\n // Collisions failed, we must use the pullItemsToLeft method to arrange\n // the other items around this item with fixed position. This is our\n // plan B for when local collision resolving fails.\n return false;\n }\n }\n // If we reached this point it means we managed to resolve the collisions\n // from one single iteration, just by moving the colliding items around. So\n // we accept this scenario and marge the brached-out grid instance into the\n // original one\n GridList.cloneItems(_gridList.items, this.items);\n this.generateGrid();\n return true;\n },\n\n _pullItemsToLeft: function(fixedItem) {\n /**\n * Build the grid from scratch, by using the current item positions and\n * pulling them as much to the left as possible, removing as space between\n * them as possible.\n *\n * If a \"fixed item\" is provided, its position will be kept intact and the\n * rest of the items will be layed around it.\n */\n\n\n // Start a fresh grid with the fixed item already placed inside\n this._sortItemsByPosition();\n this._resetGrid();\n\n // Start the grid with the fixed item as the first positioned item\n if (fixedItem) {\n var fixedPosition = this._getItemPosition(fixedItem);\n this._updateItemPosition(fixedItem, [fixedPosition.x, fixedPosition.y]);\n }\n\n for (var i = 0; i < this.items.length; i++) {\n var item = this.items[i],\n position = this._getItemPosition(item);\n\n // The fixed item keeps its exact position\n if (fixedItem && item == fixedItem) {\n continue;\n }\n\n var x = this._findLeftMostPositionForItem(item),\n newPosition = this.findPositionForItem(\n item, {x: x, y: 0}, position.y);\n\n this._updateItemPosition(item, newPosition);\n }\n },\n\n _findLeftMostPositionForItem: function(item) {\n /**\n * When pulling items to the left, we need to find the leftmost position for\n * an item, with two considerations in mind:\n * - preserving its current row\n * - preserving the previous horizontal order between items\n */\n\n var tail = 0,\n position = this._getItemPosition(item);\n\n for (var i = 0; i < this.grid.length; i++) {\n for (var j = position.y; j < position.y + position.h; j++) {\n var otherItem = this.grid[i][j];\n\n if (!otherItem) {\n continue;\n }\n\n var otherPosition = this._getItemPosition(otherItem);\n\n if (this.items.indexOf(otherItem) < this.items.indexOf(item)) {\n tail = otherPosition.x + otherPosition.w;\n }\n }\n }\n\n return tail;\n },\n\n _getItemByAttribute: function(key, value) {\n for (var i = 0; i < this.items.length; i++) {\n if (this.items[i][key] === value) {\n return this.items[i];\n }\n }\n return null;\n },\n\n _padNumber: function(nr, prefix) {\n // Currently works for 2-digit numbers (<100)\n return nr >= 10 ? nr : prefix + nr;\n },\n\n _getItemPosition: function(item) {\n /**\n * If the direction is vertical we need to rotate the grid 90 deg to the\n * left. Thus, we simulate the fact that items are being pulled to the top.\n *\n * Since the items have widths and heights, if we apply the classic\n * counter-clockwise 90 deg rotation\n *\n * [0 -1]\n * [1 0]\n *\n * then the top left point of an item will become the bottom left point of\n * the rotated item. To adjust for this, we need to subtract from the y\n * position the height of the original item - the width of the rotated item.\n *\n * However, if we do this then we'll reverse some actions: resizing the\n * width of an item will stretch the item to the left instead of to the\n * right; resizing an item that doesn't fit into the grid will push the\n * items around it instead of going on a new row, etc.\n *\n * We found it better to do a vertical flip of the grid after rotating it.\n * This restores the direction of the actions and greatly simplifies the\n * transformations.\n */\n\n if (this._options.direction === 'horizontal') {\n return item;\n } else {\n return {\n x: item.y,\n y: item.x,\n w: item.h,\n h: item.w\n };\n }\n },\n\n _setItemPosition: function(item, position) {\n /**\n * See _getItemPosition.\n */\n\n if (this._options.direction === 'horizontal') {\n item.x = position[0];\n item.y = position[1];\n } else {\n // We're supposed to subtract the rotated item's height which is actually\n // the non-rotated item's width.\n item.x = position[1];\n item.y = position[0];\n }\n }\n};\n\nvar GridCol = function(lanes) {\n for (var i = 0; i < lanes; i++) {\n this.push(null);\n }\n};\n\n// Extend the Array prototype\nGridCol.prototype = [];\n\n// This module will have direct access to the GridList class\nreturn GridList;\n\n}));\n",".layout_Grid>.ddCell {\n position: absolute;\n}\n\n.layout_Grid>.laneBackground {\n position: absolute;\n border-style: solid;\n border-width: 1px;\n background: whitesmoke;\n}\n\n.layout_Grid>.lane {\n position: absolute;\n border-style: none;\n opacity: 0.25;\n border-radius: 0px;\n pointer-events: none;\n}\n\n.layout_Grid>.ddCell.draggable {\n border-style: solid;\n border-width: 1px;\n background-color: ghostwhite;\n border-radius: 0px;\n cursor: move;\n}\n\n.layout_Grid>.ddCell.draggable>.resizeHandle {\n bottom: 0px;\n right: 0px;\n width: 8px;\n height: 8px;\n border-style: none;\n position: absolute;\n cursor: nwse-resize;\n}\n\n.layout_Grid>.ddCell.draggable .resizeHandleDisplay {\n bottom: 2px;\n right: 2px;\n width: 4px;\n height: 4px;\n border-style: solid;\n border-left-width: 0px;\n border-top-width: 0px;\n border-right-width: 2px;\n border-bottom-width: 2px;\n border-color: darkGray;\n background-color: none;\n position: absolute;\n}\n\n.layout_Grid>.ddCell.draggable .resizeHandleDisplay:hover {\n border-color: orange;\n}\n\n.layout_Grid>.dragging {\n border-style: solid;\n border-width: 1px;\n border-color: gray;\n border-radius: 0px;\n position: absolute;\n background: repeating-linear-gradient(-45deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 4px, rgba(100, 100, 100, 0.1) 4px, rgba(100, 100, 100, 0.1) 8px);\n}\n\n.layout_Grid>.resizing {\n border-style: solid;\n border-width: 1px;\n border-color: gray;\n background-color: orange;\n border-radius: 0px;\n position: absolute;\n opacity: 0.3;\n background: repeating-linear-gradient(-45deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 4px, orange 4px, orange 8px);\n}\n\n.layout_Grid>.ddCell.draggable .common_Widget.selected {\n border-style: solid;\n border-width: 1px;\n border-color: red;\n background-color: gray;\n border-radius: 0px;\n position: absolute;\n background: repeating-linear-gradient(-45deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0) 4px, rgba(100, 0, 0, 0.1) 4px, rgba(100, 0, 0, 0.1) 8px);\n}\n\n.layout_Grid #drag-me::before {\n content: \"#\" attr(id);\n font-weight: bold;\n}","import { d3Event, drag as d3Drag, HTMLWidget, Platform, select as d3Select, Utility } from \"@hpcc-js/common\";\nimport * as _GridList from \"grid-list\";\nimport { Cell } from \"./Cell.ts\";\n\nimport \"../src/Grid.css\";\n\nconst GridList = (_GridList && _GridList.default) || _GridList;\n\nexport type ICellPosition = [number, number, number, number];\n\nexport class Grid extends HTMLWidget {\n divItems;\n\n gridList;\n items;\n itemsMap;\n origItems;\n cellWidth;\n cellHeight;\n dragItem;\n dragItemPos;\n\n _d3Drag;\n _d3DragResize;\n _selectionBag;\n _scrollBarWidth;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n this._selectionBag = new Utility.Selection(this);\n\n this.content([]);\n }\n\n getDimensions() {\n const size = { width: 0, height: 0 };\n this.content().forEach(function (cell) {\n if (size.width < cell.gridCol() + cell.gridColSpan()) {\n size.width = cell.gridCol() + cell.gridColSpan();\n }\n if (size.height < cell.gridRow() + cell.gridRowSpan()) {\n size.height = cell.gridRow() + cell.gridRowSpan();\n }\n }, this);\n return size;\n }\n\n clearContent(widget) {\n this.content(this.content().filter(function (contentWidget) {\n if (!widget) {\n contentWidget.target(null);\n return false;\n }\n let w: any = contentWidget;\n while (w) {\n if (widget === w) {\n contentWidget.target(null);\n return false;\n }\n w = w.widget ? w.widget() : null;\n }\n return true;\n }));\n }\n\n setContent(row, col, widget, title?, rowSpan?, colSpan?) {\n rowSpan = rowSpan || 1;\n colSpan = colSpan || 1;\n title = title || \"\";\n this.content(this.content().filter(function (contentWidget) {\n if (contentWidget.gridRow() === row && contentWidget.gridCol() === col) {\n contentWidget.target(null);\n return false;\n }\n return true;\n }));\n if (widget) {\n const cell = new Cell()\n .gridRow(row)\n .gridCol(col)\n .widget(widget)\n .title(title)\n .gridRowSpan(rowSpan)\n .gridColSpan(colSpan)\n ;\n this.content().push(cell);\n }\n return this;\n }\n\n sortedContent() {\n return this.content().sort(function (l, r) {\n if (l.gridRow() === r.gridRow()) {\n return l.gridCol() - r.gridCol();\n }\n return l.gridRow() - r.gridRow();\n });\n }\n\n getCell(row, col) {\n let retVal = null;\n this.content().some(function (cell) {\n if (row >= cell.gridRow() && row < cell.gridRow() + cell.gridRowSpan() &&\n col >= cell.gridCol() && col < cell.gridCol() + cell.gridColSpan()) {\n retVal = cell;\n return true;\n }\n return false;\n });\n return retVal;\n }\n\n getWidgetCell(id) {\n let retVal = null;\n this.content().some(function (cell) {\n if (cell.widget().id() === id) {\n retVal = cell;\n return true;\n }\n return false;\n });\n return retVal;\n }\n\n getContent(id) {\n let retVal = null;\n this.content().some(function (cell) {\n if (cell.widget().id() === id) {\n retVal = cell.widget();\n return true;\n }\n return false;\n });\n return retVal;\n }\n\n cellToGridItem(cell) {\n return {\n x: cell.gridCol(),\n y: cell.gridRow(),\n w: cell.gridColSpan(),\n h: cell.gridRowSpan(),\n id: cell.id(),\n cell\n };\n }\n\n gridItemToCell(item) {\n item.cell\n .gridCol(item.x)\n .gridRow(item.y)\n .gridColSpan(item.w)\n .gridRowSpan(item.h)\n ;\n }\n\n resetItemsPos() {\n this.origItems.forEach(function (origItem) {\n const item = this.itemsMap[origItem.id];\n item.x = origItem.x;\n item.y = origItem.y;\n }, this);\n }\n\n initGridList() {\n this.itemsMap = {};\n this.items = this.content().map(function (cell) {\n const retVal = this.cellToGridItem(cell);\n this.itemsMap[retVal.id] = retVal;\n return retVal;\n }, this);\n this.origItems = this.content().map(this.cellToGridItem);\n this.gridList = new GridList(this.items, {\n direction: this.snapping(),\n lanes: this.snapping() === \"horizontal\" ? this.snappingRows() : this.snappingColumns()\n });\n }\n\n killGridList() {\n this.gridList = null;\n delete this.items;\n delete this.itemsMap;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._scrollBarWidth = Platform.getScrollbarWidth();\n\n const context = this;\n this._d3Drag = d3Drag()\n .subject(function (_d) {\n const d = context.cellToGridItem(_d);\n return { x: d.x * context.cellWidth, y: d.y * context.cellHeight };\n })\n .on(\"start\", function (_d: any) {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.initGridList();\n const d = context.itemsMap[_d.id()];\n context.dragItem = element.append(\"div\")\n .attr(\"class\", \"dragging\")\n .style(\"transform\", function () { return \"translate(\" + d.x * context.cellWidth + \"px, \" + d.y * context.cellHeight + \"px)\"; })\n .style(\"width\", function () { return d.w * context.cellWidth - context.gutter() + \"px\"; })\n .style(\"height\", function () { return d.h * context.cellHeight - context.gutter() + \"px\"; })\n ;\n context.selectionBagClick(_d);\n })\n .on(\"drag\", function (_d: any) {\n if (!context.designMode()) return;\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n const d = context.itemsMap[_d.id()];\n if (event.x < 0) {\n event.x = 0;\n }\n if (event.x + d.w * context.cellWidth > context.snappingColumns() * context.cellWidth) {\n event.x = context.snappingColumns() * context.cellWidth - d.w * context.cellWidth;\n }\n if (event.y < 0) {\n event.y = 0;\n }\n if (event.y + d.h * context.cellWidth > context.snappingRows() * context.cellWidth) {\n event.y = context.snappingRows() * context.cellWidth - d.h * context.cellWidth;\n }\n const pos = [Math.max(0, Math.floor((event.x + context.cellWidth / 2) / context.cellWidth)), Math.max(0, Math.floor((event.y + context.cellHeight / 2) / context.cellHeight))];\n if (d.x !== pos[0] || d.y !== pos[1]) {\n if (context.snapping() !== \"none\") {\n context.resetItemsPos();\n context.gridList.moveItemToPosition(d, pos);\n } else {\n d.x = pos[0];\n d.y = pos[1];\n }\n if (_d.gridCol() !== d.x || _d.gridRow() !== d.y) {\n context.items.forEach(context.gridItemToCell);\n context.updateGrid(false, 100);\n }\n }\n context.dragItem\n .style(\"transform\", function () { return \"translate(\" + event.x + \"px, \" + event.y + \"px)\"; })\n .style(\"width\", function () { return d.w * context.cellWidth + \"px\"; })\n .style(\"height\", function () { return d.h * context.cellHeight + \"px\"; })\n ;\n })\n .on(\"end\", function () {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.dragItem.remove();\n context.dragItem = null;\n context.killGridList();\n })\n ;\n\n this._d3DragResize = d3Drag()\n .subject(function (_d) {\n const d = context.cellToGridItem(_d);\n return { x: (d.x + d.w - 1) * context.cellWidth, y: (d.y + d.h - 1) * context.cellHeight };\n })\n .on(\"start\", function (_d: any) {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.initGridList();\n const d = context.itemsMap[_d.id()];\n context.dragItem = element.append(\"div\")\n .attr(\"class\", \"resizing\")\n .style(\"transform\", function () { return \"translate(\" + d.x * context.cellWidth + \"px, \" + d.y * context.cellHeight + \"px)\"; })\n .style(\"width\", function () { return d.w * context.cellWidth - context.gutter() + \"px\"; })\n .style(\"height\", function () { return d.h * context.cellHeight - context.gutter() + \"px\"; })\n ;\n context.dragItemPos = { x: d.x, y: d.y };\n })\n .on(\"drag\", function (_d: any) {\n if (!context.designMode()) return;\n const event = d3Event();\n event.sourceEvent.stopPropagation();\n const d = context.itemsMap[_d.id()];\n const pos = [Math.max(0, Math.round(event.x / context.cellWidth)), Math.max(0, Math.round(event.y / context.cellHeight))];\n const size = {\n w: Math.max(1, pos[0] - d.x + 1),\n h: Math.max(1, pos[1] - d.y + 1)\n };\n if (d.w !== size.w || d.h !== size.h) {\n if (context.snapping() !== \"none\") {\n context.resetItemsPos();\n context.gridList.resizeItem(d, size);\n } else {\n d.w = size.w;\n d.h = size.h;\n }\n if (_d.gridColSpan() !== d.w || _d.gridRowSpan() !== d.h) {\n context.items.forEach(context.gridItemToCell);\n context.updateGrid(d.id, 100);\n }\n }\n context.dragItem\n .style(\"width\", function () { return (-d.x + 1) * context.cellWidth + event.x - context.gutter() + \"px\"; })\n .style(\"height\", function () { return (-d.y + 1) * context.cellHeight + event.y - context.gutter() + \"px\"; })\n ;\n })\n .on(\"end\", function () {\n if (!context.designMode()) return;\n d3Event().sourceEvent.stopPropagation();\n context.dragItem.remove();\n context.dragItem = null;\n context.killGridList();\n })\n ;\n }\n\n updateGrid(resize, transitionDuration: number = 0, _noRender: boolean = false) {\n transitionDuration = transitionDuration || 0;\n const context = this;\n this.divItems\n .classed(\"draggable\", this.designMode())\n .transition().duration(transitionDuration)\n .style(\"left\", function (d) { return d.gridCol() * context.cellWidth + context.gutter() / 2 + \"px\"; })\n .style(\"top\", function (d) { return d.gridRow() * context.cellHeight + context.gutter() / 2 + \"px\"; })\n .style(\"width\", function (d) { return d.gridColSpan() * context.cellWidth - context.gutter() + \"px\"; })\n .style(\"height\", function (d) { return d.gridRowSpan() * context.cellHeight - context.gutter() + \"px\"; })\n .on(\"end\", function (d) {\n d\n .surfaceShadow_default(context.surfaceShadow())\n .surfacePadding_default(context.surfacePadding())\n .surfaceBorderWidth_default(context.surfaceBorderWidth())\n .surfaceBackgroundColor_default(context.surfaceBackgroundColor())\n ;\n\n if (resize === true || resize === d.id()) {\n d\n .resize()\n .lazyRender()\n ;\n }\n })\n ;\n }\n\n update(domNode, element2) {\n super.update(domNode, element2);\n\n this._placeholderElement.style(\"overflow-x\", this.fitTo() === \"width\" ? \"hidden\" : null);\n this._placeholderElement.style(\"overflow-y\", this.fitTo() === \"width\" ? \"scroll\" : null);\n const dimensions = this.getDimensions();\n const clientWidth = this.width() - (this.fitTo() === \"width\" ? this._scrollBarWidth : 0);\n this.cellWidth = clientWidth / dimensions.width;\n this.cellHeight = this.fitTo() === \"all\" ? this.height() / dimensions.height : this.cellWidth;\n if (this.designMode()) {\n const cellLaneRatio = Math.min(this.width() / this.snappingColumns(), this.height() / this.snappingRows());\n const laneWidth = Math.floor(cellLaneRatio);\n this.cellWidth = laneWidth;\n this.cellHeight = this.cellWidth;\n }\n\n // Grid ---\n const context = this;\n const divItems = element2.selectAll(\"#\" + this.id() + \" > .ddCell\").data(this.content(), function (d) { return d.id(); });\n this.divItems = divItems.enter().append(\"div\")\n .attr(\"class\", \"ddCell\")\n .each(function (d) {\n d.target(this);\n d.__grid_watch = d.monitor(function (key, newVal, oldVal) {\n if (context._renderCount && (key === \"snapping\" || key.indexOf(\"grid\") === 0) && newVal !== oldVal) {\n if (!context.gridList) {\n // API Call (only needed when not dragging) ---\n context.initGridList();\n if (context.snapping() !== \"none\") {\n context.gridList.resizeGrid(context.snapping() === \"horizontal\" ? context.snappingRows() : context.snappingColumns());\n }\n context.items.forEach(context.gridItemToCell);\n context.updateGrid(d.id(), 100);\n context.killGridList();\n }\n }\n });\n const element = d3Select(this);\n element.append(\"div\")\n .attr(\"class\", \"resizeHandle\")\n .call(context._d3DragResize)\n .append(\"div\")\n .attr(\"class\", \"resizeHandleDisplay\")\n ;\n }).merge(divItems)\n ;\n this.divItems.each(function (d) {\n const element = d3Select(this);\n if (context.designMode()) {\n element.call(context._d3Drag);\n } else {\n element\n .on(\"mousedown.drag\", null)\n .on(\"touchstart.drag\", null)\n ;\n }\n });\n this.divItems.select(\".resizeHandle\")\n .style(\"display\", this.designMode() ? null : \"none\")\n ;\n\n this.updateGrid(true);\n divItems.exit()\n .each(function (d) {\n d.target(null);\n if (d.__grid_watch) {\n d.__grid_watch.remove();\n }\n })\n .remove()\n ;\n\n // Snapping ---\n const lanesBackground = element2.selectAll(\"#\" + this.id() + \" > .laneBackground\").data(this.designMode() ? [\"\"] : []);\n lanesBackground.enter().insert(\"div\", \":first-child\")\n .attr(\"class\", \"laneBackground\")\n .style(\"left\", \"1px\")\n .style(\"top\", \"1px\")\n .on(\"click\", function () {\n context.selectionBagClear();\n })\n .merge(lanesBackground)\n .style(\"width\", (this.snappingColumns() * this.cellWidth) + \"px\")\n .style(\"height\", (this.snappingRows() * this.cellHeight) + \"px\")\n ;\n lanesBackground.exit()\n .each(function () {\n context.selectionBagClear();\n })\n .remove()\n ;\n\n const lanes = element2.selectAll(\"#\" + this.id() + \" > .lane\").data(this.designMode() ? [\"\"] : []);\n lanes.enter().append(\"div\")\n .attr(\"class\", \"lane\")\n .style(\"left\", \"1px\")\n .style(\"top\", \"1px\")\n ;\n lanes\n .style(\"display\", this.showLanes() ? null : \"none\")\n .style(\"width\", (this.snappingColumns() * this.cellWidth) + \"px\")\n .style(\"height\", (this.snappingRows() * this.cellHeight) + \"px\")\n .style(\"background-image\", \"linear-gradient(to right, grey 1px, transparent 1px), linear-gradient(to bottom, grey 1px, transparent 1px)\")\n .style(\"background-size\", this.cellWidth + \"px \" + this.cellHeight + \"px\")\n ;\n lanes.exit()\n .remove()\n ;\n }\n\n exit(domNode, element) {\n this.content().forEach(w => w.target(null));\n super.exit(domNode, element);\n }\n\n _createSelectionObject(d) {\n return {\n _id: d._id,\n element: () => {\n return d._element;\n },\n widget: d\n };\n }\n\n selection(_) {\n if (!arguments.length) return this._selectionBag.get().map(function (d) { return d._id; });\n this._selectionBag.set(_.map(function (row) {\n return this._createSelectionObject(row);\n }, this));\n return this;\n }\n\n selectionBagClear() {\n if (!this._selectionBag.isEmpty()) {\n this._selectionBag.clear();\n this.postSelectionChange();\n }\n }\n\n selectionBagClick(d) {\n if (d !== null) {\n const selectionObj = this._createSelectionObject(d);\n if (d3Event().sourceEvent.ctrlKey) {\n if (this._selectionBag.isSelected(selectionObj)) {\n this._selectionBag.remove(selectionObj);\n this.postSelectionChange();\n } else {\n this._selectionBag.append(selectionObj);\n this.postSelectionChange();\n }\n } else {\n const selected = this._selectionBag.get();\n if (selected.length === 1 && selected[0]._id === selectionObj._id) {\n this.selectionBagClear();\n } else {\n this._selectionBag.set([selectionObj]);\n }\n this.postSelectionChange();\n }\n }\n }\n\n postSelectionChange() {\n }\n\n applyLayout(layoutArr: ICellPosition[]) {\n this.divItems.each((d, i) => {\n if (layoutArr[i]) {\n const [x, y, w, h] = layoutArr[i];\n d\n .gridCol(x)\n .gridRow(y)\n .gridColSpan(w)\n .gridRowSpan(h)\n ;\n }\n });\n this.updateGrid(true);\n }\n\n vizActivation(elem) {\n }\n}\nGrid.prototype._class += \" layout_Grid\";\n\nexport interface Grid {\n designMode(): boolean;\n designMode(_: boolean): this;\n showLanes(): boolean;\n showLanes(_: boolean): this;\n fitTo(): string;\n fitTo(_: string): this;\n\n snapping(): string;\n snapping(_: string): this;\n snappingColumns(): number;\n snappingColumns(_: number): this;\n snappingRows(): number;\n snappingRows(_: number): this;\n snappingColumns_default(): number;\n snappingColumns_default(_: number): this;\n snappingRows_default(): number;\n snappingRows_default(_: number): this;\n\n gutter(): number;\n gutter(_: number): this;\n\n surfaceShadow(): boolean;\n surfaceShadow(_: boolean): this;\n surfacePadding(): string;\n surfacePadding(_: string): this;\n surfaceBorderWidth(): number;\n surfaceBorderWidth(_: number): this;\n surfaceBackgroundColor(): string;\n surfaceBackgroundColor(_: string): this;\n\n content(): Cell[];\n content(_: Cell[]): this;\n}\n\nGrid.prototype.publish(\"designMode\", false, \"boolean\", \"Design Mode\", null, { tags: [\"Basic\"] });\nGrid.prototype.publish(\"showLanes\", true, \"boolean\", \"Show snapping lanes when in design mode\", null, { tags: [\"Basic\"], disable: w => !w.designMode() });\nGrid.prototype.publish(\"fitTo\", \"all\", \"set\", \"Sizing Strategy\", [\"all\", \"width\"], { tags: [\"Basic\"] });\nGrid.prototype.publish(\"snapping\", \"vertical\", \"set\", \"Snapping Strategy\", [\"vertical\", \"horizontal\", \"none\"]);\nGrid.prototype.publish(\"snappingColumns\", 12, \"number\", \"Snapping Columns\");\nGrid.prototype.publish(\"snappingRows\", 16, \"number\", \"Snapping Rows\");\n\nGrid.prototype.publish(\"gutter\", 6, \"number\", \"Gap Between Widgets\", null, { tags: [\"Basic\"] });\n\nGrid.prototype.publish(\"surfaceShadow\", true, \"boolean\", \"3D Shadow\");\nGrid.prototype.publish(\"surfacePadding\", null, \"string\", \"Cell Padding (px)\", null, { tags: [\"Intermediate\"] });\nGrid.prototype.publish(\"surfaceBorderWidth\", 1, \"number\", \"Width (px) of Cell Border\", null, { tags: [\"Intermediate\"] });\nGrid.prototype.publish(\"surfaceBackgroundColor\", null, \"html-color\", \"Surface Background Color\", null, { tags: [\"Advanced\"] });\n\nGrid.prototype.publish(\"content\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Basic\"], render: false });\n","import { FlexGrid } from \"./FlexGrid.ts\";\n\nexport class HorizontalList extends FlexGrid {\n constructor() {\n super();\n this.orientation_default(\"horizontal\");\n this.flexWrap_default(\"nowrap\");\n }\n}\nHorizontalList.prototype._class += \" layout_HorizontalList\";\n\nexport interface HorizontalList {\n orientation_default(_: \"horizontal\" | \"vertical\");\n flexWrap_default(_: \"nowrap\" | \"wrap\" | \"wrap-reverse\");\n}\n","import { HTMLWidget, Text } from \"@hpcc-js/common\";\n\nimport \"../src/Layered.css\";\n\nexport type LayerPlacement = \"default\" | \"top\" | \"right\" | \"bottom\" | \"left\" | \"center\";\n\nexport class Layered extends HTMLWidget {\n protected _contentContainer;\n _widgetPlacements;\n _widgetRatios;\n constructor() {\n super();\n\n this._tag = \"div\";\n this._widgetPlacements = [];\n this._widgetRatios = [];\n }\n\n addLayer(widget, placement: LayerPlacement = \"default\", widthRatio: number = 1, heightRatio: number = 1) {\n const widgets = this.widgets();\n widgets.push(widget ? widget : new Text().text(\"No widget defined for layer.\"));\n this.widgets(widgets);\n this._widgetPlacements.push(placement);\n this._widgetRatios.push([widthRatio, heightRatio]);\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._contentContainer = element.append(\"div\")\n .attr(\"class\", \"container\")\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n element.style(\"padding\", this.surfacePadding() + \"px\");\n\n const content = this._contentContainer.selectAll(\".content.id\" + this.id()).data(this.widgets(), function (d) { return d.id(); });\n content.enter().append(\"div\")\n .attr(\"class\", \"content id\" + this.id())\n .each(function (widget, idx) {\n widget.target(this);\n })\n .merge(content)\n .each(function (widget, idx) {\n const clientSize = {\n width: context.clientWidth(),\n height: context.clientHeight()\n };\n const widgetSize = context.widgetSize(idx, clientSize);\n const widgetPosition = context.widgetPosition(idx, clientSize, widgetSize);\n this.style.top = widgetPosition.y + \"px\";\n this.style.left = widgetPosition.x + \"px\";\n widget\n .resize(widgetSize)\n .render()\n ;\n })\n ;\n content.exit()\n .each(function (widget, idx) {\n widget\n .target(null)\n ;\n })\n .remove()\n ;\n content.order();\n }\n\n widgetSize(idx, clientSize) {\n if (this._widgetPlacements[idx] === \"default\") {\n return {\n width: clientSize.width * this._widgetRatios[idx][0],\n height: clientSize.height * this._widgetRatios[idx][1]\n };\n } else {\n return {\n width: clientSize.width * this._widgetRatios[idx][0],\n height: clientSize.height * this._widgetRatios[idx][1]\n };\n }\n }\n widgetPosition(idx, clientSize, widgetSize) {\n switch (this._widgetPlacements[idx]) {\n default:\n return {\n x: 0,\n y: 0\n };\n case \"top\":\n return {\n x: (clientSize.width / 2) - (widgetSize.width / 2),\n y: 0\n };\n case \"bottom\":\n return {\n x: (clientSize.width / 2) - (widgetSize.width / 2),\n y: clientSize.height - widgetSize.height\n };\n case \"left\":\n return {\n x: 0,\n y: (clientSize.height / 2) - (widgetSize.height / 2)\n };\n case \"right\":\n return {\n x: clientSize.width - widgetSize.width,\n y: (clientSize.height / 2) - (widgetSize.height / 2)\n };\n case \"center\":\n return {\n x: (clientSize.width / 2) - (widgetSize.width / 2),\n y: (clientSize.height / 2) - (widgetSize.height / 2)\n };\n }\n }\n}\nLayered.prototype._class += \" layout_Layered\";\n\nexport interface Layered {\n surfacePadding(): number;\n surfacePadding(_: number): this;\n widgets(): any;\n widgets(_: any): this;\n}\n\nLayered.prototype.publish(\"surfacePadding\", 0, \"number\", \"Padding\");\nLayered.prototype.publish(\"widgets\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\n\nexport class Popup extends HTMLWidget {\n _surfaceButtons;\n _originalPosition;\n\n constructor() {\n super();\n this._tag = \"div\";\n this._surfaceButtons = [];\n }\n\n updateState(visible) {\n visible = visible || !this.popupState();\n this.popupState(visible).render();\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this.widget()\n .target(domNode)\n ;\n this._originalPosition = this.position();\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n element\n .style(\"visibility\", this.popupState() ? null : \"hidden\")\n .style(\"opacity\", this.popupState() ? null : 0)\n .style(\"width\", this.shrinkWrap() ? this.widget().width() + \"px\" : this._size.width + \"px\")\n .style(\"height\", this.shrinkWrap() ? this.widget().height() + \"px\" : this._size.height + \"px\")\n ;\n if (this.widget().size().height === 0) {\n this.widget().resize(this.size());\n }\n }\n\n postUpdate(domNode, element) {\n let left;\n let top;\n switch (this.centerPopup()) {\n case \"container\":\n if (this._placeholderElement) {\n left = parseInt(this._placeholderElement.style(\"width\")) / 2 - this.widget().width() / 2;\n top = parseInt(this._placeholderElement.style(\"height\")) / 2 - this.widget().height() / 2;\n }\n this.position(\"absolute\");\n break;\n\n case \"window\":\n left = window.innerWidth / 2 - this.widget().width() / 2;\n top = window.innerHeight / 2 - this.widget().height() / 2;\n this.position(\"fixed\");\n break;\n\n default:\n left = 0;\n top = 0;\n this.position(this._originalPosition);\n break;\n }\n\n this.pos({ x: left, y: top });\n\n super.postUpdate(domNode, element);\n\n element\n .style(\"position\", this.position())\n .style(\"left\", this.left() + \"px\")\n .style(\"right\", this.right() + \"px\")\n .style(\"top\", this.top() + \"px\")\n .style(\"bottom\", this.bottom() + \"px\")\n ;\n }\n\n exit(domNode, element) {\n if (this.widget()) {\n this.widget().target(null);\n }\n super.exit(domNode, element);\n }\n\n click(obj) {\n }\n}\nPopup.prototype._class += \" layout_Popup\";\n\nexport interface Popup {\n popupState(): boolean;\n popupState(_: boolean): this;\n shrinkWrap(): boolean;\n shrinkWrap(_: boolean): this;\n centerPopup(): \"none\" | \"container\" | \"window\";\n centerPopup(_: \"none\" | \"container\" | \"window\"): this;\n top(): number;\n top(_: number): this;\n bottom(): number;\n bottom(_: number): this;\n left(): number;\n left(_: number): this;\n right(): number;\n right(_: number): this;\n position(): string;\n position(_: string): this;\n\n widget(): Widget;\n widget(_: Widget): this;\n}\n\nPopup.prototype.publish(\"popupState\", false, \"boolean\", \"State of the popup, visible (true) or hidden (false)\", null, {});\nPopup.prototype.publish(\"shrinkWrap\", false, \"boolean\", \"The popup parent container either shrinks to the size of its contents (true) or expands to fit thge popup's parentDiv (false)\", null, {});\nPopup.prototype.publish(\"centerPopup\", \"none\", \"set\", \"Center the widget in its container element (target) or in the window\", [\"none\", \"container\", \"window\"], {});\nPopup.prototype.publish(\"top\", null, \"number\", \"Top position property of popup\", null, {});\nPopup.prototype.publish(\"bottom\", null, \"number\", \"Bottom position property of popup\", null, {});\nPopup.prototype.publish(\"left\", null, \"number\", \"Left position property of popup\", null, {});\nPopup.prototype.publish(\"right\", null, \"number\", \"Right position property of popup\", null, {});\nPopup.prototype.publish(\"position\", \"relative\", \"set\", \"Value of the 'position' property\", [\"absolute\", \"relative\", \"fixed\", \"static\", \"initial\", \"inherit\"], { tags: [\"Private\"] });\n\nPopup.prototype.publish(\"widget\", null, \"widget\", \"Widget\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Text, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Surface } from \"./Surface.ts\";\n\nimport \"../src/Tabbed.css\";\n\nexport class Tabbed extends HTMLWidget {\n _tabContainer;\n _contentContainer;\n\n constructor() {\n super();\n\n this._tag = \"div\";\n }\n\n clearTabs() {\n this.labels([]);\n this.widgets([]);\n return this;\n }\n\n addTab(widget, label, isActive?, callback?) {\n const widgetSize = widget.size();\n if (widgetSize.width === 0 && widgetSize.height === 0) {\n widget.size({ width: \"100%\", height: \"100%\" });\n }\n const labels = this.labels();\n const widgets = this.widgets();\n if (isActive) {\n this.activeTabIdx(this.widgets().length);\n }\n labels.push(label);\n const surface = new Surface().widget(widget ? widget : new Text().text(\"No widget defined for tab\"));\n widgets.push(surface);\n this.labels(labels);\n this.widgets(widgets);\n if (callback) {\n callback(surface);\n }\n return this;\n }\n\n widgetSize(widgetDiv) {\n const width = this.clientWidth();\n let height = this.clientHeight();\n\n const tcBox = this._tabContainer.node().getBoundingClientRect();\n if (typeof (tcBox.height) !== \"undefined\") {\n height -= tcBox.height;\n }\n return { width, height };\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._tabContainer = element.append(\"div\");\n this._contentContainer = element.append(\"div\");\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n element.style(\"padding\", this.surfacePadding_exists() ? this.surfacePadding() + \"px\" : null);\n\n const tabs = this._tabContainer.selectAll(\".tab-button.id\" + this.id()).data(this.showTabs() ? this.labels() : [], function (d) { return d; });\n tabs.enter().append(\"span\")\n .attr(\"class\", \"tab-button id\" + this.id())\n .style(\"cursor\", \"pointer\")\n .on(\"click\", function (d, idx) {\n context.click(context.widgets()[idx].widget(), d, idx);\n context\n .activeTabIdx(idx)\n .render()\n ;\n }).merge(tabs)\n .classed(\"active\", function (d, idx) { return context.activeTabIdx() === idx; })\n .text(function (d) { return d; })\n ;\n tabs.exit().remove();\n\n const content = this._contentContainer.selectAll(\".tab-content.id\" + this.id()).data(this.widgets(), function (d) { return d.id(); });\n content.enter().append(\"div\")\n .attr(\"class\", \"tab-content id\" + this.id())\n .each(function (widget, idx) {\n widget.target(this);\n }).merge(content)\n .classed(\"active\", function (d, idx) { return context.activeTabIdx() === idx; })\n .style(\"display\", function (d, idx) { return context.activeTabIdx() === idx ? \"block\" : \"none\"; })\n .each(function (surface, idx) {\n surface.visible(context.activeTabIdx() === idx);\n if (context.activeTabIdx() === idx) {\n const wSize = context.widgetSize(d3Select(this));\n surface\n .surfaceBorderWidth(context.showTabs() ? null : 0)\n .surfacePadding(context.showTabs() ? null : 0)\n .resize(wSize)\n ;\n }\n })\n ;\n content.exit()\n .each(function (widget, idx) {\n widget\n .target(null)\n ;\n })\n .remove();\n\n switch (this.tabLocation()) {\n case \"bottom\":\n this._tabContainer\n .attr(\"class\", \"on_bottom\")\n .style(\"top\", (this._contentContainer.node().offsetHeight + this.surfacePadding()) + \"px\")\n .style(\"position\", \"absolute\")\n ;\n this._contentContainer\n .style(\"top\", this.surfacePadding_exists() ? this.surfacePadding() + \"px\" : null)\n .style(\"position\", \"absolute\")\n ;\n break;\n default:\n this._tabContainer\n .attr(\"class\", \"on_top\")\n .style(\"top\", null)\n .style(\"position\", \"relative\")\n ;\n this._contentContainer\n .style(\"top\", (this._tabContainer.node().offsetHeight + this.surfacePadding()) + \"px\")\n .style(\"position\", \"absolute\")\n ;\n break;\n }\n }\n\n click(widget, column, idx) {\n }\n}\nTabbed.prototype._class += \" layout_Tabbed\";\n\nexport interface Tabbed {\n showTabs(): boolean;\n showTabs(_: boolean): this;\n surfacePadding(): number;\n surfacePadding(_: number): this;\n surfacePadding_exists(): boolean;\n activeTabIdx(): number;\n activeTabIdx(_: number): this;\n\n labels(): string[];\n labels(_: string[]): this;\n tabLocation(): \"top\" | \"bottom\";\n tabLocation(_: \"top\" | \"bottom\"): this;\n widgets(): any[];\n widgets(_: any[]): this;\n}\n\nTabbed.prototype.publish(\"showTabs\", true, \"boolean\", \"Show Tabs\", null, {});\nTabbed.prototype.publish(\"surfacePadding\", 4, \"number\", \"Padding\");\nTabbed.prototype.publish(\"activeTabIdx\", 0, \"number\", \"Index of active tab\", null, {});\n\nTabbed.prototype.publish(\"labels\", [], \"array\", \"Array of tab labels sharing an index with \", null, { tags: [\"Private\"] });\nTabbed.prototype.publish(\"tabLocation\", \"top\", \"set\", \"Position the tabs at the bottom of the widget\", [\"top\", \"bottom\"], { tags: [\"Private\"] });\nTabbed.prototype.publish(\"widgets\", [], \"widgetArray\", \"widgets\", null, { tags: [\"Private\"] });\n","import { HTMLWidget, Widget } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Toolbar.css\";\n\nexport class Toolbar extends HTMLWidget {\n\n constructor() {\n super();\n this._tag = \"div\";\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n element\n .attr(\"title\", context.title())\n .style(\"background-color\", this.backgroundColor())\n ;\n\n const title = element.selectAll(\"div.toolbar-title\")\n .data(this.title() ? [this.title()] : []);\n title.enter().append(\"div\")\n .classed(\"toolbar-title\", true)\n .append(\"span\")\n ;\n title.selectAll(\"div.toolbar-title > span\")\n .style(\"font-size\", this.fontSize_exists() ? this.fontSize() + \"px\" : null)\n .style(\"color\", this.fontColor_exists() ? this.fontColor() : null)\n .style(\"font-family\", this.fontFamily_exists() ? this.fontFamily() : null)\n .style(\"font-weight\", this.fontBold_exists() ? (this.fontBold() ? \"bold\" : \"normal\") : null)\n .style(\"background-color\", this.backgroundColor_exists() ? this.backgroundColor() : null)\n .text(context.title())\n ;\n title.exit().remove();\n\n const childWidgets = element.selectAll(\"div.toolbar-child\")\n .data(this.widgets() !== null ? this.widgets() : [], function (d) { return d.id(); });\n\n childWidgets.enter().insert(\"div\", \"div.toolbar-title\")\n .each(function (d, i) {\n const widgetClass = context.widgetClasses()[i] ? context.widgetClasses()[i] + \" toolbar-child\" : \"toolbar-child\";\n d3Select(this).classed(widgetClass, true);\n d.target(this);\n });\n childWidgets.exit().each(function (d) {\n d.target(null);\n }).remove();\n childWidgets.order();\n }\n\n render(callback?: (w: Widget) => void): this {\n const context = this;\n return super.render(function (w) {\n const toolbarBBox = context.element().node().getBoundingClientRect();\n let minX = toolbarBBox.left + toolbarBBox.width;\n context.element().selectAll(\"div.toolbar-child\")\n .each(function (d, i) {\n const childBBox = this.getBoundingClientRect();\n if (minX > childBBox.left)\n minX = childBBox.left;\n })\n ;\n context.element().select(\".toolbar-title\")\n .style(\"width\", (minX - toolbarBBox.left - 4) + \"px\")\n ;\n if (callback) {\n callback(w);\n }\n });\n }\n\n exit(domNode, element) {\n this.widgets().forEach(function (w) {\n w.target(null);\n });\n super.exit(domNode, element);\n }\n}\nToolbar.prototype._class += \" layout_Toolbar\";\n\nexport interface Toolbar {\n title(): string;\n title(_: string): this;\n\n fontSize(): number;\n fontSize(_: number): this;\n fontSize_exists(): boolean;\n fontColor(): string;\n fontColor(_: string): this;\n fontColor_exists(): boolean;\n fontFamily(): string;\n fontFamily(_: string): this;\n fontFamily_exists(): boolean;\n fontBold(): boolean;\n fontBold(_: boolean): this;\n fontBold_exists(): boolean;\n backgroundColor(): string;\n backgroundColor(_: string): this;\n backgroundColor_exists(): boolean;\n\n responsive(): boolean;\n responsive(_: boolean): this;\n\n widgets(): any[];\n widgets(_: any[]): this;\n widgetClasses(): string[];\n widgetClasses(_: string[]): this;\n}\n\nToolbar.prototype.publish(\"title\", \"\", \"string\", \"Title\", null, { tags: [\"Intermediate\"] });\n\nToolbar.prototype.publish(\"fontSize\", null, \"number\", \"Title Font Size (px)\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"fontColor\", null, \"html-color\", \"Title Font Color\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"fontFamily\", null, \"string\", \"Title Font Family\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"fontBold\", true, \"boolean\", \"Enable Bold Title Font\", null, { tags: [\"Advanced\"], optional: true });\nToolbar.prototype.publish(\"backgroundColor\", null, \"html-color\", \"Background Color\", null, { tags: [\"Intermediate\"], optional: true });\n\nToolbar.prototype.publish(\"responsive\", true, \"boolean\", \"Adapts to pixel width\", null, { tags: [\"Basic\"] });\n\nToolbar.prototype.publish(\"widgets\", [], \"widgetArray\", \"Child widgets of the toolbar\", null, { tags: [\"Basic\"] });\nToolbar.prototype.publish(\"widgetClasses\", [], \"array\", \"Array of Html Element classes to be assigned to the child widgets (shares index with widgets param)\", null, { tags: [\"Basic\"] });\n","import { FlexGrid } from \"./FlexGrid.ts\";\n\nexport class VerticalList extends FlexGrid {\n constructor() {\n super();\n this.orientation_default(\"vertical\");\n this.flexWrap_default(\"nowrap\");\n }\n}\nVerticalList.prototype._class += \" layout_VerticalList\";\n\nexport interface VerticalList {\n orientation_default(_: \"horizontal\" | \"vertical\");\n flexWrap_default(_: \"nowrap\" | \"wrap\" | \"wrap-reverse\");\n}\n"],"x_google_ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,24],"mappings":"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"}