{"version":3,"file":"vendor.openbim-components-3c1ae515.4ba63c7bca0dc8a2.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/core/SimpleRenderer/index.js","webpack://client-app/./node_modules/openbim-components/src/core/SimpleSVGViewport/index.js","webpack://client-app/./node_modules/openbim-components/src/core/ToolsComponent/index.js","webpack://client-app/./node_modules/openbim-components/src/core/SimpleScene/index.js","webpack://client-app/./node_modules/openbim-components/src/core/SimpleRaycaster/index.js"],"sourcesContent":["import * as THREE from \"three\";\r\nimport { CSS2DRenderer } from \"three/examples/jsm/renderers/CSS2DRenderer\";\r\nimport { Event, BaseRenderer, } from \"../../base-types\";\r\n/**\r\n * A basic renderer capable of rendering 3D and 2D objects\r\n * ([Objec3Ds](https://threejs.org/docs/#api/en/core/Object3D) and\r\n * [CSS2DObjects](https://threejs.org/docs/#examples/en/renderers/CSS2DRenderer)\r\n * respectively).\r\n */\r\nexport class SimpleRenderer extends BaseRenderer {\r\n constructor(components, container, parameters) {\r\n super(components);\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** {@link Updateable.onBeforeUpdate} */\r\n this.onBeforeUpdate = new Event();\r\n /** {@link Updateable.onAfterUpdate} */\r\n this.onAfterUpdate = new Event();\r\n this._renderer2D = new CSS2DRenderer();\r\n /** {@link Resizeable.resize}. */\r\n this.resize = (size) => {\r\n this.updateContainer();\r\n if (!this.container) {\r\n return;\r\n }\r\n const width = size ? size.x : this.container.clientWidth;\r\n const height = size ? size.y : this.container.clientHeight;\r\n this._renderer.setSize(width, height);\r\n this._renderer2D.setSize(width, height);\r\n this.onResize.trigger(size);\r\n };\r\n this.resizeEvent = () => {\r\n this.resize();\r\n };\r\n this.onContextLost = (event) => {\r\n event.preventDefault();\r\n this.components.enabled = false;\r\n };\r\n this.onContextBack = () => {\r\n this._renderer.setRenderTarget(null);\r\n this._renderer.dispose();\r\n this._renderer = new THREE.WebGLRenderer({\r\n canvas: this._canvas,\r\n antialias: true,\r\n alpha: true,\r\n ...this._parameters,\r\n });\r\n this.components.enabled = true;\r\n };\r\n this.container = container || null;\r\n this._parameters = parameters;\r\n this._renderer = new THREE.WebGLRenderer({\r\n antialias: true,\r\n alpha: true,\r\n ...parameters,\r\n });\r\n this._renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));\r\n this.setupRenderers();\r\n this.setupEvents(true);\r\n this.resize();\r\n this._canvas = this._renderer.domElement;\r\n const context = this._renderer.getContext();\r\n const { canvas } = context;\r\n canvas.addEventListener(\"webglcontextlost\", this.onContextLost, false);\r\n canvas.addEventListener(\"webglcontextrestored\", this.onContextBack, false);\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._renderer;\r\n }\r\n /** {@link Updateable.update} */\r\n async update() {\r\n if (!this.enabled)\r\n return;\r\n await this.onBeforeUpdate.trigger(this);\r\n const scene = this.overrideScene || this.components.scene.get();\r\n const camera = this.overrideCamera || this.components.camera.get();\r\n if (!scene || !camera)\r\n return;\r\n this._renderer.render(scene, camera);\r\n this._renderer2D.render(scene, camera);\r\n await this.onAfterUpdate.trigger(this);\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this.enabled = false;\r\n this.setupEvents(false);\r\n this._renderer.domElement.remove();\r\n this._renderer.dispose();\r\n this._renderer2D.domElement.remove();\r\n this.onResize.reset();\r\n this.onAfterUpdate.reset();\r\n this.onBeforeUpdate.reset();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n /** {@link Resizeable.getSize}. */\r\n getSize() {\r\n return new THREE.Vector2(this._renderer.domElement.clientWidth, this._renderer.domElement.clientHeight);\r\n }\r\n setupEvents(active) {\r\n if (active) {\r\n window.addEventListener(\"resize\", this.resizeEvent);\r\n }\r\n else {\r\n window.removeEventListener(\"resize\", this.resizeEvent);\r\n }\r\n }\r\n setupRenderers() {\r\n this._renderer.localClippingEnabled = true;\r\n this._renderer2D.domElement.style.position = \"absolute\";\r\n this._renderer2D.domElement.style.top = \"0px\";\r\n this._renderer2D.domElement.style.pointerEvents = \"none\";\r\n if (this.container) {\r\n this.container.appendChild(this._renderer.domElement);\r\n this.container.appendChild(this._renderer2D.domElement);\r\n }\r\n this.updateContainer();\r\n }\r\n updateContainer() {\r\n if (!this.container) {\r\n const parent = this._renderer.domElement.parentElement;\r\n if (parent) {\r\n this.container = parent;\r\n parent.appendChild(this._renderer2D.domElement);\r\n }\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import { Vector2 } from \"three\";\r\nimport { generateUUID } from \"three/src/math/MathUtils\";\r\nimport { Component, UIElement, Event, } from \"../../base-types\";\r\nimport { Button, FloatingWindow, Toolbar, ColorInput, RangeInput, } from \"../../ui\";\r\nexport class SimpleSVGViewport extends Component {\r\n get enabled() {\r\n return this._enabled;\r\n }\r\n set enabled(value) {\r\n this._enabled = value;\r\n this.resize();\r\n this._undoList = [];\r\n if (this.components.uiEnabled) {\r\n this.uiElement.get(\"toolbar\").visible = value;\r\n }\r\n if (value) {\r\n this._viewport.classList.remove(\"pointer-events-none\");\r\n }\r\n else {\r\n this.clear();\r\n this.uiElement.get(\"settingsWindow\").visible = false;\r\n this._viewport.classList.add(\"pointer-events-none\");\r\n }\r\n }\r\n constructor(components) {\r\n super(components);\r\n this.uiElement = new UIElement();\r\n /** {@link Configurable.isSetup} */\r\n this.isSetup = false;\r\n this.id = generateUUID().toLowerCase();\r\n this._enabled = false;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._viewport = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n this._size = new Vector2();\r\n this._undoList = [];\r\n this.config = {\r\n fillColor: \"transparent\",\r\n strokeColor: \"#BCF124\",\r\n strokeWidth: 4,\r\n };\r\n this.onSetup = new Event();\r\n this.onResize = () => {\r\n this.resize();\r\n };\r\n this._viewport.classList.add(\"absolute\", \"top-0\", \"right-0\");\r\n this._viewport.setAttribute(\"width\", \"100%\");\r\n this._viewport.setAttribute(\"height\", \"100%\");\r\n if (components.uiEnabled) {\r\n this.setUI();\r\n }\r\n this.enabled = false;\r\n this.components.ui.viewerContainer.append(this._viewport);\r\n this.setupEvents(true);\r\n }\r\n async setup(config) {\r\n this.config = { ...this.config, ...config };\r\n this.isSetup = true;\r\n await this.onSetup.trigger(this);\r\n }\r\n async dispose() {\r\n this._undoList = [];\r\n await this.uiElement.dispose();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n get() {\r\n return this._viewport;\r\n }\r\n clear() {\r\n const viewport = this.get();\r\n this._undoList = [];\r\n while (viewport.firstChild) {\r\n viewport.removeChild(viewport.firstChild);\r\n }\r\n }\r\n getDrawing() {\r\n return this.get().childNodes;\r\n }\r\n /** {@link Resizeable.resize}. */\r\n resize() {\r\n const renderer = this.components.renderer;\r\n const rendererSize = renderer.getSize();\r\n const width = this.enabled ? rendererSize.x : 0;\r\n const height = this.enabled ? rendererSize.y : 0;\r\n this._size.set(width, height);\r\n }\r\n /** {@link Resizeable.getSize}. */\r\n getSize() {\r\n return this._size;\r\n }\r\n setupEvents(active) {\r\n if (active) {\r\n window.addEventListener(\"resize\", this.onResize);\r\n }\r\n else {\r\n window.removeEventListener(\"resize\", this.onResize);\r\n }\r\n }\r\n setUI() {\r\n const undoDrawingBtn = new Button(this.components, {\r\n materialIconName: \"undo\",\r\n });\r\n undoDrawingBtn.onClick.add(() => {\r\n if (this._viewport.lastChild) {\r\n this._undoList.push(this._viewport.lastChild);\r\n this._viewport.lastChild.remove();\r\n }\r\n });\r\n const redoDrawingBtn = new Button(this.components, {\r\n materialIconName: \"redo\",\r\n });\r\n redoDrawingBtn.onClick.add(() => {\r\n const childNode = this._undoList[this._undoList.length - 1];\r\n if (childNode) {\r\n this._undoList.pop();\r\n this._viewport.append(childNode);\r\n }\r\n });\r\n const clearDrawingBtn = new Button(this.components, {\r\n materialIconName: \"delete\",\r\n });\r\n clearDrawingBtn.onClick.add(() => this.clear());\r\n // #region Settings window\r\n const settingsWindow = new FloatingWindow(this.components, this.id);\r\n settingsWindow.title = \"Drawing Settings\";\r\n settingsWindow.visible = false;\r\n this.components.ui.add(settingsWindow);\r\n const strokeWidth = new RangeInput(this.components);\r\n strokeWidth.label = \"Stroke Width\";\r\n strokeWidth.min = 2;\r\n strokeWidth.max = 6;\r\n strokeWidth.value = 4;\r\n strokeWidth.onChange.add((value) => {\r\n this.config.strokeWidth = value;\r\n });\r\n const strokeColorInput = new ColorInput(this.components);\r\n strokeColorInput.label = \"Stroke Color\";\r\n strokeColorInput.value = this.config.strokeColor;\r\n strokeColorInput.onChange.add((value) => {\r\n this.config.strokeColor = value;\r\n });\r\n const fillColorInput = new ColorInput(this.components);\r\n fillColorInput.label = \"Fill Color\";\r\n fillColorInput.value = this.config.fillColor;\r\n fillColorInput.onChange.add((value) => {\r\n this.config.fillColor = value;\r\n });\r\n settingsWindow.addChild(strokeColorInput, fillColorInput, strokeWidth);\r\n const settingsBtn = new Button(this.components, {\r\n materialIconName: \"settings\",\r\n });\r\n settingsBtn.onClick.add(() => {\r\n settingsWindow.visible = !settingsWindow.visible;\r\n settingsBtn.active = settingsWindow.visible;\r\n });\r\n settingsWindow.onHidden.add(() => (settingsBtn.active = false));\r\n const toolbar = new Toolbar(this.components, { position: \"top\" });\r\n toolbar.addChild(settingsBtn, undoDrawingBtn, redoDrawingBtn, clearDrawingBtn);\r\n this.uiElement.set({ toolbar, settingsWindow });\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport ToolBufferReader from \"top-tool-package-reader\";\r\nimport { Component, Event } from \"../../base-types\";\r\n/**\r\n * An object to easily handle all the tools used (e.g. updating them, retrieving\r\n * them, performing batch operations, etc). A tool is a feature that achieves\r\n * something through user interaction (e.g. clipping planes, dimensions, etc).\r\n */\r\nexport class ToolComponent extends Component {\r\n constructor() {\r\n super(...arguments);\r\n /** The list of components created in this app. */\r\n this.list = {};\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n /** The auth token to get tools from That Open Platform. */\r\n this.token = \"\";\r\n /** {@link Component.uuid} */\r\n this.uuid = \"ToolComponent\";\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n this._reader = new ToolBufferReader();\r\n this._urls = {\r\n base: \"https://api.platform.thatopen.com/v1/tools/\",\r\n baseDev: \"https://dev.api.dev.platform.thatopen.com/v1/tools/\",\r\n path: \"/download?accessToken=\",\r\n };\r\n this.onToolAdded = new Event();\r\n this._uuidv4Pattern = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/;\r\n }\r\n /** Pass the whole library object as argument.\r\n * @param ORB: `import * as OBC from \"openbim-components\"`.\r\n */\r\n init(OBC) {\r\n this._OBC = OBC;\r\n }\r\n /**\r\n * Adds a new tool. Use this in the constructor of your tools.\r\n *\r\n * @param uuid The UUID of your tool.\r\n * @param instance The instance of your tool (`this` inside the constructor).\r\n */\r\n add(uuid, instance) {\r\n if (uuid in this.list)\r\n throw new Error(`You're trying to add a tool that already exists in the components intance. Use ToolsComponent.get() instead.`);\r\n this.validateUUID(uuid);\r\n this.list[uuid] = instance;\r\n this.onToolAdded.trigger(instance);\r\n }\r\n /**\r\n * Retrieves a tool component. If it already exists in this app, it returns the instance of the component. If it\r\n * doesn't exist, it will instance it automatically.\r\n *\r\n * @param ToolClass - The component to get or create.\r\n */\r\n get(ToolClass) {\r\n const uuid = ToolClass.uuid;\r\n if (!(uuid in this.list)) {\r\n const toolInstance = new ToolClass(this.components);\r\n // If true, means the tool is not autoregistered.\r\n if (!(uuid in this.list)) {\r\n this.add(uuid, toolInstance);\r\n }\r\n return toolInstance;\r\n }\r\n return this.list[uuid];\r\n }\r\n /**\r\n * Updates all the registered tool components. Only the components where the\r\n * property {@link Component.enabled} is true will be updated.\r\n * @param delta - The\r\n * [delta time](https://threejs.org/docs/#api/en/core/Clock) of the loop.\r\n */\r\n async update(delta) {\r\n for (const uuid in this.list) {\r\n const tool = this.list[uuid];\r\n if (tool.enabled && tool.isUpdateable()) {\r\n await tool.update(delta);\r\n }\r\n }\r\n }\r\n /**\r\n * Disposes all the MEMORY used by all the tools.\r\n */\r\n async dispose() {\r\n for (const uuid in this.list) {\r\n const tool = this.list[uuid];\r\n tool.enabled = false;\r\n if (tool.isDisposeable()) {\r\n await tool.dispose();\r\n }\r\n }\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n validateUUID(uuid) {\r\n if (!this._uuidv4Pattern.test(uuid))\r\n throw new Error(`${uuid} is not a valid UUID v4.\r\n\r\n- If you're the tool creator, you can take one from https://www.uuidgenerator.net/.\r\n\r\n- If you're using a platform tool, verify the uuid isn't misspelled or contact the tool creator.`);\r\n }\r\n async getPlatformComponent(id) {\r\n if (!this._OBC) {\r\n console.log(\"Tools component not initialized! Call the init method.\");\r\n }\r\n this.validateUUID(id);\r\n const { base, baseDev, path } = this._urls;\r\n const currentUrl = window.location.href;\r\n const devPattern = /(https:\\/\\/qa.)|(localhost)/;\r\n const isDev = currentUrl.match(devPattern);\r\n const baseUrl = isDev ? baseDev : base;\r\n const url = baseUrl + id + path + this.token;\r\n const fetched = await fetch(url);\r\n const rawBuffer = await fetched.arrayBuffer();\r\n const buffer = new Uint8Array(rawBuffer);\r\n const code = this._reader.read(buffer);\r\n const script = document.createElement(\"script\");\r\n script.textContent = code.js;\r\n document.body.appendChild(script);\r\n const win = window;\r\n if (!win.ThatOpenTool) {\r\n throw new Error(`There was a problem fetching the tool ${id}.`);\r\n }\r\n const ToolClass = win.ThatOpenTool(this._OBC, THREE);\r\n win.ThatOpenTool = undefined;\r\n script.remove();\r\n return new ToolClass(this.components);\r\n }\r\n}\r\n/** The list of UUIDs of all the components in this library. */\r\nToolComponent.libraryUUIDs = new Set();\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { Component, Event } from \"../../base-types\";\r\nimport { Disposer } from \"../Disposer\";\r\n/**\r\n * A basic 3D [scene](https://threejs.org/docs/#api/en/scenes/Scene) to add\r\n * objects hierarchically, and easily dispose them when you are finished with it.\r\n * @noInheritDoc\r\n */\r\nexport class SimpleScene extends Component {\r\n constructor(components) {\r\n super(components);\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n /** {@link Configurable.isSetup} */\r\n this.isSetup = false;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.config = {\r\n directionalLight: {\r\n color: new THREE.Color(\"white\"),\r\n intensity: 1.5,\r\n position: new THREE.Vector3(5, 10, 3),\r\n },\r\n ambientLight: {\r\n color: new THREE.Color(\"white\"),\r\n intensity: 1,\r\n },\r\n };\r\n this.onSetup = new Event();\r\n this._scene = new THREE.Scene();\r\n this._scene.background = new THREE.Color(0x202932);\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._scene;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n const disposer = this.components.tools.get(Disposer);\r\n for (const child of this._scene.children) {\r\n const mesh = child;\r\n if (mesh.geometry) {\r\n disposer.destroy(mesh);\r\n }\r\n }\r\n this._scene.children = [];\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n /** Creates a simple and nice default set up for the scene (e.g. lighting). */\r\n async setup(config) {\r\n this.config = { ...this.config, ...config };\r\n const directionalLight = new THREE.DirectionalLight(this.config.directionalLight.color, this.config.directionalLight.intensity);\r\n directionalLight.position.copy(this.config.directionalLight.position);\r\n const ambientLight = new THREE.AmbientLight(this.config.ambientLight.color, this.config.ambientLight.intensity);\r\n this._scene.add(directionalLight, ambientLight);\r\n this.isSetup = true;\r\n this.onSetup.trigger(this);\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map","import * as THREE from \"three\";\r\nimport { Mouse, Event } from \"../../base-types\";\r\nimport { BaseRaycaster } from \"../../base-types/base-raycaster\";\r\n/**\r\n * A simple [raycaster](https://threejs.org/docs/#api/en/core/Raycaster)\r\n * that allows to easily get items from the scene using the mouse and touch\r\n * events.\r\n */\r\nexport class SimpleRaycaster extends BaseRaycaster {\r\n constructor(components) {\r\n super(components);\r\n /** {@link Component.enabled} */\r\n this.enabled = true;\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this._raycaster = new THREE.Raycaster();\r\n const renderer = components.renderer.get();\r\n const dom = renderer.domElement;\r\n this.mouse = new Mouse(dom);\r\n }\r\n /** {@link Component.get} */\r\n get() {\r\n return this._raycaster;\r\n }\r\n /** {@link Disposable.dispose} */\r\n async dispose() {\r\n this.mouse.dispose();\r\n await this.onDisposed.trigger();\r\n this.onDisposed.reset();\r\n }\r\n /**\r\n * Throws a ray from the camera to the mouse or touch event point and returns\r\n * the first item found. This also takes into account the clipping planes\r\n * used by the renderer.\r\n *\r\n * @param items - the [meshes](https://threejs.org/docs/#api/en/objects/Mesh)\r\n * to query. If not provided, it will query all the meshes stored in\r\n * {@link Components.meshes}.\r\n */\r\n castRay(items = Array.from(this.components.meshes)) {\r\n const camera = this.components.camera.get();\r\n this._raycaster.setFromCamera(this.mouse.position, camera);\r\n return this.intersect(items);\r\n }\r\n castRayFromVector(origin, direction, items = Array.from(this.components.meshes)) {\r\n this._raycaster.set(origin, direction);\r\n return this.intersect(items);\r\n }\r\n intersect(items = Array.from(this.components.meshes)) {\r\n const result = this._raycaster.intersectObjects(items);\r\n const filtered = this.filterClippingPlanes(result);\r\n return filtered.length > 0 ? filtered[0] : null;\r\n }\r\n filterClippingPlanes(objs) {\r\n const renderer = this.components.renderer;\r\n if (!renderer.clippingPlanes) {\r\n return objs;\r\n }\r\n const planes = renderer.clippingPlanes;\r\n if (objs.length <= 0 || !planes || planes?.length <= 0)\r\n return objs;\r\n return objs.filter((elem) => planes.every((elem2) => elem2.distanceToPoint(elem.point) > 0));\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map"],"names":["SimpleRenderer","constructor","components","container","parameters","super","this","enabled","onDisposed","onBeforeUpdate","onAfterUpdate","_renderer2D","resize","size","updateContainer","width","x","clientWidth","height","y","clientHeight","_renderer","setSize","onResize","trigger","resizeEvent","onContextLost","event","preventDefault","onContextBack","setRenderTarget","dispose","canvas","_canvas","antialias","alpha","_parameters","setPixelRatio","Math","min","window","devicePixelRatio","setupRenderers","setupEvents","domElement","context","getContext","addEventListener","get","update","scene","overrideScene","camera","overrideCamera","render","remove","reset","getSize","active","removeEventListener","localClippingEnabled","style","position","top","pointerEvents","appendChild","parent","parentElement","SimpleSVGViewport","_enabled","value","_undoList","uiEnabled","uiElement","visible","_viewport","classList","clear","add","isSetup","id","toLowerCase","document","createElementNS","_size","Vector2","config","fillColor","strokeColor","strokeWidth","onSetup","setAttribute","setUI","ui","viewerContainer","append","setup","viewport","firstChild","removeChild","getDrawing","childNodes","rendererSize","renderer","set","undoDrawingBtn","materialIconName","onClick","lastChild","push","redoDrawingBtn","childNode","length","pop","clearDrawingBtn","settingsWindow","title","label","max","onChange","strokeColorInput","fillColorInput","addChild","settingsBtn","onHidden","toolbar","ToolComponent","arguments","list","token","uuid","_reader","_urls","base","baseDev","path","onToolAdded","_uuidv4Pattern","init","OBC","_OBC","instance","Error","validateUUID","ToolClass","toolInstance","delta","tool","isUpdateable","isDisposeable","test","getPlatformComponent","console","log","url","location","href","match","fetched","fetch","rawBuffer","arrayBuffer","buffer","Uint8Array","code","read","script","createElement","textContent","js","body","win","ThatOpenTool","undefined","libraryUUIDs","Set","SimpleScene","directionalLight","color","intensity","ambientLight","_scene","background","disposer","tools","Disposer","child","children","mesh","geometry","destroy","copy","SimpleRaycaster","_raycaster","dom","mouse","castRay","items","Array","from","meshes","setFromCamera","intersect","castRayFromVector","origin","direction","result","intersectObjects","filtered","filterClippingPlanes","objs","clippingPlanes","planes","filter","elem","every","elem2","distanceToPoint","point"],"sourceRoot":""}