{"version":3,"file":"vendor.openbim-components-2756e088.731affc3e176e64b.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/base-types/base-raycaster.js","webpack://client-app/./node_modules/openbim-components/src/base-types/base-types.js","webpack://client-app/./node_modules/openbim-components/src/base-types/component.js","webpack://client-app/./node_modules/openbim-components/src/base-types/base-renderer.js","webpack://client-app/./node_modules/openbim-components/src/base-types/mouse.js","webpack://client-app/./node_modules/openbim-components/src/base-types/base-svg-annotation.js","webpack://client-app/./node_modules/openbim-components/src/base-types/ui-element.js"],"sourcesContent":["import { Component } from \"./component\";\r\nimport { Event } from \"./base-types\";\r\n/**\r\n * A base component for other components whose main mission is to cast rays,\r\n * generally to pick objects with the mouse.\r\n */\r\nexport class BaseRaycaster extends Component {\r\n constructor() {\r\n super(...arguments);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n }\r\n}\r\n//# sourceMappingURL=base-raycaster.js.map","/**\r\n * Simple event handler by\r\n * [Jason Kleban](https://gist.github.com/JasonKleban/50cee44960c225ac1993c922563aa540).\r\n * Keep in mind that:\r\n * - If you want to remove it later, you might want to declare the callback as\r\n * an object.\r\n * - If you want to maintain the reference to `this`, you will need to declare\r\n * the callback as an arrow function.\r\n */\r\nexport class Event {\r\n constructor() {\r\n /** Triggers all the callbacks assigned to this event. */\r\n this.trigger = async (data) => {\r\n const handlers = this.handlers.slice(0);\r\n for (const handler of handlers) {\r\n await handler(data);\r\n }\r\n };\r\n this.handlers = [];\r\n }\r\n /**\r\n * Add a callback to this event instance.\r\n * @param handler - the callback to be added to this event.\r\n */\r\n add(handler) {\r\n this.handlers.push(handler);\r\n }\r\n /**\r\n * Removes a callback from this event instance.\r\n * @param handler - the callback to be removed from this event.\r\n */\r\n remove(handler) {\r\n this.handlers = this.handlers.filter((h) => h !== handler);\r\n }\r\n /** Gets rid of all the suscribed events. */\r\n reset() {\r\n this.handlers.length = 0;\r\n }\r\n}\r\n//# sourceMappingURL=base-types.js.map","/**\r\n * Components are the building blocks of this library. Everything is a\r\n * component: tools, scenes, objects, cameras, etc.\r\n * All components must inherit from this class. The `Type` parameter defines\r\n * the type of the core of this component. For instance, a component containing a\r\n */\r\nexport class Component {\r\n constructor(components) {\r\n this.components = components;\r\n /** Whether is component is {@link Disposable}. */\r\n this.isDisposeable = () => {\r\n return \"dispose\" in this;\r\n };\r\n /** Whether is component is {@link Resizeable}. */\r\n this.isResizeable = () => {\r\n return \"resize\" in this && \"getSize\" in this;\r\n };\r\n /** Whether is component is {@link Updateable}. */\r\n this.isUpdateable = () => {\r\n return (\"onAfterUpdate\" in this && \"onBeforeUpdate\" in this && \"update\" in this);\r\n };\r\n /** Whether is component is {@link Hideable}. */\r\n this.isHideable = () => {\r\n return \"visible\" in this;\r\n };\r\n /** Whether is component is {@link Configurable}. */\r\n this.isConfigurable = () => {\r\n return \"setup\" in this && \"config\" in this && \"onSetup\" in this;\r\n };\r\n /** Whether is component implements any kind of {@link UI}. */\r\n this.hasUI = () => {\r\n return \"uiElement\" in this;\r\n };\r\n }\r\n}\r\n//# sourceMappingURL=component.js.map","import { Component } from \"./component\";\r\nimport { Event } from \"./base-types\";\r\n/**\r\n * A base component for other components whose main mission is to render a\r\n * [scene](https://threejs.org/docs/#api/en/scenes/Scene).\r\n * @noInheritDoc\r\n */\r\nexport class BaseRenderer extends Component {\r\n constructor() {\r\n super(...arguments);\r\n /** {@link Resizeable.onResize} */\r\n this.onResize = new Event();\r\n /**\r\n * Event that fires when there has been a change to the list of clipping\r\n * planes used by the active renderer.\r\n */\r\n this.onClippingPlanesUpdated = new Event();\r\n /**\r\n * The list of [clipping planes](https://threejs.org/docs/#api/en/renderers/WebGLRenderer.clippingPlanes) used by this\r\n * instance of the renderer.\r\n */\r\n this.clippingPlanes = [];\r\n }\r\n /**\r\n * Forces the update of the clipping planes and all components that depend\r\n * on them that are subscribed to `onClippingPlanesUpdated`.\r\n */\r\n async updateClippingPlanes() {\r\n await this.onClippingPlanesUpdated.trigger();\r\n }\r\n /**\r\n * Adds or removes a\r\n * [clipping plane](https://threejs.org/docs/#api/en/renderers/WebGLRenderer.clippingPlanes)\r\n * to the renderer.\r\n */\r\n togglePlane(active, plane, isLocal) {\r\n plane.isLocal = isLocal;\r\n const index = this.clippingPlanes.indexOf(plane);\r\n if (active && index === -1) {\r\n this.clippingPlanes.push(plane);\r\n }\r\n else if (!active && index > -1) {\r\n this.clippingPlanes.splice(index, 1);\r\n }\r\n const renderer = this.get();\r\n renderer.clippingPlanes = this.clippingPlanes.filter((plane) => !plane.isLocal);\r\n }\r\n}\r\n//# sourceMappingURL=base-renderer.js.map","import * as THREE from \"three\";\r\nimport { Event } from \"./base-types\";\r\n/**\r\n * A helper to easily get the real position of the mouse in the Three.js canvas\r\n * to work with tools like the\r\n * [raycaster](https://threejs.org/docs/#api/en/core/Raycaster), even if it has\r\n * been transformed through CSS or doesn't occupy the whole screen.\r\n */\r\nexport class Mouse {\r\n constructor(dom) {\r\n this.dom = dom;\r\n this._position = new THREE.Vector2();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.updateMouseInfo = (event) => {\r\n this._event = event;\r\n };\r\n this.setupEvents(true);\r\n }\r\n /**\r\n * The real position of the mouse of the Three.js canvas.\r\n */\r\n get position() {\r\n if (this._event) {\r\n const bounds = this.dom.getBoundingClientRect();\r\n this._position.x = this.getPositionX(bounds, this._event);\r\n this._position.y = this.getPositionY(bounds, this._event);\r\n }\r\n return this._position;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this.setupEvents(false);\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n getPositionY(bound, event) {\r\n return -((event.clientY - bound.top) / (bound.bottom - bound.top)) * 2 + 1;\r\n }\r\n getPositionX(bound, event) {\r\n return ((event.clientX - bound.left) / (bound.right - bound.left)) * 2 - 1;\r\n }\r\n setupEvents(active) {\r\n if (active) {\r\n this.dom.addEventListener(\"mousemove\", this.updateMouseInfo);\r\n }\r\n else {\r\n this.dom.removeEventListener(\"mousemove\", this.updateMouseInfo);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=mouse.js.map","import { generateUUID } from \"three/src/math/MathUtils\";\r\nimport { Event } from \"./base-types\";\r\nimport { Component } from \"./component\";\r\nexport class BaseSVGAnnotation extends Component {\r\n constructor() {\r\n super(...arguments);\r\n this.id = generateUUID();\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._enabled = false;\r\n this._isDrawing = false;\r\n this._svgViewport = null;\r\n this.start = (_event) => {\r\n return null;\r\n };\r\n this.draw = (_event) => { };\r\n this.end = (_event) => { };\r\n this.cancel = (event) => {\r\n if (event) {\r\n event.stopImmediatePropagation();\r\n if (event.key === \"Escape\") {\r\n this.cancel(event);\r\n }\r\n }\r\n };\r\n }\r\n set svgViewport(value) {\r\n this._svgViewport = value;\r\n }\r\n get svgViewport() {\r\n return this._svgViewport ?? undefined;\r\n }\r\n set enabled(value) {\r\n this._enabled = value;\r\n this.setupEvents(value);\r\n if (this.components.uiEnabled) {\r\n const main = this.uiElement.get(\"main\");\r\n main.active = value;\r\n }\r\n }\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n get canDraw() {\r\n return this.enabled && this._svgViewport;\r\n }\r\n get() {\r\n return null;\r\n }\r\n async dispose() {\r\n if (this._svgViewport) {\r\n this._svgViewport.remove();\r\n }\r\n this.setupEvents(false);\r\n this.uiElement.dispose();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n setupEvents(active) {\r\n if (active) {\r\n document.addEventListener(\"keydown\", this.cancel);\r\n if (!this._svgViewport)\r\n return;\r\n this._svgViewport.addEventListener(\"mousemove\", this.draw);\r\n this._svgViewport.addEventListener(\"mousedown\", this.start);\r\n this._svgViewport.addEventListener(\"mouseup\", this.end);\r\n }\r\n else {\r\n document.removeEventListener(\"keydown\", this.cancel);\r\n if (!this._svgViewport)\r\n return;\r\n this._svgViewport.removeEventListener(\"mousemove\", this.draw);\r\n this._svgViewport.removeEventListener(\"mousedown\", this.start);\r\n this._svgViewport.removeEventListener(\"mouseup\", this.end);\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=base-svg-annotation.js.map","/**\r\n * A simple object to handle UI components. You can use the generic constructor\r\n * to specify the types of your UI components.\r\n */\r\nexport class UIElement {\r\n constructor() {\r\n this._data = null;\r\n this.initError = \"UI Components not initialized.\";\r\n }\r\n /**\r\n * Gets the UI Component with the given name. If it doesn't exist, it will\r\n * throw an error.\r\n *\r\n * @param name the identifier of the UI component.\r\n */\r\n get(name) {\r\n if (!this._data) {\r\n throw new Error(this.initError);\r\n }\r\n return this._data[name];\r\n }\r\n /**\r\n * Sets all the UI components of this instance.\r\n *\r\n * @param data all the UI components sorted by name in an object.\r\n */\r\n set(data) {\r\n this._data = data;\r\n }\r\n /**\r\n * Release all the memory used by this instance deleting all the UI components\r\n * inside.\r\n */\r\n async dispose() {\r\n if (!this._data)\r\n return;\r\n for (const name in this._data) {\r\n const uiComponent = this._data[name];\r\n await uiComponent.dispose();\r\n }\r\n this._data = null;\r\n }\r\n}\r\n//# sourceMappingURL=ui-element.js.map"],"names":["BaseRaycaster","constructor","super","arguments","this","onDisposed","Event","trigger","async","data","handlers","slice","handler","add","push","remove","filter","h","reset","length","Component","components","isDisposeable","isResizeable","isUpdateable","isHideable","isConfigurable","hasUI","BaseRenderer","onResize","onClippingPlanesUpdated","clippingPlanes","updateClippingPlanes","togglePlane","active","plane","isLocal","index","indexOf","splice","get","Mouse","dom","_position","updateMouseInfo","event","_event","setupEvents","position","bounds","getBoundingClientRect","x","getPositionX","y","getPositionY","dispose","bound","clientY","top","bottom","clientX","left","right","addEventListener","removeEventListener","BaseSVGAnnotation","id","_enabled","_isDrawing","_svgViewport","start","draw","end","cancel","stopImmediatePropagation","key","svgViewport","value","undefined","enabled","uiEnabled","uiElement","canDraw","document","UIElement","_data","initError","name","Error","set","uiComponent"],"sourceRoot":""}