iobroker.mywebui 1.100.0 → 1.103.0

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 (259) hide show
  1. package/default-controls/controls/plantpax/ain-faceplate.control +23 -0
  2. package/default-controls/controls/plantpax/ain-symbol.control +23 -0
  3. package/default-controls/controls/plantpax/components/level-bar.control +27 -0
  4. package/default-controls/controls/plantpax/components/sparkline.control +27 -0
  5. package/dist/backend/3d-editor-integration.js +1 -1
  6. package/dist/backend/ImportmapCreator.js +1 -1
  7. package/dist/backend/UploadHelper.js +1 -1
  8. package/dist/backend/main.js +1 -1
  9. package/io-package.json +1 -1
  10. package/package.json +1 -1
  11. package/scripts/_build_plantpax.py +391 -0
  12. package/scripts/_build_plantpax_components.py +188 -0
  13. package/www/3d-editor/js/Animation.js +1 -1
  14. package/www/3d-editor/js/AnimationResizer.js +1 -1
  15. package/www/3d-editor/js/Command.js +1 -1
  16. package/www/3d-editor/js/Config.js +1 -1
  17. package/www/3d-editor/js/Editor.js +1 -1
  18. package/www/3d-editor/js/EditorControls.js +1 -1
  19. package/www/3d-editor/js/GLTFImportDialog.js +1 -1
  20. package/www/3d-editor/js/History.js +1 -1
  21. package/www/3d-editor/js/Loader.js +1 -1
  22. package/www/3d-editor/js/LoaderUtils.js +1 -1
  23. package/www/3d-editor/js/Menubar.Add.js +1 -1
  24. package/www/3d-editor/js/Menubar.Edit.js +1 -1
  25. package/www/3d-editor/js/Menubar.File.js +1 -1
  26. package/www/3d-editor/js/Menubar.Help.js +1 -1
  27. package/www/3d-editor/js/Menubar.Render.js +1 -1
  28. package/www/3d-editor/js/Menubar.Status.js +1 -1
  29. package/www/3d-editor/js/Menubar.View.js +1 -1
  30. package/www/3d-editor/js/Menubar.js +1 -1
  31. package/www/3d-editor/js/Player.js +1 -1
  32. package/www/3d-editor/js/Resizer.js +1 -1
  33. package/www/3d-editor/js/Script.js +1 -1
  34. package/www/3d-editor/js/Selector.js +1 -1
  35. package/www/3d-editor/js/Sidebar.Geometry.BoxGeometry.js +1 -1
  36. package/www/3d-editor/js/Sidebar.Geometry.BufferGeometry.js +1 -1
  37. package/www/3d-editor/js/Sidebar.Geometry.CapsuleGeometry.js +1 -1
  38. package/www/3d-editor/js/Sidebar.Geometry.CircleGeometry.js +1 -1
  39. package/www/3d-editor/js/Sidebar.Geometry.CylinderGeometry.js +1 -1
  40. package/www/3d-editor/js/Sidebar.Geometry.DodecahedronGeometry.js +1 -1
  41. package/www/3d-editor/js/Sidebar.Geometry.ExtrudeGeometry.js +1 -1
  42. package/www/3d-editor/js/Sidebar.Geometry.IcosahedronGeometry.js +1 -1
  43. package/www/3d-editor/js/Sidebar.Geometry.LatheGeometry.js +1 -1
  44. package/www/3d-editor/js/Sidebar.Geometry.Modifiers.js +1 -1
  45. package/www/3d-editor/js/Sidebar.Geometry.OctahedronGeometry.js +1 -1
  46. package/www/3d-editor/js/Sidebar.Geometry.PlaneGeometry.js +1 -1
  47. package/www/3d-editor/js/Sidebar.Geometry.RingGeometry.js +1 -1
  48. package/www/3d-editor/js/Sidebar.Geometry.ShapeGeometry.js +1 -1
  49. package/www/3d-editor/js/Sidebar.Geometry.SphereGeometry.js +1 -1
  50. package/www/3d-editor/js/Sidebar.Geometry.TetrahedronGeometry.js +1 -1
  51. package/www/3d-editor/js/Sidebar.Geometry.TextGeometry.js +1 -1
  52. package/www/3d-editor/js/Sidebar.Geometry.TorusGeometry.js +1 -1
  53. package/www/3d-editor/js/Sidebar.Geometry.TorusKnotGeometry.js +1 -1
  54. package/www/3d-editor/js/Sidebar.Geometry.TubeGeometry.js +1 -1
  55. package/www/3d-editor/js/Sidebar.Geometry.js +1 -1
  56. package/www/3d-editor/js/Sidebar.Material.BooleanProperty.js +1 -1
  57. package/www/3d-editor/js/Sidebar.Material.ColorProperty.js +1 -1
  58. package/www/3d-editor/js/Sidebar.Material.ConstantProperty.js +1 -1
  59. package/www/3d-editor/js/Sidebar.Material.MapProperty.js +1 -1
  60. package/www/3d-editor/js/Sidebar.Material.NumberProperty.js +1 -1
  61. package/www/3d-editor/js/Sidebar.Material.Program.js +1 -1
  62. package/www/3d-editor/js/Sidebar.Material.RangeValueProperty.js +1 -1
  63. package/www/3d-editor/js/Sidebar.Material.js +1 -1
  64. package/www/3d-editor/js/Sidebar.Object.js +1 -1
  65. package/www/3d-editor/js/Sidebar.Project.App.js +1 -1
  66. package/www/3d-editor/js/Sidebar.Project.Materials.js +1 -1
  67. package/www/3d-editor/js/Sidebar.Project.Renderer.js +1 -1
  68. package/www/3d-editor/js/Sidebar.Project.Resources.js +1 -1
  69. package/www/3d-editor/js/Sidebar.Project.js +1 -1
  70. package/www/3d-editor/js/Sidebar.Properties.js +1 -1
  71. package/www/3d-editor/js/Sidebar.Scene.js +1 -1
  72. package/www/3d-editor/js/Sidebar.Script.js +1 -1
  73. package/www/3d-editor/js/Sidebar.Settings.History.js +1 -1
  74. package/www/3d-editor/js/Sidebar.Settings.Shortcuts.js +1 -1
  75. package/www/3d-editor/js/Sidebar.Settings.js +1 -1
  76. package/www/3d-editor/js/Sidebar.js +1 -1
  77. package/www/3d-editor/js/Storage.js +1 -1
  78. package/www/3d-editor/js/Strings.js +1 -1
  79. package/www/3d-editor/js/TextureParametersDialog.js +1 -1
  80. package/www/3d-editor/js/Toolbar.js +1 -1
  81. package/www/3d-editor/js/Viewport.Controls.js +1 -1
  82. package/www/3d-editor/js/Viewport.Info.js +1 -1
  83. package/www/3d-editor/js/Viewport.Pathtracer.js +1 -1
  84. package/www/3d-editor/js/Viewport.ViewHelper.js +1 -1
  85. package/www/3d-editor/js/Viewport.XR.js +1 -1
  86. package/www/3d-editor/js/Viewport.js +1 -1
  87. package/www/3d-editor/js/commands/AddObjectCommand.js +1 -1
  88. package/www/3d-editor/js/commands/AddScriptCommand.js +1 -1
  89. package/www/3d-editor/js/commands/Commands.js +1 -1
  90. package/www/3d-editor/js/commands/MoveObjectCommand.js +1 -1
  91. package/www/3d-editor/js/commands/MultiCmdsCommand.js +1 -1
  92. package/www/3d-editor/js/commands/RemoveObjectCommand.js +1 -1
  93. package/www/3d-editor/js/commands/RemoveScriptCommand.js +1 -1
  94. package/www/3d-editor/js/commands/SetColorCommand.js +1 -1
  95. package/www/3d-editor/js/commands/SetGeometryCommand.js +1 -1
  96. package/www/3d-editor/js/commands/SetGeometryValueCommand.js +1 -1
  97. package/www/3d-editor/js/commands/SetMaterialColorCommand.js +1 -1
  98. package/www/3d-editor/js/commands/SetMaterialCommand.js +1 -1
  99. package/www/3d-editor/js/commands/SetMaterialMapCommand.js +1 -1
  100. package/www/3d-editor/js/commands/SetMaterialRangeCommand.js +1 -1
  101. package/www/3d-editor/js/commands/SetMaterialValueCommand.js +1 -1
  102. package/www/3d-editor/js/commands/SetMaterialVectorCommand.js +1 -1
  103. package/www/3d-editor/js/commands/SetPositionCommand.js +1 -1
  104. package/www/3d-editor/js/commands/SetRotationCommand.js +1 -1
  105. package/www/3d-editor/js/commands/SetScaleCommand.js +1 -1
  106. package/www/3d-editor/js/commands/SetSceneCommand.js +1 -1
  107. package/www/3d-editor/js/commands/SetScriptValueCommand.js +1 -1
  108. package/www/3d-editor/js/commands/SetShadowValueCommand.js +1 -1
  109. package/www/3d-editor/js/commands/SetTextureParametersCommand.js +1 -1
  110. package/www/3d-editor/js/commands/SetUuidCommand.js +1 -1
  111. package/www/3d-editor/js/commands/SetValueCommand.js +1 -1
  112. package/www/dist/frontend/bundle/chunk-3AS7GRBW.js +21 -0
  113. package/www/dist/frontend/bundle/chunk-3C6XC7RW.js +1 -1
  114. package/www/dist/frontend/bundle/chunk-3WGNLIWJ.js +3 -3
  115. package/www/dist/frontend/bundle/chunk-3YK3Y2SJ.js +1 -1
  116. package/www/dist/frontend/bundle/chunk-43HEBO5G.js +3 -3
  117. package/www/dist/frontend/bundle/chunk-5MUGMRXU.js +1 -1
  118. package/www/dist/frontend/bundle/chunk-5UBRCTRX.js +3 -3
  119. package/www/dist/frontend/bundle/chunk-65A3PNMG.js +1 -1
  120. package/www/dist/frontend/bundle/chunk-66EU64WD.js +1 -1
  121. package/www/dist/frontend/bundle/chunk-6L2YCGEX.js +1 -1
  122. package/www/dist/frontend/bundle/chunk-7CWDQGAG.js +2 -2
  123. package/www/dist/frontend/bundle/chunk-7PT7IGUJ.js +2 -2
  124. package/www/dist/frontend/bundle/chunk-AI5PDLDE.js +3 -3
  125. package/www/dist/frontend/bundle/chunk-AUTVRE23.js +1 -0
  126. package/www/dist/frontend/bundle/chunk-AWKVUUKN.js +3 -3
  127. package/www/dist/frontend/bundle/chunk-B6NXWGSB.js +1 -1
  128. package/www/dist/frontend/bundle/chunk-BHSHNRXW.js +1 -1
  129. package/www/dist/frontend/bundle/chunk-BVONDEOL.js +3 -3
  130. package/www/dist/frontend/bundle/chunk-C7OGVQZC.js +1 -1
  131. package/www/dist/frontend/bundle/chunk-CHDKROX5.js +2 -2
  132. package/www/dist/frontend/bundle/chunk-DNCD2F6X.js +3 -3
  133. package/www/dist/frontend/bundle/chunk-FHF6DL5U.js +1 -1
  134. package/www/dist/frontend/bundle/chunk-FO56TEZH.js +3 -3
  135. package/www/dist/frontend/bundle/chunk-FRCSTZQC.js +21 -0
  136. package/www/dist/frontend/bundle/chunk-FSHAYPVR.js +3 -3
  137. package/www/dist/frontend/bundle/chunk-FSRRPQMX.js +2 -2
  138. package/www/dist/frontend/bundle/chunk-GLQNGCFL.js +1 -1
  139. package/www/dist/frontend/bundle/chunk-JBDSDK2C.js +3 -3
  140. package/www/dist/frontend/bundle/chunk-JSC66ZLQ.js +1 -1
  141. package/www/dist/frontend/bundle/chunk-K6IV7LKW.js +1 -1
  142. package/www/dist/frontend/bundle/chunk-KJU5I76S.js +2 -2
  143. package/www/dist/frontend/bundle/chunk-KY73TL6O.js +2 -2
  144. package/www/dist/frontend/bundle/chunk-LKS3S4WX.js +1 -1
  145. package/www/dist/frontend/bundle/chunk-M6VVTDVX.js +2 -2
  146. package/www/dist/frontend/bundle/chunk-MECWXZRN.js +1 -1
  147. package/www/dist/frontend/bundle/chunk-N2YIZTB2.js +1 -1
  148. package/www/dist/frontend/bundle/chunk-NQ7L7KNT.js +3 -3
  149. package/www/dist/frontend/bundle/chunk-O2AJL747.js +3 -3
  150. package/www/dist/frontend/bundle/chunk-P7EOR36H.js +1 -1
  151. package/www/dist/frontend/bundle/chunk-PJYK24KZ.js +1 -1
  152. package/www/dist/frontend/bundle/chunk-PYLAW6UA.js +2 -2
  153. package/www/dist/frontend/bundle/chunk-QJJGP23I.js +1 -1
  154. package/www/dist/frontend/bundle/chunk-QV4IBWXA.js +1 -1
  155. package/www/dist/frontend/bundle/chunk-R6IQDPAP.js +3 -3
  156. package/www/dist/frontend/bundle/chunk-RRFSEMFS.js +3 -3
  157. package/www/dist/frontend/bundle/chunk-RTTBZOQU.js +2 -2
  158. package/www/dist/frontend/bundle/chunk-S4TLNW5D.js +1 -1
  159. package/www/dist/frontend/bundle/chunk-SE6N4ZEN.js +1 -1
  160. package/www/dist/frontend/bundle/chunk-SQHXO2IT.js +3 -3
  161. package/www/dist/frontend/bundle/chunk-T4AIQBBH.js +3 -3
  162. package/www/dist/frontend/bundle/chunk-TWQQHCU7.js +3 -3
  163. package/www/dist/frontend/bundle/chunk-U5Q332OH.js +1 -1
  164. package/www/dist/frontend/bundle/chunk-UIP324PP.js +1 -1
  165. package/www/dist/frontend/bundle/chunk-V27IRYSL.js +1 -1
  166. package/www/dist/frontend/bundle/chunk-V4C5FGJL.js +3 -3
  167. package/www/dist/frontend/bundle/chunk-V5CHFTYG.js +3 -3
  168. package/www/dist/frontend/bundle/chunk-W2KWSW4M.js +1 -1
  169. package/www/dist/frontend/bundle/chunk-W5QV7JN5.js +1 -0
  170. package/www/dist/frontend/bundle/chunk-WED7CGWA.js +2 -2
  171. package/www/dist/frontend/bundle/chunk-WQ5H5LTG.js +3 -3
  172. package/www/dist/frontend/bundle/chunk-WU54NCEU.js +1 -1
  173. package/www/dist/frontend/bundle/chunk-XFO5FUCN.js +1 -1
  174. package/www/dist/frontend/bundle/chunk-XWAQ2BWM.js +3 -3
  175. package/www/dist/frontend/bundle/chunk-YTQCHNRQ.js +3 -3
  176. package/www/dist/frontend/bundle/chunk-YUSK4FN3.js +3 -3
  177. package/www/dist/frontend/bundle/chunk-Z34BSG5O.js +3 -3
  178. package/www/dist/frontend/bundle/common/IobrokerHandler.js +1 -1
  179. package/www/dist/frontend/bundle/runtime/CustomControls.js +1 -1
  180. package/www/dist/frontend/bundle/runtime/ScreenViewer.js +1 -1
  181. package/www/dist/frontend/bundle/runtime/controls.js +4 -4
  182. package/www/dist/frontend/bundle/runtime/init.js +3 -3
  183. package/www/dist/frontend/common/Common.globals.js +1 -1
  184. package/www/dist/frontend/common/IobrokerHandler.js +1 -1
  185. package/www/dist/frontend/common/PlantPaxResolve.js +1 -1
  186. package/www/dist/frontend/common/Runtime.js +1 -1
  187. package/www/dist/frontend/config/CommandHandling.js +1 -1
  188. package/www/dist/frontend/config/ConfigureWebcomponentDesigner.js +1 -1
  189. package/www/dist/frontend/config/DockHelper.js +1 -1
  190. package/www/dist/frontend/config/IobrokerWebui3DDriveEngine.js +1 -1
  191. package/www/dist/frontend/config/IobrokerWebui3DScreenEditor.js +3 -3
  192. package/www/dist/frontend/config/IobrokerWebui3DScreenPropertiesPanel.js +3 -3
  193. package/www/dist/frontend/config/IobrokerWebui3DScreenViewer.js +3 -3
  194. package/www/dist/frontend/config/IobrokerWebuiAppShell.js +2 -2
  195. package/www/dist/frontend/config/IobrokerWebuiBindingsEditor.js +1 -1
  196. package/www/dist/frontend/config/IobrokerWebuiConfirmationWrapper.js +2 -2
  197. package/www/dist/frontend/config/IobrokerWebuiControlPropertiesEditor.js +2 -2
  198. package/www/dist/frontend/config/IobrokerWebuiDynamicPropsEditor.js +1 -1
  199. package/www/dist/frontend/config/IobrokerWebuiEventAssignment.js +1 -1
  200. package/www/dist/frontend/config/IobrokerWebuiIconsView.js +3 -3
  201. package/www/dist/frontend/config/IobrokerWebuiMonacoEditor.js +3 -3
  202. package/www/dist/frontend/config/IobrokerWebuiPlantPaxTypesEditor.js +1 -1
  203. package/www/dist/frontend/config/IobrokerWebuiPropertyGrid.js +1 -1
  204. package/www/dist/frontend/config/IobrokerWebuiScreenEditor.js +1 -1
  205. package/www/dist/frontend/config/IobrokerWebuiScreensView.js +3 -3
  206. package/www/dist/frontend/config/IobrokerWebuiSecurityEditor.js +1 -1
  207. package/www/dist/frontend/config/IobrokerWebuiSignalPropertyEditor.js +1 -1
  208. package/www/dist/frontend/config/IobrokerWebuiSolutionExplorer.js +2 -2
  209. package/www/dist/frontend/config/IobrokerWebuiTranslationEditor.js +1 -1
  210. package/www/dist/frontend/config/IobrokerWebuiWidgetGallery.js +3 -3
  211. package/www/dist/frontend/helper/DialogHelper.js +3 -3
  212. package/www/dist/frontend/helper/EsprimaHelper.js +1 -1
  213. package/www/dist/frontend/helper/Helper.js +1 -1
  214. package/www/dist/frontend/helper/LayoutHelper.js +1 -1
  215. package/www/dist/frontend/helper/XmlHelper.js +1 -1
  216. package/www/dist/frontend/helper/ZipHelper.js +1 -1
  217. package/www/dist/frontend/runtime/AnimationService.js +1 -1
  218. package/www/dist/frontend/runtime/CustomControls.js +1 -1
  219. package/www/dist/frontend/runtime/DynamicElementProperties.js +1 -1
  220. package/www/dist/frontend/runtime/HabPanelLikeMenu.js +3 -3
  221. package/www/dist/frontend/runtime/NavigationShell.js +1 -1
  222. package/www/dist/frontend/runtime/RuntimeTheme.js +1 -1
  223. package/www/dist/frontend/runtime/ScreenViewer.js +2 -2
  224. package/www/dist/frontend/runtime/TranslateableText.js +2 -2
  225. package/www/dist/frontend/runtime/VisibilityService.js +1 -1
  226. package/www/dist/frontend/runtime/controls.js +1 -1
  227. package/www/dist/frontend/runtime/init.js +1 -1
  228. package/www/dist/frontend/scripting/IobrokerWebuiScriptSystem.js +1 -1
  229. package/www/dist/frontend/scripting/blockly/OpenScreen.js +1 -1
  230. package/www/dist/frontend/scripting/blockly/webuiBlocklyToolbox.js +1 -1
  231. package/www/dist/frontend/services/DynamicPropertiesHelper.js +1 -1
  232. package/www/dist/frontend/services/IobrokerWebuiBindableLocalObjectsService.js +1 -1
  233. package/www/dist/frontend/services/IobrokerWebuiBindableObjectDragDropService.js +1 -1
  234. package/www/dist/frontend/services/IobrokerWebuiBindableObjectsForPropertiesService.js +1 -1
  235. package/www/dist/frontend/services/IobrokerWebuiBindableObjectsService.js +1 -1
  236. package/www/dist/frontend/services/IobrokerWebuiConfigButtonProvider.js +1 -1
  237. package/www/dist/frontend/services/IobrokerWebuiCopyPasteService.js +1 -1
  238. package/www/dist/frontend/services/IobrokerWebuiCustomControlEventsService.js +1 -1
  239. package/www/dist/frontend/services/IobrokerWebuiCustomElementContextMenu.js +1 -1
  240. package/www/dist/frontend/services/IobrokerWebuiDemoProviderService.js +1 -1
  241. package/www/dist/frontend/services/IobrokerWebuiDynamicPropertiesService.js +1 -1
  242. package/www/dist/frontend/services/IobrokerWebuiEventsService.js +1 -1
  243. package/www/dist/frontend/services/IobrokerWebuiExternalDragDropService.js +1 -1
  244. package/www/dist/frontend/services/IobrokerWebuiLitPropertiesService.js +1 -1
  245. package/www/dist/frontend/services/IobrokerWebuiPropertiesService.js +1 -1
  246. package/www/dist/frontend/services/IobrokerWebuiPropertyGroupsService.js +1 -1
  247. package/www/dist/frontend/services/IobrokerWebuiRefactorService.js +1 -1
  248. package/www/dist/frontend/services/IobrokerWebuiScreenContextMenu.js +1 -1
  249. package/www/dist/frontend/services/IobrokerWebuiSpecialPropertiesService.js +1 -1
  250. package/www/dist/frontend/services/IobrokerWebuiSpectrumEditorService.js +1 -1
  251. package/www/dist/frontend/services/IobrokerWebuiVisibilityPropertiesService.js +1 -1
  252. package/www/dist/frontend/services/LayoutComponentsPropertiesService.js +1 -1
  253. package/www/dist/frontend/widgets/OrthoFlowLineTool.js +1 -1
  254. package/www/dist/frontend/widgets/customElementsObserver.js +1 -1
  255. package/www/dist/frontend/widgets/importWidgetFiles.js +1 -1
  256. package/www/dist/frontend/widgets/importWidgetFilesRuntime.js +1 -1
  257. package/www/dist/frontend/widgets/layout-components.js +1 -1
  258. package/www/dist/frontend/widgets/layout-placement-services.js +1 -1
  259. package/www/dist/frontend/widgets/testElement.js +1 -1
