@compas-oscd/open-scd 0.34.37 → 0.34.39

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.
Files changed (200) hide show
  1. package/dist/src/WizardDivider.js.map +1 -0
  2. package/dist/src/Wizarding.js.map +1 -0
  3. package/dist/src/action-icon.js.map +1 -0
  4. package/dist/src/action-pane.js.map +1 -0
  5. package/dist/src/addons/Editor.js.map +1 -0
  6. package/dist/src/addons/History.js.map +1 -0
  7. package/dist/src/addons/Layout.js.map +1 -0
  8. package/dist/src/addons/Settings.js.map +1 -0
  9. package/dist/src/addons/Waiter.js.map +1 -0
  10. package/dist/src/addons/Wizards.js.map +1 -0
  11. package/dist/src/addons/editor/edit-action-to-v1-converter.js.map +1 -0
  12. package/dist/src/addons/editor/edit-v1-to-v2-converter.js.map +1 -0
  13. package/dist/src/addons/history/get-log-text.js.map +1 -0
  14. package/dist/src/addons/menu-tabs/menu-tabs.js.map +1 -0
  15. package/dist/src/addons/plugin-manager/custom-plugin-dialog.js.map +1 -0
  16. package/dist/src/addons/plugin-manager/plugin-manager.js.map +1 -0
  17. package/dist/{filtered-list.js → src/filtered-list.js} +2 -0
  18. package/dist/src/filtered-list.js.map +1 -0
  19. package/dist/src/finder-list.js.map +1 -0
  20. package/dist/src/foundation/compare.js.map +1 -0
  21. package/dist/src/foundation/dai.js.map +1 -0
  22. package/dist/src/foundation/generators.js.map +1 -0
  23. package/dist/src/foundation/ied.js.map +1 -0
  24. package/dist/src/foundation/nsd.js.map +1 -0
  25. package/dist/src/foundation/nsdoc.js.map +1 -0
  26. package/dist/src/foundation/scl.js.map +1 -0
  27. package/dist/src/foundation.js.map +1 -0
  28. package/dist/src/icons/compare.js.map +1 -0
  29. package/dist/src/icons/icons.js.map +1 -0
  30. package/dist/src/icons/ied-icons.js.map +1 -0
  31. package/dist/src/icons/lnode.js.map +1 -0
  32. package/dist/src/index.d.ts +41 -0
  33. package/dist/{index.js → src/index.js} +19 -3
  34. package/dist/src/index.js.map +1 -0
  35. package/dist/src/open-scd.js.map +1 -0
  36. package/dist/src/oscd-filter-button.js.map +1 -0
  37. package/dist/src/plain-compare-list.js.map +1 -0
  38. package/dist/src/plugin-tag.js.map +1 -0
  39. package/dist/src/plugin.events.js.map +1 -0
  40. package/dist/src/plugin.js.map +1 -0
  41. package/dist/src/plugins.js.map +1 -0
  42. package/dist/src/schemas.js.map +1 -0
  43. package/dist/src/themes.js.map +1 -0
  44. package/dist/src/translations/de.js.map +1 -0
  45. package/dist/src/translations/en.js.map +1 -0
  46. package/dist/src/translations/loader.js.map +1 -0
  47. package/dist/src/wizard-checkbox.js.map +1 -0
  48. package/dist/src/wizard-dialog.js.map +1 -0
  49. package/dist/src/wizard-select.js.map +1 -0
  50. package/dist/src/wizard-textfield.js.map +1 -0
  51. package/dist/src/wizards.js.map +1 -0
  52. package/dist/test/mock-open-scd.d.ts +22 -0
  53. package/dist/test/mock-open-scd.js +53 -0
  54. package/dist/test/mock-open-scd.js.map +1 -0
  55. package/dist/test/mock-wizard-editor.d.ts +15 -0
  56. package/dist/test/mock-wizard-editor.js +50 -0
  57. package/dist/test/mock-wizard-editor.js.map +1 -0
  58. package/package.json +6 -2
  59. package/dist/WizardDivider.js.map +0 -1
  60. package/dist/Wizarding.js.map +0 -1
  61. package/dist/action-icon.js.map +0 -1
  62. package/dist/action-pane.js.map +0 -1
  63. package/dist/addons/Editor.js.map +0 -1
  64. package/dist/addons/History.js.map +0 -1
  65. package/dist/addons/Layout.js.map +0 -1
  66. package/dist/addons/Settings.js.map +0 -1
  67. package/dist/addons/Waiter.js.map +0 -1
  68. package/dist/addons/Wizards.js.map +0 -1
  69. package/dist/addons/editor/edit-action-to-v1-converter.js.map +0 -1
  70. package/dist/addons/editor/edit-v1-to-v2-converter.js.map +0 -1
  71. package/dist/addons/history/get-log-text.js.map +0 -1
  72. package/dist/addons/menu-tabs/menu-tabs.js.map +0 -1
  73. package/dist/addons/plugin-manager/custom-plugin-dialog.js.map +0 -1
  74. package/dist/addons/plugin-manager/plugin-manager.js.map +0 -1
  75. package/dist/filtered-list.js.map +0 -1
  76. package/dist/finder-list.js.map +0 -1
  77. package/dist/foundation/compare.js.map +0 -1
  78. package/dist/foundation/dai.js.map +0 -1
  79. package/dist/foundation/generators.js.map +0 -1
  80. package/dist/foundation/ied.js.map +0 -1
  81. package/dist/foundation/nsd.js.map +0 -1
  82. package/dist/foundation/nsdoc.js.map +0 -1
  83. package/dist/foundation/scl.js.map +0 -1
  84. package/dist/foundation.js.map +0 -1
  85. package/dist/icons/compare.js.map +0 -1
  86. package/dist/icons/icons.js.map +0 -1
  87. package/dist/icons/ied-icons.js.map +0 -1
  88. package/dist/icons/lnode.js.map +0 -1
  89. package/dist/index.d.ts +0 -26
  90. package/dist/index.js.map +0 -1
  91. package/dist/open-scd.js.map +0 -1
  92. package/dist/oscd-filter-button.js.map +0 -1
  93. package/dist/plain-compare-list.js.map +0 -1
  94. package/dist/plugin-tag.js.map +0 -1
  95. package/dist/plugin.events.js.map +0 -1
  96. package/dist/plugin.js.map +0 -1
  97. package/dist/plugins.js.map +0 -1
  98. package/dist/schemas.js.map +0 -1
  99. package/dist/themes.js.map +0 -1
  100. package/dist/translations/de.js.map +0 -1
  101. package/dist/translations/en.js.map +0 -1
  102. package/dist/translations/loader.js.map +0 -1
  103. package/dist/wizard-checkbox.js.map +0 -1
  104. package/dist/wizard-dialog.js.map +0 -1
  105. package/dist/wizard-select.js.map +0 -1
  106. package/dist/wizard-textfield.js.map +0 -1
  107. package/dist/wizards.js.map +0 -1
  108. /package/dist/{WizardDivider.d.ts → src/WizardDivider.d.ts} +0 -0
  109. /package/dist/{WizardDivider.js → src/WizardDivider.js} +0 -0
  110. /package/dist/{Wizarding.d.ts → src/Wizarding.d.ts} +0 -0
  111. /package/dist/{Wizarding.js → src/Wizarding.js} +0 -0
  112. /package/dist/{action-icon.d.ts → src/action-icon.d.ts} +0 -0
  113. /package/dist/{action-icon.js → src/action-icon.js} +0 -0
  114. /package/dist/{action-pane.d.ts → src/action-pane.d.ts} +0 -0
  115. /package/dist/{action-pane.js → src/action-pane.js} +0 -0
  116. /package/dist/{addons → src/addons}/Editor.d.ts +0 -0
  117. /package/dist/{addons → src/addons}/Editor.js +0 -0
  118. /package/dist/{addons → src/addons}/History.d.ts +0 -0
  119. /package/dist/{addons → src/addons}/History.js +0 -0
  120. /package/dist/{addons → src/addons}/Layout.d.ts +0 -0
  121. /package/dist/{addons → src/addons}/Layout.js +0 -0
  122. /package/dist/{addons → src/addons}/Settings.d.ts +0 -0
  123. /package/dist/{addons → src/addons}/Settings.js +0 -0
  124. /package/dist/{addons → src/addons}/Waiter.d.ts +0 -0
  125. /package/dist/{addons → src/addons}/Waiter.js +0 -0
  126. /package/dist/{addons → src/addons}/Wizards.d.ts +0 -0
  127. /package/dist/{addons → src/addons}/Wizards.js +0 -0
  128. /package/dist/{addons → src/addons}/editor/edit-action-to-v1-converter.d.ts +0 -0
  129. /package/dist/{addons → src/addons}/editor/edit-action-to-v1-converter.js +0 -0
  130. /package/dist/{addons → src/addons}/editor/edit-v1-to-v2-converter.d.ts +0 -0
  131. /package/dist/{addons → src/addons}/editor/edit-v1-to-v2-converter.js +0 -0
  132. /package/dist/{addons → src/addons}/history/get-log-text.d.ts +0 -0
  133. /package/dist/{addons → src/addons}/history/get-log-text.js +0 -0
  134. /package/dist/{addons → src/addons}/menu-tabs/menu-tabs.d.ts +0 -0
  135. /package/dist/{addons → src/addons}/menu-tabs/menu-tabs.js +0 -0
  136. /package/dist/{addons → src/addons}/plugin-manager/custom-plugin-dialog.d.ts +0 -0
  137. /package/dist/{addons → src/addons}/plugin-manager/custom-plugin-dialog.js +0 -0
  138. /package/dist/{addons → src/addons}/plugin-manager/plugin-manager.d.ts +0 -0
  139. /package/dist/{addons → src/addons}/plugin-manager/plugin-manager.js +0 -0
  140. /package/dist/{filtered-list.d.ts → src/filtered-list.d.ts} +0 -0
  141. /package/dist/{finder-list.d.ts → src/finder-list.d.ts} +0 -0
  142. /package/dist/{finder-list.js → src/finder-list.js} +0 -0
  143. /package/dist/{foundation → src/foundation}/compare.d.ts +0 -0
  144. /package/dist/{foundation → src/foundation}/compare.js +0 -0
  145. /package/dist/{foundation → src/foundation}/dai.d.ts +0 -0
  146. /package/dist/{foundation → src/foundation}/dai.js +0 -0
  147. /package/dist/{foundation → src/foundation}/generators.d.ts +0 -0
  148. /package/dist/{foundation → src/foundation}/generators.js +0 -0
  149. /package/dist/{foundation → src/foundation}/ied.d.ts +0 -0
  150. /package/dist/{foundation → src/foundation}/ied.js +0 -0
  151. /package/dist/{foundation → src/foundation}/nsd.d.ts +0 -0
  152. /package/dist/{foundation → src/foundation}/nsd.js +0 -0
  153. /package/dist/{foundation → src/foundation}/nsdoc.d.ts +0 -0
  154. /package/dist/{foundation → src/foundation}/nsdoc.js +0 -0
  155. /package/dist/{foundation → src/foundation}/scl.d.ts +0 -0
  156. /package/dist/{foundation → src/foundation}/scl.js +0 -0
  157. /package/dist/{foundation.d.ts → src/foundation.d.ts} +0 -0
  158. /package/dist/{foundation.js → src/foundation.js} +0 -0
  159. /package/dist/{icons → src/icons}/compare.d.ts +0 -0
  160. /package/dist/{icons → src/icons}/compare.js +0 -0
  161. /package/dist/{icons → src/icons}/icons.d.ts +0 -0
  162. /package/dist/{icons → src/icons}/icons.js +0 -0
  163. /package/dist/{icons → src/icons}/ied-icons.d.ts +0 -0
  164. /package/dist/{icons → src/icons}/ied-icons.js +0 -0
  165. /package/dist/{icons → src/icons}/lnode.d.ts +0 -0
  166. /package/dist/{icons → src/icons}/lnode.js +0 -0
  167. /package/dist/{open-scd.d.ts → src/open-scd.d.ts} +0 -0
  168. /package/dist/{open-scd.js → src/open-scd.js} +0 -0
  169. /package/dist/{oscd-filter-button.d.ts → src/oscd-filter-button.d.ts} +0 -0
  170. /package/dist/{oscd-filter-button.js → src/oscd-filter-button.js} +0 -0
  171. /package/dist/{plain-compare-list.d.ts → src/plain-compare-list.d.ts} +0 -0
  172. /package/dist/{plain-compare-list.js → src/plain-compare-list.js} +0 -0
  173. /package/dist/{plugin-tag.d.ts → src/plugin-tag.d.ts} +0 -0
  174. /package/dist/{plugin-tag.js → src/plugin-tag.js} +0 -0
  175. /package/dist/{plugin.d.ts → src/plugin.d.ts} +0 -0
  176. /package/dist/{plugin.events.d.ts → src/plugin.events.d.ts} +0 -0
  177. /package/dist/{plugin.events.js → src/plugin.events.js} +0 -0
  178. /package/dist/{plugin.js → src/plugin.js} +0 -0
  179. /package/dist/{plugins.d.ts → src/plugins.d.ts} +0 -0
  180. /package/dist/{plugins.js → src/plugins.js} +0 -0
  181. /package/dist/{schemas.d.ts → src/schemas.d.ts} +0 -0
  182. /package/dist/{schemas.js → src/schemas.js} +0 -0
  183. /package/dist/{themes.d.ts → src/themes.d.ts} +0 -0
  184. /package/dist/{themes.js → src/themes.js} +0 -0
  185. /package/dist/{translations → src/translations}/de.d.ts +0 -0
  186. /package/dist/{translations → src/translations}/de.js +0 -0
  187. /package/dist/{translations → src/translations}/en.d.ts +0 -0
  188. /package/dist/{translations → src/translations}/en.js +0 -0
  189. /package/dist/{translations → src/translations}/loader.d.ts +0 -0
  190. /package/dist/{translations → src/translations}/loader.js +0 -0
  191. /package/dist/{wizard-checkbox.d.ts → src/wizard-checkbox.d.ts} +0 -0
  192. /package/dist/{wizard-checkbox.js → src/wizard-checkbox.js} +0 -0
  193. /package/dist/{wizard-dialog.d.ts → src/wizard-dialog.d.ts} +0 -0
  194. /package/dist/{wizard-dialog.js → src/wizard-dialog.js} +0 -0
  195. /package/dist/{wizard-select.d.ts → src/wizard-select.d.ts} +0 -0
  196. /package/dist/{wizard-select.js → src/wizard-select.js} +0 -0
  197. /package/dist/{wizard-textfield.d.ts → src/wizard-textfield.d.ts} +0 -0
  198. /package/dist/{wizard-textfield.js → src/wizard-textfield.js} +0 -0
  199. /package/dist/{wizards.d.ts → src/wizards.d.ts} +0 -0
  200. /package/dist/{wizards.js → src/wizards.js} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"dai.js","sourceRoot":"","sources":["../../src/foundation/dai.ts"],"names":[],"mappings":"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","sourcesContent":["import { SCL_NAMESPACE } from '../schemas.js';\n\n/**\n * Determine which part of the Template Structure still needs to be initialized.\n * With the first call the parent will normally be the LN(0) Element to start from.\n * It will use the list to pop the first element and look if there is a DOI/SDI/DAI\n * Element available with the same name.\n *\n * @param parentElement - The element to search from for a DOI/SDI/DAI\n * @param templateStructure - The templates structure with DO/DA/BDA Elements.\n * @returns The last element initialized element or LN(0) if nothing is initialized. This Element can be used to\n * add the new element to. And the list of Template Elements that still need to be initialized.\n */\nexport function determineUninitializedStructure(\n parentElement: Element,\n templateStructure: Element[]\n): [Element, Element[]] {\n const templateElement = templateStructure.shift();\n if (templateStructure.length > 0) {\n // If there are still Template Elements we didn't reach the DAI Element, so continue checking if any DOI/SDI\n // Element is found with the same name.\n let instanceElement: Element | null;\n // DO Elements are initialized as DOI, others as SDI.\n if (templateElement!.tagName === 'DO') {\n instanceElement = parentElement.querySelector(\n `DOI[name=\"${templateElement!.getAttribute('name')}\"]`\n );\n } else {\n instanceElement = parentElement.querySelector(\n `SDI[name=\"${templateElement!.getAttribute('name')}\"]`\n );\n }\n\n if (instanceElement) {\n // If instance element found we will search one level lower again.\n // So the parent will become the instance element and the list is 1 smaller.\n return determineUninitializedStructure(\n instanceElement,\n templateStructure\n );\n } else {\n // No instance element found, so the element and all other elements still need to be\n // initialized and returned.\n templateStructure.unshift(templateElement!);\n return [parentElement, templateStructure];\n }\n } else {\n // The last template element in the list, so this should be the DA Element that only needs\n // to be initialized.\n return [parentElement, [templateElement!]];\n }\n}\n\n/**\n * Create a new instance structure defined by the array of template elements passed.\n *\n * @param uninitializedTemplateStructure - The Array of Template Elements for which new instance elements need to be\n * created.\n * @returns The Element created from the last Template Element in the Array.\n */\nexport function initializeElements(\n uninitializedTemplateStructure: Element[]\n): Element {\n const element = uninitializedTemplateStructure.shift();\n if (uninitializedTemplateStructure.length > 0) {\n // If there are more template elements left this will become a DOI or SDI Element.\n let newElement;\n // Depending on the level create a DOI or SDI Element.\n if (element!.tagName === 'DO') {\n newElement = element!.ownerDocument.createElementNS(SCL_NAMESPACE, 'DOI');\n } else {\n newElement = element!.ownerDocument.createElementNS(SCL_NAMESPACE, 'SDI');\n }\n newElement.setAttribute('name', element?.getAttribute('name') ?? '');\n\n // Create an element from the next one (last) from the shortened array.\n const childElement = initializeElements(uninitializedTemplateStructure);\n newElement.append(childElement);\n\n return newElement;\n } else {\n // Create Val Element\n const newValElement = element!.ownerDocument.createElementNS(\n SCL_NAMESPACE,\n 'Val'\n );\n const valElement = element!.querySelector('Val');\n if (valElement) {\n newValElement.textContent = valElement.textContent;\n }\n\n // Create DAI Element\n const daiElement = element!.ownerDocument.createElementNS(\n SCL_NAMESPACE,\n 'DAI'\n );\n daiElement.setAttribute('name', element?.getAttribute('name') ?? '');\n daiElement.append(newValElement);\n return daiElement;\n }\n}\n\n/**\n * Use the path configuration of a Common Data Class to search for all DO/SDO/DA/BDA Elements to create\n * a structure for which DOI/SDI/DAI Elements should be created later. Null will be returned when an invalid\n * Template Structure is described by the path.\n *\n * @param lnElement - The LN Element to use for searching the starting DO Element.\n * @param path - The (S)DO/(B)DA Elements to find in the template structure.\n * @returns List of Elements starting with the DO Element followed by one or more SDO or (B)DA Elements describing the structure.\n */\nexport function createTemplateStructure(\n lnElement: Element,\n path: string[]\n): Element[] | null {\n let templateStructure: Element[] | null = [];\n\n const doc = lnElement.ownerDocument;\n const lnType = lnElement.getAttribute('lnType') ?? '';\n let typeElement = doc.querySelector(`LNodeType[id=\"${lnType}\"]`);\n path.forEach(name => {\n // There should be a DOType or DAType set for the current element in the list.\n if (!typeElement) {\n templateStructure = null;\n return;\n }\n const dataElement = typeElement.querySelector(\n `:scope > DO[name=\"${name}\"], :scope > SDO[name=\"${name}\"], :scope > DA[name=\"${name}\"], :scope > BDA[name=\"${name}\"]`\n );\n // If there is no (S)DO/(B)DA Element found the structure is incorrect, so just stop.\n if (dataElement === null) {\n templateStructure = null;\n return;\n }\n templateStructure!.push(dataElement);\n\n if (dataElement.tagName === 'DO' || dataElement.tagName === 'SDO') {\n const type = dataElement.getAttribute('type') ?? '';\n typeElement = doc.querySelector(\n `DataTypeTemplates > DOType[id=\"${type}\"]`\n );\n } else {\n const bType = dataElement.getAttribute('bType') ?? '';\n if (bType === 'Struct') {\n const type = dataElement.getAttribute('type') ?? '';\n typeElement = doc.querySelector(\n `DataTypeTemplates > DAType[id=\"${type}\"]`\n );\n } else {\n typeElement = null;\n }\n }\n });\n return templateStructure;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/foundation/generators.ts"],"names":[],"mappings":"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","sourcesContent":["const maxGseMacAddress = 0x010ccd0101ff;\nconst minGseMacAddress = 0x010ccd010000;\n\nconst maxSmvMacAddress = 0x010ccd0401ff;\nconst minSmvMacAddress = 0x010ccd040000;\n\nfunction convertToMac(mac: number): string {\n const str = 0 + mac.toString(16).toUpperCase();\n const arr = str.match(/.{1,2}/g)!;\n return arr?.join('-');\n}\n\nconst gseMacRange = Array(maxGseMacAddress - minGseMacAddress)\n .fill(1)\n .map((_, i) => convertToMac(minGseMacAddress + i));\n\nconst smvMacRange = Array(maxSmvMacAddress - minSmvMacAddress)\n .fill(1)\n .map((_, i) => convertToMac(minSmvMacAddress + i));\n\n/**\n * @param doc - project xml document\n * @param serviceType - SampledValueControl (SMV) or GSEControl (GSE)\n * @returns a function generating increasing unused `MAC-Address` within `doc` on subsequent invocations\n */\nexport function mACAddressGenerator(\n doc: XMLDocument,\n serviceType: 'SMV' | 'GSE'\n): () => string {\n const macs = new Set(\n Array.from(\n doc.querySelectorAll(`${serviceType} > Address > P[type=\"MAC-Address\"]`)\n ).map(macs => macs.textContent!)\n );\n\n const range = serviceType === 'SMV' ? smvMacRange : gseMacRange;\n\n return () => {\n const uniqueMAC = range.find(mac => !macs.has(mac));\n if (uniqueMAC) macs.add(uniqueMAC);\n return uniqueMAC ?? '';\n };\n}\n\nconst maxGseAppId = 0x3fff;\nconst minGseAppId = 0x0000;\n\n// APPID range for Type1A(Trip) GOOSE acc. IEC 61850-8-1\nconst maxGseTripAppId = 0xbfff;\nconst minGseTripAppId = 0x8000;\n\nconst maxSmvAppId = 0x7fff;\nconst minSmvAppId = 0x4000;\n\nconst gseAppIdRange = Array(maxGseAppId - minGseAppId)\n .fill(1)\n .map((_, i) => (minGseAppId + i).toString(16).toUpperCase().padStart(4, '0'));\n\nconst gseTripAppIdRange = Array(maxGseTripAppId - minGseTripAppId)\n .fill(1)\n .map((_, i) =>\n (minGseTripAppId + i).toString(16).toUpperCase().padStart(4, '0')\n );\n\nconst smvAppIdRange = Array(maxSmvAppId - minSmvAppId)\n .fill(1)\n .map((_, i) => (minSmvAppId + i).toString(16).toUpperCase().padStart(4, '0'));\n\n/**\n * @param doc - project xml document\n * @param serviceType - SampledValueControl (SMV) or GSEControl (GSE)\n * @param type1A - whether the GOOSE is a Trip GOOSE resulting in different APPID range - default false\n * @returns a function generating increasing unused `APPID` within `doc` on subsequent invocations\n */\nexport function appIdGenerator(\n doc: XMLDocument,\n serviceType: 'SMV' | 'GSE',\n type1A = false\n): () => string {\n const appIds = new Set(\n Array.from(\n doc.querySelectorAll(`${serviceType} > Address > P[type=\"APPID\"]`)\n ).map(appId => appId.textContent!)\n );\n\n const range =\n serviceType === 'SMV'\n ? smvAppIdRange\n : type1A\n ? gseTripAppIdRange\n : gseAppIdRange;\n\n return () => {\n const uniqueAppId = range.find(appId => !appIds.has(appId));\n if (uniqueAppId) appIds.add(uniqueAppId);\n return uniqueAppId ?? '';\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ied.js","sourceRoot":"","sources":["../../src/foundation/ied.ts"],"names":[],"mappings":"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","sourcesContent":["import { find, identity } from '../foundation.js';\nimport { Delete } from '@compas-oscd/core';\n\n/**\n * All available FCDA references that are used to link ExtRefs.\n */\nconst fcdaReferences = [\n 'ldInst',\n 'lnClass',\n 'lnInst',\n 'prefix',\n 'doName',\n 'daName',\n];\n\n/**\n * Get all the FCDA attributes containing values from a specific element.\n *\n * @param elementContainingFcdaReferences - The element to use\n * @returns FCDA references\n */\nexport function getFcdaReferences(\n elementContainingFcdaReferences: Element\n): string {\n return fcdaReferences\n .map(fcdaRef =>\n elementContainingFcdaReferences.getAttribute(fcdaRef)\n ? `[${fcdaRef}=\"${elementContainingFcdaReferences.getAttribute(\n fcdaRef\n )}\"]`\n : ''\n )\n .join('');\n}\n\n/**\n * All available Control references that are used to link ExtRefs.\n */\nconst controlReferences = ['srcLDInst', 'srcLNClass', 'srcLNInst', 'srcCBName'];\n\n/**\n * Get all the Control attributes containing values from a specific element.\n *\n * @param extRef - The element to use\n * @returns Control references\n */\nexport function getControlReferences(extRef: Element): string {\n return controlReferences\n .map(controlRef =>\n extRef.getAttribute(controlRef)\n ? `[${controlRef}=\"${extRef.getAttribute(controlRef)}\"]`\n : ''\n )\n .join('');\n}\n\n/**\n * Creating Delete actions in case Inputs elements are empty.\n *\n * @param extRefDeleteActions - All Delete actions for ExtRefs.\n * @returns Possible delete actions for empty Inputs elements.\n */\nexport function emptyInputsDeleteActions(\n extRefDeleteActions: Delete[]\n): Delete[] {\n if (!extRefDeleteActions.length) return [];\n\n const inputDeleteActions: Delete[] = [];\n const inputsMap: Record<string, Element> = {};\n\n for (const extRefDeleteAction of extRefDeleteActions) {\n const extRef = <Element>extRefDeleteAction.old.element;\n const inputsElement = <Element>extRefDeleteAction.old.parent;\n\n const id = identity(inputsElement);\n if (!inputsMap[id]) inputsMap[id] = <Element>inputsElement.cloneNode(true);\n\n // Search the ExtRef in the Cloned Inputs Element\n const linkedExtRef = inputsMap[id].querySelector(\n `ExtRef${\n extRef.getAttribute('iedName')\n ? `[iedName=\"${extRef.getAttribute('iedName')}\"]`\n : ''\n }${getFcdaReferences(extRef)}${\n extRef.getAttribute('serviceType')\n ? `[serviceType=\"${extRef.getAttribute('serviceType')}\"]`\n : ''\n }${getControlReferences(extRef)}`\n );\n // And if found remove it as child from the Cloned Inputs Element\n if (linkedExtRef) inputsMap[id].removeChild(linkedExtRef);\n }\n\n // Create delete action for each empty inputs\n Object.entries(inputsMap).forEach(([key, value]) => {\n if (value.children.length! == 0) {\n const doc = extRefDeleteActions[0].old.parent.ownerDocument!;\n const inputs = find(doc, 'Inputs', key);\n\n if (inputs && inputs.parentElement) {\n inputDeleteActions.push({\n old: { parent: inputs.parentElement, element: inputs },\n });\n }\n }\n });\n\n return inputDeleteActions;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nsd.js","sourceRoot":"","sources":["../../src/foundation/nsd.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAExE,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,qCAAqC,CAAC;KACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;KACjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CAAC","sourcesContent":["export const iec6185074 = fetch('public/xml/IEC_61850-7-4_2007B5.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n\nexport const iec6185073 = fetch('public/xml/IEC_61850-7-3_2007B5.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n\nexport const iec6185072 = fetch('public/xml/IEC_61850-7-2_2007B5.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n\nexport const iec6185081 = fetch('public/xml/IEC_61850-8-1_2003A2.nsd')\n .then(response => response.text())\n .then(str => new DOMParser().parseFromString(str, 'application/xml'));\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nsdoc.js","sourceRoot":"","sources":["../../src/foundation/nsdoc.ts"],"names":[],"mappings":"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","sourcesContent":["import { iec6185072, iec6185073, iec6185074, iec6185081 } from \"./nsd.js\";\n\nexport interface Nsdoc {\n nsdoc72?: XMLDocument;\n nsdoc73?: XMLDocument;\n nsdoc74?: XMLDocument;\n nsdoc81?: XMLDocument;\n getDataDescription: (element: Element, ancestors?: Element[]) => { label: string; }\n}\n\nconst [nsd72, nsd73, nsd74, nsd81] = await Promise.all([iec6185072, iec6185073, iec6185074, iec6185081]);\n\nlet nsdoc72: Document | undefined = undefined;\nlet nsdoc73: Document | undefined = undefined;\nlet nsdoc74: Document | undefined = undefined;\nlet nsdoc81: Document | undefined = undefined;\n\n/**\n * Initialize the full Nsdoc object.\n * @returns A fully initialized Nsdoc object for wizards/editors to use.\n */\nexport function initializeNsdoc(): Nsdoc {\n [nsdoc72, nsdoc73, nsdoc74, nsdoc81] = [\n localStorage.getItem('IEC 61850-7-2') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-2')!, 'application/xml') : undefined,\n localStorage.getItem('IEC 61850-7-3') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-3')!, 'application/xml') : undefined,\n localStorage.getItem('IEC 61850-7-4') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-7-4')!, 'application/xml') : undefined,\n localStorage.getItem('IEC 61850-8-1') ? new DOMParser().parseFromString(localStorage.getItem('IEC 61850-8-1')!, 'application/xml') : undefined\n ]\n\n const iedElementTagNames = ['LN', 'LN0', 'DO', 'SDO', 'DOI', 'DA', 'BDA', 'DAI'] as const;\n type IEDElementTagNames = typeof iedElementTagNames[number];\n type GetDataDescription = (element: Element, ancestors?: Element[]) => { label: string; };\n\n const getDataDescriptions: Record<\n IEDElementTagNames,\n {\n getDataDescription: GetDataDescription;\n }\n > = {\n LN: {\n getDataDescription: getLNDataDescription\n },\n LN0: {\n getDataDescription: getLNDataDescription\n },\n DO: {\n getDataDescription: getDODataDescription\n },\n SDO: {\n getDataDescription: getSDODataDescription\n },\n DOI: {\n getDataDescription: getDODataDescription\n },\n DA: {\n getDataDescription: getDADataDescription\n },\n BDA: {\n getDataDescription: getBDADataDescription\n },\n DAI: {\n getDataDescription: getDADataDescription\n }\n };\n\n /**\n * Getting data descriptions for LN(0) elements out of the IEC 61850-7-4 .nsdoc file.\n * @param element - The element to use for searching the LN description.\n * @returns Documentation from the .nsdoc file for this LN(0) file, or the lnClass attribute in case no description can be found.\n */\n function getLNDataDescription(element: Element): { label: string; } {\n const lnClassAttribute = element.getAttribute('lnClass')!;\n const lnClass = nsd74.querySelector(`NS > LNClasses > LNClass[name=\"${lnClassAttribute}\"]`);\n const lnClassDescription = getNsdocDocumentation(nsdoc74!, lnClass?.getAttribute('titleID'));\n\n return {\n label: lnClassDescription ? lnClassDescription + ' (' + lnClassAttribute + ')' : lnClassAttribute\n };\n }\n\n /**\n * Getting data descriptions for DO(I) elements out of the IEC 61850-7-4 .nsdoc file.\n * @param element - The element to use for searching the DO description.\n * @returns Documentation from the .nsdoc file for this DO(I) file, or the name attribute in case no description can be found.\n */\n function getDODataDescription(element: Element): { label: string; } {\n const doName = element.getAttribute('name')!;\n const lnClass = nsd74.querySelector(`NS > LNClasses > LNClass[name=\"${element.parentElement?.getAttribute('lnClass')}\"]`);\n const base = lnClass?.getAttribute('base');\n const dObject = lnClass?.querySelector(`DataObject[name=\"${doName}\"]`) ?? getInheritedDataObject(base!, doName);\n\n return {\n label: getNsdocDocumentation(nsdoc74!, dObject?.getAttribute('descID')) ?? doName\n };\n }\n\n /**\n * Getting data descriptions for SDO elements out of the IEC 61850-7-3 .nsdoc file.\n * @param element - The element to use for searching the SDO description.\n * @returns Documentation from the .nsdoc file for this SDO element, or the name attribute in case no description can be found.\n */\n function getSDODataDescription(element: Element): { label: string; } {\n const sdoName = element.getAttribute('name')!;\n const subDataObject = nsd73.querySelector(`CDCs > CDC[name=\"${element.parentElement?.getAttribute('cdc')}\"] > SubDataObject[name=\"${sdoName}\"]`);\n\n return {\n label: getNsdocDocumentation(nsdoc73!, subDataObject?.getAttribute('descID')) ?? sdoName\n };\n }\n\n /**\n * Getting data descriptions for DA(I) elements out of the IEC 61850-7-3 and IEC 61850-8-1 .nsdoc file.\n * @param element - The element to use for searching the DA description.\n * @returns Documentation from the .nsdoc file for this DA(I) element, or the name attribute in case no description can be found.\n */\n function getDADataDescription(element: Element): { label: string; } {\n const daElementName = element.getAttribute('name')!;\n const cdcName = element.closest('DOType')!.getAttribute('cdc');\n const serviceDataAttr = nsd81.querySelector(`ServiceCDCs > ServiceCDC[cdc=\"${cdcName}\"] > ServiceDataAttribute[name=\"${daElementName}\"]`);\n\n if (serviceDataAttr) {\n const id = serviceDataAttr?.getAttribute('descID') ??\n nsd81.querySelector(`ServiceConstructedAttributes > ServiceConstructedAttribute[name=\"${daElementName}\"]`)?.getAttribute('titleID') ?? '';\n return {\n label: getNsdocDocumentation(nsdoc81!, id) ?? daElementName\n };\n } else {\n const dataAttr = nsd73.querySelector(`NS > CDCs > CDC[name=\"${cdcName}\"] > DataAttribute[name=\"${daElementName}\"]`);\n return {\n label: getNsdocDocumentation(nsdoc73!, dataAttr?.getAttribute('descID')) ?? daElementName\n };\n }\n }\n\n /**\n * Getting data descriptions for BDA elements out of the IEC 61850-7-3 and IEC 61850-8-1 .nsdoc file.\n * @param element - The element to use for searching the BDA description.\n * @param ancestors - In this function, we need an ancestor to get a 'CDC' attribute.\n * @returns Documentation from the .nsdoc file for this BDA element, or the name attribute in case no description can be found.\n */\n function getBDADataDescription(element: Element, ancestors?: Element[]): { label: string; } {\n const bdaElementName = element.getAttribute('name')!;\n const daParent = ancestors?.filter(x => x.tagName === 'DA')[0];\n const serviceDataAttr = nsd81.querySelector(`ServiceConstructedAttributes > ServiceConstructedAttribute[name=\"${daParent!.getAttribute('name')}\"]`);\n\n if (serviceDataAttr) {\n if (serviceDataAttr.querySelector(`SubDataAttribute[name=\"${ancestors![0].getAttribute('name')}\"]`)?.getAttribute('type') == 'Originator') {\n const subDataAttr = nsd72.querySelector(`ConstructedAttributes > ConstructedAttribute[name=\"Originator\"] > SubDataAttribute[name=\"${bdaElementName}\"]`);\n return {\n label: getNsdocDocumentation(nsdoc72!, subDataAttr?.getAttribute('descID')) ?? bdaElementName\n };\n }\n return {\n label: getNsdocDocumentation(nsdoc81!,\n serviceDataAttr.querySelector(`SubDataAttribute[name=\"${bdaElementName}\"]`)?.getAttribute('descID')) ?? bdaElementName\n };\n } else {\n const dataAttrParent = nsd73.querySelector(`NS > CDCs > CDC[name=\"${daParent!.closest('DOType')?.getAttribute('cdc')}\"] >\n DataAttribute[name=\"${daParent!.getAttribute('name')}\"]`);\n return {\n label: getNsdocDocumentation(nsdoc73!, getSubDataAttribute(dataAttrParent!, bdaElementName)?.getAttribute('descID')) ?? bdaElementName\n };\n }\n }\n\n /**\n * Get the SubDataAttribute from the IEC-61850-7-3.\n * @param parent - The parent element in which to search for a SubDataAttribute.\n * @param bdaElementName - The name of the element to search.\n * @returns A SubDataAttribute, or null.\n */\n function getSubDataAttribute(parent: Element | undefined, bdaElementName: string): Element | null {\n if (!parent) return null;\n const subDataAttr = nsd73.querySelector(`ConstructedAttributes > ConstructedAttribute[name=\"${parent?.getAttribute('type')}\"] > SubDataAttribute[name=\"${bdaElementName}\"]`);\n return subDataAttr ?? getSubDataAttribute(nsd73.querySelector(`ConstructedAttributes > ConstructedAttribute[name=\"${parent?.getAttribute('type')}\"] > SubDataAttribute`)!, bdaElementName);\n }\n\n /**\n * Get the potential inherited data object based on a LNClass base.\n * @param lnClassBase - The base of a LNClass element.\n * @param doName - The name of the DO(I) to search for.\n * @returns the DataObject in case found, otherwise null.\n */\n function getInheritedDataObject(lnClassBase: string, doName: string): Element | null {\n if (!lnClassBase) return null;\n const lnClass = nsd74.querySelector(`NS > LNClasses > AbstractLNClass[name=\"${lnClassBase}\"]`);\n const base = lnClass?.getAttribute('base');\n\n return lnClass?.querySelector(`DataObject[name=\"${doName}\"]`) ?? getInheritedDataObject(base!, doName);\n }\n\n return {\n nsdoc72: nsdoc72,\n nsdoc73: nsdoc73,\n nsdoc74: nsdoc74,\n nsdoc81: nsdoc81,\n getDataDescription: function getDataDescription(element: Element, ancestors?: Element[]): { label: string; } {\n return getDataDescriptions[element.tagName as keyof Record<IEDElementTagNames,\n {\n getDataDescription: GetDataDescription;\n }\n >].getDataDescription(element, ancestors);\n }\n\n }\n}\n\n/**\n * Get the documentation from a given nsdoc file.\n * @param nsdoc - The .nsdoc file to use for searching\n * @param id - The id of the doc to search for.\n * @returns - The documentation belonging to the id.\n */\nfunction getNsdocDocumentation(nsdoc: XMLDocument, id: string | null | undefined): string | null | undefined {\n return nsdoc?.querySelector(`NSDoc > Doc[id=\"${id ?? ''}\"]`)?.textContent;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scl.js","sourceRoot":"","sources":["../../src/foundation/scl.ts"],"names":[],"mappings":"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","sourcesContent":["import { crossProduct } from '../foundation.js';\n\nfunction getDataModelChildren(parent: Element): Element[] {\n if (['LDevice', 'Server'].includes(parent.tagName))\n return Array.from(parent.children).filter(\n child =>\n child.tagName === 'LDevice' ||\n child.tagName === 'LN0' ||\n child.tagName === 'LN'\n );\n\n const id =\n parent.tagName === 'LN' || parent.tagName === 'LN0'\n ? parent.getAttribute('lnType')\n : parent.getAttribute('type');\n\n return Array.from(\n parent.ownerDocument.querySelectorAll(\n `LNodeType[id=\"${id}\"] > DO, DOType[id=\"${id}\"] > SDO, DOType[id=\"${id}\"] > DA, DAType[id=\"${id}\"] > BDA`\n )\n );\n}\n\nexport function existFcdaReference(fcda: Element, ied: Element): boolean {\n const [ldInst, prefix, lnClass, lnInst, doName, daName, fc] = [\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n 'doName',\n 'daName',\n 'fc',\n ].map(attr => fcda.getAttribute(attr));\n\n const sinkLdInst = ied.querySelector(`LDevice[inst=\"${ldInst}\"]`);\n if (!sinkLdInst) return false;\n\n const prefixSelctors = prefix\n ? [`[prefix=\"${prefix}\"]`]\n : ['[prefix=\"\"]', ':not([prefix])'];\n const lnInstSelectors = lnInst\n ? [`[inst=\"${lnInst}\"]`]\n : ['[inst=\"\"]', ':not([inst])'];\n\n const anyLnSelector = crossProduct(\n ['LN0', 'LN'],\n prefixSelctors,\n [`[lnClass=\"${lnClass}\"]`],\n lnInstSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n\n const sinkAnyLn = ied.querySelector(anyLnSelector);\n if (!sinkAnyLn) return false;\n\n const doNames = doName?.split('.');\n if (!doNames) return false;\n\n let parent: Element | undefined = sinkAnyLn;\n for (const doNameAttr of doNames) {\n parent = getDataModelChildren(parent).find(\n child => child.getAttribute('name') === doNameAttr\n );\n if (!parent) return false;\n }\n\n const daNames = daName?.split('.');\n const someFcInSink = getDataModelChildren(parent).some(\n da => da.getAttribute('fc') === fc\n );\n if (!daNames && someFcInSink) return true;\n if (!daNames) return false;\n\n let sinkFc = '';\n for (const daNameAttr of daNames) {\n parent = getDataModelChildren(parent).find(\n child => child.getAttribute('name') === daNameAttr\n );\n\n if (parent?.getAttribute('fc')) sinkFc = parent.getAttribute('fc')!;\n\n if (!parent) return false;\n }\n\n if (sinkFc !== fc) return false;\n\n return true;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"foundation.js","sourceRoot":"","sources":["../src/foundation.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, TemplateResult } from 'lit-element';\nimport { directive, Part } from 'lit-html';\n\nimport { List } from '@material/mwc-list';\nimport { Select } from '@material/mwc-select';\nimport { TextField } from '@material/mwc-textfield';\nimport AceEditor from 'ace-custom-element';\n\nimport { getChildElementsByTagName } from '@compas-oscd/xml';\n\nimport { WizardTextField } from './wizard-textfield.js';\nimport { WizardSelect } from './wizard-select.js';\nimport { WizardCheckbox } from './wizard-checkbox.js';\n\nimport { EditorAction } from '@compas-oscd/core';\n\nexport const wizardInputSelector =\n 'wizard-textfield, mwc-textfield, ace-editor, mwc-select, wizard-select, wizard-checkbox';\nexport type WizardInputElement =\n | WizardTextField\n | TextField\n | (AceEditor & {\n checkValidity: () => boolean;\n validityTransform: (\n newValue: string,\n nativeValidity: ValidityState\n ) => ValidityState;\n validationMessage: string;\n validity: ValidityState;\n label: string;\n requestUpdate(name?: PropertyKey, oldValue?: unknown): Promise<unknown>;\n })\n // TODO(c-dinkel): extend component\n | Select\n | WizardSelect;\n\nexport type WizardAction = EditorAction | WizardFactory;\n\n/** @returns [[`EditorAction`]]s to dispatch on [[`WizardDialog`]] commit. */\nexport type WizardActor = (\n inputs: WizardInputElement[],\n wizard: Element,\n list?: List | null\n) => WizardAction[];\n\nexport function isWizardFactory(\n maybeFactory: WizardAction | Wizard | null\n): maybeFactory is WizardFactory {\n return typeof maybeFactory === 'function';\n}\n\n/** @returns the validity of `input` depending on type. */\nexport function checkValidity(input: WizardInputElement): boolean {\n if (input instanceof WizardTextField || input instanceof Select)\n return input.checkValidity();\n else return true;\n}\n\n/** reports the validity of `input` depending on type. */\nexport function reportValidity(input: WizardInputElement): boolean {\n if (input instanceof WizardTextField || input instanceof Select)\n return input.reportValidity();\n else return true;\n}\n\n/** @returns the `value` or `maybeValue` of `input` depending on type. */\nexport function getValue(input: WizardInputElement): string | null {\n if (\n input instanceof WizardTextField ||\n input instanceof WizardSelect ||\n input instanceof WizardCheckbox\n )\n return input.maybeValue;\n else return input.value ?? null;\n}\n\n/** @returns the `multiplier` of `input` if available. */\nexport function getMultiplier(input: WizardInputElement): string | null {\n if (input instanceof WizardTextField) return input.multiplier;\n else return null;\n}\n\n/** Inputs as `TextField`, `Select` or `Checkbox `used in`wizard-dialog` */\nexport type WizardInput =\n | WizardInputTextField\n | WizardInputSelect\n | WizardInputCheckbox;\n\ninterface WizardInputBase {\n /** maps attribute key */\n label: string;\n /** maps attribute value */\n maybeValue: string | null;\n /** whether attribute is optional */\n nullable?: boolean;\n /** whether the input shall be disabled */\n disabled?: boolean;\n /** helper text */\n helper?: string;\n /** initial focused element in `wizard-dialog` (once per dialog) */\n dialogInitialFocus?: boolean;\n}\n\ninterface WizardInputTextField extends WizardInputBase {\n kind: 'TextField';\n /** wether the input might be empty string */\n required?: boolean;\n /** pattern definition from schema */\n pattern?: string;\n /** minimal characters allowed */\n minLength?: number;\n /** maximal characters allowed */\n maxLength?: number;\n /** message text explaining invalid inputs */\n validationMessage?: string;\n /** suffix definition - overwrites unit multiplier definition */\n suffix?: string;\n /** SI unit for specific suffix definition */\n unit?: string;\n /** in comibination with unit defines specific suffix */\n multiplier?: string | null;\n /** array of multipliers allowed for the input */\n multipliers?: (string | null)[];\n /** used for specific input type e.g. number */\n type?: string;\n /** minimal valid number in combination with type number */\n min?: number;\n /** maximal valid number in combination with type number */\n max?: number;\n /** value displaxed when input is nulled */\n default?: string;\n}\n\ninterface WizardInputSelect extends WizardInputBase {\n kind: 'Select';\n /** selectabled values */\n values: string[];\n /** value displayed with input is nulled */\n default?: string;\n /** message explaining invalid inputs */\n valadationMessage?: string;\n}\n\ninterface WizardInputCheckbox extends WizardInputBase {\n kind: 'Checkbox';\n /** wether checkbox is checked with nulled input */\n default?: boolean;\n}\n\n/** @returns [[`WizardAction`]]s to dispatch on [[`WizardDialog`]] menu action. */\nexport type WizardMenuActor = (wizard: Element) => void;\n\n/** User interactions rendered in the wizard-dialog menu */\nexport interface MenuAction {\n label: string;\n icon?: string;\n action: WizardMenuActor;\n}\n\n/** Represents a page of a wizard dialog */\nexport interface WizardPage {\n title: string;\n content?: (TemplateResult | WizardInput)[];\n primary?: {\n icon: string;\n label: string;\n action: WizardActor;\n auto?: boolean;\n };\n secondary?: {\n icon: string;\n label: string;\n action: WizardActor;\n };\n initial?: boolean;\n element?: Element;\n menuActions?: MenuAction[];\n}\nexport type Wizard = WizardPage[];\nexport type WizardFactory = () => Wizard;\n\n/** If `wizard === null`, close the current wizard, else queue `wizard`. */\nexport interface WizardDetail {\n wizard: WizardFactory | null;\n subwizard?: boolean;\n}\nexport type WizardEvent = CustomEvent<WizardDetail>;\nexport function newWizardEvent(\n wizardOrFactory?: Wizard | WizardFactory,\n eventInitDict?: CustomEventInit<Partial<WizardDetail>>\n): WizardEvent {\n if (!wizardOrFactory)\n return new CustomEvent<WizardDetail>('wizard', {\n bubbles: true,\n composed: true,\n ...eventInitDict,\n detail: { wizard: null, ...eventInitDict?.detail },\n });\n\n const wizard = isWizardFactory(wizardOrFactory)\n ? wizardOrFactory\n : () => wizardOrFactory;\n\n return new CustomEvent<WizardDetail>('wizard', {\n bubbles: true,\n composed: true,\n ...eventInitDict,\n detail: { wizard, ...eventInitDict?.detail },\n });\n}\n\nexport function newSubWizardEvent(\n wizardOrFactory?: Wizard | WizardFactory\n): WizardEvent {\n return newWizardEvent(wizardOrFactory, { detail: { subwizard: true } });\n}\n\n/** @returns a reference to `element` with segments delimited by '/'. */\n// TODO(c-dinkel): replace with identity (FIXME)\nexport function referencePath(element: Element): string {\n let path = '';\n let nextParent: Element | null = element.parentElement;\n while (nextParent?.getAttribute('name')) {\n path = '/' + nextParent.getAttribute('name') + path;\n nextParent = nextParent.parentElement;\n }\n return path;\n}\n\nexport type SclEdition = '2003' | '2007B' | '2007B4';\nexport function getSclSchemaVersion(doc: Document): SclEdition {\n const scl: Element = doc.documentElement;\n const edition =\n (scl.getAttribute('version') ?? '2003') +\n (scl.getAttribute('revision') ?? '') +\n (scl.getAttribute('release') ?? '');\n return <SclEdition>edition;\n}\n\n/**\n * Extract the 'name' attribute from the given XML element.\n * @param element - The element to extract name from.\n * @returns the name, or undefined if there is no name.\n */\nexport function getNameAttribute(element: Element): string | undefined {\n const name = element.getAttribute('name');\n return name ? name : undefined;\n}\n\n/**\n * Extract the 'ldName' attribute from the given XML element.\n * @param element - The element to extract ldName from.\n * @returns the ldName, or undefined if there is no ldName.\n */\nexport function getLdNameAttribute(element: Element): string | undefined {\n const name = element.getAttribute('ldName');\n return name ? name : undefined;\n}\n\n/**\n * Extract the 'desc' attribute from the given XML element.\n * @param element - The element to extract description from.\n * @returns the name, or undefined if there is no description.\n */\nexport function getDescriptionAttribute(element: Element): string | undefined {\n const name = element.getAttribute('desc');\n return name ? name : undefined;\n}\n\n/**\n * Extract the 'pathName' attribute from the given XML element.\n * @param element - The element to extract path name from.\n * @returns the name, or undefined if there is no path name.\n */\nexport function getPathNameAttribute(element: Element): string | undefined {\n const name = element.getAttribute('pathName');\n return name ? name : undefined;\n}\n\n/**\n * Extract the 'inst' attribute from the given XML element.\n * @param element - The element to extract instance from.\n * @returns the instance, or undefined if there is no instance.\n */\nexport function getInstanceAttribute(element: Element): string | undefined {\n const inst = element.getAttribute('inst');\n return inst ? inst : undefined;\n}\n\nexport function pathParts(identity: string): [string, string] {\n const path = identity.split('>');\n const end = path.pop() ?? '';\n const start = path.join('>');\n return [start, end];\n}\n\nconst voidSelector = ':not(*)';\n\nfunction hitemIdentity(e: Element): string {\n return `${e.getAttribute('version')}\\t${e.getAttribute('revision')}`;\n}\n\nfunction hitemSelector(tagName: SCLTag, identity: string): string {\n const [version, revision] = identity.split('\\t');\n\n if (!version || !revision) return voidSelector;\n\n return `${tagName}[version=\"${version}\"][revision=\"${revision}\"]`;\n}\n\nfunction terminalIdentity(e: Element): string {\n return identity(e.parentElement) + '>' + e.getAttribute('connectivityNode');\n}\n\nfunction terminalSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, connectivityNode] = pathParts(identity);\n\n const parentSelectors = tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n );\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [`${tagName}[connectivityNode=\"${connectivityNode}\"]`]\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction lNodeIdentity(e: Element): string {\n const [iedName, ldInst, prefix, lnClass, lnInst, lnType] = [\n 'iedName',\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n 'lnType',\n ].map(name => e.getAttribute(name));\n if (iedName === 'None')\n return `${identity(e.parentElement)}>(${lnClass} ${lnType} ${lnInst})`;\n return `${iedName} ${ldInst || '(Client)'}/${prefix ?? ''} ${lnClass} ${\n lnInst ?? ''\n }`;\n}\n\nfunction lNodeSelector(tagName: SCLTag, identity: string): string {\n if (identity.endsWith(')')) {\n const [parentIdentity, childIdentity] = pathParts(identity);\n const [lnClass, lnType, lnInst] = childIdentity\n .substring(1, childIdentity.length - 1)\n .split(' ');\n\n if (!lnClass || !lnType) return voidSelector;\n\n const parentSelectors = tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n );\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [`${tagName}[iedName=\"None\"][lnClass=\"${lnClass}\"][lnType=\"${lnType}\"][lnInst=\"${lnInst}\"]`]\n )\n .map(strings => strings.join(''))\n .join(',');\n }\n\n const [iedName, ldInst, prefix, lnClass, lnInst] = identity.split(/[ /]/);\n\n if (!iedName || !ldInst || !lnClass) return voidSelector;\n\n const [\n iedNameSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n ] = [\n [`[iedName=\"${iedName}\"]`],\n ldInst === '(Client)'\n ? [':not([ldInst])', '[ldInst=\"\"]']\n : [`[ldInst=\"${ldInst}\"]`],\n prefix ? [`[prefix=\"${prefix}\"]`] : [':not([prefix])', '[prefix=\"\"]'],\n [`[lnClass=\"${lnClass}\"]`],\n lnInst ? [`[lnInst=\"${lnInst}\"]`] : [':not([lnInst])', '[lnInst=\"\"]'],\n ];\n\n return crossProduct(\n [tagName],\n iedNameSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction kDCIdentity(e: Element): string {\n return `${identity(e.parentElement)}>${e.getAttribute(\n 'iedName'\n )} ${e.getAttribute('apName')}`;\n}\n\nfunction kDCSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n const [iedName, apName] = childIdentity.split(' ');\n return `${selector(\n 'IED',\n parentIdentity\n )}>${tagName}[iedName=\"${iedName}\"][apName=\"${apName}\"]`;\n}\n\nfunction associationIdentity(e: Element): string {\n return `${identity(e.parentElement)}>${\n e.getAttribute('associationID') ?? ''\n }`;\n}\n\nfunction associationSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, associationID] = pathParts(identity);\n\n if (!associationID) return voidSelector;\n\n return `${selector(\n 'Server',\n parentIdentity\n )}>${tagName}[associationID=\"${associationID}\"]`;\n}\n\nfunction lDeviceIdentity(e: Element): string {\n return `${identity(e.closest('IED')!)}>>${e.getAttribute('inst')}`;\n}\n\nfunction lDeviceSelector(tagName: SCLTag, identity: string): string {\n const [iedName, inst] = identity.split('>>');\n\n if (!inst) return voidSelector;\n\n return `IED[name=\"${iedName}\"] ${tagName}[inst=\"${inst}\"]`;\n}\n\nfunction iEDNameIdentity(e: Element): string {\n const iedName = e.textContent;\n const [apRef, ldInst, prefix, lnClass, lnInst] = [\n 'apRef',\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n ].map(name => e.getAttribute(name));\n return `${identity(e.parentElement)}>${iedName} ${apRef ? apRef : ''} ${\n ldInst ? ldInst : ''\n }/${prefix ?? ''} ${lnClass ?? ''} ${lnInst ?? ''}`;\n}\n\nfunction iEDNameSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const [iedName, apRef, ldInst, prefix, lnClass, lnInst] =\n childIdentity.split(/[ /]/);\n\n const [\n parentSelectors,\n apRefSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n ] = [\n tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n ),\n [`${iedName}`],\n apRef ? [`[apRef=\"${apRef}\"]`] : [':not([apRef])', '[apRef=\"\"]'],\n ldInst ? [`[ldInst=\"${ldInst}\"]`] : [':not([ldInst])', '[ldInst=\"\"]'],\n prefix ? [`[prefix=\"${prefix}\"]`] : [':not([prefix])', '[prefix=\"\"]'],\n [`[lnClass=\"${lnClass}\"]`],\n lnInst ? [`[lnInst=\"${lnInst}\"]`] : [':not([lnInst])', '[lnInst=\"\"]'],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n apRefSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction fCDAIdentity(e: Element): string {\n const [ldInst, prefix, lnClass, lnInst, doName, daName, fc, ix] = [\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n 'doName',\n 'daName',\n 'fc',\n 'ix',\n ].map(name => e.getAttribute(name));\n const dataPath = `${ldInst}/${prefix ?? ''} ${lnClass} ${\n lnInst ?? ''\n }.${doName} ${daName ? daName : ''}`;\n return `${identity(e.parentElement)}>${dataPath} (${fc}${\n ix ? ' [' + ix + ']' : ''\n })`;\n}\n\nfunction fCDASelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const [ldInst, prefix, lnClass, lnInst] = childIdentity.split(/[ /.]/);\n\n const matchDoDa = childIdentity.match(\n /.([A-Z][A-Za-z0-9.]*) ([A-Za-z0-9.]*) \\(/\n );\n const doName = matchDoDa && matchDoDa[1] ? matchDoDa[1] : '';\n const daName = matchDoDa && matchDoDa[2] ? matchDoDa[2] : '';\n\n const matchFx = childIdentity.match(/\\(([A-Z]{2})/);\n const matchIx = childIdentity.match(/ \\[([0-9]{1,2})\\]/);\n\n const fc = matchFx && matchFx[1] ? matchFx[1] : '';\n const ix = matchIx && matchIx[1] ? matchIx[1] : '';\n\n const [\n parentSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n doNameSelectors,\n daNameSelectors,\n fcSelectors,\n ixSelectors,\n ] = [\n tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n ),\n [`[ldInst=\"${ldInst}\"]`],\n prefix ? [`[prefix=\"${prefix}\"]`] : [':not([prefix])', '[prefix=\"\"]'],\n [`[lnClass=\"${lnClass}\"]`],\n lnInst ? [`[lnInst=\"${lnInst}\"]`] : [':not([lnInst])', '[lnInst=\"\"]'],\n [`[doName=\"${doName}\"]`],\n daName ? [`[daName=\"${daName}\"]`] : [':not([daName])', '[daName=\"\"]'],\n [`[fc=\"${fc}\"]`],\n ix ? [`[ix=\"${ix}\"]`] : [':not([ix])', '[ix=\"\"]'],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n doNameSelectors,\n daNameSelectors,\n fcSelectors,\n ixSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction extRefIdentity(e: Element): string | number {\n if (!e.parentElement) return NaN;\n const parentIdentity = identity(e.parentElement);\n const iedName = e.getAttribute('iedName');\n const intAddr = e.getAttribute('intAddr');\n const intAddrIndex = Array.from(\n e.parentElement.querySelectorAll(`ExtRef[intAddr=\"${intAddr}\"]`)\n ).indexOf(e);\n if (intAddr) return `${parentIdentity}>${intAddr}[${intAddrIndex}]`;\n const [\n ldInst,\n prefix,\n lnClass,\n lnInst,\n doName,\n daName,\n serviceType,\n srcLDInst,\n srcPrefix,\n srcLNClass,\n srcLNInst,\n srcCBName,\n ] = [\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n 'doName',\n 'daName',\n 'serviceType',\n 'srcLDInst',\n 'srcPrefix',\n 'srcLNClass',\n 'srcLNInst',\n 'srcCBName',\n ].map(name => e.getAttribute(name));\n\n const cbPath = srcCBName\n ? `${serviceType}:${srcCBName} ${srcLDInst ?? ''}/${srcPrefix ?? ''} ${\n srcLNClass ?? ''\n } ${srcLNInst ?? ''}`\n : '';\n const dataPath = `${iedName} ${ldInst}/${prefix ?? ''} ${lnClass} ${\n lnInst ?? ''\n } ${doName} ${daName ? daName : ''}`;\n return `${parentIdentity}>${cbPath ? cbPath + ' ' : ''}${dataPath}${\n intAddr ? '@' + `${intAddr}` : ''\n }`;\n}\n\nfunction extRefSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const parentSelectors = tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n );\n\n if (childIdentity.endsWith(']')) {\n const [intAddr] = childIdentity.split('[');\n const intAddrSelectors = [`[intAddr=\"${intAddr}\"]`];\n\n return crossProduct(parentSelectors, ['>'], [tagName], intAddrSelectors)\n .map(strings => strings.join(''))\n .join(',');\n }\n\n let iedName,\n ldInst,\n prefix,\n lnClass,\n lnInst,\n doName,\n daName,\n serviceType,\n srcCBName,\n srcLDInst,\n srcPrefix,\n srcLNClass,\n srcLNInst,\n intAddr;\n\n if (!childIdentity.includes(':') && !childIdentity.includes('@')) {\n [iedName, ldInst, prefix, lnClass, lnInst, doName, daName] =\n childIdentity.split(/[ /]/);\n } else if (childIdentity.includes(':') && !childIdentity.includes('@')) {\n [\n serviceType,\n srcCBName,\n srcLDInst,\n srcPrefix,\n srcLNClass,\n srcLNInst,\n iedName,\n ldInst,\n prefix,\n lnClass,\n lnInst,\n doName,\n daName,\n ] = childIdentity.split(/[ /:]/);\n } else if (!childIdentity.includes(':') && childIdentity.includes('@')) {\n [iedName, ldInst, prefix, lnClass, lnInst, doName, daName, intAddr] =\n childIdentity.split(/[ /@]/);\n } else {\n [\n serviceType,\n srcCBName,\n srcLDInst,\n srcPrefix,\n srcLNClass,\n srcLNInst,\n iedName,\n ldInst,\n prefix,\n lnClass,\n lnInst,\n doName,\n daName,\n intAddr,\n ] = childIdentity.split(/[ /:@]/);\n }\n\n const [\n iedNameSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n doNameSelectors,\n daNameSelectors,\n serviceTypeSelectors,\n srcCBNameSelectors,\n srcLDInstSelectors,\n srcPrefixSelectors,\n srcLNClassSelectors,\n srcLNInstSelectors,\n intAddrSelectors,\n ] = [\n iedName ? [`[iedName=\"${iedName}\"]`] : [':not([iedName])'],\n ldInst ? [`[ldInst=\"${ldInst}\"]`] : [':not([ldInst])', '[ldInst=\"\"]'],\n prefix ? [`[prefix=\"${prefix}\"]`] : [':not([prefix])', '[prefix=\"\"]'],\n lnClass ? [`[lnClass=\"${lnClass}\"]`] : [':not([lnClass])'],\n lnInst ? [`[lnInst=\"${lnInst}\"]`] : [':not([lnInst])', '[lnInst=\"\"]'],\n doName ? [`[doName=\"${doName}\"]`] : [':not([doName])'],\n daName ? [`[daName=\"${daName}\"]`] : [':not([daName])', '[daName=\"\"]'],\n serviceType\n ? [`[serviceType=\"${serviceType}\"]`]\n : [':not([serviceType])', '[serviceType=\"\"]'],\n srcCBName\n ? [`[srcCBName=\"${srcCBName}\"]`]\n : [':not([srcCBName])', '[srcCBName=\"\"]'],\n srcLDInst\n ? [`[srcLDInst=\"${srcLDInst}\"]`]\n : [':not([srcLDInst])', '[srcLDInst=\"\"]'],\n srcPrefix\n ? [`[srcPrefix=\"${srcPrefix}\"]`]\n : [':not([srcPrefix])', '[srcPrefix=\"\"]'],\n srcLNClass\n ? [`[srcLNClass=\"${srcLNClass}\"]`]\n : [':not([srcLNClass])', '[srcLNClass=\"\"]'],\n srcLNInst\n ? [`[srcLNInst=\"${srcLNInst}\"]`]\n : [':not([srcLNInst])', '[srcLNInst=\"\"]'],\n intAddr ? [`[intAddr=\"${intAddr}\"]`] : [':not([intAddr])', '[intAddr=\"\"]'],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n iedNameSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n doNameSelectors,\n daNameSelectors,\n serviceTypeSelectors,\n srcCBNameSelectors,\n srcLDInstSelectors,\n srcPrefixSelectors,\n srcLNClassSelectors,\n srcLNInstSelectors,\n intAddrSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction lNIdentity(e: Element): string {\n const [prefix, lnClass, inst] = ['prefix', 'lnClass', 'inst'].map(name =>\n e.getAttribute(name)\n );\n return `${identity(e.parentElement)}>${prefix ?? ''} ${lnClass} ${inst}`;\n}\n\nfunction lNSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const parentSelectors = tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n );\n\n const [prefix, lnClass, inst] = childIdentity.split(' ');\n\n if (!lnClass) return voidSelector;\n\n const [prefixSelectors, lnClassSelectors, instSelectors] = [\n prefix ? [`[prefix=\"${prefix}\"]`] : [':not([prefix])', '[prefix=\"\"]'],\n [`[lnClass=\"${lnClass}\"]`],\n [`[inst=\"${inst}\"]`],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n prefixSelectors,\n lnClassSelectors,\n instSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction clientLNIdentity(e: Element): string {\n const [apRef, iedName, ldInst, prefix, lnClass, lnInst] = [\n 'apRef',\n 'iedName',\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n ].map(name => e.getAttribute(name));\n return `${identity(e.parentElement)}>${iedName} ${\n apRef ? apRef : ''\n } ${ldInst}/${prefix ?? ''} ${lnClass} ${lnInst}`;\n}\n\nfunction clientLNSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const parentSelectors = tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n );\n\n const [iedName, apRef, ldInst, prefix, lnClass, lnInst] =\n childIdentity.split(/[ /]/);\n\n const [\n iedNameSelectors,\n apRefSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors,\n ] = [\n iedName ? [`[iedName=\"${iedName}\"]`] : [':not([iedName])', '[iedName=\"\"]'],\n apRef ? [`[apRef=\"${apRef}\"]`] : [':not([apRef])', '[apRef=\"\"]'],\n ldInst ? [`[ldInst=\"${ldInst}\"]`] : [':not([ldInst])', '[ldInst=\"\"]'],\n prefix ? [`[prefix=\"${prefix}\"]`] : [':not([prefix])', '[prefix=\"\"]'],\n [`[lnClass=\"${lnClass}\"]`],\n lnInst ? [`[lnInst=\"${lnInst}\"]`] : [':not([lnInst])', '[lnInst=\"\"]'],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n iedNameSelectors,\n apRefSelectors,\n ldInstSelectors,\n prefixSelectors,\n lnClassSelectors,\n lnInstSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction ixNamingIdentity(e: Element): string {\n const [name, ix] = ['name', 'ix'].map(name => e.getAttribute(name));\n return `${identity(e.parentElement)}>${name}${ix ? '[' + ix + ']' : ''}`;\n}\n\nfunction ixNamingSelector(\n tagName: SCLTag,\n identity: string,\n depth = -1\n): string {\n if (depth === -1) depth = identity.split('>').length;\n\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const [_0, name, _1, ix] =\n childIdentity.match(/([^[]*)(\\[([0-9]*)\\])?/) ?? [];\n\n if (!name) return voidSelector;\n\n if (depth === 0) return `${tagName}[name=\"${name}\"]`;\n\n const parentSelectors = tags[tagName].parents\n .flatMap(parentTag =>\n parentTag === 'SDI'\n ? ixNamingSelector(parentTag, parentIdentity, depth - 1).split(',')\n : selector(parentTag, parentIdentity).split(',')\n )\n .filter(selector => !selector.startsWith(voidSelector));\n\n if (parentSelectors.length === 0) return voidSelector;\n\n const [nameSelectors, ixSelectors] = [\n [`[name=\"${name}\"]`],\n ix ? [`[ix=\"${ix}\"]`] : ['[ix=\"\"]', ':not([ix])'],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n nameSelectors,\n ixSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction valIdentity(e: Element): string | number {\n if (!e.parentElement) return NaN;\n const sGroup = e.getAttribute('sGroup');\n const index = Array.from(e.parentElement.children)\n .filter(child => child.getAttribute('sGroup') === sGroup)\n .findIndex(child => child.isSameNode(e));\n return `${identity(e.parentElement)}>${sGroup ? sGroup + '.' : ''} ${index}`;\n}\n\nfunction valSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const [sGroup, indexText] = childIdentity.split(' ');\n const index = parseFloat(indexText);\n\n const parentSelectors = tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n );\n\n const [nameSelectors, ixSelectors] = [\n sGroup ? [`[sGroup=\"${sGroup}\"]`] : [''],\n index ? [`:nth-child(${index + 1})`] : [''],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n nameSelectors,\n ixSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction connectedAPIdentity(e: Element): string {\n const [iedName, apName] = ['iedName', 'apName'].map(name =>\n e.getAttribute(name)\n );\n return `${iedName} ${apName}`;\n}\n\nfunction connectedAPSelector(tagName: SCLTag, identity: string): string {\n const [iedName, apName] = identity.split(' ');\n if (!iedName || !apName) return voidSelector;\n return `${tagName}[iedName=\"${iedName}\"][apName=\"${apName}\"]`;\n}\n\nfunction controlBlockIdentity(e: Element): string {\n const [ldInst, cbName] = ['ldInst', 'cbName'].map(name =>\n e.getAttribute(name)\n );\n return `${ldInst} ${cbName}`;\n}\n\nfunction controlBlockSelector(tagName: SCLTag, identity: string): string {\n const [ldInst, cbName] = identity.split(' ');\n\n if (!ldInst || !cbName) return voidSelector;\n\n return `${tagName}[ldInst=\"${ldInst}\"][cbName=\"${cbName}\"]`;\n}\n\nfunction physConnIdentity(e: Element): string | number {\n if (!e.parentElement) return NaN;\n if (!e.parentElement.querySelector('PhysConn[type=\"RedConn\"]')) return NaN;\n const pcType = e.getAttribute('type');\n if (\n e.parentElement.children.length > 1 &&\n pcType !== 'Connection' &&\n pcType !== 'RedConn'\n )\n return NaN;\n return `${identity(e.parentElement)}>${pcType}`;\n}\n\nfunction physConnSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, pcType] = pathParts(identity);\n\n const [parentSelectors, typeSelectors] = [\n tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n ),\n pcType ? [`[type=\"${pcType}\"]`] : [''],\n ];\n\n return crossProduct(parentSelectors, ['>'], [tagName], typeSelectors)\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction pIdentity(e: Element): string | number {\n if (!e.parentElement) return NaN;\n const eParent = e.parentElement;\n const eType = e.getAttribute('type');\n if (eParent.tagName === 'PhysConn')\n return `${identity(e.parentElement)}>${eType}`;\n const index = Array.from(e.parentElement.children)\n .filter(child => child.getAttribute('type') === eType)\n .findIndex(child => child.isSameNode(e));\n return `${identity(e.parentElement)}>${eType} [${index}]`;\n}\n\nfunction pSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const [type] = childIdentity.split(' ');\n const index =\n childIdentity &&\n childIdentity.match(/\\[([0-9]+)\\]/) &&\n childIdentity.match(/\\[([0-9]+)\\]/)![1]\n ? parseFloat(childIdentity.match(/\\[([0-9]+)\\]/)![1])\n : NaN;\n\n const [parentSelectors, typeSelectors, ixSelectors] = [\n tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n ),\n [`[type=\"${type}\"]`],\n index ? [`:nth-child(${index + 1})`] : [''],\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n typeSelectors,\n ixSelectors\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction enumValIdentity(e: Element): string {\n return `${identity(e.parentElement)}>${e.getAttribute('ord')}`;\n}\n\nfunction enumValSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, ord] = pathParts(identity);\n return `${selector('EnumType', parentIdentity)}>${tagName}[ord=\"${ord}\"]`;\n}\n\nfunction protNsIdentity(e: Element): string {\n return `${identity(e.parentElement)}>${e.getAttribute('type') || '8-MMS'}\\t${\n e.textContent\n }`;\n}\n\nfunction protNsSelector(tagName: SCLTag, identity: string): string {\n const [parentIdentity, childIdentity] = pathParts(identity);\n\n const [type, value] = childIdentity.split('\\t');\n\n const [parentSelectors] = [\n tags[tagName].parents.flatMap(parentTag =>\n selector(parentTag, parentIdentity).split(',')\n ),\n ];\n\n return crossProduct(\n parentSelectors,\n ['>'],\n [tagName],\n [`[type=\"${type}\"]`],\n ['>'],\n [value]\n )\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction sCLIdentity(): string {\n return '';\n}\n\nfunction sCLSelector(): string {\n return ':root';\n}\n\nfunction namingIdentity(e: Element): string {\n return e.parentElement!.tagName === 'SCL'\n ? e.getAttribute('name')!\n : `${identity(e.parentElement)}>${e.getAttribute('name')}`;\n}\n\nfunction namingSelector(tagName: SCLTag, identity: string, depth = -1): string {\n if (depth === -1) depth = identity.split('>').length;\n\n const [parentIdentity, name] = pathParts(identity);\n if (!name) return voidSelector;\n if (depth === 0) return `${tagName}[name=\"${name}\"]`;\n\n const parents = tags[tagName].parents;\n if (!parents) return voidSelector;\n\n const parentSelectors = parents\n .flatMap(parentTag =>\n tags[parentTag].selector === tags['Substation'].selector\n ? namingSelector(parentTag, parentIdentity, depth - 1).split(',')\n : selector(parentTag, parentIdentity).split(',')\n )\n .filter(selector => !selector.startsWith(voidSelector));\n\n if (parentSelectors.length === 0) return voidSelector;\n\n return crossProduct(parentSelectors, ['>'], [tagName], [`[name=\"${name}\"]`])\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction singletonIdentity(e: Element): string {\n return identity(e.parentElement).toString();\n}\n\nfunction singletonSelector(tagName: SCLTag, identity: string): string {\n const parents = tags[tagName].parents;\n if (!parents) return voidSelector;\n\n const parentSelectors = parents\n .flatMap(parentTag => selector(parentTag, identity).split(','))\n .filter(selector => !selector.startsWith(voidSelector));\n\n if (parentSelectors.length === 0) return voidSelector;\n\n return crossProduct(parentSelectors, ['>'], [tagName])\n .map(strings => strings.join(''))\n .join(',');\n}\n\nfunction idNamingIdentity(e: Element): string {\n return `#${e.id}`;\n}\n\nfunction idNamingSelector(tagName: SCLTag, identity: string): string {\n const id = identity.replace(/^#/, '');\n\n if (!id) return voidSelector;\n\n return `${tagName}[id=\"${id}\"]`;\n}\n\ntype IdentityFunction = (e: Element) => string | number;\ntype SelectorFunction = (tagName: SCLTag, identity: string) => string;\n\nconst tAbstractConductingEquipment = [\n 'TransformerWinding',\n 'ConductingEquipment',\n] as const;\n\nconst tEquipment = [\n 'GeneralEquipment',\n 'PowerTransformer',\n ...tAbstractConductingEquipment,\n] as const;\nconst tEquipmentContainer = ['Substation', 'VoltageLevel', 'Bay'] as const;\nconst tGeneralEquipmentContainer = ['Process', 'Line'] as const;\nconst tAbstractEqFuncSubFunc = ['EqSubFunction', 'EqFunction'] as const;\n\nconst tPowerSystemResource = [\n 'SubFunction',\n 'Function',\n 'TapChanger',\n 'SubEquipment',\n ...tEquipment,\n ...tEquipmentContainer,\n ...tGeneralEquipmentContainer,\n ...tAbstractEqFuncSubFunc,\n] as const;\nconst tLNodeContainer = ['ConnectivityNode', ...tPowerSystemResource] as const;\nconst tCertificate = ['GOOSESecurity', 'SMVSecurity'] as const;\nconst tNaming = ['SubNetwork', ...tCertificate, ...tLNodeContainer] as const;\n\nconst tAbstractDataAttribute = ['BDA', 'DA'] as const;\nconst tControlWithIEDName = ['SampledValueControl', 'GSEControl'] as const;\nconst tControlWithTriggerOpt = ['LogControl', 'ReportControl'] as const;\nconst tControl = [...tControlWithIEDName, ...tControlWithTriggerOpt] as const;\nconst tControlBlock = ['GSE', 'SMV'] as const;\nconst tUnNaming = [\n 'ConnectedAP',\n 'PhysConn',\n 'SDO',\n 'DO',\n 'DAI',\n 'SDI',\n 'DOI',\n 'Inputs',\n 'RptEnabled',\n 'Server',\n 'ServerAt',\n 'SettingControl',\n 'Communication',\n 'Log',\n 'LDevice',\n 'DataSet',\n 'AccessPoint',\n 'IED',\n 'NeutralPoint',\n ...tControl,\n ...tControlBlock,\n ...tAbstractDataAttribute,\n] as const;\n\nconst tAnyLN = ['LN0', 'LN'] as const;\n\nconst tAnyContentFromOtherNamespace = [\n 'Text',\n 'Private',\n 'Hitem',\n 'AccessControl',\n] as const;\n\nconst tCert = ['Subject', 'IssuerName'] as const;\nconst tDurationInMilliSec = ['MinTime', 'MaxTime'] as const;\n\nconst tIDNaming = ['LNodeType', 'DOType', 'DAType', 'EnumType'] as const;\n\nconst tServiceYesNo = [\n 'FileHandling',\n 'TimeSyncProt',\n 'CommProt',\n 'SGEdit',\n 'ConfSG',\n 'GetDirectory',\n 'GetDataObjectDefinition',\n 'DataObjectDirectory',\n 'GetDataSetValue',\n 'SetDataSetValue',\n 'DataSetDirectory',\n 'ReadWrite',\n 'TimerActivatedControl',\n 'GetCBValues',\n 'GSEDir',\n 'ConfLdName',\n] as const;\n\nconst tServiceWithMaxAndMaxAttributes = ['DynDataSet', 'ConfDataSet'] as const;\n\nconst tServiceWithMax = [\n 'GSSE',\n 'GOOSE',\n 'ConfReportControl',\n 'SMVsc',\n ...tServiceWithMaxAndMaxAttributes,\n] as const;\n\nconst tServiceWithMaxNonZero = ['ConfLogControl', 'ConfSigRef'] as const;\n\nconst tServiceSettings = [\n 'ReportSettings',\n 'LogSettings',\n 'GSESettings',\n 'SMVSettings',\n] as const;\n\nconst tBaseElement = ['SCL', ...tNaming, ...tUnNaming, ...tIDNaming] as const;\n\nconst sCLTags = [\n ...tBaseElement,\n ...tAnyContentFromOtherNamespace,\n 'Header',\n 'LNode',\n 'Val',\n 'Voltage',\n 'Services',\n ...tCert,\n ...tDurationInMilliSec,\n 'Association',\n 'FCDA',\n 'ClientLN',\n 'IEDName',\n 'ExtRef',\n 'Protocol',\n ...tAnyLN,\n ...tServiceYesNo,\n 'DynAssociation',\n 'SettingGroups',\n ...tServiceWithMax,\n ...tServiceWithMaxNonZero,\n ...tServiceSettings,\n 'ConfLNs',\n 'ClientServices',\n 'SupSubscription',\n 'ValueHandling',\n 'RedProt',\n 'McSecurity',\n 'KDC',\n 'Address',\n 'P',\n 'ProtNs',\n 'EnumVal',\n 'Terminal',\n 'BitRate',\n 'Authentication',\n 'DataTypeTemplates',\n 'History',\n 'OptFields',\n 'SmvOpts',\n 'TrgOps',\n 'SamplesPerSec',\n 'SmpRate',\n 'SecPerSamples',\n] as const;\n\nexport type SCLTag = (typeof sCLTags)[number];\n\nconst tagSet = new Set<string>(sCLTags);\n\nfunction isSCLTag(tag: string): tag is SCLTag {\n return tagSet.has(tag);\n}\n\nconst tBaseNameSequence = ['Text', 'Private'] as const;\nconst tNamingSequence = [...tBaseNameSequence] as const;\nconst tUnNamingSequence = [...tBaseNameSequence] as const;\nconst tIDNamingSequence = [...tBaseNameSequence] as const;\n\nconst tAbstractDataAttributeSequence = [...tUnNamingSequence, 'Val'] as const;\nconst tLNodeContainerSequence = [...tNamingSequence, 'LNode'] as const;\nconst tPowerSystemResourceSequence = [...tLNodeContainerSequence] as const;\nconst tEquipmentSequence = [...tPowerSystemResourceSequence] as const;\nconst tEquipmentContainerSequence = [\n ...tPowerSystemResourceSequence,\n 'PowerTransformer',\n 'GeneralEquipment',\n] as const;\nconst tAbstractConductingEquipmentSequence = [\n ...tEquipmentSequence,\n 'Terminal',\n] as const;\nconst tControlBlockSequence = [...tUnNamingSequence, 'Address'] as const;\nconst tControlSequence = [...tNamingSequence] as const;\nconst tControlWithIEDNameSequence = [...tControlSequence, 'IEDName'] as const;\nconst tAnyLNSequence = [\n ...tUnNamingSequence,\n 'DataSet',\n 'ReportControl',\n 'LogControl',\n 'DOI',\n 'Inputs',\n 'Log',\n] as const;\nconst tGeneralEquipmentContainerSequence = [\n ...tPowerSystemResourceSequence,\n 'GeneralEquipment',\n 'Function',\n] as const;\nconst tControlWithTriggerOptSequence = [...tControlSequence, 'TrgOps'] as const;\nconst tAbstractEqFuncSubFuncSequence = [\n ...tPowerSystemResourceSequence,\n 'GeneralEquipment',\n 'EqSubFunction',\n] as const;\n\nexport const tags: Record<\n SCLTag,\n {\n identity: IdentityFunction;\n selector: SelectorFunction;\n parents: SCLTag[];\n children: SCLTag[];\n }\n> = {\n AccessControl: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['LDevice'],\n children: [],\n },\n AccessPoint: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['IED'],\n children: [\n ...tNamingSequence,\n 'Server',\n 'LN',\n 'ServerAt',\n 'Services',\n 'GOOSESecurity',\n 'SMVSecurity',\n ],\n },\n Address: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['ConnectedAP', 'GSE', 'SMV'],\n children: ['P'],\n },\n Association: {\n identity: associationIdentity,\n selector: associationSelector,\n parents: ['Server'],\n children: [],\n },\n Authentication: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Server'],\n children: [],\n },\n BDA: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['DAType'],\n children: [...tAbstractDataAttributeSequence],\n },\n BitRate: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SubNetwork'],\n children: [],\n },\n Bay: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['VoltageLevel'],\n children: [\n ...tEquipmentContainerSequence,\n 'ConductingEquipment',\n 'ConnectivityNode',\n 'Function',\n ],\n },\n ClientLN: {\n identity: clientLNIdentity,\n selector: clientLNSelector,\n parents: ['RptEnabled'],\n children: [],\n },\n ClientServices: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: ['TimeSyncProt', 'McSecurity'],\n },\n CommProt: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n Communication: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SCL'],\n children: [...tUnNamingSequence, 'SubNetwork'],\n },\n ConductingEquipment: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Process', 'Line', 'SubFunction', 'Function', 'Bay'],\n children: [\n ...tAbstractConductingEquipmentSequence,\n 'EqFunction',\n 'SubEquipment',\n ],\n },\n ConfDataSet: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ConfLdName: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ConfLNs: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ConfLogControl: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ConfReportControl: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ConfSG: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SettingGroups'],\n children: [],\n },\n ConfSigRef: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ConnectedAP: {\n identity: connectedAPIdentity,\n selector: connectedAPSelector,\n parents: ['SubNetwork'],\n children: [...tUnNamingSequence, 'Address', 'GSE', 'SMV', 'PhysConn'],\n },\n ConnectivityNode: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Bay', 'Line'],\n children: [...tLNodeContainerSequence],\n },\n DA: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['DOType'],\n children: [...tAbstractDataAttributeSequence],\n },\n DAI: {\n identity: ixNamingIdentity,\n selector: ixNamingSelector,\n parents: ['DOI', 'SDI'],\n children: [...tUnNamingSequence, 'Val'],\n },\n DAType: {\n identity: idNamingIdentity,\n selector: idNamingSelector,\n parents: ['DataTypeTemplates'],\n children: [...tIDNamingSequence, 'BDA', 'ProtNs'],\n },\n DO: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['LNodeType'],\n children: [...tUnNamingSequence],\n },\n DOI: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [...tAnyLN],\n children: [...tUnNamingSequence, 'SDI', 'DAI'],\n },\n DOType: {\n identity: idNamingIdentity,\n selector: idNamingSelector,\n parents: ['DataTypeTemplates'],\n children: [...tIDNamingSequence, 'SDO', 'DA'],\n },\n DataObjectDirectory: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n DataSet: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [...tAnyLN],\n children: [...tNamingSequence, 'FCDA'],\n },\n DataSetDirectory: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n DataTypeTemplates: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SCL'],\n children: ['LNodeType', 'DOType', 'DAType', 'EnumType'],\n },\n DynAssociation: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n DynDataSet: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n EnumType: {\n identity: idNamingIdentity,\n selector: idNamingSelector,\n parents: ['DataTypeTemplates'],\n children: [...tIDNamingSequence, 'EnumVal'],\n },\n EnumVal: {\n identity: enumValIdentity,\n selector: enumValSelector,\n parents: ['EnumType'],\n children: [],\n },\n EqFunction: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [\n 'GeneralEquipment',\n 'TapChanger',\n 'TransformerWinding',\n 'PowerTransformer',\n 'SubEquipment',\n 'ConductingEquipment',\n ],\n children: [...tAbstractEqFuncSubFuncSequence],\n },\n EqSubFunction: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['EqSubFunction', 'EqFunction'],\n children: [...tAbstractEqFuncSubFuncSequence],\n },\n ExtRef: {\n identity: extRefIdentity,\n selector: extRefSelector,\n parents: ['Inputs'],\n children: [],\n },\n FCDA: {\n identity: fCDAIdentity,\n selector: fCDASelector,\n parents: ['DataSet'],\n children: [],\n },\n FileHandling: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n Function: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Bay', 'VoltageLevel', 'Substation', 'Process', 'Line'],\n children: [\n ...tPowerSystemResourceSequence,\n 'SubFunction',\n 'GeneralEquipment',\n 'ConductingEquipment',\n ],\n },\n GeneralEquipment: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [\n 'SubFunction',\n 'Function',\n ...tGeneralEquipmentContainer,\n ...tAbstractEqFuncSubFunc,\n ...tEquipmentContainer,\n ],\n children: [...tEquipmentSequence, 'EqFunction'],\n },\n GetCBValues: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GetDataObjectDefinition: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GetDataSetValue: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GetDirectory: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GOOSE: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GOOSESecurity: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['AccessPoint'],\n children: [...tNamingSequence, 'Subject', 'IssuerName'],\n },\n GSE: {\n identity: controlBlockIdentity,\n selector: controlBlockSelector,\n parents: ['ConnectedAP'],\n children: [...tControlBlockSequence, 'MinTime', 'MaxTime'],\n },\n GSEDir: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GSEControl: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['LN0'],\n children: [...tControlWithIEDNameSequence, 'Protocol'],\n },\n GSESettings: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n GSSE: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n Header: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SCL'],\n children: ['Text', 'History'],\n },\n History: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Header'],\n children: ['Hitem'],\n },\n Hitem: {\n identity: hitemIdentity,\n selector: hitemSelector,\n parents: ['History'],\n children: [],\n },\n IED: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['SCL'],\n children: [...tUnNamingSequence, 'Services', 'AccessPoint', 'KDC'],\n },\n IEDName: {\n identity: iEDNameIdentity,\n selector: iEDNameSelector,\n parents: ['GSEControl', 'SampledValueControl'],\n children: [],\n },\n Inputs: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: [...tAnyLN],\n children: [...tUnNamingSequence, 'ExtRef'],\n },\n IssuerName: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['GOOSESecurity', 'SMVSecurity'],\n children: [],\n },\n KDC: {\n identity: kDCIdentity,\n selector: kDCSelector,\n parents: ['IED'],\n children: [],\n },\n LDevice: {\n identity: lDeviceIdentity,\n selector: lDeviceSelector,\n parents: ['Server'],\n children: [...tUnNamingSequence, 'LN0', 'LN', 'AccessControl'],\n },\n LN: {\n identity: lNIdentity,\n selector: lNSelector,\n parents: ['AccessPoint', 'LDevice'],\n children: [...tAnyLNSequence],\n },\n LN0: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['LDevice'],\n children: [\n ...tAnyLNSequence,\n 'GSEControl',\n 'SampledValueControl',\n 'SettingControl',\n ],\n },\n LNode: {\n identity: lNodeIdentity,\n selector: lNodeSelector,\n parents: [...tLNodeContainer],\n children: [...tUnNamingSequence],\n },\n LNodeType: {\n identity: idNamingIdentity,\n selector: idNamingSelector,\n parents: ['DataTypeTemplates'],\n children: [...tIDNamingSequence, 'DO'],\n },\n Line: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Process', 'SCL'],\n children: [\n ...tGeneralEquipmentContainerSequence,\n 'Voltage',\n 'ConductingEquipment',\n ],\n },\n Log: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [...tAnyLN],\n children: [...tUnNamingSequence],\n },\n LogControl: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [...tAnyLN],\n children: [...tControlWithTriggerOptSequence],\n },\n LogSettings: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n MaxTime: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['GSE'],\n children: [],\n },\n McSecurity: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['GSESettings', 'SMVSettings', 'ClientServices'],\n children: [],\n },\n MinTime: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['GSE'],\n children: [],\n },\n NeutralPoint: {\n identity: terminalIdentity,\n selector: terminalSelector,\n parents: ['TransformerWinding'],\n children: [...tUnNamingSequence],\n },\n OptFields: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['ReportControl'],\n children: [],\n },\n P: {\n identity: pIdentity,\n selector: pSelector,\n parents: ['Address', 'PhysConn'],\n children: [],\n },\n PhysConn: {\n identity: physConnIdentity,\n selector: physConnSelector,\n parents: ['ConnectedAP'],\n children: [...tUnNamingSequence, 'P'],\n },\n PowerTransformer: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [...tEquipmentContainer],\n children: [\n ...tEquipmentSequence,\n 'TransformerWinding',\n 'SubEquipment',\n 'EqFunction',\n ],\n },\n Private: {\n identity: () => NaN,\n selector: () => voidSelector,\n parents: [],\n children: [],\n },\n Process: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Process', 'SCL'],\n children: [\n ...tGeneralEquipmentContainerSequence,\n 'ConductingEquipment',\n 'Substation',\n 'Line',\n 'Process',\n ],\n },\n ProtNs: {\n identity: protNsIdentity,\n selector: protNsSelector,\n parents: ['DAType', 'DA'],\n children: [],\n },\n Protocol: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['GSEControl', 'SampledValueControl'],\n children: [],\n },\n ReadWrite: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n RedProt: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n ReportControl: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [...tAnyLN],\n children: [...tControlWithTriggerOptSequence, 'OptFields', 'RptEnabled'],\n },\n ReportSettings: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n RptEnabled: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['ReportControl'],\n children: [...tUnNamingSequence, 'ClientLN'],\n },\n SamplesPerSec: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SMVSettings'],\n children: [],\n },\n SampledValueControl: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['LN0'],\n children: [...tControlWithIEDNameSequence, 'SmvOpts'],\n },\n SecPerSamples: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SMVSettings'],\n children: [],\n },\n SCL: {\n identity: sCLIdentity,\n selector: sCLSelector,\n parents: [],\n children: [\n ...tBaseNameSequence,\n 'Header',\n 'Substation',\n 'Communication',\n 'IED',\n 'DataTypeTemplates',\n 'Line',\n 'Process',\n ],\n },\n SDI: {\n identity: ixNamingIdentity,\n selector: ixNamingSelector,\n parents: ['DOI', 'SDI'],\n children: [...tUnNamingSequence, 'SDI', 'DAI'],\n },\n SDO: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['DOType'],\n children: [...tNamingSequence],\n },\n Server: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['AccessPoint'],\n children: [\n ...tUnNamingSequence,\n 'Authentication',\n 'LDevice',\n 'Association',\n ],\n },\n ServerAt: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['AccessPoint'],\n children: [...tUnNamingSequence],\n },\n Services: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['IED', 'AccessPoint'],\n children: [\n 'DynAssociation',\n 'SettingGroups',\n 'GetDirectory',\n 'GetDataObjectDefinition',\n 'DataObjectDirectory',\n 'GetDataSetValue',\n 'SetDataSetValue',\n 'DataSetDirectory',\n 'ConfDataSet',\n 'DynDataSet',\n 'ReadWrite',\n 'TimerActivatedControl',\n 'ConfReportControl',\n 'GetCBValues',\n 'ConfLogControl',\n 'ReportSettings',\n 'LogSettings',\n 'GSESettings',\n 'SMVSettings',\n 'GSEDir',\n 'GOOSE',\n 'GSSE',\n 'SMVsc',\n 'FileHandling',\n 'ConfLNs',\n 'ClientServices',\n 'ConfLdName',\n 'SupSubscription',\n 'ConfSigRef',\n 'ValueHandling',\n 'RedProt',\n 'TimeSyncProt',\n 'CommProt',\n ],\n },\n SetDataSetValue: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n SettingControl: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['LN0'],\n children: [...tUnNamingSequence],\n },\n SettingGroups: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: ['SGEdit', 'ConfSG'],\n },\n SGEdit: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SettingGroups'],\n children: [],\n },\n SmpRate: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SMVSettings'],\n children: [],\n },\n SMV: {\n identity: controlBlockIdentity,\n selector: controlBlockSelector,\n parents: ['ConnectedAP'],\n children: [...tControlBlockSequence],\n },\n SmvOpts: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['SampledValueControl'],\n children: [],\n },\n SMVsc: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n SMVSecurity: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['AccessPoint'],\n children: [...tNamingSequence, 'Subject', 'IssuerName'],\n },\n SMVSettings: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: ['SmpRate', 'SamplesPerSec', 'SecPerSamples', 'McSecurity'],\n },\n SubEquipment: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: [\n 'TapChanger',\n 'PowerTransformer',\n 'ConductingEquipment',\n 'TransformerWinding',\n ...tAbstractConductingEquipment,\n ],\n children: [...tPowerSystemResourceSequence, 'EqFunction'],\n },\n SubFunction: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['SubFunction', 'Function'],\n children: [\n ...tPowerSystemResourceSequence,\n 'GeneralEquipment',\n 'ConductingEquipment',\n 'SubFunction',\n ],\n },\n SubNetwork: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Communication'],\n children: [...tNamingSequence, 'BitRate', 'ConnectedAP'],\n },\n Subject: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['GOOSESecurity', 'SMVSecurity'],\n children: [],\n },\n Substation: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['SCL'],\n children: [...tEquipmentContainerSequence, 'VoltageLevel', 'Function'],\n },\n SupSubscription: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n TapChanger: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['TransformerWinding'],\n children: [...tPowerSystemResourceSequence, 'SubEquipment', 'EqFunction'],\n },\n Terminal: {\n identity: terminalIdentity,\n selector: terminalSelector,\n parents: [...tEquipment],\n children: [...tUnNamingSequence],\n },\n Text: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: sCLTags.filter(tag => tag !== 'Text' && tag !== 'Private'),\n children: [],\n },\n TimerActivatedControl: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n TimeSyncProt: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services', 'ClientServices'],\n children: [],\n },\n TransformerWinding: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['PowerTransformer'],\n children: [\n ...tAbstractConductingEquipmentSequence,\n 'TapChanger',\n 'NeutralPoint',\n 'EqFunction',\n 'SubEquipment',\n ],\n },\n TrgOps: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['ReportControl'],\n children: [],\n },\n Val: {\n identity: valIdentity,\n selector: valSelector,\n parents: ['DAI', 'DA', 'BDA'],\n children: [],\n },\n ValueHandling: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['Services'],\n children: [],\n },\n Voltage: {\n identity: singletonIdentity,\n selector: singletonSelector,\n parents: ['VoltageLevel'],\n children: [],\n },\n VoltageLevel: {\n identity: namingIdentity,\n selector: namingSelector,\n parents: ['Substation'],\n children: [...tEquipmentContainerSequence, 'Voltage', 'Bay', 'Function'],\n },\n};\n\nexport function getReference(parent: Element, tag: SCLTag): Element | null {\n const parentTag = parent.tagName;\n const children = Array.from(parent.children);\n\n if (\n parentTag === 'Services' ||\n parentTag === 'SettingGroups' ||\n !isSCLTag(parentTag)\n )\n return children.find(child => child.tagName === tag) ?? null;\n\n const sequence = tags[parentTag]?.children ?? [];\n let index = sequence.findIndex(element => element === tag);\n\n if (index < 0) return null;\n\n let nextSibling: Element | undefined;\n while (index < sequence.length && !nextSibling) {\n nextSibling = children.find(child => child.tagName === sequence[index]);\n index++;\n }\n\n return nextSibling ?? null;\n}\n\nfunction selector(tagName: string, identity: string | number): string {\n if (typeof identity !== 'string') return voidSelector;\n\n if (isSCLTag(tagName)) return tags[tagName].selector(tagName, identity);\n\n return tagName;\n}\n\nexport function find(\n root: XMLDocument | Element | DocumentFragment,\n tagName: string,\n identity: string | number\n): Element | null {\n if (typeof identity !== 'string' || !isSCLTag(tagName)) return null;\n\n const element = root.querySelector(tags[tagName].selector(tagName, identity));\n\n if (element === null || isPublic(element)) return element;\n\n return (\n Array.from(\n root.querySelectorAll(tags[tagName].selector(tagName, identity))\n ).find(isPublic) ?? null\n );\n}\n\n/** @returns a string uniquely identifying `e` in its document, or NaN if `e`\n * is unidentifiable. */\nexport function identity(e: Element | null): string | number {\n if (e === null) return NaN;\n if (e.closest('Private')) return NaN;\n const tag = e.tagName;\n\n if (isSCLTag(tag)) return tags[tag].identity(e);\n\n return NaN;\n}\n\n/** @returns whether `a` and `b` are considered identical by IEC-61850 */\nexport function isSame(a: Element, b: Element): boolean {\n if (a.tagName === 'Private')\n return isSame(a.parentElement!, b.parentElement!) && a.isEqualNode(b);\n return a.tagName === b.tagName && identity(a) === identity(b);\n}\n\nexport function isEqual(a: Element, b: Element): boolean {\n if (a.closest('Private') || b.closest('Private')) return a.isEqualNode(b);\n\n const attributeNames = new Set(\n a.getAttributeNames().concat(b.getAttributeNames())\n );\n for (const name of attributeNames)\n if (a.getAttribute(name) !== b.getAttribute(name)) return false;\n\n if (a.childElementCount === 0)\n return (\n b.childElementCount === 0 &&\n a.textContent?.trim() === b.textContent?.trim()\n );\n\n const aChildren = Array.from(a.children);\n const bChildren = Array.from(b.children);\n\n for (const aChild of aChildren) {\n const twindex = bChildren.findIndex(bChild => isEqual(aChild, bChild));\n if (twindex === -1) return false;\n bChildren.splice(twindex, 1);\n }\n\n for (const bChild of bChildren)\n if (!aChildren.find(aChild => isEqual(bChild, aChild))) return false;\n\n return true;\n}\n\n/** A directive rendering its argument `rendered` only if `rendered !== {}`. */\nexport const ifImplemented = directive(rendered => (part: Part) => {\n if (Object.keys(rendered).length) part.setValue(rendered);\n else part.setValue('');\n});\n\n/** Constructor type for defining `LitElement` mixins. */\nexport type LitElementConstructor = new (...args: any[]) => LitElement;\n\n/** The type returned by `MyMixin(...)` is `Mixin<typeof MyMixin>`. */\nexport type Mixin<T extends (...args: any[]) => any> = InstanceType<\n ReturnType<T>\n>;\n\nconst nameStartChar =\n '[:_A-Za-z]|[\\u00C0-\\u00D6]|[\\u00D8-\\u00F6]|[\\u00F8-\\u02FF]|[\\u0370-\\u037D]' +\n '|[\\u037F-\\u1FFF]|[\\u200C-\\u200D]|[\\u2070-\\u218F]|[\\u2C00-\\u2FEF]' +\n '|[\\u3001-\\uD7FF]|[\\uF900-\\uFDCF]|[\\uFDF0-\\uFFFD]';\nconst nameChar =\n nameStartChar + '|[.0-9\\\\-]|\\u00B7|[\\u0300-\\u036F]|[\\u203F-\\u2040]';\nconst name = nameStartChar + '(' + nameChar + ')*';\nconst nmToken = '\\\\S+';\n\nexport const patterns = {\n string:\n '([\\u0009-\\u000A]|[\\u000D]|[\\u0020-\\u007E]|[\\u0085]|[\\u00A0-\\uD7FF]' +\n '|[\\uE000-\\uFFFD])*',\n normalizedString:\n '([\\u0020-\\u007E]|[\\u0085]|[\\u00A0-\\uD7FF]|[\\uE000-\\uFFFD])*',\n name,\n nmToken,\n names: name + '( ' + name + ')*',\n nmTokens: nmToken + '( ' + nmToken + ')*',\n decimal: '[+\\\\-]?[0-9]+(([.][0-9]*)?|([.][0-9]+))',\n unsigned: '[+]?[0-9]+(([.][0-9]*)?|([.][0-9]+))',\n integer: '[+\\\\-]?[0-9]+([0-9]*)',\n alphanumericFirstUpperCase: '[A-Z][0-9,A-Z,a-z]*',\n alphanumericFirstLowerCase: '[a-z][0-9,A-Z,a-z]*',\n lnClass: '(LLN0)|[A-Z]{4,4}',\n};\n\n/** Sorts selected `ListItem`s to the top and disabled ones to the bottom. */\nexport function compareNames(a: Element | string, b: Element | string): number {\n if (typeof a === 'string' && typeof b === 'string') return a.localeCompare(b);\n\n if (typeof a === 'object' && typeof b === 'string')\n return (a.getAttribute('name') ?? '').localeCompare(b);\n\n if (typeof a === 'string' && typeof b === 'object')\n return a.localeCompare(b.getAttribute('name')!);\n\n if (typeof a === 'object' && typeof b === 'object')\n return (a.getAttribute('name') ?? '').localeCompare(\n b.getAttribute('name') ?? ''\n );\n\n return 0;\n}\n\n/** @returns the cartesian product of `arrays` */\nexport function crossProduct<T>(...arrays: T[][]): T[][] {\n return arrays.reduce<T[][]>(\n (a, b) => <T[][]>a.flatMap(d => b.map(e => [d, e].flat())),\n [[]]\n );\n}\n\n/** @returns the depth of `t` if it is an object or array, zero otherwise. */\nexport function depth(t: Record<string, unknown>, mem = new WeakSet()): number {\n if (mem.has(t)) return Infinity;\n else\n switch (t?.constructor) {\n case Object:\n case Array:\n mem.add(t);\n return (\n 1 +\n Math.max(\n -1,\n ...Object.values(t).map(_ => depth(<Record<string, unknown>>_, mem))\n )\n );\n default:\n return 0;\n }\n}\n\nexport function findFCDAs(extRef: Element): Element[] {\n if (extRef.tagName !== 'ExtRef' || extRef.closest('Private')) return [];\n\n const [iedName, ldInst, prefix, lnClass, lnInst, doName, daName] = [\n 'iedName',\n 'ldInst',\n 'prefix',\n 'lnClass',\n 'lnInst',\n 'doName',\n 'daName',\n ].map(name => extRef.getAttribute(name));\n const ied = Array.from(extRef.ownerDocument.getElementsByTagName('IED')).find(\n element =>\n element.getAttribute('name') === iedName && !element.closest('Private')\n );\n if (!ied) return [];\n\n return Array.from(ied.getElementsByTagName('FCDA'))\n .filter(item => !item.closest('Private'))\n .filter(\n fcda =>\n (fcda.getAttribute('ldInst') ?? '') === (ldInst ?? '') &&\n (fcda.getAttribute('prefix') ?? '') === (prefix ?? '') &&\n (fcda.getAttribute('lnClass') ?? '') === (lnClass ?? '') &&\n (fcda.getAttribute('lnInst') ?? '') === (lnInst ?? '') &&\n (fcda.getAttribute('doName') ?? '') === (doName ?? '') &&\n (fcda.getAttribute('daName') ?? '') === (daName ?? '')\n );\n}\n\nconst serviceTypeControlBlockTags: Partial<Record<string, string[]>> = {\n GOOSE: ['GSEControl'],\n SMV: ['SampledValueControl'],\n Report: ['ReportControl'],\n NONE: ['LogControl', 'GSEControl', 'SampledValueControl', 'ReportControl'],\n};\n\nexport function findControlBlocks(extRef: Element): Set<Element> {\n const fcdas = findFCDAs(extRef);\n const cbTags =\n serviceTypeControlBlockTags[extRef.getAttribute('serviceType') ?? 'NONE'] ??\n [];\n const controlBlocks = new Set(\n fcdas.flatMap(fcda => {\n const dataSet = fcda.parentElement!;\n const dsName = dataSet.getAttribute('name') ?? '';\n const anyLN = dataSet.parentElement!;\n return cbTags\n .flatMap(tag => Array.from(anyLN.getElementsByTagName(tag)))\n .filter(cb => cb.getAttribute('datSet') === dsName);\n })\n );\n return controlBlocks;\n}\n\nexport function isPublic(element: Element): boolean {\n return !element.closest('Private');\n}\n\n/** @returns the version of the SCL project */\nexport function getVersion(element: Element): string {\n const header = Array.from(\n element.ownerDocument.getElementsByTagName('Header')\n ).filter(item => !item.closest('Private'));\n\n return header[0].getAttribute('version') ?? '2003';\n}\n\n/** maximum value for `lnInst` attribute */\nconst maxLnInst = 99;\nconst lnInstRange = Array(maxLnInst)\n .fill(1)\n .map((_, i) => `${i + 1}`);\n\n/**\n * @param parent - The LNodes' parent element to be scanned once for `lnInst`\n * values already in use. Be sure to create a new generator every time the\n * children of this element change.\n * @returns a function generating increasing unused `lnInst` values for\n * `lnClass` LNodes within `parent` on subsequent invocations\n */\nexport function newLnInstGenerator(\n parent: Element\n): (lnClass: string) => string | undefined {\n const generators = new Map<string, () => string | undefined>();\n\n return (lnClass: string) => {\n if (!generators.has(lnClass)) {\n const lnInsts = new Set(\n getChildElementsByTagName(parent, 'LNode')\n .filter(lnode => lnode.getAttribute('lnClass') === lnClass)\n .map(lNode => lNode.getAttribute('lnInst')!)\n );\n\n generators.set(lnClass, () => {\n const uniqueLnInst = lnInstRange.find(lnInst => !lnInsts.has(lnInst));\n if (uniqueLnInst) lnInsts.add(uniqueLnInst);\n return uniqueLnInst;\n });\n }\n\n return generators.get(lnClass)!();\n };\n}\n\n/**\n * @param lnElements - The LN elements to be scanned for `inst`\n * values already in use.\n * @returns first available inst value for LN or undefined if no inst is available\n */\nexport function minAvailableLogicalNodeInstance(\n lnElements: Element[]\n): string | undefined {\n const lnInsts = new Set(lnElements.map(ln => ln.getAttribute('inst') || ''));\n return lnInstRange.find(lnInst => !lnInsts.has(lnInst));\n}\n\ndeclare global {\n interface ElementEventMap {\n ['wizard']: WizardEvent;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare.js","sourceRoot":"","sources":["../../src/icons/compare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;;OAEvB,CAAC;AAER,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAA;;OAEzB,CAAC;AAER,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAA;;OAEvB,CAAC","sourcesContent":["import { svg } from \"lit-html\";\n\nexport const elementIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M9,7H15V9H11V11H15V13H11V15H15V17H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const attributeIcon = svg`<svg viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M11,7H13A2,2 0 0,1 15,9V17H13V13H11V17H9V9A2,2 0 0,1 11,7M11,9V11H13V9H11M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2Z\" />\n</svg>`;\n\nexport const contentIcon = svg`<svg viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M11,7H13A2,2 0 0,1 15,9V10H13V9H11V15H13V14H15V15A2,2 0 0,1 13,17H11A2,2 0 0,1 9,15V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/icons/icons.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, svg, SVGTemplateResult, TemplateResult } from 'lit-element';\n\nexport type iconType =\n | 'action'\n | 'dAIcon'\n | 'dOIcon'\n | 'enumIcon'\n | 'info'\n | 'warning'\n | 'error'\n | 'reset'\n | 'reportIcon'\n | 'smvIcon'\n | 'gooseIcon'\n | 'lNIcon'\n | 'logIcon';\n\nexport const editIcon = html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 25 25\"\n>\n <path\n d=\"M14.06 9.02l.92.92L5.92 19H5v-.92l9.06-9.06M17.66 3c-.25 0-.51.1-.7.29l-1.83 1.83 3.75 3.75 1.83-1.83c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.2-.2-.45-.29-.71-.29zm-3.6 3.19L3 17.25V21h3.75L17.81 9.94l-3.75-3.75z\"\n stroke=\"currentColor\"\n fill=\"transparent\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n</svg>`;\n\nconst pathsSVG = {\n action: svg`<path d=\"M0 0h24v24H0z\" fill=\"none\"></path><path d=\"M13 3c-4.97 0-9\n 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7\n 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0\n 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z\" fill=\"currentColor\"></path>`,\n dAIcon: svg`<path fill=\"currentColor\" d=\"m4.2 0c-2.31 0-4.2 1.89-4.2 4.2v11.6c0 2.31 1.89 4.2 4.2 4.2h18.1c2.31 0 4.2-1.89 4.2-4.2v-11.6c0-2.31-1.89-4.2-4.2-4.2zm0 1.89h18.1c1.29 0 2.3 1.01 2.3 2.3v11.6c0 1.29-1.01 2.31-2.3 2.31h-18.1c-1.29 0-2.3-1.01-2.3-2.31v-11.6c0-1.29 1.01-2.3 2.3-2.3z\"/><path fill=\"currentColor\" d=\"m12.5 9.94q0 1.55-0.509 2.71-0.503 1.15-1.43 1.76-0.923 0.611-2.12 0.611h-3.37v-10h3.02q2.11 0 3.26 1.28 1.15 1.27 1.15 3.65zm-1.76 0q0-1.61-0.698-2.46-0.698-0.852-1.99-0.852h-1.24v6.77h1.48q1.12 0 1.79-0.931 0.663-0.931 0.663-2.53z\"/><path fill=\"currentColor\" d=\"m19.7 15-0.74-2.56h-3.18l-0.74 2.56h-1.75l3.04-10h2.06l3.03 10zm-1.13-4.13-0.823-2.88-0.379-1.46q-0.0947 0.412-0.178 0.739-0.0829 0.327-1.02 3.59z\"/>`,\n dOIcon: svg`<path fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.89\" d=\"m4.2 0.945h18.1c1.8 0 3.25 1.45 3.25 3.25v11.6c0 1.8-1.45 3.25-3.25 3.25h-18.1c-1.8 0-3.25-1.45-3.25-3.25v-11.6c0-1.8 1.45-3.25 3.25-3.25z\"/><path d=\"m12.1 9.94q0 1.55-0.509 2.71-0.503 1.15-1.43 1.76-0.923 0.611-2.12 0.611h-3.37v-10h3.02q2.11 0 3.26 1.28 1.15 1.27 1.15 3.65zm-1.76 0q0-1.61-0.698-2.46-0.698-0.852-1.99-0.852h-1.24v6.77h1.48q1.12 0 1.79-0.931 0.663-0.931 0.663-2.53z\"/><path d=\"m21.6 9.97q0 1.56-0.515 2.75-0.515 1.19-1.47 1.82-0.959 0.625-2.24 0.625-1.97 0-3.08-1.39-1.11-1.39-1.11-3.81 0-2.41 1.11-3.76t3.1-1.35 3.1 1.36q1.12 1.36 1.12 3.74zm-1.78 0q0-1.62-0.639-2.54-0.639-0.923-1.79-0.923-1.17 0-1.81 0.916-0.639 0.909-0.639 2.54 0 1.65 0.651 2.6 0.657 0.945 1.79 0.945 1.17 0 1.81-0.923 0.639-0.923 0.639-2.62z\"/>`,\n enumIcon: svg`<path fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.89\" d=\"m4.2 0.945h18.1c1.8 0 3.25 1.45 3.25 3.25v11.6c0 1.8-1.45 3.25-3.25 3.25h-18.1c-1.8 0-3.25-1.45-3.25-3.25v-11.6c0-1.8 1.45-3.25 3.25-3.25z\"/><path d=\"m5.37 15v-10h6.56v1.62h-4.81v2.51h4.45v1.62h-4.45v2.64h5.06v1.62z\"/><path d=\"m18.5 15-3.63-7.71q0.107 1.12 0.107 1.8v5.9h-1.55v-10h1.99l3.69 7.77q-0.107-1.07-0.107-1.95v-5.82h1.55v10z\"/>`,\n info: svg`<path d=\"M0 0h24v24H0z\" fill=\"none\"></path><path d=\"M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\" fill=\"currentColor\"></path>`,\n warning: svg`<path d=\"M0 0h24v24H0z\" fill=\"none\"></path><path d=\"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\" fill=\"currentColor\"></path>`,\n error: svg`<path d=\"M0 0h24v24H0V0z\" fill=\"none\"></path><path d=\"M15.73 3H8.27L3 8.27v7.46L8.27 21h7.46L21 15.73V8.27L15.73 3zM19 14.9L14.9 19H9.1L5 14.9V9.1L9.1 5h5.8L19 9.1v5.8z\" fill=\"currentColor\"></path><path d=\"M11 7h2v7h-2z\" fill=\"currentColor\"></path><circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"currentColor\"></circle>`,\n gooseIcon: svg`<path fill=\"currentColor\" d=\"M11,7H15V9H11V15H13V11H15V15A2,2 0 0,1 13,17H11A2,2 0 0,1 9,15V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />`,\n lNIcon: svg`<path stroke=\"currentColor\" stroke-width=\"1.89\" fill=\"none\" d=\"m4.2 0.945h18.1c1.8 0 3.25 1.45 3.25 3.25v11.6c0 1.8-1.45 3.25-3.25 3.25h-18.1c-1.8 0-3.25-1.45-3.25-3.25v-11.6c0-1.8 1.45-3.25 3.25-3.25z\"/><path fill=\"currentColor\" d=\"m5.71 15v-10h1.75v8.39h4.47v1.62z\"/><path fill=\"currentColor\" d=\"m18.2 15-3.63-7.71q0.107 1.12 0.107 1.8v5.9h-1.55v-10h1.99l3.69 7.77q-0.107-1.07-0.107-1.95v-5.82h1.55v10z\"/>`,\n logIcon: svg`<path fill=\"currentColor\" d=\"M9,7H11V15H15V17H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />`,\n reportIcon: svg`<path fill=\"currentColor\" d=\"M9,7H13A2,2 0 0,1 15,9V11C15,11.84 14.5,12.55 13.76,12.85L15,17H13L11.8,13H11V17H9V7M11,9V11H13V9H11M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12C4,16.41 7.58,20 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />`,\n smvIcon: svg`<path fill=\"currentColor\" d=\"M11,7H15V9H11V11H13A2,2 0 0,1 15,13V15A2,2 0 0,1 13,17H9V15H13V13H11A2,2 0 0,1 9,11V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />`,\n};\n\nexport const gooseIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">${pathsSVG['gooseIcon']}</svg>`;\n\nexport const reportIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">${pathsSVG['reportIcon']}</svg>`;\n\nexport const smvIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">${pathsSVG['smvIcon']}</svg>`;\n\nexport const logIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">${pathsSVG['logIcon']}</svg>`;\n\nexport const controlBlockIcons: Partial<Record<string, SVGTemplateResult>> = {\n ReportControl: reportIcon,\n LogControl: logIcon,\n GSEControl: gooseIcon,\n SampledValueControl: smvIcon,\n};\n\nexport const inputIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M14,12L10,8V11H2V13H10V16M20,18V6C20,4.89 19.1,4 18,4H6A2,2 0 0,0 4,6V9H6V6H18V18H6V15H4V18A2,2 0 0,0 6,20H18A2,2 0 0,0 20,18Z\" />\n</svg>`;\n\nexport const clientIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M21,14V4H3V14H21M21,2A2,2 0 0,1 23,4V16A2,2 0 0,1 21,18H14L16,21V22H8V21L10,18H3C1.89,18 1,17.1 1,16V4C1,2.89 1.89,2 3,2H21M4,5H15V10H4V5M16,5H20V7H16V5M20,8V13H16V8H20M4,11H9V13H4V11M10,11H15V13H10V11Z\" />\n</svg>`;\n\nexport const disconnect = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M4,1C2.89,1 2,1.89 2,3V7C2,8.11 2.89,9 4,9H1V11H13V9H10C11.11,9 12,8.11 12,7V3C12,1.89 11.11,1 10,1H4M4,3H10V7H4V3M14,13C12.89,13 12,13.89 12,15V19C12,20.11 12.89,21 14,21H11V23H23V21H20C21.11,21 22,20.11 22,19V15C22,13.89 21.11,13 20,13H14M3.88,13.46L2.46,14.88L4.59,17L2.46,19.12L3.88,20.54L6,18.41L8.12,20.54L9.54,19.12L7.41,17L9.54,14.88L8.12,13.46L6,15.59L3.88,13.46M14,15H20V19H14V15Z\" />\n</svg>`;\n\nexport type iconProperty = {\n width: number;\n height: number;\n};\n\nexport const iconProperties: Partial<Record<iconType, iconProperty>> = {\n dAIcon: {\n width: 26.5,\n height: 24,\n },\n dOIcon: {\n width: 26.5,\n height: 24,\n },\n enumIcon: {\n width: 26.5,\n height: 24,\n },\n lNIcon: {\n width: 26.5,\n height: 24,\n },\n};\n\nexport const dataTypeTemplateIcons: Partial<Record<string, SVGTemplateResult>> =\n {\n DAType: getIcon('dAIcon'),\n DOType: getIcon('dOIcon'),\n EnumType: getIcon('enumIcon'),\n LNodeType: getIcon('lNIcon'),\n };\n\nexport const iconColors: { [key: string]: string } = {\n info: '--cyan',\n warning: '--yellow',\n error: '--red',\n action: '--blue',\n};\n\nexport function getIcon(type: iconType): TemplateResult {\n if (type === 'reset') return html``;\n const height = iconProperties[type]?.height ?? 24;\n const width = iconProperties[type]?.width ?? 24;\n return html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"${height}\"\n viewBox=\"0 0 ${width} ${height}\"\n width=\"${width}\"\n >\n ${pathsSVG[type]}\n </svg> `;\n}\n\nexport function getFilterIcon(type: iconType, state: boolean): TemplateResult {\n if (type === 'reset') return html``;\n const height = iconProperties[type]?.height ?? 24;\n const width = iconProperties[type]?.width ?? 24;\n return html`<svg\n slot=\"${state ? 'onIcon' : 'offIcon'}\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"${height}\"\n viewBox=\"0 0 ${width} ${height}\"\n width=\"${width}\"\n >\n ${pathsSVG[type]}\n </svg> `;\n}\n\nexport const networkConfigIcon = html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n slot=\"icon\"\n width=\"25px\"\n height=\"25px\"\n style=\"margin-bottom:0px;\"\n>\n <rect\n width=\"8\"\n height=\"8\"\n x=\"8.5\"\n y=\"2\"\n rx=\"1\"\n ry=\"1\"\n fill=\"transparent\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <rect\n width=\"8\"\n height=\"8\"\n x=\"2.5\"\n y=\"15\"\n rx=\"1\"\n ry=\"1\"\n fill=\"transparent\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <rect\n width=\"8\"\n height=\"8\"\n x=\"15\"\n y=\"15\"\n rx=\"1\"\n ry=\"1\"\n fill=\"transparent\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n\n <line\n x1=\"2\"\n y1=\"12.5\"\n x2=\"23\"\n y2=\"12.5\"\n stroke=\"currentColor\"\n stroke-linecap=\"round\"\n stroke-width=\"1.5\"\n />\n <line\n x1=\"12.5\"\n y1=\"10\"\n x2=\"12.5\"\n y2=\"12.5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <line\n x1=\"6.5\"\n y1=\"12.5\"\n x2=\"6.5\"\n y2=\"15\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n <line\n x1=\"19\"\n y1=\"12.5\"\n x2=\"19\"\n y2=\"15\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n />\n</svg>`;\n\nexport const zeroLineIcon = html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n slot=\"icon\"\n viewBox=\"0 0 25 25\"\n>\n <path\n d=\"M 2 9 L 12.5 2 L 23 9 L 21 9 L 21 21 L 4 21 L 4 9 Z\"\n fill=\"transparent\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M 11 7 L 17.5 7 L 13.5 11 L 16.5 11 L 10 19 L 11.5 13 L 8.5 13 Z \"\n fill=\"currentColor\"\n />\n</svg>`;\n\nexport const voltageLevelIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1,\n .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: currentColor;\n opacity: 0;\n }\n </style>\n </defs>\n <path\n class=\"cls-1\"\n d=\"M11.13,20.06L3.63,6.93c-.27-.48-.11-1.09.37-1.36h0c.48-.27,1.09-.11,1.36.37l6.64,11.61,6.64-11.61c.27-.48.88-.65,1.36-.37h0c.48.27.65.88.37,1.36l-7.5,13.13c-.38.67-1.35.67-1.74,0Z\"\n />\n <rect class=\"cls-2\" width=\"24\" height=\"24\" />\n</svg>`;\n\nexport const bayIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n stroke-width: 0px;\n }\n </style>\n </defs>\n <path\n class=\"cls-1\"\n d=\"M7.75,8c0-.41-.34-.75-.75-.75s-.75.34-.75.75v1.5h-1.25c0,.84.52,1.55,1.25,1.85v8.65h1.5v-8.65c.73-.3,1.25-1.01,1.25-1.85h-1.25v-1.5Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M12.75,8c0-.41-.34-.75-.75-.75s-.75.34-.75.75v1.5h-1.25c0,.84.52,1.55,1.25,1.85v8.65h1.5v-8.65c.73-.3,1.25-1.01,1.25-1.85h-1.25v-1.5Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M17.75,8c0-.41-.34-.75-.75-.75s-.75.34-.75.75v1.5h-1.25c0,.84.52,1.55,1.25,1.85v8.65h1.5v-8.65c.73-.3,1.25-1.01,1.25-1.85h-1.25v-1.5Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M20,4H4c-1.1,0-2,.9-2,2v4c0,1.1.9,2,2,2v-6h16v6c1.1,0,2-.9,2-2v-4c0-1.1-.9-2-2-2Z\"\n />\n</svg>`;\n\nexport const disconnectorIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1,\n .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: #fff;\n opacity: 0;\n }\n </style>\n </defs>\n <g>\n <path\n class=\"cls-1\"\n d=\"M12.71,15.29l-6.79-6.79c-.39-.39-1.02-.39-1.41,0-.39.39-.39,1.02,0,1.41l6.5,6.5v4.59c0,.55.45,1,1,1s1-.45,1-1v-5c0-.13-.03-.26-.08-.38-.05-.12-.12-.23-.22-.33Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M14,6h-1v-3c0-.55-.45-1-1-1s-1,.45-1,1v3h-1c-.55,0-1,.45-1,1s.45,1,1,1h4c.55,0,1-.45,1-1s-.45-1-1-1Z\"\n />\n </g>\n <rect class=\"cls-2\" width=\"24\" height=\"24\" />\n</svg>`;\n\nexport const circuitBreakerIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1,\n .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: #fff;\n opacity: 0;\n }\n </style>\n </defs>\n <g>\n <path\n class=\"cls-1\"\n d=\"M12.71,15.29l-6.79-6.79c-.39-.39-1.02-.39-1.41,0-.39.39-.39,1.02,0,1.41l6.5,6.5v4.59c0,.55.45,1,1,1s1-.45,1-1v-5c0-.13-.03-.26-.08-.38-.05-.12-.12-.23-.22-.33Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M13.41,7l1.29-1.29c.39-.39.39-1.02,0-1.41s-1.02-.39-1.41,0l-1.29,1.29-1.29-1.29c-.39-.39-1.02-.39-1.41,0s-.39,1.02,0,1.41l1.29,1.29-1.29,1.29c-.39.39-.39,1.02,0,1.41.2.2.45.29.71.29s.51-.1.71-.29l1.29-1.29,1.29,1.29c.2.2.45.29.71.29s.51-.1.71-.29c.39-.39.39-1.02,0-1.41l-1.29-1.29Z\"\n />\n </g>\n <rect class=\"cls-2\" width=\"24\" height=\"24\" />\n</svg>`;\n\nexport const currentTransformerIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1,\n .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: #fff;\n opacity: 0;\n }\n </style>\n </defs>\n <path\n class=\"cls-1\"\n d=\"M19,12c0-3.53-2.61-6.43-6-6.92v-2.08c0-.55-.45-1-1-1s-1,.45-1,1v2.08c-3.39.49-6,3.39-6,6.92s2.61,6.43,6,6.92v2.08c0,.55.45,1,1,1s1-.45,1-1v-2.08c3.39-.49,6-3.39,6-6.92ZM7,12c0-2.42,1.72-4.44,4-4.9v9.8c-2.28-.46-4-2.48-4-4.9ZM13,16.9V7.1c2.28.46,4,2.48,4,4.9s-1.72,4.44-4,4.9Z\"\n />\n <rect class=\"cls-2\" width=\"24\" height=\"24\" />\n</svg>`;\n\nexport const voltageTransformerIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1,\n .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: #fff;\n opacity: 0;\n }\n </style>\n </defs>\n <path\n class=\"cls-1\"\n d=\"M17,10c0-2.42-1.72-4.44-4-4.9v-2.1s0-1-1-1-1,1-1,1v2.1c-2.28.46-4,2.48-4,4.9,0,.71.15,1.39.42,2-.27.61-.42,1.29-.42,2,0,2.42,1.72,4.44,4,4.9v1.1h-1c-.55,0-1,.45-1,1s.45,1,1,1h4c.55,0,1-.45,1-1s-.45-1-1-1h-1v-1.1c2.28-.46,4-2.48,4-4.9,0-.71-.15-1.39-.42-2,.27-.61.42-1.29.42-2ZM12,7c1.66,0,3,1.34,3,3,0,0,0,.01,0,.02-.84-.63-1.87-1.02-3-1.02s-2.16.39-3,1.02c0,0,0-.01,0-.02,0-1.66,1.34-3,3-3ZM14.22,12c-.55.61-1.34,1-2.22,1s-1.67-.39-2.22-1c.55-.61,1.34-1,2.22-1s1.67.39,2.22,1ZM12,17c-1.66,0-3-1.34-3-3,0,0,0-.01,0-.02.84.63,1.87,1.02,3,1.02s2.16-.39,3-1.02c0,0,0,.01,0,.02,0,1.66-1.34,3-3,3Z\"\n />\n <rect class=\"cls-2\" width=\"24\" height=\"24\" />\n</svg>`;\n\nexport const earthSwitchIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1,\n .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: #fff;\n opacity: 0;\n }\n </style>\n </defs>\n <g>\n <path\n class=\"cls-1\"\n d=\"M13,20h-2c-.55,0-1,.45-1,1s.45,1,1,1h2c.55,0,1-.45,1-1s-.45-1-1-1Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M15,16h-2v-5c0-.13-.03-.26-.08-.38-.05-.12-.12-.23-.22-.33L5.91,3.5c-.39-.39-1.02-.39-1.41,0-.39.39-.39,1.02,0,1.41l6.5,6.5v4.59h-2c-.55,0-1,.45-1,1s.45,1,1,1h6c.55,0,1-.45,1-1s-.45-1-1-1Z\"\n />\n <path\n class=\"cls-1\"\n d=\"M10,4h4c.55,0,1-.45,1-1s-.45-1-1-1h-4c-.55,0-1,.45-1,1s.45,1,1,1Z\"\n />\n </g>\n <rect class=\"cls-2\" width=\"24\" height=\"24\" />\n</svg>`;\n\nexport const generalConductingEquipmentIcon = html`<svg\n id=\"Laag_1\"\n data-name=\"Laag 1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n>\n <defs>\n <style>\n .cls-1 {\n fill: currentColor;\n stroke-width: 0px;\n }\n </style>\n </defs>\n <path\n class=\"cls-1\"\n d=\"M20.41,3.59c-.78-.78-2.05-.78-2.83,0-.59.59-.73,1.47-.43,2.19l-1.49,1.49c-1.02-.79-2.29-1.27-3.67-1.27-3.31,0-6,2.69-6,6,0,1.38.48,2.66,1.27,3.67l-1.49,1.49c-.73-.31-1.6-.17-2.19.43-.78.78-.78,2.05,0,2.83.78.78,2.05.78,2.83,0,.59-.59.73-1.47.43-2.19l1.49-1.49c1.02.79,2.29,1.27,3.67,1.27,3.31,0,6-2.69,6-6,0-1.38-.48-2.66-1.27-3.67l1.49-1.49c.73.31,1.6.17,2.19-.43.78-.78.78-2.05,0-2.83ZM12,16c-2.21,0-4-1.79-4-4s1.79-4,4-4,4,1.79,4,4-1.79,4-4,4Z\"\n />\n</svg>`;\n\nexport const connectivityNodeIcon = html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n>\n <circle\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"1\"\n cx=\"12.5\"\n cy=\"12.5\"\n r=\"5\"\n />\n</svg>`;\n\nexport const powerTransformerTwoWindingIcon = html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 25 25\"\n>\n <line\n x1=\"12.5\"\n y1=\"2\"\n x2=\"12.5\"\n y2=\"5\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle\n cx=\"12.5\"\n cy=\"10\"\n r=\"5\"\n stroke=\"currentColor\"\n fill=\"transparent\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <circle\n cx=\"12.5\"\n cy=\"15\"\n r=\"5\"\n stroke=\"currentColor\"\n fill=\"transparent\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n <line\n x1=\"12.5\"\n y1=\"20\"\n x2=\"12.5\"\n y2=\"23\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n</svg>`;\n\nexport const openSCDIcon = html` <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n style=\"width:100px;height:100px\"\n viewBox=\"0 0 25 25\"\n>\n <path\n d=\"M 2 9 L 12.5 2 L 23 9 L 21 9 L 21 21 L 4 21 L 4 9 Z\"\n fill=\"#eee8d5\"\n stroke=\"#6c71c4\"\n stroke-width=\"2\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M 11 7 L 17.5 7 L 13.5 11 L 16.5 11 L 10 19 L 11.5 13 L 8.5 13 Z \"\n fill=\"#2aa198\"\n />\n</svg>`;\n\nexport const sizableSmvIcon = svg`\n <svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M11,7H15V9H11V11H13A2,2 0 0,1 15,13V15A2,2 0 0,1 13,17H9V15H13V13H11A2,2 0 0,1 9,11V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n </svg>`;\n\nexport const sizableGooseIcon = svg`<svg viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M11,7H15V9H11V15H13V11H15V15A2,2 0 0,1 13,17H11A2,2 0 0,1 9,15V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const substationIcon = svg`<svg id=\"Laag_1\" data-name=\"Laag 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n<defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1, .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: currentColor;\n opacity: 0;\n }\n </style>\n</defs>\n<g>\n <path class=\"cls-1\" d=\"M19.3,7.94l-6-5.14c-.75-.64-1.85-.65-2.6,0l-6,5.14c-.44.38-.7.93-.7,1.52v9.54c0,1.1.9,2,2,2h12c1.1,0,2-.9,2-2v-9.54c0-.58-.25-1.14-.7-1.52ZM18,19H6v-9.54l6-5.14,6,5.14v9.54Z\"/>\n <path class=\"cls-1\" d=\"M11.57,7.74l-3,5c-.09.15-.09.35,0,.5.09.16.26.25.44.25h2v3.5c0,.22.15.42.37.48.04.01.09.02.13.02.17,0,.34-.09.43-.24l3-5c.09-.15.09-.35,0-.5-.09-.16-.26-.25-.44-.25h-2v-3.5c0-.22-.15-.42-.37-.48-.22-.06-.45.03-.56.22Z\"/>\n</g>\n<rect class=\"cls-2\" y=\"0\" width=\"24\" height=\"24\"/>\n</svg>`;\nexport const lineIcon = svg`<svg id=\"Laag_1\" data-name=\"Laag 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n<defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1, .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: currentColor;\n opacity: 0;\n }\n </style>\n</defs>\n<path class=\"cls-1\" d=\"M14.39,11.93l-1.39.58v-1.84l2.15-.89c.51-.21.75-.8.54-1.31-.21-.51-.8-.75-1.31-.54l-1.39.58V3c0-.55-.45-1-1-1s-1,.45-1,1v6.33l-2.15.89c-.51.21-.75.8-.54,1.31.21.51.8.75,1.31.54l1.39-.58v1.84l-2.15.89c-.51.21-.75.8-.54,1.31.21.51.8.75,1.31.54l1.39-.58v5.5c0,.55.45,1,1,1s1-.45,1-1v-6.33l2.15-.89c.51-.21.75-.8.54-1.31-.21-.51-.8-.75-1.31-.54Z\"/>\n<rect class=\"cls-2\" width=\"24\" height=\"24\"/>\n</svg>`;\nexport const processIcon = svg`<svg id=\"Laag_1\" data-name=\"Laag 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n<defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1, .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: currentColor;\n opacity: 0;\n }\n </style>\n</defs>\n<path class=\"cls-1\" d=\"M18.71,15.29c-.39-.39-1.02-.39-1.41,0s-.39,1.02,0,1.41l.29.29h-5.59c0-1.1-.9-2-2-2h-2c-1.01,0-1.84.76-1.97,1.74-.61-.34-1.03-.99-1.03-1.74,0-1.1.9-2,2-2h5c0,1.1.9,2,2,2h2c1.1,0,2-.9,2-2v-.14c1.72-.45,3-2,3-3.86,0-2.21-1.79-4-4-4h-5c0-1.1-.9-2-2-2h-2c-1.1,0-2,.9-2,2h-2c-.55,0-1,.45-1,1s.45,1,1,1h2c0,1.1.9,2,2,2h2c1.1,0,2-.9,2-2h5c1.1,0,2,.9,2,2,0,.75-.42,1.39-1.03,1.74-.13-.98-.96-1.74-1.97-1.74h-2c-1.1,0-2,.9-2,2h-5c-2.21,0-4,1.79-4,4,0,1.86,1.28,3.41,3,3.86v.14c0,1.1.9,2,2,2h2c1.1,0,2-.9,2-2h5.59l-.29.29c-.39.39-.39,1.02,0,1.41.2.2.45.29.71.29s.51-.1.71-.29l2-2c.39-.39.39-1.02,0-1.41l-2-2ZM8,7v-2h2v2s-2,0-2,0ZM14,11h2v2s-2,0-2,0v-2ZM8,19v-2h2v2s-2,0-2,0Z\"/>\n<rect class=\"cls-2\" y=\"0\" width=\"24\" height=\"24\"/>\n</svg>`;\n\nexport const transformerWindingIcon = svg`<svg id=\"Laag_1\" data-name=\"Laag 1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n<defs>\n <style>\n .cls-1 {\n fill: currentColor;\n }\n\n .cls-1, .cls-2 {\n stroke-width: 0px;\n }\n\n .cls-2 {\n fill: currentColor;\n opacity: 0;\n }\n </style>\n</defs>\n<g>\n <path class=\"cls-1\" d=\"M19,20h-2c-1.21,0-2.18-1.09-1.97-2.34.16-.98,1.09-1.66,2.08-1.66h-.11c.55,0,1-.45,1-1s-.42-.96-.95-.99c.04,0,.08-.01.12-.01h-.17c-1.21,0-2.18-1.09-1.97-2.34.16-.98,1.09-1.66,2.08-1.66h-.11c.55,0,1-.45,1-1s-.42-.96-.95-.99c.04,0,.08-.01.12-.01h-.17c-1.21,0-2.18-1.09-1.97-2.34.16-.98,1.09-1.66,2.08-1.66h1.89c.55,0,1-.45,1-1s-.45-1-1-1h-1.83c-2.09,0-3.95,1.53-4.15,3.61-.13,1.37.44,2.59,1.38,3.41-.76.64-1.28,1.55-1.38,2.59-.13,1.37.44,2.59,1.38,3.41-.76.64-1.28,1.55-1.38,2.59-.23,2.39,1.64,4.39,3.98,4.39h2c.55,0,1-.45,1-1s-.45-1-1-1Z\"/>\n <path class=\"cls-1\" d=\"M10.98,6.39c.23-2.39-1.64-4.39-3.98-4.39h-2c-.55,0-1,.45-1,1s.45,1,1,1h2c1.21,0,2.18,1.09,1.97,2.34-.16.98-1.09,1.66-2.08,1.66h.11c-.55,0-1,.45-1,1s.42.96.95.99c-.04,0-.08.01-.12.01h.17c1.21,0,2.18,1.09,1.97,2.34-.16.98-1.09,1.66-2.08,1.66h.11c-.55,0-1,.45-1,1,0,.28.11.53.29.71.17.17.4.27.65.28h0s.03.01.05.01c1.21,0,2.18,1.09,1.97,2.34-.16.98-1.09,1.66-2.08,1.66h-1.89c-.55,0-1,.45-1,1s.45,1,1,1h1.83c2.09,0,3.95-1.53,4.15-3.61.13-1.37-.44-2.59-1.38-3.41.76-.64,1.28-1.55,1.38-2.59.13-1.37-.44-2.59-1.38-3.41.76-.64,1.28-1.55,1.38-2.59Z\"/>\n <path class=\"cls-1\" d=\"M6.83,16h.17s-.03,0-.05-.01c-.04,0-.08.01-.12.01Z\"/>\n</g>\n<rect class=\"cls-2\" width=\"24\" height=\"24\"/>\n</svg>`;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ied-icons.js","sourceRoot":"","sources":["../../src/icons/ied-icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAA;;OAE3B,CAAC;AAER,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,CAAA;;OAEtB,CAAC;AAER,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAA;;OAE7B,CAAC","sourcesContent":["import { svg } from \"lit-element\";\n\nexport const accessPointIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M4.93,4.93C3.12,6.74 2,9.24 2,12C2,14.76 3.12,17.26 4.93,19.07L6.34,17.66C4.89,16.22 4,14.22 4,12C4,9.79 4.89,7.78 6.34,6.34L4.93,4.93M19.07,4.93L17.66,6.34C19.11,7.78 20,9.79 20,12C20,14.22 19.11,16.22 17.66,17.66L19.07,19.07C20.88,17.26 22,14.76 22,12C22,9.24 20.88,6.74 19.07,4.93M7.76,7.76C6.67,8.85 6,10.35 6,12C6,13.65 6.67,15.15 7.76,16.24L9.17,14.83C8.45,14.11 8,13.11 8,12C8,10.89 8.45,9.89 9.17,9.17L7.76,7.76M16.24,7.76L14.83,9.17C15.55,9.89 16,10.89 16,12C16,13.11 15.55,14.11 14.83,14.83L16.24,16.24C17.33,15.15 18,13.65 18,12C18,10.35 17.33,8.85 16.24,7.76M12,10A2,2 0 0,0 10,12A2,2 0 0,0 12,14A2,2 0 0,0 14,12A2,2 0 0,0 12,10Z\" />\n</svg>`;\n\nexport const serverIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M4,1H20A1,1 0 0,1 21,2V6A1,1 0 0,1 20,7H4A1,1 0 0,1 3,6V2A1,1 0 0,1 4,1M4,9H20A1,1 0 0,1 21,10V14A1,1 0 0,1 20,15H4A1,1 0 0,1 3,14V10A1,1 0 0,1 4,9M4,17H20A1,1 0 0,1 21,18V22A1,1 0 0,1 20,23H4A1,1 0 0,1 3,22V18A1,1 0 0,1 4,17M9,5H10V3H9V5M9,13H10V11H9V13M9,21H10V19H9V21M5,3V5H7V3H5M5,11V13H7V11H5M5,19V21H7V19H5Z\" />\n</svg>`;\n\nexport const logicalDeviceIcon = svg`<svg style=\"width:24px;height:24px\" viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M13,13H18V15H13M13,9H18V11H13M6.91,7.41L11.5,12L6.91,16.6L5.5,15.18L8.68,12L5.5,8.82M5,3C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3H5Z\" />\n</svg>`;"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"lnode.js","sourceRoot":"","sources":["../../src/icons/lnode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAA;;OAE7B,CAAC;AAER,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;OAEjC,CAAC;AAER,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAA;;OAE9B,CAAC;AAER,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;OAEjC,CAAC;AAER,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAA;;OAE9B,CAAC;AAER,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAA;;OAElC,CAAC;AAER,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAA;;OAEpC,CAAC;AAER,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAA;;OAElC,CAAC;AAER,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;OAEjC,CAAC;AAER,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,CAAA;;OAE9B,CAAC;AAER,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAA;;OAExC,CAAC;AAER,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAA;;OAElC,CAAC;AAER,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAA;;OAElC,CAAC;AAER,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAA;;OAEjC,CAAC;AAER,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAA;;OAEvC,CAAC;AAER,MAAM,CAAC,MAAM,sCAAsC,GAAG,GAAG,CAAA;;OAElD,CAAC","sourcesContent":["import { svg } from 'lit-element';\n\nexport const systemLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H11V15H15V17H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const automationLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M11,7H13A2,2 0 0,1 15,9V17H13V13H11V17H9V9A2,2 0 0,1 11,7M11,9V11H13V9H11M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2Z\" />\n</svg>`;\n\nexport const controlLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M11,7H13A2,2 0 0,1 15,9V10H13V9H11V15H13V14H15V15A2,2 0 0,1 13,17H11A2,2 0 0,1 9,15V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const functionalLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H15V9H11V11H14V13H11V17H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const generalLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M11,7H15V9H11V15H13V11H15V15A2,2 0 0,1 13,17H11A2,2 0 0,1 9,15V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const interfacingLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M14,7V9H13V15H14V17H10V15H11V9H10V7H14M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const nonElectricalLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n<path fill=\"currentColor\" d=\"M9,7H11V10.33L13,7H15L12,12L15,17H13L11,13.67V17H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const measurementLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H15A2,2 0 0,1 17,9V17H15V9H13V16H11V9H9V17H7V9A2,2 0 0,1 9,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const protectionLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H13A2,2 0 0,1 15,9V11A2,2 0 0,1 13,13H11V17H9V7M11,9V11H13V9H11M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const qualityLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4M11,7H13A2,2 0 0,1 15,9V15A2,2 0 0,1 13,17V19H11V17A2,2 0 0,1 9,15V9A2,2 0 0,1 11,7M11,9V15H13V9H11Z\" />\n</svg>`;\n\nexport const protectionRelatedLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H13A2,2 0 0,1 15,9V11C15,11.84 14.5,12.55 13.76,12.85L15,17H13L11.8,13H11V17H9V7M11,9V11H13V9H11M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12C4,16.41 7.58,20 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const supervisionLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M11,7H15V9H11V11H13A2,2 0 0,1 15,13V15A2,2 0 0,1 13,17H9V15H13V13H11A2,2 0 0,1 9,11V9A2,2 0 0,1 11,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const transformerLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H15V9H13V17H11V9H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const switchgearLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H11L12,9.5L13,7H15L13,12L15,17H13L12,14.5L11,17H9L11,12L9,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const powerTransformerLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H11L12,10L13,7H15L13,13V17H11V13L9,7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n\nexport const furtherPowerSystemEquipmentLogicalNode = svg`<svg viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M9,7H15V9L11,15H15V17H9V15L13,9H9V7M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4Z\" />\n</svg>`;\n"]}