{"version":3,"file":"index.umd.cjs","names":["HTMLWidget","HTMLWidget","FAChar","HTMLWidget","d3Select","d3Select","HTMLWidget","Utility","d3Select","d3SelectAll","Platform","d3Drag","Platform","HTMLWidget","HTMLWidget","pi","tau","pi","tau","pi","tau","Symbol","constant","circle","SVGWidget","d3SymbolCircle","d3SymbolCross","d3SymbolDiamond","d3SymbolSquare","d3SymbolStar","d3SymbolTriangle","d3SymbolWye","d3LegendColor","d3Symbol","Database","Palette","d3Format","d3ScaleOrdinal","instanceOfIHighlight","HTMLWidget","ProgressBar","ToggleButton","Text","Button","Spacer","TitleBar","Table","Utility","SVGWidget","d3Select","IconBar","HTMLWidget","_GridList","HTMLWidget","Utility","Platform","d3Drag","d3Select","HTMLWidget","Text","HTMLWidget","HTMLWidget","Text","d3Select","HTMLWidget","factory","global","exports","__create","__defProp","target","__getOwnPropDesc","__getOwnPropNames","__getProtoOf","__hasOwnProp","mod","cb","from","keys","i","n","key","to","except","k","desc","isNodeMode","PKG_NAME","PKG_VERSION","BUILD_VERSION","_hpcc_js_common","domNode","element","xPos","yPos","width","height","widgets","d","contentArr","protect","prepend","widget","arr","context","rows","li","wSize","cSize","titleDiv","widgetDiv","element2","titles","surfaceButtons","el","idx","button","widgetSize","w","_","opacity","indicatorBorderColor","indicatorGlowColor","otherElement","otherWidget","oldVal","newVal","layoutObj","sectionType","retObj","topSize","topPerc","bottomSize","bottomPerc","leftSize","leftPerc","rightSize","rightPerc","bcRect","\"top\"","\"bottom\"","\"left\"","\"right\"","t","\"px\"","b","l","r","c","\"center\"","obj","contentWidget","title","cell","id","event","handle","handleElm","xDelta","yDelta","delta","handles","grabbedHandle","handle2","handle3","retVal","rowsUpdate","drag","contentRect","rect","size","prevBox","currBox","div","overflowX","overflowY","getBBox","availableHeight","availableWidth","topElement","centerElement","leftElement","rightElement","bottomElement","a","sectionA","sectionB","bottomBBox","topBBox","leftBBox","rightBBox","bodyWidth","bodyHeight","centerOverflowX","centerOverflowY","scrollCenterX","scrollCenterY","promises","callback","active","widgetElements","update","aw","x","cos","sin","sqrt","pi$1","tau$1","pi","tau","epsilon","tauEpsilon","strings","digits","y","x1","y1","x2","y2","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","t01","t21","ccw","dx","a0","dy","cw","da","a1","h","shape","circle_default","cross_default","tan30","tan30_2","diamond_default","square_default","ka","kr","kx","ky","star_default","sqrt3","triangle_default","s","wye_default","path","type","buffer","\"circle\"","\"cross\"","\"diamond\"","\"square\"","\"star\"","\"triangle\"","\"wye\"","owner","_hpcc_js_d3_legend","row","disabledCols","anyDisabled","disabled","col","sel","palette","dataArr","total","maxLabelWidth","colLength","columns","fillColor","val","acc","label","textSize","format","steps","weightMin","weightMax","stepWeightDiff","mid","radius","shapePadding","ordinal","legendCellsBbox","offsetX","offsetY","extraWidth","extraHeight","legendTotal","totalText","totalOffsetX","totalOffsetY","circleSize","disabledIdx","_hpcc_js_api","_size","bbox","relativeTarget","modalRect","headerRect","header_h","origCloseFunc","selected","_hpcc_js_dgrid2","asDefault","namePrefix","nameSuffix","column","cssTag","highlight","scale_x","scale_y","x_is_smaller","chart","\"chart\"","widgetIconBar","\"_titleBar\"","\"_iconBar\"","buttons","hiddenButtons","iconDiv","_node","containerRect","icon_top","parentRect","more","tmpAny","cachedSizes","listItems","flexBasis","flexGrow","import_gridList","this$1","options","items","_items","widthOfGrid","output","border","item","j","currentColumn","lanes","position","start","fixedRow","newCol","newRow","newPosition","changedItems","initialItems","idAttribute","position1","item1","position2","item2","N","collidingItems","_gridList","leftOfItem","rightOfItem","aboveOfItem","belowOfItem","collidingItem","collidingPosition","fixedItem","fixedPosition","tail","otherItem","otherPosition","value","nr","prefix","GridList","rowSpan","colSpan","origItem","_d","pos","transitionDuration","resize","dimensions","clientWidth","cellLaneRatio","laneWidth","divItems","lanesBackground","selectionObj","layoutArr","placement","widthRatio","heightRatio","content","clientSize","widgetPosition","visible","left","top","labels","isActive","surface","tcBox","tabs","childWidgets","widgetClass","toolbarBBox","minX","childBBox"],"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-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/path.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/square.js","../../../node_modules/d3-shape/src/symbol/star.js","../../../node_modules/d3-shape/src/symbol/triangle.js","../../../node_modules/d3-shape/src/symbol/wye.js","../../../node_modules/d3-shape/src/symbol.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 = \"@hpcc-js/layout\";\nexport const PKG_VERSION = \"3.9.3\";\nexport const BUILD_VERSION = \"3.38.1\";\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 (_event, 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 (_event, 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 { 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(event, handle) {\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(event, handle) {\n        const context = this;\n\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(event, handle) {\n        if (handle) {\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 (event, d) { context.dragStart.call(context, event, d); })\n            .on(\"drag\", function (event, d) { context.dragTick.call(context, event, d); })\n            .on(\"end\", function (event, d) { context.dragEnd.call(context, event, d); })\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","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const 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","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`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._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let 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._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`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._append`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._append`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._append`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(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / pi);\n    context.moveTo(r, 0);\n    context.arc(0, 0, r, 0, tau);\n  }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const r = 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","import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n  draw(context, size) {\n    const y = sqrt(size / tan30_2);\n    const 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 {sqrt} from \"../math.js\";\n\nexport default {\n  draw(context, size) {\n    const w = sqrt(size);\n    const x = -w / 2;\n    context.rect(x, x, w, w);\n  }\n};\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size * ka);\n    const x = kx * r;\n    const y = ky * r;\n    context.moveTo(0, -r);\n    context.lineTo(x, y);\n    for (let i = 1; i < 5; ++i) {\n      const a = tau * i / 5;\n      const c = cos(a);\n      const s = 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","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n  draw(context, size) {\n    const y = -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","import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n  draw(context, size) {\n    const r = sqrt(size / a);\n    const x0 = r / 2, y0 = r * k;\n    const x1 = x0, y1 = r * k + r;\n    const x2 = -x1, 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 constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n  circle,\n  cross,\n  diamond,\n  square,\n  star,\n  triangle,\n  wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n  circle,\n  plus,\n  times,\n  triangle2,\n  asterisk,\n  square2,\n  diamond2\n];\n\nexport default function Symbol(type, size) {\n  let context = null,\n      path = withPath(symbol);\n\n  type = typeof type === \"function\" ? type : constant(type || circle);\n  size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n  function symbol() {\n    let 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 { instanceOfIHighlight } from \"@hpcc-js/api\";\nimport { Database, Palette, SVGWidget, Widget } from \"@hpcc-js/common\";\nimport { legendColor as d3LegendColor } from \"@hpcc-js/d3-legend\";\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 { 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 { 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 (event, _d: any) {\n                if (!context.designMode()) return;\n                event.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(event, _d);\n            })\n            .on(\"drag\", function (event, _d: any) {\n                if (!context.designMode()) return;\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 (event) {\n                if (!context.designMode()) return;\n                event.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 (event, _d: any) {\n                if (!context.designMode()) return;\n                event.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 (event, _d: any) {\n                if (!context.designMode()) return;\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 (event) {\n                if (!context.designMode()) return;\n                event.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(event, d) {\n        if (d !== null) {\n            const selectionObj = this._createSelectionObject(d);\n            if (event.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"],"ignoreList":[8,9,10,11,12,13,14,15,16,17,18,19,24],"mappings":"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"}