@vertexvis/viewer 0.17.4 → 0.17.5-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.
Files changed (63) hide show
  1. package/dist/cjs/{controller-029b37d6.js → controller-4e9ef328.js} +64 -33
  2. package/dist/cjs/controller-4e9ef328.js.map +1 -0
  3. package/dist/cjs/index.cjs.js +1 -1
  4. package/dist/cjs/loader.cjs.js +1 -1
  5. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +3 -1
  6. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js.map +1 -1
  7. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +3 -1
  8. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  9. package/dist/cjs/vertex-scene-tree.cjs.entry.js +7 -3
  10. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  11. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +1 -1
  12. package/dist/cjs/viewer.cjs.js +1 -1
  13. package/dist/collection/components/scene-tree/lib/controller.js +63 -32
  14. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  15. package/dist/collection/components/scene-tree/scene-tree.css +2 -1
  16. package/dist/collection/components/scene-tree/scene-tree.js +7 -0
  17. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  18. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +3 -1
  19. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  20. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +3 -1
  21. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  22. package/dist/collection/testing/sceneTree.js +19 -2
  23. package/dist/collection/testing/sceneTree.js.map +1 -1
  24. package/dist/custom-elements/index.js +76 -37
  25. package/dist/custom-elements/index.js.map +1 -1
  26. package/dist/esm/{controller-6afbaeb0.js → controller-53f803d9.js} +64 -33
  27. package/dist/esm/controller-53f803d9.js.map +1 -0
  28. package/dist/esm/index.js +1 -1
  29. package/dist/esm/index.mjs +1 -1
  30. package/dist/esm/loader.js +1 -1
  31. package/dist/esm/loader.mjs +1 -1
  32. package/dist/esm/vertex-scene-tree-search_3.entry.js +3 -1
  33. package/dist/esm/vertex-scene-tree-search_3.entry.js.map +1 -1
  34. package/dist/esm/vertex-scene-tree-table-cell.entry.js +3 -1
  35. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  36. package/dist/esm/vertex-scene-tree.entry.js +7 -3
  37. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  38. package/dist/esm/vertex-viewer-pin-group.entry.js +1 -1
  39. package/dist/esm/viewer.js +1 -1
  40. package/dist/types/components/scene-tree/lib/controller.d.ts +5 -0
  41. package/dist/types/components/scene-tree/scene-tree.d.ts +1 -0
  42. package/dist/types/testing/sceneTree.d.ts +5 -2
  43. package/dist/viewer/index.esm.js +1 -1
  44. package/dist/viewer/{p-4348176f.entry.js → p-073d15e9.entry.js} +2 -2
  45. package/dist/viewer/p-073d15e9.entry.js.map +1 -0
  46. package/dist/viewer/{p-d3009499.entry.js → p-1815d19b.entry.js} +2 -2
  47. package/dist/viewer/{p-f40b8476.entry.js → p-59f38a92.entry.js} +2 -2
  48. package/dist/viewer/p-59f38a92.entry.js.map +1 -0
  49. package/dist/viewer/{p-32f18b4c.js → p-921ec41b.js} +2 -2
  50. package/dist/viewer/p-921ec41b.js.map +1 -0
  51. package/dist/viewer/p-9b8dae4a.entry.js +5 -0
  52. package/dist/viewer/p-9b8dae4a.entry.js.map +1 -0
  53. package/dist/viewer/viewer.esm.js +1 -1
  54. package/dist/viewer/viewer.esm.js.map +1 -1
  55. package/package.json +7 -7
  56. package/dist/cjs/controller-029b37d6.js.map +0 -1
  57. package/dist/esm/controller-6afbaeb0.js.map +0 -1
  58. package/dist/viewer/p-32f18b4c.js.map +0 -1
  59. package/dist/viewer/p-4348176f.entry.js.map +0 -1
  60. package/dist/viewer/p-a4d67e65.entry.js +0 -5
  61. package/dist/viewer/p-a4d67e65.entry.js.map +0 -1
  62. package/dist/viewer/p-f40b8476.entry.js.map +0 -1
  63. /package/dist/viewer/{p-d3009499.entry.js.map → p-1815d19b.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"file":"vertex-scene-tree-search.vertex-scene-tree-table-layout.vertex-scene-tree-toolbar.entry.js","mappings":"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","names":["classNames","Point"],"sources":["./src/components/scene-tree-search/scene-tree-search.css?tag=vertex-scene-tree-search&encapsulation=shadow","./src/components/scene-tree-search/scene-tree-search.tsx","../html-templates/dist/bundle.esm.js","./src/components/scene-tree-table-layout/lib/dom.ts","./src/components/scene-tree-table-layout/lib/hover-controller.ts","./src/components/scene-tree-table-layout/lib/window.ts","./src/components/scene-tree-table-layout/scene-tree-table-layout.css?tag=vertex-scene-tree-table-layout&encapsulation=shadow","./src/components/scene-tree-table-layout/scene-tree-table-layout.tsx","./src/components/scene-tree-toolbar/scene-tree-toolbar.css?tag=vertex-scene-tree-toolbar&encapsulation=shadow","./src/components/scene-tree-toolbar/scene-tree-toolbar.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n /**\n * @prop --scene-tree-search-search-icon-offset: A CSS length that specifies\n * the horizontal offset of the search icon\n */\n --scene-tree-search-search-icon-offset: 8px;\n\n /**\n * @prop --scene-tree-search-clear-button-offset: A CSS length that specifies\n * the horizontal offset of the clear button.\n */\n --scene-tree-search-clear-button-offset: 8px;\n\n /**\n * @prop --scene-tree-search-input-padding: A CSS padding value that specifies\n * horizontal and vertical lengths of the internal text input.\n */\n --scene-tree-search-input-padding: 0.5rem 32px;\n\n /**\n * @prop --scene-tree-search-input-border: A CSS border value that specifies\n * the border of the internal text input.\n */\n --scene-tree-search-input-border: none;\n\n /**\n * @prop --scene-tree-search-input-border-radius: A CSS length that specifies\n * the radius of the internal text input.\n */\n --scene-tree-search-input-border-radius: 0.25rem;\n\n /**\n * @prop --scene-tree-search-input-background: A CSS background that specifies\n * the background color or image of the internal text input.\n */\n --scene-tree-search-input-background: none;\n\n /**\n * @prop --scene-tree-search-focused-input-background: A CSS background value\n * that specifies the background of the internal text input when focused.\n */\n --scene-tree-search-focused-input-background: var(--neutral-200);\n\n /**\n * @prop --scene-tree-search-focused-input-outline: A CSS outline value that\n * specifies the outline of the internal text input when focused.\n */\n --scene-tree-search-focused-input-outline: none;\n\n display: block;\n width: 100%;\n font-size: 0.875rem;\n}\n\n.root {\n width: 100%;\n position: relative;\n}\n\n.input {\n background: var(--scene-tree-search-input-background);\n border: var(--scene-tree-search-input-border);\n border-radius: var(--scene-tree-search-input-border-radius);\n box-sizing: border-box;\n font-size: inherit;\n padding: var(--scene-tree-search-input-padding);\n outline: none;\n width: 100%;\n}\n\n.input.background {\n background: var(--scene-tree-search-focused-input-background);\n outline: var(--scene-tree-search-focused-input-outline);\n}\n\n.overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n}\n\n.overlay-clear {\n display: none;\n right: var(--scene-tree-search-clear-button-offset);\n}\n\n.overlay-clear.show {\n display: flex;\n}\n\n.icon {\n color: var(--neutral-700);\n}\n\n.icon-search {\n position: absolute;\n left: var(--scene-tree-search-search-icon-offset);\n pointer-events: none;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: initial;\n cursor: pointer;\n}\n.clear-btn:hover {\n color: var(--neutral-800);\n}\n.clear-btn:disabled {\n pointer-events: none;\n opacity: 0.5;\n}","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { debounceEvent } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\n\n/**\n * @slot search-icon - A slot that replaces the component's default search icon.\n * @slot clear-icon - A slot that replaces the component's default clear icon.\n */\n@Component({\n tag: 'vertex-scene-tree-search',\n styleUrl: 'scene-tree-search.css',\n shadow: true,\n})\nexport class SceneTreeSearch {\n /**\n * Specifies the delay, in milliseconds, to emit `search` events after user\n * input.\n */\n @Prop()\n public debounce = 350;\n\n /**\n * If `true`, disables user interaction of the component.\n */\n @Prop()\n public disabled = false;\n\n /**\n * Placeholder text if `value` is empty.\n */\n @Prop()\n public placeholder?: string = undefined;\n\n /**\n * The scene tree controller\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * An event that is emitted when a user has inputted or cleared the search\n * term. The event may be delayed according to the current `debounce` value.\n */\n @Event({ bubbles: true })\n public search!: EventEmitter<string>;\n\n @State()\n private focused = false;\n\n @State()\n private isSearching = false;\n\n private inputEl?: HTMLInputElement;\n private onStateChangeDisposable?: Disposable;\n\n /**\n * Gives focus to the the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.inputEl?.focus();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n public controllerChanged(controller: SceneTreeController): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.handleDebounceChanged();\n\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.onStateChangeDisposable?.dispose();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"root\">\n <div class=\"overlay icon icon-search\">\n <slot name=\"search-icon\">\n {this.isSearching ? (\n <vertex-viewer-spinner slot=\"search-icon\" size=\"xs\" />\n ) : (\n <vertex-viewer-icon name=\"search\" size=\"sm\" />\n )}\n </slot>\n </div>\n\n <input\n class={classNames('input', {\n background: this.focused || this.value.length > 0,\n })}\n type=\"text\"\n ref={(ref) => (this.inputEl = ref)}\n placeholder={this.placeholder}\n disabled={this.disabled}\n value={this.value}\n onInput={this.handleTextInput}\n onFocus={this.handleTextFocus}\n onBlur={this.handleTextBlur}\n />\n\n <div\n class={classNames('overlay overlay-clear', {\n show: this.value.length > 0,\n })}\n >\n <button\n class=\"clear-btn icon\"\n tabIndex={-1}\n onMouseDown={this.handleClear}\n disabled={this.disabled}\n >\n <slot name=\"clear-icon\">\n <vertex-viewer-icon name=\"close-circle\" size=\"sm\" />\n </slot>\n </button>\n </div>\n </div>\n </Host>\n );\n }\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.search.emit(this.value);\n };\n\n private handleTextFocus = (): void => {\n this.focused = true;\n };\n\n private handleTextBlur = (): void => {\n this.focused = false;\n };\n\n private handleClear = (event: MouseEvent): void => {\n event.preventDefault();\n\n this.value = '';\n this.search.emit(this.value);\n this.setFocus();\n };\n\n private handleDebounceChanged(): void {\n this.search = debounceEvent(this.search, this.debounce);\n }\n\n private setupController(): void {\n this.onStateChangeDisposable?.dispose();\n\n this.onStateChangeDisposable = this.controller?.onStateChange.on(\n (state) => {\n this.isSearching = state.isSearching;\n }\n );\n }\n}\n","import { __assign } from 'tslib';\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\n/**\n * Lower case as a function.\n */\nfunction lowerCase(str) {\n return str.toLowerCase();\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nfunction noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n\nfunction pascalCaseTransform(input, index) {\n var firstChar = input.charAt(0);\n var lowerChars = input.substr(1).toLowerCase();\n if (index > 0 && firstChar >= \"0\" && firstChar <= \"9\") {\n return \"_\" + firstChar + lowerChars;\n }\n return \"\" + firstChar.toUpperCase() + lowerChars;\n}\nfunction pascalCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \"\", transform: pascalCaseTransform }, options));\n}\n\nfunction camelCaseTransform(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascalCaseTransform(input, index);\n}\nfunction camelCase(input, options) {\n if (options === void 0) { options = {}; }\n return pascalCase(input, __assign({ transform: camelCaseTransform }, options));\n}\n\nconst bindingRegEx = /{{(.+)}}/;\r\nclass CollectionBinding {\r\n constructor(bindings) {\r\n this.bindings = bindings;\r\n }\r\n bind(data) {\r\n this.bindings.forEach((binding) => binding.bind(data));\r\n }\r\n}\r\nclass NodeBinding {\r\n constructor(node, expr) {\r\n this.node = node;\r\n this.expr = expr;\r\n }\r\n}\r\nclass TextNodeBinding extends NodeBinding {\r\n constructor(node, expr) {\r\n super(node, expr);\r\n }\r\n bind(data) {\r\n const newContent = replaceBindingString(data, this.expr);\r\n if (newContent !== this.node.textContent) {\r\n this.node.textContent = newContent;\r\n }\r\n }\r\n}\r\nclass AttributeBinding extends NodeBinding {\r\n constructor(node, expr, attr) {\r\n super(node, expr);\r\n this.attr = attr;\r\n }\r\n bind(data) {\r\n const newValue = replaceBindingString(data, this.expr);\r\n const oldValue = this.node.getAttribute(this.attr);\r\n if (oldValue !== newValue) {\r\n this.node.setAttribute(this.attr, newValue);\r\n }\r\n }\r\n}\r\nclass PropertyBinding extends NodeBinding {\r\n constructor(node, expr, prop) {\r\n super(node, expr);\r\n this.prop = prop;\r\n }\r\n bind(data) {\r\n const newValue = replaceBinding(data, this.expr);\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n const oldValue = this.node[this.prop];\r\n if (oldValue !== newValue) {\r\n this.node[this.prop] = newValue;\r\n }\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n }\r\n}\r\nclass EventHandlerBinding extends NodeBinding {\r\n constructor(node, expr, eventName) {\r\n super(node, expr);\r\n this.eventName = eventName;\r\n }\r\n bind(data) {\r\n var _a;\r\n const path = extractBindingPath(this.expr);\r\n if (path != null) {\r\n (_a = this.disposable) === null || _a === void 0 ? void 0 : _a.dispose();\r\n const listener = getBindableValue(data, path, true);\r\n this.node.addEventListener(this.eventName, listener);\r\n this.disposable = {\r\n dispose: () => {\r\n this.node.removeEventListener(this.eventName, listener);\r\n },\r\n };\r\n }\r\n }\r\n}\r\nfunction generateBindings(node) {\r\n const bindings = [];\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const el = node;\r\n const bindableAttributes = getBindableAttributes(el);\r\n bindableAttributes.forEach((attr) => {\r\n if (attr.name.startsWith('event:')) {\r\n const eventName = camelCase(attr.name.replace('event:', ''));\r\n bindings.push(new EventHandlerBinding(el, attr.value, eventName));\r\n }\r\n else if (attr.name.startsWith('attr:')) {\r\n bindings.push(new AttributeBinding(el, attr.value, attr.name.replace('attr:', '')));\r\n }\r\n else if (attr.name.startsWith('prop:')) {\r\n const propName = camelCase(attr.name.replace('prop:', ''));\r\n bindings.push(new PropertyBinding(el, attr.value, propName));\r\n }\r\n });\r\n }\r\n else if (node.nodeType === Node.TEXT_NODE &&\r\n node.textContent != null &&\r\n bindingRegEx.test(node.textContent)) {\r\n bindings.push(new TextNodeBinding(node, node.textContent));\r\n }\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n bindings.push(...generateBindings(node.childNodes[i]));\r\n }\r\n return bindings;\r\n}\r\nfunction getBindableAttributes(element) {\r\n return Array.from(element.attributes).filter((attr) => bindingRegEx.test(attr.value));\r\n}\r\nfunction extractBindingPath(expr) {\r\n const result = bindingRegEx.exec(expr);\r\n return result != null ? result[1] : undefined;\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction replaceBindingString(data, expr) {\r\n const path = extractBindingPath(expr);\r\n if (path != null) {\r\n const value = getBindableValue(data, path, true);\r\n return expr.replace(`{{${path}}}`, value === null || value === void 0 ? void 0 : value.toString());\r\n }\r\n else {\r\n return expr;\r\n }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction replaceBinding(data, expr) {\r\n const path = extractBindingPath(expr);\r\n if (path != null) {\r\n const value = getBindableValue(data, path, true);\r\n return value;\r\n }\r\n else {\r\n return expr;\r\n }\r\n}\r\nfunction getBindableValue(\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndata, path, isHead = false\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n) {\r\n const [head, ...tail] = path.split('.');\r\n if (isHead && tail.length === 0) {\r\n return data;\r\n }\r\n else if (isHead && tail.length > 0) {\r\n return getBindableValue(data, tail.join('.'), false);\r\n }\r\n else {\r\n const value = data[head];\r\n if (tail.length > 0) {\r\n return getBindableValue(value, tail.join('.'), false);\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n}\n\nclass ElementPool {\r\n constructor(container, elementFactory) {\r\n this.container = container;\r\n this.elementFactory = elementFactory;\r\n this.instanceMap = new Map();\r\n this.elements = [];\r\n }\r\n swapHeadToTail(count) {\r\n const sliced = this.elements.splice(0, count);\r\n this.elements.splice(this.elements.length, 0, ...sliced);\r\n return this.elements.concat();\r\n }\r\n swapTailToHead(count) {\r\n const sliced = this.elements.splice(-count, count);\r\n this.elements.splice(0, 0, ...sliced);\r\n return this.elements.concat();\r\n }\r\n updateElements(count) {\r\n const diff = count - this.elements.length;\r\n if (diff > 0) {\r\n for (let i = 0; i < diff; i++) {\r\n this.createElement();\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < -diff; i++) {\r\n this.deleteElement();\r\n }\r\n }\r\n return this.elements.concat();\r\n }\r\n updateData(f) {\r\n this.elements.forEach((el, i) => {\r\n const instance = this.instanceMap.get(el);\r\n const data = f(i);\r\n instance === null || instance === void 0 ? void 0 : instance.bindings.bind(data);\r\n });\r\n }\r\n updateElementFactory(elementFactory) {\r\n this.elementFactory = elementFactory;\r\n this.updateElements(0);\r\n }\r\n iterateElements(f) {\r\n this.elements.forEach((el, i) => {\r\n const instance = this.instanceMap.get(el);\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n f(el, instance.bindings, i);\r\n });\r\n }\r\n createElement() {\r\n const instance = this.elementFactory();\r\n this.elements.push(instance.element);\r\n this.instanceMap.set(instance.element, instance);\r\n this.container.append(instance.element);\r\n return instance;\r\n }\r\n deleteElement() {\r\n const element = this.elements.pop();\r\n if (element != null) {\r\n this.instanceMap.delete(element);\r\n element.remove();\r\n }\r\n }\r\n}\n\nfunction append(container, element, data) {\r\n const bindings = new CollectionBinding(generateBindings(element));\r\n bindings.bind(data);\r\n container.appendChild(element);\r\n const created = container.lastElementChild;\r\n if (created != null) {\r\n return { element: created, bindings };\r\n }\r\n else {\r\n throw new Error('Failed to append element');\r\n }\r\n}\r\nfunction generateInstanceFromTemplate(template) {\r\n const fragment = template.content.cloneNode(true);\r\n const element = fragment.firstElementChild;\r\n const bindings = new CollectionBinding(generateBindings(fragment));\r\n return { element, bindings };\r\n}\n\nexport { AttributeBinding, CollectionBinding, ElementPool, EventHandlerBinding, NodeBinding, PropertyBinding, TextNodeBinding, append, generateBindings, generateInstanceFromTemplate };\n//# sourceMappingURL=bundle.esm.js.map\n","export type DomScrollToOptions = ScrollToOptions;\n\nexport function getSceneTreeTableOffsetTop(el: HTMLElement): number {\n return el.getBoundingClientRect().top ?? 0;\n}\n\nexport function getSceneTreeTableViewportWidth(el: HTMLElement): number {\n return el.clientWidth;\n}\n\nexport function scrollToTop(\n el: HTMLElement,\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n): void {\n el.scrollTo({ top, ...options });\n}\n","import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nexport class SceneTreeCellHoverController {\n public onStateChange = new EventDispatcher<string | undefined>();\n\n public setHovered(id?: string): void {\n this.onStateChange.emit(id);\n }\n\n public stateChanged(listener: Listener<string | undefined>): Disposable {\n return this.onStateChange.on(listener);\n }\n}\n","export function restartTimeout(\n fn: VoidFunction,\n existingTimeout?: number,\n delay = 200\n): number {\n window.clearTimeout(existingTimeout);\n return window.setTimeout(fn, delay);\n}\n",":host {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n font-size: 0.825rem;\n\n /**\n * @prop --scene-tree-table-row-padding: CSS lengths that specifies the amount of\n * padding between the row's border and content.\n */\n --scene-tree-table-row-padding: 2px 0px;\n\n /**\n * @prop --scene-tree-table-column-gap: CSS length that specifies the amount of\n * padding between columns in the table.\n */\n --scene-tree-table-column-gap: 0.5rem;\n\n /**\n * @prop --scene-tree-table-column-resize-cursor: A CSS cursor value that will\n * be displayed when resizing a column. Defaults to `col-resize`.\n */\n --scene-tree-table-column-resize-cursor: col-resize;\n}\n\n.header {\n position: relative;\n display: grid;\n width: 100%;\n border-bottom: var(--scene-tree-toolbar-separator);\n}\n\n.table {\n position: relative;\n display: grid;\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n.resize-overlay {\n position: absolute;\n top: 0;\n cursor: var(--scene-tree-table-column-resize-cursor);\n z-index: 1000;\n width: 100%;\n height: 100%;\n}\n\n.divider-overlay {\n position: absolute;\n top: 0;\n display: grid;\n pointer-events: none;\n z-index: 2000;\n width: 100%;\n height: 100%;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\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 /**\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) {\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 = false;\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",":host {\n /**\n * @prop --scene-tree-toolbar-content-gap: A CSS length that specifies the\n * horizontal gap between slots.\n */\n --scene-tree-toolbar-content-gap: 8px;\n\n display: flex;\n padding: 0.5rem;\n}\n\n.content {\n display: flex;\n align-items: center;\n}\n\n.content-primary {\n width: 100%;\n}\n\n::slotted(:not(:first-child)) {\n margin-left: var(--scene-tree-toolbar-content-gap);\n}\n","import { Component, h, Host } from '@stencil/core';\n\n/**\n * @slot The primary content that will be placed in the center of the toolbar\n * and stretch to container's available width.\n * @slot before - Content that is placed before the primary content.\n * @slot after - Content that is placed after the primary content.\n */\n@Component({\n tag: 'vertex-scene-tree-toolbar',\n styleUrl: 'scene-tree-toolbar.css',\n shadow: true,\n})\nexport class SceneTreeToolbar {\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"content\">\n <slot name=\"before\" />\n </div>\n <div class=\"content content-primary\">\n <slot />\n </div>\n <div class=\"content\">\n <slot name=\"after\" />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
1
+ {"file":"vertex-scene-tree-search.vertex-scene-tree-table-layout.vertex-scene-tree-toolbar.entry.js","mappings":"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","names":["classNames","Point"],"sources":["./src/components/scene-tree-search/scene-tree-search.css?tag=vertex-scene-tree-search&encapsulation=shadow","./src/components/scene-tree-search/scene-tree-search.tsx","../html-templates/dist/bundle.esm.js","./src/components/scene-tree-table-layout/lib/dom.ts","./src/components/scene-tree-table-layout/lib/hover-controller.ts","./src/components/scene-tree-table-layout/lib/window.ts","./src/components/scene-tree-table-layout/scene-tree-table-layout.css?tag=vertex-scene-tree-table-layout&encapsulation=shadow","./src/components/scene-tree-table-layout/scene-tree-table-layout.tsx","./src/components/scene-tree-toolbar/scene-tree-toolbar.css?tag=vertex-scene-tree-toolbar&encapsulation=shadow","./src/components/scene-tree-toolbar/scene-tree-toolbar.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n /**\n * @prop --scene-tree-search-search-icon-offset: A CSS length that specifies\n * the horizontal offset of the search icon\n */\n --scene-tree-search-search-icon-offset: 8px;\n\n /**\n * @prop --scene-tree-search-clear-button-offset: A CSS length that specifies\n * the horizontal offset of the clear button.\n */\n --scene-tree-search-clear-button-offset: 8px;\n\n /**\n * @prop --scene-tree-search-input-padding: A CSS padding value that specifies\n * horizontal and vertical lengths of the internal text input.\n */\n --scene-tree-search-input-padding: 0.5rem 32px;\n\n /**\n * @prop --scene-tree-search-input-border: A CSS border value that specifies\n * the border of the internal text input.\n */\n --scene-tree-search-input-border: none;\n\n /**\n * @prop --scene-tree-search-input-border-radius: A CSS length that specifies\n * the radius of the internal text input.\n */\n --scene-tree-search-input-border-radius: 0.25rem;\n\n /**\n * @prop --scene-tree-search-input-background: A CSS background that specifies\n * the background color or image of the internal text input.\n */\n --scene-tree-search-input-background: none;\n\n /**\n * @prop --scene-tree-search-focused-input-background: A CSS background value\n * that specifies the background of the internal text input when focused.\n */\n --scene-tree-search-focused-input-background: var(--neutral-200);\n\n /**\n * @prop --scene-tree-search-focused-input-outline: A CSS outline value that\n * specifies the outline of the internal text input when focused.\n */\n --scene-tree-search-focused-input-outline: none;\n\n display: block;\n width: 100%;\n font-size: 0.875rem;\n}\n\n.root {\n width: 100%;\n position: relative;\n}\n\n.input {\n background: var(--scene-tree-search-input-background);\n border: var(--scene-tree-search-input-border);\n border-radius: var(--scene-tree-search-input-border-radius);\n box-sizing: border-box;\n font-size: inherit;\n padding: var(--scene-tree-search-input-padding);\n outline: none;\n width: 100%;\n}\n\n.input.background {\n background: var(--scene-tree-search-focused-input-background);\n outline: var(--scene-tree-search-focused-input-outline);\n}\n\n.overlay {\n position: absolute;\n top: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n}\n\n.overlay-clear {\n display: none;\n right: var(--scene-tree-search-clear-button-offset);\n}\n\n.overlay-clear.show {\n display: flex;\n}\n\n.icon {\n color: var(--neutral-700);\n}\n\n.icon-search {\n position: absolute;\n left: var(--scene-tree-search-search-icon-offset);\n pointer-events: none;\n}\n\n.clear-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: initial;\n cursor: pointer;\n}\n.clear-btn:hover {\n color: var(--neutral-800);\n}\n.clear-btn:disabled {\n pointer-events: none;\n opacity: 0.5;\n}","import {\n Component,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { debounceEvent } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\n\n/**\n * @slot search-icon - A slot that replaces the component's default search icon.\n * @slot clear-icon - A slot that replaces the component's default clear icon.\n */\n@Component({\n tag: 'vertex-scene-tree-search',\n styleUrl: 'scene-tree-search.css',\n shadow: true,\n})\nexport class SceneTreeSearch {\n /**\n * Specifies the delay, in milliseconds, to emit `search` events after user\n * input.\n */\n @Prop()\n public debounce = 350;\n\n /**\n * If `true`, disables user interaction of the component.\n */\n @Prop()\n public disabled = false;\n\n /**\n * Placeholder text if `value` is empty.\n */\n @Prop()\n public placeholder?: string = undefined;\n\n /**\n * The scene tree controller\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * An event that is emitted when a user has inputted or cleared the search\n * term. The event may be delayed according to the current `debounce` value.\n */\n @Event({ bubbles: true })\n public search!: EventEmitter<string>;\n\n @State()\n private focused = false;\n\n @State()\n private isSearching = false;\n\n private inputEl?: HTMLInputElement;\n private onStateChangeDisposable?: Disposable;\n\n /**\n * Gives focus to the the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.inputEl?.focus();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n public controllerChanged(controller: SceneTreeController): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n this.handleDebounceChanged();\n\n this.setupController();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.onStateChangeDisposable?.dispose();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"root\">\n <div class=\"overlay icon icon-search\">\n <slot name=\"search-icon\">\n {this.isSearching ? (\n <vertex-viewer-spinner slot=\"search-icon\" size=\"xs\" />\n ) : (\n <vertex-viewer-icon name=\"search\" size=\"sm\" />\n )}\n </slot>\n </div>\n\n <input\n class={classNames('input', {\n background: this.focused || this.value.length > 0,\n })}\n type=\"text\"\n ref={(ref) => (this.inputEl = ref)}\n placeholder={this.placeholder}\n disabled={this.disabled}\n value={this.value}\n onInput={this.handleTextInput}\n onFocus={this.handleTextFocus}\n onBlur={this.handleTextBlur}\n />\n\n <div\n class={classNames('overlay overlay-clear', {\n show: this.value.length > 0,\n })}\n >\n <button\n class=\"clear-btn icon\"\n tabIndex={-1}\n onMouseDown={this.handleClear}\n disabled={this.disabled}\n >\n <slot name=\"clear-icon\">\n <vertex-viewer-icon name=\"close-circle\" size=\"sm\" />\n </slot>\n </button>\n </div>\n </div>\n </Host>\n );\n }\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n this.search.emit(this.value);\n };\n\n private handleTextFocus = (): void => {\n this.focused = true;\n };\n\n private handleTextBlur = (): void => {\n this.focused = false;\n };\n\n private handleClear = (event: MouseEvent): void => {\n event.preventDefault();\n\n this.value = '';\n this.search.emit(this.value);\n this.setFocus();\n };\n\n private handleDebounceChanged(): void {\n this.search = debounceEvent(this.search, this.debounce);\n }\n\n private setupController(): void {\n this.onStateChangeDisposable?.dispose();\n\n this.onStateChangeDisposable = this.controller?.onStateChange.on(\n (state) => {\n this.isSearching = state.isSearching;\n }\n );\n }\n}\n","import { __assign } from 'tslib';\n\n/**\n * Source: ftp://ftp.unicode.org/Public/UCD/latest/ucd/SpecialCasing.txt\n */\n/**\n * Lower case as a function.\n */\nfunction lowerCase(str) {\n return str.toLowerCase();\n}\n\n// Support camel case (\"camelCase\" -> \"camel Case\" and \"CAMELCase\" -> \"CAMEL Case\").\nvar DEFAULT_SPLIT_REGEXP = [/([a-z0-9])([A-Z])/g, /([A-Z])([A-Z][a-z])/g];\n// Remove all non-word characters.\nvar DEFAULT_STRIP_REGEXP = /[^A-Z0-9]+/gi;\n/**\n * Normalize the string into something other libraries can manipulate easier.\n */\nfunction noCase(input, options) {\n if (options === void 0) { options = {}; }\n var _a = options.splitRegexp, splitRegexp = _a === void 0 ? DEFAULT_SPLIT_REGEXP : _a, _b = options.stripRegexp, stripRegexp = _b === void 0 ? DEFAULT_STRIP_REGEXP : _b, _c = options.transform, transform = _c === void 0 ? lowerCase : _c, _d = options.delimiter, delimiter = _d === void 0 ? \" \" : _d;\n var result = replace(replace(input, splitRegexp, \"$1\\0$2\"), stripRegexp, \"\\0\");\n var start = 0;\n var end = result.length;\n // Trim the delimiter from around the output string.\n while (result.charAt(start) === \"\\0\")\n start++;\n while (result.charAt(end - 1) === \"\\0\")\n end--;\n // Transform each token independently.\n return result.slice(start, end).split(\"\\0\").map(transform).join(delimiter);\n}\n/**\n * Replace `re` in the input string with the replacement value.\n */\nfunction replace(input, re, value) {\n if (re instanceof RegExp)\n return input.replace(re, value);\n return re.reduce(function (input, re) { return input.replace(re, value); }, input);\n}\n\nfunction pascalCaseTransform(input, index) {\n var firstChar = input.charAt(0);\n var lowerChars = input.substr(1).toLowerCase();\n if (index > 0 && firstChar >= \"0\" && firstChar <= \"9\") {\n return \"_\" + firstChar + lowerChars;\n }\n return \"\" + firstChar.toUpperCase() + lowerChars;\n}\nfunction pascalCase(input, options) {\n if (options === void 0) { options = {}; }\n return noCase(input, __assign({ delimiter: \"\", transform: pascalCaseTransform }, options));\n}\n\nfunction camelCaseTransform(input, index) {\n if (index === 0)\n return input.toLowerCase();\n return pascalCaseTransform(input, index);\n}\nfunction camelCase(input, options) {\n if (options === void 0) { options = {}; }\n return pascalCase(input, __assign({ transform: camelCaseTransform }, options));\n}\n\nconst bindingRegEx = /{{(.+)}}/;\r\nclass CollectionBinding {\r\n constructor(bindings) {\r\n this.bindings = bindings;\r\n }\r\n bind(data) {\r\n this.bindings.forEach((binding) => binding.bind(data));\r\n }\r\n}\r\nclass NodeBinding {\r\n constructor(node, expr) {\r\n this.node = node;\r\n this.expr = expr;\r\n }\r\n}\r\nclass TextNodeBinding extends NodeBinding {\r\n constructor(node, expr) {\r\n super(node, expr);\r\n }\r\n bind(data) {\r\n const newContent = replaceBindingString(data, this.expr);\r\n if (newContent !== this.node.textContent) {\r\n this.node.textContent = newContent;\r\n }\r\n }\r\n}\r\nclass AttributeBinding extends NodeBinding {\r\n constructor(node, expr, attr) {\r\n super(node, expr);\r\n this.attr = attr;\r\n }\r\n bind(data) {\r\n const newValue = replaceBindingString(data, this.expr);\r\n const oldValue = this.node.getAttribute(this.attr);\r\n if (oldValue !== newValue) {\r\n this.node.setAttribute(this.attr, newValue);\r\n }\r\n }\r\n}\r\nclass PropertyBinding extends NodeBinding {\r\n constructor(node, expr, prop) {\r\n super(node, expr);\r\n this.prop = prop;\r\n }\r\n bind(data) {\r\n const newValue = replaceBinding(data, this.expr);\r\n /* eslint-disable @typescript-eslint/no-explicit-any */\r\n const oldValue = this.node[this.prop];\r\n if (oldValue !== newValue) {\r\n this.node[this.prop] = newValue;\r\n }\r\n /* eslint-enable @typescript-eslint/no-explicit-any */\r\n }\r\n}\r\nclass EventHandlerBinding extends NodeBinding {\r\n constructor(node, expr, eventName) {\r\n super(node, expr);\r\n this.eventName = eventName;\r\n }\r\n bind(data) {\r\n var _a;\r\n const path = extractBindingPath(this.expr);\r\n if (path != null) {\r\n (_a = this.disposable) === null || _a === void 0 ? void 0 : _a.dispose();\r\n const listener = getBindableValue(data, path, true);\r\n this.node.addEventListener(this.eventName, listener);\r\n this.disposable = {\r\n dispose: () => {\r\n this.node.removeEventListener(this.eventName, listener);\r\n },\r\n };\r\n }\r\n }\r\n}\r\nfunction generateBindings(node) {\r\n const bindings = [];\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const el = node;\r\n const bindableAttributes = getBindableAttributes(el);\r\n bindableAttributes.forEach((attr) => {\r\n if (attr.name.startsWith('event:')) {\r\n const eventName = camelCase(attr.name.replace('event:', ''));\r\n bindings.push(new EventHandlerBinding(el, attr.value, eventName));\r\n }\r\n else if (attr.name.startsWith('attr:')) {\r\n bindings.push(new AttributeBinding(el, attr.value, attr.name.replace('attr:', '')));\r\n }\r\n else if (attr.name.startsWith('prop:')) {\r\n const propName = camelCase(attr.name.replace('prop:', ''));\r\n bindings.push(new PropertyBinding(el, attr.value, propName));\r\n }\r\n });\r\n }\r\n else if (node.nodeType === Node.TEXT_NODE &&\r\n node.textContent != null &&\r\n bindingRegEx.test(node.textContent)) {\r\n bindings.push(new TextNodeBinding(node, node.textContent));\r\n }\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n bindings.push(...generateBindings(node.childNodes[i]));\r\n }\r\n return bindings;\r\n}\r\nfunction getBindableAttributes(element) {\r\n return Array.from(element.attributes).filter((attr) => bindingRegEx.test(attr.value));\r\n}\r\nfunction extractBindingPath(expr) {\r\n const result = bindingRegEx.exec(expr);\r\n return result != null ? result[1] : undefined;\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction replaceBindingString(data, expr) {\r\n const path = extractBindingPath(expr);\r\n if (path != null) {\r\n const value = getBindableValue(data, path, true);\r\n return expr.replace(`{{${path}}}`, value === null || value === void 0 ? void 0 : value.toString());\r\n }\r\n else {\r\n return expr;\r\n }\r\n}\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction replaceBinding(data, expr) {\r\n const path = extractBindingPath(expr);\r\n if (path != null) {\r\n const value = getBindableValue(data, path, true);\r\n return value;\r\n }\r\n else {\r\n return expr;\r\n }\r\n}\r\nfunction getBindableValue(\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\ndata, path, isHead = false\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n) {\r\n const [head, ...tail] = path.split('.');\r\n if (isHead && tail.length === 0) {\r\n return data;\r\n }\r\n else if (isHead && tail.length > 0) {\r\n return getBindableValue(data, tail.join('.'), false);\r\n }\r\n else {\r\n const value = data[head];\r\n if (tail.length > 0) {\r\n return getBindableValue(value, tail.join('.'), false);\r\n }\r\n else {\r\n return value;\r\n }\r\n }\r\n}\n\nclass ElementPool {\r\n constructor(container, elementFactory) {\r\n this.container = container;\r\n this.elementFactory = elementFactory;\r\n this.instanceMap = new Map();\r\n this.elements = [];\r\n }\r\n swapHeadToTail(count) {\r\n const sliced = this.elements.splice(0, count);\r\n this.elements.splice(this.elements.length, 0, ...sliced);\r\n return this.elements.concat();\r\n }\r\n swapTailToHead(count) {\r\n const sliced = this.elements.splice(-count, count);\r\n this.elements.splice(0, 0, ...sliced);\r\n return this.elements.concat();\r\n }\r\n updateElements(count) {\r\n const diff = count - this.elements.length;\r\n if (diff > 0) {\r\n for (let i = 0; i < diff; i++) {\r\n this.createElement();\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < -diff; i++) {\r\n this.deleteElement();\r\n }\r\n }\r\n return this.elements.concat();\r\n }\r\n updateData(f) {\r\n this.elements.forEach((el, i) => {\r\n const instance = this.instanceMap.get(el);\r\n const data = f(i);\r\n instance === null || instance === void 0 ? void 0 : instance.bindings.bind(data);\r\n });\r\n }\r\n updateElementFactory(elementFactory) {\r\n this.elementFactory = elementFactory;\r\n this.updateElements(0);\r\n }\r\n iterateElements(f) {\r\n this.elements.forEach((el, i) => {\r\n const instance = this.instanceMap.get(el);\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n f(el, instance.bindings, i);\r\n });\r\n }\r\n createElement() {\r\n const instance = this.elementFactory();\r\n this.elements.push(instance.element);\r\n this.instanceMap.set(instance.element, instance);\r\n this.container.append(instance.element);\r\n return instance;\r\n }\r\n deleteElement() {\r\n const element = this.elements.pop();\r\n if (element != null) {\r\n this.instanceMap.delete(element);\r\n element.remove();\r\n }\r\n }\r\n}\n\nfunction append(container, element, data) {\r\n const bindings = new CollectionBinding(generateBindings(element));\r\n bindings.bind(data);\r\n container.appendChild(element);\r\n const created = container.lastElementChild;\r\n if (created != null) {\r\n return { element: created, bindings };\r\n }\r\n else {\r\n throw new Error('Failed to append element');\r\n }\r\n}\r\nfunction generateInstanceFromTemplate(template) {\r\n const fragment = template.content.cloneNode(true);\r\n const element = fragment.firstElementChild;\r\n const bindings = new CollectionBinding(generateBindings(fragment));\r\n return { element, bindings };\r\n}\n\nexport { AttributeBinding, CollectionBinding, ElementPool, EventHandlerBinding, NodeBinding, PropertyBinding, TextNodeBinding, append, generateBindings, generateInstanceFromTemplate };\n//# sourceMappingURL=bundle.esm.js.map\n","export type DomScrollToOptions = ScrollToOptions;\n\nexport function getSceneTreeTableOffsetTop(el: HTMLElement): number {\n return el.getBoundingClientRect().top ?? 0;\n}\n\nexport function getSceneTreeTableViewportWidth(el: HTMLElement): number {\n return el.clientWidth;\n}\n\nexport function scrollToTop(\n el: HTMLElement,\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n): void {\n el.scrollTo({ top, ...options });\n}\n","import { Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\nexport class SceneTreeCellHoverController {\n public onStateChange = new EventDispatcher<string | undefined>();\n\n public setHovered(id?: string): void {\n this.onStateChange.emit(id);\n }\n\n public stateChanged(listener: Listener<string | undefined>): Disposable {\n return this.onStateChange.on(listener);\n }\n}\n","export function restartTimeout(\n fn: VoidFunction,\n existingTimeout?: number,\n delay = 200\n): number {\n window.clearTimeout(existingTimeout);\n return window.setTimeout(fn, delay);\n}\n",":host {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n overflow: hidden;\n font-size: 0.825rem;\n\n /**\n * @prop --scene-tree-table-row-padding: CSS lengths that specifies the amount of\n * padding between the row's border and content.\n */\n --scene-tree-table-row-padding: 2px 0px;\n\n /**\n * @prop --scene-tree-table-column-gap: CSS length that specifies the amount of\n * padding between columns in the table.\n */\n --scene-tree-table-column-gap: 0.5rem;\n\n /**\n * @prop --scene-tree-table-column-resize-cursor: A CSS cursor value that will\n * be displayed when resizing a column. Defaults to `col-resize`.\n */\n --scene-tree-table-column-resize-cursor: col-resize;\n}\n\n.header {\n position: relative;\n display: grid;\n width: 100%;\n border-bottom: var(--scene-tree-toolbar-separator);\n}\n\n.table {\n position: relative;\n display: grid;\n width: 100%;\n height: 100%;\n overflow: auto;\n}\n\n.resize-overlay {\n position: absolute;\n top: 0;\n cursor: var(--scene-tree-table-column-resize-cursor);\n z-index: 1000;\n width: 100%;\n height: 100%;\n}\n\n.divider-overlay {\n position: absolute;\n top: 0;\n display: grid;\n pointer-events: none;\n z-index: 2000;\n width: 100%;\n height: 100%;\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\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 /**\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 (\n this.controller?.isConnected &&\n this.viewportStartIndex >= 0 &&\n this.viewportEndIndex >= 0\n ) {\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 = false;\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",":host {\n /**\n * @prop --scene-tree-toolbar-content-gap: A CSS length that specifies the\n * horizontal gap between slots.\n */\n --scene-tree-toolbar-content-gap: 8px;\n\n display: flex;\n padding: 0.5rem;\n}\n\n.content {\n display: flex;\n align-items: center;\n}\n\n.content-primary {\n width: 100%;\n}\n\n::slotted(:not(:first-child)) {\n margin-left: var(--scene-tree-toolbar-content-gap);\n}\n","import { Component, h, Host } from '@stencil/core';\n\n/**\n * @slot The primary content that will be placed in the center of the toolbar\n * and stretch to container's available width.\n * @slot before - Content that is placed before the primary content.\n * @slot after - Content that is placed after the primary content.\n */\n@Component({\n tag: 'vertex-scene-tree-toolbar',\n styleUrl: 'scene-tree-toolbar.css',\n shadow: true,\n})\nexport class SceneTreeToolbar {\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div class=\"content\">\n <slot name=\"before\" />\n </div>\n <div class=\"content content-primary\">\n <slot />\n </div>\n <div class=\"content\">\n <slot name=\"after\" />\n </div>\n </Host>\n );\n }\n}\n"],"version":3}
@@ -135,7 +135,9 @@ const SceneTreeTableCell = class {
135
135
  }
136
136
  render() {
137
137
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
138
- return (h(Host, { onPointerEnter: this.handleCellPointerEnter, onPointerLeave: this.handleCellPointerLeave, onPointerUp: this.handleCellPointerUp, onPointerDown: this.handleCellPointerDown }, h("div", { class: "wrapper" }, h("div", { class: "no-shrink" }, h("slot", { name: "left-gutter" })), this.expandToggle && (h("button", { class: "expand-btn no-shrink", "data-test-id": 'expand-' + ((_a = this.node) === null || _a === void 0 ? void 0 : _a.name), onPointerUp: (event) => {
138
+ // Overrides the `.hydrated` visibility when we have nothing to display
139
+ const hiddenStyle = this.node == null ? { visibility: 'hidden' } : undefined;
140
+ return (h(Host, { onPointerEnter: this.handleCellPointerEnter, onPointerLeave: this.handleCellPointerLeave, onPointerUp: this.handleCellPointerUp, onPointerDown: this.handleCellPointerDown, style: hiddenStyle }, h("div", { class: "wrapper" }, h("div", { class: "no-shrink" }, h("slot", { name: "left-gutter" })), this.expandToggle && (h("button", { class: "expand-btn no-shrink", "data-test-id": 'expand-' + ((_a = this.node) === null || _a === void 0 ? void 0 : _a.name), onPointerUp: (event) => {
139
141
  event.preventDefault();
140
142
  this.toggleExpansion(event);
141
143
  } }, !((_b = this.node) === null || _b === void 0 ? void 0 : _b.isLeaf) && !((_c = this.node) === null || _c === void 0 ? void 0 : _c.endItem) && (h("div", { class: classnames('icon', {
@@ -1 +1 @@
1
- {"file":"vertex-scene-tree-table-cell.entry.js","mappings":"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","names":["classNames","Events.defaultEventConfig"],"sources":["./src/components/scene-tree-table-cell/scene-tree-table-cell.css?tag=vertex-scene-tree-table-cell&encapsulation=shadow","./src/components/scene-tree-table-cell/scene-tree-table-cell.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n\n /**\n * @prop --scene-tree-cell-background-hover: A CSS background of a cell when\n * hovered.\n */\n --scene-tree-cell-background-hover: var(--blue-200);\n\n /**\n * @prop --scene-tree-cell-background-selected: A CSS background color of a\n * cell when selected.\n */\n --scene-tree-cell-background-selected: var(--blue-300);\n\n /**\n * @prop --scene-tree-cell-text-positioning: A CSS text alignment\n * value that indicates how text should be positioned.\n */\n --scene-tree-cell-text-positioning: left;\n\n /**\n * @prop --scene-tree-cell-padding: CSS lengths that specifies the amount of\n * padding between the cell's border and content.\n */\n --scene-tree-cell-padding: 0.25rem 0;\n}\n\n:host([is-hovered]) {\n background: var(--scene-tree-cell-background-hover);\n}\n\n:host([is-selected]) {\n background: var(--scene-tree-cell-background-selected);\n}\n\n.wrapper {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n padding: var(--scene-tree-cell-padding);\n}\n\n.content {\n width: 100%;\n text-align: var(--scene-tree-cell-text-positioning);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.column-spacer {\n width: var(--scene-tree-table-column-gap);\n}\n\n.expand-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n min-height: 24px;\n}\n\n.no-shrink {\n flex-shrink: 0;\n}\n\n:host([is-leaf]) .expand-btn,\n:host([is-end-item]) .expand-btn {\n visibility: hidden;\n cursor: default;\n}\n\n.visibility-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n\n.icon {\n width: 14px;\n height: 14px;\n}\n\n.icon-expanded {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M11.88,9.17l-3.5-4a.51.51,0,0,0-.76,0l-3.5,4A.5.5,0,0,0,4.5,10h7a.5.5,0,0,0,.38-.83Z' transform='rotate(180 8 8)' /%3E%3C/svg%3E\");\n}\n\n.icon-collapsed {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M10.83,7.62l-4-3.5A.5.5,0,0,0,6,4.5v7a.5.5,0,0,0,.83.38l4-3.5a.51.51,0,0,0,0-.76Z' /%3E%3C/svg%3E\");\n}\n\n.icon-visible {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M8 5a3 3 0 103 3 3 3 0 00-3-3zm4.65-1.17A8.53 8.53 0 008 2.5a8.53 8.53 0 00-4.65 1.33A6.57 6.57 0 00.51 7.89v.22a6.57 6.57 0 002.84 4.06A8.53 8.53 0 008 13.5a8.53 8.53 0 004.65-1.33 6.57 6.57 0 002.84-4.06v-.22a6.57 6.57 0 00-2.84-4.06zm-.55 7.5A7.52 7.52 0 018 12.5a7.52 7.52 0 01-4.1-1.17A5.49 5.49 0 011.53 8 5.49 5.49 0 013.9 4.67 7.52 7.52 0 018 3.5a7.52 7.52 0 014.1 1.17A5.49 5.49 0 0114.47 8a5.49 5.49 0 01-2.37 3.33z' /%3E%3C/svg%3E\");\n}\n\n.icon-hidden {\n background-image: url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M13.35 2.65a.48.48 0 00-.7 0l-.78.77a8.71 8.71 0 00-8.52.41A6.57 6.57 0 00.51 7.89v.22a6.58 6.58 0 002.71 4l-.57.58a.49.49 0 00.7.7l10-10a.48.48 0 000-.74zM9.73 5.56a3 3 0 00-4.17 4.17l-1.62 1.62A5.49 5.49 0 011.53 8 5.49 5.49 0 013.9 4.67 7.52 7.52 0 018 3.5a7.67 7.67 0 013.12.67zm3.61-1.2l-.72.72A5.45 5.45 0 0114.47 8a5.49 5.49 0 01-2.37 3.33A7.52 7.52 0 018 12.5a8.15 8.15 0 01-2.41-.38l-.78.78a8.9 8.9 0 003.19.6 8.53 8.53 0 004.65-1.33 6.57 6.57 0 002.84-4.06v-.22a6.56 6.56 0 00-2.15-3.53z' /%3E%3C/svg%3E%0A\");\n}\n\n.icon-partial {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.12 11.46A5.62 5.62 0 011.52 8 5.57 5.57 0 013.9 4.67 7.52 7.52 0 018 3.5a7.7 7.7 0 013.33.75l.74-.74A8.67 8.67 0 008 2.5a8.53 8.53 0 00-4.65 1.33A6.57 6.57 0 00.51 7.89v.22a6.54 6.54 0 002.88 4.08z' fill='%23444'/%3E%3Cpath d='M8 5a3 3 0 00-3 3 3 3 0 00.69 1.89l4.2-4.2A3 3 0 008 5zM5.88 5.88zM9.2 12.41a.51.51 0 00-.42.57.5.5 0 00.56.42.5.5 0 00.43-.57.51.51 0 00-.57-.42zM6.77 12.41a.5.5 0 00-.57.42.49.49 0 00.41.57.5.5 0 10.15-1zM14.48 5.61a.5.5 0 00-.7-.12.49.49 0 00-.12.69.5.5 0 00.82-.57zM11.5 11.68a.5.5 0 00-.22.67.51.51 0 00.68.22.5.5 0 00-.46-.89zM15.07 7.77a.52.52 0 00-.62.35.51.51 0 00.35.62.5.5 0 00.61-.35.52.52 0 00-.34-.62zM13.36 10.21a.5.5 0 10.76.64.49.49 0 00-.06-.7.51.51 0 00-.7.06z' fill='%23444'/%3E%3C/svg%3E\");\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n} from '@stencil/core';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { Events } from '../../lib/types';\nimport { SceneTreeOperationHandler } from '../scene-tree/lib/handlers';\nimport { SceneTreeCellHoverController } from '../scene-tree-table-layout/lib/hover-controller';\n\nexport interface SceneTreeTableCellEventDetails {\n node?: Node.AsObject;\n originalEvent: PointerEvent;\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-cell',\n styleUrl: 'scene-tree-table-cell.css',\n shadow: true,\n})\nexport class SceneTreeTableCell {\n /**\n * The node data that is associated to the row that this cell belongs to.\n * Contains information related to if the node is expanded, visible, etc.\n */\n @Prop()\n public node?: Node.AsObject;\n\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 * The value to display in this cell.\n */\n @Prop()\n public value?: string;\n\n /**\n * The value to display in this cell if the `value` specified is\n * undefined. Defaults to \"--\".\n */\n @Prop()\n public placeholder = '--';\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public hovered = false;\n\n /**\n * @internal\n */\n @Prop()\n public isScrolling?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the expanded state of\n * the node associated with this cell.\n */\n @Prop()\n public expandToggle?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the visibility state of\n * the node associated with this cell.\n */\n @Prop()\n public visibilityToggle?: boolean;\n\n /**\n * An optional handler that will override this cell's default selection\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public selectionHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default visibility\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public visibilityHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default expansion\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public expansionHandler?: SceneTreeOperationHandler;\n\n /**\n * @internal\n */\n @Prop()\n public hoverController?: SceneTreeCellHoverController;\n\n /**\n * An event that is emitted when a user requests to expand the node. This is\n * emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public expandToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's\n * visibility. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public visibilityToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's selection\n * state. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public selectionToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * Used for internals or testing.\n *\n * @private\n */\n @Event({ bubbles: true })\n public cellLoaded!: EventEmitter<void>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private hoverListener?: Disposable;\n\n private longPressTimer?: number;\n\n public componentDidLoad(): void {\n this.hoverListener = this.hoverController?.stateChanged((id?: string) => {\n this.hovered = id === this.node?.id?.hex;\n });\n\n this.cellLoaded.emit();\n this.clearLongPressTimer();\n }\n\n public disconnectedCallback(): void {\n this.hoverListener?.dispose();\n this.clearLongPressTimer();\n }\n\n public componentWillRender(): void {\n this.toggleAttribute('is-hovered', this.hovered);\n this.toggleAttribute('is-hidden', !this.node?.visible);\n this.toggleAttribute('is-selected', !!this.node?.selected);\n this.toggleAttribute('is-partial', !!this.node?.partiallyVisible);\n this.toggleAttribute('is-leaf', !!this.node?.isLeaf);\n this.toggleAttribute('is-end-item', !!this.node?.endItem);\n this.toggleAttribute('is-filter-hit', !!this.node?.filterHit);\n }\n\n public render(): h.JSX.IntrinsicElements {\n return (\n <Host\n onPointerEnter={this.handleCellPointerEnter}\n onPointerLeave={this.handleCellPointerLeave}\n onPointerUp={this.handleCellPointerUp}\n onPointerDown={this.handleCellPointerDown}\n >\n <div class=\"wrapper\">\n <div class=\"no-shrink\">\n <slot name=\"left-gutter\" />\n </div>\n {this.expandToggle && (\n <button\n class=\"expand-btn no-shrink\"\n data-test-id={'expand-' + this.node?.name}\n onPointerUp={(event) => {\n event.preventDefault();\n this.toggleExpansion(event);\n }}\n >\n {!this.node?.isLeaf && !this.node?.endItem && (\n <div\n class={classNames('icon', {\n 'icon-expanded': !this.node?.isLeaf && this.node?.expanded,\n 'icon-collapsed':\n !this.node?.isLeaf && !this.node?.expanded,\n })}\n />\n )}\n </button>\n )}\n\n <div class=\"content\">\n {this.value != null && this.value.trim() !== '' ? (\n <slot>{this.displayValue()}</slot>\n ) : (\n <slot name=\"placeholder\">{this.placeholder}</slot>\n )}\n </div>\n {this.visibilityToggle && (\n <button\n class=\"visibility-btn no-shrink\"\n data-test-id={'visibility-btn-' + this.node?.name}\n onPointerUp={(event) => {\n event?.preventDefault();\n this.toggleVisibility(event);\n }}\n >\n <div\n class={classNames('icon', {\n 'icon-visible':\n this.hovered &&\n !this.node?.partiallyVisible &&\n this.node?.visible,\n 'icon-hidden':\n !this.node?.partiallyVisible && !this.node?.visible,\n 'icon-partial': this.node?.partiallyVisible,\n })}\n />\n </button>\n )}\n <div class=\"no-shrink\">\n <slot name=\"right-gutter\" />\n </div>\n {!this.visibilityToggle && <div class=\"column-spacer\" />}\n </div>\n </Host>\n );\n }\n\n private displayValue = (): string => {\n const resp =\n this.value == null || this.value.trim() === ''\n ? this.placeholder\n : this.value;\n\n return resp;\n };\n\n private handleCellPointerEnter = (): void => {\n this.hoverController?.setHovered(this.node?.id?.hex);\n };\n\n private handleCellPointerLeave = (): void => {\n this.hoverController?.setHovered(undefined);\n };\n\n private handleCellPointerUp = (event: PointerEvent): void => {\n if (\n !this.isScrolling &&\n this.node != null &&\n this.tree != null &&\n this.longPressTimer != null\n ) {\n if (this.selectionHandler != null) {\n this.selectionHandler(event, this.node, this.tree);\n } else {\n this.performDefaultSelectionOperation(event);\n }\n this.selectionToggled.emit({ node: this.node, originalEvent: event });\n }\n this.clearLongPressTimer();\n };\n\n private handleCellPointerDown = (event: PointerEvent): void => {\n this.restartLongPressTimer();\n };\n\n private toggleExpansion = (event: PointerEvent): void => {\n if (this.tree != null && this.node != null) {\n if (this.expansionHandler != null) {\n this.expansionHandler(event, this.node, this.tree);\n } else {\n this.performDefaultExpansionOperation(this.node, this.tree);\n }\n this.expandToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleVisibility = (event: PointerEvent): void => {\n if (this.tree != null && this.node != null) {\n if (this.visibilityHandler != null) {\n this.visibilityHandler(event, this.node, this.tree);\n } else {\n this.performDefaultVisibilityOperation(this.node, this.tree);\n }\n this.visibilityToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleAttribute(attr: string, value: boolean): void {\n if (value) {\n this.hostEl.setAttribute(attr, '');\n } else {\n this.hostEl.removeAttribute(attr);\n }\n }\n\n private performDefaultSelectionOperation = (event: PointerEvent): void => {\n if (!event.defaultPrevented && event.button === 0) {\n if ((event.ctrlKey || event.metaKey) && this.node?.selected) {\n this.tree?.deselectItem(this.node);\n } else if (this.node?.selected) {\n this.tree?.selectItem(this.node, {\n recurseParent: true,\n });\n } else if (!this.node?.selected) {\n this.tree?.selectItem(this.node, {\n append: event.ctrlKey || event.metaKey,\n range: event.shiftKey,\n });\n }\n }\n };\n\n private performDefaultVisibilityOperation = (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ): void => {\n tree.toggleItemVisibility(node);\n };\n\n private performDefaultExpansionOperation = (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ): void => {\n tree.toggleExpandItem(node);\n };\n\n private clearLongPressTimer(): void {\n if (this.longPressTimer != null) {\n window.clearTimeout(this.longPressTimer);\n }\n this.longPressTimer = undefined;\n }\n\n private restartLongPressTimer(): void {\n this.clearLongPressTimer();\n this.longPressTimer = window.setTimeout(() => {\n this.clearLongPressTimer();\n }, Events.defaultEventConfig.longPressThreshold);\n }\n}\n"],"version":3}
1
+ {"file":"vertex-scene-tree-table-cell.entry.js","mappings":"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","names":["classNames","Events.defaultEventConfig"],"sources":["./src/components/scene-tree-table-cell/scene-tree-table-cell.css?tag=vertex-scene-tree-table-cell&encapsulation=shadow","./src/components/scene-tree-table-cell/scene-tree-table-cell.tsx"],"sourcesContent":["@import url('../../css/button-reset.css');\n\n:host {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n\n /**\n * @prop --scene-tree-cell-background-hover: A CSS background of a cell when\n * hovered.\n */\n --scene-tree-cell-background-hover: var(--blue-200);\n\n /**\n * @prop --scene-tree-cell-background-selected: A CSS background color of a\n * cell when selected.\n */\n --scene-tree-cell-background-selected: var(--blue-300);\n\n /**\n * @prop --scene-tree-cell-text-positioning: A CSS text alignment\n * value that indicates how text should be positioned.\n */\n --scene-tree-cell-text-positioning: left;\n\n /**\n * @prop --scene-tree-cell-padding: CSS lengths that specifies the amount of\n * padding between the cell's border and content.\n */\n --scene-tree-cell-padding: 0.25rem 0;\n}\n\n:host([is-hovered]) {\n background: var(--scene-tree-cell-background-hover);\n}\n\n:host([is-selected]) {\n background: var(--scene-tree-cell-background-selected);\n}\n\n.wrapper {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n padding: var(--scene-tree-cell-padding);\n}\n\n.content {\n width: 100%;\n text-align: var(--scene-tree-cell-text-positioning);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.column-spacer {\n width: var(--scene-tree-table-column-gap);\n}\n\n.expand-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n min-height: 24px;\n}\n\n.no-shrink {\n flex-shrink: 0;\n}\n\n:host([is-leaf]) .expand-btn,\n:host([is-end-item]) .expand-btn {\n visibility: hidden;\n cursor: default;\n}\n\n.visibility-btn {\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n}\n\n.icon {\n width: 14px;\n height: 14px;\n}\n\n.icon-expanded {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M11.88,9.17l-3.5-4a.51.51,0,0,0-.76,0l-3.5,4A.5.5,0,0,0,4.5,10h7a.5.5,0,0,0,.38-.83Z' transform='rotate(180 8 8)' /%3E%3C/svg%3E\");\n}\n\n.icon-collapsed {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M10.83,7.62l-4-3.5A.5.5,0,0,0,6,4.5v7a.5.5,0,0,0,.83.38l4-3.5a.51.51,0,0,0,0-.76Z' /%3E%3C/svg%3E\");\n}\n\n.icon-visible {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M8 5a3 3 0 103 3 3 3 0 00-3-3zm4.65-1.17A8.53 8.53 0 008 2.5a8.53 8.53 0 00-4.65 1.33A6.57 6.57 0 00.51 7.89v.22a6.57 6.57 0 002.84 4.06A8.53 8.53 0 008 13.5a8.53 8.53 0 004.65-1.33 6.57 6.57 0 002.84-4.06v-.22a6.57 6.57 0 00-2.84-4.06zm-.55 7.5A7.52 7.52 0 018 12.5a7.52 7.52 0 01-4.1-1.17A5.49 5.49 0 011.53 8 5.49 5.49 0 013.9 4.67 7.52 7.52 0 018 3.5a7.52 7.52 0 014.1 1.17A5.49 5.49 0 0114.47 8a5.49 5.49 0 01-2.37 3.33z' /%3E%3C/svg%3E\");\n}\n\n.icon-hidden {\n background-image: url(\"data:image/svg+xml, %3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' class='icon' %3E%3Cpath fill='%23444444' d='M13.35 2.65a.48.48 0 00-.7 0l-.78.77a8.71 8.71 0 00-8.52.41A6.57 6.57 0 00.51 7.89v.22a6.58 6.58 0 002.71 4l-.57.58a.49.49 0 00.7.7l10-10a.48.48 0 000-.74zM9.73 5.56a3 3 0 00-4.17 4.17l-1.62 1.62A5.49 5.49 0 011.53 8 5.49 5.49 0 013.9 4.67 7.52 7.52 0 018 3.5a7.67 7.67 0 013.12.67zm3.61-1.2l-.72.72A5.45 5.45 0 0114.47 8a5.49 5.49 0 01-2.37 3.33A7.52 7.52 0 018 12.5a8.15 8.15 0 01-2.41-.38l-.78.78a8.9 8.9 0 003.19.6 8.53 8.53 0 004.65-1.33 6.57 6.57 0 002.84-4.06v-.22a6.56 6.56 0 00-2.15-3.53z' /%3E%3C/svg%3E%0A\");\n}\n\n.icon-partial {\n background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath d='M4.12 11.46A5.62 5.62 0 011.52 8 5.57 5.57 0 013.9 4.67 7.52 7.52 0 018 3.5a7.7 7.7 0 013.33.75l.74-.74A8.67 8.67 0 008 2.5a8.53 8.53 0 00-4.65 1.33A6.57 6.57 0 00.51 7.89v.22a6.54 6.54 0 002.88 4.08z' fill='%23444'/%3E%3Cpath d='M8 5a3 3 0 00-3 3 3 3 0 00.69 1.89l4.2-4.2A3 3 0 008 5zM5.88 5.88zM9.2 12.41a.51.51 0 00-.42.57.5.5 0 00.56.42.5.5 0 00.43-.57.51.51 0 00-.57-.42zM6.77 12.41a.5.5 0 00-.57.42.49.49 0 00.41.57.5.5 0 10.15-1zM14.48 5.61a.5.5 0 00-.7-.12.49.49 0 00-.12.69.5.5 0 00.82-.57zM11.5 11.68a.5.5 0 00-.22.67.51.51 0 00.68.22.5.5 0 00-.46-.89zM15.07 7.77a.52.52 0 00-.62.35.51.51 0 00.35.62.5.5 0 00.61-.35.52.52 0 00-.34-.62zM13.36 10.21a.5.5 0 10.76.64.49.49 0 00-.06-.7.51.51 0 00-.7.06z' fill='%23444'/%3E%3C/svg%3E\");\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n} from '@stencil/core';\nimport { Node } from '@vertexvis/scene-tree-protos/scenetree/protos/domain_pb';\nimport { Disposable } from '@vertexvis/utils';\nimport classNames from 'classnames';\n\nimport { Events } from '../../lib/types';\nimport { SceneTreeOperationHandler } from '../scene-tree/lib/handlers';\nimport { SceneTreeCellHoverController } from '../scene-tree-table-layout/lib/hover-controller';\n\nexport interface SceneTreeTableCellEventDetails {\n node?: Node.AsObject;\n originalEvent: PointerEvent;\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-cell',\n styleUrl: 'scene-tree-table-cell.css',\n shadow: true,\n})\nexport class SceneTreeTableCell {\n /**\n * The node data that is associated to the row that this cell belongs to.\n * Contains information related to if the node is expanded, visible, etc.\n */\n @Prop()\n public node?: Node.AsObject;\n\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 * The value to display in this cell.\n */\n @Prop()\n public value?: string;\n\n /**\n * The value to display in this cell if the `value` specified is\n * undefined. Defaults to \"--\".\n */\n @Prop()\n public placeholder = '--';\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public hovered = false;\n\n /**\n * @internal\n */\n @Prop()\n public isScrolling?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the expanded state of\n * the node associated with this cell.\n */\n @Prop()\n public expandToggle?: boolean;\n\n /**\n * Indicates whether to display a button for toggling the visibility state of\n * the node associated with this cell.\n */\n @Prop()\n public visibilityToggle?: boolean;\n\n /**\n * An optional handler that will override this cell's default selection\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public selectionHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default visibility\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public visibilityHandler?: SceneTreeOperationHandler;\n\n /**\n * An optional handler that will override this cell's default expansion\n * behavior. The registered handler will receive the `pointerup` event,\n * the node data for the row this cell is associated with, and a reference\n * to the parent `<vertex-scene-tree>` element for performing operations.\n */\n @Prop()\n public expansionHandler?: SceneTreeOperationHandler;\n\n /**\n * @internal\n */\n @Prop()\n public hoverController?: SceneTreeCellHoverController;\n\n /**\n * An event that is emitted when a user requests to expand the node. This is\n * emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public expandToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's\n * visibility. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public visibilityToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * An event that is emitted when a user requests to change the node's selection\n * state. This event is emitted even if interactions are disabled.\n */\n @Event({ bubbles: true })\n public selectionToggled!: EventEmitter<SceneTreeTableCellEventDetails>;\n\n /**\n * Used for internals or testing.\n *\n * @private\n */\n @Event({ bubbles: true })\n public cellLoaded!: EventEmitter<void>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n private hoverListener?: Disposable;\n\n private longPressTimer?: number;\n\n public componentDidLoad(): void {\n this.hoverListener = this.hoverController?.stateChanged((id?: string) => {\n this.hovered = id === this.node?.id?.hex;\n });\n\n this.cellLoaded.emit();\n this.clearLongPressTimer();\n }\n\n public disconnectedCallback(): void {\n this.hoverListener?.dispose();\n this.clearLongPressTimer();\n }\n\n public componentWillRender(): void {\n this.toggleAttribute('is-hovered', this.hovered);\n this.toggleAttribute('is-hidden', !this.node?.visible);\n this.toggleAttribute('is-selected', !!this.node?.selected);\n this.toggleAttribute('is-partial', !!this.node?.partiallyVisible);\n this.toggleAttribute('is-leaf', !!this.node?.isLeaf);\n this.toggleAttribute('is-end-item', !!this.node?.endItem);\n this.toggleAttribute('is-filter-hit', !!this.node?.filterHit);\n }\n\n public render(): h.JSX.IntrinsicElements {\n // Overrides the `.hydrated` visibility when we have nothing to display\n const hiddenStyle =\n this.node == null ? { visibility: 'hidden' } : undefined;\n\n return (\n <Host\n onPointerEnter={this.handleCellPointerEnter}\n onPointerLeave={this.handleCellPointerLeave}\n onPointerUp={this.handleCellPointerUp}\n onPointerDown={this.handleCellPointerDown}\n style={hiddenStyle}\n >\n <div class=\"wrapper\">\n <div class=\"no-shrink\">\n <slot name=\"left-gutter\" />\n </div>\n {this.expandToggle && (\n <button\n class=\"expand-btn no-shrink\"\n data-test-id={'expand-' + this.node?.name}\n onPointerUp={(event) => {\n event.preventDefault();\n this.toggleExpansion(event);\n }}\n >\n {!this.node?.isLeaf && !this.node?.endItem && (\n <div\n class={classNames('icon', {\n 'icon-expanded': !this.node?.isLeaf && this.node?.expanded,\n 'icon-collapsed':\n !this.node?.isLeaf && !this.node?.expanded,\n })}\n />\n )}\n </button>\n )}\n\n <div class=\"content\">\n {this.value != null && this.value.trim() !== '' ? (\n <slot>{this.displayValue()}</slot>\n ) : (\n <slot name=\"placeholder\">{this.placeholder}</slot>\n )}\n </div>\n {this.visibilityToggle && (\n <button\n class=\"visibility-btn no-shrink\"\n data-test-id={'visibility-btn-' + this.node?.name}\n onPointerUp={(event) => {\n event?.preventDefault();\n this.toggleVisibility(event);\n }}\n >\n <div\n class={classNames('icon', {\n 'icon-visible':\n this.hovered &&\n !this.node?.partiallyVisible &&\n this.node?.visible,\n 'icon-hidden':\n !this.node?.partiallyVisible && !this.node?.visible,\n 'icon-partial': this.node?.partiallyVisible,\n })}\n />\n </button>\n )}\n <div class=\"no-shrink\">\n <slot name=\"right-gutter\" />\n </div>\n {!this.visibilityToggle && <div class=\"column-spacer\" />}\n </div>\n </Host>\n );\n }\n\n private displayValue = (): string => {\n const resp =\n this.value == null || this.value.trim() === ''\n ? this.placeholder\n : this.value;\n\n return resp;\n };\n\n private handleCellPointerEnter = (): void => {\n this.hoverController?.setHovered(this.node?.id?.hex);\n };\n\n private handleCellPointerLeave = (): void => {\n this.hoverController?.setHovered(undefined);\n };\n\n private handleCellPointerUp = (event: PointerEvent): void => {\n if (\n !this.isScrolling &&\n this.node != null &&\n this.tree != null &&\n this.longPressTimer != null\n ) {\n if (this.selectionHandler != null) {\n this.selectionHandler(event, this.node, this.tree);\n } else {\n this.performDefaultSelectionOperation(event);\n }\n this.selectionToggled.emit({ node: this.node, originalEvent: event });\n }\n this.clearLongPressTimer();\n };\n\n private handleCellPointerDown = (event: PointerEvent): void => {\n this.restartLongPressTimer();\n };\n\n private toggleExpansion = (event: PointerEvent): void => {\n if (this.tree != null && this.node != null) {\n if (this.expansionHandler != null) {\n this.expansionHandler(event, this.node, this.tree);\n } else {\n this.performDefaultExpansionOperation(this.node, this.tree);\n }\n this.expandToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleVisibility = (event: PointerEvent): void => {\n if (this.tree != null && this.node != null) {\n if (this.visibilityHandler != null) {\n this.visibilityHandler(event, this.node, this.tree);\n } else {\n this.performDefaultVisibilityOperation(this.node, this.tree);\n }\n this.visibilityToggled.emit({ node: this.node, originalEvent: event });\n }\n };\n\n private toggleAttribute(attr: string, value: boolean): void {\n if (value) {\n this.hostEl.setAttribute(attr, '');\n } else {\n this.hostEl.removeAttribute(attr);\n }\n }\n\n private performDefaultSelectionOperation = (event: PointerEvent): void => {\n if (!event.defaultPrevented && event.button === 0) {\n if ((event.ctrlKey || event.metaKey) && this.node?.selected) {\n this.tree?.deselectItem(this.node);\n } else if (this.node?.selected) {\n this.tree?.selectItem(this.node, {\n recurseParent: true,\n });\n } else if (!this.node?.selected) {\n this.tree?.selectItem(this.node, {\n append: event.ctrlKey || event.metaKey,\n range: event.shiftKey,\n });\n }\n }\n };\n\n private performDefaultVisibilityOperation = (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ): void => {\n tree.toggleItemVisibility(node);\n };\n\n private performDefaultExpansionOperation = (\n node: Node.AsObject,\n tree: HTMLVertexSceneTreeElement\n ): void => {\n tree.toggleExpandItem(node);\n };\n\n private clearLongPressTimer(): void {\n if (this.longPressTimer != null) {\n window.clearTimeout(this.longPressTimer);\n }\n this.longPressTimer = undefined;\n }\n\n private restartLongPressTimer(): void {\n this.clearLongPressTimer();\n this.longPressTimer = window.setTimeout(() => {\n this.clearLongPressTimer();\n }, Events.defaultEventConfig.longPressThreshold);\n }\n}\n"],"version":3}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { h, F as Fragment, r as registerInstance, c as createEvent, f as forceUpdate, H as Host, g as getElement } from './index-fd7d7b68.js';
5
5
  import { o as __rest } from './bundle.esm-92fd4246.js';
6
- import { a as SceneTreeAPIClient_1, w as webSocketSubscriptionTransportFactory, S as SceneTreeController, b as SceneTreeErrorDetails, c as SceneTreeErrorCode } from './controller-6afbaeb0.js';
6
+ import { a as SceneTreeAPIClient_1, w as webSocketSubscriptionTransportFactory, S as SceneTreeController, b as SceneTreeErrorDetails, c as SceneTreeErrorCode } from './controller-53f803d9.js';
7
7
  import { p as parseConfig } from './config-7e65e736.js';
8
8
  import { g as getSceneTreeContainsElement } from './dom-758547c9.js';
9
9
  import { i as isLoadedRow } from './row-6d4f9dcc.js';
@@ -108,7 +108,7 @@ async function deselectItem(viewer, id, { suppliedCorrelationId } = {}) {
108
108
  });
109
109
  }
110
110
 
111
- const sceneTreeCss = "button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}.button{padding:0.5rem;border-radius:0.25rem}.button-secondary{color:var(--neutral-800);background-color:var(--neutral-300)}.button-secondary:hover{color:var(--neutral-900)}.button-secondary:hover:enabled{box-shadow:0 2px 2px rgb(0 0 0 / 20%)}.button-secondary:disabled{opacity:0.8}.button-secondary:hover:disabled{cursor:not-allowed}:host{--scene-tree-toolbar-separator:1px solid var(--neutral-300);width:300px;height:100%;user-select:none;-webkit-user-select:none;cursor:default;display:flex;flex-direction:column}.rows-scroll{position:relative;height:var(--scene-tree-row-height, 0);flex-grow:1}.rows{position:relative}.row{position:absolute;display:flex;align-items:center;width:100%;height:var(--scene-tree-row-height);padding:var(--scene-tree-row-padding);box-sizing:border-box}.row:hover{background-color:var(--scene-tree-row-hover-color)}.row.is-selected{background-color:var(--scene-tree-row-selected-color)}.expand-toggle{cursor:pointer;width:16px}.row-text{margin-left:0.25rem;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.visibility-btn{display:flex;align-items:center;visibility:hidden;padding:4px}.visibility-btn.is-hidden{visibility:visible}.row:hover .visibility-btn{visibility:visible}.error{display:flex;flex-direction:column;align-items:center;font-size:0.875rem;width:100%;height:100%;padding:1rem;box-sizing:border-box;justify-content:center}.error-section{margin-top:1rem}.error-message{text-align:center}.search-toolbar,slot[name='header']::slotted(*){border-bottom:var(--scene-tree-toolbar-separator)}slot[name='footer']::slotted(:not(:last-child)){border-top:var(--scene-tree-toolbar-separator)}.header{display:flex;flex-direction:column}.footer{display:flex;flex-direction:column}.loading{position:absolute;top:150px;left:50%;transform:translate(-50%, -50%);text-align:center}";
111
+ const sceneTreeCss = "button{border:none;background:transparent;cursor:pointer;margin:0;padding:0}.button{padding:0.5rem;border-radius:0.25rem}.button-secondary{color:var(--neutral-800);background-color:var(--neutral-300)}.button-secondary:hover{color:var(--neutral-900)}.button-secondary:hover:enabled{box-shadow:0 2px 2px rgb(0 0 0 / 20%)}.button-secondary:disabled{opacity:0.8}.button-secondary:hover:disabled{cursor:not-allowed}:host{--scene-tree-toolbar-separator:1px solid var(--neutral-300);width:300px;height:100%;user-select:none;-webkit-user-select:none;cursor:default;display:flex;flex-direction:column}.rows-scroll{position:relative;height:var(--scene-tree-row-height, 0);flex-grow:1}.rows{position:relative}.row{position:absolute;display:flex;align-items:center;width:100%;height:var(--scene-tree-row-height);padding:var(--scene-tree-row-padding);box-sizing:border-box}.row:hover{background-color:var(--scene-tree-row-hover-color)}.row.is-selected{background-color:var(--scene-tree-row-selected-color)}.expand-toggle{cursor:pointer;width:16px}.row-text{margin-left:0.25rem;width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.visibility-btn{display:flex;align-items:center;visibility:hidden;padding:4px}.visibility-btn.is-hidden{visibility:visible}.row:hover .visibility-btn{visibility:visible}.error,.empty-results{display:flex;flex-direction:column;align-items:center;font-size:0.875rem;width:100%;height:100%;padding:1rem;box-sizing:border-box;justify-content:center}.error-section{margin-top:1rem}.error-message{text-align:center}.search-toolbar,slot[name='header']::slotted(*){border-bottom:var(--scene-tree-toolbar-separator)}slot[name='footer']::slotted(:not(:last-child)){border-top:var(--scene-tree-toolbar-separator)}.header{display:flex;flex-direction:column}.footer{display:flex;flex-direction:column}.loading{position:absolute;top:150px;left:50%;transform:translate(-50%, -50%);text-align:center}";
112
112
 
113
113
  /**
114
114
  * The minimum amount of time provided by requestIdleCallback to clear purged
@@ -150,6 +150,7 @@ const SceneTree = class {
150
150
  this.rows = [];
151
151
  this.totalRows = 0;
152
152
  this.showLoader = false;
153
+ this.showEmptyResults = false;
153
154
  /**
154
155
  * This stores internal state that you want to preserve across live-reloads,
155
156
  * but shouldn't trigger a refresh if the data changes. Marking this with
@@ -474,6 +475,7 @@ const SceneTree = class {
474
475
  * @ignore
475
476
  */
476
477
  componentWillLoad() {
478
+ var _a;
477
479
  if (this.controller == null) {
478
480
  const { sceneTreeHost } = this.getConfig().network;
479
481
  const client = new SceneTreeAPIClient_1(sceneTreeHost, this.getConfig().flags.grpcUseStreamingWebSocketTransport
@@ -482,6 +484,7 @@ const SceneTree = class {
482
484
  }
483
485
  : undefined);
484
486
  this.controller = new SceneTreeController(client, 100);
487
+ (_a = this.controller) === null || _a === void 0 ? void 0 : _a.setMetadataKeys(this.metadataKeys);
485
488
  }
486
489
  this.stateMap.onStateChangeDisposable = this.controller.onStateChange.on((state) => this.handleControllerStateChange(state));
487
490
  this.connectToViewer();
@@ -514,7 +517,7 @@ const SceneTree = class {
514
517
  * @ignore
515
518
  */
516
519
  render() {
517
- return (h(Host, null, h("div", { class: "header" }, h("slot", { name: "header" }, h("vertex-scene-tree-toolbar", { class: "search-toolbar" }, h("vertex-scene-tree-search", { controller: this.controller })))), this.errorDetails != null && this.renderError(this.errorDetails), this.errorDetails == null && (h("div", { class: "rows-scroll" }, this.showLoader && (h("slot", { name: "loading" }, h("vertex-viewer-spinner", { class: "loading", size: "md" }))), h("slot", null))), h("div", { class: "footer" }, h("slot", { name: "footer" }))));
520
+ return (h(Host, null, h("div", { class: "header" }, h("slot", { name: "header" }, h("vertex-scene-tree-toolbar", { class: "search-toolbar" }, h("vertex-scene-tree-search", { controller: this.controller })))), this.errorDetails != null && this.renderError(this.errorDetails), this.errorDetails == null && (h("div", { class: "rows-scroll" }, this.showLoader && (h("slot", { name: "loading" }, h("vertex-viewer-spinner", { class: "loading", size: "md" }))), this.showEmptyResults && (h("slot", { name: "empty-results" }, h("div", { class: "empty-results" }, "No Results Found."))), h("slot", null))), h("div", { class: "footer" }, h("slot", { name: "footer" }))));
518
521
  }
519
522
  renderError(details) {
520
523
  if (details.code !== SceneTreeErrorCode.SCENE_TREE_DISABLED) {
@@ -601,6 +604,7 @@ const SceneTree = class {
601
604
  }
602
605
  handleControllerStateChange(state) {
603
606
  this.showLoader = !!state.shouldShowLoading;
607
+ this.showEmptyResults = !!state.shouldShowEmptyResults;
604
608
  this.rows = state.rows;
605
609
  this.totalRows = state.totalRows;
606
610
  if (state.connection.type === 'failure') {