{"version":3,"file":"index.umd.cjs","names":["dgridShimBundle","HTMLWidget","PropertyExt","d3Format","Palette","hashSum","Utility","factory","global","exports","PKG_NAME","PKG_VERSION","BUILD_VERSION","loadDgridShim","Deferred","Memory","QueryResults","Grid","PagingGrid","ColumnSetGrid","domConstruct","str","item","obj","LINE_SPLITTER","LINE_SPLITTER2","_renderHtml","columns","column","childColumn","row","maxChildDepth","childDepth","childRows","childRow","cell","paddingArr","padding","retVal","db","_","fields","field","idx","prefix","formatter","renderCell","sortable","object","rowFormatter","opts","data","l","r","_hpcc_js_common","id","firstID","domNode","element","evt","rowID","selected","c","toggle","event","first","last","node","self","defaultFormatter","numberFormatter","defaultRenderCell","palette","min","max","valueColIdx","cellElement","value","background","cellText","cf","hash","_hpcc_js_util","sortablePadding","sampleData","i","prevVal","sampleRows","columnFormat","colIdx","col","dgridColumn","sets","colNames","used","result","name","set","cols","remaining","setWidth","total","datasource","cacheID","from","count","renderHtml","start","end","response","formattedRow","options","store","callback","w"],"sources":["../src/__package__.ts","../src/dgrid-shim.ts","../src/RowFormatter.ts","../src/DBStore.ts","../src/Common.ts","../src/Table.ts","../src/ColumnSetTable.ts","../src/DatasourceStore.ts","../src/DatasourceTable.ts"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/dgrid\";\nexport const PKG_VERSION = \"3.11.7\";\nexport const BUILD_VERSION = \"3.38.1\";\n","import type * as dgrid_shim from \"@hpcc-js/dgrid-shim\";\n\n//  Note:  Resolved at build time and inlined into the dgrid bundle.\n// @ts-expect-error\nimport dgridShimBundle from \"@hpcc-js/dgrid-shim/dist/index.js?raw\";\nconst loadDgridShim = new Function(\"globalThis\", \"var self = globalThis; var window = globalThis;\" + dgridShimBundle);\n\nif (!globalThis[\"@hpcc-js/dgrid-shim\"]) {\n    loadDgridShim(globalThis);\n    if (!globalThis[\"@hpcc-js/dgrid-shim\"]) {\n        console.error(\"dgrid-shim failed to load from inlined bundle\");\n    }\n}\n\nexport const Deferred = globalThis[\"@hpcc-js/dgrid-shim\"].Deferred as typeof dgrid_shim.Deferred;\nexport const Memory = globalThis[\"@hpcc-js/dgrid-shim\"].Memory as typeof dgrid_shim.Memory;\nexport const QueryResults = globalThis[\"@hpcc-js/dgrid-shim\"].QueryResults as typeof dgrid_shim.QueryResults;\nexport const Grid = globalThis[\"@hpcc-js/dgrid-shim\"].Grid as typeof dgrid_shim.Grid;\nexport const PagingGrid = globalThis[\"@hpcc-js/dgrid-shim\"].PagingGrid as typeof dgrid_shim.PagingGrid;\nexport const ColumnSetGrid = globalThis[\"@hpcc-js/dgrid-shim\"].ColumnSetGrid as typeof dgrid_shim.ColumnSetGrid;\nexport const domConstruct = globalThis[\"@hpcc-js/dgrid-shim\"].domConstruct as typeof dgrid_shim.domConstruct;\n","function entitiesEncode(str) {\n    return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction safeEncode(item) {\n    switch (Object.prototype.toString.call(item)) {\n        case \"[object Undefined]\":\n        case \"[object Boolean]\":\n        case \"[object Number]\":\n            return item;\n        case \"[object String]\":\n            return entitiesEncode(item);\n        default:\n            console.warn(\"Unknown cell type:  \" + Object.prototype.toString.call(item));\n    }\n    return item;\n}\n\nfunction isArray(obj: any): obj is any[] {\n    return obj instanceof Array;\n}\n\nconst LINE_SPLITTER = \"<br><hr class='dgrid-fakeline'>\";\nconst LINE_SPLITTER2 = \"<br><hr class='dgrid-fakeline' style='visibility: hidden'>\";\n\nexport interface ColumnType {\n    field: string;\n    leafID: string;\n    label: string;\n    idx: number;\n    className: string;\n    sortable: boolean;\n    hidden: boolean;\n    isSet: boolean;\n    width?: number;\n    formatter?: CellFormatter;\n    renderCell?: CellRenderer;\n    children?: ColumnType[];\n}\nexport interface RowType {\n    __hpcc_id: number;\n    __origRow: any[];\n    [colIdx: number]: any;\n}\nexport type CellFormatter = (this: ColumnType, cell: any, row: RowType) => string;\nexport type CellRenderer = (this: ColumnType, row: RowType, cell: any, cellElement: HTMLElement) => HTMLElement | void;\n\nexport class RowFormatter {\n    private _columns: ColumnType[];\n    private _flattenedColumns = [];\n    private _columnIdx = {};\n    private _formattedRow = {};\n\n    constructor(columns: ColumnType[], protected _renderHtml) {\n        this._columns = columns;\n        this.flattenColumns(columns);\n    }\n\n    flattenColumns(columns: ColumnType[]) {\n        for (const column of columns) {\n            this.flattenColumn(column);\n        }\n    }\n\n    flattenColumn(column: ColumnType) {\n        if (column.children) {\n            for (const childColumn of column.children) this.flattenColumn(childColumn);\n        } else {\n            this._columnIdx[column.field] = this._flattenedColumns.length;\n            this._flattenedColumns.push(column.field);\n        }\n    }\n\n    format(row) {\n        this._formattedRow = {};\n        this.formatRow(this._columns, row);\n        return this.row();\n    }\n\n    calcDepth(columns: ColumnType[], row) {\n        let maxChildDepth = 1;\n        for (const column of columns) {\n            if (column.children && row[column.leafID]) {\n                let childDepth = 0;\n                let childRows = [];\n                if (isArray(row[column.leafID])) {\n                    childRows = row[column.leafID];\n                } else if (isArray(row[column.leafID].Row)) {\n                    childRows = row[column.leafID].Row;\n                }\n                for (const childRow of childRows) {\n                    childDepth += this.calcDepth(column.children, childRow);\n                }\n                maxChildDepth = Math.max(maxChildDepth, childDepth);\n            }\n        }\n        return maxChildDepth;\n    }\n\n    formatCell(column: ColumnType, cell, maxChildDepth) {\n        if (column.children) {\n            let childDepth = 0;\n            if (!isArray(cell)) {\n                if (isArray(cell.Row)) {\n                    cell = cell.Row;\n                } else {\n                    cell = [cell];\n                }\n            }\n            for (const row of cell) {\n                childDepth = Math.max(childDepth, this.formatRow(column.children, row));\n            }\n        } else {\n            if (column.isSet) {\n                cell = JSON.stringify(cell.Item);\n            }\n            if (this._formattedRow[column.field] === undefined) {\n                this._formattedRow[column.field] = \"\" + (cell === undefined ? \"\" : (this._renderHtml ? cell : safeEncode(cell)));\n            } else {\n                this._formattedRow[column.field] += LINE_SPLITTER;\n                this._formattedRow[column.field] += \"\" + (cell === undefined ? \"\" : (this._renderHtml ? cell : safeEncode(cell)));\n            }\n            if (maxChildDepth > 1) {\n                const paddingArr = [];\n                paddingArr.length = maxChildDepth;\n                const padding = paddingArr.join(LINE_SPLITTER2);\n                this._formattedRow[column.field] += padding;\n            }\n        }\n    }\n\n    formatRow(columns: ColumnType[], row: { [key: string]: any } = [], rowIdx: number = 0) {\n        const maxChildDepth = this.calcDepth(columns, row);\n        for (const column of columns) {\n            this.formatCell(column, row[column.leafID], maxChildDepth);\n        }\n        return maxChildDepth;\n    }\n\n    row() {\n        const retVal = {};\n        for (const column of this._flattenedColumns) {\n            retVal[column] = this._formattedRow[column];\n        }\n        return retVal;\n    }\n}\n","import { Database } from \"@hpcc-js/common\";\nimport { Deferred } from \"./dgrid-shim.ts\";\nimport { CellFormatter, CellRenderer, ColumnType, RowFormatter } from \"./RowFormatter.ts\";\n\nexport class DBStore {\n    private _db: Database.Grid;\n\n    Model: null;\n    idProperty: \"__hpcc_id\";\n\n    constructor(db: Database.Grid) {\n        this._db = db;\n    }\n\n    protected _renderHtml = true;\n    renderHtml(_: boolean) {\n        this._renderHtml = _;\n    }\n\n    db2Columns(sortable: boolean, fields: Database.Field[], prefix = \"\", formatter?: CellFormatter, renderCell?: CellRenderer): ColumnType[] {\n        if (!fields) return [];\n        return fields.map((field, idx) => {\n            const label = field.label();\n            const column: ColumnType = {\n                label,\n                leafID: \"\" + idx,\n                field: prefix + idx,\n                idx,\n                className: \"resultGridCell\",\n                sortable,\n                hidden: false,\n                isSet: false\n            };\n            switch (field.type()) {\n                case \"nested\":\n                    column.children = this.db2Columns(false, field.children(), prefix + idx + \"_\", formatter);\n                    column.sortable = false;\n                    break;\n                default:\n                    column.formatter = formatter;\n                    column.renderCell = renderCell;\n            }\n            return column;\n        });\n    }\n\n    columns(sortable: boolean, formatter?: CellFormatter, renderCell?: CellRenderer) {\n        return this.db2Columns(sortable, this._db.fields(), \"\", formatter, renderCell);\n    }\n\n    getIdentity(object) {\n        return object.__hpcc_id;\n    }\n\n    get(row: number) {\n        return this._db.row(row + 1);\n    }\n\n    _fetchRange(opts: { start: number, end: number }): object[] {\n        const rowFormatter = new RowFormatter(this.columns(false), this._renderHtml);\n        return this._db.data().slice(opts.start, opts.end).map((row, idx) => {\n            const formattedRow: any = rowFormatter.format(row);\n            return {\n                ...formattedRow,\n                __hpcc_id: opts.start + idx,\n                __origRow: row\n            };\n        });\n    }\n\n    fetchRange(opts: { start: number, end: number }): Promise<object[]> {\n        const data = this._fetchRange(opts);\n        const retVal: any = new Deferred();\n        retVal.totalLength = new Deferred();\n        retVal.resolve(data);\n        retVal.totalLength.resolve(this._db.length() - 1);\n        return retVal;\n    }\n\n    sort(opts) {\n        this._db.data().sort((l, r) => {\n            for (const item of opts) {\n                const idx = item.property;\n                if ((l[idx] === undefined && r[idx] !== undefined) || l[idx] < r[idx]) return item.descending ? 1 : -1;\n                if ((l[idx] !== undefined && r[idx] === undefined) || l[idx] > r[idx]) return item.descending ? -1 : 1;\n            }\n            return 0;\n        });\n        return this;\n    }\n}\n","import { HTMLWidget, Selection } from \"@hpcc-js/common\";\nimport { Grid, PagingGrid } from \"./dgrid-shim.ts\";\nimport { DBStore } from \"./DBStore.ts\";\nimport { type ColumnType } from \"./RowFormatter.ts\";\n\nimport \"../src/Common.css\";\n\nexport class Common extends HTMLWidget {\n    protected _columns: ColumnType[] = [];\n    protected _store = new DBStore(this._db);\n    protected _dgridDiv: Selection<HTMLDivElement, unknown, HTMLElement, unknown>;\n    protected _dgrid: typeof PagingGrid | typeof Grid;\n    protected _prevPaging: boolean;\n    private _prevSortBy: string;\n    private _prevSortByDescending: boolean;\n    private _prevMultiSelect: boolean;\n    private _selectedRowIDs = new Set<number>();\n    private _selectionAnchorID?: number;\n\n    constructor() {\n        super();\n        this._tag = \"div\";\n    }\n\n    protected formatSortBy(): [{ property: string, descending: boolean }] | undefined {\n        const idx = this.columns().indexOf(this.sortBy());\n        return idx >= 0 ? [{ property: idx.toString(), descending: this.sortByDescending() }] : undefined;\n    }\n\n    protected _supressEvents;\n    selection(): any[];\n    selection(_: any[]): this;\n    selection(_?: any[]): any[] | this {\n        if (!arguments.length) {\n            return [...this._selectedRowIDs]\n                .map(id => this._store.get(id))\n                .filter(Boolean)\n                .map(row => this.rowToObj(row));\n        }\n        this._supressEvents = true;\n        this._selectedRowIDs.clear();\n        let firstID: number | undefined;\n        this.data().forEach((row, idx) => {\n            if (_.indexOf(row) >= 0) {\n                this._selectedRowIDs.add(idx);\n                firstID ??= idx;\n            }\n        });\n        this._selectionAnchorID = firstID;\n        this._renderSelection();\n        if (firstID !== undefined) {\n            this._dgrid?.row(firstID)?.element?.scrollIntoView();\n        }\n        this._supressEvents = false;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._dgridDiv = element.append(\"div\")\n            .attr(\"class\", \"flat\")\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n\n        this._store.renderHtml(this.renderHtml());\n\n        if (!this._dgrid || this._prevPaging !== this.pagination() ||\n            this._prevSortBy !== this.sortBy() ||\n            this._prevSortByDescending !== this.sortByDescending() ||\n            this._prevMultiSelect !== this.multiSelect()) {\n\n            this._prevPaging = this.pagination();\n            this._prevSortBy = this.sortBy();\n            this._prevSortByDescending = this.sortByDescending();\n            this._prevMultiSelect = this.multiSelect();\n            if (this._dgrid) {\n                this._dgrid.destroy();\n                this._dgridDiv = element.append(\"div\")\n                    .attr(\"class\", \"flat\")\n                    ;\n            }\n            this._dgrid = this._createGrid({\n                ...this._gridColumnsConfig(),\n                collection: this._store,\n                sort: this.formatSortBy(),\n                selectionMode: this.multiSelect() ? \"extended\" : \"single\",\n                deselectOnRefresh: true,\n                cellNavigation: false,\n                pagingLinks: 1,\n                pagingTextBox: true,\n                previousNextArrows: true,\n                firstLastArrows: true,\n                rowsPerPage: this.pageSize(),\n                pageSizeOptions: [1, 10, 25, 50, 100, 1000]\n            }, this._dgridDiv.node());\n            this._dgrid.on(\".dgrid-content .dgrid-cell:click\", (evt) => {\n                if (this._supressEvents) return;\n                const cell = this._dgrid.cell(evt);\n                const rowID = +cell?.row?.id;\n                const row = this._store.get(rowID);\n                if (row) {\n                    const selected = this._updateSelection(rowID, evt);\n                    this.click(\n                        this.rowToObj(row),\n                        cell.column.label,\n                        selected,\n                        { selection: this.selection() }\n                    );\n                }\n            });\n            this._dgrid.on(\"dgrid-column-autofit\", (evt) => {\n                if (this._supressEvents) return;\n                if (evt.detail?.label) {\n                    const column = this._columns.find(c => c.label === evt.detail.label);\n                    if (!column) return;\n                    this.dblclickColResize(column.label, column);\n                }\n            });\n            this._dgrid.refresh({});\n        }\n        this._dgrid.noDataMessage = `<span class='dojoxGridNoData'>${this.noDataMessage()}</span>`;\n        this._dgrid.loadingMessage = `<span class='dojoxGridNoData'>${this.loadingMessage()}</span>`;\n\n        this._dgridDiv\n            .style(\"width\", this.width() + \"px\")\n            .style(\"height\", this.height() - 2 + \"px\")\n            ;\n        this._dgrid.resize();\n    }\n\n    exit(domNode, element) {\n        delete this._prevPaging;\n        if (this._dgrid) {\n            this._dgrid.destroy();\n            delete this._dgrid;\n        }\n        super.exit(domNode, element);\n    }\n\n    click(row, col, sel, more) {\n    }\n\n    dblclickColResize(column, dgridColumn) {\n    }\n\n    private _updateSelection(rowID: number, event: MouseEvent): boolean {\n        const toggle = event.ctrlKey || event.metaKey;\n        if (this.multiSelect() && event.shiftKey && this._selectionAnchorID !== undefined) {\n            if (!toggle) this._selectedRowIDs.clear();\n            const first = Math.min(this._selectionAnchorID, rowID);\n            const last = Math.max(this._selectionAnchorID, rowID);\n            for (let id = first; id <= last; id++) this._selectedRowIDs.add(id);\n        } else if (this.multiSelect() && toggle) {\n            if (this._selectedRowIDs.has(rowID)) {\n                this._selectedRowIDs.delete(rowID);\n            } else {\n                this._selectedRowIDs.add(rowID);\n            }\n            this._selectionAnchorID = rowID;\n        } else if (!this.multiSelect() && toggle && this._selectedRowIDs.has(rowID)) {\n            this._selectedRowIDs.delete(rowID);\n            this._selectionAnchorID = undefined;\n        } else {\n            this._selectedRowIDs.clear();\n            this._selectedRowIDs.add(rowID);\n            this._selectionAnchorID = rowID;\n        }\n        this._renderSelection();\n        return this._selectedRowIDs.has(rowID);\n    }\n\n    private _renderSelection(): void {\n        if (!this._dgridDiv) return;\n        this._dgridDiv.node().querySelectorAll(\".dgrid-selected\").forEach(element => element.classList.remove(\"dgrid-selected\"));\n        for (const rowID of this._selectedRowIDs) {\n            this._dgrid?.row(rowID).element?.classList.add(\"dgrid-selected\");\n        }\n    }\n\n    protected _gridColumnsConfig(): object {\n        return { columns: this._columns };\n    }\n\n    protected _createGrid(opts: any, node: HTMLElement): any {\n        return new (this._prevPaging ? PagingGrid : Grid)(opts, node);\n    }\n}\nCommon.prototype._class += \" dgrid_Common\";\n\nexport interface Common {\n    noDataMessage(): string;\n    noDataMessage(_: string): this;\n    loadingMessage(): string;\n    loadingMessage(_: string): this;\n    pagination(): boolean;\n    pagination(_: boolean): this;\n    pageSize(): number;\n    pageSize(_: number): this;\n    sortable(): boolean;\n    sortable(_: boolean): this;\n    sortBy(): string;\n    sortBy(_: string): this;\n    sortByDescending(): boolean;\n    sortByDescending(_: boolean): this;\n    multiSelect(): boolean;\n    multiSelect(_: boolean): this;\n    renderHtml(): boolean;\n    renderHtml(_: boolean): this;\n}\n\nCommon.prototype.publish(\"noDataMessage\", \"...empty...\", \"string\", \"No Data Message\");\nCommon.prototype.publish(\"loadingMessage\", \"loading...\", \"string\", \"Loading Message\");\nCommon.prototype.publish(\"pagination\", false, \"boolean\", \"Enable paging\");\nCommon.prototype.publish(\"pageSize\", 25, \"number\", \"Page size\");\nCommon.prototype.publish(\"sortable\", false, \"boolean\", \"Enable sorting by column\");\nCommon.prototype.publish(\"sortBy\", null, \"set\", \"Default 'sort by' Column ID\", function (this: Common) { return this.columns(); }, { optional: true });\nCommon.prototype.publish(\"sortByDescending\", false, \"boolean\", \"Default 'sort by' descending\", undefined, { disable: self => !self.sortBy() });\nCommon.prototype.publish(\"multiSelect\", false, \"boolean\", \"Multiple Selection\");\nCommon.prototype.publish(\"renderHtml\", true, \"boolean\", \"Render HTML\");\n\n","﻿import { Palette, PropertyExt, Field, Utility } from \"@hpcc-js/common\";\nimport { hashSum } from \"@hpcc-js/util\";\nimport { format as d3Format } from \"d3-format\";\nimport { select as d3Select } from \"d3-selection\";\nimport { Common } from \"./Common.ts\";\nimport { CellFormatter, CellRenderer, ColumnType, RowType } from \"./RowFormatter.ts\";\n\n//  ColumnPalette ---\nexport class ColumnFormat extends PropertyExt {\n    _owner: Table;\n\n    constructor() {\n        super();\n    }\n\n    owner(): Table;\n    owner(_: Table): this;\n    owner(_?: Table): Table | this {\n        if (!arguments.length) return this._owner;\n        this._owner = _;\n        return this;\n    }\n\n    valid(): boolean {\n        return !!this.column();\n    }\n\n    formatterFunc(): CellFormatter | undefined {\n        const defaultFormatter = this._owner.formatterFunc();\n        if (this.valid() && this.format()) {\n            const numberFormatter = d3Format(this.format());\n\n            return function (this: ColumnType, cell: any, row: RowType): string {\n                if (typeof cell === \"number\")\n                    return numberFormatter(cell);\n                return defaultFormatter.call(this, cell, row);\n            };\n        }\n        return defaultFormatter;\n    }\n\n    renderCellFunc(): CellRenderer | undefined {\n        const defaultRenderCell = this._owner.renderCellFunc();\n        const defaultFormatter = this.formatterFunc();\n        if (this.valid() && this.paletteID()) {\n            const columns = this._owner.columns();\n            const palette = Palette.rainbow(this.paletteID());\n            const min = this.min();\n            const max = this.max();\n            const valueColIdx = this.valueColumn() ? columns.indexOf(this.valueColumn()) : undefined;\n            return function (this: ColumnType, row: RowType, cell: any, cellElement: HTMLElement): HTMLElement | void {\n                if (defaultRenderCell) {\n                    defaultRenderCell.call(this, row, cell, cellElement);\n                }\n                const value = valueColIdx ? row.__origRow[valueColIdx] : cell;\n                const background = palette(value, min, max);\n                const cellText: any = defaultFormatter.call(this, cell, row);\n                d3Select(cellElement)\n                    .style(\"background\", background)\n                    .style(\"color\", background && Palette.textColor(background))\n                    .text(cellText?.html ?? cellText ?? cell)\n                    ;\n            };\n        }\n        return defaultRenderCell;\n    }\n}\nColumnFormat.prototype._class += \" dgrid_Table.ColumnFormat\";\n\nexport interface ColumnFormat {\n    column(): string;\n    column(_: string): this;\n    width(): number;\n    width(_: number): this;\n    format(): string;\n    format(_: string): this;\n    paletteID(): string;\n    paletteID(_: string): this;\n    min(): number;\n    min(_: number): this;\n    max(): number;\n    max(_: number): this;\n    valueColumn(): string;\n    valueColumn(_: string): this;\n}\nColumnFormat.prototype.publish(\"column\", null, \"set\", \"Column\", function (this: ColumnFormat) { return this._owner.columns(); }, { optional: true });\nColumnFormat.prototype.publish(\"width\", null, \"number\", \"Width\", null, { optional: true });\nColumnFormat.prototype.publish(\"format\", null, \"string\", \"Format (d3-format)\", null, { optional: true });\nColumnFormat.prototype.publish(\"paletteID\", null, \"set\", \"Color palette for this widget\", [\"\", ...Palette.rainbow(\"default\").switch()], { optional: true });\nColumnFormat.prototype.publish(\"min\", 0, \"number\", \"Min Value\", null, { disable: (cf: ColumnFormat) => !cf.paletteID() });\nColumnFormat.prototype.publish(\"max\", 100, \"number\", \"Max Value\", null, { disable: (cf: ColumnFormat) => !cf.paletteID() });\nColumnFormat.prototype.publish(\"valueColumn\", null, \"set\", \"Column\", function (this: ColumnFormat) { return this._owner.columns(); }, { optional: true, disable: (cf: ColumnFormat) => !cf.paletteID() });\n\n//  Table ---\nexport class Table extends Common {\n    private _prevColsHash;\n    private _prevFieldsHash;\n    _colsRefresh = false;\n    _dataRefresh = false;\n\n    constructor() {\n        super();\n    }\n\n    fields(): Field[];\n    fields(_: Field[]): this;\n    fields(_?: Field[]): Field[] | this {\n        const retVal = super.fields.apply(this, arguments as any);\n        if (arguments.length) {\n            const hash = hashSum({ _ });\n            if (this._prevFieldsHash !== hash) {\n                this._prevFieldsHash = hash;\n                this._colsRefresh = true;\n            }\n        }\n        return retVal;\n    }\n\n    columns(): string[];\n    columns(_: string[], asDefault?: boolean): this;\n    columns(_?: string[], asDefault?: boolean): string[] | this {\n        const retVal = super.columns.apply(this, arguments as any);\n        if (arguments.length) {\n            const hash = hashSum({ _ });\n            if (this._prevColsHash !== hash) {\n                this._prevColsHash = hash;\n                this._colsRefresh = true;\n            }\n        }\n        return retVal;\n    }\n\n    data(): any;\n    data(_: any): this;\n    data(_?: any): any | this {\n        const retVal = super.data.apply(this, arguments as any);\n        if (arguments.length) {\n            this._dataRefresh = true;\n        }\n        return retVal;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n    }\n\n    guessWidth(columns, data) {\n        const sortablePadding = this.sortable() ? 12 : 0;\n        for (const column of columns) {\n            if (column.children) {\n                let sampleData = [];\n                for (let i = 0; i < Math.min(3, data.length); ++i) {\n                    sampleData = sampleData.concat(data[i][column.idx]);\n                }\n                this.guessWidth(column.children, sampleData);\n            } else {\n                column.width = data.reduce((prevVal: number, row) => {\n                    let cell = (\"\" + row[column.idx]).trim();\n                    if (this.renderHtml() && cell[0] === \"<\") {\n                        cell = Utility.removeHTMLFromString(cell);\n                    }\n                    return Math.max(prevVal, this.textSize(cell, this.columnWidthAutoFontName(), this.columnWidthAutoFontSize()).width);\n                }, this.textSize(\"\" + column.label, this.columnWidthAutoFontName(), this.columnWidthAutoFontSize(), true).width + sortablePadding) + 8; // +12 for the sort icon, +8 for the cell padding.\n            }\n        }\n    }\n\n    _prevHash;\n    update(domNode, element) {\n        super.update(domNode, element);\n        const hash = this.hashSum();\n        if (this._prevHash !== hash) {\n            this._prevHash = hash;\n            this._colsRefresh = true;\n        }\n        if (this._colsRefresh) {\n            this._columns = this._store.columns(this.sortable(), this.formatterFunc(), this.renderCellFunc());\n            switch (this.columnWidth()) {\n                case \"auto\":\n                    const sampleRows = this.data().filter((row, idx) => idx < this.columnWidthAutoSampleSize());\n                    this.guessWidth(this._columns, sampleRows);\n                    break;\n            }\n            const columns = this.columns();\n            for (const columnFormat of this.columnFormats()) {\n                if (columnFormat.valid()) {\n                    const colIdx = columns.indexOf(columnFormat.column());\n                    if (this._columns[colIdx]) {\n                        this._columns[colIdx].hidden = columnFormat.width() === 0;\n                        this._columns[colIdx].width = columnFormat.width() || this._columns[colIdx].width;\n                        this._columns[colIdx].formatter = columnFormat.formatterFunc();\n                        this._columns[colIdx].renderCell = columnFormat.renderCellFunc();\n                    }\n                }\n            }\n            this._applyColumnsToGrid();\n            this._colsRefresh = false;\n        }\n        if (this._colsRefresh || this._dataRefresh) {\n            if (this._colsRefresh) {\n                this._dgrid.refresh({});\n            } else {\n                this._dgrid.refresh();\n            }\n            this._colsRefresh = false;\n            this._dataRefresh = false;\n        }\n    }\n\n    exit(domNode, element) {\n        delete this._prevColsHash;\n        delete this._prevFieldsHash;\n        super.exit(domNode, element);\n    }\n\n    protected _applyColumnsToGrid() {\n        this._dgrid.set(\"columns\", this._columns.filter(col => !col.hidden));\n    }\n\n    //  Cell  ---\n    formatterFunc(): CellFormatter | undefined {\n        return function (this: ColumnType, cell: any, row: RowType): string | any {\n            switch (typeof cell) {\n                case \"string\":\n                    return {\n                        html: cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\").trim()\n                    };\n                case \"undefined\":\n                    return \"\";\n            }\n            return cell;\n        };\n    }\n\n    renderCellFunc(): CellRenderer | undefined {\n        return undefined;  //  Undefined will defualt to formatter  ---\n    }\n\n    //  Events  ---\n    click(row, col, sel) {\n    }\n\n    dblclickColResize(column: string, dgridColumn: any): void {\n        this.guessWidth([dgridColumn], this.data());\n        this._dgrid.resizeColumn(dgridColumn.id, dgridColumn.width);\n    }\n}\nTable.prototype._class += \" dgrid_Table\";\n\nexport interface Table {\n    columnWidth(): \"auto\" | \"none\";\n    columnWidth(_: \"auto\" | \"none\"): this;\n    columnWidthAutoSampleSize(): number;\n    columnWidthAutoSampleSize(_: number): this;\n    columnWidthAutoFontName(): string;\n    columnWidthAutoFontName(_: string): this;\n    columnWidthAutoFontSize(): number;\n    columnWidthAutoFontSize(_: number): this;\n    columnFormats(): ColumnFormat[];\n    columnFormats(_: ColumnFormat[]): this;\n}\n\nTable.prototype.publish(\"columnWidth\", \"auto\", \"set\", \"Default column width\", [\"auto\", \"none\"]);\nTable.prototype.publish(\"columnWidthAutoSampleSize\", 10, \"number\", \"Number of rows to sample for auto column width\");\nTable.prototype.publish(\"columnWidthAutoFontName\", \"Verdana\", \"string\", \"Font name for auto column width calculation\");\nTable.prototype.publish(\"columnWidthAutoFontSize\", 12, \"number\", \"Font size for auto column width calculation\");\nTable.prototype.publish(\"columnFormats\", [], \"propertyArray\", \"Source Columns\", null, { autoExpand: ColumnFormat });\n","import { ColumnSetGrid } from \"./dgrid-shim.ts\";\nimport { type ColumnType } from \"./RowFormatter.ts\";\nimport { Table } from \"./Table.ts\";\n\nexport class ColumnSetTable extends Table {\n\n    constructor() {\n        super();\n    }\n\n    protected _buildColumnSets(): ColumnType[][][] {\n        const sets = this.columnSets();\n        const colNames = this.columns();\n        const used = new Set<string>();\n        const result: ColumnType[][][] = [];\n\n        const lookup = (name: string): ColumnType | undefined => {\n            const idx = colNames.indexOf(name);\n            if (idx < 0) return undefined;\n            const col = this._columns[idx];\n            if (!col || col.hidden) return undefined;\n            return col;\n        };\n\n        if (sets && sets.length) {\n            for (const set of sets) {\n                const cols: ColumnType[] = [];\n                for (const name of set) {\n                    const col = lookup(name);\n                    if (col) {\n                        cols.push(col);\n                        used.add(name);\n                    }\n                }\n                if (cols.length) {\n                    result.push([cols]);\n                }\n            }\n        }\n\n        if (this.autoColumnSet()) {\n            const remaining: ColumnType[] = [];\n            for (const name of colNames) {\n                if (!used.has(name)) {\n                    const col = lookup(name);\n                    if (col) remaining.push(col);\n                }\n            }\n            if (remaining.length) {\n                result.push([remaining]);\n            }\n        }\n\n        if (!result.length && this._columns.length) {\n            result.push([this._columns.filter(c => !c.hidden)]);\n        }\n\n        return result;\n    }\n\n    protected _gridColumnsConfig(): object {\n        return { columnSets: this._buildColumnSets() };\n    }\n\n    protected _createGrid(opts: any, node: HTMLElement): any {\n        return new ColumnSetGrid({ ...opts }, node);\n    }\n\n    protected _applyColumnsToGrid() {\n        const sets = this._buildColumnSets();\n        this._dgrid.set(\"columnSets\", sets);\n        for (let i = 0; i < sets.length - 1; i++) {\n            const setWidth = sets[i][0].reduce((total: number, col: ColumnType) => total + (col.width ?? 0), 0);\n            if (setWidth > 0) {\n                (this._dgrid as any).styleColumnSet(i, `width: ${setWidth}px;`);\n            }\n        }\n        this._dgrid.resize();\n    }\n\n    dblclickColResize(column: string, dgridColumn: any): void {\n        this.guessWidth([dgridColumn], this.data());\n        this._dgrid.applyWidth(dgridColumn.id, dgridColumn.width + \"px\");\n        this._dgrid.resize();\n    }\n}\nColumnSetTable.prototype._class += \" dgrid_ColumnSetTable\";\n\nexport interface ColumnSetTable {\n    columnSets(): string[][];\n    columnSets(_: string[][]): this;\n    autoColumnSet(): boolean;\n    autoColumnSet(_: boolean): this;\n}\n\nColumnSetTable.prototype.publish(\"columnSets\", [], \"array\", \"Column sets - array of arrays of column names\");\nColumnSetTable.prototype.publish(\"autoColumnSet\", true, \"boolean\", \"Append columns not referenced by columnSets() into a trailing column-set\");\n","import type { DDL2 } from \"@hpcc-js/ddl-shim\";\nimport { Deferred, QueryResults } from \"./dgrid-shim.ts\";\nimport { ColumnType, RowFormatter } from \"./RowFormatter.ts\";\n\nexport interface IDatasource {\n    id: () => string;\n    hash: () => string;\n    label: () => string;\n\n    outFields: () => DDL2.IField[];\n    total: () => number;\n    fetch: (from: number, count: number) => Promise<ReadonlyArray<object>>;\n}\n\nexport class DatasourceCache implements IDatasource {\n    protected _datasource: IDatasource;\n    _prevHash: string;\n    _fetchCache: { [key: string]: Promise<ReadonlyArray<object>> } = {};\n\n    constructor(datasource: IDatasource) {\n        this._datasource = datasource;\n    }\n\n    validateCache() {\n        const hash = this.hash();\n        if (this._prevHash !== hash) {\n            this._prevHash = hash;\n            this._fetchCache = {};\n        }\n    }\n\n    id() { return this._datasource.id(); }\n    hash() { return this._datasource.hash(); }\n    label() { return this._datasource.label(); }\n\n    outFields() { return this._datasource.outFields(); }\n    total() { return this._datasource.total(); }\n    fetch(from: number, count: number): Promise<ReadonlyArray<object>> {\n        this.validateCache();\n        const cacheID = `${from}->${count}`;\n        let retVal = this._fetchCache[cacheID];\n        if (!retVal) {\n            retVal = this._datasource.fetch(from, count);\n            this._fetchCache[cacheID] = retVal;\n        }\n        return retVal;\n    }\n}\n\nexport class DatasourceStore {\n    _datasource: DatasourceCache;\n    _columnsIdx: { [key: string]: number } = {};\n    _columns;\n\n    private rowFormatter: RowFormatter;\n\n    constructor(datasource: IDatasource, renderHtml: boolean) {\n        this._datasource = new DatasourceCache(datasource);\n\n        this._columnsIdx = {};\n        this._columns = this.db2Columns(this._datasource.outFields()).map((column, idx) => {\n            this._columnsIdx[column.field] = idx;\n            return column;\n        });\n        this.rowFormatter = new RowFormatter(this._columns, renderHtml);\n    }\n\n    columns() {\n        return this._columns;\n    }\n\n    db2Columns(fields: DDL2.IField[], prefix = \"\"): ColumnType[] {\n        if (!fields) return [];\n        return fields.map((field, idx) => {\n            const column: ColumnType = {\n                field: prefix + field.id,\n                leafID: field.id,\n                label: field.id,\n                idx,\n                className: \"resultGridCell\",\n                sortable: true,\n                hidden: false,\n                isSet: false\n            };\n            if (field.type === \"dataset\") {\n                column.children = this.db2Columns(field.children, prefix + field.id + \"_\");\n            } else {\n                column.formatter = (cell, row) => {\n                    switch (typeof cell) {\n                        case \"string\":\n                            return cell.replace(/\\t/g, \"&nbsp;&nbsp;&nbsp;&nbsp;\");\n                    }\n                    return cell;\n                };\n            }\n            return column;\n        });\n    }\n\n    getIdentity(row) {\n        return row.__hpcc_id;\n    }\n\n    _request(start, end): Promise<{ totalLength: number, data: any[] }> {\n        if (!this._datasource) return Promise.resolve({ totalLength: 0, data: [] });\n        const retVal = this._datasource.fetch(start, end - start).then(response => {\n            return {\n                totalLength: this._datasource.total(),\n                data: response.map((row, idx) => {\n                    const formattedRow: any = this.rowFormatter.format(row);\n                    formattedRow.__hpcc_id = start + idx;\n                    formattedRow.__origRow = row;\n                    return formattedRow;\n                })\n            };\n        });\n        return retVal;\n    }\n\n    fetchRange(options): Promise<any[]> {\n        const retVal = new Deferred();\n        this._request(options.start, options.end).then(response => retVal.resolve(response));\n        return new QueryResults(retVal.then(response => response.data), {\n            totalLength: retVal.then(response => response.totalLength)\n        });\n    }\n}\n","﻿import { Widget } from \"@hpcc-js/common\";\nimport { Memory } from \"./dgrid-shim.ts\";\nimport { Common } from \"./Common.ts\";\nimport { DatasourceStore, IDatasource } from \"./DatasourceStore.ts\";\n\nexport class DatasourceTable extends Common {\n    _prevDatasource?: IDatasource;\n\n    constructor() {\n        super();\n    }\n\n    invalidate(): this {\n        delete this._prevDatasource;\n        return this;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n    }\n    render(callback?: (w: Widget) => void): this {\n        return super.render(w => {\n            if (this._prevDatasource !== this.datasource()) {\n                this._dgrid.set(\"collection\", new Memory());\n                this._dgrid.set(\"columns\", []);\n                this._prevDatasource = this.datasource();\n                if (this._prevDatasource) {\n                    const store = new DatasourceStore(this._prevDatasource, this.renderHtml());\n                    this._dgrid.set(\"columns\", store.columns());\n                    this._dgrid.set(\"collection\", store);\n                    if (callback) {\n                        callback(w);\n                    }\n                } else {\n                    if (callback) {\n                        callback(w);\n                    }\n                }\n            } else {\n                if (callback) {\n                    callback(w);\n                }\n            }\n        });\n    }\n\n    click(row, col, sel) {\n    }\n}\nDatasourceTable.prototype._class += \" dgrid_DatasourceTable\";\n\nexport interface DatasourceTable {\n    datasource(): IDatasource;\n    datasource(_: IDatasource): this;\n}\n\nDatasourceTable.prototype.publish(\"datasource\", null, \"object\", \"Datasource\");\n\n"],"mappings":"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"}