@vertexvis/viewer 0.20.0-canary.3 → 0.20.0-testing.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +13 -7
- package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -6
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js +5 -10
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +27 -7
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
- package/dist/components/scene-tree-table-layout.js +13 -7
- package/dist/components/scene-tree-table-layout.js.map +1 -1
- package/dist/components/vertex-scene-tree.js +2 -6
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/esm/vertex-scene-tree-search_3.entry.js +13 -7
- package/dist/esm/vertex-scene-tree-search_3.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +2 -6
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/types/components/scene-tree/scene-tree.d.ts +1 -1
- package/dist/types/components/scene-tree-table-layout/scene-tree-table-layout.d.ts +5 -0
- package/dist/types/components.d.ts +5 -1
- package/dist/viewer/p-41faa6d8.entry.js +5 -0
- package/dist/viewer/p-41faa6d8.entry.js.map +1 -0
- package/dist/viewer/p-f1be80c0.entry.js +5 -0
- package/dist/viewer/p-f1be80c0.entry.js.map +1 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/viewer/p-7833623d.entry.js +0 -5
- package/dist/viewer/p-7833623d.entry.js.map +0 -1
- package/dist/viewer/p-822b9796.entry.js +0 -5
- package/dist/viewer/p-822b9796.entry.js.map +0 -1
|
@@ -118,6 +118,7 @@ export class SceneTreeTableLayout {
|
|
|
118
118
|
this.stateMap.columnWidths.length ===
|
|
119
119
|
this.stateMap.columnWidthPercentages.length) {
|
|
120
120
|
this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map((w) => w * layoutWidth);
|
|
121
|
+
this.columnsResized.emit(this.stateMap.columnWidths);
|
|
121
122
|
}
|
|
122
123
|
};
|
|
123
124
|
this.recomputeColumnPercentages = () => {
|
|
@@ -132,7 +133,10 @@ export class SceneTreeTableLayout {
|
|
|
132
133
|
this.stateMap.columnWidths = this.columnElements.map((c) => { var _a; return (_a = c.initialWidth) !== null && _a !== void 0 ? _a : 100; });
|
|
133
134
|
const layoutWidth = this.getLayoutWidth();
|
|
134
135
|
if (layoutWidth != null) {
|
|
135
|
-
|
|
136
|
+
const columnWidthSum = this.stateMap.columnWidths.reduce((result, w) => result + w, 0);
|
|
137
|
+
const scaledColumnWidths = this.stateMap.columnWidths.map((w) => w * (layoutWidth / columnWidthSum));
|
|
138
|
+
this.stateMap.columnWidthPercentages = scaledColumnWidths.map((w) => w / layoutWidth);
|
|
139
|
+
this.stateMap.columnWidths = scaledColumnWidths;
|
|
136
140
|
}
|
|
137
141
|
};
|
|
138
142
|
this.updateColumnElements = () => {
|
|
@@ -276,12 +280,12 @@ export class SceneTreeTableLayout {
|
|
|
276
280
|
const current = Point.create(Math.floor(event.clientX), Math.floor(event.clientY));
|
|
277
281
|
if (this.lastDividerPointerPosition != null &&
|
|
278
282
|
this.resizingColumnIndex != null) {
|
|
283
|
+
const resizingIndex = this.resizingColumnIndex;
|
|
279
284
|
const diff = Point.subtract(this.lastDividerPointerPosition, current);
|
|
280
|
-
if (Math.abs(diff.x) >= 1 &&
|
|
281
|
-
this.
|
|
282
|
-
this.stateMap.columnWidths
|
|
283
|
-
|
|
284
|
-
this.stateMap.columnWidths[this.resizingColumnIndex + 1] += diff.x;
|
|
285
|
+
if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {
|
|
286
|
+
this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) => i === resizingIndex ? w - diff.x : w);
|
|
287
|
+
if (resizingIndex + 1 < this.stateMap.columnWidths.length) {
|
|
288
|
+
this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) => i === resizingIndex + 1 ? w + diff.x : w);
|
|
285
289
|
}
|
|
286
290
|
this.lastDividerPointerPosition = current;
|
|
287
291
|
this.computeColumnGridLayout();
|
|
@@ -296,6 +300,7 @@ export class SceneTreeTableLayout {
|
|
|
296
300
|
this.lastDividerPointerPosition = undefined;
|
|
297
301
|
this.resizingColumnIndex = undefined;
|
|
298
302
|
this.recomputeColumnPercentages();
|
|
303
|
+
this.recomputeColumnWidths();
|
|
299
304
|
window.removeEventListener('pointermove', this.handleDividerPointerMove);
|
|
300
305
|
window.removeEventListener('pointerup', this.handleDividerPointerUp);
|
|
301
306
|
};
|
|
@@ -343,11 +348,11 @@ export class SceneTreeTableLayout {
|
|
|
343
348
|
}
|
|
344
349
|
componentDidLoad() {
|
|
345
350
|
var _a, _b, _c;
|
|
351
|
+
this.computeInitialColumnWidths();
|
|
346
352
|
this.computeColumnGridLayout();
|
|
347
353
|
this.ensureDividerTemplateDefined();
|
|
348
354
|
this.computeCellHeight();
|
|
349
355
|
this.computeHeaderHeight();
|
|
350
|
-
this.computeInitialColumnWidths();
|
|
351
356
|
this.rebindHeaderData();
|
|
352
357
|
(_a = this.tableElement) === null || _a === void 0 ? void 0 : _a.addEventListener('scroll', this.handleScrollChanged, {
|
|
353
358
|
passive: true,
|
|
@@ -868,6 +873,21 @@ export class SceneTreeTableLayout {
|
|
|
868
873
|
"resolved": "void",
|
|
869
874
|
"references": {}
|
|
870
875
|
}
|
|
876
|
+
}, {
|
|
877
|
+
"method": "columnsResized",
|
|
878
|
+
"name": "columnsResized",
|
|
879
|
+
"bubbles": true,
|
|
880
|
+
"cancelable": true,
|
|
881
|
+
"composed": true,
|
|
882
|
+
"docs": {
|
|
883
|
+
"tags": [],
|
|
884
|
+
"text": "An event that is emitted when the columns of this `<vertex-scene-tree-table-layout>`\nare resized with an array containing the widths of the columns in pixels."
|
|
885
|
+
},
|
|
886
|
+
"complexType": {
|
|
887
|
+
"original": "number[]",
|
|
888
|
+
"resolved": "number[]",
|
|
889
|
+
"references": {}
|
|
890
|
+
}
|
|
871
891
|
}]; }
|
|
872
892
|
static get methods() { return {
|
|
873
893
|
"scrollToPosition": {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-tree-table-layout.js","sourceRoot":"","sources":["../../../src/components/scene-tree-table-layout/scene-tree-table-layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport {\n Binding,\n ElementPool,\n generateInstanceFromTemplate,\n InstancedTemplate,\n} from '@vertexvis/html-templates';\n\nimport { readDOM } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\nimport { getSceneTreeViewportHeight } from '../scene-tree/lib/dom';\nimport { isLoadedRow, LoadedRow, Row } from '../scene-tree/lib/row';\nimport { RowDataProvider } from '../scene-tree/types';\nimport {\n DomScrollToOptions,\n getSceneTreeTableOffsetTop,\n getSceneTreeTableViewportWidth,\n scrollToTop,\n} from './lib/dom';\nimport { SceneTreeCellHoverController } from './lib/hover-controller';\nimport { restartTimeout } from './lib/window';\n\ninterface StateMap {\n columnElementPools?: WeakMap<\n HTMLVertexSceneTreeTableColumnElement,\n ElementPool\n >;\n headerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerListeners?: Array<(event: PointerEvent) => void>;\n\n viewportRows: Row[];\n\n headerHeight?: number;\n columnWidths: number[];\n columnWidthPercentages: number[];\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-layout',\n styleUrl: 'scene-tree-table-layout.css',\n shadow: true,\n})\nexport class SceneTreeTableLayout {\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * @internal\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * @internal\n */\n @Prop()\n public rows: Row[] = [];\n\n /**\n * @internal\n */\n @Prop()\n public totalRows = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public rowHeight = 24;\n\n /**\n * The number of offscreen rows above and below the viewport to render. Having\n * a higher number reduces the chance of the browser not displaying a row\n * while scrolling.\n *\n * This prop will be automatically populated based on the `overScanCount` prop\n * specified in the parent `<vertex-scene-tree />` element.\n */\n @Prop()\n public overScanCount = 25;\n\n /**\n * A callback that is invoked immediately before a row is about to rendered.\n * This callback can return additional data that can be bound to in a\n * template.\n *\n * This prop will be automatically populated based on the `rowData` prop\n * specified in the parent `<vertex-scene-tree />` element.\n *\n * @example\n *\n * ```html\n * <script>\n * const table = document.querySelector('vertex-scene-tree-table');\n * table.rowData = (row) => {\n * return { func: () => console.log('row', row.node.name) };\n * }\n * </script>\n *\n * <vertex-scene-tree>\n * <vertex-scene-tree-table>\n * <vertex-scene-tree-table-column>\n * <template>\n * <button event:click=\"{{row.data.func}}\">Hi</button>\n * </template>\n * </vertex-scene-tree-table-column>\n * </vertex-scene-tree-table>\n * </vertex-scene-tree>\n * ```\n */\n @Prop()\n public rowData?: RowDataProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public scrollOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutHeight?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutWidth?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportStartIndex = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportEndIndex = 0;\n\n /**\n * @internal\n */\n @Event()\n public layoutRendered!: EventEmitter<void>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private columnGridLayout = '1fr';\n\n @State()\n private columnGridFixedLayout = '';\n\n @State()\n private isComputingCellHeight = true;\n\n @State()\n private lastDividerPointerPosition?: Point.Point;\n\n @State()\n private resizingColumnIndex?: number;\n\n @State()\n private isScrolling = false;\n\n @State()\n private scrollTimer: number | undefined;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State()\n private stateMap: StateMap = {\n viewportRows: [],\n columnWidths: [],\n columnWidthPercentages: [],\n };\n\n private lastStartIndex = 0;\n private resizeObserver?: ResizeObserver;\n private headerResizeObserver?: ResizeObserver;\n\n private tableElement?: HTMLDivElement;\n private headerElement?: HTMLDivElement;\n private columnElements: HTMLVertexSceneTreeTableColumnElement[] = [];\n\n private cellHoverController = new SceneTreeCellHoverController();\n\n public componentWillLoad(): void {\n this.updateColumnElements();\n this.createPools();\n\n this.headerResizeObserver = new ResizeObserver(() => {\n this.stateMap.headerHeight = undefined;\n this.computeHeaderHeight();\n this.updateLayoutPosition();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutPosition();\n this.clearLayoutHeight();\n this.clearLayoutWidth();\n this.recomputeColumnWidths();\n this.computeColumnGridLayout();\n });\n }\n\n public componentDidLoad(): void {\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.computeCellHeight();\n this.computeHeaderHeight();\n this.computeInitialColumnWidths();\n this.rebindHeaderData();\n\n this.tableElement?.addEventListener('scroll', this.handleScrollChanged, {\n passive: true,\n });\n\n if (this.headerElement != null) {\n this.headerResizeObserver?.observe(this.headerElement);\n }\n\n this.resizeObserver?.observe(this.hostEl);\n }\n\n public async componentWillRender(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n public componentDidRender(): void {\n this.layoutColumns();\n\n this.layoutRendered.emit();\n }\n\n public disconnectedCallback(): void {\n this.tableElement?.removeEventListener('scroll', this.handleScrollChanged);\n this.removeDividerDragListeners();\n this.headerResizeObserver?.disconnect();\n this.resizeObserver?.disconnect();\n this.stateMap.columnWidths = [];\n this.stateMap.columnWidthPercentages = [];\n }\n\n @Watch('rows')\n @Watch('totalRows')\n @Watch('rowHeight')\n protected async handleViewportRowsPropsChanged(): Promise<void> {\n if (this.isComputingCellHeight) {\n await this.computeCellHeight();\n }\n\n await this.computeAndUpdateViewportRows();\n }\n\n /**\n * Scrolls the table to the provided top value.\n *\n * @param top The position to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToPosition(\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n ): Promise<void> {\n if (this.tableElement != null) {\n scrollToTop(this.tableElement, top, options);\n }\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n class=\"header\"\n ref={(ref) => (this.headerElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n display: this.columnElements.length <= 1 ? 'none' : 'grid',\n }}\n >\n <slot name=\"header\" />\n </div>\n <div\n class=\"table\"\n ref={(ref) => (this.tableElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridLayout,\n }}\n >\n <slot\n onSlotchange={() => {\n this.ensureDividerTemplateDefined();\n this.updateColumnElements();\n this.recreateColumnPools();\n this.computeInitialColumnWidths();\n this.rebindHeaderData();\n this.computeColumnGridLayout();\n }}\n />\n </div>\n <div\n class=\"divider-overlay\"\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n }}\n >\n <slot name=\"divider\" />\n </div>\n {this.resizingColumnIndex != null && <div class=\"resize-overlay\" />}\n </Host>\n );\n }\n\n private computeViewportRows(): void {\n const viewportHeight = this.getLayoutHeight();\n if (viewportHeight != null) {\n const viewportCount = Math.ceil(viewportHeight / this.rowHeight);\n\n const viewportStartIndex = Math.floor(this.scrollOffset / this.rowHeight);\n const viewportEndIndex = viewportStartIndex + viewportCount;\n\n const startIndex = Math.max(0, viewportStartIndex - this.overScanCount);\n const endIndex = Math.min(\n this.totalRows - 1,\n viewportEndIndex + this.overScanCount\n );\n\n const rows = this.getViewportRows(startIndex, endIndex);\n\n this.viewportStartIndex = startIndex;\n this.viewportEndIndex = endIndex;\n this.stateMap.viewportRows = rows;\n }\n }\n\n private async computeAndUpdateViewportRows(): Promise<void> {\n this.computeViewportRows();\n\n if (this.controller?.isConnected && this.totalRows > 0) {\n await this.controller.updateActiveRowRange(\n this.viewportStartIndex,\n this.viewportEndIndex\n );\n }\n }\n\n private layoutColumns = (): void => {\n const visibleRowCount = this.viewportEndIndex - this.viewportStartIndex + 1;\n const diff = this.viewportStartIndex - this.lastStartIndex;\n this.lastStartIndex = this.viewportStartIndex;\n\n this.iterateColumns((col, pool, colIndex) => {\n pool.updateElements(visibleRowCount);\n\n if (diff > 0) {\n pool.swapHeadToTail(diff);\n } else {\n pool.swapTailToHead(-diff);\n }\n\n col.style.minHeight = `${this.rowHeight * this.totalRows}px`;\n\n const cellPaddingLeft =\n colIndex === 0\n ? (depth: number) => `calc(${depth} * 0.5rem)`\n : () => `0`;\n\n pool.iterateElements((el, binding, rowIndex) => {\n const row = this.stateMap.viewportRows[rowIndex];\n\n if (isLoadedRow(row)) {\n this.updateCell(row, el, binding, rowIndex, cellPaddingLeft);\n }\n });\n });\n };\n\n private updateCell = (\n row: LoadedRow,\n cell: HTMLElement,\n binding: Binding,\n rowIndex: number,\n cellPaddingLeft: (depth: number) => string\n ): void => {\n cell.style.position = 'absolute';\n cell.style.top = `${\n (this.viewportStartIndex + rowIndex) * this.rowHeight\n }px`;\n cell.style.boxSizing = 'border-box';\n cell.style.height = `${this.rowHeight}px`;\n cell.style.width = '100%';\n cell.style.paddingLeft = cellPaddingLeft(row.node.depth);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n (cell as any).tree = this.tree;\n (cell as any).node = row.node;\n (cell as any).hoverController = this.cellHoverController;\n (cell as any).isScrolling = this.isScrolling;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n binding.bind(row);\n };\n\n private updateLayoutPosition = (): void => {\n readDOM(() => {\n if (this.tableElement != null) {\n this.layoutOffset = getSceneTreeTableOffsetTop(this.tableElement);\n }\n });\n };\n\n private recomputeColumnWidths = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map(\n (w) => w * layoutWidth\n );\n }\n };\n\n private recomputeColumnPercentages = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidthPercentages = this.stateMap.columnWidths.map(\n (w) => w / layoutWidth\n );\n }\n };\n\n private computeInitialColumnWidths = (): void => {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n };\n\n private updateColumnElements = (): void => {\n this.columnElements = Array.from(\n this.hostEl.querySelectorAll('vertex-scene-tree-table-column')\n ) as Array<HTMLVertexSceneTreeTableColumnElement>;\n };\n\n private createPools(): void {\n if (this.stateMap.columnElementPools == null) {\n this.stateMap.columnElementPools = this.columnElements.reduce(\n (map, c) =>\n map.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n ),\n new WeakMap()\n );\n }\n }\n\n private recreateColumnPools(): void {\n this.columnElements.forEach((c) => {\n if (this.stateMap.columnElementPools?.get(c) == null) {\n this.stateMap.columnElementPools?.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n );\n } else {\n this.stateMap.columnElementPools\n .get(c)\n ?.updateElementFactory(() => this.createColumnCellInstance(c));\n }\n });\n }\n\n private iterateColumns(\n f: (\n column: HTMLVertexSceneTreeTableColumnElement,\n pool: ElementPool,\n index: number\n ) => void\n ): void {\n this.columnElements.forEach((column, i) => {\n const pool = this.stateMap.columnElementPools?.get(column);\n if (pool != null) {\n f(column, pool, i);\n } else {\n throw new Error('Cannot find pool for column');\n }\n });\n }\n\n private ensureDividerTemplateDefined(): void {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template == null) {\n const defaultDividerTemplate = document.createElement('template');\n defaultDividerTemplate.slot = 'divider';\n defaultDividerTemplate.innerHTML = `\n <vertex-scene-tree-table-resize-divider slot=\"divider\">\n </vertex-scene-tree-table-resize-divider>\n `;\n this.hostEl.appendChild(defaultDividerTemplate);\n }\n }\n\n private createHeaderInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> | undefined {\n const template = column.querySelector(\n 'template[slot=\"header\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n }\n }\n\n private createDividerInstance(): InstancedTemplate<HTMLElement> {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Table is missing divider template element');\n }\n }\n\n private createColumnCellInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> {\n const template = column.querySelector(\n 'template:not([slot=\"header\"])'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Column is missing cell template element');\n }\n }\n\n private computeCellHeight = async (): Promise<void> => {\n if (this.isComputingCellHeight && this.columnElements.length > 0) {\n const dummyData: LoadedRow = {\n index: 0,\n node: {\n id: { hex: '' },\n name: 'Dummy row',\n expanded: false,\n selected: false,\n visible: false,\n partiallyVisible: false,\n isLeaf: false,\n depth: 0,\n columnsList: [],\n filterHit: false,\n phantom: false,\n endItem: false,\n },\n metadata: {},\n data: {},\n };\n const { bindings, element } = this.createColumnCellInstance(\n this.columnElements[0]\n );\n bindings.bind(dummyData);\n element.style.visibility = 'hidden';\n\n this.columnElements[0]?.appendChild(element);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (typeof (element as any).componentOnReady === 'function') {\n await (element as any).componentOnReady();\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n let height = element.clientHeight;\n let attempts = 0;\n\n while (height === 0 && attempts < 10) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n attempts = attempts + 1;\n }\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n ''\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging'\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (\n Math.abs(diff.x) >= 1 &&\n this.isValidResize(diff, this.resizingColumnIndex)\n ) {\n this.stateMap.columnWidths[this.resizingColumnIndex] -= diff.x;\n\n if (this.resizingColumnIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths[this.resizingColumnIndex + 1] += diff.x;\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = (event: Event): void => {\n this.isScrolling = true;\n\n this.scrollTimer = restartTimeout(() => {\n this.isScrolling = false;\n }, this.scrollTimer);\n\n this.scrollOffset = (event.target as HTMLElement).scrollTop;\n this.computeAndUpdateViewportRows();\n };\n\n private getViewportRows(startIndex: number, endIndex: number): Row[] {\n const rows = this.rows.slice(startIndex, endIndex + 1);\n return rows.map((row) => (row != null ? this.populateRowData(row) : row));\n }\n\n private populateRowData(row: Row): Row {\n if (this.rowData != null && row != null) {\n const data = this.rowData?.(row) || {};\n return { ...row, data };\n } else {\n return row;\n }\n }\n\n private getLayoutHeight(): number | undefined {\n if (this.layoutHeight == null && this.tableElement != null) {\n this.layoutHeight = getSceneTreeViewportHeight(this.tableElement);\n }\n return this.layoutHeight;\n }\n\n private getLayoutWidth(): number | undefined {\n if (this.layoutWidth == null) {\n const computedWidth = getSceneTreeTableViewportWidth(this.hostEl);\n if (computedWidth > 0) {\n this.layoutWidth = computedWidth;\n }\n }\n return this.layoutWidth;\n }\n\n private clearLayoutHeight(): void {\n this.layoutHeight = undefined;\n }\n\n private clearLayoutWidth(): void {\n this.layoutWidth = undefined;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"scene-tree-table-layout.js","sourceRoot":"","sources":["../../../src/components/scene-tree-table-layout/scene-tree-table-layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport {\n Binding,\n ElementPool,\n generateInstanceFromTemplate,\n InstancedTemplate,\n} from '@vertexvis/html-templates';\n\nimport { readDOM } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\nimport { getSceneTreeViewportHeight } from '../scene-tree/lib/dom';\nimport { isLoadedRow, LoadedRow, Row } from '../scene-tree/lib/row';\nimport { RowDataProvider } from '../scene-tree/types';\nimport {\n DomScrollToOptions,\n getSceneTreeTableOffsetTop,\n getSceneTreeTableViewportWidth,\n scrollToTop,\n} from './lib/dom';\nimport { SceneTreeCellHoverController } from './lib/hover-controller';\nimport { restartTimeout } from './lib/window';\n\ninterface StateMap {\n columnElementPools?: WeakMap<\n HTMLVertexSceneTreeTableColumnElement,\n ElementPool\n >;\n headerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerListeners?: Array<(event: PointerEvent) => void>;\n\n viewportRows: Row[];\n\n headerHeight?: number;\n columnWidths: number[];\n columnWidthPercentages: number[];\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-layout',\n styleUrl: 'scene-tree-table-layout.css',\n shadow: true,\n})\nexport class SceneTreeTableLayout {\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * @internal\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * @internal\n */\n @Prop()\n public rows: Row[] = [];\n\n /**\n * @internal\n */\n @Prop()\n public totalRows = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public rowHeight = 24;\n\n /**\n * The number of offscreen rows above and below the viewport to render. Having\n * a higher number reduces the chance of the browser not displaying a row\n * while scrolling.\n *\n * This prop will be automatically populated based on the `overScanCount` prop\n * specified in the parent `<vertex-scene-tree />` element.\n */\n @Prop()\n public overScanCount = 25;\n\n /**\n * A callback that is invoked immediately before a row is about to rendered.\n * This callback can return additional data that can be bound to in a\n * template.\n *\n * This prop will be automatically populated based on the `rowData` prop\n * specified in the parent `<vertex-scene-tree />` element.\n *\n * @example\n *\n * ```html\n * <script>\n * const table = document.querySelector('vertex-scene-tree-table');\n * table.rowData = (row) => {\n * return { func: () => console.log('row', row.node.name) };\n * }\n * </script>\n *\n * <vertex-scene-tree>\n * <vertex-scene-tree-table>\n * <vertex-scene-tree-table-column>\n * <template>\n * <button event:click=\"{{row.data.func}}\">Hi</button>\n * </template>\n * </vertex-scene-tree-table-column>\n * </vertex-scene-tree-table>\n * </vertex-scene-tree>\n * ```\n */\n @Prop()\n public rowData?: RowDataProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public scrollOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutHeight?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutWidth?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportStartIndex = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportEndIndex = 0;\n\n /**\n * @internal\n */\n @Event()\n public layoutRendered!: EventEmitter<void>;\n\n /**\n * An event that is emitted when the columns of this `<vertex-scene-tree-table-layout>`\n * are resized with an array containing the widths of the columns in pixels.\n */\n @Event({ bubbles: true })\n public columnsResized!: EventEmitter<number[]>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private columnGridLayout = '1fr';\n\n @State()\n private columnGridFixedLayout = '';\n\n @State()\n private isComputingCellHeight = true;\n\n @State()\n private lastDividerPointerPosition?: Point.Point;\n\n @State()\n private resizingColumnIndex?: number;\n\n @State()\n private isScrolling = false;\n\n @State()\n private scrollTimer: number | undefined;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State()\n private stateMap: StateMap = {\n viewportRows: [],\n columnWidths: [],\n columnWidthPercentages: [],\n };\n\n private lastStartIndex = 0;\n private resizeObserver?: ResizeObserver;\n private headerResizeObserver?: ResizeObserver;\n\n private tableElement?: HTMLDivElement;\n private headerElement?: HTMLDivElement;\n private columnElements: HTMLVertexSceneTreeTableColumnElement[] = [];\n\n private cellHoverController = new SceneTreeCellHoverController();\n\n public componentWillLoad(): void {\n this.updateColumnElements();\n this.createPools();\n\n this.headerResizeObserver = new ResizeObserver(() => {\n this.stateMap.headerHeight = undefined;\n this.computeHeaderHeight();\n this.updateLayoutPosition();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutPosition();\n this.clearLayoutHeight();\n this.clearLayoutWidth();\n this.recomputeColumnWidths();\n this.computeColumnGridLayout();\n });\n }\n\n public componentDidLoad(): void {\n this.computeInitialColumnWidths();\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.computeCellHeight();\n this.computeHeaderHeight();\n this.rebindHeaderData();\n\n this.tableElement?.addEventListener('scroll', this.handleScrollChanged, {\n passive: true,\n });\n\n if (this.headerElement != null) {\n this.headerResizeObserver?.observe(this.headerElement);\n }\n\n this.resizeObserver?.observe(this.hostEl);\n }\n\n public async componentWillRender(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n public componentDidRender(): void {\n this.layoutColumns();\n\n this.layoutRendered.emit();\n }\n\n public disconnectedCallback(): void {\n this.tableElement?.removeEventListener('scroll', this.handleScrollChanged);\n this.removeDividerDragListeners();\n this.headerResizeObserver?.disconnect();\n this.resizeObserver?.disconnect();\n this.stateMap.columnWidths = [];\n this.stateMap.columnWidthPercentages = [];\n }\n\n @Watch('rows')\n @Watch('totalRows')\n @Watch('rowHeight')\n protected async handleViewportRowsPropsChanged(): Promise<void> {\n if (this.isComputingCellHeight) {\n await this.computeCellHeight();\n }\n\n await this.computeAndUpdateViewportRows();\n }\n\n /**\n * Scrolls the table to the provided top value.\n *\n * @param top The position to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToPosition(\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n ): Promise<void> {\n if (this.tableElement != null) {\n scrollToTop(this.tableElement, top, options);\n }\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n class=\"header\"\n ref={(ref) => (this.headerElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n display: this.columnElements.length <= 1 ? 'none' : 'grid',\n }}\n >\n <slot name=\"header\" />\n </div>\n <div\n class=\"table\"\n ref={(ref) => (this.tableElement = ref)}\n style={{\n gridTemplateColumns: this.columnGridLayout,\n }}\n >\n <slot\n onSlotchange={() => {\n this.ensureDividerTemplateDefined();\n this.updateColumnElements();\n this.recreateColumnPools();\n this.computeInitialColumnWidths();\n this.rebindHeaderData();\n this.computeColumnGridLayout();\n }}\n />\n </div>\n <div\n class=\"divider-overlay\"\n style={{\n gridTemplateColumns: this.columnGridFixedLayout,\n }}\n >\n <slot name=\"divider\" />\n </div>\n {this.resizingColumnIndex != null && <div class=\"resize-overlay\" />}\n </Host>\n );\n }\n\n private computeViewportRows(): void {\n const viewportHeight = this.getLayoutHeight();\n if (viewportHeight != null) {\n const viewportCount = Math.ceil(viewportHeight / this.rowHeight);\n\n const viewportStartIndex = Math.floor(this.scrollOffset / this.rowHeight);\n const viewportEndIndex = viewportStartIndex + viewportCount;\n\n const startIndex = Math.max(0, viewportStartIndex - this.overScanCount);\n const endIndex = Math.min(\n this.totalRows - 1,\n viewportEndIndex + this.overScanCount\n );\n\n const rows = this.getViewportRows(startIndex, endIndex);\n\n this.viewportStartIndex = startIndex;\n this.viewportEndIndex = endIndex;\n this.stateMap.viewportRows = rows;\n }\n }\n\n private async computeAndUpdateViewportRows(): Promise<void> {\n this.computeViewportRows();\n\n if (this.controller?.isConnected && this.totalRows > 0) {\n await this.controller.updateActiveRowRange(\n this.viewportStartIndex,\n this.viewportEndIndex\n );\n }\n }\n\n private layoutColumns = (): void => {\n const visibleRowCount = this.viewportEndIndex - this.viewportStartIndex + 1;\n const diff = this.viewportStartIndex - this.lastStartIndex;\n this.lastStartIndex = this.viewportStartIndex;\n\n this.iterateColumns((col, pool, colIndex) => {\n pool.updateElements(visibleRowCount);\n\n if (diff > 0) {\n pool.swapHeadToTail(diff);\n } else {\n pool.swapTailToHead(-diff);\n }\n\n col.style.minHeight = `${this.rowHeight * this.totalRows}px`;\n\n const cellPaddingLeft =\n colIndex === 0\n ? (depth: number) => `calc(${depth} * 0.5rem)`\n : () => `0`;\n\n pool.iterateElements((el, binding, rowIndex) => {\n const row = this.stateMap.viewportRows[rowIndex];\n\n if (isLoadedRow(row)) {\n this.updateCell(row, el, binding, rowIndex, cellPaddingLeft);\n }\n });\n });\n };\n\n private updateCell = (\n row: LoadedRow,\n cell: HTMLElement,\n binding: Binding,\n rowIndex: number,\n cellPaddingLeft: (depth: number) => string\n ): void => {\n cell.style.position = 'absolute';\n cell.style.top = `${\n (this.viewportStartIndex + rowIndex) * this.rowHeight\n }px`;\n cell.style.boxSizing = 'border-box';\n cell.style.height = `${this.rowHeight}px`;\n cell.style.width = '100%';\n cell.style.paddingLeft = cellPaddingLeft(row.node.depth);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n (cell as any).tree = this.tree;\n (cell as any).node = row.node;\n (cell as any).hoverController = this.cellHoverController;\n (cell as any).isScrolling = this.isScrolling;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n binding.bind(row);\n };\n\n private updateLayoutPosition = (): void => {\n readDOM(() => {\n if (this.tableElement != null) {\n this.layoutOffset = getSceneTreeTableOffsetTop(this.tableElement);\n }\n });\n };\n\n private recomputeColumnWidths = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map(\n (w) => w * layoutWidth\n );\n\n this.columnsResized.emit(this.stateMap.columnWidths);\n }\n };\n\n private recomputeColumnPercentages = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidthPercentages = this.stateMap.columnWidths.map(\n (w) => w / layoutWidth\n );\n }\n };\n\n private computeInitialColumnWidths = (): void => {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n const columnWidthSum = this.stateMap.columnWidths.reduce(\n (result, w) => result + w,\n 0\n );\n const scaledColumnWidths = this.stateMap.columnWidths.map(\n (w) => w * (layoutWidth / columnWidthSum)\n );\n\n this.stateMap.columnWidthPercentages = scaledColumnWidths.map(\n (w) => w / layoutWidth\n );\n this.stateMap.columnWidths = scaledColumnWidths;\n }\n };\n\n private updateColumnElements = (): void => {\n this.columnElements = Array.from(\n this.hostEl.querySelectorAll('vertex-scene-tree-table-column')\n ) as Array<HTMLVertexSceneTreeTableColumnElement>;\n };\n\n private createPools(): void {\n if (this.stateMap.columnElementPools == null) {\n this.stateMap.columnElementPools = this.columnElements.reduce(\n (map, c) =>\n map.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n ),\n new WeakMap()\n );\n }\n }\n\n private recreateColumnPools(): void {\n this.columnElements.forEach((c) => {\n if (this.stateMap.columnElementPools?.get(c) == null) {\n this.stateMap.columnElementPools?.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n );\n } else {\n this.stateMap.columnElementPools\n .get(c)\n ?.updateElementFactory(() => this.createColumnCellInstance(c));\n }\n });\n }\n\n private iterateColumns(\n f: (\n column: HTMLVertexSceneTreeTableColumnElement,\n pool: ElementPool,\n index: number\n ) => void\n ): void {\n this.columnElements.forEach((column, i) => {\n const pool = this.stateMap.columnElementPools?.get(column);\n if (pool != null) {\n f(column, pool, i);\n } else {\n throw new Error('Cannot find pool for column');\n }\n });\n }\n\n private ensureDividerTemplateDefined(): void {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template == null) {\n const defaultDividerTemplate = document.createElement('template');\n defaultDividerTemplate.slot = 'divider';\n defaultDividerTemplate.innerHTML = `\n <vertex-scene-tree-table-resize-divider slot=\"divider\">\n </vertex-scene-tree-table-resize-divider>\n `;\n this.hostEl.appendChild(defaultDividerTemplate);\n }\n }\n\n private createHeaderInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> | undefined {\n const template = column.querySelector(\n 'template[slot=\"header\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n }\n }\n\n private createDividerInstance(): InstancedTemplate<HTMLElement> {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Table is missing divider template element');\n }\n }\n\n private createColumnCellInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> {\n const template = column.querySelector(\n 'template:not([slot=\"header\"])'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Column is missing cell template element');\n }\n }\n\n private computeCellHeight = async (): Promise<void> => {\n if (this.isComputingCellHeight && this.columnElements.length > 0) {\n const dummyData: LoadedRow = {\n index: 0,\n node: {\n id: { hex: '' },\n name: 'Dummy row',\n expanded: false,\n selected: false,\n visible: false,\n partiallyVisible: false,\n isLeaf: false,\n depth: 0,\n columnsList: [],\n filterHit: false,\n phantom: false,\n endItem: false,\n },\n metadata: {},\n data: {},\n };\n const { bindings, element } = this.createColumnCellInstance(\n this.columnElements[0]\n );\n bindings.bind(dummyData);\n element.style.visibility = 'hidden';\n\n this.columnElements[0]?.appendChild(element);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n if (typeof (element as any).componentOnReady === 'function') {\n await (element as any).componentOnReady();\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n let height = element.clientHeight;\n let attempts = 0;\n\n while (height === 0 && attempts < 10) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n attempts = attempts + 1;\n }\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n ''\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging'\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const resizingIndex = this.resizingColumnIndex;\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex ? w - diff.x : w\n );\n\n if (resizingIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex + 1 ? w + diff.x : w\n );\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n this.recomputeColumnWidths();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = (event: Event): void => {\n this.isScrolling = true;\n\n this.scrollTimer = restartTimeout(() => {\n this.isScrolling = false;\n }, this.scrollTimer);\n\n this.scrollOffset = (event.target as HTMLElement).scrollTop;\n this.computeAndUpdateViewportRows();\n };\n\n private getViewportRows(startIndex: number, endIndex: number): Row[] {\n const rows = this.rows.slice(startIndex, endIndex + 1);\n return rows.map((row) => (row != null ? this.populateRowData(row) : row));\n }\n\n private populateRowData(row: Row): Row {\n if (this.rowData != null && row != null) {\n const data = this.rowData?.(row) || {};\n return { ...row, data };\n } else {\n return row;\n }\n }\n\n private getLayoutHeight(): number | undefined {\n if (this.layoutHeight == null && this.tableElement != null) {\n this.layoutHeight = getSceneTreeViewportHeight(this.tableElement);\n }\n return this.layoutHeight;\n }\n\n private getLayoutWidth(): number | undefined {\n if (this.layoutWidth == null) {\n const computedWidth = getSceneTreeTableViewportWidth(this.hostEl);\n if (computedWidth > 0) {\n this.layoutWidth = computedWidth;\n }\n }\n return this.layoutWidth;\n }\n\n private clearLayoutHeight(): void {\n this.layoutHeight = undefined;\n }\n\n private clearLayoutWidth(): void {\n this.layoutWidth = undefined;\n }\n}\n"]}
|
|
@@ -340,6 +340,7 @@ const SceneTreeTableLayout = /*@__PURE__*/ proxyCustomElement(class extends HTML
|
|
|
340
340
|
this.__registerHost();
|
|
341
341
|
this.__attachShadow();
|
|
342
342
|
this.layoutRendered = createEvent(this, "layoutRendered", 7);
|
|
343
|
+
this.columnsResized = createEvent(this, "columnsResized", 7);
|
|
343
344
|
/**
|
|
344
345
|
* @internal
|
|
345
346
|
*/
|
|
@@ -446,6 +447,7 @@ const SceneTreeTableLayout = /*@__PURE__*/ proxyCustomElement(class extends HTML
|
|
|
446
447
|
this.stateMap.columnWidths.length ===
|
|
447
448
|
this.stateMap.columnWidthPercentages.length) {
|
|
448
449
|
this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map((w) => w * layoutWidth);
|
|
450
|
+
this.columnsResized.emit(this.stateMap.columnWidths);
|
|
449
451
|
}
|
|
450
452
|
};
|
|
451
453
|
this.recomputeColumnPercentages = () => {
|
|
@@ -460,7 +462,10 @@ const SceneTreeTableLayout = /*@__PURE__*/ proxyCustomElement(class extends HTML
|
|
|
460
462
|
this.stateMap.columnWidths = this.columnElements.map((c) => { var _a; return (_a = c.initialWidth) !== null && _a !== void 0 ? _a : 100; });
|
|
461
463
|
const layoutWidth = this.getLayoutWidth();
|
|
462
464
|
if (layoutWidth != null) {
|
|
463
|
-
|
|
465
|
+
const columnWidthSum = this.stateMap.columnWidths.reduce((result, w) => result + w, 0);
|
|
466
|
+
const scaledColumnWidths = this.stateMap.columnWidths.map((w) => w * (layoutWidth / columnWidthSum));
|
|
467
|
+
this.stateMap.columnWidthPercentages = scaledColumnWidths.map((w) => w / layoutWidth);
|
|
468
|
+
this.stateMap.columnWidths = scaledColumnWidths;
|
|
464
469
|
}
|
|
465
470
|
};
|
|
466
471
|
this.updateColumnElements = () => {
|
|
@@ -604,12 +609,12 @@ const SceneTreeTableLayout = /*@__PURE__*/ proxyCustomElement(class extends HTML
|
|
|
604
609
|
const current = point.create(Math.floor(event.clientX), Math.floor(event.clientY));
|
|
605
610
|
if (this.lastDividerPointerPosition != null &&
|
|
606
611
|
this.resizingColumnIndex != null) {
|
|
612
|
+
const resizingIndex = this.resizingColumnIndex;
|
|
607
613
|
const diff = point.subtract(this.lastDividerPointerPosition, current);
|
|
608
|
-
if (Math.abs(diff.x) >= 1 &&
|
|
609
|
-
this.
|
|
610
|
-
this.stateMap.columnWidths
|
|
611
|
-
|
|
612
|
-
this.stateMap.columnWidths[this.resizingColumnIndex + 1] += diff.x;
|
|
614
|
+
if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {
|
|
615
|
+
this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) => i === resizingIndex ? w - diff.x : w);
|
|
616
|
+
if (resizingIndex + 1 < this.stateMap.columnWidths.length) {
|
|
617
|
+
this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) => i === resizingIndex + 1 ? w + diff.x : w);
|
|
613
618
|
}
|
|
614
619
|
this.lastDividerPointerPosition = current;
|
|
615
620
|
this.computeColumnGridLayout();
|
|
@@ -624,6 +629,7 @@ const SceneTreeTableLayout = /*@__PURE__*/ proxyCustomElement(class extends HTML
|
|
|
624
629
|
this.lastDividerPointerPosition = undefined;
|
|
625
630
|
this.resizingColumnIndex = undefined;
|
|
626
631
|
this.recomputeColumnPercentages();
|
|
632
|
+
this.recomputeColumnWidths();
|
|
627
633
|
window.removeEventListener('pointermove', this.handleDividerPointerMove);
|
|
628
634
|
window.removeEventListener('pointerup', this.handleDividerPointerUp);
|
|
629
635
|
};
|
|
@@ -671,11 +677,11 @@ const SceneTreeTableLayout = /*@__PURE__*/ proxyCustomElement(class extends HTML
|
|
|
671
677
|
}
|
|
672
678
|
componentDidLoad() {
|
|
673
679
|
var _a, _b, _c;
|
|
680
|
+
this.computeInitialColumnWidths();
|
|
674
681
|
this.computeColumnGridLayout();
|
|
675
682
|
this.ensureDividerTemplateDefined();
|
|
676
683
|
this.computeCellHeight();
|
|
677
684
|
this.computeHeaderHeight();
|
|
678
|
-
this.computeInitialColumnWidths();
|
|
679
685
|
this.rebindHeaderData();
|
|
680
686
|
(_a = this.tableElement) === null || _a === void 0 ? void 0 : _a.addEventListener('scroll', this.handleScrollChanged, {
|
|
681
687
|
passive: true,
|