@@ -0,0 +1,23 @@
1
+ {
2
+ "properties": {
3
+ "root": {
4
+ "type": "signal",
5
+ "default": ""
6
+ },
7
+ "type": {
8
+ "type": "string",
9
+ "default": "P_AIn"
10
+ },
11
+ "unit": {
12
+ "type": "string",
13
+ "default": ""
14
+ }
15
+ },
16
+ "settings": {
17
+ "width": "400px",
18
+ "height": "460px"
19
+ },
20
+ "html": "<div class=\"fp\"><div class=\"fp-hdr\"><span class=\"fp-title\">[[this.root]]</span><button class=\"fp-adv-btn\" title=\"Advanced\" @click=\"[[this._adv()]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M4 6h10M4 12h16M4 18h7\"/><circle cx=\"17\" cy=\"6\" r=\"2\"/><circle cx=\"14\" cy=\"18\" r=\"2\"/></svg></button><button class=\"fp-x\" @click=\"[[window.IOB.closeFaceplate()]]\">✕</button></div><div class=\"fp-tabs\" data-group=\"main\"><button class=\"fp-tab\" data-tab=\"Operator\" title=\"Operator\" @click=\"[[this._tab('Operator')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M3 11l9-8 9 8\"/><path d=\"M5 10v10h14V10\"/></svg></button><button class=\"fp-tab\" data-tab=\"Maintenance\" title=\"Maintenance\" @click=\"[[this._tab('Maintenance')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M14 6a3.5 3.5 0 00-4.8 4.2l-5 5 1.4 1.4 5-5A3.5 3.5 0 0014 6z\"/><circle cx=\"16.5\" cy=\"7.5\" r=\"1.2\"/></svg></button><button class=\"fp-tab\" data-tab=\"Trends\" title=\"Trends\" @click=\"[[this._tab('Trends')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M3 17l5-6 4 3 6-8\"/><path d=\"M3 21h18\"/></svg></button><button class=\"fp-tab\" data-tab=\"Diagnostics\" title=\"Diagnostics\" @click=\"[[this._tab('Diagnostics')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M6 3v6a4 4 0 008 0V3\"/><path d=\"M10 15v2a4 4 0 008 0v-1\"/><circle cx=\"18\" cy=\"14\" r=\"2\"/></svg></button><button class=\"fp-tab\" data-tab=\"Alarms\" title=\"Alarms\" @click=\"[[this._tab('Alarms')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M18 8a6 6 0 10-12 0c0 7-3 9-3 9h18s-3-2-3-9\"/><path d=\"M13.7 21a2 2 0 01-3.4 0\"/></svg><span class=\"fp-tab-badge\" bind-css:display=\"[[this.anyAlarm?'':'none']]\"></span></button></div><div class=\"fp-tabs hidden\" data-group=\"advanced\"><button class=\"fp-tab\" data-tab=\"Main\" title=\"Back to Main\" @click=\"[[this._main()]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M15 6l-6 6 6 6\"/></svg></button><button class=\"fp-tab\" data-tab=\"Engineering\" title=\"Engineering\" @click=\"[[this._tab('Engineering')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><circle cx=\"12\" cy=\"12\" r=\"3\"/><path d=\"M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M18.4 5.6l-2.1 2.1M7.7 16.3l-2.1 2.1\"/></svg></button><button class=\"fp-tab\" data-tab=\"HMI\" title=\"HMI Config\" @click=\"[[this._tab('HMI')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"14\" rx=\"1\"/><path d=\"M3 8h18\"/></svg></button><button class=\"fp-tab\" data-tab=\"Faults\" title=\"Faults\" @click=\"[[this._tab('Faults')]]\"><svg viewBox=\"0 0 24 24\" class=\"fp-ic\"><path d=\"M12 4v10\"/><circle cx=\"12\" cy=\"19\" r=\"0.6\"/></svg></button></div><div class=\"fp-body\"><div data-pane=\"Operator\"><webui-plantpax-components-level-bar id=\"lbar\"></webui-plantpax-components-level-bar><div class=\"fp-sec\" style=\"margin-top:8px\">Trend</div><webui-plantpax-components-sparkline id=\"spark\" style=\"display:block;height:44px\"></webui-plantpax-components-sparkline><div class=\"fp-row\"><span class=\"lbl\">PV Quality</span><span bind-attr:class=\"[[this.pvBad?'qual bad':(this.pvUncertain?'qual unc':'qual good')]]\">[[this.pvBad?'BAD':(this.pvUncertain?'UNCERTAIN':'GOOD')]]</span></div><div class=\"fp-row\"><span class=\"lbl\">PV Source</span><span>[[this.substActive?'Substitute (manual)':'Input (process)']]</span></div></div><div data-pane=\"Maintenance\" class=\"hidden\"><div class=\"fp-mrow head\"><span class=\"mnm\"></span><span class=\"mh\">Threshold</span><span class=\"mh\">Deadband</span></div><div class=\"fp-mrow\"><span class=\"mnm\">HiHi</span><input type=\"number\" class=\"mnum\" data-field=\"hiHiLim\" bind-prop:value=\"[[this.hiHiLim]]\" placeholder=\"limit\"><input type=\"number\" class=\"mnum\" data-field=\"hiHiDB\" bind-prop:value=\"[[this.hiHiDB]]\" placeholder=\"db\"></div><div class=\"fp-mrow\"><span class=\"mnm\">Hi</span><input type=\"number\" class=\"mnum\" data-field=\"hiLim\" bind-prop:value=\"[[this.hiLim]]\" placeholder=\"limit\"><input type=\"number\" class=\"mnum\" data-field=\"hiDB\" bind-prop:value=\"[[this.hiDB]]\" placeholder=\"db\"></div><div class=\"fp-mrow\"><span class=\"mnm\">Lo</span><input type=\"number\" class=\"mnum\" data-field=\"loLim\" bind-prop:value=\"[[this.loLim]]\" placeholder=\"limit\"><input type=\"number\" class=\"mnum\" data-field=\"loDB\" bind-prop:value=\"[[this.loDB]]\" placeholder=\"db\"></div><div class=\"fp-mrow\"><span class=\"mnm\">LoLo</span><input type=\"number\" class=\"mnum\" data-field=\"loLoLim\" bind-prop:value=\"[[this.loLoLim]]\" placeholder=\"limit\"><input type=\"number\" class=\"mnum\" data-field=\"loLoDB\" bind-prop:value=\"[[this.loLoDB]]\" placeholder=\"db\"></div><div class=\"fp-row\" style=\"margin-top:10px\"><span class=\"lbl\">Substitute PV</span><button class=\"fp-btn\" data-subst=\"1\">[[this.substActive?'Use Input':'Use Substitute']]</button></div></div><div data-pane=\"Engineering\" class=\"hidden\"><div class=\"fp-sec\">Raw Input Scaling</div><div class=\"fp-row\"><span class=\"lbl\">Input Max</span><input type=\"number\" data-field=\"inpRawMax\" bind-prop:value=\"[[this.inpRawMax]]\"></div><div class=\"fp-row\"><span class=\"lbl\">Input Min</span><input type=\"number\" data-field=\"inpRawMin\" bind-prop:value=\"[[this.inpRawMin]]\"></div><div class=\"fp-row\"><span class=\"lbl\">Scaled Max (EU)</span><input type=\"number\" data-field=\"pvEuMax\" bind-prop:value=\"[[this.pvEuMax]]\"></div><div class=\"fp-row\"><span class=\"lbl\">Scaled Min (EU)</span><input type=\"number\" data-field=\"pvEuMin\" bind-prop:value=\"[[this.pvEuMin]]\"></div><div class=\"fp-sec\">PV Source and Quality</div><label class=\"fp-chk\"><input type=\"checkbox\" data-fieldb=\"noSubstPV\"><span>Disable selection of Substitute PV</span></label><div class=\"fp-row\"><span class=\"lbl\">PV Filter Time Constant (sec)</span><input type=\"number\" data-field=\"filtTC\" bind-prop:value=\"[[this.filtTC]]\"></div></div><div data-pane=\"Trends\" class=\"hidden\"><div class=\"fp-sec\">PV Trend</div><webui-plantpax-components-sparkline id=\"sparkbig\" style=\"display:block;height:160px\" bind-prop:points=\"120\"></webui-plantpax-components-sparkline><div class=\"fp-row\" style=\"margin-top:6px\"><span class=\"lbl\">Current</span><span>[[this.pv==null?'--':this.pv]] [[this.unit||'']]</span></div></div><div data-pane=\"Diagnostics\" class=\"hidden\"><div class=\"fp-sec\">Signal Chain</div><div class=\"fp-row\"><span class=\"lbl\">Raw / Scaled Input</span><span>[[this.valInpPV==null?'--':this.valInpPV]]</span></div><div class=\"fp-row\"><span class=\"lbl\">Scaled PV (EU)</span><span>[[this.pv==null?'--':this.pv]] [[this.unit||'']]</span></div><div class=\"fp-row\"><span class=\"lbl\">PV Quality</span><span bind-attr:class=\"[[this.pvBad?'qual bad':(this.pvUncertain?'qual unc':'qual good')]]\">[[this.pvBad?'BAD':(this.pvUncertain?'UNCERTAIN':'GOOD')]]</span></div><div class=\"fp-row\"><span class=\"lbl\">Substitute Active</span><span>[[this.substActive?'YES':'no']]</span></div></div><div data-pane=\"Alarms\" class=\"hidden\"><button class=\"fp-btn\" data-ackall=\"1\" style=\"margin-bottom:8px\">Ack All</button><div class=\"fp-alm\" bind-attr:class=\"[[this.hiHiAlarm?'fp-alm active':'fp-alm']]\"><span class=\"fp-chip\"></span><span class=\"nm\">HiHi</span><button class=\"fp-btn\" data-ack=\"hiHiAck\">ACK</button></div><div class=\"fp-alm\" bind-attr:class=\"[[this.hiAlarm?'fp-alm active':'fp-alm']]\"><span class=\"fp-chip\"></span><span class=\"nm\">Hi</span><button class=\"fp-btn\" data-ack=\"hiAck\">ACK</button></div><div class=\"fp-alm\" bind-attr:class=\"[[this.loAlarm?'fp-alm active':'fp-alm']]\"><span class=\"fp-chip\"></span><span class=\"nm\">Lo</span><button class=\"fp-btn\" data-ack=\"loAck\">ACK</button></div><div class=\"fp-alm\" bind-attr:class=\"[[this.loLoAlarm?'fp-alm active':'fp-alm']]\"><span class=\"fp-chip\"></span><span class=\"nm\">LoLo</span><button class=\"fp-btn\" data-ack=\"loLoAck\">ACK</button></div><div class=\"fp-alm\" bind-attr:class=\"[[this.failAlarm?'fp-alm active':'fp-alm']]\"><span class=\"fp-chip\"></span><span class=\"nm\">Fail</span><button class=\"fp-btn\" data-ack=\"failAck\">ACK</button></div></div><div data-pane=\"HMI\" class=\"hidden\"><div class=\"fp-sec\">HMI Configuration</div><div class=\"fp-row\"><span class=\"lbl\">Instance</span><span style=\"font-size:11px;word-break:break-all\">[[this.root]]</span></div><div class=\"fp-row\"><span class=\"lbl\">Type</span><span>[[this.type]]</span></div><div class=\"fp-row\"><span class=\"lbl\">EU Units</span><span>[[this.unit||'—']]</span></div></div><div data-pane=\"Faults\" class=\"hidden\"><div class=\"fp-sec\">Faults &amp; Status</div><div class=\"fp-alm\" bind-attr:class=\"[[this.failAlarm?'fp-alm active':'fp-alm']]\"><span class=\"fp-chip\"></span><span class=\"nm\">Input Fail</span></div><div class=\"fp-row\"><span class=\"lbl\">PV Bad</span><span>[[this.pvBad?'YES':'no']]</span></div><div class=\"fp-row\"><span class=\"lbl\">PV Uncertain</span><span>[[this.pvUncertain?'YES':'no']]</span></div></div></div></div>",
21
+ "style": ":host{display:block;font-family:'Segoe UI',sans-serif;color:var(--ui-text,#e8e8ea);}.fp{display:flex;flex-direction:column;min-width:320px;}.fp-hdr{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--ui-border,#4a5570);}.fp-title{font-weight:700;flex:1;font-size:13px;}.fp-x{cursor:pointer;background:none;border:none;color:var(--ui-text,#e8e8ea);font-size:16px;}.fp-adv-btn{cursor:pointer;background:none;border:none;color:var(--ui-dim,#9aa3b0);padding:2px;display:flex;}.fp-adv-btn:hover{color:var(--accent,#2680eb);}.fp-tabs{display:flex;gap:4px;padding:6px 8px 0;background:var(--ui-surface-2,#2f3545);border-bottom:1px solid var(--ui-border,#4a5570);}.fp-tab{position:relative;padding:7px 12px;cursor:pointer;background:none;border:none;color:var(--ui-dim,#9aa3b0);border-bottom:2px solid transparent;display:flex;align-items:center;}.fp-tab:hover{color:var(--ui-text,#e8e8ea);}.fp-tab.sel{color:var(--accent,#2680eb);border-bottom-color:var(--accent,#2680eb);}.fp-ic{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;}.fp-tab-badge{position:absolute;top:4px;right:6px;width:8px;height:8px;border-radius:50%;background:var(--ui-error,#e5484d);}.fp-body{padding:12px;}.fp-row{display:flex;align-items:center;gap:8px;margin-bottom:8px;}.fp-row .lbl{width:120px;opacity:.75;font-size:12px;}.fp-row input{flex:1;padding:4px;background:var(--ui-surface-2,#2f3545);color:var(--ui-text,#e8e8ea);border:1px solid var(--ui-border,#4a5570);border-radius:3px;}.fp-btn{padding:5px 10px;background:var(--accent,#2680eb);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:12px;}.fp-alm{display:flex;align-items:center;gap:8px;margin-bottom:6px;}.fp-chip{width:12px;height:12px;border-radius:50%;background:var(--ui-ok,#30a46c);}.fp-alm.active .fp-chip{background:var(--ui-error,#e5484d);}.fp-alm .nm{width:60px;font-size:12px;}.pv-big{font-size:34px;font-weight:700;}.fp-sec{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em;color:var(--accent,#2680eb);margin:12px 0 6px;border-bottom:1px solid var(--ui-border,#4a5570);padding-bottom:3px;}.fp-mrow{display:flex;align-items:center;gap:8px;margin-bottom:5px;}.fp-mrow .mnm{width:44px;font-size:12px;opacity:.8;}.fp-mrow .mh{flex:1;text-align:center;font-size:10px;opacity:.6;text-transform:uppercase;}.fp-mrow.head{margin-bottom:6px;}.fp-mrow input.mnum{flex:1;width:0;padding:4px;background:var(--ui-surface-2,#2f3545);color:var(--ui-text,#e8e8ea);border:1px solid var(--ui-border,#4a5570);border-radius:3px;font-size:12px;}.fp-chk{display:flex;align-items:center;gap:6px;font-size:12px;margin:6px 0;cursor:pointer;}.qual{font-weight:700;font-size:12px;}.qual.good{color:var(--ui-ok,#30a46c);}.qual.unc{color:var(--ui-warn,#f6b73c);}.qual.bad{color:var(--ui-error,#e5484d);}.hidden{display:none!important;}",
22
+ "script": "\nfunction ppResolve(instance,field){ try{ return window.IOB.resolvePlantPaxField(instance.type,instance.root,field); }catch(e){ return null; } }\nfunction ppSubscribe(instance,field,onVal){\n const id=ppResolve(instance,field); if(!id) return;\n instance.__ppSubs=instance.__ppSubs||[];\n const cb=(_i,s)=>{ onVal(s&&s.val); try{instance._bindingsRefresh&&instance._bindingsRefresh();}catch(e){} };\n try{ window.IOB.getState(id).then(function(s){ onVal(s&&s.val); try{instance._bindingsRefresh&&instance._bindingsRefresh();}catch(e){} }).catch(function(){}); }catch(e){}\n try{ window.IOB.subscribeState(id,cb); instance.__ppSubs.push([id,cb]); }catch(e){}\n}\nfunction ppCleanup(instance){\n for(const pair of (instance.__ppSubs||[])){ try{ window.IOB.unsubscribeState(pair[0],pair[1]); }catch(e){} }\n instance.__ppSubs=[];\n}\nasync function ppWrite(instance,field,val,action){\n const id=ppResolve(instance,field); if(!id) return;\n try{ await window.IOB.secWriteState(id,val,{action:action,element:instance}); }catch(e){ console.warn('[plantpax] write failed',field,e); }\n}\n\nexport function init(instance){\n if(!instance || typeof instance._getDomElement!=='function' || typeof instance._getDomElements!=='function') return;\n instance.pv=null; instance.pvBad=false; instance.pvUncertain=false; instance.substActive=false;\n instance.anyAlarm=false;\n const ALM=[\"hiHiAlarm\", \"hiAlarm\", \"loAlarm\", \"loLoAlarm\", \"failAlarm\"];\n const recomputeAlm=function(){ let any=false; for(const a of ALM){ if(instance[a]===true||instance[a]==='true'||instance[a]===1){ any=true; break; } } instance.anyAlarm=any; try{ instance._bindingsRefresh&&instance._bindingsRefresh(); }catch(e){} };\n const subs=[\"pv\", \"pvBad\", \"pvUncertain\", \"substActive\", \"valInpPV\", \"hiHiLim\", \"hiHiDB\", \"hiLim\", \"hiDB\", \"loLim\", \"loDB\", \"loLoLim\", \"loLoDB\", \"inpRawMax\", \"inpRawMin\", \"pvEuMax\", \"pvEuMin\", \"filtTC\", \"noSubstPV\", \"hiHiAlarm\", \"hiAlarm\", \"loAlarm\", \"loLoAlarm\", \"failAlarm\"];\n for(const f of subs){ (function(field){ ppSubscribe(instance,field,function(v){\n if(field==='pvBad'||field==='pvUncertain'||field==='substActive'){ instance[field]=(v===true||v==='true'||v===1); }\n else { instance[field]=v; }\n if(field==='pv') instance.pv=v;\n if(ALM.indexOf(field)>=0){ instance[field]=(v===true||v==='true'||v===1); recomputeAlm(); }\n }); })(f); }\n // reflect boolean checkbox states from live values\n const setChecks=function(){ for(const cb of instance._getDomElements('[data-fieldb]')){ const f=cb.getAttribute('data-fieldb'); cb.checked=(instance[f]===true||instance[f]==='true'||instance[f]===1); } };\n instance._tab=function(name){\n for(const p of instance._getDomElements('[data-pane]')) p.classList.toggle('hidden', p.getAttribute('data-pane')!==name);\n for(const t of instance._getDomElements('.fp-tab')) t.classList.toggle('sel', t.getAttribute('data-tab')===name);\n if(name==='Engineering') setChecks();\n };\n // switch to the Advanced icon-strip (Engineering/HMI/Faults) and back to Main\n instance._adv=function(){\n for(const g of instance._getDomElements('[data-group]')) g.classList.toggle('hidden', g.getAttribute('data-group')!=='advanced');\n instance._tab('Engineering');\n };\n instance._main=function(){\n for(const g of instance._getDomElements('[data-group]')) g.classList.toggle('hidden', g.getAttribute('data-group')!=='main');\n instance._tab('Operator');\n };\n instance._tab('Operator');\n // wire the nested components: pass instance root/type then (re)start their subscriptions\n (function(){ for(const cid of ['lbar','spark','sparkbig']){ const c=instance._getDomElement(cid); if(c){ c.root=instance.root; c.type=instance.type; c.unit=instance.unit;\n if(typeof c._ppReinit==='function'){ c._ppReinit(); } else { (function(cc){ setTimeout(function(){ cc._ppReinit&&cc._ppReinit(); },200); })(c); } } } })();\n const can=function(action){ return (window.IOB && typeof window.IOB.secCan==='function') ? window.IOB.secCan(action,instance) : true; };\n const gate=function(){\n const cfg=can('configure'), mnt=can('maintenance'), ack=can('ackAlarm');\n for(const i of instance._getDomElements('[data-field],[data-fieldb]')) i.disabled=!cfg;\n for(const b of instance._getDomElements('[data-subst]')) b.classList.toggle('hidden',!mnt);\n for(const b of instance._getDomElements('[data-ack],[data-ackall]')) b.classList.toggle('hidden',!ack);\n for(const i of instance._getDomElements('.fp-mrow input')) i.disabled=!mnt;\n };\n gate();\n try{ window.IOB && window.IOB.securityChanged && window.IOB.securityChanged.on && window.IOB.securityChanged.on(gate); }catch(e){}\n // numeric config writes\n for(const i of instance._getDomElements('[data-field]')){\n (function(inp){ inp.addEventListener('change',function(){ ppWrite(instance,inp.getAttribute('data-field'),Number(inp.value),'configure'); }); })(i);\n }\n // boolean checkbox writes\n for(const cb of instance._getDomElements('[data-fieldb]')){\n (function(box){ box.addEventListener('change',function(){ ppWrite(instance,box.getAttribute('data-fieldb'),box.checked,'configure'); }); })(cb);\n }\n // substitute PV source toggle (maintenance)\n for(const b of instance._getDomElements('[data-subst]')){\n b.addEventListener('click',function(){ if(instance.substActive){ ppWrite(instance,'cmdInpPV',1,'maintenance'); } else { ppWrite(instance,'cmdSubstPV',1,'maintenance'); } });\n }\n // alarm ack\n const ackMap={\"HiHi\": \"hiHiAck\", \"Hi\": \"hiAck\", \"Lo\": \"loAck\", \"LoLo\": \"loLoAck\", \"Fail\": \"failAck\"};\n for(const b of instance._getDomElements('[data-ack]')){\n (function(btn){ btn.addEventListener('click',function(){ const nm=btn.closest('.fp-alm').querySelector('.nm').textContent; ppWrite(instance,ackMap[nm]||btn.getAttribute('data-ack'),1,'ackAlarm'); }); })(b);\n }\n for(const b of instance._getDomElements('[data-ackall]')){\n b.addEventListener('click',function(){ for(const k in ackMap) ppWrite(instance,ackMap[k],1,'ackAlarm'); });\n }\n}\nexport function disconnectedCallback(instance){ ppCleanup(instance); }\n"
23
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "properties": {
3
+ "root": {
4
+ "type": "signal",
5
+ "default": ""
6
+ },
7
+ "type": {
8
+ "type": "string",
9
+ "default": "P_AIn"
10
+ },
11
+ "unit": {
12
+ "type": "string",
13
+ "default": ""
14
+ }
15
+ },
16
+ "settings": {
17
+ "width": "96px",
18
+ "height": "48px"
19
+ },
20
+ "html": "<div id=\"sym\" class=\"pp-sym\" @click=\"[[window.IOB.openFaceplate(this.type,this.root)]]\"><span class=\"pp-pv\">[[this.pv==null?'--':this.pv]]</span><span class=\"pp-unit\">[[this.unit||'']]</span><span class=\"pp-badge\" css:display=\"[[this.unacked?'':'none']]\"></span></div>",
21
+ "style": ":host{display:block;width:100%;height:100%;font-family:'Segoe UI',sans-serif;}.pp-sym{position:relative;display:flex;align-items:baseline;gap:4px;justify-content:center;height:100%;box-sizing:border-box;padding:4px 8px;border-radius:4px;cursor:pointer;background:var(--pp-bg,var(--ui-surface-2,#2f3545));color:var(--ui-text,#e8e8ea);border:1px solid var(--ui-border,#4a5570);}.pp-pv{font-size:18px;font-weight:700;}.pp-unit{font-size:11px;opacity:.7;}.pp-badge{position:absolute;top:2px;right:2px;width:8px;height:8px;border-radius:50%;background:var(--ui-warn,#f6b73c);}",
22
+ "script": "\nfunction ppResolve(instance,field){ try{ return window.IOB.resolvePlantPaxField(instance.type,instance.root,field); }catch(e){ return null; } }\nfunction ppSubscribe(instance,field,onVal){\n const id=ppResolve(instance,field); if(!id) return;\n instance.__ppSubs=instance.__ppSubs||[];\n const cb=(_i,s)=>{ onVal(s&&s.val); try{instance._bindingsRefresh&&instance._bindingsRefresh();}catch(e){} };\n try{ window.IOB.getState(id).then(function(s){ onVal(s&&s.val); try{instance._bindingsRefresh&&instance._bindingsRefresh();}catch(e){} }).catch(function(){}); }catch(e){}\n try{ window.IOB.subscribeState(id,cb); instance.__ppSubs.push([id,cb]); }catch(e){}\n}\nfunction ppCleanup(instance){\n for(const pair of (instance.__ppSubs||[])){ try{ window.IOB.unsubscribeState(pair[0],pair[1]); }catch(e){} }\n instance.__ppSubs=[];\n}\nasync function ppWrite(instance,field,val,action){\n const id=ppResolve(instance,field); if(!id) return;\n try{ await window.IOB.secWriteState(id,val,{action:action,element:instance}); }catch(e){ console.warn('[plantpax] write failed',field,e); }\n}\n\nexport function init(instance){\n if(!instance || typeof instance._getDomElement!=='function' || typeof instance._getDomElements!=='function') return;\n instance.pv=null; instance.unacked=0; instance.__alm={};\n ppSubscribe(instance,'pv',function(v){ instance.pv=v; });\n const alarms=[\"hiHiAlarm\", \"hiAlarm\", \"loAlarm\", \"loLoAlarm\", \"failAlarm\"];\n for(const a of alarms){ (function(name){ ppSubscribe(instance,name,function(v){ instance.__alm[name]=(v===true||v==='true'||v===1); ppSymColor(instance); }); })(a); }\n}\nfunction ppSymColor(instance){\n const A=instance.__alm||{};\n const hi2=A.hiHiAlarm||A.loLoAlarm, hi1=A.hiAlarm||A.loAlarm, fail=A.failAlarm;\n const el=instance._getDomElement('sym');\n const c=(hi2||fail)?'var(--ui-error,#e5484d)':(hi1?'var(--ui-warn,#f6b73c)':'var(--ui-ok,#30a46c)');\n if(el) el.style.setProperty('--pp-bg', c);\n instance.unacked=(hi2||hi1||fail)?1:0;\n try{ instance._bindingsRefresh&&instance._bindingsRefresh(); }catch(e){}\n}\nexport function disconnectedCallback(instance){ ppCleanup(instance); }\n"
23
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "properties": {
3
+ "root": {
4
+ "type": "string",
5
+ "default": ""
6
+ },
7
+ "type": {
8
+ "type": "string",
9
+ "default": "P_AIn"
10
+ },
11
+ "unit": {
12
+ "type": "string",
13
+ "default": ""
14
+ },
15
+ "decimals": {
16
+ "type": "number",
17
+ "default": 2
18
+ }
19
+ },
20
+ "settings": {
21
+ "width": "280px",
22
+ "height": "70px"
23
+ },
24
+ "html": "<div id=\"lb\" class=\"lb\"><div class=\"lb-head\"><span id=\"pvtext\" class=\"lb-pv\">--</span><span id=\"euunit\" class=\"lb-eu\"></span></div><div id=\"scale\" class=\"lb-scale\"><div id=\"fill\" class=\"lb-fill\"></div><div id=\"mk-lolo\" class=\"lb-mk lolo\"><span>LL</span></div><div id=\"mk-lo\" class=\"lb-mk lo\"><span>L</span></div><div id=\"mk-hi\" class=\"lb-mk hi\"><span>H</span></div><div id=\"mk-hihi\" class=\"lb-mk hihi\"><span>HH</span></div><div id=\"ptr\" class=\"lb-ptr\"></div></div><div class=\"lb-axis\"><span id=\"axmin\">0</span><span id=\"axmax\">100</span></div></div>",
25
+ "style": ":host{display:block;width:100%;font-family:'Segoe UI',sans-serif;color:var(--ui-text,#e8e8ea);}.lb{display:flex;flex-direction:column;gap:4px;padding:4px 2px;}.lb-head{display:flex;align-items:baseline;gap:6px;}.lb-pv{font-size:26px;font-weight:700;line-height:1;}.lb-eu{font-size:12px;opacity:.65;}.lb-scale{position:relative;height:22px;border-radius:4px;background:var(--ui-surface-2,#2f3545);border:1px solid var(--ui-border,#4a5570);overflow:visible;}.lb-fill{position:absolute;left:0;top:0;bottom:0;width:0%;border-radius:4px 0 0 4px;background:var(--lb-col,var(--ui-ok,#30a46c));transition:width .25s,background .25s;}.lb-mk{position:absolute;top:-3px;bottom:-3px;width:2px;left:0%;transform:translateX(-1px);}.lb-mk span{position:absolute;top:-13px;left:50%;transform:translateX(-50%);font-size:8px;opacity:.8;}.lb-mk.hihi,.lb-mk.lolo{background:var(--ui-error,#e5484d);}.lb-mk.hi,.lb-mk.lo{background:var(--ui-warn,#f6b73c);}.lb-ptr{position:absolute;top:-4px;bottom:-4px;width:3px;left:0%;transform:translateX(-1.5px);background:var(--ui-text,#e8e8ea);box-shadow:0 0 3px rgba(0,0,0,.5);transition:left .25s;}.lb-axis{display:flex;justify-content:space-between;font-size:10px;opacity:.6;}.lb-mk.off{display:none;}",
26
+ "script": "\nfunction ppResolve(instance,field){ try{ return window.IOB.resolvePlantPaxField(instance.type,instance.root,field); }catch(e){ return null; } }\nfunction ppSubscribe(instance,field,onVal){\n const id=ppResolve(instance,field); if(!id) return;\n instance.__ppSubs=instance.__ppSubs||[];\n const cb=(_i,s)=>{ onVal(s&&s.val); };\n try{ window.IOB.getState(id).then(function(s){ onVal(s&&s.val); }).catch(function(){}); }catch(e){}\n try{ window.IOB.subscribeState(id,cb); instance.__ppSubs.push([id,cb]); }catch(e){}\n}\nfunction ppCleanup(instance){\n for(const pair of (instance.__ppSubs||[])){ try{ window.IOB.unsubscribeState(pair[0],pair[1]); }catch(e){} }\n instance.__ppSubs=[];\n}\nfunction ppNum(v){ v=Number(v); return isFinite(v)&&Math.abs(v)<1e30 ? v : null; }\n\nfunction lbApply(instance){\n if(typeof instance._getDomElement!=='function') return;\n const min=ppNum(instance.pvEuMin), max=ppNum(instance.pvEuMax);\n const pv=ppNum(instance.pv);\n const span=(min!=null&&max!=null&&max>min)?(max-min):null;\n const pct=(v)=>{ if(v==null||span==null) return null; return Math.max(0,Math.min(100,(v-min)/span*100)); };\n const set=(id,v,key)=>{ const el=instance._getDomElement(id); if(!el) return; const p=pct(v);\n if(p==null){ el.classList.add('off'); } else { el.classList.remove('off'); el.style.left=p+'%'; if(key) el.dataset.lim=key; } };\n // fill + pointer\n const fp=pct(pv); const fill=instance._getDomElement('fill'), ptr=instance._getDomElement('ptr');\n if(fill&&fp!=null) fill.style.width=fp+'%';\n if(ptr&&fp!=null) ptr.style.left=fp+'%';\n // limit markers (hidden when limit is unused ±inf or outside EU)\n set('mk-hihi', ppNum(instance.hiHiLim)); set('mk-hi', ppNum(instance.hiLim));\n set('mk-lo', ppNum(instance.loLim)); set('mk-lolo', ppNum(instance.loLoLim));\n // color by highest active alarm\n const A=instance.__alm||{};\n const col=(A.hiHiAlarm||A.loLoAlarm||A.failAlarm)?'var(--ui-error,#e5484d)':\n ((A.hiAlarm||A.loAlarm)?'var(--ui-warn,#f6b73c)':'var(--ui-ok,#30a46c)');\n const sc=instance._getDomElement('lb'); if(sc) sc.style.setProperty('--lb-col',col);\n // texts\n const dp=(instance.decimals!=null)?Number(instance.decimals):2;\n const pvt=instance._getDomElement('pvtext'); if(pvt) pvt.textContent=(pv==null)?'--':pv.toFixed(dp);\n const eu=instance._getDomElement('euunit'); if(eu) eu.textContent=instance.unit||'';\n const axmin=instance._getDomElement('axmin'), axmax=instance._getDomElement('axmax');\n if(axmin&&min!=null) axmin.textContent=min.toFixed(0);\n if(axmax&&max!=null) axmax.textContent=max.toFixed(0);\n}\nfunction lbStart(instance){\n ppCleanup(instance);\n instance.__alm={};\n if(!instance.root) { lbApply(instance); return; }\n const F=['pv','pvEuMin','pvEuMax','hiHiLim','hiLim','loLim','loLoLim'];\n for(const f of F){ (function(field){ ppSubscribe(instance,field,function(v){ instance[field]=v; lbApply(instance); }); })(f); }\n const AL=['hiHiAlarm','hiAlarm','loAlarm','loLoAlarm','failAlarm'];\n for(const a of AL){ (function(name){ ppSubscribe(instance,name,function(v){ instance.__alm[name]=(v===true||v==='true'||v===1); lbApply(instance); }); })(a); }\n lbApply(instance);\n}\nexport function init(instance){\n if(!instance || typeof instance._getDomElement!=='function' || typeof instance._getDomElements!=='function') return;\n // parent faceplate sets root/type then calls instance._ppReinit(); also self-start if root already set.\n instance._ppReinit=function(){ lbStart(instance); };\n lbStart(instance);\n}\nexport function disconnectedCallback(instance){ ppCleanup(instance); }\n"
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "properties": {
3
+ "root": {
4
+ "type": "string",
5
+ "default": ""
6
+ },
7
+ "type": {
8
+ "type": "string",
9
+ "default": "P_AIn"
10
+ },
11
+ "field": {
12
+ "type": "string",
13
+ "default": "pv"
14
+ },
15
+ "points": {
16
+ "type": "number",
17
+ "default": 60
18
+ }
19
+ },
20
+ "settings": {
21
+ "width": "280px",
22
+ "height": "40px"
23
+ },
24
+ "html": "<div id=\"sp\" class=\"sp\"><svg id=\"svg\" class=\"sp-svg\" preserveAspectRatio=\"none\" viewBox=\"0 0 100 30\"><polyline id=\"pl\" class=\"sp-line\" points=\"\"></polyline></svg></div>",
25
+ "style": ":host{display:block;width:100%;height:100%;}.sp{width:100%;height:100%;min-height:34px;background:var(--ui-surface-2,#2f3545);border:1px solid var(--ui-border,#4a5570);border-radius:4px;box-sizing:border-box;padding:2px;}.sp-svg{width:100%;height:100%;display:block;}.sp-line{fill:none;stroke:var(--sp-col,var(--accent,#2680eb));stroke-width:1.5;vector-effect:non-scaling-stroke;}",
26
+ "script": "\nfunction ppResolve(instance,field){ try{ return window.IOB.resolvePlantPaxField(instance.type,instance.root,field); }catch(e){ return null; } }\nfunction ppSubscribe(instance,field,onVal){\n const id=ppResolve(instance,field); if(!id) return;\n instance.__ppSubs=instance.__ppSubs||[];\n const cb=(_i,s)=>{ onVal(s&&s.val); };\n try{ window.IOB.getState(id).then(function(s){ onVal(s&&s.val); }).catch(function(){}); }catch(e){}\n try{ window.IOB.subscribeState(id,cb); instance.__ppSubs.push([id,cb]); }catch(e){}\n}\nfunction ppCleanup(instance){\n for(const pair of (instance.__ppSubs||[])){ try{ window.IOB.unsubscribeState(pair[0],pair[1]); }catch(e){} }\n instance.__ppSubs=[];\n}\nfunction ppNum(v){ v=Number(v); return isFinite(v)&&Math.abs(v)<1e30 ? v : null; }\n\nfunction spDraw(instance){\n const buf=instance.__buf||[]; if(!buf.length) return;\n const pl=instance._getDomElement('pl'); if(!pl) return;\n let lo=Math.min.apply(null,buf), hi=Math.max.apply(null,buf);\n if(hi<=lo) hi=lo+1;\n const n=buf.length, W=100, H=30;\n const pts=buf.map(function(v,i){ const x=(n<2)?0:(i/(n-1)*W); const y=H-((v-lo)/(hi-lo)*H); return x.toFixed(2)+','+y.toFixed(2); });\n pl.setAttribute('points', pts.join(' '));\n}\nfunction spStart(instance){\n ppCleanup(instance); instance.__buf=[];\n if(!instance.root) return;\n const cap=Number(instance.points)||60;\n ppSubscribe(instance,instance.field||'pv',function(v){\n v=Number(v); if(!isFinite(v)) return;\n instance.__buf.push(v); if(instance.__buf.length>cap) instance.__buf.shift();\n spDraw(instance);\n });\n}\nexport function init(instance){\n if(!instance || typeof instance._getDomElement!=='function') return;\n instance._ppReinit=function(){ spStart(instance); };\n spStart(instance);\n}\nexport function disconnectedCallback(instance){ ppCleanup(instance); }\n"
27
+ }