@vertexvis/viewer 0.22.1-testing.0 → 0.22.1-testing.1

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 (119) hide show
  1. package/dist/cjs/{entities-a0db2d78.js → entities-9fad8808.js} +2 -2
  2. package/dist/cjs/{entities-a0db2d78.js.map → entities-9fad8808.js.map} +1 -1
  3. package/dist/cjs/index.cjs.js +5 -4
  4. package/dist/cjs/index.cjs.js.map +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/mapper-ac34f608.js +27 -0
  7. package/dist/cjs/mapper-ac34f608.js.map +1 -0
  8. package/dist/cjs/{queries-d31d23d4.js → queries-ea895dd6.js} +34 -3
  9. package/dist/cjs/queries-ea895dd6.js.map +1 -0
  10. package/dist/cjs/{scene_view_api_pb-0c5fdc13.js → scene_view_api_pb-61f663af.js} +605 -1
  11. package/dist/cjs/scene_view_api_pb-61f663af.js.map +1 -0
  12. package/dist/cjs/{scene_view_api_pb_service-4f9e3f90.js → scene_view_api_pb_service-bd6f25d0.js} +42 -2
  13. package/dist/cjs/scene_view_api_pb_service-bd6f25d0.js.map +1 -0
  14. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +1 -1
  15. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +1 -1
  16. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +3 -3
  17. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
  18. package/dist/cjs/vertex-viewer.cjs.entry.js +5 -4
  19. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  20. package/dist/cjs/viewer.cjs.js +1 -1
  21. package/dist/collection/components/viewer/viewer.js +25 -0
  22. package/dist/collection/components/viewer/viewer.js.map +1 -1
  23. package/dist/collection/index.js +1 -0
  24. package/dist/collection/index.js.map +1 -1
  25. package/dist/collection/lib/pmi/controller.js +39 -0
  26. package/dist/collection/lib/pmi/controller.js.map +1 -0
  27. package/dist/collection/lib/pmi/index.js +6 -0
  28. package/dist/collection/lib/pmi/index.js.map +1 -0
  29. package/dist/collection/lib/pmi/mapper.js +9 -0
  30. package/dist/collection/lib/pmi/mapper.js.map +1 -0
  31. package/dist/collection/lib/pmi/types.js +5 -0
  32. package/dist/collection/lib/pmi/types.js.map +1 -0
  33. package/dist/collection/testing/pmi.js +20 -0
  34. package/dist/collection/testing/pmi.js.map +1 -0
  35. package/dist/components/index.js +1 -1
  36. package/dist/components/mapper2.js +7 -3
  37. package/dist/components/mapper2.js.map +1 -1
  38. package/dist/components/queries.js +32 -2
  39. package/dist/components/queries.js.map +1 -1
  40. package/dist/components/scene_view_api_pb.js +604 -0
  41. package/dist/components/scene_view_api_pb.js.map +1 -1
  42. package/dist/components/scene_view_api_pb_service.js +40 -0
  43. package/dist/components/scene_view_api_pb_service.js.map +1 -1
  44. package/dist/components/vertex-viewer.js +3 -1
  45. package/dist/components/vertex-viewer.js.map +1 -1
  46. package/dist/esm/{entities-632f31f3.js → entities-9d4e336b.js} +2 -2
  47. package/dist/esm/{entities-632f31f3.js.map → entities-9d4e336b.js.map} +1 -1
  48. package/dist/esm/index.js +4 -4
  49. package/dist/esm/index.mjs +4 -4
  50. package/dist/esm/loader.js +1 -1
  51. package/dist/esm/loader.mjs +1 -1
  52. package/dist/esm/mapper-b3a6eca5.js +23 -0
  53. package/dist/esm/mapper-b3a6eca5.js.map +1 -0
  54. package/dist/esm/{queries-40a25625.js → queries-f2b5a440.js} +34 -4
  55. package/dist/esm/queries-f2b5a440.js.map +1 -0
  56. package/dist/esm/{scene_view_api_pb-1d91cc93.js → scene_view_api_pb-c030fd23.js} +605 -1
  57. package/dist/esm/scene_view_api_pb-c030fd23.js.map +1 -0
  58. package/dist/esm/{scene_view_api_pb_service-9f20d437.js → scene_view_api_pb_service-65caee11.js} +42 -2
  59. package/dist/esm/scene_view_api_pb_service-65caee11.js.map +1 -0
  60. package/dist/esm/vertex-viewer-measurement-distance.entry.js +1 -1
  61. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +1 -1
  62. package/dist/esm/vertex-viewer-measurement-precise.entry.js +3 -3
  63. package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
  64. package/dist/esm/vertex-viewer.entry.js +5 -4
  65. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  66. package/dist/esm/viewer.js +1 -1
  67. package/dist/types/components/viewer/viewer.d.ts +7 -0
  68. package/dist/types/components.d.ts +11 -0
  69. package/dist/types/index.d.ts +1 -0
  70. package/dist/types/lib/pmi/controller.d.ts +16 -0
  71. package/dist/types/lib/pmi/index.d.ts +2 -0
  72. package/dist/types/lib/pmi/mapper.d.ts +4 -0
  73. package/dist/types/lib/pmi/types.d.ts +10 -0
  74. package/dist/types/testing/pmi.d.ts +5 -0
  75. package/dist/viewer/index.esm.js +1 -1
  76. package/dist/viewer/index.esm.js.map +1 -1
  77. package/dist/viewer/p-187f783f.entry.js +5 -0
  78. package/dist/viewer/p-187f783f.entry.js.map +1 -0
  79. package/dist/viewer/p-32bff740.js +5 -0
  80. package/dist/viewer/p-32bff740.js.map +1 -0
  81. package/dist/viewer/{p-9d0c84ab.entry.js → p-4b7b629a.entry.js} +2 -2
  82. package/dist/viewer/p-8af6917b.js +5 -0
  83. package/dist/viewer/p-8af6917b.js.map +1 -0
  84. package/dist/viewer/{p-34dce39f.js → p-90bbb5f6.js} +2 -2
  85. package/dist/viewer/{p-9094c563.entry.js → p-9de90d0e.entry.js} +2 -2
  86. package/dist/viewer/{p-b9965b9b.entry.js → p-b3257f48.entry.js} +2 -2
  87. package/dist/viewer/{p-076e9e65.entry.js → p-d10f7459.entry.js} +2 -2
  88. package/dist/viewer/p-d36d5971.js +5 -0
  89. package/dist/viewer/p-d36d5971.js.map +1 -0
  90. package/dist/viewer/p-f0c0cf0b.js +5 -0
  91. package/dist/viewer/p-f0c0cf0b.js.map +1 -0
  92. package/dist/viewer/viewer.esm.js +1 -1
  93. package/dist/viewer/viewer.esm.js.map +1 -1
  94. package/package.json +8 -8
  95. package/dist/cjs/mapper-f168a1a5.js +0 -22
  96. package/dist/cjs/mapper-f168a1a5.js.map +0 -1
  97. package/dist/cjs/queries-d31d23d4.js.map +0 -1
  98. package/dist/cjs/scene_view_api_pb-0c5fdc13.js.map +0 -1
  99. package/dist/cjs/scene_view_api_pb_service-4f9e3f90.js.map +0 -1
  100. package/dist/esm/mapper-826430a2.js +0 -19
  101. package/dist/esm/mapper-826430a2.js.map +0 -1
  102. package/dist/esm/queries-40a25625.js.map +0 -1
  103. package/dist/esm/scene_view_api_pb-1d91cc93.js.map +0 -1
  104. package/dist/esm/scene_view_api_pb_service-9f20d437.js.map +0 -1
  105. package/dist/viewer/p-2800111a.js +0 -5
  106. package/dist/viewer/p-2800111a.js.map +0 -1
  107. package/dist/viewer/p-2924ed4a.entry.js +0 -5
  108. package/dist/viewer/p-2924ed4a.entry.js.map +0 -1
  109. package/dist/viewer/p-9f190847.js +0 -5
  110. package/dist/viewer/p-9f190847.js.map +0 -1
  111. package/dist/viewer/p-a297836a.js +0 -5
  112. package/dist/viewer/p-a297836a.js.map +0 -1
  113. package/dist/viewer/p-aeaafe7f.js +0 -5
  114. package/dist/viewer/p-aeaafe7f.js.map +0 -1
  115. /package/dist/viewer/{p-9d0c84ab.entry.js.map → p-4b7b629a.entry.js.map} +0 -0
  116. /package/dist/viewer/{p-34dce39f.js.map → p-90bbb5f6.js.map} +0 -0
  117. /package/dist/viewer/{p-9094c563.entry.js.map → p-9de90d0e.entry.js.map} +0 -0
  118. /package/dist/viewer/{p-b9965b9b.entry.js.map → p-b3257f48.entry.js.map} +0 -0
  119. /package/dist/viewer/{p-076e9e65.entry.js.map → p-d10f7459.entry.js.map} +0 -0
