@vertexvis/viewer 1.0.1-canary.8 → 1.0.1-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 (122) hide show
  1. package/dist/cjs/loader.cjs.js +1 -1
  2. package/dist/cjs/{multiElementInteractionHandler-CV_R_zWs.js → multiElementInteractionHandler-DFzC3VJQ.js} +14 -11
  3. package/dist/cjs/multiElementInteractionHandler-DFzC3VJQ.js.map +1 -0
  4. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +20 -11
  5. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  6. package/dist/cjs/vertex-scene-tree.cjs.entry.js +18 -5
  7. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  8. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  9. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +7 -5
  10. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  11. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +6 -6
  12. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  13. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +5 -5
  14. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  15. package/dist/cjs/vertex-viewer.cjs.entry.js +18 -12
  16. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  17. package/dist/cjs/viewer.cjs.js +1 -1
  18. package/dist/collection/components/scene-tree/scene-tree.js +18 -5
  19. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  20. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +20 -11
  21. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  22. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +8 -6
  23. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
  24. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +7 -7
  25. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  26. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +6 -7
  27. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  28. package/dist/collection/lib/interactions/baseInteractionHandler.js +12 -9
  29. package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
  30. package/dist/collection/lib/interactions/mouseInteractions.js +17 -11
  31. package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
  32. package/dist/components/index.js +1 -1
  33. package/dist/components/{p-COS1Inc5.js → p-BQV-PVa_.js} +2 -2
  34. package/dist/components/p-BQV-PVa_.js.map +1 -0
  35. package/dist/components/p-CAQf9dsL.js +5 -0
  36. package/dist/components/p-CAQf9dsL.js.map +1 -0
  37. package/dist/components/{p-CEXF82El.js → p-CKQId0I1.js} +2 -2
  38. package/dist/components/p-CKQId0I1.js.map +1 -0
  39. package/dist/components/{p-CEHeeaoZ.js → p-CUGGgEIf.js} +2 -2
  40. package/dist/components/{p-CWieLCfP.js → p-CoCastpC.js} +2 -2
  41. package/dist/components/{p-BNHniQXm.js → p-ae0Zapzr.js} +2 -2
  42. package/dist/components/p-ae0Zapzr.js.map +1 -0
  43. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  44. package/dist/components/vertex-scene-tree.js +1 -1
  45. package/dist/components/vertex-scene-tree.js.map +1 -1
  46. package/dist/components/vertex-viewer-dom-renderer.js +1 -1
  47. package/dist/components/vertex-viewer-pin-group.js +1 -1
  48. package/dist/components/vertex-viewer-pin-label.js +1 -1
  49. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  50. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  51. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  52. package/dist/components/vertex-viewer-view-cube.js +1 -1
  53. package/dist/components/vertex-viewer.js +1 -1
  54. package/dist/components/vertex-viewer.js.map +1 -1
  55. package/dist/esm/{controller-zACO6f4n.js → controller-DCFz4xj6.js} +3 -3
  56. package/dist/esm/{controller-zACO6f4n.js.map → controller-DCFz4xj6.js.map} +1 -1
  57. package/dist/esm/index.js +1 -1
  58. package/dist/esm/index.mjs +1 -1
  59. package/dist/esm/loader.js +1 -1
  60. package/dist/esm/loader.mjs +1 -1
  61. package/dist/esm/{multiElementInteractionHandler-CJhrgviV.js → multiElementInteractionHandler-DjlrKVbu.js} +14 -11
  62. package/dist/esm/multiElementInteractionHandler-DjlrKVbu.js.map +1 -0
  63. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +20 -11
  64. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  65. package/dist/esm/vertex-scene-tree.entry.js +19 -6
  66. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  67. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  68. package/dist/esm/vertex-viewer-pin-group.entry.js +8 -6
  69. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  70. package/dist/esm/vertex-viewer-pin-label_2.entry.js +6 -6
  71. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  72. package/dist/esm/vertex-viewer-transform-widget.entry.js +5 -5
  73. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  74. package/dist/esm/vertex-viewer.entry.js +18 -12
  75. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  76. package/dist/esm/viewer.js +1 -1
  77. package/dist/types/components/scene-tree/scene-tree.d.ts +2 -0
  78. package/dist/types/components/scene-tree-table-layout/scene-tree-table-layout.d.ts +2 -0
  79. package/dist/types/components/viewer-pin-group/viewer-pin-group.d.ts +1 -0
  80. package/dist/types/components/viewer-transform-widget/viewer-transform-widget.d.ts +1 -1
  81. package/dist/types/lib/interactions/baseInteractionHandler.d.ts +1 -1
  82. package/dist/types/lib/interactions/mouseInteractions.d.ts +8 -2
  83. package/dist/viewer/index.esm.js +1 -1
  84. package/dist/viewer/p-07214ba9.entry.js +5 -0
  85. package/dist/viewer/p-07214ba9.entry.js.map +1 -0
  86. package/dist/viewer/p-1a463ace.entry.js +5 -0
  87. package/dist/viewer/p-1a463ace.entry.js.map +1 -0
  88. package/dist/viewer/p-9c18d87a.entry.js +5 -0
  89. package/dist/viewer/p-9c18d87a.entry.js.map +1 -0
  90. package/dist/viewer/{p-D4lmv56q.js → p-Dg5Yw3qK.js} +2 -2
  91. package/dist/viewer/{p-D4lmv56q.js.map → p-Dg5Yw3qK.js.map} +1 -1
  92. package/dist/viewer/{p-DkLznn4v.js → p-DwjktKp5.js} +2 -2
  93. package/dist/viewer/p-DwjktKp5.js.map +1 -0
  94. package/dist/viewer/{p-dcaf1cb9.entry.js → p-b8d8d308.entry.js} +2 -2
  95. package/dist/viewer/p-d26d4b99.entry.js +5 -0
  96. package/dist/viewer/{p-76cf5c2a.entry.js.map → p-d26d4b99.entry.js.map} +1 -1
  97. package/dist/viewer/{p-d4d044fc.entry.js → p-daecf887.entry.js} +2 -2
  98. package/dist/viewer/p-daecf887.entry.js.map +1 -0
  99. package/dist/viewer/{p-0cbadaa8.entry.js → p-fe2fdc83.entry.js} +2 -2
  100. package/dist/viewer/p-fe2fdc83.entry.js.map +1 -0
  101. package/dist/viewer/viewer.esm.js +1 -1
  102. package/package.json +7 -7
  103. package/dist/cjs/multiElementInteractionHandler-CV_R_zWs.js.map +0 -1
  104. package/dist/components/p-BNHniQXm.js.map +0 -1
  105. package/dist/components/p-BzhmEGZ5.js +0 -5
  106. package/dist/components/p-BzhmEGZ5.js.map +0 -1
  107. package/dist/components/p-CEXF82El.js.map +0 -1
  108. package/dist/components/p-COS1Inc5.js.map +0 -1
  109. package/dist/esm/multiElementInteractionHandler-CJhrgviV.js.map +0 -1
  110. package/dist/viewer/p-0cbadaa8.entry.js.map +0 -1
  111. package/dist/viewer/p-19c5eeaf.entry.js +0 -5
  112. package/dist/viewer/p-19c5eeaf.entry.js.map +0 -1
  113. package/dist/viewer/p-1a82245e.entry.js +0 -5
  114. package/dist/viewer/p-1a82245e.entry.js.map +0 -1
  115. package/dist/viewer/p-5ccf054e.entry.js +0 -5
  116. package/dist/viewer/p-5ccf054e.entry.js.map +0 -1
  117. package/dist/viewer/p-76cf5c2a.entry.js +0 -5
  118. package/dist/viewer/p-DkLznn4v.js.map +0 -1
  119. package/dist/viewer/p-d4d044fc.entry.js.map +0 -1
  120. /package/dist/components/{p-CEHeeaoZ.js.map → p-CUGGgEIf.js.map} +0 -0
  121. /package/dist/components/{p-CWieLCfP.js.map → p-CoCastpC.js.map} +0 -0
  122. /package/dist/viewer/{p-dcaf1cb9.entry.js.map → p-b8d8d308.entry.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scene-tree-table-layout.js","sourceRoot":"","sources":["../../../../../src/components/scene-tree-table-layout/scene-tree-table-layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport {\n Binding,\n ElementPool,\n generateInstanceFromTemplate,\n InstancedTemplate,\n} from '@vertexvis/html-templates';\n\nimport { readDOM } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\nimport { getSceneTreeViewportHeight } from '../scene-tree/lib/dom';\nimport { isLoadedRow, LoadedRow, Row } from '../scene-tree/lib/row';\nimport { RowDataProvider } from '../scene-tree/types';\nimport {\n DomScrollToOptions,\n getSceneTreeTableOffsetTop,\n getSceneTreeTableViewportWidth,\n scrollToTop,\n} from './lib/dom';\nimport { SceneTreeCellHoverController } from './lib/hover-controller';\nimport { restartTimeout } from './lib/window';\n\ninterface StateMap {\n columnElementPools?: WeakMap<\n HTMLVertexSceneTreeTableColumnElement,\n ElementPool\n >;\n headerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerListeners?: Array<(event: PointerEvent) => void>;\n\n viewportRows: Row[];\n\n headerHeight?: number;\n columnWidths: number[];\n columnWidthPercentages: number[];\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-layout',\n styleUrl: 'scene-tree-table-layout.css',\n shadow: true,\n})\nexport class SceneTreeTableLayout {\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * @internal\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * @internal\n */\n @Prop()\n public rows: Row[] = [];\n\n /**\n * @internal\n */\n @Prop()\n public totalRows = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public rowHeight = 24;\n\n /**\n * The number of offscreen rows above and below the viewport to render. Having\n * a higher number reduces the chance of the browser not displaying a row\n * while scrolling.\n *\n * This prop will be automatically populated based on the `overScanCount` prop\n * specified in the parent `<vertex-scene-tree />` element.\n */\n @Prop()\n public overScanCount = 25;\n\n /**\n * A callback that is invoked immediately before a row is about to be rendered.\n * This callback can return additional data that can be bound to in a\n * template.\n *\n * This prop will be automatically populated based on the `rowData` prop\n * specified in the parent `<vertex-scene-tree />` element.\n *\n * @example\n *\n * ```html\n * <script>\n * const table = document.querySelector('vertex-scene-tree-table');\n * table.rowData = (row) => {\n * return { func: () => console.log('row', row.node.name) };\n * }\n * </script>\n *\n * <vertex-scene-tree>\n * <vertex-scene-tree-table>\n * <vertex-scene-tree-table-column>\n * <template>\n * <button event:click=\"{{row.data.func}}\">Hi</button>\n * </template>\n * </vertex-scene-tree-table-column>\n * </vertex-scene-tree-table>\n * </vertex-scene-tree>\n * ```\n */\n @Prop()\n public rowData?: RowDataProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public scrollOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutHeight?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutWidth?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportStartIndex = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportEndIndex = 0;\n\n /**\n * @internal\n */\n @Event()\n public layoutRendered!: EventEmitter<void>;\n\n /**\n * An event that is emitted when the columns of this `<vertex-scene-tree-table-layout>`\n * are resized with an array containing the widths of the columns in pixels.\n */\n @Event({ bubbles: true })\n public columnsResized!: EventEmitter<number[]>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private columnGridLayout = '1fr';\n\n @State()\n private columnGridFixedLayout = '';\n\n @State()\n private isComputingCellHeight = true;\n\n @State()\n private lastDividerPointerPosition?: Point.Point;\n\n @State()\n private resizingColumnIndex?: number;\n\n @State()\n private isScrolling = false;\n\n @State()\n private scrollTimer: number | undefined;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State()\n private stateMap: StateMap = {\n viewportRows: [],\n columnWidths: [],\n columnWidthPercentages: [],\n };\n\n private lastStartIndex = 0;\n private resizeObserver?: ResizeObserver;\n private headerResizeObserver?: ResizeObserver;\n\n private tableElement?: HTMLDivElement;\n private headerElement?: HTMLDivElement;\n private columnElements: HTMLVertexSceneTreeTableColumnElement[] = [];\n\n private cellHoverController = new SceneTreeCellHoverController();\n\n public componentWillLoad(): void {\n this.updateColumnElements();\n this.createPools();\n\n this.headerResizeObserver = new ResizeObserver(() => {\n this.stateMap.headerHeight = undefined;\n this.computeHeaderHeight();\n this.updateLayoutPosition();\n });\n\n this.resizeObserver = new ResizeObserver(() => {\n this.updateLayoutPosition();\n this.clearLayoutHeight();\n this.clearLayoutWidth();\n this.recomputeColumnWidths();\n this.computeColumnGridLayout();\n });\n }\n\n public async componentDidLoad(): Promise<void> {\n this.computeInitialColumnWidths();\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.computeCellHeight();\n this.computeHeaderHeight();\n this.rebindHeaderData();\n\n this.tableElement?.addEventListener('scroll', this.handleScrollChanged, {\n passive: true,\n });\n\n if (this.headerElement != null) {\n this.headerResizeObserver?.observe(this.headerElement);\n }\n\n this.resizeObserver?.observe(this.hostEl);\n }\n\n public async componentWillRender(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n public componentDidRender(): void {\n this.layoutColumns();\n\n this.layoutRendered.emit();\n }\n\n public async componentDidUpdate(): Promise<void> {\n if (this.isComputingCellHeight) {\n await this.computeCellHeight();\n }\n }\n\n public disconnectedCallback(): void {\n this.tableElement?.removeEventListener('scroll', this.handleScrollChanged);\n this.removeDividerDragListeners();\n this.headerResizeObserver?.disconnect();\n this.resizeObserver?.disconnect();\n this.stateMap.columnWidths = [];\n this.stateMap.columnWidthPercentages = [];\n }\n\n @Watch('rows')\n @Watch('totalRows')\n @Watch('rowHeight')\n protected async handleViewportRowsPropsChanged(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n /**\n * Scrolls the table to the provided top value.\n *\n * @param top The position to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToPosition(\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n ): Promise<void> {\n if (this.tableElement != null) {\n scrollToTop(this.tableElement, top, options);\n }\n }\n\n /**\n * Attempts to compute the height of templated cells. Used for internals\n * or testing.\n *\n * @internal\n * @ignore\n */\n @Method()\n public async attemptComputeCellHeight(): Promise<void> {\n this.computeCellHeight();\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 const canComputeIndices =\n viewportHeight != null &&\n viewportHeight > 0 &&\n !this.isComputingCellHeight;\n\n if (canComputeIndices) {\n const viewportCount = Math.ceil(viewportHeight / this.rowHeight);\n\n const viewportStartIndex = Math.floor(this.scrollOffset / this.rowHeight);\n const viewportEndIndex = viewportStartIndex + viewportCount;\n\n const startIndex = Math.max(0, viewportStartIndex - this.overScanCount);\n const endIndex = Math.min(\n this.totalRows - 1,\n viewportEndIndex + this.overScanCount\n );\n\n const rows = this.getViewportRows(startIndex, endIndex);\n\n this.viewportStartIndex = startIndex;\n this.viewportEndIndex = endIndex;\n this.stateMap.viewportRows = rows;\n }\n }\n\n private async computeAndUpdateViewportRows(): Promise<void> {\n this.computeViewportRows();\n\n if (this.controller?.isConnected && this.totalRows > 0) {\n await this.controller.updateActiveRowRange(\n this.viewportStartIndex,\n this.viewportEndIndex\n );\n }\n }\n\n private layoutColumns = (): void => {\n const visibleRowCount = this.viewportEndIndex - this.viewportStartIndex + 1;\n const diff = this.viewportStartIndex - this.lastStartIndex;\n this.lastStartIndex = this.viewportStartIndex;\n\n this.iterateColumns((col, pool, colIndex) => {\n pool.updateElements(visibleRowCount);\n\n if (diff > 0) {\n pool.swapHeadToTail(diff);\n } else {\n pool.swapTailToHead(-diff);\n }\n\n col.style.minHeight = `${this.rowHeight * this.totalRows}px`;\n\n const cellPaddingLeft =\n colIndex === 0\n ? (depth: number) => `calc(${depth} * 0.5rem)`\n : () => `0`;\n\n pool.iterateElements((el, binding, rowIndex) => {\n const row = this.stateMap.viewportRows[rowIndex];\n\n if (isLoadedRow(row)) {\n this.updateCell(row, el, binding, rowIndex, cellPaddingLeft);\n }\n });\n });\n };\n\n private updateCell = (\n row: LoadedRow,\n cell: HTMLElement,\n binding: Binding,\n rowIndex: number,\n cellPaddingLeft: (depth: number) => string\n ): void => {\n cell.style.position = 'absolute';\n cell.style.top = `${\n (this.viewportStartIndex + rowIndex) * this.rowHeight\n }px`;\n cell.style.boxSizing = 'border-box';\n cell.style.height = `${this.rowHeight}px`;\n cell.style.width = '100%';\n cell.style.paddingLeft = cellPaddingLeft(row.node.depth);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n (cell as any).tree = this.tree;\n (cell as any).node = row.node;\n (cell as any).hoverController = this.cellHoverController;\n (cell as any).isScrolling = this.isScrolling;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n binding.bind(row);\n };\n\n private updateLayoutPosition = (): void => {\n readDOM(() => {\n if (this.tableElement != null) {\n this.layoutOffset = getSceneTreeTableOffsetTop(this.tableElement);\n }\n });\n };\n\n private recomputeColumnWidths = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map(\n (w) => w * layoutWidth\n );\n\n this.columnsResized.emit(this.stateMap.columnWidths);\n }\n };\n\n private recomputeColumnPercentages = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidthPercentages = this.stateMap.columnWidths.map(\n (w) => w / layoutWidth\n );\n }\n };\n\n private computeInitialColumnWidths = (): void => {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n const columnWidthSum = this.stateMap.columnWidths.reduce(\n (result, w) => result + w,\n 0\n );\n const scaledColumnWidths = this.stateMap.columnWidths.map(\n (w) => w * (layoutWidth / columnWidthSum)\n );\n\n this.stateMap.columnWidthPercentages = scaledColumnWidths.map(\n (w) => w / layoutWidth\n );\n this.stateMap.columnWidths = scaledColumnWidths;\n }\n };\n\n private updateColumnElements = (): void => {\n this.columnElements = Array.from(\n this.hostEl.querySelectorAll('vertex-scene-tree-table-column')\n ) as Array<HTMLVertexSceneTreeTableColumnElement>;\n };\n\n private createPools(): void {\n if (this.stateMap.columnElementPools == null) {\n this.stateMap.columnElementPools = this.columnElements.reduce(\n (map, c) =>\n map.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n ),\n new WeakMap()\n );\n }\n }\n\n private recreateColumnPools(): void {\n this.columnElements.forEach((c) => {\n if (this.stateMap.columnElementPools?.get(c) == null) {\n this.stateMap.columnElementPools?.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n );\n } else {\n this.stateMap.columnElementPools\n .get(c)\n ?.updateElementFactory(() => this.createColumnCellInstance(c));\n }\n });\n }\n\n private iterateColumns(\n f: (\n column: HTMLVertexSceneTreeTableColumnElement,\n pool: ElementPool,\n index: number\n ) => void\n ): void {\n this.columnElements.forEach((column, i) => {\n const pool = this.stateMap.columnElementPools?.get(column);\n if (pool != null) {\n f(column, pool, i);\n } else {\n throw new Error('Cannot find pool for column');\n }\n });\n }\n\n private ensureDividerTemplateDefined(): void {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template == null) {\n const defaultDividerTemplate = document.createElement('template');\n defaultDividerTemplate.slot = 'divider';\n defaultDividerTemplate.innerHTML = `\n <vertex-scene-tree-table-resize-divider slot=\"divider\">\n </vertex-scene-tree-table-resize-divider>\n `;\n this.hostEl.appendChild(defaultDividerTemplate);\n }\n }\n\n private createHeaderInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> | undefined {\n const template = column.querySelector(\n 'template[slot=\"header\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n }\n }\n\n private createDividerInstance(): InstancedTemplate<HTMLElement> {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Table is missing divider template element');\n }\n }\n\n private createColumnCellInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> {\n const template = column.querySelector(\n 'template:not([slot=\"header\"])'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Column is missing cell template element');\n }\n }\n\n private computeCellHeight = async (): Promise<void> => {\n if (this.isComputingCellHeight && this.columnElements.length > 0) {\n const dummyData: LoadedRow = {\n index: 0,\n node: {\n id: { hex: '' },\n name: 'Dummy row',\n expanded: false,\n selected: false,\n visible: false,\n partiallyVisible: false,\n isLeaf: false,\n depth: 0,\n columnsList: [],\n filterHit: false,\n hasGeometry: 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 if (height === 0) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n }\n\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n ''\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging'\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const resizingIndex = this.resizingColumnIndex;\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex ? w - diff.x : w\n );\n\n if (resizingIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex + 1 ? w + diff.x : w\n );\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n this.recomputeColumnWidths();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = async (event: Event): Promise<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 await this.computeAndUpdateViewportRows();\n };\n\n private getViewportRows(startIndex: number, endIndex: number): Row[] {\n const rows = this.rows.slice(startIndex, endIndex + 1);\n return rows.map((row) => (row != null ? this.populateRowData(row) : row));\n }\n\n private populateRowData(row: Row): Row {\n if (this.rowData != null && row != null) {\n const data = this.rowData?.(row) || {};\n return { ...row, data };\n } else {\n return row;\n }\n }\n\n private getLayoutHeight(): number | undefined {\n if (this.layoutHeight == null && this.tableElement != null) {\n this.layoutHeight = getSceneTreeViewportHeight(this.tableElement);\n }\n return this.layoutHeight;\n }\n\n private getLayoutWidth(): number | undefined {\n if (this.layoutWidth == null) {\n const computedWidth = getSceneTreeTableViewportWidth(this.hostEl);\n if (computedWidth > 0) {\n this.layoutWidth = computedWidth;\n }\n }\n return this.layoutWidth;\n }\n\n private clearLayoutHeight(): void {\n this.layoutHeight = undefined;\n }\n\n private clearLayoutWidth(): void {\n this.layoutWidth = undefined;\n }\n}\n"]}
1
+ {"version":3,"file":"scene-tree-table-layout.js","sourceRoot":"","sources":["../../../../../src/components/scene-tree-table-layout/scene-tree-table-layout.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport {\n Binding,\n ElementPool,\n generateInstanceFromTemplate,\n InstancedTemplate,\n} from '@vertexvis/html-templates';\n\nimport { readDOM } from '../../lib/stencil';\nimport { SceneTreeController } from '../scene-tree/lib/controller';\nimport { getSceneTreeViewportHeight } from '../scene-tree/lib/dom';\nimport { isLoadedRow, LoadedRow, Row } from '../scene-tree/lib/row';\nimport { RowDataProvider } from '../scene-tree/types';\nimport {\n DomScrollToOptions,\n getSceneTreeTableOffsetTop,\n getSceneTreeTableViewportWidth,\n scrollToTop,\n} from './lib/dom';\nimport { SceneTreeCellHoverController } from './lib/hover-controller';\nimport { restartTimeout } from './lib/window';\n\ninterface StateMap {\n columnElementPools?: WeakMap<\n HTMLVertexSceneTreeTableColumnElement,\n ElementPool\n >;\n headerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerInstances?: Array<InstancedTemplate<HTMLElement>>;\n headerDividerListeners?: Array<(event: PointerEvent) => void>;\n\n viewportRows: Row[];\n\n headerHeight?: number;\n columnWidths: number[];\n columnWidthPercentages: number[];\n}\n\n@Component({\n tag: 'vertex-scene-tree-table-layout',\n styleUrl: 'scene-tree-table-layout.css',\n shadow: true,\n})\nexport class SceneTreeTableLayout {\n /**\n * A reference to the scene tree to perform operations for interactions. Such\n * as expansion, visibility and selection.\n */\n @Prop()\n public tree?: HTMLVertexSceneTreeElement;\n\n /**\n * @internal\n */\n @Prop()\n public controller?: SceneTreeController;\n\n /**\n * @internal\n */\n @Prop()\n public rows: Row[] = [];\n\n /**\n * @internal\n */\n @Prop()\n public totalRows = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public rowHeight = 24;\n\n /**\n * The number of offscreen rows above and below the viewport to render. Having\n * a higher number reduces the chance of the browser not displaying a row\n * while scrolling.\n *\n * This prop will be automatically populated based on the `overScanCount` prop\n * specified in the parent `<vertex-scene-tree />` element.\n */\n @Prop()\n public overScanCount = 25;\n\n /**\n * A callback that is invoked immediately before a row is about to be rendered.\n * This callback can return additional data that can be bound to in a\n * template.\n *\n * This prop will be automatically populated based on the `rowData` prop\n * specified in the parent `<vertex-scene-tree />` element.\n *\n * @example\n *\n * ```html\n * <script>\n * const table = document.querySelector('vertex-scene-tree-table');\n * table.rowData = (row) => {\n * return { func: () => console.log('row', row.node.name) };\n * }\n * </script>\n *\n * <vertex-scene-tree>\n * <vertex-scene-tree-table>\n * <vertex-scene-tree-table-column>\n * <template>\n * <button event:click=\"{{row.data.func}}\">Hi</button>\n * </template>\n * </vertex-scene-tree-table-column>\n * </vertex-scene-tree-table>\n * </vertex-scene-tree>\n * ```\n */\n @Prop()\n public rowData?: RowDataProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public scrollOffset = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutHeight?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public layoutWidth?: number;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportStartIndex = 0;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public viewportEndIndex = 0;\n\n /**\n * @internal\n */\n @Event()\n public layoutRendered!: EventEmitter<void>;\n\n /**\n * An event that is emitted when the columns of this `<vertex-scene-tree-table-layout>`\n * are resized with an array containing the widths of the columns in pixels.\n */\n @Event({ bubbles: true })\n public columnsResized!: EventEmitter<number[]>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private columnGridLayout = '1fr';\n\n @State()\n private columnGridFixedLayout = '';\n\n @State()\n private isComputingCellHeight = true;\n\n @State()\n private lastDividerPointerPosition?: Point.Point;\n\n @State()\n private resizingColumnIndex?: number;\n\n @State()\n private isScrolling = false;\n\n @State()\n private scrollTimer: number | undefined;\n\n /**\n * This stores internal state that you want to preserve across live-reloads,\n * but shouldn't trigger a refresh if the data changes. Marking this with\n * @State to allow to preserve state across live-reloads.\n */\n @State()\n private stateMap: StateMap = {\n viewportRows: [],\n columnWidths: [],\n columnWidthPercentages: [],\n };\n\n private lastStartIndex = 0;\n private resizeObserver?: ResizeObserver;\n private headerResizeObserver?: ResizeObserver;\n\n private tableElement?: HTMLDivElement;\n private headerElement?: HTMLDivElement;\n private columnElements: HTMLVertexSceneTreeTableColumnElement[] = [];\n\n private cellHoverController = new SceneTreeCellHoverController();\n\n public componentWillLoad(): void {\n this.updateColumnElements();\n this.createPools();\n this.initializeColumnLayout();\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 async componentDidLoad(): Promise<void> {\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 // These measurements require rendered DOM, but mutating tracked values\n // directly in componentDidLoad triggers Stencil dev warnings.\n await Promise.resolve();\n await this.initializeMeasuredLayout();\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 async componentDidUpdate(): Promise<void> {\n if (this.isComputingCellHeight) {\n await this.computeCellHeight();\n }\n }\n\n public disconnectedCallback(): void {\n this.tableElement?.removeEventListener('scroll', this.handleScrollChanged);\n this.removeDividerDragListeners();\n this.headerResizeObserver?.disconnect();\n this.resizeObserver?.disconnect();\n this.stateMap.columnWidths = [];\n this.stateMap.columnWidthPercentages = [];\n }\n\n @Watch('rows')\n @Watch('totalRows')\n @Watch('rowHeight')\n protected async handleViewportRowsPropsChanged(): Promise<void> {\n await this.computeAndUpdateViewportRows();\n }\n\n /**\n * Scrolls the table to the provided top value.\n *\n * @param top The position to scroll to.\n * @param options A set of options to configure the scrolling behavior.\n */\n @Method()\n public async scrollToPosition(\n top: number,\n options: Pick<DomScrollToOptions, 'behavior'>\n ): Promise<void> {\n if (this.tableElement != null) {\n scrollToTop(this.tableElement, top, options);\n }\n }\n\n /**\n * Attempts to compute the height of templated cells. Used for internals\n * or testing.\n *\n * @internal\n * @ignore\n */\n @Method()\n public async attemptComputeCellHeight(): Promise<void> {\n this.computeCellHeight();\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 const canComputeIndices =\n viewportHeight != null &&\n viewportHeight > 0 &&\n !this.isComputingCellHeight;\n\n if (canComputeIndices) {\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 initializeColumnLayout(): void {\n this.computeInitialColumnWidths();\n this.computeColumnGridLayout();\n this.ensureDividerTemplateDefined();\n this.rebindHeaderData();\n }\n\n private async initializeMeasuredLayout(): Promise<void> {\n await this.computeCellHeight();\n this.computeHeaderHeight();\n }\n\n private async computeAndUpdateViewportRows(): Promise<void> {\n this.computeViewportRows();\n\n if (this.controller?.isConnected && this.totalRows > 0) {\n await this.controller.updateActiveRowRange(\n this.viewportStartIndex,\n this.viewportEndIndex\n );\n }\n }\n\n private layoutColumns = (): void => {\n const visibleRowCount = this.viewportEndIndex - this.viewportStartIndex + 1;\n const diff = this.viewportStartIndex - this.lastStartIndex;\n this.lastStartIndex = this.viewportStartIndex;\n\n this.iterateColumns((col, pool, colIndex) => {\n pool.updateElements(visibleRowCount);\n\n if (diff > 0) {\n pool.swapHeadToTail(diff);\n } else {\n pool.swapTailToHead(-diff);\n }\n\n col.style.minHeight = `${this.rowHeight * this.totalRows}px`;\n\n const cellPaddingLeft =\n colIndex === 0\n ? (depth: number) => `calc(${depth} * 0.5rem)`\n : () => `0`;\n\n pool.iterateElements((el, binding, rowIndex) => {\n const row = this.stateMap.viewportRows[rowIndex];\n\n if (isLoadedRow(row)) {\n this.updateCell(row, el, binding, rowIndex, cellPaddingLeft);\n }\n });\n });\n };\n\n private updateCell = (\n row: LoadedRow,\n cell: HTMLElement,\n binding: Binding,\n rowIndex: number,\n cellPaddingLeft: (depth: number) => string\n ): void => {\n cell.style.position = 'absolute';\n cell.style.top = `${\n (this.viewportStartIndex + rowIndex) * this.rowHeight\n }px`;\n cell.style.boxSizing = 'border-box';\n cell.style.height = `${this.rowHeight}px`;\n cell.style.width = '100%';\n cell.style.paddingLeft = cellPaddingLeft(row.node.depth);\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n (cell as any).tree = this.tree;\n (cell as any).node = row.node;\n (cell as any).hoverController = this.cellHoverController;\n (cell as any).isScrolling = this.isScrolling;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n binding.bind(row);\n };\n\n private updateLayoutPosition = (): void => {\n readDOM(() => {\n if (this.tableElement != null) {\n this.layoutOffset = getSceneTreeTableOffsetTop(this.tableElement);\n }\n });\n };\n\n private recomputeColumnWidths = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidths = this.stateMap.columnWidthPercentages.map(\n (w) => w * layoutWidth\n );\n\n this.columnsResized.emit(this.stateMap.columnWidths);\n }\n };\n\n private recomputeColumnPercentages = (): void => {\n const layoutWidth = this.getLayoutWidth();\n if (\n layoutWidth != null &&\n this.stateMap.columnWidths.length ===\n this.stateMap.columnWidthPercentages.length\n ) {\n this.stateMap.columnWidthPercentages = this.stateMap.columnWidths.map(\n (w) => w / layoutWidth\n );\n }\n };\n\n private computeInitialColumnWidths = (): void => {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n const columnWidthSum = this.stateMap.columnWidths.reduce(\n (result, w) => result + w,\n 0\n );\n const scaledColumnWidths = this.stateMap.columnWidths.map(\n (w) => w * (layoutWidth / columnWidthSum)\n );\n\n this.stateMap.columnWidthPercentages = scaledColumnWidths.map(\n (w) => w / layoutWidth\n );\n this.stateMap.columnWidths = scaledColumnWidths;\n }\n };\n\n private updateColumnElements = (): void => {\n this.columnElements = Array.from(\n this.hostEl.querySelectorAll('vertex-scene-tree-table-column')\n ) as Array<HTMLVertexSceneTreeTableColumnElement>;\n };\n\n private createPools(): void {\n if (this.stateMap.columnElementPools == null) {\n this.stateMap.columnElementPools = this.columnElements.reduce(\n (map, c) =>\n map.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n ),\n new WeakMap()\n );\n }\n }\n\n private recreateColumnPools(): void {\n this.columnElements.forEach((c) => {\n if (this.stateMap.columnElementPools?.get(c) == null) {\n this.stateMap.columnElementPools?.set(\n c,\n new ElementPool(c, () => this.createColumnCellInstance(c))\n );\n } else {\n this.stateMap.columnElementPools\n .get(c)\n ?.updateElementFactory(() => this.createColumnCellInstance(c));\n }\n });\n }\n\n private iterateColumns(\n f: (\n column: HTMLVertexSceneTreeTableColumnElement,\n pool: ElementPool,\n index: number\n ) => void\n ): void {\n this.columnElements.forEach((column, i) => {\n const pool = this.stateMap.columnElementPools?.get(column);\n if (pool != null) {\n f(column, pool, i);\n } else {\n throw new Error('Cannot find pool for column');\n }\n });\n }\n\n private ensureDividerTemplateDefined(): void {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template == null) {\n const defaultDividerTemplate = document.createElement('template');\n defaultDividerTemplate.slot = 'divider';\n defaultDividerTemplate.innerHTML = `\n <vertex-scene-tree-table-resize-divider slot=\"divider\">\n </vertex-scene-tree-table-resize-divider>\n `;\n this.hostEl.appendChild(defaultDividerTemplate);\n }\n }\n\n private createHeaderInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> | undefined {\n const template = column.querySelector(\n 'template[slot=\"header\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n }\n }\n\n private createDividerInstance(): InstancedTemplate<HTMLElement> {\n const template = this.hostEl.querySelector(\n 'template[slot=\"divider\"]'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Table is missing divider template element');\n }\n }\n\n private createColumnCellInstance(\n column: HTMLVertexSceneTreeTableColumnElement\n ): InstancedTemplate<HTMLElement> {\n const template = column.querySelector(\n 'template:not([slot=\"header\"])'\n ) as HTMLTemplateElement;\n if (template != null) {\n return generateInstanceFromTemplate(template);\n } else {\n throw new Error('Column is missing cell template element');\n }\n }\n\n private computeCellHeight = async (): Promise<void> => {\n if (this.isComputingCellHeight && this.columnElements.length > 0) {\n const dummyData: LoadedRow = {\n index: 0,\n node: {\n id: { hex: '' },\n name: 'Dummy row',\n expanded: false,\n selected: false,\n visible: false,\n partiallyVisible: false,\n isLeaf: false,\n depth: 0,\n columnsList: [],\n filterHit: false,\n hasGeometry: 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 if (height === 0) {\n height = await new Promise((resolve) => {\n setTimeout(() => resolve(element.getBoundingClientRect().height), 5);\n });\n }\n\n this.rowHeight = height ?? this.rowHeight;\n element.remove();\n this.isComputingCellHeight = this.rowHeight === 0;\n }\n };\n\n private computeHeaderHeight = (): void => {\n if (this.stateMap.headerHeight == null) {\n this.stateMap.headerHeight =\n this.headerElement?.getBoundingClientRect().height;\n this.hostEl.style.setProperty(\n '--header-height',\n `${this.stateMap.headerHeight}px`\n );\n }\n };\n\n private computeColumnGridLayout = (): void => {\n if (this.stateMap.columnWidths.length === 0) {\n this.stateMap.columnWidths = this.columnElements.map(\n (c) => c.initialWidth ?? 100\n );\n }\n\n const layoutWidth = this.getLayoutWidth();\n if (layoutWidth != null) {\n if (this.stateMap.columnWidthPercentages.length === 0) {\n this.stateMap.columnWidthPercentages = this.columnElements.map(\n (c) => (c.initialWidth ?? 100) / layoutWidth\n );\n }\n }\n\n /**\n * This layout uses `1fr` instead of the final column width to\n * allow the final column to shrink when a scrollbar appears.\n *\n * This flex behavior is not desired for the header and divider\n * elements since they are not scrollable, and `columnGridFixedLayout`\n * should be used instead.\n */\n this.columnGridLayout = `${this.stateMap.columnWidths\n .slice(0, -1)\n .reduce((res, w) => `${res} ${w}px`, '')} 1fr`;\n\n this.columnGridFixedLayout = `${this.stateMap.columnWidths.reduce(\n (res, w) => `${res} ${w}px`,\n ''\n )}`;\n };\n\n private bindHeaderData = (): void => {\n if (this.stateMap.headerInstances == null) {\n this.stateMap.headerInstances = this.columnElements\n .map((c, i) => {\n const instance = this.createHeaderInstance(c);\n\n if (instance != null) {\n instance.element.style.paddingRight =\n i === this.columnElements.length - 1\n ? `0`\n : `var(--scene-tree-table-column-gap)`;\n instance.element.slot = 'header';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n }\n\n return instance;\n })\n .filter((i) => i != null) as Array<InstancedTemplate<HTMLElement>>;\n }\n\n if (this.stateMap.headerDividerInstances == null) {\n this.stateMap.headerDividerInstances = this.columnElements\n .slice(0, -1)\n .map((_, i) => {\n const instance = this.createDividerInstance();\n\n instance.element.slot = 'divider';\n instance.element.style.position = 'absolute';\n instance.element.style.right = '0';\n instance.element.style.pointerEvents = 'auto';\n instance.element.style.gridColumnStart = `${i + 1}`;\n instance.element.style.gridColumnEnd = `${i + 2}`;\n this.hostEl?.appendChild(instance.element);\n\n return instance;\n });\n }\n };\n\n private rebindHeaderData = (): void => {\n this.removeDividerDragListeners();\n\n this.stateMap.headerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerDividerInstances?.forEach((i) => i.element.remove());\n this.stateMap.headerInstances = undefined;\n this.stateMap.headerDividerInstances = undefined;\n\n this.bindHeaderData();\n this.addDividerDragListeners();\n };\n\n private addDividerDragListeners(): void {\n this.stateMap.headerDividerListeners =\n this.stateMap.headerDividerInstances?.map((d, i) => {\n const listener = this.createDividerPointerDownHandler(i);\n\n d.element.addEventListener('pointerdown', listener);\n\n return listener;\n });\n }\n\n private removeDividerDragListeners(): void {\n if (this.stateMap.headerDividerListeners != null) {\n const listeners = this.stateMap.headerDividerListeners;\n\n this.stateMap.headerDividerInstances?.forEach((d, i) => {\n const listener = listeners[i];\n if (listener != null) {\n d.element.removeEventListener('pointerdown', listener);\n }\n });\n this.stateMap.headerDividerListeners = undefined;\n }\n }\n\n private createDividerPointerDownHandler = (\n index: number\n ): ((event: PointerEvent) => void) => {\n return (event: PointerEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n\n this.lastDividerPointerPosition = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n this.resizingColumnIndex = index;\n this.stateMap.headerDividerInstances?.[index]?.element.classList.add(\n 'dragging'\n );\n\n window.addEventListener('pointermove', this.handleDividerPointerMove);\n window.addEventListener('pointerup', this.handleDividerPointerUp);\n };\n };\n\n private handleDividerPointerMove = (event: PointerEvent): void => {\n const current = Point.create(\n Math.floor(event.clientX),\n Math.floor(event.clientY)\n );\n\n if (\n this.lastDividerPointerPosition != null &&\n this.resizingColumnIndex != null\n ) {\n const resizingIndex = this.resizingColumnIndex;\n const diff = Point.subtract(this.lastDividerPointerPosition, current);\n\n if (Math.abs(diff.x) >= 1 && this.isValidResize(diff, resizingIndex)) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex ? w - diff.x : w\n );\n\n if (resizingIndex + 1 < this.stateMap.columnWidths.length) {\n this.stateMap.columnWidths = this.stateMap.columnWidths.map((w, i) =>\n i === resizingIndex + 1 ? w + diff.x : w\n );\n }\n\n this.lastDividerPointerPosition = current;\n this.computeColumnGridLayout();\n }\n }\n };\n\n private handleDividerPointerUp = (): void => {\n if (this.resizingColumnIndex != null) {\n this.stateMap.headerDividerInstances?.[\n this.resizingColumnIndex\n ]?.element.classList.remove('dragging');\n }\n this.lastDividerPointerPosition = undefined;\n this.resizingColumnIndex = undefined;\n\n this.recomputeColumnPercentages();\n this.recomputeColumnWidths();\n\n window.removeEventListener('pointermove', this.handleDividerPointerMove);\n window.removeEventListener('pointerup', this.handleDividerPointerUp);\n };\n\n private isValidResize = (diff: Point.Point, index: number): boolean => {\n const currentColumn = this.columnElements[index];\n const nextColumn = this.columnElements[index + 1];\n const currentWidth = this.stateMap.columnWidths[index];\n const nextWidth = this.stateMap.columnWidths[index + 1];\n const currentMinWidth = currentColumn.minWidth ?? 0;\n const currentMaxWidth = currentColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n const nextMinWidth = nextColumn.minWidth ?? 0;\n const nextMaxWidth = nextColumn.maxWidth ?? Number.MAX_SAFE_INTEGER;\n\n const currentIsValid =\n currentWidth - diff.x > currentMinWidth &&\n currentWidth - diff.x < currentMaxWidth;\n const nextIsValid =\n nextColumn != null\n ? nextWidth + diff.x > nextMinWidth && nextWidth + diff.x < nextMaxWidth\n : true;\n\n return currentIsValid && nextIsValid;\n };\n\n private handleScrollChanged = async (event: Event): Promise<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 await 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"]}
@@ -45,12 +45,14 @@ export class ViewerPinGroup {
45
45
  this.invalidateStateCounter = this.invalidateStateCounter + 1;
46
46
  };
47
47
  }
