{"version":3,"file":"vendor.openbim-components-e604431e.d8b2b191bb22339c.bundle.js","mappings":"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","sources":["webpack://client-app/./node_modules/openbim-components/src/ifc/IfcPropertiesProcessor/src/property-tag.js","webpack://client-app/./node_modules/openbim-components/src/ifc/IfcPropertiesProcessor/src/attribute-tag.js","webpack://client-app/./node_modules/openbim-components/src/ifc/IfcPropertiesProcessor/src/attribute-set.js","webpack://client-app/./node_modules/openbim-components/src/ifc/IfcPropertiesProcessor/index.js","webpack://client-app/./node_modules/openbim-components/src/ifc/IfcPropertiesUtils/index.js"],"sourcesContent":["import { SimpleUIComponent } from \"../../../ui/SimpleUIComponent\";\r\nimport { UIManager } from \"../../../ui/UIManager\";\r\nimport { IfcPropertiesUtils } from \"../../IfcPropertiesUtils\";\r\nimport { IfcPropertiesManager } from \"../../IfcPropertiesManager\";\r\nexport class PropertyTag extends SimpleUIComponent {\r\n get label() {\r\n return this.innerElements.label.textContent;\r\n }\r\n set label(value) {\r\n this.innerElements.label.textContent = value;\r\n }\r\n get value() {\r\n return this.innerElements.value.textContent;\r\n }\r\n set value(value) {\r\n this.innerElements.value.textContent = String(value);\r\n }\r\n constructor(components, propertiesProcessor, model, expressID) {\r\n const template = `\r\n
\r\n
\r\n

\r\n

\r\n
\r\n
\r\n `;\r\n super(components, template);\r\n this.name = \"PropertyTag\";\r\n this.expressID = 0;\r\n this.innerElements = {\r\n label: this.getInnerElement(\"label\"),\r\n value: this.getInnerElement(\"value\"),\r\n };\r\n this.model = model;\r\n this.expressID = expressID;\r\n this._propertiesProcessor = propertiesProcessor;\r\n this.setInitialValues();\r\n this.setListeners();\r\n }\r\n async dispose(onlyChildren = false) {\r\n await super.dispose(onlyChildren);\r\n this.model = null;\r\n this._propertiesProcessor = null;\r\n if (Object.keys(this.innerElements).length) {\r\n this.innerElements.value.remove();\r\n this.innerElements.label.remove();\r\n }\r\n }\r\n setListeners() {\r\n const propertiesManager = this._propertiesProcessor.propertiesManager;\r\n if (!propertiesManager)\r\n return;\r\n const { properties } = IfcPropertiesManager.getIFCInfo(this.model);\r\n const { key: nameKey } = IfcPropertiesUtils.getEntityName(properties, this.expressID);\r\n const { key: valueKey } = IfcPropertiesUtils.getQuantityValue(properties, this.expressID);\r\n if (nameKey) {\r\n const event = propertiesManager.setAttributeListener(this.model, this.expressID, nameKey);\r\n event.add((v) => (this.label = v.toString()));\r\n }\r\n if (valueKey) {\r\n const event = propertiesManager.setAttributeListener(this.model, this.expressID, valueKey);\r\n event.add((v) => (this.value = v));\r\n }\r\n }\r\n setInitialValues() {\r\n const { properties } = IfcPropertiesManager.getIFCInfo(this.model);\r\n const entity = properties[this.expressID];\r\n if (!entity) {\r\n this.label = \"NULL\";\r\n this.value = `ExpressID ${this.expressID} not found`;\r\n }\r\n else {\r\n const { name } = IfcPropertiesUtils.getEntityName(properties, this.expressID);\r\n const { value } = IfcPropertiesUtils.getQuantityValue(properties, this.expressID);\r\n this.label = name;\r\n this.value = value;\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=property-tag.js.map","import { PropertyTag } from \"./property-tag\";\r\nexport class AttributeTag extends PropertyTag {\r\n constructor(components, propertiesProcessor, model, expressID, attributeName = \"Name\") {\r\n super(components, propertiesProcessor, model, expressID);\r\n this.name = \"AttributeTag\";\r\n this.expressID = 0;\r\n this.model = model;\r\n this.expressID = expressID;\r\n this.attributeName = attributeName;\r\n this._propertiesProcessor = propertiesProcessor;\r\n this.setInitialValues();\r\n this.setListeners();\r\n }\r\n async dispose(onlyChildren = false) {\r\n await super.dispose(onlyChildren);\r\n this.model = null;\r\n }\r\n setListeners() {\r\n const propertiesManager = this._propertiesProcessor.propertiesManager;\r\n if (!propertiesManager)\r\n return;\r\n try {\r\n const event = propertiesManager.setAttributeListener(this.model, this.expressID, this.attributeName);\r\n event.add((v) => (this.value = v));\r\n }\r\n catch (err) {\r\n // console.log(err);\r\n }\r\n }\r\n setInitialValues() {\r\n const properties = this.model.properties;\r\n if (!properties) {\r\n this.label = `Model ${this.model.ifcMetadata.name} has no properties`;\r\n this.value = \"NULL\";\r\n return;\r\n }\r\n const entity = properties[this.expressID];\r\n if (!entity) {\r\n this.label = `ExpressID ${this.expressID} not found`;\r\n this.value = \"NULL\";\r\n return;\r\n }\r\n const attributes = Object.keys(entity);\r\n if (!attributes.includes(this.attributeName)) {\r\n this.label = `Attribute ${this.attributeName} not found`;\r\n this.value = \"NULL\";\r\n return;\r\n }\r\n if (!entity[this.attributeName])\r\n return;\r\n this.label = this.attributeName;\r\n this.value = entity[this.attributeName].value;\r\n }\r\n}\r\n//# sourceMappingURL=attribute-tag.js.map","import { TreeView } from \"../../../ui\";\r\nimport { AttributeTag } from \"./attribute-tag\";\r\nexport class AttributeSet extends TreeView {\r\n set expressID(value) {\r\n this._expressID = value;\r\n this._attributes = [];\r\n this.slots.content.dispose(true);\r\n }\r\n get expressID() {\r\n return this._expressID;\r\n }\r\n constructor(components, propertiesProcessor, model, expressID) {\r\n super(components, \"ATTRIBUTES\");\r\n this.name = \"AttributeSet\";\r\n this.attributesToIgnore = [];\r\n this._expressID = 0;\r\n this._attributes = [];\r\n this._generated = false;\r\n this.model = model;\r\n this.expressID = expressID;\r\n this._propertiesProcessor = propertiesProcessor;\r\n this.onExpand.add(() => this.generate());\r\n }\r\n async dispose(onlyChildren = false) {\r\n await super.dispose(onlyChildren);\r\n this.model = null;\r\n this.attributesToIgnore = [];\r\n this._attributes = [];\r\n this._propertiesProcessor = null;\r\n }\r\n generate() {\r\n const properties = this.model.properties;\r\n if (this._generated || !properties)\r\n return;\r\n this.update();\r\n this._generated = true;\r\n }\r\n update() {\r\n const properties = this.model.properties;\r\n if (!properties)\r\n return;\r\n const entity = properties[this.expressID];\r\n if (!entity)\r\n return;\r\n for (const attributeName in entity) {\r\n const ignore = this.attributesToIgnore.includes(attributeName);\r\n if (ignore)\r\n continue;\r\n const included = this._attributes.includes(attributeName);\r\n if (included) {\r\n // const tag = this.slots.content.children.find((child) => {\r\n // if (!(child instanceof AttributeTag)) return false;\r\n // return child.attributeName === attributeName;\r\n // }) as AttributeTag;\r\n // tag?.update();\r\n }\r\n else {\r\n const attribute = entity[attributeName];\r\n if (!(attribute === null || attribute === void 0 ? void 0 : attribute.value))\r\n continue; // in case there is an attribute without handle\r\n this._attributes.push(attributeName);\r\n const tag = new AttributeTag(this._components, this._propertiesProcessor, this.model, this.expressID, attributeName);\r\n this.addChild(tag);\r\n }\r\n }\r\n }\r\n}\r\n//# sourceMappingURL=attribute-set.js.map","import * as WEBIFC from \"web-ifc\";\r\nimport { IfcPropertiesUtils } from \"../IfcPropertiesUtils\";\r\nimport { Button, FloatingWindow, SimpleUIComponent, TreeView } from \"../../ui\";\r\nimport { Event, UIElement, Component } from \"../../base-types\";\r\nimport { ToolComponent } from \"../../core\";\r\nimport { IfcPropertiesManager } from \"../IfcPropertiesManager\";\r\nimport { IfcCategoryMap } from \"../ifc-category-map\";\r\nimport { AttributeSet, PropertyTag } from \"./src\";\r\nimport { FragmentManager } from \"../../fragments/FragmentManager\";\r\nexport * from \"./src\";\r\nexport class IfcPropertiesProcessor extends Component {\r\n // private _entityUIPool: UIPool;\r\n set propertiesManager(manager) {\r\n if (this._propertiesManager)\r\n return;\r\n this._propertiesManager = manager;\r\n if (manager) {\r\n manager.onElementToPset.add(({ model, psetID, elementID }) => {\r\n const modelIndexMap = this._indexMap[model.uuid];\r\n if (!modelIndexMap)\r\n return;\r\n this.setEntityIndex(model, elementID).add(psetID);\r\n if (this._currentUI[elementID]) {\r\n const ui = this.newPsetUI(model, psetID);\r\n this._currentUI[elementID].addChild(...ui);\r\n }\r\n });\r\n manager.onPsetRemoved.add(async ({ psetID }) => {\r\n const psetUI = this._currentUI[psetID];\r\n if (psetUI) {\r\n await psetUI.dispose();\r\n }\r\n });\r\n manager.onPropToPset.add(({ model, psetID, propID }) => {\r\n const psetUI = this._currentUI[psetID];\r\n if (!psetUI)\r\n return;\r\n const tag = this.newPropertyTag(model, psetID, propID, \"NominalValue\");\r\n if (tag)\r\n psetUI.addChild(tag);\r\n });\r\n this.onPropertiesManagerSet.trigger(manager);\r\n }\r\n }\r\n get propertiesManager() {\r\n return this._propertiesManager;\r\n }\r\n constructor(components) {\r\n super(components);\r\n /** {@link Disposable.onDisposed} */\r\n this.onDisposed = new Event();\r\n this.enabled = true;\r\n this.uiElement = new UIElement();\r\n this.relationsToProcess = [\r\n WEBIFC.IFCRELDEFINESBYPROPERTIES,\r\n WEBIFC.IFCRELDEFINESBYTYPE,\r\n WEBIFC.IFCRELASSOCIATESMATERIAL,\r\n WEBIFC.IFCRELCONTAINEDINSPATIALSTRUCTURE,\r\n WEBIFC.IFCRELASSOCIATESCLASSIFICATION,\r\n WEBIFC.IFCRELASSIGNSTOGROUP,\r\n ];\r\n this.entitiesToIgnore = [WEBIFC.IFCOWNERHISTORY, WEBIFC.IFCMATERIALLAYERSETUSAGE];\r\n this.attributesToIgnore = [\r\n \"CompositionType\",\r\n \"Representation\",\r\n \"ObjectPlacement\",\r\n \"OwnerHistory\",\r\n ];\r\n this._indexMap = {};\r\n this._renderFunctions = {};\r\n this._propertiesManager = null;\r\n this._currentUI = {};\r\n this.onPropertiesManagerSet = new Event();\r\n this.onFragmentsDisposed = (data) => {\r\n delete this._indexMap[data.groupID];\r\n };\r\n this.components.tools.add(IfcPropertiesProcessor.uuid, this);\r\n // this._entityUIPool = new UIPool(this._components, TreeView);\r\n this._renderFunctions = this.getRenderFunctions();\r\n const fragmentManager = components.tools.get(FragmentManager);\r\n fragmentManager.onFragmentsDisposed.add(this.onFragmentsDisposed);\r\n if (components.uiEnabled) {\r\n this.setUI();\r\n }\r\n }\r\n getRenderFunctions() {\r\n return {\r\n 0: (model, expressID) => this.newEntityUI(model, expressID),\r\n [WEBIFC.IFCPROPERTYSET]: (model, expressID) => this.newPsetUI(model, expressID),\r\n [WEBIFC.IFCELEMENTQUANTITY]: (model, expressID) => this.newQsetUI(model, expressID),\r\n };\r\n }\r\n async dispose() {\r\n this.uiElement.dispose();\r\n this._indexMap = {};\r\n this.propertiesManager = null;\r\n for (const id in this._currentUI) {\r\n await this._currentUI[id].dispose();\r\n }\r\n this._currentUI = {};\r\n this.onPropertiesManagerSet.reset();\r\n const fragmentManager = this.components.tools.get(FragmentManager);\r\n fragmentManager.onFragmentsDisposed.remove(this.onFragmentsDisposed);\r\n await this.onDisposed.trigger(IfcPropertiesProcessor.uuid);\r\n this.onDisposed.reset();\r\n }\r\n getProperties(model, id) {\r\n if (!model.properties)\r\n return null;\r\n const map = this._indexMap[model.uuid];\r\n if (!map)\r\n return null;\r\n const indices = map[id];\r\n const idNumber = parseInt(id, 10);\r\n const nativeProperties = this.cloneProperty(model.properties[idNumber]);\r\n const properties = [nativeProperties];\r\n if (indices) {\r\n for (const index of indices) {\r\n const pset = this.cloneProperty(model.properties[index]);\r\n if (!pset)\r\n continue;\r\n this.getPsetProperties(pset, model.properties);\r\n this.getNestedPsets(pset, model.properties);\r\n properties.push(pset);\r\n }\r\n }\r\n return properties;\r\n }\r\n getNestedPsets(pset, props) {\r\n if (pset.HasPropertySets) {\r\n for (const subPSet of pset.HasPropertySets) {\r\n const psetID = subPSet.value;\r\n subPSet.value = this.cloneProperty(props[psetID]);\r\n this.getPsetProperties(subPSet.value, props);\r\n }\r\n }\r\n }\r\n getPsetProperties(pset, props) {\r\n if (pset.HasProperties) {\r\n for (const property of pset.HasProperties) {\r\n const psetID = property.value;\r\n const result = this.cloneProperty(props[psetID]);\r\n property.value = { ...result };\r\n }\r\n }\r\n }\r\n setUI() {\r\n const topToolbar = new SimpleUIComponent(this.components);\r\n const propsList = new SimpleUIComponent(this.components, `
`);\r\n const main = new Button(this.components, {\r\n materialIconName: \"list\",\r\n });\r\n const propertiesWindow = new FloatingWindow(this.components);\r\n this.components.ui.add(propertiesWindow);\r\n propertiesWindow.title = \"Element Properties\";\r\n propertiesWindow.addChild(topToolbar, propsList);\r\n main.tooltip = \"Properties\";\r\n main.onClick.add(() => {\r\n propertiesWindow.visible = !propertiesWindow.visible;\r\n });\r\n propertiesWindow.onHidden.add(() => (main.active = false));\r\n propertiesWindow.onVisible.add(() => (main.active = true));\r\n propertiesWindow.visible = false;\r\n this.uiElement.set({\r\n main,\r\n propertiesWindow,\r\n propsList,\r\n topToolbar,\r\n });\r\n }\r\n async cleanPropertiesList() {\r\n this._currentUI = {};\r\n if (this.components.uiEnabled) {\r\n if (this._propertiesManager) {\r\n const button = this._propertiesManager.uiElement.get(\"exportButton\");\r\n button.removeFromParent();\r\n }\r\n const propsList = this.uiElement.get(\"propsList\");\r\n await propsList.dispose(true);\r\n const propsWindow = this.uiElement.get(\"propertiesWindow\");\r\n propsWindow.description = null;\r\n propsList.children = [];\r\n }\r\n // for (const child of this._propsList.children) {\r\n // if (child instanceof TreeView) {\r\n // this._entityUIPool.return(child);\r\n // continue;\r\n // }\r\n // child.dispose();\r\n // }\r\n }\r\n get() {\r\n return this._indexMap;\r\n }\r\n process(model) {\r\n const properties = model.properties;\r\n if (!properties)\r\n throw new Error(\"FragmentsGroup properties not found\");\r\n this._indexMap[model.uuid] = {};\r\n // const relations: number[] = [];\r\n // for (const typeID in IfcCategoryMap) {\r\n // const name = IfcCategoryMap[typeID];\r\n // if (name.startsWith(\"IFCREL\")) relations.push(Number(typeID));\r\n // }\r\n const setEntities = [WEBIFC.IFCPROPERTYSET, WEBIFC.IFCELEMENTQUANTITY];\r\n for (const relation of this.relationsToProcess) {\r\n IfcPropertiesUtils.getRelationMap(properties, relation, (relationID, relatedIDs) => {\r\n const relationEntity = properties[relationID];\r\n if (!setEntities.includes(relationEntity.type))\r\n this.setEntityIndex(model, relationID);\r\n for (const expressID of relatedIDs) {\r\n this.setEntityIndex(model, expressID).add(relationID);\r\n }\r\n });\r\n }\r\n }\r\n async renderProperties(model, expressID) {\r\n if (!this.components.uiEnabled)\r\n return;\r\n await this.cleanPropertiesList();\r\n const topToolbar = this.uiElement.get(\"topToolbar\");\r\n const propsList = this.uiElement.get(\"propsList\");\r\n const propsWindow = this.uiElement.get(\"propertiesWindow\");\r\n const ui = this.newEntityUI(model, expressID);\r\n if (!ui)\r\n return;\r\n if (this._propertiesManager) {\r\n this._propertiesManager.selectedModel = model;\r\n const exporter = this._propertiesManager.uiElement.get(\"exportButton\");\r\n topToolbar.addChild(exporter);\r\n }\r\n const { properties } = IfcPropertiesManager.getIFCInfo(model);\r\n const { name } = IfcPropertiesUtils.getEntityName(properties, expressID);\r\n propsWindow.description = name;\r\n propsList.addChild(...[ui].flat());\r\n }\r\n newEntityUI(model, expressID) {\r\n const properties = model.properties;\r\n if (!properties)\r\n throw new Error(\"FragmentsGroup properties not found.\");\r\n const modelElementsIndexation = this._indexMap[model.uuid];\r\n if (!modelElementsIndexation)\r\n return null;\r\n const entity = properties[expressID];\r\n const ignorable = this.entitiesToIgnore.includes(entity === null || entity === void 0 ? void 0 : entity.type);\r\n if (!entity || ignorable)\r\n return null;\r\n if (entity.type === WEBIFC.IFCPROPERTYSET)\r\n return this.newPsetUI(model, expressID);\r\n const mainGroup = this.newEntityTree(model, expressID);\r\n if (!mainGroup)\r\n return null;\r\n this.addEntityActions(model, expressID, mainGroup);\r\n mainGroup.onExpand.add(() => {\r\n var _a, _b;\r\n const { uiProcessed } = mainGroup.data;\r\n if (uiProcessed)\r\n return;\r\n mainGroup.addChild(...this.newAttributesUI(model, expressID));\r\n const elementPropsIndexation = (_a = modelElementsIndexation[expressID]) !== null && _a !== void 0 ? _a : [];\r\n for (const id of elementPropsIndexation) {\r\n const entity = properties[id];\r\n if (!entity)\r\n continue;\r\n const renderFunction = (_b = this._renderFunctions[entity.type]) !== null && _b !== void 0 ? _b : this._renderFunctions[0];\r\n const ui = modelElementsIndexation[id]\r\n ? this.newEntityUI(model, id)\r\n : renderFunction(model, id);\r\n if (!ui)\r\n continue;\r\n mainGroup.addChild(...[ui].flat());\r\n }\r\n mainGroup.data.uiProcessed = true;\r\n });\r\n return mainGroup;\r\n }\r\n setEntityIndex(model, expressID) {\r\n if (!this._indexMap[model.uuid][expressID])\r\n this._indexMap[model.uuid][expressID] = new Set();\r\n return this._indexMap[model.uuid][expressID];\r\n }\r\n newAttributesUI(model, expressID) {\r\n const { properties } = IfcPropertiesManager.getIFCInfo(model);\r\n if (!properties)\r\n return [];\r\n const attributesGroup = new AttributeSet(this.components, this, model, expressID);\r\n attributesGroup.attributesToIgnore = this.attributesToIgnore;\r\n return [attributesGroup];\r\n }\r\n newPsetUI(model, psetID) {\r\n const { properties } = IfcPropertiesManager.getIFCInfo(model);\r\n const uiGroups = [];\r\n const pset = properties[psetID];\r\n if (pset.type !== WEBIFC.IFCPROPERTYSET)\r\n return uiGroups;\r\n const uiGroup = this.newEntityTree(model, psetID);\r\n if (!uiGroup)\r\n return uiGroups;\r\n this.addPsetActions(model, psetID, uiGroup);\r\n uiGroup.onExpand.add(() => {\r\n const { uiProcessed } = uiGroup.data;\r\n if (uiProcessed)\r\n return;\r\n const psetPropsID = IfcPropertiesUtils.getPsetProps(properties, psetID, (propID) => {\r\n const prop = properties[propID];\r\n if (!prop)\r\n return;\r\n const tag = this.newPropertyTag(model, psetID, propID, \"NominalValue\");\r\n if (tag)\r\n uiGroup.addChild(tag);\r\n });\r\n if (!psetPropsID || psetPropsID.length === 0) {\r\n const template = `\r\n

\r\n This pset has no properties.\r\n

\r\n `;\r\n const notFoundText = new SimpleUIComponent(this.components, template);\r\n uiGroup.addChild(notFoundText);\r\n }\r\n uiGroup.data.uiProcessed = true;\r\n });\r\n uiGroups.push(uiGroup);\r\n return uiGroups;\r\n }\r\n newQsetUI(model, qsetID) {\r\n const { properties } = IfcPropertiesManager.getIFCInfo(model);\r\n const uiGroups = [];\r\n const qset = properties[qsetID];\r\n if (qset.type !== WEBIFC.IFCELEMENTQUANTITY)\r\n return uiGroups;\r\n const uiGroup = this.newEntityTree(model, qsetID);\r\n if (!uiGroup)\r\n return uiGroups;\r\n this.addPsetActions(model, qsetID, uiGroup);\r\n IfcPropertiesUtils.getQsetQuantities(properties, qsetID, (quantityID) => {\r\n const { key } = IfcPropertiesUtils.getQuantityValue(properties, quantityID);\r\n if (!key)\r\n return;\r\n const tag = this.newPropertyTag(model, qsetID, quantityID, key);\r\n if (tag)\r\n uiGroup.addChild(tag);\r\n });\r\n uiGroups.push(uiGroup);\r\n return uiGroups;\r\n }\r\n addPsetActions(model, psetID, uiGroup) {\r\n if (!this.propertiesManager)\r\n return;\r\n const propsUI = this.propertiesManager.uiElement;\r\n const psetActions = propsUI.get(\"psetActions\");\r\n const event = this.propertiesManager.setAttributeListener(model, psetID, \"Name\");\r\n event.add((v) => (uiGroup.description = v.toString()));\r\n uiGroup.innerElements.titleContainer.onmouseenter = () => {\r\n psetActions.data = { model, psetID };\r\n uiGroup.slots.titleRight.addChild(psetActions);\r\n };\r\n uiGroup.innerElements.titleContainer.onmouseleave = () => {\r\n if (psetActions.modalVisible)\r\n return;\r\n psetActions.removeFromParent();\r\n psetActions.cleanData();\r\n };\r\n }\r\n addEntityActions(model, expressID, uiGroup) {\r\n if (!this.propertiesManager)\r\n return;\r\n const propsUI = this.propertiesManager.uiElement;\r\n const entityActions = propsUI.get(\"entityActions\");\r\n uiGroup.innerElements.titleContainer.onmouseenter = () => {\r\n entityActions.data = { model, elementIDs: [expressID] };\r\n uiGroup.slots.titleRight.addChild(entityActions);\r\n };\r\n uiGroup.innerElements.titleContainer.onmouseleave = () => {\r\n if (entityActions.modal.visible)\r\n return;\r\n entityActions.removeFromParent();\r\n entityActions.cleanData();\r\n };\r\n }\r\n newEntityTree(model, expressID) {\r\n const { properties } = IfcPropertiesManager.getIFCInfo(model);\r\n const entity = properties[expressID];\r\n if (!entity)\r\n return null;\r\n const currentUI = this._currentUI[expressID];\r\n if (currentUI)\r\n return currentUI;\r\n const entityTree = new TreeView(this.components);\r\n this._currentUI[expressID] = entityTree;\r\n // const entityTree = this._entityUIPool.get();\r\n entityTree.title = `${IfcCategoryMap[entity.type]}`;\r\n const { name } = IfcPropertiesUtils.getEntityName(properties, expressID);\r\n entityTree.description = name;\r\n return entityTree;\r\n }\r\n newPropertyTag(model, setID, expressID, valueKey) {\r\n const { properties } = IfcPropertiesManager.getIFCInfo(model);\r\n const entity = properties[expressID];\r\n if (!entity)\r\n return null;\r\n const tag = new PropertyTag(this.components, this, model, expressID);\r\n // @ts-ignore\r\n this._currentUI[expressID] = tag;\r\n if (!this.propertiesManager)\r\n return tag;\r\n // #region ManagementUI\r\n const propsUI = this.propertiesManager.uiElement;\r\n const propActions = propsUI.get(\"propActions\");\r\n tag.get().onmouseenter = () => {\r\n propActions.data = { model, setID, expressID, valueKey };\r\n tag.addChild(propActions);\r\n };\r\n tag.get().onmouseleave = () => {\r\n if (propActions.modalVisible)\r\n return;\r\n propActions.removeFromParent();\r\n propActions.cleanData();\r\n };\r\n // #endregion ManagementUI\r\n return tag;\r\n }\r\n cloneProperty(item, result = {}) {\r\n if (!item) {\r\n return result;\r\n }\r\n for (const key in item) {\r\n const value = item[key];\r\n const isArray = Array.isArray(value);\r\n const isObject = typeof value === \"object\" && !isArray && value !== null;\r\n if (isArray) {\r\n result[key] = [];\r\n const subResult = result[key];\r\n this.clonePropertyArray(value, subResult);\r\n }\r\n else if (isObject) {\r\n result[key] = {};\r\n const subResult = result[key];\r\n this.cloneProperty(value, subResult);\r\n }\r\n else {\r\n result[key] = value;\r\n }\r\n }\r\n return result;\r\n }\r\n clonePropertyArray(item, result) {\r\n for (const value of item) {\r\n const isArray = Array.isArray(value);\r\n const isObject = typeof value === \"object\" && !isArray && value !== null;\r\n if (isArray) {\r\n const subResult = [];\r\n result.push(subResult);\r\n this.clonePropertyArray(value, subResult);\r\n }\r\n else if (isObject) {\r\n const subResult = {};\r\n result.push(subResult);\r\n this.cloneProperty(value, subResult);\r\n }\r\n else {\r\n result.push(value);\r\n }\r\n }\r\n }\r\n}\r\nIfcPropertiesProcessor.uuid = \"23a889ab-83b3-44a4-8bee-ead83438370b\";\r\nToolComponent.libraryUUIDs.add(IfcPropertiesProcessor.uuid);\r\n//# sourceMappingURL=index.js.map","import * as WEBIFC from \"web-ifc\";\r\nimport { IfcCategoryMap } from \"../ifc-category-map\";\r\nexport class IfcPropertiesUtils {\r\n static getUnits(properties) {\r\n var _a;\r\n const { IFCUNITASSIGNMENT } = WEBIFC;\r\n const allUnits = this.findItemOfType(properties, IFCUNITASSIGNMENT);\r\n if (!allUnits)\r\n return 1;\r\n for (const unitRef of allUnits.Units) {\r\n if (unitRef.value === undefined || unitRef.value === null)\r\n continue;\r\n const unit = properties[unitRef.value];\r\n if (!unit.UnitType || !unit.UnitType.value)\r\n continue;\r\n const value = unit.UnitType.value;\r\n if (value !== \"LENGTHUNIT\")\r\n continue;\r\n let factor = 1;\r\n let unitValue = 1;\r\n if (unit.Name.value === \"METRE\")\r\n unitValue = 1;\r\n if (unit.Name.value === \"FOOT\")\r\n unitValue = 0.3048;\r\n if (((_a = unit.Prefix) === null || _a === void 0 ? void 0 : _a.value) === \"MILLI\")\r\n factor = 0.001;\r\n return unitValue * factor;\r\n }\r\n return 1;\r\n }\r\n static findItemByGuid(properties, guid) {\r\n var _a;\r\n for (const id in properties) {\r\n const property = properties[id];\r\n if (((_a = property.GlobalId) === null || _a === void 0 ? void 0 : _a.value) === guid) {\r\n return property;\r\n }\r\n }\r\n return null;\r\n }\r\n static findItemOfType(properties, type) {\r\n for (const id in properties) {\r\n const property = properties[id];\r\n if (property.type === type) {\r\n return property;\r\n }\r\n }\r\n return null;\r\n }\r\n static getAllItemsOfType(properties, type) {\r\n const found = [];\r\n for (const id in properties) {\r\n const property = properties[id];\r\n if (!property)\r\n continue;\r\n if (property.type === type) {\r\n found.push(property);\r\n }\r\n }\r\n return found;\r\n }\r\n static getRelationMap(properties, relationType, onElementsFound) {\r\n var _a;\r\n const defaultCallback = () => { };\r\n const _onElementsFound = onElementsFound !== null && onElementsFound !== void 0 ? onElementsFound : defaultCallback;\r\n const result = {};\r\n for (const expressID in properties) {\r\n const prop = properties[expressID];\r\n if (prop === undefined) {\r\n continue;\r\n }\r\n const isRelation = prop.type === relationType;\r\n const relatingKey = Object.keys(prop).find((key) => key.startsWith(\"Relating\"));\r\n const relatedKey = Object.keys(prop).find((key) => key.startsWith(\"Related\"));\r\n if (!(isRelation && relatingKey && relatedKey))\r\n continue;\r\n const relating = properties[(_a = prop[relatingKey]) === null || _a === void 0 ? void 0 : _a.value];\r\n const related = prop[relatedKey];\r\n if (relating === undefined || related === undefined) {\r\n continue;\r\n }\r\n if (!(related && Array.isArray(related)))\r\n continue;\r\n const elements = related.map((el) => {\r\n return el.value;\r\n });\r\n _onElementsFound(relating.expressID, elements);\r\n result[relating.expressID] = elements;\r\n }\r\n return result;\r\n }\r\n static getQsetQuantities(properties, expressID, onQuantityFound) {\r\n var _a;\r\n const defaultCallback = () => { };\r\n const _onQuantityFound = onQuantityFound !== null && onQuantityFound !== void 0 ? onQuantityFound : defaultCallback;\r\n const pset = properties[expressID];\r\n if ((pset === null || pset === void 0 ? void 0 : pset.type) !== WEBIFC.IFCELEMENTQUANTITY)\r\n return null;\r\n const quantities = (_a = pset.Quantities) !== null && _a !== void 0 ? _a : [{}];\r\n const qtos = quantities.map((prop) => {\r\n if (prop.value)\r\n _onQuantityFound(prop.value);\r\n return prop.value;\r\n });\r\n return qtos.filter((prop) => prop !== null);\r\n }\r\n static getPsetProps(properties, expressID, onPropFound) {\r\n var _a;\r\n const defaultCallback = () => { };\r\n const _onPropFound = onPropFound !== null && onPropFound !== void 0 ? onPropFound : defaultCallback;\r\n const pset = properties[expressID];\r\n if ((pset === null || pset === void 0 ? void 0 : pset.type) !== WEBIFC.IFCPROPERTYSET)\r\n return null;\r\n const hasProperties = (_a = pset.HasProperties) !== null && _a !== void 0 ? _a : [{}];\r\n const props = hasProperties.map((prop) => {\r\n if (prop.value)\r\n _onPropFound(prop.value);\r\n return prop.value;\r\n });\r\n return props.filter((prop) => prop !== null);\r\n }\r\n static getPsetRel(properties, psetID) {\r\n const arrayProperties = Object.values(properties);\r\n if (!properties[psetID])\r\n return null;\r\n const rel = arrayProperties.find((data) => {\r\n var _a;\r\n const isRelation = data.type === WEBIFC.IFCRELDEFINESBYPROPERTIES;\r\n const relatesToPset = ((_a = data.RelatingPropertyDefinition) === null || _a === void 0 ? void 0 : _a.value) === psetID;\r\n return isRelation && relatesToPset;\r\n });\r\n return rel ? rel.expressID : null;\r\n }\r\n static getQsetRel(properties, qsetID) {\r\n return IfcPropertiesUtils.getPsetRel(properties, qsetID);\r\n }\r\n static getEntityName(properties, entityID) {\r\n var _a;\r\n const entity = properties[entityID];\r\n const key = (_a = Object.keys(entity).find((key) => key.endsWith(\"Name\"))) !== null && _a !== void 0 ? _a : null;\r\n const name = key ? entity[key].value : null;\r\n return { key, name };\r\n }\r\n static getQuantityValue(properties, quantityID) {\r\n var _a;\r\n const quantity = properties[quantityID];\r\n const key = (_a = Object.keys(quantity).find((key) => key.endsWith(\"Value\"))) !== null && _a !== void 0 ? _a : null;\r\n let value;\r\n if (key === null) {\r\n value = null;\r\n }\r\n else if (quantity[key] === undefined || quantity[key] === null) {\r\n value = null;\r\n }\r\n else {\r\n value = quantity[key].value;\r\n }\r\n return { key, value };\r\n }\r\n static isRel(expressID) {\r\n const entityName = IfcCategoryMap[expressID];\r\n return entityName.startsWith(\"IFCREL\");\r\n }\r\n static attributeExists(properties, expressID, attribute) {\r\n const entity = properties[expressID];\r\n if (!entity)\r\n return false;\r\n return Object.keys(properties[expressID]).includes(attribute);\r\n }\r\n static groupEntitiesByType(properties, expressIDs) {\r\n var _a;\r\n const categoriesMap = new Map();\r\n for (const expressID of expressIDs) {\r\n const entity = properties[expressID];\r\n if (!entity)\r\n continue;\r\n const key = entity.type;\r\n const set = categoriesMap.get(key);\r\n if (!set)\r\n categoriesMap.set(key, new Set());\r\n (_a = categoriesMap.get(key)) === null || _a === void 0 ? void 0 : _a.add(expressID);\r\n }\r\n return categoriesMap;\r\n }\r\n}\r\n//# sourceMappingURL=index.js.map"],"names":["PropertyTag","SimpleUIComponent","label","this","innerElements","textContent","value","String","constructor","components","propertiesProcessor","model","expressID","super","UIManager","name","getInnerElement","_propertiesProcessor","setInitialValues","setListeners","async","onlyChildren","dispose","Object","keys","length","remove","propertiesManager","properties","IfcPropertiesManager","key","nameKey","IfcPropertiesUtils","valueKey","setAttributeListener","add","v","toString","AttributeTag","attributeName","err","ifcMetadata","entity","includes","AttributeSet","_expressID","_attributes","slots","content","attributesToIgnore","_generated","onExpand","generate","update","attribute","push","tag","_components","addChild","IfcPropertiesProcessor","manager","_propertiesManager","onElementToPset","psetID","elementID","_indexMap","uuid","setEntityIndex","_currentUI","ui","newPsetUI","onPsetRemoved","psetUI","onPropToPset","propID","newPropertyTag","onPropertiesManagerSet","trigger","onDisposed","enabled","uiElement","relationsToProcess","entitiesToIgnore","_renderFunctions","onFragmentsDisposed","data","groupID","tools","getRenderFunctions","get","FragmentManager","uiEnabled","setUI","newEntityUI","newQsetUI","id","reset","getProperties","map","indices","idNumber","parseInt","cloneProperty","index","pset","getPsetProperties","getNestedPsets","props","HasPropertySets","subPSet","HasProperties","property","result","topToolbar","propsList","main","materialIconName","propertiesWindow","title","tooltip","onClick","visible","onHidden","active","onVisible","set","removeFromParent","description","children","process","Error","setEntities","relation","relationID","relatedIDs","relationEntity","type","cleanPropertiesList","propsWindow","selectedModel","exporter","flat","modelElementsIndexation","ignorable","mainGroup","newEntityTree","addEntityActions","_a","_b","uiProcessed","newAttributesUI","elementPropsIndexation","renderFunction","Set","attributesGroup","uiGroups","uiGroup","addPsetActions","psetPropsID","template","notFoundText","qsetID","quantityID","psetActions","titleContainer","onmouseenter","titleRight","onmouseleave","modalVisible","cleanData","entityActions","elementIDs","modal","currentUI","entityTree","setID","propActions","item","isArray","Array","isObject","subResult","clonePropertyArray","static","IFCUNITASSIGNMENT","allUnits","findItemOfType","unitRef","Units","undefined","unit","UnitType","factor","unitValue","Name","Prefix","guid","GlobalId","found","relationType","onElementsFound","_onElementsFound","prop","isRelation","relatingKey","find","startsWith","relatedKey","relating","related","elements","el","onQuantityFound","_onQuantityFound","Quantities","filter","onPropFound","_onPropFound","arrayProperties","values","rel","relatesToPset","RelatingPropertyDefinition","getPsetRel","entityID","endsWith","quantity","expressIDs","categoriesMap","Map"],"sourceRoot":""}