@@ -74,7 +74,7 @@ const patchDynamicImport = (base, orgScriptElm) => {
74
74
 
75
75
  patchBrowser().then(options => {
76
76
  appGlobals.globalScripts();
77
- return index.bootstrapLazy(JSON.parse("[[\"vertex-viewer-pin-tool.cjs\",[[1,\"vertex-viewer-pin-tool\",{\"pinController\":[1040],\"pinModel\":[16],\"viewer\":[16],\"tool\":[1025],\"mode\":[1025],\"primaryColor\":[1025,\"primary-color\"],\"accentColor\":[1025,\"accent-color\"],\"pins\":[32],\"selectedPinId\":[32],\"elementBounds\":[32],\"projectionViewMatrix\":[32]}]]],[\"vertex-scene-tree.cjs\",[[1,\"vertex-scene-tree\",{\"overScanCount\":[2,\"over-scan-count\"],\"viewerSelector\":[1,\"viewer-selector\"],\"viewer\":[1040],\"rowData\":[16],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"controller\":[1040],\"searchOptions\":[1040],\"metadataSearchExactMatch\":[1028,\"metadata-search-exact-match\"],\"metadataSearchKeys\":[1040],\"metadataKeys\":[16],\"rows\":[32],\"totalRows\":[32],\"showLoader\":[32],\"showEmptyResults\":[32],\"stateMap\":[32],\"errorDetails\":[32],\"attemptingRetry\":[32],\"invalidateRows\":[64],\"scrollToIndex\":[64],\"scrollToItem\":[64],\"expandAll\":[64],\"collapseAll\":[64],\"expandItem\":[64],\"collapseItem\":[64],\"toggleExpandItem\":[64],\"toggleItemVisibility\":[64],\"hideItem\":[64],\"showItem\":[64],\"selectItem\":[64],\"deselectItem\":[64],\"getRowAtIndex\":[64],\"getRowForEvent\":[64],\"getRowAtClientY\":[64],\"filterItems\":[64],\"selectFilteredItems\":[64],\"fetchMetadataKeys\":[64]},[[0,\"search\",\"handleSearch\"],[0,\"cellLoaded\",\"handleCellLoaded\"]]]]],[\"vertex-viewer-default-toolbar.cjs\",[[1,\"vertex-viewer-default-toolbar\",{\"viewer\":[16],\"placement\":[1],\"direction\":[1],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"]}]]],[\"vertex-viewer-markup.cjs\",[[1,\"vertex-viewer-markup\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"selectedMarkupId\":[1025,\"selected-markup-id\"],\"selectNew\":[4,\"select-new\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"toSelectMarkupId\":[32],\"pointerDownPosition\":[32],\"addMarkup\":[64],\"removeMarkup\":[64],\"getMarkupElements\":[64],\"getMarkupElement\":[64]},[[0,\"markupEnd\",\"handleMarkupEnd\"],[0,\"interactionEnd\",\"handleMarkupUpdated\"],[1,\"pointerdown\",\"handleMarkupPointerDown\"]]]]],[\"vertex-viewer-markup-tool.cjs\",[[1,\"vertex-viewer-markup-tool\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"stateMap\":[32],\"reset\":[64]}]]],[\"vertex-viewer-view-cube.cjs\",[[1,\"vertex-viewer-view-cube\",{\"xPositiveLabel\":[1,\"x-positive-label\"],\"xNegativeLabel\":[1,\"x-negative-label\"],\"yPositiveLabel\":[1,\"y-positive-label\"],\"yNegativeLabel\":[1,\"y-negative-label\"],\"zPositiveLabel\":[1,\"z-positive-label\"],\"zNegativeLabel\":[1,\"z-negative-label\"],\"standardViewsOff\":[4,\"standard-views-off\"],\"viewAll\":[4,\"view-all\"],\"animationDuration\":[2,\"animation-duration\"],\"triadOff\":[4,\"triad-off\"],\"worldOrientation\":[1040],\"camera\":[1040],\"viewer\":[16],\"boxLength\":[32],\"triadPosition\":[32]}]]],[\"vertex-viewer-measurement-distance.cjs\",[[1,\"vertex-viewer-measurement-distance\",{\"start\":[1040],\"startJson\":[1,\"start-json\"],\"end\":[1040],\"endJson\":[1,\"end-json\"],\"distance\":[1026],\"showAxisReferenceLines\":[4,\"show-axis-reference-lines\"],\"snapDistance\":[2,\"snap-distance\"],\"units\":[1],\"fractionalDigits\":[2,\"fractional-digits\"],\"labelFormatter\":[16],\"anchorLabelOffset\":[2,\"anchor-label-offset\"],\"lineCapLength\":[2,\"line-cap-length\"],\"mode\":[513],\"interactingAnchor\":[1537,\"interacting-anchor\"],\"invalid\":[1540],\"camera\":[16],\"hitProvider\":[16],\"indicatorPt\":[1040],\"viewer\":[16],\"measurementModel\":[16],\"viewport\":[32],\"elementBounds\":[32],\"interactionCount\":[32],\"internalCamera\":[32],\"invalidateStateCounter\":[32],\"stateMap\":[32],\"measurementUnits\":[32],\"computeElementMetrics\":[64]}]]],[\"vertex-viewer-measurement-precise.cjs\",[[1,\"vertex-viewer-measurement-precise\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementController\":[1040],\"measurableEntityTypes\":[16],\"viewer\":[16],\"configEnv\":[1,\"config-env\"],\"config\":[1]}]]],[\"vertex-viewer-annotation-callout.cjs\",[[1,\"vertex-viewer-annotation-callout\",{\"data\":[16],\"iconSize\":[1,\"icon-size\"]}]]],[\"vertex-viewer-box-query-tool.cjs\",[[1,\"vertex-viewer-box-query-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"operationType\":[1,\"operation-type\"],\"mode\":[1],\"details\":[32]}]]],[\"vertex-viewer-walk-mode-tool.cjs\",[[1,\"vertex-viewer-walk-mode-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"teleportMode\":[1,\"teleport-mode\"],\"enabled\":[4]}]]],[\"vertex-scene-tree-table-cell.cjs\",[[1,\"vertex-scene-tree-table-cell\",{\"node\":[16],\"tree\":[16],\"value\":[1],\"placeholder\":[1],\"hovered\":[1028],\"isScrolling\":[4,\"is-scrolling\"],\"expandToggle\":[4,\"expand-toggle\"],\"visibilityToggle\":[4,\"visibility-toggle\"],\"selectionHandler\":[16],\"visibilityHandler\":[16],\"expansionHandler\":[16],\"hoverController\":[16]}]]],[\"vertex-scene-tree-table-column.cjs\",[[1,\"vertex-scene-tree-table-column\",{\"initialWidth\":[2,\"initial-width\"],\"minWidth\":[2,\"min-width\"],\"maxWidth\":[2,\"max-width\"]}]]],[\"vertex-scene-tree-table-header.cjs\",[[1,\"vertex-scene-tree-table-header\"]]],[\"vertex-scene-tree-table-resize-divider.cjs\",[[1,\"vertex-scene-tree-table-resize-divider\",{\"dragging\":[32]}]]],[\"vertex-scene-tree-toolbar-group.cjs\",[[1,\"vertex-scene-tree-toolbar-group\"]]],[\"vertex-viewer.cjs\",[[1,\"vertex-viewer\",{\"src\":[1],\"clientId\":[1,\"client-id\"],\"deviceId\":[1025,\"device-id\"],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"resolvedConfig\":[1040],\"cameraControls\":[4,\"camera-controls\"],\"cameraType\":[1537,\"camera-type\"],\"keyboardControls\":[4,\"keyboard-controls\"],\"rotateAroundTapPoint\":[4,\"rotate-around-tap-point\"],\"token\":[1025],\"depthBuffers\":[1,\"depth-buffers\"],\"phantom\":[16],\"noDefaultLights\":[4,\"no-default-lights\"],\"enableTemporalRefinement\":[4,\"enable-temporal-refinement\"],\"experimentalRenderingOptions\":[1,\"experimental-rendering-options\"],\"featureLines\":[16],\"selectionHighlighting\":[16],\"featureHighlighting\":[16],\"sceneComparison\":[16],\"featureMaps\":[1,\"feature-maps\"],\"resizeDebounce\":[2,\"resize-debounce\"],\"frame\":[1040],\"stream\":[1040],\"stencilBuffer\":[1040],\"viewport\":[1040],\"annotations\":[1040],\"modelViews\":[1040],\"dimensions\":[32],\"hostDimensions\":[32],\"errorMessage\":[32],\"cursor\":[32],\"stateMap\":[32],\"dispatchFrameDrawn\":[64],\"registerInteractionHandler\":[64],\"registerTapKeyInteraction\":[64],\"getInteractionTarget_DEPRECATED\":[64],\"addCursor\":[64],\"getInteractionHandlers\":[64],\"getKeyInteractions\":[64],\"getBaseInteractionHandler\":[64],\"getJwt\":[64],\"load\":[64],\"unload\":[64],\"scene\":[64],\"isSceneReady\":[64]},[[0,\"tap\",\"handleTapEvent\"]]]]],[\"vertex-viewer-hit-result-indicator.cjs\",[[1,\"vertex-viewer-hit-result-indicator\",{\"viewer\":[16],\"position\":[1040],\"normal\":[1040]}]]],[\"vertex-viewer-measurement-details.cjs\",[[1,\"vertex-viewer-measurement-details\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementOutcome\":[1040],\"distanceUnits\":[1,\"distance-units\"],\"angleUnits\":[1,\"angle-units\"],\"fractionalDigits\":[2,\"fractional-digits\"],\"distanceFormatter\":[16],\"angleFormatter\":[16],\"areaFormatter\":[16],\"resultTypes\":[16],\"overlay\":[32],\"distanceMeasurementUnits\":[32],\"angleMeasurementUnits\":[32],\"areaMeasurementUnits\":[32]}]]],[\"vertex-viewer-transform-widget.cjs\",[[1,\"vertex-viewer-transform-widget\",{\"viewer\":[16],\"position\":[1040],\"rotation\":[1040],\"controller\":[1040],\"xRotationDisabled\":[1028,\"x-rotation-disabled\"],\"yRotationDisabled\":[1028,\"y-rotation-disabled\"],\"zRotationDisabled\":[1028,\"z-rotation-disabled\"],\"xTranslationDisabled\":[1028,\"x-translation-disabled\"],\"yTranslationDisabled\":[1028,\"y-translation-disabled\"],\"zTranslationDisabled\":[1028,\"z-translation-disabled\"],\"showInputs\":[4,\"show-inputs\"],\"distanceUnit\":[1,\"distance-unit\"],\"angleUnit\":[1,\"angle-unit\"],\"decimalPlaces\":[2,\"decimal-places\"],\"EXPERIMENTAL_undoKeybindings\":[4,\"e-x-p-e-r-i-m-e-n-t-a-l_undo-keybindings\"],\"hovered\":[1040],\"inputPosition\":[32],\"inputValue\":[32],\"isEndingTransform\":[32],\"inputShouldFocus\":[32],\"EXPERIMENTAL_undo\":[64]}]]],[\"vertex-viewer-pin-group.cjs\",[[0,\"vertex-viewer-pin-group\",{\"pin\":[16],\"matrix\":[1040],\"projectionViewMatrix\":[16],\"elementBounds\":[1040],\"pinModel\":[16],\"pinController\":[16],\"selected\":[4],\"occluded\":[1540],\"detached\":[1540],\"invalidateStateCounter\":[32]},[[0,\"occlusionStateChanged\",\"handleOcclusionStateChanged\"],[0,\"detachedStateChanged\",\"handleDetachedStateChanged\"]]]]],[\"vertex-viewer-dom-group.cjs\",[[6,\"vertex-viewer-dom-group\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040]}]]],[\"vertex-viewer-teleport-tool.cjs\",[[1,\"vertex-viewer-teleport-tool\",{\"viewer\":[16],\"mode\":[1025],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"],\"controller\":[1040],\"model\":[1040]}]]],[\"vertex-viewer-spinner.cjs\",[[1,\"vertex-viewer-spinner\",{\"size\":[1]}]]],[\"vertex-scene-tree-search_3.cjs\",[[1,\"vertex-scene-tree-search\",{\"debounce\":[2],\"disabled\":[4],\"placeholder\":[1],\"controller\":[16],\"value\":[1025],\"focused\":[32],\"isSearching\":[32],\"setFocus\":[64],\"clear\":[64]}],[1,\"vertex-scene-tree-table-layout\",{\"tree\":[16],\"controller\":[16],\"rows\":[16],\"totalRows\":[2,\"total-rows\"],\"rowHeight\":[1026,\"row-height\"],\"overScanCount\":[2,\"over-scan-count\"],\"rowData\":[16],\"layoutOffset\":[1026,\"layout-offset\"],\"scrollOffset\":[1026,\"scroll-offset\"],\"layoutHeight\":[1026,\"layout-height\"],\"layoutWidth\":[1026,\"layout-width\"],\"viewportStartIndex\":[1026,\"viewport-start-index\"],\"viewportEndIndex\":[1026,\"viewport-end-index\"],\"columnGridLayout\":[32],\"columnGridFixedLayout\":[32],\"isComputingCellHeight\":[32],\"lastDividerPointerPosition\":[32],\"resizingColumnIndex\":[32],\"isScrolling\":[32],\"scrollTimer\":[32],\"stateMap\":[32],\"scrollToPosition\":[64]}],[1,\"vertex-scene-tree-toolbar\"]]],[\"vertex-viewer-layer.cjs\",[[1,\"vertex-viewer-layer\",{\"stretchOff\":[516,\"stretch-off\"]}]]],[\"vertex-viewer-button_3.cjs\",[[1,\"vertex-viewer-toolbar\",{\"placement\":[1],\"direction\":[1]}],[1,\"vertex-viewer-button\"],[1,\"vertex-viewer-toolbar-group\",{\"direction\":[1]}]]],[\"vertex-viewer-pin-label_2.cjs\",[[0,\"vertex-viewer-pin-label\",{\"pin\":[16],\"elementBounds\":[16],\"value\":[1025],\"pinController\":[16],\"focused\":[32],\"computedScreenPosition\":[32],\"textareaRows\":[32],\"contentElBounds\":[32],\"setFocus\":[64],\"submit\":[64]}],[0,\"vertex-viewer-pin-label-line\",{\"pinPoint\":[16],\"labelPoint\":[16],\"pin\":[16]}]]],[\"vertex-viewer-measurement-line_2.cjs\",[[1,\"vertex-viewer-measurement-overlays\",{\"measurementOverlays\":[16],\"camera\":[1040],\"viewer\":[16],\"overlays\":[32]}],[1,\"vertex-viewer-measurement-line\",{\"start\":[16],\"end\":[16],\"capLength\":[2,\"cap-length\"],\"pointerEvents\":[1,\"pointer-events\"]}]]],[\"vertex-viewer-dom-element_2.cjs\",[[6,\"vertex-viewer-dom-renderer\",{\"drawMode\":[1,\"draw-mode\"],\"propagateEventsToViewer\":[4,\"propagate-events-to-viewer\"],\"viewer\":[16],\"camera\":[1040],\"depthBuffer\":[1040],\"viewport\":[32],\"invalidateFrameCounter\":[32],\"interactionDisposables\":[32]},[[0,\"propertyChange\",\"handlePropertyChange\"]]],[1,\"vertex-viewer-dom-element\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040],\"occlusionOff\":[4,\"occlusion-off\"],\"occluded\":[516],\"detachedOff\":[4,\"detached-off\"],\"detached\":[516],\"billboardOff\":[4,\"billboard-off\"],\"interactionsOff\":[516,\"interactions-off\"]}]]],[\"vertex-viewer-markup-arrow_3.cjs\",[[1,\"vertex-viewer-markup-arrow\",{\"start\":[1040],\"startJson\":[1,\"start\"],\"end\":[1040],\"endJson\":[1,\"end\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-circle\",{\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-freeform\",{\"points\":[1040],\"pointsJson\":[1,\"points\"],\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"screenPoints\":[32],\"dispose\":[64]}]]],[\"vertex-viewer-icon.cjs\",[[1,\"vertex-viewer-icon\",{\"name\":[1],\"size\":[1]}]]]]"), options);
77
+ return index.bootstrapLazy(JSON.parse("[[\"vertex-viewer-pin-tool.cjs\",[[1,\"vertex-viewer-pin-tool\",{\"pinController\":[1040],\"pinModel\":[16],\"viewer\":[16],\"tool\":[1025],\"mode\":[1025],\"primaryColor\":[1025,\"primary-color\"],\"accentColor\":[1025,\"accent-color\"],\"pins\":[32],\"selectedPinId\":[32],\"elementBounds\":[32],\"projectionViewMatrix\":[32]}]]],[\"vertex-scene-tree.cjs\",[[1,\"vertex-scene-tree\",{\"overScanCount\":[2,\"over-scan-count\"],\"viewerSelector\":[1,\"viewer-selector\"],\"viewer\":[1040],\"rowData\":[16],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"controller\":[1040],\"searchOptions\":[1040],\"metadataSearchExactMatch\":[1028,\"metadata-search-exact-match\"],\"metadataSearchKeys\":[1040],\"metadataKeys\":[16],\"rows\":[32],\"totalRows\":[32],\"showLoader\":[32],\"showEmptyResults\":[32],\"stateMap\":[32],\"errorDetails\":[32],\"attemptingRetry\":[32],\"invalidateRows\":[64],\"scrollToIndex\":[64],\"scrollToItem\":[64],\"expandAll\":[64],\"collapseAll\":[64],\"expandItem\":[64],\"collapseItem\":[64],\"toggleExpandItem\":[64],\"toggleItemVisibility\":[64],\"hideItem\":[64],\"showItem\":[64],\"selectItem\":[64],\"deselectItem\":[64],\"getRowAtIndex\":[64],\"getRowForEvent\":[64],\"getRowAtClientY\":[64],\"filterItems\":[64],\"selectFilteredItems\":[64],\"fetchMetadataKeys\":[64]},[[0,\"search\",\"handleSearch\"],[0,\"cellLoaded\",\"handleCellLoaded\"]]]]],[\"vertex-viewer-default-toolbar.cjs\",[[1,\"vertex-viewer-default-toolbar\",{\"viewer\":[16],\"placement\":[1],\"direction\":[1],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"]}]]],[\"vertex-viewer-markup.cjs\",[[1,\"vertex-viewer-markup\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"selectedMarkupId\":[1025,\"selected-markup-id\"],\"selectNew\":[4,\"select-new\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"toSelectMarkupId\":[32],\"pointerDownPosition\":[32],\"addMarkup\":[64],\"removeMarkup\":[64],\"getMarkupElements\":[64],\"getMarkupElement\":[64]},[[0,\"markupEnd\",\"handleMarkupEnd\"],[0,\"interactionEnd\",\"handleMarkupUpdated\"],[1,\"pointerdown\",\"handleMarkupPointerDown\"]]]]],[\"vertex-viewer-markup-tool.cjs\",[[1,\"vertex-viewer-markup-tool\",{\"arrowTemplateId\":[1,\"arrow-template-id\"],\"circleTemplateId\":[1,\"circle-template-id\"],\"freeformTemplateId\":[1,\"freeform-template-id\"],\"tool\":[1],\"disabled\":[4],\"viewer\":[16],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"stateMap\":[32],\"reset\":[64]}]]],[\"vertex-viewer-view-cube.cjs\",[[1,\"vertex-viewer-view-cube\",{\"xPositiveLabel\":[1,\"x-positive-label\"],\"xNegativeLabel\":[1,\"x-negative-label\"],\"yPositiveLabel\":[1,\"y-positive-label\"],\"yNegativeLabel\":[1,\"y-negative-label\"],\"zPositiveLabel\":[1,\"z-positive-label\"],\"zNegativeLabel\":[1,\"z-negative-label\"],\"standardViewsOff\":[4,\"standard-views-off\"],\"viewAll\":[4,\"view-all\"],\"animationDuration\":[2,\"animation-duration\"],\"triadOff\":[4,\"triad-off\"],\"worldOrientation\":[1040],\"camera\":[1040],\"viewer\":[16],\"boxLength\":[32],\"triadPosition\":[32]}]]],[\"vertex-viewer-measurement-distance.cjs\",[[1,\"vertex-viewer-measurement-distance\",{\"start\":[1040],\"startJson\":[1,\"start-json\"],\"end\":[1040],\"endJson\":[1,\"end-json\"],\"distance\":[1026],\"showAxisReferenceLines\":[4,\"show-axis-reference-lines\"],\"snapDistance\":[2,\"snap-distance\"],\"units\":[1],\"fractionalDigits\":[2,\"fractional-digits\"],\"labelFormatter\":[16],\"anchorLabelOffset\":[2,\"anchor-label-offset\"],\"lineCapLength\":[2,\"line-cap-length\"],\"mode\":[513],\"interactingAnchor\":[1537,\"interacting-anchor\"],\"invalid\":[1540],\"camera\":[16],\"hitProvider\":[16],\"indicatorPt\":[1040],\"viewer\":[16],\"measurementModel\":[16],\"viewport\":[32],\"elementBounds\":[32],\"interactionCount\":[32],\"internalCamera\":[32],\"invalidateStateCounter\":[32],\"stateMap\":[32],\"measurementUnits\":[32],\"computeElementMetrics\":[64]}]]],[\"vertex-viewer-measurement-precise.cjs\",[[1,\"vertex-viewer-measurement-precise\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementController\":[1040],\"measurableEntityTypes\":[16],\"viewer\":[16],\"configEnv\":[1,\"config-env\"],\"config\":[1]}]]],[\"vertex-viewer-annotation-callout.cjs\",[[1,\"vertex-viewer-annotation-callout\",{\"data\":[16],\"iconSize\":[1,\"icon-size\"]}]]],[\"vertex-viewer-box-query-tool.cjs\",[[1,\"vertex-viewer-box-query-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"operationType\":[1,\"operation-type\"],\"mode\":[1],\"details\":[32]}]]],[\"vertex-viewer-walk-mode-tool.cjs\",[[1,\"vertex-viewer-walk-mode-tool\",{\"viewer\":[16],\"controller\":[1040],\"model\":[1040],\"teleportMode\":[1,\"teleport-mode\"],\"enabled\":[4]}]]],[\"vertex-scene-tree-table-cell.cjs\",[[1,\"vertex-scene-tree-table-cell\",{\"node\":[16],\"tree\":[16],\"value\":[1],\"placeholder\":[1],\"hovered\":[1028],\"isScrolling\":[4,\"is-scrolling\"],\"expandToggle\":[4,\"expand-toggle\"],\"visibilityToggle\":[4,\"visibility-toggle\"],\"selectionHandler\":[16],\"visibilityHandler\":[16],\"expansionHandler\":[16],\"hoverController\":[16]}]]],[\"vertex-scene-tree-table-column.cjs\",[[1,\"vertex-scene-tree-table-column\",{\"initialWidth\":[2,\"initial-width\"],\"minWidth\":[2,\"min-width\"],\"maxWidth\":[2,\"max-width\"]}]]],[\"vertex-scene-tree-table-header.cjs\",[[1,\"vertex-scene-tree-table-header\"]]],[\"vertex-scene-tree-table-resize-divider.cjs\",[[1,\"vertex-scene-tree-table-resize-divider\",{\"dragging\":[32]}]]],[\"vertex-scene-tree-toolbar-group.cjs\",[[1,\"vertex-scene-tree-toolbar-group\"]]],[\"vertex-viewer.cjs\",[[1,\"vertex-viewer\",{\"src\":[1],\"clientId\":[1,\"client-id\"],\"deviceId\":[1025,\"device-id\"],\"config\":[1],\"configEnv\":[1,\"config-env\"],\"resolvedConfig\":[1040],\"cameraControls\":[4,\"camera-controls\"],\"cameraType\":[1537,\"camera-type\"],\"keyboardControls\":[4,\"keyboard-controls\"],\"rotateAroundTapPoint\":[4,\"rotate-around-tap-point\"],\"token\":[1025],\"depthBuffers\":[1,\"depth-buffers\"],\"phantom\":[16],\"noDefaultLights\":[4,\"no-default-lights\"],\"enableTemporalRefinement\":[4,\"enable-temporal-refinement\"],\"experimentalRenderingOptions\":[1,\"experimental-rendering-options\"],\"featureLines\":[16],\"selectionHighlighting\":[16],\"featureHighlighting\":[16],\"sceneComparison\":[16],\"featureMaps\":[1,\"feature-maps\"],\"resizeDebounce\":[2,\"resize-debounce\"],\"frame\":[1040],\"stream\":[1040],\"stencilBuffer\":[1040],\"viewport\":[1040],\"annotations\":[1040],\"modelViews\":[1040],\"pmi\":[1040],\"dimensions\":[32],\"hostDimensions\":[32],\"errorMessage\":[32],\"cursor\":[32],\"stateMap\":[32],\"dispatchFrameDrawn\":[64],\"registerInteractionHandler\":[64],\"registerTapKeyInteraction\":[64],\"getInteractionTarget_DEPRECATED\":[64],\"addCursor\":[64],\"getInteractionHandlers\":[64],\"getKeyInteractions\":[64],\"getBaseInteractionHandler\":[64],\"getJwt\":[64],\"load\":[64],\"unload\":[64],\"scene\":[64],\"isSceneReady\":[64]},[[0,\"tap\",\"handleTapEvent\"]]]]],[\"vertex-viewer-hit-result-indicator.cjs\",[[1,\"vertex-viewer-hit-result-indicator\",{\"viewer\":[16],\"position\":[1040],\"normal\":[1040]}]]],[\"vertex-viewer-measurement-details.cjs\",[[1,\"vertex-viewer-measurement-details\",{\"measurementModel\":[16],\"measurementOverlays\":[16],\"measurementOutcome\":[1040],\"distanceUnits\":[1,\"distance-units\"],\"angleUnits\":[1,\"angle-units\"],\"fractionalDigits\":[2,\"fractional-digits\"],\"distanceFormatter\":[16],\"angleFormatter\":[16],\"areaFormatter\":[16],\"resultTypes\":[16],\"overlay\":[32],\"distanceMeasurementUnits\":[32],\"angleMeasurementUnits\":[32],\"areaMeasurementUnits\":[32]}]]],[\"vertex-viewer-transform-widget.cjs\",[[1,\"vertex-viewer-transform-widget\",{\"viewer\":[16],\"position\":[1040],\"rotation\":[1040],\"controller\":[1040],\"xRotationDisabled\":[1028,\"x-rotation-disabled\"],\"yRotationDisabled\":[1028,\"y-rotation-disabled\"],\"zRotationDisabled\":[1028,\"z-rotation-disabled\"],\"xTranslationDisabled\":[1028,\"x-translation-disabled\"],\"yTranslationDisabled\":[1028,\"y-translation-disabled\"],\"zTranslationDisabled\":[1028,\"z-translation-disabled\"],\"showInputs\":[4,\"show-inputs\"],\"distanceUnit\":[1,\"distance-unit\"],\"angleUnit\":[1,\"angle-unit\"],\"decimalPlaces\":[2,\"decimal-places\"],\"EXPERIMENTAL_undoKeybindings\":[4,\"e-x-p-e-r-i-m-e-n-t-a-l_undo-keybindings\"],\"hovered\":[1040],\"inputPosition\":[32],\"inputValue\":[32],\"isEndingTransform\":[32],\"inputShouldFocus\":[32],\"EXPERIMENTAL_undo\":[64]}]]],[\"vertex-viewer-pin-group.cjs\",[[0,\"vertex-viewer-pin-group\",{\"pin\":[16],\"matrix\":[1040],\"projectionViewMatrix\":[16],\"elementBounds\":[1040],\"pinModel\":[16],\"pinController\":[16],\"selected\":[4],\"occluded\":[1540],\"detached\":[1540],\"invalidateStateCounter\":[32]},[[0,\"occlusionStateChanged\",\"handleOcclusionStateChanged\"],[0,\"detachedStateChanged\",\"handleDetachedStateChanged\"]]]]],[\"vertex-viewer-dom-group.cjs\",[[6,\"vertex-viewer-dom-group\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040]}]]],[\"vertex-viewer-teleport-tool.cjs\",[[1,\"vertex-viewer-teleport-tool\",{\"viewer\":[16],\"mode\":[1025],\"animationsDisabled\":[4,\"animations-disabled\"],\"animationMs\":[2,\"animation-ms\"],\"controller\":[1040],\"model\":[1040]}]]],[\"vertex-viewer-spinner.cjs\",[[1,\"vertex-viewer-spinner\",{\"size\":[1]}]]],[\"vertex-scene-tree-search_3.cjs\",[[1,\"vertex-scene-tree-search\",{\"debounce\":[2],\"disabled\":[4],\"placeholder\":[1],\"controller\":[16],\"value\":[1025],\"focused\":[32],\"isSearching\":[32],\"setFocus\":[64],\"clear\":[64]}],[1,\"vertex-scene-tree-table-layout\",{\"tree\":[16],\"controller\":[16],\"rows\":[16],\"totalRows\":[2,\"total-rows\"],\"rowHeight\":[1026,\"row-height\"],\"overScanCount\":[2,\"over-scan-count\"],\"rowData\":[16],\"layoutOffset\":[1026,\"layout-offset\"],\"scrollOffset\":[1026,\"scroll-offset\"],\"layoutHeight\":[1026,\"layout-height\"],\"layoutWidth\":[1026,\"layout-width\"],\"viewportStartIndex\":[1026,\"viewport-start-index\"],\"viewportEndIndex\":[1026,\"viewport-end-index\"],\"columnGridLayout\":[32],\"columnGridFixedLayout\":[32],\"isComputingCellHeight\":[32],\"lastDividerPointerPosition\":[32],\"resizingColumnIndex\":[32],\"isScrolling\":[32],\"scrollTimer\":[32],\"stateMap\":[32],\"scrollToPosition\":[64]}],[1,\"vertex-scene-tree-toolbar\"]]],[\"vertex-viewer-layer.cjs\",[[1,\"vertex-viewer-layer\",{\"stretchOff\":[516,\"stretch-off\"]}]]],[\"vertex-viewer-button_3.cjs\",[[1,\"vertex-viewer-toolbar\",{\"placement\":[1],\"direction\":[1]}],[1,\"vertex-viewer-button\"],[1,\"vertex-viewer-toolbar-group\",{\"direction\":[1]}]]],[\"vertex-viewer-pin-label_2.cjs\",[[0,\"vertex-viewer-pin-label\",{\"pin\":[16],\"elementBounds\":[16],\"value\":[1025],\"pinController\":[16],\"focused\":[32],\"computedScreenPosition\":[32],\"textareaRows\":[32],\"contentElBounds\":[32],\"setFocus\":[64],\"submit\":[64]}],[0,\"vertex-viewer-pin-label-line\",{\"pinPoint\":[16],\"labelPoint\":[16],\"pin\":[16]}]]],[\"vertex-viewer-measurement-line_2.cjs\",[[1,\"vertex-viewer-measurement-overlays\",{\"measurementOverlays\":[16],\"camera\":[1040],\"viewer\":[16],\"overlays\":[32]}],[1,\"vertex-viewer-measurement-line\",{\"start\":[16],\"end\":[16],\"capLength\":[2,\"cap-length\"],\"pointerEvents\":[1,\"pointer-events\"]}]]],[\"vertex-viewer-dom-element_2.cjs\",[[6,\"vertex-viewer-dom-renderer\",{\"drawMode\":[1,\"draw-mode\"],\"propagateEventsToViewer\":[4,\"propagate-events-to-viewer\"],\"viewer\":[16],\"camera\":[1040],\"depthBuffer\":[1040],\"viewport\":[32],\"invalidateFrameCounter\":[32],\"interactionDisposables\":[32]},[[0,\"propertyChange\",\"handlePropertyChange\"]]],[1,\"vertex-viewer-dom-element\",{\"position\":[1040],\"positionJson\":[1,\"position\"],\"rotation\":[1040],\"rotationJson\":[1,\"rotation\"],\"quaternion\":[1040],\"quaternionJson\":[1,\"quaternion\"],\"scale\":[1040],\"scaleJson\":[1,\"scale\"],\"matrix\":[1040],\"occlusionOff\":[4,\"occlusion-off\"],\"occluded\":[516],\"detachedOff\":[4,\"detached-off\"],\"detached\":[516],\"billboardOff\":[4,\"billboard-off\"],\"interactionsOff\":[516,\"interactions-off\"]}]]],[\"vertex-viewer-markup-arrow_3.cjs\",[[1,\"vertex-viewer-markup-arrow\",{\"start\":[1040],\"startJson\":[1,\"start\"],\"end\":[1040],\"endJson\":[1,\"end\"],\"startLineAnchorStyle\":[1025,\"start-line-anchor-style\"],\"endLineAnchorStyle\":[1025,\"end-line-anchor-style\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-circle\",{\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"dispose\":[64]}],[1,\"vertex-viewer-markup-freeform\",{\"points\":[1040],\"pointsJson\":[1,\"points\"],\"bounds\":[1040],\"boundsJson\":[1,\"bounds\"],\"mode\":[513],\"viewer\":[16],\"elementBounds\":[32],\"screenPoints\":[32],\"dispose\":[64]}]]],[\"vertex-viewer-icon.cjs\",[[1,\"vertex-viewer-icon\",{\"name\":[1],\"size\":[1]}]]]]"), options);
78
78
  });
