{"version":3,"file":"vendor.openbim-components-3c1ae515.ec30a3fa6fc87565.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 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 await this.onSetup.trigger(this);\r\n }\r\n async dispose() {\r\n this._undoList = [];\r\n 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 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: 0.6,\r\n position: new THREE.Vector3(5, 10, 3),\r\n },\r\n ambientLight: {\r\n color: new THREE.Color(\"white\"),\r\n intensity: 0.5,\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.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 = 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 = this.components.meshes) {\r\n this._raycaster.set(origin, direction);\r\n return this.intersect(items);\r\n }\r\n intersect(items = 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 === null || planes === void 0 ? void 0 : 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","async","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","id","toLowerCase","document","createElementNS","_size","Vector2","config","fillColor","strokeColor","strokeWidth","onSetup","setAttribute","setUI","ui","viewerContainer","append","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","update","isDisposeable","test","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","meshes","setFromCamera","intersect","castRayFromVector","origin","direction","result","intersectObjects","filtered","filterClippingPlanes","objs","clippingPlanes","planes","filter","elem","every","elem2","distanceToPoint","point"],"sourceRoot":""}