@vertexvis/viewer 1.1.1-testing.4 → 1.1.1-testing.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{config-BY0v6BSK.js → config-OELTgslY.js} +3 -3
- package/dist/cjs/{config-BY0v6BSK.js.map → config-OELTgslY.js.map} +1 -1
- package/dist/cjs/{entities-CEaa12yP.js → entities-rj-TEPKc.js} +4 -4
- package/dist/cjs/{entities-CEaa12yP.js.map → entities-rj-TEPKc.js.map} +1 -1
- package/dist/cjs/{geometry_pb-EVfAEuPO.js → geometry_pb-asn2mNvW.js} +3 -3
- package/dist/cjs/{geometry_pb-EVfAEuPO.js.map → geometry_pb-asn2mNvW.js.map} +1 -1
- package/dist/cjs/index.cjs.js +5 -5
- package/dist/cjs/{queries-LthBzEHD.js → queries-e19TP_oF.js} +4 -4
- package/dist/cjs/{queries-LthBzEHD.js.map → queries-e19TP_oF.js.map} +1 -1
- package/dist/cjs/{regl-component-B_JaaVlv.js → regl-component-DjVaO3t3.js} +3 -3
- package/dist/cjs/{regl-component-B_JaaVlv.js.map → regl-component-DjVaO3t3.js.map} +1 -1
- package/dist/cjs/{representation_pb-B6XR10pQ.js → representation_pb-BVBPrHLf.js} +3 -3
- package/dist/cjs/{representation_pb-B6XR10pQ.js.map → representation_pb-BVBPrHLf.js.map} +1 -1
- package/dist/cjs/{streamAttributes-nCF7u7lv.js → streamAttributes-M3UUIO3l.js} +117 -94
- package/dist/cjs/streamAttributes-M3UUIO3l.js.map +1 -0
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +4 -4
- package/dist/collection/components/scene-tree-search/scene-tree-search.js +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js +2 -2
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/workers/png-decoder-pool.js +4 -3
- package/dist/collection/workers/png-decoder-pool.js.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/{p-COznr3CH.js → p-5bk1mHRt.js} +2 -2
- package/dist/components/{p-D3bzgaCV.js → p-B8530k7R.js} +2 -2
- package/dist/components/{p-CWcvgy8e.js → p-BCuMPvZO.js} +2 -2
- package/dist/components/{p-DTwJX9HL.js → p-BgzjmANj.js} +2 -2
- package/dist/components/{p-DTwJX9HL.js.map → p-BgzjmANj.js.map} +1 -1
- package/dist/components/p-BjvjKoy7.js +5 -0
- package/dist/components/p-BjvjKoy7.js.map +1 -0
- package/dist/components/{p-Cxz4L6FA.js → p-Bwtyddca.js} +2 -2
- package/dist/components/{p-Ca253f0h.js → p-Bx42CNGV.js} +2 -2
- package/dist/components/p-C86HMDzi.js +5 -0
- package/dist/components/{p-Y8W_BXUk.js.map → p-C86HMDzi.js.map} +1 -1
- package/dist/components/p-CSVgoQU8.js +5 -0
- package/dist/components/{p-Cku0WCYo.js.map → p-CSVgoQU8.js.map} +1 -1
- package/dist/components/{p-D3in41xo.js → p-CTi-0-dI.js} +2 -2
- package/dist/components/{p-D1Vdomj_.js → p-D_h07qsA.js} +2 -2
- package/dist/components/{p-BNRm88jS.js → p-KidjtXKE.js} +2 -2
- package/dist/components/vertex-scene-tree-search.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-viewer-dom-renderer.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-measurement-details.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-label.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/esm/{config-ss9ha12b.js → config-Cqrcty7U.js} +3 -3
- package/dist/esm/{config-ss9ha12b.js.map → config-Cqrcty7U.js.map} +1 -1
- package/dist/esm/{entities-DEFAhYdV.js → entities-CawBZH7i.js} +4 -4
- package/dist/esm/{entities-DEFAhYdV.js.map → entities-CawBZH7i.js.map} +1 -1
- package/dist/esm/{geometry_pb-D7fM1PYG.js → geometry_pb-COdZQiRi.js} +3 -3
- package/dist/esm/{geometry_pb-D7fM1PYG.js.map → geometry_pb-COdZQiRi.js.map} +1 -1
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.mjs +5 -5
- package/dist/esm/{queries-BcmE5Zbq.js → queries-B4XotYyr.js} +4 -4
- package/dist/esm/{queries-BcmE5Zbq.js.map → queries-B4XotYyr.js.map} +1 -1
- package/dist/esm/{regl-component-gIonUTBJ.js → regl-component-B1_h3_s8.js} +3 -3
- package/dist/esm/{regl-component-gIonUTBJ.js.map → regl-component-B1_h3_s8.js.map} +1 -1
- package/dist/esm/{representation_pb-Bf023NuN.js → representation_pb-C4MJfZMo.js} +3 -3
- package/dist/esm/{representation_pb-Bf023NuN.js.map → representation_pb-C4MJfZMo.js.map} +1 -1
- package/dist/esm/{streamAttributes-Bj2xDHfI.js → streamAttributes-BW9JzMeG.js} +116 -93
- package/dist/esm/streamAttributes-BW9JzMeG.js.map +1 -0
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +2 -2
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +2 -2
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-details.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +4 -4
- package/dist/esm/vertex-viewer-pin-group.entry.js +3 -3
- package/dist/esm/vertex-viewer-pin-label_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-transform-widget.entry.js +3 -3
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +4 -4
- package/dist/types/workers/png-decoder-pool.d.ts +0 -1
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-00540193.entry.js → p-1506f9a2.entry.js} +2 -2
- package/dist/viewer/{p-5cfb3047.entry.js → p-293d8f3f.entry.js} +2 -2
- package/dist/viewer/{p-9a39315d.entry.js → p-2faddbf8.entry.js} +2 -2
- package/dist/viewer/{p-7cb9c9bb.entry.js → p-36349a80.entry.js} +2 -2
- package/dist/viewer/p-36349a80.entry.js.map +1 -0
- package/dist/viewer/p-44395076.entry.js +5 -0
- package/dist/viewer/{p-e4913b06.entry.js.map → p-44395076.entry.js.map} +1 -1
- package/dist/viewer/{p-30a5748d.entry.js → p-45cc095e.entry.js} +2 -2
- package/dist/viewer/{p-d5a57757.entry.js → p-93311f46.entry.js} +2 -2
- package/dist/viewer/{p-CyiY_hsD.js → p-BEOO-Ypv.js} +2 -2
- package/dist/viewer/{p-CyiY_hsD.js.map → p-BEOO-Ypv.js.map} +1 -1
- package/dist/viewer/{p-CS8PfgcI.js → p-BJGbLthH.js} +2 -2
- package/dist/viewer/{p-CS8PfgcI.js.map → p-BJGbLthH.js.map} +1 -1
- package/dist/viewer/{p-D2IEHEGM.js → p-Br21pGVj.js} +2 -2
- package/dist/viewer/{p-D2IEHEGM.js.map → p-Br21pGVj.js.map} +1 -1
- package/dist/viewer/{p-kMZA0v7I.js → p-Bw_ryWU0.js} +2 -2
- package/dist/viewer/{p-kMZA0v7I.js.map → p-Bw_ryWU0.js.map} +1 -1
- package/dist/viewer/{p-DHK23fw4.js → p-C4_1Jc7H.js} +2 -2
- package/dist/viewer/{p-DHK23fw4.js.map → p-C4_1Jc7H.js.map} +1 -1
- package/dist/viewer/p-Cc3XhAoA.js +5 -0
- package/dist/viewer/p-Cc3XhAoA.js.map +1 -0
- package/dist/viewer/p-DYDhLlLS.js +5 -0
- package/dist/viewer/{p-_LpaX1ga.js.map → p-DYDhLlLS.js.map} +1 -1
- package/dist/viewer/{p-48020de1.entry.js → p-a94b626c.entry.js} +2 -2
- package/dist/viewer/{p-b79c295a.entry.js → p-ced98004.entry.js} +2 -2
- package/dist/viewer/{p-32a51a21.entry.js → p-dcb6ddfe.entry.js} +2 -2
- package/dist/viewer/p-dcb6ddfe.entry.js.map +1 -0
- package/dist/viewer/{p-cc835213.entry.js → p-ea45c3e9.entry.js} +2 -2
- package/dist/viewer/p-ebd9dd99.entry.js +5 -0
- package/dist/viewer/p-ebd9dd99.entry.js.map +1 -0
- package/dist/viewer/{p-edc2f914.entry.js → p-ecd594f2.entry.js} +2 -2
- package/dist/viewer/p-fec5a15d.entry.js +5 -0
- package/dist/viewer/p-fec5a15d.entry.js.map +1 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +9 -9
- package/dist/cjs/streamAttributes-nCF7u7lv.js.map +0 -1
- package/dist/components/p-Cku0WCYo.js +0 -5
- package/dist/components/p-CvEK3ZK1.js +0 -5
- package/dist/components/p-CvEK3ZK1.js.map +0 -1
- package/dist/components/p-Y8W_BXUk.js +0 -5
- package/dist/esm/streamAttributes-Bj2xDHfI.js.map +0 -1
- package/dist/viewer/p-32a51a21.entry.js.map +0 -1
- package/dist/viewer/p-4dd67d16.entry.js +0 -5
- package/dist/viewer/p-4dd67d16.entry.js.map +0 -1
- package/dist/viewer/p-7cb9c9bb.entry.js.map +0 -1
- package/dist/viewer/p-BhKTTmpL.js +0 -5
- package/dist/viewer/p-BhKTTmpL.js.map +0 -1
- package/dist/viewer/p-_LpaX1ga.js +0 -5
- package/dist/viewer/p-e4913b06.entry.js +0 -5
- package/dist/viewer/p-fd3a5837.entry.js +0 -5
- package/dist/viewer/p-fd3a5837.entry.js.map +0 -1
- /package/dist/components/{p-COznr3CH.js.map → p-5bk1mHRt.js.map} +0 -0
- /package/dist/components/{p-D3bzgaCV.js.map → p-B8530k7R.js.map} +0 -0
- /package/dist/components/{p-CWcvgy8e.js.map → p-BCuMPvZO.js.map} +0 -0
- /package/dist/components/{p-Cxz4L6FA.js.map → p-Bwtyddca.js.map} +0 -0
- /package/dist/components/{p-Ca253f0h.js.map → p-Bx42CNGV.js.map} +0 -0
- /package/dist/components/{p-D3in41xo.js.map → p-CTi-0-dI.js.map} +0 -0
- /package/dist/components/{p-D1Vdomj_.js.map → p-D_h07qsA.js.map} +0 -0
- /package/dist/components/{p-BNRm88jS.js.map → p-KidjtXKE.js.map} +0 -0
- /package/dist/viewer/{p-00540193.entry.js.map → p-1506f9a2.entry.js.map} +0 -0
- /package/dist/viewer/{p-5cfb3047.entry.js.map → p-293d8f3f.entry.js.map} +0 -0
- /package/dist/viewer/{p-9a39315d.entry.js.map → p-2faddbf8.entry.js.map} +0 -0
- /package/dist/viewer/{p-30a5748d.entry.js.map → p-45cc095e.entry.js.map} +0 -0
- /package/dist/viewer/{p-d5a57757.entry.js.map → p-93311f46.entry.js.map} +0 -0
- /package/dist/viewer/{p-48020de1.entry.js.map → p-a94b626c.entry.js.map} +0 -0
- /package/dist/viewer/{p-b79c295a.entry.js.map → p-ced98004.entry.js.map} +0 -0
- /package/dist/viewer/{p-cc835213.entry.js.map → p-ea45c3e9.entry.js.map} +0 -0
- /package/dist/viewer/{p-edc2f914.entry.js.map → p-ecd594f2.entry.js.map} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{t as i,p as t,H as e,d as n,h as o,e as s}from"./p-Bb32XUUS.js";import{e as a,p as r}from"./p-2UsvOTHJ.js";import{c as l}from"./p-C6gMOKYg.js";import{g as h}from"./p-CPROw2BU.js";import{P as d,g as p,a as c}from"./p-D1akPoVm.js";import{r as v}from"./p-Cd7kap5W.js";import{r as u}from"./p-CDM7zNn0.js";class b{constructor(i,t="view",e="pin-icon",n=undefined){this.model=i;this.mode=t;this.type=e;this.styleAttributes=n}addPin(i){this.model.addPin(i)}clearPins(){this.model.clearPins()}removePin(i){this.model.removePin(i)}setPins(i){this.model.setPins(i)}setPin(i){this.model.setPin(i)}updatePin(i){this.model.updatePin(i)}setSelectedPinId(i){this.model.setSelectedPin(i)}getToolMode(){return this.mode}getToolType(){return this.type}setToolMode(i){this.mode=i}setToolType(i){this.type=i}getDraggable(){return this.draggable}setDraggable(i){this.draggable=i}setPrimaryColor(i){this.styleAttributes={...this.styleAttributes,primaryColor:i}}setAccentColor(i){this.styleAttributes={...this.styleAttributes,accentColor:i}}getStyleAttributes(){return this.styleAttributes}updateDraggable(i,t,e){if(this.draggable!=null){this.draggable=i}const n=this.model.getPinById(i.id);if(n!=null){this.updatePin({...n,worldPosition:t,partId:e})}}}function w(i,t){const e=Math.max(t.start,Math.min(t.end,i.x));const n=Math.max(t.start,Math.min(t.end,i.y));return r.create(e,n)}function m(i,t){return r.add(r.scale(i,t.width,t.height),a.center(t))}function f(i,t,e,n,o){const s=1/t.height;const l=1/t.width;const h=a.center(t);const d=r.scale(r.subtract(i,h),l,s);if(e){const t=r.scale(r.create(n,o),l,s);const e=h.x>i.x;const a=e?t.x:-3*t.x;const p=h.y>i.y;const c=p?t.y:-3*t.y;const v=r.add(d,r.create(a,c));return w(v,u.create(-.5,.5))}else{return w(d,u.create(-.5,.5))}}function g(i){return window.getComputedStyle(i)}const x=()=>`:host{--viewer-annotations-pin-label-background-color:var( --viewer-annotations-pin-accent-color );--viewer-annotations-pin-label-border-color:var( --viewer-annotations-pin-primary-color );--viewer-annotations-pin-label-focused-border-color:var( --viewer-annotations-pin-primary-color );--viewer-annotations-pin-label-color:var(--white);--viewer-annotations-pin-label-padding-y:0.375em;--viewer-annotations-pin-label-padding-x:0.5em;--viewer-annotations-pin-label-border-width:2px;--viewer-annotations-pin-label-border-style:solid;--viewer-annotations-pin-label-border-radius:0.25em;--viewer-annotations-pin-label-min-width:2rem;--viewer-annotations-pin-label-max-width:25rem;--viewer-annotations-pin-label-max-height:50rem;overflow:hidden;pointer-events:none}:host([mode='']) .pin-label{color:var(--viewer-annotations-pin-label-color);background:var(--viewer-annotations-pin-label-background-color)}.pin-label-text{font-family:Arial, Helvetica, sans-serif;font-size:0.875rem;line-height:1rem;word-break:break-word;white-space:pre-wrap}.pin-label-input-wrapper{display:flex;position:absolute;pointer-events:auto;box-sizing:border-box;min-width:var(--viewer-annotations-pin-label-min-width);max-width:var(--viewer-annotations-pin-label-max-width);max-height:var(--viewer-annotations-pin-label-max-height);background:var(--viewer-annotations-pin-label-background-color);border-width:var(--viewer-annotations-pin-label-border-width);border-style:var(--viewer-annotations-pin-label-border-style);border-color:var(--viewer-annotations-pin-label-border-color);border-radius:var(--viewer-annotations-pin-label-border-radius)}.pin-label-input-wrapper.focused{min-width:var(--viewer-annotations-pin-label-max-width);border-color:var(--viewer-annotations-pin-label-focused-border-color)}.pin-input-drag-target{position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer}.pin-label-input{resize:none;position:relative;outline:none;border:none;word-break:break-word;padding:0 0 0 0;background-color:transparent;margin:var(--viewer-annotations-pin-label-padding-y) var(--viewer-annotations-pin-label-padding-x);width:var(--viewer-annotations-pin-label-min-width);flex-grow:1;overflow:hidden;max-width:calc( var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)) )}.pin-label-input.readonly{pointer-events:auto;color:black;cursor:pointer}.pin-label-hidden{position:absolute;visibility:hidden;pointer-events:none;width:auto;height:auto;box-sizing:border-box;border-width:var(--viewer-annotations-pin-label-border-width);border-style:var(--viewer-annotations-pin-label-border-style);border-color:var(--viewer-annotations-pin-label-border-color);margin:var(--viewer-annotations-pin-label-padding-y) 0;padding:0 var(--viewer-annotations-pin-label-padding-x);max-width:calc( var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)) )}`;const y=t(class i extends e{constructor(i){super();if(i!==false){this.__registerHost()}this.labelChanged=n(this,"labelChanged");this.labelFocused=n(this,"labelFocused");this.labelBlurred=n(this,"labelBlurred");this.value="";this.focused=false;this.textareaRows=1;this.computeContentSize=()=>{v((()=>{if(this.contentEl!=null){this.contentElBounds=this.contentEl.getBoundingClientRect();const i=g(this.contentEl);this.textareaRows=Math.max(1,Math.ceil((Number.parseFloat(i.getPropertyValue("height"))-Number.parseFloat(i.getPropertyValue("borderWidth"))*2)/Number.parseFloat(i.getPropertyValue("lineHeight"))))}}))};this.handleInputKeyDown=i=>{i.stopPropagation();if(i.key==="Enter"&&(i.ctrlKey||i.metaKey||i.shiftKey)){this.textareaRows+=1;this.value+="\n"}else if(i.key==="Enter"){i.preventDefault();this.submit()}};this.handlePointerDown=i=>{var t;if(!this.focused){if(this.elementBounds!=null){if(i.buttons!==2){i.preventDefault();i.stopPropagation()}this.relativePointerDownPosition=f(h(i,this.elementBounds),this.elementBounds);this.pinPointerDownPosition=(t=this.pin)===null||t===void 0?void 0:t.label.point;window.addEventListener("pointermove",this.handlePointerMove);window.addEventListener("pointerup",this.handlePointerUp)}}};this.handlePointerMove=i=>{var t;if(this.elementBounds!=null&&this.relativePointerDownPosition&&this.pinPointerDownPosition!=null){i.preventDefault();i.stopPropagation();const e=h(i,this.elementBounds);const n=f(e,this.elementBounds);const o=r.subtract(n,this.relativePointerDownPosition);const s=this.pin!=null?{...this.pin,label:{...this.pin.label,point:r.add(this.pinPointerDownPosition,o)}}:undefined;if(s){(t=this.pinController)===null||t===void 0?void 0:t.updatePin(s);this.computeScreenPosition()}}};this.handlePointerUp=i=>{var t,e;if(((t=this.pinController)===null||t===void 0?void 0:t.getToolMode())==="edit"&&this.relativePointerDownPosition!=null&&this.elementBounds!=null){const t=m(this.relativePointerDownPosition,this.elementBounds);const n=r.distance(t,h(i,this.elementBounds));if(n<=2){this.focused=true;this.labelFocused.emit((e=this.pin)===null||e===void 0?void 0:e.id)}}this.relativePointerDownPosition=undefined;this.pinPointerDownPosition=undefined;window.removeEventListener("pointermove",this.handlePointerMove);window.removeEventListener("pointerup",this.handlePointerUp)};this.handleTextBlur=()=>{this.submit()};this.handleTextInput=i=>{const t=i.target;this.value=t.value}}async setFocus(){var i,t,e;if(typeof((i=this.inputEl)===null||i===void 0?void 0:i.focus)==="function"){this.focused=true;this.labelFocused.emit((t=this.pin)===null||t===void 0?void 0:t.id);(e=this.inputEl)===null||e===void 0?void 0:e.focus()}}async submit(){var i,t;this.focused=false;this.labelBlurred.emit((i=this.pin)===null||i===void 0?void 0:i.id);if(this.pin!=null){(t=this.pinController)===null||t===void 0?void 0:t.updatePin({...this.pin,label:{point:this.pin.label.point,text:this.value}})}}watchFocusChange(){var i,t;this.labelChanged.emit();if(this.focused){(i=this.pinController)===null||i===void 0?void 0:i.setSelectedPinId((t=this.pin)===null||t===void 0?void 0:t.id)}}watchPinChange(){var i,t;this.value=(t=(i=this.pin)===null||i===void 0?void 0:i.label.text)!==null&&t!==void 0?t:"";this.computeScreenPosition()}watchElementBoundsChange(){this.computeScreenPosition()}componentWillLoad(){var i,t;this.value=(t=(i=this.pin)===null||i===void 0?void 0:i.label.text)!==null&&t!==void 0?t:"";this.computeScreenPosition();if(this.pinController==null){this.pinController=new b(new d)}}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>{this.labelChanged.emit()}));this.contentResizeObserver=new ResizeObserver(this.computeContentSize);if(this.hostEl!=null){this.resizeObserver.observe(this.hostEl)}if(this.contentEl!=null){this.contentResizeObserver.observe(this.contentEl)}}disconnectedCallback(){var i,t;(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect();(t=this.contentResizeObserver)===null||t===void 0?void 0:t.disconnect()}componentDidRender(){if(this.focused&&this.inputEl!=null){this.setFocus()}}render(){var i,t,e;const{primaryColor:n,accentColor:a}=p(this.pin);return o(s,{key:"2eeca89781ad06fce5403bee5d967496c4886201"},o("div",{key:"9f6ca00bfadf8b6090db219ce05ec2eae28f341f",class:l("pin-label-input-wrapper",{focused:this.focused}),onPointerDown:this.handlePointerDown,style:{top:`${((i=this.computedScreenPosition)===null||i===void 0?void 0:i.y.toString())||0}px`,left:`${((t=this.computedScreenPosition)===null||t===void 0?void 0:t.x.toString())||0}px`,minWidth:this.computeMinWidth(),maxWidth:this.computeMaxWidth(),maxHeight:this.computeMaxHeight(),borderColor:n,background:a}},o("textarea",{key:"faee5e02d2f9bd18dd2e367e4e52b4325ac3c782",id:`pin-label-input-${(e=this.pin)===null||e===void 0?void 0:e.id}`,class:l("pin-label-input","pin-label-text",{["readonly"]:!this.focused}),disabled:!this.focused,ref:i=>this.inputEl=i,value:this.value,rows:this.textareaRows,onKeyDown:this.handleInputKeyDown,onInput:this.handleTextInput,onBlur:this.handleTextBlur}),!this.focused&&o("div",{key:"2851d39b6cf87c64ef585a9f1967c689f01d030e",class:"pin-input-drag-target",onPointerDown:this.handlePointerDown})),o("div",{key:"a7c2e114227e9fe744b0ef4e42c3fd5abd5c626e",ref:i=>this.contentEl=i,class:l("pin-label-text","pin-label-hidden"),style:{maxWidth:this.computeMaxWidth(),maxHeight:this.computeMaxHeight()}},this.hiddenContent()))}hiddenContent(){return this.value.includes("\n")?this.value.split("\n").reduce(((i,t)=>[...i,t,o("br",null)]),[]):[this.value]}computeMinWidth(){if(this.contentElBounds!=null){const i=`${this.contentElBounds.width+8}px`;return`min(${i}, ${this.computeMaxWidth()})`}else{return`var(--viewer-annotations-pin-label-min-width)`}}computeMaxWidth(){const i=`var(--viewer-annotations-pin-label-max-width)`;return`min(${i}, ${this.computeRemainingWidth()})`}computeMaxHeight(){const i=`var(--viewer-annotations-pin-label-max-height)`;return`min(${i}, ${this.computeRemainingHeight()})`}computeRemainingWidth(){var i,t;return`calc(${((i=this.elementBounds)===null||i===void 0?void 0:i.width.toString())||0}px - ${((t=this.computedScreenPosition)===null||t===void 0?void 0:t.x.toString())||0}px)`}computeRemainingHeight(){var i,t;return`calc(${((i=this.elementBounds)===null||i===void 0?void 0:i.height.toString())||0}px - ${((t=this.computedScreenPosition)===null||t===void 0?void 0:t.y.toString())||0}px)`}computeScreenPosition(){this.computedScreenPosition=c(this.pin)&&this.elementBounds!=null&&this.pin.label.point!=null?m(this.pin.label.point,this.elementBounds):undefined}get hostEl(){return this}static get watchers(){return{focused:[{watchFocusChange:0}],pin:[{watchPinChange:0}],elementBounds:[{watchElementBoundsChange:0}]}}static get style(){return x()}},[0,"vertex-viewer-pin-label",{pin:[16],elementBounds:[16],value:[1025],pinController:[1040],focused:[32],computedScreenPosition:[32],textareaRows:[32],contentElBounds:[32],setFocus:[64],submit:[64]},undefined,{focused:[{watchFocusChange:0}],pin:[{watchPinChange:0}],elementBounds:[{watchElementBoundsChange:0}]}]);function C(){if(typeof customElements==="undefined"){return}const t=["vertex-viewer-pin-label"];t.forEach((t=>{switch(t){case"vertex-viewer-pin-label":if(!customElements.get(i(t))){customElements.define(i(t),y)}break}}))}C();export{b as P,y as V,f as a,C as d,m as t};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{t as i,p as t,H as e,d as n,h as o,e as s}from"./p-Bb32XUUS.js";import{e as a,p as r}from"./p-2UsvOTHJ.js";import{c as l}from"./p-C6gMOKYg.js";import{g as h}from"./p-CPROw2BU.js";import{P as d,g as p,a as c}from"./p-D1akPoVm.js";import{r as v}from"./p-Cd7kap5W.js";import{r as u}from"./p-CDM7zNn0.js";class b{constructor(i,t="view",e="pin-icon",n=undefined){this.model=i;this.mode=t;this.type=e;this.styleAttributes=n}addPin(i){this.model.addPin(i)}clearPins(){this.model.clearPins()}removePin(i){this.model.removePin(i)}setPins(i){this.model.setPins(i)}setPin(i){this.model.setPin(i)}updatePin(i){this.model.updatePin(i)}setSelectedPinId(i){this.model.setSelectedPin(i)}getToolMode(){return this.mode}getToolType(){return this.type}setToolMode(i){this.mode=i}setToolType(i){this.type=i}getDraggable(){return this.draggable}setDraggable(i){this.draggable=i}setPrimaryColor(i){this.styleAttributes={...this.styleAttributes,primaryColor:i}}setAccentColor(i){this.styleAttributes={...this.styleAttributes,accentColor:i}}getStyleAttributes(){return this.styleAttributes}updateDraggable(i,t,e){if(this.draggable!=null){this.draggable=i}const n=this.model.getPinById(i.id);if(n!=null){this.updatePin({...n,worldPosition:t,partId:e})}}}function w(i,t){const e=Math.max(t.start,Math.min(t.end,i.x));const n=Math.max(t.start,Math.min(t.end,i.y));return r.create(e,n)}function m(i,t){return r.add(r.scale(i,t.width,t.height),a.center(t))}function f(i,t,e,n,o){const s=1/t.height;const l=1/t.width;const h=a.center(t);const d=r.scale(r.subtract(i,h),l,s);if(e){const t=r.scale(r.create(n,o),l,s);const e=h.x>i.x;const a=e?t.x:-3*t.x;const p=h.y>i.y;const c=p?t.y:-3*t.y;const v=r.add(d,r.create(a,c));return w(v,u.create(-.5,.5))}else{return w(d,u.create(-.5,.5))}}function g(i){return window.getComputedStyle(i)}const x=()=>`:host{--viewer-annotations-pin-label-background-color:var( --viewer-annotations-pin-accent-color );--viewer-annotations-pin-label-border-color:var( --viewer-annotations-pin-primary-color );--viewer-annotations-pin-label-focused-border-color:var( --viewer-annotations-pin-primary-color );--viewer-annotations-pin-label-color:var(--white);--viewer-annotations-pin-label-padding-y:0.375em;--viewer-annotations-pin-label-padding-x:0.5em;--viewer-annotations-pin-label-border-width:2px;--viewer-annotations-pin-label-border-style:solid;--viewer-annotations-pin-label-border-radius:0.25em;--viewer-annotations-pin-label-min-width:2rem;--viewer-annotations-pin-label-max-width:25rem;--viewer-annotations-pin-label-max-height:50rem;overflow:hidden;pointer-events:none}:host([mode='']) .pin-label{color:var(--viewer-annotations-pin-label-color);background:var(--viewer-annotations-pin-label-background-color)}.pin-label-text{font-family:Arial, Helvetica, sans-serif;font-size:0.875rem;line-height:1rem;word-break:break-word;white-space:pre-wrap}.pin-label-input-wrapper{display:flex;position:absolute;pointer-events:auto;box-sizing:border-box;min-width:var(--viewer-annotations-pin-label-min-width);max-width:var(--viewer-annotations-pin-label-max-width);max-height:var(--viewer-annotations-pin-label-max-height);background:var(--viewer-annotations-pin-label-background-color);border-width:var(--viewer-annotations-pin-label-border-width);border-style:var(--viewer-annotations-pin-label-border-style);border-color:var(--viewer-annotations-pin-label-border-color);border-radius:var(--viewer-annotations-pin-label-border-radius)}.pin-label-input-wrapper.focused{min-width:var(--viewer-annotations-pin-label-max-width);border-color:var(--viewer-annotations-pin-label-focused-border-color)}.pin-input-drag-target{position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer}.pin-label-input{resize:none;position:relative;outline:none;border:none;word-break:break-word;padding:0 0 0 0;background-color:transparent;margin:var(--viewer-annotations-pin-label-padding-y) var(--viewer-annotations-pin-label-padding-x);width:var(--viewer-annotations-pin-label-min-width);flex-grow:1;overflow:hidden;max-width:calc( var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)) )}.pin-label-input.readonly{pointer-events:auto;color:black;cursor:pointer}.pin-label-hidden{position:absolute;visibility:hidden;pointer-events:none;width:auto;height:auto;box-sizing:border-box;border-width:var(--viewer-annotations-pin-label-border-width);border-style:var(--viewer-annotations-pin-label-border-style);border-color:var(--viewer-annotations-pin-label-border-color);margin:var(--viewer-annotations-pin-label-padding-y) 0;padding:0 var(--viewer-annotations-pin-label-padding-x);max-width:calc( var(--viewer-annotations-pin-label-max-width) - calc(2 * var(--viewer-annotations-pin-label-padding-x)) )}`;const y=t(class i extends e{constructor(i){super();if(i!==false){this.__registerHost()}this.labelChanged=n(this,"labelChanged");this.labelFocused=n(this,"labelFocused");this.labelBlurred=n(this,"labelBlurred");this.value="";this.focused=false;this.textareaRows=1;this.computeContentSize=()=>{v((()=>{if(this.contentEl!=null){this.contentElBounds=this.contentEl.getBoundingClientRect();const i=g(this.contentEl);this.textareaRows=Math.max(1,Math.ceil((Number.parseFloat(i.getPropertyValue("height"))-Number.parseFloat(i.getPropertyValue("borderWidth"))*2)/Number.parseFloat(i.getPropertyValue("lineHeight"))))}}))};this.handleInputKeyDown=i=>{i.stopPropagation();if(i.key==="Enter"&&(i.ctrlKey||i.metaKey||i.shiftKey)){this.textareaRows+=1;this.value+="\n"}else if(i.key==="Enter"){i.preventDefault();this.submit()}};this.handlePointerDown=i=>{var t;if(!this.focused){if(this.elementBounds!=null){if(i.buttons!==2){i.preventDefault();i.stopPropagation()}this.relativePointerDownPosition=f(h(i,this.elementBounds),this.elementBounds);this.pinPointerDownPosition=(t=this.pin)===null||t===void 0?void 0:t.label.point;window.addEventListener("pointermove",this.handlePointerMove);window.addEventListener("pointerup",this.handlePointerUp)}}};this.handlePointerMove=i=>{var t;if(this.elementBounds!=null&&this.relativePointerDownPosition&&this.pinPointerDownPosition!=null){i.preventDefault();i.stopPropagation();const e=h(i,this.elementBounds);const n=f(e,this.elementBounds);const o=r.subtract(n,this.relativePointerDownPosition);const s=this.pin!=null?{...this.pin,label:{...this.pin.label,point:r.add(this.pinPointerDownPosition,o)}}:undefined;if(s){(t=this.pinController)===null||t===void 0?void 0:t.updatePin(s);this.computeScreenPosition()}}};this.handlePointerUp=i=>{var t,e;if(((t=this.pinController)===null||t===void 0?void 0:t.getToolMode())==="edit"&&this.relativePointerDownPosition!=null&&this.elementBounds!=null){const t=m(this.relativePointerDownPosition,this.elementBounds);const n=r.distance(t,h(i,this.elementBounds));if(n<=2){this.focused=true;this.labelFocused.emit((e=this.pin)===null||e===void 0?void 0:e.id)}}this.relativePointerDownPosition=undefined;this.pinPointerDownPosition=undefined;window.removeEventListener("pointermove",this.handlePointerMove);window.removeEventListener("pointerup",this.handlePointerUp)};this.handleTextBlur=()=>{this.submit()};this.handleTextInput=i=>{const t=i.target;this.value=t.value}}async setFocus(){var i,t,e;if(typeof((i=this.inputEl)===null||i===void 0?void 0:i.focus)==="function"){this.focused=true;this.labelFocused.emit((t=this.pin)===null||t===void 0?void 0:t.id);(e=this.inputEl)===null||e===void 0?void 0:e.focus()}}async submit(){var i,t;this.focused=false;this.labelBlurred.emit((i=this.pin)===null||i===void 0?void 0:i.id);if(this.pin!=null){(t=this.pinController)===null||t===void 0?void 0:t.updatePin({...this.pin,label:{point:this.pin.label.point,text:this.value}})}}watchFocusChange(){var i,t;this.labelChanged.emit();if(this.focused){(i=this.pinController)===null||i===void 0?void 0:i.setSelectedPinId((t=this.pin)===null||t===void 0?void 0:t.id)}}watchPinChange(){var i,t;this.value=(t=(i=this.pin)===null||i===void 0?void 0:i.label.text)!==null&&t!==void 0?t:"";this.computeScreenPosition()}watchElementBoundsChange(){this.computeScreenPosition()}componentWillLoad(){var i,t;this.value=(t=(i=this.pin)===null||i===void 0?void 0:i.label.text)!==null&&t!==void 0?t:"";this.computeScreenPosition();if(this.pinController==null){this.pinController=new b(new d)}}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>{this.labelChanged.emit()}));this.contentResizeObserver=new ResizeObserver(this.computeContentSize);if(this.hostEl!=null){this.resizeObserver.observe(this.hostEl)}if(this.contentEl!=null){this.contentResizeObserver.observe(this.contentEl)}}disconnectedCallback(){var i,t;(i=this.resizeObserver)===null||i===void 0?void 0:i.disconnect();(t=this.contentResizeObserver)===null||t===void 0?void 0:t.disconnect()}componentDidRender(){if(this.focused&&this.inputEl!=null){this.setFocus()}}render(){var i,t,e;const{primaryColor:n,accentColor:a}=p(this.pin);return o(s,{key:"2eeca89781ad06fce5403bee5d967496c4886201"},o("div",{key:"9f6ca00bfadf8b6090db219ce05ec2eae28f341f",class:l("pin-label-input-wrapper",{focused:this.focused}),onPointerDown:this.handlePointerDown,style:{top:`${((i=this.computedScreenPosition)===null||i===void 0?void 0:i.y.toString())||0}px`,left:`${((t=this.computedScreenPosition)===null||t===void 0?void 0:t.x.toString())||0}px`,minWidth:this.computeMinWidth(),maxWidth:this.computeMaxWidth(),maxHeight:this.computeMaxHeight(),borderColor:n,background:a}},o("textarea",{key:"beaf273457ceeadd30f709fff580f2af5b1c366a",id:`pin-label-input-${(e=this.pin)===null||e===void 0?void 0:e.id}`,class:l("pin-label-input","pin-label-text",{["readonly"]:!this.focused}),disabled:!this.focused,ref:i=>this.inputEl=i,value:this.value,rows:this.textareaRows,onKeyDown:this.handleInputKeyDown,onInput:this.handleTextInput,onBlur:this.handleTextBlur,"aria-label":"Pin label input"}),!this.focused&&o("div",{key:"6ba9750253ae2e9de2a48a9b2ce31f6971b7b0a1",class:"pin-input-drag-target",onPointerDown:this.handlePointerDown})),o("div",{key:"7a474943d854cda9fe7859a30441bcc06a758010",ref:i=>this.contentEl=i,class:l("pin-label-text","pin-label-hidden"),style:{maxWidth:this.computeMaxWidth(),maxHeight:this.computeMaxHeight()}},this.hiddenContent()))}hiddenContent(){return this.value.includes("\n")?this.value.split("\n").reduce(((i,t)=>[...i,t,o("br",null)]),[]):[this.value]}computeMinWidth(){if(this.contentElBounds!=null){const i=`${this.contentElBounds.width+8}px`;return`min(${i}, ${this.computeMaxWidth()})`}else{return`var(--viewer-annotations-pin-label-min-width)`}}computeMaxWidth(){const i=`var(--viewer-annotations-pin-label-max-width)`;return`min(${i}, ${this.computeRemainingWidth()})`}computeMaxHeight(){const i=`var(--viewer-annotations-pin-label-max-height)`;return`min(${i}, ${this.computeRemainingHeight()})`}computeRemainingWidth(){var i,t;return`calc(${((i=this.elementBounds)===null||i===void 0?void 0:i.width.toString())||0}px - ${((t=this.computedScreenPosition)===null||t===void 0?void 0:t.x.toString())||0}px)`}computeRemainingHeight(){var i,t;return`calc(${((i=this.elementBounds)===null||i===void 0?void 0:i.height.toString())||0}px - ${((t=this.computedScreenPosition)===null||t===void 0?void 0:t.y.toString())||0}px)`}computeScreenPosition(){this.computedScreenPosition=c(this.pin)&&this.elementBounds!=null&&this.pin.label.point!=null?m(this.pin.label.point,this.elementBounds):undefined}get hostEl(){return this}static get watchers(){return{focused:[{watchFocusChange:0}],pin:[{watchPinChange:0}],elementBounds:[{watchElementBoundsChange:0}]}}static get style(){return x()}},[0,"vertex-viewer-pin-label",{pin:[16],elementBounds:[16],value:[1025],pinController:[1040],focused:[32],computedScreenPosition:[32],textareaRows:[32],contentElBounds:[32],setFocus:[64],submit:[64]},undefined,{focused:[{watchFocusChange:0}],pin:[{watchPinChange:0}],elementBounds:[{watchElementBoundsChange:0}]}]);function C(){if(typeof customElements==="undefined"){return}const t=["vertex-viewer-pin-label"];t.forEach((t=>{switch(t){case"vertex-viewer-pin-label":if(!customElements.get(i(t))){customElements.define(i(t),y)}break}}))}C();export{b as P,y as V,f as a,C as d,m as t};
|
|
5
|
+
//# sourceMappingURL=p-BgzjmANj.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["PinController","constructor","model","mode","type","styleAttributes","undefined","this","addPin","pin","clearPins","removePin","setPins","pins","setPin","updatePin","setSelectedPinId","pinId","setSelectedPin","getToolMode","getToolType","setToolMode","setToolType","getDraggable","draggable","setDraggable","setPrimaryColor","color","primaryColor","setAccentColor","accentColor","getStyleAttributes","updateDraggable","worldPosition","partId","getPinById","id","constrainRelativePoint","pt","range","constrainedX","Math","max","start","min","end","x","constrainedY","y","Point","create","translatePointToScreen","canvasDimensions","add","scale","width","height","Dimensions","center","translatePointToRelative","includeOffset","xOffset","yOffset","verticalScaleFactor","horizontalScaleFactor","canvasCenterPoint","point","subtract","offset","centerIsToTheRightInXDirection","xOffsetCalculated","centerIsBelowInYDirection","yOffsetCalculated","offsetPoint","Range","getComputedStyle","el","window","viewerPinLabelCss","VertexPinLabel","__stencil_proxyCustomElement","HTMLElement","registerHost","value","focused","textareaRows","computeContentSize","readDOM","contentEl","contentElBounds","getBoundingClientRect","computedStyles","ceil","Number","parseFloat","getPropertyValue","handleInputKeyDown","event","stopPropagation","key","ctrlKey","metaKey","shiftKey","preventDefault","submit","handlePointerDown","elementBounds","buttons","relativePointerDownPosition","getMouseClientPosition","pinPointerDownPosition","_a","label","addEventListener","handlePointerMove","handlePointerUp","relative","relativeDelta","myUpdatedPin","pinController","computeScreenPosition","pointerDownScreen","distanceBetweenStartAndEndPoint","distance","labelFocused","emit","_b","removeEventListener","handleTextBlur","handleTextInput","input","target","setFocus","inputEl","focus","_c","labelBlurred","text","watchFocusChange","labelChanged","watchPinChange","watchElementBoundsChange","componentWillLoad","PinModel","componentDidLoad","resizeObserver","ResizeObserver","contentResizeObserver","hostEl","observe","disconnectedCallback","disconnect","componentDidRender","render","getPinColors","h","Host","class","classNames","onPointerDown","style","top","computedScreenPosition","toString","left","minWidth","computeMinWidth","maxWidth","computeMaxWidth","maxHeight","computeMaxHeight","borderColor","background","disabled","ref","rows","onKeyDown","onInput","onBlur","hiddenContent","includes","split","reduce","res","str","expected","computeRemainingWidth","computeRemainingHeight","isTextPin"],"sources":["src/lib/pins/controller.ts","src/components/viewer-pin-tool/utils.ts","src/components/viewer-pin-label/utils.ts","src/components/viewer-pin-label/viewer-pin-label.css?tag=vertex-viewer-pin-label","src/components/viewer-pin-label/viewer-pin-label.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined,\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string,\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range,\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions),\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number,\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated),\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n return window.getComputedStyle(el);\n}\n",":host {\n /**\n * @prop --viewer-annotations-pin-label-background-color: A CSS color that\n * specifies the color of the label background\n */\n --viewer-annotations-pin-label-background-color: var(\n --viewer-annotations-pin-accent-color\n );\n\n /**\n * @prop --viewer-annotations-pin-label-border-color: A CSS color that\n * specifies the color of the label's border\n */\n --viewer-annotations-pin-label-border-color: var(\n --viewer-annotations-pin-primary-color\n );\n\n /**\n * @prop --viewer-annotations-pin-label-focused-border-color: A CSS color that\n * specifies the color of the label's border when focused. \n */\n --viewer-annotations-pin-label-focused-border-color: var(\n --viewer-annotations-pin-primary-color\n );\n\n /**\n * @prop --viewer-annotations-pin-label-color: A CSS color that\n * specifies the color of the label \n */\n --viewer-annotations-pin-label-color: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-padding-y: A var that\n * specifies the vertical padding of the label\n */\n --viewer-annotations-pin-label-padding-y: 0.375em;\n\n /**\n * @prop --viewer-annotations-pin-label-padding-x: A var that\n * specifies the horizontal padding of the label\n */\n --viewer-annotations-pin-label-padding-x: 0.5em;\n\n /**\n * @prop --viewer-annotations-pin-label-border-width: A CSS length that\n * specifies the width of the border on this label. Defaults to `2px`.\n */\n --viewer-annotations-pin-label-border-width: 2px;\n\n /**\n * @prop --viewer-annotations-pin-label-border-style: A CSS variable that\n * specifies the style of border on this label. Defaults to `solid`.\n */\n --viewer-annotations-pin-label-border-style: solid;\n\n /**\n * @prop --viewer-annotations-pin-label-border-radius: A var that\n * specifies the border radius of the label\n */\n --viewer-annotations-pin-label-border-radius: 0.25em;\n\n /**\n * @prop --viewer-annotations-pin-label-min-width: A CSS length that\n * specifies the minimum width of the label. Defaults to `2rem`.\n */\n --viewer-annotations-pin-label-min-width: 2rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-width: A CSS length that\n * specifies the maximum width of the label. Defaults to `25rem`.\n */\n --viewer-annotations-pin-label-max-width: 25rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-height: A CSS length that\n * specifies the maximum height of the label. Defaults to `50rem`.\n */\n --viewer-annotations-pin-label-max-height: 50rem;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n:host([mode='']) .pin-label {\n color: var(--viewer-annotations-pin-label-color);\n background: var(--viewer-annotations-pin-label-background-color);\n}\n\n.pin-label-text {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 0.875rem;\n line-height: 1rem;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.pin-label-input-wrapper {\n display: flex;\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n min-width: var(--viewer-annotations-pin-label-min-width);\n max-width: var(--viewer-annotations-pin-label-max-width);\n max-height: var(--viewer-annotations-pin-label-max-height);\n background: var(--viewer-annotations-pin-label-background-color);\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n border-radius: var(--viewer-annotations-pin-label-border-radius);\n}\n\n.pin-label-input-wrapper.focused {\n min-width: var(--viewer-annotations-pin-label-max-width);\n border-color: var(--viewer-annotations-pin-label-focused-border-color);\n}\n\n.pin-input-drag-target {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.pin-label-input {\n resize: none;\n position: relative;\n outline: none;\n border: none;\n word-break: break-word;\n padding: 0 0 0 0;\n background-color: transparent;\n margin: var(--viewer-annotations-pin-label-padding-y)\n var(--viewer-annotations-pin-label-padding-x);\n width: var(--viewer-annotations-pin-label-min-width);\n flex-grow: 1;\n overflow: hidden;\n max-width: calc(\n var(--viewer-annotations-pin-label-max-width) -\n calc(2 * var(--viewer-annotations-pin-label-padding-x))\n );\n}\n\n.pin-label-input.readonly {\n pointer-events: auto;\n color: black;\n cursor: pointer;\n}\n\n.pin-label-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: auto;\n height: auto;\n box-sizing: border-box;\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n margin: var(--viewer-annotations-pin-label-padding-y) 0;\n padding: 0 var(--viewer-annotations-pin-label-padding-x);\n max-width: calc(\n var(--viewer-annotations-pin-label-max-width) -\n calc(2 * var(--viewer-annotations-pin-label-padding-x))\n );\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n /**\n * @internal\n * submits the current text, unfocuses the input and emits the blur event to consumers\n */\n @Method()\n public async submit(): Promise<void> {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>,\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (Number.parseFloat(computedStyles.getPropertyValue('height')) -\n Number.parseFloat(\n computedStyles.getPropertyValue('borderWidth'),\n ) *\n 2) /\n Number.parseFloat(computedStyles.getPropertyValue('lineHeight')),\n ),\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n if (event.buttons !== 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds,\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n event.stopPropagation();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition,\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds,\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds),\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["PinController","constructor","model","mode","type","styleAttributes","undefined","this","addPin","pin","clearPins","removePin","setPins","pins","setPin","updatePin","setSelectedPinId","pinId","setSelectedPin","getToolMode","getToolType","setToolMode","setToolType","getDraggable","draggable","setDraggable","setPrimaryColor","color","primaryColor","setAccentColor","accentColor","getStyleAttributes","updateDraggable","worldPosition","partId","getPinById","id","constrainRelativePoint","pt","range","constrainedX","Math","max","start","min","end","x","constrainedY","y","Point","create","translatePointToScreen","canvasDimensions","add","scale","width","height","Dimensions","center","translatePointToRelative","includeOffset","xOffset","yOffset","verticalScaleFactor","horizontalScaleFactor","canvasCenterPoint","point","subtract","offset","centerIsToTheRightInXDirection","xOffsetCalculated","centerIsBelowInYDirection","yOffsetCalculated","offsetPoint","Range","getComputedStyle","el","window","viewerPinLabelCss","VertexPinLabel","__stencil_proxyCustomElement","HTMLElement","registerHost","value","focused","textareaRows","computeContentSize","readDOM","contentEl","contentElBounds","getBoundingClientRect","computedStyles","ceil","Number","parseFloat","getPropertyValue","handleInputKeyDown","event","stopPropagation","key","ctrlKey","metaKey","shiftKey","preventDefault","submit","handlePointerDown","elementBounds","buttons","relativePointerDownPosition","getMouseClientPosition","pinPointerDownPosition","_a","label","addEventListener","handlePointerMove","handlePointerUp","relative","relativeDelta","myUpdatedPin","pinController","computeScreenPosition","pointerDownScreen","distanceBetweenStartAndEndPoint","distance","labelFocused","emit","_b","removeEventListener","handleTextBlur","handleTextInput","input","target","setFocus","inputEl","focus","_c","labelBlurred","text","watchFocusChange","labelChanged","watchPinChange","watchElementBoundsChange","componentWillLoad","PinModel","componentDidLoad","resizeObserver","ResizeObserver","contentResizeObserver","hostEl","observe","disconnectedCallback","disconnect","componentDidRender","render","getPinColors","h","Host","class","classNames","onPointerDown","style","top","computedScreenPosition","toString","left","minWidth","computeMinWidth","maxWidth","computeMaxWidth","maxHeight","computeMaxHeight","borderColor","background","disabled","ref","rows","onKeyDown","onInput","onBlur","hiddenContent","includes","split","reduce","res","str","expected","computeRemainingWidth","computeRemainingHeight","isTextPin"],"sources":["src/lib/pins/controller.ts","src/components/viewer-pin-tool/utils.ts","src/components/viewer-pin-label/utils.ts","src/components/viewer-pin-label/viewer-pin-label.css?tag=vertex-viewer-pin-label","src/components/viewer-pin-label/viewer-pin-label.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined,\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string,\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range,\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions),\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number,\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated),\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","export function getComputedStyle(el: HTMLElement): CSSStyleDeclaration {\n return window.getComputedStyle(el);\n}\n",":host {\n /**\n * @prop --viewer-annotations-pin-label-background-color: A CSS color that\n * specifies the color of the label background\n */\n --viewer-annotations-pin-label-background-color: var(\n --viewer-annotations-pin-accent-color\n );\n\n /**\n * @prop --viewer-annotations-pin-label-border-color: A CSS color that\n * specifies the color of the label's border\n */\n --viewer-annotations-pin-label-border-color: var(\n --viewer-annotations-pin-primary-color\n );\n\n /**\n * @prop --viewer-annotations-pin-label-focused-border-color: A CSS color that\n * specifies the color of the label's border when focused. \n */\n --viewer-annotations-pin-label-focused-border-color: var(\n --viewer-annotations-pin-primary-color\n );\n\n /**\n * @prop --viewer-annotations-pin-label-color: A CSS color that\n * specifies the color of the label \n */\n --viewer-annotations-pin-label-color: var(--white);\n\n /**\n * @prop --viewer-annotations-pin-label-padding-y: A var that\n * specifies the vertical padding of the label\n */\n --viewer-annotations-pin-label-padding-y: 0.375em;\n\n /**\n * @prop --viewer-annotations-pin-label-padding-x: A var that\n * specifies the horizontal padding of the label\n */\n --viewer-annotations-pin-label-padding-x: 0.5em;\n\n /**\n * @prop --viewer-annotations-pin-label-border-width: A CSS length that\n * specifies the width of the border on this label. Defaults to `2px`.\n */\n --viewer-annotations-pin-label-border-width: 2px;\n\n /**\n * @prop --viewer-annotations-pin-label-border-style: A CSS variable that\n * specifies the style of border on this label. Defaults to `solid`.\n */\n --viewer-annotations-pin-label-border-style: solid;\n\n /**\n * @prop --viewer-annotations-pin-label-border-radius: A var that\n * specifies the border radius of the label\n */\n --viewer-annotations-pin-label-border-radius: 0.25em;\n\n /**\n * @prop --viewer-annotations-pin-label-min-width: A CSS length that\n * specifies the minimum width of the label. Defaults to `2rem`.\n */\n --viewer-annotations-pin-label-min-width: 2rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-width: A CSS length that\n * specifies the maximum width of the label. Defaults to `25rem`.\n */\n --viewer-annotations-pin-label-max-width: 25rem;\n\n /**\n * @prop --viewer-annotations-pin-label-max-height: A CSS length that\n * specifies the maximum height of the label. Defaults to `50rem`.\n */\n --viewer-annotations-pin-label-max-height: 50rem;\n\n overflow: hidden;\n pointer-events: none;\n}\n\n:host([mode='']) .pin-label {\n color: var(--viewer-annotations-pin-label-color);\n background: var(--viewer-annotations-pin-label-background-color);\n}\n\n.pin-label-text {\n font-family: Arial, Helvetica, sans-serif;\n font-size: 0.875rem;\n line-height: 1rem;\n word-break: break-word;\n white-space: pre-wrap;\n}\n\n.pin-label-input-wrapper {\n display: flex;\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n min-width: var(--viewer-annotations-pin-label-min-width);\n max-width: var(--viewer-annotations-pin-label-max-width);\n max-height: var(--viewer-annotations-pin-label-max-height);\n background: var(--viewer-annotations-pin-label-background-color);\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n border-radius: var(--viewer-annotations-pin-label-border-radius);\n}\n\n.pin-label-input-wrapper.focused {\n min-width: var(--viewer-annotations-pin-label-max-width);\n border-color: var(--viewer-annotations-pin-label-focused-border-color);\n}\n\n.pin-input-drag-target {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n\n.pin-label-input {\n resize: none;\n position: relative;\n outline: none;\n border: none;\n word-break: break-word;\n padding: 0 0 0 0;\n background-color: transparent;\n margin: var(--viewer-annotations-pin-label-padding-y)\n var(--viewer-annotations-pin-label-padding-x);\n width: var(--viewer-annotations-pin-label-min-width);\n flex-grow: 1;\n overflow: hidden;\n max-width: calc(\n var(--viewer-annotations-pin-label-max-width) -\n calc(2 * var(--viewer-annotations-pin-label-padding-x))\n );\n}\n\n.pin-label-input.readonly {\n pointer-events: auto;\n color: black;\n cursor: pointer;\n}\n\n.pin-label-hidden {\n position: absolute;\n visibility: hidden;\n pointer-events: none;\n width: auto;\n height: auto;\n box-sizing: border-box;\n border-width: var(--viewer-annotations-pin-label-border-width);\n border-style: var(--viewer-annotations-pin-label-border-style);\n border-color: var(--viewer-annotations-pin-label-border-color);\n margin: var(--viewer-annotations-pin-label-padding-y) 0;\n padding: 0 var(--viewer-annotations-pin-label-padding-x);\n max-width: calc(\n var(--viewer-annotations-pin-label-max-width) -\n calc(2 * var(--viewer-annotations-pin-label-padding-x))\n );\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Point } from '@vertexvis/geometry';\nimport classNames from 'classnames';\n\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { PinController } from '../../lib/pins/controller';\nimport {\n getPinColors,\n isTextPin,\n PinModel,\n TextPin,\n} from '../../lib/pins/model';\nimport { readDOM } from '../../lib/stencil';\nimport {\n translatePointToRelative,\n translatePointToScreen,\n} from '../viewer-pin-tool/utils';\nimport { getComputedStyle } from './utils';\n\n@Component({\n tag: 'vertex-viewer-pin-label',\n styleUrl: 'viewer-pin-label.css',\n shadow: false,\n})\nexport class VertexPinLabel {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: TextPin;\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop()\n public elementBounds?: DOMRect;\n\n /**\n * The current text value of the component. Value is updated on user\n * interaction.\n */\n @Prop({ mutable: true })\n public value = '';\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * @internal\n */\n @Event({ bubbles: true })\n public labelChanged!: EventEmitter<void>;\n\n /**\n * Emitted whenever the label is focused, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelFocused!: EventEmitter<string | undefined>;\n\n /**\n * Emitted whenever the label is blurred, with the ID of the\n * associated pin (or undefined if no pin is provided).\n */\n @Event({ bubbles: true })\n public labelBlurred!: EventEmitter<string | undefined>;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private focused = false;\n\n @State()\n private computedScreenPosition?: Point.Point;\n\n @State()\n private textareaRows = 1;\n\n @State()\n private contentElBounds?: DOMRect;\n\n private relativePointerDownPosition?: Point.Point;\n private pinPointerDownPosition?: Point.Point;\n\n private inputEl?: HTMLTextAreaElement;\n private contentEl?: HTMLDivElement;\n\n private resizeObserver?: ResizeObserver;\n private contentResizeObserver?: ResizeObserver;\n\n /**\n * Gives focus to the component's internal text input.\n */\n @Method()\n public async setFocus(): Promise<void> {\n // HTMLInputElement.focus() doesn't exist in tests.\n if (typeof this.inputEl?.focus === 'function') {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n this.inputEl?.focus();\n }\n }\n\n /**\n * @internal\n * submits the current text, unfocuses the input and emits the blur event to consumers\n */\n @Method()\n public async submit(): Promise<void> {\n this.focused = false;\n this.labelBlurred.emit(this.pin?.id);\n if (this.pin != null) {\n this.pinController?.updatePin({\n ...this.pin,\n label: {\n point: this.pin.label.point,\n text: this.value,\n },\n });\n }\n }\n\n @Watch('focused')\n protected watchFocusChange(): void {\n this.labelChanged.emit();\n\n if (this.focused) {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n }\n\n @Watch('pin')\n protected watchPinChange(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n }\n\n @Watch('elementBounds')\n protected watchElementBoundsChange(): void {\n this.computeScreenPosition();\n }\n\n protected componentWillLoad(): void {\n this.value = this.pin?.label.text ?? '';\n this.computeScreenPosition();\n\n if (this.pinController == null) {\n this.pinController = new PinController(new PinModel());\n }\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.labelChanged.emit();\n });\n\n this.contentResizeObserver = new ResizeObserver(this.computeContentSize);\n\n if (this.hostEl != null) {\n this.resizeObserver.observe(this.hostEl);\n }\n\n if (this.contentEl != null) {\n this.contentResizeObserver.observe(this.contentEl);\n }\n }\n\n protected disconnectedCallback(): void {\n this.resizeObserver?.disconnect();\n this.contentResizeObserver?.disconnect();\n }\n\n protected componentDidRender(): void {\n if (this.focused && this.inputEl != null) {\n this.setFocus();\n }\n }\n\n protected render(): JSX.Element {\n const { primaryColor, accentColor } = getPinColors(this.pin);\n return (\n <Host>\n <div\n class={classNames('pin-label-input-wrapper', {\n focused: this.focused,\n })}\n onPointerDown={this.handlePointerDown}\n style={{\n top: `${this.computedScreenPosition?.y.toString() || 0}px`,\n left: `${this.computedScreenPosition?.x.toString() || 0}px`,\n minWidth: this.computeMinWidth(),\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n borderColor: primaryColor,\n background: accentColor,\n }}\n >\n <textarea\n id={`pin-label-input-${this.pin?.id}`}\n class={classNames('pin-label-input', 'pin-label-text', {\n ['readonly']: !this.focused,\n })}\n disabled={!this.focused}\n ref={(ref) => (this.inputEl = ref)}\n value={this.value}\n rows={this.textareaRows}\n onKeyDown={this.handleInputKeyDown}\n onInput={this.handleTextInput}\n onBlur={this.handleTextBlur}\n aria-label=\"Pin label input\"\n />\n {/* This corrects for a behavior in Firefox where setting the `disabled` attribute to true */}\n {/* prevents any events from propagating. */}\n {!this.focused && (\n <div\n class=\"pin-input-drag-target\"\n onPointerDown={this.handlePointerDown}\n />\n )}\n </div>\n <div\n ref={(el) => (this.contentEl = el)}\n class={classNames('pin-label-text', 'pin-label-hidden')}\n style={{\n maxWidth: this.computeMaxWidth(),\n maxHeight: this.computeMaxHeight(),\n }}\n >\n {this.hiddenContent()}\n </div>\n </Host>\n );\n }\n\n private hiddenContent(): Array<string | HTMLBRElement> {\n // This corrects some inconsistencies in how a newline character\n // is represented in a div. Leveraging `<br>`s results in a more\n // consistent representation of the newlines in a textarea.\n return this.value.includes('\\n')\n ? this.value\n .split('\\n')\n .reduce(\n (res, str) => [...res, str, <br />],\n [] as Array<string | HTMLBRElement>,\n )\n : [this.value];\n }\n\n private computeMinWidth(): string {\n if (this.contentElBounds != null) {\n const expected = `${this.contentElBounds.width + 8}px`;\n\n return `min(${expected}, ${this.computeMaxWidth()})`;\n } else {\n return `var(--viewer-annotations-pin-label-min-width)`;\n }\n }\n\n private computeMaxWidth(): string {\n const expected = `var(--viewer-annotations-pin-label-max-width)`;\n\n return `min(${expected}, ${this.computeRemainingWidth()})`;\n }\n\n private computeMaxHeight(): string {\n const expected = `var(--viewer-annotations-pin-label-max-height)`;\n\n return `min(${expected}, ${this.computeRemainingHeight()})`;\n }\n\n private computeRemainingWidth(): string {\n return `calc(${this.elementBounds?.width.toString() || 0}px - ${\n this.computedScreenPosition?.x.toString() || 0\n }px)`;\n }\n\n private computeRemainingHeight(): string {\n return `calc(${this.elementBounds?.height.toString() || 0}px - ${\n this.computedScreenPosition?.y.toString() || 0\n }px)`;\n }\n\n private computeScreenPosition(): void {\n this.computedScreenPosition =\n isTextPin(this.pin) &&\n this.elementBounds != null &&\n this.pin.label.point != null\n ? translatePointToScreen(this.pin.label.point, this.elementBounds)\n : undefined;\n }\n\n private computeContentSize = (): void => {\n readDOM(() => {\n if (this.contentEl != null) {\n this.contentElBounds = this.contentEl.getBoundingClientRect();\n const computedStyles = getComputedStyle(this.contentEl);\n this.textareaRows = Math.max(\n 1,\n Math.ceil(\n (Number.parseFloat(computedStyles.getPropertyValue('height')) -\n Number.parseFloat(\n computedStyles.getPropertyValue('borderWidth'),\n ) *\n 2) /\n Number.parseFloat(computedStyles.getPropertyValue('lineHeight')),\n ),\n );\n }\n });\n };\n\n private handleInputKeyDown = (event: KeyboardEvent): void => {\n event.stopPropagation();\n if (\n event.key === 'Enter' &&\n (event.ctrlKey || event.metaKey || event.shiftKey)\n ) {\n this.textareaRows += 1;\n this.value += '\\n';\n } else if (event.key === 'Enter') {\n event.preventDefault();\n this.submit();\n }\n };\n\n private handlePointerDown = (event: PointerEvent): void => {\n if (!this.focused) {\n if (this.elementBounds != null) {\n if (event.buttons !== 2) {\n event.preventDefault();\n event.stopPropagation();\n }\n this.relativePointerDownPosition = translatePointToRelative(\n getMouseClientPosition(event, this.elementBounds),\n this.elementBounds,\n );\n this.pinPointerDownPosition = this.pin?.label.point;\n\n window.addEventListener('pointermove', this.handlePointerMove);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n }\n };\n\n private handlePointerMove = (event: PointerEvent): void => {\n if (\n this.elementBounds != null &&\n this.relativePointerDownPosition &&\n this.pinPointerDownPosition != null\n ) {\n // Prevent selection of any text while interacting with the label\n event.preventDefault();\n event.stopPropagation();\n\n const point = getMouseClientPosition(event, this.elementBounds);\n const relative = translatePointToRelative(point, this.elementBounds);\n\n const relativeDelta = Point.subtract(\n relative,\n this.relativePointerDownPosition,\n );\n\n const myUpdatedPin =\n this.pin != null\n ? {\n ...this.pin,\n label: {\n ...this.pin.label,\n point: Point.add(this.pinPointerDownPosition, relativeDelta),\n },\n }\n : undefined;\n\n if (myUpdatedPin) {\n this.pinController?.updatePin(myUpdatedPin);\n this.computeScreenPosition();\n }\n }\n };\n\n private handlePointerUp = (event: PointerEvent): void => {\n if (\n this.pinController?.getToolMode() === 'edit' &&\n this.relativePointerDownPosition != null &&\n this.elementBounds != null\n ) {\n const pointerDownScreen = translatePointToScreen(\n this.relativePointerDownPosition,\n this.elementBounds,\n );\n const distanceBetweenStartAndEndPoint = Point.distance(\n pointerDownScreen,\n getMouseClientPosition(event, this.elementBounds),\n );\n\n if (distanceBetweenStartAndEndPoint <= 2) {\n this.focused = true;\n this.labelFocused.emit(this.pin?.id);\n }\n }\n\n this.relativePointerDownPosition = undefined;\n this.pinPointerDownPosition = undefined;\n\n window.removeEventListener('pointermove', this.handlePointerMove);\n window.removeEventListener('pointerup', this.handlePointerUp);\n };\n\n private handleTextBlur = (): void => {\n this.submit();\n };\n\n private handleTextInput = (event: Event): void => {\n const input = event.target as HTMLInputElement;\n this.value = input.value;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import{a as t,v as e,f as n,p as r,r as s,g as o,l as i,b as c,m as a,e as u,c as l,i as f,j as h}from"./p-2UsvOTHJ.js";import{v as d,p as m,L as p}from"./p-5kcpg4MZ.js";import{m as v,c as w,b as y}from"./p-CDM7zNn0.js";import{g}from"./p-CG9AChtV.js";const b=v.defineMapper((t=>{switch(t){case"perspective":return d.protobuf.stream.CameraType.CAMERA_TYPE_PERSPECTIVE;case"orthographic":return d.protobuf.stream.CameraType.CAMERA_TYPE_ORTHOGRAPHIC;default:return d.protobuf.stream.CameraType.CAMERA_TYPE_INVALID}}),(t=>t));function C(){return v.ifInvalidThrow(b)}const x=v.defineMapper(v.read(v.requiredProp("r"),v.requiredProp("g"),v.requiredProp("b"),v.requiredProp("a")),(([t,e,n,r])=>w.create(t,e,n,r)));const k=v.defineMapper(v.read(v.requiredProp("msb"),v.requiredProp("lsb")),(([t,e])=>y.fromMsbLsb(t,e)));const F=v.defineMapper(v.read(v.requiredProp("seconds"),v.requiredProp("nanos")),(([t,e])=>m({seconds:t,nanos:e})));const M=v.defineMapper(v.read(v.requiredProp("iso")),(([t])=>new Date(t)));const S=v.defineMapper(v.read(v.requiredProp("hex")),(([t])=>t));const E=v.defineMapper(v.read(v.requiredProp("msb"),v.requiredProp("lsb")),(([t,e])=>{const n=BigInt(typeof t==="number"?t:t.toString());const r=BigInt(typeof e==="number"?e:e.toString());return y.fromMsbLsb(n,r)}));const I=v.defineMapper(v.compose((t=>y.toMsbLsb(t)),v.read(v.mapProp("msb",p.fromString),v.mapProp("lsb",p.fromString))),(([t,e])=>({msb:t,lsb:e})));function P(t){"@babel/helpers - typeof";return P="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},P(t)}function j(t){if(t===null||t===true||t===false){return NaN}var e=Number(t);if(isNaN(e)){return e}return e<0?Math.ceil(e):Math.floor(e)}function N(t,e){if(e.length<t){throw new TypeError(t+" argument"+(t>1?"s":"")+" required, but only "+e.length+" present")}}function T(t){N(1,arguments);var e=Object.prototype.toString.call(t);if(t instanceof Date||P(t)==="object"&&e==="[object Date]"){return new Date(t.getTime())}else if(typeof t==="number"||e==="[object Number]"){return new Date(t)}else{if((typeof t==="string"||e==="[object String]")&&typeof console!=="undefined"){console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments");console.warn((new Error).stack)}return new Date(NaN)}}function O(t,e){N(2,arguments);var n=T(t);var r=j(e);if(isNaN(r)){return new Date(NaN)}if(!r){return n}n.setDate(n.getDate()+r);return n}function D(t,e){N(2,arguments);var n=T(t);var r=j(e);if(isNaN(r)){return new Date(NaN)}if(!r){return n}var s=n.getDate();var o=new Date(n.getTime());o.setMonth(n.getMonth()+r+1,0);var i=o.getDate();if(s>=i){return o}else{n.setFullYear(o.getFullYear(),o.getMonth(),s);return n}}function A(t,e){N(2,arguments);if(!e||P(e)!=="object")return new Date(NaN);var n=e.years?j(e.years):0;var r=e.months?j(e.months):0;var s=e.weeks?j(e.weeks):0;var o=e.days?j(e.days):0;var i=e.hours?j(e.hours):0;var c=e.minutes?j(e.minutes):0;var a=e.seconds?j(e.seconds):0;var u=T(t);var l=r||n?D(u,r+n*12):u;var f=o||s?O(l,o+s*7):l;var h=c+i*60;var d=a+h*60;var m=d*1e3;var p=new Date(f.getTime()+m);return p}function V(t,e){N(2,arguments);return T(t).getTime()-T(e).getTime()}function z(t,e){N(2,arguments);var n=T(t);var r=T(e);return n.getTime()>r.getTime()}function B(t,e){N(2,arguments);var n=j(e);return O(t,-n)}function R(t,e){N(2,arguments);var n=j(e);return D(t,-n)}function W(t,e){N(2,arguments);if(!e||P(e)!=="object")return new Date(NaN);var n=e.years?j(e.years):0;var r=e.months?j(e.months):0;var s=e.weeks?j(e.weeks):0;var o=e.days?j(e.days):0;var i=e.hours?j(e.hours):0;var c=e.minutes?j(e.minutes):0;var a=e.seconds?j(e.seconds):0;var u=R(t,r+n*12);var l=B(u,o+s*7);var f=c+i*60;var h=a+f*60;var d=h*1e3;var m=new Date(l.getTime()-d);return m}class ${constructor(t,e,n){this.token=t;this.expiresIn=e;this.expiresAt=n}static create(t,e){const n=A(new Date,{seconds:e});return new $(t,e,n)}hasExpired(){return z(new Date,this.expiresAt)}remainingTimeInMs(t){return V(W(this.expiresAt,{seconds:t}),new Date)}}function _(t){if(G(t)){const n=q(t.lookAt);const r=q(t.position);const s=U(t.up);const o=n&&r&&U(e.subtract(t.lookAt,t.position));const i=t.fovY!=null&&Number.isFinite(t.fovY)&&t.fovY>=1&&t.fovY<=179;return s&&o&&i}else{const e=t;const n=U(e.viewVector);const r=q(e.lookAt);const s=U(e.up);const o=Number.isFinite(e.fovHeight)&&e.fovHeight>0;return n&&r&&s&&o}}function q(t){return t!=null&&e.isValid(t)}function U(t){return q(t)&&!e.isZeroVector(t)}function G(t){return t.position!=null&&t.fovHeight==null}function L(t){const e=t;return e.viewVector!=null&&e.fovHeight!=null}function H(t){if(L(t)){return{...t,position:e.add(t.lookAt,e.negate(t.viewVector))}}else{return{...t,viewVector:e.subtract(t.lookAt,t.position)}}}function Y(t={}){var n,r,s,o;return{position:(n=t.position)!==null&&n!==void 0?n:e.forward(),lookAt:(r=t.lookAt)!==null&&r!==void 0?r:e.origin(),up:(s=t.up)!==null&&s!==void 0?s:e.up(),fovY:(o=t.fovY)!==null&&o!==void 0?o:45}}function J(t={}){var n,r,s,o,i,c;return{viewVector:(n=t.viewVector)!==null&&n!==void 0?n:e.back(),lookAt:(r=t.lookAt)!==null&&r!==void 0?r:e.origin(),up:(s=t.up)!==null&&s!==void 0?s:e.up(),fovHeight:(o=t.fovHeight)!==null&&o!==void 0?o:1,rotationPoint:(c=(i=t.rotationPoint)!==null&&i!==void 0?i:t.lookAt)!==null&&c!==void 0?c:e.origin()}}function Q(r,s){var o;const i=e.subtract(r.lookAt,r.position);const c=n.create(s);const a=c.radius/e.magnitude(i);return{viewVector:e.scale(a,i),up:r.up,lookAt:r.lookAt,fovHeight:2*e.magnitude(i)*Math.tan(t.toRadians(((o=r.fovY)!==null&&o!==void 0?o:45)/2))}}function Z(n,r=45){const s=n.fovHeight/(2*Math.tan(t.toRadians(r/2)));const o=e.magnitude(n.viewVector);const i=s/o;return{position:e.add(n.lookAt,e.negate(e.scale(i,n.viewVector))),up:n.up,lookAt:n.lookAt,fovY:r}}function K(t){if(L(t)){return{orthographic:{viewVector:{...t.viewVector},lookAt:{...t.lookAt},up:{...t.up},fovHeight:t.fovHeight}}}else if(G(t)){return{perspective:{position:{...t.position},lookAt:{...t.lookAt},up:{...t.up},fovY:t.fovY?{value:t.fovY}:null},position:{...t.position},lookAt:{...t.lookAt},up:{...t.up}}}else{return{...t}}}var X=Object.freeze({__proto__:null,createOrthographic:J,createPerspective:Y,isOrthographicFrameCamera:L,isPerspectiveFrameCamera:G,isValidFrameCamera:_,toOrthographic:Q,toPerspective:Z,toProtobuf:K,withPositionAndViewVector:H});function tt(t,e){return L(e)?nt(t):et(t,e)}function et(t,r){const s=n.create(t);const o=s.epsilon*100;const i=e.dot(e.subtract(s.center,r.position),e.normalize(e.subtract(r.lookAt,r.position)));const c=Math.max(s.radius,o);let a=c+i<o?c*3:c+i;let u=a-c*2<o?Math.min(o,a):a-c*2;if(a-u<o){u=Math.max(u,o);a+=u+o}else if(u/a<1e-4){u=a*1e-4}if(u>a-c*2){if(u>1e3+o){a-=u-1e3;u=1e3}}return{near:u,far:a}}function nt(t,e){const r=n.create(t);const s=r.epsilon*100;const o=Math.max(r.radius,s);return{near:-o,far:o}}function rt(t={}){return{sectionPlanes:t.sectionPlanes||[],highlightColor:t.highlightColor,lineWidth:t.lineWidth}}var st=Object.freeze({__proto__:null,create:rt});function ot(t={}){return{modelViewId:t.modelViewId,sceneItemId:t.sceneItemId}}function it(t={}){return{visibleSummary:t.visibleSummary,selectedVisibleSummary:t.selectedVisibleSummary}}function ct(t,e){return at(t.scene.sceneViewSummary)?t.copy({scene:t.scene.copy({sceneViewSummary:e===null||e===void 0?void 0:e.scene.sceneViewSummary})}):t}function at(t){return t.visibleSummary==null}class ut{constructor(t,e,n){this.camera=t;this.imageAttr=e;this.pixels=n}static fromPng(t,e,n){if(t.data instanceof Uint16Array){return new ut(e,n,t.data)}else{throw new Error("Expected depth PNG to have depth of 16-bit")}}getDepthAtPoint(t,e){const{near:n,far:r}=this.camera;const s=this.camera.isPerspective();const o=this.getNormalizedDepthAtPoint(t,e);if(s){return o*(r-n)+n}else{return o*(r-n)}}getMaxDepthOfGeometry(){const{near:t,far:e}=this.camera;const n=this.camera.isPerspective();if(n){return e}else{return e-t}}getNormalizedDepthAtPoint(t,e){const{width:n,height:s}=this.imageAttr.imageRect;const o=r.subtract(t,this.imageAttr.imageRect);const i=1/this.imageAttr.imageScale;const c=r.scale(o,i,i);if(c.x>=0&&c.y>=0&&c.x<n&&c.y<s){const t=Math.floor(c.x)+Math.floor(c.y)*n;const r=this.pixels[t];const s=r===ut.MAX_DEPTH_VALUE?e!==null&&e!==void 0?e:r:r;return(s!==null&&s!==void 0?s:ut.MAX_DEPTH_VALUE)/ut.MAX_DEPTH_VALUE}else{return e!==null&&e!==void 0?e:1}}hitTest(t){return this.getNormalizedDepthAtPoint(t)<1}getWorldPoint(t,n,r){const o=this.getDepthAtPoint(t,r);const i=this.camera.isPerspective();if(i){const{position:t,viewVector:r,far:i}=this.camera;const c=s.at(n,i);const a=e.subtract(c,t);const u=e.dot(r,a)/(e.magnitude(r)*e.magnitude(a));return s.at(n,o/u)}else{return s.at(n,o)}}distanceToPoint(t){const{position:n,direction:r}=this.camera;const s=e.subtract(t,n);return Math.abs(e.dot(s,r))}depthOfClosestGeometry(t,e){const{projectionViewMatrix:n}=this.camera;const r=e.transformWorldToViewport(t,n);const s=e.transformPointToFrame(r,this);return this.getDepthAtPoint(s)}isOccluded(t,e){const n=this.distanceToPoint(t);const r=this.depthOfClosestGeometry(t,e);const s=Math.abs(.02*n);const o=Math.abs(r-n);return n>r&&o>s}isDetached(t,e){const n=this.distanceToPoint(t);const r=this.depthOfClosestGeometry(t,e);const s=r-n;const o=.02*n;const i=s<o;const c=this.getMaxDepthOfGeometry();const a=n>c;const u=!i||a;return u}}ut.MAX_DEPTH_VALUE=2**16-1;class lt{constructor(t){this.scale=t}convertTo(t){return t*this.scale}convertFrom(t){return t/this.scale}}class ft extends lt{constructor(){super(1)}}class ht extends lt{constructor(t=1){super(1/Math.pow(10,t))}}class dt extends lt{constructor(t=1){super(1/Math.pow(1e3,t))}}class mt extends lt{constructor(t=1){super(1/Math.pow(25.4,t))}}class pt extends lt{constructor(t=1){super(1/Math.pow(25.4*12,t))}}class vt extends lt{constructor(t=1){super(1/Math.pow(25.4*12*3,t))}}class wt{constructor(t){this.unitType=t;this.unit=wt.units[t]}convertWorldValueToReal(t){return this.unit.converter.convertTo(t)}convertRealValueToWorld(t){return this.unit.converter.convertFrom(t)}convertWorldPointToReal(t){const e=this.unit.converter.convertTo(t.x);const n=this.unit.converter.convertTo(t.y);const r=this.unit.converter.convertTo(t.z);return{x:e,y:n,z:r}}convertRealPointToWorld(t){const e=this.unit.converter.convertFrom(t.x);const n=this.unit.converter.convertFrom(t.y);const r=this.unit.converter.convertFrom(t.z);return{x:e,y:n,z:r}}}wt.units={millimeters:{name:"Millimeters",abbreviatedName:"mm",converter:new ft},centimeters:{name:"Centimeters",abbreviatedName:"cm",converter:new ht},meters:{name:"Meters",abbreviatedName:"m",converter:new dt},inches:{name:"Inches",abbreviatedName:"in",converter:new mt},feet:{name:"Feet",abbreviatedName:"ft",converter:new pt},yards:{name:"Yards",abbreviatedName:"yd",converter:new vt}};class yt{convertTo(e){return t.toDegrees(e)}convertFrom(e){return t.toRadians(e)}}class gt{constructor(t){this.unitType=t;this.unit=gt.units[t]}convertTo(t){return this.unit.converter.convertTo(t)}convertFrom(t){return this.unit.converter.convertFrom(t)}}gt.units={radians:{name:"Radians",abbreviatedName:"rad",converter:new lt(1)},degrees:{name:"Degrees",abbreviatedName:"deg",converter:new yt}};class bt{constructor(t){this.unitType=t;this.unit=bt.units[t]}convertWorldValueToReal(t){return this.unit.converter.convertTo(t)}convertRealValueToWorld(t){return this.unit.converter.convertFrom(t)}}bt.units={millimeters:{name:"Square Millimeters",abbreviatedName:"mm²",converter:new ft},centimeters:{name:"Square Centimeters",abbreviatedName:"cm²",converter:new ht(2)},meters:{name:"Square Meters",abbreviatedName:"m²",converter:new dt(2)},inches:{name:"Square Inches",abbreviatedName:"in²",converter:new mt(2)},feet:{name:"Square Feet",abbreviatedName:"ft²",converter:new pt(2)},yards:{name:"Square Yards",abbreviatedName:"yd²",converter:new vt(2)}};var Ct;(function(t){t[t["CROSS_SECTION"]=255]="CROSS_SECTION";t[t["PRECISE_EDGE"]=224]="PRECISE_EDGE";t[t["PRECISE_SURFACE"]=192]="PRECISE_SURFACE";t[t["IMPRECISE_EDGE"]=160]="IMPRECISE_EDGE";t[t["IMPRECISE_SURFACE"]=128]="IMPRECISE_SURFACE";t[t["GENERIC_GEOMETRY"]=96]="GENERIC_GEOMETRY";t[t["NO_GEOMETRY"]=0]="NO_GEOMETRY"})(Ct||(Ct={}));class xt{constructor(t,e){this.pixels=t;this.imageAttr=e}static fromPng(t,e){if(!(t.data instanceof Uint8Array)){throw new Error("Cannot create FeatureMap. Expected decoded PNG to be a Uint8Array.")}else if(t.channels!==4){throw new Error("Cannot create FeatureMap. Missing alpha channel.")}else{return new xt(t.data,{...e,imageRect:o.fromPointAndDimensions(e.imageRect,t)})}}getEntityType(t){const e=this.getColor(t);if((e===null||e===void 0?void 0:e.a)===Ct.CROSS_SECTION){return Ct.CROSS_SECTION}else if((e===null||e===void 0?void 0:e.a)===Ct.GENERIC_GEOMETRY){return Ct.GENERIC_GEOMETRY}else if((e===null||e===void 0?void 0:e.a)===Ct.IMPRECISE_EDGE){return Ct.IMPRECISE_EDGE}else if((e===null||e===void 0?void 0:e.a)===Ct.IMPRECISE_SURFACE){return Ct.IMPRECISE_SURFACE}else if((e===null||e===void 0?void 0:e.a)===Ct.PRECISE_EDGE){return Ct.PRECISE_EDGE}else if((e===null||e===void 0?void 0:e.a)===Ct.PRECISE_SURFACE){return Ct.PRECISE_SURFACE}else{return Ct.NO_GEOMETRY}}getColor(t){const{width:e,height:n}=this.imageAttr.imageRect;const s=r.subtract(t,this.imageAttr.imageRect);const o=1/this.imageAttr.imageScale;const i=r.scale(s,o,o);if(i.x>=0&&i.y>=0&&i.x<e&&i.y<n){const t=Math.floor(i.x)*4+Math.floor(i.y)*4*e;const n=this.pixels[t];const r=this.pixels[t+1];const s=this.pixels[t+2];const o=this.pixels[t+3];return w.create(n,r,s,o)}else return undefined}}const kt={deserialize(t){return Object.assign(Error(t.message),{name:t.name,stack:t.stack})},serialize(t){return{__error_marker:"$$error",message:t.message,name:t.name,stack:t.stack}}};const Ft=t=>t&&typeof t==="object"&&"__error_marker"in t&&t.__error_marker==="$$error";const Mt={deserialize(t){if(Ft(t)){return kt.deserialize(t)}else{return t}},serialize(t){if(t instanceof Error){return kt.serialize(t)}else{return t}}};let St=Mt;function Et(t){return St.deserialize(t)}function It(t){return St.serialize(t)}class Pt extends Error{constructor(t,e){super(t);this.name="ThreadCloneError";this.cause=e;Object.setPrototypeOf(this,Pt.prototype)}}function jt(t){return Boolean(t&&typeof t==="object"&&t.name==="DataCloneError")}let Nt;function Tt(){if(!Nt){Nt=Ot()}return Nt}function Ot(){try{throw new Error}catch(t){const e=(""+t.stack).match(/(https?|file|ftp|chrome-extension|moz-extension):\/\/[^)\n]+/g);if(e){return Dt(e[0])}}return"/"}function Dt(t){return(""+t).replace(/^((?:https?|file|ftp|chrome-extension|moz-extension):\/\/.+)?\/[^/]+(?:\?.*)?$/,"$1")+"/"}const At=typeof navigator!=="undefined"&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:4;const Vt=t=>/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(t);function zt(t){const e=new Blob([t],{type:"application/javascript"});return URL.createObjectURL(e)}function Bt(){if(typeof Worker==="undefined"){return class t{constructor(){throw Error("No web worker implementation available. You might have tried to spawn a worker within a worker in a browser that doesn't support workers in workers.")}}}class t extends Worker{constructor(t,e){var n,r;if(typeof t==="string"&&e&&e._baseURL){t=new URL(t,e._baseURL)}else if(typeof t==="string"&&!Vt(t)&&Tt().match(/^file:\/\//i)){t=new URL(t,Tt().replace(/\/[^/]+$/,"/"));if((n=e===null||e===void 0?void 0:e.CORSWorkaround)!==null&&n!==void 0?n:true){t=zt(`importScripts(${JSON.stringify(t)});`)}}if(typeof t==="string"&&Vt(t)){if((r=e===null||e===void 0?void 0:e.CORSWorkaround)!==null&&r!==void 0?r:true){t=zt(`importScripts(${JSON.stringify(t)});`)}}super(t,e)}}class e extends t{constructor(t,e){const n=window.URL.createObjectURL(t);super(n,e)}static fromText(t,n){const r=new window.Blob([t],{type:"text/javascript"});return new e(r,n)}}return{blob:e,default:t}}let Rt;function Wt(){if(!Rt){Rt=Bt()}return Rt}var $t={exports:{}};var _t;var qt;function Ut(){if(qt)return _t;qt=1;var t=1e3;var e=t*60;var n=e*60;var r=n*24;var s=r*7;var o=r*365.25;_t=function(t,e){e=e||{};var n=typeof t;if(n==="string"&&t.length>0){return i(t)}else if(n==="number"&&isFinite(t)){return e.long?a(t):c(t)}throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function i(i){i=String(i);if(i.length>100){return}var c=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(i);if(!c){return}var a=parseFloat(c[1]);var u=(c[2]||"ms").toLowerCase();switch(u){case"years":case"year":case"yrs":case"yr":case"y":return a*o;case"weeks":case"week":case"w":return a*s;case"days":case"day":case"d":return a*r;case"hours":case"hour":case"hrs":case"hr":case"h":return a*n;case"minutes":case"minute":case"mins":case"min":case"m":return a*e;case"seconds":case"second":case"secs":case"sec":case"s":return a*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return a;default:return undefined}}function c(s){var o=Math.abs(s);if(o>=r){return Math.round(s/r)+"d"}if(o>=n){return Math.round(s/n)+"h"}if(o>=e){return Math.round(s/e)+"m"}if(o>=t){return Math.round(s/t)+"s"}return s+"ms"}function a(s){var o=Math.abs(s);if(o>=r){return u(s,o,r,"day")}if(o>=n){return u(s,o,n,"hour")}if(o>=e){return u(s,o,e,"minute")}if(o>=t){return u(s,o,t,"second")}return s+" ms"}function u(t,e,n,r){var s=e>=n*1.5;return Math.round(t/n)+" "+r+(s?"s":"")}return _t}var Gt;var Lt;function Ht(){if(Lt)return Gt;Lt=1;function t(t){n.debug=n;n.default=n;n.coerce=a;n.disable=i;n.enable=s;n.enabled=c;n.humanize=Ut();n.destroy=u;Object.keys(t).forEach((e=>{n[e]=t[e]}));n.names=[];n.skips=[];n.formatters={};function e(t){let e=0;for(let n=0;n<t.length;n++){e=(e<<5)-e+t.charCodeAt(n);e|=0}return n.colors[Math.abs(e)%n.colors.length]}n.selectColor=e;function n(t){let e;let s=null;let o;let i;function c(...t){if(!c.enabled){return}const r=c;const s=Number(new Date);const o=s-(e||s);r.diff=o;r.prev=e;r.curr=s;e=s;t[0]=n.coerce(t[0]);if(typeof t[0]!=="string"){t.unshift("%O")}let i=0;t[0]=t[0].replace(/%([a-zA-Z%])/g,((e,s)=>{if(e==="%%"){return"%"}i++;const o=n.formatters[s];if(typeof o==="function"){const n=t[i];e=o.call(r,n);t.splice(i,1);i--}return e}));n.formatArgs.call(r,t);const a=r.log||n.log;a.apply(r,t)}c.namespace=t;c.useColors=n.useColors();c.color=n.selectColor(t);c.extend=r;c.destroy=n.destroy;Object.defineProperty(c,"enabled",{enumerable:true,configurable:false,get:()=>{if(s!==null){return s}if(o!==n.namespaces){o=n.namespaces;i=n.enabled(t)}return i},set:t=>{s=t}});if(typeof n.init==="function"){n.init(c)}return c}function r(t,e){const r=n(this.namespace+(typeof e==="undefined"?":":e)+t);r.log=this.log;return r}function s(t){n.save(t);n.namespaces=t;n.names=[];n.skips=[];const e=(typeof t==="string"?t:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(const t of e){if(t[0]==="-"){n.skips.push(t.slice(1))}else{n.names.push(t)}}}function o(t,e){let n=0;let r=0;let s=-1;let o=0;while(n<t.length){if(r<e.length&&(e[r]===t[n]||e[r]==="*")){if(e[r]==="*"){s=r;o=n;r++}else{n++;r++}}else if(s!==-1){r=s+1;o++;n=o}else{return false}}while(r<e.length&&e[r]==="*"){r++}return r===e.length}function i(){const t=[...n.names,...n.skips.map((t=>"-"+t))].join(",");n.enable("");return t}function c(t){for(const e of n.skips){if(o(t,e)){return false}}for(const e of n.names){if(o(t,e)){return true}}return false}function a(t){if(t instanceof Error){return t.stack||t.message}return t}function u(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}n.enable(n.load());return n}Gt=t;return Gt}var Yt;function Jt(){if(Yt)return $t.exports;Yt=1;(function(t,e){e.formatArgs=r;e.save=s;e.load=o;e.useColors=n;e.storage=i();e.destroy=(()=>{let t=false;return()=>{if(!t){t=true;console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}}})();e.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function n(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}let t;return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&(t=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(t[1],10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function r(e){e[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+e[0]+(this.useColors?"%c ":" ")+"+"+t.exports.humanize(this.diff);if(!this.useColors){return}const n="color: "+this.color;e.splice(1,0,n,"color: inherit");let r=0;let s=0;e[0].replace(/%[a-zA-Z%]/g,(t=>{if(t==="%%"){return}r++;if(t==="%c"){s=r}}));e.splice(s,0,n)}e.log=console.debug||console.log||(()=>{});function s(t){try{if(t){e.storage.setItem("debug",t)}else{e.storage.removeItem("debug")}}catch(t){}}function o(){let t;try{t=e.storage.getItem("debug")||e.storage.getItem("DEBUG")}catch(t){}if(!t&&typeof process!=="undefined"&&"env"in process){t=process.env.DEBUG}return t}function i(){try{return localStorage}catch(t){}}t.exports=Ht()(e);const{formatters:c}=t.exports;c.j=function(t){try{return JSON.stringify(t)}catch(t){return"[UnexpectedJSONParseError]: "+t.message}}})($t,$t.exports);return $t.exports}var Qt=Jt();var Zt=g(Qt);const Kt=()=>typeof Symbol==="function";const Xt=t=>Kt()&&Boolean(Symbol[t]);const te=t=>Xt(t)?Symbol[t]:"@@"+t;if(!Xt("asyncIterator")){Symbol.asyncIterator=Symbol.asyncIterator||Symbol.for("Symbol.asyncIterator")}const ee=te("iterator");const ne=te("observable");const re=te("species");function se(t,e){const n=t[e];if(n==null){return undefined}if(typeof n!=="function"){throw new TypeError(n+" is not a function")}return n}function oe(t){let e=t.constructor;if(e!==undefined){e=e[re];if(e===null){e=undefined}}return e!==undefined?e:ve}function ie(t){return t instanceof ve}function ce(t){if(ce.log){ce.log(t)}else{setTimeout((()=>{throw t}),0)}}function ae(t){Promise.resolve().then((()=>{try{t()}catch(t){ce(t)}}))}function ue(t){const e=t._cleanup;if(e===undefined){return}t._cleanup=undefined;if(!e){return}try{if(typeof e==="function"){e()}else{const t=se(e,"unsubscribe");if(t){t.call(e)}}}catch(t){ce(t)}}function le(t){t._observer=undefined;t._queue=undefined;t._state="closed"}function fe(t){const e=t._queue;if(!e){return}t._queue=undefined;t._state="ready";for(const n of e){he(t,n.type,n.value);if(t._state==="closed"){break}}}function he(t,e,n){t._state="running";const r=t._observer;try{const s=r?se(r,e):undefined;switch(e){case"next":if(s)s.call(r,n);break;case"error":le(t);if(s)s.call(r,n);else throw n;break;case"complete":le(t);if(s)s.call(r);break}}catch(t){ce(t)}if(t._state==="closed"){ue(t)}else if(t._state==="running"){t._state="ready"}}function de(t,e,n){if(t._state==="closed"){return}if(t._state==="buffering"){t._queue=t._queue||[];t._queue.push({type:e,value:n});return}if(t._state!=="ready"){t._state="buffering";t._queue=[{type:e,value:n}];ae((()=>fe(t)));return}he(t,e,n)}class me{constructor(t,e){this._cleanup=undefined;this._observer=t;this._queue=undefined;this._state="initializing";const n=new pe(this);try{this._cleanup=e.call(undefined,n)}catch(t){n.error(t)}if(this._state==="initializing"){this._state="ready"}}get closed(){return this._state==="closed"}unsubscribe(){if(this._state!=="closed"){le(this);ue(this)}}}class pe{constructor(t){this._subscription=t}get closed(){return this._subscription._state==="closed"}next(t){de(this._subscription,"next",t)}error(t){de(this._subscription,"error",t)}complete(){de(this._subscription,"complete")}}class ve{constructor(t){if(!(this instanceof ve)){throw new TypeError("Observable cannot be called as a function")}if(typeof t!=="function"){throw new TypeError("Observable initializer must be a function")}this._subscriber=t}subscribe(t,e,n){if(typeof t!=="object"||t===null){t={next:t,error:e,complete:n}}return new me(t,this._subscriber)}pipe(t,...e){let n=this;for(const r of[t,...e]){n=r(n)}return n}tap(t,e,n){const r=typeof t!=="object"||t===null?{next:t,error:e,complete:n}:t;return new ve((t=>this.subscribe({next(e){r.next&&r.next(e);t.next(e)},error(e){r.error&&r.error(e);t.error(e)},complete(){r.complete&&r.complete();t.complete()},start(t){r.start&&r.start(t)}})))}forEach(t){return new Promise(((e,n)=>{if(typeof t!=="function"){n(new TypeError(t+" is not a function"));return}function r(){s.unsubscribe();e(undefined)}const s=this.subscribe({next(e){try{t(e,r)}catch(t){n(t);s.unsubscribe()}},error(t){n(t)},complete(){e(undefined)}})}))}map(t){if(typeof t!=="function"){throw new TypeError(t+" is not a function")}const e=oe(this);return new e((e=>this.subscribe({next(n){let r=n;try{r=t(n)}catch(t){return e.error(t)}e.next(r)},error(t){e.error(t)},complete(){e.complete()}})))}filter(t){if(typeof t!=="function"){throw new TypeError(t+" is not a function")}const e=oe(this);return new e((e=>this.subscribe({next(n){try{if(!t(n))return}catch(t){return e.error(t)}e.next(n)},error(t){e.error(t)},complete(){e.complete()}})))}reduce(t,e){if(typeof t!=="function"){throw new TypeError(t+" is not a function")}const n=oe(this);const r=arguments.length>1;let s=false;let o=e;return new n((e=>this.subscribe({next(n){const i=!s;s=true;if(!i||r){try{o=t(o,n)}catch(t){return e.error(t)}}else{o=n}},error(t){e.error(t)},complete(){if(!s&&!r){return e.error(new TypeError("Cannot reduce an empty sequence"))}e.next(o);e.complete()}})))}concat(...t){const e=oe(this);return new e((n=>{let r;let s=0;function o(i){r=i.subscribe({next(t){n.next(t)},error(t){n.error(t)},complete(){if(s===t.length){r=undefined;n.complete()}else{o(e.from(t[s++]))}}})}o(this);return()=>{if(r){r.unsubscribe();r=undefined}}}))}flatMap(t){if(typeof t!=="function"){throw new TypeError(t+" is not a function")}const e=oe(this);return new e((n=>{const r=[];const s=this.subscribe({next(s){let i;if(t){try{i=t(s)}catch(t){return n.error(t)}}else{i=s}const c=e.from(i).subscribe({next(t){n.next(t)},error(t){n.error(t)},complete(){const t=r.indexOf(c);if(t>=0)r.splice(t,1);o()}});r.push(c)},error(t){n.error(t)},complete(){o()}});function o(){if(s.closed&&r.length===0){n.complete()}}return()=>{r.forEach((t=>t.unsubscribe()));s.unsubscribe()}}))}[ne](){return this}static from(t){const e=typeof this==="function"?this:ve;if(t==null){throw new TypeError(t+" is not an object")}const n=se(t,ne);if(n){const r=n.call(t);if(Object(r)!==r){throw new TypeError(r+" is not an object")}if(ie(r)&&r.constructor===e){return r}return new e((t=>r.subscribe(t)))}if(Xt("iterator")){const n=se(t,ee);if(n){return new e((e=>{ae((()=>{if(e.closed)return;for(const r of n.call(t)){e.next(r);if(e.closed)return}e.complete()}))}))}}if(Array.isArray(t)){return new e((e=>{ae((()=>{if(e.closed)return;for(const n of t){e.next(n);if(e.closed)return}e.complete()}))}))}throw new TypeError(t+" is not observable")}static of(...t){const e=typeof this==="function"?this:ve;return new e((e=>{ae((()=>{if(e.closed)return;for(const n of t){e.next(n);if(e.closed)return}e.complete()}))}))}static get[re](){return this}}if(Kt()){Object.defineProperty(ve,Symbol("extensions"),{value:{symbol:ne,hostReportError:ce},configurable:true})}function we(t){if(typeof t==="function"){t()}else if(t&&typeof t.unsubscribe==="function"){t.unsubscribe()}}class ye extends ve{constructor(){super((t=>{this._observers.add(t);return()=>this._observers.delete(t)}));this._observers=new Set}next(t){for(const e of this._observers){e.next(t)}}error(t){for(const e of this._observers){e.error(t)}}complete(){for(const t of this._observers){t.complete()}}}function ge(t){const e=new ye;let n;let r=0;return new ve((s=>{if(!n){n=t.subscribe(e)}const o=e.subscribe(s);r++;return()=>{r--;o.unsubscribe();if(r===0){we(n);n=undefined}}}))}function be(t){return Promise.all(t.map((t=>{const e=t=>({status:"fulfilled",value:t});const n=t=>({status:"rejected",reason:t});const r=Promise.resolve(t);try{return r.then(e,n)}catch(t){return Promise.reject(t)}})))}var Ce;(function(t){t["initialized"]="initialized";t["taskCanceled"]="taskCanceled";t["taskCompleted"]="taskCompleted";t["taskFailed"]="taskFailed";t["taskQueued"]="taskQueued";t["taskQueueDrained"]="taskQueueDrained";t["taskStart"]="taskStart";t["terminated"]="terminated"})(Ce||(Ce={}));const xe=Symbol("thread.errors");const ke=Symbol("thread.events");const Fe=Symbol("thread.terminate");const Me=Symbol("thread.transferable");const Se=Symbol("thread.worker");function Ee(t){throw Error(t)}const Ie={errors(t){return t[xe]||Ee("Error observable not found. Make sure to pass a thread instance as returned by the spawn() promise.")},events(t){return t[ke]||Ee("Events observable not found. Make sure to pass a thread instance as returned by the spawn() promise.")},terminate(t){return t[Fe]()}};var Pe=undefined&&undefined.__awaiter||function(t,e,n,r){function s(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,o){function i(t){try{a(r.next(t))}catch(t){o(t)}}function c(t){try{a(r["throw"](t))}catch(t){o(t)}}function a(t){t.done?n(t.value):s(t.value).then(i,c)}a((r=r.apply(t,e||[])).next())}))};let je=1;function Ne(t){const e=[];for(let n=0;n<t;n++){e.push(n)}return e}function Te(t){return new Promise((e=>setTimeout(e,t)))}function Oe(t,e){return t.reduce(((t,n)=>[...t,...e(n)]),[])}function De(t){return t.replace(/\W/g," ").trim().replace(/\s+/g,"-")}function Ae(t,e){return Ne(e).map((()=>({init:t(),runningTasks:[]})))}class Ve{constructor(t,e){this.eventSubject=new ye;this.initErrors=[];this.isClosing=false;this.nextTaskID=1;this.taskQueue=[];const n=typeof e==="number"?{size:e}:e||{};const{size:r=At}=n;this.debug=Zt(`threads:pool:${De(n.name||String(je++))}`);this.options=n;this.workers=Ae(t,r);this.eventObservable=ge(ve.from(this.eventSubject));Promise.all(this.workers.map((t=>t.init))).then((()=>this.eventSubject.next({type:Ce.initialized,size:this.workers.length})),(t=>{this.debug("Error while initializing pool worker:",t);this.eventSubject.error(t);this.initErrors.push(t)}))}findIdlingWorker(){const{concurrency:t=1}=this.options;return this.workers.find((e=>e.runningTasks.length<t))}runPoolTask(t,e){return Pe(this,void 0,void 0,(function*(){const n=this.workers.indexOf(t)+1;this.debug(`Running task #${e.id} on worker #${n}...`);this.eventSubject.next({type:Ce.taskStart,taskID:e.id,workerID:n});try{const r=yield e.run(yield t.init);this.debug(`Task #${e.id} completed successfully`);this.eventSubject.next({type:Ce.taskCompleted,returnValue:r,taskID:e.id,workerID:n})}catch(t){this.debug(`Task #${e.id} failed`);this.eventSubject.next({type:Ce.taskFailed,taskID:e.id,error:t,workerID:n})}}))}run(t,e){return Pe(this,void 0,void 0,(function*(){const n=(()=>Pe(this,void 0,void 0,(function*(){const r=()=>{t.runningTasks=t.runningTasks.filter((t=>t!==n))};yield Te(0);try{yield this.runPoolTask(t,e)}finally{r();if(!this.isClosing){this.scheduleWork()}}})))();t.runningTasks.push(n)}))}scheduleWork(){this.debug(`Attempt de-queueing a task in order to run it...`);const t=this.findIdlingWorker();if(!t)return;const e=this.taskQueue.shift();if(!e){this.debug(`Task queue is empty`);this.eventSubject.next({type:Ce.taskQueueDrained});return}this.run(t,e)}taskCompletion(t){return new Promise(((e,n)=>{const r=this.events().subscribe((s=>{if(s.type===Ce.taskCompleted&&s.taskID===t){r.unsubscribe();e(s.returnValue)}else if(s.type===Ce.taskFailed&&s.taskID===t){r.unsubscribe();n(s.error)}else if(s.type===Ce.taskCanceled&&s.taskID===t){r.unsubscribe();n(Error("Task has been canceled."))}else if(s.type===Ce.terminated){r.unsubscribe();n(Error("Pool has been terminated before task was run."))}}))}))}settled(){return Pe(this,arguments,void 0,(function*(t=false){const e=()=>Oe(this.workers,(t=>t.runningTasks));const n=[];const r=this.eventObservable.subscribe((t=>{if(t.type===Ce.taskFailed){n.push(t.error)}}));if(this.initErrors.length>0){r.unsubscribe();return Promise.reject(this.initErrors[0])}if(t&&this.taskQueue.length===0){yield be(e());r.unsubscribe();return n}yield new Promise(((t,e)=>{const n=this.eventObservable.subscribe({next(e){if(e.type===Ce.taskQueueDrained||e.type===Ce.terminated){n.unsubscribe();t(void 0)}},complete(){n.unsubscribe();t(void 0)},error:e})}));yield be(e());r.unsubscribe();return n}))}completed(){return Pe(this,arguments,void 0,(function*(t=false){const e=this.settled(t);const n=new Promise(((t,n)=>{const r=this.eventObservable.subscribe({next(s){if(s.type===Ce.taskQueueDrained||s.type===Ce.terminated){r.unsubscribe();t(e)}else if(s.type===Ce.taskFailed){r.unsubscribe();n(s.error)}},complete(){r.unsubscribe();t(e)},error:n})}));const r=yield Promise.race([e,n]);if(r.length>0){throw r[0]}}))}events(){return this.eventObservable}queue(t){const{maxQueuedJobs:e=Infinity}=this.options;if(this.isClosing){throw Error(`Cannot schedule pool tasks after terminate() has been called.`)}if(this.initErrors.length>0){throw this.initErrors[0]}if(this.taskQueue.length>=e){throw Error("Maximum number of pool tasks queued. Refusing to queue another one.\n"+"This usually happens for one of two reasons: We are either at peak "+"workload right now or some tasks just won't finish, thus blocking the pool.")}const n=this.nextTaskID++;const r=this.taskCompletion(n);r.catch((t=>{this.debug(`Task #${n} errored:`,t)}));const s={id:n,run:t,cancel:()=>{if(this.taskQueue.indexOf(s)===-1)return;this.taskQueue=this.taskQueue.filter((t=>t!==s));this.eventSubject.next({type:Ce.taskCanceled,taskID:s.id})},then:r.then.bind(r)};this.debug(`Queueing task #${s.id}...`);this.taskQueue.push(s);this.eventSubject.next({type:Ce.taskQueued,taskID:s.id});this.scheduleWork();return s}terminate(t){return Pe(this,void 0,void 0,(function*(){this.isClosing=true;if(!t){yield this.completed(true)}this.eventSubject.next({type:Ce.terminated,remainingQueue:[...this.taskQueue]});this.eventSubject.complete();yield Promise.all(this.workers.map((t=>Pe(this,void 0,void 0,(function*(){try{yield Ie.terminate(yield t.init)}catch(t){this.debug("Worker did not initialize; nothing to terminate:",t)}})))))}))}}Ve.EventType=Ce;function ze(t,e){return new Ve(t,e)}ze.EventType=Ce;const Be=ze;const Re=()=>undefined;function We(){let t=false;let e;let n=Re;const r=new Promise((r=>{if(t){r(e)}else{n=r}}));const s=r=>{t=true;e=r;n(e)};return[r,s]}var $e;(function(t){t["internalError"]="internalError";t["message"]="message";t["termination"]="termination"})($e||($e={}));var _e;const qe=()=>undefined;const Ue=t=>t;const Ge=t=>Promise.resolve().then(t);function Le(t){throw t}function He(t){return t&&typeof t.then==="function"}class Ye extends ve{constructor(t){super((e=>{const n=this;const r=Object.assign(Object.assign({},e),{complete(){e.complete();n.onCompletion()},error(t){e.error(t);n.onError(t)},next(t){e.next(t);n.onNext(t)}});try{this.initHasRun=true;return t(r)}catch(t){r.error(t)}}));this.initHasRun=false;this.fulfillmentCallbacks=[];this.rejectionCallbacks=[];this.firstValueSet=false;this.state="pending";this[_e]="[object ObservablePromise]"}onNext(t){if(!this.firstValueSet){this.firstValue=t;this.firstValueSet=true}}onError(t){this.state="rejected";this.rejection=t;for(const e of this.rejectionCallbacks){Ge((()=>e(t)))}}onCompletion(){this.state="fulfilled";for(const t of this.fulfillmentCallbacks){Ge((()=>t(this.firstValue)))}}then(t,e){const n=t||Ue;const r=e||Le;let s=false;return new Promise(((t,e)=>{const o=n=>{if(s)return;s=true;try{t(r(n))}catch(t){e(t)}};const i=e=>{try{t(n(e))}catch(t){o(t)}};if(!this.initHasRun){this.subscribe({error:o})}if(this.state==="fulfilled"){return t(n(this.firstValue))}if(this.state==="rejected"){s=true;return t(r(this.rejection))}this.fulfillmentCallbacks.push(i);this.rejectionCallbacks.push(o)}))}catch(t){return this.then(undefined,t)}finally(t){const e=t||qe;return this.then((t=>{e();return t}),(()=>e()))}static from(t){if(He(t)){return new Ye((e=>{const n=t=>{e.next(t);e.complete()};const r=t=>{e.error(t)};t.then(n,r)}))}else{return super.from(t)}}}_e=Symbol.toStringTag;function Je(t){return t&&typeof t==="object"&&t[Me]}var Qe;(function(t){t["cancel"]="cancel";t["run"]="run"})(Qe||(Qe={}));var Ze;(function(t){t["error"]="error";t["init"]="init";t["result"]="result";t["running"]="running";t["uncaughtError"]="uncaughtError"})(Ze||(Ze={}));const Ke=Zt("threads:master:messages");let Xe=1;const tn=t=>Array.from(new Set(t));const en=t=>t&&t.type===Ze.error;const nn=t=>t&&t.type===Ze.result;const rn=t=>t&&t.type===Ze.running;function sn(t,e){return new ve((n=>{let r;let s=false;const o=()=>{t.removeEventListener("message",i);t.removeEventListener("error",c);t.removeEventListener("exit",a)};const i=t=>{Ke("Message from worker:",t.data);if(!t.data||t.data.uid!==e)return;if(rn(t.data)){r=t.data.resultType}else if(nn(t.data)){if(r==="promise"){if(typeof t.data.payload!=="undefined"){n.next(Et(t.data.payload))}s=true;n.complete();o()}else{if(typeof t.data.payload!=="undefined"){n.next(Et(t.data.payload))}if(t.data.complete){s=true;n.complete();o()}}}else if(en(t.data)){const e=Et(t.data.error);s=true;n.error(e);o()}};const c=t=>{if(s)return;s=true;const e=t&&t.data instanceof Error?t.data:Error(String(t&&t.data||"Worker errored before the job completed."));n.error(e);o()};const a=t=>{if(s)return;s=true;const e=t?t.data:undefined;n.error(Error(`Worker terminated before the job completed (exit code: ${e}).`));o()};t.addEventListener("message",i);t.addEventListener("error",c);t.addEventListener("exit",a);return()=>{if(r==="observable"||!r){const n={type:Qe.cancel,uid:e};t.postMessage(n)}o()}}))}function on(t){if(t.length===0){return{args:[],transferables:[]}}const e=[];const n=[];for(const r of t){if(Je(r)){e.push(It(r.send));n.push(...r.transferables)}else{e.push(It(r))}}return{args:e,transferables:n.length===0?n:tn(n)}}function cn(t,e){return(...n)=>{const r=Xe++;const{args:s,transferables:o}=on(n);const i={type:Qe.run,uid:r,method:e,args:s};Ke("Sending command to run function to worker:",i);try{t.postMessage(i,o)}catch(t){if(jt(t)){const e=new Pt(`Cannot send arguments to the worker thread: a value is not structured-cloneable. `+`Functions, class instances and other non-serializable values cannot be passed to a thread. `+`Original error: ${t.message}`,t);return Ye.from(Promise.reject(e))}return Ye.from(Promise.reject(t))}return Ye.from(ge(sn(t,r)))}}function an(t,e){const n={};for(const r of e){n[r]=cn(t,r)}return n}var un=undefined&&undefined.__awaiter||function(t,e,n,r){function s(t){return t instanceof n?t:new n((function(e){e(t)}))}return new(n||(n=Promise))((function(n,o){function i(t){try{a(r.next(t))}catch(t){o(t)}}function c(t){try{a(r["throw"](t))}catch(t){o(t)}}function a(t){t.done?n(t.value):s(t.value).then(i,c)}a((r=r.apply(t,e||[])).next())}))};const ln=Zt("threads:master:messages");const fn=Zt("threads:master:spawn");const hn=Zt("threads:master:thread-utils");const dn=t=>t&&t.type==="init";const mn=t=>t&&t.type==="uncaughtError";const pn=typeof process!=="undefined"&&typeof process.env!=="undefined"&&process.env.THREADS_WORKER_INIT_TIMEOUT?Number.parseInt(process.env.THREADS_WORKER_INIT_TIMEOUT,10):1e4;function vn(t,e,n){return un(this,void 0,void 0,(function*(){let r;const s=new Promise(((t,s)=>{r=setTimeout((()=>s(Error(n))),e)}));try{return yield Promise.race([t,s])}finally{clearTimeout(r)}}))}function wn(t){return new Promise(((e,n)=>{const r=s=>{ln("Message from worker before finishing initialization:",s.data);if(dn(s.data)){t.removeEventListener("message",r);e(s.data)}else if(mn(s.data)){t.removeEventListener("message",r);n(Et(s.data.error))}};t.addEventListener("message",r)}))}function yn(t,e){return new ve((n=>{const r=t=>{const e={type:$e.message,data:t.data};n.next(e)};const s=t=>{hn("Unhandled promise rejection event in thread:",t);const e={type:$e.internalError,error:Error(t.reason)};n.next(e)};let o=false;const i=()=>{t.removeEventListener("message",r);t.removeEventListener("unhandledrejection",s);t.removeEventListener("exit",a)};const c=()=>{if(o)return;o=true;const t={type:$e.termination};i();n.next(t);n.complete()};const a=()=>c();t.addEventListener("message",r);t.addEventListener("unhandledrejection",s);t.addEventListener("exit",a);e.then(c);return i}))}function gn(t){const[e,n]=We();const r=()=>un(this,void 0,void 0,(function*(){hn("Terminating worker");yield t.terminate();n()}));return{terminate:r,termination:e}}function bn(t,e,n,r){const s=n.filter((t=>t.type===$e.internalError)).map((t=>t.error));return Object.assign(t,{[xe]:s,[ke]:n,[Fe]:r,[Se]:e})}function Cn(t,e){return un(this,void 0,void 0,(function*(){var e,n,r,s;fn("Initializing new thread");const o=pn;let i;try{i=yield vn(wn(t),o,`Timeout: Did not receive an init message from worker after ${o}ms. Make sure the worker calls expose().`)}catch(r){yield Promise.resolve((n=(e=t).terminate)===null||n===void 0?void 0:n.call(e)).catch((()=>undefined));throw r}const c=i.exposed;const{termination:a,terminate:u}=gn(t);const l=yn(t,a);if(c.type==="function"){const e=cn(t);return bn(e,t,l,u)}else if(c.type==="module"){const e=an(t,c.methods);return bn(e,t,l,u)}else{const e=c.type;yield Promise.resolve((s=(r=t).terminate)===null||s===void 0?void 0:s.call(r)).catch((()=>undefined));throw Error(`Worker init message states unexpected type of expose(): ${e}`)}}))}Wt().blob;const xn=Wt().default;const kn=new URL("./png-decoder.worker.js",import.meta.url);let Fn;const Mn=1;function Sn(){var t;if(typeof window!=="undefined"){const e=(t=window.navigator.hardwareConcurrency)!==null&&t!==void 0?t:8;return Math.ceil(e/4)}else{return Mn}}function En(){if(Fn==null){const t=Sn();console.debug(`Spawning PNG worker pool [size=${t}]`);Fn=Be((()=>Cn(new xn(kn.href))),{size:t})}return Fn}const In=async t=>{const e=En();return e.queue((e=>e(t)))};function Pn(t,n){const r=e.magnitude(t);const s=n.radius/r;return e.scale(s,t)}function jn(t,n,r){const s=e.subtract(r,t);const o=e.dot(n,s);const i=e.magnitudeSquared(n);const c=o/i;const a=e.scale(c,n);return e.add(a,t)}class Nn{constructor(t,e,n,r,s,o,i,c,a,u=y.create()){this.correlationIds=t;this.temporalRefinementCorrelationId=e;this.sequenceNumber=n;this.dimensions=r;this.image=s;this.scene=o;this.depthBufferBytes=i;this.featureMapBytes=c;this.partialFrame=a;this.id=u}getId(){return this.id}async depthBuffer(){if(this.cachedDepthBuffer==null){this.cachedDepthBuffer=this.depthBufferBytes!=null?this.decodeDepthBuffer(new Uint8Array(this.depthBufferBytes)):Promise.resolve(undefined)}return this.cachedDepthBuffer}async decodeDepthBuffer(t){const e=await In(t);return ut.fromPng(e,this.scene.camera,this.image.imageAttr)}async featureMap(){if(this.cachedFeatureMap==null){this.cachedFeatureMap=this.featureMapBytes!=null?this.decodeFeatureMap(new Uint8Array(this.featureMapBytes)):Promise.resolve(undefined)}return this.cachedFeatureMap}async decodeFeatureMap(t){const e=await In(t);return xt.fromPng(e,this.image.imageAttr)}copy({correlationIds:t,temporalRefinementCorrelationId:e,sequenceNumber:n,dimensions:r,image:s,scene:o,depthBufferBytes:i,featureMapBytes:c,partialFrame:a}){return new Nn(t!==null&&t!==void 0?t:this.correlationIds,e!==null&&e!==void 0?e:this.temporalRefinementCorrelationId,n!==null&&n!==void 0?n:this.sequenceNumber,r!==null&&r!==void 0?r:this.dimensions,s!==null&&s!==void 0?s:this.image,o!==null&&o!==void 0?o:this.scene,i!==null&&i!==void 0?i:this.depthBufferBytes,c!==null&&c!==void 0?c:this.featureMapBytes,a!==null&&a!==void 0?a:this.partialFrame,this.id)}}class Tn{constructor(t,e){this.imageAttr=t;this.imageBytes=e}}class On{constructor(t,e,n,r,s,o,i,c){this.camera=t;this.boundingBox=e;this.crossSection=n;this.worldOrientation=r;this.hasChanged=s;this.sceneViewSummary=o;this.modelViewId=i;this.itemModelView=c}copy({camera:t,boundingBox:e,crossSection:n,worldOrientation:r,hasChanged:s,sceneViewSummary:o,modelViewId:i,itemModelView:c}){return new On(t!==null&&t!==void 0?t:this.camera,e!==null&&e!==void 0?e:this.boundingBox,n!==null&&n!==void 0?n:this.crossSection,r!==null&&r!==void 0?r:this.worldOrientation,s!==null&&s!==void 0?s:this.hasChanged,o!==null&&o!==void 0?o:this.sceneViewSummary,i!==null&&i!==void 0?i:this.modelViewId,c!==null&&c!==void 0?c:this.itemModelView)}}class Dn{constructor(t,e,n,r,s,o){this.position=t;this.lookAt=e;this.up=n;this.near=r;this.far=s;this.aspectRatio=o}get direction(){return e.normalize(this.viewVector)}get viewVector(){return e.subtract(this.lookAt,this.position)}get worldMatrix(){return this.computeCameraMatrices().worldMatrix}get viewMatrix(){return this.computeCameraMatrices().viewMatrix}get projectionMatrix(){return this.computeCameraMatrices().projectionMatrix}get projectionMatrixInverse(){return this.computeCameraMatrices().projectionMatrixInverse}get projectionViewMatrix(){return this.computeCameraMatrices().projectionViewMatrix}static fromBoundingBox(t,e,r){var s;const{near:o,far:i}=tt(e,t);if(L(t)){const s=n.create(e);const c=Pn(t.viewVector,s);const a=jn(t.lookAt,c,s.center);return new Vn(c,a,t.up,o,i,r,t.fovHeight,t.rotationPoint)}else{return new An(t.position,t.lookAt,t.up,o,i,r,(s=t.fovY)!==null&&s!==void 0?s:45)}}isOrthographic(){return false}isPerspective(){return false}isPointBehindNear(t){const{position:n,direction:r,near:s}=this;const o=e.dot(e.subtract(t,n),r);return o<s}intersectLineWithNear(t){const{position:n,direction:r,near:s}=this;const o=e.subtract(t.start,n);const a=e.subtract(t.end,n);const u=i.create({start:o,end:a});const l=c.create({normal:r,constant:-s});const f=c.intersectLine(l,u);return f!=null?e.add(f,n):undefined}computeCameraMatrices(){if(this.cameraMatrices==null){return{viewMatrix:a.makeIdentity(),worldMatrix:a.makeIdentity(),projectionMatrix:a.makeIdentity(),projectionMatrixInverse:a.makeIdentity(),projectionViewMatrix:a.makeIdentity()}}return this.cameraMatrices}updateCameraMatrices(t){this.cameraMatrices=t;return this.cameraMatrices}}class An extends Dn{constructor(t,e,n,r,s,o,i){super(t,e,n,r,s,o);this.position=t;this.lookAt=e;this.up=n;this.near=r;this.far=s;this.aspectRatio=o;this.fovY=i}toOrthographic(t){return Dn.fromBoundingBox(Q(this,t),t,this.aspectRatio)}isPerspective(){return true}computeCameraMatrices(){if(this.cameraMatrices==null){const t=a.makeLookAtView(this.position,this.lookAt,this.up);const e=a.invert(t);const n=a.makePerspective(this.near,this.far,this.fovY,this.aspectRatio);const r=a.invert(n);const s=a.multiply(t,n);return super.updateCameraMatrices({viewMatrix:t,worldMatrix:e,projectionMatrix:n,projectionMatrixInverse:r,projectionViewMatrix:s})}return this.cameraMatrices}}class Vn extends Dn{constructor(t,n,r,s,o,i,c,a){super(e.add(n,e.negate(t)),n,r,s,o,i);this.lookAt=n;this.up=r;this.near=s;this.far=o;this.aspectRatio=i;this.fovHeight=c;this.rotationPoint=a;this.top=c*.5;this.bottom=-this.top;this.right=this.top*i;this.left=-this.right}toPerspective(t){return Dn.fromBoundingBox(Z(this),t,this.aspectRatio)}isOrthographic(){return true}computeCameraMatrices(){if(this.cameraMatrices==null){const t=a.makeLookAtView(this.position,this.lookAt,this.up);const e=a.invert(t);const n=a.makeOrthographic(this.left,this.right,this.bottom,this.top,this.near,this.far);const r=a.invert(n);const s=a.multiply(t,n);return super.updateCameraMatrices({viewMatrix:t,worldMatrix:e,projectionMatrix:n,projectionMatrixInverse:r,projectionViewMatrix:s})}return this.cameraMatrices}}class zn{constructor(t,e){this.y=t;this.z=e}get matrix(){const t=this.z;const n=this.y;const r=e.cross(n,t);return a.makeBasis(r,n,t)}}zn.DEFAULT=new zn(e.up(),e.back());class Bn{constructor(t,e){this.position=t;this.up=e}transformMatrix(t){const n=e.multiplyByTransformMatrixColumnMajor(this.position,t);const r=e.multiplyByTransformMatrixColumnMajor(this.up,t);return new Bn(n,r)}}Bn.FRONT=new Bn(e.back(),e.up());Bn.RIGHT=new Bn(e.right(),e.up());Bn.LEFT=new Bn(e.left(),e.up());Bn.BACK=new Bn(e.forward(),e.up());Bn.TOP=new Bn(e.up(),e.forward());Bn.BOTTOM=new Bn(e.down(),e.back());Bn.TOP_FRONT_RIGHT=new Bn(e.add(e.back(),e.up(),e.left()),e.up());Bn.TOP_FRONT_LEFT=new Bn(e.add(e.back(),e.up(),e.right()),e.up());Bn.BOTTOM_FRONT_RIGHT=new Bn(e.add(e.back(),e.down(),e.left()),e.up());Bn.BOTTOM_FRONT_LEFT=new Bn(e.add(e.back(),e.down(),e.right()),e.up());Bn.TOP_BACK_LEFT=new Bn(e.add(e.forward(),e.up(),e.right()),e.up());Bn.TOP_BACK_RIGHT=new Bn(e.add(e.forward(),e.up(),e.left()),e.up());Bn.BOTTOM_BACK_LEFT=new Bn(e.add(e.forward(),e.down(),e.right()),e.up());Bn.BOTTOM_BACK_RIGHT=new Bn(e.add(e.forward(),e.down(),e.left()),e.up());Bn.TOP_FRONT=new Bn(e.add(e.back(),e.up()),e.up());Bn.BOTTOM_FRONT=new Bn(e.add(e.back(),e.down()),e.up());Bn.FRONT_RIGHT=new Bn(e.add(e.back(),e.left()),e.up());Bn.FRONT_LEFT=new Bn(e.add(e.back(),e.right()),e.up());Bn.TOP_BACK=new Bn(e.add(e.forward(),e.up()),e.up());Bn.BOTTOM_BACK=new Bn(e.add(e.forward(),e.down()),e.up());Bn.BACK_LEFT=new Bn(e.add(e.forward(),e.right()),e.up());Bn.BACK_RIGHT=new Bn(e.add(e.forward(),e.left()),e.up());Bn.TOP_LEFT=new Bn(e.add(e.up(),e.right()),e.up());Bn.TOP_RIGHT=new Bn(e.add(e.up(),e.left()),e.up());Bn.BOTTOM_LEFT=new Bn(e.add(e.down(),e.right()),e.up());Bn.BOTTOM_RIGHT=new Bn(e.add(e.down(),e.left()),e.up());const Rn=v.defineMapper(v.read(v.requiredProp("x"),v.requiredProp("y")),(([t,e])=>r.create(t,e)));const Wn=v.defineMapper(v.read(v.requiredProp("width"),v.requiredProp("height")),(([t,e])=>u.create(t,e)));const $n=v.defineMapper(v.read(v.requiredProp("x"),v.requiredProp("y"),v.requiredProp("width"),v.requiredProp("height")),(([t,e,n,r])=>o.create(t,e,n,r)));const _n=v.defineMapper(v.read(v.requiredProp("x"),v.requiredProp("y"),v.requiredProp("z")),(([t,n,r])=>e.create(t,n,r)));const qn=v.defineMapper(v.read(v.requiredProp("xmin"),v.requiredProp("ymin"),v.requiredProp("zmin"),v.requiredProp("xmax"),v.requiredProp("ymax"),v.requiredProp("zmax")),(([t,n,r,s,o,i])=>l.create(e.create(t,n,r),e.create(s,o,i))));const Un=v.defineMapper(v.read(v.requiredProp("d"),v.mapRequiredProp("normal",_n)),(([t,e])=>c.create({normal:e,constant:t})));const Gn=v.defineMapper(v.read(v.requiredProp("x"),v.requiredProp("y"),v.requiredProp("z"),v.requiredProp("w")),(([t,e,n,r])=>f.create({x:t,y:e,z:n,w:r})));const Ln=v.defineMapper(v.read(v.mapRequiredProp("r0",Gn),v.mapRequiredProp("r1",Gn),v.mapRequiredProp("r2",Gn),v.mapRequiredProp("r3",Gn)),(([t,e,n,r])=>a.transpose(a.fromValues(t.x,t.y,t.z,t.w,e.x,e.y,e.z,e.w,n.x,n.y,n.z,n.w,r.x,r.y,r.z,r.w))));const Hn=v.defineMapper(v.read(v.requiredProp("r"),v.requiredProp("g"),v.requiredProp("b")),(([t,e,n])=>w.create(t,e,n)));const Yn=v.defineMapper((t=>{function e(t){return{r:t.r,g:t.g,b:t.b}}if(typeof t==="string"){const n=w.fromHexString(t);return n!=null?e(n):{errors:["String is not a valid color."]}}else if(typeof t==="number"){return e(w.fromNumber(t))}else{return e(t)}}),(t=>t));tr();const Jn=tr();const Qn=tr();const Zn=er();const Kn=er();const Xn=er();function tr(){return v.defineMapper((t=>t!=null?{value:t}:undefined),(t=>t))}function er(){return v.defineMapper((t=>(t===null||t===void 0?void 0:t.value)||undefined),(t=>t))}const nr=v.defineMapper(v.read(v.mapProp("position",v.compose(v.required("position"),_n)),v.mapProp("lookAt",v.compose(v.required("lookAt"),_n)),v.mapProp("up",v.compose(v.required("up"),_n)),v.getProp("fovY")),(([t,e,n,r])=>({position:t,lookAt:e,up:n,fovY:(r===null||r===void 0?void 0:r.value)!=null?r.value:45})));const rr=v.defineMapper(v.read(v.mapProp("viewVector",v.compose(v.required("viewVector"),_n)),v.mapProp("lookAt",v.compose(v.required("lookAt"),_n)),v.mapProp("up",v.compose(v.required("up"),_n)),v.mapProp("fovHeight",v.required("fovHeight"))),(([t,e,n,r])=>({viewVector:t,lookAt:e,up:n,fovHeight:r})));const sr=v.defineMapper(v.read(v.mapProp("position",v.ifDefined(_n)),v.mapProp("lookAt",v.ifDefined(_n)),v.mapProp("up",v.ifDefined(_n)),v.mapProp("perspective",v.ifDefined(nr)),v.mapProp("orthographic",v.ifDefined(rr))),(([t,n,r,s,o])=>{var i;return(i=s!==null&&s!==void 0?s:o)!==null&&i!==void 0?i:{position:t!==null&&t!==void 0?t:e.back(),lookAt:n!==null&&n!==void 0?n:e.origin(),up:r!==null&&r!==void 0?r:e.up(),fovY:45}}));const or=v.defineMapper(v.read(v.mapProp("normal",v.compose(v.required("normal"),_n)),v.requiredProp("offset")),(([t,e])=>({normal:t,offset:e})));const ir=v.defineMapper(v.read(v.mapProp("frameDimensions",v.compose(v.required("frameDimensions"),Wn)),v.mapProp("imageRect",v.compose(v.required("imageRect"),$n)),v.mapProp("scaleFactor",v.required("scaleFactor"))),(([t,e,n])=>({frameDimensions:t,imageRect:e,imageScale:n})));const cr=v.defineMapper(v.read(v.mapProp("sectionPlanes",v.compose(v.required("sectionPlanes"),v.mapArray(or))),v.mapProp("highlightColor",v.ifDefined(Hn))),(([t,e])=>rt({sectionPlanes:t,highlightColor:e||undefined})));const ar=v.defineMapper(v.read(v.requiredProp("count"),v.mapProp("boundingBox",v.ifDefined(qn))),(([t,e])=>({count:t,boundingBox:e!==null&&e!==void 0?e:undefined})));const ur=v.defineMapper(v.read(v.mapProp("visibleSummary",v.ifDefined(ar)),v.mapProp("selectedVisibleSummary",v.ifDefined(ar))),(([t,e])=>it({visibleSummary:t!==null&&t!==void 0?t:undefined,selectedVisibleSummary:e!==null&&e!==void 0?e:undefined})));const lr=v.defineMapper(v.read(v.mapProp("modelViewId",v.ifDefined(S)),v.mapProp("sceneItemId",v.ifDefined(S))),(([t,e])=>ot({modelViewId:t!==null&&t!==void 0?t:undefined,sceneItemId:e!==null&&e!==void 0?e:undefined})));const fr=v.defineMapper(v.read(v.mapProp("imageAttributes",v.compose(v.required("imageAttributes"),ir))),(([t])=>t));const hr=v.defineMapper(v.read(fr,v.mapProp("image",v.required("image"))),(([t,e])=>new Tn(t,e)));const dr=v.defineMapper(v.read(v.mapRequiredProp("camera",sr),v.mapRequiredProp("visibleBoundingBox",qn),v.mapRequiredProp("crossSectioning",cr),v.requiredProp("hasChanged"),v.mapRequiredProp("displayListSummary",ur),v.mapProp("modelViewId",v.ifDefined(E)),v.mapProp("itemModelView",v.ifDefined(lr))),(([t,e,n,r,s,o,i])=>({camera:t,boundingBox:e,crossSectioning:n,hasChanged:r,displayListSummary:s,modelViewId:o!==null&&o!==void 0?o:undefined,itemModelView:i!==null&&i!==void 0?i:undefined})));const mr=v.defineMapper(v.read(v.mapProp("sceneAttributes",v.compose(v.required("sceneAttributes"),dr))),(([t])=>t));const pr=v.defineMapper(v.read(mr,fr),(([t,e])=>Dn.fromBoundingBox(t.camera,t.boundingBox,u.aspectRatio(e.frameDimensions))));function vr(t){return v.defineMapper(v.read(mr,pr),(([e,n])=>new On(n,e.boundingBox,e.crossSectioning,t,e.hasChanged,e.displayListSummary,e.modelViewId,e.itemModelView)))}function wr(t){return v.defineMapper(v.read(v.mapProp("frameCorrelationIds",(t=>t!=null?t:[])),v.requiredProp("sequenceNumber"),v.compose(fr,v.getProp("frameDimensions")),vr(t),hr,v.mapProp("depthBuffer",Kn),v.mapProp("featureMap",Kn),v.mapProp("temporalRefinementCorrelationId",(t=>t!=null?S(t):null)),v.mapProp("partialFrame",v.ifDefined(Zn))),(([t,e,n,r,s,o,i,c,a])=>new Nn(t,c||"",e,n,s,r,o,i,a!==null&&a!==void 0?a:false)))}function yr(t){return v.ifInvalidThrow(wr(t))}const gr=v.defineMapper(v.compose(v.required("orientation"),v.read(v.mapProp("up",v.compose(v.required("up"),_n)),v.mapProp("front",v.compose(v.required("front"),_n)))),(([t,e])=>new zn(t,e)));v.ifInvalidThrow(gr);const br=v.defineMapper(v.read(v.mapRequiredProp("imageAttributes",ir),v.requiredProp("stencilBuffer"),v.mapRequiredProp("depthBuffer",v.compose(Kn,v.required("depthBuffer")))),(([t,e,n])=>({imageAttributes:t,stencilBuffer:e,depthBuffer:n})));const Cr=kr("stencilBuffer",br);const xr=v.ifInvalidThrow(Cr);function kr(t,e){return v.mapRequiredProp(t,e)}const Fr=v.defineMapper(v.read(v.requiredProp("token"),v.requiredProp("expiresIn")),(([t,e])=>$.create(t,e)));const Mr=v.defineMapper(v.read(v.compose(v.requiredProp("startStream"),v.mapRequiredProp("streamId",S)),v.compose(v.requiredProp("startStream"),v.mapRequiredProp("sceneId",S)),v.compose(v.requiredProp("startStream"),v.mapRequiredProp("sceneViewId",S)),v.compose(v.requiredProp("startStream"),v.mapRequiredProp("sessionId",S)),v.compose(v.requiredProp("startStream"),v.mapRequiredProp("worldOrientation",gr)),v.compose(v.requiredProp("startStream"),v.mapRequiredProp("token",Fr))),(([t,e,n,r,s,o])=>({streamId:t,sceneId:e,sceneViewId:n,sessionId:r,worldOrientation:s,token:o})));const Sr=v.ifInvalidThrow(Mr);const Er=v.defineMapper(v.read(v.compose(v.requiredProp("reconnect"),v.mapRequiredProp("token",Fr))),(([t])=>({token:t})));const Ir=v.ifInvalidThrow(Er);const Pr=v.defineMapper(v.compose(v.requiredProp("refreshToken"),v.requiredProp("token"),Fr),(t=>t));const jr=v.ifInvalidThrow(Pr);const Nr=v.defineMapper(v.compose(v.requiredProp("syncTime"),v.requiredProp("replyTime"),v.read(v.requiredProp("seconds"),v.requiredProp("nanos"))),(([t,e])=>m({seconds:t,nanos:e})));const Tr=v.ifInvalidThrow(Nr);const Or=v.defineMapper(v.ifDefined(v.getProp("next")),(t=>t!=null?t:undefined));const Dr=v.defineMapper((t=>{switch(t){case"all":return{enabled:{value:true},frameType:d.protobuf.stream.FrameType.FRAME_TYPE_ALL};case"final":return{enabled:{value:true},frameType:d.protobuf.stream.FrameType.FRAME_TYPE_FINAL};default:return{enabled:{value:false},frameType:d.protobuf.stream.FrameType.FRAME_TYPE_INVALID}}}),(t=>t));const Ar=v.defineMapper(v.read(v.ifDefined(v.getProp("opacity"))),(([t])=>({opacity:{value:h(t!==null&&t!==void 0?t:0,0,1)}})));const Vr=v.defineMapper(v.read(v.ifDefined(v.getProp("width")),v.ifDefined(v.mapProp("color",v.ifDefined(Yn)))),(([t,e])=>({lineWidth:t,lineColor:e})));const zr=v.defineMapper(v.read(v.ifDefined(v.mapProp("color",v.ifDefined(Yn))),v.ifDefined(v.mapProp("opacity",Jn)),v.ifDefined(v.getProp("lineWidth"))),(([t,e,n])=>{if(t||e||n){return{color:t,opacity:e,lineWidth:n}}else return undefined}));const Br=v.defineMapper(v.read(v.ifDefined(v.mapProp("highlightColor",v.ifDefined(Yn))),v.ifDefined(v.mapProp("occludedOpacity",Jn)),v.ifDefined(v.mapProp("outline",v.ifDefined(Vr)))),(([t,e,n])=>({highlightColor:t,occludedOpacity:e,outline:n})));const Rr=v.defineMapper((t=>!!t),(t=>t));const Wr=v.defineMapper((t=>t!==null&&t!==void 0?t:""),(t=>t));const $r=v.defineMapper(v.read(v.ifDefined(v.mapProp("frameBackgroundColor",v.ifDefined(Yn)))),(([t])=>({frameBackgroundColor:t})));const _r=v.defineMapper(v.read(v.ifDefined(v.mapProp("streamKeyToCompare",v.ifDefined(Qn)))),(([t])=>({streamKeyToCompare:t})));const qr=v.defineMapper(v.read(v.ifDefined(v.mapProp("endCapEnabled",(t=>!!t))),v.ifDefined(v.mapProp("endCapColor",v.ifDefined(Yn)))),(([t,e])=>({endCapEnabled:t,endCapColor:e})));const Ur=v.defineMapper(v.read(v.mapProp("depthBuffers",Dr),v.mapProp("phantom",Ar),v.mapProp("noDefaultLights",Rr),v.mapProp("featureLines",Vr),v.mapProp("featureHighlighting",Br),v.mapProp("featureMaps",Dr),v.mapProp("experimentalRenderingOptions",Wr),v.mapProp("selectionHighlighting",zr),v.mapProp("frames",$r),v.mapProp("sceneComparison",_r),v.mapProp("crossSectioning",qr)),(([t,e,n,r,s,o,i,c,a,u,l])=>{const f={depthBuffers:t,phantomItems:e,noDefaultLights:n,featureLines:r,featureHighlighting:s,featureMaps:o,experimentalRenderingOptions:i,selectionHighlighting:c,frames:a,sceneComparison:u,crossSectioningAttributes:l};return f}));export{gt as A,Yn as B,b as C,wt as D,Ct as E,Dn as F,Jn as G,yr as H,Sr as I,Ir as J,Tr as K,jr as L,ct as M,C as N,zn as O,Q as P,Z as Q,_ as R,Bn as S,Pn as T,H as U,tt as V,Un as W,sr as X,I as Y,Nn as a,Tn as b,st as c,On as d,Vn as e,X as f,An as g,bt as h,xr as i,In as j,ut as k,k as l,F as m,Xn as n,_n as o,x as p,Rn as q,Hn as r,Or as s,K as t,jn as u,M as v,Ln as w,Zn as x,qn as y,Ur as z};
|
|
5
|
+
//# sourceMappingURL=p-BjvjKoy7.js.map
|