79
79
 
80
80
  //# sourceMappingURL=viewer.cjs.js.map
@@ -23,6 +23,7 @@ import { TouchInteractionHandler } from '../../lib/interactions/touchInteraction
23
23
  import { fromPbFrameOrThrow } from '../../lib/mappers';
24
24
  import { paintTime } from '../../lib/meters';
25
25
  import { ModelViewController } from '../../lib/model-views/controller';
26
+ import { PmiController } from '../../lib/pmi';
26
27
  import { createCanvasRenderer, measureCanvasRenderer, } from '../../lib/rendering';
27
28
  import { Scene } from '../../lib/scenes/scene';
28
29
  import { writeDOM } from '../../lib/stencil';
@@ -135,6 +136,7 @@ export class Viewer {
135
136
  });
136
137
  this.addStreamListeners();
137
138
  this.modelViews = new ModelViewController(client, this.stream, () => this.token, () => this.deviceId);
139
+ this.pmi = new PmiController(client, () => this.token, () => this.deviceId);
138
140
  this.updateStreamAttributes();
139
141
  this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());
140
142
  }
@@ -1505,6 +1507,29 @@ export class Viewer {
1505
1507
  }],
1506
1508
  "text": "The controller for accessing model views associated with the scene view."
1507
1509
  }
1510
+ },
1511
+ "pmi": {
1512
+ "type": "unknown",
1513
+ "mutable": true,
1514
+ "complexType": {
1515
+ "original": "PmiController | undefined",
1516
+ "resolved": "PmiController | undefined",
1517
+ "references": {
1518
+ "PmiController": {
1519
+ "location": "import",
1520
+ "path": "../../lib/pmi"
1521
+ }
1522
+ }
1523
+ },
1524
+ "required": false,
1525
+ "optional": false,
1526
+ "docs": {
1527
+ "tags": [{
1528
+ "name": "readonly",
1529
+ "text": undefined
1530
+ }],
1531
+ "text": "The controller for accessing and viewing PMI."
1532
+ }
1508
1533
  }
1509
1534
  }; }