48
- componentDidLoad() {
49
- var _a;
50
- this.setLabelObserver();
48
+ componentWillLoad() {
51
49
  if (this.pinController == null) {
52
50
  this.pinController = new PinController(this.pinModel);
53
51
  }
52
+ }
53
+ componentDidLoad() {
54
+ var _a;
55
+ this.setLabelObserver();
54
56
  if (this.selected) {
55
57
  (_a = this.labelEl) === null || _a === void 0 ? void 0 : _a.setFocus();
56
58
  }
@@ -78,12 +80,12 @@ export class ViewerPinGroup {
78
80
  throw new Error('Unable to draw pin');
79
81
  }
80
82
  const { pinPoint, labelPoint } = this.computePinPoints(this.pin);
81
- return (h(Fragment, { key: 'b26f95c0e4b86b263eca80c5db8576ef1c787b26' }, h("vertex-viewer-dom-element", { key: '9fcb9d0f55f9abb3397db4051ed59c7a05d4ae6a', "data-testid": `drawn-pin-${this.pin.id}`, position: this.pin.worldPosition, onPointerDown: async () => {
83
+ return (h(Fragment, { key: 'e3a02afe3d6a71677e15a9b4d31251970cb9a85e' }, h("vertex-viewer-dom-element", { key: '182ec8f3fb4440045d8d9afef16dcb182087e4dd', "data-testid": `drawn-pin-${this.pin.id}`, position: this.pin.worldPosition, onPointerDown: async () => {
82
84
  var _a;
83
85
  await ((_a = this.labelEl) === null || _a === void 0 ? void 0 : _a.submit());
84
86
  this.selectPin();
85
87
  this.handleAnchorPointerDown();
86
- }, detachedOff: false }, h(PinRenderer, { key: '2264652f4c83539f47af324f6937fb6581edafe1', pin: this.pin, selected: this.selected, occluded: this.occluded, detached: this.detached })), isTextPin(this.pin) && !this.occluded && !this.detached && (h(Fragment, { key: '04c86f573b99fb320b0a651dc903131e6654bd9e' }, h("vertex-viewer-pin-label-line", { key: 'cec6ee8195fba5fadd9e1b272abd61b6b6dd05c6', id: `pin-label-line-${(_a = this.pin) === null || _a === void 0 ? void 0 : _a.id}`, pinPoint: pinPoint, pin: this.pin, labelPoint: labelPoint, onPointerDown: () => this.selectPin() }), h("vertex-viewer-pin-label", { key: '556a36ac8e9046b0e40c6973c1ecf47319f28ab6', pin: this.pin, ref: (el) => (this.labelEl = el), elementBounds: this.elementBounds, pinController: this.pinController, onPointerDown: () => this.selectPin() })))));
88
+ }, detachedOff: false }, h(PinRenderer, { key: '53368cba2d76f71dbdb367760ede137d4b1c3a9e', pin: this.pin, selected: this.selected, occluded: this.occluded, detached: this.detached })), isTextPin(this.pin) && !this.occluded && !this.detached && (h(Fragment, { key: '5318ed3e3afb2680ec4c4b2050dfb34b663ebd08' }, h("vertex-viewer-pin-label-line", { key: 'a84145a009f83969b47deef61649d65dd594d1ce', id: `pin-label-line-${(_a = this.pin) === null || _a === void 0 ? void 0 : _a.id}`, pinPoint: pinPoint, pin: this.pin, labelPoint: labelPoint, onPointerDown: () => this.selectPin() }), h("vertex-viewer-pin-label", { key: 'efce5f94d0e1e7e3803b089a94f0e23671a0f6f4', pin: this.pin, ref: (el) => (this.labelEl = el), elementBounds: this.elementBounds, pinController: this.pinController, onPointerDown: () => this.selectPin() })))));
87
89
  }
88
90
  setLabelObserver() {
89
91
  if (this.labelEl != null) {
@@ -271,7 +273,7 @@ export class ViewerPinGroup {
271
273
  },
272
274
  "pinController": {
273
275
  "type": "unknown",
274
- "mutable": false,
276
+ "mutable": true,
275
277
  "complexType": {
276
278
  "original": "PinController",
277
279
  "resolved": "PinController | undefined",
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-pin-group.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-group/viewer-pin-group.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop()\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"]}
1
+ {"version":3,"file":"viewer-pin-group.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-group/viewer-pin-group.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"]}
@@ -159,6 +159,9 @@ export class VertexPinLabel {
159
159
  var _a, _b;
160
160
  this.value = (_b = (_a = this.pin) === null || _a === void 0 ? void 0 : _a.label.text) !== null && _b !== void 0 ? _b : '';
161
161
  this.computeScreenPosition();
162
+ if (this.pinController == null) {
163
+ this.pinController = new PinController(new PinModel());
164
+ }
162
165
  }
163
166
  componentDidLoad() {
164
167
  this.resizeObserver = new ResizeObserver(() => {
@@ -171,9 +174,6 @@ export class VertexPinLabel {
171
174
  if (this.contentEl != null) {
172
175
  this.contentResizeObserver.observe(this.contentEl);
173
176
  }
174
- if (this.pinController == null) {
175
- this.pinController = new PinController(new PinModel());
176
- }
177
177
  }
178
178
  disconnectedCallback() {
179
179
  var _a, _b;
@@ -188,7 +188,7 @@ export class VertexPinLabel {
188
188
  render() {
189
189
  var _a, _b, _c;
190
190
  const { primaryColor, accentColor } = getPinColors(this.pin);
191
- return (h(Host, { key: 'a02e4135406398f7e49331ac65ec121c216c75c1' }, h("div", { key: '14373fe8ac2fff6988c38d8c73fdd484c0fd8079', class: classNames('pin-label-input-wrapper', {
191
+ return (h(Host, { key: 'fb923b1f9f554d8e1306b296b0e12b7f69707807' }, h("div", { key: 'db20606dd0bc454da5bcc681be23a34e1d91b265', class: classNames('pin-label-input-wrapper', {
192
192
  focused: this.focused,
193
193
  }), onPointerDown: this.handlePointerDown, style: {
194
194
  top: `${((_a = this.computedScreenPosition) === null || _a === void 0 ? void 0 : _a.y.toString()) || 0}px`,
@@ -198,9 +198,9 @@ export class VertexPinLabel {
198
198
  maxHeight: this.computeMaxHeight(),
199
199
  borderColor: primaryColor,
200
200
  background: accentColor,
201
- } }, h("textarea", { key: '10f15845d35c653f4d84c9d39694977e79ec329a', id: `pin-label-input-${(_c = this.pin) === null || _c === void 0 ? void 0 : _c.id}`, class: classNames('pin-label-input', 'pin-label-text', {
201
+ } }, h("textarea", { key: 'b814215c24ee32336e3946e3ac8be6df935d98a3', id: `pin-label-input-${(_c = this.pin) === null || _c === void 0 ? void 0 : _c.id}`, class: classNames('pin-label-input', 'pin-label-text', {
202
202
  ['readonly']: !this.focused,
203
- }), disabled: !this.focused, ref: (ref) => (this.inputEl = ref), value: this.value, rows: this.textareaRows, onKeyDown: this.handleInputKeyDown, onInput: this.handleTextInput, onBlur: this.handleTextBlur }), !this.focused && (h("div", { key: 'a82f6c8553da740e3ab8c9c4f0b92cd1c3647ec6', class: "pin-input-drag-target", onPointerDown: this.handlePointerDown }))), h("div", { key: '197aae8a4bcb977305f662b61308310eacb0b780', ref: (el) => (this.contentEl = el), class: classNames('pin-label-text', 'pin-label-hidden'), style: {
203
+ }), disabled: !this.focused, ref: (ref) => (this.inputEl = ref), value: this.value, rows: this.textareaRows, onKeyDown: this.handleInputKeyDown, onInput: this.handleTextInput, onBlur: this.handleTextBlur }), !this.focused && (h("div", { key: '5c33525705f63133fc334dadcf24fb8c5cb9ef60', class: "pin-input-drag-target", onPointerDown: this.handlePointerDown }))), h("div", { key: 'ab6ac659deec0c9f224e6daa9125acf4b58764ce', ref: (el) => (this.contentEl = el), class: classNames('pin-label-text', 'pin-label-hidden'), style: {
204
204
  maxWidth: this.computeMaxWidth(),
205
205
  maxHeight: this.computeMaxHeight(),
206
206
  } }, this.hiddenContent())));
@@ -329,7 +329,7 @@ export class VertexPinLabel {
329
329
  },
330
330
  "pinController": {
331
331
  "type": "unknown",
332
- "mutable": false,
332
+ "mutable": true,
333
333
  "complexType": {
334
334
  "original": "PinController",
335
335
  "resolved": "PinController | undefined",
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-pin-label.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-label/viewer-pin-label.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\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 * The controller that drives behavior for pin operations\n */\n @Prop()\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n /**\n * Gives focus to 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.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n /**\n * @internal\n * submits the current text, unfocuses the input and emits the blur event to consumers\n */\n @Method()\n public async submit(): Promise<void> {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (parseFloat(computedStyles.getPropertyValue('height')) -\n parseFloat(computedStyles.getPropertyValue('borderWidth')) * 2) /\n parseFloat(computedStyles.getPropertyValue('lineHeight'))\n )\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n if (event.buttons !== 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n event.stopPropagation();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n"]}
1
+ {"version":3,"file":"viewer-pin-label.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-label/viewer-pin-label.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\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 * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n /**\n * Gives focus to 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.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n /**\n * @internal\n * submits the current text, unfocuses the input and emits the blur event to consumers\n */\n @Method()\n public async submit(): Promise<void> {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (parseFloat(computedStyles.getPropertyValue('height')) -\n parseFloat(computedStyles.getPropertyValue('borderWidth')) * 2) /\n parseFloat(computedStyles.getPropertyValue('lineHeight'))\n )\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n if (event.buttons !== 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n event.stopPropagation();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds)\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n"]}
@@ -110,13 +110,13 @@ export class ViewerTransformWidget {
110
110
  this.EXPERIMENTAL_undoKeybindings = false;
111
111
  this.inputValue = 0;
112
112
  this.isEndingTransform = false;
113
- this.inputShouldFocus = false;
114
113
  this.xArrowColor = '#ea3324';
115
114
  this.yArrowColor = '#4faf32';
116
115
  this.zArrowColor = '#0000ff';
117
116
  this.twoAxesSquareColor = '#e0e0e0';
118
117
  this.hoveredColor = '#ffff00';
119
118
  this.lastAngle = 0;
119
+ this.inputShouldFocus = false;
120
120
  this.handleHoveredDrawableChanged = (drawable) => {
121
121
  this.hovered = drawable;
122
122
  };
@@ -686,17 +686,17 @@ export class ViewerTransformWidget {
686
686
  }
687
687
  render() {
688
688
  var _a, _b, _c, _d, _e, _f;
689
- return (h(Host, { key: 'cf84e5bc2f1ab1878b131f3cd9be1548a5c82646' }, h("canvas", { key: '255699b0cb6a07ab8be50f0c81e0b7df5feb9719', ref: (el) => {
689
+ return (h(Host, { key: 'aa99b642f46da67635bdfb1e22a61f3962446684' }, h("canvas", { key: '3ea5a08ee3e8ae427b4010857a2ef9d126197bd6', ref: (el) => {
690
690
  this.canvasRef = el;
691
691
  }, class: classNames('widget', {
692
692
  hovered: this.hovered != null,
693
- }), tabindex: "0", width: (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.viewport.width, height: (_b = this.viewer) === null || _b === void 0 ? void 0 : _b.viewport.height, onPointerDown: this.handleBeginDrag, onKeyDown: this.handleKeyDown }), this.showInputs && this.inputPosition && ((_c = this.viewer) === null || _c === void 0 ? void 0 : _c.viewport) && (h(TransformWidgetInputWrapper, { key: '5fa899a22f96025973a53defc673e9e9650d5ef4', ref: (el) => {
693
+ }), tabindex: "0", width: (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.viewport.width, height: (_b = this.viewer) === null || _b === void 0 ? void 0 : _b.viewport.height, onPointerDown: this.handleBeginDrag, onKeyDown: this.handleKeyDown }), this.showInputs && this.inputPosition && ((_c = this.viewer) === null || _c === void 0 ? void 0 : _c.viewport) && (h(TransformWidgetInputWrapper, { key: '148947fe2816804ec05d3b04e7c45bd722f479f1', ref: (el) => {
694
694
  var _a, _b;
695
695
  if (el != null) {
696
696
  (_a = this.inputResizeObserver) === null || _a === void 0 ? void 0 : _a.observe(el);
697
697
  }
698
- else if (this.inputRef != null) {
699
- (_b = this.inputResizeObserver) === null || _b === void 0 ? void 0 : _b.unobserve(this.inputRef);
698
+ else if (this.inputWrapperRef != null) {
699
+ (_b = this.inputResizeObserver) === null || _b === void 0 ? void 0 : _b.unobserve(this.inputWrapperRef);
700
700
  }
701
701
  this.inputWrapperRef = el;
702
702
  }, bounds: this.inputBounds, viewport: this.viewer.viewport, point: this.inputPosition.point, placement: this.inputPosition.placement, displayUnit: this.getDisplayedUnits() }, h(TransformWidgetInput, { key: 'db03509252b8e72fb975337274e693cc4d0bebf1', ref: (el) => {
@@ -1291,8 +1291,7 @@ export class ViewerTransformWidget {
1291
1291
  return {
1292
1292
  "inputPosition": {},
1293
1293
  "inputValue": {},
1294
- "isEndingTransform": {},
1295
- "inputShouldFocus": {}
1294
+ "isEndingTransform": {}
1296
1295
  };
1297
1296
  }
1298
1297
  static get events() {