1510
1535
  static get states() { return {
@@ -1 +1 @@
1
- {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../src/components/viewer/viewer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,OAAO,EACP,KAAK,EAEL,CAAC,EACD,IAAI,EACJ,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,KAAK,GACN,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yEAAyE,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,EAAc,eAAe,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,UAAU,MAAM,YAAY,CAAC;AAWpC,OAAO,EACL,oBAAoB,GAErB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAU,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAU,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,EACL,4BAA4B,EAC5B,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oDAAoD,CAAC;AAIjG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uDAAuD,CAAC;AACvG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAE7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAU,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EACL,eAAe,EACf,WAAW,EACX,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAQ3B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,WAAW,EAEX,gBAAgB,EAChB,oBAAoB,EACpB,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,SAAS,CAAC;AA4CjB,MAAM,OAAO,MAAM;EA0VjB;IA5TA;;;;;;;OAOG;IACY,cAAS,GAAgB,UAAU,CAAC;IAOnD;;;OAGG;IACY,mBAAc,GAAG,IAAI,CAAC;IAErC;;;OAGG;IAC4C,eAAU,GACvD,aAAa,CAAC;IAEhB;;;;OAIG;IACY,qBAAgB,GAAG,IAAI,CAAC;IAEvC;;;OAGG;IACY,yBAAoB,GAAG,IAAI,CAAC;IAuB3C;;;OAGG;IAEI,YAAO,GAAoB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAEnD;;;;OAIG;IACY,oBAAe,GAAG,KAAK,CAAC;IAEvC;;OAEG;IACY,6BAAwB,GAAG,IAAI,CAAC;IAE/C;;;;OAIG;IACY,iCAA4B,GAAG,EAAE,CAAC;IA8CjD;;;OAGG;IACY,mBAAc,GAAG,GAAG,CAAC;IAepC;;OAEG;IAEI,kBAAa,GAAyB,IAAI,oBAAoB,CACnE,IAAI,CAAC,WAAW,CACjB,CAAC;IAEF;;;;;OAKG;IAEI,aAAQ,GAAa,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAoH7E;;;;OAIG;IACc,aAAQ,GAAa;MACpC,aAAa,EAAE,IAAI,aAAa,EAAE;MAClC,WAAW,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;KACtC,CAAC;IAgBM,wBAAmB,GAAyB,EAAE,CAAC;IAC/C,yCAAoC,GAAsB,EAAE,CAAC;IAG7D,uBAAkB,GAAsC,EAAE,CAAC;IAC3D,8BAAyB,GAAsC,EAAE,CAAC;IAGlE,iCAA4B,GAAG,IAAI,eAAe,EAAS,CAAC;IAGlE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EACjE,CAAC;EAED;;KAEG;EACO,iBAAiB;;IACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAC5B,IAAI,CAAC,4BAA4B,EAAE,CAAC;IAEpC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IACnE,IAAI,CAAC,2BAA2B,EAAE,CAAC;IAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAEpE,IAAI,CAAC,WAAW,GAAG,IAAI,oBAAoB,CACzC,MAAM,EACN,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAChB,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CACpB,CAAC;IACF,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,CACxC,CAAC;IAEF,IAAI,CAAC,MAAM;MACT,MAAA,IAAI,CAAC,MAAM,mCACX,IAAI,YAAY,CAAC,IAAI,mBAAmB,EAAE,EAAE;QAC1C,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa;QAC1C,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;OACxD,CAAC,CAAC;IACL,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAE1B,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CACvC,MAAM,EACN,IAAI,CAAC,MAAM,EACX,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAChB,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CACpB,CAAC;IAEF,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC9B,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;EAC7E,CAAC;EAED;;KAEG;EACO,KAAK,CAAC,gBAAgB;;IAC9B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAElD,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;MACvC,MAAA,IAAI,CAAC,cAAc,0CAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;KAC3D;IAED,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,EAAE;MACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9B,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;MAC1C,CAAC,CAAC,CAAC;KACJ;IAED,MAAM,IAAI,CAAC,oCAAoC,EAAE,CAAC;IAClD,IAAI,CAAC,eAAe,EAAE,CAAC;EACzB,CAAC;EAED;;KAEG;EACO,MAAM;;IACd,OAAO,CACL,EAAC,IAAI;MACH,WACE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC,EACjD,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAA,IAAI,CAAC,MAAM,mCAAI,EAAE,CAAC,EAAE,EAC/C,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE;QAEhD,WACE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,sBAAsB,GAAG,GAAG,CAAC,EACjD,KAAK,EAAE,UAAU,CAAC,kBAAkB,EAAE;YACpC,wBAAwB,EAAE,MAAM,CAAC,YAAY,IAAI,IAAI;WACtD,CAAC;UAEF,cACE,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE;cACX,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;cACzB,IAAI,CAAC,QAAQ,CAAC,iBAAiB,GAAG,GAAG,CAAC;YACxC,CAAC,EACD,KAAK,EAAC,QAAQ,GACN;UACT,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,CAC3B,WAAK,KAAK,EAAC,eAAe,IAAE,IAAI,CAAC,YAAY,CAAO,CACrD,CAAC,CAAC,CAAC,IAAI,CACJ;QACN,eAAa,CACT,CACD,CACR,CAAC;EACJ,CAAC;EAED;;KAEG;EAEI,KAAK,CAAC,kBAAkB,CAAC,KAAY;IAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;EAC9B,CAAC;EAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAoCG;EAEI,KAAK,CAAC,0BAA0B,CACrC,kBAAsC;IAEtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClD,IAAI,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO;MACL,OAAO,EAAE,GAAG,EAAE;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACnE,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;UAChB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;UAC1C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SAC3C;MACH,CAAC;KACF,CAAC;EACJ,CAAC;EAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAiCG;EAEI,KAAK,CAAC,yBAAyB,CACpC,cAA+C;IAE/C,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;EACzE,CAAC;EAED;;;;;;;;KAQG;EAEI,KAAK,CAAC,+BAA+B;IAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI,EAAE;MAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KACxC;;MAAM,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;EAC7D,CAAC;EAED;;;;;;;;;;;;;;KAcG;EAEI,KAAK,CAAC,SAAS,CACpB,MAAc,EACd,QAAiB;IAEjB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;EAC3D,CAAC;EAGM,KAAK,CAAC,sBAAsB;IACjC,OAAO,IAAI,CAAC,mBAAmB,CAAC;EAClC,CAAC;EAED;;;KAGG;EAEI,KAAK,CAAC,kBAAkB;IAG7B,OAAO,IAAI,CAAC,kBAAkB,CAAC;EACjC,CAAC;EAGM,KAAK,CAAC,yBAAyB;IAGpC,OAAO,IAAI,CAAC,sBAAsB,CAAC;EACrC,CAAC;EAED;;KAEG;EAEI,KAAK,CAAC,MAAM;IACjB,OAAO,IAAI,CAAC,KAAK,CAAC;EACpB,CAAC;EAGM,gBAAgB,CAAC,GAAuB;IAC7C,IAAI,GAAG,IAAI,IAAI,EAAE;MACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChB;SAAM;MACL,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;EACH,CAAC;EAED;;KAEG;EAEO,2BAA2B;IACnC,IAAI,CAAC,0CAA0C,EAAE,CAAC;EACpD,CAAC;EAED;;KAEG;EAEO,6BAA6B;IACrC,IAAI,CAAC,4CAA4C,EAAE,CAAC;EACtD,CAAC;EAED;;KAEG;EAEO,gCAAgC;;IACxC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAC9B,IAAI,IAAI,CAAC,oBAAoB,EAAE;MAC7B,MAAA,IAAI,CAAC,sBAAsB,0CAAE,yBAAyB,CAAC,cAAc,CAAC,CAAC;KACxE;SAAM;MACL,MAAA,IAAI,CAAC,sBAAsB,0CAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;KAClE;EACH,CAAC;EAGS,uBAAuB,CAC/B,iBAAyB,EACzB,kBAA0B;IAE1B,IAAI,iBAAiB,KAAK,kBAAkB,EAAE;MAC5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;EACH,CAAC;EAED;;KAEG;EAUO,6BAA6B;IACrC,IAAI,CAAC,sBAAsB,EAAE,CAAC;EAChC,CAAC;EAED;;KAEG;EAEO,qCAAqC;IAC7C,IAAI,CAAC,8BAA8B,EAAE,CAAC;EACxC,CAAC;EAED;;KAEG;EAEO,mBAAmB;IAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC9B,CAAC;EAED;;KAEG;EAEO,sBAAsB;IAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;EAC9B,CAAC;EAED;;;;;;;;KAQG;EAEI,KAAK,CAAC,IAAI,CAAC,GAAW;;IAC3B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,EAAE;MAClD,MAAM,EAAE,0CAA0C,EAAE,GAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;MAE3B,IAAI,CAAC,4BAA4B,EAAE,CAAC;MAEpC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QACjB,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,EAAE;QAC5C,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;QAChD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,YAAY,EAAE,IAAI,CAAC,kBAAkB,EAAE;OACxC,CAAC,CAAC;MACH,MAAM,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,IAAI,CACrB,GAAG,EACH,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CAAC,iBAAiB,EAAE,CACzB,CAAA,CAAC;MACF,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;MAEvB,IAAI,0CAA0C,KAAK,SAAS,EAAE;QAC5D,MAAA,IAAI,CAAC,WAAW,0CAAE,OAAO,CAAC,0CAA0C,CAAC,CAAC;OACvE;KACF;SAAM;MACL,MAAM,IAAI,yBAAyB,CACjC,qDAAqD,CACtD,CAAC;KACH;EACH,CAAC;EAED;;;KAGG;EAEI,KAAK,CAAC,MAAM;;IACjB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MACvB,MAAA,IAAI,CAAC,WAAW,0CAAE,UAAU,EAAE,CAAC;MAC/B,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;MAEzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;KAC/B;IAED,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;MAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;MACpD,IAAI,OAAO,IAAI,IAAI,EAAE;QACnB,OAAO,CAAC,SAAS,CACf,CAAC,EACD,CAAC,EACD,IAAI,CAAC,aAAa,CAAC,KAAK,EACxB,IAAI,CAAC,aAAa,CAAC,MAAM,CAC1B,CAAC;OACH;KACF;EACH,CAAC;EAED;;;;KAIG;EAEI,KAAK,CAAC,KAAK;IAChB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;EAC5B,CAAC;EAED;;KAEG;EAEI,KAAK,CAAC,YAAY;IACvB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC;EACxD,CAAC;EAGO,KAAK,CAAC,cAAc,CAC1B,KAAmC;IAEnC,IAAI,CAAC,kBAAkB;OACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;OACxC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACxC,CAAC;EAEO,oBAAoB,CAAC,MAAwB;IACnD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;MACjC,wCAAwC;MACxC,iCAAiC;MACjC,+CAA+C;MAC/C,IAAI;KACL;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACrC,CAAC;EAEO,mBAAmB,CAAC,OAA8B;IACxD,MAAM,qBAAqB,GACzB,OAAO,CAAC,MAAM,GAAG,CAAC;MAClB,IAAI,CAAC,UAAU,IAAI,IAAI;MACvB,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE7D,IAAI,qBAAqB,EAAE;MACzB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE;QAC5B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;OAC9B;MAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QACpB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;UACjC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;UACvB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;UAC3B,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACxC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;OACzB;KACF;EACH,CAAC;EAEO,2BAA2B;IACjC,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5E,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;MAC9C,SAAS,EAAE,IAAI;MACf,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC1E,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;MAC3C,UAAU,EAAE,IAAI;MAChB,eAAe,EAAE,CAAC,OAAO,CAAC;KAC3B,CAAC,CAAC;EACL,CAAC;EAEO,eAAe;IACrB,SAAS,aAAa,CAAC,EAAW;MAChC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAEjD,QAAQ;OACL,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;OACrD,MAAM,CACL,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;MACrB,GAAG,QAAQ;MACX,OAAO;MACP,GAAG,aAAa,CAAC,OAAO,CAAC;KAC1B,EACD,EAAe,CAChB;OACA,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;MAChB,8DAA8D;MAC7D,IAAY,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;IAC1C,CAAC,CAAC,CAAC;EACP,CAAC;EAEO,gBAAgB;;IACtB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAElD,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAC;MAClB,YAAY,EAAE,eAAe;MAC7B,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,EAAE;KAC7C,CAAC,CAAC;EACL,CAAC;EAEO,4BAA4B;;IAClC,MAAM,aAAa,GAAG,OAAO,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAChC,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,KAAI,IAAI,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,IAAI,EAAE;MACnD,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;MACxE,MAAM,eAAe,GAAG,UAAU,CAAC,QAAQ,CACzC,aAAa,EACb,gBAAgB,CACjB,CAAC;MAEF,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC;MACvC,IAAI,CAAC,UAAU;QACb,eAAe,IAAI,IAAI;UACrB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC;UAClE,CAAC,CAAC,SAAS,CAAC;MAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CACrC,MAAA,IAAI,CAAC,mBAAmB,EAAE,mCAAI,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CACtD,CAAC;KACH;EACH,CAAC;EAEO,8BAA8B;;IACpC,IAAI,IAAI,CAAC,UAAU,EAAE;MACnB,IAAI,CAAC,4BAA4B,EAAE,CAAC;MACpC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;MAExB,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,QAAQ,GAAG,IAAI,MAAK,WAAW,EAAE;QAChD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;OACxC;KACF;EACH,CAAC;EAEO,iBAAiB,CAAC,OAAiB;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;MAClD,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;UAC3B,sBAAsB,EAAE,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;SACpD,CAAC,CAAC;OACJ,CAAC;MACF,IAAI,CAAC,SAAS,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACpD;EACH,CAAC;EAEO,kBAAkB;IACxB,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;MACrE,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;EACL,CAAC;EAEO,wBAAwB,CAC9B,QAA2B,EAC3B,KAAwB;IAExB,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;IAElC,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;MAC/B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KACxC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;MACrC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KACvC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,EAAE;MAC7C,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC9C;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;MACxC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;KAC1C;EACH,CAAC;EAEO,gBAAgB,CACtB,QAA2B,EAC3B,KAAiB;IAEjB,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE;MAClC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;MAC9B,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;KACrD;EACH,CAAC;EAEO,eAAe,CAAC,QAA2B,EAAE,KAAgB;;IACnE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;IAE/B,IAAI,QAAQ,CAAC,IAAI,KAAK,WAAW,EAAE;MACjC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;MAC9B,IAAI,CAAC,cAAc,GAAG,qBAAqB,CACzC,SAAS,EACT,oBAAoB,EAAE,EACtB,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,YAAY,EAC3C,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAC7C,CAAC;MACF,IAAI,CAAC,oBAAoB,CAAC;QACxB,MAAM,EAAE,WAAW;QACnB,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;OACvB,CAAC,CAAC;MACH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;KAC1C;IAED,IAAI,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,EAAE,MAAK,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE;MAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACzC,CAAC;EAEO,sBAAsB,CAC5B,QAA2B,EAC3B,KAAuB;IAEvB,IAAI,QAAQ,CAAC,IAAI,KAAK,mBAAmB,EAAE;MACzC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;MAClC,IAAI,CAAC,oBAAoB,CAAC;QACxB,MAAM,EAAE,mBAAmB;QAC3B,YAAY,EAAE,KAAK,CAAC,OAAO;OAC5B,CAAC,CAAC;KACJ;EACH,CAAC;EAEO,kBAAkB,CACxB,QAA2B,EAC3B,KAAmB;IAEnB,IAAI,QAAQ,CAAC,IAAI,KAAK,cAAc,EAAE;MACpC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;MACvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;MAC9B,IAAI,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;KACvD;EACH,CAAC;EAEO,gBAAgB,CAAC,UAAkC;;IACzD,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;EACzC,CAAC;EAEO,KAAK,CAAC,WAAW,CAAC,KAAY;;IACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAEpD,IACE,IAAI,CAAC,aAAa,IAAI,IAAI;MAC1B,gBAAgB,IAAI,IAAI;MACxB,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,KAAK,EAAE,MAAK,KAAK,CAAC,KAAK,EAAE,EACrC;MACA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;MACnD,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,oBAAoB,CAChD,KAAK,EACL,aAAa,CACd,CAAC;QAEF,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAEzC,MAAM,IAAI,GAAG;UACX,MAAM;UACN,gBAAgB;UAChB,UAAU,EAAE,IAAI,CAAC,UAAU;UAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;UACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;UACvB,UAAU,EAAE,GAAG,EAAE;YACf,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;UAC9B,CAAC;UACD,SAAS,EAAE,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,cAAc,EAAE;cACvB,OAAO,CACL,IAAI,CAAC,UAAU,IAAI,IAAI;gBACvB,UAAU,CAAC,OAAO,CAChB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,eAAe,CAC3C,CACF,CAAC;aACH;YACD,OAAO,IAAI,CAAC;UACd,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;UAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;SAC1B;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEnD,IAAI,UAAU,IAAI,IAAI,EAAE;UACtB,IAAI,CAAC,sBAAsB,EAAE,CAAC;UAE9B,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;SACrC;OACF;KACF;EACH,CAAC;EAEO,sBAAsB;IAC5B,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAElD,QAAQ,CAAC,GAAG,EAAE;;MACZ,MAAA,IAAI,CAAC,sBAAsB,0CAAE,KAAK,CAAC,WAAW,CAC5C,YAAY,EACZ,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CACzE,CAAC;MACF,MAAA,IAAI,CAAC,sBAAsB,0CAAE,KAAK,CAAC,WAAW,CAC5C,YAAY,EACZ,eAAe,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CACzE,CAAC;IACJ,CAAC,CAAC,CAAC;EACL,CAAC;EAEO,KAAK,CAAC,oCAAoC;;IAChD,MAAM,IAAI,CAAC,0CAA0C,EAAE,CAAC;IACxD,MAAM,IAAI,CAAC,sCAAsC,EAAE,CAAC;IACpD,IAAI,CAAC,4CAA4C,EAAE,CAAC;IAEpD,IAAI,IAAI,CAAC,oBAAoB,EAAE;MAC7B,MAAA,IAAI,CAAC,sBAAsB,0CAAE,yBAAyB,CAAC,cAAc,CAAC,CAAC;KACxE;EACH,CAAC;EAEO,qCAAqC;IAC3C,IAAI,CAAC,oCAAoC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAC/D,UAAU,CAAC,OAAO,EAAE,CACrB,CAAC;IACF,IAAI,CAAC,oCAAoC,GAAG,EAAE,CAAC;EACjD,CAAC;EAEO,gCAAgC;IACtC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;MACrD,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;MAC3D,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;QAChB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;OAC1C;IACH,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;EAC/B,CAAC;EAEO,KAAK,CAAC,0CAA0C;;IACtD,IAAI,CAAC,qCAAqC,EAAE,CAAC;IAE7C,IAAI,IAAI,CAAC,cAAc,EAAE;MACvB,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,EAAE;QAC/B,IAAI,CAAC,sBAAsB;UACzB,MAAA,IAAI,CAAC,sBAAsB,mCAC3B,IAAI,yBAAyB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC1D,IAAI,CAAC,sBAAsB,CAC5B,CAAC;QACF,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAClE,IAAI,8BAA8B,EAAE,CACrC,CAAC;QAEF,IAAI,CAAC,oCAAoC,GAAG;UAC1C,cAAc;UACd,sBAAsB;SACvB,CAAC;OACH;WAAM;QACL,yDAAyD;QACzD,IAAI,CAAC,sBAAsB;UACzB,MAAA,IAAI,CAAC,sBAAsB,mCAC3B,IAAI,uBAAuB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC9D,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC1D,IAAI,CAAC,sBAAsB,CAC5B,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC3D,IAAI,uBAAuB,EAAE,CAC9B,CAAC;QAEF,IAAI,CAAC,oCAAoC,GAAG;UAC1C,cAAc;UACd,eAAe;SAChB,CAAC;OACH;KACF;EACH,CAAC;EAEO,4CAA4C;;IAClD,IAAI,CAAC,gCAAgC,EAAE,CAAC;IAExC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MAChD,MAAA,IAAI,CAAC,sBAAsB,0CAAE,0BAA0B,CACrD,IAAI,CAAC,gBAAgB,CACtB,CAAC;MAEF,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAC3C,IAAI,CAAC,MAAM,EACX,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAC9B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAC3B,CAAC;MACF,MAAM,aAAa,GAAG,IAAI,2BAA2B,CACnD,IAAI,CAAC,MAAM,EACX,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAC9B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAC1B,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CACzB,CAAC;MAEF,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;MAC1C,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;MAE9C,IAAI,CAAC,yBAAyB,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;KAC7D;EACH,CAAC;EAEO,KAAK,CAAC,sCAAsC;IAClD,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,EAAE;MACrC,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,EAAE;QAC/B,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,aAAa,EACb,WAAW,EACX,aAAa,EACb,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAC/B,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC/D,qBAAqB,CACtB,CAAC;OACH;WAAM;QACL,MAAM,qBAAqB,GAAG,IAAI,qBAAqB,CACrD,WAAW,EACX,SAAS,EACT,WAAW,EACX,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAC/B,CAAC;QAEF,IAAI,CAAC,oBAAoB,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAC/D,qBAAqB,CACtB,CAAC;OACH;KACF;EACH,CAAC;EAEO,4BAA4B,CAAC,OAA2B;IAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,IAAI,EAAE;MAC3C,MAAM,IAAI,uBAAuB,CAC/B,yEAAyE,CAC1E,CAAC;KACH;IACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;MAC/B,MAAM,IAAI,uBAAuB,CAC/B,sEAAsE,CACvE,CAAC;KACH;IACD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;EAC3E,CAAC;EAEO,oBAAoB;IAC1B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE;MACvB,MAAM,IAAI,4BAA4B,CACpC,oEAAoE,CACrE,CAAC;KACH;IAED,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE;MAClE,CAAC,CAAC,IAAI,yBAAyB,CAC3B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,EAC3C,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EACxB,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAChB,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EACnB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,aAAa,CACnB;MACH,CAAC,CAAC,IAAI,0BAA0B,CAC5B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,CAAC,aAAa,EAC3B,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,YAAY,EAC3C,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,EACxB,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAChB,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EACnB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,aAAa,CACnB,CAAC;EACR,CAAC;EAEO,mBAAmB;IACzB,MAAM,CAAC,qBAAqB,CAAC,GAAG,EAAE;MAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;EACL,CAAC;EAEO,KAAK,CAAC,WAAW;IACvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAEjD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAEhE,OAAO,IAAI,KAAK,CACd,IAAI,CAAC,SAAS,EAAE,EAChB,KAAK,EACL,kBAAkB,CAAC,gBAAgB,CAAC,EACpC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,EAC1B,IAAI,CAAC,QAAQ,EACb,OAAO,EACP,WAAW,CACZ,CAAC;EACJ,CAAC;EAED;;;;KAIG;EACK,kBAAkB;IACxB,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;MACvC,MAAM,eAAe,GAAG,uBAAuB,CAC7C,IAAI,CAAC,WAAW,EAChB,oBAAoB,CACrB,CAAC;MACF,MAAM,gBAAgB,GAAG,uBAAuB,CAC9C,IAAI,CAAC,WAAW,EAChB,qBAAqB,CACtB,CAAC;MACF,MAAM,aAAa,GAAG,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,gBAAgB,CAAC;MAE1D,OAAO,aAAa,IAAI,IAAI;QAC1B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC;QAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;KACjC;EACH,CAAC;EAEO,SAAS;IACf,OAAO,4BAA4B,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EACxD,CAAC;EAEO,mBAAmB;IACzB,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,KAAK,CAAC,eAAe;MACnD,CAAC,CAAC,IAAI,CAAC,UAAU;MACjB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;EAC1B,CAAC;EAEO,aAAa;IACnB,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IACpD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,gBAAgB,IAAI,IAAI,EAAE;MACvD,OAAO,KAAK,CAAC,MAAM,CACjB,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CACjD,CAAC;KACH;EACH,CAAC;EAEO,mBAAmB;IACzB,OAAO;MACL,YAAY,EAAE,IAAI,CAAC,mCAAmC,EAAE;MACxD,4BAA4B,EAAE,IAAI,CAAC,4BAA4B;MAC/D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;MAC7C,YAAY,EAAE,IAAI,CAAC,YAAY;MAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;MAC7B,MAAM,EAAE;QACN,oBAAoB,EAAE,IAAI,CAAC,kBAAkB,EAAE;OAChD;MACD,eAAe,EAAE,IAAI,CAAC,eAAe;MACrC,OAAO,EAAE,IAAI,CAAC,OAAO;MACrB,eAAe,EAAE,IAAI,CAAC,eAAe;MACrC,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;KAClD,CAAC;EACJ,CAAC;EAEO,sBAAsB,CAAC,UAAiC;IAC9D,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;MAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;MAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;KAC/C;EACH,CAAC;EAEO,sBAAsB;;IAC5B,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;EACxE,CAAC;EAEO,8BAA8B;;IACpC,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAC;MAClB,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;KACxD,CAAC,CAAC;EACL,CAAC;EAEO,oBAAoB,CAAC,aAAqB;IAChD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;MACtB,MAAM,yBAAyB,GAC7B,CAAC,aAAa,IAAI,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;QACrE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;MAC3C,MAAM,0BAA0B,GAC9B,CAAC,aAAa,IAAI,IAAI;QACpB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;MAE1C,IAAI,yBAAyB,IAAI,0BAA0B,EAAE;QAC3D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE;UACvD,CAAC,CAAC,aAAa;UACf,CAAC,CAAC,cAAc,CAAC;QACnB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAC3C,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAC3C,CAAC;OACH;KACF;EACH,CAAC;EAEO,gBAAgB;;IACtB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;MACtB,IACE,IAAI,CAAC,UAAU,KAAK,cAAc;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,EACvC;QACA,MAAA,IAAI,CAAC,MAAM,0CAAE,aAAa,CAAC;UACzB,MAAM,EAAE,WAAW,CAAC,UAAU,CAC5B,WAAW,CAAC,cAAc,CACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAC7B,CACF;SACF,CAAC,CAAC;OACJ;WAAM,IACL,IAAI,CAAC,UAAU,KAAK,aAAa;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,EACxC;QACA,MAAA,IAAI,CAAC,MAAM,0CAAE,aAAa,CAAC;UACzB,MAAM,EAAE,WAAW,CAAC,UAAU,CAC5B,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CACnD;SACF,CAAC,CAAC;OACJ;KACF;EACH,CAAC;EAEO,mCAAmC;;IACzC,MAAM,WAAW,GACf,MAAA,IAAI,CAAC,YAAY,mCAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzE,OAAO,WAAW,CAAC;EACrB,CAAC;EAEO,oBAAoB;IAC1B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;EACjE,CAAC;EAEO,iBAAiB;IACvB,OAAO,eAAe,CACpB,8BAA8B,EAC9B,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAC1B,CAAC;EACJ,CAAC;EAEO,SAAS;IACf,OAAO,eAAe,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACnE,CAAC;EAEO,WAAW;IACjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;MACzB,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,eAAe,CAC7B,WAAW,CAAC,SAAS,EACrB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAC9B,CAAC;OACH;MAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;OACxE;MAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE9B,IAAI;UACF,kBAAkB,CAAC,WAAW,CAAC,SAAS,EAAE;YACxC,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ;WAC7B,CAAC,CAAC;SACJ;QAAC,OAAO,CAAC,EAAE;UACV,OAAO,CAAC,IAAI,CACV,yDAAyD,CAC1D,CAAC;SACH;OACF;KACF;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC;EACvB,CAAC;EAEO,KAAK,CAAC,qBAAqB;IACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,WAAW,EAAE;MAClD,OAAO,CAAC,KAAK,CACX,yEAAyE,CAC1E,CAAC;MACF,OAAO,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,EAAE;UAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE;YAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;WAChB;QACH,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,GAAG,EAAE;UACd,UAAU,CAAC,OAAO,EAAE,CAAC;UACrB,MAAM,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC9D,CAAC,EAAE,4BAA4B,CAAC,CAAC;MACnC,CAAC,CAAC,CAAC;KACJ;IAED,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;EACnC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF;AAED,SAAS,eAAe,CAAI,QAAgB,EAAE,MAA2B;EACvE,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC;EACvB,IAAI,KAAK,IAAI,IAAI,EAAE;IACjB,OAAO,KAAK,CAAC;GACd;;IAAM,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { toProtoDuration, WebSocketClientImpl } from '@vertexvis/stream-api';\nimport { Color, Disposable, EventDispatcher, UUID } from '@vertexvis/utils';\nimport classnames from 'classnames';\n\nimport {\n FeatureHighlightOptions,\n FeatureLineOptions,\n FrameType,\n PhantomOptions,\n SceneComparisonOptions,\n SelectionHighlightingOptions,\n StreamAttributes,\n} from '../../interfaces';\nimport {\n AnnotationController,\n AnnotationState,\n} from '../../lib/annotations/controller';\nimport { Config, parseConfig, PartialConfig } from '../../lib/config';\nimport { Cursor, CursorManager } from '../../lib/cursors';\nimport { cssCursor } from '../../lib/dom';\nimport { Environment } from '../../lib/environment';\nimport {\n ComponentInitializationError,\n InteractionHandlerError,\n ViewerInitializationError,\n} from '../../lib/errors';\nimport {\n InteractionApiOrthographic,\n InteractionApiPerspective,\n} from '../../lib/interactions';\nimport { BaseInteractionHandler } from '../../lib/interactions/baseInteractionHandler';\nimport { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';\nimport { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';\nimport { InteractionApi } from '../../lib/interactions/interactionApi';\nimport { InteractionHandler } from '../../lib/interactions/interactionHandler';\nimport { KeyInteraction } from '../../lib/interactions/keyInteraction';\nimport { MouseInteractionHandler } from '../../lib/interactions/mouseInteractionHandler';\nimport { MultiPointerInteractionHandler } from '../../lib/interactions/multiPointerInteractionHandler';\nimport { PointerInteractionHandler } from '../../lib/interactions/pointerInteractionHandler';\nimport { TapEventDetails } from '../../lib/interactions/tapEventDetails';\nimport { TapInteractionHandler } from '../../lib/interactions/tapInteractionHandler';\nimport { TouchInteractionHandler } from '../../lib/interactions/touchInteractionHandler';\nimport { fromPbFrameOrThrow } from '../../lib/mappers';\nimport { paintTime, Timing } from '../../lib/meters';\nimport { ModelViewController } from '../../lib/model-views/controller';\nimport {\n CanvasRenderer,\n createCanvasRenderer,\n measureCanvasRenderer,\n} from '../../lib/rendering';\nimport { Scene } from '../../lib/scenes/scene';\nimport { writeDOM } from '../../lib/stencil';\nimport {\n getStorageEntry,\n StorageKeys,\n upsertStorageEntry,\n} from '../../lib/storage';\nimport {\n Connected,\n Connecting,\n ConnectionFailed,\n Disconnected,\n ViewerStreamState,\n} from '../../lib/stream/state';\nimport { ViewerStream } from '../../lib/stream/stream';\nimport {\n FrameCamera,\n Orientation,\n SceneViewSummary,\n StencilBufferManager,\n Viewport,\n} from '../../lib/types';\nimport { Frame, FrameCameraBase } from '../../lib/types/frame';\nimport { FrameCameraType } from '../../lib/types/frameCamera';\nimport {\n DEFAULT_VIEWER_SCENE_WAIT_MS,\n getElementBoundingClientRect,\n getElementPropertyValue,\n} from './utils';\n\ninterface ConnectedStatus {\n jwt: string;\n status: 'connected';\n}\n\ninterface ConnectingStatus {\n status: 'connecting';\n}\n\ninterface DisconnectedStatus {\n status: 'disconnected';\n}\n\ninterface ConnectionFailedStatus {\n status: 'connection-failed';\n errorMessage: string;\n}\n\n/**\n * Internal state values for the component. Used to preserve values across live\n * reload refreshes.\n */\ninterface StateMap {\n streamWorldOrientation?: Orientation;\n cursorManager: CursorManager;\n interactionTarget?: HTMLElement;\n streamState: ViewerStreamState;\n streamListeners?: Disposable;\n}\n\n/** @internal */\nexport type ConnectionStatus =\n | ConnectingStatus\n | ConnectedStatus\n | DisconnectedStatus\n | ConnectionFailedStatus;\n\n@Component({\n tag: 'vertex-viewer',\n styleUrl: 'viewer.css',\n shadow: true,\n})\nexport class Viewer {\n @Element() private hostElement!: HTMLVertexViewerElement;\n\n /**\n * A URN of the scene resource to load when the component is mounted in the\n * DOM tree. The specified resource is a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n */\n @Prop() public src?: string;\n\n /**\n * The Client ID associated with your Vertex Application.\n */\n @Prop() public clientId?: string;\n\n /**\n * Property used for internals or testing.\n *\n * @private\n * @internal\n */\n @Prop({ mutable: true }) public deviceId?: string;\n\n /**\n * An object or JSON encoded string that defines configuration settings for\n * the viewer.\n */\n @Prop() public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n *\n * @see Viewer.config\n */\n @Prop() public configEnv: Environment = 'platprod';\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public resolvedConfig?: Config;\n\n /**\n * Enables or disables the default mouse and touch interactions provided by\n * the viewer. Enabled by default.\n */\n @Prop() public cameraControls = true;\n\n /**\n * The type of camera model to represent the scene with. Can be either\n * `perspective` or `orthographic`, and defaults to `perspective`.\n */\n @Prop({ mutable: true, reflect: true }) public cameraType: FrameCameraType =\n 'perspective';\n\n /**\n * Enables or disables the default keyboard shortcut interactions provided by\n * the viewer. Enabled by default, requires `cameraControls` being enabled.\n *\n */\n @Prop() public keyboardControls = true;\n\n /**\n * Enables or disables the default rotation interaction being changed to\n * rotate around the pointer down location.\n */\n @Prop() public rotateAroundTapPoint = true;\n\n /**\n * A token that can be used to make API calls to other Vertex services.\n *\n * @internal\n */\n @Prop({ mutable: true }) public token?: string;\n\n /**\n * Specifies when a depth buffer is requested from rendering. Possible values\n * are:\n *\n * * `undefined`: A depth buffer is never requested.\n * * `final`: A depth buffer is only requested on the final frame.\n * * `all`: A depth buffer is requested for every frame.\n *\n * Depth buffers can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public depthBuffers?: FrameType;\n\n /**\n * Specifies how phantom parts should appear.\n * The opacity must be between 0 and 1, where 0 is completely hidden and 1 is completely visible.\n */\n @Prop({ attribute: null })\n public phantom?: PhantomOptions = { opacity: 0.1 };\n\n /**\n * Specifies whether to use the default lights for the scene. When false, default\n * lights are used. When true, no default lights are used, and the lights must\n * be specified separately.\n */\n @Prop() public noDefaultLights = false;\n\n /**\n * Specifies whether to enable temporal refinement of still images.\n */\n @Prop() public enableTemporalRefinement = true;\n\n /**\n * @private\n * @internal\n * Specifies experimental rendering options. For Vertex use only.\n */\n @Prop() public experimentalRenderingOptions = '';\n\n /**\n * Specifies if and how to render feature lines.\n */\n @Prop({ attribute: null }) public featureLines?: FeatureLineOptions;\n\n /**\n * Specifies the halo selection properties.\n * Parameter notes:\n * * lineWidth values supported currently are 0-5. This width is currently the value x2. For example, 1 will have a pixel width of 2.\n * * color is optional. This will be the color of the selected items in the viewer.\n * * opacity is also optional. The opacity will be applied to everything selected besides the highlighted outer line.\n */\n @Prop({ attribute: null })\n public selectionHighlighting?: SelectionHighlightingOptions;\n\n /**\n * Specifies how selected features should be highlighted.\n */\n @Prop({ attribute: null })\n public featureHighlighting?: FeatureHighlightOptions;\n\n /**\n * Specifies if and how to compare to another scene\n */\n @Prop({ attribute: null })\n public sceneComparison?: SceneComparisonOptions;\n\n /**\n * Specifies when a feature map is returned from rendering. Feature maps\n * include information about the surfaces, edges and cross sections that are\n * in a frame.\n *\n * Possible values are:\n *\n * * `undefined`: A feature map is never requested.\n * * `final`: A feature map is only requested on the final frame.\n * * `all`: A feature map is requested for every frame.\n *\n * Feature maps can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public featureMaps?: FrameType;\n\n /**\n * An optional value that will debounce frame updates when resizing\n * this viewer element.\n */\n @Prop() public resizeDebounce = 100;\n\n /**\n * The last frame that was received, which can be used to inspect the scene\n * and camera information.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public frame: Frame | undefined;\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public stream?: ViewerStream;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public stencilBuffer: StencilBufferManager = new StencilBufferManager(\n this.hostElement\n );\n\n /**\n * Represents the current viewport of the viewer. The viewport represents the\n * dimensions of the canvas where a frame is rendered. It contains methods for\n * translating between viewport coordinates, frame coordinates and world\n * coordinates.\n */\n @Prop({ mutable: true })\n public viewport: Viewport = Viewport.fromDimensions(Dimensions.create(0, 0));\n\n /**\n * The annotation controller for accessing annotations associated with the\n * scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public annotations: AnnotationController | undefined;\n\n /**\n * The controller for accessing model views associated with the scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public modelViews: ModelViewController | undefined;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer.\n * The event includes the location of the tap or click.\n *\n * This event can be used in combination with the {@link VertexViewer.scene scene} method\n * to query for items at the point of the tap.\n *\n * @see {@link Scene.raycaster Scene.raycaster} for more information.\n */\n @Event() public tap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user double taps or clicks a location in the viewer.\n * The event includes the location of the first tap or click.\n */\n @Event() public doubletap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer and the\n * configured amount of time passes without receiving a mouseup or touchend.\n * The event includes the location of the tap or click.\n */\n @Event() public longpress!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event when a frame has been received by the viewer. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameReceived!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a frame has been drawn to the viewer's canvas. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameDrawn!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a provided oauth2 token is about to expire, or is about to expire,\n * causing issues with establishing a websocket connection, or performing API calls.\n */\n @Event() public tokenExpired!: EventEmitter<void>;\n\n /**\n * Emits an event when the connection status changes for the viewer\n */\n @Event() public connectionChange!: EventEmitter<ConnectionStatus>;\n\n /**\n * Emits an event when the scene is ready to be interacted with.\n */\n @Event() public sceneReady!: EventEmitter<void>;\n\n /**\n * Emits an event when a frame is received with a different scene attribute.\n */\n @Event() public sceneChanged!: EventEmitter<void>;\n\n /**\n * Emits an event when the user has started an interaction.\n */\n @Event() public interactionStarted!: EventEmitter<void>;\n\n /**\n * Emits an event when the user hs finished an interaction.\n */\n @Event() public interactionFinished!: EventEmitter<void>;\n\n /**\n * Emits an event when the camera has changed.\n */\n @Event() public cameraChanged!: EventEmitter<FrameCameraBase | undefined>;\n\n /**\n * Emits an event when the camera type changes.\n */\n @Event() public cameraTypeChanged!: EventEmitter<FrameCameraType>;\n\n /**\n * Emits an event when the state for annotation changes.\n */\n @Event() public annotationStateChanged!: EventEmitter<AnnotationState>;\n\n /**\n * Used for internals or testing.\n *\n * @private\n */\n @Event() public deviceIdChange!: EventEmitter<string>;\n\n @Event() public dimensionschange!: EventEmitter<Dimensions.Dimensions>;\n\n @State() private dimensions?: Dimensions.Dimensions;\n @State() private hostDimensions?: Dimensions.Dimensions;\n @State() private errorMessage?: string;\n\n @State() private cursor?: Cursor;\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() private stateMap: StateMap = {\n cursorManager: new CursorManager(),\n streamState: { type: 'disconnected' },\n };\n\n private viewerContainerElement?: HTMLElement;\n private canvasContainerElement?: HTMLElement;\n private canvasElement?: HTMLCanvasElement;\n\n private canvasRenderer!: CanvasRenderer;\n\n private mutationObserver?: MutationObserver;\n private styleObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private isResizing?: boolean;\n private isResizeUpdate?: boolean;\n\n private resizeTimer?: NodeJS.Timeout;\n\n private interactionHandlers: InteractionHandler[] = [];\n private defaultInteractionHandlerDisposables: Array<Disposable> = [];\n private tapHandlerDisposable?: Disposable;\n private interactionApi!: InteractionApi;\n private tapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private defaultTapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private baseInteractionHandler?: BaseInteractionHandler;\n\n private internalFrameDrawnDispatcher = new EventDispatcher<Frame>();\n\n public constructor() {\n this.handleElementResize = this.handleElementResize.bind(this);\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateResolvedConfig();\n this.calculateComponentDimensions();\n\n this.resizeObserver = new ResizeObserver(this.handleElementResize);\n this.registerSlotChangeListeners();\n\n const config = this.getResolvedConfig();\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n\n this.annotations = new AnnotationController(\n client,\n () => this.token,\n () => this.deviceId\n );\n this.annotations.onStateChange.on((state) =>\n this.annotationStateChanged.emit(state)\n );\n\n this.stream =\n this.stream ??\n new ViewerStream(new WebSocketClientImpl(), {\n loggingEnabled: config.flags.logWsMessages,\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n this.addStreamListeners();\n\n this.modelViews = new ModelViewController(\n client,\n this.stream,\n () => this.token,\n () => this.deviceId\n );\n\n this.updateStreamAttributes();\n this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.interactionApi = this.createInteractionApi();\n\n if (this.canvasContainerElement != null) {\n this.resizeObserver?.observe(this.canvasContainerElement);\n }\n\n if (this.src != null) {\n this.load(this.src).catch((e) => {\n console.error('Error loading scene', e);\n });\n }\n\n await this.initializeDefaultInteractionHandlers();\n this.injectViewerApi();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n ref={(ref) => (this.viewerContainerElement = ref)}\n class=\"viewer-container\"\n style={{ cursor: cssCursor(this.cursor ?? '') }}\n onContextMenu={(event) => event.preventDefault()}\n >\n <div\n ref={(ref) => (this.canvasContainerElement = ref)}\n class={classnames('canvas-container', {\n 'enable-pointer-events ': window.PointerEvent != null,\n })}\n >\n <canvas\n ref={(ref) => {\n this.canvasElement = ref;\n this.stateMap.interactionTarget = ref;\n }}\n class=\"canvas\"\n ></canvas>\n {this.errorMessage != null ? (\n <div class=\"error-message\">{this.errorMessage}</div>\n ) : null}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n /**\n * @internal\n */\n @Method()\n public async dispatchFrameDrawn(frame: Frame): Promise<void> {\n this.frame = frame;\n this.internalFrameDrawnDispatcher.emit(frame);\n this.frameDrawn.emit(frame);\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerInteractionHandler(\n interactionHandler: InteractionHandler\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers a key interaction to be invoked when a specific set of\n * keys are pressed during a `tap` event.\n *\n * `KeyInteraction`s are used to build custom keyboard shortcuts for the\n * viewer using the current state of they keyboard to determine whether\n * the `fn` should be invoked. Use `<vertex-viewer keyboard-controls=\"false\" />`\n * to disable the default keyboard shortcuts provided by the viewer.\n *\n * @example\n * ```\n * class CustomKeyboardInteraction extends KeyInteraction<TapEventDetails> {\n * constructor(private viewer: HTMLVertexViewerElement) {}\n *\n * public predicate(keyState: KeyState): boolean {\n * return keyState['Alt'];\n * }\n *\n * public async fn(event: TapEventDetails) {\n * const scene = await this.viewer.scene();\n * const result = await scene.raycaster().hitItems(event.position);\n *\n * if (result.hits.length > 0) {\n * await scene\n * .camera()\n * .fitTo(q => q.withItemId(result.hits[0].itemId))\n * .render();\n * }\n * }\n * }\n * ```\n *\n * @param keyInteraction - The `KeyInteraction` to register.\n */\n @Method()\n public async registerTapKeyInteraction(\n keyInteraction: KeyInteraction<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions = [...this.tapKeyInteractions, keyInteraction];\n }\n\n /**\n * The HTML element that will handle interaction events from the user. Used by\n * components to listen for interaction events from the same element as the\n * viewer. Note, this property maybe removed in the future when refactoring\n * our interaction handling.\n *\n * @internal\n * @deprecated Use `InteractionHandler`.\n */\n @Method()\n public async getInteractionTarget_DEPRECATED(): Promise<HTMLElement> {\n if (this.stateMap.interactionTarget != null) {\n return this.stateMap.interactionTarget;\n } else throw new Error('Interaction target is undefined.');\n }\n\n /**\n * Adds a cursor to the viewer, and displays it if the cursor has the highest\n * priority.\n *\n * Cursors are managed as a prioritized list. A cursor is displayed if it has\n * the highest priority or if the cursor is the most recently added cursor in\n * the set of cursors with the same priority.\n *\n * To remove a cursor, call `dispose()` on the returned disposable.\n *\n * @param cursor The cursor to add.\n * @param priority The priority of the cursor.\n * @returns A disposable that can be used to remove the cursor.\n * @see See {@link CursorManager} for constants to pass to `priority`.\n */\n @Method()\n public async addCursor(\n cursor: Cursor,\n priority?: number\n ): Promise<Disposable> {\n return this.stateMap.cursorManager.add(cursor, priority);\n }\n\n @Method()\n public async getInteractionHandlers(): Promise<InteractionHandler[]> {\n return this.interactionHandlers;\n }\n\n /**\n * @internal\n * @ignore\n */\n @Method()\n public async getKeyInteractions(): Promise<\n KeyInteraction<TapEventDetails>[]\n > {\n return this.tapKeyInteractions;\n }\n\n @Method()\n public async getBaseInteractionHandler(): Promise<\n BaseInteractionHandler | undefined\n > {\n return this.baseInteractionHandler;\n }\n\n /**\n * @deprecated Use `token`.\n */\n @Method()\n public async getJwt(): Promise<string | undefined> {\n return this.token;\n }\n\n @Watch('src')\n public handleSrcChanged(src: string | undefined): void {\n if (src != null) {\n this.load(src);\n } else {\n this.unload();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('cameraControls')\n protected handleCameraControlsChanged(): void {\n this.initializeDefaultCameraInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('keyboardControls')\n protected handleKeyboardControlsChanged(): void {\n this.initializeDefaultKeyboardInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('rotateAroundTapPoint')\n protected handleRotateAboutTapPointChanged(): void {\n this.updateStreamAttributes();\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n } else {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate');\n }\n }\n\n @Watch('cameraType')\n protected handleCameraTypeChanged(\n updatedCameraType: string,\n previousCameraType: string\n ): void {\n if (updatedCameraType !== previousCameraType) {\n this.updateCameraType();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('experimentalRenderingOptions')\n @Watch('depthBuffers')\n @Watch('featureHighlighting')\n @Watch('featureLines')\n @Watch('featureMaps')\n @Watch('noDefaultLights')\n @Watch('phantom')\n @Watch('sceneComparison')\n @Watch('selectionHighlighting')\n protected handleStreamAttributesChanged(): void {\n this.updateStreamAttributes();\n }\n\n /**\n * @ignore\n */\n @Watch('enableTemporalRefinement')\n protected handleEnableTemporalRefinementChanged(): void {\n this.updateEnableTemporalRefinement();\n }\n\n /**\n * @ignore\n */\n @Watch('config')\n protected handleConfigChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * @ignore\n */\n @Watch('configEnv')\n protected handleConfigEnvChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * Loads the given scene into the viewer and return a `Promise` that\n * resolves when the scene has been loaded. The specified scene is\n * provided as a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n *\n * @param urn The URN of the resource to load.\n */\n @Method()\n public async load(urn: string): Promise<void> {\n if (this.stream != null && this.dimensions != null) {\n const { EXPERIMENTAL_annotationPollingIntervalInMs } =\n this.getResolvedConfig();\n\n this.calculateComponentDimensions();\n\n this.stream.update({\n streamAttributes: this.getStreamAttributes(),\n config: parseConfig(this.configEnv, this.config),\n dimensions: this.dimensions,\n frameBgColor: this.getBackgroundColor(),\n });\n await this.stream?.load(\n urn,\n this.clientId,\n this.getDeviceId(),\n this.getResolvedConfig()\n );\n this.sceneReady.emit();\n\n if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {\n this.annotations?.connect(EXPERIMENTAL_annotationPollingIntervalInMs);\n }\n } else {\n throw new ViewerInitializationError(\n 'Cannot load scene. Viewer has not been initialized.'\n );\n }\n }\n\n /**\n * Disconnects the websocket and removes any internal state associated with\n * the scene.\n */\n @Method()\n public async unload(): Promise<void> {\n if (this.stream != null) {\n this.annotations?.disconnect();\n this.stream.disconnect();\n\n this.frame = undefined;\n this.errorMessage = undefined;\n }\n\n if (this.canvasElement != null) {\n const context = this.canvasElement.getContext('2d');\n if (context != null) {\n context.clearRect(\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n }\n }\n }\n\n /**\n * Returns an object that is used to perform operations on the `Scene` that's\n * currently being viewed. These operations include updating items,\n * positioning the camera and performing hit tests.\n */\n @Method()\n public async scene(): Promise<Scene> {\n return this.createScene();\n }\n\n /**\n * Returns `true` indicating that the scene is ready to be interacted with.\n */\n @Method()\n public async isSceneReady(): Promise<boolean> {\n return this.stateMap.streamState.type === 'connected';\n }\n\n @Listen('tap')\n private async handleTapEvent(\n event: CustomEvent<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions\n .filter((i) => i.predicate(event.detail))\n .forEach((i) => i.fn(event.detail));\n }\n\n private emitConnectionChange(status: ConnectionStatus): void {\n if (status.status === 'connected') {\n // NOTE: Uncomment once FSS is deployed.\n // if (status.jwt.length === 0) {\n // throw new MissingJWTError('JWT is empty');\n // }\n }\n this.connectionChange.emit(status);\n }\n\n private handleElementResize(entries: ResizeObserverEntry[]): void {\n const dimensionsHaveChanged =\n entries.length > 0 &&\n this.dimensions != null &&\n !Dimensions.isEqual(entries[0].contentRect, this.viewport);\n\n if (dimensionsHaveChanged) {\n if (this.resizeTimer != null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n\n if (!this.isResizing) {\n this.resizeTimer = setTimeout(() => {\n this.isResizing = true;\n this.isResizeUpdate = true;\n this.recalculateComponentDimensions();\n }, this.resizeDebounce);\n }\n }\n }\n\n private registerSlotChangeListeners(): void {\n this.mutationObserver = new MutationObserver((_) => this.injectViewerApi());\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n\n this.styleObserver = new MutationObserver((_) => this.syncViewerStyles());\n this.styleObserver.observe(this.hostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n private injectViewerApi(): void {\n function queryChildren(el: Element): HTMLElement[] {\n return Array.from(el.querySelectorAll('*'));\n }\n\n const children = queryChildren(this.hostElement);\n\n children\n .filter((node) => node.nodeName.startsWith('VERTEX-'))\n .reduce(\n (elements, element) => [\n ...elements,\n element,\n ...queryChildren(element),\n ],\n [] as Element[]\n )\n .forEach((node) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any).viewer = this.hostElement;\n });\n }\n\n private syncViewerStyles(): void {\n const backgroundColor = this.getBackgroundColor();\n\n this.stream?.update({\n frameBgColor: backgroundColor,\n streamAttributes: this.getStreamAttributes(),\n });\n }\n\n private calculateComponentDimensions(): void {\n const maxPixelCount = 2073600;\n const bounds = this.getBounds();\n if (bounds?.width != null && bounds?.height != null) {\n const measuredViewport = Dimensions.create(bounds.width, bounds.height);\n const trimmedViewport = Dimensions.scaleFit(\n maxPixelCount,\n measuredViewport\n );\n\n this.hostDimensions = measuredViewport;\n this.dimensions =\n trimmedViewport != null\n ? Dimensions.create(trimmedViewport.width, trimmedViewport.height)\n : undefined;\n this.viewport = Viewport.fromDimensions(\n this.getCanvasDimensions() ?? Dimensions.create(0, 0)\n );\n }\n }\n\n private recalculateComponentDimensions(): void {\n if (this.isResizing) {\n this.calculateComponentDimensions();\n this.isResizing = false;\n\n if (this.stream?.getState().type === 'connected') {\n this.updateDimensions(this.dimensions);\n }\n }\n }\n\n private reportPerformance(timings: Timing[]): void {\n if (this.stateMap.streamState.type === 'connected') {\n const payload = {\n timings: timings.map((t) => ({\n receiveToPaintDuration: toProtoDuration(t.duration),\n })),\n };\n this.getStream().recordPerformance(payload, false);\n }\n }\n\n private addStreamListeners(): void {\n this.stateMap.streamListeners = this.getStream().stateChanged.on((s) => {\n this.handleStreamStateChanged(this.stateMap.streamState, s);\n });\n }\n\n private handleStreamStateChanged(\n previous: ViewerStreamState,\n state: ViewerStreamState\n ): void {\n this.stateMap.streamState = state;\n\n if (state.type === 'connecting') {\n this.handleConnecting(previous, state);\n } else if (state.type === 'connected') {\n this.handleConnected(previous, state);\n } else if (state.type === 'connection-failed') {\n this.handleConnectionFailed(previous, state);\n } else if (state.type === 'disconnected') {\n this.handleDisconnected(previous, state);\n }\n }\n\n private handleConnecting(\n previous: ViewerStreamState,\n state: Connecting\n ): void {\n if (previous.type !== 'connecting') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'connecting' });\n }\n }\n\n private handleConnected(previous: ViewerStreamState, state: Connected): void {\n this.token = state.token.token;\n\n if (previous.type !== 'connected') {\n this.errorMessage = undefined;\n this.canvasRenderer = measureCanvasRenderer(\n paintTime,\n createCanvasRenderer(),\n this.getResolvedConfig().flags.logFrameRate,\n (timings) => this.reportPerformance(timings)\n );\n this.emitConnectionChange({\n status: 'connected',\n jwt: state.token.token,\n });\n this.deviceIdChange.emit(state.deviceId);\n }\n\n if (this.frame?.getId() !== state.frame.getId()) {\n this.updateFrame(state.frame);\n }\n\n this.updateDimensions(this.dimensions);\n }\n\n private handleConnectionFailed(\n previous: ViewerStreamState,\n state: ConnectionFailed\n ): void {\n if (previous.type !== 'connection-failed') {\n this.token = undefined;\n this.errorMessage = state.message;\n this.emitConnectionChange({\n status: 'connection-failed',\n errorMessage: state.message,\n });\n }\n }\n\n private handleDisconnected(\n previous: ViewerStreamState,\n state: Disconnected\n ): void {\n if (previous.type !== 'disconnected') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'disconnected' });\n }\n }\n\n private updateDimensions(dimensions?: Dimensions.Dimensions): void {\n this.stream?.update({ dimensions });\n this.dimensionschange.emit(dimensions);\n }\n\n private async updateFrame(frame: Frame): Promise<void> {\n const canvasDimensions = this.getCanvasDimensions();\n\n if (\n this.canvasElement != null &&\n canvasDimensions != null &&\n this.frame?.getId() !== frame.getId()\n ) {\n const canvas = this.canvasElement.getContext('2d');\n if (canvas != null) {\n const previousFrame = this.frame;\n this.frame = SceneViewSummary.copySummaryIfInvalid(\n frame,\n previousFrame\n );\n\n this.updateInteractionApi(previousFrame);\n\n const data = {\n canvas,\n canvasDimensions,\n dimensions: this.dimensions,\n frame: this.frame,\n viewport: this.viewport,\n beforeDraw: () => {\n this.updateCanvasDimensions(canvasDimensions);\n this.isResizeUpdate = false;\n },\n predicate: () => {\n if (this.isResizeUpdate) {\n return (\n this.dimensions == null ||\n Dimensions.isEqual(\n this.dimensions,\n data.frame.image.imageAttr.frameDimensions\n )\n );\n }\n return true;\n },\n };\n\n this.frameReceived.emit(this.frame);\n\n if (this.frame.scene.hasChanged) {\n this.sceneChanged.emit();\n }\n\n const drawnFrame = await this.canvasRenderer(data);\n\n if (drawnFrame != null) {\n this.updateViewerBackground();\n\n this.dispatchFrameDrawn(drawnFrame);\n }\n }\n }\n }\n\n private updateViewerBackground(): void {\n const backgroundColor = this.getBackgroundColor();\n\n writeDOM(() => {\n this.viewerContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n this.canvasContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n });\n }\n\n private async initializeDefaultInteractionHandlers(): Promise<void> {\n await this.initializeDefaultCameraInteractionHandlers();\n await this.initializeDefaultTapInteractionHandler();\n this.initializeDefaultKeyboardInteractionHandlers();\n\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n }\n }\n\n private clearDefaultCameraInteractionHandlers(): void {\n this.defaultInteractionHandlerDisposables.forEach((disposable) =>\n disposable.dispose()\n );\n this.defaultInteractionHandlerDisposables = [];\n }\n\n private clearDefaultKeyboardInteractions(): void {\n this.defaultTapKeyInteractions.forEach((interaction) => {\n const index = this.tapKeyInteractions.indexOf(interaction);\n if (index !== -1) {\n this.tapKeyInteractions.splice(index, 1);\n }\n });\n this.tapKeyInteractions = [];\n }\n\n private async initializeDefaultCameraInteractionHandlers(): Promise<void> {\n this.clearDefaultCameraInteractionHandlers();\n\n if (this.cameraControls) {\n if (window.PointerEvent != null) {\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new PointerInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const multiPointerDisposable = await this.registerInteractionHandler(\n new MultiPointerInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n multiPointerDisposable,\n ];\n } else {\n // fallback to touch events and mouse events as a default\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new MouseInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const touchDisposable = await this.registerInteractionHandler(\n new TouchInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n touchDisposable,\n ];\n }\n }\n }\n\n private initializeDefaultKeyboardInteractionHandlers(): void {\n this.clearDefaultKeyboardInteractions();\n\n if (this.keyboardControls && this.stream != null) {\n this.baseInteractionHandler?.setDefaultKeyboardControls(\n this.keyboardControls\n );\n\n const flyToPart = new FlyToPartKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale()\n );\n const flyToPosition = new FlyToPositionKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n () => this.createScene()\n );\n\n this.registerTapKeyInteraction(flyToPart);\n this.registerTapKeyInteraction(flyToPosition);\n\n this.defaultTapKeyInteractions = [flyToPart, flyToPosition];\n }\n }\n\n private async initializeDefaultTapInteractionHandler(): Promise<void> {\n if (this.tapHandlerDisposable == null) {\n if (window.PointerEvent != null) {\n const tapInteractionHandler = new TapInteractionHandler(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n } else {\n const tapInteractionHandler = new TapInteractionHandler(\n 'mousedown',\n 'mouseup',\n 'mousemove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n }\n }\n }\n\n private initializeInteractionHandler(handler: InteractionHandler): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.'\n );\n }\n if (this.interactionApi == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction APi is undefined.'\n );\n }\n handler.initialize(this.stateMap.interactionTarget, this.interactionApi);\n }\n\n private createInteractionApi(): InteractionApi {\n if (this.stream == null) {\n throw new ComponentInitializationError(\n 'Cannot create interaction API. Component has not been initialized.'\n );\n }\n\n return this.frame == null || this.frame.scene.camera.isPerspective()\n ? new InteractionApiPerspective(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished,\n this.cameraChanged\n )\n : new InteractionApiOrthographic(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished,\n this.cameraChanged\n );\n }\n\n private handleCursorChanged(): void {\n window.requestAnimationFrame(() => {\n this.cursor = this.stateMap.cursorManager.getActiveCursor();\n });\n }\n\n private async createScene(): Promise<Scene> {\n const state = await this.waitForConnectedState();\n\n const { frame, sceneId, sceneViewId, worldOrientation } = state;\n\n return new Scene(\n this.getStream(),\n frame,\n fromPbFrameOrThrow(worldOrientation),\n () => this.getImageScale(),\n this.viewport,\n sceneId,\n sceneViewId\n );\n }\n\n /**\n * This function is currently not in use, but will required\n * when we want to automatically configure the background color of\n * JPEG images.\n */\n private getBackgroundColor(): Color.Color | undefined {\n if (this.canvasContainerElement != null) {\n const imageBackground = getElementPropertyValue(\n this.hostElement,\n '--image-background'\n );\n const viewerBackground = getElementPropertyValue(\n this.hostElement,\n '--viewer-background'\n );\n const propertyColor = imageBackground ?? viewerBackground;\n\n return propertyColor != null\n ? Color.fromCss(propertyColor)\n : Color.create(255, 255, 255);\n }\n }\n\n private getBounds(): ClientRect | undefined {\n return getElementBoundingClientRect(this.hostElement);\n }\n\n private getCanvasDimensions(): Dimensions.Dimensions | undefined {\n return this.getResolvedConfig().flags.letterboxFrames\n ? this.dimensions\n : this.hostDimensions;\n }\n\n private getImageScale(): Point.Point | undefined {\n const canvasDimensions = this.getCanvasDimensions();\n if (this.dimensions != null && canvasDimensions != null) {\n return Point.create(\n this.dimensions.width / canvasDimensions.width,\n this.dimensions.height / canvasDimensions.height\n );\n }\n }\n\n private getStreamAttributes(): StreamAttributes {\n return {\n depthBuffers: this.getDepthBufferStreamAttributesValue(),\n experimentalRenderingOptions: this.experimentalRenderingOptions,\n featureHighlighting: this.featureHighlighting,\n featureLines: this.featureLines,\n featureMaps: this.featureMaps,\n frames: {\n frameBackgroundColor: this.getBackgroundColor(),\n },\n noDefaultLights: this.noDefaultLights,\n phantom: this.phantom,\n sceneComparison: this.sceneComparison,\n selectionHighlighting: this.selectionHighlighting,\n };\n }\n\n private updateCanvasDimensions(dimensions: Dimensions.Dimensions): void {\n if (this.canvasElement != null) {\n this.canvasElement.width = dimensions.width;\n this.canvasElement.height = dimensions.height;\n }\n }\n\n private updateStreamAttributes(): void {\n this.stream?.update({ streamAttributes: this.getStreamAttributes() });\n }\n\n private updateEnableTemporalRefinement(): void {\n this.stream?.update({\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n }\n\n private updateInteractionApi(previousFrame?: Frame): void {\n if (this.frame != null) {\n const hasChangedFromPerspective =\n (previousFrame == null || previousFrame.scene.camera.isPerspective()) &&\n this.frame.scene.camera.isOrthographic();\n const hasChangedFromOrthographic =\n (previousFrame == null ||\n previousFrame.scene.camera.isOrthographic()) &&\n this.frame.scene.camera.isPerspective();\n\n if (hasChangedFromPerspective || hasChangedFromOrthographic) {\n this.interactionApi = this.createInteractionApi();\n this.cameraType = this.frame.scene.camera.isPerspective()\n ? 'perspective'\n : 'orthographic';\n this.cameraTypeChanged.emit(this.cameraType);\n\n this.interactionHandlers.forEach((handler) =>\n this.initializeInteractionHandler(handler)\n );\n }\n }\n }\n\n private updateCameraType(): void {\n if (this.frame != null) {\n if (\n this.cameraType === 'orthographic' &&\n this.frame.scene.camera.isPerspective()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toOrthographic(\n this.frame.scene.camera,\n this.frame.scene.boundingBox\n )\n ),\n });\n } else if (\n this.cameraType === 'perspective' &&\n this.frame.scene.camera.isOrthographic()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toPerspective(this.frame.scene.camera)\n ),\n });\n }\n }\n }\n\n private getDepthBufferStreamAttributesValue(): FrameType {\n const depthBuffer =\n this.depthBuffers ?? (this.rotateAroundTapPoint ? 'final' : undefined);\n return depthBuffer;\n }\n\n private updateResolvedConfig(): void {\n this.resolvedConfig = parseConfig(this.configEnv, this.config);\n }\n\n private getResolvedConfig(): Config {\n return getRequiredProp(\n 'Resolved config is undefined',\n () => this.resolvedConfig\n );\n }\n\n private getStream(): ViewerStream {\n return getRequiredProp('Stream is undefined', () => this.stream);\n }\n\n private getDeviceId(): string | undefined {\n if (this.deviceId == null) {\n try {\n this.deviceId = getStorageEntry(\n StorageKeys.DEVICE_ID,\n (entry) => entry['device-id']\n );\n } catch (e) {\n console.warn('Cannot read device ID. Local storage is not supported.');\n }\n\n if (this.deviceId == null) {\n this.deviceId = UUID.create();\n\n try {\n upsertStorageEntry(StorageKeys.DEVICE_ID, {\n ['device-id']: this.deviceId,\n });\n } catch (e) {\n console.warn(\n 'Cannot write device ID. Local storage is not supported.'\n );\n }\n }\n }\n return this.deviceId;\n }\n\n private async waitForConnectedState(): Promise<Connected> {\n if (this.stateMap.streamState.type !== 'connected') {\n console.debug(\n 'Stream was not in a connected state. Waiting for successful connection.'\n );\n return new Promise<Connected>((resolve, reject) => {\n const disposable = this.getStream().onStateChanged((state) => {\n if (state.type === 'connected') {\n resolve(state);\n }\n });\n\n setTimeout(() => {\n disposable.dispose();\n reject(new Error('Timed out waiting for connected state.'));\n }, DEFAULT_VIEWER_SCENE_WAIT_MS);\n });\n }\n\n return this.stateMap.streamState;\n }\n}\n\nfunction getRequiredProp<T>(errorMsg: string, getter: () => T | undefined): T {\n const value = getter();\n if (value != null) {\n return value;\n } else throw new Error(errorMsg);\n}\n"]}
1
+ {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../../../../src/components/viewer/viewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Dimensions, Point } from '@vertexvis/geometry';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { toProtoDuration, WebSocketClientImpl } from '@vertexvis/stream-api';\nimport { Color, Disposable, EventDispatcher, UUID } from '@vertexvis/utils';\nimport classnames from 'classnames';\n\nimport {\n FeatureHighlightOptions,\n FeatureLineOptions,\n FrameType,\n PhantomOptions,\n SceneComparisonOptions,\n SelectionHighlightingOptions,\n StreamAttributes,\n} from '../../interfaces';\nimport {\n AnnotationController,\n AnnotationState,\n} from '../../lib/annotations/controller';\nimport { Config, parseConfig, PartialConfig } from '../../lib/config';\nimport { Cursor, CursorManager } from '../../lib/cursors';\nimport { cssCursor } from '../../lib/dom';\nimport { Environment } from '../../lib/environment';\nimport {\n ComponentInitializationError,\n InteractionHandlerError,\n ViewerInitializationError,\n} from '../../lib/errors';\nimport {\n InteractionApiOrthographic,\n InteractionApiPerspective,\n} from '../../lib/interactions';\nimport { BaseInteractionHandler } from '../../lib/interactions/baseInteractionHandler';\nimport { FlyToPartKeyInteraction } from '../../lib/interactions/flyToPartKeyInteraction';\nimport { FlyToPositionKeyInteraction } from '../../lib/interactions/flyToPositionKeyInteraction';\nimport { InteractionApi } from '../../lib/interactions/interactionApi';\nimport { InteractionHandler } from '../../lib/interactions/interactionHandler';\nimport { KeyInteraction } from '../../lib/interactions/keyInteraction';\nimport { MouseInteractionHandler } from '../../lib/interactions/mouseInteractionHandler';\nimport { MultiPointerInteractionHandler } from '../../lib/interactions/multiPointerInteractionHandler';\nimport { PointerInteractionHandler } from '../../lib/interactions/pointerInteractionHandler';\nimport { TapEventDetails } from '../../lib/interactions/tapEventDetails';\nimport { TapInteractionHandler } from '../../lib/interactions/tapInteractionHandler';\nimport { TouchInteractionHandler } from '../../lib/interactions/touchInteractionHandler';\nimport { fromPbFrameOrThrow } from '../../lib/mappers';\nimport { paintTime, Timing } from '../../lib/meters';\nimport { ModelViewController } from '../../lib/model-views/controller';\nimport { PmiController } from '../../lib/pmi';\nimport {\n CanvasRenderer,\n createCanvasRenderer,\n measureCanvasRenderer,\n} from '../../lib/rendering';\nimport { Scene } from '../../lib/scenes/scene';\nimport { writeDOM } from '../../lib/stencil';\nimport {\n getStorageEntry,\n StorageKeys,\n upsertStorageEntry,\n} from '../../lib/storage';\nimport {\n Connected,\n Connecting,\n ConnectionFailed,\n Disconnected,\n ViewerStreamState,\n} from '../../lib/stream/state';\nimport { ViewerStream } from '../../lib/stream/stream';\nimport {\n FrameCamera,\n Orientation,\n SceneViewSummary,\n StencilBufferManager,\n Viewport,\n} from '../../lib/types';\nimport { Frame, FrameCameraBase } from '../../lib/types/frame';\nimport { FrameCameraType } from '../../lib/types/frameCamera';\nimport {\n DEFAULT_VIEWER_SCENE_WAIT_MS,\n getElementBoundingClientRect,\n getElementPropertyValue,\n} from './utils';\n\ninterface ConnectedStatus {\n jwt: string;\n status: 'connected';\n}\n\ninterface ConnectingStatus {\n status: 'connecting';\n}\n\ninterface DisconnectedStatus {\n status: 'disconnected';\n}\n\ninterface ConnectionFailedStatus {\n status: 'connection-failed';\n errorMessage: string;\n}\n\n/**\n * Internal state values for the component. Used to preserve values across live\n * reload refreshes.\n */\ninterface StateMap {\n streamWorldOrientation?: Orientation;\n cursorManager: CursorManager;\n interactionTarget?: HTMLElement;\n streamState: ViewerStreamState;\n streamListeners?: Disposable;\n}\n\n/** @internal */\nexport type ConnectionStatus =\n | ConnectingStatus\n | ConnectedStatus\n | DisconnectedStatus\n | ConnectionFailedStatus;\n\n@Component({\n tag: 'vertex-viewer',\n styleUrl: 'viewer.css',\n shadow: true,\n})\nexport class Viewer {\n @Element() private hostElement!: HTMLVertexViewerElement;\n\n /**\n * A URN of the scene resource to load when the component is mounted in the\n * DOM tree. The specified resource is a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n */\n @Prop() public src?: string;\n\n /**\n * The Client ID associated with your Vertex Application.\n */\n @Prop() public clientId?: string;\n\n /**\n * Property used for internals or testing.\n *\n * @private\n * @internal\n */\n @Prop({ mutable: true }) public deviceId?: string;\n\n /**\n * An object or JSON encoded string that defines configuration settings for\n * the viewer.\n */\n @Prop() public config?: PartialConfig | string;\n\n /**\n * Sets the default environment for the viewer. This setting is used for\n * auto-configuring network hosts.\n *\n * Use the `config` property for manually setting hosts.\n *\n * @see Viewer.config\n */\n @Prop() public configEnv: Environment = 'platprod';\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public resolvedConfig?: Config;\n\n /**\n * Enables or disables the default mouse and touch interactions provided by\n * the viewer. Enabled by default.\n */\n @Prop() public cameraControls = true;\n\n /**\n * The type of camera model to represent the scene with. Can be either\n * `perspective` or `orthographic`, and defaults to `perspective`.\n */\n @Prop({ mutable: true, reflect: true }) public cameraType: FrameCameraType =\n 'perspective';\n\n /**\n * Enables or disables the default keyboard shortcut interactions provided by\n * the viewer. Enabled by default, requires `cameraControls` being enabled.\n *\n */\n @Prop() public keyboardControls = true;\n\n /**\n * Enables or disables the default rotation interaction being changed to\n * rotate around the pointer down location.\n */\n @Prop() public rotateAroundTapPoint = true;\n\n /**\n * A token that can be used to make API calls to other Vertex services.\n *\n * @internal\n */\n @Prop({ mutable: true }) public token?: string;\n\n /**\n * Specifies when a depth buffer is requested from rendering. Possible values\n * are:\n *\n * * `undefined`: A depth buffer is never requested.\n * * `final`: A depth buffer is only requested on the final frame.\n * * `all`: A depth buffer is requested for every frame.\n *\n * Depth buffers can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public depthBuffers?: FrameType;\n\n /**\n * Specifies how phantom parts should appear.\n * The opacity must be between 0 and 1, where 0 is completely hidden and 1 is completely visible.\n */\n @Prop({ attribute: null })\n public phantom?: PhantomOptions = { opacity: 0.1 };\n\n /**\n * Specifies whether to use the default lights for the scene. When false, default\n * lights are used. When true, no default lights are used, and the lights must\n * be specified separately.\n */\n @Prop() public noDefaultLights = false;\n\n /**\n * Specifies whether to enable temporal refinement of still images.\n */\n @Prop() public enableTemporalRefinement = true;\n\n /**\n * @private\n * @internal\n * Specifies experimental rendering options. For Vertex use only.\n */\n @Prop() public experimentalRenderingOptions = '';\n\n /**\n * Specifies if and how to render feature lines.\n */\n @Prop({ attribute: null }) public featureLines?: FeatureLineOptions;\n\n /**\n * Specifies the halo selection properties.\n * Parameter notes:\n * * lineWidth values supported currently are 0-5. This width is currently the value x2. For example, 1 will have a pixel width of 2.\n * * color is optional. This will be the color of the selected items in the viewer.\n * * opacity is also optional. The opacity will be applied to everything selected besides the highlighted outer line.\n */\n @Prop({ attribute: null })\n public selectionHighlighting?: SelectionHighlightingOptions;\n\n /**\n * Specifies how selected features should be highlighted.\n */\n @Prop({ attribute: null })\n public featureHighlighting?: FeatureHighlightOptions;\n\n /**\n * Specifies if and how to compare to another scene\n */\n @Prop({ attribute: null })\n public sceneComparison?: SceneComparisonOptions;\n\n /**\n * Specifies when a feature map is returned from rendering. Feature maps\n * include information about the surfaces, edges and cross sections that are\n * in a frame.\n *\n * Possible values are:\n *\n * * `undefined`: A feature map is never requested.\n * * `final`: A feature map is only requested on the final frame.\n * * `all`: A feature map is requested for every frame.\n *\n * Feature maps can increase the amount of data that's sent to a client and\n * can impact rendering performance. Values of `undefined` or `final` should\n * be used when needing the highest rendering performance.\n */\n @Prop() public featureMaps?: FrameType;\n\n /**\n * An optional value that will debounce frame updates when resizing\n * this viewer element.\n */\n @Prop() public resizeDebounce = 100;\n\n /**\n * The last frame that was received, which can be used to inspect the scene\n * and camera information.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public frame: Frame | undefined;\n\n /**\n * @internal\n */\n @Prop({ mutable: true }) public stream?: ViewerStream;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public stencilBuffer: StencilBufferManager = new StencilBufferManager(\n this.hostElement\n );\n\n /**\n * Represents the current viewport of the viewer. The viewport represents the\n * dimensions of the canvas where a frame is rendered. It contains methods for\n * translating between viewport coordinates, frame coordinates and world\n * coordinates.\n */\n @Prop({ mutable: true })\n public viewport: Viewport = Viewport.fromDimensions(Dimensions.create(0, 0));\n\n /**\n * The annotation controller for accessing annotations associated with the\n * scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public annotations: AnnotationController | undefined;\n\n /**\n * The controller for accessing model views associated with the scene view.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public modelViews: ModelViewController | undefined;\n\n /**\n * The controller for accessing and viewing PMI.\n *\n * @readonly\n */\n @Prop({ mutable: true }) public pmi: PmiController | undefined;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer.\n * The event includes the location of the tap or click.\n *\n * This event can be used in combination with the {@link VertexViewer.scene scene} method\n * to query for items at the point of the tap.\n *\n * @see {@link Scene.raycaster Scene.raycaster} for more information.\n */\n @Event() public tap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user double taps or clicks a location in the viewer.\n * The event includes the location of the first tap or click.\n */\n @Event() public doubletap!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event whenever the user taps or clicks a location in the viewer and the\n * configured amount of time passes without receiving a mouseup or touchend.\n * The event includes the location of the tap or click.\n */\n @Event() public longpress!: EventEmitter<TapEventDetails>;\n\n /**\n * Emits an event when a frame has been received by the viewer. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameReceived!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a frame has been drawn to the viewer's canvas. The event\n * will include details about the drawn frame, such as the `Scene` information\n * related to the scene.\n */\n @Event() public frameDrawn!: EventEmitter<Frame>;\n\n /**\n * Emits an event when a provided oauth2 token is about to expire, or is about to expire,\n * causing issues with establishing a websocket connection, or performing API calls.\n */\n @Event() public tokenExpired!: EventEmitter<void>;\n\n /**\n * Emits an event when the connection status changes for the viewer\n */\n @Event() public connectionChange!: EventEmitter<ConnectionStatus>;\n\n /**\n * Emits an event when the scene is ready to be interacted with.\n */\n @Event() public sceneReady!: EventEmitter<void>;\n\n /**\n * Emits an event when a frame is received with a different scene attribute.\n */\n @Event() public sceneChanged!: EventEmitter<void>;\n\n /**\n * Emits an event when the user has started an interaction.\n */\n @Event() public interactionStarted!: EventEmitter<void>;\n\n /**\n * Emits an event when the user hs finished an interaction.\n */\n @Event() public interactionFinished!: EventEmitter<void>;\n\n /**\n * Emits an event when the camera has changed.\n */\n @Event() public cameraChanged!: EventEmitter<FrameCameraBase | undefined>;\n\n /**\n * Emits an event when the camera type changes.\n */\n @Event() public cameraTypeChanged!: EventEmitter<FrameCameraType>;\n\n /**\n * Emits an event when the state for annotation changes.\n */\n @Event() public annotationStateChanged!: EventEmitter<AnnotationState>;\n\n /**\n * Used for internals or testing.\n *\n * @private\n */\n @Event() public deviceIdChange!: EventEmitter<string>;\n\n @Event() public dimensionschange!: EventEmitter<Dimensions.Dimensions>;\n\n @State() private dimensions?: Dimensions.Dimensions;\n @State() private hostDimensions?: Dimensions.Dimensions;\n @State() private errorMessage?: string;\n\n @State() private cursor?: Cursor;\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() private stateMap: StateMap = {\n cursorManager: new CursorManager(),\n streamState: { type: 'disconnected' },\n };\n\n private viewerContainerElement?: HTMLElement;\n private canvasContainerElement?: HTMLElement;\n private canvasElement?: HTMLCanvasElement;\n\n private canvasRenderer!: CanvasRenderer;\n\n private mutationObserver?: MutationObserver;\n private styleObserver?: MutationObserver;\n private resizeObserver?: ResizeObserver;\n private isResizing?: boolean;\n private isResizeUpdate?: boolean;\n\n private resizeTimer?: NodeJS.Timeout;\n\n private interactionHandlers: InteractionHandler[] = [];\n private defaultInteractionHandlerDisposables: Array<Disposable> = [];\n private tapHandlerDisposable?: Disposable;\n private interactionApi!: InteractionApi;\n private tapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private defaultTapKeyInteractions: KeyInteraction<TapEventDetails>[] = [];\n private baseInteractionHandler?: BaseInteractionHandler;\n\n private internalFrameDrawnDispatcher = new EventDispatcher<Frame>();\n\n public constructor() {\n this.handleElementResize = this.handleElementResize.bind(this);\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateResolvedConfig();\n this.calculateComponentDimensions();\n\n this.resizeObserver = new ResizeObserver(this.handleElementResize);\n this.registerSlotChangeListeners();\n\n const config = this.getResolvedConfig();\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n\n this.annotations = new AnnotationController(\n client,\n () => this.token,\n () => this.deviceId\n );\n this.annotations.onStateChange.on((state) =>\n this.annotationStateChanged.emit(state)\n );\n\n this.stream =\n this.stream ??\n new ViewerStream(new WebSocketClientImpl(), {\n loggingEnabled: config.flags.logWsMessages,\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n this.addStreamListeners();\n\n this.modelViews = new ModelViewController(\n client,\n this.stream,\n () => this.token,\n () => this.deviceId\n );\n\n this.pmi = new PmiController(\n client,\n () => this.token,\n () => this.deviceId\n );\n\n this.updateStreamAttributes();\n this.stateMap.cursorManager.onChanged.on(() => this.handleCursorChanged());\n }\n\n /**\n * @ignore\n */\n protected async componentDidLoad(): Promise<void> {\n this.interactionApi = this.createInteractionApi();\n\n if (this.canvasContainerElement != null) {\n this.resizeObserver?.observe(this.canvasContainerElement);\n }\n\n if (this.src != null) {\n this.load(this.src).catch((e) => {\n console.error('Error loading scene', e);\n });\n }\n\n await this.initializeDefaultInteractionHandlers();\n this.injectViewerApi();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <div\n ref={(ref) => (this.viewerContainerElement = ref)}\n class=\"viewer-container\"\n style={{ cursor: cssCursor(this.cursor ?? '') }}\n onContextMenu={(event) => event.preventDefault()}\n >\n <div\n ref={(ref) => (this.canvasContainerElement = ref)}\n class={classnames('canvas-container', {\n 'enable-pointer-events ': window.PointerEvent != null,\n })}\n >\n <canvas\n ref={(ref) => {\n this.canvasElement = ref;\n this.stateMap.interactionTarget = ref;\n }}\n class=\"canvas\"\n ></canvas>\n {this.errorMessage != null ? (\n <div class=\"error-message\">{this.errorMessage}</div>\n ) : null}\n </div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n\n /**\n * @internal\n */\n @Method()\n public async dispatchFrameDrawn(frame: Frame): Promise<void> {\n this.frame = frame;\n this.internalFrameDrawnDispatcher.emit(frame);\n this.frameDrawn.emit(frame);\n }\n\n /**\n * Registers and initializes an interaction handler with the viewer. Returns a\n * `Disposable` that should be used to deregister the interaction handler.\n *\n * `InteractionHandler`s are used to build custom mouse and touch interactions\n * for the viewer. Use `<vertex-viewer camera-controls=\"false\" />` to disable\n * the default camera controls provided by the viewer.\n *\n * @example\n * ```\n * class CustomInteractionHandler extends InteractionHandler {\n * private element: HTMLElement;\n * private api: InteractionApi;\n *\n * public dispose(): void {\n * this.element.removeEventListener('click', this.handleElementClick);\n * }\n *\n * public initialize(element: HTMLElement, api: InteractionApi): void {\n * this.api = api;\n * this.element = element;\n * this.element.addEventListener('click', this.handleElementClick);\n * }\n *\n * private handleElementClick = (event: MouseEvent) => {\n * api.tap({ x: event.clientX, y: event.clientY });\n * }\n * }\n *\n * const viewer = document.querySelector(\"vertex-viewer\");\n * viewer.registerInteractionHandler(new CustomInteractionHandler);\n * ```\n *\n * @param interactionHandler The interaction handler to register.\n * @returns {Promise<void>} A promise containing the disposable to use to\n * deregister the handler.\n */\n @Method()\n public async registerInteractionHandler(\n interactionHandler: InteractionHandler\n ): Promise<Disposable> {\n this.interactionHandlers.push(interactionHandler);\n this.initializeInteractionHandler(interactionHandler);\n return {\n dispose: () => {\n const index = this.interactionHandlers.indexOf(interactionHandler);\n if (index !== -1) {\n this.interactionHandlers[index].dispose();\n this.interactionHandlers.splice(index, 1);\n }\n },\n };\n }\n\n /**\n * Registers a key interaction to be invoked when a specific set of\n * keys are pressed during a `tap` event.\n *\n * `KeyInteraction`s are used to build custom keyboard shortcuts for the\n * viewer using the current state of they keyboard to determine whether\n * the `fn` should be invoked. Use `<vertex-viewer keyboard-controls=\"false\" />`\n * to disable the default keyboard shortcuts provided by the viewer.\n *\n * @example\n * ```\n * class CustomKeyboardInteraction extends KeyInteraction<TapEventDetails> {\n * constructor(private viewer: HTMLVertexViewerElement) {}\n *\n * public predicate(keyState: KeyState): boolean {\n * return keyState['Alt'];\n * }\n *\n * public async fn(event: TapEventDetails) {\n * const scene = await this.viewer.scene();\n * const result = await scene.raycaster().hitItems(event.position);\n *\n * if (result.hits.length > 0) {\n * await scene\n * .camera()\n * .fitTo(q => q.withItemId(result.hits[0].itemId))\n * .render();\n * }\n * }\n * }\n * ```\n *\n * @param keyInteraction - The `KeyInteraction` to register.\n */\n @Method()\n public async registerTapKeyInteraction(\n keyInteraction: KeyInteraction<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions = [...this.tapKeyInteractions, keyInteraction];\n }\n\n /**\n * The HTML element that will handle interaction events from the user. Used by\n * components to listen for interaction events from the same element as the\n * viewer. Note, this property maybe removed in the future when refactoring\n * our interaction handling.\n *\n * @internal\n * @deprecated Use `InteractionHandler`.\n */\n @Method()\n public async getInteractionTarget_DEPRECATED(): Promise<HTMLElement> {\n if (this.stateMap.interactionTarget != null) {\n return this.stateMap.interactionTarget;\n } else throw new Error('Interaction target is undefined.');\n }\n\n /**\n * Adds a cursor to the viewer, and displays it if the cursor has the highest\n * priority.\n *\n * Cursors are managed as a prioritized list. A cursor is displayed if it has\n * the highest priority or if the cursor is the most recently added cursor in\n * the set of cursors with the same priority.\n *\n * To remove a cursor, call `dispose()` on the returned disposable.\n *\n * @param cursor The cursor to add.\n * @param priority The priority of the cursor.\n * @returns A disposable that can be used to remove the cursor.\n * @see See {@link CursorManager} for constants to pass to `priority`.\n */\n @Method()\n public async addCursor(\n cursor: Cursor,\n priority?: number\n ): Promise<Disposable> {\n return this.stateMap.cursorManager.add(cursor, priority);\n }\n\n @Method()\n public async getInteractionHandlers(): Promise<InteractionHandler[]> {\n return this.interactionHandlers;\n }\n\n /**\n * @internal\n * @ignore\n */\n @Method()\n public async getKeyInteractions(): Promise<\n KeyInteraction<TapEventDetails>[]\n > {\n return this.tapKeyInteractions;\n }\n\n @Method()\n public async getBaseInteractionHandler(): Promise<\n BaseInteractionHandler | undefined\n > {\n return this.baseInteractionHandler;\n }\n\n /**\n * @deprecated Use `token`.\n */\n @Method()\n public async getJwt(): Promise<string | undefined> {\n return this.token;\n }\n\n @Watch('src')\n public handleSrcChanged(src: string | undefined): void {\n if (src != null) {\n this.load(src);\n } else {\n this.unload();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('cameraControls')\n protected handleCameraControlsChanged(): void {\n this.initializeDefaultCameraInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('keyboardControls')\n protected handleKeyboardControlsChanged(): void {\n this.initializeDefaultKeyboardInteractionHandlers();\n }\n\n /**\n * @ignore\n */\n @Watch('rotateAroundTapPoint')\n protected handleRotateAboutTapPointChanged(): void {\n this.updateStreamAttributes();\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n } else {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate');\n }\n }\n\n @Watch('cameraType')\n protected handleCameraTypeChanged(\n updatedCameraType: string,\n previousCameraType: string\n ): void {\n if (updatedCameraType !== previousCameraType) {\n this.updateCameraType();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('experimentalRenderingOptions')\n @Watch('depthBuffers')\n @Watch('featureHighlighting')\n @Watch('featureLines')\n @Watch('featureMaps')\n @Watch('noDefaultLights')\n @Watch('phantom')\n @Watch('sceneComparison')\n @Watch('selectionHighlighting')\n protected handleStreamAttributesChanged(): void {\n this.updateStreamAttributes();\n }\n\n /**\n * @ignore\n */\n @Watch('enableTemporalRefinement')\n protected handleEnableTemporalRefinementChanged(): void {\n this.updateEnableTemporalRefinement();\n }\n\n /**\n * @ignore\n */\n @Watch('config')\n protected handleConfigChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * @ignore\n */\n @Watch('configEnv')\n protected handleConfigEnvChanged(): void {\n this.updateResolvedConfig();\n }\n\n /**\n * Loads the given scene into the viewer and return a `Promise` that\n * resolves when the scene has been loaded. The specified scene is\n * provided as a URN in the following format:\n *\n * * `urn:vertex:scene:<sceneid>`\n *\n * @param urn The URN of the resource to load.\n */\n @Method()\n public async load(urn: string): Promise<void> {\n if (this.stream != null && this.dimensions != null) {\n const { EXPERIMENTAL_annotationPollingIntervalInMs } =\n this.getResolvedConfig();\n\n this.calculateComponentDimensions();\n\n this.stream.update({\n streamAttributes: this.getStreamAttributes(),\n config: parseConfig(this.configEnv, this.config),\n dimensions: this.dimensions,\n frameBgColor: this.getBackgroundColor(),\n });\n await this.stream?.load(\n urn,\n this.clientId,\n this.getDeviceId(),\n this.getResolvedConfig()\n );\n this.sceneReady.emit();\n\n if (EXPERIMENTAL_annotationPollingIntervalInMs !== undefined) {\n this.annotations?.connect(EXPERIMENTAL_annotationPollingIntervalInMs);\n }\n } else {\n throw new ViewerInitializationError(\n 'Cannot load scene. Viewer has not been initialized.'\n );\n }\n }\n\n /**\n * Disconnects the websocket and removes any internal state associated with\n * the scene.\n */\n @Method()\n public async unload(): Promise<void> {\n if (this.stream != null) {\n this.annotations?.disconnect();\n this.stream.disconnect();\n\n this.frame = undefined;\n this.errorMessage = undefined;\n }\n\n if (this.canvasElement != null) {\n const context = this.canvasElement.getContext('2d');\n if (context != null) {\n context.clearRect(\n 0,\n 0,\n this.canvasElement.width,\n this.canvasElement.height\n );\n }\n }\n }\n\n /**\n * Returns an object that is used to perform operations on the `Scene` that's\n * currently being viewed. These operations include updating items,\n * positioning the camera and performing hit tests.\n */\n @Method()\n public async scene(): Promise<Scene> {\n return this.createScene();\n }\n\n /**\n * Returns `true` indicating that the scene is ready to be interacted with.\n */\n @Method()\n public async isSceneReady(): Promise<boolean> {\n return this.stateMap.streamState.type === 'connected';\n }\n\n @Listen('tap')\n private async handleTapEvent(\n event: CustomEvent<TapEventDetails>\n ): Promise<void> {\n this.tapKeyInteractions\n .filter((i) => i.predicate(event.detail))\n .forEach((i) => i.fn(event.detail));\n }\n\n private emitConnectionChange(status: ConnectionStatus): void {\n if (status.status === 'connected') {\n // NOTE: Uncomment once FSS is deployed.\n // if (status.jwt.length === 0) {\n // throw new MissingJWTError('JWT is empty');\n // }\n }\n this.connectionChange.emit(status);\n }\n\n private handleElementResize(entries: ResizeObserverEntry[]): void {\n const dimensionsHaveChanged =\n entries.length > 0 &&\n this.dimensions != null &&\n !Dimensions.isEqual(entries[0].contentRect, this.viewport);\n\n if (dimensionsHaveChanged) {\n if (this.resizeTimer != null) {\n clearTimeout(this.resizeTimer);\n this.resizeTimer = undefined;\n }\n\n if (!this.isResizing) {\n this.resizeTimer = setTimeout(() => {\n this.isResizing = true;\n this.isResizeUpdate = true;\n this.recalculateComponentDimensions();\n }, this.resizeDebounce);\n }\n }\n }\n\n private registerSlotChangeListeners(): void {\n this.mutationObserver = new MutationObserver((_) => this.injectViewerApi());\n this.mutationObserver.observe(this.hostElement, {\n childList: true,\n subtree: true,\n });\n\n this.styleObserver = new MutationObserver((_) => this.syncViewerStyles());\n this.styleObserver.observe(this.hostElement, {\n attributes: true,\n attributeFilter: ['style'],\n });\n }\n\n private injectViewerApi(): void {\n function queryChildren(el: Element): HTMLElement[] {\n return Array.from(el.querySelectorAll('*'));\n }\n\n const children = queryChildren(this.hostElement);\n\n children\n .filter((node) => node.nodeName.startsWith('VERTEX-'))\n .reduce(\n (elements, element) => [\n ...elements,\n element,\n ...queryChildren(element),\n ],\n [] as Element[]\n )\n .forEach((node) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (node as any).viewer = this.hostElement;\n });\n }\n\n private syncViewerStyles(): void {\n const backgroundColor = this.getBackgroundColor();\n\n this.stream?.update({\n frameBgColor: backgroundColor,\n streamAttributes: this.getStreamAttributes(),\n });\n }\n\n private calculateComponentDimensions(): void {\n const maxPixelCount = 2073600;\n const bounds = this.getBounds();\n if (bounds?.width != null && bounds?.height != null) {\n const measuredViewport = Dimensions.create(bounds.width, bounds.height);\n const trimmedViewport = Dimensions.scaleFit(\n maxPixelCount,\n measuredViewport\n );\n\n this.hostDimensions = measuredViewport;\n this.dimensions =\n trimmedViewport != null\n ? Dimensions.create(trimmedViewport.width, trimmedViewport.height)\n : undefined;\n this.viewport = Viewport.fromDimensions(\n this.getCanvasDimensions() ?? Dimensions.create(0, 0)\n );\n }\n }\n\n private recalculateComponentDimensions(): void {\n if (this.isResizing) {\n this.calculateComponentDimensions();\n this.isResizing = false;\n\n if (this.stream?.getState().type === 'connected') {\n this.updateDimensions(this.dimensions);\n }\n }\n }\n\n private reportPerformance(timings: Timing[]): void {\n if (this.stateMap.streamState.type === 'connected') {\n const payload = {\n timings: timings.map((t) => ({\n receiveToPaintDuration: toProtoDuration(t.duration),\n })),\n };\n this.getStream().recordPerformance(payload, false);\n }\n }\n\n private addStreamListeners(): void {\n this.stateMap.streamListeners = this.getStream().stateChanged.on((s) => {\n this.handleStreamStateChanged(this.stateMap.streamState, s);\n });\n }\n\n private handleStreamStateChanged(\n previous: ViewerStreamState,\n state: ViewerStreamState\n ): void {\n this.stateMap.streamState = state;\n\n if (state.type === 'connecting') {\n this.handleConnecting(previous, state);\n } else if (state.type === 'connected') {\n this.handleConnected(previous, state);\n } else if (state.type === 'connection-failed') {\n this.handleConnectionFailed(previous, state);\n } else if (state.type === 'disconnected') {\n this.handleDisconnected(previous, state);\n }\n }\n\n private handleConnecting(\n previous: ViewerStreamState,\n state: Connecting\n ): void {\n if (previous.type !== 'connecting') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'connecting' });\n }\n }\n\n private handleConnected(previous: ViewerStreamState, state: Connected): void {\n this.token = state.token.token;\n\n if (previous.type !== 'connected') {\n this.errorMessage = undefined;\n this.canvasRenderer = measureCanvasRenderer(\n paintTime,\n createCanvasRenderer(),\n this.getResolvedConfig().flags.logFrameRate,\n (timings) => this.reportPerformance(timings)\n );\n this.emitConnectionChange({\n status: 'connected',\n jwt: state.token.token,\n });\n this.deviceIdChange.emit(state.deviceId);\n }\n\n if (this.frame?.getId() !== state.frame.getId()) {\n this.updateFrame(state.frame);\n }\n\n this.updateDimensions(this.dimensions);\n }\n\n private handleConnectionFailed(\n previous: ViewerStreamState,\n state: ConnectionFailed\n ): void {\n if (previous.type !== 'connection-failed') {\n this.token = undefined;\n this.errorMessage = state.message;\n this.emitConnectionChange({\n status: 'connection-failed',\n errorMessage: state.message,\n });\n }\n }\n\n private handleDisconnected(\n previous: ViewerStreamState,\n state: Disconnected\n ): void {\n if (previous.type !== 'disconnected') {\n this.token = undefined;\n this.errorMessage = undefined;\n this.emitConnectionChange({ status: 'disconnected' });\n }\n }\n\n private updateDimensions(dimensions?: Dimensions.Dimensions): void {\n this.stream?.update({ dimensions });\n this.dimensionschange.emit(dimensions);\n }\n\n private async updateFrame(frame: Frame): Promise<void> {\n const canvasDimensions = this.getCanvasDimensions();\n\n if (\n this.canvasElement != null &&\n canvasDimensions != null &&\n this.frame?.getId() !== frame.getId()\n ) {\n const canvas = this.canvasElement.getContext('2d');\n if (canvas != null) {\n const previousFrame = this.frame;\n this.frame = SceneViewSummary.copySummaryIfInvalid(\n frame,\n previousFrame\n );\n\n this.updateInteractionApi(previousFrame);\n\n const data = {\n canvas,\n canvasDimensions,\n dimensions: this.dimensions,\n frame: this.frame,\n viewport: this.viewport,\n beforeDraw: () => {\n this.updateCanvasDimensions(canvasDimensions);\n this.isResizeUpdate = false;\n },\n predicate: () => {\n if (this.isResizeUpdate) {\n return (\n this.dimensions == null ||\n Dimensions.isEqual(\n this.dimensions,\n data.frame.image.imageAttr.frameDimensions\n )\n );\n }\n return true;\n },\n };\n\n this.frameReceived.emit(this.frame);\n\n if (this.frame.scene.hasChanged) {\n this.sceneChanged.emit();\n }\n\n const drawnFrame = await this.canvasRenderer(data);\n\n if (drawnFrame != null) {\n this.updateViewerBackground();\n\n this.dispatchFrameDrawn(drawnFrame);\n }\n }\n }\n }\n\n private updateViewerBackground(): void {\n const backgroundColor = this.getBackgroundColor();\n\n writeDOM(() => {\n this.viewerContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n this.canvasContainerElement?.style.setProperty(\n 'background',\n backgroundColor != null ? Color.toHexString(backgroundColor) : '#ffffff'\n );\n });\n }\n\n private async initializeDefaultInteractionHandlers(): Promise<void> {\n await this.initializeDefaultCameraInteractionHandlers();\n await this.initializeDefaultTapInteractionHandler();\n this.initializeDefaultKeyboardInteractionHandlers();\n\n if (this.rotateAroundTapPoint) {\n this.baseInteractionHandler?.setPrimaryInteractionType('rotate-point');\n }\n }\n\n private clearDefaultCameraInteractionHandlers(): void {\n this.defaultInteractionHandlerDisposables.forEach((disposable) =>\n disposable.dispose()\n );\n this.defaultInteractionHandlerDisposables = [];\n }\n\n private clearDefaultKeyboardInteractions(): void {\n this.defaultTapKeyInteractions.forEach((interaction) => {\n const index = this.tapKeyInteractions.indexOf(interaction);\n if (index !== -1) {\n this.tapKeyInteractions.splice(index, 1);\n }\n });\n this.tapKeyInteractions = [];\n }\n\n private async initializeDefaultCameraInteractionHandlers(): Promise<void> {\n this.clearDefaultCameraInteractionHandlers();\n\n if (this.cameraControls) {\n if (window.PointerEvent != null) {\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new PointerInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const multiPointerDisposable = await this.registerInteractionHandler(\n new MultiPointerInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n multiPointerDisposable,\n ];\n } else {\n // fallback to touch events and mouse events as a default\n this.baseInteractionHandler =\n this.baseInteractionHandler ??\n new MouseInteractionHandler(() => this.getResolvedConfig());\n const baseDisposable = await this.registerInteractionHandler(\n this.baseInteractionHandler\n );\n const touchDisposable = await this.registerInteractionHandler(\n new TouchInteractionHandler()\n );\n\n this.defaultInteractionHandlerDisposables = [\n baseDisposable,\n touchDisposable,\n ];\n }\n }\n }\n\n private initializeDefaultKeyboardInteractionHandlers(): void {\n this.clearDefaultKeyboardInteractions();\n\n if (this.keyboardControls && this.stream != null) {\n this.baseInteractionHandler?.setDefaultKeyboardControls(\n this.keyboardControls\n );\n\n const flyToPart = new FlyToPartKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale()\n );\n const flyToPosition = new FlyToPositionKeyInteraction(\n this.stream,\n () => this.getResolvedConfig(),\n () => this.getImageScale(),\n () => this.createScene()\n );\n\n this.registerTapKeyInteraction(flyToPart);\n this.registerTapKeyInteraction(flyToPosition);\n\n this.defaultTapKeyInteractions = [flyToPart, flyToPosition];\n }\n }\n\n private async initializeDefaultTapInteractionHandler(): Promise<void> {\n if (this.tapHandlerDisposable == null) {\n if (window.PointerEvent != null) {\n const tapInteractionHandler = new TapInteractionHandler(\n 'pointerdown',\n 'pointerup',\n 'pointermove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n } else {\n const tapInteractionHandler = new TapInteractionHandler(\n 'mousedown',\n 'mouseup',\n 'mousemove',\n () => this.getResolvedConfig()\n );\n\n this.tapHandlerDisposable = await this.registerInteractionHandler(\n tapInteractionHandler\n );\n }\n }\n }\n\n private initializeInteractionHandler(handler: InteractionHandler): void {\n if (this.stateMap.interactionTarget == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction target is undefined.'\n );\n }\n if (this.interactionApi == null) {\n throw new InteractionHandlerError(\n 'Cannot initialize interaction handler. Interaction APi is undefined.'\n );\n }\n handler.initialize(this.stateMap.interactionTarget, this.interactionApi);\n }\n\n private createInteractionApi(): InteractionApi {\n if (this.stream == null) {\n throw new ComponentInitializationError(\n 'Cannot create interaction API. Component has not been initialized.'\n );\n }\n\n return this.frame == null || this.frame.scene.camera.isPerspective()\n ? new InteractionApiPerspective(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished,\n this.cameraChanged\n )\n : new InteractionApiOrthographic(\n this.stream,\n this.stateMap.cursorManager,\n () => this.getResolvedConfig().interactions,\n () => this.createScene(),\n () => this.frame,\n () => this.viewport,\n this.tap,\n this.doubletap,\n this.longpress,\n this.interactionStarted,\n this.interactionFinished,\n this.cameraChanged\n );\n }\n\n private handleCursorChanged(): void {\n window.requestAnimationFrame(() => {\n this.cursor = this.stateMap.cursorManager.getActiveCursor();\n });\n }\n\n private async createScene(): Promise<Scene> {\n const state = await this.waitForConnectedState();\n\n const { frame, sceneId, sceneViewId, worldOrientation } = state;\n\n return new Scene(\n this.getStream(),\n frame,\n fromPbFrameOrThrow(worldOrientation),\n () => this.getImageScale(),\n this.viewport,\n sceneId,\n sceneViewId\n );\n }\n\n /**\n * This function is currently not in use, but will required\n * when we want to automatically configure the background color of\n * JPEG images.\n */\n private getBackgroundColor(): Color.Color | undefined {\n if (this.canvasContainerElement != null) {\n const imageBackground = getElementPropertyValue(\n this.hostElement,\n '--image-background'\n );\n const viewerBackground = getElementPropertyValue(\n this.hostElement,\n '--viewer-background'\n );\n const propertyColor = imageBackground ?? viewerBackground;\n\n return propertyColor != null\n ? Color.fromCss(propertyColor)\n : Color.create(255, 255, 255);\n }\n }\n\n private getBounds(): ClientRect | undefined {\n return getElementBoundingClientRect(this.hostElement);\n }\n\n private getCanvasDimensions(): Dimensions.Dimensions | undefined {\n return this.getResolvedConfig().flags.letterboxFrames\n ? this.dimensions\n : this.hostDimensions;\n }\n\n private getImageScale(): Point.Point | undefined {\n const canvasDimensions = this.getCanvasDimensions();\n if (this.dimensions != null && canvasDimensions != null) {\n return Point.create(\n this.dimensions.width / canvasDimensions.width,\n this.dimensions.height / canvasDimensions.height\n );\n }\n }\n\n private getStreamAttributes(): StreamAttributes {\n return {\n depthBuffers: this.getDepthBufferStreamAttributesValue(),\n experimentalRenderingOptions: this.experimentalRenderingOptions,\n featureHighlighting: this.featureHighlighting,\n featureLines: this.featureLines,\n featureMaps: this.featureMaps,\n frames: {\n frameBackgroundColor: this.getBackgroundColor(),\n },\n noDefaultLights: this.noDefaultLights,\n phantom: this.phantom,\n sceneComparison: this.sceneComparison,\n selectionHighlighting: this.selectionHighlighting,\n };\n }\n\n private updateCanvasDimensions(dimensions: Dimensions.Dimensions): void {\n if (this.canvasElement != null) {\n this.canvasElement.width = dimensions.width;\n this.canvasElement.height = dimensions.height;\n }\n }\n\n private updateStreamAttributes(): void {\n this.stream?.update({ streamAttributes: this.getStreamAttributes() });\n }\n\n private updateEnableTemporalRefinement(): void {\n this.stream?.update({\n enableTemporalRefinement: this.enableTemporalRefinement,\n });\n }\n\n private updateInteractionApi(previousFrame?: Frame): void {\n if (this.frame != null) {\n const hasChangedFromPerspective =\n (previousFrame == null || previousFrame.scene.camera.isPerspective()) &&\n this.frame.scene.camera.isOrthographic();\n const hasChangedFromOrthographic =\n (previousFrame == null ||\n previousFrame.scene.camera.isOrthographic()) &&\n this.frame.scene.camera.isPerspective();\n\n if (hasChangedFromPerspective || hasChangedFromOrthographic) {\n this.interactionApi = this.createInteractionApi();\n this.cameraType = this.frame.scene.camera.isPerspective()\n ? 'perspective'\n : 'orthographic';\n this.cameraTypeChanged.emit(this.cameraType);\n\n this.interactionHandlers.forEach((handler) =>\n this.initializeInteractionHandler(handler)\n );\n }\n }\n }\n\n private updateCameraType(): void {\n if (this.frame != null) {\n if (\n this.cameraType === 'orthographic' &&\n this.frame.scene.camera.isPerspective()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toOrthographic(\n this.frame.scene.camera,\n this.frame.scene.boundingBox\n )\n ),\n });\n } else if (\n this.cameraType === 'perspective' &&\n this.frame.scene.camera.isOrthographic()\n ) {\n this.stream?.replaceCamera({\n camera: FrameCamera.toProtobuf(\n FrameCamera.toPerspective(this.frame.scene.camera)\n ),\n });\n }\n }\n }\n\n private getDepthBufferStreamAttributesValue(): FrameType {\n const depthBuffer =\n this.depthBuffers ?? (this.rotateAroundTapPoint ? 'final' : undefined);\n return depthBuffer;\n }\n\n private updateResolvedConfig(): void {\n this.resolvedConfig = parseConfig(this.configEnv, this.config);\n }\n\n private getResolvedConfig(): Config {\n return getRequiredProp(\n 'Resolved config is undefined',\n () => this.resolvedConfig\n );\n }\n\n private getStream(): ViewerStream {\n return getRequiredProp('Stream is undefined', () => this.stream);\n }\n\n private getDeviceId(): string | undefined {\n if (this.deviceId == null) {\n try {\n this.deviceId = getStorageEntry(\n StorageKeys.DEVICE_ID,\n (entry) => entry['device-id']\n );\n } catch (e) {\n console.warn('Cannot read device ID. Local storage is not supported.');\n }\n\n if (this.deviceId == null) {\n this.deviceId = UUID.create();\n\n try {\n upsertStorageEntry(StorageKeys.DEVICE_ID, {\n ['device-id']: this.deviceId,\n });\n } catch (e) {\n console.warn(\n 'Cannot write device ID. Local storage is not supported.'\n );\n }\n }\n }\n return this.deviceId;\n }\n\n private async waitForConnectedState(): Promise<Connected> {\n if (this.stateMap.streamState.type !== 'connected') {\n console.debug(\n 'Stream was not in a connected state. Waiting for successful connection.'\n );\n return new Promise<Connected>((resolve, reject) => {\n const disposable = this.getStream().onStateChanged((state) => {\n if (state.type === 'connected') {\n resolve(state);\n }\n });\n\n setTimeout(() => {\n disposable.dispose();\n reject(new Error('Timed out waiting for connected state.'));\n }, DEFAULT_VIEWER_SCENE_WAIT_MS);\n });\n }\n\n return this.stateMap.streamState;\n }\n}\n\nfunction getRequiredProp<T>(errorMsg: string, getter: () => T | undefined): T {\n const value = getter();\n if (value != null) {\n return value;\n } else throw new Error(errorMsg);\n}\n"]}
@@ -19,6 +19,7 @@ export * from './lib/interactions/keyInteraction';
19
19
  export * from './lib/measurement';
20
20
  export * from './lib/model-views';
21
21
  export * from './lib/pins';
22
+ export * from './lib/pmi';
22
23
  export { Camera, CrossSectioner, Raycaster, RootQuery, Scene, SceneItemOperationsBuilder, SceneItemQueryExecutor, SceneOperationBuilder, } from './lib/scenes';
23
24
  export * from './lib/transforms';
24
25
  export { CrossSectioning, EntityType, FrameCameraBase, LoadableResource, Frame as ReceivedFrame, FrameImage as ReceivedFrameImage, FrameScene as ReceivedFrameScene, FrameOrthographicCamera as ReceivedOrthographicCamera, FramePerspectiveCamera as ReceivedPerspectiveCamera, SceneViewStateIdentifier, StandardView, SynchronizedClock, Viewport, } from './lib/types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AAExD,cAAc,eAAe,CAAC;AAE9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,MAAM,EACN,cAAc,EACd,SAAS,EAGT,SAAS,EACT,KAAK,EAEL,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,KAAK,IAAI,aAAa,EACtB,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAChC,uBAAuB,IAAI,0BAA0B,EACrD,sBAAsB,IAAI,yBAAyB,EACnD,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC","sourcesContent":["/**\n * @module Viewer\n */\nimport * as ColorMaterial from './lib/scenes/colorMaterial';\n\nexport { ColorMaterial };\n\nexport * from './components';\nexport * from './components/scene-tree/lib';\nexport * from './components/scene-tree/types';\nexport * from './components/viewer-box-query-tool/types';\nexport * from './components/viewer-toolbar/types';\nexport * from './components/viewer-toolbar-group/types';\nexport { Config } from './lib/config';\nexport * from './lib/cursors';\nexport { Environment } from './lib/environment';\nexport * from './lib/formatter';\nexport * from './lib/interactions/interactionHandler';\nexport * from './lib/interactions/keyInteraction';\nexport * from './lib/measurement';\nexport * from './lib/model-views';\nexport * from './lib/pins';\nexport {\n Camera,\n CrossSectioner,\n Raycaster,\n RaycasterOptions,\n ResetViewOptions,\n RootQuery,\n Scene,\n SceneExecutionOptions,\n SceneItemOperationsBuilder,\n SceneItemQueryExecutor,\n SceneOperationBuilder,\n SceneViewStateFeature,\n TerminalItemOperationBuilder,\n} from './lib/scenes';\nexport * from './lib/transforms';\nexport {\n CrossSectioning,\n EntityType,\n FrameCameraBase,\n LoadableResource,\n Frame as ReceivedFrame,\n FrameImage as ReceivedFrameImage,\n FrameScene as ReceivedFrameScene,\n FrameOrthographicCamera as ReceivedOrthographicCamera,\n FramePerspectiveCamera as ReceivedPerspectiveCamera,\n SceneViewStateIdentifier,\n StandardView,\n SynchronizedClock,\n Viewport,\n} from './lib/types';\nexport * from './lib/types/distanceUnits';\nexport * from './lib/types/markup';\nexport * from './lib/volume-intersection';\n\nimport { TapEventDetails } from './lib/interactions/tapEventDetails';\n\nexport { TapEventDetails };\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,cAAc,cAAc,CAAC;AAC7B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0CAA0C,CAAC;AACzD,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AAExD,cAAc,eAAe,CAAC;AAE9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,MAAM,EACN,cAAc,EACd,SAAS,EAGT,SAAS,EACT,KAAK,EAEL,0BAA0B,EAC1B,sBAAsB,EACtB,qBAAqB,GAGtB,MAAM,cAAc,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,OAAO,EACL,eAAe,EACf,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,KAAK,IAAI,aAAa,EACtB,UAAU,IAAI,kBAAkB,EAChC,UAAU,IAAI,kBAAkB,EAChC,uBAAuB,IAAI,0BAA0B,EACrD,sBAAsB,IAAI,yBAAyB,EACnD,wBAAwB,EACxB,YAAY,EACZ,iBAAiB,EACjB,QAAQ,GACT,MAAM,aAAa,CAAC;AACrB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC","sourcesContent":["/**\n * @module Viewer\n */\nimport * as ColorMaterial from './lib/scenes/colorMaterial';\n\nexport { ColorMaterial };\n\nexport * from './components';\nexport * from './components/scene-tree/lib';\nexport * from './components/scene-tree/types';\nexport * from './components/viewer-box-query-tool/types';\nexport * from './components/viewer-toolbar/types';\nexport * from './components/viewer-toolbar-group/types';\nexport { Config } from './lib/config';\nexport * from './lib/cursors';\nexport { Environment } from './lib/environment';\nexport * from './lib/formatter';\nexport * from './lib/interactions/interactionHandler';\nexport * from './lib/interactions/keyInteraction';\nexport * from './lib/measurement';\nexport * from './lib/model-views';\nexport * from './lib/pins';\nexport * from './lib/pmi';\nexport {\n Camera,\n CrossSectioner,\n Raycaster,\n RaycasterOptions,\n ResetViewOptions,\n RootQuery,\n Scene,\n SceneExecutionOptions,\n SceneItemOperationsBuilder,\n SceneItemQueryExecutor,\n SceneOperationBuilder,\n SceneViewStateFeature,\n TerminalItemOperationBuilder,\n} from './lib/scenes';\nexport * from './lib/transforms';\nexport {\n CrossSectioning,\n EntityType,\n FrameCameraBase,\n LoadableResource,\n Frame as ReceivedFrame,\n FrameImage as ReceivedFrameImage,\n FrameScene as ReceivedFrameScene,\n FrameOrthographicCamera as ReceivedOrthographicCamera,\n FramePerspectiveCamera as ReceivedPerspectiveCamera,\n SceneViewStateIdentifier,\n StandardView,\n SynchronizedClock,\n Viewport,\n} from './lib/types';\nexport * from './lib/types/distanceUnits';\nexport * from './lib/types/markup';\nexport * from './lib/volume-intersection';\n\nimport { TapEventDetails } from './lib/interactions/tapEventDetails';\n\nexport { TapEventDetails };\n"]}
@@ -0,0 +1,39 @@
1
+ /*!
2
+ * Copyright (c) 2024 Vertex Software LLC. All rights reserved.
3
+ */
4
+ import { Pager } from '@vertexvis/scene-view-protos/core/protos/paging_pb';
5
+ import { Uuid2l } from '@vertexvis/scene-view-protos/core/protos/uuid_pb';
6
+ import { ListPmiAnnotationsRequest, } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb';
7
+ import { UUID } from '@vertexvis/utils';
8
+ import { createMetadata, requestUnary } from '../grpc';
9
+ import { mapListPmiAnnotationsResponseOrThrow } from './mapper';
10
+ export class PmiController {
11
+ constructor(client, jwtProvider, deviceIdProvider) {
12
+ this.client = client;
13
+ this.jwtProvider = jwtProvider;
14
+ this.deviceIdProvider = deviceIdProvider;
15
+ }
16
+ async listAnnotations({ modelViewId, cursor, size = 50, } = {}) {
17
+ const res = await requestUnary(async (handler) => {
18
+ const deviceId = this.deviceIdProvider();
19
+ const meta = await createMetadata(this.jwtProvider, deviceId);
20
+ const req = new ListPmiAnnotationsRequest();
21
+ if (modelViewId != null) {
22
+ const { msb, lsb } = UUID.toMsbLsb(modelViewId);
23
+ const id = new Uuid2l();
24
+ id.setMsb(msb);
25
+ id.setLsb(lsb);
26
+ req.setModelViewId(id);
27
+ }
28
+ const page = new Pager();
29
+ page.setLimit(size);
30
+ if (cursor != null) {
31
+ page.setCursor(cursor);
32
+ }
33
+ req.setPage(page);
34
+ this.client.listPmiAnnotations(req, meta, handler);
35
+ });
36
+ return mapListPmiAnnotationsResponseOrThrow(res.toObject());
37
+ }
38
+ }
39
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../../../src/lib/pmi/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,kDAAkD,CAAC;AAC1E,OAAO,EACL,yBAAyB,GAE1B,MAAM,iEAAiE,CAAC;AAEzE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,OAAO,EAAE,cAAc,EAAe,YAAY,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,oCAAoC,EAAE,MAAM,UAAU,CAAC;AAShE,MAAM,OAAO,aAAa;EACxB,YACU,MAA0B,EAC1B,WAAwB,EACxB,gBAA0C;IAF1C,WAAM,GAAN,MAAM,CAAoB;IAC1B,gBAAW,GAAX,WAAW,CAAa;IACxB,qBAAgB,GAAhB,gBAAgB,CAA0B;EACjD,CAAC;EAEG,KAAK,CAAC,eAAe,CAAC,EAC3B,WAAW,EACX,MAAM,EACN,IAAI,GAAG,EAAE,MACiB,EAAE;IAC5B,MAAM,GAAG,GAA+B,MAAM,YAAY,CACxD,KAAK,EAAE,OAAO,EAAE,EAAE;MAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;MACzC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;MAC9D,MAAM,GAAG,GAAG,IAAI,yBAAyB,EAAE,CAAC;MAE5C,IAAI,WAAW,IAAI,IAAI,EAAE;QACvB,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC;QACxB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACf,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACf,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;OACxB;MAED,MAAM,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;MACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;MACpB,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;OACxB;MACD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;MAElB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC,CACF,CAAC;IAEF,OAAO,oCAAoC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;EAC9D,CAAC;CACF","sourcesContent":["import { Pager } from '@vertexvis/scene-view-protos/core/protos/paging_pb';\nimport { Uuid2l } from '@vertexvis/scene-view-protos/core/protos/uuid_pb';\nimport {\n ListPmiAnnotationsRequest,\n ListPmiAnnotationsResponse,\n} from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { UUID } from '@vertexvis/utils';\n\nimport { createMetadata, JwtProvider, requestUnary } from '../grpc';\nimport { mapListPmiAnnotationsResponseOrThrow } from './mapper';\nimport { PmiAnnotationListResponse } from './types';\n\nexport interface ListAnnotationsOptions {\n modelViewId?: UUID.UUID;\n cursor?: string;\n size?: number;\n}\n\nexport class PmiController {\n public constructor(\n private client: SceneViewAPIClient,\n private jwtProvider: JwtProvider,\n private deviceIdProvider: () => string | undefined\n ) {}\n\n public async listAnnotations({\n modelViewId,\n cursor,\n size = 50,\n }: ListAnnotationsOptions = {}): Promise<PmiAnnotationListResponse> {\n const res: ListPmiAnnotationsResponse = await requestUnary(\n async (handler) => {\n const deviceId = this.deviceIdProvider();\n const meta = await createMetadata(this.jwtProvider, deviceId);\n const req = new ListPmiAnnotationsRequest();\n\n if (modelViewId != null) {\n const { msb, lsb } = UUID.toMsbLsb(modelViewId);\n const id = new Uuid2l();\n id.setMsb(msb);\n id.setLsb(lsb);\n req.setModelViewId(id);\n }\n\n const page = new Pager();\n page.setLimit(size);\n if (cursor != null) {\n page.setCursor(cursor);\n }\n req.setPage(page);\n\n this.client.listPmiAnnotations(req, meta, handler);\n }\n );\n\n return mapListPmiAnnotationsResponseOrThrow(res.toObject());\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ /*!
2
+ * Copyright (c) 2024 Vertex Software LLC. All rights reserved.
3
+ */
4
+ export * from './controller';
5
+ export * from './types';
6
+ //# sourceMappingURL=index.js.map